<?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 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.2</dtdversion>
	<name>FrontEndUsers</name>
	<version>1.0.5</version>
	<help>PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlRoaXMgbW9kdWxlIGFsbG93cyBtYW5hZ2VtZW50IGFuZCBhZG1pbmlzdHJhdGlvbiBvZiBmcm9udCBlbmQgdXNlcnMgPGk+KHVzZXJzIHdobyBoYXZlIG5vIGFkbWluIGFjY2Vzc3MpPC9pPi4gIEl0IGFsbG93cyBjcmVhdGlvbiBvZiB1c2VyIGdyb3VwcywgYW5kIHVzZXIgYWNjb3VudHMgYW5kIGFsbG93cyB1c2VycyB0byBsb2dpbiBhbmQgbG9nb3V0LiAgaXQgY2FuIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgQ3VzdG9tQ29udGVudCBtb2R1bGUgdG8gZGlzcGxheSBkaWZmZXJlbnQgY29udGVudCB0byBkaWZmZXJlbnQgdXNlcnMgb25jZSB0aGV5IGhhdmUgbG9nZ2VkIGluPC9wPgo8aDM+RmVhdHVyZXM8L2gzPgo8dWw+CjxsaT48cD5Vc2VyIGFjY291bnQgZXhwaXJhdGlvbi4gIFlvdSBjYW4gY3JlYXRlIHRlbXBvcmFyeSB1c2VyczwvcD48L2xpPgo8bGk+PHA+R3JvdXAgUHJvcGVydGllcy4gIFlvdSBjYW4gYXNrIGZvciBkaWZmZXJlbnQgaW5mb3JtYXRpb24gZnJvbSBtZW1iZXJzIG9mIGRpZmZlcmVudCBncm91cHM8L3A+PC9saT4KPGxpPjxwPkNhcGFibGUgb2YgaGFuZGxpbmcgaHVuZHJlZHMgb2YgdXNlcnM8L3A+PC9saT4KPGxpPjxwPkhhcyBhbiBleHRlbnNpdmUgQVBJIGZvciBhZGRpbmcgZnVuY3Rpb25hbGl0eTwvcD48L2xpPgo8L3VsPgo8aDM+SG93IGRvIEkgdXNlIGl0PC9oMz4KPHVsPgo8bGk+PHA+QWZ0ZXIgaW5zdGFsbGF0aW9uIHlvdSBjYW4gYWNjZXNzIGFkbWluIHBhbmVsIHRvIHRoZSBGcm9udEVuZFVzZXJzIG1vZHVsZSB1bmRlciB0aGUgJnF1b3Q7VXNlcnMgJiBnR3JvdXBzJnF1b3Q7IG1lbnUuPC9wPjwvbGk+CjxsaT4KPHA+U2Vjb25kbHksIHlvdSBzaG91bGQgZGVmaW5lIHByb3BlcnRpZXMuICBQcm9wZXJ0aWVzIGFyZSBlc3NlbnRpYWxseSBmaWVsZCBkZWZpbml0aW9ucywgaGVyZSB5b3Ugc3BlY2lmeSB0aGUgdHlwZSBvZiBpbmZvcm1hdGlvbiB5b3Ugd2FudCB0byBnYXRoZXIsIGFuZCBsaW1pdHMuIGkuZTogIE5hbWUsIEFnZSwgQ2l0eSwgU3RhdGUsIENvdW50cnksIEVtYWlsIGFkZHJlc3MsIGV0Yy48L3A+CjxwPjxiPk5vdGU6PC9iPiBZb3UgZG8gbm90IG5lZWQgdG8gZGVmaW5lIHByb3BlcnRpZXMgZm9yIHVzZXJuYW1lIGFuZCBwYXNzd29yZCwgdGhlc2Ugd2lsbCBiZSBwcm92aWRlZCBmb3IgeW91PC9iPgo8L2xpPgo8bGk+PHA+TmV4dCB5b3Ugc2hvdWxkIGNyZWF0ZSBvbmUgb3IgbW9yZSB1c2VyIGdyb3Vwcy4gIFdoZW4geW91IGNyZWF0ZSBhIGdyb3VwLCB5b3UgYXJlIGFza2VkIGZvciBhIGdyb3VwIG5hbWUsIGEgZGVzY3JpcHRpb24gYW5kIHRvIGFzc29jaWF0ZSBwcm9wZXJ0aWVzIHdpdGggdGhhdCBncm91cCwgc3BlY2lmeSB0aGUgcHJvcGVydGllcyBzb3J0IG9yZGVyLCBhbmQgd2V0aGVyIGl0IGlzIGFuIG9wdGlvbmFsLCByZXF1aXJlZCwgb3IgaGlkZGVuIGZpZWxkIDxpPihvZmYgaXMgYWxzbyB2YWxpZCk8L2k+PC9wPjwvbGk+CjxsaT48cD48Yj5Ob3RlOjwvYj4gQmVmb3JlIHByb2NlZWRpbmcsIHlvdSBzaG91bGQgZW5zdXJlIHRoYXQgdGhlIHByZWZlcmVuY2VzIGFyZSBzZXQgY29ycmVjdGx5LjwvcD48L2xpPgo8bGk+PHA+VGhpcmRseSB5b3Ugc2hvdWxkIGNyZWF0ZSBzb21lIHVzZXJzLiAgQWRkaW5nIHVzZXJzIGlzIGEgdHdvIHN0ZXAgcHJvY2Vzcy4gIFdoZW4gY3JlYXRpbmcgYSB1c2VyIHlvdSBhcmUgYXNrZWQgZm9yIHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQsIGFuZCBhbiBleHBpcnkgZGF0ZSBmb3IgdGhhdCB1c2VyLiAgWW91IHRoZW4gbXVzdCBzZWxlY3QgdGhlIGdyb3VwcyB0aGF0IHRoYXQgdXNlciBpcyBhIG1lbWJlciBvZiwgYW5kIGNsaWNrIFwnTmV4dFwnPC9wPgo8cD48ZW0+Tm90ZTogPC9lbT5UaGlzIGlzIGEgbGFib3VyIGludGVuc2l2ZSBhbmQgYm9yaW5nIHByb2Nlc3MsIGl0IGlzIGVhc2llciB0byBsZXQgdXNlcnMgcmVnaXN0ZXIgdGhlbXNlbHZlcywgYW5kIHRoZW4geW91IGNhbiBlZGl0IHRoZWlyIGdyb3VwIGluZm9ybWF0aW9uLiAgYnV0IGZvciB0ZXN0aW5nIHB1cnBvc2VzLCBwbGVhc2UgY3JlYXRlIGF0IGxlc3Qgb25lIHVzZXI8L3A+PC9saT4KPGxpPjxwPkxhc3RseSwgYWZ0ZXIgdGhlIHN5c3RlbSBoYXMgZGV0ZXJtaW5lZCBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIGZpZWxkcyB0byBiZSBwcmVzZW50ZWQgZm9yIHRoYXQgdXNlciwgeW91IGFyZSBwcmVzZW50ZWQgd2l0aCBhIGZvcm0gYXNraW5nIGZvciBhbGwgb2YgdGhlIHJlcXVpcmVkIHVzZXIgaW5mb3JtYXRpb24uICBDb21wbGV0ZSB0aGlzIGZvcm0gdG8gY29tcGxldGUgdGhlIHVzZXIgYWRkaXRpb248L3A+PC9saT4KPGxpPjxwPllvdSBhcmUgbm93IHJlYWR5IHRvIGFkZCB0aGUgZnJvbnQgZW5kIGZ1bmN0aW9uYWxpdHkgdG8geW91ciBzaXRlLiAgVGhpcyBpcyBhcyBzaW1wbGUgYXMgYWRkaW5nIHRoZSB7Y21zX21vZHVsZSBtb2R1bGU9RnJvbnRFbmRVc2Vyc30gdGFnIHRvIHlvdXIgcGFnZSBvciB0ZW1wbGF0ZTwvcD48L2xpPgo8L3VsPgo8aDM+U3VwcG9ydDwvaDM+CjxwPlRoaXMgbW9kdWxlIGRvZXMgbm90IGluY2x1ZGUgY29tbWVyY2lhbCBzdXBwb3J0LiBIb3dldmVyLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0OjwvcD4KPHVsPgo8bGk+Rm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZSwgRkFRcywgb3IgdG8gZmlsZSBhIEJ1ZyBSZXBvcnQgb3IgYnV5IGNvbW1lcmNpYWwgc3VwcG9ydCwgcGxlYXNlIHZpc2l0IGNhbGd1eVwncwptb2R1bGUgaG9tZXBhZ2UgYXQgPGEgaHJlZj0iaHR0cDovL3RlY2hjb20uZHluZG5zLm9yZyI+dGVjaGNvbS5keW5kbnMub3JnPC9hPi48L2xpPgo8bGk+QWRkaXRpb25hbCBkaXNjdXNzaW9uIG9mIHRoaXMgbW9kdWxlIG1heSBhbHNvIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0uY21zbWFkZXNpbXBsZS5vcmciPkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LjwvbGk+CjxsaT5UaGUgYXV0aG9yLCBjYWxndXkxMDAwLCBjYW4gb2Z0ZW4gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9ImlyYzovL2lyYy5mcmVlbm9kZS5uZXQvI2NtcyI+Q01TIElSQyBDaGFubmVsPC9hPi48L2xpPgo8bGk+TGFzdGx5LCB5b3UgbWF5IGhhdmUgc29tZSBzdWNjZXNzIGVtYWlsaW5nIHRoZSBhdXRob3IgZGlyZWN0bHkuPC9saT4gIAo8L3VsPgo8aDM+UGFyYW1ldGVyczwvaDM+Cjx1bD4KPGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gZm9ybT0ibmFtZSI8L2xpPgo8cD5Gb3JtczoKPHVsPgogPGxpPjxlbT5sb2dpbjwvZW0+IC0gRGlzcGxheSB0aGUgbG9naW4gZm9ybTwvbGk+CiA8bGk+PGVtPmxvZ291dDwvZW0+IC0gRGlzcGxheSB0aGUgbG9nb3V0IGZvcm08L2xpPgogPGxpPjxlbT5jaGFuZ2VzZXR0aW5nczwvZW0+IC0gRGlzcGxheSB0aGUgY2hhbmdlIHNldHRpbmdzIGZvcm08L2xpPgogPGxpPjxlbT5mb3Jnb3RwdzwvZW0+IC0gRGlzcGxheSB0aGUgZm9yZ290IHBhc3N3b3JkIGZvcm08L2xpPgo8bGk+PGVtPnNpbGVudDwvZW0+ID0gRGlzcGxheSBub3RoaW5nLCBidXQgZXhwb3J0IHByb3BlcnRpZXMgYW5kIG90aGVyIHNtYXJ0eSB2YXJpYWJsZXMgZm9yIHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXIuICBJZiBubyB1c2VyIGlzIGxvZ2dlZCBpbiwgdGhlbiBubyB2YXJpYWJsZXMgYXJlIGV4cG9ydGVkLjwvbGk+CjwvdWw+CjwvcD4KPGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gcmV0dXJudG89InBhZ2UiPC9saT4KPHA+VXNlZCB3aXRoIHRoZSBsb2dpbiwgbG9nb3V0LCBhbmQgY2hhbmdlc2V0dGluZ3MgZm9ybXMsIHRoaXMgcGFyYW1ldGVyIGNvbnRhaW5zIHRoZSBwYWdlIGlkIG9yIGFsaWFzIG9mIGEgcGFnZSB0byByZWRpcmVjdCB0bywgd2hlbiB0aGUgZm9ybSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY29tcGxldGVkPC9wPgo8L3VsPgo8cD5BcyBwZXIgdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBhcy1pcy4gUGxlYXNlIHJlYWQgdGhlIHRleHQKb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPgo8aDM+UmVxdWlyZW1lbnRzPC9oMz4KPHA+SW4gb3JkZXIgdG8gaW1wbGVtZW50IHRoZSBmb3Jnb3R0ZW4gcGFzc3dvcmQgZnVuY3Rpb25hbGl0eSwgdGhpcyBtb2R1bGUgcmVxdWlyZXMgdGhlIENNU01haWxlciBtb2R1bGUgdG8gYmUgcHJldmlvdXNseSBpbnN0YWxsZWQ8L3A+CjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDUsIFJvYmVydCBDYW1wYmVsIDxhIGhyZWY9Im1haWx0bzpjYWxndXkxMDAwQGhvdG1haWwuY29tIj4mbHQ7Y2FsZ3V5MTAwMEBob3RtYWlsLmNvbSZndDs8L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+CjxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIHJlbGVhc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPkdOVSBQdWJsaWMgTGljZW5zZTwvYT4uIFlvdSBtdXN0IGFncmVlIHRvIHRoaXMgbGljZW5zZSBiZWZvcmUgdXNpbmcgdGhlIG1vZHVsZS48L3A+PGgzPkRlcGVuZGVuY2llczwvaDM+PHVsPjxsaT5DTVNNYWlsZXIgPSZndDsgMS43My4zPC9saT48L3VsPjxoMz5QYXJhbWV0ZXJzPC9oMz48dWw+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gbGFuZz0iZW5fVVMiIC0gUGFyYW1ldGVyIGlzIHVzZWQgdG8gc3BlY2lmeSB3aGF0IGxhbmd1YWdlIHRvIHVzZSBmb3IgZGlzcGxheSBvbiB0aGUgZnJvbnRlbmQuIE5vdCBhbGwgbW9kdWxlcyBzdXBwb3J0IG9yIG5lZWQgdGhpcy48L2xpPjwvdWw+</help>
	<about>PGJyIC8+QXV0aG9yOiBjYWxndXkxMDAwICZsdDtjYWxndXkxMDAwQGhvdG1haWwuY29tJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuMC41PGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+PHVsPgo8bGk+MC4wLjEgLSBPY3RvYmVyLCAyMDA1IC0gSW5pdGlhbCBOUlBUIChOb3QgUmVhZHkgZm9yIFByaW1lIFRpbWUpIHJlbGVhc2U8L2xpPgo8bGk+MC4xLjAgLSBPY3RvYmVyLCAyMDA1IC0gSW5pdGlhbCByZWxlYXNlPC9saT4KPGxpPjAuMS4xIC0gT2N0b2JlciwgMjAwNSAtIEZpeGVkIGlzc3VlcyB3aXRoIHByb3BlcnRpZXM8L2xpPgo8bGk+MC4xLjIgLSBPY3RvYmVyLCAyMDA1IC0gQWRkZWQgZm9yZ290dGVuIHBhc3N3b3JkIGZ1bmN0aW9uYWxpdHk8L2xpPgo8bGk+PHA+MC4xLjMgLSBOb3ZlbWJlciwgMjAwNTwvcD4KICAgIDxwPkFkZGVkIHRoZSBhYmlsaXR5IHRvIHNwZWNpZnkgYSByZWRpcmVjdCBwYWdlIG9uIGxvZ2luLCBsb2dvdXQsIGZvcmdvdCBwYXNzd29yZCwgYW5kIGNoYW5nZSBzZXR0aW5ncywgYW5kIGFkZGVkIHRoZSByZXR1cm50byBhbmQgZm9ybSBwYXJhbWV0ZXJzIHRvIHRoZSB1c2VyIHNpZGUgb2YgdGhpbmdzLCBhbHNvIGRpZCBhIGNvdXBsZSBsZiBsaXR0bGUgY2xlYW51cHMuICBUaGlzIHZlcnNpb24gcmVxdWlyZXMgdjAuMTEgYW5kIGFib3ZlIGZvciBjZXJ0YWluLjwvcD48L2xpPgo8bGk+MC4xLjQgLSBOb3ZlbWJlciwgMjAwNSAtIFZlcnkgbWlub3IgY2hhbmdlIHdpdGggcmVzcGVjdCB0byBhIGZvcmdvdHRlbiBhbmQgbm8gbG9uZ2VyIG5lZWRlZCBmdW5jdGlvbiBjYWxsPC9saT4KPGxpPjxwPjAuMS41IC0gTm92ZW1iZXIsIDIwMDU8L3A+CiAgICA8cD5Bbm90aGVyIHZlcnkgbWlub3IgY2hhbmdlLCBhZGRlZCBzb21lIHRleHQgdG8gdGhlIFBvc3RJbnN0YWxsIG1lc3NhZ2UuPC9wPjwvbGk+CjxsaT48cD4wLjEuNiAtIEphbnVhcnksIDIwMDY8cD4KICAgIDxwPkNoYW5nZXMgdG8gdGhlIHBlcm1pc3Npb24gbW9kZWwsIGFuZCBtaW5vciBidWcgZml4ZXMgdG8gdGhlIHByZWZlcmVuY2VzLiAgQWxzbyBzb21lIHBocDUgZml4ZXMgYnV0IEkgYW0gc3VyZSB0aGF0IHRoZXJlIGFyZSBtb3JlIG91dCB0aGVyZS48L3A+PC9saT4KPGxpPjxwPjAuMS43IC0gSmFudWFyeSwgMjAwNjxwPgogICAgPHA+TWFueSB0aGFua3MgdG8gPGI+a2F0b248L2I+IGZvciBhZGRpbmcgdGhlIHRleHRhcmVhIGFuZCBkcm9wZG93biBwcm9wZXJ0eSB0eXBlcy48L3A+CiAgICA8cD5GaXhlcyB0byB0aGUgcHJvcGVydHkgYWRkaW5nIHRvIGZpeCBwcm9ibGVtcyB3aXRoIHNwYWNlcyBpbiBwcm9wZXJ0eSBuYW1lcyAod2Ugbm8gbG9uZ2VyIGxldCB0aGF0IGhhcHBlbikuPC9wPgo8L2xpPgo8bGk+PHA+MS4wLjAgLSBGZWJydWFyeSwgMjAwNjxwPgogICAgPHA+QWRkZWQgZmlsdGVyaW5nIGFuZCByb3cgbGltaXRpbmcgdG8gdGhlIGFkbWluIHBhbmVsLiBUaGlzIHdpbGwgaGF2ZSBiaWcgYmVuZWZpdHMgdG8gdGhvc2UgdGhhdCBhcmUgdXNpbmcgdGhpcyBtb2R1bGUgZm9yIGhpZ2ggdHJhZmljLCBhbmQgaGlnaCB1c2VyIHNpdGVzLjwvcD4KICAgIDxwPkFkZGVkIHNvcnRpbmcgdG8gdGhlIGFkbWluIHBhbmVsPC9wPgogICAgPHA+QWRkZWQgbWF4IGxlbmd0aCBhYmlsaXR5IHRvIHRleHQgYW5kIGVtYWlsIGZpZWxkczwvcD4KICAgIDxwPkZpeGVkIGEgc21hbGwgcHJvYmxlbSB3aXRoIHRoZSBkZWZhdWx0IGdyb3VwIG5vdCBiZWluZyBjaGVja2VkIHdoZW4gYWRkaW5nIGEgdXNlcjwvcD4KICAgIDxwPlNhdmUgZmlsdGVyIHNldHRpbmdzIGluIHByZWZlcmVuY2VzLCBhbmQgdGhlIGFjdGl2ZSB0YWIgdG9vLjwvcD4KICAgIDxwPkRlbGV0ZSB1c2VyIHByb3BlcnRpZXMgd2hlbiBhIHByb3BlcnR5IGlzIGRlbGV0ZWQgPGVtPk5vdGU8L2VtPiwgbm90IHdoZW4gaXQgaXMgZGlzYWJsZWQgaW4gdGhlIGVkaXQgZ3JvdXAgZGlhbG9nPC9wPgogICAgPHA+QWRkIGNvbmZpcm1hdGlvbiBtZXNzYWdlIGluIGVkaXQgZ3JvdXBzLjwvcD4KICAgIDxwPkFkZGVkIGEgY291cGxlIG1vcmUgY29uZmlybWF0aW9uIG1lc3NhZ2VzLjwvcD4KICAgIDxwPkFkZGVkIENTViBFeHBvcnQgb3B0aW9uPC9wPgogICAgPHA+VG9kbyAtIEFkZCBwcmVmZXJlbmNlcyBmb3IgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGZpZWxkbGVuZ3RoPC9wPgo8L2xpPgo8bGk+PHA+MS4wLjEgLSBNYXJjaCwgMjAwNjxwPgogICAgPHA+QWRkZWQgdGhlIGFiaWxpdHkgdG8gY2hlY2sgZm9yIGR1cGxpY2F0ZSBlbWFpbCBhZGRyZXNzZXM8L3A+CiAgICA8cD5GaXggcHJvYmxlbSB3aGVyZSBleHBpcnkgZGF0ZSB3YXMgYmVpbmcgbW9kaWZpZWQgd2hlbiBhZG1pbiBtb2RpZmllZCB1c2VyIHNldHRpbmdzPC9wPgogICAgPHA+QWRkIGEgY29uZmlybWF0aW9uIG1lc3NhZ2UgdG8gdGhlIHByZWZlcmVuY2VzIHN1Ym1pdCBidXR0b248L3A+CiAgICA8cD5GaXhlZCBhIG1pbm9yIGJ1ZyB3aGVuIGNvdXRpbmcgdGhlIG51bWJlciBvZiB1c2VycyBpbiBhIGdyb3VwPC9wPgogICAgPHA+Rml4ZXMgdG8gdGhlIHNpemUgb2YgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGZpZWxkcywgYW5kIG1heGxlbmd0aDwvcD4KICAgIDxwPkFkZGVkIGFkdmFuY2VkIGZpbHRlcmluZyBvbiBwcm9wZXJ0aWVzPC9wPgogICAgPHA+Q2hhbmdlcyB0byBsYWJlbGluZyBpbiBhZGQgb3IgZWRpdCB1c2VyPC9wPgogICAgPHA+Rml4ZXMgdG8gcHJvYmxlbXMgd2l0aCBpbmxpbmUgYW5kIG5vbiBpbmxpbmUgZm9ybXMsIHRoZSBwYXNzd29yZCBpcyBuZXZlciBzZW50IG9uIHRoZSBnZXQgbGluZTwvcD4KICAgIDxwPkNoYW5nZWQgdG8gcmVxdWlyZSBDTVMgMC4xMi1iZXRhMiBhdCBhIG1pbmltdW0gKGZvciBzYWZldHkgcHVycG9zZXMpPC9wPgo8L2xpPgo8bGk+PHA+MS4wLjIgLSBNYXJjaCwgMjAwNjxwPgogICAgPHA+TW9yZSBmaWVsZCBsZW5ndGggZml4ZXM8L3A+CjwvbGk+CjxsaT48cD4xLjAuMyAtIE1hcmNoLCAyMDA2PHA+CiAgICA8cD5FeHBvcnQgdG8gc21hcnR5IGFsbCBvZiB0aGUgdXNlciBwcm9wZXJ0aWVzIHdoZW4gdGhleSBhcmUgbG9nZ2VkIGluPC9wPgo8L2xpPgo8bGk+PHA+MS4wLjQgLSBNYXksIDIwMDY8cD4KICAgIDxwPkZpeGVzIHRvIHRoZSBleHBvcnQgY29kZTwvcD4KICAgIDxwPkNvZGUgY2xlYW51cCAoYWxwaGFiZXRpemUgZnVuY3Rpb25zKTwvcD4KICAgIDxwPk1pbm9yIGZpeGVzIGFuZCBlbmhhbmNlbWVudHMgKHJlY29tbWVuZGVkIGJ5IG5pbHM3MykgZm9yIGRlYWxpbmcgd2l0aCB0aGUgY2hhbmdlIHBhc3N3b3JkIHN0dWZmLjwvcD4KICAgIDxwPlJlbW92ZWQgdGhlIHJlcXVpcmVtZW50IGZvciBDTVMgMC4xMiwgYW5kIHB1dCBpdCBiYWNrIHRvIDAuMTEuMjwvcD4KICAgIDxwPkFkZGVkIHRoZSBcJ3NpbGVudFwnIGZvcm08L3A+CiAgICA8cD5DbGVhbmVkIHVwIGRhdGFiYXNlIGFjY2VzcyBzdHVmZiBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyAoaG9wZWZ1bGx5KTwvcD4KICAgIDxwPkFkZGVkIGNvcHlyaWdodCBpbmZvPC9wPgogICAgPHA+QWRkZWQgbWFjcm9zIGZvciByZWRpcmVjdG8gdG8gYSB1c2VyIHNwZWNpZmljIHBhZ2Ugb24gbG9naW4gb3IgbG9nb3V0PC9wPgogICAgPHA+VHdlYWtzIHRvIHRoZSBhZG1pbiBwcmVmZXJlbmNlcyB0YWI8L3A+CjwvbGk+CjxsaT48cD4xLjAuNSAtIE1heSwgMjAwNjxwPgogICAgPHA+Rml4ZWQgYSBwcm9ibGVtIHdpdGggZXhwaXJ5IGRhdGVzPC9wPgogICAgPHA+U3RhcnQgc3BsaXR0aW5nIHRoZSBjb2RlIHVwIGludG8gc2V2ZXJhbCBmaWxlczwvcD4KPC9saT48YnIgLz4=</about>
	<description>Manage Frontend Users</description>
	<requires>
	  <requiredname>CMSMailer</requiredname>
	  <requiredversion>1.73.3</requiredversion>
	</requires>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/FrontEndUsers.api.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKIEZyb250RW5kVXNlcnMuIEEgcGx1Z2luIGZvciBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIENvcHlyaWdodCAoYykgMjAwNC0wNSBieSBSb2JlcnQgQ2FtcGJlbGwgPHJvYkB0ZWNoY29tLmR5bmRucy5vcmc+CgogVHJhbnNsYXRpb25zOgogRnJlbmNoOiBQYXRyaWNpYSBCcnVuLCBodHRwOi8vd3d3LmJydW1hbHNvbHN0aWNlLmNvbQogTm9yd2VnaWFuIChib2ttP2wpOiBSb2dlciAiU3RpZ21hIiBLbnV0c2VuIDxzdGlnbWFzdGVyQGdtYWlsLmNvbT4KCiBDTVMtIENNUyBNYWRlIFNpbXBsZSBpcyBDb3B5cmlnaHQgKGMpIFRlZCBLdWxwICh3aXNoeUB1c2Vycy5zZi5uZXQpCiBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwoKIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCgogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQoqLwoKcmVxdWlyZV9vbmNlKCAiVXNlck1hbmlwdWxhdG9yLmNsYXNzLnBocCIgKTsKCmNsYXNzIEZyb250RW5kVXNlcnNNYW5pcHVsYXRvciBleHRlbmRzIFVzZXJNYW5pcHVsYXRvcgp7CiAgZnVuY3Rpb24gQ291bnRUZW1wQ29kZVJlY29yZHMoKQogIHsKICAgICRkYiA9ICR0aGlzLT5HZXREQigpOwogICAgJHEgPSAiU0VMRUNUIENPVU5UKCopIEFTIGNvdW50IEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3RlbXBjb2RlIjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEgKTsKICAgIGlmKCAhJGRicmVzdWx0ICkKICAgICAgewoJcmV0dXJuIDA7CiAgICAgIH0KICAgICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7CiAgICByZXR1cm4gJHJvd1snY291bnQnXTsKICB9CgogIGZ1bmN0aW9uIEV4cGlyZVRlbXBDb2RlcygkZXhwaXJ5Y29kZSkKICB7CiAgICAkZGIgPSYgJHRoaXMtPkdldERiKCk7CiAgICAkZXhwaXJlcyA9IHN0cnRvdGltZSggJGV4cGlyeWNvZGUgKTsKICAgICRxID0gIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc190ZW1wY29kZQogICAgICAgICAgV0hFUkUgY3JlYXRlZCA+ID8iOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICRleHBpcmVzICkgKTsKICAgIGlmKCAhJGRicmVzdWx0ICkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRydWU7ICAgIAogIH0KCiAgZnVuY3Rpb24gUmVtb3ZlVXNlclRlbXBDb2RlKCAkdWlkICkKICB7CiAgICAkZGIgPSYgJHRoaXMtPkdldERiKCk7CiAgICAkcSA9ICJERUxFVEUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfdGVtcGNvZGUKICAgICAgICAgIFdIRVJFIHVzZXJpZCA9ID8iOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICR1aWQgKSApOwogICAgaWYoICEkZGJyZXN1bHQgKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgoKICBmdW5jdGlvbiBHZXRVc2VyVGVtcENvZGUoICR1aWQgKQogIHsKICAgICRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKICAgICRxID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3RlbXBjb2RlCiAgICAgICAgICBXSEVSRSB1c2VyaWQgPSA/IjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkdWlkICkpOwogICAgaWYoICRkYnJlc3VsdCA9PSBGQUxTRSB8fCAkZGJyZXN1bHQtPlJvd0NvdW50KCkgPT0gMCApCiAgICAgIHsKCXJldHVybiBhcnJheShGQUxTRSwkZGItPkVycm9yTXNnKCkpOwogICAgICB9CiAgICAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpOwogICAgcmV0dXJuIGFycmF5KFRSVUUsJHJvdyk7CiAgfQoKCiAgZnVuY3Rpb24gU2V0VXNlclRlbXBDb2RlKCAkdWlkLCAkY29kZSApCiAgewogICAgJGRiID0mICR0aGlzLT5HZXREYigpOwogICAgJHEgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3RlbXBjb2RlCiAgICAgICAgICBWQUxVRVMoPyw/LD8pIjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkdWlkLCAkY29kZSwKCQkJCQkgJGRiLT5EQlRpbWVTdGFtcCh0aW1lKCkpKSApOwogICAgaWYoICRkYnJlc3VsdCA9PSBmYWxzZSApCiAgICAgIHsKCXJldHVybiBmYWxzZTsKICAgICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKCiAgZnVuY3Rpb24gU2V0UHJvcGVydHlEZWZuKCAkbmFtZSwgJG5ld25hbWUsICRwcm9tcHQsICRsZW5ndGgsICR0eXBlLCAkbWF4bGVuZ3RoID0gMCApCiAgewogICAgJGRiID0gJHRoaXMtPmdldERiKCk7CiAgICAKICAgIGlmKCAkbWF4bGVuZ3RoID09IDAgKQogICAgICB7CgkkbWF4bGVuZ3RoID0gJGxlbmd0aDsKICAgICAgfQogICAgJHEgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19wcm9wZGVmbgogICAgICAgICAgU0VUIG5hbWUgPSA/LCBwcm9tcHQgPSA/LCB0eXBlID0gPywgbGVuZ3RoID0gPywgbWF4bGVuZ3RoID0gPyAKICAgICAgICAgIFdIRVJFIG5hbWUgPSA/IjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkbmV3bmFtZSwgJHByb21wdCwgJHR5cGUsICRsZW5ndGgsICRtYXhsZW5ndGgsICRuYW1lICkpOwogICAgaWYoICEkZGJyZXN1bHQgKQogICAgICB7CglyZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCgogIGZ1bmN0aW9uIERlbGV0ZVByb3BlcnR5RGVmbiggJG5hbWUgKQogIHsKICAgICRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKCiAgICAkcSA9ICJERUxFVEUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfcHJvcGRlZm4KICAgICAgICAgIFdIRVJFIG5hbWU9PyI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggJG5hbWUgKSApOwogICAgaWYoICEkZGJyZXN1bHQgKQogICAgICB7CglyZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KCgogIGZ1bmN0aW9uIEdldFByb3BlcnR5R3JvdXBSZWxhdGlvbnMoICR0aXRsZSApCiAgewogICAgJGRiID0mICR0aGlzLT5HZXREYigpOwoKICAgICRxID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2dyb3VwcHJvcG1hcAogICAgICAgICAgV0hFUkUgbmFtZSA9ID8gT1JERVIgQlkgc29ydF9rZXkgREVTQyI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggJHRpdGxlICkgKTsKICAgIGlmKCAhJGRicmVzdWx0ICkKICAgICAgewoJcmV0dXJuIGFycmF5KEZBTFNFLCRkYi0+RXJyb3JNc2coKSk7CiAgICAgIH0KICAgICRyZXN1bHQgPSBhcnJheSgpOwogICAgd2hpbGUoICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkgKQogICAgICB7CglhcnJheV9wdXNoKCAkcmVzdWx0LCAkcm93ICk7CiAgICAgIH0KICAgIHJldHVybiAkcmVzdWx0OwogIH0KCgogIGZ1bmN0aW9uIElzQWNjb3VudEV4cGlyZWQoICR1aWQgKQogIHsKICAgICRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKICAgIAogICAgJHEgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfdXNlcnMKICAgICAgICAgIFdIRVJFIGlkID0gPyBBTkQgZXhwaXJlcyA+ID8iOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICR1aWQsIAoJCQkJCSAkZGItPkRiVGltZVN0YW1wKHRpbWUoKSkgKSApOwogICAgaWYoICRkYnJlc3VsdCAmJiAkZGJyZXN1bHQtPlJvd0NvdW50KCkgPT0gMSApCiAgICAgIHsKCXJldHVybiBmYWxzZTsKICAgICAgfQoKICAgIHJldHVybiB0cnVlOwogIH0KCgogIGZ1bmN0aW9uIEdldEdyb3VwUHJvcGVydHlSZWxhdGlvbnMoICRncnBpZCApCiAgewogICAgJGRiID0mICR0aGlzLT5HZXREYigpOwoKICAgICRxID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2dyb3VwcHJvcG1hcAogICAgICAgICAgV0hFUkUgZ3JvdXBfaWQgPSA/IE9SREVSIEJZIHNvcnRfa2V5IERFU0MiOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICRncnBpZCApKTsKICAgIGlmKCAhJGRicmVzdWx0ICkKICAgICAgewoJcmV0dXJuIGFycmF5KEZBTFNFLCRkYi0+RXJyb3JNc2coKSk7CiAgICAgIH0KICAgICRyZXN1bHQgPSBhcnJheSgpOwogICAgd2hpbGUoICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkgKQogICAgICB7CgkkcmVzdWx0W10gPSAkcm93OwogICAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKICB9CgoKICBmdW5jdGlvbiBBZGRHcm91cFByb3BlcnR5UmVsYXRpb24oICRncnBpZCwgJHByb3BuYW1lLCAkc29ydGtleSwgJHZhbCApCiAgewogICAgJGRiID0mICR0aGlzLT5HZXREYigpOwoKICAgICRxID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19ncm91cHByb3BtYXAKICAgICAgICAgIFZBTFVFUyg/LD8sPyw/KSI7IAogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICRwcm9wbmFtZSwgJGdycGlkLCAkc29ydGtleSwgJHZhbCApKTsKICAgIGlmKCAhJGRicmVzdWx0ICkKICAgICAgewoJcmV0dXJuIGFycmF5KEZBTFNFLCRkYi0+RXJyb3JNc2coKSk7CiAgICAgIH0KICAgIHJldHVybiBhcnJheShUUlVFKTsKICB9CgoKICBmdW5jdGlvbiBEZWxldGVBbGxHcm91cFByb3BlcnR5UmVsYXRpb25zKCAkZ3JwaWQgKQogIHsKICAgICRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKICAgIAogICAgJHEgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2dyb3VwcHJvcG1hcAogICAgICAgICAgV0hFUkUgZ3JvdXBfaWQgPSA/IjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkZ3JwaWQgKSk7CiAgICBpZiggISRkYnJlc3VsdCApCiAgICAgIHsKCXJldHVybiBhcnJheShGQUxTRSwkZGItPkVycm9yTXNnKCkpOwogICAgICB9CiAgICByZXR1cm4gYXJyYXkoVFJVRSk7CiAgfQoKCiAgZnVuY3Rpb24gRGVsZXRlR3JvdXBQcm9wZXJ0eVJlbGF0aW9uKCAkZ3JwaWQsICRwcm9wbmFtZSApCiAgewogICAgJGRiID0mICR0aGlzLT5HZXREYigpOwoKICAgICRxID0gIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19ncm91cHByb3BtYXAKICAgICAgICAgIFdIRVJFIG5hbWUgPSA/IEFORCBncm91cF9pZCA9ID8iOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICRwcm9wbmFtZSwgJGdycGlkICkpOwogICAgaWYoICEkZGJyZXN1bHQgKQogICAgICB7CglyZXR1cm4gYXJyYXkoRkFMU0UsJGRiLT5FcnJvck1zZygpKTsKICAgICAgfQogICAgcmV0dXJuIGFycmF5KFRSVUUpOwogIH0KCgogIGZ1bmN0aW9uIEFkZFByb3BlcnR5RGVmbiggJG5hbWUsICRwcm9tcHQsICR0eXBlLCAkbGVuZ3RoLCAkbWF4bGVuZ3RoID0gMCApCiAgewogICAgJGRiID0mICR0aGlzLT5HZXREYigpOwoKICAgIGlmKCAkbWF4bGVuZ3RoID09IDAgKQogICAgICB7CgkkbWF4bGVuZ3RoID09ICRsZW5ndGg7CiAgICAgIH0KCiAgICAkcCA9IGFycmF5KCAkbmFtZSwgJHByb21wdCwgJHR5cGUsICRsZW5ndGgsICRtYXhsZW5ndGggKTsKICAgICRxID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19wcm9wZGVmbgogICAgICAgICAgVkFMVUVTICg/LD8sPyw/LD8pIjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsICRwICk7CiAgICBpZiggJGRicmVzdWx0ID09IGZhbHNlICkKICAgICAgewoJcmV0dXJuIGFycmF5KEZBTFNFLCAkZGItPkVycm9yTXNnKCkpOwogICAgICB9CiAgICByZXR1cm4gYXJyYXkoVFJVRSk7CiAgfQoKCiAgZnVuY3Rpb24gQWRkU2VsZWN0T3B0aW9ucyggJG5hbWUsICRvcHRpb25zICkKICB7CiAgICAkZGIgPSYgJHRoaXMtPkdldERiKCk7CiAgICAkaW5zZXJ0X3ZhbHMgPSAnJzsKICAgICRvcmRlcl9pZCA9IDA7CiAgICBmb3JlYWNoICgkb3B0aW9ucyBhcyAkb3B0dGV4dCl7CiAgICAgIC8vIGlmIG5vIGFjdHVhbCB0ZXh0IGluIHRoZSBsaW5lLCBtYWtlIHN1cmUgaXQgZXF1YWxzICcnLAogICAgICAvLyBpbiBvcmRlciBub3QgdG8gYWRkIGl0IHRvIHRoZSBkYgogICAgICAkb3B0dGV4dCA9IHRyaW0oJG9wdHRleHQpOwogICAgICBpZih0cmltKCRvcHR0ZXh0KSA9PSAnJyB8fCB0cmltKCRvcHR0ZXh0KSA9PSAnX18nICl7Cgljb250aW51ZTsKICAgICAgfQogICAgICAkb3B0bmFtZSA9IHN0cl9yZXBsYWNlKCcgJywgJ18nLCAkb3B0dGV4dCk7CiAgICAgICRvcmRlcl9pZCsrOwogICAgICAkaW5zZXJ0X3ZhbHMgLj0gIignIgoJLiAkb3JkZXJfaWQgLiAiJywgJyIKCS4gJG9wdG5hbWUgLiAiJywgJyIKCS4gJG9wdHRleHQgLiAiJywgJyIKCS4gJG5hbWUuICInKSwgIjsKICAgIH0KICAgIAogICAgJGluc2VydF92YWxzID0gc3Vic3RyKCRpbnNlcnRfdmFscywgMCwgLTIpOwoKICAgICRkYiA9ICR0aGlzLT5nZXREYigpOwogICAgJHF1ZXJ5ID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19kcm9wZG93bnMKCQkJKG9yZGVyX2lkLCBvcHRpb25fbmFtZSwgb3B0aW9uX3RleHQsIGNvbnRyb2xfbmFtZSkgCgkJCVZBTFVFUyAiIC4gJGluc2VydF92YWxzOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSk7CiAgICBpZiggJGRicmVzdWx0ID09IGZhbHNlICkgewogICAgICByZXR1cm4gYXJyYXkoRkFMU0UsICRkYi0+RXJyb3JNc2coKSk7CiAgICB9CiAgICByZXR1cm4gYXJyYXkoVFJVRSk7CiAgfQoJCQoKICAKICAKICBmdW5jdGlvbiBEZWxldGVQcm9wZXJ0eURlZm5zKCkKICB7CiAgICAkZGIgPSYgJHRoaXMtPkdldERiKCk7CiAgICAkcSA9ICJERUxFVEUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfcHJvcGRlZm4iOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSApOwogICAgaWYoICRkYnJlc3VsdCA9PSBmYWxzZSApCiAgICAgIHsKCXJldHVybiBhcnJheShGQUxTRSwkZGItPkVycm9yTXNnKCkpOwogICAgICB9CiAgICByZXR1cm4gYXJyYXkoVFJVRSk7CiAgfQoKCiAgZnVuY3Rpb24gRGVsZXRlU2VsZWN0T3B0aW9ucyggJG5hbWUgKQogIHsKICAgICRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKICAgICRxID0gIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19kcm9wZG93bnMKICAgICAgICAgIFdIRVJFIGNvbnRyb2xfbmFtZSA9ID8iOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICRuYW1lICkgKTsKICAgIGlmKCAkZGJyZXN1bHQgPT0gZmFsc2UgKQogICAgICB7CglyZXR1cm4gYXJyYXkoRkFMU0UsJGRiLT5FcnJvck1zZygpKTsKICAgICAgfQogICAgcmV0dXJuIGFycmF5KFRSVUUpOwogIH0KCgogIGZ1bmN0aW9uIEdldFByb3BlcnR5RGVmbiggJG5hbWUgKQogIHsKICAgICRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKICAgIAogICAgJHEgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfcHJvcGRlZm4KICAgICAgICAgIFdIRVJFIG5hbWUgPSA/IjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkbmFtZSApICk7CiAgICBpZiggJGRicmVzdWx0ID09IGZhbHNlICkKICAgICAgewoJcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpOwogICAgaWYoICRyb3cgKQogICAgICB7CglyZXR1cm4gJHJvdzsKICAgICAgfQogICAgZWxzZQogICAgICByZXR1cm4gRkFMU0U7CiAgfQoKICBmdW5jdGlvbiBHZXRQcm9wZXJ0eURlZm5zKCkKICB7CiAgICAkZGIgPSYgJHRoaXMtPkdldERiKCk7CiAgICAKICAgICRxID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3Byb3BkZWZuIjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEgKTsKICAgIGlmKCAkZGJyZXN1bHQgPT0gZmFsc2UgKQogICAgICB7CglyZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICRyZXQgPSBhcnJheSgpOwogICAgd2hpbGUoICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkgKQogICAgICB7CglhcnJheV9wdXNoKCAkcmV0LCAkcm93ICk7CiAgICAgIH0KICAgIHJldHVybiAkcmV0OwogIH0KCiAgLyoqCiAgICogUmV0dXJucyBzZWxlY3Qgb3B0aW9ucyBhcyBhIHNpbXBsZSBvciBhIDIgZGltZW5zaW9uYWwgYXJyYXkKICAgKgogICAqIEBwYXJhbSBTdHJpbmcgJGNvbnRyb2xuYW1lIC0gbmFtZSBvZiB0aGUgZHJvcGRvd24gYXMgaW4gdGhlIHByb3BkZWZuIHRhYmxlCiAgICogQHBhcmFtIGludCAkZGltIC0gZGltZW5zaW9uIG9mIHRoZSBhcnJheQogICAqIAlpZiAkZGltID09IDEsIHJldHVybnMgYSAxIGRpbWVuc2lvbmFsIGFycmF5IG5hbWU9PnRleHQKICAgKiAgICBpZiAkZGltID09IDIsIHJldHVybnMgYSAyIGRpbWVuc2lvbmFsIGFycmF5LCBlYWNoIGl0ZW0gYmVpbmcgYW4KICAgKiAJCWFycmF5IHdpdGggcHJvcGVydGllcyAnb3B0aW9uX25hbWUnLCAnb3B0aW9uX3RleHQnLCAnY29udHJvbF9uYW1lJy4KICAgKi8KICBmdW5jdGlvbiBHZXRTZWxlY3RPcHRpb25zKCAkY29udHJvbG5hbWUsICRkaW09MSApCiAgewoJJGRiID0mICR0aGlzLT5HZXREYigpOwoJCgkkcSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19kcm9wZG93bnMKCQlXSEVSRSBjb250cm9sX25hbWUgPSA/IE9SREVSIEJZIG9yZGVyX2lkIjsKCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCRjb250cm9sbmFtZSkgKTsKCWlmKCAkZGJyZXN1bHQgPT0gZmFsc2UgKSB7CgkJcmV0dXJuIGZhbHNlOwoJfQoJJHJldCA9IGFycmF5KCk7Cgl3aGlsZSggJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSApIHsKCQlpZiAoJGRpbT09Mil7CgkJCQlhcnJheV9wdXNoKCAkcmV0LCAkcm93ICk7CgkJfSBlbHNlIHsKCQkJCSRyZXRbJHJvd1snb3B0aW9uX25hbWUnXV0gPSAkcm93WydvcHRpb25fdGV4dCddOwoJCX0KCX0KCXJldHVybiAkcmV0OwogIH0KCiAgCiAgZnVuY3Rpb24gTG9naW4oICR1c2VybmFtZSwgJHBhc3N3b3JkICkKICB7CiAgICBpZiggISR0aGlzLT5DaGVja1Bhc3N3b3JkKCAkdXNlcm5hbWUsICRwYXNzd29yZCApICkKICAgICAgewoJJG1vZCA9ICR0aGlzLT5HZXRNb2R1bGUoKTsKCXJldHVybiBhcnJheShGQUxTRSwkbW9kLT5MYW5nKCdlcnJvcl9sb2dpbmZhaWxlZCcpKTsKICAgICAgfQoKICAgICR1aWQgPSAkdGhpcy0+R2V0VXNlcklEKCAkdXNlcm5hbWUgKTsKCiAgICBpZiggJHRoaXMtPklzQWNjb3VudEV4cGlyZWQoICR1aWQgKSApCiAgICAgIHsKCSRtb2QgPSAkdGhpcy0+R2V0TW9kdWxlKCk7CglyZXR1cm4gYXJyYXkoRkFMU0UsJG1vZC0+TGFuZygnZXJyb3JfYWNjb3VudGV4cGlyZWQnKSk7CiAgICAgIH0KCiAgICAkZGIgPSYgJHRoaXMtPkdldERiKCk7CiAgICAkcSA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfbG9nZ2VkaW4gVkFMVUVTICg/LD8sPykiOwoKICAgIC8qIHdlIG1heSBuZWVkIHRvIHN0YXJ0IGEgc2Vzc2lvbiBub3cgKi8KICAgIGlmKCBzZXNzaW9uX2lkKCkgPT0gIiIgKQogICAgICB7CiAgICAgICAgc2Vzc2lvbl9zdGFydCgpOwogICAgICB9CgogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoIHNlc3Npb25faWQoKSwgdGltZSgpLCAkdWlkICkpOwogICAgaWYoICEkZGJyZXN1bHQgKSAKICAgICAgewoJcmV0dXJuIGFycmF5KEZBTFNFLCAkZGItPkVycm9yTXNnKCkpOwogICAgICB9CiAgICByZXR1cm4gYXJyYXkoJHVpZCk7CiAgfQoKCiAgZnVuY3Rpb24gRmV1c2Vyc01hbmlwdWxhdG9yKCAkdGhlX21vZHVsZSApCiAgewogICAgcGFyZW50OjpVc2VyTWFuaXB1bGF0b3IoICR0aGVfbW9kdWxlICk7CiAgfQoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgLy8gcmV0dXJucyB0cnVlL2ZhdXNlCiAgZnVuY3Rpb24gQ2hlY2tHcm91cFBlcm1pc3Npb24oICRnaWQsICRwZXJtICkKICB7CiAgICAvLyB3ZSBhbHdheXMgaGF2ZSB0byByZXR1cm4gZmFsc2UgdXNpbmcgdGhpcyBtZWNoYW5pc20gCiAgICAvLyBiZWNhdXNlIHdlIGFyZSB1c2luZyBkaWZmZXJlbnQgdGFibGVzIHRoYW4gd2lzaHkgaXMgdXNpbmcgZm9yIAogICAgLy8gdXNlcnMgYW5kIGdyb3VwcwogICAgcmV0dXJuIGZhbHNlOwovLyAgICAgJGRiID0mICR0aGlzLT5HZXREYigpOwogICAgCi8vICAgICAkcSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJwZXJtaXNzaW9ucyBXSEVSRSBwZXJtaXNzaW9uX25hbWUgPSA/IjsKLy8gICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkcGVybSApICk7Ci8vICAgICBpZiggISRkYnJlc3VsdCB8fCAkZGJyZXN1bHQtPlJvd0NvdW50KCkgPT0gMCApIHJldHVybiBmYWxzZTsKCi8vICAgICAkcHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKTsKLy8gICAgICRxID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuImdyb3VwX3Blcm1zIFdIRVJFIHBlcm1pc3Npb25faWQgPSA/Ci8vICAgICAgICAgICBBTkQgZ3JvdXBfaWQgPSA/IjsKLy8gICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkcHJvd1sncGVybWlzc2lvbl9pZCddLCAkZ2lkICkgKTsKLy8gICAgIGlmKCAhJGRicmVzdWx0IHx8ICRkYnJlc3VsdC0+Um93Q291bnQoKSA9PSAwICkgcmV0dXJuIGZhbHNlOwoKLy8gICAgIHJldHVybiB0cnVlOwogIH0KCgogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICAvLyByZXR1cm5zIHRydWUvZmFsc2UKICBmdW5jdGlvbiBDaGVja1VzZXJQZXJtaXNzaW9uKCAkcGVybSApCiAgewogICAgJHVpZCA9ICR0aGlzLT5Mb2dnZWRJbklkKCk7CiAgICBpZiggJGlkID09IGZhbHNlICkgcmV0dXJuIGZhbHNlOwoKICAgIHJldHVybiBDaGVja1VzZXJQZXJtaXNzaW9uQnlVaWQoICR1aWQsICRwZXJtICk7CiAgfQoKCiAgZnVuY3Rpb24gQ2hlY2tVc2VyUGVybWlzc2lvbkJ5VWlkKCAkdWlkLCAkcGVybSApCiAgewogICAgLy8gd2UgYWx3YXlzIGhhdmUgdG8gcmV0dXJuIGZhbHNlIHVzaW5nIHRoaXMgbWVjaGFuaXNtIAogICAgLy8gYmVjYXVzZSB3ZSBhcmUgdXNpbmcgZGlmZmVyZW50IHRhYmxlcyB0aGFuIHdpc2h5IGlzIHVzaW5nIGZvciAKICAgIC8vIHVzZXJzIGFuZCBncm91cHMKICAgIHJldHVybiBmYWxzZTsKLy8gICAgIC8vIGlmIHRoZSB1c2VyIGJlbG9uZ3MgdG8gYSBncm91cCB0aGF0IGhhcyB0aGUgcGVybWlzc2lvbiwgd2UncmUgbGF1Z2hpbmcKLy8gICAgICRncm91cHMgPSAkdGhpcy0+R2V0TWVtYmVyR3JvdXBzQXJyYXkoICR1aWQgKTsKLy8gICAgIGlmKCAkZ3JvdXBzID09IGZhbHNlICkgcmV0dXJuIGZhbHNlOwogICAgCi8vICAgICAkZGIgPSYgJHRoaXMtPkdldERiKCk7Ci8vICAgICAkcSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJwZXJtaXNzaW9ucyBXSEVSRSBwZXJtaXNzaW9uX25hbWUgPSA/IjsKLy8gICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkcGVybSApICk7Ci8vICAgICBpZiggISRkYnJlc3VsdCB8fCAkZGJyZXN1bHQtPlJvd0NvdW50KCkgPT0gMCApIHJldHVybiBmYWxzZTsKLy8gICAgICRwcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpOwoKLy8gICAgIGZvcmVhY2goICRncm91cHMgYXMgJGdyb3VwICkKLy8gICAgIHsKLy8gICAgICAgJHEgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4iZ3JvdXBfcGVybXMgV0hFUkUgcGVybWlzc2lvbl9pZCA9ID8KLy8gICAgICAgICAgIEFORCBncm91cF9pZCA9ID8iOwovLyAgICAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggJHByb3dbJ3Blcm1pc3Npb25faWQnXSwgJGdpZCApICk7Ci8vICAgICAgIGlmKCAkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5Sb3dDb3VudCgpID4gMCApIHJldHVybiB0cnVlOyAgICAgIAovLyAgICAgfQoKLy8gICAgIHJldHVybiBmYWxzZTsKICB9CgoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgLy8gcmV0dXJucyB0cnVlL2ZhbHNlCiAgZnVuY3Rpb24gQXNzaWduVXNlclRvR3JvdXAoICR1aWQsICRnaWQgKQogIHsKICAgIC8vIHZhbGlkYXRlIHRoZSB1c2VyIGlkCiAgICBpZiggISR0aGlzLT5Vc2VyRXhpc3RzQnlJRCggJHVpZCApICkKICAgICAgewoJcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAKICAgIC8vIHZhbGlkYXRlIHRoZSBncm91cCBpZAogICAgaWYoICEkdGhpcy0+R3JvdXBFeGlzdHNCeUlEKCAkZ2lkICkgKQogICAgICB7CglyZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIAogICAgLy8gYWRkIHRoZSByZWNvcmQgdG8gdGhlIHRhYmxlIHRvIG1ha2UgdGhpcyAKICAgIC8vIHVzZXIgYSBtZW1iZXIgb2YgdGhpcyBncm91cAogICAgJGRiID0mICR0aGlzLT5HZXREYigpOwogICAgJHEgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2JlbG9uZ3MgCiAgICAgICAgICAgICAgICBWQUxVRVMgKD8sPykiOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICR1aWQsICRnaWQgKSApOwogICAgcmV0dXJuKCAkZGJyZXN1bHQgIT0gZmFsc2UgKTsKICB9CgogIAogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICAvLyByZXR1cm5zIHRydWUvZmFsc2UKICBmdW5jdGlvbiBJc1ZhbGlkUGFzc3dvcmQoICRwYXNzd29yZCApCiAgewogICAgLy8gYSBwYXNzd29yZCBpcyB2YWxpZCwgaWYgaXQncyBsZW5ndGggaXMKICAgIC8vIHdpdGhpbiBjZXJ0YWluIHJhbmdlcwogICAgJG1vZHVsZSA9ICR0aGlzLT5HZXRNb2R1bGUoKTsKICAgICRtaW5sZW4gPSAkbW9kdWxlLT5HZXRQcmVmZXJlbmNlKCdtaW5fcGFzc3dvcmRsZW5ndGgnLCA2ICk7CiAgICAkbWF4bGVuID0gJG1vZHVsZS0+R2V0UHJlZmVyZW5jZSgnbWF4X3Bhc3N3b3JkbGVuZ3RoJywgMjAgKTsKICAgICRsZW4gPSBzdHJsZW4oJHBhc3N3b3JkKTsKICAgIGlmKCAkbGVuIDwgJG1pbmxlbiApCiAgICAgIHsKCXJldHVybiBmYWxzZTsKICAgICAgfQogICAgZWxzZSBpZiggJGxlbiA+ICRtYXhsZW4gKQogICAgICB7CglyZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIAogICAgLyoKICAgIC8vIHRoZXJlIG11c3QgYmUgYXRsZWFzdCAzIHVuaXF1ZSBjaGFyYWN0ZXJzCiAgICBpZiggc3RybGVuKGNvdW50X2NoYXJzKCAkdXNlcm5hbWUsIDMgKSkgPCBtaW4oMyxtaW5sZW4pKQogICAgICB7CglyZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICovCiAgICByZXR1cm4gdHJ1ZTsKICB9CgoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgLy8gcmV0dXJucyBhbiBhcnJheQogIGZ1bmN0aW9uIERlbGV0ZVVzZXJGdWxsKCAkaWQgKQogIHsKICAgIC8vIGxvZyB0aGUgdXNlciBvdXQKICAgICR0aGlzLT5Mb2dvdXRVc2VyKCAkaWQgKTsKCiAgICAvLyBkZWxldGUgdXNlciBwcm9wZXJ0aWVzCiAgICAkdGhpcy0+RGVsZXRlQWxsVXNlclByb3BlcnRpZXNGdWxsKCAkaWQgKTsKCiAgICAvLyBkZWxldGUgdXNlciBmcm9tIGdyb3VwcwogICAgJHJldCA9ICR0aGlzLT5SZW1vdmVVc2VyRnJvbUdyb3VwKCAkaWQsICcnICk7CiAgICBpZiggJHJldFswXSA9PSBmYWxzZSApCiAgICAgIHsKCXJldHVybiAkcmV0OwogICAgICB9CgogICAgLy8gZGVsZXRlIHVzZXIgcmVjb3JkCiAgICAkZGIgPSYgJHRoaXMtPkdldERiKCk7CiAgICAkcSA9ICJERUxFVEUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfdXNlcnMKICAgICAgICAgIFdIRVJFIGlkID0gPyI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggJGlkICkgKTsKICAgIGlmKCAhJGRicmVzdWx0ICkKICAgICAgewoJcmV0dXJuIGFycmF5KCBGQUxTRTwgJGRiLT5FcnJvck1zZygpICk7CiAgICAgIH0KCiAgICAvLyBhbmQgZGVsZXRlIGFueXRoaW5nIGZyb20gdGhlIHRlbXBjb2RlcyB0YWJsZSB0b28KICAgICRxID0gIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc190ZW1wY29kZQogICAgICAgICAgV0hFUkUgdXNlcmlkID0gPyI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggJGlkICkgKTsKICAgIGlmKCAhJGRicmVzdWx0ICkKICAgICAgewoJcmV0dXJuIGFycmF5KCBGQUxTRTwgJGRiLT5FcnJvck1zZygpICk7CiAgICAgIH0KICAgIAogICAgcmV0dXJuIGFycmF5KCBUUlVFLCAiIiApOwogIH0KCgogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICAvLyByZXR1cm5zIGFuIGFycmF5CiAgZnVuY3Rpb24gR2V0R3JvdXBJbmZvKCAkZ2lkICkKICB7CiAgICAkZGIgPSYgJHRoaXMtPkdldERiKCk7CiAgICAkcSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19ncm91cHMgV0hFUkUgaWQgPSA/IjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkZ2lkICkgKTsKICAgIGlmKCAhJGRicmVzdWx0ICkKICAgICAgewoJcmV0dXJuIGFycmF5KEZBTFNFLCRkYi0+RXJyb3JNc2coKSk7CiAgICAgIH0KICAgICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7CiAgICByZXR1cm4gJHJvdzsKICB9CiAgCiAgCiAgLy8gdXNlcmlkIGFwaSBmdW5jdGlvbgogIC8vIHJldHVybnMgYW4gYXJyYXkKICAvLyBzZWNvbmQgZWxlbWVudCBvZiBhcnJheSBtYXkgYmUgYW4gYXJyYXkKICBmdW5jdGlvbiBHZXRVc2VySW5mbyggJHVpZCApCiAgewogICAgJGRiID0mICR0aGlzLT5HZXREYigpOwogICAgJHEgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfdXNlcnMKICAgICAgICAgICAgICAgIFdIRVJFIGlkID0gPyI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggJHVpZCApICk7CiAgICBpZiggISRkYnJlc3VsdCApCiAgICAgIHsKCXJldHVybiBhcnJheShGQUxTRSwkZGItPkVycm9yTXNnKCkpOwogICAgICB9CiAgICAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpOwogICAgcmV0dXJuIGFycmF5KCBUUlVFLCAkcm93ICk7CiAgfQogIAoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgLy8gcmV0dXJucyBhbiBhcnJheSBvciBmYWxzZQogIGZ1bmN0aW9uIENvdW50VXNlcnNJbkdyb3VwKCAkZ3JvdXBpZCApCiAgewogICAgJGRiID0mICR0aGlzLT5HZXREYigpOwogICAgCiAgICAkcSA9ICcnOwogICAgJHBhcm1zID0gYXJyYXkoKTsKICAgIGlmKCAkZ3JvdXBpZCA9PSAnJyB8fCAkZ3JvdXBpZCA8IDAgKQogICAgICB7CgkkcSA9ICJTRUxFQ1QgY291bnQoaWQpIGFzIG51bSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc191c2VycyI7IAogICAgICB9CiAgICBlbHNlCiAgICAgIHsKCSRxID0gIlNFTEVDVCBjb3VudChpZCkgYXMgbnVtIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3VzZXJzLCIuCgkgIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfYmVsb25ncyBXSEVSRSBpZD11c2VyaWQgQU5EIGdyb3VwaWQgPSA/IjsKCSRwYXJtc1tdID0gJGdyb3VwaWQ7CiAgICAgIH0KCiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCAkcGFybXMgKTsKICAgIGlmKCAhJGRicmVzdWx0ICkKICAgICAgewoJcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKTsKICAgIHJldHVybiAkcm93WydudW0nXTsKICB9CgogIGZ1bmN0aW9uIEdldFVzZXJzSW5Hcm91cCggJGdyb3VwaWQgPSAnJywgJHVzZXJyZWdleCA9ICcnLCAkbGltaXQgPSAnJywgJHNvcnQgPSAnJywKCQkJICAgICRwcm9wZXJ0eSA9ICcnLCAkcHJvcHJlZ2V4ID0gJycpCiAgewogICAgJGRiID0mICR0aGlzLT5HZXREYigpOwoKICAgICRwYXJtcyA9IGFycmF5KCk7CiAgICAkd2hlcmUgPSBhcnJheSgpOwogICAgJG9yZGVyc29ydCA9ICIiOwogICAgJHEgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfdXNlcnMgQSI7IAogICAgaWYoICRwcm9wZXJ0eSAhPSAnJyAmJiAkcHJvcHJlZ2V4ICE9ICcnICkKICAgICAgewoJJHEgLj0gIiwiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfcHJvcGVydGllcyBCIjsKCSR3aGVyZVtdID0gIiBBLmlkID0gQi51c2VyaWQiOwogICAgICB9CiAgICBpZiggJGdyb3VwaWQgIT0gJycgJiYgJGdyb3VwaWQgPj0gMCApCiAgICAgIHsKCSRxIC49ICIsIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2JlbG9uZ3MgQyI7Cgkkd2hlcmVbXSA9ICIgQS5pZCA9IEMudXNlcmlkIjsKCSR3aGVyZVtdID0gIiBncm91cGlkID0gPyI7CgkkcGFybXNbXSA9ICRncm91cGlkOwogICAgICB9CiAgICBpZiggJHByb3BlcnR5ICE9ICcnICYmICRwcm9wcmVnZXggIT0gJycgKQogICAgICB7Cgkkd2hlcmVbXSA9ICIgQi50aXRsZSA9ID8gYW5kIEIuZGF0YSBSRUdFWFAgPyI7CgkkcGFybXNbXSA9ICRwcm9wZXJ0eTsKCSRwYXJtc1tdID0gJHByb3ByZWdleDsKICAgICAgfQogICAgaWYoICR1c2VycmVnZXggIT0gJycgKQogICAgICB7Cgkkd2hlcmVbXSA9ICIgdXNlcm5hbWUgUkVHRVhQID8iOwoJJHBhcm1zW10gPSAkdXNlcnJlZ2V4OwogICAgICB9CiAgICBpZiggJHNvcnQgIT0gJycgKQogICAgICB7Cgkkb3JkZXJzb3J0IC49ICIgT1JERVIgQlkgJHNvcnQiOwogICAgICB9CiAgICBpZiggJGxpbWl0ICE9ICcnICYmICRsaW1pdCA+IDAgKQogICAgICB7Cgkkb3JkZXJzb3J0IC49ICIgTElNSVQgJGxpbWl0IjsgCiAgICAgIH0KCiAgICAvLyBwdXQgdGhlIHF1ZXJ5IHRvZ2V0aGVyCiAgICBpZiggY291bnQoJHdoZXJlICkgKQogICAgICB7CgkkcSAuPSAiIFdIRVJFICIgLiBpbXBsb2RlKCIgQU5EICIsJHdoZXJlKTsKICAgICAgfQogICAgJHEgLj0gJG9yZGVyc29ydDsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsICRwYXJtcyApOwogICAgaWYoICEkZGJyZXN1bHQgKQogICAgICB7CglyZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICAkcmVzdWx0ID0gYXJyYXkoKTsKICAgIHdoaWxlKCAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpICkKICAgICAgewoJYXJyYXlfcHVzaCggJHJlc3VsdCwgJHJvdyApOwogICAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKICB9CgoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgLy8gcmV0dXJucyB0cnVlL2ZhbHNlCiAgZnVuY3Rpb24gR3JvdXBFeGlzdHNCeUlEKCAkZ2lkICkKICB7CiAgICAkZGF0YSA9ICR0aGlzLT5HZXRHcm91cEluZm8oICRnaWQgKTsKICAgIHJldHVybiggJGRhdGEgIT0gZmFsc2UgKTsKICB9CgoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgLy8gcmV0dXJucyB0cnVlL2ZhbHNlCiAgZnVuY3Rpb24gR3JvdXBFeGlzdHNCeU5hbWUoICRuYW1lICkKICB7CiAgICAkZ2lkID0gJHRoaXMtPkdldEdyb3VwSUQoICRuYW1lICk7CiAgICByZXR1cm4oICRnaWQgIT0gZmFsc2UgKTsKICB9CiAgCiAgCiAgLy8gdXNlcmlkIGFwaSBmdW5jdGlvbgogIC8vIHJldHVybnMgYXJyYXkKICBmdW5jdGlvbiBJc1ZhbGlkRW1haWxBZGRyZXNzKCAkZW1haWwsICRzbXRwdmFsaWRhdGUgPSBmYWxzZSApCiAgewogICAgJG1vZHVsZSA9ICR0aGlzLT5HZXRNb2R1bGUoKTsKICAgICRyZXN1bHQgPSBhcnJheSgpOwogICAgaWYoICFlcmVnaSgiXltfYS16MC05LV0rKFwuW19hLXowLTktXSspKkBbYS16MC05LV0rKFwuW2EtejAtOS1dKykqKFwuW2Etel17MiwzfSkkIiwgJGVtYWlsICkgKQogICAgICB7CgkkcmVzdWx0WzBdID0gZmFsc2U7CgkkcmVzdWx0WzFdID0gJG1vZHVsZS0+TGFuZygnZXJyb3JfaW1wcm9wZXJlbWFpbGZvcm1hdCcpOwoJcmV0dXJuICRyZXN1bHQ7CiAgICAgIH0KCiAgICAkbW9kdWxlID0gJHRoaXMtPkdldE1vZHVsZSgpOwogICAgaWYoICEkbW9kdWxlLT5HZXRQcmVmZXJlbmNlKCdhbGxvd19kdXBsaWNhdGVfZW1haWxzJykgKQogICAgICB7CgkkZGIgPSYgJHRoaXMtPkdldERiKCk7CgkkcSA9ICJTRUxFQ1QgZGF0YSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19wcm9wZGVmbiwiLgoJICBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3Byb3BlcnRpZXMgV0hFUkUgbmFtZT10aXRsZSBBTkQKICAgICAgICAgIHR5cGU9MiBBTkQgZGF0YSBMSUtFID8iOwoJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICRlbWFpbCApICk7CglpZiggJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+Um93Q291bnQoKSApCgkgIHsKCSAgICAkcmVzdWx0WzBdID0gZmFsc2U7CgkgICAgJHJlc3VsdFsxXSA9ICRtb2R1bGUtPkxhbmcoJ2Vycm9yX2VtYWlsYWxyZWFkeXVzZWQnKTsKCSAgICByZXR1cm4gJHJlc3VsdDsKCSAgfQogICAgICB9CgogICAgaWYoICRzbXRwdmFsaWRhdGUgPT0gZmFsc2UgKQogICAgICB7CgkkcmVzdWx0WzBdID0gdHJ1ZTsKCXJldHVybiAkcmVzdWx0OwogICAgICB9CiAgICAKICAgIC8vIGdvIGFoZWFkIGFuZCB2YWxpZGF0ZSB0aGUgZW1haWwgYWRkcmVzcyBmdXJ0aGVyCiAgICBsaXN0ICggJHVuYW1lLCAkZG9tYWluICkgPSBzcGxpdCggIkAiLCAkZW1haWwgKTsKICAgIGlmKCBnZXRteHJyKCRkb21haW4sICRteGhvc3QgKSApCiAgICAgIHsKCSRjb25uZWN0YWRkcmVzcyA9ICRteGhvc3RbMF07CiAgICAgIH0KICAgIGVsc2UgCiAgICAgIHsKCSRjb25uZWN0YWRkcmVzcyA9ICRkb21haW47CiAgICAgIH0KICAgICRjb25uZWN0ID0gZnNvY2tvcGVuKCAkY29ubmVjdGFkZHJlc3MsIDI1ICk7CiAgICBpZiggJGNvbm5lY3QgKQogICAgICB7CglpZiggZXJlZygnXjIyMCcsICRvdXQgPSBmZ2V0cyggJGNvbm5lY3QsIDEwMjQgKSApICkKCSAgewoJICAgIGZwdXRzKCAkY29ubmVjdCwgIkhFTE8gJEhUVFBfSE9TVFxyXG4iKTsKCSAgICAkb3V0ID0gZmdldHMoICRjb25uZWN0LCAxMDI0ICk7CgkgICAgZnB1dHMoICRjb25uZWN0LCAiTUFJTCBGUk9NIDx7JGVtYWlsfT5cclxuIik7CgkgICAgJGZyb20gPSBmZ2V0cyggJGNvbm5lY3QsIDEwMjQgKTsKCSAgICBmcHV0cyggJGNvbm5lY3QsICJSQ1BUIFRPOiA8eyRlbWFpbH0+XHJcbiIpOwoJICAgICR0byA9IGZnZXRzKCAkY29ubmVjdCwgMTAyNCApOwoJICAgIGZwdXRzKCAkY29ubmVjdCwgIlFVSVRcclxuIik7CgkgICAgZmNsb3NlKCAkY29ubmVjdCApOwoJICAgIGlmKCAhZXJlZyggIl4yNTAiLCAkZnJvbSApIHx8ICFlcmVnKCJeMjUwIiwgJHRvKSkKCSAgICAgIHsKCQkkcmVzdWx0WzBdID0gZmFsc2U7CgkJJHJlc3VsdFsxXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9zZXJ2ZXJyZWplY3RlZGVtYWlsJyk7CgkJcmV0dXJuICRyZXN1bHQ7CgkgICAgICB9CgkgICAgZWxzZQoJICAgICAgewoJCSRyZXN1bHRbMF0gPSBmYWxzZTsKCQkkcmVzdWx0WzFdID0gJHRoaXMtPkxhbmcoJ2Vycm9yX25vcmVzcG9uc2Vmcm9tc2VydmVyJyk7CgkJcmV0dXJuICRyZXN1bHQ7CgkgICAgICB9CgkgIH0KCWVsc2UgCgkgIHsKCSAgICAkcmVzdWx0WzBdID0gZmFsc2U7CgkgICAgJHJlc3VsdFsxXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9ub3Jlc3BvbnNlZnJvbXNlcnZlcicpOwoJICAgIHJldHVybiAkcmVzdWx0OwoJICB9CiAgICAgIH0KICB9CgogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICAvLyByZXR1cm5zIHRydWUvZmFsc2UKICBmdW5jdGlvbiBJc1ZhbGlkVXNlcm5hbWUoICR1c2VybmFtZSApCiAgewogICAgLy8gYSB1c2VybmFtZSBpcyB2YWxpZCwgaWYgaXQncyBsZW5ndGggaXMKICAgIC8vIHdpdGhpbiBjZXJ0YWluIHJhbmdlcywgYW5kIGl0IGNvbnRhaW5zCiAgICAvLyBvbmx5IGFscGhhbnVtZXJpY3MKICAgICRtb2R1bGUgPSAkdGhpcy0+R2V0TW9kdWxlKCk7CiAgICAkbWlubGVuID0gJG1vZHVsZS0+R2V0UHJlZmVyZW5jZSgnbWluX3VzZXJuYW1lbGVuZ3RoJywgNCApOwogICAgJG1heGxlbiA9ICRtb2R1bGUtPkdldFByZWZlcmVuY2UoJ21heF91c2VybmFtZWxlbmd0aCcsIDIwICk7CiAgICBpZiggc3RybGVuKCAkdXNlcm5hbWUgKSA8ICRtaW5sZW4gfHwgc3RybGVuKCAkdXNlcm5hbWUgKSA+ICRtYXhsZW4gKQogICAgICB7CglyZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICBpZiggIXByZWdfbWF0Y2goICcvXlthLXpBLVowLTlfLV0qJC8nLCAkdXNlcm5hbWUgKSApCiAgICAgIHsKCXJldHVybiBmYWxzZTsKICAgICAgfQoKICAgIC8qCiAgICAvLyB0aGVyZSBtdXN0IGJlIGF0bGVhc3QgMyB1bmlxdWUgY2hhcmFjdGVycwogICAgaWYoIHN0cmxlbihjb3VudF9jaGFycyggJHVzZXJuYW1lLCAzICkpIDwgbWluKDMsbWlubGVuKSkKICAgICAgewoJcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAqLwogICAgcmV0dXJuIHRydWU7CiAgfQoKICAKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgLy8gcmV0dXJucyBhbiBhcnJheQogIGZ1bmN0aW9uIFJlbW92ZVVzZXJGcm9tR3JvdXAoICR1aWQsICRnaWQgKQogIHsKICAgICRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKICAgICRwYXJtcyA9IGFycmF5KCAkdWlkICk7CiAgICAkcSA9ICJERUxFVEUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfYmVsb25ncwogICAgICAgICAgV0hFUkUgdXNlcmlkID0gPyI7CiAgICBpZiggJGdpZCAhPSAnJyApCiAgICAgIHsKCSRxIC49ICIgQU5EIGdyb3VwaWQgPSA/IjsKCWFycmF5X3B1c2goICRwYXJtcywgJGdpZCApOwogICAgICB9CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCAkcGFybXMgKTsKICAgIGlmKCAkZGJyZXN1bHQgPT0gZmFsc2UgKQogICAgICB7CglyZXR1cm4gYXJyYXkoIEZBTFNFLCAkZGItPkVycm9yTXNnKCkgKTsKICAgICAgfQogICAgZWxzZQogICAgICB7CglyZXR1cm4gYXJyYXkoIFRSVUUgKTsKICAgICAgfQogIH0KCgogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICAvLyByZXR1cm5zIGFycmF5CiAgZnVuY3Rpb24gU2V0R3JvdXAoICRpZCwgJG5hbWUsICRkZXNjICkKICB7CiAgICBpZiggIWlzc2V0KCAkbmFtZSApIHx8ICRuYW1lID09ICcnICkKICAgICAgewoJJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlICgkaWQsICRwYXJhbXMsICRyZXR1cm5faWQsCgkJCQkgICR0aGlzLT5MYW5nICgnZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJykpOwoJcmV0dXJuOwogICAgICB9CiAgICAKICAgICRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKCiAgICAkZWlkID0gJHRoaXMtPkdldEdyb3VwSUQoICRuYW1lICk7CiAgICBpZiggJGVpZCAhPSBmYWxzZSAmJiAkZWlkICE9ICRpZCApCiAgICAgIHsKCSRtb2QgPSAkdGhpcy0+R2V0TW9kdWxlKCk7CglyZXR1cm4gYXJyYXkoRkFMU0UsJG1vZC0+TGFuZygnZXJyb3JfZ3JvdXBuYW1lX2V4aXN0cycpKTsKICAgICAgfQogICAgCiAgICAkcSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2dyb3VwcyBTRVQKICAgICAgICAgICAgICAgIGdyb3VwbmFtZSA9ID8sIGdyb3VwZGVzYyA9ID8gV0hFUkUgaWQgPSA/IjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkbmFtZSwgJGRlc2MsICRpZCApICk7CiAgICBpZiggISRkYnJlc3VsdCApCiAgICAgIHsKCXJldHVybiBhcnJheShGQUxTRSwkZGItPkVycm9yTXNnKCkpOwogICAgICB9CiAgICByZXR1cm4gYXJyYXkoIFRSVUUsICcnKTsKICB9CgoKICBmdW5jdGlvbiBTZXRVc2VyUGFzc3dvcmQoICR1aWQsICRwYXNzd29yZCApCiAgewogICAgJGRiID0mICR0aGlzLT5HZXREYigpOwogICAgJHEgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc191c2VycwogICAgICAgICAgU0VUIHBhc3N3b3JkID0gPyBXSEVSRSBpZCA9ID8iOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoIG1kNSgkcGFzc3dvcmQpLCAkdWlkICkpOwogICAgaWYoICEkZGJyZXN1bHQgKQogICAgICB7CglyZXR1cm4gYXJyYXkoRkFMU0UsJGRiLT5FcnJvck1zZygpKTsKICAgICAgfQogICAgcmV0dXJuIGFycmF5KFRSVUUsIiIpOwogIH0KCgogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICAvLyByZXR1cm5zIGFycmF5CiAgZnVuY3Rpb24gU2V0VXNlciggJHVpZCwgJHVzZXJuYW1lLCAkcGFzc3dvcmQsICRleHBpcmVzID0gZmFsc2UgKQogIHsKICAgICRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKICAgIAogICAgLy8gbWFrZSBzdXJlIHRoYXQgdGhpcyB1c2VyIGV4aXN0cwogICAgJHJldCA9ICR0aGlzLT5HZXRVc2VySW5mbyggJHVpZCApOwogICAgaWYoICRyZXRbMF0gPT0gRkFMU0UgKQogICAgICB7CglyZXR1cm4gYXJyYXkoRkFMU0UsICR0aGlzLT5MYW5nKCdlcnJvcl91c2Vybm90Zm91bmQnKSk7CiAgICAgIH0KCiAgICAvLyBtYWtlIHN1cmUgdGhhdCB0aGlzIHVzZXJuYW1lIGlzIG5vdCB0YWtlbiBieSBzb21lIG90aGVyIGlkCiAgICAkbnVpZCA9ICR0aGlzLT5HZXRVc2VySUQoJHVzZXJuYW1lKTsKICAgIGlmKCAkbnVpZCAhPSBmYWxzZSAmJiAkbnVpZCAhPSAkdWlkICkKICAgICAgewoJJG1vZHVsZSA9ICR0aGlzLT5HZXRNb2R1bGUoKTsKCXJldHVybiBhcnJheShGQUxTRSwgJG1vZHVsZS0+TGFuZygnZXJyb3JfdXNlcm5hbWV0YWtlbicsJHVpZCkpOwogICAgICB9CgogICAgJGRicmVzdWx0ID0gJyc7CiAgICAkcGFybXMgPSBhcnJheSgpOwogICAgJHEgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc191c2VycyBTRVQKICAgICAgICAgdXNlcm5hbWUgPSA/IjsKCQogICAgJHBhcm1zW10gPSAkdXNlcm5hbWU7CiAgICBpZiggdHJpbSggJHBhc3N3b3JkICkgIT0gJycgKQogICAgICB7CgkkcSAuPSAiLCBwYXNzd29yZCA9ID8iOwoJJHBhcm1zW10gPSBtZDUoJHBhc3N3b3JkKTsKICAgICAgfQogICAgaWYoICRleHBpcmVzICE9IGZhbHNlICkKICAgICAgewoJJHEgLj0gIiwgZXhwaXJlcyA9ID8iOwoJJHBhcm1zW10gPSAkZGItPkRCVGltZVN0YW1wKCRleHBpcmVzKTsKICAgICAgfQogICAgJHEgLj0gIiBXSEVSRSBpZCA9ID8iOwogICAgJHBhcm1zW10gPSAkdWlkOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgJHBhcm1zICk7CgogICAgaWYoICRkYnJlc3VsdCA9PSBmYWxzZSApCiAgICAgIHsKCXJldHVybiBhcnJheSggRkFMU0UsICRkYi0+RXJyb3JNc2coKSApOwogICAgICB9CiAgICByZXR1cm4gYXJyYXkoIFRSVUUsICIiICk7CiAgfQoKICAKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgLy8gcmV0dXJucyB0cnVlL2ZhbHNlCiAgZnVuY3Rpb24gU2V0VXNlckdyb3VwcyggJHVpZCwgJGdycGlkcyApCiAgewogICAgJGRiID0mICR0aGlzLT5HZXREYigpOwoKICAgIC8vIGZpcnN0IG1ha2Ugc3VyZSB0aGlzIHVzZXIgZXhpc3RzCiAgICAkcmV0ID0gJHRoaXMtPkdldFVzZXJJbmZvKCAkdWlkICk7CiAgICBpZiggJHJldFswXSA9PSBGQUxTRSApCiAgICAgIHsKCXJldHVybiBhcnJheShGQUxTRSwgIlVzZXIgZG9lcyBub3QgZXhpc3QiKTsKICAgICAgfQoKICAgIC8vIHRoZW4gcmVtb3ZlIGFsbCBoaXMgY3VycmVudCBhc3NpZ25tZW50cwogICAgJHEgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2JlbG9uZ3MgCiAgICAgICAgICBXSEVSRSB1c2VyaWQgPSA/IjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkdWlkICkpOwogICAgaWYoICEkZGJyZXN1bHQgKQogICAgICB7CglyZXR1cm4gYXJyYXkoIEZBTFNFLCAkZGItPkVycm9yTXNnKCkgICk7CiAgICAgIH0KCiAgICAvLyBhbmQgYWRkIGFsbCBvZiB0aGVtIGluCiAgICAkcSA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfYmVsb25ncwogICAgICAgICAgVkFMVUVTICg/LD8pIjsKICAgIGZvcmVhY2goICRncnBpZHMgYXMgJGdycGlkICkKICAgIHsKICAgICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICR1aWQsICRncnBpZCApICk7CiAgICAgIGlmKCAhJGRicmVzdWx0ICkKCXsKCSAgcmV0dXJuIGFycmF5KCBGQUxTRSwgJGRiLT5FcnJvck1zZygpICApOwoJfQogICAgfQogICAgcmV0dXJuIGFycmF5KCBUUlVFLCAiIiApOwogIH0KCgogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICAvLyByZXR1cm5zIHRydWUvZmFsc2UKICBmdW5jdGlvbiBTZXRVc2VyUHJvcGVydGllcyggJHVpZCwgJHByb3BzICkKICB7CiAgICAvLyBEZWxldGUgYWxsIHRoZSB1c2VyIHByb3BlcnRpZXMKICAgIC8vIGFuZCBzZXQgbmV3IG9uZXMKICAgICR0aGlzLT5EZWxldGVVc2VyUHJvcGVydHlGdWxsKCAiIiwgJHVpZCwgdHJ1ZSApOwoKICAgIGZvcmVhY2goICRwcm9wcyBhcyAkcHJvcCApCiAgICB7CiAgICAgIGxpc3QoICRrZXksICR2YWwgKSA9IHNwbGl0KCI9IiwkcHJvcCk7CiAgICAgICR0aGlzLT5TZXRVc2VyUHJvcGVydHkoICRrZXksICR2YWwsICR1aWQgKTsKICAgIH0KCiAgICByZXR1cm4gdHJ1ZTsKICB9CgoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgLy8gcmV0dXJucyB0cnVlL2ZhbHNlCiAgZnVuY3Rpb24gVXNlckV4aXN0c0J5SUQoICR1aWQgKQogIHsKICAgICRkYXRhID0gJHRoaXMtPkdldFVzZXJJbmZvKCAkdWlkICk7CiAgICByZXR1cm4oICRkYXRhWzBdICE9IGZhbHNlICk7CiAgfQoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgLy8gcmV0dXJucyBhbiBhcnJheSBvciBmYWxzZQogIGZ1bmN0aW9uIEdldFVzZXJQcm9wZXJ0aWVzKCR1aWQpCiAgewogICAgJGRiID0mICR0aGlzLT5HZXREYigpOwogICAgJHE9IlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3Byb3BlcnRpZXMgV0hFUkUgdXNlcmlkPT8iOwogICAgJHA9YXJyYXkoJHVpZCk7CiAgICAkYXJyID0gYXJyYXkoKTsKICAgICRkYnJlc3VsdD0kZGItPkV4ZWN1dGUoJHEsJHApOwogICAgaWYoICRkYnJlc3VsdCA9PSBmYWxzZSApCiAgICAgIHsKCXJldHVybiBmYWxzZTsKICAgICAgfQogICAgd2hpbGUoICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkgKQogICAgICB7CglhcnJheV9wdXNoKCAkYXJyLCAkcm93ICk7CiAgICAgIH0KICAgIHJldHVybiAkYXJyOwogIH0KCiAgLy8gdXNlcmlkIGFwaSBmdW5jdGlvbgogIC8vIHJldHVybnMgYW4gYXJyYXkgb2YgcmVjb3JkcyBvciBmYWxzZQogIGZ1bmN0aW9uIEdldE1lbWJlckdyb3Vwc0FycmF5KCR1c2VyaWQpIHsKICAgICRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKICAgICRxPSJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19iZWxvbmdzIFdIRVJFIHVzZXJpZD0/IjsKICAgICRkYnJlc3VsdD0kZGItPkV4ZWN1dGUoJHEsYXJyYXkoJHVzZXJpZCkpOwogICAgaWYgKCRkYnJlc3VsdCAmJiAkZGJyZXN1bHQtPlJvd0NvdW50KCkpIHsKICAgICAgJHJlc3VsdD1hcnJheSgpOzsKICAgICAgd2hpbGUgKCRyb3c9JGRicmVzdWx0LT5GZXRjaFJvdygpKSB7CglhcnJheV9wdXNoKCAkcmVzdWx0LCAkcm93ICk7CiAgICAgIH0KICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQoKICAvLwogIC8vIGVuZCBvZiByYyBmdW5jdGlvbnMKICAvLwoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgZnVuY3Rpb24gR2V0VXNlclByb3BlcnR5KCR0aXRsZSwkZGVmYXVsdHZhbHVlPWZhbHNlKSAKICB7CiAgICAkdXNlcmlkPSR0aGlzLT5Mb2dnZWRJbklkKCk7CiAgICBpZiAoJHVzZXJpZD09PWZhbHNlKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gJHRoaXMtPkdldFVzZXJQcm9wZXJ0eUZ1bGwoJHRpdGxlLCR1c2VyaWQsJGRlZmF1bHR2YWx1ZSk7CiAgfQogIAogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICBmdW5jdGlvbiBHZXRVc2VyUHJvcGVydHlGdWxsKCR0aXRsZSwkdXNlcmlkLCAkZGVmYXVsdHZhbHVlPWZhbHNlKSAKICB7CiAgICAkZGI9JHRoaXMtPkdldERCKCk7CiAgICAkcT0iU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfcHJvcGVydGllcyBXSEVSRSB0aXRsZT0/IEFORCB1c2VyaWQ9PyI7CiAgICAkcD1hcnJheSgkdGl0bGUsJHVzZXJpZCk7CiAgICAkcmVzdWx0PSRkYi0+RXhlY3V0ZSgkcSwkcCk7CiAgICBpZiAoJHJlc3VsdCAmJiAkcmVzdWx0LT5Sb3dDb3VudCgpKSB7CiAgICAgICRyb3c9JHJlc3VsdC0+RmV0Y2hSb3coKTsKICAgICAgcmV0dXJuICRyb3dbImRhdGEiXTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiAkZGVmYXVsdHZhbHVlOwogICAgfQogIH0KCiAgLy8gdXNlcmlkIGFwaSBmdW5jdGlvbgogIGZ1bmN0aW9uIFNldFVzZXJQcm9wZXJ0eSgkdGl0bGUsJGRhdGEpIAogIHsKICAgICR1c2VyaWQ9JHRoaXMtPkxvZ2dlZEluSWQoKTsKICAgIGlmICgkdXNlcmlkPT09ZmFsc2UpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiAkdGhpcy0+U2V0VXNlclByb3BlcnR5RnVsbCgkdGl0bGUsJGRhdGEsJHVzZXJpZCk7CiAgfQoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgZnVuY3Rpb24gU2V0VXNlclByb3BlcnR5RnVsbCgkdGl0bGUsJGRhdGEsJHVzZXJpZCkgCiAgewogICAgJGRiPSR0aGlzLT5HZXREQigpOwogICAgJHE9IlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3Byb3BlcnRpZXMgV0hFUkUgdGl0bGU9PyBBTkQgdXNlcmlkPT8iOwogICAgJHA9YXJyYXkoJHRpdGxlLCR1c2VyaWQpOwogICAgJHI9JGRiLT5FeGVjdXRlKCRxLCRwKTsKICAgIGlmICghJHIgfHwgKCRyLT5OdW1Sb3dzKCk9PTApKSB7CiAgICAgICRuZXdpZD0kZGItPkdlbklEKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfcHJvcGVydGllc19zZXEiKTsKICAgICAgJHE9IklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19wcm9wZXJ0aWVzIChpZCx1c2VyaWQsdGl0bGUsZGF0YSkgVkFMVUVTICg/LD8sPyw/KSI7CiAgICAgICRwPWFycmF5KCRuZXdpZCwkdXNlcmlkLCR0aXRsZSwkZGF0YSk7CiAgICAgICRyPSRkYi0+RXhlY3V0ZSgkcSwkcCk7CiAgICB9IGVsc2UgewogICAgICAkcm93PSRyLT5GZXRjaFJvdygpOwogICAgICAkcT0iVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19wcm9wZXJ0aWVzIFNFVCBkYXRhPT8gV0hFUkUgaWQ9PyI7CiAgICAgICRwPWFycmF5KCRkYXRhLCRyb3dbImlkIl0pOwogICAgICAkcj0kZGItPkV4ZWN1dGUoJHEsJHApOwogICAgfQogICAgcmV0dXJuICgkciE9ZmFsc2UpOwogIH0KCiAgLy8gZGVsZXRlIGFsbCBvY2N1cmFuY2VzIG9mIHRoZSB1c2VycHJvcGVydHkgYnkgbmFtZQogIGZ1bmN0aW9uIERlbGV0ZVVzZXJQcm9wZXJ0eUJ5TmFtZSggJHRpdGxlICkKICB7CiAgICAkZGIgPSAkdGhpcy0+R2V0REIoKTsKICAgICRxID0gIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19wcm9wZXJ0aWVzIFdIRVJFIHRpdGxlPT8iOwogICAgJHAgPSBhcnJheSggJHRpdGxlICk7CiAgICAkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgJHAgKTsKICAgIHJldHVybiAoJHJlc3VsdCE9ZmFsc2UpOwogIH0KCiAgLy8gdXNlcmlkIGFwaSBmdW5jdGlvbgogIGZ1bmN0aW9uIERlbGV0ZVVzZXJQcm9wZXJ0eSgkdGl0bGUsJGFsbD1mYWxzZSkgCiAgewogICAgJHVzZXJpZD0kdGhpcy0+TG9nZ2VkSW5JZCgpOwogICAgaWYgKCR1c2VyaWQ9PT1mYWxzZSkgcmV0dXJuIGZhbHNlOwogICAgJGRiPSR0aGlzLT5HZXREQigpOwogICAgJHE9IkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19wcm9wZXJ0aWVzIFdIRVJFIHVzZXJpZD0/IjsKICAgIGlmICghJGFsbCkgJHEuPSIgQU5EIHRpdGxlPT8iOwogICAgJHA9YXJyYXkoKTsKICAgIGlmICgkYWxsKSAkcD1hcnJheSgkdXNlcmlkKTsgZWxzZSAkcD1hcnJheSgkdXNlcmlkLCR0aXRsZSk7CiAgICAkcmVzdWx0PSRkYi0+RXhlY3V0ZSgkcSwkcCk7CiAgICByZXR1cm4gKCRyZXN1bHQhPWZhbHNlKTsKICB9CiAgCiAgLy8gdXNlcmlkIGFwaSBmdW5jdGlvbgogIGZ1bmN0aW9uIERlbGV0ZVVzZXJQcm9wZXJ0eUZ1bGwoJHRpdGxlLCR1c2VyaWQsJGFsbD1mYWxzZSkgCiAgewogICAgJGRiPSR0aGlzLT5HZXREQigpOwogICAgJHE9IkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19wcm9wZXJ0aWVzIFdIRVJFIHVzZXJpZD0/IjsKICAgIGlmICghJGFsbCkgJHEuPSIgQU5EIHRpdGxlPT8iOwogICAgJHA9YXJyYXkoKTsKICAgIGlmICgkYWxsKSAkcD1hcnJheSgkdXNlcmlkKTsgZWxzZSAkcD1hcnJheSgkdXNlcmlkLCR0aXRsZSk7CiAgICAkcmVzdWx0PSRkYi0+RXhlY3V0ZSgkcSwkcCk7CiAgICByZXR1cm4gKCRyZXN1bHQhPWZhbHNlKTsKICB9CgogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICBmdW5jdGlvbiBEZWxldGVBbGxVc2VyUHJvcGVydGllcygpIAogIHsKICAgIHJldHVybiAkdGhpcy0+RGVsZXRlVXNlclByb3BlcnR5KCIiLHRydWUpOwogIH0KCiAgLy8gdXNlcmlkIGFwaSBmdW5jdGlvbgogIGZ1bmN0aW9uIERlbGV0ZUFsbFVzZXJQcm9wZXJ0aWVzRnVsbCgkdXNlcmlkKSAKICB7CiAgICByZXR1cm4gJHRoaXMtPkRlbGV0ZVVzZXJQcm9wZXJ0eUZ1bGwoIiIsJHVzZXJpZCx0cnVlKTsKICB9CgogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICBmdW5jdGlvbiBDaGVja1Bhc3N3b3JkKCR1c2VybmFtZSwkcGFzc3dvcmQpIAogIHsKICAgICRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKICAgICRxPSJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc191c2VycyBXSEVSRSB1c2VybmFtZT0/IEFORCBwYXNzd29yZD0/IjsKICAgICRwPWFycmF5KCR1c2VybmFtZSxtZDUoJHBhc3N3b3JkKSk7CiAgICAkcmVzdWx0PSRkYi0+RXhlY3V0ZSgkcSwkcCk7CiAgICBpZiAoJHJlc3VsdCAmJiAkcmVzdWx0LT5Sb3dDb3VudCgpKSByZXR1cm4gdHJ1ZTsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgCiAgLy8gdXNlcmlkIGFwaSBmdW5jdGlvbgogIGZ1bmN0aW9uIExvZ2dlZEluTmFtZSgpIAogIHsKICAgICR1c2VyaWQ9JHRoaXMtPkxvZ2dlZEluSWQoKTsKICAgIGlmICgkdXNlcmlkIT0iIikgcmV0dXJuICR0aGlzLT5HZXRVc2VyTmFtZSgkdXNlcmlkKTsgZWxzZSByZXR1cm4gIiI7CiAgfQoKCiAgLy8gdXNlcmlkIGFwaSBmdW5jdGlvbgogIGZ1bmN0aW9uIExvZ2dlZEluRW1haWwoKSAKICB7CiAgICAkdXNlcmlkPSR0aGlzLT5Mb2dnZWRJbklkKCk7CiAgICBpZiAoJHVzZXJpZCE9IiIpIHJldHVybiAkdGhpcy0+R2V0RW1haWwoJHVzZXJpZCk7IGVsc2UgcmV0dXJuICIiOwogIH0KCgogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICBmdW5jdGlvbiBMb2dvdXQoKSAKICB7CiAgICAkZGIgPSYgJHRoaXMtPkdldERiKCk7CiAgICAkcT0iREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2xvZ2dlZGluIFdIRVJFIHNlc3Npb25pZD0/IjsKICAgICRwPWFycmF5KHNlc3Npb25faWQoKSk7CiAgICAkcmVzdWx0PSRkYi0+RXhlY3V0ZSgkcSwkcCk7CiAgfQoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgZnVuY3Rpb24gTG9nb3V0VXNlcigkdWlkKSAKICB7CiAgICAkZGIgPSYgJHRoaXMtPkdldERiKCk7CiAgICAkcT0iREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2xvZ2dlZGluIFdIRVJFIHVzZXJpZD0/IjsKICAgICRwPWFycmF5KCR1aWQpOwogICAgJHJlc3VsdD0kZGItPkV4ZWN1dGUoJHEsJHApOwogIH0KCiAgLy8gdXNlcmlkIGFwaSBmdW5jdGlvbgogIGZ1bmN0aW9uIEV4cGlyZVVzZXJzKCkgCiAgewogICAgJG1vZHVsZSA9ICR0aGlzLT5HZXRNb2R1bGUoKTsKICAgICRleHBpcnl0aW1lID0gJG1vZHVsZS0+R2V0UHJlZmVyZW5jZSgndXNlcl9zZXNzaW9uX2V4cGlyZXMnKTsKICAgICRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKICAgICRxPSJERUxFVEUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfbG9nZ2VkaW4gV0hFUkUgbGFzdHVzZWQ8PyI7CiAgICAkbW9kdWxlID0gJHRoaXMtPkdldE1vZHVsZSgpOwogICAgJHA9YXJyYXkodGltZSgpLSRleHBpcnl0aW1lKTsKICAgICRyZXN1bHQ9JGRiLT5FeGVjdXRlKCRxLCRwKTsKICB9CgogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICBmdW5jdGlvbiBMb2dnZWRJbklkKCkgCiAgewogICAgaWYoIHNlc3Npb25faWQoKSA9PSAiIiApCiAgICAgIHsKCS8vIGlmIHdlIGRvbid0IGhhdmUgYSBzZXNzaW9uIGlkLCB0aGVuIHdlIGFyZW4ndCBsb2dnZWQgaW4uCglyZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICAkZGIgPSYgJHRoaXMtPkdldERiKCk7CiAgICAkdGhpcy0+RXhwaXJlVXNlcnMoKTsKICAgICRxPSJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19sb2dnZWRpbiBXSEVSRSBzZXNzaW9uaWQ9PyI7CiAgICAkcD1hcnJheShzZXNzaW9uX2lkKCkpOwogICAgJHJlc3VsdD0kZGItPkV4ZWN1dGUoJHEsJHApOwogICAgaWYgKCRyZXN1bHQgJiYgJHJlc3VsdC0+Um93Q291bnQoKSkgewogICAgICAkcm93PSRyZXN1bHQtPkZldGNoUm93KCk7CiAgICAgICRyZXR2YWwgPSAkcm93WyJ1c2VyaWQiXTsKCiAgICAgIC8vIG5vdyB0b3VjaCB0aGUgbGFzdHVzZWQKICAgICAgLy8gdGhpcyB3aWxsIGVuc3VyZSB0aGF0IGV2ZXJ5IHRpbWUgd2UgY2hlY2sgdGhhdCBhIHVzZXIgaXMKICAgICAgLy8gbG9nZ2VkIGluLCBpdCB0b3VjaGVzIGhpcyBsb2dnZWQgaW4gZW50cnkKICAgICAgJHEgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19sb2dnZWRpbiBTRVQgbGFzdHVzZWQgPSA/IHdoZXJlIHNlc3Npb25pZCA9ID8iOwogICAgICAkcmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoIHRpbWUoKSwgc2Vzc2lvbl9pZCgpICkgKTsKICAgICAgcmV0dXJuICRyZXR2YWw7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgZnVuY3Rpb24gTG9nZ2VkSW4oKSAKICB7CiAgICBpZiggISR0aGlzLT5Mb2dnZWRJbklkKCkgKSAKICAgICAgewoJcmV0dXJuIGZhbHNlOyAKICAgICAgfQogICAgZWxzZQogICAgICB7CglyZXR1cm4gdHJ1ZTsKICAgICAgfQogIH0KCiAgLy8gdXNlcmlkIGFwaSBmdW5jdGlvbgogIGZ1bmN0aW9uIE1lbWJlck9mR3JvdXAoJHVzZXJpZCwkZ3JvdXBpZCkgCiAgewogICAgJGRiID0mICR0aGlzLT5HZXREYigpOwogICAgJHE9IiI7CiAgICAkcT0iU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfYmVsb25ncyBXSEVSRSB1c2VyaWQ9PyBBTkQgZ3JvdXBpZD0/IjsKICAgIAogICAgJHBhcmFtcz1hcnJheSgkdXNlcmlkLCRncm91cGlkKTsKICAgICRyZXN1bHQ9JGRiLT5FeGVjdXRlKCRxLCRwYXJhbXMpOwogICAgaWYgKCRyZXN1bHQgJiYgJHJlc3VsdC0+Um93Q291bnQoKSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CiAgCiAgLy8gdXNlcmlkIGFwaSBmdW5jdGlvbgogIGZ1bmN0aW9uIEdldFVzZXJOYW1lKCR1c2VyaWQpIAogIHsKICAgICRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKICAgICRxPSJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc191c2VycyBXSEVSRSBpZD0/IjsKICAgIAogICAgJGRicmVzdWx0PSRkYi0+RXhlY3V0ZSgkcSxhcnJheSgkdXNlcmlkKSk7CiAgICBpZiAoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+Um93Q291bnQoKSkgewogICAgICAkcm93PSRkYnJlc3VsdC0+RmV0Y2hSb3coKTsKICAgICAgcmV0dXJuICRyb3dbInVzZXJuYW1lIl07CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQogIAogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICBmdW5jdGlvbiBHZXRFbWFpbCgkdXNlcmlkKSAKICB7CiAgICAkZGIgPSYgJHRoaXMtPkdldERiKCk7CiAgICAkcT0iIjsKICAgICRxPSJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc191c2VycyBXSEVSRSBpZD0/IjsKICAgIAogICAgJGRicmVzdWx0PSRkYi0+RXhlY3V0ZSgkcSxhcnJheSgkdXNlcmlkKSk7CiAgICBpZiAoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+Um93Q291bnQoKSkgewogICAgICAkcm93PSRkYnJlc3VsdC0+RmV0Y2hSb3coKTsKICAgICAgcmV0dXJuICRyb3dbImVtYWlsIl07CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQogIAogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICBmdW5jdGlvbiBHZXRVc2VySUQoJHVzZXJuYW1lKSAKICB7CiAgICAkZGIgPSYgJHRoaXMtPkdldERiKCk7CiAgICAkcT0iU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfdXNlcnMgV0hFUkUgdXNlcm5hbWU9PyI7CiAgICAkZGJyZXN1bHQ9JGRiLT5FeGVjdXRlKCRxLGFycmF5KCR1c2VybmFtZSkpOwogICAgaWYgKCRkYnJlc3VsdCAmJiAkZGJyZXN1bHQtPlJvd0NvdW50KCkpIHsKICAgICAgJHJvdz0kZGJyZXN1bHQtPkZldGNoUm93KCk7CiAgICAgIHJldHVybiAkcm93WyJpZCJdOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KICAKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgLy8gcmV0dXJucyBhcnJheQogIGZ1bmN0aW9uIEFkZEdyb3VwKCAkbmFtZSwgJGRlc2NyaXB0aW9uICkKICB7CiAgICAkZGIgPSYgJHRoaXMtPkdldERiKCk7CiAgICAKICAgIC8vIHNlZSBpZiBpdCBleGlzdHMgYWxyZWFkeSBvciBub3QgKGJ5IG5hbWUpCiAgICAkcSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLgogICAgICAibW9kdWxlX2ZldXNlcnNfZ3JvdXBzIFdIRVJFIGdyb3VwbmFtZSA9ID8iOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICRuYW1lICkgKTsKICAgIGlmKCAhJGRicmVzdWx0ICkKICAgICAgewoJcmV0dXJuIGFycmF5KEZBTFNFLCRkYi0+RXJyb3JNc2coKSk7CiAgICAgIH0KICAgICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7CiAgICBpZiggJHJvdyApCiAgICAgIHsKCXJldHVybiBhcnJheShGQUxTRSwkdGhpcy0+TGFuZygnZXJyb3JfZ3JvdXBuYW1lX2V4aXN0cycpKTsKICAgICAgfQogICAgCiAgICAkZ3JwaWQgPSAKICAgICAgJGRiLT5HZW5JRCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19ncm91cHNfc2VxIiApOwogICAgJHEgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuCiAgICAgICJtb2R1bGVfZmV1c2Vyc19ncm91cHMgVkFMVUVTICg/LD8sPykiOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICRncnBpZCwgJG5hbWUsICRkZXNjcmlwdGlvbiApICk7CiAgICBpZiggISRkYnJlc3VsdCApCiAgICAgIHsKCXJldHVybiBhcnJheShGQUxTRSwkZGItPkVycm9yTXNnKCkpOwogICAgICB9CiAgICByZXR1cm4gYXJyYXkoVFJVRSwkZ3JwaWQpOwogIH0KCgogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICAvLyByZXR1cm5zIGFycmF5CiAgZnVuY3Rpb24gQWRkVXNlciggJG5hbWUsICRwYXNzd29yZCwgJGV4cGlyZXMgKQogIHsKICAgICRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKICAgIAogICAgLy8gc2VlIGlmIGl0IGV4aXN0cyBhbHJlYWR5IG9yIG5vdCAoYnkgbmFtZSkKICAgICRxID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuCiAgICAgICJtb2R1bGVfZmV1c2Vyc191c2VycyBXSEVSRSB1c2VybmFtZSA9ID8iOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICRuYW1lICkgKTsKICAgIGlmKCAhJGRicmVzdWx0ICkKICAgICAgewoJcmV0dXJuIGFycmF5KEZBTFNFLCRkYi0+RXJyb3JNc2coKSk7CiAgICAgIH0KICAgICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7CiAgICBpZiggJHJvdyApCiAgICAgIHsKCSRtb2R1bGUgPSAkdGhpcy0+R2V0TW9kdWxlKCk7CglyZXR1cm4gYXJyYXkoRkFMU0UsJG1vZHVsZS0+TGFuZygnZXJyb3JfdXNlcm5hbWVfZXhpc3RzJykpOwogICAgICB9CiAgICAKICAgIC8vIGdlbmVyYXRlIHRoZSBzZXF1ZW5jZQogICAgJHVpZCA9IAogICAgICAkZGItPkdlbklEKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3VzZXJzX3NlcSIgKTsKCiAgICAvLyBpbnNlcnQgdGhlIHJlY29yZAogICAgJHEgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuCiAgICAgICJtb2R1bGVfZmV1c2Vyc191c2VycyBWQUxVRVMgKD8sPyw/LD8sPykiOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICR1aWQsICRuYW1lLCBtZDUoJHBhc3N3b3JkKSwgCgkJCQkJICRkYi0+RGJUaW1lU3RhbXAodGltZSgpKSwKCQkJCQkgJGRiLT5EYlRpbWVTdGFtcCgkZXhwaXJlcykgKSApOwogICAgaWYoICEkZGJyZXN1bHQgKQogICAgICB7CglyZXR1cm4gYXJyYXkoRkFMU0UsJGRiLT5FcnJvck1zZygpKTsKICAgICAgfQogICAgcmV0dXJuIGFycmF5KFRSVUUsJHVpZCk7CiAgfQogIAogIAogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICBmdW5jdGlvbiBHZXRHcm91cE5hbWUoJGdyb3VwaWQpIAogIHsKICAgICRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKICAgICRxPSJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19ncm91cHMgV0hFUkUgaWQ9PyI7CiAgICAkZGJyZXN1bHQ9JGRiLT5FeGVjdXRlKCRxLGFycmF5KCRncm91cGlkKSk7CiAgICBpZiAoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+Um93Q291bnQoKSkgewogICAgICAkcm93PSRkYnJlc3VsdC0+RmV0Y2hSb3coKTsKICAgICAgcmV0dXJuICRyb3dbImdyb3VwbmFtZSJdOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KICAKICAKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgZnVuY3Rpb24gR2V0R3JvdXBEZXNjKCRncm91cGlkKSB7CiAgICAkZGIgPSYgJHRoaXMtPkdldERiKCk7CiAgICAkcT0iU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfZ3JvdXBzIFdIRVJFIGlkPT8iOwogICAgJGRicmVzdWx0PSRkYi0+RXhlY3V0ZSgkcSxhcnJheSgkZ3JvdXBpZCkpOwogICAgaWYgKCRkYnJlc3VsdCAmJiAkZGJyZXN1bHQtPlJvd0NvdW50KCkpIHsKICAgICAgJHJvdz0kZGJyZXN1bHQtPkZldGNoUm93KCk7CiAgICAgIHJldHVybiAkcm93WyJncm91cGRlc2MiXTsKICAgIH0gCWVsc2UgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQogIAoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgLy8gcmV0dXJucyBhbiBhcnJheQogIGZ1bmN0aW9uIERlbGV0ZUdyb3VwRnVsbCggJGlkICkKICB7CiAgICAkZGIgPSAkdGhpcy0+R2V0REIoKTsKICAgICRyZXN1bHQgPSBhcnJheSgpOwoKICAgIC8vIGRlbGV0ZSBhbGwgcHJvcGVydHkgcmVsYXRpb25zIGZyb20gdGhpcyBncm91cAogICAgJHEgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2dyb3VwcHJvcG1hcCBXSEVSRSBncm91cF9pZCA9ID8iOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICRpZCApICk7CiAgICBpZiggISRkYnJlc3VsdCApCiAgICAgIHsKCXJldHVybiBhcnJheSggRkFMU0UsICRkYi0+RXJyb3JNc2coKSApOwogICAgICB9CgogICAgLy8gZGVsZXRlIGFsbCBpbmRpY2F0aW9uIHRoYXQgYW55Ym9keSBpcyBhIG1lbWJlcgogICAgLy8gb2YgdGhpcyBncm91cAogICAgJHEgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2JlbG9uZ3MgV0hFUkUgZ3JvdXBpZCA9ID8iOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICRpZCApICk7CiAgICBpZiggISRkYnJlc3VsdCApCiAgICAgIHsKCXJldHVybiBhcnJheSggRkFMU0UsICRkYi0+RXJyb3JNc2coKSApOwogICAgICB9CiAgICAKICAgIC8vIGFuZCB0aGVuIGRlbGV0ZSB0aGUgZ3JvdXAKICAgICRxID0gIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19ncm91cHMgV0hFUkUgaWQgPSA/IjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkaWQgKSApOwogICAgaWYoICEkZGJyZXN1bHQgKQogICAgICB7CglyZXR1cm4gYXJyYXkoIEZBTFNFLCAkZGItPkVycm9yTXNnKCkgKTsKICAgICAgfQogICAgCiAgICByZXR1cm4gYXJyYXkoIFRSVUUsICcnICk7CiAgfQogIAogIAogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICBmdW5jdGlvbiBHZXRHcm91cExpc3QoKQogIHsKICAgICRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKICAgIAogICAgJHJlc3VsdCA9IGFycmF5KCk7CiAgICAkcSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19ncm91cHMiOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSApOwogICAgaWYoICRkYnJlc3VsdCApIHsKICAgIHdoaWxlKCAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpICkKICAgICAgewoJJHJlc3VsdFskcm93Wydncm91cG5hbWUnXV0gPSAkcm93WydpZCddOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKICB9CiAgCgogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICBmdW5jdGlvbiBHZXRHcm91cExpc3RGdWxsKCkKICB7CiAgICAkZGIgPSYgJHRoaXMtPkdldERiKCk7CgkgIAogICAgJHJlc3VsdCA9IGFycmF5KCk7CiAgICAkcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfZ3JvdXBzIjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHF1ZXJ5ICk7CiAgICBpZiggJGRicmVzdWx0ICkgewogICAgICB3aGlsZSggJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSApCiAgICAgICAgewoJICBhcnJheV9wdXNoKCRyZXN1bHQsJHJvdyk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuICRyZXN1bHQ7CiAgfQoKCiAgLy8gb2xkIHVzZXJpZCBhcGkgZnVuY3Rpb24KICBmdW5jdGlvbiBHZXRHcm91cElEKCRncm91cG5hbWUpIAogIHsKICAgICRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKCiAgICAkcT0iU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfZ3JvdXBzIFdIRVJFIGdyb3VwbmFtZT0/IjsKICAgICRkYnJlc3VsdD0kZGItPkV4ZWN1dGUoJHEsYXJyYXkoJGdyb3VwbmFtZSkpOwogICAgaWYgKCRkYnJlc3VsdCAmJiAkZGJyZXN1bHQtPlJvd0NvdW50KCkpIAogICAgICB7Cgkkcm93PSRkYnJlc3VsdC0+RmV0Y2hSb3coKTsKCXJldHVybiAkcm93WyJpZCJdOwogICAgICB9IAogICAgZWxzZSAKICAgICAgewoJcmV0dXJuIGZhbHNlOwogICAgICB9CiAgfQoKCiAgLy8gb2xkIHVzZXJpZCBhcGkgZnVuY3Rpb24KICBmdW5jdGlvbiBHZXRNZW1iZXJHcm91cHMoJHVzZXJpZCkgewogICAgJGRiID0mICR0aGlzLT5HZXREYigpOwogICAgJHE9IlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2JlbG9uZ3MgV0hFUkUgdXNlcmlkPT8iOwogICAgJGRicmVzdWx0PSRkYi0+RXhlY3V0ZSgkcSxhcnJheSgkdXNlcmlkKSk7CiAgICBpZiAoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+Um93Q291bnQoKSkgewogICAgICAkcmVzdWx0PSIiOwogICAgICB3aGlsZSAoJHJvdz0kZGJyZXN1bHQtPkZldGNoUm93KCkpIHsKCWlmICgkcmVzdWx0IT0iIikgewoJICAkcmVzdWx0Lj0iLCIuJHRoaXMtPkdldEdyb3VwTmFtZSgkcm93WyJncm91cGlkIl0pOwoJfSBlbHNlIHsKCSAgJHJlc3VsdD0kdGhpcy0+R2V0R3JvdXBOYW1lKCRyb3dbImdyb3VwaWQiXSk7Cgl9CiAgICAgIH0KICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gIm5vbmUiOwogICAgfQogIH0KCgogIC8vIG9sZCB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgZnVuY3Rpb24gQ2hhbmdlVXNlcigkaWQpIAogIHsKICAgICRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKICAgIGlmIChpc3NldCgkX1BPU1RbJGlkLiJ1c2VyaWQiXSkpICR1c2VyaWQ9dHJpbSgkX1BPU1RbJGlkLiJ1c2VyaWQiXSk7IGVsc2UgcmV0dXJuICJVbnJlY292ZXJhYmxlIGVycm9yIjsKICAgICR1c2VybmFtZT10cmltKCRfUE9TVFskaWQuInVzZXJuYW1lIl0pOwogICAgJHF1ZXJ5PSJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc191c2VycyBXSEVSRSB1c2VybmFtZT0/IjsKICAgICRyZXN1bHQ9JGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkdXNlcm5hbWUpKTsKICAgIGlmICgkcmVzdWx0ICYmICRyZXN1bHQtPlJvd0NvdW50KCkpIHsKICAgICAgJHJvdz0kcmVzdWx0LT5GZXRjaFJvdygpOwogICAgICBpZiAoJHJvd1siaWQiXSE9JHVzZXJpZCkgcmV0dXJuICJVc2VybmFtZSBhbHJlYWR5IGV4aXN0cyEiOwogICAgfQogICAgCiAgICBpZiAoaXNzZXQoJF9QT1NUWyRpZC4iZW1haWwiXSkpICRlbWFpbD10cmltKCRfUE9TVFskaWQuImVtYWlsIl0pOyBlbHNlIHJldHVybiAiRW1haWwgYWRkcmVzcyBtdXN0IGJlIHByb3ZpZGVkIjsKICAgIAogICAgaWYgKGlzc2V0KCRfUE9TVFskaWQuInBhc3N3b3JkIl0pKSAkcGFzc3dvcmQ9dHJpbSgkX1BPU1RbJGlkLiJwYXNzd29yZCJdKTsgZWxzZSAkcGFzc3dvcmQ9IiI7CiAgICBpZiAoJHBhc3N3b3JkIT0iIikgewogICAgICAkcGFzc3dvcmQyPXRyaW0oJF9QT1NUWyRpZC4icGFzc3dvcmQyIl0pOwogICAgICBpZiAoJHBhc3N3b3JkIT0kcGFzc3dvcmQyKSByZXR1cm4gIlBhc3N3b3JkcyBkbyBub3QgbWF0Y2ghIjsKICAgICAgJHF1ZXJ5PSJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3VzZXJzIFNFVCB1c2VybmFtZT0/LFNFVCBwYXNzd29yZD0/LGVtYWlsPT8gV0hFUkUgaWQ9PyI7CiAgICAgICRwYXJhbXM9YXJyYXkoJHVzZXJuYW1lLG1kNSgkcGFzc3dvcmQpLCRlbWFpbCwkdXNlcmlkKTsKICAgICAgJGRicmVzdWx0PSRkYi0+RXhlY3V0ZSgkcXVlcnksJHBhcmFtcyk7CiAgICB9IGVsc2UgewogICAgICAkcXVlcnk9IlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfdXNlcnMgU0VUIHVzZXJuYW1lPT8sZW1haWw9PyBXSEVSRSBpZD0/IjsKICAgICAgJHBhcmFtcz1hcnJheSgkdXNlcm5hbWUsJGVtYWlsLCR1c2VyaWQpOwogICAgICAkZGJyZXN1bHQ9JGRiLT5FeGVjdXRlKCRxdWVyeSwkcGFyYW1zKTsKICAgIH0KICAgIAogICAgJHE9IlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2dyb3VwcyI7CiAgICAkZGJyZXN1bHQ9JGRiLT5FeGVjdXRlKCRxKTsKICAgIGlmICgkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5Sb3dDb3VudCgpKSB7CiAgICAgIHdoaWxlICgkcm93PSRkYnJlc3VsdC0+RmV0Y2hSb3coKSkgewoJLy9GaXJzdCByZXNldCB0aGUgYXNzb2Npb2F0aW9ucwoJJHE9IkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19iZWxvbmdzIFdIRVJFIHVzZXJpZD0/IEFORCBncm91cGlkPT8iOwoJJHBhcmFtczE9YXJyYXkoJHVzZXJpZCwkcm93WyJpZCJdKTsKCSRkYnJlc3VsdDI9JGRiLT5FeGVjdXRlKCRxLCRwYXJhbXMxKTsKCWVjaG8gJGRiLT5FcnJvck1zZygpOwoJLy9UaGVuIGNyZWF0ZSBhIG5ldyBvbmUgaWYgaXQgd2FzIHNlbGVjdGVkCglpZiAoJF9QT1NUWyRpZC4iZ3JvdXAiLiRyb3dbImlkIl1dPT0ieWVzIikgewoJICAvL0NyZWF0ZSBhbiBhc3NvY2lhdGlvbgoJICAkcT0iSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2JlbG9uZ3MgKHVzZXJpZCxncm91cGlkKSBWQUxVRVMgKD8sPykiOwoJICAkcGFyYW1zMj1hcnJheSgkdXNlcmlkLCRyb3dbImlkIl0pOwoJICAkZGJyZXN1bHQyPSRkYi0+RXhlY3V0ZSgkcSwkcGFyYW1zMik7Cgl9CiAgICAgIH0KICAgIH0KICB9CgkKCiAgLy8gb2xkIHVzZXJpZCBhcGkgZnVuY3Rpb24KICBmdW5jdGlvbiBEZWxldGVVc2VyKCRpZCkgCiAgewogICAgJGRiID0mICR0aGlzLT5HZXREYigpOwogICAgaWYgKGlzc2V0KCRfR0VUWyRpZC4idXNlcmlkIl0pKSAkdXNlcmlkPSRfR0VUWyRpZC4idXNlcmlkIl07IGVsc2UgcmV0dXJuOwogICAgJHE9IkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc191c2VycyBXSEVSRSBpZD0nJHVzZXJpZCciOwogICAgJGRicmVzdWx0PSRkYi0+RXhlY3V0ZSgkcSk7CiAgICAkcT0iREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2JlbG9uZ3MgV0hFUkUgdXNlcmlkPSckdXNlcmlkJyI7CiAgICAkZGJyZXN1bHQ9JGRiLT5FeGVjdXRlKCRxKTsKICB9Cgp9IC8vIGNsYXNzCgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/FrontEndUsers.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKIEZyb250RW5kVXNlcnMuIEEgcGx1Z2luIGZvciBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIENvcHlyaWdodCAoYykgMjAwNC0wNSBieSBSb2JlcnQgQ2FtcGJlbGwgPHJvYkB0ZWNoY29tLmR5bmRucy5vcmc+CgogVHJhbnNsYXRpb25zOgogRnJlbmNoOiBQYXRyaWNpYSBCcnVuLCBodHRwOi8vd3d3LmJydW1hbHNvbHN0aWNlLmNvbQogTm9yd2VnaWFuIChib2ttP2wpOiBSb2dlciAiU3RpZ21hIiBLbnV0c2VuIDxzdGlnbWFzdGVyQGdtYWlsLmNvbT4KCiBDTVMtIENNUyBNYWRlIFNpbXBsZSBpcyBDb3B5cmlnaHQgKGMpIFRlZCBLdWxwICh3aXNoeUB1c2Vycy5zZi5uZXQpCiBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwoKIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCgogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQoqLwoKLy8gYSB2ZXJ5IGltcG9ydGFudCBsaW5lIHRoYXQgaW5jbHVkZXMgYWxsIG9mIG91ciBhcGkgZnVuY3Rpb25zCnJlcXVpcmVfb25jZSggIkZyb250RW5kVXNlcnMuYXBpLnBocCIgKTsKcmVxdWlyZV9vbmNlKCAiUmFuZG9tLnBocCIgKTsKcmVxdWlyZV9vbmNlKCAiZnVuY3Rpb25zLnBocCIgKTsKCmNsYXNzIEZyb250RW5kVXNlcnMgZXh0ZW5kcyBDTVNNb2R1bGUgCnsKICB2YXIgJGRldmRlYnVnID0gMDsKCiAgLyoqCiAgICogVGhlIGRlZmF1bHQgdGVtcGxhdGUgdXNlZCBmb3IgdGhlIGxvZ2luIGZvcm0KICAgKi8KICB2YXIgJGRmbHRfZm9yZ290cGFzc3dvcmR0ZW1wbGF0ZTEgPSAnCjwhLS0gZm9yZ290IHBhc3N3b3JkIHRlbXBsYXRlIC0tPgp7JHN0YXJ0Zm9ybX0KeyR0aXRsZX0Ke2lmICRtZXNzYWdlICE9IFwnXCd9CiAge2lmICRlcnJvciAhPSBcJ1wnfQogICAgPHA+PGZvbnQgY29sb3I9InJlZCI+eyRtZXNzYWdlfTwvZm9udD48L3A+CiAge2Vsc2V9CiAgICA8cD57JG1lc3NhZ2V9PC9wPgogIHsvaWZ9CnsvaWZ9CjxwPnskbG9zdHB3X21lc3NhZ2V9PC9wPgo8cD57JHByb21wdF91c2VybmFtZX0mbmJzcDt7JGlucHV0X3VzZXJuYW1lfTwvcD4KPHA+eyRoaWRkZW59eyRzdWJtaXR9Jm5ic3B7JGNhbmNlbH08L3A+CnskZW5kZm9ybX0KPCEtLSBmb3Jnb3QgcGFzc3dvcmQgdGVtcGxhdGUgLS0+IAogICc7CgogIHZhciAkZGZsdF9mb3Jnb3RwYXNzd29yZHRlbXBsYXRlMiA9ICcKPCEtLSBmb3Jnb3QgcGFzc3dvcmQgZW1haWwgdGVtcGxhdGUgLS0+CjxwPnskbWVzc2FnZV9mb3Jnb3Rwd2VtYWlsfTwvcD4KPHA+eyRwcm9tcHRfY29kZX0mbmJzcDt7JGRhdGFfY29kZX08L3A+CjxwPnskcHJvbXB0X2xpbmt9Jm5ic3A7eyRkYXRhX2xpbmt9PHA+CjwhLS0gZm9yZ290IHBhc3N3b3JkIGVtYWlsIHRlbXBsYXRlIC0tPgogICc7CgoKICB2YXIgJGRmbHRfZm9yZ290cGFzc3dvcmR0ZW1wbGF0ZTMgPSAnCjwhLS0gZm9yZ290IHBhc3N3b3JkIHZlcmlmaWNhdGlvbiB0ZW1wbGF0ZSAtLT4KeyRzdGFydGZvcm19CnskdGl0bGV9CntpZiAkbWVzc2FnZSAhPSBcJ1wnfQogIHtpZiAkZXJyb3IgIT0gXCdcJ30KICAgIDxwPjxmb250IGNvbG9yPSJyZWQiPnskbWVzc2FnZX08L2ZvbnQ+PC9wPgogIHtlbHNlfQogICAgPHA+eyRtZXNzYWdlfTwvcD4KICB7L2lmfQp7L2lmfQo8cD57JHByb21wdF91c2VybmFtZX0mbmJzcDt7JGlucHV0X3VzZXJuYW1lfTwvcD4KPHA+eyRwcm9tcHRfY29kZX0mbmJzcDt7JGlucHV0X2NvZGV9PC9wPgo8cD57JHByb21wdF9wYXNzd29yZH0mbmJzcDt7JGlucHV0X3Bhc3N3b3JkfTwvcD4KPHA+eyRwcm9tcHRfcmVwZWF0cGFzc3dvcmR9Jm5ic3A7eyRpbnB1dF9yZXBlYXRwYXNzd29yZH08L3A+CjxwPnskaGlkZGVufXskc3VibWl0fTwvcD4KeyRlbmRmb3JtfQo8IS0tIGZvcmdvdCBwYXNzd29yZCB2ZXJpZmljYXRpb24gdGVtcGxhdGUgLS0+Cic7CgogIHZhciAkZGZsdF9sb2dpbmZvcm10ZW1wbGF0ZSA9ICcKPCEtLSBMb2dpbiBmb3JtIHRlbXBsYXRlIC0tPgogPGZvbnQgc2l6ZT0iLTIiPgogeyRzdGFydGZvcm19CiB7aWYgJGVycm9yfQogIHskZXJyb3J9PGJyPgogey9pZn0KICA8cD57JHByb21wdF91c2VybmFtZX0mbmJzcDt7JGlucHV0X3VzZXJuYW1lfSZuYnNwO3skcHJvbXB0X3Bhc3N3b3JkfSZuYnNwOwogIHskaW5wdXRfcGFzc3dvcmR9Jm5ic3A7eyRpbnB1dF9zdWJtaXR9PGJyLz4KICB7JGxpbmtfZm9yZ290fQogeyRlbmRmb3JtfQogIDwvZm9udD4KPCEtLSBMb2dpbiBmb3JtIHRlbXBsYXRlIC0tPgogJzsKCiAgdmFyICRkZmx0X2xvZ291dGZvcm10ZW1wbGF0ZSA9ICcKPCEtLSBMb2dvdXQgZm9ybSB0ZW1wbGF0ZSAtLT4KIHskc3RhcnRmb3JtfQogIDxwPnskcHJvbXB0X2xvZ2dlZGlufSZuYnNwO3skdXNlcm5hbWV9PC9wPiAKICA8cD57JGxpbmtfbG9nb3V0fTwvcD4KICA8cD57JGxpbmtfY2hhbmdlc2V0dGluZ3N9PC9wPgogeyRlbmRmb3JtfQo8IS0tIExvZ291dCBmb3JtIHRlbXBsYXRlIC0tPgogJzsKCiAgdmFyICRkZmx0X2NoYW5nZXNldHRpbmdzdGVtcGxhdGUgPSAnCjwhLS0gY2hhbmdlIHNldHRpbmdzIHRlbXBsYXRlIC0tPgp7JHRpdGxlfQp7aWYgJG1lc3NhZ2UgIT0gXCdcJ30KICB7aWYgJGVycm9yICE9IFwnXCd9CiAgICA8cD48Zm9udCBjb2xvcj0icmVkIj57JG1lc3NhZ2V9PC9mb250PjwvcD4KICB7ZWxzZX0KICAgIDxwPnskbWVzc2FnZX08L3A+CiAgey9pZn0Key9pZn0KeyRzdGFydGZvcm19CiB7aWYgJGNvbnRyb2xjb3VudCA+IDB9CiAgPGNlbnRlcj4KICA8dGFibGUgd2lkdGg9Ijc1JSI+CiAgICAge2ZvcmVhY2ggZnJvbT0kY29udHJvbHMgaXRlbT1jb250cm9sfQogIDx0cj4KICAgICA8dGQ+eyRjb250cm9sLT5oaWRkZW59PGZvbnQgY29sb3I9InskY29udHJvbC0+Y29sb3J9Ij57JGNvbnRyb2wtPnByb21wdH17JGNvbnRyb2wtPm1hcmtlcn08L2ZvbnQ+PC90ZD4KICAgICA8dGQ+eyRjb250cm9sLT5jb250cm9sfXskY29udHJvbC0+YWRkdGV4dH08L3RkPgogey9mb3JlYWNofQogIDwvdGFibGU+CiAgPC9jZW50ZXI+CiB7L2lmfQogeyRoaWRkZW59eyRoaWRkZW4yfXskc3VibWl0fXskY2FuY2VsfQp7JGVuZGZvcm19CjwhLS0gY2hhbmdlIHNldHRpbmdzIHRlbXBsYXRlIC0tPgogJzsKCgogIC8vSG93IG1hbnkgc2Vjb25kcyBvZiBpbmFjdGl2aXR5IGJlZm9yZSBhIHVzZXIgaXMgYXV0b21hdGljYWxseSBsb2dnZWQgb3V0LgogIHZhciAkZXhwaXJ5dGltZTsKICAKICAvL1NldCB0aGlzIHRvIHRydWUgaWYgdXNlciBzaG91bGQgYmUgcmVkaXJlY3RlZCB0byBkZWZhdWx0IHBhZ2UgYWZ0ZXIgCiAgLy8gbG9nZ2luZyBpbi9vdXQuCiAgdmFyICRsb2dpbnRhcmdldDsKICB2YXIgJG90aGVyaW50YXJnZXQ7CiAgdmFyICRsb2dvdXR0YXJnZXQ7CiAgdmFyICRvdGhlcm91dHRhcmdldDsgIAogIHZhciAkYWxsb3d1c2VyYWRtaW47CiAgdmFyICRlbmFibGVlbWFpbHB3OwogIHZhciAkbGFuZz0iIjsKICB2YXIgJHVzZXJtYW5pcCA9IGZhbHNlOwogIHZhciAkdHlwZXMgPSBmYWxzZTsKCiAgLy8gY29uc3RydWN0b3IKICBmdW5jdGlvbiBGcm9udEVuZFVzZXJzKCkKICB7CiAgICBwYXJlbnQ6OkNNU01vZHVsZSgpOwogICAgJHRoaXMtPnVzZXJtYW5pcCA9IG5ldyBGcm9udEVuZFVzZXJzTWFuaXB1bGF0b3IoICR0aGlzICk7CiAgICAkdGhpcy0+dHlwZXMgPSBhcnJheSggJ3RleHQnID0+IDAsCgkJCSAgJ2NoZWNrYm94JyA9PiAxLAoJCQkgICdlbWFpbCcgPT4gMiwKCQkJICAndGV4dGFyZWEnID0+IDMsCgkJCSAgJ2Ryb3Bkb3duJyA9PiA0ICk7CiAgfQoKICBmdW5jdGlvbiBBZGRHcm91cFBvc3QoJGdyb3VwKQogIHsKICAgIC8vIGEgZ3JvdXAgd2FzIGp1c3QgYWRkZWQgZnJvbSB0aGUgYmFja2VuZAogICAgLy8gbGV0cycgYWRkIHRoZSBzYW1lIGdyb3VwIG5hbWUgaGVyZQogICAgJHJlc3VsdCA9ICR0aGlzLT5BZGRHcm91cCgkZ3JvdXAtPm5hbWUsJHRoaXMtPkxhbmcoJ2JhY2tlbmRfZ3JvdXAnKSk7CiAgfQoKLy8gICBmdW5jdGlvbiBEZWxldGVHcm91cFBvc3QoJGdyb3VwKQovLyAgIHsKLy8gICAgIGRpZSggIkRlbGV0aW5nIGdyb3VwOiAiLiRncm91cC0+bmFtZSApOwovLyAgICAgLy8gYSBncm91cCB3YXMganVzdCBhZGRlZCBmcm9tIHRoZSBiYWNrZW5kCi8vICAgICAvLyBsZXRzJyBhZGQgdGhlIHNhbWUgZ3JvdXAgbmFtZSBoZXJlCi8vICAgICAkaWQgPSAkdGhpcy0+R2V0R3JvdXBOYW1lKCAkZ3JvdXAtPm5hbWUgKTsKLy8gICAgIGlmKCAkaWQgKQovLyAgICAgICB7IAovLyAJJHJlc3VsdCA9ICR0aGlzLT5EZWxldGVHcm91cEZ1bGwoJGlkKTsKLy8gICAgICAgfQovLyAgIH0KCiAgZnVuY3Rpb24gR2VuZXJhdGVSYW5kb21QcmludGFibGVTdHJpbmcoICRsZW4gPSAxMCApCiAgewogICAgJG8xID0gbmV3IFJhbmRvbSgiMjM0NTY3ODlBQkNERUZHSEpLTU5QUVJTVFVWV1hZWiIpOwogICAgcmV0dXJuICRvMS0+Z2V0KCRsZW4pOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldE5hbWUoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldE5hbWUoKSAJCiAgewogICAgcmV0dXJuICdGcm9udEVuZFVzZXJzJzsKICB9CgogCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0VmVyc2lvbigpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0VmVyc2lvbigpCQogIHsKICAgIHJldHVybiAnMS4wLjUnOwogIH0KCiAKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBsYW5naWZ5S2V5cygpCiAKICAgR2l2ZW4gYW4gYXNzb2NpYXRpdmUgYXJyYXksIHJlcGxhY2UgdGhlIHZhbHVlcyB3aXRoCiAgIHRyYW5zbGF0ZWQgb25lcy4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBsYW5naWZ5S2V5cyggJGFyciApCiAgewogICAgJG91dCA9IGFycmF5KCk7CiAgICBmb3JlYWNoKCAkYXJyIGFzICRrPT4kdiApCiAgICB7CiAgICAgICRrID0gJHRoaXMtPkxhbmcoJGspOwogICAgICAkb3V0WyAkayBdID0gJHY7CiAgICB9CiAgICByZXR1cm4gJG91dDsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBJc1BsdWdpbk1vZHVsZSgpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gSXNQbHVnaW5Nb2R1bGUoKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBNaW5pbXVtQ01TVmVyc2lvbigpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gTWluaW11bUNNU1ZlcnNpb24oKQogIHsKICAgIHJldHVybiAiMC4xMy1iZXRhMiI7CiAgfQogIAogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldEFkbWluRGVzY3JpcHRpb24oKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldEFkbWluRGVzY3JpcHRpb24gKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcgKCdtb2RkZXNjcmlwdGlvbicpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldEFkbWluU2VjdGlvbigpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0QWRtaW5TZWN0aW9uICgpCiAgewogICAgcmV0dXJuICd1c2Vyc2dyb3Vwcyc7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0RGVwZW5kZW5jaWVzKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXREZXBlbmRlbmNpZXMoKQogIHsKICAgIHJldHVybiBhcnJheSggJ0NNU01haWxlcicgPT4gJzEuNzMuMycgKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRGcmllbmRseU5hbWUoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIENvbnRlbnRQcmVSZW5kZXIoJiRjb250ZW50KQogIHsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZmV1c2Vyc19sb2dnZWRpbicsKCR0aGlzLT5Mb2dnZWRJbklkKCkgPiAwKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2ZldXNlcnNfbG9nZ2lubmFtZScsJHRoaXMtPkxvZ2dlZEluTmFtZSgpKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRGcmllbmRseU5hbWUoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIF9FeHBvcnRMb2dnZWRJblVzZXJWYXJpYWJsZXMoJGlkLCYkcGFyYW1zLCRyZXR1cm5pZCkgCiAgewogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd1c2VybmFtZScsICR0aGlzLT5Mb2dnZWRJbk5hbWUoKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2xpbmtfbG9nb3V0JywKCQkJICAkdGhpcy0+Q3JlYXRlTGluaygkaWQsImxvZ291dCIsJHJldHVybmlkLAoJCQkJCSAgICAkdGhpcy0+TGFuZygnbG9nb3V0JykpKTsKICAgICRwYWdlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3BhZ2VpZF9jaGFuZ2VzZXR0aW5ncycpOwogICAgaWYoICRwYWdlICkKICAgIHsKICAgICAgJGlkID0gQ29udGVudE1hbmFnZXI6OkdldFBhZ2VJREZyb21BbGlhcyggJHBhZ2UgKTsKICAgICAgaWYoICRpZCA9PSBmYWxzZSApCiAgICAgIHsKICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2xpbmtfY2hhbmdlc2V0dGluZ3MnLCc8IS0tIEVycm9yIGNvdWxkIG5vdCBkZXRlcm1pbmUgcGFnZSBmcm9tIGFsaWFzL2lkIC0tPicpOwogICAgICB9CiAgICAgIGVsc2UgCiAgICAgIHsKICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2xpbmtfY2hhbmdlc2V0dGluZ3MnLAogICAgICAgICAgICR0aGlzLT5DcmVhdGVDb250ZW50TGluayggJGlkLCAkdGhpcy0+TGFuZygncHJvbXB0X2NoYW5nZXNldHRpbmdzJykpKTsKICAgICAgfQogICAgfQogICAgZWxzZQogICAgewogICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdsaW5rX2NoYW5nZXNldHRpbmdzJywKCQkJICAkdGhpcy0+Q3JlYXRlTGluaygkaWQsImNoYW5nZXNldHRpbmdzIiwkcmV0dXJuaWQsCgkJCQkJICAgICR0aGlzLT5MYW5nKCdwcm9tcHRfY2hhbmdlc2V0dGluZ3MnKSkpOwogICAgfQogICAgJHByb3BzID0gJHRoaXMtPkdldFVzZXJQcm9wZXJ0aWVzKCAkdGhpcy0+TG9nZ2VkSW5JZCgpICk7CiAgICBmb3JlYWNoKCAkcHJvcHMgYXMgJHAgKQogICAgewogICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJHBbJ3RpdGxlJ10sJHBbJ2RhdGEnXSk7CiAgICB9CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0RnJpZW5kbHlOYW1lKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUgKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEhhc0FkbWluKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBIYXNBZG1pbiAoKQogIHsKICAgIHJldHVybiB0cnVlOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIF9HZXRVc2Vyc0luQ1NWRm9ybWF0KCkKICAgTk9URTogVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgaW4gdGhlIGFwaQoKICAgR2V0IGEgbGlzdCBvZiBhbGwgdXNlcnMgaW4gQ1NWIGZvcm1hdCwgaW5jbHVkaW5nIGFsbCB1c2VyCiAgIHByb3BlcnRpZXMuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX0dldFVzZXJzSW5DU1ZGb3JtYXQoKQogIHsKICAgICAkc3RhcnQgPSAwOwogICAgICRudW0gPSAyOyAvLyB0b2RvLCBzaG91bGQgYmUgYSBwcmVmZXJlbmNlCiAgICAgJGRvbmUgPSAwOwoKICAgICAkZGIgPSYgJHRoaXMtPkdldERiKCk7CgogICAgICR1aWQgPSAnJzsKICAgICAkZmlyc3QgPSAxOwogICAgIHdoaWxlKCAkZG9uZSA9PSAwICkKICAgICB7CiAgICAgICAkcXVlcnkgPSAic2VsZWN0IGRpc3RpbmN0IGdyb3VwbmFtZSx1c2VyaWQsdXNlcm5hbWUsY3JlYXRlZGF0ZSxleHBpcmVzLGRhdGEgZnJvbSBjbXNfbW9kdWxlX2ZldXNlcnNfZ3JvdXBzIEEsY21zX21vZHVsZV9mZXVzZXJzX2dyb3VwcHJvcG1hcCBCLCBjbXNfbW9kdWxlX2ZldXNlcnNfcHJvcGVydGllcyBDLCBjbXNfbW9kdWxlX2ZldXNlcnNfdXNlcnMgRCB3aGVyZSBBLmlkPUIuZ3JvdXBfaWQgYW5kIEMudGl0bGUgPSBCLm5hbWUgYW5kIEMudXNlcmlkID0gRC5pZCBvcmRlciBieSBncm91cG5hbWUsdXNlcmlkLHNvcnRfa2V5LG5hbWUgbGltaXQgJHN0YXJ0LCRudW0iOwogICAgICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcXVlcnkgKTsKICAgICAgIGlmKCAhJGRicmVzdWx0IHx8ICgkZGJyZXN1bHQtPlJvd0NvdW50KCkgPT0gMCkgKQogICAgICAgewogICAgICAgICBlY2hvICRkYi0+RXJyb3JNc2coKTsKICAgICAgICAgJGRvbmUgPSAxOwogICAgICAgICBicmVhazsKICAgICAgIH0KCiAgICAgICAvLyBub3cgaXRlcmF0ZSB0aHJvdWdoIGFsbCBvZiB0aGUgcmVzdWx0cywgYW5kIGRvIHRoZSBleHBvcnQKICAgICAgICRvdXRwdXQgPSAnJzsKICAgICAgIHdoaWxlKCAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpICkKICAgICAgIHsKICAgICAgICAgIGlmKCAkdWlkICE9ICRyb3dbJ3VzZXJpZCddICkKICAgICAgICAgIHsgCiAgICAgICAgICAgIC8vIHVpZCBjaGFuZ2VkIGZyb20gdGhlIGxhc3Qgb25lCiAgICAgICAgICAgIGlmKCAkZmlyc3QgPT0gMCApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAkb3V0cHV0IC49ICJcbiI7ICAvLyBuZXdsaW5lCiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGZpcnN0ID0gMDsKICAgICAgICAgICAgJG91dHB1dCAuPSAkcm93Wydncm91cG5hbWUnXS4iLCIuJHJvd1sndXNlcmlkJ10uIiwiLiRyb3dbJ3VzZXJuYW1lJ10uIiwiLgogICAgICAgICAgICAgICAgICAgICAgICRyb3dbJ2NyZWF0ZWRhdGUnXS4iLCIuJHJvd1snZXhwaXJlcyddOwogICAgICAgICAgICAkdWlkID0gJHJvd1sndXNlcmlkJ107CiAgICAgICAgICB9CgogICAgICAgICAgLy8gb3V0cHV0IHRoZSBwcm9wZXJ0eQogICAgICAgICAgJG91dHB1dCAuPSAiLCIuJHJvd1snZGF0YSddOwogICAgICAgfQoKICAgICAgIC8vIGdldCByZWFkeSBmb3IgYW5vdGhlciByb3VuZAogICAgICAgZWNobyAkb3V0cHV0OwogICAgICAgJHN0YXJ0ICs9ICRudW07CiAgICAgfQoKICAgICAvLyBvbmUgbGFzdCBuZXdsaW5lCiAgICAgZWNobyAiXG5lbmRcbiI7CiAgfQoKICBmdW5jdGlvbiBfR2V0VXNlckxvZ2luRm9ybSgkaWQsJiRwYXJhbXMsJHJldHVybmlkKSAKICB7CiAgICAkdXNlcm5hbWUgPSAoaXNzZXQoJHBhcmFtc1snaW5wdXRfdXNlcm5hbWUnXSk/JHBhcmFtc1snaW5wdXRfdXNlcm5hbWUnXTonJyk7CiAgICAkcGFzc3dvcmQgPSAoaXNzZXQoJHBhcmFtc1snaW5wdXRfcGFzc3dvcmQnXSk/JHBhcmFtc1snaW5wdXRfcGFzc3dvcmQnXTonJyk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2Vycm9yJywgJHBhcmFtc1snZXJyb3InXSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsIAoJCQkgICR0aGlzLT5mZUNyZWF0ZUZvcm1TdGFydCggJGlkLCAnZG9fbG9naW4nLCAkcmV0dXJuaWQgKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF91c2VybmFtZScsICR0aGlzLT5MYW5nKCdwcm9tcHRfdXNlcm5hbWUnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3VzZXJuYW1lJywgCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCggJGlkLCAnaW5wdXRfdXNlcm5hbWUnLCAKCQkJCQkJICAkaW5wdXRfdXNlcm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3VzZXJuYW1lZmxkbGVuZ3RoJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPkdldFByZWZlcmVuY2UoJ21heF91c2VybmFtZWxlbmd0aCcpKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X2xhYmVsJywgJGlkICk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF9wYXNzd29yZCcsICR0aGlzLT5MYW5nKCdwcm9tcHRfcGFzc3dvcmQnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3Bhc3N3b3JkJywKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRQYXNzd29yZCgkaWQsICdpbnB1dF9wYXNzd29yZCcsIAoJCQkJCQkgICAgICRpbnB1dF9wYXNzd29yZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncGFzc3dvcmRmbGRsZW5ndGgnKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWF4X3Bhc3N3b3JkbGVuZ3RoJykpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfc3VibWl0JywKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnYnRuX2xvZ2luJywgCgkJCQkJCSAgICR0aGlzLT5MYW5nKCdsb2dpbicpKSk7CiAgICAkcGFnZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwYWdlaWRmb3Jnb3RwYXNzd2QnKTsKICAgIGlmKCAkcGFnZSApCiAgICB7CiAgICAgICRpZCA9IENvbnRlbnRNYW5hZ2VyOjpHZXRQYWdlSURGcm9tQWxpYXMoICRwYWdlICk7CiAgICAgIGlmKCAkaWQgPT0gZmFsc2UgKQogICAgICB7CiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdsaW5rX2ZvcmdvdCcsJzwhLS0gRXJyb3IgY291bGQgbm90IGRldGVybWluZSBwYWdlIGZyb20gYWxpYXMvaWQgLS0+Jyk7CiAgICAgIH0KICAgICAgZWxzZSAKICAgICAgewogICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignbGlua19mb3Jnb3QnLAoJCQkgICAgJHRoaXMtPkNyZWF0ZUNvbnRlbnRMaW5rKCRpZCwkdGhpcy0+TGFuZygnZm9yZ290cHcnKSkpOwogICAgICB9CiAgICB9CiAgICBlbHNlIAogICAgewogICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2xpbmtfZm9yZ290JywKCQkJICAgICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZm9yZ290cHcnLCAkcmV0dXJuaWQsCgkJCQkJICAgICR0aGlzLT5MYW5nKCdmb3Jnb3RwdycpKSk7CiAgICB9CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2VuZGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybUVuZCAoKSk7CiAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJ2ZldXNlcnNfbG9naW5mb3JtJyk7CiAgfQoKCQogZnVuY3Rpb24gR2V0UGFnZUlkKCRhbGlhcykgewkJCiAgICBpZiAoJGFsaWFzPT0iIikgcmV0dXJuIGZhbHNlOwogICAgJGRiID0mICR0aGlzLT5HZXREYigpOwogICAgJHF1ZXJ5ID0gIlNFTEVDVCBjb250ZW50X2lkIEZST00gIi5jbXNfZGJfcHJlZml4KCkuImNvbnRlbnQgV0hFUkUgY29udGVudF9hbGlhcyA9ICciLiRhbGlhcy4iJyI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKICAgIGlmICgkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5Sb3dDb3VudCgpID4gMCkJewogICAgICAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpOwogICAgICByZXR1cm4gJHJvd1snY29udGVudF9pZCddOwogICAgfQogICAgcmV0dXJuIGZhbHNlOwogIH0KCgogIGZ1bmN0aW9uIF9HZXRVc2VyTG9nb3V0Rm9ybSgkaWQsJiRwYXJhbXMsJHJldHVybmlkKSAKICB7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF9sb2dnZWRpbicsCgkJCSAgJHRoaXMtPkxhbmcoJ21zZ19jdXJyZW50bHlsb2dnZWRpbmFzJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd1c2VybmFtZScsICR0aGlzLT5Mb2dnZWRJbk5hbWUoKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2xpbmtfbG9nb3V0JywKCQkJICAkdGhpcy0+Q3JlYXRlTGluaygkaWQsImxvZ291dCIsJHJldHVybmlkLAoJCQkJCSAgICAkdGhpcy0+TGFuZygnbG9nb3V0JykpKTsKICAgICRwYWdlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3BhZ2VpZF9jaGFuZ2VzZXR0aW5ncycpOwogICAgaWYoICRwYWdlICkKICAgIHsKICAgICAgJGlkID0gQ29udGVudE1hbmFnZXI6OkdldFBhZ2VJREZyb21BbGlhcyggJHBhZ2UgKTsKICAgICAgaWYoICRpZCA9PSBmYWxzZSApCiAgICAgIHsKICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2xpbmtfY2hhbmdlc2V0dGluZ3MnLCc8IS0tIEVycm9yIGNvdWxkIG5vdCBkZXRlcm1pbmUgcGFnZSBmcm9tIGFsaWFzL2lkIC0tPicpOwogICAgICB9CiAgICAgIGVsc2UgCiAgICAgIHsKICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2xpbmtfY2hhbmdlc2V0dGluZ3MnLAogICAgICAgICAgICR0aGlzLT5DcmVhdGVDb250ZW50TGluayggJGlkLCAkdGhpcy0+TGFuZygncHJvbXB0X2NoYW5nZXNldHRpbmdzJykpKTsKICAgICAgfQogICAgfQogICAgZWxzZQogICAgewogICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdsaW5rX2NoYW5nZXNldHRpbmdzJywKCQkJICAkdGhpcy0+Q3JlYXRlTGluaygkaWQsImNoYW5nZXNldHRpbmdzIiwkcmV0dXJuaWQsCgkJCQkJICAgICR0aGlzLT5MYW5nKCdwcm9tcHRfY2hhbmdlc2V0dGluZ3MnKSkpOwogICAgfQogICAgJHByb3BzID0gJHRoaXMtPkdldFVzZXJQcm9wZXJ0aWVzKCAkdGhpcy0+TG9nZ2VkSW5JZCgpICk7CiAgICBmb3JlYWNoKCAkcHJvcHMgYXMgJHAgKQogICAgewogICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJHBbJ3RpdGxlJ10sJHBbJ2RhdGEnXSk7CiAgICB9CiAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJ2ZldXNlcnNfbG9nb3V0Zm9ybScpOwogIH0KCgogZnVuY3Rpb24gX0hhc1N1ZmZpY2llbnRQZXJtaXNzaW9ucyggJHBlcm0gPSAnJyApCiAgewogICAgJHAxID0gJHRoaXMtPkNoZWNrUGVybWlzc2lvbiggJ0FkZCBVc2VycycgKTsKICAgICRwMiA9ICR0aGlzLT5DaGVja1Blcm1pc3Npb24oICdNb2RpZnkgVXNlcnMnICk7CiAgICAkcDMgPSAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCAnUmVtb3ZlIFVzZXJzJyApOwogICAgJHA0ID0gJHRoaXMtPkNoZWNrUGVybWlzc2lvbiggJ0FkZCBHcm91cHMnICk7CiAgICAkcDUgPSAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCAnTW9kaWZ5IEdyb3VwcycgKTsKICAgICRwNiA9ICR0aGlzLT5DaGVja1Blcm1pc3Npb24oICdNb2RpZnkgR3JvdXAgQXNzaWdubWVudHMnICk7CiAgICAkcDcgPSAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCAnUmVtb3ZlIEdyb3VwcycgKTsKICAgICRwOCA9ICR0aGlzLT5DaGVja1Blcm1pc3Npb24oICdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycgKTsKICAgICRwOSA9ICR0aGlzLT5DaGVja1Blcm1pc3Npb24oICdNb2RpZnkgRnJvbnRFbmRVc2VyUHJvcHMnICk7CiAgICAkcDEwID0gJHRoaXMtPkNoZWNrUGVybWlzc2lvbiggJ01vZGlmeSBUZW1wbGF0ZXMnICk7CgogICAgJHJldCA9IDA7CiAgICBzd2l0Y2goICRwZXJtICkKICAgICAgewogICAgICBjYXNlICcnOiAgLy8gYW55IHBlcm1pc3Npb24KCSRyZXQgPSAoJHAxIHx8ICRwMiB8fCAkcDMgfHwgJHA0IHx8ICRwNSB8fCAkcDYgfHwgJHA3IHx8ICRwOCB8fCAkcDkgfHwgJHAxMCApOwoJYnJlYWs7CgogICAgICBjYXNlICdhZGRncm91cCc6CgkkcmV0ID0gKCRwNCk7CglicmVhazsKCiAgICAgIGNhc2UgJ2FkZHVzZXInOgoJJHJldCA9ICgkcDEpOwoJYnJlYWs7CgogICAgICBjYXNlICdhZGRwcm9wJzoKICAgICAgY2FzZSAnYWRkcHJvcDInOgogICAgICBjYXNlICdlZGl0cHJvcCc6CiAgICAgIGNhc2UgJ2RlbGV0ZXByb3AnOgogICAgICBjYXNlICdwcm9wZXJ0aWVzJzsKICAgICAgICAkcmV0ID0gKCRwOSk7CiAgICAgICAgYnJlYWs7CgogICAgICBjYXNlICdsaXN0dXNlcnMnOgoJJHJldCA9ICgkcDIgfHwgJHAzKTsKCWJyZWFrOwoKICAgICAgY2FzZSAnbGlzdGdyb3Vwcyc6CgkkcmV0ID0gKCRwNSB8fCAkcDYpOwoJYnJlYWs7CgogICAgICBjYXNlICdlZGl0Z3JvdXBzJzoKCSRyZXQgPSAoJHA1IHx8ICRwNik7CglicmVhazsKCiAgICAgIGNhc2UgJ2VkaXR1c2Vycyc6CgkkcmV0ID0gKCRwMik7CglicmVhazsKIAogICAgICBjYXNlICdyZW1vdmVncm91cHMnOgoJJHJldCA9ICgkcDcpOwoJYnJlYWs7CgogICAgICBjYXNlICdyZW1vdmV1c2Vycyc6CgkkcmV0ID0gKCRwMyk7CglicmVhazsKCiAgICAgIGNhc2UgJ2VkaXRwcmVmcyc6CiAgICAgIGNhc2UgJ3NpdGVwcmVmcyc6CgkkcmV0ID0gKCRwOCk7CglicmVhazsKCiAgICAgIGNhc2UgJ3VzZXJzbmdyb3Vwcyc6CiAgICAgICAgJHJldCA9ICgkcDEgfHwgJHAyIHx8ICRwMyB8fCAkcDQgfHwgJHA1IHx8ICRwNiB8fCAkcDcpOwogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSAndGVtcGxhdGVzJzoKICAgICAgICAkcmV0ID0gKCRwMTApOwogICAgICAgIGJyZWFrOwoKICAgICAgZGVmYXVsdDoKCSRyZXQgPSAwOwoJYnJlYWs7CiAgICAgIH0KCiAgICByZXR1cm4gJHJldDsKICB9CgoKICBmdW5jdGlvbiBJbnN0YWxsUG9zdE1lc3NhZ2UoKQl7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3RpbnN0YWxsbWVzc2FnZScpOwogIH0KCgogIGZ1bmN0aW9uIFZpc2libGVUb0FkbWluVXNlcigpCiAgewogICAgIHJldHVybiAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpIHx8CiAgICAgICAgICAgICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBUZW1wbGF0ZXMnKSB8fAogICAgICAgICAgICAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdBZGQgR3JvdXBzJykgfHwKICAgICAgICAgICAgJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IEdyb3VwcycpIHx8CiAgICAgICAgICAgICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1JlbW92ZSBHcm91cHMnKSB8fAogICAgICAgICAgICAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdBZGQgVXNlcnMnKSB8fAogICAgICAgICAgICAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgVXNlcnMnKSB8fAogICAgICAgICAgICAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdSZW1vdmUgVXNlcnMnKSB8fAogICAgICAgICAgICAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgRnJvbnRFbmRVc2VyUHJvcHMnKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBfRGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJG1lc3NhZ2UpCiAgIE5PVCBQQVJUIE9GIFRIRSBNT0RVTEUgQVBJCgogICBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgYSBzaW1wbGUgbWV0aG9kIHRvIGRpc3BsYXkKICAgZXJyb3IgaW5mb3JtYXRpb24gb24gdGhlIGFkbWluIHNpZGUuCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX0Rpc3BsYXlFcnJvclBhZ2UoJGlkLCAmJHBhcmFtcywgJHJldHVybmlkLCAkbWVzc2FnZT0nJykKICB7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlX2Vycm9yJywgJHRoaXMtPkxhbmcoJ2Vycm9yJykpOwogICAgaWYgKCRtZXNzYWdlICE9ICcnKQogICAgICB7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21lc3NhZ2UnLCAkbWVzc2FnZSk7CiAgICAgIH0KICAgICAgCiAgICAvLyBEaXNwbGF5IHRoZSBwb3B1bGF0ZWQgdGVtcGxhdGUKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZXJyb3IudHBsJyk7CiAgfQoKCiAgZnVuY3Rpb24gX0RvQWRkR3JvdXAoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICAvLyBhcmUgd2UgY2FuY2VsbGluZwogICAgaWYgKGlzc2V0ICgkcGFyYW1zWydjYW5jZWwnXSkpCiAgICB7CiAgICAgICR0aGlzLT5teVJlZGlyZWN0VG9UYWIoJGlkLCAnZ3JvdXBzJyApOwogICAgfQoKICAgICRncm91cG5hbWUgPSAnJzsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfZ3JvdXBuYW1lJ10gKSApCiAgICAgIHsKCSRncm91cG5hbWUgPSB0cmltKCRwYXJhbXNbJ2lucHV0X2dyb3VwbmFtZSddKTsKICAgICAgfQogICAgJGdyb3VwZGVzYyA9ICcnOwogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9ncm91cGRlc2MnXSApICkKICAgICAgewoJJGdyb3VwZGVzYyA9IHRyaW0oJHBhcmFtc1snaW5wdXRfZ3JvdXBkZXNjJ10pOwogICAgICB9CgogICAgLy8gbWFrZSBzdXJlIHRoZSBwYXJhbWV0ZXJzIGFyZSBmaWxsZWQgaW4KICAgIGlmKCAkZ3JvdXBuYW1lID09ICcnIHx8ICRncm91cGRlc2MgPT0gJycgKQogICAgICB7CgkkcGFyYW1zWydlcnJvciddID0gJzEnOwoJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRwYXJhbXMnKTsKCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdhZGRncm91cCcsICRyZXR1cm5pZCwgJHBhcmFtcyApOwoJcmV0dXJuOwogICAgICB9CgogICAgLy8gbWFrZSBzdXJlIHRoZSBncm91cCBuYW1lIGRvZXNuJ3QgYWxyZWFkeSBleGlzdAogICAgaWYoICR0aGlzLT5HZXRHcm91cElEKCAkZ3JvdXBuYW1lICkgIT0gZmFsc2UgKQogICAgICB7CgkkcGFyYW1zWydlcnJvciddID0gJzEnOwoJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2dyb3VwZXhpc3RzJyk7CgkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnYWRkZ3JvdXAnLCAkcmV0dXJuaWQsICRwYXJhbXMgKTsKCXJldHVybjsKICAgICAgfQoKICAgICRyZWxuYWRkZWQgPSAwOwogICAgZm9yZWFjaCggJHBhcmFtcyBhcyAka2V5ID0+ICR2YWwgKQogICAgewogICAgICAkcHJvcG5hbWUgPSAnJzsKICAgICAgJHNvcnRvcmRlciA9ICcnOwogICAgICBpZiggcHJlZ19tYXRjaCggJy9eaW5wdXRfcmVxdWlyZWRfLycsICRrZXkgKSAmJiAoJHZhbCAhPSAwKSApCgl7CgkgICRyZWxuYWRkZWQrKzsKCX0KICAgIH0KICAgIGlmKCAkcmVsbmFkZGVkID09IDAgKQogICAgICB7CgkkcGFyYW1zWydlcnJvciddID0gJzEnOwoJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX25vcmVsYXRpb25zJyk7CgkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnYWRkZ3JvdXAnLCAkcmV0dXJuaWQsICRwYXJhbXMgKTsKCXJldHVybjsKICAgICAgfQoKICAgIC8vIHdlJ3JlIGNsZWFyIHRvIGFkZAogICAgJHJldCA9ICR0aGlzLT5BZGRHcm91cCggJGdyb3VwbmFtZSwgJGdyb3VwZGVzYyApOwogICAgaWYoICRyZXRbMF0gPT0gRkFMU0UgKQogICAgICB7CgkkcGFyYW1zWydlcnJvciddID0gJzEnOwoJJHBhcmFtc1snbWVzc2FnZSddID0gJHJldFsxXTsKCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdhZGRncm91cCcsICRyZXR1cm5pZCwgJHBhcmFtcyApOwoJcmV0dXJuOwogICAgICB9CgogICAgLy8gYWxzbyBhZGQgdGhlIHByb3BlcnR5IGNob2ljZXMKICAgICR0aGlzLT5EZWxldGVBbGxHcm91cFByb3BlcnR5UmVsYXRpb25zKCAkcmV0WzFdICk7CiAgICBmb3JlYWNoKCAkcGFyYW1zIGFzICRrZXkgPT4gJHZhbCApCiAgICB7CiAgICAgICRwcm9wbmFtZSA9ICcnOwogICAgICAkc29ydG9yZGVyID0gJyc7CiAgICAgIGlmKCBwcmVnX21hdGNoKCAnL15pbnB1dF9yZXF1aXJlZF8vJywgJGtleSApICkKCXsKCSAgJHByb3BuYW1lID0gc3Vic3RyKCRrZXksc3RybGVuKCdpbnB1dF9yZXF1aXJlZF8nKSk7Cgl9CiAgICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfc29ydG9yZGVyXycuJHByb3BuYW1lXSApICkKCXsKCSAgJHNvcnRvcmRlciA9ICRwYXJhbXNbJ2lucHV0X3NvcnRvcmRlcl8nLiRwcm9wbmFtZV07Cgl9CgogICAgICBpZiggJHZhbCAhPSAwICYmICRwcm9wbmFtZSAhPSAnJykKCXsKCSAgJHRoaXMtPkFkZEdyb3VwUHJvcGVydHlSZWxhdGlvbiggJHJldFsxXSwgJHByb3BuYW1lLCAkc29ydG9yZGVyLCAkdmFsICk7Cgl9CiAgICB9CgogICAgJHRoaXMtPm15UmVkaXJlY3RUb1RhYigkaWQsICdncm91cHMnLCAkcGFyYW1zICk7IAogIH0KCgogIGZ1bmN0aW9uIF9Eb0FkZFByb3AoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICAvLyBhcmUgd2UgY2FuY2VsbGluZwogICAgaWYgKGlzc2V0ICgkcGFyYW1zWydjYW5jZWwnXSkpCiAgICAgIHsKCSR0aGlzLT5teVJlZGlyZWN0VG9UYWIoJGlkLCAncHJvcGVydGllcycgKTsKICAgICAgfQogICAgCiAgICAkbmFtZSA9ICcnOwogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ2lucHV0X25hbWUnXSApICkgewogICAgICAkbmFtZSA9IHRyaW0oJHBhcmFtc1snaW5wdXRfbmFtZSddKTsKICAgICAgJG5hbWUgPSBzdHJ0b2xvd2VyKHByZWdfcmVwbGFjZSgnLyAvJywnXycsJG5hbWUpKTsKICAgIH0KICAgICRwcm9tcHQgPSAnJzsKICAgIGlmKCBpc3NldCgkcGFyYW1zWydpbnB1dF9wcm9tcHQnXSApICkgewogICAgICAkcHJvbXB0ID0gdHJpbSgkcGFyYW1zWydpbnB1dF9wcm9tcHQnXSk7CiAgICB9CiAgICAkdHlwZSA9ICcnOwogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ2lucHV0X3R5cGUnXSkgKSB7CiAgICAgICR0eXBlID0gJHBhcmFtc1snaW5wdXRfdHlwZSddOwogICAgfQogICAgJHNlbG9wdGlvbnMgPSAnJzsKICAgICRvcHRpb25zID0gJyc7CiAgICBpZiggaXNzZXQoJHBhcmFtc1snaW5wdXRfc2Vsb3B0aW9ucyddICkgKSB7CiAgICAgICRzZWxvcHRpb25zID0gJHBhcmFtc1snaW5wdXRfc2Vsb3B0aW9ucyddOwogICAgICAkb3B0aW9ucyA9IGV4cGxvZGUoIlxuIiwgJHNlbG9wdGlvbnMpOwogICAgfQogICAgCiAgICAvLyBub3cgY2hlY2sgZXZlcnl0aGluZyBvdXQKICAgIC8vIHRvZG8sIGFkZCBhIG1heGltdW0gZmllbGQgbGVuZ3RoIHByZWZlcmVuY2UKICAgIGlmKCAkbmFtZSA9PSAnJyB8fCAkcHJvbXB0ID09ICcnICl7CiAgICAgICRwYXJhbXNbJ2Vycm9yJ10gPSAxOwogICAgICAkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZHBhcmFtcycpOwogICAgICAkdGhpcy0+bXlSZWRpcmVjdCgkaWQsJ2FkZHByb3AnLCRyZXR1cm5pZCwkcGFyYW1zKTsKICAgICAgcmV0dXJuOwogICAgfSAKCiAgICBzd2l0Y2goJHR5cGUpewogICAgY2FzZSAwOgogICAgY2FzZSAyOgogICAgICAkbGVuZ3RoID0gMjA7CiAgICAgICRtYXhsZW5ndGggPSAyMDsKICAgICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9sZW5ndGgnXSApICkgewoJJGxlbmd0aCA9IHRyaW0oJHBhcmFtc1snaW5wdXRfbGVuZ3RoJ10pOwogICAgICB9CiAgICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfbWF4bGVuZ3RoJ10gKSApIHsKCSRtYXhsZW5ndGggPSB0cmltKCRwYXJhbXNbJ2lucHV0X21heGxlbmd0aCddKTsKICAgICAgfQogICAgICBicmVhazsKICAgIGNhc2UgMToKICAgICAgJGxlbmd0aCA9IDE7CiAgICAgIGJyZWFrOwogICAgY2FzZSAzOgogICAgICAkbGVuZ3RoID0gMjU1OwogICAgICBicmVhazsKICAgIGNhc2UgNDoKICAgICAgLy8gZ2V0IHRoZSBudW1iZXIgb2YgZW1wdHkgdmFsdWVzCiAgICAgIC8vIGFuZCBzdWJ0cmFjdCBpdCBmcm9tIHRoZSBhcnJheSBjb3VudAogICAgICAkZWxlbWVudF9jb3VudF9hcnJheSA9IGFycmF5X2NvdW50X3ZhbHVlcygkb3B0aW9ucyk7CiAgICAgICRlbXB0eV9lbGVtZW50X2NvdW50ID0gCgkkZWxlbWVudF9jb3VudF9hcnJheVsiIl0gKwoJJGVsZW1lbnRfY291bnRfYXJyYXlbIlxyIl0gKwoJJGVsZW1lbnRfY291bnRfYXJyYXlbIl9fIl0gKwoJJGVsZW1lbnRfY291bnRfYXJyYXlbIl9fXHIiXTsKICAgICAgJGxlbmd0aCA9IGNvdW50KCRvcHRpb25zKSAtICRlbXB0eV9lbGVtZW50X2NvdW50OwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgICRsZW5ndGggPSAxOwogICAgfQogICAgCiAgICAKICAgIGlmKCAoKCR0eXBlID09IDAgfHwgJHR5cGUgPT0gMikgJiYgKCAkbGVuZ3RoIDwgMSB8fCAkbGVuZ3RoID4gMjU1ICkpIHx8CgkoJHR5cGUgPT0gNCAmJiAkc2Vsb3B0aW9ucyA9PSAnJyApICl7CiAgICAgICRwYXJhbXNbJ2Vycm9yJ10gPSAxOwogICAgICAkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZHBhcmFtcycpOwogICAgICAkdGhpcy0+bXlSZWRpcmVjdCgkaWQsJ2FkZHByb3AyJywkcmV0dXJuaWQsJHBhcmFtcyk7CiAgICAgIHJldHVybjsKICAgIH0KCiAgICAKICAgIC8vIEFkZCBzZWxlY3Qgb3B0aW9ucwogICAgaWYgKCRzZWxvcHRpb25zKSB7CiAgICAgICRyZXN1bHQgPSAkdGhpcy0+QWRkU2VsZWN0T3B0aW9ucyggJG5hbWUsICRvcHRpb25zICk7CiAgICAgIGlmKCAhJHJlc3VsdFswXSApIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJJHBhcmFtc1snbWVzc2FnZSddID0gJHJlc3VsdFsxXTsKCSR0aGlzLT5teVJlZGlyZWN0KCRpZCwnYWRkcHJvcCcsJHJldHVybmlkLCRwYXJhbXMpOwogICAgICB9CiAgICB9CgogICAgCiAgICAvLyBhbmQgYWRkIHRoZSBwcm9wZXJ0eSBkZWZpbml0aW9uCiAgICAkcmVzdWx0ID0gJHRoaXMtPkFkZFByb3BlcnR5RGVmbiggJG5hbWUsICRwcm9tcHQsICR0eXBlLCAkbGVuZ3RoLCAkbWF4bGVuZ3RoICk7CiAgICBpZiggISRyZXN1bHRbMF0gKSB7CiAgICAgICRwYXJhbXNbJ2Vycm9yJ10gPSAxOwogICAgICAkcGFyYW1zWydtZXNzYWdlJ10gPSAkcmVzdWx0WzFdOwogICAgICAkdGhpcy0+bXlSZWRpcmVjdCgkaWQsJ2FkZHByb3AnLCRyZXR1cm5pZCwkcGFyYW1zKTsKICAgIH0KICAgIAogICAgJHRoaXMtPm15UmVkaXJlY3R0b1RhYiggJGlkLCAncHJvcGVydGllcycgKTsKICB9CgoKICBmdW5jdGlvbiBfRG9BZGRVc2VyU3RlcDEoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgLy8gYXJlIHdlIGNhbmNlbGxpbmcKICAgIGlmIChpc3NldCAoJHBhcmFtc1snY2FuY2VsJ10pKQogICAgewogICAgICAkdGhpcy0+bXlSZWRpcmVjdFRvVGFiKCRpZCwgJ3VzZXJzJyApOwogICAgfQoKICAgIC8vIG1ha2Ugc3VyZSB0aGUgcGFyYW1ldGVycyBhcmUgZmlsbGVkIGluCiAgICAkdXNlcm5hbWUgPSB0cmltKCRwYXJhbXNbJ2lucHV0X3VzZXJuYW1lJ10pOwogICAgJHBhc3N3b3JkID0gdHJpbSgkcGFyYW1zWydpbnB1dF9wYXNzd29yZCddKTsKICAgICRyZXBlYXQgICA9IHRyaW0oJHBhcmFtc1snaW5wdXRfcmVwZWF0cGFzc3dvcmQnXSk7CgogICAgJHJldCA9ICR0aGlzLT5faGFuZGxlVXNlckluZm9WYWxpZGF0aW9uKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJG1lc3NhZ2UsIHRydWUgKTsKICAgIHN3aXRjaCggJHJldCApCiAgICAgIHsKICAgICAgY2FzZSAtMTogLy8gZXJyb3IKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJJHBhcmFtc1snbWVzc2FnZSddID0gJG1lc3NhZ2U7CgkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnYWRkdXNlcicsICRyZXR1cm5pZCwkcGFyYW1zICk7CglyZXR1cm47CglicmVhazsKICAgICAgY2FzZSAwOiAgLy8gbm8gZXJyb3IsIGJ1dCBkb24ndCBjb250aW51ZSBvcGVyYXRpb24KCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdhZGR1c2VyJywgJHJldHVybmlkLCRwYXJhbXMgKTsKCXJldHVybjsKCWJyZWFrOwogICAgICBjYXNlIDE6ICAvLyBhbGwgaXMgZ29vZCwgY29udGludWUgb3BlcmF0aW9uCglicmVhazsKICAgICAgfQoKCiAgICAvLyBjb252ZXJ0IHRoZSBleHBpcmVzIGZpZWxkIHRvIGEgcmVhbCB0aW1lCiAgICAkZXhwaXJlcyA9IE5VTEw7CgogICAgLy8gYW5kIHN0b3JlIHRoaXMgYWxsIGluIHRoZSBwYXJhbXMsIAogICAgJHBhcmFtc1snaW5wdXRfdXNlcm5hbWUnXSA9ICR1c2VybmFtZTsKICAgICRwYXJhbXNbJ2lucHV0X3Bhc3N3b3JkJ10gPSAkcGFzc3dvcmQ7CiAgICAkcGFyYW1zWydpbnB1dF9yZXBlYXRwYXNzd29yZCddID0gJHJlcGVhdDsKCiAgICAvLyBhbmQgZ28gdG8gc3RlcCAyCiAgICAkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZG9fYWRkdXNlcjInLCAkcmV0dXJuaWQsJHBhcmFtcyApOwoKLyogICAgCiAvLyBhbmQgYWRkIHRoZSB1c2VyCiAkcmV0ID0gJHRoaXMtPkFkZFVzZXIoICR1c2VybmFtZSwgJGVtYWlsLCAkcGFzc3dvcmQsICRleHBpcmVzICk7CiBpZiggJHJldFswXSA9PSBmYWxzZSApCiB7CiAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdlcnJvcicsICIxIik7CiAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ21lc3NhZ2UnLCAkcmV0WzFdICk7CgkkdGhpcy0+X0Rpc3BsYXlBZG1pbkFkZFVzZXJTdGVwMVBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CglyZXR1cm47CQogICAgICB9CgogICAgICAkdWlkID0gJHRoaXMtPkdldFVzZXJJRCgkdXNlcm5hbWUpOwogICAgaWYoICR1aWQgPT0gZmFsc2UgKQogICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnZXJyb3InLCAiMSIpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnbWVzc2FnZScsICR0aGlzLT5MYW5nKCdlcnJvcl91c2Vybm90Zm91bmQnKSApOwoJJHRoaXMtPl9EaXNwbGF5QWRtaW5BZGRVc2VyU3RlcDFQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJcmV0dXJuOwkKICAgICAgfQoKICAgIC8vIGFuZCB0aGVuIGFkZCBoaW0gdG8gaGlzIGdyb3VwcyAKICAgIGlmKCBhcnJheV9rZXlfZXhpc3RzX3N1YnN0ciggJHBhcmFtcywgJ21lbWJlcm9mXycpICkKICAgICAgewogICAgICAKCSRncnBpZHMgPSBzcGxpdCgiLCIsJHBhcmFtc1snbWVtYmVyb2YnXSk7Cglmb3JlYWNoKCAkZ3JwaWRzIGFzICRnaWQgKQoJewoJICAkcmV0ID0gJHRoaXMtPkFzc2lnblVzZXJUb0dyb3VwKCAkdWlkLCAkZ2lkICk7CgkgIGlmKCAkcmV0ID09IGZhbHNlICkKCSAgICB7CgkgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdlcnJvcicsICIxIik7CgkgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdtZXNzYWdlJywgJHRoaXMtPkxhbmcoJ2Vycm9yX2NhbnRhc3NpZ251c2VyJykgKTsKCSAgICAgICR0aGlzLT5fRGlzcGxheUFkbWluQWRkVXNlclN0ZXAxUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCSAgICAgIHJldHVybjsJCgkgICAgfQoJfQogICAgICB9CgogICAgLy8gYW5kIHRoZW4gYWRkIGhpcyBwcm9wZXJ0aWVzCiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ3VzZXJwcm9wcyddICkgKQogICAgICB7CgkkcHJvcHMgPSBzcGxpdCgiLCIsJHBhcmFtc1sndXNlcnByb3BzJ10pOwoJZm9yZWFjaCggJHByb3BzIGFzICRwcm9wICkKCXsKCSAgbGlzdCggJGssICR2ICkgPSBzcGxpdCgiPSIsJHByb3ApOwoJICAkdGhpcy0+U2V0VXNlclByb3BlcnR5RnVsbCgkaywkdiwkdWlkKTsKCX0KICAgICAgfQoKICAgIC8vIGFuZCB3ZSdyZSBkb25lCiAgICAkdGhpcy0+bXlSZWRpcmVjdCAoJGlkLCAnZGVmYXVsdGFkbWluJyk7CiovCiAgfQoKCiAgZnVuY3Rpb24gX0RvQWRkVXNlclN0ZXAyKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIC8vIGRvIHdlIHdhbnQgdG8gZ28gYmFjawogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydiYWNrJ10gKSApCiAgICAgIHsKCS8vIHl1cCB3ZSBkbwoJJHBhcmFtcyA9IGV4cGxvZGVfd2l0aF9rZXkoICRwYXJhbXNbJ3N0ZXAxX3BhcmFtcyddICk7OwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2FkZHVzZXInLCAkcmV0dXJuaWQsJHBhcmFtcyApOwogICAgICB9CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2NhbmNlbCddICkgKQogICAgICB7CgkvLyB5dXAgd2UgZG8KCSR0aGlzLT5teVJlZGlyZWN0VG9UYWIoICRpZCwgJ3VzZXJzJyApOwogICAgICB9CgogICAgLy8gZ2V0IHRoZSBmaWVsZCBpbmZvCiAgICAkZmxkaW5mbyA9IGFycmF5KCk7CiAgICBmb3JlYWNoKCAkcGFyYW1zIGFzICRrID0+ICR2ICkKICAgICAgewoJaWYoIHByZWdfbWF0Y2goJy9eaGlkZGVuXy8nLCAkayApICkKCSAgewoJICAgICRmbGRuYW1lID0gc3Vic3RyKCAkaywgc3RybGVuKCdoaWRkZW5fJykpOwoJICAgICRwcm9waW5mbyA9IHNwbGl0KCc7Jywkdik7CgkgICAgJGZsZGluZm9bJGZsZG5hbWVdID0gJHByb3BpbmZvOwoJICB9CiAgICAgIH0KCiAgICAvLyBub3cgZ2V0IGVhY2ggb2YgdGhlIGZpZWxkcwogICAgJGZpZWxkcyA9IGFycmF5KCk7CiAgICBmb3JlYWNoKCAkcGFyYW1zIGFzICRrID0+ICR2ICkKICAgICAgewoJaWYoIHByZWdfbWF0Y2goJy9eaW5wdXRfLycsICRrICkgKQoJICB7CgkgICAgJGZsZG5hbWUgPSBzdWJzdHIoICRrLCBzdHJsZW4oJ2lucHV0XycpKTsKCSAgICAkZmllbGRzWyRmbGRuYW1lXSA9ICR2OyAKCSAgfQogICAgICB9CgogICAgLy8gbm93IHZhbGlkYXRlCiAgICBmb3JlYWNoKCAkZmxkaW5mbyBhcyAkbmFtZSA9PiAkdmFsICkKICAgICAgewoJLy8gcHJvY2VzcyBlbXB0eSByZXF1aXJlZCBmaWVsZHMKCS8vIHdlIGRvbid0IGNhcmUgYWJvdXQgZW1wdHkgb3B0aW9uYWwgb25lcwoJaWYoICR2YWxbM10gPT0gMiAmJiAoIWlzc2V0KCAkZmllbGRzWyRuYW1lXSApIHx8ICRmaWVsZHNbJG5hbWVdID09ICcnKSApCgkgIHsKCSAgICAvLyBhIHJlcXVpcmVkIGZpZWxkIGlzIGVtcHR5CgkgICAgJHBhcmFtcyA9IGFycmF5X21lcmdlKCAkcGFyYW1zLCBleHBsb2RlX3dpdGhfa2V5KCAkcGFyYW1zWydzdGVwMV9wYXJhbXMnXSApKTsKCSAgICAkcGFyYW1zWydlcnJvciddID0gMTsKCSAgICAkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfbWlzc2luZ19yZXF1aXJlZF9wYXJhbScsJG5hbWUpOwoJICAgICR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkb19hZGR1c2VyMicsICRyZXR1cm5pZCwkcGFyYW1zICk7CgkgICAgcmV0dXJuOwoJICB9CgoJLy8gdmFsaWRhdGUgZmlsbGVkIGluIGZpZWxkcwoJaWYoIGlzc2V0KCAkZmllbGRzWyRuYW1lXSApICkKCSAgewoJICAgIHN3aXRjaCggJHZhbFsxXSApCgkgICAgICB7CgkgICAgICBjYXNlIDA6IC8vIHRleHQKCQkvLyBub3QgbXVjaCB3ZSBjYW4gZG8gdG8gdmFsaWRhdGUgYSB0ZXh0IGZpZWxkLgoJCWJyZWFrOwoJICAgICAgY2FzZSAxOiAvLyBjaGVja2JveAoJCS8vIG9yIGEgY2hlY2tib3gKCQlicmVhazsKCSAgICAgIGNhc2UgMjogLy8gZW1haWwKCQkvLyBlbWFpbCBhZGRyZXNzZXMgY2FuIGJlIHZhbGlkYXRlZCB0aG91Z2gKCQlicmVhazsKCSAgICAgIGNhc2UgMzogLy8gdGV4dGFyZWEKCQkvLyBhIHRleHRhcmVhIGNhbiBiZSB2YWxpZGF0ZWQgZm9yIGxlbmd0aC4KCQlicmVhazsKCSAgICAgIGNhc2UgNDogLy8gZHJvcGRvd24KCQkvLyBob3cgY2FuIHdlIHZhbGlkYXRlIGEgZHJvcGRvd24/CgkJYnJlYWs7CgkgICAgICB9CgkgIH0KICAgICAgfQoKICAgIC8vIGdldCB0aGUgcGFybXMgZnJvbSB0aGUgZmlyc3Qgc3RlcAogICAgJHBhcm1zMSA9IGV4cGxvZGVfd2l0aF9rZXkoICRwYXJhbXNbJ3N0ZXAxX3BhcmFtcyddICk7CiAgICAKICAgIC8vIGFuZCBtZXJnZSBlbSBpbnRvICRwYXJhbXMgc28gd2UgY2FuIGFjdHVhbGx5IGFkZCB0aGUgdXNlciBhY2NvdW50CiAgICAkcGFyYW1zID0gYXJyYXlfbWVyZ2UoICRwYXJhbXMsICRwYXJtczEgKTsKCiAgICAvLyBub3cgZmluZCBvdXQgd2hpY2ggZ3JvdXBzIGhlJ3MgYSBtZW1iZXIgb2YKICAgICRtZW1iZXJvZiA9IGFycmF5KCk7CiAgICBmb3JlYWNoKCAkcGFyYW1zIGFzICRrID0+ICR2ICkKICAgICAgewoJaWYoIHByZWdfbWF0Y2goJy9ebWVtYmVyb2ZfLycsICRrICkgKQoJICB7CgkgICAgJG1lbWJlcm9mW10gPSAkcGFyYW1zWyRrXTsKCSAgfQogICAgICB9CgogICAgLy8gbm93IHdlIGNhbiBhY3R1YWxseSBhZGQgdGhlIHVzZXIKICAgICRyZXQgPSAkdGhpcy0+QWRkVXNlciggJHBhcmFtc1snaW5wdXRfdXNlcm5hbWUnXSwgCgkJCSAgICRwYXJhbXNbJ2lucHV0X3Bhc3N3b3JkJ10sCgkJCSAgICRwYXJhbXNbJ2lucHV0X2V4cGlyZXNkYXRlJ10gKTsKICAgIGlmKCAkcmV0WzBdID09IEZBTFNFICkKICAgICAgewoJJHBhcmFtc1snZXJyb3InXSA9IDE7CgkkcGFyYW1zWydtZXNzYWdlJ10gPSAkcmV0WzFdOwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RvX2FkZHVzZXIyJywgJHJldHVybmlkLCRwYXJhbXMgKTsKCXJldHVybjsKICAgICAgfQogICAgJHVpZCA9ICRyZXRbMV07CgogICAgLy8gYW5kIGFkZCBoaW0gdG8gaGlzIGdyb3VwcwogICAgZm9yZWFjaCggJG1lbWJlcm9mIGFzICRtZW0gKQogICAgICB7CglpZiggISR0aGlzLT5Bc3NpZ25Vc2VyVG9Hcm91cCggJHJldFsxXSwgJG1lbSApICkKCSAgewoJICAgICRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJICAgICRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkZ3JvdXBpZCcsJG1lbSk7CgkgICAgJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RvX2FkZHVzZXIyJywgJHJldHVybmlkLCRwYXJhbXMgKTsKCSAgICByZXR1cm47CgkgIH0KICAgICAgfQoKICAgIC8vIGFuZCBhZGQgaGlzIHByb3BlcnRpZXMKICAgIGZvcmVhY2goICRmaWVsZHMgYXMgJGsgPT4gJHYgKQogICAgICB7CgkkcmV0ID0gJHRoaXMtPlNldFVzZXJQcm9wZXJ0eUZ1bGwoICRrLCAkdiwgJHVpZCApOwoJaWYoICRyZXQgPT0gZmFsc2UgKQoJICB7CgkgICAgJHBhcmFtc1snZXJyb3InXSA9IDE7CgkgICAgJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yJyk7CgkgICAgJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RvX2FkZHVzZXIyJywgJHJldHVybmlkLCRwYXJhbXMgKTsKCSAgICByZXR1cm47CgkgIH0KICAgICAgfQoKICAgIC8vIGtlZXAgYSBsb2cgb2YgaXQKICAgICR0aGlzLT5BdWRpdCggMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLAoJCSAgJHRoaXMtPkxhbmcoJ3VzZXJfYWRkZWQnLGFycmF5KCR1aWQsJHBhcmFtc1snaW5wdXRfdXNlcm5hbWUnXSkpKTsKCiAgICAvLyBhbmQgdGhhdCBzaG91bGQgYmUgaXQKICAgICR0aGlzLT5teVJlZGlyZWN0VG9UYWIoICRpZCwgJ3VzZXJzJyApOwogIH0KCgogIGZ1bmN0aW9uIF9Eb0FkbWluQWN0aW9ucyggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snYnV0dG9uX2V4cG9ydCddICkgKQogICAgICB7CgkvLyB3ZSB3YW50IHRvIGV4cG9ydCBhIGNzdiBmaWxlIGRvIHdlCgloZWFkZXIoJ0NvbnRlbnQtRGVzY3JpcHRpb246IEZpbGUgVHJhbnNmZXInKTsKCWhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9mb3JjZS1kb3dubG9hZCcpOwoJaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1mZXVzZXJzLmNzdicpOwoJd2hpbGUoQG9iX2VuZF9jbGVhbigpKTsKCSR0aGlzLT5fR2V0VXNlcnNJbkNTVkZvcm1hdCgpOwoJZXhpdCgpOwogICAgICB9CiAgfQoKICBmdW5jdGlvbiBfRG9EZWxldGVHcm91cCggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIGlmICghaXNzZXQgKCRwYXJhbXNbJ2dyb3VwX2lkJ10pIHx8ICRwYXJhbXNbJ2dyb3VwX2lkJ10gPT0gIiIpCiAgICAgIHsKCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSAoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsCgkJCQkgJHRoaXMtPkxhbmcgKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnKSk7CglyZXR1cm47CiAgICAgIH0gIAoKICAgICRyZXQgPSAkdGhpcy0+RGVsZXRlR3JvdXBGdWxsKCAkcGFyYW1zWydncm91cF9pZCddICk7CiAgICBpZiggJHJldFswXSA9PSBGQUxTRSApCiAgICAgIHsKCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSAoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICRyZXRbMV0gKTsKCXJldHVybjsKICAgICAgfQogICAgICAkdGhpcy0+bXlSZWRpcmVjdFRvVGFiKCRpZCwgJ2dyb3VwcycgKTsKICB9CgoKICBmdW5jdGlvbiBfRG9EZWxldGVQcm9wZXJ0eSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIGlmKCAhaXNzZXQoICRwYXJhbXNbJ3Byb3BuYW1lJ10gKSApCiAgICAgIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJJHBhcmFtc1snbWVzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfaW5zdWZmaWNlbnRwYXJhbXMnKTsKCSR0aGlzLT5teVJlZGlyZWN0VG9UYWIoJGlkLCdwcm9wZXJ0aWVzJywkcGFyYW1zKTsKCXJldHVybjsKICAgICAgfQoKICAgIC8vIGRlbGV0ZSBhbGwgb2NjdXJhbmNlcyBvZiB0aGlzIHByb3BlcnR5IG5hbWUgaW4gdGhlIHByb3BlcnRpZXMgdGFibGUKICAgICRyZXN1bHQgPSAkdGhpcy0+RGVsZXRlVXNlclByb3BlcnR5QnlOYW1lKCAkcGFyYW1zWydwcm9wbmFtZSddICk7CgogICAgLy8gV2UgbmVlZCB0byBkZWxldGUgc2VsZWN0IG9wdGlvbnMgcmVnYXJkbGVzcyBvZiB0aGUgY29udHJvbCB0eXBlLAogICAgLy8gYmVjYXVzZSB3ZSBkb24ndCBkZWxldGUgc2VsZWN0IG9wdGlvbnMgd2hlbiBjaGFuZ2luZyBjb250cm9sIHR5cGVzCiAgICAkcmVzdWx0ID0gJHRoaXMtPkRlbGV0ZVNlbGVjdE9wdGlvbnMoICRwYXJhbXNbJ3Byb3BuYW1lJ10gKTsKICAgIC8vIG5vdyByZWFkeSB0byBkZWxldGUgdGhlIHByb3BlcnR5CiAgICAkcmVzdWx0ID0gJHRoaXMtPkRlbGV0ZVByb3BlcnR5RGVmbiggJHBhcmFtc1sncHJvcG5hbWUnXSApOwogICAgaWYoICEkcmVzdWx0ICkKICAgICAgewoJJHBhcmFtc1snZXJyb3InXSA9IDE7CgkkcGFyYW1zWydtZXNhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9jb3VsZG5vdGRlbGV0ZXByb3BlcnR5Jyk7CiAgICAgIH0KICAgICR0aGlzLT5teVJlZGlyZWN0VG9UYWIoJGlkLCdwcm9wZXJ0aWVzJywkcGFyYW1zKTsKICB9CgoKICBmdW5jdGlvbiBfRG9EZWxldGVVc2VyKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgaWYgKCFpc3NldCAoJHBhcmFtc1sndXNlcl9pZCddKSB8fCAkcGFyYW1zWyd1c2VyX2lkJ10gPT0gIiIpCiAgICAgIHsKCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSAoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsCgkJCQkgJHRoaXMtPkxhbmcgKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnKSk7CglyZXR1cm47CiAgICAgIH0gIAoKICAgICRyZXQgPSAkdGhpcy0+RGVsZXRlVXNlckZ1bGwoICRwYXJhbXNbJ3VzZXJfaWQnXSApOwogICAgaWYoICRyZXRbMF0gPT0gRkFMU0UgKQogICAgICB7CgkkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UgKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkcmV0WzFdICk7CglyZXR1cm47CiAgICAgIH0KCiAgICAvLyBhbmQgbG9nIGl0CiAgICAkdGhpcy0+QXVkaXQoIDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwKCQkgICR0aGlzLT5MYW5nKCd1c2VyX2RlbGV0ZWQnLCRwYXJhbXNbJ3VzZXJfaWQnXSkgKTsKCiAgICAkdGhpcy0+bXlSZWRpcmVjdFRvVGFiKCRpZCwgJ3VzZXJzJyApOwogIH0KCgogIGZ1bmN0aW9uIF9Eb0VkaXRHcm91cCggJGlkLCAmJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICBpZiAoaXNzZXQgKCRwYXJhbXNbJ2NhbmNlbCddKSkKICAgIHsKICAgICAgJHRoaXMtPm15UmVkaXJlY3RUb1RhYigkaWQsICdncm91cHMnICk7CiAgICB9CgogICAgaWYgKCFpc3NldCAoJHBhcmFtc1snZ3JvdXBfaWQnXSkgfHwgJHBhcmFtc1snZ3JvdXBfaWQnXSA9PSAiIikKICAgICAgewoJJHBhcmFtc1snZXJyb3InXSA9IDE7CgkkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJyk7CgkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZWRpdGdyb3VwJywgJHJldHVybmlkLCRwYXJhbXMgKTsKCXJldHVybjsKICAgICAgfSAgCgogICAgJGdyb3VwbmFtZSA9ICcnOwogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9ncm91cG5hbWUnXSApICkKICAgICAgewoJJGdyb3VwbmFtZSA9IHRyaW0oJHBhcmFtc1snaW5wdXRfZ3JvdXBuYW1lJ10pOwogICAgICB9CiAgICAkZ3JvdXBkZXNjID0gJyc7CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X2dyb3VwZGVzYyddICkgKQogICAgICB7CgkkZ3JvdXBkZXNjID0gdHJpbSgkcGFyYW1zWydpbnB1dF9ncm91cGRlc2MnXSk7CiAgICAgIH0KCiAgICAvLyBtYWtlIHN1cmUgdGhlIHBhcmFtZXRlcnMgYXJlIGZpbGxlZCBpbgogICAgaWYoICRncm91cG5hbWUgPT0gJycgfHwgJGdyb3VwZGVzYyA9PSAnJyApCiAgICAgIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRwYXJhbXMnKTsKCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdlZGl0Z3JvdXAnLCAkcmV0dXJuaWQsJHBhcmFtcyApOwoJcmV0dXJuOwogICAgICB9CgogICAgJHJlbG5hZGRlZCA9IDA7CiAgICBmb3JlYWNoKCAkcGFyYW1zIGFzICRrZXkgPT4gJHZhbCApCiAgICB7CiAgICAgICRwcm9wbmFtZSA9ICcnOwogICAgICAkc29ydG9yZGVyID0gJyc7CiAgICAgIGlmKCBwcmVnX21hdGNoKCAnL15pbnB1dF9yZXF1aXJlZF8vJywgJGtleSApICYmICgkdmFsICE9IDApICkKCXsKCSAgJHJlbG5hZGRlZCsrOwoJfQogICAgfQogICAgaWYoICRyZWxuYWRkZWQgPT0gMCApCiAgICAgIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAnMSc7CgkkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3Jfbm9yZWxhdGlvbnMnKTsKCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdhZGRncm91cCcsICRyZXR1cm5pZCwkcGFyYW1zICk7CglyZXR1cm47CiAgICAgIH0KCiAgICAkcmV0ID0gJHRoaXMtPlNldEdyb3VwKCAkcGFyYW1zWydncm91cF9pZCddLCAkcGFyYW1zWydpbnB1dF9ncm91cG5hbWUnXSwKCQkJICAgICRwYXJhbXNbJ2lucHV0X2dyb3VwZGVzYyddICk7CiAgICBpZiggJHJldFswXSA9PSBGQUxTRSApCiAgICAgIHsKCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSAoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICRyZXRbMV0gKTsKCXJldHVybjsKICAgICAgfQoKICAgIC8vIGFsc28gYWRkIHRoZSBwcm9wZXJ0eSBjaG9pY2VzCiAgICAkdGhpcy0+RGVsZXRlQWxsR3JvdXBQcm9wZXJ0eVJlbGF0aW9ucyggJHBhcmFtc1snZ3JvdXBfaWQnXSApOwogICAgZm9yZWFjaCggJHBhcmFtcyBhcyAka2V5ID0+ICR2YWwgKQogICAgewogICAgICBpZiggcHJlZ19tYXRjaCggJy9eaW5wdXRfcmVxdWlyZWRfLycsICRrZXkgKSApCgl7CgkgICRwcm9wbmFtZSA9IHN1YnN0cigka2V5LHN0cmxlbignaW5wdXRfcmVxdWlyZWRfJykpOwoJfQogICAgICBlbHNlIAoJewoJICBjb250aW51ZTsKCX0KICAgICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9zb3J0b3JkZXJfJy4kcHJvcG5hbWVdICkgKQoJewoJICAkc29ydG9yZGVyID0gJHBhcmFtc1snaW5wdXRfc29ydG9yZGVyXycuJHByb3BuYW1lXTsKCX0KICAgICAgaWYoICR2YWwgIT0gMCAmJiAkcHJvcG5hbWUgIT0gJycgKQoJewoJICAkdGhpcy0+QWRkR3JvdXBQcm9wZXJ0eVJlbGF0aW9uKCAkcGFyYW1zWydncm91cF9pZCddLCAkcHJvcG5hbWUsICRzb3J0b3JkZXIsICR2YWwgKTsKCX0KICAgIH0KCiAgICAkdGhpcy0+bXlSZWRpcmVjdFRvVGFiKCRpZCwgJ2dyb3VwcycgKTsKICB9CgoKICBmdW5jdGlvbiBfRG9FZGl0UHJvcGVydHkoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgJG5hbWUgPSAnJzsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfbmFtZSddICkgKSAKICAgICAgewoJJG5hbWUgPSB0cmltKCRwYXJhbXNbJ2lucHV0X25hbWUnXSk7IAoJJG5hbWUgPSBzdHJ0b2xvd2VyKHByZWdfcmVwbGFjZSgnLyAvJywnXycsJG5hbWUpKTsKICAgICAgfQogICAgJHByb21wdCA9ICcnOwogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9wcm9tcHQnXSApICl7CiAgICAgICRwcm9tcHQgPSB0cmltKCRwYXJhbXNbJ2lucHV0X3Byb21wdCddKTsgCiAgICB9CiAgICAkdHlwZSA9ICcnOwogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF90eXBlJ10gKSApIHsKICAgICAgJHR5cGUgPSB0cmltKCRwYXJhbXNbJ2lucHV0X3R5cGUnXSk7IAogICAgfQogICAgJHNlbG9wdGlvbnMgPSAnJzsKICAgICRvcHRpb25zID0gJyc7CiAgICBpZiggaXNzZXQoJHBhcmFtc1snaW5wdXRfZXh0cmEnXSApICkgewogICAgICAkc2Vsb3B0aW9ucyA9IHRyaW0oJHBhcmFtc1snaW5wdXRfZXh0cmEnXSk7CiAgICAgICRvcHRpb25zID0gZXhwbG9kZSgiX18iLCAkc2Vsb3B0aW9ucyk7CiAgICB9CgkKICAgIGlmKCAkbmFtZSA9PSAnJyB8fCAkcHJvbXB0ID09ICcnKQogICAgICB7CgkkcGFyYW1zWydlcnJvciddID0gMTsKCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnKTsKCWVjaG8gJHRoaXMtPkxhbmcoJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcycpOwoJJHRoaXMtPm15UmVkaXJlY3RUb1RhYigkaWQsJ3Byb3BlcnRpZXMnLCRwYXJhbXMpOwoJcmV0dXJuOwogICAgICB9CgogICAgc3dpdGNoKCR0eXBlKXsKICAgIGNhc2UgMDogLy8gdGV4dCBpbnB1dAogICAgY2FzZSAyOiAvLyBlbWFpbAogICAgICAkbGVuZ3RoID0gMjA7CiAgICAgICRtYXhsZW5ndGggPSAyMDsKICAgICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9sZW5ndGgnXSApICkgewoJJGxlbmd0aCA9IHRyaW0oJHBhcmFtc1snaW5wdXRfbGVuZ3RoJ10pOwogICAgICB9CiAgICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfbWF4bGVuZ3RoJ10gKSApIHsKCSRtYXhsZW5ndGggPSB0cmltKCRwYXJhbXNbJ2lucHV0X21heGxlbmd0aCddKTsKICAgICAgfQogICAgICBicmVhazsKICAgIGNhc2UgMTogLy8gY2hlY2tib3gKICAgICAgJGxlbmd0aCA9IDE7CiAgICAgIGJyZWFrOwogICAgY2FzZSAzOiAvLyB0ZXh0YXJlYQogICAgICAkbGVuZ3RoID0gMjU1OwogICAgICBicmVhazsKICAgIGNhc2UgNDogLy8gZHJvcGRvd24KICAgICAgLy8gZ2V0IHRoZSBudW1iZXIgb2YgZW1wdHkgdmFsdWVzCiAgICAgIC8vIGFuZCBzdWJ0cmFjdCBpdCBmcm9tIHRoZSBhcnJheSBjb3VudAogICAgICAkZWxlbWVudF9jb3VudF9hcnJheSA9IGFycmF5X2NvdW50X3ZhbHVlcygkb3B0aW9ucyk7CiAgICAgICRlbXB0eV9lbGVtZW50X2NvdW50ID0gCgkkZWxlbWVudF9jb3VudF9hcnJheVsiIl0gKwoJJGVsZW1lbnRfY291bnRfYXJyYXlbIlxyIl0gKwoJJGVsZW1lbnRfY291bnRfYXJyYXlbIl9fIl0gKwoJJGVsZW1lbnRfY291bnRfYXJyYXlbIl9fXHIiXTsKICAgICAgJGxlbmd0aCA9IGNvdW50KCRvcHRpb25zKSAtICRlbXB0eV9lbGVtZW50X2NvdW50OwogICAgICBicmVhazsKICAgIGRlZmF1bHQ6CiAgICAgICRsZW5ndGggPSAxOwogICAgfQoJCiAgICBpZiggKCR0eXBlID09IDAgJiYgKCAkbGVuZ3RoIDwgMSB8fCAkbGVuZ3RoID4gMjU1ICkpIHx8CgkoJHR5cGUgPT0gNCAmJiAkc2Vsb3B0aW9ucyA9PSAnJyApICl7CiAgICAgICRwYXJhbXNbJ2Vycm9yJ10gPSAxOwogICAgICAkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZHBhcmFtcycpOwogICAgICBlY2hvICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkcGFyYW1zJyk7CiAgICAgIGVjaG8gInNlbG9wdGlvbnMgPSAiIC4gJHNlbG9wdGlvbnM7CiAgICAgICR0aGlzLT5teVJlZGlyZWN0KCRpZCwnYWRkcHJvcCcsJHJldHVybmlkLCRwYXJhbXMpOwogICAgICByZXR1cm47CiAgICB9CgkKICAgIC8vIGFuZCBhZGQgdGhlIHByb2VwcnR5IGRlZmluaXRpb24KICAgIGlmICgkc2Vsb3B0aW9ucykgewogICAgICAkc2Vsb3B0aW9ucyA9IHRyaW0oJHNlbG9wdGlvbnMpOyAvLyB0cmltIHNwYWNlcyBldGMKICAgICAgJHNlbG9wdGlvbnMgPSB0cmltKCRzZWxvcHRpb25zLCAiXyIpOyAvLyB0cmltIHVuZGVyc2NvcmVzIGF0IHRoZSBlbmQKICAgICAgJG9wdGlvbnMgPSBleHBsb2RlKCJfXyIsICRzZWxvcHRpb25zKTsKICAgICAgJHRoaXMtPkRlbGV0ZVNlbGVjdE9wdGlvbnMoICRuYW1lICk7CiAgICAgICRyZXN1bHQgPSAkdGhpcy0+QWRkU2VsZWN0T3B0aW9ucyggJG5hbWUsICRvcHRpb25zICk7CgogICAgICBpZiggISRyZXN1bHRbMF0gKSB7CgkkcGFyYW1zWydlcnJvciddID0gMTsKCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICRyZXN1bHRbMV07CgllY2hvICRyZXN1bHRbMV07CgkkdGhpcy0+bXlSZWRpcmVjdCgkaWQsJ2FkZHByb3AnLCRyZXR1cm5pZCwkcGFyYW1zKTsKICAgICAgfQogICAgfQoKICAgICRyZXMgPSAkdGhpcy0+U2V0UHJvcGVydHlEZWZuKCAkcGFyYW1zWydwcm9wbmFtZSddLCAkbmFtZSwgJHByb21wdCwgJGxlbmd0aCwgJHR5cGUsICRtYXhsZW5ndGggKTsKICAgIGlmKCAkcmVzID09IGZhbHNlICkKICAgICAgewoJJHBhcmFtc1snZXJyb3InXSA9IDE7CgkkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfZGJlcnJvcicpOwoJJHRoaXMtPm15UmVkaXJlY3RUb1RhYigkaWQsJ3Byb3BlcnRpZXMnLCRwYXJhbXMpOwoJcmV0dXJuOwogICAgICB9CgogICAgJHRoaXMtPm15UmVkaXJlY3RUb1RhYigkaWQsJ3Byb3BlcnRpZXMnKTsKICB9CgoKICBmdW5jdGlvbiBfRG9FZGl0VXNlclN0ZXAxKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIC8vIGFyZSB3ZSBjYW5jZWxsaW5nCiAgICBpZiAoaXNzZXQgKCRwYXJhbXNbJ2NhbmNlbCddKSkKICAgICAgewoJJHRoaXMtPm15UmVkaXJlY3RUb1RhYigkaWQsICd1c2VycycgKTsKICAgICAgfQoKICAgIGlmICggIWlzc2V0KCRwYXJhbXNbJ3VzZXJfaWQnXSkgKQogICAgICB7CgkkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJykpOwoJcmV0dXJuOwogICAgICB9CgogICAgLy8gbWFrZSBzdXJlIHRoZSBwYXJhbWV0ZXJzIGFyZSBmaWxsZWQgaW4KICAgICR1c2VyX2lkICAgPSB0cmltKCRwYXJhbXNbJ3VzZXJfaWQnXSk7CiAgICAkdXNlcm5hbWUgPSB0cmltKCRwYXJhbXNbJ2lucHV0X3VzZXJuYW1lJ10pOwogICAgJHBhc3N3b3JkID0gdHJpbSgkcGFyYW1zWydpbnB1dF9wYXNzd29yZCddKTsKICAgICRyZXBlYXQgICA9IHRyaW0oJHBhcmFtc1snaW5wdXRfcmVwZWF0cGFzc3dvcmQnXSk7CgogICAgJHJldCA9ICR0aGlzLT5faGFuZGxlVXNlckluZm9WYWxpZGF0aW9uKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJG1lc3NhZ2UsIGZhbHNlLCAKCQkJCQkgICAgIHRydWUsIGZhbHNlICk7CiAgICBzd2l0Y2goICRyZXQgKQogICAgICB7CiAgICAgIGNhc2UgLTE6IC8vIGVycm9yCgkkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdlcnJvcicsICIxIik7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdtZXNzYWdlJywgJG1lc3NhZ2UgKTsKCSR0aGlzLT5fRGlzcGxheUFkbWluRWRpdFVzZXJTdGVwMVBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CglyZXR1cm47CiAgICAgIGNhc2UgMDogIC8vIG5vIGVycm9yLCBidXQgZG9uJ3QgY29udGludWUgb3BlcmF0aW9uCgkkdGhpcy0+X0Rpc3BsYXlBZG1pblVzZXJQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJcmV0dXJuOwogICAgICBjYXNlIDE6ICAvLyBhbGwgaXMgZ29vZCwgY29udGludWUgb3BlcmF0aW9uCglicmVhazsKICAgICAgfQoKICAgIC8vIGxvYWQgcHJvcGVydGllcyBhbmQgc2V0IHRoZW0gdXAKICAgIC8vIGZvciB0aGUgbmV4dCBwYWdlCiAgICAkcHJvcHMgPSAkdGhpcy0+R2V0VXNlclByb3BlcnRpZXMoICR1c2VyX2lkICk7CiAgICBmb3JlYWNoKCAkcHJvcHMgYXMgJHByb3AgKQogICAgewogICAgICAkcGFyYW1zWydpbnB1dF8nLiRwcm9wWyd0aXRsZSddXSA9IHVybGVuY29kZSgkcHJvcFsnZGF0YSddKTsKICAgIH0KCiAgICAvLyBBbmQgR28gdG8gc3RlcCAyCiAgICAkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZG9fZWRpdHVzZXIyJywgJHJldHVybmlkLCRwYXJhbXMgKTsKCiAgfQoKCiAgZnVuY3Rpb24gX0RvRWRpdFVzZXJTdGVwMyggJGlkLCAmJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICAvLyBkbyB3ZSB3YW50IHRvIGdvIGJhY2sKICAgIGlmKCBpc3NldCggJHBhcmFtc1snYmFjayddICkgKQogICAgICB7CgkvLyB5dXAgd2UgZG8KCSRwYXJhbXMgPSBleHBsb2RlX3dpdGhfa2V5KCAkcGFyYW1zWydzdGVwMV9wYXJhbXMnXSApOzsKCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdlZGl0dXNlcicsICRyZXR1cm5pZCwkcGFyYW1zICk7CiAgICAgIH0KCiAgICBpZiggIWlzc2V0KCAkcGFyYW1zWyd1c2VyX2lkJ10gKSApCiAgICAgIHsKCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwKCQkJCSAkdGhpcy0+TGFuZygnZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJykpOwogICAgICB9CgogICAgLy8gZ2V0IHRoZSBmaWVsZCBpbmZvCiAgICAkZmxkaW5mbyA9IGFycmF5KCk7CiAgICBmb3JlYWNoKCAkcGFyYW1zIGFzICRrID0+ICR2ICkKICAgIHsKICAgICAgaWYoIHByZWdfbWF0Y2goJy9eaGlkZGVuXy8nLCAkayApICkKCXsKCSAgJGZsZG5hbWUgPSBzdWJzdHIoICRrLCBzdHJsZW4oJ2hpZGRlbl8nKSk7CgkgICRwcm9waW5mbyA9IHNwbGl0KCc7Jywkdik7CgkgICRmbGRpbmZvWyRmbGRuYW1lXSA9ICRwcm9waW5mbzsKCX0KICAgIH0KCiAgICAvLyBub3cgZ2V0IGVhY2ggb2YgdGhlIGZpZWxkcwogICAgJGZpZWxkcyA9IGFycmF5KCk7CiAgICBmb3JlYWNoKCAkcGFyYW1zIGFzICRrID0+ICR2ICkKICAgIHsKICAgICAgaWYoIHByZWdfbWF0Y2goJy9eaW5wdXRfLycsICRrICkgKQoJewoJICAkZmxkbmFtZSA9IHN1YnN0ciggJGssIHN0cmxlbignaW5wdXRfJykpOwoJICAkZmllbGRzWyRmbGRuYW1lXSA9ICR2OyAKCX0KICAgIH0KCiAgICAvLyBub3cgdmFsaWRhdGUKICAgIGZvcmVhY2goICRmbGRpbmZvIGFzICRuYW1lID0+ICR2YWwgKQogICAgewogICAgICAvLyBwcm9jZXNzIGVtcHR5IHJlcXVpcmVkIGZpZWxkcwogICAgICAvLyB3ZSBkb24ndCBjYXJlIGFib3V0IGVtcHR5IG9wdGlvbmFsIG9uZXMKICAgICAgaWYoICR2YWxbM10gPT0gMiAmJiAoIWlzc2V0KCAkZmllbGRzWyRuYW1lXSApIHx8ICRmaWVsZHNbJG5hbWVdID09ICcnKSApCgl7CgkgIC8vIGEgcmVxdWlyZWQgZmllbGQgaXMgZW1wdHkKCSAgJHBhcmFtcyA9IGFycmF5X21lcmdlKCAkcGFyYW1zLCBleHBsb2RlX3dpdGhfa2V5KCAkcGFyYW1zWydzdGVwMV9wYXJhbXMnXSApKTsKCSAgJHBhcmFtc1snZXJyb3InXSA9IDE7CgkgICRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9taXNzaW5nX3JlcXVpcmVkX3BhcmFtJywkbmFtZSk7CgkgICR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkb19hZGR1c2VyMicsICRyZXR1cm5pZCwkcGFyYW1zICk7CgkgIHJldHVybjsKCX0KCiAgICAgIC8vIHZhbGlkYXRlIGZpbGxlZCBpbiBmaWVsZHMKICAgICAgaWYoIGlzc2V0KCAkZmllbGRzWyRuYW1lXSApICkKCXsKCSAgc3dpdGNoKCAkdmFsWzFdICkKCSAgICB7CgkgICAgY2FzZSAwOiAvLyB0ZXh0CgkgICAgICAvLyBub3QgbXVjaCB3ZSBjYW4gZG8gdG8gdmFsaWRhdGUgYSB0ZXh0IGZpZWxkLgoJICAgICAgYnJlYWs7CgkgICAgY2FzZSAxOiAvLyBjaGVja2JveAoJICAgICAgLy8gb3IgYSBjaGVja2JveAoJICAgICAgYnJlYWs7CgkgICAgY2FzZSAyOiAvLyBlbWFpbAoJICAgICAgLy8gZW1haWwgYWRkcmVzc2VzIGNhbiBiZSB2YWxpZGF0ZWQgdGhvdWdoCgkgICAgICBicmVhazsKCSAgICBjYXNlIDM6IC8vIHRleHRhcmVhCgkgICAgICAvLyBtYXliZSBzaXplPwoJICAgICAgYnJlYWs7CgkgICAgY2FzZSA0OiAvLyBkcm9wZG93bgoJICAgICAgLy8gSG93IGNhbiB3ZSB2YWxpZGF0ZSBhIGRyb3Bkb3duPwoJICAgICAgYnJlYWs7CgkgICAgfQoJfQogICAgfQoKICAgIC8vIGdldCB0aGUgcGFybXMgZnJvbSB0aGUgZmlyc3Qgc3RlcAogICAgJHBhcm1zMSA9IGV4cGxvZGVfd2l0aF9rZXkoICRwYXJhbXNbJ3N0ZXAxX3BhcmFtcyddICk7CiAgICAKICAgIC8vIGFuZCBtZXJnZSBlbSBpbnRvICRwYXJhbXMgc28gd2UgY2FuIGFjdHVhbGx5IGFkZCB0aGUgdXNlciBhY2NvdW50CiAgICAkcGFyYW1zID0gYXJyYXlfbWVyZ2UoICRwYXJhbXMsICRwYXJtczEgKTsKCiAgICAvLyBub3cgZmluZCBvdXQgd2hpY2ggZ3JvdXBzIGhlJ3MgYSBtZW1iZXIgb2YKICAgICRncnBpZHMgPSBhcnJheSgpOwogICAgZm9yZWFjaCggJHBhcmFtcyBhcyAkayA9PiAkdiApCiAgICB7CiAgICAgIGlmKCBwcmVnX21hdGNoKCcvXm1lbWJlcm9mXy8nLCAkayApICkKCXsKCSAgJGdycGlkc1tdID0gJHBhcmFtc1ska107Cgl9CiAgICB9CgogICAgJHVzZXJfaWQgPSAnJzsKICAgIGlmKCBpc3NldCggJHBhcmFtc1sndXNlcl9pZCddICkgKQogICAgICB7CgkkdXNlcl9pZCA9ICRwYXJhbXNbJ3VzZXJfaWQnXTsKICAgICAgfQogICAgZWxzZSAKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnZXJyb3InLCAiMSIpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnbWVzc2FnZScsICRyZXRbMV0gKTsKCSR0aGlzLT5fRGlzcGxheUFkbWluQWRkVXNlclN0ZXAyUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCXJldHVybjsJCiAgICAgIH0KCiAgICAkdXNlcm5hbWUgPSAnJzsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfdXNlcm5hbWUnXSApICkKICAgICAgewoJJHVzZXJuYW1lID0gJHBhcmFtc1snaW5wdXRfdXNlcm5hbWUnXTsKICAgICAgfQogICAgJHBhc3N3b3JkID0gJyc7CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X3Bhc3N3b3JkJ10gKSAmJiAkcGFyYW1zWydpbnB1dF9wYXNzd29yZCddICE9ICcnICkKICAgICAgewoJJHBhc3N3b3JkID0gJHBhcmFtc1snaW5wdXRfcGFzc3dvcmQnXTsKICAgICAgfQogICAgJGV4cGlyZXNkYXRlID0gc3RydG90aW1lKCcrMTAgeWVhcnMnLCB0aW1lKCkpOwogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9leHBpcmVzZGF0ZSddICkgKQogICAgICB7CgkkZXhwaXJlc2RhdGUgPSAkcGFyYW1zWydpbnB1dF9leHBpcmVzZGF0ZSddOwogICAgICB9CiAgICAKICAgIC8vIGFuZCBTZXQgdGhlIHVzZXIKICAgICRyZXQgPSAkdGhpcy0+U2V0VXNlciggJHVzZXJfaWQsICR1c2VybmFtZSwgJHBhc3N3b3JkLCAkZXhwaXJlc2RhdGUgKTsKICAgIGlmKCAkcmV0WzBdID09IGZhbHNlICkKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnZXJyb3InLCAiMSIpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnbWVzc2FnZScsICRyZXRbMV0gKTsKCSR0aGlzLT5fRGlzcGxheUFkbWluQWRkVXNlclN0ZXAyUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCXJldHVybjsJCiAgICAgIH0KCiAgICAvLyBhbmQgdGhlbiBhZGQgaGltIHRvIGhpcyBncm91cHMKICAgICRyZXQgPSAkdGhpcy0+U2V0VXNlckdyb3VwcyggJHVzZXJfaWQsICRncnBpZHMgKTsKICAgIGlmKCAkcmV0WzBdID09IGZhbHNlICkKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnZXJyb3InLCAiMSIpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnbWVzc2FnZScsICR0aGlzLT5MYW5nKCdlcnJvcl9jYW50YXNzaWdudXNlcicpICk7CgkkdGhpcy0+X0Rpc3BsYXlBZG1pbkFkZFVzZXJTdGVwMlBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CglyZXR1cm47CQogICAgICB9IAoKICAgIC8vIGFuZCB0aGVuIGFkZCBoaXMgcHJvcGVydGllcwogICAgJHRoaXMtPkRlbGV0ZVVzZXJQcm9wZXJ0eUZ1bGwoICIiLCAkdXNlcl9pZCwgdHJ1ZSApOwogICAgZm9yZWFjaCggJGZpZWxkcyBhcyAkayA9PiAkdiApCiAgICB7CiAgICAgICRyZXQgPSAkdGhpcy0+U2V0VXNlclByb3BlcnR5RnVsbCggJGssICR2LCAkdXNlcl9pZCApOwogICAgICBpZiggJHJldCA9PSBmYWxzZSApCgl7CgkgICRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJICAkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3InKTsKCSAgJHRoaXMtPl9EaXNwbGF5QWRtaW5BZGRVc2VyU3RlcDJQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJICByZXR1cm47Cgl9CiAgICB9CgogICAgLy8gYW5kIHdlJ3JlIGRvbmUKICAgICR0aGlzLT5teVJlZGlyZWN0VG9UYWIoJGlkLCAndXNlcnMnICk7CiAgfQoKCiAgZnVuY3Rpb24gX0RvRm9yZ290UGFzc3dvcmQoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgaWYoICFpc3NldCggJHBhcmFtc1snaW5wdXRfdXNlcm5hbWUnXSApICApCiAgICAgIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcycpOwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2ZvcmdvdHB3JywgJHJldHVybmlkLCRwYXJhbXMgKTsKCXJldHVybjsKICAgICAgfQogICAgCiAgICAvLyBzZWUgaWYgd2UgY2FuIGZpbmQgdGhpcyB1c2VyCiAgICAkdWlkID0gJHRoaXMtPkdldFVzZXJJRCggJHBhcmFtc1snaW5wdXRfdXNlcm5hbWUnXSApOwogICAgaWYoICEkdWlkICkKICAgICAgewoJJHBhcmFtc1snZXJyb3InXSA9IDE7CgkkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfdXNlcm5vdGZvdW5kJyk7CgkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZm9yZ290cHcnLCAkcmV0dXJuaWQsJHBhcmFtcyApOwoJcmV0dXJuOwogICAgICB9CgogICAgLy8gc2VlIGlmIHdlIGNhbiBkaWcgdXAgYW4gZW1haWwgYWRkcmVzcyBmb3IgaGltCiAgICAkZW1haWwgPSBmYWxzZTsKICAgICRkZWZucyA9ICR0aGlzLT5HZXRQcm9wZXJ0eURlZm5zKCk7CiAgICAkcHJvcHMgPSAkdGhpcy0+R2V0VXNlclByb3BlcnRpZXMoICR1aWQgKTsKICAgIGlmKCAkcHJvcHMgKSAKICAgICAgewoJLy8gd2UgaGF2ZSBwcm9wZXJ0aWVzIGZvciB0aGlzIHVzZXIKCS8vIG5vdyBzZWUgaWYgd2UgaGF2ZSBhbiBlbWFpbCBmaWVsZAoJLy8gd2UncmUgZ29ubmEgaXRlcmF0ZSB0aHJvdWdoIHRoZSBwcm9wZXJ0aWVzIHRpbGwgb25lIGlzIGFuIGVtYWlsIHR5cGUKCS8vIHRoZW4gd2UncmUgZ29ubmEgYXNrIHRoZSB1c2VyIGlmIHRoaXMgaXMgdGhlIHJpZ2h0IGFkZHJlc3MuLgoJZm9yZWFjaCggJHByb3BzIGFzICRwcm9wZSApCgl7CgkgIGZvcmVhY2goICRkZWZucyBhcyAkZGVmbmUgKQoJICB7CgkgICAgaWYoICRwcm9wZVsndGl0bGUnXSA9PSAkZGVmbmVbJ25hbWUnXSAmJiAkZGVmbmVbJ3R5cGUnXSA9PSAyICYmICRlbWFpbCA9PSBmYWxzZSApCgkgICAgICB7CgkJLy8gZm91bmQgYSBtYXRjaCBhbmQgaXQncyBhbiBlbWFpbCBmaWVsZAoJCSRlbWFpbCA9ICRwcm9wZVsnZGF0YSddOwoJCWJyZWFrOwoJICAgICAgfQoJICB9CgoJICBpZiggJGVtYWlsICE9IGZhbHNlICkKCSAgICB7CgkgICAgICBicmVhazsKCSAgICB9Cgl9CgoJaWYoICEkZW1haWwgKQoJICB7CgkgICAgJHBhcmFtc1snZXJyb3InXSA9IDE7CgkgICAgJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX25vZW1haWxhZGRyZXNzJyk7CgkgICAgJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2ZvcmdvdHB3JywgJHJldHVybmlkLCRwYXJhbXMgKTsKCSAgICByZXR1cm47CgkgIH0KCWVsc2UKCSAgewoJICAgICRjbXNtYWlsZXIgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0NNU01haWxlcicpOwoJICAgIGlmKCAhJGNtc21haWxlciApCgkgICAgICB7CgkJJHBhcmFtc1snZXJyb3InXSA9IDE7CgkJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX25vbWFpbGVybW9kdWxlJyk7CgkJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2ZvcmdvdHB3JywgJHJldHVybmlkLCRwYXJhbXMgKTsKCQlyZXR1cm47CgkgICAgICB9CgoJICAgIC8vIHdlIGZvdW5kIGFuZSBtYWlsIGFkZHJlc3MKCSAgICAvLyBnZW5lcmF0ZSBhIGNvZGUsIGFuZCBzdG9yZSBpdCBzb21lcGxhY2UKCSAgICAvLyBidXQgdGhhdCBtZWFucyB3ZSBnb3R0YSBjbGVhbiB0aGVzZSB0aGluZ3MgdXAKCSAgICAvLyBmcm9tIHRpbWUgdG8gdGltZS4KCSAgICAkY29kZSA9ICR0aGlzLT5HZW5lcmF0ZVJhbmRvbVByaW50YWJsZVN0cmluZygpOwoJICAgIGlmKCAhJHRoaXMtPlNldFVzZXJUZW1wQ29kZSggJHVpZCwgJGNvZGUgKSApCgkgICAgICB7CgkJJHBhcmFtc1snZXJyb3InXSA9IDE7CgkJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX3Jlc2V0YWxyZWFkeXNlbnQnKTsKCQkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZm9yZ290cHcnLCAkcmV0dXJuaWQsJHBhcmFtcyApOwoJCXJldHVybjsKCSAgICAgIH0KCgkgICAgLy8gc2VuZCBvdXIgZnVua3kgZW1haWwKCSAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21lc3NhZ2VfZm9yZ290cHdlbWFpbCcsCgkJCQkgICR0aGlzLT5MYW5nKCdtZXNzYWdlX2ZvcmdvdHB3ZW1haWwnKSk7CgkgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfY29kZScsJHRoaXMtPkxhbmcoJ21lc3NhZ2VfY29kZScpKTsKCSAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2RhdGFfY29kZScsJGNvZGUpOwoJICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X2xpbmsnLCR0aGlzLT5MYW5nKCdwcm9tcHRfbGluaycpKTsKCSAgICAkcGFybXMgPSBhcnJheSggJ2lucHV0X3VpZCcgPT4gJHVpZCwgJ2lucHV0X2NvZGUnID0+ICRjb2RlICk7CgkgICAgJGxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ3ZlcmlmeWNvZGUnLCRyZXR1cm5pZCwnJywkcGFybXMsICcnLCB0cnVlKTsKCSAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2RhdGFfbGluaycsCgkJCQkgICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwndmVyaWZ5Y29kZScsJHJldHVybmlkLCRsaW5rLCRwYXJtcykpOwoJICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZGF0YV91cmwnLCRsaW5rKTsKCgkgICAgJGJvZHkgPSAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGFiYXNlKCdmZXVzZXJzX2ZvcmdvdHBhc3N3b3JkZW1haWxmb3JtJyk7CgoJICAgICRjbXNtYWlsZXItPkFkZEFkZHJlc3MoICRlbWFpbCApOwoJICAgICRjbXNtYWlsZXItPlNldEJvZHkoICRib2R5ICk7CgkgICAgJGNtc21haWxlci0+SXNIVE1MKHRydWUpOwoJICAgIGlmKCBzdHJpcF90YWdzKCRib2R5KSAhPSAkYm9keSApCgkgICAgICB7CgkJJGNtc21haWxlci0+SXNIVE1MKHRydWUpOwoJICAgICAgfQoJICAgICRjbXNtYWlsZXItPlNldFN1YmplY3QoJHRoaXMtPkxhbmcoJ2xvc3RwYXNzd29yZF9lbWFpbHN1YmplY3QnKSk7CgkgICAgJGNtc21haWxlci0+U2VuZCgpOwoKCSAgICAvLyBhbmQgdGVsbCB0aGUgdXNlciBzb21ldGhpbmcKCSAgICAkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnaW5mb19mb3Jnb3Rwd21lc3NhZ2VzZW50JywkZW1haWwpOwoJICAgICRwYXJhbXNbJ3NraXBmb3JtZGlzcGxheSddID0gMTsKCSAgICAkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZm9yZ290cHcnLCAkcmV0dXJuaWQsJHBhcmFtcyApOwoJICAgIHJldHVybiAxOwoJICB9CiAgICAgIH0KCiAgICAvLyB3ZSBmb3VuZCBubyBlbWFpbCBhZGRyZXNzCiAgICAkcGFyYW1zWydlcnJvciddID0gMTsKICAgICRwYXJhbXNbJ21lc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2NvdWxkbm90ZmluZGVtYWlsJyk7CiAgICAkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZm9yZ290cHcnLCAkcmV0dXJuaWQsJHBhcmFtcyApOwogIH0KCgogIGZ1bmN0aW9uIF9Eb0xvZ2luKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIGlmKCAhaXNzZXQoICRwYXJhbXNbJ2lucHV0X3VzZXJuYW1lJ10gKSB8fCAkcGFyYW1zWydpbnB1dF91c2VybmFtZSddID09ICcnICkKICAgICAgewoJJHBhcmFtc1snZXJyb3InXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9taXNzaW5ndXNlcm5hbWUnKTsKCSR0aGlzLT5fR2V0VXNlckxvZ2luRm9ybSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCXJldHVybjsKICAgICAgfQoKICAgIGlmKCAhaXNzZXQoICRwYXJhbXNbJ2lucHV0X3Bhc3N3b3JkJ10gKSB8fCAkcGFyYW1zWydpbnB1dF9wYXNzd29yZCddID09ICcnICkKICAgICAgewoJJHBhcmFtc1snZXJyb3InXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9taXNzaW5ncGFzc3dvcmQnKTsKCSR0aGlzLT5fR2V0VXNlckxvZ2luRm9ybSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCXJldHVybjsKICAgICAgfQoKICAgIC8vIG5vdyB2YWxpZGF0ZSB0aGUgcGFzc3dvcmQgYW5kIHVzZXJuYW1lCiAgICAkcmVzdWx0ID0gJHRoaXMtPkxvZ2luKCAkcGFyYW1zWydpbnB1dF91c2VybmFtZSddLCAkcGFyYW1zWydpbnB1dF9wYXNzd29yZCddICk7CiAgICBpZiggJHJlc3VsdFswXSA9PSBmYWxzZSApCiAgICAgIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAkcmVzdWx0WzFdOwoJJHRoaXMtPl9HZXRVc2VyTG9naW5Gb3JtKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJcmV0dXJuOwogICAgICB9CiAgICAkdGhpcy0+QXVkaXQoIDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwKCQkgICR0aGlzLT5MYW5nKCdmcm9udGVuZHVzZXJfbG9nZ2VkaW4nKS4iOiAiLiRwYXJhbXNbJ2lucHV0X3VzZXJuYW1lJ10gKTsKCiAgICAvLyB3ZSdyZSBsb2dnZWQgaW4KICAgIC8vIHJlZGlyZWN0IHNvbWV3aGVyZSAKICAgICRwYWdlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3BhZ2VpZF9sb2dpbicpOwogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydyZXR1cm50byddICkgKQogICAgICB7CgkkcGFnZSA9ICRwYXJhbXNbJ3JldHVybnRvJ107CiAgICAgIH0KCiAgICAvLyByZXBsYWNlIHskdXNlcm5hbWV9IHdpdGggdGhlIHVzZXIgbmFtZQogICAgJHBhZ2UgPSBzdHJfcmVwbGFjZSggIntcJHVzZXJuYW1lfSIsICRwYXJhbXNbJ2lucHV0X3VzZXJuYW1lJ10sICRwYWdlICk7CgogICAgaWYoICRwYWdlICkKICAgICAgewoJJGlkID0gQ29udGVudE1hbmFnZXI6OkdldFBhZ2VJREZyb21BbGlhcyggJHBhZ2UgKTsKCWlmKCAkaWQgKQoJICB7CgkgICAgJHRoaXMtPlJlZGlyZWN0Q29udGVudCggJGlkICk7CgkgICAgcmV0dXJuOwoJICB9CiAgICAgIH0KICAgICR0aGlzLT5SZWRpcmVjdENvbnRlbnQoICRyZXR1cm5pZCApOwogIH0KCgogIGZ1bmN0aW9uIF9Eb0xvZ291dCggJGlkLCAmJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICAkdXNlcm5hbWUgPSAkdGhpcy0+TG9nZ2VkSW5OYW1lKCk7CgogICAgJHRoaXMtPkxvZ291dCgpOwogICAgJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksCgkJICAkdGhpcy0+TGFuZygnZnJvbnRlbmR1c2VyX2xvZ291dCcpKTsKCiAgICAvLyB3ZSdyZSBsb2dnZWQgb3V0CiAgICAvLyByZWRpcmVjdCBzb21ld2hlcmUgCiAgICAvLyB0b2RvLCBhZGQgbW9yZSBvcHRpb25zIGhlcmUuCiAgICAkcGFnZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwYWdlaWRfbG9nb3V0Jyk7CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ3JldHVybnRvJ10gKSApCiAgICAgIHsKCSRwYWdlID0gJHBhcmFtc1sncmV0dXJudG8nXTsKICAgICAgfQoKICAgIC8vIHJlcGxhY2UgeyR1c2VybmFtZX0gd2l0aCB0aGUgdXNlciBuYW1lCiAgICAkcGFnZSA9IHN0cl9yZXBsYWNlKCAie1wkdXNlcm5hbWV9IiwgJHVzZXJuYW1lLCAkcGFnZSApOwoKICAgIGlmKCAkcGFnZSApCiAgICAgIHsKCSRpZCA9IENvbnRlbnRNYW5hZ2VyOjpHZXRQYWdlSURGcm9tQWxpYXMoICRwYWdlICk7CglpZiggJGlkICkKCSAgewoJICAgICR0aGlzLT5SZWRpcmVjdENvbnRlbnQoICRpZCApOwoJICAgIHJldHVybjsKCSAgfQogICAgICB9CiAgICAkdGhpcy0+UmVkaXJlY3RDb250ZW50KCAkcmV0dXJuaWQgKTsKICB9CgoKICBmdW5jdGlvbiBfRG9SZXNldFVzZXJBY2NvdW50KCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgICR1aWQgPSAnJzsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfdWlkJ10gKSApCiAgICAgIHsKCSR1aWQgPSB0cmltKCRwYXJhbXNbJ2lucHV0X3VpZCddKTsKICAgICAgfQogICAgJGNvZGUgPSAnJzsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfY29kZSddICkgKQogICAgICB7CgkkY29kZSA9IHRyaW0oJHBhcmFtc1snaW5wdXRfY29kZSddKTsKICAgICAgfQogICAgJHBhc3N3b3JkID0gJyc7CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X3Bhc3N3b3JkJ10gKSApCiAgICAgIHsKCSRwYXNzd29yZCA9IHRyaW0oJHBhcmFtc1snaW5wdXRfcGFzc3dvcmQnXSk7CiAgICAgIH0KICAgICRyZXBlYXRwYXNzd29yZCA9ICcnOwogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9yZXBlYXRwYXNzd29yZCddICkgKQogICAgICB7CgkkcmVwZWF0cGFzc3dvcmQgPSB0cmltKCRwYXJhbXNbJ2lucHV0X3JlcGVhdHBhc3N3b3JkJ10pOwogICAgICB9CgogICAgaWYoICRwYXNzd29yZCA9PSAnJyB8fCAkcmVwZWF0cGFzc3dvcmQgPT0gJycgfHwgCgkkcGFzc3dvcmQgIT0gJHJlcGVhdHBhc3N3b3JkIHx8ICEkdGhpcy0+SXNWYWxpZFBhc3N3b3JkKCRwYXNzd29yZCkpCiAgICAgIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRwYXNzd29yZCcpOwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ3ZlcmlmeWNvZGUnLCAkcmV0dXJuaWQsJHBhcmFtcyApOwoJcmV0dXJuOwogICAgICB9CgogICAgLy8gbm93IHdlIGhhdmUgdG8gdmVyaWZ5IHRoZSBjb2RlCiAgICAkcmVzdWx0ID0gJHRoaXMtPkdldFVzZXJUZW1wQ29kZSggJHVpZCApOwogICAgaWYoICRyZXN1bHRbMF0gPT0gRkFMU0UgKQogICAgICB7CgkkcGFyYW1zWydlcnJvciddID0gMTsKCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICRyZXN1bHRbMV07CgkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAndmVyaWZ5Y29kZScsICRyZXR1cm5pZCwkcGFyYW1zICk7CglyZXR1cm47CiAgICAgIH0KICAgICRkYmNvZGUgPSAkcmVzdWx0WzFdWydjb2RlJ107CgogICAgaWYoICRkYmNvZGUgIT0gJGNvZGUgKQogICAgICB7CgkkcGFyYW1zWydlcnJvciddID0gMTsKCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkY29kZScpOwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ3ZlcmlmeWNvZGUnLCAkcmV0dXJuaWQsJHBhcmFtcyApOwoJcmV0dXJuOwogICAgICB9CgogICAgLy8gd2hldywgd2UgZ290IGl0Li4uIG5vdyB3ZSBjYW4gcmVzZXQgdGhlIHBhc3N3b3JkCiAgICAkcmV0ID0gJHRoaXMtPlNldFVzZXJQYXNzd29yZCggJHVpZCwgJHBhc3N3b3JkICk7CiAgICBpZiggJHJldFswXSAhPSBUUlVFICkKICAgICAgewoJJHBhcmFtc1snZXJyb3InXSA9IDE7CgkkcGFyYW1zWydtZXNzYWdlJ10gPSAkcmV0WzFdOwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ3ZlcmlmeWNvZGUnLCAkcmV0dXJuaWQsJHBhcmFtcyApOwoJcmV0dXJuOwogICAgICB9CgogICAgLy8gYW5kIGRlbGV0ZSB0aGUgY29kZQogICAgJHRoaXMtPlJlbW92ZVVzZXJUZW1wQ29kZSggJHVpZCApOwoKICAgIC8vIGFuZCBkaXNwbGF5IGEgbmljZSB3YXJtIGZ1enp5IG1lc3NhZ2UKICAgIC8vIHRvZG8KICAgICR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkZWZhdWx0JywgJHJldHVybmlkICk7CiAgICBicmVhazsKICB9CgogIAogIGZ1bmN0aW9uIF9Eb1NldENoYW5nZVNldHRpbmdzVGVtcGxhdGUoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydkZWZhdWx0cyddICkgKQogICAgICB7CgkkdGhpcy0+U2V0VGVtcGxhdGUoJ2ZldXNlcnNfY2hhbmdlc2V0dGluZ3Nmb3JtJywgJHRoaXMtPmRmbHRfY2hhbmdlc2V0dGluZ3N0ZW1wbGF0ZSk7CiAgICAgIH0KICAgIGVsc2UKICAgICAgewoJJHRoaXMtPlNldFRlbXBsYXRlKCdmZXVzZXJzX2NoYW5nZXNldHRpbmdzZm9ybScsICRwYXJhbXNbJ3RlbXBsYXRlY29udGVudCddKTsKICAgICAgfQogICAgJHRoaXMtPm15UmVkaXJlY3RUb1RhYigkaWQsICdjaGFuZ2VzZXR0aW5nc190ZW1wbGF0ZScgKTsKICB9CgoKICBmdW5jdGlvbiBfRG9TZXRGb3Jnb3RQV1RlbXBsYXRlKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snZGVmYXVsdHMnXSApICkKICAgICAgewoJJHRoaXMtPlNldFRlbXBsYXRlKCdmZXVzZXJzX2ZvcmdvdHBhc3N3b3JkZm9ybScsICR0aGlzLT5kZmx0X2ZvcmdvdHBhc3N3b3JkdGVtcGxhdGUxKTsKCSR0aGlzLT5TZXRUZW1wbGF0ZSgnZmV1c2Vyc19mb3Jnb3RwYXNzd29yZGVtYWlsZm9ybScsICR0aGlzLT5kZmx0X2ZvcmdvdHBhc3N3b3JkdGVtcGxhdGUyKTsKCSR0aGlzLT5TZXRUZW1wbGF0ZSgnZmV1c2Vyc19mb3Jnb3RwYXNzd29yZHZlcmlmeWZvcm0nLCR0aGlzLT5kZmx0X2ZvcmdvdHBhc3N3b3JkdGVtcGxhdGUzKTsKICAgICAgfQogICAgZWxzZQogICAgICB7CgkkdGhpcy0+U2V0VGVtcGxhdGUoJ2ZldXNlcnNfZm9yZ290cGFzc3dvcmRmb3JtJywgJHBhcmFtc1sndGVtcGxhdGVjb250ZW50MSddKTsKCSR0aGlzLT5TZXRUZW1wbGF0ZSgnZmV1c2Vyc19mb3Jnb3RwYXNzd29yZGVtYWlsZm9ybScsICRwYXJhbXNbJ3RlbXBsYXRlY29udGVudDInXSk7OwoJJHRoaXMtPlNldFRlbXBsYXRlKCdmZXVzZXJzX2ZvcmdvdHBhc3N3b3JkdmVyaWZ5Zm9ybScsICRwYXJhbXNbJ3RlbXBsYXRlY29udGVudDMnXSk7OwogICAgICB9CiAgICAkdGhpcy0+bXlSZWRpcmVjdFRvVGFiKCRpZCwgJ2ZvcmdvdHBhc3N3b3JkX3RlbXBsYXRlJyApOwogIH0KCgogIGZ1bmN0aW9uIF9Eb1NldExvZ2luVGVtcGxhdGUoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydkZWZhdWx0cyddICkgKQogICAgICB7CgkkdGhpcy0+U2V0VGVtcGxhdGUoJ2ZldXNlcnNfbG9naW5mb3JtJywgJHRoaXMtPmRmbHRfbG9naW5mb3JtdGVtcGxhdGUpOwogICAgICB9CiAgICBlbHNlCiAgICAgIHsKCSR0aGlzLT5TZXRUZW1wbGF0ZSgnZmV1c2Vyc19sb2dpbmZvcm0nLCAkcGFyYW1zWyd0ZW1wbGF0ZWxvZ2luZm9ybSddKTsKICAgICAgfQogICAgJHRoaXMtPm15UmVkaXJlY3RUb1RhYigkaWQsICdsb2dpbnRlbXBsYXRlJyApOwogIH0KCiAgCiAgZnVuY3Rpb24gX0RvU2V0TG9nb3V0VGVtcGxhdGUoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydkZWZhdWx0cyddICkgKQogICAgICB7CgkkdGhpcy0+U2V0VGVtcGxhdGUoJ2ZldXNlcnNfbG9nb3V0Zm9ybScsICR0aGlzLT5kZmx0X2xvZ291dGZvcm10ZW1wbGF0ZSk7CiAgICAgIH0KICAgIGVsc2UKICAgICAgewoJJHRoaXMtPlNldFRlbXBsYXRlKCdmZXVzZXJzX2xvZ291dGZvcm0nLCAkcGFyYW1zWyd0ZW1wbGF0ZWxvZ291dGZvcm0nXSk7CiAgICAgIH0KICAgICR0aGlzLT5teVJlZGlyZWN0VG9UYWIoJGlkLCAnbG9nb3V0dGVtcGxhdGUnLCAkcGFyYW1zKTsKICB9CgogIAogIGZ1bmN0aW9uIF9Eb1NldFByZWZzKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfcmVtb3ZlYWxsJ10gKSApCiAgICAgIHsKCSR0aGlzLT5FeHBpcmVUZW1wQ29kZXMoJy01IHllYXJzJyk7CglyZXR1cm47CiAgICAgIH0KCiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X3JlbW92ZTF3ZWVrJ10gKSApCiAgICAgIHsKCSR0aGlzLT5FeHBpcmVUZW1wQ29kZXMoJy0xIHdlZWsnKTsKCSR0aGlzLT5teVJlZGlyZWN0VG9UYWIoJGlkLCAncHJlZnMnKTsKICAgICAgfQoKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfcmVtb3ZlMW1vbnRoJ10gKSApCiAgICAgIHsKCSR0aGlzLT5FeHBpcmVUZW1wQ29kZXMoJy0xIG1vbnRoJyk7CgkkdGhpcy0+bXlSZWRpcmVjdFRvVGFiKCRpZCwgJ3ByZWZzJyk7CiAgICAgIH0KCiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2NhbmNlbCddICkgKQogICAgICB7CgkkdGhpcy0+bXlSZWRpcmVjdFRvVGFiKCRpZCwgJ3ByZWZzJyApOwogICAgICB9CgogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9taW5wd2xlbiddICkgJiYgCglpc3NldCggJHBhcmFtc1snaW5wdXRfbWF4cHdsZW4nXSApICkKICAgICAgewoJaWYoICRwYXJhbXNbJ2lucHV0X21pbnB3bGVuJ10gPj0gJHBhcmFtc1snaW5wdXRfbWF4cHdsZW4nXSB8fAoJICAgICRwYXJhbXNbJ2lucHV0X21pbnB3bGVuJ10gPD0gMCApCgkgIHsKCSAgICAkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkLAoJCQkJICAgICAgJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRwYXNzd29yZGxlbmd0aHMnKSApOwoJICAgIHJldHVybjsKCSAgfQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ21pbl9wYXNzd29yZGxlbmd0aCcsJHBhcmFtc1snaW5wdXRfbWlucHdsZW4nXSk7CgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnbWF4X3Bhc3N3b3JkbGVuZ3RoJywkcGFyYW1zWydpbnB1dF9tYXhwd2xlbiddKTsKICAgICAgfQoKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfbWludW5sZW4nXSApICYmIAoJaXNzZXQoICRwYXJhbXNbJ2lucHV0X21heHVubGVuJ10gKSApCiAgICAgIHsKCWlmKCAkcGFyYW1zWydpbnB1dF9taW51bmxlbiddID49ICRwYXJhbXNbJ2lucHV0X21heHVubGVuJ10gfHwKCSAgICAkcGFyYW1zWydpbnB1dF9taW51bmxlbiddIDw9IDAgKQoJICB7CgkgICAgJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwKCQkJCSAgICAgICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkdXNlcm5hbWVsZW5ndGhzJykgKTsKCSAgICByZXR1cm47CgkgIH0KCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtaW5fdXNlcm5hbWVsZW5ndGgnLCRwYXJhbXNbJ2lucHV0X21pbnVubGVuJ10pOwoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ21heF91c2VybmFtZWxlbmd0aCcsJHBhcmFtc1snaW5wdXRfbWF4dW5sZW4nXSk7CiAgICAgIH0KCiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgndXNlcl9zZXNzaW9uX2V4cGlyZXMnLCAkcGFyYW1zWydpbnB1dF9zZXNzaW9udGltZW91dCddKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkZWZhdWx0X2dyb3VwJywgJHBhcmFtc1snaW5wdXRfZGZsdGdyb3VwJ10pOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RvX3NtdHBfdmFsaWRhdGVfZW1haWwnLCAkcGFyYW1zWydpbnB1dF9zbXRwdmFsaWRhdGUnXSk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgncmVxdWlyZWRfZmllbGRfbWFya2VyJywgJHBhcmFtc1snaW5wdXRfcmVxdWlyZWRmaWVsZG1hcmtlciddKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdyZXF1aXJlZF9maWVsZF9jb2xvcicsICRwYXJhbXNbJ2lucHV0X3JlcXVpcmVkZmllbGRjb2xvciddKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdyZXF1aXJlX29uZWdyb3VwJywgJHBhcmFtc1snaW5wdXRfcmVxdWlyZW9uZWdyb3VwJ10pOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2hpZGRlbl9maWVsZF9tYXJrZXInLCAkcGFyYW1zWydpbnB1dF9oaWRkZW5maWVsZG1hcmtlciddKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdoaWRkZW5fZmllbGRfY29sb3InLCAkcGFyYW1zWydpbnB1dF9oaWRkZW5maWVsZGNvbG9yJ10pOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3BhZ2VpZGZvcmdvdHBhc3N3ZCcsICRwYXJhbXNbJ2lucHV0X2ZvcmdvdHB3X3BhZ2UnXSk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgncGFnZWlkX2NoYW5nZXNldHRpbmdzJywgJHBhcmFtc1snaW5wdXRfY2hhbmdlc2V0dGluZ3NfcGFnZSddKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdwYWdlaWRfbG9naW4nLCAkcGFyYW1zWydpbnB1dF9sb2dpbl9wYWdlJ10pOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3BhZ2VpZF9sb2dvdXQnLCAkcGFyYW1zWydpbnB1dF9sb2dvdXRfcGFnZSddKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdhbGxvd19kdXBsaWNhdGVfZW1haWxzJywgJHBhcmFtc1snaW5wdXRfYWxsb3dfZHVwbGljYXRlX2VtYWlscyddKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdwYXNzd29yZGZsZGxlbmd0aCcsICRwYXJhbXNbJ2lucHV0X3B3ZmxkbGVuJ10pOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3VzZXJuYW1lZmxkbGVuZ3RoJywgJHBhcmFtc1snaW5wdXRfdW5mbGRsZW4nXSk7CiAgICAKICAgICR0aGlzLT5teVJlZGlyZWN0VG9UYWIoJGlkLCAncHJlZnMnKTsKICB9CgogIAogIGZ1bmN0aW9uIF9Eb1NldFByb3BlcnRpZXMoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydjYW5jZWwnXSApICkKICAgICAgewoJLy8gd2UgYXJlIGNhbmNlbGxpbmcKCSR0aGlzLT5teVJlZGlyZWN0VG9UYWIgKCRpZCwgJ3Byb3BlcnRpZXMnICk7CiAgICAgIH0KCiAgICAvLyBjaGVjayBpZiB3ZSBhcmUgYWRkaW5nIGEgcHJvcGVydHkKICAgIGlmKCBpc3NldCggJHBhcmFtc1sncHJvcGFkZCddICkgKQogICAgICB7CgkvLyB5dXAKCS8vIHZhbGlkYXRlIGZpZWxkcwoJJG5hbWUgPSB0cmltKCRwYXJhbXNbJ2lucHV0X25hbWUnXSk7CgkkbmFtZSA9IHN0cnRvbG93ZXIocHJlZ19yZXBsYWNlKCcvIC8nLCdfJywkbmFtZSkpOwoJJHByb21wdCA9IHRyaW0oJHBhcmFtc1snaW5wdXRfcHJvbXB0J10pOwoJJGxlbmd0aCA9IHRyaW0oJHBhcmFtc1snaW5wdXRfbGVuZ3RoJ10pOwoJJHR5cGUgPSAkcGFyYW1zWydpbnB1dF90eXBlJ107CgoJaWYoICRuYW1lID09ICcnIHx8ICRwcm9tcHQgPT0gJycgKQoJICB7CgkgICAgJHBhcmFtc1snZXJyb3InXSA9IDE7CgkgICAgJHBhcmFtc1snbWVzc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnKTsKCSAgICAkdGhpcy0+bXlSZWRpcmVjdFRvVGFiKCAkaWQsICdwcm9wZXJ0aWVzJywgJHBhcmFtcyApOwoJICAgIHJldHVybjsKCSAgfQoKCWlmKCBpc3NldCgkcGFyYW1zWydwcm9wZGVmbiddKSApCgkgIHsKCSAgICAkcHJvcHMgPSBzcGxpdCgiLCIsJHBhcmFtc1sncHJvcGRlZm4nXSk7CgkgICAgZm9yZWFjaCggJHByb3BzIGFzICRwcm9wICkKCSAgICB7CgkgICAgICBsaXN0KCAkZW5hbWUsICRlcHJvbXB0LCAkZXR5cGUsICRlbGVuZ3RoICkgPSBzcGxpdCgiOyIsJHByb3ApOwoJICAgICAgaWYoICRuYW1lID09ICRlbmFtZSApIAoJCXsKCQkgIC8vIG5hbWUgaXMgYWxyZWFkeSB0YWtlbgoJCSAgJHBhcmFtc1snZXJyb3InXSA9IDE7CgkJICAkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfZHVwbGljYXRlbmFtZScpOwoJCSAgJHRoaXMtPm15UmVkaXJlY3RUb1RhYiggJGlkLCAncHJvcGVydGllcycsICRwYXJhbXMgKTsKCQkgIHJldHVybjsKCQl9CgkgICAgfQoJICB9CgoJJGVudHJ5ID0gaW1wbG9kZSgiOyIsYXJyYXkoJG5hbWUsJHByb21wdCwkdHlwZSwkbGVuZ3RoKSk7CglpZiggaXNzZXQoJHBhcmFtc1sncHJvcGRlZm4nXSkpCgkgIHsKCSAgICAkcGFyYW1zWydwcm9wZGVmbiddIC49ICIsIi4kZW50cnk7CgkgIH0KCWVsc2UgCgkgIHsKCSAgICAkcGFyYW1zWydwcm9wZGVmbiddID0gJGVudHJ5OwoJICB9CgkkcGFyYW1zWydkb25vdGxvYWRwcm9wcyddID0gMTsKCSR0aGlzLT5teVJlZGlyZWN0VG9UYWIoICRpZCwgJ3Byb3BlcnRpZXMnLCAkcGFyYW1zICk7CglyZXR1cm47CiAgICAgIH0KICAgIGVsc2UgaWYoIGFycmF5X2tleV9leGlzdHNfc3Vic3RyKCAkcGFyYW1zLCAncHJvcGVkaXRfJykgJiYgaXNzZXQoJHBhcmFtc1sncHJvcGRlZm4nXSkpCiAgICAgIHsKCSRrID0gYXJyYXlfZmluZF9rZXlfcmVnZXhwKCAkcGFyYW1zLCAnL15wcm9wZWRpdF8vJyApOwoJJHBvczEgPSBzdHJwb3MoICRrLCAnLScgKTsKCSRwb3MyID0gc3RycnBvcyggJGssICdfJyApOwoJJGtleSAgPSBzdWJzdHIoICRrICwgJHBvczErMSwgJHBvczIgLSAkcG9zMSAtIDEpOwoKCS8vIHdlJ3JlIGVkaXRpbmcgYSBwcm9wZXJ0eQoJLy8gc28gd2UgdGFrZSB0aGUgY3VycmVudCBwcm9wZXJ0eSAoJGtleSkgYW5kIHJlbW92ZSBpdAoJLy8gZnJvbSBwcm9wcywgYW5kIHB1dCBpdCBpbiB0aGUgcGFyYW1zCgkkcHJvcHMgPSBzcGxpdCgnLCcsJHBhcmFtc1sncHJvcGRlZm4nXSk7CgkkbmV3cHJvcHMgPSAiIjsKCWZvcmVhY2goICRwcm9wcyBhcyAkcCApCgl7CgkgICRhcHJvcCA9IHNwbGl0KCI7IiwkcCk7CgkgIGlmKCAkYXByb3BbMF0gPT0gJGtleSApCgkgICAgewoJICAgICAgJHBhcmFtc1snaW5wdXRfbmFtZSddID0gJGFwcm9wWzBdOwoJICAgICAgJHBhcmFtc1snaW5wdXRfcHJvbXB0J10gPSAkYXByb3BbMV07CgkgICAgICAkcGFyYW1zWydpbnB1dF90eXBlJ10gPSAkYXByb3BbMl07CgkgICAgICAkcGFyYW1zWydpbnB1dF9sZW5ndGgnXSA9ICRhcHJvcFszXTsKCSAgICB9CgkgIGVsc2UgCgkgICAgewoJICAgICAgaWYoICRuZXdwcm9wcyA9PSAnJyApCgkJewoJCSAgJG5ld3Byb3BzID0gJHA7CgkJfQoJICAgICAgZWxzZQoJCXsKCQkgICRuZXdwcm9wcyA9ICRuZXdwcm9wcy4iLCIuJHA7CgkJfQoJICAgIH0KCX0KCSRwYXJhbXNbJ3Byb3BkZWZuJ10gPSAkbmV3cHJvcHM7CgkkcGFyYW1zWydkb25vdGxvYWRwcm9wcyddID0gMTsKCSR0aGlzLT5teVJlZGlyZWN0VG9UYWIoICRpZCwgJ3Byb3BlcnRpZXMnLCAkcGFyYW1zICk7CglyZXR1cm47CiAgICAgIH0KICAgIGVsc2UgaWYoIGFycmF5X2tleV9leGlzdHNfc3Vic3RyKCAkcGFyYW1zLCAncHJvcGRlbGV0ZV8nKSAmJiBpc3NldCgkcGFyYW1zWydwcm9wZGVmbiddKSkKICAgICAgewoJJGsgPSBhcnJheV9maW5kX2tleV9yZWdleHAoICRwYXJhbXMsICcvXnByb3BkZWxldGVfLycgKTsKCWxpc3QoICRqdW5rLCAka2V5ICkgPSBzcGxpdCggIl8iLCAkayApOwoKCS8vIHdlJ3JlIGRlbGV0aW5nIGEgcHJvcGVydHkKCS8vIHNvIHdlIHRha2UgdGhlIGN1cnJlbnQgcHJvcGVydHkgKCRrZXkpIGFuZCByZW1vdmUgaXQKCS8vIGZyb20gcHJvcHMsIAoJJHByb3BzID0gc3BsaXQoJywnLCRwYXJhbXNbJ3Byb3BkZWZuJ10pOwoJJG5ld3Byb3BzID0gIiI7Cglmb3JlYWNoKCAkcHJvcHMgYXMgJHAgKQoJewoJICAkYXByb3AgPSBzcGxpdCgiOyIsJHApOwoJICBpZiggJGFwcm9wWzBdID09ICRrZXkgKQoJICAgIHsKCSAgICAgIGNvbnRpbnVlOwoJICAgIH0KCSAgZWxzZSAKCSAgICB7CgkgICAgICBpZiggJG5ld3Byb3BzID09ICcnICkKCQl7CgkJICAkbmV3cHJvcHMgPSAkcDsKCQl9CgkgICAgICBlbHNlCgkJewoJCSAgJG5ld3Byb3BzID0gJG5ld3Byb3BzLiIsIi4kcDsKCQl9CgkgICAgfQoJfQoJJHBhcmFtc1sncHJvcGRlZm4nXSA9ICRuZXdwcm9wczsKCSRwYXJhbXNbJ2Rvbm90bG9hZHByb3BzJ10gPSAxOwogICAgICAgICR0aGlzLT5teVJlZGlyZWN0VG9UYWIoICRpZCwgJ3Byb3BlcnRpZXMnLCAkcGFyYW1zICk7CglyZXR1cm47CiAgICAgIH0KCgogICAgLy8gd2UncmUgc3VibWl0dGluZyB0aGUgcHJvcGVydHkgZGVmaW5pdGlvbnMKICAgICRwcm9wcyA9IHNwbGl0KCcsJywkcGFyYW1zWydwcm9wZGVmbiddKTsKICAgICR0aGlzLT5EZWxldGVQcm9wZXJ0eURlZm5zKCk7CiAgICBmb3JlYWNoKCAkcHJvcHMgYXMgJHByb3AgKQogICAgewogICAgICAkYXByb3AgPSBzcGxpdCgiOyIsJHByb3ApOwoKICAgICAgJHJldCA9ICR0aGlzLT5BZGRQcm9wZXJ0eURlZm4oICRhcHJvcFswXSwgJGFwcm9wWzFdLCAkYXByb3BbMl0sICRhcHJvcFszXSwgJGFwcm9wWzRdICk7CiAgICAgIGlmKCAkcmV0WzBdID09IGZhbHNlICkKCXsKCSAgLy8gbmFtZSBpcyBhbHJlYWR5IHRha2VuCgkgICR0aGlzLT5teVJlZGlyZWN0VG9UYWIoJGlkLCAncHJvcGVydGllcycgKTsKCSAgcmV0dXJuOwoJfQogICAgfQoKICAgICR0aGlzLT5teVJlZGlyZWN0VG9UYWIoJGlkLCAncHJvcGVydGllcycsICRwYXJhbXMgKTsKICAgIHJldHVybjsKICB9CgoKICBmdW5jdGlvbiBfRG9Vc2VyQWN0aW9uKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snZm9ybSddICkgKQogICAgICB7Cglzd2l0Y2goICRwYXJhbXNbJ2Zvcm0nXSApIAoJICB7CgkgIGNhc2UgJ2xvZ2luJzoKCSAgICAkdGhpcy0+X0dldFVzZXJMb2dpbkZvcm0oJGlkLCRwYXJhbXMsJHJldHVybmlkKTsKCSAgICBicmVhazsKCSAgY2FzZSAnbG9nb3V0JzoKCSAgICAkdGhpcy0+X0dldFVzZXJMb2dvdXRGb3JtKCRpZCwkcGFyYW1zLCRyZXR1cm5pZCk7CgkgICAgYnJlYWs7CgkgIGNhc2UgJ2ZvcmdvdHB3JzoKCSAgICAkdGhpcy0+X0Rpc3BsYXlVc2VyRm9yZ290UGFzc3dvcmRQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJICAgIGJyZWFrOwoJICBjYXNlICdjaGFuZ2VzZXR0aW5ncyc6CgkgICAgJHRoaXMtPl9EaXNwbGF5VXNlclNldHRpbmdzUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCSAgICBicmVhazsKCSAgY2FzZSAnc2lsZW50JzoKCSAgICAkdGhpcy0+X0V4cG9ydExvZ2dlZEluVXNlclZhcmlhYmxlcyggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCSAgICBicmVhazsKCSAgfQoJcmV0dXJuOwogICAgICB9CgogICAgaWYoICEkdGhpcy0+TG9nZ2VkSW4oKSApIAogICAgICB7CgkkdGhpcy0+X0dldFVzZXJMb2dpbkZvcm0oJGlkLCRwYXJhbXMsJHJldHVybmlkKTsKICAgICAgfQogICAgZWxzZSAKICAgICAgewoJJHRoaXMtPl9HZXRVc2VyTG9nb3V0Rm9ybSgkaWQsJHBhcmFtcywkcmV0dXJuaWQpOwogICAgICB9CiAgfQoKCiAgZnVuY3Rpb24gX0RvVXNlckNoYW5nZVNldHRpbmdzKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgICR1aWQgPSAkdGhpcy0+TG9nZ2VkSW5JZCgpOwogICAgaWYoICR1aWQgPT0gZmFsc2UgKSAKICAgICAgewoJLy8gdXNlciBpc24ndCBsb2dnZWQgaW4KCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsIAoJCQkJICAkdGhpcy0+TGFuZygnZXJyb3Jfbm90bG9nZ2VkaW4nKSk7CglyZXR1cm47CiAgICAgIH0KICAgICRyZXN1bHQgPSAkdGhpcy0+R2V0VXNlckluZm8oICR1aWQgKTsKICAgIGlmKCAkcmVzdWx0WzBdID09IEZBTFNFICkKICAgICAgewoJLy8gdXNlciBpc24ndCBsb2dnZWQgaW4KCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsIAoJCQkJICAkcmVzdWx0WzFdKTsKCXJldHVybjsKICAgICAgfQogICAgJHVpbmZvID0gJHJlc3VsdFsxXTsKCiAgICAkcGFzc3dvcmQgPSB0cmltKCRwYXJhbXNbJ2lucHV0X3Bhc3N3b3JkJ10pOwogICAgJHJlcGVhdCAgID0gdHJpbSgkcGFyYW1zWydpbnB1dF9yZXBlYXRwYXNzd29yZCddKTsKICAgIGlmKCAkcGFzc3dvcmQgIT0gJHJlcGVhdCAmJiAkcGFzc3dvcmQgIT0gJycpCiAgICAgIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX3Bhc3N3b3JkbWlzbWF0Y2gnKTsKCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdjaGFuZ2VzZXR0aW5ncycsICRyZXR1cm5pZCwgJHBhcmFtcyApOwogICAgICB9CgogICAgLy8gZG8gdmFsaWRhdGlvbiBvZiB0aGUgZmllbGRzLgogICAgZm9yZWFjaCggJHBhcmFtcyBhcyAka2V5ID0+ICR2YWwgKQogICAgewogICAgICBpZiggcHJlZ19tYXRjaCggJy9eaGlkZGVuXy8nLCAka2V5ICkgKQoJewoJICAkcHJvcG5hbWUgPSBzdWJzdHIoICRrZXksIHN0cmxlbignaGlkZGVuXycpKTsKCSAgJGFyciA9IHNwbGl0KCI7IiwkcGFyYW1zWyRrZXldKTsKCSAgJHJlcXVpcmVkID0gJGFyclszXTsKCSAgaWYoICRyZXF1aXJlZCA9PSAyICYmIAoJICAgICAgKCFpc3NldCgkcGFyYW1zWydpbnB1dF8nLiRwcm9wbmFtZV0pIHx8ICRwYXJhbXNbJ2lucHV0XycuJHByb3BuYW1lXSA9PSAnJyApICkKCSAgICB7CgkgICAgICAkcGFyYW1zWydlcnJvciddID0gMTsKCSAgICAgICRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9yZXF1aXJlZGZpZWxkJywkcHJvcG5hbWUpOwoJICAgICAgJHRoaXMtPlJlZGlyZWN0KCAkaWQsICdjaGFuZ2VzZXR0aW5ncycsICRyZXR1cm5pZCwgJHBhcmFtcyApOwoJICAgIH0KCgkgIGlmKCAkYXJyWzFdID09ICcyJyApCgkgICAgewoJICAgICAgJHJlc3VsdCA9ICR0aGlzLT5Jc1ZhbGlkRW1haWxBZGRyZXNzKCAkcGFyYW1zWydpbnB1dF8nLiRwcm9wbmFtZV0sCgkJCQkJCSAgICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZG9fc210cF92YWxpZGF0ZV9lbWFpbCcpICk7CgkgICAgICBpZiggJHJlc3VsdFswXSA9PSBmYWxzZSApCgkJewoJCSAgJHBhcmFtc1snZXJyb3InXSA9IDE7CgkJICAkcGFyYW1zWydtZXNzYWdlJ10gPSAkcmVzdWx0WzFdOwoJCSAgJHRoaXMtPlJlZGlyZWN0KCAkaWQsICdjaGFuZ2VzZXR0aW5ncycsICRyZXR1cm5pZCwgJHBhcmFtcyApOwoJCX0KCSAgICB9Cgl9CiAgICB9CgogICAgLy8KICAgIC8vIG5vdyB3ZSBhY3R1YWxseSBjaGFuZ2UgdGhlIHVzZXIgc2V0dGluZ3MKICAgIC8vCgogICAgLy8gcGFzc3dvcmQKICAgIGlmKCAkcGFzc3dvcmQgIT0gJycpCiAgICAgIHsKCSRyZXN1bHQgPSAkdGhpcy0+U2V0VXNlciggJHVpZCwgJHVpbmZvWyd1c2VybmFtZSddLCAkcGFzc3dvcmQsICR1aW5mb1snZXhwaXJlcyddICk7CglpZiggJHJlc3VsdFswXSA9PSBGQUxTRSApCgkgIHsKCSAgICAkcGFyYW1zWydlcnJvciddID0gMTsKCSAgICAkcGFyYW1zWydtZXNzYWdlJ10gPSAkcmVzdWx0WzFdOwoJICAgICR0aGlzLT5SZWRpcmVjdCggJGlkLCAnY2hhbmdlc2V0dGluZ3MnLCAkcmV0dXJuaWQsICRwYXJhbXMgKTsKCSAgfQogICAgICB9CgogICAgLy8gbm93IHRoZSBwcm9wZXJ0aWVzCiAgICAkdGhpcy0+RGVsZXRlVXNlclByb3BlcnR5RnVsbCggIiIsICR1aWQsIHRydWUgKTsKCiAgICBmb3JlYWNoKCAkcGFyYW1zIGFzICRrZXkgPT4gJHZhbCApCiAgICB7CiAgICAgIGlmKCBwcmVnX21hdGNoKCAnL15oaWRkZW5fLycsICRrZXkgKSApCgl7CgkgICRwcm9wbmFtZSA9IHN1YnN0ciggJGtleSwgc3RybGVuKCdoaWRkZW5fJykpOwoJICAkYXJyID0gc3BsaXQoIjsiLCRwYXJhbXNbJGtleV0pOwoJICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0XycuJHByb3BuYW1lXSApICkKCSAgICB7CgkgICAgICAkdmFsID0gJHBhcmFtc1snaW5wdXRfJy4kcHJvcG5hbWVdOwoJICAgICAgJHJldCA9ICR0aGlzLT5TZXRVc2VyUHJvcGVydHlGdWxsKCAkcHJvcG5hbWUsICR2YWwsICR1aWQgKTsKCSAgICAgIGlmKCAkcmV0ID09IGZhbHNlICkKCQl7CgkJICAkcGFyYW1zWydlcnJvciddID0gMTsKCQkgICRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcicpOwoJCSAgJHRoaXMtPlJlZGlyZWN0KCAkaWQsICdjaGFuZ2VzZXR0aW5ncycsICRyZXR1cm5pZCwgJHBhcmFtcyApOwoJCSAgcmV0dXJuOwoJCX0KCSAgICB9Cgl9CiAgICB9CgogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9yZXR1cm50byddICkgKQogICAgICB7CgkkaWQgPSBDb250ZW50TWFuYWdlcjo6R2V0UGFnZUlERnJvbUFsaWFzKCAkcGFyYW1zWydpbnB1dF9yZXR1cm50byddICk7CglpZiggJGlkICkKCSAgewoJICAgICR0aGlzLT5SZWRpcmVjdENvbnRlbnQoICRpZCApOwoJICAgIHJldHVybjsKCSAgfQogICAgICB9CgogICAgLy8gYW5kIHJlZGlyZWN0IGJhY2sgdG8gZGVmYXVsdAogICAgJHRoaXMtPlJlZGlyZWN0Q29udGVudCggQ29udGVudE1hbmFnZXI6OkdldERlZmF1bHRQYWdlSUQoKSApOwogIH0KCiAgZnVuY3Rpb24gX0Rpc3BsYXlBZG1pbkFkbWluVGFiKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgLy8gYSBmb3JtIGZvciBwZXJmb3JtaW5nIHZhcmlvdXMgYWRtaW4gdGFza3MKICAgIC8vIGxpa2UgZXhwb3J0aW5nIHVzZXJzIHRvIENTViwgcmVzZXR0aW5nIGV4cGlyeSBkYXRlcywgZXRjLCBldGMuCiAgICAKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCggJGlkLCAnZG9fYWRtaW50YXNrcycgKSApOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X2V4cG9ydCcsJHRoaXMtPkxhbmcoJ3Byb21wdF9leHBvcnRjc3YnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X2V4cG9ydCcsCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnYnV0dG9uX2V4cG9ydCcsCgkJCQkJCSAgICR0aGlzLT5MYW5nKCdleHBvcnRjc3YnKSkpOwogICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbnRhc2tzLnRwbCcpOwogIH0KCiAgZnVuY3Rpb24gX0Rpc3BsYXlBZG1pbkFkZEdyb3VwUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgICRwcm9wZGVmbiA9ICR0aGlzLT5HZXRQcm9wZXJ0eURlZm5zKCk7CiAgICBpZiggY291bnQoJHByb3BkZWZuKSA9PSAwICkKICAgICAgewoJJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLAoJCQkJICR0aGlzLT5MYW5nKCdlcnJvcl9ub3Byb3BlcnRpZXMnKSk7CglyZXR1cm47CiAgICAgIH0KCiAgICAvLyBwb3B1bGF0ZSB0aGUgdGVtcGxhdGUKICAgIGlmKCBpc3NldCggJHBhcmFtc1snZXJyb3InXSApICkKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlcnJvcicsJHBhcmFtc1snZXJyb3InXSk7CiAgICAgIH0KICAgIGlmKCBpc3NldCggJHBhcmFtc1snbWVzc2FnZSddICkgKQogICAgICB7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21lc3NhZ2UnLCRwYXJhbXNbJ21lc3NhZ2UnXSk7CiAgICAgIH0KICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGUnLCAkdGhpcy0+TGFuZygnYWRkZ3JvdXAnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdzdGFydGZvcm0nLAoJCQkJICAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0ICgkaWQsCgkJCQkJCQkgICdkb19hZGRncm91cCcsCgkJCQkJCQkgICRyZXR1cm5pZCkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnZW5kZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtRW5kICgpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ3N1Ym1pdCcsCgkJCQkgICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnc3VibWl0JywKCQkJCQkJCSAgICAkdGhpcy0+TGFuZygnc3VibWl0JykpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2NhbmNlbCcsCgkJCQkgICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnY2FuY2VsJywKCQkJCQkJCSAgICAkdGhpcy0+TGFuZygnY2FuY2VsJykpKTsKICAgIAogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgncHJvbXB0X2dyb3VwbmFtZScsCgkJCSAgICR0aGlzLT5MYW5nICgnbmFtZScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2lucHV0X2dyb3VwbmFtZScsCgkJCSAgICR0aGlzLT5DcmVhdGVJbnB1dFRleHQgKCRpZCwgJ2lucHV0X2dyb3VwbmFtZScsCgkJCQkJCSAgICIiLCAyMCwgODApKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ3Byb21wdF9ncm91cGRlc2MnLAoJCQkgICAkdGhpcy0+TGFuZyAoJ2Rlc2NyaXB0aW9uJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnaW5wdXRfZ3JvdXBkZXNjJywKCQkJICAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCAoJGlkLCAnaW5wdXRfZ3JvdXBkZXNjJywKCQkJCQkJICAgIiIsIDgwLCAyNTUpKTsgICAgCgogICAgLy8gZGlzcGxheSBhIGxpc3Qgb2YgdGhlIHByb3BlcnRpZXMgaW4gYSBmb3JtCiAgICAvLyB0byBhbGxvdyB0aGUgdXNlciB0byBwaWNrIHdoaWNoIG9uZXMgYXJlIHJlcXVpcmVkIGFuZCB3aGljaCBvbmVzIGFyZW50LgogICAgJHJvd2FycmF5ID0gYXJyYXkoKTsKICAgICRyb3djbGFzcyA9ICdyb3cxJzsKICAgICRrZXlzID0gYXJyYXlfa2V5cygkdGhpcy0+dHlwZXMpOwogICAgJG9wdGlvbnMgPSBhcnJheSggJHRoaXMtPkxhbmcoJ29mZicpID0+IDAsCgkJICAgICAgJHRoaXMtPkxhbmcoJ29wdGlvbmFsJykgPT4gMSwKCQkgICAgICAkdGhpcy0+TGFuZygncmVxdWlyZWQnKSA9PiAyLAoJCSAgICAgICR0aGlzLT5MYW5nKCdoaWRkZW4nKSA9PiAzKTsKICAgIAogICAgZm9yZWFjaCggJHByb3BkZWZuIGFzICRkZWZuICkKICAgICAgewoJJG9uZXJvdyA9IG5ldyBTdGRDbGFzcygpOwogICAgICAgICRvbmVyb3ctPm5hbWUgPSAkZGVmblsnbmFtZSddOwogICAgICAgICRvbmVyb3ctPnByb21wdCA9ICRkZWZuWydwcm9tcHQnXTsKCSRvbmVyb3ctPnR5cGUgPSAkdGhpcy0+TGFuZyggJGtleXNbJGRlZm5bJ3R5cGUnXV0gKTsKCSRvbmVyb3ctPnNvcnRvcmRlciA9ICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoICRpZCwgJ2lucHV0X3NvcnRvcmRlcl8nLiRkZWZuWyduYW1lJ10sICcnLCAzLCAyICk7Cgkkb25lcm93LT5yZXF1aXJlZCA9ICR0aGlzLT5DcmVhdGVJbnB1dFJhZGlvR3JvdXAoICRpZCwgJ2lucHV0X3JlcXVpcmVkXycuJGRlZm5bJ25hbWUnXSwgJG9wdGlvbnMgKTsKCSRvbmVyb3ctPnJvd2NsYXNzID0gJHJvd2NsYXNzOwoKCWFycmF5X3B1c2ggKCRyb3dhcnJheSwgJG9uZXJvdyk7CgkoJHJvd2NsYXNzID09ICJyb3cxIiA/ICRyb3djbGFzcyA9ICJyb3cyIiA6ICRyb3djbGFzcyA9ICJyb3cxIik7CiAgICAgIH0KCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb3BzJywgJHJvd2FycmF5KTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvcGNvdW50Jyxjb3VudCgkcm93YXJyYXkpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignc29ydG9yZGVydGV4dCcsICR0aGlzLT5MYW5nKCdzb3J0b3JkZXInKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ25hbWV0ZXh0JywkdGhpcy0+TGFuZygnbmFtZScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0dGV4dCcsICR0aGlzLT5MYW5nKCdwcm9tcHQnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3R5cGV0ZXh0JywkdGhpcy0+TGFuZygndHlwZScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncmVxdWlyZWR0ZXh0JywkdGhpcy0+TGFuZygncmVxdWlyZWQnKSk7CgogICAgLy8gRGlzcGxheSB0aGUgcG9wdWxhdGVkIHRlbXBsYXRlCiAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUgKCdhZGRncm91cC50cGwnKTsKICB9CgoKICBmdW5jdGlvbiBfRGlzcGxheUFkbWluQWRkUHJvcGVydHlQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydlZGl0cHJvcCddICkgKXsKICAgICAgaWYoIGlzc2V0KCRwYXJhbXNbJ29yaWdfdHlwZSddKSAmJiAkcGFyYW1zWydvcmlnX3R5cGUnXSA9PSAkcGFyYW1zWyduZXdfdHlwZSddICl7CgkkcGFyYW1zWydpbnB1dF90eXBlJ10gPSAkcGFyYW1zWyduZXdfdHlwZSddOwoJJHRoaXMtPlJlZGlyZWN0KCRpZCwgJ2RvX2VkaXRwcm9wJywkcmV0dXJuaWQsICRwYXJhbXMpOwoJcmV0dXJuOwogICAgICB9CiAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiggJ3N0YXJ0Zm9ybScsIAoJCQkgICAgICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCdlZGl0cHJvcCcsJHJldHVybmlkKSk7CiAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiggJ2hpZGRlbicsCgkJCSAgICAgJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwncHJvcG5hbWUnLCRwYXJhbXNbJ2VkaXRwcm9wJ10pKTsKICAgIH0KICAgIGVsc2UgCiAgICAgIHsKCSR0aGlzLT5zbWFydHktPmFzc2lnbiggJ3N0YXJ0Zm9ybScsIAoJCQkgICAgICAgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsJ2FkZHByb3AyJywkcmV0dXJuaWQpKTsKICAgICAgfQogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbmZvbXNnMScsCgkJCSAgJHRoaXMtPkxhbmcoJ21zZ19kb250Y3JlYXRldXNlcm5hbWUnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oICdlbmRmb3JtJywKCQkJICAgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ21lc3NhZ2UnXSApICkKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdtZXNzYWdlJywgJHBhcmFtc1snbWVzc2FnZSddICk7CiAgICAgIH0KICAgIGlmKCBpc3NldCggJHBhcmFtc1snZXJyb3InXSApICkKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlcnJvcicsICRwYXJhbXNbJ2Vycm9yJ10gKTsKICAgICAgfQogICAgCiAgICAkbmFtZSA9ICcnOwogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ2lucHV0X25hbWUnXSApICkgJG5hbWUgPSAkcGFyYW1zWydpbnB1dF9uYW1lJ107CiAgICAkcHJvbXB0ID0gJyc7CiAgICBpZiggaXNzZXQoJHBhcmFtc1snaW5wdXRfcHJvbXB0J10gKSApICRwcm9tcHQgPSAkcGFyYW1zWydpbnB1dF9wcm9tcHQnXTsKICAgICR0eXBlID0gJyc7CiAgICBpZiggaXNzZXQoJHBhcmFtc1snbmV3X3R5cGUnXSkgKSB7CiAgICAgICR0eXBlID0gJHBhcmFtc1snbmV3X3R5cGUnXTsKICAgIH0gZWxzZSBpZiggaXNzZXQoJHBhcmFtc1snaW5wdXRfdHlwZSddKSApIHsKICAgICAgJHR5cGUgPSAkcGFyYW1zWydpbnB1dF90eXBlJ107CiAgICB9CiAgICBpZigkdGhpcy0+ZGV2ZGVidWcpewogICAgICBlY2hvICJpbnB1dF90eXBlID0gIiAuICRwYXJhbXNbJ2lucHV0X3R5cGUnXSAuICI8YnI+IjsKICAgICAgZWNobyAidHlwZSA9ICIgLiAkdHlwZSAuICI8YnI+IjsKICAgIH0KICAgIAogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydlZGl0cHJvcCddICkgKQl7CiAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5mb21zZzInLCR0aGlzLT5MYW5nKCdlZGl0cHJvcF9pbmZvbXNnJykpOwogICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2VkaXRwcm9wJywgIAoJCQkgICAgJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwgJ2VkaXRwcm9wJywgJHBhcmFtc1snZWRpdHByb3AnXSkpOwogICAgICAKICAgICAgaWYoICR0eXBlID09IDAgfHwgJHR5cGUgPT0gMiApeyAvLyB0ZXh0IG9yIGVtYWlsIGlucHV0CgkkbGVuZ3RoID0gJyc7CglpZiggaXNzZXQoJHBhcmFtc1snaW5wdXRfbGVuZ3RoJ10gKSApIHsKCSAgJGxlbmd0aCA9ICRwYXJhbXNbJ2lucHV0X2xlbmd0aCddOwoJfQoJJG1heGxlbmd0aCA9ICcnOwoJaWYoIGlzc2V0KCRwYXJhbXNbJ2lucHV0X21heGxlbmd0aCddICkgKSB7CgkgICRtYXhsZW5ndGggPSAkcGFyYW1zWydpbnB1dF9tYXhsZW5ndGgnXTsKCX0KCSR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0JywkdGhpcy0+TGFuZygnbGVuZ3RoJykKCQkJICAgICAgLiR0aGlzLT5MYW5nKCdsZW5ndGhjb21tZW50JykpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dCcsCgkJCSAgICAgICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCdpbnB1dF9sZW5ndGgnLCRsZW5ndGgsIDMsIDMgKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdDInLCR0aGlzLT5MYW5nKCdtYXhsZW5ndGgnKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0MicsCgkJCSAgICAgICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCdpbnB1dF9tYXhsZW5ndGgnLCRtYXhsZW5ndGgsIDMsIDMgKSk7CiAgICAgIH0gZWxzZSBpZigkdHlwZSA9PSA0KXsgLy8gZHJvcGRvd24KCSRzZWxvcHRpb25zID0gJHRoaXMtPkdldFNlbGVjdE9wdGlvbnMoICRuYW1lLCAxICk7Cgkkc2Vsb3B0aW9uc1N0ciA9IGltcGxvZGUoIlxuIiwgJHNlbG9wdGlvbnMpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHQnLCR0aGlzLT5MYW5nKCdzZWxvcHRpb25zJykpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dCcsICAKCQkJICAgICAgJHRoaXMtPkNyZWF0ZVRleHRBcmVhKGZhbHNlLCAkaWQsICRzZWxvcHRpb25zU3RyLCAnaW5wdXRfZXh0cmEnKSk7CiAgICAgIH0KICAgIH0KICAgIAogICAgJHN1Ym1pdCA9ICR0aGlzLT5MYW5nKCduZXh0Jyk7CiAgICAkdGl0bGUgPSAkdGhpcy0+TGFuZygnYWRkcHJvcCcpOwogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ2VkaXRwcm9wJ10gKSApIAogICAgICB7CgkkdGl0bGUgPSAkdGhpcy0+TGFuZygnZWRpdHByb3AnKTsKCSRzdWJtaXQgPSAkdGhpcy0+TGFuZygnc3VibWl0Jyk7CiAgICAgIH0KICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiggJ3RpdGxlJywgJHRpdGxlICk7CiAgICAkaWR4ID0gZmluZF9pbmRleF9vZl92YWx1ZSgkdGhpcy0+dHlwZXMsJHR5cGUsLTEpOwogICAgJHR5cGVzID0gJHRoaXMtPmxhbmdpZnlLZXlzKCR0aGlzLT50eXBlcyk7CiAgICAKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X25hbWUnLCR0aGlzLT5MYW5nKCduYW1lJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9uYW1lJywKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwnaW5wdXRfbmFtZScsJG5hbWUsIDMwLCAzMCApKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X3Byb21wdCcsJHRoaXMtPkxhbmcoJ3Byb21wdCcpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfcHJvbXB0JywKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwnaW5wdXRfcHJvbXB0JywkcHJvbXB0LCA1MCwgODAgKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF90eXBlJywkdGhpcy0+TGFuZygndHlwZScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfdHlwZScsICAKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93biggJGlkLCAnaW5wdXRfdHlwZScsICR0eXBlcywgCgkJCQkJCSAgICAgICRpZHgsICR0eXBlKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ29yaWdfdHlwZScsICAKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCAnb3JpZ190eXBlJywgJHR5cGUpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ3N1Ym1pdCcsCgkJCSAgICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnc3VibWl0JywgJHN1Ym1pdCApKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2NhbmNlbCcsCgkJCSAgICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnY2FuY2VsJywKCQkJCQkJICAgICAkdGhpcy0+TGFuZygnY2FuY2VsJykpKTsKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRkcHJvcC50cGwnKTsKICB9CgoKICBmdW5jdGlvbiBfRGlzcGxheUFkbWluQWRkUHJvcGVydHlQYWdlMiggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIGlmKCRwYXJhbXNbJ2lucHV0X3R5cGUnXSA9PSAxIHx8IC8vY2hlY2tib3gKICAgICAgICRwYXJhbXNbJ2lucHV0X3R5cGUnXSA9PSAzICl7IC8vdGV4dGFyZWEKICAgICAgaWYoIGlzc2V0KCAkcGFyYW1zWydlZGl0cHJvcCddICkgKSB7CgkkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZG9fZWRpdHByb3AnLCRyZXR1cm5pZCwgJHBhcmFtcyk7CglyZXR1cm47CiAgICAgIH0gZWxzZSB7CgkkdGhpcy0+UmVkaXJlY3QoJGlkLCAnZG9fYWRkcHJvcCcsJHJldHVybmlkLCAkcGFyYW1zKTsKCXJldHVybjsKICAgICAgfQogICAgfQoKICAgIGlmKCBpc3NldCggJHBhcmFtc1snZWRpdHByb3AnXSApICkgewogICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oICdzdGFydGZvcm0nLCAKCQkJICAgICAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwnZG9fZWRpdHByb3AnLCRyZXR1cm5pZCkpOwogICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oICdoaWRkZW4nLAoJCQkgICAgICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ3Byb3BuYW1lJywkcGFyYW1zWydlZGl0cHJvcCddKSk7CiAgICB9IGVsc2UgewogICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oICdzdGFydGZvcm0nLCAKCQkJICAgICAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwnZG9fYWRkcHJvcCcsJHJldHVybmlkKSk7CiAgICB9CgogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCAnZW5kZm9ybScsICAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKCiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ21lc3NhZ2UnXSApICkgewogICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21lc3NhZ2UnLCAkcGFyYW1zWydtZXNzYWdlJ10gKTsKICAgIH0KICAgIGlmKCBpc3NldCggJHBhcmFtc1snZXJyb3InXSApICkJewogICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2Vycm9yJywgJHBhcmFtc1snZXJyb3InXSApOwogICAgfQoKICAgIGlmICgkcGFyYW1zWydpbnB1dF90eXBlJ10gPT0gNCkgeyAvL2Ryb3AtZG93bgogICAgICAkc2Vsb3B0aW9ucyA9ICcnOwogICAgICBpZiggaXNzZXQoJHBhcmFtc1snaW5wdXRfc2Vsb3B0aW9ucyddICkgKSB7Cgkkc2Vsb3B0aW9ucyA9ICRwYXJhbXNbJ2lucHV0X3NlbG9wdGlvbnMnXTsKICAgICAgfQogICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdDEnLCR0aGlzLT5MYW5nKCdzZWxvcHRpb25zJykpOwogICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0MScsICAKCQkJICAgICR0aGlzLT5DcmVhdGVUZXh0QXJlYShmYWxzZSwgJGlkLCAkc2Vsb3B0aW9ucywgJ2lucHV0X3NlbG9wdGlvbnMnKSk7CiAgICB9IGVsc2UgeyAvL3RleHQgaW5wdXQgb3IgZW1haWwKICAgICAgJGxlbmd0aCA9ICcnOwogICAgICBpZiggaXNzZXQoJHBhcmFtc1snaW5wdXRfbGVuZ3RoJ10gKSApIHsKCSRsZW5ndGggPSAkcGFyYW1zWydpbnB1dF9sZW5ndGgnXTsKICAgICAgfQogICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdDEnLCR0aGlzLT5MYW5nKCdsZW5ndGgnKQoJCQkgICAgLiR0aGlzLT5MYW5nKCdsZW5ndGhjb21tZW50JykpOwogICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0MScsCgkJCSAgICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwnaW5wdXRfbGVuZ3RoJywkbGVuZ3RoLCAzLCAzICkpOwogICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdDInLCR0aGlzLT5MYW5nKCdtYXhsZW5ndGgnKSk7CiAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXQyJywKCQkJICAgICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCdpbnB1dF9tYXhsZW5ndGgnLCRsZW5ndGgsIDMsIDMgKSk7CiAgICB9CiAgICAkdGl0bGUgPSAkdGhpcy0+TGFuZygnYWRkcHJvcCcpOwogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ2VkaXRpbmcnXSApICkgewogICAgICAkdGl0bGUgPSAkdGhpcy0+TGFuZygnZWRpdHByb3AnKTsKICAgIH0KICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiggJ3RpdGxlJywgJHRpdGxlICk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X25hbWUnLAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsICdpbnB1dF9uYW1lJywgJHBhcmFtc1snaW5wdXRfbmFtZSddKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3Byb21wdCcsCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwnaW5wdXRfcHJvbXB0JywkcGFyYW1zWydpbnB1dF9wcm9tcHQnXSkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF90eXBlJywgIAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsICdpbnB1dF90eXBlJywgJHBhcmFtc1snaW5wdXRfdHlwZSddKSk7CiAgICAKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ3N1Ym1pdCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnc3VibWl0JywKCQkJCQkJCSAgICAgICAkdGhpcy0+TGFuZygnc3VibWl0JykpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2NhbmNlbCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnY2FuY2VsJywKCQkJCQkJCSAgICAgICAkdGhpcy0+TGFuZygnY2FuY2VsJykpKTsKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRkcHJvcDIudHBsJyk7CiAgfQoKCiAgZnVuY3Rpb24gX0Rpc3BsYXlBZG1pbkFkZFVzZXJTdGVwMVBhZ2UoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydjYW5jZWwnXSApICkKICAgICAgewoJJHRoaXMtPm15UmVkaXJlY3RUb1RhYigkaWQsICd1c2VycycgKTsKICAgICAgfQoKICAgICRnaWQgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVmYXVsdF9ncm91cCcsIC0xKTsKICAgIGlmKCAkZ2lkICE9IC0xICkKICAgICAgewoJLy8gdGhlIGRlZmF1bHQgZ3JvdXAgaGFzIGJlZW4gc2V0CgkvLyBzbyB3ZSdsbCBwdXQgdGhpcyBpbiB0aGUgbWVtYmVyb2YgcGFyYW1ldGVyCgkvLyBpZiBpdCdzIG5vdCBhbHJlYWR5IHNldAoJaWYoICFpc3NldCggJHBhcmFtc1snbWVtYmVyb2YnXSApICkKCSAgewoJICAgICRwYXJhbXNbJ21lbWJlcm9mXycuJGdpZF0gPSAkZ2lkOwoJICB9CiAgICAgIH0KCiAgICAkdGhpcy0+X0Rpc3BsYXlBZG1pblVzZXJQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwogIH0KCgogIGZ1bmN0aW9uIF9EaXNwbGF5QWRtaW5BZGRVc2VyU3RlcDJQYWdlKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIGdsb2JhbCAkZ0NtczsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snbWVzc2FnZSddICkgKQogICAgICB7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21lc3NhZ2UnLCAkcGFyYW1zWydtZXNzYWdlJ10gKTsKICAgICAgfQogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydlcnJvciddICkgKQogICAgICB7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2Vycm9yJywgJHBhcmFtc1snZXJyb3InXSApOwogICAgICB9CgogICAgLy8gY2FsY3VsYXRlIHRoZSB1bmlvbiAoeWVwLCB1bmlvbiwgbm90IGludGVyc2VjdGlvbikKICAgIC8vIG9mIGFsbCBvZiB0aGUgcHJvcGVydGllcyBvZiBhbGwgb2YgdGhlIG1lbWJlciBncm91cHMKICAgIC8vIHByZWZlcnJpbmcgYWxsIGl0ZW1zIHdpdGggYSBwcmlvcml0eSBvZiAyCiAgICAkcHJvcGVydGllcyA9IGFycmF5KCk7CiAgICAkZ3JvdXBzID0gMDsKICAgIGZvcmVhY2goICRwYXJhbXMgYXMgJGtleSA9PiAkdmFsICkKICAgIHsKICAgICAgaWYoIHByZWdfbWF0Y2goICcvXm1lbWJlcm9mXy8nLCAka2V5ICkgKQoJewoJICAkZ3JvdXBzKys7CgkgIC8vIGdldCB0aGUgZ3JvdXBpZCBmcm9tIHRoZSBjaGVja2JveAoJICAkZ3JwaWQgPSBzdWJzdHIoJGtleSxzdHJsZW4oJ21lbWJlcm9mXycpKTsKCSAgCgkgIC8vIGhhdmUgdGhlIGdyb3VwIGlkLCBub3cgZ2V0IGEgbGlzdCBvZiB0aGUgcHJvcGVydAoJICAkcHJvcHJlbGF0aW9ucyA9ICR0aGlzLT5HZXRHcm91cFByb3BlcnR5UmVsYXRpb25zKCAkZ3JwaWQgKTsKCSAgJHByb3BlcnRpZXMgPSBhcnJheV9tZXJnZV9ieV9uYW1lX3JlcXVpcmVkKCAkcHJvcGVydGllcywgJHByb3ByZWxhdGlvbnMgKTsKCSAgdWFzb3J0KCAkcHJvcGVydGllcywgJ2NvbXBhcmVfZWxlbWVudHNfYnlfc29ydG9yZGVyX2tleScgKTsKCX0KICAgIH0JICAKICAgIGlmKCAkZ3JvdXBzID09IDAgKQogICAgICB7CglpZiggJHRoaXMtPkdldFByZWZlcmVuY2UoJ3JlcXVpcmVfb25lZ3JvdXAnKSA9PSAxICkKCSAgewoJICAgICRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJICAgICRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9vbmVncm91cHJlcXVpcmVkJyk7CgkgICAgJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2FkZHVzZXInLCAkcmV0dXJuaWQsICRwYXJhbXMgKTsKCSAgICByZXR1cm47CgkgIH0KCQoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RvX2FkZHVzZXIzJywgJHJldHVybmlkLCAkcGFyYW1zICk7CiAgICAgIH0KICAgIGlmKCBjb3VudCgkcHJvcGVydGllcykgPT0gMCApCiAgICAgIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX3Byb3BlcnRpZXMnKTsKCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdhZGR1c2VyJywgJHJldHVybmlkLCAkcGFyYW1zICk7CglyZXR1cm47CiAgICAgIH0KCiAgICAvLyBub3cgd2UncmUgcmVhZHkgdG8gcG9wdWxhdGUgdGhlIHRlbXBsYXRlCiAgICAkcm93YXJyYXkgPSBhcnJheSgpOwogICAgZm9yZWFjaCggJHByb3BlcnRpZXMgYXMgJHByb3AgKQogICAgewogICAgICAvLyBnZXQgdGhlIHByb3BlcnR5IGRlZmluaXRpb24KICAgICAgJGRlZm4gPSAkdGhpcy0+R2V0UHJvcGVydHlEZWZuKCAkcHJvcFsnbmFtZSddICk7CiAgICAgIAogICAgICAkb25lcm93ID0gbmV3IFN0ZENsYXNzKCk7CgogICAgICAkY29sb3IgPSAnJzsKICAgICAgaWYoICRwcm9wWydyZXF1aXJlZCddID09IDIgKSAkY29sb3IgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncmVxdXJpZWRfZmllbGRfY29sb3InLCdibHVlJyk7CiAgICAgIGlmKCAkcHJvcFsncmVxdWlyZWQnXSA9PSAzICkgJGNvbG9yID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2hpZGRlbl9maWVsZF9jb2xvcicsJ2dyZWVuJyk7CiAgICAgICRtYXJrZXIgPSAnJzsKICAgICAgaWYoICRwcm9wWydyZXF1aXJlZCddID09IDIgKSAkbWFya2VyID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3JlcXVyaWVkX2ZpZWxkX21hcmtlcicsJyonKTsKICAgICAgaWYoICRwcm9wWydyZXF1aXJlZCddID09IDMgKSAkbWFya2VyID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2hpZGRlbl9maWVsZF9tYXJrZXInLCchIScpOwogICAgICAkb25lcm93LT5yZXF1aXJlZCA9ICgkcHJvcFsncmVxdWlyZWQnXSA9PSAyKTsKICAgICAgJG9uZXJvdy0+Y29sb3IgICAgPSAkY29sb3I7CiAgICAgICRvbmVyb3ctPm1hcmtlciAgID0gJG1hcmtlcjsKICAgICAgJG9uZXJvdy0+aGlkZGVuID0gbXlDcmVhdGVJbnB1dEhpZGRlbiggJGlkLCAnaGlkZGVuXycuJHByb3BbJ25hbWUnXSwKCQkJCQkgICAgIGltcGxvZGUoIjsiLGFycmF5KCRwcm9wWyduYW1lJ10sJGRlZm5bJ3R5cGUnXSwKCQkJCQkJCSAgICAgICAkZGVmblsnbGVuZ3RoJ10sJHByb3BbJ3JlcXVpcmVkJ10sCgkJCQkJCQkgICAgICAgJGRlZm5bJ21heGxlbmd0aCddKSkpOwoKICAgICAgJHZhbCA9IGlzc2V0KCRwYXJhbXNbJ2lucHV0XycuJHByb3BbJ25hbWUnXV0pID8gJHBhcmFtc1snaW5wdXRfJy4kcHJvcFsnbmFtZSddXSA6ICcnOwogICAgICAkdmFsID0gdXJsZGVjb2RlKCR2YWwpOwogICAgICAkb25lcm93LT5wcm9tcHQgPSAkZGVmblsncHJvbXB0J107CiAgICAgIHN3aXRjaCggJGRlZm5bJ3R5cGUnXSApCgl7CgljYXNlIDA6IC8vIHRleHQKCSAgJG9uZXJvdy0+Y29udHJvbCA9ICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoICRpZCwgJ2lucHV0XycuJHByb3BbJ25hbWUnXSwKCQkJCQkJICAgICAkdmFsLCAkZGVmblsnbGVuZ3RoJ10sICRkZWZuWydtYXhsZW5ndGgnXSApOwoJICBicmVhazsKCgljYXNlIDE6IC8vIGNoZWNrYm94CgkgICRvbmVyb3ctPmNvbnRyb2wgPSBteUNyZWF0ZUlucHV0Q2hlY2tib3goICRpZCwgJ2lucHV0XycuJHByb3BbJ25hbWUnXSwgMSwgJHZhbCApOwoJICBicmVhazsKCgljYXNlIDI6IC8vIGVtYWlsCgkgICRvbmVyb3ctPmNvbnRyb2wgPSAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCAkaWQsICdpbnB1dF8nLiRwcm9wWyduYW1lJ10sCgkJCQkJCSAgICAgJHZhbCwgJGRlZm5bJ2xlbmd0aCddLCAkZGVmblsnbWF4bGVuZ3RoJ10gKTsKCSAgYnJlYWs7CgoJY2FzZSAzOiAvLyB0ZXh0YXJlYQoJICAkb25lcm93LT5jb250cm9sID0gJHRoaXMtPkNyZWF0ZVRleHRBcmVhKGZhbHNlLCAkaWQsICR2YWwsICdpbnB1dF8nLiRwcm9wWyduYW1lJ10pOwoJICBicmVhazsKCgljYXNlIDQ6IC8vIGRyb3Bkb3duCgkgICRvbmVyb3ctPmNvbnRyb2wgPSAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93biggCgkJCQkJCQkkaWQsIAoJCQkJCQkJJ2lucHV0XycuJHByb3BbJ25hbWUnXSwgCgkJCQkJCQkkdGhpcy0+R2V0U2VsZWN0T3B0aW9ucygkZGVmblsnbmFtZSddLCAxKSwgCgkJCQkJCQktMSwgCgkJCQkJCQkkdmFsKTsKCSAgYnJlYWs7Cgl9CgogICAgICBhcnJheV9wdXNoKCAkcm93YXJyYXksICRvbmVyb3cgKTsKICAgIH0KCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2hpZGRlbicsIAoJCQkgIG15Q3JlYXRlSW5wdXRIaWRkZW4oICRpZCwgJ3N0ZXAxX3BhcmFtcycsICRwYXJhbXMgKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2NvbnRyb2xzJywgJHJvd2FycmF5KTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignY29udHJvbGNvdW50JywgY291bnQoJHJvd2FycmF5KSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnc3VibWl0JywKCQkJCQkJCSAgICAkdGhpcy0+TGFuZygnc3VibWl0JykpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignY2FuY2VsJywkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdjYW5jZWwnLAoJCQkJCQkJICAgICR0aGlzLT5MYW5nKCdjYW5jZWwnKSkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdiYWNrJywkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdiYWNrJywKCQkJCQkJCSAgICAkdGhpcy0+TGFuZygnYmFjaycpKSk7CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ3VzZXJfaWQnXSApICkKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdoaWRkZW4yJywgCgkJCSAgICAgICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ3VzZXJfaWQnLCRwYXJhbXNbJ3VzZXJfaWQnXSkpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydGZvcm0nLAoJCQkJICAgICAgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCAoJGlkLAoJCQkJCQkJICAgICAgJ2RvX2VkaXR1c2VyMycsCgkJCQkJCQkgICAgICAkcmV0dXJuaWQpKTsKICAgICAgfQogICAgZWxzZSAKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydGZvcm0nLAoJCQkJICAgICAgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCAoJGlkLAoJCQkJCQkJICAgICAgJ2RvX2FkZHVzZXIzJywKCQkJCQkJCSAgICAgICRyZXR1cm5pZCkpOwogICAgICB9CiAgICAKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZW5kZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtRW5kICgpKTsKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSggJ2FkZHVzZXIyLnRwbCcgKTsKICB9CgoKICBmdW5jdGlvbiBfRGlzcGxheUFkbWluVXNlclBhZ2UoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgZ2xvYmFsICRnQ21zOwoKICAgIC8vIHBvcHVsYXRlIHRoZSB0ZW1wbGF0ZQogICAgJGVkaXRpbmcgPSAwOwogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydhY3Rpb24nXSApICYmIAoJKCRwYXJhbXNbJ2FjdGlvbiddID09ICdlZGl0dXNlcid8fCAkcGFyYW1zWydhY3Rpb24nXSA9PSAnZG9fZWRpdHVzZXIxJyApICkKICAgICAgewoJJGVkaXRpbmcgPSAxOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdoaWRkZW4nLCAKCQkJICAgICAgJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwndXNlcl9pZCcsJHBhcmFtc1sndXNlcl9pZCddKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlJywgJHRoaXMtPkxhbmcoJ2VkaXR1c2VyJykpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydGZvcm0nLAoJCQkJICAgICAgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCAoJGlkLAoJCQkJCQkJICAgICAgJ2RvX2VkaXR1c2VyMScsCgkJCQkJCQkgICAgICAkcmV0dXJuaWQpKTsKICAgICAgfQogICAgZWxzZQogICAgICB7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlJywgJHRoaXMtPkxhbmcoJ2FkZHVzZXInKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsCgkJCQkgICAgICAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0ICgkaWQsCgkJCQkJCQkgICAgICAnZG9fYWRkdXNlcjEnLAoJCQkJCQkJICAgICAgJHJldHVybmlkKSk7CiAgICAgIH0KCiAgICBpZiggaXNzZXQoJHBhcmFtc1snZXJyb3InXSkgKQogICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2Vycm9yJywkcGFyYW1zWydlcnJvciddKTsKICAgIGlmKCBpc3NldCgkcGFyYW1zWydtZXNzYWdlJ10pICkKICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdtZXNzYWdlJywkcGFyYW1zWydtZXNzYWdlJ10pOwogICAgJHVzZXJuYW1lID0gJyc7CiAgICBpZiggaXNzZXQoJHBhcmFtc1snaW5wdXRfdXNlcm5hbWUnXSkgKQogICAgICAkdXNlcm5hbWUgPSB0cmltKCRwYXJhbXNbJ2lucHV0X3VzZXJuYW1lJ10pOwogICAgJHBhc3N3b3JkID0gJyc7CiAgICBpZiggaXNzZXQoJHBhcmFtc1snaW5wdXRfcGFzc3dvcmQnXSkgKQogICAgICAkcGFzc3dvcmQgPSB0cmltKCRwYXJhbXNbJ2lucHV0X3Bhc3N3b3JkJ10pOwogICAgJHJlcGVhdHBhc3N3b3JkID0gJyc7CiAgICBpZiggaXNzZXQoJHBhcmFtc1snaW5wdXRfcmVwZWF0cGFzc3dvcmQnXSkgKQogICAgICAkcmVwZWF0cGFzc3dvcmQgPSB0cmltKCRwYXJhbXNbJ2lucHV0X3JlcGVhdHBhc3N3b3JkJ10pOwogICAgJGV4cGlyZXMgPSAnJzsKICAgIGlmKCBpc3NldCgkcGFyYW1zWydpbnB1dF9leHBpcmVzJ10pICkKICAgICAgJGV4cGlyZXMgPSB0cmltKCRwYXJhbXNbJ2lucHV0X2V4cGlyZXMnXSk7CiAgICAKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZW5kZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtRW5kICgpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignc3VibWl0JywKCQkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0ICgkaWQsICdzdWJtaXQnLAoJCQkJCQkJICAgICR0aGlzLT5MYW5nKCduZXh0JykpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignY2FuY2VsJywKCQkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0ICgkaWQsICdjYW5jZWwnLAoJCQkJCQkJICAgICR0aGlzLT5MYW5nKCdjYW5jZWwnKSkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgncHJvbXB0X3VzZXJuYW1lJywKCQkJICAgJHRoaXMtPkxhbmcgKCd1c2VybmFtZScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2lucHV0X3VzZXJuYW1lJywKCQkJICAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCAoJGlkLCAnaW5wdXRfdXNlcm5hbWUnLAoJCQkJCQkgICAkdXNlcm5hbWUsIAoJCQkJCQkgICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgndXNlcm5hbWVmbGRsZW5ndGgnKSwgCgkJCQkJCSAgICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtYXhfdXNlcm5hbWVsZW5ndGgnKSkpOwoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ3Byb21wdF9wYXNzd29yZCcsCgkJCSAgICR0aGlzLT5MYW5nICgncGFzc3dvcmQnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdpbnB1dF9wYXNzd29yZCcsCgkJCSAgICR0aGlzLT5DcmVhdGVJbnB1dFBhc3N3b3JkICgkaWQsICdpbnB1dF9wYXNzd29yZCcsCgkJCQkJCSAgICAgICAkcGFzc3dvcmQsIAoJCQkJCQkgICAgICAgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3Bhc3N3b3JkZmxkbGVuZ3RoJyksCgkJCQkJCSAgICAgICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWF4X3Bhc3N3b3JkbGVuZ3RoJykpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ3Byb21wdF9yZXBlYXRwYXNzd29yZCcsCgkJCSAgICR0aGlzLT5MYW5nICgncmVwZWF0cGFzc3dvcmQnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdpbnB1dF9yZXBlYXRwYXNzd29yZCcsCgkJCSAgICR0aGlzLT5DcmVhdGVJbnB1dFBhc3N3b3JkICgkaWQsICdpbnB1dF9yZXBlYXRwYXNzd29yZCcsCgkJCQkJCSAgICAgICAkcmVwZWF0cGFzc3dvcmQsCgkJCQkJCSAgICAgICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncGFzc3dvcmRmbGRsZW5ndGgnKSwKCQkJCQkJICAgICAgICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtYXhfcGFzc3dvcmRsZW5ndGgnKSkpOwoKICAgIGlmKCAkZWRpdGluZyA9PSAxICkKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnaW5mb19wYXNzd29yZCcsCgkJCSAgICAgICAkdGhpcy0+TGFuZyAoJ2luZm9fYWRtaW5fcGFzc3dvcmQnKSk7CgkKCSR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2luZm9fcmVwZWF0cGFzc3dvcmQnLAoJCQkgICAgICAgJHRoaXMtPkxhbmcgKCdpbmZvX2FkbWluX3JlcGVhdHBhc3N3b3JkJykpOwogICAgICB9CgogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgncHJvbXB0X2V4cGlyZXMnLAoJCQkgICAkdGhpcy0+TGFuZygnZXhwaXJlcycpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2V4cGlyZXNfZGF0ZXByZWZpeCcsICRpZC4nZXhwaXJlc2RhdGVfJyk7CiAgICAkZXhwaXJlc2RhdGUgPSBzdHJ0b3RpbWUoJysxMCB5ZWFycycsIHRpbWUoKSk7CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X2V4cGlyZXNkYXRlJ10gKSApCiAgICAgIHsKCSRleHBpcmVzZGF0ZSA9ICRwYXJhbXNbJ2lucHV0X2V4cGlyZXNkYXRlJ107CiAgICAgIH0KICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2V4cGlyZXNkYXRlJywgJGV4cGlyZXNkYXRlICk7CiAgICAKCiAgICAvLyBEaXNwbGF5IHRoaXMgdXNlcidzIHByb3BlcnRpZXMgYW5kIGFsbG93IHVzIHRvIGVkaXQgdGhlbQoKICAgIC8vIGRpc3BsYXkgYW5kIGVkaXQgZ3JvdXBzCiAgICBpZiggJHRoaXMtPl9IYXNTdWZmaWNpZW50UGVybWlzc2lvbnMoJ2VkaXRncm91cHMnKSApCiAgICAgIHsKCS8vIG5vdyBkaXNwbGF5IGEgbGlzdCBvZiBncm91cHMgdGhhdCB0aGlzIHVzZXIgbWF5IG9wdGlvbmFsbHkgYmUgaW4KCSR0aGlzLT5zbWFydHktPmFzc2lnbiggJ2lkdGV4dCcsICR0aGlzLT5MYW5nKCdpZCcpICk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oICduYW1ldGV4dCcsICR0aGlzLT5MYW5nKCduYW1lJykgKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbiggJ2Rlc2N0ZXh0JywgJHRoaXMtPkxhbmcoJ2Rlc2NyaXB0aW9uJykgKTsKCQoJJGdyb3VwcyA9ICR0aGlzLT5HZXRHcm91cExpc3RGdWxsKCk7Cgkkcm93YXJyYXkgPSBhcnJheSgpOwoJJHJvd2NsYXNzID0gJ3JvdzEnOwoJZm9yZWFjaCggJGdyb3VwcyBhcyAkZ3JvdXAgKQoJewoJICAkb25lcm93ID0gbmV3IFN0ZENsYXNzKCk7CgkgICRvbmVyb3ctPmlkID0gJGdyb3VwWydpZCddOwoJICAkb25lcm93LT5uYW1lID0gJGdyb3VwWydncm91cG5hbWUnXTsKCSAgJG9uZXJvdy0+ZGVzYyA9ICRncm91cFsnZ3JvdXBkZXNjJ107CgkgICRvbmVyb3ctPm1lbWJlciA9ICR0aGlzLT5DcmVhdGVJbnB1dENoZWNrYm94KCRpZCwnbWVtYmVyb2ZfJy4kZ3JvdXBbJ2lkJ10sCgkJCQkJCSAgJGdyb3VwWydpZCddLAoJCQkJCQkgIChpc3NldCgkcGFyYW1zWydtZW1iZXJvZl8nLiRncm91cFsnaWQnXV0pID8gCgkJCQkJCSAgICRwYXJhbXNbJ21lbWJlcm9mXycuJGdyb3VwWydpZCddXSA6IC0xKSk7CgkgICRvbmVyb3ctPnJvd2NsYXNzID0gJHJvd2NsYXNzOwoJICAKCSAgYXJyYXlfcHVzaCAoJHJvd2FycmF5LCAkb25lcm93KTsKCSAgKCRyb3djbGFzcyA9PSAicm93MSIgPyAkcm93Y2xhc3MgPSAicm93MiIgOiAkcm93Y2xhc3MgPSAicm93MSIpOwoJfQoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpdGVtY291bnQnLGNvdW50KCRyb3dhcnJheSkpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpdGVtcycsJHJvd2FycmF5KTsKICAgICAgfQoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvcGFkZCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCggJGlkLCAncHJvcGFkZCcsIAoJCQkJCQkJICAgICAgICR0aGlzLT5MYW5nKCdhZGQnKSkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdncm91cHN0aXRsZScsICR0aGlzLT5MYW5nKCdncm91cHMnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb3BlcnRpZXN0aXRsZScsICR0aGlzLT5MYW5nKCdwcm9wZXJ0aWVzJykpOwoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvcHMnLAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdwcm9wcycsICR0aGlzLT5MYW5nKCdwcm9wZXJ0aWVzJykuIi4uLiIpKTsKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRkdXNlcjEudHBsJyk7CiAgfQoKCiAgZnVuY3Rpb24gRG9BY3Rpb24oJGFjdGlvbiwgJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgPSAtMSkgCiAgewogICAgLy8gIHRoaXMgc2hvdWxkIGJlIGZpeGVkIGJ5IG5vdwogICAgLy8gICAgIGlmKCAhIGlzc2V0KCRwYXJhbXNbJ2FjdGlvbiddKSApCiAgICAvLyAgICAgICB7CiAgICAvLyAJICAgICAgICAkcGFyYW1zWydhY3Rpb24nXSA9ICRhY3Rpb247CiAgICAvLyAgICAgICB9CiAgICBzd2l0Y2ggKCRhY3Rpb24pCiAgICAgIHsKICAgICAgY2FzZSAnYWRkZ3JvdXAnOgoJewoJICAvLyBjaGVjayBwZXJtaXNzaW9ucyBhZ2FpbgoJICBpZiggJHRoaXMtPl9IYXNTdWZmaWNpZW50UGVybWlzc2lvbnMoICdhZGRncm91cCcgKSApCgkgICAgewoJICAgICAgJHRoaXMtPl9EaXNwbGF5QWRtaW5BZGRHcm91cFBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CgkgICAgfQoJICBlbHNlIAoJICAgIHsKCSAgICAgICR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwKCQkJCSAgICAgICR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKSk7CgkgICAgfQoJICBicmVhazsKCX0KCiAgICAgIGNhc2UgJ2FkZHByb3AnOgoJewoJICAvLyBjaGVjayBwZXJtaXNzaW9ucyBhZ2FpbgoJICBpZiggJHRoaXMtPl9IYXNTdWZmaWNpZW50UGVybWlzc2lvbnMoICdhZGRwcm9wJyApICkKCSAgICB7CgkgICAgICAkdGhpcy0+X0Rpc3BsYXlBZG1pbkFkZFByb3BlcnR5UGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCSAgICB9CgkgIGVsc2UgCgkgICAgewoJICAgICAgJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLAoJCQkJICAgICAgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKCSAgICB9CgkgIGJyZWFrOwoJfQoKICAgICAgLy8gVGhpcyBpcyByZXNwb25zaWJsZSBmb3Igc3RlcCAyIGluIGFkZGluZyBhIHByb3BlcnR5CiAgICAgIGNhc2UgJ2FkZHByb3AyJzoKCXsKCSAgLy8gY2hlY2sgcGVybWlzc2lvbnMgYWdhaW4KCSAgaWYoICR0aGlzLT5fSGFzU3VmZmljaWVudFBlcm1pc3Npb25zKCAnYWRkcHJvcCcgKSApCgkgICAgewoJICAgICAgJHRoaXMtPl9EaXNwbGF5QWRtaW5BZGRQcm9wZXJ0eVBhZ2UyKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJICAgIH0KCSAgZWxzZSAKCSAgICB7CgkgICAgICAkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsCgkJCQkgICAgICAkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwoJICAgIH0KCSAgYnJlYWs7Cgl9CgogICAgICBjYXNlICdhZGR1c2VyJzoKCXsKCSAgLy8gY2hlY2sgcGVybWlzc2lvbnMgYWdhaW4KCSAgaWYoICR0aGlzLT5fSGFzU3VmZmljaWVudFBlcm1pc3Npb25zKCAnYWRkdXNlcicgKSApCgkgICAgewoJICAgICAgJHRoaXMtPl9EaXNwbGF5QWRtaW5BZGRVc2VyU3RlcDFQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJICAgIH0KCSAgZWxzZSAKCSAgICB7CgkgICAgICAkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsCgkJCQkgICAgICAkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwoJICAgIH0KCSAgYnJlYWs7Cgl9CgogICAgICBjYXNlICJjaGFuZ2VzZXR0aW5ncyI7CiAgICAgICAgewoJICAkdGhpcy0+X0Rpc3BsYXlVc2VyU2V0dGluZ3NQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJICBicmVhazsKICAgICAgICB9CgogICAgICBjYXNlICJkZWZhdWx0IjogCgl7CgkgICR0aGlzLT5fRG9Vc2VyQWN0aW9uKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJICBicmVhazsKCX0KCiAgICAgIGNhc2UgImRlZmF1bHRhZG1pbiI6IAoJewoJICBpZiAoJHRoaXMtPl9IYXNTdWZmaWNpZW50UGVybWlzc2lvbnMoKSkgIHsKCSAgICAkdGhpcy0+X0Rpc3BsYXlBZG1pblBhbmVsKCRpZCwkcGFyYW1zLCRyZXR1cm5pZCk7CgkgIH0gZWxzZSB7CgkgICAgZWNobyAiQnJlYWtpbmcgYW4gZW50cnksIGFyZSB3ZT8iOwoJICB9CgkgIGJyZWFrOwoJfQoKICAgICAgY2FzZSAnZG9fYWRkZ3JvdXAnOgoJewoJICBpZiggJHRoaXMtPl9IYXNTdWZmaWNpZW50UGVybWlzc2lvbnMoICdhZGRncm91cCcgKSApCgkgICAgewoJICAgICAgJHRoaXMtPl9Eb0FkZEdyb3VwKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJICAgIH0KCSAgZWxzZSAKCSAgICB7CgkgICAgICAkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsCgkJCQkgICAgICAkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwoJICAgIH0KCSAgYnJlYWs7Cgl9CgogICAgICBjYXNlICdkb19hZGRwcm9wJzoKCXsKCSAgaWYoICR0aGlzLT5fSGFzU3VmZmljaWVudFBlcm1pc3Npb25zKCAnYWRkcHJvcCcgKSApCgkgICAgewoJICAgICAgJHRoaXMtPl9Eb0FkZFByb3AoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CgkgICAgfQoJICBlbHNlIAoJICAgIHsKCSAgICAgICR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwKCQkJCSAgICAgICR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKSk7CgkgICAgfQoJICBicmVhazsKCX0KCiAgICAgIGNhc2UgJ2RvX2FkZHVzZXIxJzoKCXsKCSAgaWYoICR0aGlzLT5fSGFzU3VmZmljaWVudFBlcm1pc3Npb25zKCAnYWRkdXNlcicgKSApCgkgICAgewoJICAgICAgJHRoaXMtPl9Eb0FkZFVzZXJTdGVwMSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCSAgICB9CgkgIGVsc2UgCgkgICAgewoJICAgICAgJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLAoJCQkJICAgICAgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKCSAgICB9CgkgIGJyZWFrOwoJfQoKICAgICAgCiAgICAgIGNhc2UgJ2RvX2FkZHVzZXIyJzoKCXsKCSAgaWYoICR0aGlzLT5fSGFzU3VmZmljaWVudFBlcm1pc3Npb25zKCAnYWRkdXNlcicgKSApCgkgICAgewoJICAgICAgJHRoaXMtPl9EaXNwbGF5QWRtaW5BZGRVc2VyU3RlcDJQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJICAgIH0KCSAgZWxzZSAKCSAgICB7CgkgICAgICAkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsCgkJCQkgICAgICAkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwoJICAgIH0KCSAgYnJlYWs7Cgl9CgogICAgICAKICAgICAgY2FzZSAnZG9fYWRkdXNlcjMnOgoJewoJICBpZiggJHRoaXMtPl9IYXNTdWZmaWNpZW50UGVybWlzc2lvbnMoICdhZGR1c2VyJyApICkKCSAgICB7CgkgICAgICAkdGhpcy0+X0RvQWRkVXNlclN0ZXAyKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJICAgIH0KCSAgZWxzZSAKCSAgICB7CgkgICAgICAkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsCgkJCQkgICAgICAkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwoJICAgIH0KCSAgYnJlYWs7Cgl9CgogICAgICBjYXNlICdkb19hZG1pbnRhc2tzJzoKCXsKCSAgaWYoICR0aGlzLT5fSGFzU3VmZmljaWVudFBlcm1pc3Npb25zKCd1c2Vyc25ncm91cHMnKSApCgkgICAgewoJICAgICAgJHRoaXMtPl9Eb0FkbWluQWN0aW9ucyggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCSAgICB9CgkgIGVsc2UKCSAgICB7CgkgICAgICAkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsCgkJCQkgICAgICAkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwoJICAgIH0KCSAgYnJlYWs7Cgl9CgogICAgICBjYXNlICdkb19kZWxldGVncm91cCc6Cgl7CgkgIGlmKCAkdGhpcy0+X0hhc1N1ZmZpY2llbnRQZXJtaXNzaW9ucyggJ3JlbW92ZWdyb3VwcycgKSApCgkgICAgewoJICAgICAgJHRoaXMtPl9Eb0RlbGV0ZUdyb3VwKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJICAgIH0KCSAgZWxzZQoJICAgIHsKCSAgICAgICR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwKCQkJCSAgICAgICR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKSk7CgkgICAgfQoJICBicmVhazsKCX0KCiAgICAgIGNhc2UgJ2RvX2RlbGV0ZXByb3AnOgoJewoJICAvLyBjaGVjayBwZXJtaXNzaW9ucyBhZ2FpbgoJICBpZiggJHRoaXMtPl9IYXNTdWZmaWNpZW50UGVybWlzc2lvbnMoICdkZWxldGVwcm9wJyApICkKCSAgICB7CgkgICAgICAkdGhpcy0+X0RvRGVsZXRlUHJvcGVydHkoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CgkgICAgfQoJICBlbHNlIAoJICAgIHsKCSAgICAgICR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwKCQkJCSAgICAgICR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKSk7CgkgICAgfQoJICBicmVhazsKCX0KCiAgICAgIGNhc2UgJ2RvX2RlbGV0ZXVzZXInOgoJewoJICBpZiggJHRoaXMtPl9IYXNTdWZmaWNpZW50UGVybWlzc2lvbnMoICdyZW1vdmV1c2VycycgKSApCgkgICAgewoJICAgICAgJHRoaXMtPl9Eb0RlbGV0ZVVzZXIoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CgkgICAgfQoJICBlbHNlCgkgICAgewoJICAgICAgJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLAoJCQkJICAgICAgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKCSAgICB9CgkgIGJyZWFrOwoJfQoKICAgICAgY2FzZSAnZG9fZWRpdGdyb3VwJzoKCXsKCSAgaWYoICR0aGlzLT5fSGFzU3VmZmljaWVudFBlcm1pc3Npb25zKCAnZWRpdGdyb3VwcycgKSApCgkgICAgewoJICAgICAgJHRoaXMtPl9Eb0VkaXRHcm91cCggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCSAgICB9CgkgIGVsc2UKCSAgICB7CgkgICAgICAkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsCgkJCQkgICAgICAkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwoJICAgIH0KCSAgYnJlYWs7Cgl9CgogICAgICBjYXNlICdkb19lZGl0cHJvcCc6Cgl7CgkgIGlmKCAkdGhpcy0+X0hhc1N1ZmZpY2llbnRQZXJtaXNzaW9ucyggJ2VkaXRwcm9wJyApICkKCSAgICB7CgkgICAgICAkdGhpcy0+X0RvRWRpdFByb3BlcnR5KCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJICAgIH0KCSAgZWxzZQoJICAgIHsKCSAgICAgICR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwKCQkJCSAgICAgICR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKSk7CgkgICAgfQoJICBicmVhazsKCX0KCiAgICAgIGNhc2UgJ2RvX2VkaXR1c2VyMSc6Cgl7CgkgIGlmKCAkdGhpcy0+X0hhc1N1ZmZpY2llbnRQZXJtaXNzaW9ucyggJ2VkaXR1c2VycycgKSApCgkgICAgewoJICAgICAgJHRoaXMtPl9Eb0VkaXRVc2VyU3RlcDEoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CgkgICAgfQoJICBlbHNlCgkgICAgewoJICAgICAgJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLAoJCQkJICAgICAgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKCSAgICB9CgkgIGJyZWFrOwoJfQoKICAgICAgY2FzZSAnZG9fZWRpdHVzZXIyJzoKCXsKCSAgaWYoICR0aGlzLT5fSGFzU3VmZmljaWVudFBlcm1pc3Npb25zKCAnZWRpdHVzZXJzJyApICkKCSAgICB7CgkgICAgICAkdGhpcy0+X0Rpc3BsYXlBZG1pbkFkZFVzZXJTdGVwMlBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CgkgICAgfQoJICBlbHNlCgkgICAgewoJICAgICAgJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLAoJCQkJICAgICAgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKCSAgICB9CgkgIGJyZWFrOwoJfQoKICAgICAgY2FzZSAnZG9fZWRpdHVzZXIzJzoKCXsKCSAgaWYoICR0aGlzLT5fSGFzU3VmZmljaWVudFBlcm1pc3Npb25zKCAnZWRpdHVzZXJzJyApICkKCSAgICB7CgkgICAgICAkdGhpcy0+X0RvRWRpdFVzZXJTdGVwMyggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCSAgICB9CgkgIGVsc2UKCSAgICB7CgkgICAgICAkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsCgkJCQkgICAgICAkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwoJICAgIH0KCSAgYnJlYWs7Cgl9CgogICAgICBjYXNlICdkb19mb3Jnb3Rwdyc6Cgl7CgkgICR0aGlzLT5fRG9Gb3Jnb3RQYXNzd29yZCggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCSAgYnJlYWs7Cgl9CgogICAgICBjYXNlICdkb19oYW5kbGVwcm9wZXJ0eSc6Cgl7CgkgIGlmKCAkdGhpcy0+X0hhc1N1ZmZpY2llbnRQZXJtaXNzaW9ucyggJ2VkaXRwcmVmcycgKSApCgkgICAgewoJICAgICAgJHRoaXMtPl9Eb1NldFByb3BlcnRpZXMoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CgkgICAgfQoJICBlbHNlCgkgICAgewoJICAgICAgJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLAoJCQkJICAgICAgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKCSAgICB9CgkgIGJyZWFrOwoJfQoKICAgICAgY2FzZSAnZG9fbG9naW4nOgoJewoJICAkdGhpcy0+X0RvTG9naW4oICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CgkgIGJyZWFrOwoJfQoKICAgICAgY2FzZSAnZG9fc2V0Y2hhbmdlc2V0dGluZ3N0ZW1wbGF0ZSc6Cgl7CgkgIGlmKCAkdGhpcy0+X0hhc1N1ZmZpY2llbnRQZXJtaXNzaW9ucyggJ3RlbXBsYXRlcycgKSApCgkgICAgewoJICAgICAgJHRoaXMtPl9Eb1NldENoYW5nZVNldHRpbmdzVGVtcGxhdGUoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CgkgICAgfQoJICBlbHNlCgkgICAgewoJICAgICAgJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLAoJCQkJICAgICAgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKCSAgICB9CgkgIGJyZWFrOwoJfQoKICAgICAgY2FzZSAnZG9fc2V0Zm9yZ290cHd0ZW1wbGF0ZSc6Cgl7CgkgIGlmKCAkdGhpcy0+X0hhc1N1ZmZpY2llbnRQZXJtaXNzaW9ucyggJ3RlbXBsYXRlcycgKSApCgkgICAgewoJICAgICAgJHRoaXMtPl9Eb1NldEZvcmdvdFBXVGVtcGxhdGUoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CgkgICAgfQoJICBlbHNlCgkgICAgewoJICAgICAgJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLAoJCQkJICAgICAgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKCSAgICB9CgkgIGJyZWFrOwoJfQoKICAgICAgY2FzZSAnZG9fc2V0bG9naW50ZW1wbGF0ZSc6Cgl7CgkgIGlmKCAkdGhpcy0+X0hhc1N1ZmZpY2llbnRQZXJtaXNzaW9ucyggJ3RlbXBsYXRlcycgKSApCgkgICAgewoJICAgICAgJHRoaXMtPl9Eb1NldExvZ2luVGVtcGxhdGUoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CgkgICAgfQoJICBlbHNlCgkgICAgewoJICAgICAgJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLAoJCQkJICAgICAgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKCSAgICB9CgkgIGJyZWFrOwoJfQoKICAgICAgY2FzZSAnZG9fc2V0bG9nb3V0dGVtcGxhdGUnOgoJewoJICBpZiggJHRoaXMtPl9IYXNTdWZmaWNpZW50UGVybWlzc2lvbnMoICd0ZW1wbGF0ZXMnICkgKQoJICAgIHsKCSAgICAgICR0aGlzLT5fRG9TZXRMb2dvdXRUZW1wbGF0ZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCSAgICB9CgkgIGVsc2UKCSAgICB7CgkgICAgICAkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsCgkJCQkgICAgICAkdGhpcy0+TGFuZygnYWNjZXNzZGVuaWVkJykpOwoJICAgIH0KCSAgYnJlYWs7Cgl9CgogICAgICBjYXNlICdkb19zZXRwcmVmcyc6Cgl7CgkgIGlmKCAkdGhpcy0+X0hhc1N1ZmZpY2llbnRQZXJtaXNzaW9ucyggJ2VkaXRwcmVmcycgKSApCgkgICAgewoJICAgICAgJHRoaXMtPl9Eb1NldFByZWZzKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJICAgIH0KCSAgZWxzZQoJICAgIHsKCSAgICAgICR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwKCQkJCSAgICAgICR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKSk7CgkgICAgfQoJICBicmVhazsKCX0KCiAgICAgIGNhc2UgJ2RvX3VzZXJjaGFuZ2VzZXR0aW5ncyc6Cgl7CgkgICR0aGlzLT5fRG9Vc2VyQ2hhbmdlU2V0dGluZ3MoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CgkgIGJyZWFrOwoJfQoKICAgICAgY2FzZSAnZG9fdmVyaWZ5Y29kZSc6Cgl7CgkgICR0aGlzLT5fRG9SZXNldFVzZXJBY2NvdW50KCRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CgkgIGJyZWFrOwoJfQoKICAgICAgY2FzZSAnZWRpdGdyb3VwJzoKCXsKCSAgaWYoICR0aGlzLT5fSGFzU3VmZmljaWVudFBlcm1pc3Npb25zKCAnZWRpdGdyb3VwcycgKSApCgkgICAgewoJICAgICAgJHRoaXMtPl9EaXNwbGF5QWRtaW5FZGl0R3JvdXBQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJICAgIH0KCSAgZWxzZQoJICAgIHsKCSAgICAgICR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwKCQkJCSAgICAgICR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKSk7CgkgICAgfQoJICBicmVhazsKCX0KICAgIAogICAgICBjYXNlICdlZGl0cHJvcCc6Cgl7CgkgIGlmKCAkdGhpcy0+X0hhc1N1ZmZpY2llbnRQZXJtaXNzaW9ucyggJ2VkaXRwcm9wJyApICkKCSAgICB7CgkgICAgICAkdGhpcy0+X0Rpc3BsYXlBZG1pbkVkaXRQcm9wZXJ0eVBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CgkgICAgfQoJICBlbHNlCgkgICAgewoJICAgICAgJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLAoJCQkJICAgICAgJHRoaXMtPkxhbmcoJ2FjY2Vzc2RlbmllZCcpKTsKCSAgICB9CgkgIGJyZWFrOwoJfQoKICAgICAgY2FzZSAnZWRpdHVzZXInOgoJewoJICBpZiggJHRoaXMtPl9IYXNTdWZmaWNpZW50UGVybWlzc2lvbnMoICdlZGl0dXNlcnMnICkgKQoJICAgIHsKCSAgICAgICR0aGlzLT5fRGlzcGxheUFkbWluRWRpdFVzZXJTdGVwMVBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CgkgICAgfQoJICBlbHNlCgkgICAgewoJICAgICAgJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLAoJCQkJICAgICAgICR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKSk7CgkgICAgfQoJICBicmVhazsKCX0KCiAgICAgIGNhc2UgJ2ZvcmdvdHB3JzoKCXsKCSAgLy8gdXNlciBpdGVtCgkgICR0aGlzLT5fRGlzcGxheVVzZXJGb3Jnb3RQYXNzd29yZFBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CgkgIGJyZWFrOwoJfQoKICAgICAgY2FzZSAnbG9nb3V0JzoKCXsKCSAgJHRoaXMtPl9Eb0xvZ291dCggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCSAgYnJlYWs7Cgl9CgogICAgICBjYXNlICd2ZXJpZnljb2RlJzoKCXsKCSAgJHRoaXMtPl9EaXNwbGF5VXNlckZvcmdvdFBhc3N3b3JkVmVyaWZpY2F0aW9uUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCSAgYnJlYWs7Cgl9CiAgICAgIH0KICB9CgoKICBmdW5jdGlvbiBfRGlzcGxheUFkbWluRWRpdEdyb3VwUGFnZSggJGlkLCAmJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICBpZiggIWlzc2V0KCAkcGFyYW1zWydncm91cF9pZCddICkgKQogICAgICB7CgkkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UgKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLAoJCQkJICR0aGlzLT5MYW5nICgnZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJykpOwoJcmV0dXJuOwogICAgICB9CgogICAgLy8gbm93IGdldCB0aGUgZ3JvdXAgaW5mbwogICAgJGdyb3VwID0gJHRoaXMtPkdldEdyb3VwSW5mbyggJHBhcmFtc1snZ3JvdXBfaWQnXSApOwogICAgaWYoICFpc3NldCggJGdyb3VwWydpZCddICkgKQogICAgICB7CgkkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UgKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkZ3JvdXBbMV0gKTsKCQkJCSAKCXJldHVybjsKICAgICAgfQoKICAgIC8vIHBvcHVsYXRlIHRoZSB0ZW1wbGF0ZQogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydlcnJvciddICkgKQogICAgICB7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2Vycm9yJywkcGFyYW1zWydlcnJvciddKTsKICAgICAgfQogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydtZXNzYWdlJ10gKSApCiAgICAgIHsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignbWVzc2FnZScsJHBhcmFtc1snbWVzc2FnZSddKTsKICAgICAgfQogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZScsICR0aGlzLT5MYW5nKCdlZGl0Z3JvdXAnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2hpZGRlbicsIAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbiggJGlkLCAnZ3JvdXBfaWQnLCAkZ3JvdXBbJ2lkJ10gKSApOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydGZvcm0nLAoJCQkJICAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0ICgkaWQsCgkJCQkJCQkgICdkb19lZGl0Z3JvdXAnLAoJCQkJCQkJICAkcmV0dXJuaWQpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZW5kZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtRW5kICgpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignc3VibWl0JywKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ3N1Ym1pdCcsCgkJCQkJCSAgICAkdGhpcy0+TGFuZygnc3VibWl0JyksICcnLCAnJywgCgkJCQkJCSAgICAkdGhpcy0+TGFuZygnY29uZmlybV9lZGl0Z3JvdXAnKSkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjYW5jZWwnLAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnY2FuY2VsJywgJHRoaXMtPkxhbmcoJ2NhbmNlbCcpKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF9ncm91cG5hbWUnLCR0aGlzLT5MYW5nKCduYW1lJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnaW5wdXRfZ3JvdXBuYW1lJywKCQkJICAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCAoJGlkLCAnaW5wdXRfZ3JvdXBuYW1lJywKCQkJCQkJICAgJGdyb3VwWydncm91cG5hbWUnXSwgMjAsIDgwKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdwcm9tcHRfZ3JvdXBkZXNjJywKCQkJICAgJHRoaXMtPkxhbmcgKCdkZXNjcmlwdGlvbicpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2lucHV0X2dyb3VwZGVzYycsCgkJCSAgICR0aGlzLT5DcmVhdGVJbnB1dFRleHQgKCRpZCwgJ2lucHV0X2dyb3VwZGVzYycsCgkJCQkJCSAgICRncm91cFsnZ3JvdXBkZXNjJ10sIDgwLCAyNTUpKTsKCiAgICAvLyBkaXNwbGF5IGEgbGlzdCBvZiB0aGUgcHJvcGVydGllcyBpbiBhIGZvcm0KICAgIC8vIHRvIGFsbG93IHRoZSB1c2VyIHRvIHBpY2sgd2hpY2ggb25lcyBhcmUgcmVxdWlyZWQgYW5kIHdoaWNoIG9uZXMgYXJlbnQuCiAgICAkcHJvcGRlZm4gPSAkdGhpcy0+R2V0UHJvcGVydHlEZWZucygpOwogICAgJGdyb3VwcHJvcG1hcCA9ICR0aGlzLT5HZXRHcm91cFByb3BlcnR5UmVsYXRpb25zKCAkZ3JvdXBbJ2lkJ10gKTsKICAgICRyb3dhcnJheSA9IGFycmF5KCk7CiAgICAkcm93Y2xhc3MgPSAncm93MSc7CiAgICAka2V5cyA9IGFycmF5X2tleXMoJHRoaXMtPnR5cGVzKTsKICAgICRvcHRpb25zID0gYXJyYXkoICR0aGlzLT5MYW5nKCdvZmYnKSA9PiAwLAoJCSAgICAgICR0aGlzLT5MYW5nKCdvcHRpb25hbCcpID0+IDEsCgkJICAgICAgJHRoaXMtPkxhbmcoJ3JlcXVpcmVkJykgPT4gMiwKCQkgICAgICAkdGhpcy0+TGFuZygnaGlkZGVuJykgPT4gMyk7CiAgICBmb3JlYWNoKCAkcHJvcGRlZm4gYXMgJGRlZm4gKQogICAgICB7CgkvLyBmaW5kIHRoZSBncm91cCBwcm9wZXJ0eSBtYXAgZm9yIHRoaXMgZ3JvdXAKCS8vIGlmIGl0IGV4aXN0cywgaWYgaXQgZG9lc24ndCwgdGhlbiB0aGUgdmFsdWUgaXMgLTEKCSRzZWxlY3RlZHZhbHVlID0gMDsKCSRzb3J0b3JkZXIgPSAnJzsKCWZvcmVhY2goICRncm91cHByb3BtYXAgYXMgJG1hcCApCgl7CgkgIGlmKCAkbWFwWyduYW1lJ10gPT0gJGRlZm5bJ25hbWUnXSApCgkgICAgewoJICAgICAgJHNlbGVjdGVkdmFsdWUgPSAkbWFwWydyZXF1aXJlZCddOwoJICAgICAgJHNvcnRvcmRlciA9ICRtYXBbJ3NvcnRfa2V5J107CgkgICAgICBicmVhazsKCSAgICB9Cgl9Cgkkb25lcm93ID0gbmV3IFN0ZENsYXNzKCk7CiAgICAgICAgJG9uZXJvdy0+bmFtZSA9ICRkZWZuWyduYW1lJ107CiAgICAgICAgJG9uZXJvdy0+cHJvbXB0ID0gJGRlZm5bJ3Byb21wdCddOwoJJG9uZXJvdy0+dHlwZSA9ICR0aGlzLT5MYW5nKCAka2V5c1skZGVmblsndHlwZSddXSApOwoJJG9uZXJvdy0+c29ydG9yZGVyID0gJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCggJGlkLCAnaW5wdXRfc29ydG9yZGVyXycuJGRlZm5bJ25hbWUnXSwKCQkJCQkJICAgICAkc29ydG9yZGVyLCAzLCAyKTsKCSRvbmVyb3ctPnJlcXVpcmVkID0gJHRoaXMtPkNyZWF0ZUlucHV0UmFkaW9Hcm91cCggJGlkLCAnaW5wdXRfcmVxdWlyZWRfJy4kZGVmblsnbmFtZSddLCAKCQkJCQkJCSAgJG9wdGlvbnMsJHNlbGVjdGVkdmFsdWUgICk7Cgkkb25lcm93LT5yb3djbGFzcyA9ICRyb3djbGFzczsKCglhcnJheV9wdXNoICgkcm93YXJyYXksICRvbmVyb3cpOwoJKCRyb3djbGFzcyA9PSAicm93MSIgPyAkcm93Y2xhc3MgPSAicm93MiIgOiAkcm93Y2xhc3MgPSAicm93MSIpOwogICAgICB9CgogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9wcycsICRyb3dhcnJheSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb3Bjb3VudCcsY291bnQoJHJvd2FycmF5KSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ25hbWV0ZXh0JywkdGhpcy0+TGFuZygnbmFtZScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0dGV4dCcsICR0aGlzLT5MYW5nKCdwcm9tcHQnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3R5cGV0ZXh0JywkdGhpcy0+TGFuZygndHlwZScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignc29ydG9yZGVydGV4dCcsJHRoaXMtPkxhbmcoJ3NvcnRvcmRlcicpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncmVxdWlyZWR0ZXh0JywkdGhpcy0+TGFuZygncmVxdWlyZWQnKSk7CgogICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlICgnYWRkZ3JvdXAudHBsJyk7CiAgfQoKCiAgZnVuY3Rpb24gX0Rpc3BsYXlBZG1pbkVkaXRQcm9wZXJ0eVBhZ2UoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgLy8gRm9yIHRoZSBiZWxvdyBjb250cm9sIHR5cGVzIGRvbid0IHJlZHJhdyB0aGUgcGFnZSwganVzdCB1cGRhdGUuCiAgICAvLyBPdGhlcndpc2Ugd2UnbGwgbmVlZCB0byByZWRyYXcgdGhlIHBhZ2Ugd2l0aCBhZGRpdGlvbmFsIHBhcmFtcywKICAgIC8vIHN1Y2ggYXMgbGVuZ3RoIG9yIGRyb3Bkb3duIHNlbGVjdCBvcHRpb25zLgogICAgLy8gVGhlIGlucHV0IHR5cGUgd2lsbCBiZSBrbm93biBvbmx5IGF0IHRoZSBzZWNvbmQgZ28uCiAgICBpZigkcGFyYW1zWydpbnB1dF90eXBlJ10gPT0gMSB8fCAvL2NoZWNrYm94CiAgICAgICAkcGFyYW1zWydpbnB1dF90eXBlJ10gPT0gMiB8fCAvL2VtYWlsCiAgICAgICAkcGFyYW1zWydpbnB1dF90eXBlJ10gPT0gMyApeyAvL3RleHRhcmVhCiAgICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsICdkb19lZGl0cHJvcCcsJHJldHVybmlkLCAkcGFyYW1zKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIGRpc3BsYXkgYSBmdW5reSBwYWdlIHRvIHRoZSB1c2VyIHRvIGFsbG93IGhpbSB0byBlZGl0IGEgcHJvcGVydHkgZGVmaW5pdGlvbgogICAgLy8gYWN0dWFsbHksIHdlJ2xsIGp1c3Qgc2V0IHNvbWUgc3R1ZmYgdXAgYW5kIHVzZSB0aGUgYWRkIHByb3BlcnR5IHBhZ2UKICAgIGlmKCAhaXNzZXQoICRwYXJhbXNbJ3Byb3BuYW1lJ10gKSApCiAgICAgIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJJHBhcmFtc1snbWVzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfaW5zdWZmaWNlbnRwYXJhbXMnKTsKCSR0aGlzLT5teVJlZGlyZWN0VG9UYWIoJGlkLCdwcm9wZXJ0aWVzJywkcGFyYW1zKTsKCXJldHVybjsKICAgICAgfQoKICAgICRkZWZuID0gJHRoaXMtPkdldFByb3BlcnR5RGVmbiggJHBhcmFtc1sncHJvcG5hbWUnXSApOwogICAgaWYoICRkZWZuID09IEZBTFNFICkgCiAgICAgIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJJHBhcmFtc1snbWVzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfcHJvcG5vdGZvdW5kJyk7CgkkdGhpcy0+bXlSZWRpcmVjdFRvVGFiKCRpZCwncHJvcGVydGllcycsJHBhcmFtc1sncHJvcG5hbWUnXSk7CglyZXR1cm47CiAgICAgIH0KICAgIAogICAgJHBhcmFtc1snZWRpdHByb3AnXQk9ICRwYXJhbXNbJ3Byb3BuYW1lJ107CiAgICBpZiAoIWlzc2V0KCRwYXJhbXNbJ2lucHV0X25hbWUnXSkpIHsKICAgICAgJHBhcmFtc1snaW5wdXRfbmFtZSddIAk9ICRwYXJhbXNbJ3Byb3BuYW1lJ107CiAgICB9CiAgICBpZiAoIWlzc2V0KCRwYXJhbXNbJ2lucHV0X3Byb21wdCddKSkgewogICAgICAkcGFyYW1zWydpbnB1dF9wcm9tcHQnXQk9ICRkZWZuWydwcm9tcHQnXTsKICAgIH0KICAgIGlmKGlzc2V0KCRwYXJhbXNbJ2lucHV0X3R5cGUnXSkpewogICAgICAkcGFyYW1zWyduZXdfdHlwZSddCT0gJHBhcmFtc1snaW5wdXRfdHlwZSddOwogICAgfQogICAgJHBhcmFtc1snaW5wdXRfdHlwZSddCT0gJGRlZm5bJ3R5cGUnXTsKICAgIGlmICghaXNzZXQoJHBhcmFtc1snaW5wdXRfbGVuZ3RoJ10pKSB7CiAgICAgICRwYXJhbXNbJ2lucHV0X2xlbmd0aCddCT0gJGRlZm5bJ2xlbmd0aCddOwogICAgfQogICAgaWYgKCFpc3NldCgkcGFyYW1zWydpbnB1dF9tYXhsZW5ndGgnXSkpIHsKICAgICAgJHBhcmFtc1snaW5wdXRfbWF4bGVuZ3RoJ10gPSAkZGVmblsnbWF4bGVuZ3RoJ107CiAgICB9CgogICAgJHRoaXMtPm15UmVkaXJlY3QoJGlkLCdhZGRwcm9wJywkcmV0dXJuaWQsICRwYXJhbXMpOwogIH0KCgogIGZ1bmN0aW9uIF9EaXNwbGF5QWRtaW5FZGl0VXNlclN0ZXAxUGFnZSggJGlkLCAmJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICBpZiggIWlzc2V0KCAkcGFyYW1zWyd1c2VyX2lkJ10gKSApCiAgICAgIHsKCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSAoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsCgkJCQkgJHRoaXMtPkxhbmcgKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnKSk7CglyZXR1cm47CiAgICAgIH0KCiAgICAvLyBub3cgZ2V0IHRoZSB1c2VyIGluZm8KICAgICR1c2VyID0gJHRoaXMtPkdldFVzZXJJbmZvKCAkcGFyYW1zWyd1c2VyX2lkJ10gKTsKICAgIGlmKCAkdXNlclswXSA9PSBmYWxzZSApCiAgICAgIHsKCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSAoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICR1c2VyWzFdICk7CglyZXR1cm47CiAgICAgIH0KICAgICR1c2VyID0gJHVzZXJbMV07CgogICAgLy8gZ2V0IHRoZSB1c2VyIHByb3BlcnRpZXMKICAgICRwcm9wcyA9ICR0aGlzLT5HZXRVc2VyUHJvcGVydGllcyggJHBhcmFtc1sndXNlcl9pZCddICk7CiAgICAKICAgIC8vIGdldCB0aGUgZ3JvdXAgbWVtYmVyc2hpcHMKICAgICRncm91cHMgPSAkdGhpcy0+R2V0TWVtYmVyR3JvdXBzQXJyYXkoICRwYXJhbXNbJ3VzZXJfaWQnXSApOwovLyB0b2RvLCB1c2VycyBtYXkgKG9wdGlvbmFsbHkpIG5vdCBiZSBwYXJ0IG9mIGFueSBncnVvcHMKLy8gICAgIGlmKCAkZ3JvdXBzID09IGZhbHNlICkKLy8gICAgICAgewovLyAJJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlICgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ2Vycm9yX21lbWJlcmdyb3VwcycpICk7Ci8vIAlyZXR1cm47Ci8vICAgICAgIH0KCiAgICAvLyBwb3B1bGF0ZSB0aGUgcGFyYW1zIHdpdGggdGhlIGFwcHJvcHJpYXRlIHN0dWZmCiAgICAvLyB0aGF0IHdlIGp1c3QgbG9hZGVkCiAgICAkcGFyYW1zWydpbnB1dF91c2VybmFtZSddID0gJHVzZXJbJ3VzZXJuYW1lJ107CiAgICAkcGFyYW1zWydpbnB1dF9leHBpcmVzZGF0ZSddID0gJHVzZXJbJ2V4cGlyZXMnXTsKLy8gICAgICRwYXJhbXNbJ2lucHV0X3Bhc3N3b3JkJ10gPSAkdXNlclsncGFzc3dvcmQnXTsgIC8vIHRoZSBwYXNzd29yZCByb3cgaXMgbWQ1IGhhc2hlZCwgZG9uJ3QgYm90aGVyIGRpc3BsYXlpbmcgaXQKLy8gICAgICRwYXJhbXNbJ2lucHV0X3JlcGVhdHBhc3N3b3JkJ10gPSAkdXNlclsncGFzc3dvcmQnXTsKICAgICR1c2VycHJvcHMgPSAnJzsKICAgIGZvcmVhY2goICRwcm9wcyBhcyAkcHJvcCApCiAgICB7CiAgICAgIGlmKCAkdXNlcnByb3BzID09ICcnICkKCXsKCSAgJHVzZXJwcm9wcyA9ICRwcm9wWyd0aXRsZSddLiI9Ii4kcHJvcFsnZGF0YSddOwoJfQogICAgICBlbHNlCgl7CgkgICR1c2VycHJvcHMgLj0gIiwiLiRwcm9wWyd0aXRsZSddLiI9Ii4kcHJvcFsnZGF0YSddOwoJfQogICAgfQogICAgJHBhcmFtc1sndXNlcnByb3BzJ10gPSAkdXNlcnByb3BzOwoKICAgICRtZW1iZXJvZiA9ICcnOwogICAgaWYoICRncm91cHMgIT0gZmFsc2UgKQogICAgICB7Cglmb3JlYWNoKCAkZ3JvdXBzIGFzICRncm91cCApCgl7CgkgICRwYXJhbXNbJ21lbWJlcm9mXycuJGdyb3VwWydncm91cGlkJ11dID0gJGdyb3VwWydncm91cGlkJ107Cgl9CiAgICAgIH0KCiAgICAvLyBhbmQgZGlzcGxheSB0aGUgdXNlciBwYWdlCiAgICAvLyB0b2RvLCBwdXQgYSByZWRpcmVjdCBoZXJlCiAgICAkdGhpcy0+X0Rpc3BsYXlBZG1pblVzZXJQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwogIH0KCgogIGZ1bmN0aW9uIF9EaXNwbGF5QWRtaW5Hcm91cHNUYWIoJGlkLCAmJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICBnbG9iYWwgJGdDbXM7CiAgICAkZGIgPSYgJHRoaXMtPkdldERiKCk7CiAgICAkZ3JvdXBzID0gJHRoaXMtPkdldEdyb3VwTGlzdEZ1bGwoKTsKICAgICRyb3djbGFzcyA9ICdyb3cxJzsKCiAgICAkcm93YXJyYXkgPSBhcnJheSgpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCAnZ3JvdXBzZm91bmQnLCAkdGhpcy0+TGFuZygnZ3JvdXBzZm91bmQnKSk7CiAgICBmb3JlYWNoKCAkZ3JvdXBzIGFzICRvbmVncm91cCApCiAgICB7CiAgICAgIGlmKCAkdGhpcy0+X0hhc1N1ZmZpY2llbnRQZXJtaXNzaW9ucygnbGlzdGdyb3VwcycpICkKCXsKCSAgJG9uZXJvdyA9IG5ldyBzdGRDbGFzcygpOwoJICAkb25lcm93LT5pZCA9ICRvbmVncm91cFsnaWQnXTsKCSAgJG9uZXJvdy0+bmFtZSA9CgkgICAgJHRoaXMtPkNyZWF0ZUxpbmsoICRpZCwgJ2VkaXRncm91cCcsICRyZXR1cm5pZCwgJG9uZWdyb3VwWydncm91cG5hbWUnXSwKCQkJICAgICAgIGFycmF5ICgnZ3JvdXBfaWQnID0+ICRvbmVncm91cFsnaWQnXSkpOwkJCSAgICAgICAKCSAgJG9uZXJvdy0+ZGVzYyA9ICRvbmVncm91cFsnZ3JvdXBkZXNjJ107CgkgICRvbmVyb3ctPnJvd2NsYXNzID0gJHJvd2NsYXNzOwoKCSAgaWYoICR0aGlzLT5fSGFzU3VmZmljaWVudFBlcm1pc3Npb25zKCdlZGl0Z3JvdXBzJykgKQoJICAgIHsKCSAgICAgICRvbmVyb3ctPmVkaXRsaW5rID0KCQkkdGhpcy0+Q3JlYXRlTGluayAoJGlkLCAnZWRpdGdyb3VwJywgJHJldHVybmlkLAoJCQkJICAgJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UgKCdpY29ucy9zeXN0ZW0vZWRpdC5naWYnLAoJCQkJCQkJCQkJICR0aGlzLT5MYW5nICgnZWRpdCcpLCAnJywgJycsICdzeXN0ZW1pY29uJyksCgkJCQkgICBhcnJheSAoJ2dyb3VwX2lkJyA9PiAkb25lZ3JvdXBbJ2lkJ10pKTsKCQl9CgkgIGlmKCAkdGhpcy0+X0hhc1N1ZmZpY2llbnRQZXJtaXNzaW9ucygncmVtb3ZlZ3JvdXBzJykgKQoJICAgIHsKCSAgICAgICRvbmVyb3ctPmRlbGV0ZWxpbmsgPQoJCSR0aGlzLT5DcmVhdGVMaW5rICgkaWQsICdkb19kZWxldGVncm91cCcsICRyZXR1cm5pZCwKCQkJCSAgICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlICgnaWNvbnMvc3lzdGVtL2RlbGV0ZS5naWYnLAoJCQkJCQkJCQkJICR0aGlzLT5MYW5nICgnZGVsZXRlJyksICcnLCAnJywgJ3N5c3RlbWljb24nKSwKCQkJCSAgIGFycmF5ICgnZ3JvdXBfaWQnID0+ICRvbmVncm91cFsnaWQnXSksCgkJCQkgICAkdGhpcy0+TGFuZyAoJ2FyZXlvdXN1cmVfZGVsZXRlZ3JvdXAnKSk7CgkgICAgfQoJICAKCSAgYXJyYXlfcHVzaCAoJHJvd2FycmF5LCAkb25lcm93KTsKCSAgKCRyb3djbGFzcyA9PSAicm93MSIgPyAkcm93Y2xhc3MgPSAicm93MiIgOiAkcm93Y2xhc3MgPSAicm93MSIpOwoJfQoKICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpdGVtY291bnQnLGNvdW50KCRyb3dhcnJheSkpOwogICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2l0ZW1zJywkcm93YXJyYXkpOwogICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2dyb3Vwc2ZvdW5kJywgJHRoaXMtPkxhbmcoJ2dyb3Vwc2ZvdW5kJykgKTsKICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpZHRleHQnLCAkdGhpcy0+TGFuZyggJ2lkJyApKTsKICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCduYW1ldGV4dCcsICR0aGlzLT5MYW5nKCAnbmFtZScgKSk7CiAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZGVzY3RleHQnLCAkdGhpcy0+TGFuZyggJ2Rlc2NyaXB0aW9uJyApKTsKICAgIH0KCiAgICBpZiggJHRoaXMtPl9IYXNTdWZmaWNpZW50UGVybWlzc2lvbnMoJ2xpc3Rncm91cHMnKSApCiAgICAgIHsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignYWRkbGluaycsIAoJCQkgICAgICAkdGhpcy0+Q3JlYXRlTGluayggJGlkLCAnYWRkZ3JvdXAnLAoJCQkJCQkgJHJldHVybmlkLAoJCQkJCQkgJHRoaXMtPkxhbmcoJ2FkZGdyb3VwJyksCgkJCQkJCSBhcnJheSgpLCAnJywgZmFsc2UsCgkJCQkJCSBmYWxzZSwKCQkJCQkJICdjbGFzcz0icGFnZW9wdGlvbnMiJykpOwogICAgICB9CgogICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCAnZ3JvdXBsaXN0LnRwbCcgKTsKICB9CgoKICBmdW5jdGlvbiBfRGlzcGxheUFkbWluQ2hhbmdlU2V0dGluZ3NUZW1wbGF0ZVRhYiggJGlkLCAmJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsCgkJCSAgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCggJGlkLCAnZG9fc2V0Y2hhbmdlc2V0dGluZ3N0ZW1wbGF0ZScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X3RlbXBsYXRlJywkdGhpcy0+TGFuZygndGVtcGxhdGUnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3RlbXBsYXRlJywKCQkJICAkdGhpcy0+Q3JlYXRlVGV4dEFyZWEoIGZhbHNlLCAkaWQsCgkJCQkJICAgICAkdGhpcy0+R2V0VGVtcGxhdGUgKCdmZXVzZXJzX2NoYW5nZXNldHRpbmdzZm9ybScpLAoJCQkJCQkgJ3RlbXBsYXRlY29udGVudCcpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignc3VibWl0JywKCQkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0ICgkaWQsICdzdWJtaXQnLAoJCQkJCQkJICAgICR0aGlzLT5MYW5nKCdzdWJtaXQnKSkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdkZWZhdWx0cycsCgkJCQkgICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnZGVmYXVsdHMnLAoJCQkJCQkJICAgICR0aGlzLT5MYW5nKCdkZWZhdWx0cycpKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2VuZGZvcm0nLCR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwogICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCd0ZW1wbGF0ZWZvcm0udHBsJyk7CiAgfQoKCiAgZnVuY3Rpb24gX0Rpc3BsYXlBZG1pbkZvcmdvdFBhc3N3b3JkVGVtcGxhdGVUYWIoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydGZvcm0nLAoJCQkgICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoICRpZCwgJ2RvX3NldGZvcmdvdHB3dGVtcGxhdGUnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF90ZW1wbGF0ZTEnLCR0aGlzLT5MYW5nKCdmb3Jnb3RwYXNzd29yZF90ZW1wbGF0ZScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfdGVtcGxhdGUxJywKCQkJICAkdGhpcy0+Q3JlYXRlVGV4dEFyZWEoIGZhbHNlLCAkaWQsCgkJCQkJICAgICAkdGhpcy0+R2V0VGVtcGxhdGUgKCdmZXVzZXJzX2ZvcmdvdHBhc3N3b3JkZm9ybScpLAoJCQkJCQkgJ3RlbXBsYXRlY29udGVudDEnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF90ZW1wbGF0ZTInLCR0aGlzLT5MYW5nKCdmb3Jnb3RwYXNzd29yZF9lbWFpbHRlbXBsYXRlJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF90ZW1wbGF0ZTInLAoJCQkgICR0aGlzLT5DcmVhdGVUZXh0QXJlYSggZmFsc2UsICRpZCwKCQkJCQkgICAgICR0aGlzLT5HZXRUZW1wbGF0ZSAoJ2ZldXNlcnNfZm9yZ290cGFzc3dvcmRlbWFpbGZvcm0nKSwKCQkJCQkJICd0ZW1wbGF0ZWNvbnRlbnQyJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfdGVtcGxhdGUzJywkdGhpcy0+TGFuZygnZm9yZ290cGFzc3dvcmRfdmVyaWZ5dGVtcGxhdGUnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3RlbXBsYXRlMycsCgkJCSAgJHRoaXMtPkNyZWF0ZVRleHRBcmVhKCBmYWxzZSwgJGlkLAoJCQkJCSAgICAgJHRoaXMtPkdldFRlbXBsYXRlICgnZmV1c2Vyc19mb3Jnb3RwYXNzd29yZHZlcmlmeWZvcm0nKSwKCQkJCQkJICd0ZW1wbGF0ZWNvbnRlbnQzJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLAoJCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ3N1Ym1pdCcsCgkJCQkJCQkgICAgJHRoaXMtPkxhbmcoJ3N1Ym1pdCcpKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2RlZmF1bHRzJywKCQkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0ICgkaWQsICdkZWZhdWx0cycsCgkJCQkJCQkgICAgJHRoaXMtPkxhbmcoJ2RlZmF1bHRzJykpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZW5kZm9ybScsJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CiAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2ZvcmdvdHB3X3RlbXBsYXRlZm9ybS50cGwnKTsKICB9CgoKICBmdW5jdGlvbiBfRGlzcGxheUFkbWluTG9naW5UZW1wbGF0ZVRhYiggJGlkLCAmJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsCgkJCSAgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCggJGlkLCAnZG9fc2V0bG9naW50ZW1wbGF0ZScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X3RlbXBsYXRlJywkdGhpcy0+TGFuZygndGVtcGxhdGUnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3RlbXBsYXRlJywKCQkJICAkdGhpcy0+Q3JlYXRlVGV4dEFyZWEoIGZhbHNlLCAkaWQsCgkJCQkJICAgICAkdGhpcy0+R2V0VGVtcGxhdGUgKCdmZXVzZXJzX2xvZ2luZm9ybScpLAoJCQkJCQkgJ3RlbXBsYXRlbG9naW5mb3JtJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLAoJCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ3N1Ym1pdCcsCgkJCQkJCQkgICAgJHRoaXMtPkxhbmcoJ3N1Ym1pdCcpKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2RlZmF1bHRzJywKCQkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0ICgkaWQsICdkZWZhdWx0cycsCgkJCQkJCQkgICAgJHRoaXMtPkxhbmcoJ2RlZmF1bHRzJykpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZW5kZm9ybScsJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CiAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ3RlbXBsYXRlZm9ybS50cGwnKTsKICB9CgoKICBmdW5jdGlvbiBfRGlzcGxheUFkbWluTG9nb3V0VGVtcGxhdGVUYWIoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydGZvcm0nLAoJCQkgICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoICRpZCwgJ2RvX3NldGxvZ291dHRlbXBsYXRlJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfdGVtcGxhdGUnLCR0aGlzLT5MYW5nKCd0ZW1wbGF0ZScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfdGVtcGxhdGUnLAoJCQkgICR0aGlzLT5DcmVhdGVUZXh0QXJlYSggZmFsc2UsICRpZCwKCQkJCQkgICAgICR0aGlzLT5HZXRUZW1wbGF0ZSAoJ2ZldXNlcnNfbG9nb3V0Zm9ybScpLAoJCQkJCQkgJ3RlbXBsYXRlbG9nb3V0Zm9ybScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignc3VibWl0JywKCQkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0ICgkaWQsICdzdWJtaXQnLAoJCQkJCQkJICAgICR0aGlzLT5MYW5nKCdzdWJtaXQnKSkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdkZWZhdWx0cycsCgkJCQkgICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnZGVmYXVsdHMnLAoJCQkJCQkJICAgICR0aGlzLT5MYW5nKCdkZWZhdWx0cycpKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2VuZGZvcm0nLCR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwogICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCd0ZW1wbGF0ZWZvcm0udHBsJyk7CiAgfQoKCiAgZnVuY3Rpb24gX0Rpc3BsYXlBZG1pblByb3BlcnRpZXNUYWIoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgZ2xvYmFsICRnQ21zOwogICAgJG1lc3NhZ2UgPSAnJzsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snbWVzc2FnZSddICkgKQogICAgICB7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ21lc3NhZ2UnLCAkbWVzc2FnZSk7CiAgICAgIH0KCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlJywkdGhpcy0+TGFuZygncHJvcGVydGllcycpKTsKCiAgICAkZGVmbnMgPSAkdGhpcy0+R2V0UHJvcGVydHlEZWZucygpOwogICAgJHJvd2FycmF5ID0gYXJyYXkoKTsKICAgICRyb3djbGFzcyA9ICdyb3cxJzsKICAgICRrZXlzID0gYXJyYXlfa2V5cygkdGhpcy0+dHlwZXMpOwogICAgZm9yZWFjaCggJGRlZm5zIGFzICRkZWZuICkKICAgIHsKICAgICAgJHByb3Bncm91cHMgPSAkdGhpcy0+R2V0UHJvcGVydHlHcm91cFJlbGF0aW9ucygkZGVmblsnbmFtZSddKTsKCiAgICAgICRvbmVyb3cgPSBuZXcgU3RkQ2xhc3MoKTsKICAgICAgaWYoICR0aGlzLT5fSGFzU3VmZmljaWVudFBlcm1pc3Npb25zKCdlZGl0cHJvcCcpKSAKCXsKCSAgJG9uZXJvdy0+bmFtZSA9IAoJICAgICR0aGlzLT5DcmVhdGVMaW5rKCAkaWQsICdlZGl0cHJvcCcsICRyZXR1cm5pZCwgJGRlZm5bJ25hbWUnXSwKCQkJICAgICAgIGFycmF5KCdwcm9wbmFtZScgPT4gJGRlZm5bJ25hbWUnXSkpOwoJfQogICAgICBlbHNlCgl7CgkgICRvbmVyb3ctPm5hbWUgPSAkZGVmblsnbmFtZSddOwoJfQogICAgICAkb25lcm93LT5wcm9tcHQgPSAkZGVmblsncHJvbXB0J107CiAgICAgICRvbmVyb3ctPnR5cGUgPSAkdGhpcy0+TGFuZyggJGtleXNbJGRlZm5bJ3R5cGUnXV0gKTsKICAgICAgJG9uZXJvdy0+bGVuZ3RoID0gJGRlZm5bJ2xlbmd0aCddOwogICAgICAkb25lcm93LT5yb3djbGFzcyA9ICRyb3djbGFzczsKCiAgICAgIGlmKCAkdGhpcy0+X0hhc1N1ZmZpY2llbnRQZXJtaXNzaW9ucygnZWRpdHByb3AnKSkKCXsKCSAgJG9uZXJvdy0+ZWRpdGxpbmsgPQoJICAgICR0aGlzLT5DcmVhdGVMaW5rICgkaWQsICdlZGl0cHJvcCcsICRyZXR1cm5pZCwKCQkJICAgICAgICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZWRpdC5naWYnLAoJCQkJCQkJCQkgICAgJHRoaXMtPkxhbmcgKCdlZGl0JyksICcnLCAnJywgJ3N5c3RlbWljb24nKSwKCQkJICAgICAgIGFycmF5KCdwcm9wbmFtZScgPT4gJGRlZm5bJ25hbWUnXSkpOwoKCSAgaWYoIGNvdW50KCRwcm9wZ3JvdXBzKSA9PSAwICkKCSAgICB7CgkgICAgICAkb25lcm93LT5kZWxldGVsaW5rID0KCQkkdGhpcy0+Q3JlYXRlTGluayAoJGlkLCAnZG9fZGVsZXRlcHJvcCcsICRyZXR1cm5pZCwKCQkJCSAgICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicsCgkJCQkJCQkJCQkkdGhpcy0+TGFuZyAoJ2RlbGV0ZScpLCAnJywgJycsICdzeXN0ZW1pY29uJyksCgkJCQkgICBhcnJheSgncHJvcG5hbWUnID0+ICRkZWZuWyduYW1lJ10sICdwcm9wdHlwZScgPT4gJGRlZm5bJ3R5cGUnXSksIAoJCQkJICAgJHRoaXMtPkxhbmcoJ2NvbmZpcm1fZGVsZXRlX3Byb3AnKSk7CgkgICAgfQoJfQoKICAgICAgYXJyYXlfcHVzaCAoJHJvd2FycmF5LCAkb25lcm93KTsKICAgICAgKCRyb3djbGFzcyA9PSAicm93MSIgPyAkcm93Y2xhc3MgPSAicm93MiIgOiAkcm93Y2xhc3MgPSAicm93MSIpOwogICAgfQoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignbmFtZXRleHQnLCR0aGlzLT5MYW5nKCduYW1lJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdsZW5ndGh0ZXh0JywkdGhpcy0+TGFuZygnbGVuZ3RoJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHR0ZXh0JywkdGhpcy0+TGFuZygncHJvbXB0JykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0eXBldGV4dCcsJHRoaXMtPkxhbmcoJ3R5cGUnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb3BzJywkcm93YXJyYXkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9wY291bnQnLCBjb3VudCgkcm93YXJyYXkpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvcHNmb3VuZCcsJHRoaXMtPkxhbmcoJ3Byb3BzZm91bmQnKSk7CgogICAgaWYoICR0aGlzLT5fSGFzU3VmZmljaWVudFBlcm1pc3Npb25zKCdhZGRwcm9wJykgKQogICAgICB7CgkvLyB0b2RvLCBhZGQgYSBwZXJtaXNzaW9uIGNoZWNrIGFyb3VuZCB0aGlzCgkvLyBtYXliZSBjcmVhdGUgYW4gImVkaXQgZnJvbnRlbmR1c2VyIHByb3BlcnRpZXMiIHBlcm1pc3Npb24KCSR0aGlzLT5zbWFydHktPmFzc2lnbignYWRkbGluaycsIAoJCQkgICAgICAkdGhpcy0+Q3JlYXRlTGluayggJGlkLCAnYWRkcHJvcCcsCgkJCQkJCSAkcmV0dXJuaWQsCgkJCQkJCSAkdGhpcy0+TGFuZygnYWRkcHJvcCcpLAoJCQkJCQkgYXJyYXkoKSwgJycsIGZhbHNlLAoJCQkJCQkgZmFsc2UsCgkJCQkJCSAnY2xhc3M9InBhZ2VvcHRpb25zIicpKTsKICAgICAgfQoKCiAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ3Byb3BlcnRpZXNmb3JtLnRwbCcpOwogIH0KCgogIGZ1bmN0aW9uIF9EaXNwbGF5QWRtaW5Vc2Vyc1RhYigkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQpCiAgewogICAgLy8gdGhpcyB0YWIgaGFzIG1lcmVseSBvbmUgbW9mbyBsaXN0IG9mIHVzZXMgYW5kIHRoZSBhYmlsaXR5IHRvIGVkaXQgdGhlbSwgCiAgICAvLyBzZWUgZGV0YWlscyBhYm91dCB0aGVtLCBhbmQgdGhlbiBkZWxldGUgdGhlbQogICAgLy8gbWF5YmUgc2VuZCBhbiBlbWFpbCB0byB0aGVtIHRvbyBpZiBJIGdldCBhcm91bmQgdG8gaXQgdGhhdCBpcy4KCiAgICBpZiggJHRoaXMtPl9IYXNTdWZmaWNpZW50UGVybWlzc2lvbnMoJ2xpc3R1c2VycycpICkKICAgICAgewoJLy8gZmlsdGVyaW5nIHN0dWZmCglpZiggaXNzZXQoICRwYXJhbXNbJ2ZpbHRlciddKSApCgkgIHsKCSAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2ZpbHRlcl9ncm91cCddICkgKQoJICAgICAgewoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdjdXJyZW50X2dyb3VwJywgJHBhcmFtc1snZmlsdGVyX2dyb3VwJ10gKTsKCSAgICAgIH0KCSAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2ZpbHRlcl9yZWdleCddICkgKQoJICAgICAgewoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdjdXJyZW50X3JlZ2V4JywgJHBhcmFtc1snZmlsdGVyX3JlZ2V4J10gKTsKCSAgICAgIH0KCSAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2ZpbHRlcl9saW1pdCddICkgKQoJICAgICAgewoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdjdXJyZW50X2xpbWl0JywgJHBhcmFtc1snZmlsdGVyX2xpbWl0J10gKTsKCSAgICAgIH0KCSAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2ZpbHRlcl9zb3J0YnknXSApICkKCSAgICAgIHsKCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnY3VycmVudF9zb3J0JywgJHBhcmFtc1snZmlsdGVyX3NvcnRieSddICk7CgkgICAgICB9CgkgICAgaWYoIGlzc2V0KCAkcGFyYW1zWydmaWx0ZXJfcHJvcGVydHlzZWwnXSApICkKCSAgICAgIHsKCQkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnY3VycmVudF9wcm9wc2VsJywgJHBhcmFtc1snZmlsdGVyX3Byb3BlcnR5c2VsJ10gKTsKCSAgICAgIH0KCSAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2ZpbHRlcl9wcm9wZXJ0eXNlbCddICkgKQoJICAgICAgewoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdjdXJyZW50X3Byb3B2YWwnLCAkcGFyYW1zWydmaWx0ZXJfcHJvcGVydHknXSApOwoJICAgICAgfQoJICB9CgkkY3VyZ3JvdXAgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY3VycmVudF9ncm91cCcsICcnKTsKCSRjdXJyZWdleCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjdXJyZW50X3JlZ2V4JywgJycpOwoJJGN1cmxpbWl0ID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2N1cnJlbnRfbGltaXQnLCAxMDApOwoJJGN1cnNvcnQgID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2N1cnJlbnRfc29ydCcsICcnKTsKCSRjdXJwcm9wc2VsID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2N1cnJlbnRfcHJvcHNlbCcsICdub25lJyk7CgkkY3VycHJvcHZhbCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjdXJyZW50X3Byb3B2YWwnLCAnJyk7IAoJCgkvLyBnZXQgYSBncm91cCBsaXN0IGZvciB0aGUgZmlsdGVyCgkvLyBpdCBzaG91bGQgYmUgcmVhZHkgdG8gZ28gcmlnaHQgaW50byB0aGUgZHJvcGRvd24gKGNvb2wgZWgpCgkkZ3JvdXBzMSA9ICR0aGlzLT5HZXRHcm91cExpc3QoKTsKCSRncm91cHMgPSBhcnJheV9tZXJnZSggYXJyYXkoIkFsbCBHcm91cHMiID0+IC0xKSwgJGdyb3VwczEgKTsKCQoJLy8gYSBwdWxsZG93biBsaXN0IGZvciBsaW1pdHMKCSRsaW1pdHMgPSBhcnJheSggJzEwMCcgPT4gMTAwLAoJCQkgJzEwJyA9PiAxMCwKCQkJICcyNScgPT4gMjUsCgkJCSAnNTAnID0+IDUwLAoJCQkgJzI1MCcgPT4gMjUwLAoJCQkgJzUwMCcgPT4gNTAwICk7CgoJLy8gYSBwdWxsZG93biBsaXN0IGZvciBwcm9wZXJ0eSBkZWZpbml0aW9ucwoJJGRlZm5zMSA9ICR0aGlzLT5HZXRQcm9wZXJ0eURlZm5zKCk7CgkkZGVmbnMgPSBhcnJheSgpOwoJJGRlZm5zWydOb25lJ10gPSAnbm9uZSc7Cglmb3JlYWNoKCAkZGVmbnMxIGFzICRkZWYgKQoJICB7CgkgICAgJGRlZm5zWyRkZWZbJ3Byb21wdCddXSA9ICRkZWZbJ25hbWUnXTsKCSAgfQoJCgkvLyBhIHB1bGxkb3duIGxpc3QgZm9yIHNvcnRpbmcKCSRzb3J0cyA9IGFycmF5ICgnVXNlcm5hbWUnID0+ICd1c2VybmFtZScsCgkJCSdVc2VybmFtZSAoZGVzY2VuZGluZyknID0+ICd1c2VybmFtZSBkZXNjJywKCQkJJ0NyZWF0ZSBEYXRlJyA9PiAnY3JlYXRlZGF0ZScsCgkJCSdDcmVhdGUgRGF0ZSAoZGVzY2VuZGluZyknID0+ICdjcmVhdGVkYXRlIGRlc2MnLAoJCQknRXhwaXJ5IERhdGUnID0+ICdleHBpcmVzJywKCQkJJ0V4cGlyeSBEYXRlIChkZXNjZW5kaW5nKScgPT4gJ2V4cGlyZXMgZGVzYycpOwoJLy8gbm93IHNldHVwIHRoZSB0ZW1wbGF0ZSBmaWVsZHMKCSR0aGlzLT5zbWFydHktPmFzc2lnbiggJ3Byb21wdF9maWx0ZXInLCAkdGhpcy0+TGFuZygnZmlsdGVyJykpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCAncHJvbXB0X3NvcnQnLCAkdGhpcy0+TGFuZygnc29ydCcpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbiggJ3N0YXJ0Zm9ybScsCgkJCSAgICAgICAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCAkaWQsICdkZWZhdWx0YWRtaW4nKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oICdwcm9tcHRfZ3JvdXAnLCAkdGhpcy0+TGFuZygnZ3JvdXAnKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oICd1c2Vyc2ZvdW5kJywgJHRoaXMtPkxhbmcoJ3VzZXJzZm91bmQnKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oICd1c2Vyc2luZ3JvdXAnLCAkdGhpcy0+TGFuZygndXNlcnNpbmdyb3VwJykpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCAnZmlsdGVyX2dyb3VwJywKCQkJICAgICAgICR0aGlzLT5DcmVhdGVJbnB1dERyb3BEb3duKCAkaWQsICdmaWx0ZXJfZ3JvdXAnLCAkZ3JvdXBzLCAtMSwKCQkJCQkJCSAgICRjdXJncm91cCkpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCAncHJvbXB0X3VzZXJmaWx0ZXInLCAkdGhpcy0+TGFuZygndXNlcmZpbHRlcicpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbiggJ2ZpbHRlcl9yZWdleCcsIAoJCQkgICAgICAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCggJGlkLCAnZmlsdGVyX3JlZ2V4JywKCQkJCQkJICAgICAgICRjdXJyZWdleCwgMjAsIDIwICkpOwoKCSR0aGlzLT5zbWFydHktPmFzc2lnbiggJ3Byb21wdF9wcm9wZXJ0eWZpbHRlcnNlbCcsJHRoaXMtPkxhbmcoJ3Byb3BlcnR5ZmlsdGVyJykpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCAnZmlsdGVyX3Byb3BlcnR5c2VsJywKCQkJICAgICAgICR0aGlzLT5DcmVhdGVJbnB1dERyb3BEb3duKCAkaWQsICdmaWx0ZXJfcHJvcGVydHlzZWwnLAoJCQkJCQkJICAgJGRlZm5zLCAtMSwgJGN1cnByb3BzZWwgKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oICdwcm9tcHRfcHJvcGVydHlmaWx0ZXInLCR0aGlzLT5MYW5nKCd2YWx1ZXJlZ2V4JykpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCAnZmlsdGVyX3Byb3BlcnR5JywKCQkJICAgICAgICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoICRpZCwgJ2ZpbHRlcl9wcm9wZXJ0eScsCgkJCQkJCSAgICAgICAkY3VycHJvcHZhbCwgMjAsIDIwICkpOwoKCSR0aGlzLT5zbWFydHktPmFzc2lnbiggJ3Byb21wdF9saW1pdCcsCgkJCSAgICAgICAkdGhpcy0+TGFuZygndXNlcmxpbWl0JykpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCAnZmlsdGVyX2xpbWl0JywKCQkJICAgICAgICR0aGlzLT5DcmVhdGVJbnB1dERyb3BEb3duKCAkaWQsICdmaWx0ZXJfbGltaXQnLCAkbGltaXRzLCAtMSwKCQkJCQkJCSAgICRjdXJsaW1pdCkpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCAncHJvbXB0X3NvcnRieScsCgkJCSAgICAgICAkdGhpcy0+TGFuZygnc29ydGJ5JykpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCAnZmlsdGVyX3NvcnRieScsCgkJCSAgICAgICAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wRG93biggJGlkLCAnZmlsdGVyX3NvcnRieScsICRzb3J0cywgLTEsCgkJCQkJCQkgICAkY3Vyc29ydCkpOwoKCSR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfc2VsZWN0JywKCQkJICAgICAgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCAkaWQsICdmaWx0ZXInLCAKCQkJCQkJCSR0aGlzLT5MYW5nKCdhcHBseWZpbHRlcicpKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X2hpZGRlbicsCgkJCSAgICAgICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbiggJGlkLCAnYWN0aXZlX3RhYicsICd1c2VycycpCgkJCSAgICAgICk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQgKCkpOwoKCgkkdXNlcnMgPSAkdGhpcy0+R2V0VXNlcnNJbkdyb3VwKCAkY3VyZ3JvdXAsICRjdXJyZWdleCwgJGN1cmxpbWl0LCAkY3Vyc29ydCwKCQkJCQkgJGN1cnByb3BzZWwsICRjdXJwcm9wdmFsICk7CglpZiggIWlzX2FycmF5KCR1c2VycykgKQoJICB7CgkgICAgLy8gYW4gZXJyb3Igb2NjdXJyZWQKCSAgICAkZGIgPSYgJHRoaXMtPkdldERiKCk7CgkgICAgJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlICgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwKCQkJCSAgICAgICRkYi0+RXJyb3JNc2coKSApOwoJICAgIHJldHVybjsKCSAgfQoKCS8vIGdldCB0aGUgdG90YWwgbnVtYmVyIG9mIHVzZXJzCgkkbnVtdXNlcnMgPSAkdGhpcy0+Q291bnRVc2Vyc0luR3JvdXAoICRjdXJncm91cCApOwoKCSRyb3dhcnJheSA9IGFycmF5KCk7Cgkkcm93Y2xhc3MgPSAicm93MSI7CglnbG9iYWwgJGdDbXM7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ251bXVzZXJzJywgJG51bXVzZXJzICk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3VzZXJuYW1ldGV4dCcsICR0aGlzLT5MYW5nKCd1c2VybmFtZScpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignZW1haWx0ZXh0JywgJHRoaXMtPkxhbmcoJ2VtYWlsJykpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGF0dXN0ZXh0JywgJHRoaXMtPkxhbmcoJ3N0YXR1cycpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignY3JlYXRlZHRleHQnLCAkdGhpcy0+TGFuZygnY3JlYXRlZCcpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignZXhwaXJlc3RleHQnLCAkdGhpcy0+TGFuZygnZXhwaXJlcycpKTsKCWZvcmVhY2goICR1c2VycyBhcyAkcm93ICkKCXsKCSAgJG9uZXJvdyA9IG5ldyBTdGRDbGFzcygpOwoJICAkb25lcm93LT5yb3djbGFzcyA9ICRyb3djbGFzczsKCSAgJG9uZXJvdy0+Y3JlYXRlZCAgPSAkcm93WydjcmVhdGVkYXRlJ107CgkgICRvbmVyb3ctPnVzZXJuYW1lID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCAnZWRpdHVzZXInLCAkcmV0dXJuaWQsICRyb3dbJ3VzZXJuYW1lJ10sCgkJCQkJCWFycmF5KCd1c2VyX2lkJyA9PiAkcm93WydpZCddKSk7CgkgICRvbmVyb3ctPmV4cGlyZXMgID0gJHJvd1snZXhwaXJlcyddOwoJICAkb25lcm93LT5lZGl0bGluayA9CgkgICAgJHRoaXMtPkNyZWF0ZUxpbmsgKCRpZCwgJ2VkaXR1c2VyJywgJHJldHVybmlkLAoJCQkgICAgICAgJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9lZGl0LmdpZicsCgkJCQkJCQkJCSAgICAkdGhpcy0+TGFuZyAoJ2VkaXQnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLAoJCQkgICAgICAgYXJyYXkgKCd1c2VyX2lkJyA9PiAkcm93WydpZCddICkpOwoJICAkb25lcm93LT5kZWxldGVsaW5rID0gCgkgICAgJHRoaXMtPkNyZWF0ZUxpbmsgKCRpZCwnZG9fZGVsZXRldXNlcicsJHJldHVybmlkLAoJCQkgICAgICAgJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9kZWxldGUuZ2lmJywKCQkJCQkJCQkJICAgICR0aGlzLT5MYW5nICgnZGVsZXRlJyksICcnLCAnJywgJ3N5c3RlbWljb24nKSwKCQkJICAgICAgIGFycmF5ICgndXNlcl9pZCcgPT4gJHJvd1snaWQnXSksCgkJCSAgICAgICAkdGhpcy0+TGFuZyAoJ2FyZXlvdXN1cmUnKSk7CgkgIAoJICBhcnJheV9wdXNoICgkcm93YXJyYXksICRvbmVyb3cpOwoJICAoJHJvd2NsYXNzID09ICJyb3cxIiA/ICRyb3djbGFzcyA9ICJyb3cyIiA6ICRyb3djbGFzcyA9ICJyb3cxIik7Cgl9CgoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpdGVtcycsJHJvd2FycmF5KTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignaXRlbWNvdW50JywgY291bnQoJHJvd2FycmF5KSk7CiAgICAgIH0KCiAgICBpZiggJHRoaXMtPl9IYXNTdWZmaWNpZW50UGVybWlzc2lvbnMoJ2FkZHVzZXInKSApCiAgICAgIHsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignYWRkbGluaycsIAoJCQkgICAgICAkdGhpcy0+Q3JlYXRlTGluayggJGlkLCAnYWRkdXNlcicsCgkJCQkJCSAkcmV0dXJuaWQsCgkJCQkJCSAkdGhpcy0+TGFuZygnYWRkdXNlcicpLAoJCQkJCQkgYXJyYXkoKSwgJycsIGZhbHNlLAoJCQkJCQkgZmFsc2UsCgkJCQkJCSAnY2xhc3M9InBhZ2VvcHRpb25zIicpKTsKICAgICAgfQoKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSggJ3VzZXJsaXN0LnRwbCcgKTsKICB9CgoKICBmdW5jdGlvbiBfRGlzcGxheUFkbWluUGFuZWwoJGlkLCYkcGFyYW1zLCRyZXR1cm5pZCkKICB7CiAgICAkZGIgPSAkdGhpcy0+Y21zLT5kYjsKCiAgICAkYWN0aXZlX3RhYiA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdhY3RpdmVfdGFiJywtMSk7CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2FjdGl2ZV90YWInXSApICkKICAgICAgewoJJGFjdGl2ZV90YWIgPSAkcGFyYW1zWydhY3RpdmVfdGFiJ107CiAgICAgIH0KCiAgICAvLyB0aGUgdGFicwogICAgZWNobyAkdGhpcy0+U3RhcnRUYWJIZWFkZXJzKCk7CgogICAgaWYoICR0aGlzLT5fSGFzU3VmZmljaWVudFBlcm1pc3Npb25zKCdwcm9wZXJ0aWVzJykgKQogICAgICB7CgllY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoICdwcm9wZXJ0aWVzJywgJHRoaXMtPkxhbmcoJ3Byb3BlcnRpZXMnKSwKCQkJICAgICAgKCRhY3RpdmVfdGFiID09ICdwcm9wZXJ0aWVzJykpOwogICAgICB9CiAgICBpZiggJHRoaXMtPl9IYXNTdWZmaWNpZW50UGVybWlzc2lvbnMoJ3VzZXJzbmdyb3VwcycpICkKICAgICAgewoJZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCAnZ3JvdXBzJywgJHRoaXMtPkxhbmcoJ2dyb3VwcycpLCgkYWN0aXZlX3RhYiA9PSAnZ3JvdXBzJykpOwoJZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCAndXNlcnMnLCAkdGhpcy0+TGFuZygndXNlcnMnKSwoJGFjdGl2ZV90YWIgPT0gJ3VzZXJzJykpOwoJZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCAnYWRtaW4nLCAkdGhpcy0+TGFuZygnYWRtaW4nKSwoJGFjdGl2ZV90YWIgPT0gJ2FkbWluJykpOwogICAgICB9CiAgICBpZiggJHRoaXMtPl9IYXNTdWZmaWNpZW50UGVybWlzc2lvbnMoJ3NpdGVwcmVmcycpICkKICAgICAgewoJZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCAncHJlZnMnLCAkdGhpcy0+TGFuZygncHJlZmVyZW5jZXMnKSwoJGFjdGl2ZV90YWIgPT0gJ3ByZWZzJykpOwogICAgICB9CiAgICBpZiggJHRoaXMtPl9IYXNTdWZmaWNpZW50UGVybWlzc2lvbnMoJ3RlbXBsYXRlcycpICkKICAgICAgewoJZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCAnbG9naW50ZW1wbGF0ZScsICR0aGlzLT5MYW5nKCdsb2dpbl90ZW1wbGF0ZScpLAoJCQkJICAoJGFjdGl2ZV90YWIgPT0gJ2xvZ2ludGVtcGxhdGUnKSk7CgllY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoICdsb2dvdXR0ZW1wbGF0ZScsICR0aGlzLT5MYW5nKCdsb2dvdXRfdGVtcGxhdGUnKSwKCQkJCSAgKCRhY3RpdmVfdGFiID09ICdsb2dvdXR0ZW1wbGF0ZScpKTsKCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlciggJ2NoYW5nZXNldHRpbmdzX3RlbXBsYXRlJywgJHRoaXMtPkxhbmcoJ2NoYW5nZXNldHRpbmdzX3RlbXBsYXRlJyksCgkJCQkgICgkYWN0aXZlX3RhYiA9PSAnY2hhbmdlc2V0dGluZ3NfdGVtcGxhdGUnKSk7CgllY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoICdmb3Jnb3RwYXNzd29yZF90ZW1wbGF0ZScsICR0aGlzLT5MYW5nKCdmb3Jnb3RwYXNzd29yZF90ZW1wbGF0ZScpLAoJCQkJICAoJGFjdGl2ZV90YWIgPT0gJ2ZvcmdvdHBhc3N3b3JkX3RlbXBsYXRlJykpOwogICAgICB9CiAgICBlY2hvICR0aGlzLT5FbmRUYWJIZWFkZXJzKCk7CgogICAgLy8gVGhlY29udGVudCBvZiB0aGUgdGFicwogICAgZWNobyAkdGhpcy0+U3RhcnRUYWJDb250ZW50KCk7CgogICAgaWYoICR0aGlzLT5fSGFzU3VmZmljaWVudFBlcm1pc3Npb25zKCdwcm9wZXJ0aWVzJykgKQogICAgICB7CgllY2hvICR0aGlzLT5TdGFydFRhYigncHJvcGVydGllcycpOwoJJHRoaXMtPl9EaXNwbGF5QWRtaW5Qcm9wZXJ0aWVzVGFiKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJZWNobyAkdGhpcy0+RW5kVGFiKCk7CiAgICAgIH0KICAgIAogICAgaWYoICR0aGlzLT5fSGFzU3VmZmljaWVudFBlcm1pc3Npb25zKCd1c2Vyc25ncm91cHMnKSApCiAgICAgIHsKCWVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdncm91cHMnKTsKCSR0aGlzLT5fRGlzcGxheUFkbWluR3JvdXBzVGFiKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJZWNobyAkdGhpcy0+RW5kVGFiKCk7CgoJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ3VzZXJzJyk7CgkkdGhpcy0+X0Rpc3BsYXlBZG1pblVzZXJzVGFiKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJZWNobyAkdGhpcy0+RW5kVGFiKCk7CgoJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ2FkbWluJyk7CgkkdGhpcy0+X0Rpc3BsYXlBZG1pbkFkbWluVGFiKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJZWNobyAkdGhpcy0+RW5kVGFiKCk7CiAgICAgIH0KCiAgICBpZiggJHRoaXMtPl9IYXNTdWZmaWNpZW50UGVybWlzc2lvbnMoJ3NpdGVwcmVmcycpICkKICAgICAgewoJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ3ByZWZzJyk7CgkkdGhpcy0+X0Rpc3BsYXlBZG1pblByZWZzVGFiKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJZWNobyAkdGhpcy0+RW5kVGFiKCk7CiAgICAgIH0KCiAgICBpZiggJHRoaXMtPl9IYXNTdWZmaWNpZW50UGVybWlzc2lvbnMoJ3RlbXBsYXRlcycpICkKICAgICAgewoJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ2xvZ2ludGVtcGxhdGUnKTsKCSR0aGlzLT5fRGlzcGxheUFkbWluTG9naW5UZW1wbGF0ZVRhYiggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCWVjaG8gJHRoaXMtPkVuZFRhYigpOwoKCWVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdsb2dvdXR0ZW1wbGF0ZScpOwoJJHRoaXMtPl9EaXNwbGF5QWRtaW5Mb2dvdXRUZW1wbGF0ZVRhYiggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCWVjaG8gJHRoaXMtPkVuZFRhYigpOwoKCWVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdjaGFuZ2VzZXR0aW5nc190ZW1wbGF0ZScpOwoJJHRoaXMtPl9EaXNwbGF5QWRtaW5DaGFuZ2VTZXR0aW5nc1RlbXBsYXRlVGFiKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJZWNobyAkdGhpcy0+RW5kVGFiKCk7CgoJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ2ZvcmdvdHBhc3N3b3JkX3RlbXBsYXRlJyk7CgkkdGhpcy0+X0Rpc3BsYXlBZG1pbkZvcmdvdFBhc3N3b3JkVGVtcGxhdGVUYWIoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CgllY2hvICR0aGlzLT5FbmRUYWIoKTsKICAgICAgfQoKICAgIGVjaG8gJHRoaXMtPkVuZFRhYkNvbnRlbnQoKTsKICB9CgoKICBmdW5jdGlvbiBfRGlzcGxheUFkbWluUHJlZnNUYWIoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgLy8gZmlsbCBvdXQgdGhlIHRlbXBsYXRlCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsCgkJCSAgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCggJGlkLCAnZG9fc2V0cHJlZnMnKSk7CgogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfcHdmbGRsZW4nLCAkdGhpcy0+TGFuZygncHJvbXB0X3B3ZmxkbGVuJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9wd2ZsZGxlbicsIAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnaW5wdXRfcHdmbGRsZW4nLCAKCQkJCQkJICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwYXNzd29yZGZsZGxlbmd0aCcsMjApLCAKCQkJCQkJIDIsIDIgKSk7CgogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfbWlucHdsZW4nLCAkdGhpcy0+TGFuZygncHJvbXB0X21pbnB3bGVuJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9taW5wd2xlbicsIAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnaW5wdXRfbWlucHdsZW4nLCAKCQkJCQkJICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtaW5fcGFzc3dvcmRsZW5ndGgnKSwgMiwgMiApKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5mb19taW5wd2xlbicsCgkJCSAgJHRoaXMtPkxhbmcoJ3dhcm5pbmdfZWZmZWN0c2ZpZWxkbGVuZ3RoJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfbWF4cHdsZW4nLCAkdGhpcy0+TGFuZygncHJvbXB0X21heHB3bGVuJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9tYXhwd2xlbicsIAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnaW5wdXRfbWF4cHdsZW4nLCAKCQkJCQkJICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtYXhfcGFzc3dvcmRsZW5ndGgnKSwgMiwgMiApKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5mb19tYXhwd2xlbicsCgkJCSAgJHRoaXMtPkxhbmcoJ3dhcm5pbmdfZWZmZWN0c2ZpZWxkbGVuZ3RoJykpOwoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X3VuZmxkbGVuJywgJHRoaXMtPkxhbmcoJ3Byb21wdF91bmZsZGxlbicpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfdW5mbGRsZW4nLCAKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2lucHV0X3VuZmxkbGVuJywgCgkJCQkJCSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgndXNlcm5hbWVmbGRsZW5ndGgnLDIwKSwgCgkJCQkJCSAyLCAyICkpOwoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X21pbnVubGVuJywgJHRoaXMtPkxhbmcoJ3Byb21wdF9taW51bmxlbicpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfbWludW5sZW4nLCAKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2lucHV0X21pbnVubGVuJywgCgkJCQkJCSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWluX3VzZXJuYW1lbGVuZ3RoJyksIDIsIDIgKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2luZm9fbWludW5sZW4nLAoJCQkgICR0aGlzLT5MYW5nKCd3YXJuaW5nX2VmZmVjdHNmaWVsZGxlbmd0aCcpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X21heHVubGVuJywgJHRoaXMtPkxhbmcoJ3Byb21wdF9tYXh1bmxlbicpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfbWF4dW5sZW4nLCAKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2lucHV0X21heHVubGVuJywgCgkJCQkJCSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWF4X3VzZXJuYW1lbGVuZ3RoJyksIDIsIDIgKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2luZm9fbWF4dW5sZW4nLAoJCQkgICR0aGlzLT5MYW5nKCd3YXJuaW5nX2VmZmVjdHNmaWVsZGxlbmd0aCcpKTsKCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF9zZXNzaW9udGltZW91dCcsICR0aGlzLT5MYW5nKCdwcm9tcHRfc2Vzc2lvbnRpbWVvdXQnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3Nlc3Npb250aW1lb3V0JywgCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdpbnB1dF9zZXNzaW9udGltZW91dCcsIAoJCQkJCQkgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3VzZXJfc2Vzc2lvbl9leHBpcmVzJyksIDQsIDQgKSk7CgkJCSAgCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF9yZXF1aXJlb25lZ3JvdXAnLCAkdGhpcy0+TGFuZygncHJvbXB0X3JlcXVpcmVvbmVncm91cCcpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfcmVxdWlyZW9uZWdyb3VwJywgCgkJCSAgbXlDcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJ2lucHV0X3JlcXVpcmVvbmVncm91cCcsIDEsIAoJCQkJCQkkdGhpcy0+R2V0UHJlZmVyZW5jZSgncmVxdWlyZV9vbmVncm91cCcpKSk7CgogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfc210cHZhbGlkYXRlJywgJHRoaXMtPkxhbmcoJ3Byb21wdF9zbXRwdmFsaWRhdGUnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3NtdHB2YWxpZGF0ZScsIAoJCQkgIG15Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICdpbnB1dF9zbXRwdmFsaWRhdGUnLCAxLCAKCQkJCQkJJHRoaXMtPkdldFByZWZlcmVuY2UoJ2RvX3NtdHBfdmFsaWRhdGVfZW1haWwnKSkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbmZvX3NtdHB2YWxpZGF0ZScsICR0aGlzLT5MYW5nKCdpbmZvX3NtdHB2YWxpZGF0ZScpKTsKCgogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfYWxsb3dfZHVwbGljYXRlX2VtYWlscycsIAoJCQkgICR0aGlzLT5MYW5nKCdwcm9tcHRfYWxsb3dfZHVwbGljYXRlX2VtYWlscycpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfYWxsb3dfZHVwbGljYXRlX2VtYWlscycsIAoJCQkgIG15Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICdpbnB1dF9hbGxvd19kdXBsaWNhdGVfZW1haWxzJywgMSwgCgkJCQkJCSR0aGlzLT5HZXRQcmVmZXJlbmNlKCdhbGxvd19kdXBsaWNhdGVfZW1haWxzJykpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5mb19hbGxvd19kdXBsaWNhdGVfZW1haWxzJywgJHRoaXMtPkxhbmcoJ2luZm9fYWxsb3dfZHVwbGljYXRlX2VtYWlscycpKTsKCiAgICAKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X2RmbHRncm91cCcsICR0aGlzLT5MYW5nKCdwcm9tcHRfZGZsdGdyb3VwJykpOwogICAgJGdyb3VwczEgPSAkdGhpcy0+R2V0R3JvdXBMaXN0KCk7CiAgICAkZ3JvdXBzID0gYXJyYXlfbWVyZ2UoIGFycmF5KCJOb25lIiA9PiAtMSksICRncm91cHMxICk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X2RmbHRncm91cCcsCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0RHJvcERvd24oICRpZCwgJ2lucHV0X2RmbHRncm91cCcsICRncm91cHMsIC0xLAoJCQkJCQkgICAgICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVmYXVsdF9ncm91cCcpKSk7CgogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLAoJCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ3N1Ym1pdCcsCgkJCQkJCQkgICAgJHRoaXMtPkxhbmcoJ3N1Ym1pdCcpLCcnLCcnLAoJCQkJCQkJICAgICR0aGlzLT5MYW5nKCdjb25maXJtX3N1Ym1pdHByZWZzJykpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2NhbmNlbCcsCgkJCQkgICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnY2FuY2VsJywKCQkJCQkJCSAgICAkdGhpcy0+TGFuZygnY2FuY2VsJykpKTsKCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF9yZXF1aXJlZG1hcmtlcicsCgkJCSAgJHRoaXMtPkxhbmcoJ3JlcXVpcmVkZmllbGRtYXJrZXInKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3JlcXVpcmVkbWFya2VyJywKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwnaW5wdXRfcmVxdWlyZWRmaWVsZG1hcmtlcicsCgkJCQkJCSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncmVxdWlyZWRfZmllbGRfbWFya2VyJywnKicpLDIsMikpOwoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X3JlcXVpcmVkY29sb3InLAoJCQkgICR0aGlzLT5MYW5nKCdyZXF1aXJlZGZpZWxkY29sb3InKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3JlcXVpcmVkY29sb3InLAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCdpbnB1dF9yZXF1aXJlZGZpZWxkY29sb3InLAoJCQkJCQkgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3JlcXVpcmVkX2ZpZWxkX2NvbG9yJywnYmx1ZScpLDEwLDEwKSk7CgogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfaGlkZGVubWFya2VyJywKCQkJICAkdGhpcy0+TGFuZygnaGlkZGVuZmllbGRtYXJrZXInKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X2hpZGRlbm1hcmtlcicsCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ2lucHV0X2hpZGRlbmZpZWxkbWFya2VyJywKCQkJCQkJICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdoaWRkZW5fZmllbGRfbWFya2VyJywnISEnKSwyLDIpKTsKCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF9oaWRkZW5jb2xvcicsCgkJCSAgJHRoaXMtPkxhbmcoJ2hpZGRlbmZpZWxkY29sb3InKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X2hpZGRlbmNvbG9yJywKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwnaW5wdXRfaGlkZGVuZmllbGRjb2xvcicsCgkJCQkJCSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnaGlkZGVuX2ZpZWxkX2NvbG9yJywnZ3JlZW4nKSwxMCwxMCkpOwoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X2ZvcmdvdHB3X3BhZ2UnLAoJCQkgICR0aGlzLT5MYW5nKCdwcm9tcHRfZm9yZ290cHdfcGFnZScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfZm9yZ290cHdfcGFnZScsCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ2lucHV0X2ZvcmdvdHB3X3BhZ2UnLCAKCQkJCQkJICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwYWdlaWRmb3Jnb3RwYXNzd2QnKSwgMTUsIDE1KSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF9jaGFuZ2VzZXR0aW5nc19wYWdlJywKCQkJICAkdGhpcy0+TGFuZygncHJvbXB0X2NoYW5nZXNldHRpbmdzX3BhZ2UnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X2NoYW5nZXNldHRpbmdzX3BhZ2UnLAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCdpbnB1dF9jaGFuZ2VzZXR0aW5nc19wYWdlJywgCgkJCQkJCSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncGFnZWlkX2NoYW5nZXNldHRpbmdzJyksIDE1LCAxNSkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfbG9naW5fcGFnZScsCgkJCSAgJHRoaXMtPkxhbmcoJ3Byb21wdF9sb2dpbl9wYWdlJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9sb2dpbl9wYWdlJywKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwnaW5wdXRfbG9naW5fcGFnZScsIAoJCQkJCQkgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3BhZ2VpZF9sb2dpbicpLCAxNSwgMTUpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X2xvZ291dF9wYWdlJywKCQkJICAkdGhpcy0+TGFuZygncHJvbXB0X2xvZ291dF9wYWdlJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9sb2dvdXRfcGFnZScsCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ2lucHV0X2xvZ291dF9wYWdlJywgCgkJCQkJCSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncGFnZWlkX2xvZ291dCcpLCAxNSwgMTUpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5mb19zdGFyJywkdGhpcy0+TGFuZygnaW5mb19zdGFyJykpOwogICAgJG51bSA9ICR0aGlzLT5Db3VudFRlbXBDb2RlUmVjb3JkcygpOwogICAgaWYoICRudW0gKQogICAgewogICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF9udW1yZXNldHJlY29yZHMnLAoJCQkgICAgJHRoaXMtPkxhbmcoJ3Byb21wdF9udW1yZXNldHJlY29yZCcpKTsKICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdkYXRhX251bXJlc2V0cmVjb3JkcycsICRudW0pOyAvL3RvZG8KICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9yZW1vdmVhbGwnLAoJCQkgICAgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnaW5wdXRfcmVtb3ZlYWxsJywKCQkJCQkJICAgICAkdGhpcy0+TGFuZygncmVtb3ZlYWxsJyksCgkJCQkJCSAgICAgJ29uY2xpY2s9InJldHVybiBjb25maXJtKFwnJy4kdGhpcy0+TGFuZygnYXJleW91c3VyZScpLidcJykiJykpOwogICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3JlbW92ZTF3ZWVrJywKCQkJICAgICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ2lucHV0X3JlbW92ZTF3ZWVrJywKCQkJCQkJICAgICAkdGhpcy0+TGFuZygncmVtb3ZlMXdlZWsnKSwKCQkJCQkJICAgICAnb25jbGljaz0icmV0dXJuIGNvbmZpcm0oXCcnLiR0aGlzLT5MYW5nKCdhcmV5b3VzdXJlJykuJ1wnKSInKSk7CiAgICAgIAogICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3JlbW92ZTFtb250aCcsCgkJCSAgICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdpbnB1dF9yZW1vdmUxbW9udGgnLAoJCQkJCQkgICAgICR0aGlzLT5MYW5nKCdyZW1vdmUxbW9udGgnKSwKCQkJCQkJICAgICAnb25jbGljaz0icmV0dXJuIGNvbmZpcm0oXCcnLiR0aGlzLT5MYW5nKCdhcmV5b3VzdXJlJykuJ1wnKSInKSk7CiAgICB9CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2VuZGZvcm0nLCR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwogICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbnByZWZzLnRwbCcpOwogIH0KCgogIGZ1bmN0aW9uIF9EaXNwbGF5VXNlckZvcmdvdFBhc3N3b3JkUGFnZSggJGlkLCAmJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICAkdXNlcm5hbWUgPSAnJzsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfdXNlcm5hbWUnXSApICkKICAgICAgewoJJHVzZXJuYW1lID0gdHJpbSggJHBhcmFtc1snaW5wdXRfdXNlcm5hbWUnXSApOwogICAgICB9CgogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydlcnJvciddICkgKQogICAgICB7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2Vycm9yJywgJHBhcmFtc1snZXJyb3InXSApOwogICAgICB9CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ21lc3NhZ2UnXSApICkKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdtZXNzYWdlJywgJHBhcmFtc1snbWVzc2FnZSddICk7CiAgICAgIH0KICAgIAogICAgaWYoICFpc3NldCggJHBhcmFtc1snc2tpcGZvcm1kaXNwbGF5J10gKSApCiAgICAgIHsKCS8vIHNldHVwIHRoZSB0ZW1wbGF0ZQoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydGZvcm0nLAoJCQkgICAgICAkdGhpcy0+ZmVDcmVhdGVGb3JtU3RhcnQoICRpZCwgJ2RvX2ZvcmdvdHB3JywgJHJldHVybmlkICkpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywKCQkJICAgICAgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3RpdGxlJywKCQkJICAgICAgJHRoaXMtPkxhbmcoJ2ZvcmdvdHB3JykpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdsb3N0cHdfbWVzc2FnZScsCgkJCSAgICAgICR0aGlzLT5MYW5nKCdsb3N0cHdfbWVzc2FnZScpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X3VzZXJuYW1lJywKCQkJICAgICAgJHRoaXMtPkxhbmcoJ3Byb21wdF91c2VybmFtZScpKTsKICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X2xhYmVsJywkaWQpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF91c2VybmFtZScsCgkJCSAgICAgICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoICRpZCwgJ2lucHV0X3VzZXJuYW1lJywgCgkJCQkJCSAgICAgICR1c2VybmFtZSwgCgkJCQkJCSAgICAgICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtaW5fdXNlcm5hbWVsZW5ndGgnKSwgCgkJCQkJCSAgICAgICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtYXhfdXNlcm5hbWVsZW5ndGgnKSkpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLAoJCQkgICAgICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc3VibWl0JywkdGhpcy0+TGFuZygnc3VibWl0JykpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignY2FuY2VsJywKCQkJICAgICAgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ2NhbmNlbCcsJHRoaXMtPkxhbmcoJ2NhbmNlbCcpKSk7CglpZiggaXNzZXQoICRwYXJhbXNbJ3JldHVybnRvJ10gKSApCgkgIHsKCSAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2hpZGRlbicsCgkJCQkgICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ2lucHV0X3JldHVybnRvJywkcGFyYW1zWydyZXR1cm50byddKSk7CgkgIH0KICAgICAgfQogICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGFiYXNlKCAnZmV1c2Vyc19mb3Jnb3RwYXNzd29yZGZvcm0nICk7CiAgfQoKCiAgZnVuY3Rpb24gX0Rpc3BsYXlVc2VyRm9yZ290UGFzc3dvcmRWZXJpZmljYXRpb25QYWdlKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIC8vIGZpbGwgaW4gdGhlIHRlbXBsYXRlCiAgICAkdWlkID0gJyc7CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X3VpZCddICkgKQogICAgICB7CgkkdWlkID0gJHBhcmFtc1snaW5wdXRfdWlkJ107CiAgICAgIH0KICAgICR1c2VybmFtZSA9ICcnOwogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF91c2VybmFtZSddICkgKQogICAgICB7CgkkdXNlcm5hbWUgPSAkcGFyYW1zWydpbnB1dF91c2VybmFtZSddOwogICAgICB9CiAgICBlbHNlCiAgICAgIHsKCSR1c2VybmFtZSA9ICR0aGlzLT5HZXRVc2VyTmFtZSggJHVpZCApOwogICAgICB9CiAgICAkY29kZSA9ICcnOwogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9jb2RlJ10gKSApCiAgICAgIHsKCSRjb2RlID0gJHBhcmFtc1snaW5wdXRfY29kZSddOwogICAgICB9CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2Vycm9yJ10gKSApCiAgICAgIHsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignZXJyb3InLCRwYXJhbXNbJ2Vycm9yJ10pOwogICAgICB9CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ21lc3NhZ2UnXSApICkKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdtZXNzYWdlJywkcGFyYW1zWydtZXNzYWdlJ10pOwogICAgICB9CgogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydGZvcm0nLAoJCQkgICR0aGlzLT5mZUNyZWF0ZUZvcm1TdGFydCgkaWQsJ2RvX3ZlcmlmeWNvZGUnLCRyZXR1cm5pZCkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywKCQkJICAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaGlkZGVuJywKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCdpbnB1dF91aWQnLCR1aWQpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignc3VibWl0JywKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc3VibWl0JywkdGhpcy0+TGFuZygnc3VibWl0JykpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X3VzZXJuYW1lJywkdGhpcy0+TGFuZygncHJvbXB0X3VzZXJuYW1lJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF91c2VybmFtZScsCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCggJGlkLCAnaW5wdXRfdXNlcm5hbWUnLCAkdXNlcm5hbWUsIAoJCQkJCQkgICR0aGlzLT5HZXRQcmVmZXJlbmNlKCd1c2VybmFtZWZsZGxlbmd0aCcpLCAKCQkJCQkJICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWF4X3VzZXJuYW1lbGVuZ3RoJyksCgkJCQkJCSAgJ2Rpc2FibGVkPSJkaXNhYmxlZCInKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF9jb2RlJywkdGhpcy0+TGFuZygncHJvbXB0X2NvZGUnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X2NvZGUnLAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoICRpZCwgJ2lucHV0X2NvZGUnLCAkY29kZSwgMTAsIDEwICkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfcGFzc3dvcmQnLCR0aGlzLT5MYW5nKCdwcm9tcHRfcGFzc3dvcmQnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3Bhc3N3b3JkJywKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRQYXNzd29yZCgkaWQsICdpbnB1dF9wYXNzd29yZCcsICcnLCAKCQkJCQkJICAgICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncGFzc3dvcmRmbGRsZW5ndGgnKSwKCQkJCQkJICAgICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWF4X3Bhc3N3b3JkbGVuZ3RoJykpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X3JlcGVhdHBhc3N3b3JkJywkdGhpcy0+TGFuZygncmVwZWF0cGFzc3dvcmQnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3JlcGVhdHBhc3N3b3JkJywKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRQYXNzd29yZCgkaWQsICdpbnB1dF9yZXBlYXRwYXNzd29yZCcsICcnLAoJCQkJCQkgICAgICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwYXNzd29yZGZsZGxlbmd0aCcpLAoJCQkJCQkgICAgICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtYXhfcGFzc3dvcmRsZW5ndGgnKSkpOwogICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGFiYXNlKCdmZXVzZXJzX2ZvcmdvdHBhc3N3b3JkdmVyaWZ5Zm9ybScpOwogIH0KCgogIGZ1bmN0aW9uIF9EaXNwbGF5VXNlclNldHRpbmdzUGFnZSggJGlkLCAmJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICAkdWlkID0gJHRoaXMtPkxvZ2dlZEluSWQoKTsKICAgIGlmKCAkdWlkID09IGZhbHNlICkgCiAgICAgIHsKCS8vIHVzZXIgaXNuJ3QgbG9nZ2VkIGluCgkkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAKCQkJCSAgJHRoaXMtPkxhbmcoJ2Vycm9yX25vdGxvZ2dlZGluJykpOwoJcmV0dXJuOwogICAgICB9CiAgICAkcmVzdWx0ID0gJHRoaXMtPkdldFVzZXJJbmZvKCAkdWlkICk7CiAgICBpZiggJHJlc3VsdFswXSA9PSBGQUxTRSApCiAgICAgIHsKCS8vIHVzZXIgaXNuJ3QgbG9nZ2VkIGluCgkkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAKCQkJCSAgJHJlc3VsdFsxXSk7CglyZXR1cm47CiAgICAgIH0KICAgICR1aW5mbyA9ICRyZXN1bHRbMV07CgogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydlcnJvciddICkgKQogICAgICB7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2Vycm9yJywgJHBhcmFtc1snZXJyb3InXSApOwogICAgICB9CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ21lc3NhZ2UnXSApICkKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdtZXNzYWdlJywgJHBhcmFtc1snbWVzc2FnZSddICk7CiAgICAgIH0KCiAgICAvLyBnZXQgdGhlIHVzZXJzIG1lbWJlciBncm91cHMKICAgICRncm91cHMgPSAkdGhpcy0+R2V0TWVtYmVyR3JvdXBzQXJyYXkoICR1aWQgKTsKICAgIGlmKCAhJGdyb3VwcyApCiAgICAgIHsKCS8vIHRoaXMgdXNlciBpcyBub3QgYSBtZW1iZXIgb2YgYW55IGdydW9wcy4uLgoJLy8gaGFuZGxlIHRoaXMgbGF0ZXIgdG9kbwoJJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgCgkJCQkgICR0aGlzLT5MYW5nKCdlcnJvcl9ub2dyb3VwcycpKTsKCXJldHVybjsKICAgICAgfQoKICAgIC8vIG5vdyB3ZSBoYXZlIHRoZSBncm91cHMsIHdlIGJ1aWxkIGEgdW5pb24gb2YgYWxsIG9mIHRoZSBncm91cHMgcHJvcGVydGllcwogICAgJHByb3BlcnRpZXMgPSBhcnJheSgpOwogICAgZm9yZWFjaCggJGdyb3VwcyBhcyAkZ3JwcmVjb3JkICkKICAgIHsKICAgICAgJGdpZCA9ICRncnByZWNvcmRbJ2dyb3VwaWQnXTsKICAgICAgJHByb3ByZWxhdGlvbnMgPSAkdGhpcy0+R2V0R3JvdXBQcm9wZXJ0eVJlbGF0aW9ucyggJGdpZCApOwogICAgICAkcHJvcGVydGllcyA9IGFycmF5X21lcmdlX2J5X25hbWVfcmVxdWlyZWQoICRwcm9wZXJ0aWVzLCAkcHJvcHJlbGF0aW9ucyApOwogICAgICB1YXNvcnQoICRwcm9wZXJ0aWVzLCAnY29tcGFyZV9lbGVtZW50c19ieV9zb3J0b3JkZXJfa2V5JyApOwogICAgfQoKICAgIGlmKCBjb3VudCgkcHJvcGVydGllcykgPT0gMCApCiAgICAgIHsKCWlmKCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncmVxdWlyZV9vbmVncm91cCcpID09IDEgKQoJICB7CgkgICAgLy8gdGhpcyB1c2VyIGlzIG5vdCBhIG1lbWJlciBvZiBhbnkgZ3J1b3BzLi4uCgkgICAgLy8gaGFuZGxlIHRoaXMgbGF0ZXIgdG9kbwoJICAgICR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsIAoJCQkJICAgICAgJHRoaXMtPkxhbmcoJ2Vycm9yX29uZWdyb3VwcmVxdWlyZWQnKSk7CgkgICAgcmV0dXJuOwoJICB9CiAgICAgIH0KCgogICAgLy8gbm93IHdlJ3JlIHJlYWR5IHRvIHBvcHVsYXRlIHRoZSB0ZW1wbGF0ZQogICAgLy8gZmlyc3Qgd2UgcHV0IGluIHN0dWZmIHRoYXQgaXMgcmVxdWlyZWQgKHVzZXJuYW1lLCBwYXNzd29yZCwgZXRjLCBldGMpCiAgICAkcm93YXJyYXkgPSBhcnJheSgpOwoKICAgIC8vIG1ha2Ugc3VyZSB1c2VybmFtZSBpcyBpbiB0aGVyZQogICAgJHZhbCA9ICR1aW5mb1sndXNlcm5hbWUnXTsKICAgICRvbmVyb3cgPSBuZXcgU3RkQ2xhc3MoKTsKICAgICRvbmVyb3ctPmNvbG9yID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3JlcXVpcmVkX2ZpZWxkX2NvbG9yJywnYmx1ZScpOwogICAgJG9uZXJvdy0+bWFya2VyID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3JlcXVpcmVkX2ZpZWxkX21hcmtlcicsJyonKTsKICAgICRvbmVyb3ctPnJlcXVpcmVkID0gMTsKICAgICRvbmVyb3ctPmhpZGRlbiA9IG15Q3JlYXRlSW5wdXRIaWRkZW4oICRpZCwgJ2hpZGRlbl91c2VybmFtZScsCgkJCQkJICAgaW1wbG9kZSgiOyIsYXJyYXkoJ3VzZXJuYW1lJywwLDMwLDMpKSk7CiAgICAkb25lcm93LT5wcm9tcHQgPSAkdGhpcy0+TGFuZygndXNlcm5hbWUnKTsKICAgICRvbmVyb3ctPmNvbnRyb2wgPSR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnaW5wdXRfdXNlcm5hbWUnLCAkdmFsLAoJCQkJCSAgICAgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3VzZXJuYW1lZmxkbGVuZ3RoJyksCgkJCQkJICAgICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWF4X3VzZXJuYW1lbGVuZ3RoJyksCgkJCQkJICAgICAnZGlzYWJsZWQ9ImRpc2FibGVkIicpOwogICAgYXJyYXlfcHVzaCggJHJvd2FycmF5LCAkb25lcm93ICk7CgogICAgLy8gYW5kIHBhc3N3b3JkCiAgICAkdmFsID0gJyc7CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X3Bhc3N3b3JkJ10gKSApCiAgICAgICR2YWwgPSAkcGFyYW1zWydpbnB1dF9wYXNzd29yZCddOwogICAgJG9uZXJvdyA9IG5ldyBTdGRDbGFzcygpOwogICAgJG9uZXJvdy0+Y29sb3IgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncmVxdWlyZWRfZmllbGRfY29sb3InLCdibHVlJyk7CiAgICAkb25lcm93LT5tYXJrZXIgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncmVxdWlyZWRfZmllbGRfbWFya2VyJywnKicpOwogICAgJG9uZXJvdy0+cmVxdWlyZWQgPSAxOwogICAgJG9uZXJvdy0+aGlkZGVuID0gbXlDcmVhdGVJbnB1dEhpZGRlbiggJGlkLCAnaGlkZGVuX3Bhc3N3b3JkJywKCQkJCQkgICBpbXBsb2RlKCI7IixhcnJheSgncGFzc3dvcmQnLDAsMzAsMykpKTsKICAgICRvbmVyb3ctPnByb21wdCA9ICR0aGlzLT5MYW5nKCdwYXNzd29yZCcpOwogICAgJG9uZXJvdy0+Y29udHJvbCA9JHRoaXMtPkNyZWF0ZUlucHV0UGFzc3dvcmQoJGlkLCAnaW5wdXRfcGFzc3dvcmQnLCAkdmFsLCAKCQkJCQkJICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwYXNzd29yZGZsZGxlbmd0aCcpLAoJCQkJCQkgJHRoaXMtPkdldFByZWZlcmVuY2UoJ21heF9wYXNzd29yZGxlbmd0aCcpKTsKICAgICRvbmVyb3ctPmFkZHRleHQgPSR0aGlzLT5MYW5nKCdpbmZvX2VtcHR5cGFzc3dvcmRmaWVsZCcpOwogICAgYXJyYXlfcHVzaCggJHJvd2FycmF5LCAkb25lcm93ICk7CgogICAgLy8gYW5kIG1ha2UgaGltIHJlcGVhdCB0aGUgcGFzc3dvcmQKICAgICR2YWwgPSAnJzsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfcmVwZWF0cGFzc3dvcmQnXSApICkKICAgICAgJHZhbCA9ICRwYXJhbXNbJ2lucHV0X3JlcGVhdHBhc3N3b3JkJ107CiAgICAkb25lcm93ID0gbmV3IFN0ZENsYXNzKCk7CiAgICAkb25lcm93LT5jb2xvciA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdyZXF1aXJlZF9maWVsZF9jb2xvcicsJ2JsdWUnKTsKICAgICRvbmVyb3ctPm1hcmtlciA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdyZXF1aXJlZF9maWVsZF9tYXJrZXInLCcqJyk7CiAgICAkb25lcm93LT5yZXF1aXJlZCA9IDE7CiAgICAkb25lcm93LT5oaWRkZW4gPSBteUNyZWF0ZUlucHV0SGlkZGVuKCAkaWQsICdoaWRkZW5fcmVwZWF0cGFzc3dvcmQnLAoJCQkJCSAgIGltcGxvZGUoIjsiLGFycmF5KCdyZXBlYXRwYXNzd29yZCcsMCwzMCwzKSkpOwogICAgJG9uZXJvdy0+cHJvbXB0ID0gJHRoaXMtPkxhbmcoJ3JlcGVhdHBhc3N3b3JkJyk7CiAgICAkb25lcm93LT5jb250cm9sID0kdGhpcy0+Q3JlYXRlSW5wdXRQYXNzd29yZCgkaWQsICdpbnB1dF9yZXBlYXRwYXNzd29yZCcsICR2YWwsIDMwLCAzMCk7CiAgICAkb25lcm93LT5hZGR0ZXh0ID0kdGhpcy0+TGFuZygnaW5mb19lbXB0eXBhc3N3b3JkZmllbGQnKTsKICAgIGFycmF5X3B1c2goICRyb3dhcnJheSwgJG9uZXJvdyApOwogICAgICAgIAogICAgZm9yZWFjaCggJHByb3BlcnRpZXMgYXMgJHByb3AgKQogICAgewogICAgICAvLyBkb24ndCBwcm9jZXNzIGhpZGRlbiBmaWVsZHMgaGVyZQogICAgICBpZiggJHByb3BbJ3JlcXVpcmVkJ10gPT0gMyApIGNvbnRpbnVlOwoKICAgICAgLy8gZ2V0IHRoZSBwcm9wZXJ0eSBkZWZpbml0aW9uCiAgICAgICRkZWZuID0gJHRoaXMtPkdldFByb3BlcnR5RGVmbiggJHByb3BbJ25hbWUnXSApOwogICAgICAkdmFsID0gJHRoaXMtPkdldFVzZXJQcm9wZXJ0eUZ1bGwoICRwcm9wWyduYW1lJ10sICR1aWQgKTsKICAgICAgJG9uZXJvdyA9IG5ldyBTdGRDbGFzcygpOyAKCiAgICAgICRjb2xvciA9ICcnOwogICAgICBpZiggJHByb3BbJ3JlcXVpcmVkJ10gPT0gMiApICRjb2xvciA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdyZXF1aXJlZF9maWVsZF9jb2xvcicsJ2JsdWUnKTsKICAgICAgJG1hcmtlciA9ICcnOwogICAgICBpZiggJHByb3BbJ3JlcXVpcmVkJ10gPT0gMiApICRtYXJrZXIgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncmVxdWlyZWRfZmllbGRfbWFya2VyJywnKicpOwogICAgICAkb25lcm93LT5yZXF1aXJlZCA9ICgkcHJvcFsncmVxdWlyZWQnXSA9PSAyKTsKICAgICAgJG9uZXJvdy0+Y29sb3IgICAgPSAkY29sb3I7CiAgICAgICRvbmVyb3ctPm1hcmtlciAgID0gJG1hcmtlcjsKICAgICAgJG9uZXJvdy0+aGlkZGVuID0gbXlDcmVhdGVJbnB1dEhpZGRlbiggJGlkLCAnaGlkZGVuXycuJHByb3BbJ25hbWUnXSwKCQkJCQkgICAgIGltcGxvZGUoIjsiLGFycmF5KCRwcm9wWyduYW1lJ10sJGRlZm5bJ3R5cGUnXSwKCQkJCQkJCSAgICAgICAkZGVmblsnbGVuZ3RoJ10sJHByb3BbJ3JlcXVpcmVkJ10pKSk7CgogICAgICAkb25lcm93LT5wcm9tcHQgPSAkZGVmblsncHJvbXB0J107CiAgICAgIHN3aXRjaCggJGRlZm5bJ3R5cGUnXSApCgl7CgljYXNlIDA6IC8vIHRleHQKCSAgJG9uZXJvdy0+Y29udHJvbCA9ICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoICRpZCwgJ2lucHV0XycuJHByb3BbJ25hbWUnXSwKCQkJCQkJICAgICAkdmFsLCAkZGVmblsnbGVuZ3RoJ10sICRkZWZuWydtYXhsZW5ndGgnXSApOwoJICBicmVhazsKCgljYXNlIDE6IC8vIGNoZWNrYm94CgkgICRvbmVyb3ctPmNvbnRyb2wgPSBteUNyZWF0ZUlucHV0Q2hlY2tib3goICRpZCwgJ2lucHV0XycuJHByb3BbJ25hbWUnXSwgMSwgJHZhbCApOwoJICBicmVhazsKCgljYXNlIDI6IC8vIGVtYWlsCgkgICRvbmVyb3ctPmNvbnRyb2wgPSAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCAkaWQsICdpbnB1dF8nLiRwcm9wWyduYW1lJ10sCgkJCQkJCSAgICAgJHZhbCwgJGRlZm5bJ2xlbmd0aCddLCAkZGVmblsnbWF4bGVuZ3RoJ10gKTsKCSAgYnJlYWs7CgoJY2FzZSAzOiAvLyB0ZXh0YXJlYQoJICAkb25lcm93LT5jb250cm9sID0gJHRoaXMtPkNyZWF0ZVRleHRBcmVhKGZhbHNlLCAkaWQsICR2YWwsICdpbnB1dF8nLiRwcm9wWyduYW1lJ10pOwoJICBicmVhazsKCgljYXNlIDQ6IC8vIGRyb3Bkb3duCgkgICRvbmVyb3ctPmNvbnRyb2wgPSAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wZG93biggCgkJCQkJCQkkaWQsIAoJCQkJCQkJJ2lucHV0XycuJHByb3BbJ25hbWUnXSwgCgkJCQkJCQkkdGhpcy0+R2V0U2VsZWN0T3B0aW9ucygkZGVmblsnbmFtZSddLCAxKSwgCgkJCQkJCQktMSwgCgkJCQkJCQkkdmFsKTsKCSAgYnJlYWs7Cgl9CgogICAgICBhcnJheV9wdXNoKCAkcm93YXJyYXksICRvbmVyb3cgKTsKICAgIH0KCiAgICAvLyBmaWxsIGluIHRoZSB2YXJpYWJsZXMgZm9yIHRoZSB0ZW1wbGF0ZQogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZScsJHRoaXMtPkxhbmcoJ3VzZXJfc2V0dGluZ3MnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsCgkJCSAgJHRoaXMtPmZlQ3JlYXRlRm9ybVN0YXJ0KCRpZCwnZG9fdXNlcmNoYW5nZXNldHRpbmdzJywkcmV0dXJuaWQgKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2VuZGZvcm0nLAoJCQkgICR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdzdWJtaXQnLCR0aGlzLT5MYW5nKCdzdWJtaXQnKSkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjYW5jZWwnLAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdjYW5jZWwnLCR0aGlzLT5MYW5nKCdjYW5jZWwnKSkpOwogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydyZXR1cm50byddICkgKQogICAgICB7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2hpZGRlbicsCgkJCSAgICAgICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ2lucHV0X3JldHVybnRvJywkcGFyYW1zWydyZXR1cm50byddKSk7CiAgICAgIH0KICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignY29udHJvbHMnLCAkcm93YXJyYXkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdjb250cm9sY291bnQnLCBjb3VudCgkcm93YXJyYXkpKTsKCiAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJ2ZldXNlcnNfY2hhbmdlc2V0dGluZ3Nmb3JtJyk7CiAgfQoKCiAgZnVuY3Rpb24gX2hhbmRsZVVzZXJJbmZvVmFsaWRhdGlvbiggJGlkLCAmJHBhcmFtcywgJHJldHVybmlkLCAmJG1lc3NhZ2UsICRuZWVkcHcgPSB0cnVlLCAKCQkJCSAgICAgICRkb2V4cGlyZSA9IHRydWUsICRjaGVja3VzZXJuYW1lID0gdHJ1ZSApCiAgewogICAgLy8gbWFrZSBzdXJlIHRoZSBwYXJhbWV0ZXJzIGFyZSBmaWxsZWQgaW4KICAgICR1c2VybmFtZSA9IHRyaW0oJHBhcmFtc1snaW5wdXRfdXNlcm5hbWUnXSk7CiAgICAkcGFzc3dvcmQgPSB0cmltKCRwYXJhbXNbJ2lucHV0X3Bhc3N3b3JkJ10pOwogICAgJHJlcGVhdCAgID0gdHJpbSgkcGFyYW1zWydpbnB1dF9yZXBlYXRwYXNzd29yZCddKTsKICAgIAogICAgaWYoICR1c2VybmFtZSA9PSAnJyAKCXx8ICgkbmVlZHB3ICYmICgkcGFzc3dvcmQgPT0gJycgfHwgJHJlcGVhdCA9PSAnJykpICApCiAgICAgIHsKCSRtZXNzYWdlID0gJHRoaXMtPkxhbmcgKCJlcnJvcl9pbnZhbGlkcGFyYW1zIik7CglyZXR1cm4gLTE7CiAgICAgIH0KCiAgICAvLyBtYWtlIHN1cmUgdGhlIHBhc3N3b3JkcyBtYXRjaAogICAgaWYoICRwYXNzd29yZCAhPSAkcmVwZWF0ICkKICAgICAgewoJJG1lc3NhZ2UgPSAkdGhpcy0+TGFuZygiZXJyb3JfcGFzc3dvcmRtaXNtYXRjaCIpOwoJcmV0dXJuIC0xOwogICAgICB9CgogICAgLy8gbWFrZSBzdXJlIHRoZSB1c2VybmFtZSBmaXRzIHRoZSBydWxlcwogICAgaWYoICRjaGVja3VzZXJuYW1lICkKICAgICAgewoJaWYoICEkdGhpcy0+SXNWYWxpZFVzZXJuYW1lKCAkdXNlcm5hbWUgKSApCgkgIHsKCSAgICAkbWVzc2FnZSA9ICR0aGlzLT5MYW5nKCAiZXJyb3JfaW52YWxpZHVzZXJuYW1lIiApOwoJICAgIHJldHVybiAtMTsKCSAgfQogICAgICB9CgogICAgLy8gbWFrZSBzdXJlIHRoZSBwYXNzd29yZCBmaXRzIHRoZSBydWxlcwogICAgaWYoICRuZWVkcHcgJiYgISR0aGlzLT5Jc1ZhbGlkUGFzc3dvcmQoICRwYXNzd29yZCApICkKICAgICAgewoJJG1lc3NhZ2UgPSAkdGhpcy0+TGFuZygiZXJyb3JfaW52YWxpZHBhc3N3b3JkIik7CglyZXR1cm4gLTE7CiAgICAgIH0KCiAgICBpZiggJGRvZXhwaXJlID09IGZhbHNlICkKICAgICAgewoJcmV0dXJuIDE7CiAgICAgIH0KCiAgICAvLyBtYWtlIHN1cmUgYW4gZXhwaXJ5IGRhdGUgaXMgc2V0CiAgICBpZiggIWlzc2V0KCRwYXJhbXNbJ2V4cGlyZXNkYXRlX01vbnRoJ10pICkKICAgICAgewoJJG1lc3NhZ2UgPSAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZGV4cGlyeWRhdGUnKTsKICAgICAgfQoKICAgICRleHBpcmVzID0gbWt0aW1lKCRwYXJhbXNbJ2V4cGlyZXNkYXRlX0hvdXInXSwgCgkJJHBhcmFtc1snZXhwaXJlc2RhdGVfTWludXRlJ10sICRwYXJhbXNbJ2V4cGlyZXNkYXRlX1NlY29uZCddLAoJICAgICAgICAkcGFyYW1zWydleHBpcmVzZGF0ZV9Nb250aCddLCAkcGFyYW1zWydleHBpcmVzZGF0ZV9EYXknXSwgCgkgICAgICAgICRwYXJhbXNbJ2V4cGlyZXNkYXRlX1llYXInXSk7CiAgICAkcGFyYW1zWydpbnB1dF9leHBpcmVzZGF0ZSddID0gJGV4cGlyZXM7CiAgICByZXR1cm4gMTsKICB9CgoKICBmdW5jdGlvbiBteU1vZHVsZVBhdGgoKQogIHsKICAgJHN0ciA9ICIvbW9kdWxlcy8iLiR0aGlzLT5HZXROYW1lKCkuIi8iOwogICAgcmV0dXJuICRzdHI7CiAgfQoKICBmdW5jdGlvbiBteVJlZGlyZWN0VG9UYWIoICRpZCwgJHRhYiwgJHBhcmFtcyA9ICcnICkKICB7CiAgICAkcGFybXMgPSBhcnJheSgpOwogICAgaWYoIGlzX2FycmF5KCAkcGFyYW1zICkgKQogICAgICB7CgkkcGFybXMgPSAkcGFyYW1zOwogICAgICB9CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnYWN0aXZlX3RhYicsICR0YWIpOwogICAgJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RlZmF1bHRhZG1pbicsICcnLCAkcGFybXMsIHRydWUgKTsKICB9CgogIGZ1bmN0aW9uIG15UmVkaXJlY3QoICRpZCwgJGFjdGlvbiwgJHJldHVybmlkLCAkcGFyYW1zID0gJycgKQogIHsKICAgICR0aGlzLT5SZWRpcmVjdCggJGlkLCAkYWN0aW9uLCAkcmV0dXJuaWQsICRwYXJhbXMgKTsKICB9CgogIGZ1bmN0aW9uIGZlQ3JlYXRlRm9ybVN0YXJ0KCAkaWQsICRhY3Rpb24sICRyZXR1cm5pZCwgJGlubGluZT10cnVlLCAkbWV0aG9kPSdwb3N0JywgJGVuY3R5cGU9JycsICRpZHN1ZmZpeD0nJyApCiAgewogICAgcmV0dXJuICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoJGlkLCRhY3Rpb24sJHJldHVybmlkLCRtZXRob2QsJGVuY3R5cGUsJGlubGluZSwkaWRzdWZmaXgpOwogIH0KCiAgZnVuY3Rpb24gR2V0SGVscCgkbGFuZz0nZW5fVVMnKQkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcoJ2hlbHAnKTsKICB9CgogIGZ1bmN0aW9uIEdldEF1dGhvcigpIAogIHsKICAgIHJldHVybiAnY2FsZ3V5MTAwMCc7CiAgfQogIAogIGZ1bmN0aW9uIEdldEF1dGhvckVtYWlsKCkJCiAgewogICAgcmV0dXJuICdjYWxndXkxMDAwQGhvdG1haWwuY29tJzsKICB9CiAgCiAgZnVuY3Rpb24gR2V0Q2hhbmdlTG9nKCkJCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdjaGFuZ2Vsb2cnKTsKICB9CgogIC8qKgogICAqIFRoaXMgaXMgYSBhd2Vzb21lIHV0aWxpdHkgZnVuY3Rpb24gdGhhdCBwcm9kdWNlcyB2aXJ0dWFsbHkgYWxsIGhlbHBmdWwKICAgKiBkZWJ1ZyBpbmZvLiAgUmVsaWVzIG9uIHRoZSB2YWx1ZSBvZiB0aGUgJHZhcmRlYnVnIG9mIHRoZSBjbGFzcy4KICAgKgogICAqIEBwYXJhbSBhcnJheSAkZGVidWdhcnJheSBzaW5nbGUtIG9yIG11bHRpZGltZW50aW9uYWwgYXJyYXkKICAgKiBAcGFyYW0gU3RyaW5nICRtZXNzYWdlIHRoYXQgaGVscCBpZGVudGlmeSB0aGUgZnVuY3Rpb24gY2FsbAogICAqLwogIGZ1bmN0aW9uIF9kZWJ1Z2FycmF5KCRkZWJ1Z2FycmF5LCAkbWVzc2FnZT0nJykKICB7CiAgICBpZiAoJHRoaXMtPmRldmRlYnVnID09IDEpewogICAgICBlY2hvICJcblxuPGJyPjxicj4tLS0tLS0tLS0tLS0tIERlYnVnIGluZm86IC0tLS0tLS0tLS0tLS0tLS08YnI+XG4iOwogICAgICAkc3RhY2t0cmFjZSA9IGRlYnVnX2JhY2t0cmFjZSgpOwogICAgICBpZiAoY291bnQoJHN0YWNrdHJhY2UpID4gMSAmJiAkc3RhY2t0cmFjZVsxXVsnZnVuY3Rpb24nXSAhPSAnJyl7CgllY2hvICJJbnNpZGUgIiAuICRzdGFja3RyYWNlWzFdWydmdW5jdGlvbiddIC4gIjxicj5cbiI7CgllY2hvICJDYWxsZWQgZnJvbSAiCgkgIC4gJHN0YWNrdHJhY2VbM11bJ2Z1bmN0aW9uJ10gLiAiLCAiCgkgIC4gJHN0YWNrdHJhY2VbMl1bJ2Z1bmN0aW9uJ10gLiAiPGJyPlxuIjsKICAgICAgfQogICAgICBpZiAoJG1lc3NhZ2UgIT0gJycpewoJZWNobyAkbWVzc2FnZSAuICI8YnI+IjsKICAgICAgfQogICAgICBlY2hvICJcbjx0YWJsZSBjZWxscGFkZGluZz0xMCBib3JkZXI9MD5cbjx0cj5cbjx0ZD4iOwogICAgICBmb3JlYWNoKCAkZGVidWdhcnJheSBhcyAka2V5ID0+ICR2YWwgKXsKCS8vCQkJCWVjaG8gIjxiPiRrZXk8L2I+PGJyPiI7CglpZihpc19hcnJheSgkdmFsKSl7CgkgIGVjaG8gIjwvdGQ+XG48dGQ+IjsKCSAgZWNobyAiPGI+QXJyYXk8L2I+PGJyPiI7CgkgICR0aGlzLT5fZGVidWdzdWJhcnJheSgkdmFsKTsKCX0gZWxzZSBpZiAoaXNfb2JqZWN0KCR2YWwpKXsKCSAgZWNobyAiPC90ZD5cbjx0ZD4iOwoJICBlY2hvICI8Yj5PYmplY3Q8L2I+PGJyPiI7CgkgICR0aGlzLT5fZGVidWdzdWJhcnJheShnZXRfb2JqZWN0X3ZhcnMoJHZhbCkpOwoJfSBlbHNlIHsKCSAgZWNobyAiPGI+VmVjdG9yPC9iPjxicj4iOwoJICBlY2hvICJcdDxzcGFuIHN0eWxlPVxwYWRkaW5nLWxlZnQ6MjBweFwiPiIKCSAgICAuICRrZXkgLiAiOiAiIC4gJHZhbCAuICI8L3NwYW4+PGJyPlxuIjsKCX0KICAgICAgfTsKICAgICAgZWNobyAiPC90ZD5cbjwvdHI+XG48L3RhYmxlPlxuIjsKICAgICAgZWNobyAiLS0tLS0tLS0tLS0tLSBFbmQgZGVidWcgaW5mbyAtLS0tLS0tLS0tLS0tLS0tPGJyPjxicj5cblxuIjsKICAgIH0KICB9CgogIC8qKgogICAqIFV0aWxpdHkgZnVuY3Rpb24sIHVzZWQgYnkgdGhlIF9kZWJ1Z2FycmF5IGZ1bmN0aW9uCiAgICovCiAgZnVuY3Rpb24gX2RlYnVnc3ViYXJyYXkoJGRlYnVnYXJyYXkpCiAgewogICAgZm9yZWFjaCggJGRlYnVnYXJyYXkgYXMgJGtleSA9PiAkdmFsICkKICAgICAgewoJaWYoaXNfYXJyYXkoJHZhbCkpCgkgIHsKCSAgICBlY2hvICJcdCIgLiAka2V5IC4gIjogIiAuIHByaW50X3IoJHZhbCkgLiAiPGJyPlxuIjsKCSAgfSAKCWVsc2UgCgkgIHsKCSAgICBlY2hvICJcdCIgLiAka2V5IC4gIjogIiAuICR2YWwgLiAiPGJyPlxuIjsKCSAgfQogICAgICB9CiAgfQogIAoKICAvLyBvbGQgZnVuY3Rpb24gKG5vdCB1c2VkPykKICAvLyB0b2RvLCBwdXQgdGhpcyBpbnRvIHRoZSBVc2VyTWFuaXB1bGF0b3Igc3R1ZmYKICBmdW5jdGlvbiBDcmVhdGVOZXdVc2VyKCRpZCkgCiAgewogICAgJGRiID0mICR0aGlzLT5HZXREYigpOwogICAgaWYgKGlzc2V0KCRfUE9TVFskaWQuInVzZXJuYW1lIl0pKSAkbmV3dXNlcm5hbWU9dHJpbSgkX1BPU1RbJGlkLiJ1c2VybmFtZSJdKTsgZWxzZSAkbmV3dXNlcm5hbWU9IiI7CiAgICBpZiAoJG5ld3VzZXJuYW1lPT0iIikgcmV0dXJuICJVc2VybmFtZSBtdXN0IGJlIHByb3ZpZGVkISI7CiAgICAkcXVlcnk9IlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3VzZXJzIFdIRVJFIHVzZXJuYW1lPSciLiRuZXd1c2VybmFtZS4iJyI7CiAgICAkcmVzdWx0PSRkYi0+RXhlY3V0ZSgkcXVlcnkpOwogICAgaWYgKCRyZXN1bHQgJiYgJHJlc3VsdC0+Um93Q291bnQoKSkgcmV0dXJuICJVc2VybmFtZSBhbHJlYWR5IGV4aXN0cyEiOwogICAgCiAgICAkbmV3ZW1haWw9dHJpbSgkX1BPU1RbJGlkLiJlbWFpbCJdKTsKICAgIAogICAgJG5ld3Bhc3N3b3JkPXRyaW0oJF9QT1NUWyRpZC4icGFzc3dvcmQiXSk7CiAgICBpZiAoJG5ld3Bhc3N3b3JkPT0iIikgcmV0dXJuICJQYXNzd29yZCBjYW5ub3QgYmUgYmxhbmshIjsKICAgICRuZXdwYXNzd29yZDI9dHJpbSgkX1BPU1RbJGlkLiJwYXNzd29yZDIiXSk7CiAgICBpZiAoJG5ld3Bhc3N3b3JkIT0kbmV3cGFzc3dvcmQyKSByZXR1cm4gIlBhc3N3b3JkcyBkbyBub3QgbWF0Y2ghIjsKICAgICRuZXdpZD0kZGItPkdlbklEKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfdXNlcnNfc2VxIik7CiAgICAkcXVlcnk9IklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc191c2VycyAoaWQsdXNlcm5hbWUscGFzc3dvcmQsZW1haWwpIFZBTFVFUyAoPyw/LD8sPykiOwogICAgJHBhcmFtcz1hcnJheSgkbmV3aWQsJG5ld3VzZXJuYW1lLG1kNSgkbmV3cGFzc3dvcmQpLCRuZXdlbWFpbCk7CiAgICAkZGJyZXN1bHQ9JGRiLT5FeGVjdXRlKCRxdWVyeSwkcGFyYW1zKTsKICAgIAogICAgJHE9IlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2dyb3VwcyI7CiAgICAkZGJyZXN1bHQ9JGRiLT5FeGVjdXRlKCRxKTsKICAgIGlmICgkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5Sb3dDb3VudCgpKSB7CiAgICAgIHdoaWxlICgkcm93PSRkYnJlc3VsdC0+RmV0Y2hSb3coKSkgewoJaWYgKCRfUE9TVFskaWQuImdyb3VwIi4kcm93WyJpZCJdXT09InllcyIpIHsKCSAgLy9DcmVhdGUgYW4gYXNzb2NpYXRpb24KCSAgJHE9IklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19iZWxvbmdzICh1c2VyaWQsZ3JvdXBpZCkgVkFMVUVTICg/LD8pIjsKCSAgJHBhcmFtczI9YXJyYXkoJG5ld2lkLCRyb3dbImlkIl0pOwoJICAkZGJyZXN1bHQyPSRkYi0+RXhlY3V0ZSgkcSwkcGFyYW1zMik7Cgl9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAiIjsKICB9CiAgCgogIC8vIG9sZCBmdW5jdGlvbiAobm90IHVzZWQ/KQogIC8vIHRvZG8sIHB1dCB0aGlzIGludG8gdGhlIFVzZXJNYW5pcHVsYXRvciBzdHVmZgogIGZ1bmN0aW9uIENyZWF0ZU5ld0dyb3VwKCRpZCkgCiAgewogICAgJGRiID0mICR0aGlzLT5HZXREYigpOwogICAgJG5ld2dyb3VwbmFtZT10cmltKCRfUE9TVFskaWQuImdyb3VwbmFtZSJdKTsKICAgIGlmICgkbmV3Z3JvdXBuYW1lPT0iIikgcmV0dXJuICJBIHVuaXF1ZSBncm91cCBuYW1lIG11c3QgYmUgcHJvdmlkZWQhIjsKICAgICRxdWVyeT0iU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfZ3JvdXBzIFdIRVJFIGdyb3VwbmFtZT0nIi4kbmV3Z3JvdXBuYW1lLiInIjsKICAgICRyZXN1bHQ9JGRiLT5FeGVjdXRlKCRxdWVyeSk7CiAgICBpZiAoJHJlc3VsdCAmJiAkcmVzdWx0LT5Sb3dDb3VudCgpKSByZXR1cm4gIkdyb3VwIG5hbWUgYWxyZWFkeSBleGlzdHMhIjsKICAgICRuZXdncm91cGRlc2M9dHJpbSgkX1BPU1RbJGlkLiJncm91cGRlc2MiXSk7CiAgICAkbmV3aWQ9JGRiLT5HZW5JRChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2dyb3Vwc19zZXEiKTsKICAgICRxdWVyeT0iSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2dyb3VwcyAoaWQsZ3JvdXBuYW1lLGdyb3VwZGVzYykgVkFMVUVTICg/LD8sPykiOwogICAgJHBhcmFtcz1hcnJheSgkbmV3aWQsJG5ld2dyb3VwbmFtZSwkbmV3Z3JvdXBkZXNjKTsKICAgICRkYnJlc3VsdD0kZGItPkV4ZWN1dGUoJHF1ZXJ5LCRwYXJhbXMpOwogICAgcmV0dXJuICIiOwogIH0KCgogIC8vIG9sZCBmdW5jdGlvbiAobm90IHVzZWQ/KQogIC8vIHRvZG8sIHB1dCB0aGlzIGludG8gdGhlIFVzZXJNYW5pcHVsYXRvciBzdHVmZgogIGZ1bmN0aW9uIENoYW5nZUdyb3VwKCRpZCkgCiAgewogICAgJGRiID0mICR0aGlzLT5HZXREYigpOwogICAgaWYgKGlzc2V0KCRfUE9TVFskaWQuImdyb3VwaWQiXSkpICRncm91cGlkPXRyaW0oJF9QT1NUWyRpZC4iZ3JvdXBpZCJdKTsgZWxzZSByZXR1cm4gIlVucmVjb3ZlcmFibGUgZXJyb3IiOwogICAgaWYgKGlzc2V0KCRfUE9TVFskaWQuImdyb3VwbmFtZSJdKSkgJGdyb3VwbmFtZT10cmltKCRfUE9TVFskaWQuImdyb3VwbmFtZSJdKTsgZWxzZSByZXR1cm4gIkEgdW5pcXVlIGdyb3VwIG5hbWUgbXVzdCBiZSBwcm92aWRlZCEiOwogICAgCiAgICAvL0NoZWNrIGZvciBleGlzdGluZyBncm91cG5hbWUKICAgICRxdWVyeT0iU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfZ3JvdXBzIFdIRVJFIGdyb3VwbmFtZT0nIi4kZ3JvdXBuYW1lLiInIjsKICAgICRyZXN1bHQ9JGRiLT5FeGVjdXRlKCRxdWVyeSk7CiAgICBpZiAoJHJlc3VsdCAmJiAkcmVzdWx0LT5Sb3dDb3VudCgpKSB7CiAgICAgICRyb3c9JHJlc3VsdC0+RmV0Y2hSb3coKTsKICAgICAgaWYgKCRyb3dbImlkIl0hPSRncm91cGlkKSByZXR1cm4gIkdyb3VwIG5hbWUgYWxyZWFkeSBleGlzdHMhIjsKICAgICAgLy9FbHNlIHNhbWUgZ3JvdXAuLi4KICAgIH0KICAgIAogICAgJGdyb3VwZGVzYz10cmltKCRfUE9TVFskaWQuImdyb3VwZGVzYyJdKTsKICAgICRxdWVyeT0iVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19ncm91cHMgU0VUIGdyb3VwbmFtZT0/LGdyb3VwZGVzYz0/IFdIRVJFIGlkPT8iOwogICAgJHBhcmFtcz1hcnJheSgkZ3JvdXBuYW1lLCRncm91cGRlc2MsJGdyb3VwaWQpOwogICAgJGRicmVzdWx0PSRkYi0+RXhlY3V0ZSgkcXVlcnksJHBhcmFtcyk7CiAgfQoKCQogIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogIC8vICBBUEkgRlVOQ1RJT05TIC8vCiAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCgogIGZ1bmN0aW9uIEFkZEdyb3VwKCAkbmFtZSwgJGRlc2NyaXB0aW9uICkKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+QWRkR3JvdXAoICRuYW1lLCAkZGVzY3JpcHRpb24gKTsKICB9CgoKICBmdW5jdGlvbiBBZGRHcm91cFByb3BlcnR5UmVsYXRpb24oICRncnBpZCwgJHByb3BuYW1lLCAkc29ydGtleSwgJHZhbCApCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkFkZEdyb3VwUHJvcGVydHlSZWxhdGlvbiggJGdycGlkLCAkcHJvcG5hbWUsICRzb3J0a2V5LCAkdmFsICk7CiAgfQoKCiAgZnVuY3Rpb24gQWRkUHJvcGVydHlEZWZuKCAkbmFtZSwgJHByb21wdCwgJHR5cGUsICRsZW5ndGgsICRtYXhsZW5ndGggKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5BZGRQcm9wZXJ0eURlZm4oICRuYW1lLCAkcHJvbXB0LCAkdHlwZSwgJGxlbmd0aCwgJG1heGxlbmd0aCApOwogIH0KCiAKICBmdW5jdGlvbiBBZGRTZWxlY3RPcHRpb25zKCAkbmFtZSwgJHNlbG9wdGlvbnMgKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5BZGRTZWxlY3RPcHRpb25zKCAkbmFtZSwgJHNlbG9wdGlvbnMgKTsKICB9CgogCiAgZnVuY3Rpb24gQWRkVXNlciggJG5hbWUsICRwYXNzd29yZCwgJGV4cGlyZXMgKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5BZGRVc2VyKCAkbmFtZSwgJHBhc3N3b3JkLCAkZXhwaXJlcyApOwogIH0KCgogIGZ1bmN0aW9uIEFzc2lnblVzZXJUb0dyb3VwKCAkdWlkLCAkZ2lkICkKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+QXNzaWduVXNlclRvR3JvdXAoICR1aWQsICRnaWQgKTsKICB9CgogCiAgZnVuY3Rpb24gQ2hlY2tQYXNzd29yZCgkdXNlcm5hbWUsJHBhc3N3b3JkKSAKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+Q2hlY2tQYXNzd29yZCgkdXNlcm5hbWUsJHBhc3NvcmQpOwogIH0KCiAKICBmdW5jdGlvbiBDb3VudFRlbXBDb2RlUmVjb3JkcygpCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkNvdW50VGVtcENvZGVSZWNvcmRzKCk7CiAgfQoKIAogIGZ1bmN0aW9uIENvdW50VXNlcnNJbkdyb3VwKCAkZ2lkID0gJycgKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5Db3VudFVzZXJzSW5Hcm91cCggJGdpZCApOwogIH0KCgogIC8qIHdoYXQncyB0aGlzPyAqLwogIGZ1bmN0aW9uIERlbGV0ZUFsbEdyb3VwUHJvcGVydHlSZWxhdGlvbnMoICRncnBpZCApCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkRlbGV0ZUFsbEdyb3VwUHJvcGVydHlSZWxhdGlvbnMoICRncnBpZCApOwogIH0KCgogIGZ1bmN0aW9uIERlbGV0ZUFsbEdyb3VwUHJvcGVydHlSZWxhdGlvbiggJGdycGlkLCAkcHJvcG5hbWUgKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5EZWxldGVBbGxHcm91cFByb3BlcnR5UmVsYXRpb25zKCAkZ3JwaWQsICRwcm9wbmFtZSApOwogIH0KCiAgZnVuY3Rpb24gRGVsZXRlUHJvcGVydHlEZWZuKCAkbmFtZSApCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkRlbGV0ZVByb3BlcnR5RGVmbiggJG5hbWUgKTsKICB9CgoKICBmdW5jdGlvbiBEZWxldGVQcm9wZXJ0eURlZm5zKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+RGVsZXRlUHJvcGVydHlEZWZucygpOwogIH0KCgogIGZ1bmN0aW9uIERlbGV0ZVNlbGVjdE9wdGlvbnMoICRuYW1lICkKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+RGVsZXRlU2VsZWN0T3B0aW9ucyggJG5hbWUgKTsKICB9CgoKICBmdW5jdGlvbiBEZWxldGVVc2VyRnVsbCggJHVpZCApCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkRlbGV0ZVVzZXJGdWxsKCAkdWlkICk7CiAgfQoKCiAgZnVuY3Rpb24gRGVsZXRlVXNlclByb3BlcnR5QnlOYW1lKCAkdGl0bGUgKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5EZWxldGVVc2VyUHJvcGVydHlCeU5hbWUoJHRpdGxlKTsKICB9CgogIC8qV2hhdCBpcyB0aGlzPyovCiAgZnVuY3Rpb24gRGVsZXRlVXNlclByb3BlcnR5KCR0aXRsZSwkYWxsPWZhbHNlKSAKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+RGVsZXRlVXNlclByb3BlcnR5KCR0aXRsZSwkYWxsKTsKICB9CgoKICBmdW5jdGlvbiBEZWxldGVBbGxVc2VyUHJvcGVydGllcygpIAogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5EZWxldGVBbGxVc2VyUHJvcGVydGllcygpOwogIH0KCiAgCiAgZnVuY3Rpb24gRGVsZXRlQWxsVXNlclByb3BlcnRpZXNGdWxsKCR1c2VyaWQpIAogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5EZWxldGVBbGxVc2VyUHJvcGVydGllc0Z1bGwoJHVzZXJpZCk7CiAgfQoKCgogIGZ1bmN0aW9uIERlbGV0ZVVzZXJQcm9wZXJ0eUZ1bGwoJHRpdGxlLCR1c2VyaWQsJGFsbD1mYWxzZSkgCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkRlbGV0ZVVzZXJQcm9wZXJ0eUZ1bGwoJHRpdGxlLCR1c2VyaWQsJGFsbCk7CiAgfQoKCiAgZnVuY3Rpb24gRGVsZXRlR3JvdXBGdWxsKCAkZ2lkICkKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+RGVsZXRlR3JvdXBGdWxsKCAkZ2lkICk7CiAgfQoKCiAgZnVuY3Rpb24gRGVsZXRlVXNlcigkaWQpIAogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5EZWxldGVVc2VyKCAkaWQgKTsKICB9CgogIGZ1bmN0aW9uIEV4cGlyZVVzZXJzKCkgCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkV4cGlyZVVzZXJzKCk7CiAgfQoKCiAgZnVuY3Rpb24gRXhwaXJlVGVtcENvZGVzKCAkZXhwaXJ5Y29kZSApCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkV4cGlyZVRlbXBDb2RlcyggJGV4cGlyeWNvZGUgKTsKICB9CgogIGZ1bmN0aW9uIEdldFVzZXJQcm9wZXJ0aWVzKCR1aWQpCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkdldFVzZXJQcm9wZXJ0aWVzKCR1aWQpOwogIH0KICAKCiAgZnVuY3Rpb24gR2V0TWVtYmVyR3JvdXBzQXJyYXkoJHVzZXJpZCkKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+R2V0TWVtYmVyR3JvdXBzQXJyYXkoJHVzZXJpZCk7CiAgfQoKICBmdW5jdGlvbiBHZXRVc2VyUHJvcGVydHkoJHRpdGxlLCRkZWZhdWx0dmFsdWU9ZmFsc2UpIAogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5HZXRVc2VyUHJvcGVydHkoICR0aXRsZSwgJGRlZmF1bHR2YWx1ZSApOwogIH0KCiAgZnVuY3Rpb24gR2V0VXNlclByb3BlcnR5RnVsbCgkdGl0bGUsJHVzZXJpZCwgJGRlZmF1bHR2YWx1ZT1mYWxzZSkgCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkdldFVzZXJQcm9wZXJ0eUZ1bGwoJHRpdGxlLCR1c2VyaWQsJGRlZmF1bHR2YWx1ZSk7CiAgfQoKICBmdW5jdGlvbiBHZXRVc2VyVGVtcENvZGUoICR1aWQgKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5HZXRVc2VyVGVtcENvZGUoICR1aWQgKTsKICB9ICAKCgogIGZ1bmN0aW9uIEdldFByb3BlcnR5R3JvdXBSZWxhdGlvbnMoICR0aXRsZSApCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkdldFByb3BlcnR5R3JvdXBSZWxhdGlvbnMoICR0aXRsZSApOwogIH0KCiAgZnVuY3Rpb24gR2V0R3JvdXBQcm9wZXJ0eVJlbGF0aW9ucyggJGdycGlkICkKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+R2V0R3JvdXBQcm9wZXJ0eVJlbGF0aW9ucyggJGdycGlkICk7CiAgfQoKICAKICBmdW5jdGlvbiBHZXRHcm91cEluZm8oICRnaWQgKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5HZXRHcm91cEluZm8oICRnaWQgKTsKICB9CgoKICBmdW5jdGlvbiBHZXRVc2VySW5mbyggJHVpZCApCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkdldFVzZXJJbmZvKCAkdWlkICk7CiAgfQogCiAgZnVuY3Rpb24gR2V0VXNlcnNJbkdyb3VwKCAkZ2lkID0gJycsICRyZWdleCA9ICcnLCAkbGltaXQgPSAnJywgJHNvcnQgPSAnJywKCQkJICAkcHJvcGVydHkgPSAnJywgJHByb3ByZWdleCA9ICcnKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5HZXRVc2Vyc0luR3JvdXAoICRnaWQsICRyZWdleCwgJGxpbWl0LCAkc29ydCwKCQkJCQkgICAgICAkcHJvcGVydHksICRwcm9wcmVnZXggKTsKICB9CgogIGZ1bmN0aW9uIEdyb3VwRXhpc3RzQnlJRCggJGdpZCApCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkdyb3VwRXhpc3RzQnlJRCggJGdpZCApOwogIH0KCiAgZnVuY3Rpb24gR3JvdXBFeGlzdHNCeU5hbWUoICRuYW1lICkKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+R3JvdXBFeGlzdHNCeU5hbWUoICRuYW1lICk7CiAgfQoJCiAgCiAgZnVuY3Rpb24gR2V0UHJvcGVydHlEZWZucygpCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkdldFByb3BlcnR5RGVmbnMoKTsKICB9CgogIGZ1bmN0aW9uIEdldFByb3BlcnR5RGVmbiggJG5hbWUgKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5HZXRQcm9wZXJ0eURlZm4oICRuYW1lICk7CiAgfQoKICBmdW5jdGlvbiBHZXRTZWxlY3RPcHRpb25zKCAkbmFtZSwgJGRpbSApCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkdldFNlbGVjdE9wdGlvbnMoICRuYW1lLCAkZGltICk7CiAgfQoKICAKICBmdW5jdGlvbiBHZXRVc2VyTmFtZSgkdXNlcmlkKSAKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+R2V0VXNlck5hbWUoJHVzZXJpZCk7CiAgfQoKICAKICBmdW5jdGlvbiBHZXRFbWFpbCgkdXNlcmlkKSAKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+R2V0RW1haWwoJHVzZXJpZCk7CiAgfQoKICAKICBmdW5jdGlvbiBHZXRVc2VySUQoJHVzZXJuYW1lKSAKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+R2V0VXNlcklEKCR1c2VybmFtZSk7CiAgfQoKCiAgZnVuY3Rpb24gR2V0R3JvdXBOYW1lKCRncm91cGlkKSAKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+R2V0R3JvdXBOYW1lKCAkZ3JvdXBpZCApOwogIH0KCiAgZnVuY3Rpb24gR2V0R3JvdXBEZXNjKCRncm91cGlkKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5HZXRHcm91cERlc2MoICRncm91cGlkICk7CiAgfQoKCiAgZnVuY3Rpb24gR2V0R3JvdXBMaXN0KCkKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+R2V0R3JvdXBMaXN0KCk7CiAgfQoKICAKICBmdW5jdGlvbiBHZXRHcm91cExpc3RGdWxsKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+R2V0R3JvdXBMaXN0RnVsbCgpOwogIH0KCiAgZnVuY3Rpb24gR2V0R3JvdXBJRCgkZ3JvdXBuYW1lKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5HZXRHcm91cElEKCAkZ3JvdXBuYW1lICk7CiAgfQoKICAKIGZ1bmN0aW9uIEdldE1lbWJlckdyb3VwcygkdXNlcmlkKSAKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+R2V0TWVtYmVyR3JvdXBzKCR1c2VyaWQpOwogIH0KCiAgCiAgZnVuY3Rpb24gSXNBY2NvdW50RXhwaXJlZCggJHVpZCApCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPklzQWNjb3VudEV4cGlyZWQoICR1aWQgKTsKICB9CgogIAogIGZ1bmN0aW9uIElzVmFsaWRQYXNzd29yZCggJHBhc3N3b3JkICkKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+SXNWYWxpZFBhc3N3b3JkKCAkcGFzc3dvcmQgKTsKICB9CgogCiAgZnVuY3Rpb24gSXNWYWxpZEVtYWlsQWRkcmVzcyggJGVtYWlsLCAkc210cHZhbGlkYXRlID0gZmFsc2UgKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5Jc1ZhbGlkRW1haWxBZGRyZXNzKCAkZW1haWwsICRzbXRwdmFsaWRhdGUgKTsKICB9CgogIAogIGZ1bmN0aW9uIElzVmFsaWRVc2VybmFtZSggJHVzZXJuYW1lICkKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+SXNWYWxpZFVzZXJuYW1lKCAkdXNlcm5hbWUgKTsKICB9CgogIAogIGZ1bmN0aW9uIExvZ2luKCAkdXNlcm5hbWUsICRwYXNzd29yZCApCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkxvZ2luKCAkdXNlcm5hbWUsICRwYXNzd29yZCApOwogIH0KCgogIGZ1bmN0aW9uIExvZ2dlZEluTmFtZSgpIAogIHsKICAgICRzdHIgPSAkdGhpcy0+dXNlcm1hbmlwLT5Mb2dnZWRJbk5hbWUoKTsKICAgIHJldHVybiAkc3RyOwogIH0KCiAgCiAgZnVuY3Rpb24gTG9nZ2VkSW5FbWFpbCgpIAogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5Mb2dnZWRJbkVtYWlsKCk7CiAgfQoKICAKICBmdW5jdGlvbiBMb2dvdXQoKSAKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+TG9nb3V0KCk7CiAgfQoKICAKICBmdW5jdGlvbiBMb2dvdXRVc2VyKCR1aWQpIAogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5Mb2dvdXRVc2VyKCR1aWQpOwogIH0KCiAKICBmdW5jdGlvbiBMb2dnZWRJbklkKCkgCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkxvZ2dlZEluSWQoKTsKICB9CgogCiAgZnVuY3Rpb24gTG9nZ2VkSW4oKSAKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+TG9nZ2VkSW4oKTsKICB9CgogCiAgZnVuY3Rpb24gTWVtYmVyT2ZHcm91cCgkdXNlcmlkLCRncm91cGlkKSAKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+TWVtYmVyT2ZHcm91cCgkdXNlcmlkLCRncm91cGlkKTsKICB9CgogIAogIGZ1bmN0aW9uIFJlbW92ZVVzZXJUZW1wQ29kZSggJHVpZCApCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPlJlbW92ZVVzZXJUZW1wQ29kZSggJHVpZCApOwogIH0gIAoKICAKICBmdW5jdGlvbiBSZW1vdmVVc2VyRnJvbUdyb3VwKCAkdWlkLCAkZ2lkICkKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+UmVtb3ZlVXNlckZyb21Hcm91cCggJHVpZCwgJGdpZCApOwogIH0KCiAgCiAgZnVuY3Rpb24gU2V0VXNlclRlbXBDb2RlKCAkdWlkLCAkY29kZSApCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPlNldFVzZXJUZW1wQ29kZSggJHVpZCwgJGNvZGUgKTsKICB9CgogIAogIGZ1bmN0aW9uIFNldFByb3BlcnR5RGVmbiggJG5hbWUsICRuZXduYW1lLCAkcHJvbXB0LCAkbGVuZ3RoLCAkdHlwZSwgJG1heGxlbmd0aCApCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPlNldFByb3BlcnR5RGVmbiggJG5hbWUsICRuZXduYW1lLCAkcHJvbXB0LCAkbGVuZ3RoLCAkdHlwZSwgJG1heGxlbmd0aCApOwogIH0KCiAgCiAgZnVuY3Rpb24gU2V0R3JvdXAoICRnaWQsICRuYW1lLCAkZGVzYyApCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPlNldEdyb3VwKCAkZ2lkLCAkbmFtZSwgJGRlc2MgKTsKICB9CgogIAogIGZ1bmN0aW9uIFNldFVzZXJQYXNzd29yZCggJHVpZCwgJHBhc3N3b3JkICkKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+U2V0VXNlclBhc3N3b3JkKCAkdWlkLCAkcGFzc3dvcmQgKTsKICB9CgogIAogIGZ1bmN0aW9uIFNldFVzZXIoICR1aWQsICR1c2VybmFtZSwgJHBhc3N3b3JkLCAkZXhwaXJlcyA9IGZhbHNlICkKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+U2V0VXNlciggJHVpZCwgJHVzZXJuYW1lLCAkcGFzc3dvcmQsICRleHBpcmVzICk7CiAgfQoKICBmdW5jdGlvbiBTZXRVc2VyR3JvdXBzKCAkdWlkLCAkZ3JwaWRzICkKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+U2V0VXNlckdyb3VwcyggJHVpZCwgJGdycGlkcyApOwogIH0KCiAgCiAgZnVuY3Rpb24gU2V0VXNlclByb3BlcnRpZXMoICR1aWQsICRwcm9wcyApCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPlNldFVzZXJQcm9wZXJ0aWVzKCAkdWlkLCAkcHJvcHMgKTsKICB9CgogIGZ1bmN0aW9uIFNldFVzZXJQcm9wZXJ0eSgkdGl0bGUsJGRhdGEpIAogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5TZXRVc2VyUHJvcGVydHkoJHRpdGxlLCRkYXRhKTsKICB9CgogIGZ1bmN0aW9uIFNldFVzZXJQcm9wZXJ0eUZ1bGwoJHRpdGxlLCRkYXRhLCR1c2VyaWQpIAogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5TZXRVc2VyUHJvcGVydHlGdWxsKCR0aXRsZSwkZGF0YSwkdXNlcmlkKTsKICB9CgogIGZ1bmN0aW9uIFVzZXJFeGlzdHNCeUlEKCAkdWlkICkKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+VXNlckV4aXN0c0J5SUQoICR1aWQgKTsKICB9CiAKfSAvLyBjbGFzcwoKPz4K]]></data>
	</file>
	<file>
	  <filename>/functions.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKIEZyb250RW5kVXNlcnMuIEEgcGx1Z2luIGZvciBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIENvcHlyaWdodCAoYykgMjAwNC0wNSBieSBSb2JlcnQgQ2FtcGJlbGwgPHJvYkB0ZWNoY29tLmR5bmRucy5vcmc+CgogVHJhbnNsYXRpb25zOgogRnJlbmNoOiBQYXRyaWNpYSBCcnVuLCBodHRwOi8vd3d3LmJydW1hbHNvbHN0aWNlLmNvbQogTm9yd2VnaWFuIChib2ttP2wpOiBSb2dlciAiU3RpZ21hIiBLbnV0c2VuIDxzdGlnbWFzdGVyQGdtYWlsLmNvbT4KCiBDTVMtIENNUyBNYWRlIFNpbXBsZSBpcyBDb3B5cmlnaHQgKGMpIFRlZCBLdWxwICh3aXNoeUB1c2Vycy5zZi5uZXQpCiBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwoKIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCgogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQoqLwoKCmZ1bmN0aW9uIGFycmF5X2tleV9leGlzdHNfc3Vic3RyKCAkYXJyLCAkZXhwciApCnsKICAka2V5cyA9IGFycmF5X2tleXMoICRhcnIgKTsKICBmb3JlYWNoKCAka2V5cyBhcyAkayApCiAgewogICAgaWYoIHN0cnN0ciggJGssICRleHByICkgKSByZXR1cm4gdHJ1ZTsKICB9CiAgcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiBhcnJheV9maW5kX2tleV9yZWdleHAoICRhcnIsICRleHByICkKewogICRrZXlzID0gYXJyYXlfa2V5cyggJGFyciApOwogIGZvcmVhY2goICRrZXlzIGFzICRrICkKICB7CiAgICBpZiggcHJlZ19tYXRjaCggJGV4cHIsICRrICkgKSByZXR1cm4gJGs7CiAgfQogIHJldHVybiBmYWxzZTsKfQoKCmZ1bmN0aW9uIGFycmF5X21lcmdlX2J5X25hbWVfcmVxdWlyZWQoICRhcnIxLCAkYXJyMiApCnsKICAkeHhyZXN1bHQgPSBhcnJheSgpOwogIC8vIGFkZCBpdGVtcyBjb21tb24gdG8gYXJyMSBhbmQgYXJyMiAKICAvLyBidXQgZmF2b3IgcmVxdWlyZWQgaXRlbXMKICBpZiggIWlzX2FycmF5KCAkYXJyMSApIHx8ICFpc19hcnJheSggJGFycjIgKSApCiAgICB7CiAgICAgIHJldHVybjsKICAgIH0KICBmb3JlYWNoKCAkYXJyMSBhcyAkYTEgKQogIHsKICAgIGZvcmVhY2goICRhcnIyIGFzICRhMiApCiAgICB7CiAgICAgIGlmKCAkYTFbJ25hbWUnXSA9PSAkYTJbJ25hbWUnXSApIAoJewoJICBpZiggJGExWydyZXF1aXJlZCddID09IDIgKSAKCSAgICB7CgkgICAgICBhcnJheV9wdXNoKCAkeHhyZXN1bHQsICRhMSApOwoJICAgICAgYnJlYWs7CgkgICAgfQoJICBlbHNlIAoJICAgIHsKCSAgICAgIGFycmF5X3B1c2goICR4eHJlc3VsdCwgJGEyICk7CgkgICAgICBicmVhazsKCSAgICB9Cgl9ICAgIAogICAgfQogIH0KICAKICAvLyBhZGQgaXRlbXMgaW4gYXJyMSBub3QgaW4gcmVzdWx0CiAgZm9yZWFjaCggJGFycjEgYXMgJGExICkKICB7CiAgICAkZm91bmQgPSBmYWxzZTsKICAgIGZvcmVhY2goICR4eHJlc3VsdCBhcyAkcmVzICkKICAgIHsKICAgICAgaWYoICRhMVsnbmFtZSddID09ICRyZXNbJ25hbWUnXSApCgl7CgkgICRmb3VuZCA9IHRydWU7CgkgIGJyZWFrOwoJfQogICAgfQogICAgaWYoICEkZm91bmQgKQogICAgICB7CglhcnJheV9wdXNoKCAkeHhyZXN1bHQsICRhMSApOwogICAgICB9CiAgfQogIAogIC8vIGFkZCBpdGVtcyBpbiBhcnIyIG5vdCBpbiByZXN1bHQKICBmb3JlYWNoKCAkYXJyMiBhcyAkYTIgKQogIHsKICAgICRmb3VuZCA9IGZhbHNlOwogICAgZm9yZWFjaCggJHh4cmVzdWx0IGFzICRyZXMgKQogICAgewogICAgICBpZiggJGEyWyduYW1lJ10gPT0gJHJlc1snbmFtZSddICkKCXsKCSAgJGZvdW5kID0gdHJ1ZTsKCSAgYnJlYWs7Cgl9CiAgICB9CiAgICBpZiggISRmb3VuZCApCiAgICAgIHsKCWFycmF5X3B1c2goICR4eHJlc3VsdCwgJGEyICk7CiAgICAgIH0KICB9CiAgcmV0dXJuICR4eHJlc3VsdDsKfQoKCmZ1bmN0aW9uIGNvbXBhcmVfZWxlbWVudHNfYnlfc29ydG9yZGVyX2tleSggJGUxLCAkZTIgKQp7CiAgaWYoICRlMVsnc29ydF9rZXknXSA8ICRlMlsnc29ydF9rZXknXSApCiAgICB7CiAgICAgIHJldHVybiAtMTsKICAgIH0KICBlbHNlIGlmKCAkZTFbJ3NvcnRfa2V5J10gPiAkZTJbJ3NvcnRfa2V5J10gKQogICAgewogICAgICByZXR1cm4gMTsKICAgIH0KICByZXR1cm4gMDsKfQoKCmZ1bmN0aW9uIGV4cGxvZGVfd2l0aF9rZXkoJHN0ciwgJGluZ2x1ZT0nPScsICRvdXRnbHVlPScmJykKewogICRyZXQgPSBhcnJheSgpOwogICRhMSA9IHNwbGl0KCRvdXRnbHVlLCRzdHIpOwogIGZvcmVhY2goICRhMSBhcyAkYTIgKQogIHsKICAgIGxpc3QoICRrLCAkdiApID0gc3BsaXQoICRpbmdsdWUsICRhMiApOwogICAgJHJldFsgJGsgXSA9ICR2OwogIH0KICByZXR1cm4gJHJldDsKfQoKCmZ1bmN0aW9uIGZpbmRfaW5kZXhfb2ZfdmFsdWUoICRkYXRhLCAkdmFsdWUsICRkZmx0ICkKewogICRpID0gMDsKICBmb3JlYWNoKCAkZGF0YSBhcyAkaz0+JHYgKQogIHsKICAgIGlmKCAkdiA9PSAkdmFsdWUgKQogICAgICB7CglyZXR1cm4gJGk7CiAgICAgIH0KICAgICRpKys7CiAgfQogIHJldHVybiAkZGZsdDsKfQoKCmZ1bmN0aW9uIGltcGxvZGVfd2l0aF9rZXkoJGFzc29jLCAkaW5nbHVlID0gJz0nLCAkb3V0Z2x1ZSA9ICcmJykKewogICAkcmV0dXJuID0gbnVsbDsKICAgZm9yZWFjaCAoJGFzc29jIGFzICR0ayA9PiAkdHYpICRyZXR1cm4gLj0gJG91dGdsdWUuJHRrLiRpbmdsdWUuJHR2OwogICByZXR1cm4gc3Vic3RyKCRyZXR1cm4sc3RybGVuKCRvdXRnbHVlKSk7Cn0KCgoKZnVuY3Rpb24gbXlDcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJG5hbWUsICR2YWx1ZT0nJywgJHNlbGVjdGVkdmFsdWU9JycsIAoJCQkgICAgICAgJGFkZHR0ZXh0PScnKQp7CiAgJHRleHQgPSAnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSInLiRpZC4kbmFtZS4nIiB2YWx1ZT0iJy4kdmFsdWUuJyInOwogICRhcnIgPSBzcGxpdCgiLCIsJHNlbGVjdGVkdmFsdWUpOwogIGZvcmVhY2goICRhcnIgYXMgJGEgKQogIHsKICAgIGlmICgkYSA9PSAkdmFsdWUpCiAgICAgIHsKCSR0ZXh0IC49ICcgJyAuICdjaGVja2VkPSJjaGVja2VkIic7CiAgICAgIH0KICB9CiAgaWYgKCRhZGR0dGV4dCAhPSAnJykKICAgIHsKICAgICAgJHRleHQgLj0gJyAnLiRhZGR0dGV4dDsKICAgIH0KICAkdGV4dCAuPSAiIC8+XG4iOwogIHJldHVybiAkdGV4dDsKfQoKZnVuY3Rpb24gbXlDcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICRuYW1lLCAkdmFsdWU9JycsICRpbWFnZT0nJywgJGFkZHR0ZXh0PScnKQp7CiAgZ2xvYmFsICRnQ21zOwogICR0ZXh0ID0gJzxpbnB1dCBuYW1lPSInLiRpZC4kbmFtZS4nIiB2YWx1ZT0iJy4kdmFsdWUuJyIgdHlwZT0nOwogIGlmICgkaW1hZ2UgIT0gJycpCiAgICB7CiAgICAgICR0ZXh0IC49ICciaW1hZ2UiJzsKICAgICAgJGltZyA9ICRnQ21zLT5jb25maWdbJ3Jvb3RfdXJsJ10uRElSRUNUT1JZX1NFUEFSQVRPUi4kaW1hZ2U7CiAgICAgICR0ZXh0IC49ICcgc3JjPSInLiRpbWcuJyInOwogICAgfQogIGVsc2UgCiAgICB7CiAgICAgICR0ZXh0IC49ICcic3VibWl0Iic7CiAgICB9CiAgaWYgKCRhZGR0dGV4dCAhPSAnJykKICAgIHsKICAgICAgJHRleHQgLj0gJyAnLiRhZGR0dGV4dDsKICAgIH0KICAkdGV4dCAuPSAnIC8+JzsKICByZXR1cm4gJHRleHQgLiAiXG4iOwp9CgoKZnVuY3Rpb24gbXlDcmVhdGVJbnB1dEhpZGRlbiggJGlkLCAkbmFtZSwgJHZhbHVlPScnLCAkYWRkdGV4dD0nJywgJGRlbGltPScsJykKewogIGlmKCBpc19hcnJheSggJHZhbHVlICkgKQogICAgewogICAgICAkdmFsID0gaW1wbG9kZV93aXRoX2tleSggJHZhbHVlICk7CiAgICB9CiAgZWxzZQogICAgewogICAgICAkdmFsID0gJHZhbHVlOwogICAgfQogICR2YWwgPSBzdHJfcmVwbGFjZSgnIicsICcmcXVvdDsnLCAkdmFsKTsKICAkdGV4dCA9ICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSInLiRpZC4kbmFtZS4nIiB2YWx1ZT0iJy4kdmFsLiciJzsKICBpZiAoJGFkZHRleHQgIT0gJycpCiAgICB7CiAgICAgICR0ZXh0IC49ICcgJy4kYWRkdGV4dDsKICAgIH0KICAkdGV4dCAuPSAiIC8+XG4iOwogIHJldHVybiAkdGV4dDsKfQo/Pg==]]></data>
	</file>
	<file>
	  <filename>/icons/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/icons/delete.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAOZ/AAE82AkNrcLT4rHS4gpU4iJr4Cs51gBF4gYjqk1Wyhle4R1m4hk0zQZF2QkMlglJ2wAAfAAAggAuqgAAci514gkOpgBD4mWK3A5R22OK35Wh0bXW4rDL4q/J4jh64QpGzBI6pzNtygtL28DA0x000Qcou6e23hVoxoqKyyBXvmGP0gAi1REjtl9fo3FxzszM6BBW4jF84kmN2JTA4T2G0sjZ4ktXzCZmwhVZ3hE3qQADiAATlAAVmDJnyEKD4RcclgBBthNErBtCvVl/21JcxFNb05a43rjW4gAAXwAzrAYfogkUtgAioAA4tgAAbAovqJ2/4j1T15aW0K6/4gNK38XV4rXT4gEhmiY0yWNjtz2G4pSy4cfH4U5XxBVk4h9q4sHB3CRw4hcuyUiM4kFy2U1z2leU4h8ops3c4lCQ4iM01zl70ExXzyVhy6Gh44iItRBR3SArsCkxtnZ23Rg9qwAMjzx/4ghP4IKy4gAdnQAt13ST3xMpvkWG4g1X3ezs7CH5BAEAAH8ALAAAAAAQABAAAAe6gH+Cg4SFhC9zBiQMDGJYLlyFbgZkazcpQSB0QnxShGoyJ0ASeXURExM5LIRRNE0STDs6EE5IVyWERTMhSTyzExBPfkuEbBscRio9KW0FXgcBhDYDAmh4Y1oxXwQW0YMJ1B1mfXYUC9zegglWVVBpPh4U2wcVhF1HNRcAAA0iGHf0CBHZYqLMCn4PEgYcJGfPlCF6GsDBoUABFQeEUMTRkOEAjAVhCnxw8KYQmCxnEKhU8qPFCEMwDQUCADs=]]></data>
	</file>
	<file>
	  <filename>/icons/edit.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAOZ/ANfq//r+/ur0/+Xy/9/1/9rs/9bu/nehxf/+/fX///H4/+32/+j0/+P3/+bz/+Hw/3+ny3mgxV2XzViTyXqhxVuXzePx//z9/3eew3CYv/j7//r9//3+///+/9zu//f7//j8/3GZv/T6//b6/9/u/93u/+3+//b7/+Dv/1qTyVeY0HGYv/r8/8jf84etz26Xv1eTyfP4/+v1/uX1+FuY0NHq+q/L5IWhwVCKwG6fyun5/+n6/8DL2dzj6VaRyVqAp+T4//z+//T5//L5+9zt/6Kyxc/b5ODy/+Dn63ifxD9nkUdoj+P//1KKv9/v/52ww/D6/3KawfP6/1ORylGSzGOc0N/w/9fi64ykvJWmvPT9//f+/+Xx/////uH0/42ryf7+//7//1qQw0N1pkx5pYuetleNwFiVzePt8luWz+v7/9PZ41qX0J650MPM29ni6vH3++Lv/97u//b4+VJwllZzlVWTytjr/+Lx/16Bp+31/4Sdt+b4/3adw////////yH5BAEAAH8ALAAAAAAQABAAAAfjgH95BxQUGIeHfRERBz9/fyt+fgiSlX5dkhCPIX5rWZVgF35FPH6af0lIdWWSHEEgfk9LRi6PUQg9c5IXGx8fcG9DOY8ZlWEXLBonIgpQCRPEfh0dQRvKIgsDFiYp0R28GiNSC1x4cWrQf8UcGyAfMTLaKHI66ZwX4QoCDhZOJQVAYDx64YeDED0M5Hko4KGBj0dmAqCRsc+ClYUAWhiw80jMFTpYEjx4UOKOly9KbKR51MSPmz1aSJAgAuDIjTYmpjzC4WfLDBM7+DQgQKCGASZUHpGpwlSC0woVztBgo2LMn0AAOw==]]></data>
	</file>
	<file>
	  <filename>/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[]]></data>
	</file>
	<file>
	  <filename>/lang/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/en_US.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2JhY2tlbmRfZ3JvdXAnXSA9ICdCYWNrZW5kIGdydW9wJzsKJGxhbmdbJ2luZm9fc3RhciddID0gJyogVGhlIGZvbGxvd2luZyBtYWNyb3MgY2FuIGJlIHVzZWQgaW4gdGhlc2UgZmllbGRzOiB7JHVzZXJuYW1lfSc7CiRsYW5nWydpbmZvX2FkbWluX3Bhc3N3b3JkJ10gPSAnRWRpdCB0aGlzIGZpZWxkIHRvIHJlc2V0IHRoZSB1c2VycyBwYXNzd29yZCc7CiRsYW5nWydpbmZvX2FkbWluX3JlcGVhdHBhc3N3b3JkJ10gPSAnRWRpdCB0aGlzIGZpZWxkIHRvIHJlc2V0IHRoZSB1c2VycyBwYXNzd29yZCc7CiRsYW5nWydlcnJvcl91c2VybmFtZV9leGlzdHMnXSA9ICdBIHVzZXIgd2l0aCB0aGF0IHVzZXJuYW1lIGFscmVhZHkgZXhpc3RzJzsKJGxhbmdbJ25vY3N2cmVzdWx0cyddID0gJ05vIHJlc3VsdHMgcmV0dXJuZWQgZnJvbSBjc3YgZXhwb3J0JzsKJGxhbmdbJ3Byb21wdF91bmZsZGxlbiddID0gJ0xlbmd0aCBvZiB1c2VybmFtZSBmaWVsZCc7CiRsYW5nWydwcm9tcHRfcHdmbGRsZW4nXSA9ICdMZW5ndGggb2YgcGFzc3dvcmQgZmllbGQnOwokbGFuZ1snZXJyb3JfaW52YWxpZHBhc3N3b3JkbGVuZ3RocyddID0gJ01pbi9NYXggcGFzc3dvcmQgbGVuZ3RocyBhcmUgaW52YWxpZCc7CiRsYW5nWydlcnJvcl9pbnZhbGlkdXNlcm5hbWVsZW5ndGhzJ10gPSAnTWluL01heCB1c2VybmFtZSBsZW5ndGhzIGFyZSBpbnZhbGlkJzsKJGxhbmdbJ2Vycm9yX25vZW1haWxhZGRyZXNzJ10gPSAnV2UgY291bGQgbm90IGZpbmQgYW4gZW1haWwgYWRkcmVzcyBmb3IgdGhpcyBhY2NvdW50JzsKJGxhbmdbJ3VzZXJfYWRkZWQnXSA9ICdVc2VyIEFkZGVkICVzID0gJXMnOwokbGFuZ1sndXNlcl9kZWxldGVkJ10gPSAnVXNlciBEZWxldGVkIHVpZD0lcyc7CiRsYW5nWydwcm9wZXJ0eWZpbHRlciddID0gJ1Byb3BlcnR5JzsKJGxhbmdbJ3ZhbHVlcmVnZXgnXSA9ICdWYWx1ZSAocmVndWxhciBleHByZXNzaW9uKSc7CiRsYW5nWyd3YXJuaW5nX2VmZmVjdHNmaWVsZGxlbmd0aCddID0gJ1dhcm5pbmc6IFRoZXNlIGZpZWxkcyBhZmZlY3QgdGhlIHNpemUgb2YgaW5wdXQgZmllbGRzIGZvciBmb3Jtcy4gIERlY3JlYXNpbmcgdGhpcyBudW1iZXIgb24gYW4gZXhpc3Rpbmcgc2l0ZSBtYXkgbm90IGJlIGFkdmlzYWJsZSc7CiRsYW5nWydjb25maXJtX3N1Ym1pdHByZWZzJ10gPSAnQ2hhbmdlIGFkbWluIHByZWZlcmVuY2VzPyc7CiRsYW5nWydlcnJvcl9lbWFpbGFscmVhZHl1c2VkJ10gPSAnRW1haWwgYWRkcmVzcyBhbHJlYWR5IHVzZWQnOwokbGFuZ1sncHJvbXB0X2FsbG93X2R1cGxpY2F0ZV9lbWFpbHMnXSA9ICdBbGxvdyBkdXBsaWNhdGUgZW1haWxzJzsKJGxhbmdbJ2luZm9fYWxsb3dfZHVwbGljYXRlX2VtYWlscyddID0gJyhhbGxvdyBtdWx0aXBsZSB1c2VycyB3aXRoIHRoZSBzYW1lIGVtYWlsIGFkZHJlc3MpJzsKJGxhbmdbJ2Vycm9yX21pc3Npbmd1c2VybmFtZSddID0gJ1lvdSBkaWQgbm90IGVudGVyIGEgdXNlcm5hbWUnOwokbGFuZ1snZXJyb3JfbWlzc2luZ3Bhc3N3b3JkJ10gPSAnWW91IGRpZCBub3QgZW50ZXIgYSBwYXNzd29yZCc7CiRsYW5nWydmcm9udGVuZHVzZXJfbG9nb3V0J10gPSAnRnJvbnRlbmQgVXNlciBMb2dvdXQnOwokbGFuZ1snZnJvbnRlbmR1c2VyX2xvZ2dlZGluJ10gPSAnRnJvbnRlbmQgVXNlciBMb2dpbic7CiRsYW5nWydlZGl0cHJvcF9pbmZvbXNnJ10gPSAnPGZvbnQgY29sb3I9InJlZCI+PGI+VVNFIENBVVRJT048L2I+IHdoZW4gY2hhbmdpbmcgZXhpc3RpbmcgcHJvcGVydGllcyB0aGF0IGFyZSBhc3NpZ25lZCB0byBncm91cHMsIHlvdSBtYXkgcG90ZW50aWFsbHkgY2F1c2UgZGFtYWdlIGFuZCBicmVhayBhbiBleGlzdGluZyBzaXRlIDxpPihlc3BlY2lhbGx5IGlmIHlvdSByZWR1Y2UgZmllbGQgbGVuZ3RocywgZXRjKTwvaT48L2ZvbnQ+JzsKJGxhbmdbJ2luZm9fc210cHZhbGlkYXRlJ10gPSAnVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB3b3JrIG9uIHdpbmRvd3MnOwokbGFuZ1snbXNnX2RvbnRjcmVhdGV1c2VybmFtZSddID0gJ0RvIG5vdCBjcmVhdGUgYSBwcm9wZXJ0eSBmb3IgdXNlcm5hbWUsIG9yIHNvbWUgc3VjaCB0aGluZyBhcyB0aGlzIGlzIGJ1aWx0aW4gdG8gdGhlIEZyb250RW5kVXNlcnMgbW9kdWxlJzsKJGxhbmdbJ3Byb21wdF9leHBvcnRjc3YnXSA9ICdFeHBvcnQgVXNlcnMgdG8gQ1NWJzsKJGxhbmdbJ2V4cG9ydGNzdiddID0gJ0V4cG9ydCc7CiRsYW5nWydhZG1pbiddID0gJ0FkbWluJzsKJGxhbmdbJ2VkaXRwcm9wJ10gPSAnRWRpdCBQcm9wZXJ0eSc7CiRsYW5nWydtYXhsZW5ndGgnXSA9ICdNYXhpbXVtIExlbmd0aCc7CiRsYW5nWydjcmVhdGVkJ10gPSAnQ3JlYXRlZCc7CiRsYW5nWydzb3J0YnknXSA9ICdTb3J0IEJ5JzsKJGxhbmdbJ3NvcnQnXSA9ICdTb3J0aW5nJzsKJGxhbmdbJ3VzZXJzaW5ncm91cCddID0gJ1VzZXJzIGluIHRoZSBzZWxlY3RlZCBncm91cChzKSc7CiRsYW5nWyd1c2VybGltaXQnXSA9ICdMaW1pdCByZXN1bHRzIHRvJzsKJGxhbmdbJ2Vycm9yX25vZW1haWxmaWVsZCddID0gJ0NvdWxkIG5vdCBmaW5kIGFuIGVtYWlsIGZpZWxkIGZvciB0aGlzIHVzZXIuICBZb3UgbWF5IG5lZWQgdG8gY29udGFjdCB0aGUgc3lzdGVtIGFkbWluaXN0cmF0b3InOwokbGFuZ1sncHJvbXB0X2ZvcmdvdHB3X3BhZ2UnXSA9ICdQYWdlSUQvQWxpYXMgZm9yIEZvcmdvdCBQYXNzd29yZCBmb3JtJzsKJGxhbmdbJ3Byb21wdF9jaGFuZ2VzZXR0aW5nc19wYWdlJ10gPSAnUGFnZUlEL0FsaWFzIGZvciBDaGFuZ2UgU2V0dGluZ3MgZm9ybSc7CiRsYW5nWydwcm9tcHRfbG9naW5fcGFnZSddID0gJ1BhZ2VJRC9BbGlhcyB0byBqdW1wIHRvIGFmdGVyIGxvZ2luIConOwokbGFuZ1sncHJvbXB0X2xvZ291dF9wYWdlJ10gPSAnUGFnZUlEL0FsaWFzIHRvIGp1bXAgdG8gYWZ0ZXIgbG9nb3V0IConOwokbGFuZ1snc29ydG9yZGVyJ10gPSAnU29ydCBvcmRlcic7CiRsYW5nWydwcm9tcHRfbnVtcmVzZXRyZWNvcmQnXSA9ICdBIG51bWJlciBvZiB1c2VycyBhcmUgaW4gdGhlIG1pZGRsZSBvZiByZXNldHRpbmcgbG9zdCBwYXNzd29yZHMuICBDdXJyZW50bHkgdGhpcyBjb3VudCBpcyBhdDonOwokbGFuZ1sncmVtb3ZlMXdlZWsnXSA9ICdSZW1vdmUgYWxsIGVudHJpZXMgbW9yZSB0aGFuIGEgd2VlayBvbGQnOwokbGFuZ1sncmVtb3ZlMW1vbnRoJ10gPSAnUmVtb3ZlIGFsbCBlbnRyaWVzIG1vcmUgdGhhbiBhIG1vbnRoIG9sZCc7CiRsYW5nWydyZW1vdmVhbGwnXSA9ICdSZW1vdmUgYWxsIGVudHJpZXMnOwokbGFuZ1snYXJleW91c3VyZSddID0gJ0FyZSB5b3Ugc3VyZT8nOyAKJGxhbmdbJ2Vycm9yX2ludmFsaWRjb2RlJ10gPSAnQW4gaW52YWxpZCBjb2RlIGhhcyBiZWVuIGVudGVyZWQsIHBsZWFzZSB0cnkgYWdhaW4nOwokbGFuZ1snZXJyb3JfdGVtcGNvZGVub3Rmb3VuZCddID0gJ0EgdGVtcG9yYXJ5IGNvZGUgZm9yIHlvdXIgdXNlciBpZCBjb3VsZCBub3QgYmUgZm91bmQgaW4gdGhlIGRhdGFiYXNlJzsKJGxhbmdbJ2ZvcmdvdHBhc3N3b3JkX3ZlcmlmeXRlbXBsYXRlJ10gPSAnVGVtcGxhdGUgdXNlZCB0byBkaXNwbGF5IHZlcmlmaWNhdGlvbiBmb3JtJzsKJGxhbmdbJ2ZvcmdvdHBhc3N3b3JkX2VtYWlsdGVtcGxhdGUnXSA9ICdUZW1wbGF0ZSB1c2VkIGZvciBmb3Jnb3R0ZW4gcGFzc3dvcmQgZW1haWwnOyAKJGxhbmdbJ2Vycm9yX3Jlc2V0YWxyZWFkeXNlbnQnXSA9ICdFaXRoZXIgeW91cnNlbGYgb3Igc29tZW9uZSBlbHNlIGhhcyBhbHJlYWR5IHRyaWdnZXJlZCBhIHBhc3N3b3JkIHJlc2V0IG9wZXJhdGlvbiBmb3IgdGhpcyBhY2NvdW50LiAgQ2hlY2sgeW91ciBlbWFpbCwgeW91IG1heSBoYXZlIGZ1cnRoZXIgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byByZXNldCB5b3VyIHBhc3N3b3JkIGluIHlvdXIgaW5ib3gnOwokbGFuZ1snZXJyb3JfZGJlcnJvciddID0gJ0RhdGFiYXNlIGVycm9yJzsKJGxhbmdbJ21lc3NhZ2VfZm9yZ290cHdlbWFpbCddID0gJ1lvdSBhcmUgcmVjZWl2aW5nIHRoaXMgbWVzc2FnZSBiZWNhdXNlIHNvbWVib2R5IHRvbGQgb3VyIHNpdGUgdGhhdCB5b3UgaGFkIGxvc3QgeW91ciBwYXNzd29yZC4gIElmIHRoaXMgaXMgdGhlIGNhc2UsIHJlYWQgdGhlIGluc3RydWN0aW9ucyBiZWxvdy4gIElmIHlvdSBkb25cJ3QgaGF2ZSBhIGNsdWUgd2hhdCB0aGlzIGlzLCB0aGVuIHlvdSBhcmUgc2FmZSB0byBkZWxldGUgdGhpcyBtZXNzYWdlLCBhbmQgd2UgdGhhbmsgeW91IGZvciB5b3VyIHRpbWUuJzsKJGxhbmdbJ3Byb21wdF9jb2RlJ10gPSAnQ29kZSc7CiRsYW5nWydtZXNzYWdlX2NvZGUnXSA9ICdUaGUgZm9sbG93aW5nIGNvZGUgaGFzIGJlZW4gZ2VuZXJhdGVkIHJhbmRvbWx5IGdlbmVyYXRlZCBpbiBvcmRlciB0byB2ZXJpZnkgdGhlIHVzZXIgYWNjb3VudC4gIHdoZW4geW91IGNsaWNrIG9uIHRoZSBsaW5rIGJlbG93IHlvdSB3aWxsIGJlIHByZXNlbnRlZCB3aXRoIGEgZmllbGQgdG8gZW50ZXIgdGhpcyBjb2RlLiAgTm9ybWFsbHkgdGhlIGZpZWxkIGlzIHByZS1jb21wbGV0ZWQgZm9yIHlvdSwgYnV0IGluY2FzZSBpdCBpc25cJ3QgdGhlIGNvZGUgaXM6JzsKJGxhbmdbJ3Byb21wdF9saW5rJ10gPSAnQ2xpY2tpbmcgb24gdGhlIGZvbGxvd2luZyBsaW5rIHdpbGwgdGFrZSB5b3UgdG8gdGhlIHdlYnNpdGUgd2hlcmUgeW91IGNhbiBlbnRlciB0aGUgYWJvdmUgY29kZSwgYW5kIHJlc2V0IHlvdXIgcGFzc3dvcmQ6JzsKJGxhbmdbJ2xvc3RwYXNzd29yZF9lbWFpbHN1YmplY3QnXSA9ICdMb3N0IFBhc3N3b3JkJzsKJGxhbmdbJ2Vycm9yX25vbWFpbGVybW9kdWxlJ10gPSAnQ291bGQgbm90IGZpbmQgdGhlIENNU01haWxlciBtb2R1bGUnOwokbGFuZ1snaW5mb19mb3Jnb3Rwd21lc3NhZ2VzZW50J10gPSAnQW4gZW1haWwgaGFzIGJlZW4gc2VudCB0byAlcyB3aXRoIGluc3RydWN0aW9ucyBhcyB0byBob3cgdG8gcmVzZXQgeW91ciBwYXNzd29yZC4gIFRoYW5rIHlvdSc7CiRsYW5nWydsb3N0cHdfbWVzc2FnZSddID0gJ1NvIHlvdSBmb3Jnb3Qgb3IgbG9zdCB5b3VyIHBhc3N3b3JkLiBXZWxsLCB0eXBlIHlvdXIgdXNlcm5hbWUgaW4gaGVyZSwgYW5kIGlmIHdlIGNhbiBmaW5kIHlvdSB3ZSB3aWxsIHNlbmQgeW91IGFuIGVtYWlsIHdpdGggaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byByZXNldCBpdCc7CiRsYW5nWydmb3Jnb3RwYXNzd29yZF90ZW1wbGF0ZSddID0gJ0ZvcmdvdCBQYXNzd29yZCBUZW1wYXRlcyc7CiRsYW5nWydlcnJvcl9wcm9wbm90Zm91bmQnXSA9ICdQcm9wZXJ0eSAlcyBub3QgZm91bmQnOwokbGFuZ1sncHJvcHNmb3VuZCddID0gJ1Byb3BlcnRpZXMgZm91bmQnOwokbGFuZ1snYWRkcHJvcCddID0gJ0FkZCBQcm9wZXJ0eSc7CiRsYW5nWydlcnJvcl9yZXF1aXJlZGZpZWxkJ10gPSAnQSByZXF1aXJlZCBmaWVsZCAoJXMpIHdhcyBlbXB0eSc7CiRsYW5nWydpbmZvX2VtcHR5cGFzc3dvcmRmaWVsZCddID0gJ0VudGVyIGEgbmV3IHBhc3N3b3JkIGhlcmUgdG8gY2hhbmdlIHlvdXIgcGFzc3dvcmQnOwokbGFuZ1snZXJyb3Jfbm90bG9nZ2VkaW4nXSA9ICdZb3UgZG8gbm90IGFwcGVhciB0byBiZSBsb2dnZWQgaW4nOwokbGFuZ1sndXNlcl9zZXR0aW5ncyddID0gJ1NldHRpbmdzJzsKJGxhbmdbJ3VzZXJfcmVnaXN0cmF0aW9uJ10gPSAnUmVnaXN0cmF0aW9uJzsKJGxhbmdbJ2Vycm9yX2FjY291bnRleHBpcmVkJ10gPSAnVGhpcyBhY2NvdW50IGhhcyBleHBpcmVkJzsKJGxhbmdbJ2Vycm9yX2ltcHJvcGVyZW1haWxmb3JtYXQnXSA9ICdJbXByb3BlciBlbWFpbCBhZGRyZXNzIGZvcm1hdHRpbmcnOwokbGFuZ1snZXJyb3JfaW52YWxpZGV4cGlyeWRhdGUnXSA9ICdJbnZhbGlkIGV4cGlyeSBkYXRlJzsKJGxhbmdbJ2Vycm9yX3Byb2JsZW1zZXR0aW5ncHJvcGVydHknXSA9ICdFcnJvciBzZXR0aW5nIHByb3BlcnR5ICVzIGZvciB1c2VyICRzJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRncm91cGlkJ10gPSAnSW52YWxpZCBncm91cCBpZCAlcyc7CiRsYW5nWydzb3J0b3JkZXInXSA9ICdTb3J0IG9yZGVyJzsKJGxhbmdbJ2hpZGRlbmZpZWxkbWFya2VyJ10gPSAnSGlkZGVuIGZpZWxkIG1hcmtlcic7CiRsYW5nWydoaWRkZW5maWVsZGNvbG9yJ10gPSAnSGlkZGVuIGZpZWxkIGNvbG9yJzsKJGxhbmdbJ2hpZGRlbiddID0gJ0hpZGRlbic7CiRsYW5nWydlcnJvcl9kdXBsaWNhdGVuYW1lJ10gPSAnQSBwcm9wZXJ0eSB3aXRoIHRoYXQgbmFtZSBpcyBhbHJlYWR5IGRlZmluZWQnOwokbGFuZ1snZXJyb3Jfbm9wcm9wZXJ0aWVzJ10gPSAnTm8gcHJvcGVydGllcyBkZWZpbmVkJzsKJGxhbmdbJ2Vycm9yX25vcmVsYXRpb25zJ10gPSAnTm8gcHJvcGVydGllcyB3ZXJlIHNlbGVjdGVkIGZvciB0aGlzIGdyb3VwJzsKJGxhbmdbJ2dyb3Vwc2ZvdW5kJ10gPSAnR3JvdXBzIGZvdW5kJzsKJGxhbmdbJ2Vycm9yX29uZWdyb3VwcmVxdWlyZWQnXSA9ICdNZW1iZXJzaGlwIGluIGF0IGxlYXN0IG9uZSBncm91cCBpcyByZXF1aXJlZCc7CiRsYW5nWydwcm9tcHRfcmVxdWlyZW9uZWdyb3VwJ10gPSAnUmVxdWlyZSBtZW1iZXJzaGlwIGluIGF0bGVhc3Qgb25lIGdyb3VwJzsKJGxhbmdbJ2JhY2snXSA9ICdCYWNrJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdfcmVxdWlyZWRfcGFyYW0nXSA9ICclcyBpcyBhIHJlcXVpcmVkIGZpZWxkJzsKJGxhbmdbJ3JlcXVpcmVkZmllbGRtYXJrZXInXSA9ICdNYXJrIHJlcXVpcmVkIGZpZWxkcyB3aXRoJzsKJGxhbmdbJ3JlcXVpcmVkZmllbGRjb2xvciddID0gJ0hpbGl0ZSByZXF1aXJlZCBmaWVsZHMgaW4nOwokbGFuZ1snbmV4dCddID0gJ05leHQnOwokbGFuZ1snZXJyb3JfZ3JvdXBleGlzdHMnXSA9ICdBIEdyb3VwIHdpdGggdGhhdCBuYW1lIGFscmVhZHkgZXhpc3RzJzsKJGxhbmdbJ3JlcXVpcmVkJ10gPSAnUmVxdWlyZWQnOwokbGFuZ1snb3B0aW9uYWwnXSA9ICdPcHRpb25hbCc7CiRsYW5nWydvZmYnXSA9ICdPZmYnOwokbGFuZ1snbGVuZ3RoJ10gPSAnTGVuZ3RoJzsKJGxhbmdbJ2xlbmd0aGNvbW1lbnQnXSA9ICc8YnI+KGNoYXJzIGluIHRoZSB0ZXh0IGlucHV0KSc7CiRsYW5nWydzZWxvcHRpb25zJ10gPSAnRHJvcGRvd24gb3B0aW9ucywgc2VwYXJhdGVkIGJ5IGxpbmUgYnJlYWtzJzsKJGxhbmdbJ3llcyddID0gJ1llcyc7CiRsYW5nWydwcm9tcHQnXSA9ICdQcm9tcHQnOwokbGFuZ1sndHlwZSddID0gJ1R5cGUnOwokbGFuZ1sncmVxdWlyZWQnXSA9ICdSZXF1aXJlZCBGaWVsZCc7CiRsYW5nWyd0ZXh0J10gPSAnVGV4dCc7CiRsYW5nWydjaGVja2JveCddID0gJ0NoZWNrYm94JzsKJGxhbmdbJ2VtYWlsJ10gPSAnRW1haWwnOwokbGFuZ1sndGV4dGFyZWEnXSA9ICdUZXh0YXJlYSc7CiRsYW5nWydkcm9wZG93biddID0gJ0Ryb3Bkb3duJzsKJGxhbmdbJ21zZ19jdXJyZW50bHlsb2dnZWRpbmFzJ10gPSAnV2VsY29tZSc7CiRsYW5nWydsb2dvdXQnXSA9ICdTaWduIG91dCc7CiRsYW5nWydwcm9tcHRfY2hhbmdlc2V0dGluZ3MnXSA9ICdDaGFuZ2UgTXkgU2V0dGluZ3MnOwokbGFuZ1snZXJyb3JfbG9naW5mYWlsZWQnXSA9ICdMb2dpbiBmYWlsZWQgLSBJbnZhbGlkIHVzZXJuYW1lIG9yIHBhc3N3b3JkPyc7CiRsYW5nWydsb2dpbiddID0gJ1NpZ24gaW4nOwokbGFuZ1sncHJvbXB0X3VzZXJuYW1lJ10gPSAnVXNlcm5hbWUnOwokbGFuZ1sncHJvbXB0X3Bhc3N3b3JkJ10gPSAnUGFzc3dvcmQnOwokbGFuZ1sncmVnaXN0ZXInXSA9ICdSZWdpc3Rlcic7CiRsYW5nWydmb3Jnb3RwdyddID0gJ0ZvcmdvdCBZb3VyIFBhc3N3b3JkPyc7CiRsYW5nWydkZWZhdWx0cyddID0gJ0RlZmF1bHRzJzsKJGxhbmdbJ3RlbXBsYXRlJ10gPSAnVGVtcGxhdGUnOwokbGFuZ1snZXJyb3JfdXNlcm5vdGZvdW5kJ10gPSAnVXNlciBJRCBub3QgZm91bmQnOwokbGFuZ1snZXJyb3JfdXNlcm5hbWV0YWtlbiddID0gJ1RoYXQgdXNlcm5hbWUgKCVzKSBpcyBhbHJlYWR5IGluIHVzZSc7CiRsYW5nWydwcm9tcHRfc210cHZhbGlkYXRlJ10gPSAnVXNlIFNNVFAgdG8gdmFsaWRhdGUgZW1haWwgYWRkcmVzc2VzPyc7CiRsYW5nWydwcm9tcHRfbWlucHdsZW4nXSA9ICdNaW5pbXVtIFBhc3N3b3JkIExlbmd0aCc7CiRsYW5nWydwcm9tcHRfbWF4cHdsZW4nXSA9ICdNYXhpbXVtIFBhc3N3b3JkIExlbmd0aCc7CiRsYW5nWydwcm9tcHRfbWludW5sZW4nXSA9ICdNaW5pbXVtIFVzZXJuYW1lIExlbmd0aCc7CiRsYW5nWydwcm9tcHRfbWF4dW5sZW4nXSA9ICdNYXhpbXVtIFVzZXJuYW1lIExlbmd0aCc7CiRsYW5nWydwcm9tcHRfc2Vzc2lvbnRpbWVvdXQnXSA9ICdTZXNzaW9uIFRpbWVvdXQgKHNlY29uZHMpJzsKJGxhbmdbJ3Byb21wdF9hbGxvd2VtYWlscmVnJ10gPSAnQWxsb3cgRW1haWwgUmVnaXN0cmF0aW9uJzsKJGxhbmdbJ3Byb21wdF9kZmx0Z3JvdXAnXSA9ICdEZWZhdWx0IEdyb3VwIGZvciBuZXcgdXNlcnMnOwokbGFuZ1snY2hhbmdlc2V0dGluZ3NfdGVtcGxhdGUnXSA9ICdDaGFuZ2UgU2V0dGluZ3MgVGVtcGxhdGUnOwokbGFuZ1snZXJyb3JfcGFzc3dvcmRtaXNtYXRjaCddID0gJ1Bhc3N3b3JkcyBEbyBub3QgbWF0Y2gnOwokbGFuZ1snZXJyb3JfaW52YWxpZHVzZXJuYW1lJ10gPSAnSW52YWxpZCBVc2VybmFtZSc7CiRsYW5nWydlcnJvcl9pbnZhbGlkcGFzc3dvcmQnXSA9ICdJbnZhbGlkIFBhc3N3b3JkJzsKJGxhbmdbJ2VkaXR1c2VyJ10gPSAnRWRpdCBVc2VyJzsKJGxhbmdbJ3ZhbGlkJ10gPSAnVmFsaWQnOwokbGFuZ1sndXNlcm5hbWUnXSA9ICdVc2VybmFtZSc7CiRsYW5nWydzdGF0dXMnXSA9ICdTdGF0dXMnOwokbGFuZ1snZXJyb3JfbWVtYmVyZ3JvdXBzJ10gPSAnVGhpcyB1c2VyIGlzIG5vdCBhIG1lbWJlciBvZiBhbnkgZ3JvdXBzJzsKJGxhbmdbJ2Vycm9yX3Byb3BlcnRpZXMnXSA9ICdObyBQcm9wZXJ0aWVzJzsKJGxhbmdbJ3ZhbHVlJ10gPSAnVmFsdWUnOwokbGFuZ1snZ3JvdXBzJ10gPSAnR3JvdXBzJzsKJGxhbmdbJ3Byb3BlcnRpZXMnXSA9ICdQcm9wZXJ0aWVzJzsKJGxhbmdbJ3Byb3BuYW1lJ10gPSAnUHJvcGVydHkgTmFtZSc7CiRsYW5nWydwcm9wdmFsdWUnXSA9ICdQcm9wZXJ0eSBWYWx1ZSc7CiRsYW5nWydhZGQnXSA9ICdBZGQnOwokbGFuZ1snZWRpdCddID0gJ0VkaXQnOwokbGFuZ1snZXhwaXJlcyddID0gJ0V4cGlyZXMnOwokbGFuZ1snc3BlY2lmeV9kYXRlJ10gPSAnU3BlY2lmeSBEYXRlJzsKJGxhbmdbJzEyaHJzJ10gPSAnMTIgSG91cnMnOwokbGFuZ1snMjRocnMnXSA9ICcyNCBIb3Vycyc7CiRsYW5nWyc0OGhycyddID0gJzQ4IEhvdXJzJzsKJGxhbmdbJzF3ZWVrJ10gPSAnMSBXZWVrJzsKJGxhbmdbJzJ3ZWVrcyddID0gJzIgV2Vla3MnOwokbGFuZ1snMW1vbnRoJ10gPSAnMSBNb250aCc7CiRsYW5nWyczbW9udGhzJ10gPSAnMyBNb250aHMnOwokbGFuZ1snNm1vbnRocyddID0gJzYgTW9udGhzJzsKJGxhbmdbJzF5ZWFyJ10gPSAnMSBZZWFyJzsKJGxhbmdbJ25ldmVyJ10gPSAnTmV2ZXInOwokbGFuZ1sncG9zdGluc3RhbGxtZXNzYWdlJ10gPSAnTW9kdWxlIGluc3RhbGxlZCBzdWNlc3NmdWxseS48YnIvPkJlIHN1cmUgdG8gc2V0IHRoZSAiTW9kaWZ5IEZyb250RW5kVXNlciBQcm9wZXJ0aWVzIHBlcm1pc3Npb24uIic7CiRsYW5nWydlbWFpbCddID0gJ0VtYWlsIEFkZHJlc3MnOwokbGFuZ1sncGFzc3dvcmQnXSA9ICdQYXNzd29yZCc7CiRsYW5nWydyZXBlYXRwYXNzd29yZCddID0gJ0FnYWluJzsKJGxhbmdbJ2Vycm9yX2dyb3VwbmFtZV9leGlzdHMnXSA9ICdHcm91cCBieSB0aGF0IG5hbWUgYWxyZWFkeSBleGlzdHMnOwokbGFuZ1snZWRpdGdyb3VwJ10gPSAnRWRpdCBHcm91cCc7CiRsYW5nWydzdWJtaXQnXSA9ICdTdWJtaXQnOwokbGFuZ1snY2FuY2VsJ10gPSAnQ2FuY2VsJzsKJGxhbmdbJ2RlbGV0ZSddID0gJ0RlbGV0ZSc7CiRsYW5nWydjb25maXJtX2VkaXRncm91cCddID0gJ0FyZSB5b3Ugc3VyZSB0aGlzIGlzIHRoZSBwcm9wZXIgc2V0dGluZ3MgZm9yIHRoaXMgZ3JvdXA/XG5UdXJuaW5nIGEgcHJvcGVydHkgb2ZmIHdpbGwgbm90IGRlbGV0ZSBhbnkgZW50cmllcyBpbiB0aGUgcHJvcGVydGllcyB0YWJsZSBmb3IgdGhpcyBncm91cC91c2VyLiAgVGhleSB3aWxsIG1lcmVseSBiZSB1bmF2YWlsYWJsZS4nOwokbGFuZ1snYXJleW91c3VyZV9kZWxldGVncm91cCddID0gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBncm91cD8nOwokbGFuZ1snY29uZmlybV9kZWxldGVfcHJvcCddID0gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBjb21wbGV0ZWx5IGRlbGV0ZSB0aGlzIHByb3BlcnR5P1xuRG9pbmcgc28gd2lsbCBhbHNvIGVyYXNlIGFueSB1c2VyIGVudHJpZXMgZm9yIHRoaXMgcHJvcGVydHkuJzsKJGxhbmdbJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcyddID0gJ0luc3VmZmljaWVudCBQYXJhbWV0ZXJzJzsKJGxhbmdbJ2lkJ10gPSAnSWQnOwokbGFuZ1sndXNlcm5hbWUnXSA9ICdVc2VybmFtZSc7CiRsYW5nWyduYW1lJ10gPSAnTmFtZSc7CiRsYW5nWydlcnJvcl9jYW50YWRkZ29ydXAnXSA9ICdQcm9ibGVtIGFkZGluZyBncm91cCc7CiRsYW5nWydlcnJvcl9pbnZhbGlkcGFyYW1zJ10gPSAnSW52YWxpZCBQYXJhbWV0ZXJzJzsKJGxhbmdbJ2FwcGx5ZmlsdGVyJ10gPSAnQXBwbHknOwokbGFuZ1snZmlsdGVyJ10gPSAnRmlsdGVyJzsKJGxhbmdbJ3VzZXJmaWx0ZXInXSA9ICdVc2VybmFtZSBSZWd1bGFyIEV4cHJlc3Npb24nOwokbGFuZ1snZGVzY3JpcHRpb24nXSA9ICdEZXNjcmlwdGlvbic7CiRsYW5nWyduYW1lJ10gPSAnTmFtZSc7CiRsYW5nWydncm91cG5hbWUnXSA9ICdHcm91cCBOYW1lJzsKJGxhbmdbJ2FjY2Vzc2RlbmllZCddID0gJ0FjY2VzcyBEZW5pZWQnOwokbGFuZ1snZXJyb3InXSA9ICdFcnJvcic7CiRsYW5nWydhZGRncm91cCddID0gJ0FkZCBHcm91cCc7CiRsYW5nWydhZGR1c2VyJ10gPSAnQWRkIFVzZXInOwokbGFuZ1snZ3JvdXBzZm91bmQnXSA9ICdHcm91cHMgRm91bmQnOwokbGFuZ1sndXNlcnNmb3VuZCddID0gJ1VzZXJzIGZvdW5kIHRoYXQgbWF0Y2ggdGhlIGNyaXRlcmlhJzsKJGxhbmdbJ2dyb3VwJ10gPSAnR3JvdXAnOwokbGFuZ1snc2VsZWN0Z3JvdXAnXSA9ICdTZWxlY3QgR3JvdXAnOwokbGFuZ1sncmVnaXN0cmF0aW9uX3RlbXBsYXRlJ10gPSAnUmVnaXN0cmF0aW9uIFRlbXBsYXRlJzsKJGxhbmdbJ2xvZ291dF90ZW1wbGF0ZSddID0gJ0xvZ291dCBUZW1wbGF0ZSc7CiRsYW5nWydsb2dpbl90ZW1wbGF0ZSddID0gJ0xvZ2luIFRlbXBsYXRlJzsKJGxhbmdbJ3ByZWZlcmVuY2VzJ10gPSAnUHJlZmVyZW5jZXMnOwokbGFuZ1snZ3JvdXBzJ10gPSAnR3JvdXBzJzsKJGxhbmdbJ3VzZXJzJ10gPSAiVXNlcnMiOwokbGFuZ1snZnJpZW5kbHluYW1lJ10gPSAnRnJvbnRlbmQgVXNlciBNYW5hZ21lbnQnOwokbGFuZ1snbW9kZGVzY3JpcHRpb24nXSA9ICdNYW5hZ2UgRnJvbnRlbmQgVXNlcnMnOwokbGFuZ1snZGVmYXVsdGZyb250cGFnZSddID0gIkRlZmF1bHQgZnJvbnQgcGFnZSI7CiRsYW5nWydsYXN0YWNjZXNzZWRwYWdlJ10gPSAnTGFzdCBhY2Nlc3NlZCBwYWdlJzsKJGxhbmdbJ290aGVycGFnZSddID0gJ090aGVyIHBhZ2U6ICc7CiRsYW5nWydjaGFuZ2Vsb2cnXSA9IDw8PEVPRgo8dWw+CjxsaT4wLjAuMSAtIE9jdG9iZXIsIDIwMDUgLSBJbml0aWFsIE5SUFQgKE5vdCBSZWFkeSBmb3IgUHJpbWUgVGltZSkgcmVsZWFzZTwvbGk+CjxsaT4wLjEuMCAtIE9jdG9iZXIsIDIwMDUgLSBJbml0aWFsIHJlbGVhc2U8L2xpPgo8bGk+MC4xLjEgLSBPY3RvYmVyLCAyMDA1IC0gRml4ZWQgaXNzdWVzIHdpdGggcHJvcGVydGllczwvbGk+CjxsaT4wLjEuMiAtIE9jdG9iZXIsIDIwMDUgLSBBZGRlZCBmb3Jnb3R0ZW4gcGFzc3dvcmQgZnVuY3Rpb25hbGl0eTwvbGk+CjxsaT48cD4wLjEuMyAtIE5vdmVtYmVyLCAyMDA1PC9wPgogICAgPHA+QWRkZWQgdGhlIGFiaWxpdHkgdG8gc3BlY2lmeSBhIHJlZGlyZWN0IHBhZ2Ugb24gbG9naW4sIGxvZ291dCwgZm9yZ290IHBhc3N3b3JkLCBhbmQgY2hhbmdlIHNldHRpbmdzLCBhbmQgYWRkZWQgdGhlIHJldHVybnRvIGFuZCBmb3JtIHBhcmFtZXRlcnMgdG8gdGhlIHVzZXIgc2lkZSBvZiB0aGluZ3MsIGFsc28gZGlkIGEgY291cGxlIGxmIGxpdHRsZSBjbGVhbnVwcy4gIFRoaXMgdmVyc2lvbiByZXF1aXJlcyB2MC4xMSBhbmQgYWJvdmUgZm9yIGNlcnRhaW4uPC9wPjwvbGk+CjxsaT4wLjEuNCAtIE5vdmVtYmVyLCAyMDA1IC0gVmVyeSBtaW5vciBjaGFuZ2Ugd2l0aCByZXNwZWN0IHRvIGEgZm9yZ290dGVuIGFuZCBubyBsb25nZXIgbmVlZGVkIGZ1bmN0aW9uIGNhbGw8L2xpPgo8bGk+PHA+MC4xLjUgLSBOb3ZlbWJlciwgMjAwNTwvcD4KICAgIDxwPkFub3RoZXIgdmVyeSBtaW5vciBjaGFuZ2UsIGFkZGVkIHNvbWUgdGV4dCB0byB0aGUgUG9zdEluc3RhbGwgbWVzc2FnZS48L3A+PC9saT4KPGxpPjxwPjAuMS42IC0gSmFudWFyeSwgMjAwNjxwPgogICAgPHA+Q2hhbmdlcyB0byB0aGUgcGVybWlzc2lvbiBtb2RlbCwgYW5kIG1pbm9yIGJ1ZyBmaXhlcyB0byB0aGUgcHJlZmVyZW5jZXMuICBBbHNvIHNvbWUgcGhwNSBmaXhlcyBidXQgSSBhbSBzdXJlIHRoYXQgdGhlcmUgYXJlIG1vcmUgb3V0IHRoZXJlLjwvcD48L2xpPgo8bGk+PHA+MC4xLjcgLSBKYW51YXJ5LCAyMDA2PHA+CiAgICA8cD5NYW55IHRoYW5rcyB0byA8Yj5rYXRvbjwvYj4gZm9yIGFkZGluZyB0aGUgdGV4dGFyZWEgYW5kIGRyb3Bkb3duIHByb3BlcnR5IHR5cGVzLjwvcD4KICAgIDxwPkZpeGVzIHRvIHRoZSBwcm9wZXJ0eSBhZGRpbmcgdG8gZml4IHByb2JsZW1zIHdpdGggc3BhY2VzIGluIHByb3BlcnR5IG5hbWVzICh3ZSBubyBsb25nZXIgbGV0IHRoYXQgaGFwcGVuKS48L3A+CjwvbGk+CjxsaT48cD4xLjAuMCAtIEZlYnJ1YXJ5LCAyMDA2PHA+CiAgICA8cD5BZGRlZCBmaWx0ZXJpbmcgYW5kIHJvdyBsaW1pdGluZyB0byB0aGUgYWRtaW4gcGFuZWwuIFRoaXMgd2lsbCBoYXZlIGJpZyBiZW5lZml0cyB0byB0aG9zZSB0aGF0IGFyZSB1c2luZyB0aGlzIG1vZHVsZSBmb3IgaGlnaCB0cmFmaWMsIGFuZCBoaWdoIHVzZXIgc2l0ZXMuPC9wPgogICAgPHA+QWRkZWQgc29ydGluZyB0byB0aGUgYWRtaW4gcGFuZWw8L3A+CiAgICA8cD5BZGRlZCBtYXggbGVuZ3RoIGFiaWxpdHkgdG8gdGV4dCBhbmQgZW1haWwgZmllbGRzPC9wPgogICAgPHA+Rml4ZWQgYSBzbWFsbCBwcm9ibGVtIHdpdGggdGhlIGRlZmF1bHQgZ3JvdXAgbm90IGJlaW5nIGNoZWNrZWQgd2hlbiBhZGRpbmcgYSB1c2VyPC9wPgogICAgPHA+U2F2ZSBmaWx0ZXIgc2V0dGluZ3MgaW4gcHJlZmVyZW5jZXMsIGFuZCB0aGUgYWN0aXZlIHRhYiB0b28uPC9wPgogICAgPHA+RGVsZXRlIHVzZXIgcHJvcGVydGllcyB3aGVuIGEgcHJvcGVydHkgaXMgZGVsZXRlZCA8ZW0+Tm90ZTwvZW0+LCBub3Qgd2hlbiBpdCBpcyBkaXNhYmxlZCBpbiB0aGUgZWRpdCBncm91cCBkaWFsb2c8L3A+CiAgICA8cD5BZGQgY29uZmlybWF0aW9uIG1lc3NhZ2UgaW4gZWRpdCBncm91cHMuPC9wPgogICAgPHA+QWRkZWQgYSBjb3VwbGUgbW9yZSBjb25maXJtYXRpb24gbWVzc2FnZXMuPC9wPgogICAgPHA+QWRkZWQgQ1NWIEV4cG9ydCBvcHRpb248L3A+CiAgICA8cD5Ub2RvIC0gQWRkIHByZWZlcmVuY2VzIGZvciB1c2VybmFtZSBhbmQgcGFzc3dvcmQgZmllbGRsZW5ndGg8L3A+CjwvbGk+CjxsaT48cD4xLjAuMSAtIE1hcmNoLCAyMDA2PHA+CiAgICA8cD5BZGRlZCB0aGUgYWJpbGl0eSB0byBjaGVjayBmb3IgZHVwbGljYXRlIGVtYWlsIGFkZHJlc3NlczwvcD4KICAgIDxwPkZpeCBwcm9ibGVtIHdoZXJlIGV4cGlyeSBkYXRlIHdhcyBiZWluZyBtb2RpZmllZCB3aGVuIGFkbWluIG1vZGlmaWVkIHVzZXIgc2V0dGluZ3M8L3A+CiAgICA8cD5BZGQgYSBjb25maXJtYXRpb24gbWVzc2FnZSB0byB0aGUgcHJlZmVyZW5jZXMgc3VibWl0IGJ1dHRvbjwvcD4KICAgIDxwPkZpeGVkIGEgbWlub3IgYnVnIHdoZW4gY291dGluZyB0aGUgbnVtYmVyIG9mIHVzZXJzIGluIGEgZ3JvdXA8L3A+CiAgICA8cD5GaXhlcyB0byB0aGUgc2l6ZSBvZiB1c2VybmFtZSBhbmQgcGFzc3dvcmQgZmllbGRzLCBhbmQgbWF4bGVuZ3RoPC9wPgogICAgPHA+QWRkZWQgYWR2YW5jZWQgZmlsdGVyaW5nIG9uIHByb3BlcnRpZXM8L3A+CiAgICA8cD5DaGFuZ2VzIHRvIGxhYmVsaW5nIGluIGFkZCBvciBlZGl0IHVzZXI8L3A+CiAgICA8cD5GaXhlcyB0byBwcm9ibGVtcyB3aXRoIGlubGluZSBhbmQgbm9uIGlubGluZSBmb3JtcywgdGhlIHBhc3N3b3JkIGlzIG5ldmVyIHNlbnQgb24gdGhlIGdldCBsaW5lPC9wPgogICAgPHA+Q2hhbmdlZCB0byByZXF1aXJlIENNUyAwLjEyLWJldGEyIGF0IGEgbWluaW11bSAoZm9yIHNhZmV0eSBwdXJwb3Nlcyk8L3A+CjwvbGk+CjxsaT48cD4xLjAuMiAtIE1hcmNoLCAyMDA2PHA+CiAgICA8cD5Nb3JlIGZpZWxkIGxlbmd0aCBmaXhlczwvcD4KPC9saT4KPGxpPjxwPjEuMC4zIC0gTWFyY2gsIDIwMDY8cD4KICAgIDxwPkV4cG9ydCB0byBzbWFydHkgYWxsIG9mIHRoZSB1c2VyIHByb3BlcnRpZXMgd2hlbiB0aGV5IGFyZSBsb2dnZWQgaW48L3A+CjwvbGk+CjxsaT48cD4xLjAuNCAtIE1heSwgMjAwNjxwPgogICAgPHA+Rml4ZXMgdG8gdGhlIGV4cG9ydCBjb2RlPC9wPgogICAgPHA+Q29kZSBjbGVhbnVwIChhbHBoYWJldGl6ZSBmdW5jdGlvbnMpPC9wPgogICAgPHA+TWlub3IgZml4ZXMgYW5kIGVuaGFuY2VtZW50cyAocmVjb21tZW5kZWQgYnkgbmlsczczKSBmb3IgZGVhbGluZyB3aXRoIHRoZSBjaGFuZ2UgcGFzc3dvcmQgc3R1ZmYuPC9wPgogICAgPHA+UmVtb3ZlZCB0aGUgcmVxdWlyZW1lbnQgZm9yIENNUyAwLjEyLCBhbmQgcHV0IGl0IGJhY2sgdG8gMC4xMS4yPC9wPgogICAgPHA+QWRkZWQgdGhlIFwnc2lsZW50XCcgZm9ybTwvcD4KICAgIDxwPkNsZWFuZWQgdXAgZGF0YWJhc2UgYWNjZXNzIHN0dWZmIGZvciBwZXJmb3JtYW5jZSByZWFzb25zIChob3BlZnVsbHkpPC9wPgogICAgPHA+QWRkZWQgY29weXJpZ2h0IGluZm88L3A+CiAgICA8cD5BZGRlZCBtYWNyb3MgZm9yIHJlZGlyZWN0byB0byBhIHVzZXIgc3BlY2lmaWMgcGFnZSBvbiBsb2dpbiBvciBsb2dvdXQ8L3A+CiAgICA8cD5Ud2Vha3MgdG8gdGhlIGFkbWluIHByZWZlcmVuY2VzIHRhYjwvcD4KPC9saT4KPGxpPjxwPjEuMC41IC0gTWF5LCAyMDA2PHA+CiAgICA8cD5GaXhlZCBhIHByb2JsZW0gd2l0aCBleHBpcnkgZGF0ZXM8L3A+CiAgICA8cD5TdGFydCBzcGxpdHRpbmcgdGhlIGNvZGUgdXAgaW50byBzZXZlcmFsIGZpbGVzPC9wPgo8L2xpPgpFT0Y7CiRsYW5nWydoZWxwJ10gPSA8PDxFT0YKPGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPlRoaXMgbW9kdWxlIGFsbG93cyBtYW5hZ2VtZW50IGFuZCBhZG1pbmlzdHJhdGlvbiBvZiBmcm9udCBlbmQgdXNlcnMgPGk+KHVzZXJzIHdobyBoYXZlIG5vIGFkbWluIGFjY2Vzc3MpPC9pPi4gIEl0IGFsbG93cyBjcmVhdGlvbiBvZiB1c2VyIGdyb3VwcywgYW5kIHVzZXIgYWNjb3VudHMgYW5kIGFsbG93cyB1c2VycyB0byBsb2dpbiBhbmQgbG9nb3V0LiAgaXQgY2FuIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgQ3VzdG9tQ29udGVudCBtb2R1bGUgdG8gZGlzcGxheSBkaWZmZXJlbnQgY29udGVudCB0byBkaWZmZXJlbnQgdXNlcnMgb25jZSB0aGV5IGhhdmUgbG9nZ2VkIGluPC9wPgo8aDM+RmVhdHVyZXM8L2gzPgo8dWw+CjxsaT48cD5Vc2VyIGFjY291bnQgZXhwaXJhdGlvbi4gIFlvdSBjYW4gY3JlYXRlIHRlbXBvcmFyeSB1c2VyczwvcD48L2xpPgo8bGk+PHA+R3JvdXAgUHJvcGVydGllcy4gIFlvdSBjYW4gYXNrIGZvciBkaWZmZXJlbnQgaW5mb3JtYXRpb24gZnJvbSBtZW1iZXJzIG9mIGRpZmZlcmVudCBncm91cHM8L3A+PC9saT4KPGxpPjxwPkNhcGFibGUgb2YgaGFuZGxpbmcgaHVuZHJlZHMgb2YgdXNlcnM8L3A+PC9saT4KPGxpPjxwPkhhcyBhbiBleHRlbnNpdmUgQVBJIGZvciBhZGRpbmcgZnVuY3Rpb25hbGl0eTwvcD48L2xpPgo8L3VsPgo8aDM+SG93IGRvIEkgdXNlIGl0PC9oMz4KPHVsPgo8bGk+PHA+QWZ0ZXIgaW5zdGFsbGF0aW9uIHlvdSBjYW4gYWNjZXNzIGFkbWluIHBhbmVsIHRvIHRoZSBGcm9udEVuZFVzZXJzIG1vZHVsZSB1bmRlciB0aGUgJnF1b3Q7VXNlcnMgJiBnR3JvdXBzJnF1b3Q7IG1lbnUuPC9wPjwvbGk+CjxsaT4KPHA+U2Vjb25kbHksIHlvdSBzaG91bGQgZGVmaW5lIHByb3BlcnRpZXMuICBQcm9wZXJ0aWVzIGFyZSBlc3NlbnRpYWxseSBmaWVsZCBkZWZpbml0aW9ucywgaGVyZSB5b3Ugc3BlY2lmeSB0aGUgdHlwZSBvZiBpbmZvcm1hdGlvbiB5b3Ugd2FudCB0byBnYXRoZXIsIGFuZCBsaW1pdHMuIGkuZTogIE5hbWUsIEFnZSwgQ2l0eSwgU3RhdGUsIENvdW50cnksIEVtYWlsIGFkZHJlc3MsIGV0Yy48L3A+CjxwPjxiPk5vdGU6PC9iPiBZb3UgZG8gbm90IG5lZWQgdG8gZGVmaW5lIHByb3BlcnRpZXMgZm9yIHVzZXJuYW1lIGFuZCBwYXNzd29yZCwgdGhlc2Ugd2lsbCBiZSBwcm92aWRlZCBmb3IgeW91PC9iPgo8L2xpPgo8bGk+PHA+TmV4dCB5b3Ugc2hvdWxkIGNyZWF0ZSBvbmUgb3IgbW9yZSB1c2VyIGdyb3Vwcy4gIFdoZW4geW91IGNyZWF0ZSBhIGdyb3VwLCB5b3UgYXJlIGFza2VkIGZvciBhIGdyb3VwIG5hbWUsIGEgZGVzY3JpcHRpb24gYW5kIHRvIGFzc29jaWF0ZSBwcm9wZXJ0aWVzIHdpdGggdGhhdCBncm91cCwgc3BlY2lmeSB0aGUgcHJvcGVydGllcyBzb3J0IG9yZGVyLCBhbmQgd2V0aGVyIGl0IGlzIGFuIG9wdGlvbmFsLCByZXF1aXJlZCwgb3IgaGlkZGVuIGZpZWxkIDxpPihvZmYgaXMgYWxzbyB2YWxpZCk8L2k+PC9wPjwvbGk+CjxsaT48cD48Yj5Ob3RlOjwvYj4gQmVmb3JlIHByb2NlZWRpbmcsIHlvdSBzaG91bGQgZW5zdXJlIHRoYXQgdGhlIHByZWZlcmVuY2VzIGFyZSBzZXQgY29ycmVjdGx5LjwvcD48L2xpPgo8bGk+PHA+VGhpcmRseSB5b3Ugc2hvdWxkIGNyZWF0ZSBzb21lIHVzZXJzLiAgQWRkaW5nIHVzZXJzIGlzIGEgdHdvIHN0ZXAgcHJvY2Vzcy4gIFdoZW4gY3JlYXRpbmcgYSB1c2VyIHlvdSBhcmUgYXNrZWQgZm9yIHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQsIGFuZCBhbiBleHBpcnkgZGF0ZSBmb3IgdGhhdCB1c2VyLiAgWW91IHRoZW4gbXVzdCBzZWxlY3QgdGhlIGdyb3VwcyB0aGF0IHRoYXQgdXNlciBpcyBhIG1lbWJlciBvZiwgYW5kIGNsaWNrIFwnTmV4dFwnPC9wPgo8cD48ZW0+Tm90ZTogPC9lbT5UaGlzIGlzIGEgbGFib3VyIGludGVuc2l2ZSBhbmQgYm9yaW5nIHByb2Nlc3MsIGl0IGlzIGVhc2llciB0byBsZXQgdXNlcnMgcmVnaXN0ZXIgdGhlbXNlbHZlcywgYW5kIHRoZW4geW91IGNhbiBlZGl0IHRoZWlyIGdyb3VwIGluZm9ybWF0aW9uLiAgYnV0IGZvciB0ZXN0aW5nIHB1cnBvc2VzLCBwbGVhc2UgY3JlYXRlIGF0IGxlc3Qgb25lIHVzZXI8L3A+PC9saT4KPGxpPjxwPkxhc3RseSwgYWZ0ZXIgdGhlIHN5c3RlbSBoYXMgZGV0ZXJtaW5lZCBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIGZpZWxkcyB0byBiZSBwcmVzZW50ZWQgZm9yIHRoYXQgdXNlciwgeW91IGFyZSBwcmVzZW50ZWQgd2l0aCBhIGZvcm0gYXNraW5nIGZvciBhbGwgb2YgdGhlIHJlcXVpcmVkIHVzZXIgaW5mb3JtYXRpb24uICBDb21wbGV0ZSB0aGlzIGZvcm0gdG8gY29tcGxldGUgdGhlIHVzZXIgYWRkaXRpb248L3A+PC9saT4KPGxpPjxwPllvdSBhcmUgbm93IHJlYWR5IHRvIGFkZCB0aGUgZnJvbnQgZW5kIGZ1bmN0aW9uYWxpdHkgdG8geW91ciBzaXRlLiAgVGhpcyBpcyBhcyBzaW1wbGUgYXMgYWRkaW5nIHRoZSB7Y21zX21vZHVsZSBtb2R1bGU9RnJvbnRFbmRVc2Vyc30gdGFnIHRvIHlvdXIgcGFnZSBvciB0ZW1wbGF0ZTwvcD48L2xpPgo8L3VsPgo8aDM+U3VwcG9ydDwvaDM+CjxwPlRoaXMgbW9kdWxlIGRvZXMgbm90IGluY2x1ZGUgY29tbWVyY2lhbCBzdXBwb3J0LiBIb3dldmVyLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0OjwvcD4KPHVsPgo8bGk+Rm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZSwgRkFRcywgb3IgdG8gZmlsZSBhIEJ1ZyBSZXBvcnQgb3IgYnV5IGNvbW1lcmNpYWwgc3VwcG9ydCwgcGxlYXNlIHZpc2l0IGNhbGd1eVwncwptb2R1bGUgaG9tZXBhZ2UgYXQgPGEgaHJlZj0iaHR0cDovL3RlY2hjb20uZHluZG5zLm9yZyI+dGVjaGNvbS5keW5kbnMub3JnPC9hPi48L2xpPgo8bGk+QWRkaXRpb25hbCBkaXNjdXNzaW9uIG9mIHRoaXMgbW9kdWxlIG1heSBhbHNvIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSJodHRwOi8vZm9ydW0uY21zbWFkZXNpbXBsZS5vcmciPkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LjwvbGk+CjxsaT5UaGUgYXV0aG9yLCBjYWxndXkxMDAwLCBjYW4gb2Z0ZW4gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9ImlyYzovL2lyYy5mcmVlbm9kZS5uZXQvI2NtcyI+Q01TIElSQyBDaGFubmVsPC9hPi48L2xpPgo8bGk+TGFzdGx5LCB5b3UgbWF5IGhhdmUgc29tZSBzdWNjZXNzIGVtYWlsaW5nIHRoZSBhdXRob3IgZGlyZWN0bHkuPC9saT4gIAo8L3VsPgo8aDM+UGFyYW1ldGVyczwvaDM+Cjx1bD4KPGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gZm9ybT0ibmFtZSI8L2xpPgo8cD5Gb3JtczoKPHVsPgogPGxpPjxlbT5sb2dpbjwvZW0+IC0gRGlzcGxheSB0aGUgbG9naW4gZm9ybTwvbGk+CiA8bGk+PGVtPmxvZ291dDwvZW0+IC0gRGlzcGxheSB0aGUgbG9nb3V0IGZvcm08L2xpPgogPGxpPjxlbT5jaGFuZ2VzZXR0aW5nczwvZW0+IC0gRGlzcGxheSB0aGUgY2hhbmdlIHNldHRpbmdzIGZvcm08L2xpPgogPGxpPjxlbT5mb3Jnb3RwdzwvZW0+IC0gRGlzcGxheSB0aGUgZm9yZ290IHBhc3N3b3JkIGZvcm08L2xpPgo8bGk+PGVtPnNpbGVudDwvZW0+ID0gRGlzcGxheSBub3RoaW5nLCBidXQgZXhwb3J0IHByb3BlcnRpZXMgYW5kIG90aGVyIHNtYXJ0eSB2YXJpYWJsZXMgZm9yIHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXIuICBJZiBubyB1c2VyIGlzIGxvZ2dlZCBpbiwgdGhlbiBubyB2YXJpYWJsZXMgYXJlIGV4cG9ydGVkLjwvbGk+CjwvdWw+CjwvcD4KPGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gcmV0dXJudG89InBhZ2UiPC9saT4KPHA+VXNlZCB3aXRoIHRoZSBsb2dpbiwgbG9nb3V0LCBhbmQgY2hhbmdlc2V0dGluZ3MgZm9ybXMsIHRoaXMgcGFyYW1ldGVyIGNvbnRhaW5zIHRoZSBwYWdlIGlkIG9yIGFsaWFzIG9mIGEgcGFnZSB0byByZWRpcmVjdCB0bywgd2hlbiB0aGUgZm9ybSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY29tcGxldGVkPC9wPgo8L3VsPgo8cD5BcyBwZXIgdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBhcy1pcy4gUGxlYXNlIHJlYWQgdGhlIHRleHQKb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPgo8aDM+UmVxdWlyZW1lbnRzPC9oMz4KPHA+SW4gb3JkZXIgdG8gaW1wbGVtZW50IHRoZSBmb3Jnb3R0ZW4gcGFzc3dvcmQgZnVuY3Rpb25hbGl0eSwgdGhpcyBtb2R1bGUgcmVxdWlyZXMgdGhlIENNU01haWxlciBtb2R1bGUgdG8gYmUgcHJldmlvdXNseSBpbnN0YWxsZWQ8L3A+CjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPgo8cD5Db3B5cmlnaHQgJmNvcHk7IDIwMDUsIFJvYmVydCBDYW1wYmVsIDxhIGhyZWY9Im1haWx0bzpjYWxndXkxMDAwQGhvdG1haWwuY29tIj4mbHQ7Y2FsZ3V5MTAwMEBob3RtYWlsLmNvbSZndDs8L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+CjxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIHJlbGVhc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPkdOVSBQdWJsaWMgTGljZW5zZTwvYT4uIFlvdSBtdXN0IGFncmVlIHRvIHRoaXMgbGljZW5zZSBiZWZvcmUgdXNpbmcgdGhlIG1vZHVsZS48L3A+CkVPRjsKPz4K]]></data>
	</file>
	<file>
	  <filename>/lang/ext/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/ext/de_DE.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2JhY2tlbmRfZ3JvdXAnXSA9ICdCYWNrZW5kLUdydXBwZSc7CiRsYW5nWydpbmZvX3N0YXInXSA9ICcqIERpZSBmb2xnZW5kZW4gTWFrcm9zIGsmb3VtbDtubmVuIGluIGRpZXNlbiBGZWxkZXJuIHZlcndlbmRldCB3ZXJkZW46IHskdXNlcm5hbWV9JzsKJGxhbmdbJ2luZm9fYWRtaW5fcGFzc3dvcmQnXSA9ICdCZWFyYmVpdGVuIHNpZSBkaWVzZXMgRmVsZCwgdW0gZGFzIFBhc3N3b3J0IGRlcyBVc2VycyB6dXImdXVtbDtja3p1c2V0emVuLic7CiRsYW5nWydpbmZvX2FkbWluX3JlcGVhdHBhc3N3b3JkJ10gPSAnQmVhcmJlaXRlbiBzaWUgZGllc2VzIEZlbGQsIHVtIGRhcyBQYXNzd29ydCBkZXMgVXNlcnMgenVyJnV1bWw7Y2t6dXNldHplbi4nOwokbGFuZ1snZXJyb3JfdXNlcm5hbWVfZXhpc3RzJ10gPSAnRXMgZXhpc3RpZXJ0IGJlcmVpdHMgZWluIFVzZXIgbWl0IGRpZXNlbSBVc2VybmFtZW4uJzsKJGxhbmdbJ25vY3N2cmVzdWx0cyddID0gJ1ZvbSBDU1YtRXhwb3J0IHd1cmRlbiBrZWluZSBEYXRlbiB6dXImdXVtbDtja2dlZ2ViZW4uJzsKJGxhbmdbJ3Byb21wdF91bmZsZGxlbiddID0gJ0wmYXVtbDtuZ2UgZGVzIFVzZXJuYW1lLUZlbGRlcyc7CiRsYW5nWydwcm9tcHRfcHdmbGRsZW4nXSA9ICdMJmF1bWw7bmdlIGRlcyBQYXNzd29ydC1GZWxkZXMnOwokbGFuZ1snZXJyb3JfaW52YWxpZHBhc3N3b3JkbGVuZ3RocyddID0gJ0JlaW0gVW50ZXItLyZVdW1sO2JlcnNjaHJlaXRlbiBkaWVzZXIgTCZhdW1sO25nZSBpc3QgZGFzIFBhc3N3b3J0IHVuZyZ1dW1sO2x0aWcuJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWR1c2VybmFtZWxlbmd0aHMnXSA9ICdCZWltIFVudGVyLS8mVXVtbDtiZXJzY2hyZWl0ZW4gZGllc2VyIEwmYXVtbDtuZ2UgaXN0IGRlciBVc2VybmFtZSB1bmcmdXVtbDtsdGlnLic7CiRsYW5nWydlcnJvcl9ub2VtYWlsYWRkcmVzcyddID0gJ0YmdXVtbDtyIGRpZXNlcyBVc2VyLUtvbnRvIHd1cmRlIGtlaW5lIEVtYWlsYWRyZXNzZSBnZWZ1bmRlbi4nOwokbGFuZ1sndXNlcl9hZGRlZCddID0gJ1VzZXIgJXMgPSAlcyBoaW56dWdlZiZ1dW1sO2d0JzsKJGxhbmdbJ3VzZXJfZGVsZXRlZCddID0gJ1VzZXIgdWlkPSVzIGdlbCZvdW1sO3NjaHQnOwokbGFuZ1sncHJvcGVydHlmaWx0ZXInXSA9ICdFaWdlbnNjaGFmdCc7CiRsYW5nWyd2YWx1ZXJlZ2V4J10gPSAnV2VydCAocmVndWwmYXVtbDtyZXIgQXVzZHJ1Y2spJzsKJGxhbmdbJ3dhcm5pbmdfZWZmZWN0c2ZpZWxkbGVuZ3RoJ10gPSAnV2FybnVuZzogRGllc2UgRmVsZGVyIGJlZWluZmx1c3NlbiBkaWUgR3Imb3VtbDsmc3psaWc7ZSBkZXIgRWluZ2FiZWZlbGRlciBpbiBGb3JtdWxhcmVuLiAgRGllIFZlcnJpbmdlcnVuZyBkaWVzZXIgWmFobCBpc3QgZGFoZXIgYXVmIGVpbmVyIGV4aXN0aWVyZW5kZW4gU2VpdGUgbmljaHQgcmF0c2FtLic7CiRsYW5nWydjb25maXJtX3N1Ym1pdHByZWZzJ10gPSAnQWRtaW5pc3RyYXRvci1FaW5zdGVsbHVuZ2VuICZhdW1sO25kZXJuPyc7CiRsYW5nWydlcnJvcl9lbWFpbGFscmVhZHl1c2VkJ10gPSAnRGllc2UgRW1haWxhZHJlc3NlIGlzdCBiZXJlaXRzIGluIFZlcndlbmR1bmcuJzsKJGxhbmdbJ3Byb21wdF9hbGxvd19kdXBsaWNhdGVfZW1haWxzJ10gPSAnRW1haWwtRHVwbGlrYXRlIGVybGF1YmVuJzsKJGxhbmdbJ2luZm9fYWxsb3dfZHVwbGljYXRlX2VtYWlscyddID0gJyhlcmxhdWJ0IG1laHJlcmVuIFVzZXJuIGRpZSBOdXR6dW5nIGRlciBnbGVpY2hlbiBFbWFpbC1BZHJlc3NlKSc7CiRsYW5nWydlcnJvcl9taXNzaW5ndXNlcm5hbWUnXSA9ICdTaWUgaGFiZW4ga2VpbmVuIFVzZXJuYW1lbiBlaW5nZWdlYmVuLic7CiRsYW5nWydlcnJvcl9taXNzaW5ncGFzc3dvcmQnXSA9ICdTaWUgaGFiZW4ga2VpbiBQYXNzd29ydCBlaW5nZWdlYmVuLic7CiRsYW5nWydmcm9udGVuZHVzZXJfbG9nb3V0J10gPSAnRnJvbnRlbmRVc2VyIC0gQWJtZWxkdW5nJzsKJGxhbmdbJ2Zyb250ZW5kdXNlcl9sb2dnZWRpbiddID0gJ0Zyb250ZW5kVXNlciAtIEFubWVsZHVuZyc7CiRsYW5nWydlZGl0cHJvcF9pbmZvbXNnJ10gPSAnPGZvbnQgY29sb3I9JnF1b3Q7cmVkJnF1b3Q7PjxiPkFDSFRVTkc8L2I+IFdlbm4gc2llIGJlcmVpdHMgZXhpc3RpZXJlbmRlIEVpZ2Vuc2NoYWZ0ZW4gJmF1bWw7bmRlcm4sIGRpZSBzY2hvbiBHcnVwcGVuIHp1Z2VvcmRuZXQgc2luZCwgaXN0IGVzIG0mb3VtbDtnbGljaCwgZGFzIGlocmUgU2VpdGUgbSZvdW1sO2dsaWNoZXJ3ZWlzZSB6ZXJzdCZvdW1sO3J0IHdpcmQgPGk+KGJlc29uZGVycywgd2VubiBzaWUgZGllIEwmYXVtbDtuZ2UgZGVyIEZlbGRlciByZWR1emllcmVuLCBldGMpLjwvaT48L2ZvbnQ+JzsKJGxhbmdbJ2luZm9fc210cHZhbGlkYXRlJ10gPSAnRGllcyBmdW5rdGlvbmllcnQgTklDSFQgdW50ZXIgV2luZG93cy4nOwokbGFuZ1snbXNnX2RvbnRjcmVhdGV1c2VybmFtZSddID0gJ0Vyc3RlbGxlbiBzaWUgbmllbWFscyBlaW5lIEVpZ2Vuc2NoYWZ0IGYmdXVtbDtyIGVpbmVuIFVzZXJuYW1lbiwgYXVjaCB3ZW5uIGVzIG1pdCBkZW0gRnJvbnRFbmRVc2Vycy1Nb2R1bCBtJm91bWw7Z2xpY2ggaXN0Lic7CiRsYW5nWydwcm9tcHRfZXhwb3J0Y3N2J10gPSAnVXNlciBpbiBlaW5lIENTVi1EYXRlaSBleHBvcnRpZXJlbic7CiRsYW5nWydleHBvcnRjc3YnXSA9ICdFeHBvcnRpZXJlbic7CiRsYW5nWydhZG1pbiddID0gJ0FkbWluaXN0cmF0b3InOwokbGFuZ1snZWRpdHByb3AnXSA9ICdFaWdlbnNjaGFmdCBiZWFyYmVpdGVuJzsKJGxhbmdbJ21heGxlbmd0aCddID0gJ01heGltYWxlIEwmYXVtbDtuZ2UnOwokbGFuZ1snY3JlYXRlZCddID0gJ0Vyc3RlbGx0JzsKJGxhbmdbJ3NvcnRieSddID0gJ1NvcnRpZXJlbiBuYWNoJzsKJGxhbmdbJ3NvcnQnXSA9ICdTb3J0aWVydW5nJzsKJGxhbmdbJ3VzZXJzaW5ncm91cCddID0gJ1VzZXIgaW4gZGVyL2RlbiBhdXNnZXcmYXVtbDtobHRlbiBHcnVwcGUobiknOwokbGFuZ1sndXNlcmxpbWl0J10gPSAnRXJnZWJuaXNzZSBiZXNjaHImYXVtbDtua2VuIGF1Zic7CiRsYW5nWydlcnJvcl9ub2VtYWlsZmllbGQnXSA9ICdGJnV1bWw7ciBkaWVzZW4gVXNlciB3dXJkZSBkYXMgRW1haWwtRmVsZCBuaWNodCBnZWZ1bmRlbi4gIEJpdHRlIGtvbnRha3RpZXJlbiBTaWUgZGVuIFN5c3RlbWFkbWluaXN0cmF0b3IuJzsKJGxhbmdbJ3Byb21wdF9mb3Jnb3Rwd19wYWdlJ10gPSAnUGFnZUlEL0FsaWFzIGYmdXVtbDtyIGRhcyBGb3JtdWxhciAmcXVvdDtQYXNzd29ydCB2ZXJnZXNzZW4mcXVvdDsnOwokbGFuZ1sncHJvbXB0X2NoYW5nZXNldHRpbmdzX3BhZ2UnXSA9ICdQYWdlSUQvQWxpYXMgZiZ1dW1sO3IgZGFzIEZvcm11bGFyICZxdW90O0VpbnN0ZWxsdW5nZW4gJmF1bWw7bmRlcm4mcXVvdDsnOwokbGFuZ1sncHJvbXB0X2xvZ2luX3BhZ2UnXSA9ICdQYWdlSUQvQWxpYXMgZGVyIFNlaXRlLCBhdWYgZGllIG5hY2ggZGVyIEFubWVsZHVuZyBnZXNwcnVuZ2VuIHdlcmRlbiBzb2xsJzsKJGxhbmdbJ3Byb21wdF9sb2dvdXRfcGFnZSddID0gJ1BhZ2VJRC9BbGlhcyBkZXIgU2VpdGUsIGF1ZiBkaWUgbmFjaCBkZXIgQWJtZWxkdW5nIGdlc3BydW5nZW4gd2VyZGVuIHNvbGwnOwokbGFuZ1snc29ydG9yZGVyJ10gPSAnUmVpaGVuZm9sZ2UgZGVyIFNvcnRpZXJ1bmcnOwokbGFuZ1sncHJvbXB0X251bXJlc2V0cmVjb3JkJ10gPSAnRWluZSBBbnphaGwgdm9uIFVzZXJuIGlzdCBnZXJhZGUgZGFiZWksIGlocmUgdmVybG9yZW5lcyBQYXNzd29ydCB6dXImdXVtbDtja3p1c2V0emVuLiBBa3R1ZWxsIHN0ZWh0IGRlciBaJmF1bWw7aGxlciBhdWY6JzsKJGxhbmdbJ3JlbW92ZTF3ZWVrJ10gPSAnQWxsZSBFaW50ciZhdW1sO2dlIGVudGZlcm5lbiwgZGllICZhdW1sO2x0ZXIgYWxzIGVpbmUgV29jaGUgc2luZCc7CiRsYW5nWydyZW1vdmUxbW9udGgnXSA9ICdBbGxlIEVpbnRyJmF1bWw7Z2UgZW50ZmVybmVuLCBkaWUgJmF1bWw7bHRlciBhbHMgZWluIE1vbmF0IHNpbmQnOwokbGFuZ1sncmVtb3ZlYWxsJ10gPSAnQWxsZSBFaW50ciZhdW1sO2dlIGVudGZlcm5lbic7CiRsYW5nWydhcmV5b3VzdXJlJ10gPSAnU2luZCBzaWUgc2ljaGVyPyc7CiRsYW5nWydlcnJvcl9pbnZhbGlkY29kZSddID0gJ0VzIHd1cmRlIGVpbiB1bmcmdXVtbDtsdGlnZXIgQ29kZSBlaW5nZWdlYmVuOyBiaXR0ZSB2ZXJzdWNoZW4gU2llIGVzIG5vY2ggZWlubWFsLic7CiRsYW5nWydlcnJvcl90ZW1wY29kZW5vdGZvdW5kJ10gPSAnRiZ1dW1sO3IgaWhyZSBVc2VyLUlEIHd1cmRlIGtlaW4gdGVtcG9yJmF1bWw7cmVyIENvZGUgaW4gZGVyIERhdGVuYmFuayBnZWZ1bmRlbi4nOwokbGFuZ1snZm9yZ290cGFzc3dvcmRfdmVyaWZ5dGVtcGxhdGUnXSA9ICdUZW1wbGF0ZSBBbnplaWdlIGRlcyAmVXVtbDtiZXJwciZ1dW1sO2Z1bmdzLUZvcm11bGFycyc7CiRsYW5nWydmb3Jnb3RwYXNzd29yZF9lbWFpbHRlbXBsYXRlJ10gPSAnVGVtcGxhdGUgRW1haWwgYmVpIHZlcmdlc3NlbmVtIFBhc3N3b3J0JzsKJGxhbmdbJ2Vycm9yX3Jlc2V0YWxyZWFkeXNlbnQnXSA9ICdFbnR3ZWRlciBzaWUgc2VsYnN0IG9kZXIgamVtYW5kIGFuZGVyZXMgaGF0IGJlcmVpdHMgZGFzIFp1ciZ1dW1sO2Nrc2V0emVuIGRlcyBQYXNzd29ydHMgZiZ1dW1sO3IgZGllc2UgS29udG8gYXVzZ2VsJm91bWw7c3QuIFByJnV1bWw7ZmVuIHNpZSBpaHJlbiBFbWFpbC1FaW5nYW5nLiBTaWUgZmluZGVuIGRvcnQgd2VpdGVyZSBBbndlaXN1bmdlbiB6dW0gWnVyJnV1bWw7Y2tzZXR6ZW4gaWhyZXMgUGFzc3dvcnRlcy4nOwokbGFuZ1snZXJyb3JfZGJlcnJvciddID0gJ0RhdGVuYmFua2ZlaGxlcic7CiRsYW5nWydtZXNzYWdlX2ZvcmdvdHB3ZW1haWwnXSA9ICdTaWUgZXJoYWx0ZW4gZGllc2UgTmFjaHJpY2h0LCBkYSBqZW1hbmQgYXVmIHVuc2VyZXIgU2VpdGUgYW5nZWdlYmVuIGhhdCwgZGFzcyBzaWUgaWhyIFBhc3N3b3J0IHZlcmxvcmVuIGhhYmVuLiBGYWxscyBkaWVzIHp1dHJpZmZ0LCBsZXNlbiBzaWUgYml0dGUgZGllIHdlaXRlcmVuIEFud2Vpc3VuZ2VuLiAgV2VubiBzaWUga2VpbmUgQWhudW5nIGhhYmVuLCB3YXMgZGFzIGlzdCwgZGFubiBsJm91bWw7c2NoZW4gc2llIHNpY2hlcmhlaXRzaGFsYmVyIGRpZXNlIE5hY2hyaWNodC4gV2lyIGJlZGFua2VuIHVucywgZGFzcyBzaWUgc2ljaCBkaWUgemVpdCBnZW5vbW1lbiBoYWJlbi4nOwokbGFuZ1sncHJvbXB0X2NvZGUnXSA9ICdDb2RlJzsKJGxhbmdbJ21lc3NhZ2VfY29kZSddID0gJ0RlciBmb2xnZW5kZSBDb2RlIHd1cmRlIHp1ZiZhdW1sO2xsaWcgZ2VuZXJpZXJ0LCB1bSBkYXMgVXNlci1Lb250byB6dSAmdXVtbDtiZXJwciZ1dW1sO2Zlbi4gV2VubiBzaWUgYXVmIGRlbiBmb2xnZW5kZW4gTGluayBrbGlja2VuLCBnZWxhbmdlbiBzaWUgYXVmIGVpbmUgU2VpdGUsIHdvIHNpZSBkaWVzZW4gQ29kZSBlaW5nZWJlbiBtJnV1bWw7c3Nlbi4gTm9ybWFsZXJ3ZWlzZSBlbnRoJmF1bWw7bHQgZGFzIEZlbGQgYmVyZWl0cyBpaHJlbiBDb2RlLiBBYmVyIGZhbGxzIG5pY2h0LCBsYXV0ZXQgZGVyIENvZGU6JzsKJGxhbmdbJ3Byb21wdF9saW5rJ10gPSAnRWluIEtsaWNrIGF1ZiBkZW4gZm9sZ2VuZGVuIExpbmsgYnJpbmd0IHNpZSBhdWYgZGllIFdlYnNlaXRlLCB3byBzaWUgZGVuIHVudGVuc3RlaGVuZGVuIENvZGUgZWluZ2ViZW4gdW5kIGRhbWl0IGlociBQYXNzd29ydCB6dXImdXVtbDtja3NldHplbiBrJm91bWw7bm5lbjonOwokbGFuZ1snbG9zdHBhc3N3b3JkX2VtYWlsc3ViamVjdCddID0gJ1Bhc3N3b3J0IHZlcmxvcmVuJzsKJGxhbmdbJ2Vycm9yX25vbWFpbGVybW9kdWxlJ10gPSAnRGFzIENNU01haWxlci1Nb2R1bCB3dXJkZSBuaWNodCBnZWZ1bmRlbi4nOwokbGFuZ1snaW5mb19mb3Jnb3Rwd21lc3NhZ2VzZW50J10gPSAnRWluZSBFbWFpbCBtaXQgSW5mb3JtYXRpb25lbiB6dW0gWnVyJnV1bWw7Y2tzZXR6ZW4gZGVzIFBhc3N3b3J0cyB3dXJkZSBhbiAlcyB2ZXJzYW5kdC4gVmllbGVuIERhbmshJzsKJGxhbmdbJ2xvc3Rwd19tZXNzYWdlJ10gPSAnU2llIGhhYmVuIGlociBQYXNzd29ydCB2ZXJnZXNzZW4gb2RlciB2ZXJsb3Jlbi4gR2ViZW4gc2llIGhpZXIgaWhyZW4gVXNlcm5hbWVuIGVpbi4gV2VubiB3aXIgc2llIGZpbmRlbiBrJm91bWw7bm5lbiwgZXJoYWx0ZW4gc2llIGVpbmUgRW1haWwgbWl0IHdlaXRlcmVuIEFud2Vpc3VuZ2VuIHp1bSBadXImdXVtbDtja3NldHplbiBkZXMgUGFzc3dvcnRzLic7CiRsYW5nWydmb3Jnb3RwYXNzd29yZF90ZW1wbGF0ZSddID0gJ1RlbXBsYXRlIHZlcmdlc3NlbmVzIFBhc3N3b3J0JzsKJGxhbmdbJ2Vycm9yX3Byb3Bub3Rmb3VuZCddID0gJ0RpZSBFaWdlbnNjaGFmdCAlcyB3dXJkZSBuaWNodCBnZWZ1bmRlbi4nOwokbGFuZ1sncHJvcHNmb3VuZCddID0gJ0VpZ2Vuc2NoYWZ0ZW4gZ2VmdW5kZW4nOwokbGFuZ1snYWRkcHJvcCddID0gJ0VpZ2Vuc2NoYWZ0IGhpbnp1ZiZ1dW1sO2dlbic7CiRsYW5nWydlcnJvcl9yZXF1aXJlZGZpZWxkJ10gPSAnRWluIGVyZm9yZGVybGljaGVzIEZlbGQgKCVzKSB3YXIgbGVlci4nOwokbGFuZ1snaW5mb19lbXB0eXBhc3N3b3JkZmllbGQnXSA9ICdVbSBpaHIgUGFzc3dvcnQgenUgJmF1bWw7bmRlcm4sIGdlYmVuIFNpZSBiaXR0ZSBoaWVyIGVpbiBuZXVlcyBQYXNzd29ydCBlaW4uJzsKJGxhbmdbJ2Vycm9yX25vdGxvZ2dlZGluJ10gPSAnRXMgc2NoZWludCBzbywgYWxzIG9iIHNpZSBuaWNodCBhbmdlbWVsZGV0IHNpbmQuJzsKJGxhbmdbJ3VzZXJfc2V0dGluZ3MnXSA9ICdFaW5zdGVsbHVuZ2VuJzsKJGxhbmdbJ3VzZXJfcmVnaXN0cmF0aW9uJ10gPSAnUmVnaXN0cmllcnVuZyc7CiRsYW5nWydlcnJvcl9hY2NvdW50ZXhwaXJlZCddID0gJ0RpZXNlcyBLb250byBpc3QgYWJnZWxhdWZlbic7CiRsYW5nWydlcnJvcl9pbXByb3BlcmVtYWlsZm9ybWF0J10gPSAnVW5nZW5hdWUgRm9ybWF0aWVydW5nIGRlciBFbWFpbC1BZHJlc3NlJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRleHBpcnlkYXRlJ10gPSAnVW5nJnV1bWw7bHRpZ2VzIEFibGF1ZmRhdHVtJzsKJGxhbmdbJ2Vycm9yX3Byb2JsZW1zZXR0aW5ncHJvcGVydHknXSA9ICdGZWhsZXIgYmVpbSBTZXR6ZW4gZGVyIEVpZ2Vuc2NoYWZ0ICVzIGYmdXVtbDtyIGRlbiBVc2VyICRzJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRncm91cGlkJ10gPSAnVW5nJnV1bWw7bHRpZ2UgR3J1cHBlbi1JRCAlcyc7CiRsYW5nWydoaWRkZW5maWVsZG1hcmtlciddID0gJ0tlbm56ZWljaG51bmcgZGVzIHZlcmJvcmdlbmVuIEZlbGRlcyc7CiRsYW5nWydoaWRkZW5maWVsZGNvbG9yJ10gPSAnRmFyYmUgZGVzIHZlcmJvcmdlbmVuIEZlbGRlcyc7CiRsYW5nWydoaWRkZW4nXSA9ICdWZXJib3JnZW4nOwokbGFuZ1snZXJyb3JfZHVwbGljYXRlbmFtZSddID0gJ0VpbmUgRWlnZW5zY2hhZnQgbWl0IGRpZXNlbSBOYW1lbiB3dXJkZSBiZXJlaXRzIGRlZmluaWVydC4nOwokbGFuZ1snZXJyb3Jfbm9wcm9wZXJ0aWVzJ10gPSAnS2VpbmUgRWlnZW5zY2hhZnRlbiBkZWZpbmllcnQnOwokbGFuZ1snZXJyb3Jfbm9yZWxhdGlvbnMnXSA9ICdGJnV1bWw7ciBkaWVzZSBHcnVwcGUgd3VyZGVuIGtlaW5lIEVpZ2Vuc2NoYWZ0ZW4gYXVzZ2V3JmF1bWw7aGx0Lic7CiRsYW5nWydncm91cHNmb3VuZCddID0gJ0dydXBwZW4gZ2VmdW5kZW4nOwokbGFuZ1snZXJyb3Jfb25lZ3JvdXByZXF1aXJlZCddID0gJ0RpZSBNaXRnbGllZHNjaGFmdCBpbiBpcmdlbmQgZWluZXIgR3J1cHBlIGlzdCBlcmZvcmRlcmxpY2guJzsKJGxhbmdbJ3Byb21wdF9yZXF1aXJlb25lZ3JvdXAnXSA9ICdFcmZvcmRlcnQgZGllIE1pdGdsaWVkc2NoYWZ0IGluIG1pbmRlc3RlbnMgZWluZXIgR3J1cHBlJzsKJGxhbmdbJ2JhY2snXSA9ICdadXImdXVtbDtjayc7CiRsYW5nWydlcnJvcl9taXNzaW5nX3JlcXVpcmVkX3BhcmFtJ10gPSAnJXMgaXN0IGVpbiBlcmZvcmRlcmxpY2hlcyBGZWxkLic7CiRsYW5nWydyZXF1aXJlZGZpZWxkbWFya2VyJ10gPSAnRXJmb3JkZXJsaWNoZSBGZWxkZXIga2VubnplaWNobmVuIG1pdCc7CiRsYW5nWydyZXF1aXJlZGZpZWxkY29sb3InXSA9ICdFcmZvcmRlcmxpY2hlIEZlbGRlciBlaW5mJmF1bWw7cmJlbiBtaXQnOwokbGFuZ1snbmV4dCddID0gJ1dlaXRlcic7CiRsYW5nWydlcnJvcl9ncm91cGV4aXN0cyddID0gJ0VpbmUgR3J1cHBlIG1pdCBkaWVzZW0gTmFtZW4gZXhpc3RpZXJ0IGJlcmVpdHMuJzsKJGxhbmdbJ3JlcXVpcmVkJ10gPSAnRXJmb3JkZXJsaWNoZXMgRmVsZCc7CiRsYW5nWydvcHRpb25hbCddID0gJ09wdGlvbmFsJzsKJGxhbmdbJ29mZiddID0gJ2F1cyc7CiRsYW5nWydsZW5ndGgnXSA9ICdMJmF1bWw7bmdlJzsKJGxhbmdbJ2xlbmd0aGNvbW1lbnQnXSA9ICc8YnI+KFplaWNoZW4gaW4gZGVyIFRleHRlaW5nYWJlKSc7CiRsYW5nWydzZWxvcHRpb25zJ10gPSAnTGlzdGVuZmVsZC1PcHRpb25lbiwgZ2V0cmVubnQgbWl0IFplaWxlbnVtYnImdXVtbDtjaGVuJzsKJGxhbmdbJ3llcyddID0gJ0phJzsKJGxhbmdbJ3Byb21wdCddID0gJ0VpbmdhYmVhdWZmb3JkZXJ1bmcnOwokbGFuZ1sndHlwZSddID0gJ1R5cCc7CiRsYW5nWyd0ZXh0J10gPSAnVGV4dCc7CiRsYW5nWydjaGVja2JveCddID0gJ0tvbnRyb2xsayZhdW1sO3N0Y2hlbic7CiRsYW5nWydlbWFpbCddID0gJ0VtYWlsYWRyZXNzZSc7CiRsYW5nWyd0ZXh0YXJlYSddID0gJ1RleHRmZWxkJzsKJGxhbmdbJ2Ryb3Bkb3duJ10gPSAnTGlzdGVuZmVsZCc7CiRsYW5nWydtc2dfY3VycmVudGx5bG9nZ2VkaW5hcyddID0gJ1dpbGxrb21tZW4nOwokbGFuZ1snbG9nb3V0J10gPSAnQWJtZWxkZW4nOwokbGFuZ1sncHJvbXB0X2NoYW5nZXNldHRpbmdzJ10gPSAnTWVpbmUgRWluc3RlbGx1bmdlbiAmYXVtbDtuZGVybic7CiRsYW5nWydlcnJvcl9sb2dpbmZhaWxlZCddID0gJ0FubWVsZHVuZyBnZXNjaGVpdGVydCAtIHVuZyZ1dW1sO2x0aWdlciBVc2VybmFtZSBvZGVyIHVuZyZ1dW1sO2x0aWdlcyBQYXNzd29ydD8nOwokbGFuZ1snbG9naW4nXSA9ICdBbm1lbGRlbic7CiRsYW5nWydwcm9tcHRfdXNlcm5hbWUnXSA9ICdVc2VybmFtZSc7CiRsYW5nWydwcm9tcHRfcGFzc3dvcmQnXSA9ICdQYXNzd29ydCc7CiRsYW5nWydyZWdpc3RlciddID0gJ1JlZ2lzdHJpZXJlbic7CiRsYW5nWydmb3Jnb3RwdyddID0gJ0hhYmVuIHNpZSBpaHIgUGFzc3dvcnQgdmVyZ2Vzc2VuPyc7CiRsYW5nWydkZWZhdWx0cyddID0gJ1N0YW5kYXJkcyc7CiRsYW5nWyd0ZW1wbGF0ZSddID0gJ1RlbXBsYXRlJzsKJGxhbmdbJ2Vycm9yX3VzZXJub3Rmb3VuZCddID0gJ0RpZSBVc2VyLUlEIHd1cmRlIG5pY2h0IGdlZnVuZGVuLic7CiRsYW5nWydlcnJvcl91c2VybmFtZXRha2VuJ10gPSAnRGllc2VyIFVzZXJuYW1lICglcykgaXN0IGJlcmVpdHMgaW4gVmVyd2VuZHVuZy4nOwokbGFuZ1sncHJvbXB0X3NtdHB2YWxpZGF0ZSddID0gJ1NNVFAgdmVyd2VuZGVuLCB1bSBkaWUgRW1haWxhZHJlc3NlbiBhdWYgRyZ1dW1sO2x0aWdrZWl0IHp1IHByJnV1bWw7ZmVuPyc7CiRsYW5nWydwcm9tcHRfbWlucHdsZW4nXSA9ICdNaW5pbWFsZSBMJmF1bWw7bmdlIGRlcyBQYXNzd29ydHMnOwokbGFuZ1sncHJvbXB0X21heHB3bGVuJ10gPSAnTWF4aW1hbGUgTCZhdW1sO25nZSBkZXMgUGFzc3dvcnRzJzsKJGxhbmdbJ3Byb21wdF9taW51bmxlbiddID0gJ01pbmltYWxlIEwmYXVtbDtuZ2UgZGVzIFVzZXJuYW1lbnMnOwokbGFuZ1sncHJvbXB0X21heHVubGVuJ10gPSAnTWF4aW1hbGUgTCZhdW1sO25nZSBkZXMgVXNlcm5hbWVucyc7CiRsYW5nWydwcm9tcHRfc2Vzc2lvbnRpbWVvdXQnXSA9ICdTZXNzaW9uLVRpbWVvdXQgKFNla3VuZGVuKSc7CiRsYW5nWydwcm9tcHRfYWxsb3dlbWFpbHJlZyddID0gJ0VtYWlsLVJlZ2lzdHJpZXJ1bmcgZXJsYXViZW4nOwokbGFuZ1sncHJvbXB0X2RmbHRncm91cCddID0gJ1N0YW5kYXJkLUdydXBwZSBmJnV1bWw7ciBuZXVlIFVzZXInOwokbGFuZ1snY2hhbmdlc2V0dGluZ3NfdGVtcGxhdGUnXSA9ICdFaW5zdGVsbHVuZ2VuICZhdW1sO25kZXJuLVRlbXBsYXRlICc7CiRsYW5nWydlcnJvcl9wYXNzd29yZG1pc21hdGNoJ10gPSAnRGllIFBhc3N3Jm91bWw7cnRlciBzdGltbWVuIG5pY2h0ICZ1dW1sO2JlcmVpbi4nOwokbGFuZ1snZXJyb3JfaW52YWxpZHVzZXJuYW1lJ10gPSAnVW5nJnV1bWw7bHRpZ2VyIFVzZXJuYW1lJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRwYXNzd29yZCddID0gJ1VuZyZ1dW1sO2x0aWdlcyBQYXNzd29ydCc7CiRsYW5nWydlZGl0dXNlciddID0gJ1VzZXIgYmVhcmJlaXRlbic7CiRsYW5nWyd2YWxpZCddID0gJ0cmdXVtbDtsdGlnJzsKJGxhbmdbJ3VzZXJuYW1lJ10gPSAnVXNlcm5hbWUnOwokbGFuZ1snc3RhdHVzJ10gPSAnU3RhdHVzJzsKJGxhbmdbJ2Vycm9yX21lbWJlcmdyb3VwcyddID0gJ0RpZXNlciBVc2VyIGlzdCBuaWNodCBNaXRnbGllZCBpcmdlbmQgZWluZXIgR3J1cHBlLic7CiRsYW5nWydlcnJvcl9wcm9wZXJ0aWVzJ10gPSAnS2VpbmUgRWlnZW5zY2hhZnRlbic7CiRsYW5nWyd2YWx1ZSddID0gJ1dlcnQnOwokbGFuZ1snZ3JvdXBzJ10gPSAnR3J1cHBlbic7CiRsYW5nWydwcm9wZXJ0aWVzJ10gPSAnRWlnZW5zY2hhZnRlbic7CiRsYW5nWydwcm9wbmFtZSddID0gJ05hbWUgZGVyIEVpZ2Vuc2NoYWZ0JzsKJGxhbmdbJ3Byb3B2YWx1ZSddID0gJ1dlcnQgZGVyIEVpZ2Vuc2NoYWZ0JzsKJGxhbmdbJ2FkZCddID0gJ0hpbnp1ZiZ1dW1sO2dlbic7CiRsYW5nWydlZGl0J10gPSAnQmVhcmJlaXRlbic7CiRsYW5nWydleHBpcmVzJ10gPSAnQWJsYXVmJzsKJGxhbmdbJ3NwZWNpZnlfZGF0ZSddID0gJ0RhdHVtIGZlc3RsZWdlbic7CiRsYW5nWycxMmhycyddID0gJzEyIFN0dW5kZW4nOwokbGFuZ1snMjRocnMnXSA9ICcyNCBTdHVuZGVuJzsKJGxhbmdbJzQ4aHJzJ10gPSAnNDggU3R1bmRlbic7CiRsYW5nWycxd2VlayddID0gJzEgV29jaGUnOwokbGFuZ1snMndlZWtzJ10gPSAnMiBXb2NoZW4nOwokbGFuZ1snMW1vbnRoJ10gPSAnMSBNb25hdCc7CiRsYW5nWyczbW9udGhzJ10gPSAnMyBNb25hdGUnOwokbGFuZ1snNm1vbnRocyddID0gJzYgTW9uYXRlJzsKJGxhbmdbJzF5ZWFyJ10gPSAnMSBKYWhyJzsKJGxhbmdbJ25ldmVyJ10gPSAnTmllbWFscyc7CiRsYW5nWydwb3N0aW5zdGFsbG1lc3NhZ2UnXSA9ICdEYXMgTW9kdWwgd3VyZGUgZXJmb2xncmVpY2ggaW5zdGFsbGllcnQuPGJyLz5TdGVsbGVuIHNpZSBzaWNoZXIsIGRhc3Mgc2llIGRpZSBCZXJlY2h0aWd1bmcgJnF1b3Q7TW9kaWZ5IEZyb250RW5kVXNlciBQcm9wZXJ0aWVzJnF1b3Q7IGdlc2V0enQgaGFiZW4uJzsKJGxhbmdbJ3Bhc3N3b3JkJ10gPSAnUGFzc3dvcnQnOwokbGFuZ1sncmVwZWF0cGFzc3dvcmQnXSA9ICdOb2NoIGVpbm1hbCc7CiRsYW5nWydlcnJvcl9ncm91cG5hbWVfZXhpc3RzJ10gPSAnRWluZSBHcnVwcGUgbWl0IGRpZXNlbSBOYW1lbiBleGlzdGllcnQgYmVyZWl0cy4nOwokbGFuZ1snZWRpdGdyb3VwJ10gPSAnR3J1cHBlIGJlYXJiZWl0ZW4nOwokbGFuZ1snc3VibWl0J10gPSAnQWJzZW5kZW4nOwokbGFuZ1snY2FuY2VsJ10gPSAnQWJicmVjaGVuJzsKJGxhbmdbJ2RlbGV0ZSddID0gJ0wmb3VtbDtzY2hlbic7CiRsYW5nWydjb25maXJtX2VkaXRncm91cCddID0gJ1NpbmQgc2llIHNpY2hlciwgZGFzcyBkYXMgcmljaHRpZ2VuIEVpbnN0ZWxsdW5nZW4gZiZ1dW1sO3IgZGllc2UgR3J1cHBlIHNpbmQ/XG5EYXMgRGVha3RpdmllcmVuIGVpbmVyIEVpZ2Vuc2NoYWZ0IGwmb3VtbDtzY2h0IGtlaW5lIEVpbnRyJmF1bWw7Z2UgaW4gZGVyIEVpZ2Vuc2NoYWZ0ZW50YWJlbGxlIGYmdXVtbDtyIGRpZXNlIEdydXBwZSAvIGRpZXNlbiBVc2VyLiBTaWUgc2luZCBsZWRpZ2xpY2ggbmljaHQgbWVociB2ZXJmJnV1bWw7Z2Jhci4nOwokbGFuZ1snYXJleW91c3VyZV9kZWxldGVncm91cCddID0gJ1NpbmQgc2llIHNpY2hlciwgZGFzcyBzaWUgZGllc2UgR3J1cHBlIGwmb3VtbDtzY2hlbiB3b2xsZW4/JzsKJGxhbmdbJ2NvbmZpcm1fZGVsZXRlX3Byb3AnXSA9ICdTaW5kIHNpZSBzaWNoZXIsIGRhc3Mgc2llIGRpZXNlIEVpZ2Vuc2NoYWZ0IGtvbXBsZXR0IGwmb3VtbDtzY2hlbiB3b2xsZW4/XG5GYWxscyBqYSwgd2lyZCBhdWNoIGplZGVyIFVzZXJlaW50cmFnIGYmdXVtbDtyIGRpZXNlIEVpZ2Vuc2NoYWZ0IGdlbCZvdW1sO3NjaHQuJzsKJGxhbmdbJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcyddID0gJ05pY2h0IGF1c3JlaWNoZW5kZSBQYXJhbWV0ZXInOwokbGFuZ1snaWQnXSA9ICdJRCc7CiRsYW5nWyduYW1lJ10gPSAnTmFtZSc7CiRsYW5nWydlcnJvcl9jYW50YWRkZ29ydXAnXSA9ICdQcm9ibGVtIGJlaW0gSGluenVmJnV1bWw7Z2VuIGVpbmVyIEdydXBwZSc7CiRsYW5nWydlcnJvcl9pbnZhbGlkcGFyYW1zJ10gPSAnVW5nJnV1bWw7bHRpZ2UgUGFyYW1ldGVyJzsKJGxhbmdbJ2FwcGx5ZmlsdGVyJ10gPSAnQW53ZW5kZW4nOwokbGFuZ1snZmlsdGVyJ10gPSAnRmlsdGVyJzsKJGxhbmdbJ3VzZXJmaWx0ZXInXSA9ICdVc2VybmFtZSByZWd1bCZhdW1sO3JlciBBdXNkcnVjayc7CiRsYW5nWydkZXNjcmlwdGlvbiddID0gJ0Jlc2NocmVpYnVuZyc7CiRsYW5nWydncm91cG5hbWUnXSA9ICdOYW1lIGRlciBHcnVwcGUnOwokbGFuZ1snYWNjZXNzZGVuaWVkJ10gPSAnWnVncmlmZiB2ZXJ3ZWlnZXJ0JzsKJGxhbmdbJ2Vycm9yJ10gPSAnRmVobGVyJzsKJGxhbmdbJ2FkZGdyb3VwJ10gPSAnRWluZSBHcnVwcGUgaGluenVmJnV1bWw7Z2VuJzsKJGxhbmdbJ2FkZHVzZXInXSA9ICdFaW5lbiBVc2VyIGhpbnp1ZiZ1dW1sO2dlbic7CiRsYW5nWyd1c2Vyc2ZvdW5kJ10gPSAnVXNlciBnZWZ1bmRlbiwgZGllIGRlbiBLcml0ZXJpZW4gZW50c3ByZWNoZW4nOwokbGFuZ1snZ3JvdXAnXSA9ICdHcnVwcGUnOwokbGFuZ1snc2VsZWN0Z3JvdXAnXSA9ICdHcnVwcGUgYXVzdyZhdW1sO2hsZW4nOwokbGFuZ1sncmVnaXN0cmF0aW9uX3RlbXBsYXRlJ10gPSAnUmVnaXN0cmllcnVuZ3MtVGVtcGxhdGUnOwokbGFuZ1snbG9nb3V0X3RlbXBsYXRlJ10gPSAnQWJtZWxkdW5ncy1UZW1wbGF0ZSc7CiRsYW5nWydsb2dpbl90ZW1wbGF0ZSddID0gJ0FubWVsZHVuZ3MtVGVtcGxhdGUnOwokbGFuZ1sncHJlZmVyZW5jZXMnXSA9ICdFaW5zdGVsbHVuZ2VuJzsKJGxhbmdbJ3VzZXJzJ10gPSAnVXNlcic7CiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdGcm9udGVuZFVzZXItVmVyd2FsdHVuZyc7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ1ZlcndhbHRldCBkaWUgRnJvbnRlbmQtVXNlcic7CiRsYW5nWydkZWZhdWx0ZnJvbnRwYWdlJ10gPSAnU3RhbmRhcmQtU3RhcnRzZWl0ZSc7CiRsYW5nWydsYXN0YWNjZXNzZWRwYWdlJ10gPSAnTGV0enRlIFNlaXRlLCBhdWYgZGllIHp1Z2VncmlmZmVuIHd1cmRlJzsKJGxhbmdbJ290aGVycGFnZSddID0gJ0FuZGVyZSBTZWl0ZTogJzsKJGxhbmdbJ2NoYW5nZWxvZyddID0gJzx1bD4NCjxsaT4wLjAuMSAtIE9jdG9iZXIsIDIwMDUgLSBJbml0aWFsIE5SUFQgKE5vdCBSZWFkeSBmb3IgUHJpbWUgVGltZSkgcmVsZWFzZTwvbGk+DQo8bGk+MC4xLjAgLSBPY3RvYmVyLCAyMDA1IC0gSW5pdGlhbCByZWxlYXNlPC9saT4NCjxsaT4wLjEuMSAtIE9jdG9iZXIsIDIwMDUgLSBGaXhlZCBpc3N1ZXMgd2l0aCBwcm9wZXJ0aWVzPC9saT4NCjxsaT4wLjEuMiAtIE9jdG9iZXIsIDIwMDUgLSBBZGRlZCBmb3Jnb3R0ZW4gcGFzc3dvcmQgZnVuY3Rpb25hbGl0eTwvbGk+DQo8bGk+PHA+MC4xLjMgLSBOb3ZlbWJlciwgMjAwNTwvcD4NCiAgICA8cD5BZGRlZCB0aGUgYWJpbGl0eSB0byBzcGVjaWZ5IGEgcmVkaXJlY3QgcGFnZSBvbiBsb2dpbiwgbG9nb3V0LCBmb3Jnb3QgcGFzc3dvcmQsIGFuZCBjaGFuZ2Ugc2V0dGluZ3MsIGFuZCBhZGRlZCB0aGUgcmV0dXJudG8gYW5kIGZvcm0gcGFyYW1ldGVycyB0byB0aGUgdXNlciBzaWRlIG9mIHRoaW5ncywgYWxzbyBkaWQgYSBjb3VwbGUgbGYgbGl0dGxlIGNsZWFudXBzLiAgVGhpcyB2ZXJzaW9uIHJlcXVpcmVzIHYwLjExIGFuZCBhYm92ZSBmb3IgY2VydGFpbi48L3A+PC9saT4NCjxsaT4wLjEuNCAtIE5vdmVtYmVyLCAyMDA1IC0gVmVyeSBtaW5vciBjaGFuZ2Ugd2l0aCByZXNwZWN0IHRvIGEgZm9yZ290dGVuIGFuZCBubyBsb25nZXIgbmVlZGVkIGZ1bmN0aW9uIGNhbGw8L2xpPg0KPGxpPjxwPjAuMS41IC0gTm92ZW1iZXIsIDIwMDU8L3A+DQogICAgPHA+QW5vdGhlciB2ZXJ5IG1pbm9yIGNoYW5nZSwgYWRkZWQgc29tZSB0ZXh0IHRvIHRoZSBQb3N0SW5zdGFsbCBtZXNzYWdlLjwvcD48L2xpPg0KPGxpPjxwPjAuMS42IC0gSmFudWFyeSwgMjAwNjxwPg0KICAgIDxwPkNoYW5nZXMgdG8gdGhlIHBlcm1pc3Npb24gbW9kZWwsIGFuZCBtaW5vciBidWcgZml4ZXMgdG8gdGhlIHByZWZlcmVuY2VzLiAgQWxzbyBzb21lIHBocDUgZml4ZXMgYnV0IEkgYW0gc3VyZSB0aGF0IHRoZXJlIGFyZSBtb3JlIG91dCB0aGVyZS48L3A+PC9saT4NCjxsaT48cD4wLjEuNyAtIEphbnVhcnksIDIwMDY8cD4NCiAgICA8cD5NYW55IHRoYW5rcyB0byA8Yj5rYXRvbjwvYj4gZm9yIGFkZGluZyB0aGUgdGV4dGFyZWEgYW5kIGRyb3Bkb3duIHByb3BlcnR5IHR5cGVzLjwvcD4NCiAgICA8cD5GaXhlcyB0byB0aGUgcHJvcGVydHkgYWRkaW5nIHRvIGZpeCBwcm9ibGVtcyB3aXRoIHNwYWNlcyBpbiBwcm9wZXJ0eSBuYW1lcyAod2Ugbm8gbG9uZ2VyIGxldCB0aGF0IGhhcHBlbikuPC9wPg0KPC9saT4NCjxsaT48cD4xLjAuMCAtIEZlYnJ1YXJ5LCAyMDA2PHA+DQogICAgPHA+QWRkZWQgZmlsdGVyaW5nIGFuZCByb3cgbGltaXRpbmcgdG8gdGhlIGFkbWluIHBhbmVsLiBUaGlzIHdpbGwgaGF2ZSBiaWcgYmVuZWZpdHMgdG8gdGhvc2UgdGhhdCBhcmUgdXNpbmcgdGhpcyBtb2R1bGUgZm9yIGhpZ2ggdHJhZmljLCBhbmQgaGlnaCB1c2VyIHNpdGVzLjwvcD4NCiAgICA8cD5BZGRlZCBzb3J0aW5nIHRvIHRoZSBhZG1pbiBwYW5lbDwvcD4NCiAgICA8cD5BZGRlZCBtYXggbGVuZ3RoIGFiaWxpdHkgdG8gdGV4dCBhbmQgZW1haWwgZmllbGRzPC9wPg0KICAgIDxwPkZpeGVkIGEgc21hbGwgcHJvYmxlbSB3aXRoIHRoZSBkZWZhdWx0IGdyb3VwIG5vdCBiZWluZyBjaGVja2VkIHdoZW4gYWRkaW5nIGEgdXNlcjwvcD4NCiAgICA8cD5TYXZlIGZpbHRlciBzZXR0aW5ncyBpbiBwcmVmZXJlbmNlcywgYW5kIHRoZSBhY3RpdmUgdGFiIHRvby48L3A+DQogICAgPHA+RGVsZXRlIHVzZXIgcHJvcGVydGllcyB3aGVuIGEgcHJvcGVydHkgaXMgZGVsZXRlZCA8ZW0+Tm90ZTwvZW0+LCBub3Qgd2hlbiBpdCBpcyBkaXNhYmxlZCBpbiB0aGUgZWRpdCBncm91cCBkaWFsb2c8L3A+DQogICAgPHA+QWRkIGNvbmZpcm1hdGlvbiBtZXNzYWdlIGluIGVkaXQgZ3JvdXBzLjwvcD4NCiAgICA8cD5BZGRlZCBhIGNvdXBsZSBtb3JlIGNvbmZpcm1hdGlvbiBtZXNzYWdlcy48L3A+DQogICAgPHA+QWRkZWQgQ1NWIEV4cG9ydCBvcHRpb248L3A+DQogICAgPHA+VG9kbyAtIEFkZCBwcmVmZXJlbmNlcyBmb3IgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGZpZWxkbGVuZ3RoPC9wPg0KPC9saT4NCjxsaT48cD4xLjAuMSAtIE1hcmNoLCAyMDA2PHA+DQogICAgPHA+QWRkZWQgdGhlIGFiaWxpdHkgdG8gY2hlY2sgZm9yIGR1cGxpY2F0ZSBlbWFpbCBhZGRyZXNzZXM8L3A+DQogICAgPHA+Rml4IHByb2JsZW0gd2hlcmUgZXhwaXJ5IGRhdGUgd2FzIGJlaW5nIG1vZGlmaWVkIHdoZW4gYWRtaW4gbW9kaWZpZWQgdXNlciBzZXR0aW5nczwvcD4NCiAgICA8cD5BZGQgYSBjb25maXJtYXRpb24gbWVzc2FnZSB0byB0aGUgcHJlZmVyZW5jZXMgc3VibWl0IGJ1dHRvbjwvcD4NCiAgICA8cD5GaXhlZCBhIG1pbm9yIGJ1ZyB3aGVuIGNvdXRpbmcgdGhlIG51bWJlciBvZiB1c2VycyBpbiBhIGdyb3VwPC9wPg0KICAgIDxwPkZpeGVzIHRvIHRoZSBzaXplIG9mIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBmaWVsZHMsIGFuZCBtYXhsZW5ndGg8L3A+DQogICAgPHA+QWRkZWQgYWR2YW5jZWQgZmlsdGVyaW5nIG9uIHByb3BlcnRpZXM8L3A+DQogICAgPHA+Q2hhbmdlcyB0byBsYWJlbGluZyBpbiBhZGQgb3IgZWRpdCB1c2VyPC9wPg0KICAgIDxwPkZpeGVzIHRvIHByb2JsZW1zIHdpdGggaW5saW5lIGFuZCBub24gaW5saW5lIGZvcm1zLCB0aGUgcGFzc3dvcmQgaXMgbmV2ZXIgc2VudCBvbiB0aGUgZ2V0IGxpbmU8L3A+DQogICAgPHA+Q2hhbmdlZCB0byByZXF1aXJlIENNUyAwLjEyLWJldGEyIGF0IGEgbWluaW11bSAoZm9yIHNhZmV0eSBwdXJwb3Nlcyk8L3A+DQo8L2xpPg0KPGxpPjxwPjEuMC4yIC0gTWFyY2gsIDIwMDY8cD4NCiAgICA8cD5Nb3JlIGZpZWxkIGxlbmd0aCBmaXhlczwvcD4NCjwvbGk+DQo8bGk+PHA+MS4wLjMgLSBNYXJjaCwgMjAwNjxwPg0KICAgIDxwPkV4cG9ydCB0byBzbWFydHkgYWxsIG9mIHRoZSB1c2VyIHByb3BlcnRpZXMgd2hlbiB0aGV5IGFyZSBsb2dnZWQgaW48L3A+DQo8L2xpPg0KPGxpPjxwPjEuMC40IC0gTWF5LCAyMDA2PHA+DQogICAgPHA+Rml4ZXMgdG8gdGhlIGV4cG9ydCBjb2RlPC9wPg0KICAgIDxwPkNvZGUgY2xlYW51cCAoYWxwaGFiZXRpemUgZnVuY3Rpb25zKTwvcD4NCiAgICA8cD5NaW5vciBmaXhlcyBhbmQgZW5oYW5jZW1lbnRzIChyZWNvbW1lbmRlZCBieSBuaWxzNzMpIGZvciBkZWFsaW5nIHdpdGggdGhlIGNoYW5nZSBwYXNzd29yZCBzdHVmZi48L3A+DQogICAgPHA+UmVtb3ZlZCB0aGUgcmVxdWlyZW1lbnQgZm9yIENNUyAwLjEyLCBhbmQgcHV0IGl0IGJhY2sgdG8gMC4xMS4yPC9wPg0KICAgIDxwPkFkZGVkIHRoZSBcJiMwMzk7c2lsZW50XCYjMDM5OyBmb3JtPC9wPg0KICAgIDxwPkNsZWFuZWQgdXAgZGF0YWJhc2UgYWNjZXNzIHN0dWZmIGZvciBwZXJmb3JtYW5jZSByZWFzb25zIChob3BlZnVsbHkpPC9wPg0KICAgIDxwPkFkZGVkIGNvcHlyaWdodCBpbmZvPC9wPg0KICAgIDxwPkFkZGVkIG1hY3JvcyBmb3IgcmVkaXJlY3RvIHRvIGEgdXNlciBzcGVjaWZpYyBwYWdlIG9uIGxvZ2luIG9yIGxvZ291dDwvcD4NCiAgICA8cD5Ud2Vha3MgdG8gdGhlIGFkbWluIHByZWZlcmVuY2VzIHRhYjwvcD4NCjwvbGk+DQo8L3VsPic7CiRsYW5nWydoZWxwJ10gPSAnPGgzPldhcyBtYWNodCBkaWVzZXMgTW9kdWw/PC9oMz4NCjxwPkRpZXNlcyBNb2R1bCBlcmxhdWJ0IGRpZSBWZXJ3YWx0dW5nIHVuZCBBZG1pbmlzdHJhdGlvbiB2b24gRnJvbnRFbmQtVXNlcm4gPGk+KD1Vc2VyLCBkaWUga2VpbmVuIFp1Z3JpZmYgYXVmIGRpZSBBZG1pbmlzdHJhdGlvbiBoYWJlbik8L2k+LiBFcyAgZXJtJm91bWw7Z2xpY2h0IHp1bSBlaW5lbiBkYXMgRXJzdGVsbGVuIHZvbiBVc2VyZ3J1cHBlbiB1bmQgVXNlci1Lb250ZW4gdW5kIHp1bSBhbmRlcmVuIGRhcyBBbi0gdW5kIEFibWVsZGVuIHZvbiBVc2Vybi4gSW4gVmVyYmluZHVuZyBtaXQgZGVtIEN1c3RvbUNvbnRlbnQtTW9kdWwgayZvdW1sO25uZW4gdW50ZXJzY2hpZWRsaWNoZW4gVXNlcm4gdW50ZXJzY2hpZWRsaWNoZSBJbmhhbHRlIGFuZ2V6ZWlndCB3ZXJkZW4sIGpld2VpbHMgaW4gQWJoJmF1bWw7bmdpZ2tlaXQgZGF2b24sIG9iIGRlciBVc2VyIGFuZ2VtZWxkZXQgaXN0IG9kZXIgbmljaHQgYnp3LiB3ZWxjaGVyIEdydXBwZSBlciBhbmdlaCZvdW1sO3J0LjwvcD4NCjxoMz5GZWF0dXJlczwvaDM+DQo8dWw+DQo8bGk+PHA+QWJsYXVmIGRlciBVc2VyLUtvbnRlbi4gSGllcm1pdCBrJm91bWw7bm5lbiBzaWUgemVpdGxpY2ggYmVzY2hyJmF1bWw7bmt0IGVpbmVuIFVzZXIgZXJzdGVsbGVuLjwvcD48L2xpPg0KPGxpPjxwPkdydXBwZW5laWdlbnNjaGFmdGVuLiBTaWUgayZvdW1sO25uZW4gdm9uIGRlbiBNaXRnbGllZGVybiB1bnRlcnNjaGllZGxpY2hlIEdydXBwZW4gdW5kIHVudGVyc2NoaWVkbGljaGUgSW5mb3JtYXRpb25lbiBhYmZyYWdlbi48L3A+PC9saT4NCjxsaT48cD5IdW5kZXJ0ZSB2b24gVXNlcm4gc2luZCBtJm91bWw7Z2xpY2guPC9wPjwvbGk+DQo8bGk+PHA+aGF0IGVpbmUgdW1mYW5ncmVpY2hlIEFQSSBmJnV1bWw7ciBkYXMgaGluenVmJnV1bWw7Z2VuIHZvbiBGdW5rdGlvbmVuPC9wPjwvbGk+DQo8L3VsPg0KPGgzPldpZSB3aXJkIGVzIGVpbmdlc2V0enQgPzwvaDM+DQo8dWw+DQo8bGk+PHA+TmFjaCBkZXIgSW5zdGFsbGF0aW9uIGsmb3VtbDtubmVuIHNpZSB1bnRlciBkZW0gTWVuJnV1bWw7ICZxdW90O1VzZXIgJmFtcDsgR3J1cHBlbiZxdW90OyBhdWYgZGllIEFkbWluaXN0cmF0aW9uIGRlcyBGcm9udEVuZFVzZXJzLU1vZHVscyB6dWdyZWlmZW4uPC9wPjwvbGk+DQo8bGk+DQo8cD5adW4mYXVtbDtjaHN0IHNvbGx0ZW4gc2llIEVpZ2Vuc2NoYWZ0ZW4gZGVmaW5pZXJlbi4gRWlnZW5zY2hhZnRlbiBzaW5kIGdydW5kcyZhdW1sO3R6bGljaGUgRmVsZGRlZmluaXRpb25lbiwgYmVpIGRlbmVuIHNpZSBkZW4gVHlwIGRlciB6dSBlcmZhc3NlbmRlbiBJbmZvcm1hdGlvbmVuIHVuZCBkZXJlbiBCZXNjaHImYXVtbDtua3VuZ2VuIGZlc3RsZWdlbiBrJm91bWw7bm5lbiB3aWUgenVtIEJlaXNwaWVsOiBOYW1lLCBBbHRlciwgU3RhZHQsIEJ1bmRlc2xhbmQsIFN0YWF0LCBFbWFpbGFkcmVzc2UgdXN3LjwvcD4NCjxwPjxiPkhpbndlaXM6PC9iPiBGJnV1bWw7ciBkZW4gVXNlcm5hbWVuIHVuZCBkYXMgUGFzc3dvcnQgbSZ1dW1sO3NzZW4gc2llIGtlaW5lIEVpZ2Vuc2NoYWZ0ZW4gZmVzdGxlZ2VuOyBkaWVzIHdpcmQgYmVyZWl0cyB2b20gTW9kdWwgZXJsZWRpZ3QuPC9iPg0KPC9saT4NCjxsaT48cD5BbHMgTiZhdW1sO2Noc3RlcyBzb2xsdGVuIHNpZSBlaW5lIG9kZXIgbWVocmVyZSBHcnVwcGVuIGVyc3RlbGxlbi4gV2VubiBzaWUgZWluZSBHcnVwcGVuIGVyc3RlbGxlbiwgd2VyZGVuIHNpZSBuYWNoIGRlbSBHcnVwcGVubmFtZW4sIGVpbmVyIEJlc2NocmVpYnVuZyBzb3dpZSBkZW4gZGVyIEdydXBwZSB6dXp1b3JkbmVuZGVuIEVpZ2Vuc2NoYWZ0ZW4gdW5kIGRlc3NlbiBTb3J0aWVydW5nIGdlZnJhZ3QuIE9wdGlvbmFsIHNpbmQgYXVjaCBlcmZvcmRlcmxpY2hlIG9kZXIgdmVyYm9yZ2VuZSBGZWxkZXIgbSZvdW1sO2dsaWNoIDxpPiggYXVjaCBvZmYgaXN0IGcmdXVtbDtsdGlnKTwvaT48L3A+PC9saT4NCjxsaT48cD48Yj5IaW53ZWlzOjwvYj4gQmV2b3Igc2llIGZvcnRmYWhyZW4sIHNvbGx0ZW4gU2llIHNpY2hlciBzZWluLCBkYXNzIGRpZSBFaW5zdGVsbHVuZ2VuIGtvcnJla3QgZ2VzZXR6dCBzaW5kLjwvcD48L2xpPg0KPGxpPjxwPkFuc2NobGllJnN6bGlnO2VuZCBzb2xsdGVuIHNpZSBlaW4gcGFhciBVc2VyIGVyc3RlbGxlbi4gRGFzIEhpbnp1ZiZ1dW1sO2dlbiB2b24gVXNlcm4gZXJmb2xndCBpbiB6d2VpIFNjaHJpdHRlbi4gV2VubiBzaWUgZWluZW4gVXNlciBlcnN0ZWxsZW4sIHdlcmRlbiBzaWUgbmFjaCBkZW0gVXNlcm5hbWVuIHVuZCBkZW0gUGFzc3dvcnQgc293aWUgbmFjaCBlaW5lbSBBYmxhdWZkYXR1bSBmJnV1bWw7ciBkaWVzZW4gVXNlciBnZWZyYWd0LiBEYW5uIG0mdXVtbDtzc2VuIHNpZSBub2NoIGRpZSBHcnVwcGVuIGF1c3cmYXVtbDtobGVuLCBpbiB3ZWxjaGVuIGRlciBVc2VyIE1pdGdsaWVkIHNlaW4gc29sbC4gS2xpY2tlbiBzaWUgZGFubiBhdWYgXCYjMDM5O1dlaXRlclwmIzAzOTs8L3A+DQo8cD48ZW0+SGlud2VpczogPC9lbT5EYXMgaXN0IGVpbiBzZWhyIGFyYmVpdHNpbnRlbnNpdmVyIHVuZCBsYW5nd2VpbGlnZXIgUHJvemVzcy4gRXMgaXN0IGRhaGVyIGVpbmZhY2hlciwgd2VubiBzaWUgc2ljaCBkaWUgVXNlciBzZWxic3QgcmVnaXN0cmllcmVuIGxhc3Nlbi4gU2llIG0mdXVtbDtzc2VuIGRhbm4gZGllIFVzZXIgbnVyIG5vY2ggZWluZXIgb2RlciBtZWhyZXJlbiBHcnVwcGVuIHp1b3JkbmVuLiBBYmVyIGYmdXVtbDtyIFRlc3R6d2Vja2UgZXJzdGVsbGVuIHNpZSBiaXR0ZSBtaW5kZXN0ZW5zIGVpbmVuIFVzZXIuPC9wPjwvbGk+DQo8bGk+PHA+TmFjaGRlbSBkYXMgU3lzdGVtIGFsbGUgZiZ1dW1sO3IgZGllc2VuIFVzZXIgbm90d2VuZGlnZW4gRmVsZGVyIGJlc3RpbW10IGhhdCwgd2lyZCBpaG5lbiBlaW4gRm9ybXVsYXIgbWl0IGRlbiBlcmZvcmRlcmxpY2hlbiBJbmZvcm1hdGlvbmVuICZ1dW1sO2JlciBkZW4gVXNlciBhbmdlemVpZ3QuIE1pdCBkZXIgS29tcGxldHRpZXJ1bmcgZGllc2VzIEZvcm11bGFycyB3aXJkIGRhcyBIaW56dWYmdXVtbDtnZW4gZWluZXMgVXNlcnMgYWJnZXNjaGxvc3Nlbi48L3A+PC9saT4NCjxsaT48cD5TaWUgayZvdW1sO25uZW4gamV0enQgZGllIEZ1bmt0aW9uIGRlcyBGcm9udEVuZC1Nb2R1bHMgYXVmIGlocmVyIFNlaXRlIG51dHplbi4gSGllcnp1IG0mdXVtbDtzc2VuIHNpZSBlaW5mYWNoIG51ciBkZW4gVGFnIHtjbXNfbW9kdWxlIG1vZHVsZT1Gcm9udEVuZFVzZXJzfSBpbiBpaHJlIFNlaXRlIG9kZXIgVGVtcGxhdGUgZWluZiZ1dW1sO2dlbi48L3A+PC9saT4NCjwvdWw+DQo8aDM+U3VwcG9ydDwvaDM+DQo8cD5EaWVzZXMgTW9kdWwgYmVpbmhhbHRldCBrZWluZW4ga29tbWVyemllbGxlbiBTdXBwb3J0LiBTaWUgayZvdW1sO25uZW4gamVkb2NoICZ1dW1sO2JlciBmb2xnZW5kZSBNJm91bWw7Z2xpY2hrZWl0ZW4gSGlsZmUgenUgZGVtIE1vZHVsIGVyaGFsdGVuOjwvcD4NCjx1bD4NCjxsaT5GJnV1bWw7ciBkaWUgbGV0enRlIFZlcnNpb24gZGllc2VzIE1vZHVscywgRkFRcywgZGVtIFZlcnNhbmQgZWluZXMgRmVobGVycmVwb3J0cyBvZGVyIGRlbSBLYXVmIGtvbW1lcnppZWxsZW4gU3VwcG9ydCBiZXN1Y2hlbiBzaWUgYml0dGUgY2FsZ3V5cyBIb21lcGFnZSB1bnRlciA8YSBocmVmPSZxdW90O2h0dHA6Ly90ZWNoY29tLmR5bmRucy5vcmcmcXVvdDs+dGVjaGNvbS5keW5kbnMub3JnPC9hPi48L2xpPg0KPGxpPkVpbmUgd2VpdGVyZSBEaXNrdXNzaW9uIHp1IGRpZXNlbSBNb2R1bCBpc3QgYXVjaCBpbiBkZW4gRm9yZW4gdm9uIDxhIGhyZWY9JnF1b3Q7aHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnJnF1b3Q7PkNNUyBNYWRlIFNpbXBsZTwvYT4genUgZmluZGVuLjwvbGk+DQo8bGk+RGVyIEF1dG9yIGNhbGd1eTEwMDAsIGlzdCBoJmF1bWw7dWZpZyBpbSA8YSBocmVmPSZxdW90O2lyYzovL2lyYy5mcmVlbm9kZS5uZXQvI2NtcyZxdW90Oz5DTVMgSVJDIENoYW5uZWw8L2E+IHp1IGZpbmRlbi48L2xpPg0KPGxpPkxldHp0bGljaCBlcnJlaWNoZW4gc2llIGRlbiBBdXRvciBhdWNoICZ1dW1sO2JlciBlaW5lIGRpcmVrdGUgRW1haWwuPC9saT4gIA0KPC91bD4NCjxoMz5QYXJhbWV0ZXI8L2gzPg0KPHVsPg0KPGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gZm9ybT0mcXVvdDtuYW1lJnF1b3Q7PC9saT4NCjxwPkZvcm11bGFyZToNCjx1bD4NCiA8bGk+PGVtPmxvZ2luPC9lbT4gLSBaZWlndCBkYXMgRm9ybXVsYXIgenVyIEFubWVsZHVuZyBhbjwvbGk+DQogPGxpPjxlbT5sb2dvdXQ8L2VtPiAtIFplaWd0IGRhcyBGb3JtdWxhciB6dXIgQWJtZWxkdW5nIGFuPC9saT4NCiA8bGk+PGVtPmNoYW5nZXNldHRpbmdzPC9lbT4gLSBaZWlndCBkYXMgRm9ybXVsYXIgenVtICZBdW1sO25kZXJuIGRlciBFaW5zdGVsbHVuZ2VuIGFuPC9saT4NCiA8bGk+PGVtPmZvcmdvdHB3PC9lbT4gLSBaZWlndCBkYXMgRm9ybXVsYXIgZiZ1dW1sO3IgdmVyZ2Vzc2VuZSBQYXNzdyZvdW1sO3J0ZXIgYW48L2xpPg0KPC91bD4NCjwvcD4NCjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IHJldHVybnRvPSZxdW90O3BhZ2UmcXVvdDs8L2xpPg0KPHA+RGllc2VyIFBhcmFtZXRlciBlbnRoJmF1bWw7bHQgZGllIElEIG9kZXIgZGVuIEFsaWFzIGVpbmVyIFNlaXRlLCBhdWYgZGllIGRlciBVc2VyIHdlaXRlcmdlbGVpdGV0IHdpcmQsIHdlbm4gamV3ZWlscyBkYXMgRm9ybXVsYXIgZXJmb2xncmVpY2ggYXVzZ2VmJnV1bWw7bGx0IHd1cmRlLiBFciBsJmF1bWw7c3N0IHNpY2ggaW4gVmVyYmluZHVuZyBtaXQgZGVuIEZvcm11bGFyZW4genVyIEFuLSB1bmQgQWJtZWxkdW5nIHNvd2llIHp1bSAmQXVtbDtuZGVybiBkZXIgRWluc3RlbGx1bmdlbiBudXR6ZW4uPC9wPg0KPC91bD4NCjxwPk5hY2ggZGVyIEdQTCB3aXJkIGRpZXNlIFNvZnR3YXJlIHNvIHZlciZvdW1sO2ZmZW50bGljaHQsIHdpZSBzaWUgaXN0LiBCaXR0ZSBsZXNlbiBTaWUgZGVuIExpemVuenRleHQgZiZ1dW1sO3IgZGVuIHZvbGxlbiBIYWZ0dW5nc2F1c3NjaGx1c3MuPC9wPg0KPGgzPkFuZm9yZGVydW5nZW48L2gzPg0KPHA+VW0gZGllIEZ1bmt0aW9uIGYmdXVtbDtyIGRpZSB2ZXJnZXNzZW5lbiBQYXNzdyZvdW1sO3J0ZXIgenUgbnV0emVuLCBtdXNzIHp1dm9yIGRhcyBDTVNNYWlsZXItTW9kdWwgaW5zdGFsbGllcnQgd2VyZGVuLjwvcD4NCjxoMz5Db3B5cmlnaHQgdW5kIExpemVuejwvaDM+DQo8cD5Db3B5cmlnaHQgJmFtcDtjb3B5OyAyMDA1LCBSb2JlcnQgQ2FtcGJlbGwgPGEgaHJlZj0mcXVvdDttYWlsdG86Y2FsZ3V5MTAwMEBob3RtYWlsLmNvbSZxdW90Oz5jYWxndXkxMDAwQGhvdG1haWwuY29tPC9hPi4gQWxsZSBSZWNodGUgdm9yYmVoYWx0ZW4uPC9wPg0KPHA+RGllc2VzIE1vZHVsIHd1cmRlIHVudGVyIGRlciA8YSBocmVmPSZxdW90O2h0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCZxdW90Oz5HTlUgUHVibGljIExpY2Vuc2U8L2E+IHZlciZvdW1sO2ZmZW50bGljaHQuIFNpZSBtJnV1bWw7c3NlbiBkaWVzZXIgTGl6ZW56IHp1c3RpbW1lbiwgYmV2b3IgU2llIGRhcyBNb2R1bCB2ZXJ3ZW5kZW4uPC9wPic7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjIxMDgzNjUyLjExNDcyNDA2NjcuMTE0NzI0MDY2Ny4xMTQ3MjQwNjY3LjEnOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMTQ3MjQwNjY3LjEuMS51dG1jY249KGRpcmVjdCl8dXRtY3NyPShkaXJlY3QpfHV0bWNtZD0obm9uZSknOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/el_GR.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ3Byb21wdF91bmZsZGxlbiddID0gJ86czq7Ous6/z4Igz4DOtc60zq/Ov8+FIM6zzrnOsSDPhM6/IM+Mzr3Ov868zrEgz4fPgc6uz4PPhM63JzsKJGxhbmdbJ3Byb21wdF9wd2ZsZGxlbiddID0gJ86czq7Ous6/z4Igz4DOtc60zq/Ov8+FIM6zzrnOsSDPhM6/zr0gzrrPic60zrnOus+MJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRwYXNzd29yZGxlbmd0aHMnXSA9ICfOpM6/IM61zrvOrM+HzrnPg8+Ezr8vzrzOrc6zzrnPg8+Ezr8gzrzOrs66zr/PgiDOs865zrEgz4TOv869IM66z4nOtM65zrrPjCDOtM61zr0gzrXOr869zrHOuSDOsc+Azr/OtM61zrrPhM+MJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWR1c2VybmFtZWxlbmd0aHMnXSA9ICfOpM6/IM61zrvOrM+HzrnPg8+Ezr8vzrzOrc6zzrnPg8+Ezr8gzrzOrs66zr/PgiDOs865zrEgz4TOvyDPjM69zr/OvM6xIM+Hz4HOrs+Dz4TOtyDOtM61zr0gzrXOr869zrHOuSDOsc+Azr/OtM61zrrPhM+MJzsKJGxhbmdbJ2Vycm9yX25vZW1haWxhZGRyZXNzJ10gPSAnzpTOtc69IM61z4XPgc6tzrjOt866zrUgzrTOuc61z43OuM+Fzr3Pg863IGVtYWlsIM6zzrnOsSDOsc+Fz4TPjM69IM+Ezr/OvSDOu86/zrPOsc+BzrnOsc+DzrzPjCc7CiRsYW5nWyd1c2VyX2FkZGVkJ10gPSAnzp8gz4fPgc6uz4PPhM63z4Igz4DPgc6/z4PPhM6tzrjOt866zrUgJXMgPSAlcyc7CiRsYW5nWyd1c2VyX2RlbGV0ZWQnXSA9ICfOnyDPh8+Bzq7Pg8+EzrfPgiDOtM65zrHOs8+BzqzPhs63zrrOtSB1aWQ9JXMnOwokbGFuZ1sncHJvcGVydHlmaWx0ZXInXSA9ICfOmc60zrnPjM+EzrfPhM6xJzsKJGxhbmdbJ3ZhbHVlcmVnZXgnXSA9ICfOpM65zrzOriAocmVndWxhciBleHByZXNzaW9uKSc7CiRsYW5nWyd3YXJuaW5nX2VmZmVjdHNmaWVsZGxlbmd0aCddID0gJ86gz4HOv861zrnOtM6/z4DOv86vzrfPg863OiDOpM6xIM+AzrXOtM6vzrEgzrHPhc+EzqwgzrXPgM63z4HOtc6szrbOv8+Fzr0gz4TOvyDOvM6tzrPOtc64zr/PgiDPhM+Jzr0gz4DOtc60zq/Pic69IM61zrnPg86xzrPPic6zzq7PgiDOs865zrEgz4TOuc+CIM+Gz4zPgc68zrXPgi4gIM6XIM61zrvOu86sz4TPic+Dzrcgz4TOv8+FIM6xz4HOuc64zrzOv8+NIM6xz4XPhM6/z40gz4POtSDOv8+Azr/Ouc6/zrTOrs+Azr/PhM61IM+Fz4DOsc+BzrrPhM+MIM60zrnOus+Ez4XOsc66z4wgz4TPjM+Azr8gzrTOtc69IM61zr3OtM61zq/Ous69z4XPhM6xzrknOwokbGFuZ1snY29uZmlybV9zdWJtaXRwcmVmcyddID0gJ86Yzq3Ou861z4TOtSDPhM63zr0gzrHOu867zrHOs86uIM+Ez4nOvSDPgM+Bzr/PhM65zrzOrs+DzrXPic69IM+Ezr/PhSDOtM65zrHPh861zrnPgc65z4PPhM6uPyc7CiRsYW5nWydlcnJvcl9lbWFpbGFscmVhZHl1c2VkJ10gPSAnzpcgzrTOuc61z43OuM+Fzr3Pg863IEVtYWlsIM6uzrTOtyDPh8+BzrfPg865zrzOv8+Azr/Ouc61zq/PhM6xzrknOwokbGFuZ1sncHJvbXB0X2FsbG93X2R1cGxpY2F0ZV9lbWFpbHMnXSA9ICfOnc6xIM61z4DOuc+Ez4HOrc+Azr/Ovc+EzrHOuSDOtM65z4DOu86sIGVtYWlscyc7CiRsYW5nWydpbmZvX2FsbG93X2R1cGxpY2F0ZV9lbWFpbHMnXSA9ICcozp3OsSDOtc+AzrnPhM+Bzq3PgM6/zr3PhM6xzrkgz4DOv867zrvOsc+AzrvOv86vIM+Hz4HOrs+Dz4TOtc+CIM68zrUgz4TOt869IM6vzrTOuc6xIM60zrnOtc+NzrjPhc69z4POtyBlbWFpbCknOwokbGFuZ1snZXJyb3JfbWlzc2luZ3VzZXJuYW1lJ10gPSAnzpTOtc69IM6tz4fOtc+EzrUgzrXOuc+DzqzOs861zrkgzq3Ovc6xIM+Mzr3Ov868zrEgz4fPgc6uz4PPhM63JzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdwYXNzd29yZCddID0gJ86UzrXOvSDOrc+HzrXPhM61IM61zrnPg86szrPOtc65IM6tzr3Osc69IM66z4nOtM65zrrPjCDPgM+Bz4zPg86yzrHPg863z4InOwokbGFuZ1snZnJvbnRlbmR1c2VyX2xvZ291dCddID0gJ86Rz4DOv8+Dz43Ovc60zrXPg863IM61zrPOs861zrPPgc6xzrzOrc69zr/PhSDPh8+Bzq7Pg8+EzrcnOwokbGFuZ1snZnJvbnRlbmR1c2VyX2xvZ2dlZGluJ10gPSAnzqPPjc69zrTOtc+DzrcgzrXOs86zzrXOs8+BzrHOvM6tzr3Ov8+FIM+Hz4HOrs+Dz4TOtyc7CiRsYW5nWydlZGl0cHJvcF9pbmZvbXNnJ10gPSAnPGZvbnQgY29sb3I9JnF1b3Q7cmVkJnF1b3Q7PjxiPs6gz4HOv8+Dzr/Ph86uIM+Dz4TOt869IM+Hz4HOrs+Dzrc8L2I+IM6XIM6xzrvOu86xzrPOriDPhM+Jzr0gzrnOtM65zr/PhM6uz4TPic69IM+Azr/PhSDOuc+Dz4fPjc6/z4XOvSDOs865zrEgz4TOuc+CIM+Fz4DOrM+Bz4fOv8+Fz4POtc+CIM6/zrzOrM60zrXPgiwgzrzPgM6/z4HOtc6vIM69zrEgzrXPgM65z4bOrc+BzrXOuSDOus6xz4TOsc+Dz4TPgc6/z4bOriDOus6xzrkgzrTOuc6xzrrOv8+Azq4gzrvOtc65z4TOv8+Fz4HOs86vzrHPgiDPg861IM6/z4DOv865zr/OtM6uz4DOv8+EzrUgz4XPgM6sz4HPh86/zr3PhM6xIM60zrnOus+Ez4XOsc66z4wgz4TPjM+Azr8gPGk+KM65zrTOuc6xzq/PhM61z4HOsSDOsc69IM61zrvOu86xz4TPjs+DzrXPhM61IM+EzrEgzrzOrs66zrcgz4TPic69IM+AzrXOtM6vz4nOvSwgzrrOu8+AKTwvaT48L2ZvbnQ+JzsKJGxhbmdbJ2luZm9fc210cHZhbGlkYXRlJ10gPSAnzpHPhc+Ezq4gzrcgzrTOuc6xzrTOuc66zrHPg86vzrEgzrTOtc69IM67zrXOuc+Ezr/Phc+BzrPOtc6vIM+Dz4TOsSB3aW5kb3dzJzsKJGxhbmdbJ21zZ19kb250Y3JlYXRldXNlcm5hbWUnXSA9ICfOnM6uzr0gzrTOt868zrnOv8+Fz4HOs86uz4POtc+EzrUgzrzOr86xIM65zrTOuc+Mz4TOt8+EzrEgzrPOuc6xIM6tzr3OsSDPjM69zr/OvM6xIM+Hz4HOrs+Dz4TOtyDOriDOus6sz4TOuSDPgM6xz4HPjM68zr/Ouc6/IM66zrHOuM+Oz4IgzrHPhc+Ez4wgzrXOr869zrHOuSDOtc69z4PPic68zrHPhM+JzrzOrc69zr8gz4PPhM6/IM6sz4HOuM+Bz4nOvM6xICBGcm9udEVuZFVzZXJzJzsKJGxhbmdbJ3Byb21wdF9leHBvcnRjc3YnXSA9ICfOlc6+zrHOs8+JzrPOriDPh8+BzrfPg8+Ez47OvSDPg861IM6xz4HPh861zq/OvyDPhM+Nz4DOv8+FIENTVic7CiRsYW5nWydleHBvcnRjc3YnXSA9ICfOlc6+zrHOs8+JzrPOric7CiRsYW5nWydhZG1pbiddID0gJ86UzrnOsc+HzrXOuc+BzrnPg8+Ezq7Pgic7CiRsYW5nWydlZGl0cHJvcCddID0gJ86Vz4DOtc6+zrXPgc6zzrHPg86vzrEgzrnOtM65z4zPhM63z4TOsc+CJzsKJGxhbmdbJ21heGxlbmd0aCddID0gJ86czq3Os865z4PPhM6/IM68zq7Ous6/z4InOwokbGFuZ1snY3JlYXRlZCddID0gJ86UzrfOvM65zr/Phc+BzrPOrs64zrfOus61JzsKJGxhbmdbJ3NvcnRieSddID0gJ86kzrHOvs65zr3PjM68zrfPg863IM66zrHPhM6xJzsKJGxhbmdbJ3NvcnQnXSA9ICfOpM6xzr7Ouc69z4zOvM63z4POtyc7CiRsYW5nWyd1c2Vyc2luZ3JvdXAnXSA9ICfOp8+Bzq7Pg8+EzrXPgiDPg8+EzrcozrnPgikgIM61z4DOuc67zrXOs868zq3Ovc63KM61z4IpIM6/zrzOrM60zrEozrXPgiknOwokbGFuZ1sndXNlcmxpbWl0J10gPSAnzpjOrc+Dzrcgzr/Pgc6vzr/PhSDPg8+EzrEgzrHPgM6/z4TOtc67zq3Pg868zrHPhM6xIM+DzrUnOwokbGFuZ1snZXJyb3Jfbm9lbWFpbGZpZWxkJ10gPSAnzpTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TOriDOtyDOtc+Nz4HOtc+DzrcgzrXOvc+Mz4Igz4DOtc60zq/Ov8+FIGVtYWlsIM6zzrnOsSDOsc+Fz4TPjM69IM+Ezr/OvSDPh8+Bzq7Pg8+EzrcuICDOmc+Dz4nPgiDPgM+Bzq3PgM61zrkgzr3OsSDOtc+AzrnOus6/zrnOvc+Jzr3Ors+DzrXPhM61IM68zrUgz4TOv869IM60zrnOsc+HzrXOuc+BzrnPg8+Ezq4gz4PPhc+Dz4TOrs68zrHPhM6/z4InOwokbGFuZ1sncHJvbXB0X2ZvcmdvdHB3X3BhZ2UnXSA9ICfOkc69zrHOs869z4nPgc65z4PPhM65zrrPjCDPg861zrvOr860zrHPgi/OjM69zr/OvM6xIM6xzr3PhM65z4PPhM6/zq/Ph865z4POt8+CIM6zzrnOsSDPhM63zr0gz4bPjM+BzrzOsSAizp7Orc+HzrHPg86xIM+Ezr/OvSDOus+JzrTOuc66z4wgz4DPgc+Mz4POss6xz4POt8+CIic7CiRsYW5nWydwcm9tcHRfY2hhbmdlc2V0dGluZ3NfcGFnZSddID0gJ86Rzr3Osc6zzr3Pic+BzrnPg8+EzrnOus+MIM+DzrXOu86vzrTOsc+CL86Mzr3Ov868zrEgzrHOvc+EzrnPg8+Ezr/Or8+HzrnPg863z4IgzrPOuc6xIM+EzrfOvSDPhs+Mz4HOvM6xICLOkc67zrvOsc6zzq4gz4HPhc64zrzOr8+DzrXPic69Iic7CiRsYW5nWydwcm9tcHRfbG9naW5fcGFnZSddID0gJ86Rzr3Osc6zzr3Pic+BzrnPg8+EzrnOus+MIM+DzrXOu86vzrTOsc+CL86Mzr3Ov868zrEgzrHOvc+EzrnPg8+Ezr/Or8+HzrnPg863z4Igz4PPhM63zr0gzr/PgM6/zq/OsSDOuM6xIM68zrXPhM6xz4bOrc+Bzr/Ovc+EzrHOuSDOvM61z4TOsSDPhM63zr0gzrXOr8+Dzr/OtM6/JzsKJGxhbmdbJ3Byb21wdF9sb2dvdXRfcGFnZSddID0gJ86Rzr3Osc6zzr3Pic+BzrnPg8+EzrnOus+MIM+DzrXOu86vzrTOsc+CL86Mzr3Ov868zrEgzrHOvc+EzrnPg8+Ezr/Or8+HzrnPg863z4LPg8+EzrfOvSDOv8+Azr/Or86xIM64zrEgzrzOtc+EzrHPhs6tz4HOv869z4TOsc65IM68zrXPhM6sIM+EzrfOvSDOrc6+zr/OtM6/JzsKJGxhbmdbJ3NvcnRvcmRlciddID0gJ86kz4HPjM+Azr/PgiDPhM6xzr7Ouc69z4zOvM63z4POt8+CJzsKJGxhbmdbJ3Byb21wdF9udW1yZXNldHJlY29yZCddID0gJ86Izr3Osc+CIM6xz4HOuc64zrzPjM+CIM+Hz4HOt8+Dz4TPjs69IM61z4XPgc6vz4POus6/zr3PhM6xzrkgz4PPhM63zr0gzrTOuc6xzrTOuc66zrHPg86vzrEgzrHOu867zrHOs86uz4Igz4fOsc68zq3Ovc+Jzr0gzrrPic60zrnOus+Ozr0gz4DPgc+Mz4POss6xz4POt8+CLiAgzqPPhM63zr0gz4DOsc+Bzr/Pjc+DzrEgz4PPhM65zrPOvM6uIM6/IM6xz4HOuc64zrzPjM+CIM6xz4XPhM+Mz4IgzrXOr869zrHOuTonOwokbGFuZ1sncmVtb3ZlMXdlZWsnXSA9ICfOms6xz4TOrM+BzrPOt8+Dzrcgz4zOu8+Jzr0gzrXOus61zq/Ovc+Jzr0gz4TPic69IM61zrPOs8+BzrHPhs+Ozr0gz4DOv8+FIM61zq/Ovc6xzrkgz4DOsc67zrHOuc+Mz4TOtc+BzrXPgiDOsc+Azr8gzrzOuc6xIM61zrLOtM6/zrzOrM60zrEnOwokbGFuZ1sncmVtb3ZlMW1vbnRoJ10gPSAnzprOsc+EzqzPgc6zzrfPg863IM+MzrvPic69IM61zrrOtc6vzr3Pic69IM+Ez4nOvSDOtc6zzrPPgc6xz4bPjs69IM+Azr/PhSDOtc6vzr3Osc65IM+AzrHOu86xzrnPjM+EzrXPgc61z4IgzrHPgM6/IM6tzr3OsSDOvM6uzr3OsSc7CiRsYW5nWydyZW1vdmVhbGwnXSA9ICfOms6xz4TOrM+BzrPOt8+Dzrcgz4zOu8+Jzr0gz4TPic69IM61zrPOs8+BzrHPhs+Ozr0nOwokbGFuZ1snYXJleW91c3VyZSddID0gJ86Vzq/Pg8+EzrUgz4POr86zzr/Phc+Bzr/OuT8nOwokbGFuZ1snZXJyb3JfaW52YWxpZGNvZGUnXSA9ICfOiM+HzrXOuSDOtc65z4POsc+HzrjOtc6vIM68zrcgzq3Os866z4XPgc6/z4IgzrrPjs60zrnOus6xz4IsIM+Az4HOv8+Dz4DOsc64zq7Pg8+EzrUgzr7Osc69zqwnOwokbGFuZ1snZXJyb3JfdGVtcGNvZGVub3Rmb3VuZCddID0gJ86UzrXOvSDOrc+HzrXOuSDOss+BzrXOuM61zq8gz4DPgc6/z4PPic+BzrnOvc+Mz4IgzrrPjs60zrnOus6xz4Igz4DOv8+FIM69zrEgzrHOvc+EzrnPg8+Ezr/Ouc+HzrXOryDPg8+Ezr8gzrTOuc66z4wgz4POsc+CIM6xzr3Osc6zzr3Pic+BzrnPg8+EzrnOus+MIM+Hz4HOrs+Dz4TOtyDPg8+EzrfOvSDOss6sz4POtyDOtM61zrTOv868zq3Ovc+Jzr0nOwokbGFuZ1snZm9yZ290cGFzc3dvcmRfdmVyaWZ5dGVtcGxhdGUnXSA9ICfOoM+Bz4zPhM+Fz4DOvyDOtc68z4bOrM69zrnPg863z4Igz4TOt8+CIM+Gz4zPgc68zrHPgiDOtc+AzrHOu86uzrjOtc+Fz4POt8+CIM+Dz4TOv865z4fOtc6vz4nOvSc7CiRsYW5nWydmb3Jnb3RwYXNzd29yZF9lbWFpbHRlbXBsYXRlJ10gPSAnzqDPgc+Mz4TPhc+Azr8gZW1haWwgzrPOuc6xIM+Ezr/Phc+CIM6+zrXPh86xz4POvM6tzr3Ov8+Fz4IgzrrPic60zrnOus6/z43PgiDPgM+Bz4zPg86yzrHPg863z4InOwokbGFuZ1snZXJyb3JfcmVzZXRhbHJlYWR5c2VudCddID0gJ86JIM61z4POtc6vz4Igzq4gzrrOrM+Azr/Ouc6/z4IgzqzOu867zr/PgiDOrc+HzrXOuSDOrs60zrcgzrXOus66zrnOvc6uz4POtc65IM60zrnOsc60zrnOus6xz4POr86xIM6zzrnOsSDPhM63zr0gzrHOu867zrHOs86uIM66z4nOtM65zrrOv8+NIM+Az4HPjM+DzrLOsc+DzrfPgiDOs865zrEgzrHPhc+Ez4zOvSDPhM6/zr0gzrvOv86zzrHPgc65zrHPg868z4wuICDOlc67zq3Os86+z4TOtSDPhM6/IGVtYWlsIM+DzrHPgiwgzrzPgM6/z4HOtc6vz4TOtSDOvc6xIM67zqzOss61z4TOtSDPgM61z4HOsc65z4TOrc+Bz4kgzr/OtM63zrPOr861z4IgzrPOuc6xIM+EzrfOvSDOsc67zrvOsc6zzq4gzrrPic60zrnOus6/z40gz4PPhM6xIM61zrnPg861z4HPh8+MzrzOtc69zrEnOwokbGFuZ1snZXJyb3JfZGJlcnJvciddID0gJ86jz4bOrM67zrzOsSDOss6sz4POt8+CIM60zrXOtM6/zrzOrc69z4nOvSc7CiRsYW5nWydtZXNzYWdlX2ZvcmdvdHB3ZW1haWwnXSA9ICfOlc67zqzOss6xz4TOtSDOsc+Fz4TPjCDPhM6/IM68zq7Ovc+FzrzOsSDOtc+AzrXOuc60zq4gzrrOrM+Azr/Ouc6/z4IgzrHOvc6tz4bOtc+BzrUgz4PPhM6/zr0gzrTOuc66z4TPhc6xzrrPjCDPhM+Mz4DOvyDPjM+Ezrkgzq3Ph861z4TOtSDOvs61z4fOrM+DzrXOuSDPhM6/zr0gzrrPic60zrnOus+MIM+Az4HPjM+DzrLOsc+DzrfPgi4gIM6Rzr0gz4zOvc+Ez4nPgiDOrc+Ez4POuSDPg8+FzrzOss6xzq/Ovc61zrkgzrTOuc6xzrLOrM+Dz4TOtSDPhM65z4Igz4DOsc+BzrHOus6sz4TPiSDOv860zrfOs86vzrXPgi4gIM6Rzr0gzrTOtc69IM6tz4fOtc+EzrUgzrnOtM6tzrEgzrPOuc6xIM6xz4XPhM+MIM+Ezr8gzrjOrc68zrEgzrTOuc6xzrPPgc6sz4jPhM61IM68zrUgzrHPg8+GzqzOu861zrnOsSDPhM6/IM+AzrHPgc+Mzr0gzrzOrs69z4XOvM6xLCDPg86xz4IgzrXPhc+HzrHPgc65z4PPhM6/z43OvM61IM6zzrnOsSDPhM6/zr0gz4fPgc+Mzr3OvyDPg86xz4IuJzsKJGxhbmdbJ3Byb21wdF9jb2RlJ10gPSAnzprPjs60zrnOus6xz4InOwokbGFuZ1snbWVzc2FnZV9jb2RlJ10gPSAnzp8gz4DOsc+BzrHOus6sz4TPiSDOus+OzrTOuc66zrHPgiDOrc+HzrXOuSDOtM63zrzOuc6/z4XPgc6zzrfOuM61zq8gz4TPhc+HzrHOr86xIM+Az4HOv866zrXOuc68zq3Ovc6/z4Ugzr3OsSDOtc+AzrHOu863zrjOtc+Fz4TOtc6vIM6/IM67zr/Os86xz4HOuc6xz4POvM+Mz4Igz4fPgc6uz4PPhM63LiAgz4zPhM6xzr0gzrrOrM69zrXPhM61IM66zrvOr866IM+Dz4TOv869IM+Fz4DOtc+Bz4PPjc69zrTOtc+DzrzOvyDPgM6/z4UgzrHOus6/zrvOv8+FzrjOtc6vIM64zrEgz4POsc+CIM61zrzPhs6xzr3Ouc+Dz4TOtc6vIM6tzr3OsSDPgM61zrTOr86/IM6zzrnOsSDPhM63zr0gzrXOuc+DzrHOs8+JzrPOriDPhM6/z4UgzrrPjs60zrnOus6xLiAgzqPPhc69zq7OuM+Jz4Igz4TOvyDPgM61zrTOr86/IM6tz4fOtc65IM+Az4HOv8+Dz4XOvM+AzrvOt8+Bz4nOvM6tzr3OvyDPhM6/zr0gzrrPjs60zrnOus6xIM6xzrvOu86xIM+Dz4TOt869IM+AzrXPgc6vz4DPhM+Jz4POtyDPgM6/z4UgzrTOtc69IM61zq/Ovc6xzrksIM6/IM66z47OtM65zrrOsc+CIM61zq/Ovc6xzrk6JzsKJGxhbmdbJ3Byb21wdF9saW5rJ10gPSAnzprOrM69z4nOvc+EzrHPgiDOus67zq/OuiDPg8+Ezr8gz4DOsc+BzrHOus6sz4TPiSDPhc+AzrXPgc+Dz43Ovc60zrXPg868zr8gzrjOsSDOvM61z4TOsc+GzrXPgc64zrXOr8+EzrUgz4PPhM6/IM60zrnOus+Ez4XOsc66z4wgz4TPjM+Azr8gz4zPgM6/z4UgzrjOsSDOtc65z4POrM6zzrXPhM61IM+Ezr/OvSDPgM6xz4HOsc+AzrHOrM69z4IgzrrPjs60zrnOus6xIM66zrHOuSDOuM6xIM6xzrvOu86szr7Otc+EzrUgz4TOv869IM66z4nOtM65zrrPjDonOwokbGFuZ1snbG9zdHBhc3N3b3JkX2VtYWlsc3ViamVjdCddID0gJ86ezrXPh86xz4POvM6tzr3Ov8+CIM66z4nOtM65zrrPjM+CJzsKJGxhbmdbJ2Vycm9yX25vbWFpbGVybW9kdWxlJ10gPSAnzpTOtc69IM6uz4TOsc69IM60z4XOvc6xz4TOriDOtyDOtc+Nz4HOtc+Dzrcgz4TOv8+FIM6xz4HOuM+Bz47OvM6xz4TOv8+CIENNU01haWxlcic7CiRsYW5nWydpbmZvX2ZvcmdvdHB3bWVzc2FnZXNlbnQnXSA9ICfOiM+HzrXOuSDOsc+Azr/Pg8+EzrHOu867zrXOryBlbWFpbCDPg8+Ezr/OvSAlcyDOvM61IM6/zrTOt86zzq/Otc+CIM6zzrnOsSDPhM6/zr0gz4TPgc+Mz4DOvyDOsc67zrvOsc6zzq7PgiDOus+JzrTOuc66zr/PjS4gIM6jzrHPgiDOtc+Fz4fOsc+BzrnPg8+Ezr/Pjc68zrUnOwokbGFuZ1snbG9zdHB3X21lc3NhZ2UnXSA9ICfOj8+Dz4TOtSDOvs61z4fOrM+DzrHPhM61IM6uIM+HzqzPg86xz4TOtSDPhM6/zr0gzrrPic60zrnOus+MIM+Az4HPjM+DzrLOsc+DzrfPgi4gzpvOv865z4DPjM69LCDPgM67zrfOus+Ez4HOv867zr/Os86uz4PPhM61IM+Ezr8gz4zOvc6/zrzOsSDPh8+Bzq7Pg8+EzrcgzrXOtM+OLCDOus6xzrkgzqzOvSDOtc6vzr3Osc65IM60z4XOvc6xz4TOriDOtyDOtc+Nz4HOtc+Dzrcgz4POsc+CIM64zrEgz4POsc+CIM+Dz4TOsc67zrvOtc6vIM6tzr3OsSBlbWFpbCDOvM61IM6/zrTOt86zzq/Otc+CIM6zzrnOsSDPhM63zr0gzrHOu867zrHOs86uIM+Ezr/PhSc7CiRsYW5nWydmb3Jnb3RwYXNzd29yZF90ZW1wbGF0ZSddID0gJ86gz4HPjM+Ez4XPgM6xIM6zzrnOsSDPhM6/z4XPgiDPh86xzrzOrc69zr/Phc+CIM66z4nOtM65zrrOv8+Nz4InOwokbGFuZ1snZXJyb3JfcHJvcG5vdGZvdW5kJ10gPSAnzpTOtc69IM61z4XPgc6tzrjOt866zrUgzrcgzrnOtM65z4zPhM63z4TOsSAlcyAnOwokbGFuZ1sncHJvcHNmb3VuZCddID0gJ86Vz4XPgc6tzrjOt866zrHOvSDOv865IM65zrTOuc+Mz4TOt8+EzrXPgic7CiRsYW5nWydhZGRwcm9wJ10gPSAnzqDPgc6/z4POuM6uzrrOtyDOuc60zrnPjM+EzrfPhM6xz4InOwokbGFuZ1snZXJyb3JfcmVxdWlyZWRmaWVsZCddID0gJ86kzr8gzrHPgM6xzrnPhM6/z43OvM61zr3OvyDPgM61zrTOr86/ICglcykgzq7PhM6xzr0gzrrOtc69z4wnOwokbGFuZ1snaW5mb19lbXB0eXBhc3N3b3JkZmllbGQnXSA9ICfOlc65z4POrM6zzrXPhM61IM6tzr3Osc69IM69zrXPjCDOus+JzrTOuc66z4wgzrXOtM+OIM+Az4HOv866zrXOuc68zq3Ovc6/z4Ugzr3OsSDOsc67zrvOrM6+zrXPhM61IM66z4nOtM65zrrPjCc7CiRsYW5nWydlcnJvcl9ub3Rsb2dnZWRpbiddID0gJ86UzrXOvSDOrc+HzrXPhM61IM66zqzOvc61zrkgzrXOuc+DzrHOs8+JzrPOric7CiRsYW5nWyd1c2VyX3NldHRpbmdzJ10gPSAnzqHPhc64zrzOr8+DzrXOuc+CJzsKJGxhbmdbJ3VzZXJfcmVnaXN0cmF0aW9uJ10gPSAnzpXOs86zz4HOsc+Gzq4nOwokbGFuZ1snZXJyb3JfYWNjb3VudGV4cGlyZWQnXSA9ICfOkc+Fz4TPjM+CIM6/IM67zr/Os86xz4HOuc6xz4POvM+Mz4Igzq3Ph861zrkgzrvOrs6+zrXOuSc7CiRsYW5nWydlcnJvcl9pbXByb3BlcmVtYWlsZm9ybWF0J10gPSAnzpHOvc+EzrnOus6xzr3Ov869zrnOus6uIM68zr/Pgc+Gzq4gzrTOuc61z43OuM+Fzr3Pg863z4IgZW1haWwnOwokbGFuZ1snZXJyb3JfaW52YWxpZGV4cGlyeWRhdGUnXSA9ICfOnM63IM6xz4DOv860zrXOus+Ezq4gzrfOvM61z4HOv868zrfOvc6vzrEgzrvOrs6+zrfPgic7CiRsYW5nWydlcnJvcl9wcm9ibGVtc2V0dGluZ3Byb3BlcnR5J10gPSAnzqPPhs6szrvOvM6xIM+Dz4TOt869IM+Bz43OuM68zrnPg863IM+EzrfPgiDOuc60zrnPjM+EzrfPhM6xz4IgJXMgzrPOuc6xIM+Ezr/OvSDPh8+Bzq7Pg8+EzrcgJHMnOwokbGFuZ1snZXJyb3JfaW52YWxpZGdyb3VwaWQnXSA9ICfOnM63IM6xz4DOv860zrXOus+Ez4wgzrHOvc6xzrPOvc+Jz4HOuc+Dz4TOuc66z4wgzrPOuc6xIM+EzrfOvSDOv868zqzOtM6xICVzJzsKJGxhbmdbJ2hpZGRlbmZpZWxkbWFya2VyJ10gPSAnzprPgc+Fz4bPjCDPgM61zrTOr86/IM60zrXOr866z4TOtyc7CiRsYW5nWydoaWRkZW5maWVsZGNvbG9yJ10gPSAnzprPgc+Fz4bPjCDPgM61zrTOr86/IM+Hz4HPjs68zrHPhM6/z4InOwokbGFuZ1snaGlkZGVuJ10gPSAnzprPgc+Fz4bPjCc7CiRsYW5nWydlcnJvcl9kdXBsaWNhdGVuYW1lJ10gPSAnzpcgzr/Ovc6/zrzOsc+Dzq/OsSDOsc+Fz4TOrs+CIM+EzrfPgiDOmc60zrnPjM+EzrfPhM6xz4Igzq3Ph861zrkgzq7OtM63IM6xz4DOv860zr/OuM61zq8nOwokbGFuZ1snZXJyb3Jfbm9wcm9wZXJ0aWVzJ10gPSAnzpTOtc69IM6tz4fOv8+Fzr0gzr/Pgc65z4PPhM61zq8gzrnOtM65z4zPhM63z4TOtc+CJzsKJGxhbmdbJ2Vycm9yX25vcmVsYXRpb25zJ10gPSAnzpTOtc69IM6tz4fOv8+Fzr0gzrXPgM65zrvOtc6zzrXOryDOuc60zrnPjM+EzrfPhM61z4IgzrPOuc6xIM6xz4XPhM6uzr0gz4TOt869IM6/zrzOrM60zrEnOwokbGFuZ1snZ3JvdXBzZm91bmQnXSA9ICfOlc+Fz4HOrc64zrfOus6xzr0gzr/OvM6szrTOtc+CJzsKJGxhbmdbJ2Vycm9yX29uZWdyb3VwcmVxdWlyZWQnXSA9ICfOkc+AzrHOuc+EzrXOr8+EzrHOuSDPg8+FzrzOvM61z4TOv8+Hzq4gz4POtSDPhM6/z4XOu86sz4fOuc+Dz4TOv869IM68zq/OsSDOv868zqzOtM6xJzsKJGxhbmdbJ3Byb21wdF9yZXF1aXJlb25lZ3JvdXAnXSA9ICfOkc+AzrHOuc+EzrXOr8+EzrHOuSDPg8+FzrzOvM61z4TOv8+Hzq4gz4POtSDPhM6/z4XOu86sz4fOuc+Dz4TOv869IM68zq/OsSDOv868zqzOtM6xJzsKJGxhbmdbJ2JhY2snXSA9ICfOoM6vz4PPiSc7CiRsYW5nWydlcnJvcl9taXNzaW5nX3JlcXVpcmVkX3BhcmFtJ10gPSAnzqTOvyAlcyDOtc6vzr3Osc65IM6xz4DOsc65z4TOv8+NzrzOtc69zr8gz4DOtc60zq/Ovyc7CiRsYW5nWydyZXF1aXJlZGZpZWxkbWFya2VyJ10gPSAnzqPOt868zqzOvc61z4TOtSDPhM6xIM6xz4DOsc65z4TOv8+NzrzOtc69zrEgz4DOtc60zq/OsSDOvM61JzsKJGxhbmdbJ3JlcXVpcmVkZmllbGRjb2xvciddID0gJ86Vz4DOuc+DzrfOvM6szr3Otc+EzrUgz4TOsSDOsc+AzrHOuc+Ezr/Pjc68zrXOvc6xIM+AzrXOtM6vzrEgzrzOtSc7CiRsYW5nWyduZXh0J10gPSAnzpXPgM+MzrzOtc69zr8nOwokbGFuZ1snZXJyb3JfZ3JvdXBleGlzdHMnXSA9ICfOpc+AzqzPgc+HzrXOuSDOrs60zrcgzr/OvM6szrTOsSDOvM61IM6xz4XPhM+MIM+Ezr8gz4zOvc6/zrzOsSc7CiRsYW5nWydyZXF1aXJlZCddID0gJ86Rz4DOsc65z4TOv8+NzrzOtc69zr8gz4DOtc60zq/Ovyc7CiRsYW5nWydvcHRpb25hbCddID0gJ86gz4HOv86xzrnPgc61z4TOuc66zqwnOwokbGFuZ1snb2ZmJ10gPSAnzpXOus+Ez4zPgic7CiRsYW5nWydsZW5ndGgnXSA9ICfOnM6uzrrOv8+CJzsKJGxhbmdbJ2xlbmd0aGNvbW1lbnQnXSA9ICc8YnI+KM+HzrHPgc6xzrrPhM6uz4HOtc+CIM+Dz4TOt869IM61zrnPg86xzrPPic6zzq4gzrrOtc65zrzOrc69zr/PhSknOwokbGFuZ1snc2Vsb3B0aW9ucyddID0gJ86Vz4DOuc67zr/Os86tz4IgzrzOtc69zr/PjSBEcm9wZG93biwgzrzOtSDOtM65zrHPh8+Jz4HOuc+Dz4TOuc66zq3PgiDOs8+BzrHOvM68zq3Pgic7CiRsYW5nWyd5ZXMnXSA9ICfOnc6xzrknOwokbGFuZ1sncHJvbXB0J10gPSAnzqDPgc6/z4TPgc6/z4DOric7CiRsYW5nWyd0eXBlJ10gPSAnzqTPjc+Azr/Pgic7CiRsYW5nWyd0ZXh0J10gPSAnzprOtc6vzrzOtc69zr8nOwokbGFuZ1snY2hlY2tib3gnXSA9ICfOkc69z4TOuc66zrXOr868zrXOvc6/IM61zrvOrc6zz4fOv8+FIENoZWNrYm94JzsKJGxhbmdbJ2VtYWlsJ10gPSAnzpTOuc61z43OuM+Fzr3Pg863IEVtYWlsJzsKJGxhbmdbJ3RleHRhcmVhJ10gPSAnzqDOtc+BzrnOv8+Hzq4gzrrOtc65zrzOrc69zr/PhSc7CiRsYW5nWydkcm9wZG93biddID0gJ86czrXOvc6/z40gRHJvcGRvd24nOwokbGFuZ1snbXNnX2N1cnJlbnRseWxvZ2dlZGluYXMnXSA9ICfOms6xzrvPjs+CIM6uzrvOuM6xz4TOtSc7CiRsYW5nWydsb2dvdXQnXSA9ICfOkc+Azr/Pg8+Nzr3OtM61z4POtyc7CiRsYW5nWydwcm9tcHRfY2hhbmdlc2V0dGluZ3MnXSA9ICfOkc67zrvOsc6zzq4gz4DPgc6/z4PPic+AzrnOus+Ozr0gz4HPhc64zrzOr8+DzrXPic69JzsKJGxhbmdbJ2Vycm9yX2xvZ2luZmFpbGVkJ10gPSAnzpcgz4PPjc69zrTOtc+DzrcgzrHPgM6tz4TPhc+HzrUgLSDOnM63IM6xz4DOv860zrXOus+Ez4wgz4zOvc6/zrzOsSDPh8+Bzq7Pg8+Ezrcgzq4gzrrPic60zrnOus6/z40nOwokbGFuZ1snbG9naW4nXSA9ICfOlc6vz4POv860zr/Pgic7CiRsYW5nWydwcm9tcHRfdXNlcm5hbWUnXSA9ICfOjM69zr/OvM6xIM+Hz4HOrs+Dz4TOtyc7CiRsYW5nWydwcm9tcHRfcGFzc3dvcmQnXSA9ICfOms+JzrTOuc66z4zPgic7CiRsYW5nWydyZWdpc3RlciddID0gJ86VzrPOs8+BzrHPhs6uJzsKJGxhbmdbJ2ZvcmdvdHB3J10gPSAnzp7Otc+HzqzPg86xz4TOtSDPhM6/zr0gzrrPic60zrnOus+MPyc7CiRsYW5nWydkZWZhdWx0cyddID0gJ86gz4HOv861z4DOuc67zr/Os86tz4InOwokbGFuZ1sndGVtcGxhdGUnXSA9ICfOoM+Bz4zPhM+Fz4DOvyc7CiRsYW5nWydlcnJvcl91c2Vybm90Zm91bmQnXSA9ICfOpM6/IM6xzr3Osc6zzr3Pic+BzrnPg8+EzrnOus+MIM+Hz4HOrs+Dz4TOtyDOtM61zr0gzrXPhc+Bzq3OuM63zrrOtSc7CiRsYW5nWydlcnJvcl91c2VybmFtZXRha2VuJ10gPSAnzpHPhc+Ez4wgz4TOvyDPjM69zr/OvM6xIM+Hz4HOrs+Dz4TOtyAoJXMpIM+Hz4HOt8+DzrnOvM6/z4DOv865zrXOr8+EzrHOuSDOrs60zrcnOwokbGFuZ1sncHJvbXB0X3NtdHB2YWxpZGF0ZSddID0gJ86nz4HOrs+DzrcgU01UUCDOs865zrEgz4TOt869IM61z4DOuc66z43Pgc+Jz4POtyDPhM+Jzr0gzrTOuc61z4XOuM+Nzr3Pg861z4nOvSBlbWFpbD8nOwokbGFuZ1sncHJvbXB0X21pbnB3bGVuJ10gPSAnzpXOu86sz4fOuc+Dz4TOvyDOvM6uzrrOv8+CIM6az4nOtM65zrrOv8+NJzsKJGxhbmdbJ3Byb21wdF9tYXhwd2xlbiddID0gJ86czq3Os865z4PPhM6/IM68zq7Ous6/z4IgzprPic60zrnOus6/z40nOwokbGFuZ1sncHJvbXB0X21pbnVubGVuJ10gPSAnzpXOu86sz4fOuc+Dz4TOvyDOvM6uzrrOv8+CIM6/zr3PjM68zrHPhM6/z4Igz4fPgc6uz4PPhM63JzsKJGxhbmdbJ3Byb21wdF9tYXh1bmxlbiddID0gJ86czq3Os865z4PPhM6/IM68zq7Ous6/z4Igzr/Ovc+MzrzOsc+Ezr/PgiDPh8+Bzq7Pg8+EzrcnOwokbGFuZ1sncHJvbXB0X3Nlc3Npb250aW1lb3V0J10gPSAnzqfPgc+Mzr3Ov8+CIM67zq7Ovs63z4IgzrTOuc61z4DOsc+Gzq7PgiAozrTOtc+Fz4TOtc+Bz4zOu861z4DPhM6xKSc7CiRsYW5nWydwcm9tcHRfYWxsb3dlbWFpbHJlZyddID0gJ86Vz4DOuc+Ez4HOrc+AzrXPhM6xzrkgzrcgzrXOs86zz4HOsc+Gzq4gz4PPhM63zr0gz4XPgM63z4HOtc+Dzq/OsSBFbWFpbCc7CiRsYW5nWydwcm9tcHRfZGZsdGdyb3VwJ10gPSAnzqDPgc6/zrXPgM65zrvOtc6zzrzOrc69zrcgzr/OvM6szrTOsSDOs865zrEgz4TOv8+Fz4Igzr3Orc6/z4XPgiDPh8+Bzq7Pg8+EzrXPgic7CiRsYW5nWydjaGFuZ2VzZXR0aW5nc190ZW1wbGF0ZSddID0gJ86RzrvOu86xzrPOriDPgc+FzrjOvM6vz4POtc+Jzr0gz4DPgc6/z4TPjc+Azr/PhSc7CiRsYW5nWydlcnJvcl9wYXNzd29yZG1pc21hdGNoJ10gPSAnzp/OuSDOus+JzrTOuc66zr/OryDPgM+Bz4zPg86yzrHPg863z4IgzrTOtc69IM+EzrHOuc+BzrnOrM62zr/Phc69JzsKJGxhbmdbJ2Vycm9yX2ludmFsaWR1c2VybmFtZSddID0gJ86czrcgzrHPgM6/zrTOtc66z4TPjCDPjM69zr/OvM6xIM+Hz4HOrs+Dz4TOtyc7CiRsYW5nWydlcnJvcl9pbnZhbGlkcGFzc3dvcmQnXSA9ICfOnM63IM6xz4DOv860zrXOus+Ez4zPgiDOus+JzrTOuc66z4zPgic7CiRsYW5nWydlZGl0dXNlciddID0gJ86Vz4DOtc6+zrXPgc6zzrHPg86vzrEgz4PPhM6/zrnPh861zq/Pic69IM+Hz4HOrs+Dz4TOtyc7CiRsYW5nWyd2YWxpZCddID0gJ86IzrPOus+Fz4HOvyc7CiRsYW5nWyd1c2VybmFtZSddID0gJ86Mzr3Ov868zrEgz4fPgc6uz4PPhM63JzsKJGxhbmdbJ3N0YXR1cyddID0gJ86azrHPhM6sz4PPhM6xz4POtyc7CiRsYW5nWydlcnJvcl9tZW1iZXJncm91cHMnXSA9ICfOkc+Fz4TPjM+CIM6/IM+Hz4HOrs+Dz4TOt8+CIM60zrXOvSDOtc6vzr3Osc65IM68zq3Ou86/z4IgzrrOsc68zrzOr86xz4Igzr/OvM6szrTOsc+CJzsKJGxhbmdbJ2Vycm9yX3Byb3BlcnRpZXMnXSA9ICfOp8+Jz4HOr8+CIM65zrTOuc+Mz4TOt8+EzrXPgic7CiRsYW5nWyd2YWx1ZSddID0gJ86kzrnOvM6uJzsKJGxhbmdbJ2dyb3VwcyddID0gJ86fzrzOrM60zrXPgic7CiRsYW5nWydwcm9wZXJ0aWVzJ10gPSAnzpnOtM65z4zPhM63z4TOtc+CJzsKJGxhbmdbJ3Byb3BuYW1lJ10gPSAnzozOvc6/zrzOsSDOuc60zrnPjM+EzrfPhM6xz4InOwokbGFuZ1sncHJvcHZhbHVlJ10gPSAnzqTOuc68zq4gzrnOtM65z4zPhM63z4TOsc+CJzsKJGxhbmdbJ2FkZCddID0gJ86gz4HOv8+DzrjOrs66zrcnOwokbGFuZ1snZWRpdCddID0gJ86Vz4DOtc6+zrXPgc6zzrHPg86vzrEnOwokbGFuZ1snZXhwaXJlcyddID0gJ86bzq7Os861zrknOwokbGFuZ1snc3BlY2lmeV9kYXRlJ10gPSAnzp/Pgc65z4POvM+Mz4IgzrfOvM61z4HOv868zrfOvc6vzrHPgic7CiRsYW5nWycxMmhycyddID0gJzEyIM+Oz4HOtc+CJzsKJGxhbmdbJzI0aHJzJ10gPSAnMjQgz47Pgc61z4InOwokbGFuZ1snNDhocnMnXSA9ICc0OCDPjs+BzrXPgic7CiRsYW5nWycxd2VlayddID0gJzEgzrXOss60zr/OvM6szrTOsSc7CiRsYW5nWycyd2Vla3MnXSA9ICcyIM61zrLOtM6/zrzOrM60zrXPgic7CiRsYW5nWycxbW9udGgnXSA9ICcxIM68zq7Ovc6xz4InOwokbGFuZ1snM21vbnRocyddID0gJzMgzrzOrs69zrXPgic7CiRsYW5nWyc2bW9udGhzJ10gPSAnNiDOvM6uzr3Otc+CJzsKJGxhbmdbJzF5ZWFyJ10gPSAnMSDOrc+Ezr/Pgic7CiRsYW5nWyduZXZlciddID0gJ86gzr/PhM6tJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsbWVzc2FnZSddID0gJ86kzr8gzqzPgc64z4HPic68zrEgzrXOs866zrHPhM6xz4PPhM6szrjOt866zrUgzrXPgM65z4TPhc+Hz47Pgi48YnIvPs6SzrXOss6xzrnPic64zq7PhM61IM+Mz4TOuSDOv8+Bzq/Pg86xz4TOtSDOtM65zrrOsc65z47OvM6xz4TOsSAizqTPgc6/z4DOv8+Azr/Or863z4POtyDOuc60zrnOv8+Ezq7PhM+Jzr0gz4PPhM6xIM60zrnOus6xzrnPjs68zrHPhM6xIM+Ezr/PhSBGcm9udEVuZFVzZXIuIic7CiRsYW5nWydwYXNzd29yZCddID0gJ86az4nOtM65zrrPjM+CIM+Az4HPjM+DzrLOsc+DzrfPgic7CiRsYW5nWydyZXBlYXRwYXNzd29yZCddID0gJ86Vz4DOsc69zqzOu863z4jOtyc7CiRsYW5nWydlcnJvcl9ncm91cG5hbWVfZXhpc3RzJ10gPSAnzpcgzr/OvM6szrTOsSDOvM61IM6xz4XPhM6uzr0gz4TOt869IM6/zr3Ov868zrHPg86vzrEgz4XPgM6sz4HPh861zrkgzq7OtM63JzsKJGxhbmdbJ2VkaXRncm91cCddID0gJ86Vz4DOtc6+zrXPgc6zzrHPg86vzrEgzr/OvM6szrTOsc+CJzsKJGxhbmdbJ3N1Ym1pdCddID0gJ86Rz4DOv8+Dz4TOv867zq4nOwokbGFuZ1snY2FuY2VsJ10gPSAnzobOus+Fz4HOvyc7CiRsYW5nWydkZWxldGUnXSA9ICfOlM65zrHOs8+BzrHPhs6uJzsKJGxhbmdbJ2NvbmZpcm1fZWRpdGdyb3VwJ10gPSAnzpXOr8+Dz4TOtSDPg86vzrPOv8+Fz4HOv865IM+Mz4TOuSDOsc+Fz4TOrc+CIM61zq/Ovc6xzrkgzr/OuSDOus6xz4TOrM67zrvOt867zrXPgiDPgc+FzrjOvM6vz4POtc65z4IgzrPOuc6xIM6xz4XPhM6uzr0gz4TOt869IM6/zrzOrM60zrE/XFxuIM6XIM6xz4DOv861zr3Otc+BzrPOv8+Azr/Or863z4POtyDOvM65zrHPgiDOuc60zrnPjM+EzrfPhM6xz4IgzrTOtc69IDjOsSDOrc+HzrXOuSDPic+CIM+Dz4XOvc6tz4DOtc65zrEgz4TOt869IM60zrnOsc6zz4HOsc+Gzq4gzrrOrM+Azr/Ouc6xz4IgzrXOs86zz4HOsc+Gzq7PgiDPg8+Ezr/OvSDPgM6vzr3Osc66zrEgzrnOtM65zr/PhM6uz4TPic69IM6zzrnOsSDPhM63zr0gzr/OvM6szrTOsS/Ph8+Bzq7Pg8+EzrcuICDOkc+AzrvOrCDOtM61zr0gOM6xIM61zq/Ovc6xzrkgzrTOuc6xzrjOrc+DzrnOvM6xLic7CiRsYW5nWydhcmV5b3VzdXJlX2RlbGV0ZWdyb3VwJ10gPSAnzpXOr8+Dz4TOtSDPg86vzrPOv8+Fz4HOv865IM6zzrnOsSDPhM63zr0gzrTOuc6xzrPPgc6xz4bOriDOsc+Fz4TOrs+CIM+EzrfPgiDOv868zqzOtM6xz4I/JzsKJGxhbmdbJ2NvbmZpcm1fZGVsZXRlX3Byb3AnXSA9ICfOlc6vz4PPhM61IM+Dzq/Os86/z4XPgc6/zrkgzrPOuc6xIM+EzrfOvSDPgM67zq7Pgc63IM60zrnOsc6zz4HOsc+Gzq4gzrHPhc+Ezq7PgiDPhM63z4IgzrnOtM65z4zPhM63z4TOsc+CP1xcbs6azrHPhFwnzrHPhc+Ez4zOvSDPhM6/zr0gz4TPgc+Mz4DOvyDOuM6xIM60zrnOsc6zz4HOsc+Gzr/Pjc69IM66zrHOuSDOv8+Azr/Ouc61z4IgzrXOs86zz4HOsc+Gzq3PgiDPh8+Bzq7Pg8+EzrcgzrHPhs6/z4HOv8+Nzr0gz4TOt869IM65zrTOuc+Mz4TOt8+EzrEgzrHPhc+Ezq4uJzsKJGxhbmdbJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcyddID0gJ86RzrrOsc64z4zPgc65z4PPhM61z4Igz4DOsc+BzqzOvM61z4TPgc6/zrknOwokbGFuZ1snaWQnXSA9ICfOkc69zrHOs869z4nPgc65z4PPhM65zrrPjCc7CiRsYW5nWyduYW1lJ10gPSAnzp/Ovc6/zrzOsc+Dzq/OsSc7CiRsYW5nWydlcnJvcl9jYW50YWRkZ29ydXAnXSA9ICfOoM+Bz4zOss67zrfOvM6xIM+Dz4TOt869IM+Az4HOv8+DzrjOrs66zrcgzr/OvM6szrTOsc+CJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRwYXJhbXMnXSA9ICfOnM6uIM6tzrPOus+Fz4HOtc+CIM+AzrHPgc6szrzOtc+Ez4HOv865JzsKJGxhbmdbJ2FwcGx5ZmlsdGVyJ10gPSAnzpXPhs6xz4HOvM6/zrPOric7CiRsYW5nWydmaWx0ZXInXSA9ICfOps6vzrvPhM+Bzr8nOwokbGFuZ1sndXNlcmZpbHRlciddID0gJ1JlZ3VsYXIgRXhwcmVzc2lvbiDOs865zrEgz4TOvyDPjM69zr/OvM6xIM+Hz4HOrs+Dz4TOtyc7CiRsYW5nWydkZXNjcmlwdGlvbiddID0gJ86gzrXPgc65zrPPgc6xz4bOric7CiRsYW5nWydncm91cG5hbWUnXSA9ICfOn869zr/OvM6xz4POr86xIM6/zrzOrM60zrHPgic7CiRsYW5nWydhY2Nlc3NkZW5pZWQnXSA9ICfOkc+AzrHOs86/z4HOtc+NzrXPhM6xzrkgzrcgz4DPgc+Mz4POss6xz4POty4nOwokbGFuZ1snZXJyb3InXSA9ICfOo8+GzqzOu868zrEnOwokbGFuZ1snYWRkZ3JvdXAnXSA9ICfOoM+Bzr/Pg864zq7Ous63IM69zq3Osc+CIM6fzrzOrM60zrHPgic7CiRsYW5nWydhZGR1c2VyJ10gPSAnzqDPgc6/z4POuM6uzrrOtyDOvc6tzr/PhSDPh8+Bzq7Pg8+EzrcnOwokbGFuZ1sndXNlcnNmb3VuZCddID0gJ86Vz4XPgc6tzrjOt866zrHOvSDOv865IM+AzrHPgc6xzrrOrM+Ez4kgz4fPgc6uz4PPhM61z4Igz4DOv8+FIM65zrrOsc69zr/PgM6/zrnOv8+Nzr0gz4TOsSDOus+BzrnPhM6uz4HOuc6xJzsKJGxhbmdbJ2dyb3VwJ10gPSAnzp/OvM6szrTOsSc7CiRsYW5nWydzZWxlY3Rncm91cCddID0gJ86Vz4DOuc67zr/Os86uIM6/zrzOrM60zrHPgic7CiRsYW5nWydyZWdpc3RyYXRpb25fdGVtcGxhdGUnXSA9ICfOoM+Bz4zPhM+Fz4DOvyDOtc6zzrPPgc6xz4bOrs+CJzsKJGxhbmdbJ2xvZ291dF90ZW1wbGF0ZSddID0gJ86gz4HPjM+Ez4XPgM6/IM6xz4DOv8+Dz43Ovc60zrXPg863z4InOwokbGFuZ1snbG9naW5fdGVtcGxhdGUnXSA9ICfOoM+Bz4zPhM+Fz4DOvyDPg8+Nzr3OtM61z4POt8+CJzsKJGxhbmdbJ3ByZWZlcmVuY2VzJ10gPSAnzqDPgc6/z4TOuc68zq7Pg861zrnPgic7CiRsYW5nWyd1c2VycyddID0gJ86nz4HOrs+Dz4TOtc+CJzsKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ86UzrnOsc+HzrXOr8+BzrnPg863IM61zrPOs861zrPPgc6xzrzOrc69z4nOvSDPh8+BzrfPg8+Ez47OvSc7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ86UzrnOsc+HzrXOuc+BzrnPg8+EzrXOr8+EzrUgz4TOv8+Fz4IgzrXOs86zzrXOs8+BzrHOvM6tzr3Ov8+Fz4Igz4fPgc6uz4PPhM61z4InOwokbGFuZ1snZGVmYXVsdGZyb250cGFnZSddID0gJ86gz4HOv861z4DOuc67zrXOs868zq3Ovc63IM6xz4HPh865zrrOriDPg861zrvOr860zrEnOwokbGFuZ1snbGFzdGFjY2Vzc2VkcGFnZSddID0gJ86jzrXOu86vzrTOsSDPgM6/z4Ugz4DPgc6/z4PPgM61zrvOrM+Dz4TOt866zrUgz4DPgc+Mz4PPhs6xz4TOsSc7CiRsYW5nWydvdGhlcnBhZ2UnXSA9ICfOhs67zrvOtyDPg861zrvOr860zrE6ICc7CiRsYW5nWydjaGFuZ2Vsb2cnXSA9ICc8dWw+DQo8bGk+MC4wLjEgLSBPY3RvYmVyLCAyMDA1IC0gSW5pdGlhbCBOUlBUIChOb3QgUmVhZHkgZm9yIFByaW1lIFRpbWUpIHJlbGVhc2U8L2xpPg0KPGxpPjAuMS4wIC0gT2N0b2JlciwgMjAwNSAtIEluaXRpYWwgcmVsZWFzZTwvbGk+DQo8bGk+MC4xLjEgLSBPY3RvYmVyLCAyMDA1IC0gRml4ZWQgaXNzdWVzIHdpdGggcHJvcGVydGllczwvbGk+DQo8bGk+MC4xLjIgLSBPY3RvYmVyLCAyMDA1IC0gQWRkZWQgZm9yZ290dGVuIHBhc3N3b3JkIGZ1bmN0aW9uYWxpdHk8L2xpPg0KPGxpPjxwPjAuMS4zIC0gTm92ZW1iZXIsIDIwMDU8L3A+DQogICAgPHA+QWRkZWQgdGhlIGFiaWxpdHkgdG8gc3BlY2lmeSBhIHJlZGlyZWN0IHBhZ2Ugb24gbG9naW4sIGxvZ291dCwgZm9yZ290IHBhc3N3b3JkLCBhbmQgY2hhbmdlIHNldHRpbmdzLCBhbmQgYWRkZWQgdGhlIHJldHVybnRvIGFuZCBmb3JtIHBhcmFtZXRlcnMgdG8gdGhlIHVzZXIgc2lkZSBvZiB0aGluZ3MsIGFsc28gZGlkIGEgY291cGxlIGxmIGxpdHRsZSBjbGVhbnVwcy4gIFRoaXMgdmVyc2lvbiByZXF1aXJlcyB2MC4xMSBhbmQgYWJvdmUgZm9yIGNlcnRhaW4uPC9wPjwvbGk+DQo8bGk+MC4xLjQgLSBOb3ZlbWJlciwgMjAwNSAtIFZlcnkgbWlub3IgY2hhbmdlIHdpdGggcmVzcGVjdCB0byBhIGZvcmdvdHRlbiBhbmQgbm8gbG9uZ2VyIG5lZWRlZCBmdW5jdGlvbiBjYWxsPC9saT4NCjxsaT48cD4wLjEuNSAtIE5vdmVtYmVyLCAyMDA1PC9wPg0KICAgIDxwPkFub3RoZXIgdmVyeSBtaW5vciBjaGFuZ2UsIGFkZGVkIHNvbWUgdGV4dCB0byB0aGUgUG9zdEluc3RhbGwgbWVzc2FnZS48L3A+PC9saT4NCjxsaT48cD4wLjEuNiAtIEphbnVhcnksIDIwMDY8cD4NCiAgICA8cD5DaGFuZ2VzIHRvIHRoZSBwZXJtaXNzaW9uIG1vZGVsLCBhbmQgbWlub3IgYnVnIGZpeGVzIHRvIHRoZSBwcmVmZXJlbmNlcy4gIEFsc28gc29tZSBwaHA1IGZpeGVzIGJ1dCBJIGFtIHN1cmUgdGhhdCB0aGVyZSBhcmUgbW9yZSBvdXQgdGhlcmUuPC9wPjwvbGk+DQo8bGk+PHA+MC4xLjcgLSBKYW51YXJ5LCAyMDA2PHA+DQogICAgPHA+TWFueSB0aGFua3MgdG8gPGI+a2F0b248L2I+IGZvciBhZGRpbmcgdGhlIHRleHRhcmVhIGFuZCBkcm9wZG93biBwcm9wZXJ0eSB0eXBlcy48L3A+DQogICAgPHA+Rml4ZXMgdG8gdGhlIHByb3BlcnR5IGFkZGluZyB0byBmaXggcHJvYmxlbXMgd2l0aCBzcGFjZXMgaW4gcHJvcGVydHkgbmFtZXMgKHdlIG5vIGxvbmdlciBsZXQgdGhhdCBoYXBwZW4pLjwvcD4NCjwvbGk+DQo8bGk+PHA+MS4wLjAgLSBGZWJydWFyeSwgMjAwNjxwPg0KICAgIDxwPkFkZGVkIGZpbHRlcmluZyBhbmQgcm93IGxpbWl0aW5nIHRvIHRoZSBhZG1pbiBwYW5lbC4gVGhpcyB3aWxsIGhhdmUgYmlnIGJlbmVmaXRzIHRvIHRob3NlIHRoYXQgYXJlIHVzaW5nIHRoaXMgbW9kdWxlIGZvciBoaWdoIHRyYWZpYywgYW5kIGhpZ2ggdXNlciBzaXRlcy48L3A+DQogICAgPHA+QWRkZWQgc29ydGluZyB0byB0aGUgYWRtaW4gcGFuZWw8L3A+DQogICAgPHA+QWRkZWQgbWF4IGxlbmd0aCBhYmlsaXR5IHRvIHRleHQgYW5kIGVtYWlsIGZpZWxkczwvcD4NCiAgICA8cD5GaXhlZCBhIHNtYWxsIHByb2JsZW0gd2l0aCB0aGUgZGVmYXVsdCBncm91cCBub3QgYmVpbmcgY2hlY2tlZCB3aGVuIGFkZGluZyBhIHVzZXI8L3A+DQogICAgPHA+U2F2ZSBmaWx0ZXIgc2V0dGluZ3MgaW4gcHJlZmVyZW5jZXMsIGFuZCB0aGUgYWN0aXZlIHRhYiB0b28uPC9wPg0KICAgIDxwPkRlbGV0ZSB1c2VyIHByb3BlcnRpZXMgd2hlbiBhIHByb3BlcnR5IGlzIGRlbGV0ZWQgPGVtPk5vdGU8L2VtPiwgbm90IHdoZW4gaXQgaXMgZGlzYWJsZWQgaW4gdGhlIGVkaXQgZ3JvdXAgZGlhbG9nPC9wPg0KICAgIDxwPkFkZCBjb25maXJtYXRpb24gbWVzc2FnZSBpbiBlZGl0IGdyb3Vwcy48L3A+DQogICAgPHA+QWRkZWQgYSBjb3VwbGUgbW9yZSBjb25maXJtYXRpb24gbWVzc2FnZXMuPC9wPg0KICAgIDxwPkFkZGVkIENTViBFeHBvcnQgb3B0aW9uPC9wPg0KICAgIDxwPlRvZG8gLSBBZGQgcHJlZmVyZW5jZXMgZm9yIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBmaWVsZGxlbmd0aDwvcD4NCjwvbGk+DQo8bGk+PHA+MS4wLjEgLSBGZWJydWFyeSwgMjAwNjxwPg0KICAgIDxwPkFkZGVkIHRoZSBhYmlsaXR5IHRvIGNoZWNrIGZvciBkdXBsaWNhdGUgZW1haWwgYWRkcmVzc2VzPC9wPg0KICAgIDxwPkZpeCBwcm9ibGVtIHdoZXJlIGV4cGlyeSBkYXRlIHdhcyBiZWluZyBtb2RpZmllZCB3aGVuIGFkbWluIG1vZGlmaWVkIHVzZXIgc2V0dGluZ3M8L3A+DQogICAgPHA+QWRkIGEgY29uZmlybWF0aW9uIG1lc3NhZ2UgdG8gdGhlIHByZWZlcmVuY2VzIHN1Ym1pdCBidXR0b248L3A+DQogICAgPHA+Rml4ZWQgYSBtaW5vciBidWcgd2hlbiBjb3V0aW5nIHRoZSBudW1iZXIgb2YgdXNlcnMgaW4gYSBncm91cDwvcD4NCiAgICA8cD5GaXhlcyB0byB0aGUgc2l6ZSBvZiB1c2VybmFtZSBhbmQgcGFzc3dvcmQgZmllbGRzLCBhbmQgbWF4bGVuZ3RoPC9wPg0KICAgIDxwPkFkZGVkIGFkdmFuY2VkIGZpbHRlcmluZyBvbiBwcm9wZXJ0aWVzPC9wPg0KPC9wPg0KPC91bD4nOwokbGFuZ1snaGVscCddID0gJzxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPg0KPHA+VGhpcyBtb2R1bGUgYWxsb3dzIG1hbmFnZW1lbnQgYW5kIGFkbWluaXN0cmF0aW9uIG9mIGZyb250IGVuZCB1c2VycyA8aT4odXNlcnMgd2hvIGhhdmUgbm8gYWRtaW4gYWNjZXNzcyk8L2k+LiAgSXQgYWxsb3dzIGNyZWF0aW9uIG9mIHVzZXIgZ3JvdXBzLCBhbmQgdXNlciBhY2NvdW50cyBhbmQgYWxsb3dzIHVzZXJzIHRvIGxvZ2luIGFuZCBsb2dvdXQuICBpdCBjYW4gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBDdXN0b21Db250ZW50IG1vZHVsZSB0byBkaXNwbGF5IGRpZmZlcmVudCBjb250ZW50IHRvIGRpZmZlcmVudCB1c2VycyBvbmNlIHRoZXkgaGF2ZSBsb2dnZWQgaW48L3A+DQo8aDM+RmVhdHVyZXM8L2gzPg0KPHVsPg0KPGxpPjxwPlVzZXIgYWNjb3VudCBleHBpcmF0aW9uLiAgWW91IGNhbiBjcmVhdGUgdGVtcG9yYXJ5IHVzZXJzPC9wPjwvbGk+DQo8bGk+PHA+R3JvdXAgUHJvcGVydGllcy4gIFlvdSBjYW4gYXNrIGZvciBkaWZmZXJlbnQgaW5mb3JtYXRpb24gZnJvbSBtZW1iZXJzIG9mIGRpZmZlcmVudCBncm91cHM8L3A+PC9saT4NCjxsaT48cD5DYXBhYmxlIG9mIGhhbmRsaW5nIGh1bmRyZWRzIG9mIHVzZXJzPC9wPjwvbGk+DQo8bGk+PHA+SGFzIGFuIGV4dGVuc2l2ZSBBUEkgZm9yIGFkZGluZyBmdW5jdGlvbmFsaXR5PC9wPjwvbGk+DQo8L3VsPg0KPGgzPkhvdyBkbyBJIHVzZSBpdDwvaDM+DQo8dWw+DQo8bGk+PHA+QWZ0ZXIgaW5zdGFsbGF0aW9uIHlvdSBjYW4gYWNjZXNzIGFkbWluIHBhbmVsIHRvIHRoZSBGcm9udEVuZFVzZXJzIG1vZHVsZSB1bmRlciB0aGUgIlVzZXJzICYgZ0dyb3VwcyIgbWVudS48L3A+PC9saT4NCjxsaT4NCjxwPlNlY29uZGx5LCB5b3Ugc2hvdWxkIGRlZmluZSBwcm9wZXJ0aWVzLiAgUHJvcGVydGllcyBhcmUgZXNzZW50aWFsbHkgZmllbGQgZGVmaW5pdGlvbnMsIGhlcmUgeW91IHNwZWNpZnkgdGhlIHR5cGUgb2YgaW5mb3JtYXRpb24geW91IHdhbnQgdG8gZ2F0aGVyLCBhbmQgbGltaXRzLiBpLmU6ICBOYW1lLCBBZ2UsIENpdHksIFN0YXRlLCBDb3VudHJ5LCBFbWFpbCBhZGRyZXNzLCBldGMuPC9wPg0KPHA+PGI+Tm90ZTo8L2I+IFlvdSBkbyBub3QgbmVlZCB0byBkZWZpbmUgcHJvcGVydGllcyBmb3IgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLCB0aGVzZSB3aWxsIGJlIHByb3ZpZGVkIGZvciB5b3U8L2I+DQo8L2xpPg0KPGxpPjxwPk5leHQgeW91IHNob3VsZCBjcmVhdGUgb25lIG9yIG1vcmUgdXNlciBncm91cHMuICBXaGVuIHlvdSBjcmVhdGUgYSBncm91cCwgeW91IGFyZSBhc2tlZCBmb3IgYSBncm91cCBuYW1lLCBhIGRlc2NyaXB0aW9uIGFuZCB0byBhc3NvY2lhdGUgcHJvcGVydGllcyB3aXRoIHRoYXQgZ3JvdXAsIHNwZWNpZnkgdGhlIHByb3BlcnRpZXMgc29ydCBvcmRlciwgYW5kIHdldGhlciBpdCBpcyBhbiBvcHRpb25hbCwgcmVxdWlyZWQsIG9yIGhpZGRlbiBmaWVsZCA8aT4ob2ZmIGlzIGFsc28gdmFsaWQpPC9pPjwvcD48L2xpPg0KPGxpPjxwPjxiPk5vdGU6PC9iPiBCZWZvcmUgcHJvY2VlZGluZywgeW91IHNob3VsZCBlbnN1cmUgdGhhdCB0aGUgcHJlZmVyZW5jZXMgYXJlIHNldCBjb3JyZWN0bHkuPC9wPjwvbGk+DQo8bGk+PHA+VGhpcmRseSB5b3Ugc2hvdWxkIGNyZWF0ZSBzb21lIHVzZXJzLiAgQWRkaW5nIHVzZXJzIGlzIGEgdHdvIHN0ZXAgcHJvY2Vzcy4gIFdoZW4gY3JlYXRpbmcgYSB1c2VyIHlvdSBhcmUgYXNrZWQgZm9yIHRoZSB1c2VybmFtZSBhbmQgcGFzc3dvcmQsIGFuZCBhbiBleHBpcnkgZGF0ZSBmb3IgdGhhdCB1c2VyLiAgWW91IHRoZW4gbXVzdCBzZWxlY3QgdGhlIGdyb3VwcyB0aGF0IHRoYXQgdXNlciBpcyBhIG1lbWJlciBvZiwgYW5kIGNsaWNrIFxcXCdOZXh0XFxcJzwvcD4NCjxwPjxlbT5Ob3RlOiA8L2VtPlRoaXMgaXMgYSBsYWJvdXIgaW50ZW5zaXZlIGFuZCBib3JpbmcgcHJvY2VzcywgaXQgaXMgZWFzaWVyIHRvIGxldCB1c2VycyByZWdpc3RlciB0aGVtc2VsdmVzLCBhbmQgdGhlbiB5b3UgY2FuIGVkaXQgdGhlaXIgZ3JvdXAgaW5mb3JtYXRpb24uICBidXQgZm9yIHRlc3RpbmcgcHVycG9zZXMsIHBsZWFzZSBjcmVhdGUgYXQgbGVzdCBvbmUgdXNlcjwvcD48L2xpPg0KPGxpPjxwPkxhc3RseSwgYWZ0ZXIgdGhlIHN5c3RlbSBoYXMgZGV0ZXJtaW5lZCBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIGZpZWxkcyB0byBiZSBwcmVzZW50ZWQgZm9yIHRoYXQgdXNlciwgeW91IGFyZSBwcmVzZW50ZWQgd2l0aCBhIGZvcm0gYXNraW5nIGZvciBhbGwgb2YgdGhlIHJlcXVpcmVkIHVzZXIgaW5mb3JtYXRpb24uICBDb21wbGV0ZSB0aGlzIGZvcm0gdG8gY29tcGxldGUgdGhlIHVzZXIgYWRkaXRpb248L3A+PC9saT4NCjxsaT48cD5Zb3UgYXJlIG5vdyByZWFkeSB0byBhZGQgdGhlIGZyb250IGVuZCBmdW5jdGlvbmFsaXR5IHRvIHlvdXIgc2l0ZS4gIFRoaXMgaXMgYXMgc2ltcGxlIGFzIGFkZGluZyB0aGUge2Ntc19tb2R1bGUgbW9kdWxlPUZyb250RW5kVXNlcnN9IHRhZyB0byB5b3VyIHBhZ2Ugb3IgdGVtcGxhdGU8L3A+PC9saT4NCjwvdWw+DQo8aDM+U3VwcG9ydDwvaDM+DQo8cD5UaGlzIG1vZHVsZSBkb2VzIG5vdCBpbmNsdWRlIGNvbW1lcmNpYWwgc3VwcG9ydC4gSG93ZXZlciwgdGhlcmUgYXJlIGEgbnVtYmVyIG9mIHJlc291cmNlcyBhdmFpbGFibGUgdG8gaGVscCB5b3Ugd2l0aCBpdDo8L3A+DQo8dWw+DQo8bGk+Rm9yIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG1vZHVsZSwgRkFRcywgb3IgdG8gZmlsZSBhIEJ1ZyBSZXBvcnQgb3IgYnV5IGNvbW1lcmNpYWwgc3VwcG9ydCwgcGxlYXNlIHZpc2l0IGNhbGd1eVxcXCdzDQptb2R1bGUgaG9tZXBhZ2UgYXQgPGEgaHJlZj0mcXVvdDtodHRwOi8vdGVjaGNvbS5keW5kbnMub3JnJnF1b3Q7PnRlY2hjb20uZHluZG5zLm9yZzwvYT4uPC9saT4NCjxsaT5BZGRpdGlvbmFsIGRpc2N1c3Npb24gb2YgdGhpcyBtb2R1bGUgbWF5IGFsc28gYmUgZm91bmQgaW4gdGhlIDxhIGhyZWY9JnF1b3Q7aHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnJnF1b3Q7PkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LjwvbGk+DQo8bGk+VGhlIGF1dGhvciwgY2FsZ3V5MTAwMCwgY2FuIG9mdGVuIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSZxdW90O2lyYzovL2lyYy5mcmVlbm9kZS5uZXQvI2NtcyZxdW90Oz5DTVMgSVJDIENoYW5uZWw8L2E+LjwvbGk+DQo8bGk+TGFzdGx5LCB5b3UgbWF5IGhhdmUgc29tZSBzdWNjZXNzIGVtYWlsaW5nIHRoZSBhdXRob3IgZGlyZWN0bHkuPC9saT4gIA0KPC91bD4NCjxoMz5QYXJhbWV0ZXJzPC9oMz4NCjx1bD4NCjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGZvcm09Im5hbWUiPC9saT4NCjxwPkZvcm1zOg0KPHVsPg0KIDxsaT48ZW0+bG9naW48L2VtPiAtIERpc3BsYXkgdGhlIGxvZ2luIGZvcm08L2xpPg0KIDxsaT48ZW0+bG9nb3V0PC9lbT4gLSBEaXNwbGF5IHRoZSBsb2dvdXQgZm9ybTwvbGk+DQogPGxpPjxlbT5jaGFuZ2VzZXR0aW5nczwvZW0+IC0gRGlzcGxheSB0aGUgY2hhbmdlIHNldHRpbmdzIGZvcm08L2xpPg0KIDxsaT48ZW0+Zm9yZ290cHc8L2VtPiAtIERpc3BsYXkgdGhlIGZvcmdvdCBwYXNzd29yZCBmb3JtPC9saT4NCjwvdWw+DQo8L3A+DQo8bGk+PGVtPihvcHRpb25hbCk8L2VtPiByZXR1cm50bz0icGFnZSI8L2xpPg0KPHA+VXNlZCB3aXRoIHRoZSBsb2dpbiwgbG9nb3V0LCBhbmQgY2hhbmdlc2V0dGluZ3MgZm9ybXMsIHRoaXMgcGFyYW1ldGVyIGNvbnRhaW5zIHRoZSBwYWdlIGlkIG9yIGFsaWFzIG9mIGEgcGFnZSB0byByZWRpcmVjdCB0bywgd2hlbiB0aGUgZm9ybSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY29tcGxldGVkPC9wPg0KPC91bD4NCjxwPkFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dA0Kb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPg0KPGgzPlJlcXVpcmVtZW50czwvaDM+DQo8cD5JbiBvcmRlciB0byBpbXBsZW1lbnQgdGhlIGZvcmdvdHRlbiBwYXNzd29yZCBmdW5jdGlvbmFsaXR5LCB0aGlzIG1vZHVsZSByZXF1aXJlcyB0aGUgQ01TTWFpbGVyIG1vZHVsZSB0byBiZSBwcmV2aW91c2x5IGluc3RhbGxlZDwvcD4NCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPg0KPHA+Q29weXJpZ2h0IMKpIDIwMDUsIFJvYmVydCBDYW1wYmVsIDxhIGhyZWY9JnF1b3Q7bWFpbHRvOmNhbGd1eTEwMDBAaG90bWFpbC5jb20mcXVvdDs+PGNhbGd1eTEwMDBAaG90bWFpbC5jb20+PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPg0KPHA+VGhpcyBtb2R1bGUgaGFzIGJlZW4gcmVsZWFzZWQgdW5kZXIgdGhlIDxhIGhyZWY9JnF1b3Q7aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMJnF1b3Q7PkdOVSBQdWJsaWMgTGljZW5zZTwvYT4uIFlvdSBtdXN0IGFncmVlIHRvIHRoaXMgbGljZW5zZSBiZWZvcmUgdXNpbmcgdGhlIG1vZHVsZS48L3A+JzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/fr_FR.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2JhY2tlbmRfZ3JvdXAnXSA9ICdHcm91cGUnOwokbGFuZ1snaW5mb19zdGFyJ10gPSAnKiBMYSBtYWNybyBzdWl2YW50ZSBwZXV0ICZlY2lyYzt0cmUgdXRpbGlzJmVhY3V0ZTtlIGRhbnMgY2VzIGNoYW1wcyZuYnNwOzogeyR1c2VybmFtZX0nOwokbGFuZ1snaW5mb19hZG1pbl9wYXNzd29yZCddID0gJyZFYWN1dGU7ZGl0ZXIgY2UgY2hhbXAgcG91ciByJmVhY3V0ZTtpbml0aWFsaXNlciBsZSBtb3QgZGUgcGFzc2UgdXRpbGlzYXRldXInOwokbGFuZ1snaW5mb19hZG1pbl9yZXBlYXRwYXNzd29yZCddID0gJyZFYWN1dGU7ZGl0ZXIgY2UgY2hhbXAgcG91ciByJmVhY3V0ZTtpbml0aWFsaXNlciBsZSBtb3QgZGUgcGFzc2UgdXRpbGlzYXRldXInOwokbGFuZ1snZXJyb3JfdXNlcm5hbWVfZXhpc3RzJ10gPSAnVW4gdXRpbGlzYXRldXIgYXZlYyBjZSBub20gZXhpc3RlIGQmZWFjdXRlO2omYWdyYXZlOy4nOwokbGFuZ1snbm9jc3ZyZXN1bHRzJ10gPSAnQXVjdW4gciZlYWN1dGU7c3VsdGF0IHJldG91cm4mZWFjdXRlOyBkZSBsJiMwMzk7ZXhwb3J0IGNzdic7CiRsYW5nWydwcm9tcHRfdW5mbGRsZW4nXSA9ICdMb25ndWV1ciBkdSBjaGFtcCBub20gZCYjMDM5O3V0aWxpc2F0ZXVyJzsKJGxhbmdbJ3Byb21wdF9wd2ZsZGxlbiddID0gJ0xvbmd1ZXVyIGR1IGNoYW1wIG1vdCBkZSBwYXNzZSc7CiRsYW5nWydlcnJvcl9pbnZhbGlkcGFzc3dvcmRsZW5ndGhzJ10gPSAnTG9uZ3VldXIgbWluaW1hbGUvbWF4aW1hbGUgaW52YWxpZGUgcG91ciBsZSBtb3QgZGUgcGFzc2UnOwokbGFuZ1snZXJyb3JfaW52YWxpZHVzZXJuYW1lbGVuZ3RocyddID0gJ0xvbmd1ZXVyIG1pbmltYWxlL21heGltYWxlIGludmFsaWRlIHBvdXIgbGUgbm9tIGQmIzAzOTt1dGlsaXNhdGV1cic7CiRsYW5nWydlcnJvcl9ub2VtYWlsYWRkcmVzcyddID0gJ0lsIG4mIzAzOTt5IGEgcGFzIGQmIzAzOTthZHJlc3NlIGVtYWlsIGVucmVnaXN0ciZlYWN1dGU7ZSBwb3VyIGNlIGNvbXB0ZS4nOwokbGFuZ1sndXNlcl9hZGRlZCddID0gJ1V0aWxpc2F0ZXVyIGFqb3V0JmVhY3V0ZTsgJXMgPSAlcyc7CiRsYW5nWyd1c2VyX2RlbGV0ZWQnXSA9ICdVdGlsaXNhdGV1ciBzdXBwcmltJmVhY3V0ZTsgdWlkPSVzJzsKJGxhbmdbJ3Byb3BlcnR5ZmlsdGVyJ10gPSAnUHJvcHJpJmVhY3V0ZTt0JmVhY3V0ZTsnOwokbGFuZ1sndmFsdWVyZWdleCddID0gJ1ZhbGV1ciAoZXhwcmVzc2lvbiByJmVhY3V0ZTtndWxpJmVncmF2ZTtyZSknOwokbGFuZ1snd2FybmluZ19lZmZlY3RzZmllbGRsZW5ndGgnXSA9ICdBdHRlbnRpb246IENlcyBjaGFtcHMgYWZmZWN0ZW50IGxhIHRhaWxsZSBkZSBjaGFtcHMgZCYjMDM5O2VudHImZWFjdXRlO2UgZGFucyBsZXMgZm9ybXVsYWlyZXMuICBEZXNjZW5kcmUgY2V0dGUgdmFsZXVyIHN1ciB1biBzaXRlIGV4aXN0YW50IG4mIzAzOTtlc3QgcGFzIHJlY29tbWFuZCZlYWN1dGU7JzsKJGxhbmdbJ2NvbmZpcm1fc3VibWl0cHJlZnMnXSA9ICdNb2RpZmllciBsZXMgcHImZWFjdXRlO2YmZWFjdXRlO3JlbmNlcyBhZG1pbmlzdHJhdGV1cj8nOwokbGFuZ1snZXJyb3JfZW1haWxhbHJlYWR5dXNlZCddID0gJ0NldHRlIGFkcmVzc2UgZW1haWwgZXN0IGQmZWFjdXRlO2omYWdyYXZlOyB1dGlsaXMmZWFjdXRlO2UnOwokbGFuZ1sncHJvbXB0X2FsbG93X2R1cGxpY2F0ZV9lbWFpbHMnXSA9ICdBdXRvcmlzZXIgbGVzIGRvdWJsb25zIGQmIzAzOTtlbWFpbCc7CiRsYW5nWydpbmZvX2FsbG93X2R1cGxpY2F0ZV9lbWFpbHMnXSA9ICcoYXV0b3Jpc2VyIGRlIG11bHRpcGxlcyB1dGlsaXNhdGV1cnMgYXZlYyBsYSBtJmVjaXJjO21lIGFkcmVzc2UgZW1haWwpJzsKJGxhbmdbJ2Vycm9yX21pc3Npbmd1c2VybmFtZSddID0gJ1ZvdXMgbiYjMDM5O2F2ZXogcGFzIGVudHImZWFjdXRlOyBkZSBub20gZCYjMDM5O3V0aWxpc2F0ZXVyJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdwYXNzd29yZCddID0gJ1ZvdXMgbiYjMDM5O2F2ZXogcGFzIGVudHImZWFjdXRlOyBkZSBtb3QgZGUgcGFzc2UnOwokbGFuZ1snZnJvbnRlbmR1c2VyX2xvZ291dCddID0gJ0QmZWFjdXRlO2Nvbm5leGlvbiB1dGlsaXNhdGV1cic7CiRsYW5nWydmcm9udGVuZHVzZXJfbG9nZ2VkaW4nXSA9ICdDb25uZXhpb24gdXRpbGlzYXRldXInOwokbGFuZ1snZWRpdHByb3BfaW5mb21zZyddID0gJzxmb250IGNvbG9yPSZxdW90O3JlZCZxdW90Oz48Yj5BVFRFTlRJT048L2I+IGVuIGNoYW5nZWFudCB1bmUgcHJvcHJpJmVhY3V0ZTt0JmVhY3V0ZTsgcXVpIGEgJmVhY3V0ZTt0JmVhY3V0ZTsgYXNzaWduJmVhY3V0ZTtlICZhZ3JhdmU7IGRlcyBncm91cGVzLCB2b3VzIHBvdXZleiBwb3RlbnRpZWxsZW1lbnQgZCZlYWN1dGU7dHJ1aXJlIG91IGFiJmljaXJjO21lciB1biBzaXRlIGV4aXN0YW50IDxpPihlbiBwYXJ0aWN1bGllciBzaSB2b3VzIHImZWFjdXRlO2R1aXNleiBsZXMgbG9uZ3VldXJzIGRlIGNoYW1wcywgZXRjKTwvaT48L2ZvbnQ+JzsKJGxhbmdbJ2luZm9fc210cHZhbGlkYXRlJ10gPSAnQ2V0dGUgZm9uY3Rpb24gbmUgbWFyY2hlIHBhcyBzb3VzIFdpbmRvd3MnOwokbGFuZ1snbXNnX2RvbnRjcmVhdGV1c2VybmFtZSddID0gJ05lIGNyJmVhY3V0ZTtleiBwYXMgZGUgcHJvcHJpJmVhY3V0ZTt0JmVhY3V0ZTsgcG91ciB1dGlsaXNhdGV1ciwgY2FyIGNlY2kgZXN0IGluY2x1cyBkYW5zIGxlIG1vZHVsZSBGcm9udEVuZFVzZXJzJzsKJGxhbmdbJ3Byb21wdF9leHBvcnRjc3YnXSA9ICdFeHBvcnRlciBsYSBsaXN0ZSBkZXMgdXRpbGlzYXRldXIgZGFucyB1biBmaWNoaWVyIGF1IGZvcm1hdCBDU1YnOwokbGFuZ1snZXhwb3J0Y3N2J10gPSAnRXhwb3J0ZXInOwokbGFuZ1snYWRtaW4nXSA9ICdBZG1pbic7CiRsYW5nWydlZGl0cHJvcCddID0gJyZFYWN1dGU7ZGl0ZXIgbGEgcHJvcHJpJmVhY3V0ZTt0JmVhY3V0ZTsnOwokbGFuZ1snbWF4bGVuZ3RoJ10gPSAnTG9uZ3VldXIgbWF4aW1hbGUnOwokbGFuZ1snY3JlYXRlZCddID0gJ0NyJmVhY3V0ZTsmZWFjdXRlOyc7CiRsYW5nWydzb3J0YnknXSA9ICdUcmllciBwYXInOwokbGFuZ1snc29ydCddID0gJ1RyaSc7CiRsYW5nWyd1c2Vyc2luZ3JvdXAnXSA9ICdVdGlsaXNhdGV1cnMgZGFucyBsZSBncm91cGUnOwokbGFuZ1sndXNlcmxpbWl0J10gPSAnTGltaXRlciBsZXMgciZlYWN1dGU7c3VsdGF0cyAmYWdyYXZlOyc7CiRsYW5nWydlcnJvcl9ub2VtYWlsZmllbGQnXSA9ICdBdWN1biBlbWFpbCB0cm91diZlYWN1dGU7IHBvdXIgY2V0IHV0aWxpc2F0ZXVyLiBWb3VzIGRldmV6ICZlYWN1dGU7dmVudHVlbGxlbWVudCBjb250YWN0ZXIgbCYjMDM5O2FkbWluaXN0cmF0ZXVyLic7CiRsYW5nWydwcm9tcHRfZm9yZ290cHdfcGFnZSddID0gJ1BhZ2VJRC9BbGlhcyBkdSBmb3JtdWxhaXJlIG1vdCBkZSBwYXNzZSBvdWJsaSZlYWN1dGU7JzsKJGxhbmdbJ3Byb21wdF9jaGFuZ2VzZXR0aW5nc19wYWdlJ10gPSAnUGFnZUlEL0FsaWFzIGR1IGZvcm11bGFpcmUgZGUgY2hhbmdlbWVudCBkZSBwYXJhbSZlZ3JhdmU7dHJlcyc7CiRsYW5nWydwcm9tcHRfbG9naW5fcGFnZSddID0gJ1BhZ2VJRC9BbGlhcyBvJnVncmF2ZTsgcmVkaXJpZ2VyIGwmIzAzOTt1dGlsaXNhdGV1ciBhcHImZWdyYXZlO3MgcXUmIzAzOTtpbCBzZSBzb2l0IGNvbm5lY3QmZWFjdXRlOyc7CiRsYW5nWydwcm9tcHRfbG9nb3V0X3BhZ2UnXSA9ICdQYWdlSUQvQWxpYXMgbyZ1Z3JhdmU7IHJlZGlyaWdlciBsJiMwMzk7dXRpbGlzYXRldXIgYXByJmVncmF2ZTtzIHF1JiMwMzk7aWwgc2Ugc29pdCBkJmVhY3V0ZTtjb25uZWN0JmVhY3V0ZTsnOwokbGFuZ1snc29ydG9yZGVyJ10gPSAnT3JkZSBkZSB0cmknOwokbGFuZ1sncHJvbXB0X251bXJlc2V0cmVjb3JkJ10gPSAnVW4gbm9tYnJlIGQmIzAzOTt1dGlsaXNhdGV1cnMgZXN0IGVuIGNvdXJzIGRlIHImZWFjdXRlO2luaXRpYWxpc2F0aW9uIGRlIG1vdHMgZGUgcGFzc2UuIENlIG5vbWJyZSBlc3QgYWN0dWVsbGVtZW50IGRlOic7CiRsYW5nWydyZW1vdmUxd2VlayddID0gJ1N1cHByaW1lciB0b3V0ZXMgbGVzIGVudHImZWFjdXRlO2VzIHZpZWlsbGVzIGRlIHBsdXMgZCYjMDM5O3VuZSBzZW1haW5lJzsKJGxhbmdbJ3JlbW92ZTFtb250aCddID0gJ1N1cHByaW1lciB0b3V0ZXMgbGVzIGVudHImZWFjdXRlO2VzIHZpZWlsbGVzIGRlIHBsdXMgZCYjMDM5O3VuIG1vaXMnOwokbGFuZ1sncmVtb3ZlYWxsJ10gPSAnU3VwcHJpbWVyIHRvdXRlcyBsZXMgZW50ciZlYWN1dGU7ZXMnOwokbGFuZ1snYXJleW91c3VyZSddID0gJyZFY2lyYzt0ZXMtdm91cyBzJnVjaXJjO3I/JzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRjb2RlJ10gPSAnVW4gY29kZSBpbnZhbGlkZSBhICZlYWN1dGU7dCZlYWN1dGU7IGVudHImZWFjdXRlOywgdmV1aWxsZXogciZlYWN1dGU7ZXNzYXllcic7CiRsYW5nWydlcnJvcl90ZW1wY29kZW5vdGZvdW5kJ10gPSAnTGUgY29kZSB0ZW1wb3JhaXJlIHBvdXIgdm90cmUgaWQgdXRpbGlzYXR1ZXIgbiYjMDM5O2EgcGFzIHB1ICZlY2lyYzt0cmUgdHJvdXYmZWFjdXRlOyBkYW5zIGxhIGJhc2UgZGUgZG9ubiZlYWN1dGU7ZXMnOwokbGFuZ1snZm9yZ290cGFzc3dvcmRfdmVyaWZ5dGVtcGxhdGUnXSA9ICdHYWJhcml0IHV0aWxpcyZlYWN1dGU7IHBvdXIgYWZmaWNoZXIgbGUgZm9ybXVsYWlyZSBkZSB2JmVhY3V0ZTtyaWZpY2F0aW9uJzsKJGxhbmdbJ2ZvcmdvdHBhc3N3b3JkX2VtYWlsdGVtcGxhdGUnXSA9ICdHYWJhcml0IHV0aWxpcyZlYWN1dGU7IHBvdXIgbCYjMDM5O2VtYWlsIGVudm95JmVhY3V0ZTsgbG9ycyBkZSBsJiMwMzk7b3VibGkgZHUgbW90IGRlIHBhc3NlJzsKJGxhbmdbJ2Vycm9yX3Jlc2V0YWxyZWFkeXNlbnQnXSA9ICdVbmUgZGVtYW5kZSBkZSByJmVhY3V0ZTtpbml0aWFsaXNhdGlvbiBkZSBtb3QgZGUgcGFzc2UgYSAmZWFjdXRlO3QmZWFjdXRlOyBzb3VtaXNlIHBvdXIgY2UgY29tcHRlLCBzb2l0IHBhciB2b3VzLW0mZWNpcmM7bWUsIHNvaXQgcGFyIHF1ZWxxdSYjMDM5O3VuIGQmIzAzOTthdXRyZS4gViZlYWN1dGU7cmlmaWV6IHZvdHJlIGVtYWlsLCB2b3VzIHkgdHJvdXZlcmV6IGxlcyBpbnN0cnVjdGlvbnMgcG91ciBsYSByJmVhY3V0ZTtpbml0aWFsaXNhdGlvbiBkZSB2b3RyZSBtb3QgZGUgcGFzc2UuJzsKJGxhbmdbJ2Vycm9yX2RiZXJyb3InXSA9ICdFcnJldXIgZGUgYmFzZSBkZSBkb25uJmVhY3V0ZTtlcyc7CiRsYW5nWydtZXNzYWdlX2ZvcmdvdHB3ZW1haWwnXSA9ICdWb3VzIHJlY2V2ZXogY2UgbWVzc2FnZSBjYXIgcXVlbHF1JiMwMzk7dW4gbm91cyBhIGRpdCBxdWUgdm91cyBhdmlleiBwZXJkdSB2b3RyZSBtb3QgZGUgcGFzc2UuIFNpIGMmIzAzOTtlc3QgbGUgY2FzLCBsaXNleiBsZXMgaW5zdHJ1Y3Rpb25zIGNpLWRlc3NvdXMuIFNpIHZvdXMgbmUgc2F2ZXogcGFzIGRlIHF1b2kgaWwgcyYjMDM5O2FnaXQsIHZvdXMgcG91dmV6IHNpbXBsZW1lbnQgZWZmYWNlciBjZSBtZXNzYWdlLiBOb3VzIHZvdXMgcmVtZXJjaW9ucy4nOwokbGFuZ1sncHJvbXB0X2NvZGUnXSA9ICdDb2RlJzsKJGxhbmdbJ21lc3NhZ2VfY29kZSddID0gJ0xlIGNvZGUgc3VpdmFudCBhICZlYWN1dGU7dCZlYWN1dGU7IGcmZWFjdXRlO24mZWFjdXRlO3ImZWFjdXRlOyBhdSBoYXNhcmQgcG91ciBsYSB2JmVhY3V0ZTtyaWZpY2F0aW9uIGR1IGNvbXBlIHV0aWxpc2F0ZXVyLiBMb3JzcXVlIHZvdXMgY2xpcXVlcmV6IHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMsIHZvdXMgdHJvdXZlcmV6IHVuIGNoYW1wIGRhbnMgbGVxdWVsIGVudHJlciBjZSBjb2RlLiBOb3JtYWxlbWVudCwgY2UgY2hhbXAgZXN0IHJlbXBsaSBwb3VyIHZvdXMsIG1haXMgZGFucyBsZSBjYXMgY29udHJhaXJlLCBsZSBjb2RlIGVzdCZuYnNwOzonOwokbGFuZ1sncHJvbXB0X2xpbmsnXSA9ICdMZSBsaWVuIHN1aXZhbnQgdm91cyBhbSZlZ3JhdmU7bmUgYXUgc2l0ZSBvJnVncmF2ZTsgdm91cyBwb3V2ZXogZW50cmVyIGxlIGNvZGUgY2ktZGVzc3VzLCBldCByJmVhY3V0ZTtpbml0aWFsaXNlciB2b3RyZSBtb3QgZGUgcGFzc2UmbmJzcDs6JzsKJGxhbmdbJ2xvc3RwYXNzd29yZF9lbWFpbHN1YmplY3QnXSA9ICdNb3QgZGUgcGFzc2Ugb3VibGkmZWFjdXRlOyc7CiRsYW5nWydlcnJvcl9ub21haWxlcm1vZHVsZSddID0gJ0xlIG1vZHVsZSBDTVNNYWlsZXIgbiYjMDM5O2EgcGFzICZlYWN1dGU7dCZlYWN1dGU7IHRyb3V2JmVhY3V0ZTsnOwokbGFuZ1snaW5mb19mb3Jnb3Rwd21lc3NhZ2VzZW50J10gPSAnVW4gZW1haWwgYSAmZWFjdXRlO3QmZWFjdXRlOyBlbnZveSZlYWN1dGU7ICZhZ3JhdmU7ICVzIGF2ZWMgbGVzIGluc3RydWN0aW9ucyBwb3VyIGxhIHImZWFjdXRlO2luaXRpYWxpc2F0aW9uIGR1IG1vdCBkZSBwYXNzZS4gTWVyY2knOwokbGFuZ1snbG9zdHB3X21lc3NhZ2UnXSA9ICdTaSB2b3VzIGF2ZXogb3VibGkmZWFjdXRlOyB2b3RyZSBtb3QgZGUgcGFzc2UsIHZldWlsbGV6IGVudHJlciB2b3RyZSBpZGVudGlmaWFudCBpY2ksIGV0IHNpIG5vdXMgbGUgdHJvdXZvbnMsIHZvdXMgcmVjZXZyZXogdW4gZW1haWwgYXZlYyBsZXMgaW5zdHJ1Y3Rpb25zIHBvdXIgbGEgciZlYWN1dGU7aW5pdGlhbGlzYXRpb24gZHUgbW90IGRlIHBhc3NlLic7CiRsYW5nWydmb3Jnb3RwYXNzd29yZF90ZW1wbGF0ZSddID0gJ0dhYmFyaXRzIHBvdXIgbCYjMDM5O291YmxpIGR1IG1vdCBkZSBwYXNzZSc7CiRsYW5nWydlcnJvcl9wcm9wbm90Zm91bmQnXSA9ICdMYSBwcm9wcmkmZWFjdXRlO3QmZWFjdXRlOyAlcyBuJiMwMzk7YSBwYXMgJmVhY3V0ZTt0JmVhY3V0ZTsgdHJvdXYmZWFjdXRlO2UnOwokbGFuZ1sncHJvcHNmb3VuZCddID0gJ3Byb3ByaSZlYWN1dGU7dCZlYWN1dGU7cyB0cm91diZlYWN1dGU7ZXMnOwokbGFuZ1snYWRkcHJvcCddID0gJ0Fqb3V0ZXIgdW5lIHByb3ByaSZlYWN1dGU7dCZlYWN1dGU7JzsKJGxhbmdbJ2Vycm9yX3JlcXVpcmVkZmllbGQnXSA9ICdVbiBjaGFtcCByZXF1aXMgKCVzKSBlc3QgdmlkZSc7CiRsYW5nWydpbmZvX2VtcHR5cGFzc3dvcmRmaWVsZCddID0gJ1ZldWlsbGV6IGVudHJlciBpY2kgdW4gbm91dmVhdSBtb3QgZGUgcGFzc2UnOwokbGFuZ1snZXJyb3Jfbm90bG9nZ2VkaW4nXSA9ICdWb3VzIG5lIHNlbWJsZXogcGFzICZlY2lyYzt0cmUgY29ubmVjdCZlYWN1dGU7JzsKJGxhbmdbJ3VzZXJfc2V0dGluZ3MnXSA9ICdQYXJhbSZlZ3JhdmU7dHJlcyc7CiRsYW5nWyd1c2VyX3JlZ2lzdHJhdGlvbiddID0gJ0VucmVnaXN0cmVtZW50JzsKJGxhbmdbJ2Vycm9yX2FjY291bnRleHBpcmVkJ10gPSAnQ2UgY29tcHRlIGEgZXhwaXImZWFjdXRlOyc7CiRsYW5nWydlcnJvcl9pbXByb3BlcmVtYWlsZm9ybWF0J10gPSAnRm9ybWF0IGQmIzAzOTthZHJlc3NlIGVtYWlsIGludmFsaWRlJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRleHBpcnlkYXRlJ10gPSAnRGF0ZSBkJiMwMzk7ZXhwaXJhdGlvbiBpbnZhbGlkZSc7CiRsYW5nWydlcnJvcl9wcm9ibGVtc2V0dGluZ3Byb3BlcnR5J10gPSAnSWwgeSBhIGV1IHVuZSBlcnJldXIgbG9ycyBkZSBsYSBkJmVhY3V0ZTtmaW5pdGlvbiAlcyBwb3VyIGwmIzAzOTt1dGlsaXNhdGV1ciAkcyc7CiRsYW5nWydlcnJvcl9pbnZhbGlkZ3JvdXBpZCddID0gJ2lkIGRlIGdyb3VwZSAlcyBpbnZhbGlkZSc7CiRsYW5nWydoaWRkZW5maWVsZG1hcmtlciddID0gJ01hcnF1ZXVyIGRlIGNoYW1wIGNhY2gmZWFjdXRlOyc7CiRsYW5nWydoaWRkZW5maWVsZGNvbG9yJ10gPSAnQ291bGV1ciBkZSBjaGFtcCBjYWNoJmVhY3V0ZTsnOwokbGFuZ1snaGlkZGVuJ10gPSAnQ2FjaCZlYWN1dGU7JzsKJGxhbmdbJ2Vycm9yX2R1cGxpY2F0ZW5hbWUnXSA9ICdVbmUgcHJvcHJpJmVhY3V0ZTt0JmVhY3V0ZTsgZHUgbSZlY2lyYzttZSBub20gZXN0IGQmZWFjdXRlO2omYWdyYXZlOyBkJmVhY3V0ZTtmaW5pZSc7CiRsYW5nWydlcnJvcl9ub3Byb3BlcnRpZXMnXSA9ICdBdWN1bmUgcHJvcHJpJmVhY3V0ZTt0JmVhY3V0ZTsgZCZlYWN1dGU7ZmluaWUnOwokbGFuZ1snZXJyb3Jfbm9yZWxhdGlvbnMnXSA9ICdBdWN1biBwcm9wcmkmZWFjdXRlO3QmZWFjdXRlOyBuJiMwMzk7YSAmZWFjdXRlO3QmZWFjdXRlOyBzJmVhY3V0ZTtsZWN0aW9ubiZlYWN1dGU7ZSBwb3VyIGNlIGdyb3VwZSc7CiRsYW5nWydncm91cHNmb3VuZCddID0gJ0dyb3VwZXMgdHJvdXYmZWFjdXRlO3MnOwokbGFuZ1snZXJyb3Jfb25lZ3JvdXByZXF1aXJlZCddID0gJ0wmIzAzOTthcHBhcnRlbmFuY2UgJmFncmF2ZTsgYXUgbW9pbnMgdW4gZ3JvdXBlIGVzdCByZXF1aXNlJzsKJGxhbmdbJ3Byb21wdF9yZXF1aXJlb25lZ3JvdXAnXSA9ICdSZXF1aWVydCBsJiMwMzk7YXBwYXJ0ZW5hbmNlICZhZ3JhdmU7IGF1IG1vaW5zIHVuIGdyb3VwZSc7CiRsYW5nWydiYWNrJ10gPSAnUmV0b3VyJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdfcmVxdWlyZWRfcGFyYW0nXSA9ICclcyBlc3QgdW4gY2hhbXAgcmVxdWlzJzsKJGxhbmdbJ3JlcXVpcmVkZmllbGRtYXJrZXInXSA9ICdNYXJxdWUgbGVzIGNoYW1wcyByZXF1aXMgYXZlYyc7CiRsYW5nWydyZXF1aXJlZGZpZWxkY29sb3InXSA9ICdNaXNlIGVuICZlYWN1dGU7dmlkZW5jZSBkZXMgY2hhbXBzIHJlcXVpcyBlbic7CiRsYW5nWyduZXh0J10gPSAnUHJvY2hhaW4nOwokbGFuZ1snZXJyb3JfZ3JvdXBleGlzdHMnXSA9ICdVbiBncm91cGUgZHUgbSZlY2lyYzttZSBub20gZXhpc3RlIGQmZWFjdXRlO2omYWdyYXZlOyc7CiRsYW5nWydyZXF1aXJlZCddID0gJ0NoYW1wIHJlcXVpcyc7CiRsYW5nWydvcHRpb25hbCddID0gJ09wdGlvbmVsJzsKJGxhbmdbJ29mZiddID0gJ09mZic7CiRsYW5nWydsZW5ndGgnXSA9ICdMb25ndWV1cic7CiRsYW5nWydsZW5ndGhjb21tZW50J10gPSAnPGJyPihjYXJhY3QmZWdyYXZlO3JlcyBkYW5zIGxlIGNoYW1wIHRleHRlKSc7CiRsYW5nWydzZWxvcHRpb25zJ10gPSAnT3B0aW9ucyBtZW51IGQmZWFjdXRlO3JvdWxhbnQsIHMmZWFjdXRlO3BhciZlYWN1dGU7ZXMgcGFyIGRlcyByZXRvdXJzICZhZ3JhdmU7IGxhIGxpZ25lJzsKJGxhbmdbJ3llcyddID0gJ091aSc7CiRsYW5nWydwcm9tcHQnXSA9ICdJbnZpdGUnOwokbGFuZ1sndHlwZSddID0gJ1R5cGUnOwokbGFuZ1sndGV4dCddID0gJ1RleHRlJzsKJGxhbmdbJ2NoZWNrYm94J10gPSAnQ2FzZSAmYWdyYXZlOyBjb2NoZXInOwokbGFuZ1snZW1haWwnXSA9ICdBZHJlc3NlIGVtYWlsJzsKJGxhbmdbJ3RleHRhcmVhJ10gPSAnVGV4dGFyZWEnOwokbGFuZ1snZHJvcGRvd24nXSA9ICdNZW51IGQmZWFjdXRlO3JvdWxhbnQnOwokbGFuZ1snbXNnX2N1cnJlbnRseWxvZ2dlZGluYXMnXSA9ICdCaWVudmVudWUnOwokbGFuZ1snbG9nb3V0J10gPSAnRCZlYWN1dGU7Y29ubmV4aW9uJzsKJGxhbmdbJ3Byb21wdF9jaGFuZ2VzZXR0aW5ncyddID0gJ0NoYW5nZW1lbnQgZGUgTWVzIFBhcmFtJmVncmF2ZTt0cmVzJzsKJGxhbmdbJ2Vycm9yX2xvZ2luZmFpbGVkJ10gPSAnTGEgY29ubmV4aW9uIGEgJmVhY3V0ZTtjaG91JmVhY3V0ZTsgLSBpZGVudGlmaWFudCBvdSBtb3QgZGUgcGFzc2UgaW52YWxpZGU/JzsKJGxhbmdbJ2xvZ2luJ10gPSAnUyYjMDM5O2VucmVnaXN0cmVyJzsKJGxhbmdbJ3Byb21wdF91c2VybmFtZSddID0gJ0lkZW50aWZpYW50JzsKJGxhbmdbJ3Byb21wdF9wYXNzd29yZCddID0gJ01vdCBkZSBwYXNzZSc7CiRsYW5nWydyZWdpc3RlciddID0gJ0VucmVnaXN0cmV6LXZvdXMnOwokbGFuZ1snZm9yZ290cHcnXSA9ICdBdmV6LXZvdXMgb3VibGkmZWFjdXRlOyB2b3RyZSBtb3QgZGUgcGFzc2U/JzsKJGxhbmdbJ2RlZmF1bHRzJ10gPSAnUGFyIGQmZWFjdXRlO2ZhdXQnOwokbGFuZ1sndGVtcGxhdGUnXSA9ICdHYWJhcml0JzsKJGxhbmdbJ2Vycm9yX3VzZXJub3Rmb3VuZCddID0gJ0lEIHV0aWxpc2F0ZXVyIG5vbiB0cm91diZlYWN1dGU7JzsKJGxhbmdbJ2Vycm9yX3VzZXJuYW1ldGFrZW4nXSA9ICdDZXQgaWRlbnRpZmlhbnQgKCVzKSBleGlzdGUgZCZlYWN1dGU7aiZhZ3JhdmU7JzsKJGxhbmdbJ3Byb21wdF9zbXRwdmFsaWRhdGUnXSA9ICdVdGlsaXNlciBTTVRQIHBvdXIgbGEgdmFsaWRhdGlvbiBkZXMgYWRyZXNzZXMgZW1haWw/JzsKJGxhbmdbJ3Byb21wdF9taW5wd2xlbiddID0gJ0xvbmd1ZXVyIG1pbmltYWxlIGR1IG1vdCBkZSBwYXNzZSc7CiRsYW5nWydwcm9tcHRfbWF4cHdsZW4nXSA9ICdMb25ndWV1ciBtYXhpbWFsZSBkdSBtb3QgZGUgcGFzc2UnOwokbGFuZ1sncHJvbXB0X21pbnVubGVuJ10gPSAnTG9uZ3VldXIgbWluaW1hbGUgZGUgbCYjMDM5O2lkZW50aWZpYW50JzsKJGxhbmdbJ3Byb21wdF9tYXh1bmxlbiddID0gJ0xvbmd1ZXVyIG1heGltYWxlIGRlIGwmIzAzOTtpZGVudGlmaWFudCc7CiRsYW5nWydwcm9tcHRfc2Vzc2lvbnRpbWVvdXQnXSA9ICdFeHBpcmF0aW9uIGRlIHNlc3Npb24gKG1pbnV0ZXMpJzsKJGxhbmdbJ3Byb21wdF9hbGxvd2VtYWlscmVnJ10gPSAnQXV0b3Jpc2UgbCYjMDM5O2VucmVnaXN0cmVtZW50IHBhciBlbWFpbCc7CiRsYW5nWydwcm9tcHRfZGZsdGdyb3VwJ10gPSAnR3JvdXBlIHBhciBkJmVhY3V0ZTtmYXV0IHBvdXIgbGVzIG5vdXZlYXV4IHV0aWxpc2F0ZXVycyc7CiRsYW5nWydjaGFuZ2VzZXR0aW5nc190ZW1wbGF0ZSddID0gJ0NoYW5nZXIgbGUgZ2FiYXJpdCBkZXMgcGFyYW0mZWdyYXZlO3RyZXMnOwokbGFuZ1snZXJyb3JfcGFzc3dvcmRtaXNtYXRjaCddID0gJ0xlcyBtb3RzIGRlIHBhc3NlIG5lIGNvbmNvcmRlbnQgcGFzJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWR1c2VybmFtZSddID0gJ0lkZW50aWZpYW50IG5vbiB2YWxpZGUnOwokbGFuZ1snZXJyb3JfaW52YWxpZHBhc3N3b3JkJ10gPSAnTW90IGRlIHBhc3NlIG5vbiB2YWxpZGUnOwokbGFuZ1snZWRpdHVzZXInXSA9ICcmRWFjdXRlO2RpdGVyIGwmIzAzOTt1dGlsaXNhdGV1cic7CiRsYW5nWyd2YWxpZCddID0gJ1ZhbGlkZSc7CiRsYW5nWyd1c2VybmFtZSddID0gJ0lkZW50aWZpYW50JzsKJGxhbmdbJ3N0YXR1cyddID0gJ1N0YXR1dCc7CiRsYW5nWydlcnJvcl9tZW1iZXJncm91cHMnXSA9ICdDZXQgdXRpbGlzYXRldXIgbiYjMDM5O2VzdCBtZW1icmUgZCYjMDM5O2F1Y3VuIGdyb3VwZSc7CiRsYW5nWydlcnJvcl9wcm9wZXJ0aWVzJ10gPSAnQXVjdW5lIHByb3ByaSZlYWN1dGU7dCZlYWN1dGU7JzsKJGxhbmdbJ3ZhbHVlJ10gPSAnVmFsZXVyJzsKJGxhbmdbJ2dyb3VwcyddID0gJ0dyb3VwZXMnOwokbGFuZ1sncHJvcGVydGllcyddID0gJ1Byb3ByaSZlYWN1dGU7dCZlYWN1dGU7cyc7CiRsYW5nWydwcm9wbmFtZSddID0gJ05vbSBkZSBwcm9wcmkmZWFjdXRlO3QmZWFjdXRlOyc7CiRsYW5nWydwcm9wdmFsdWUnXSA9ICdWYWxldXIgZGUgbGEgcHJvcHJpJmVhY3V0ZTt0JmVhY3V0ZTsnOwokbGFuZ1snYWRkJ10gPSAnQWpvdXRlcic7CiRsYW5nWydlZGl0J10gPSAnJkVhY3V0ZTtkaXRlcic7CiRsYW5nWydleHBpcmVzJ10gPSAnRXhwaXJlJzsKJGxhbmdbJ3NwZWNpZnlfZGF0ZSddID0gJ1NwJmVhY3V0ZTtjaWZpZXogdW5lIGRhdGUnOwokbGFuZ1snMTJocnMnXSA9ICcxMiBoZXVyZXMnOwokbGFuZ1snMjRocnMnXSA9ICcyNCBoZXVyZXMnOwokbGFuZ1snNDhocnMnXSA9ICc0OCBoZXVyZXMnOwokbGFuZ1snMXdlZWsnXSA9ICcxIHNlbWFpbmUnOwokbGFuZ1snMndlZWtzJ10gPSAnMiBzZW1haW5lcyc7CiRsYW5nWycxbW9udGgnXSA9ICcxIG1vaXMnOwokbGFuZ1snM21vbnRocyddID0gJzMgbW9pcyc7CiRsYW5nWyc2bW9udGhzJ10gPSAnNiBtb2lzJzsKJGxhbmdbJzF5ZWFyJ10gPSAnMSBhbic7CiRsYW5nWyduZXZlciddID0gJ0phbWFpcyc7CiRsYW5nWydwb3N0aW5zdGFsbG1lc3NhZ2UnXSA9ICdMZSBtb2R1bGUgYSAmZWFjdXRlO3QmZWFjdXRlOyBpbnN0YWxsJmVhY3V0ZTsgYXZlYyBzdWNjJmVncmF2ZTtzLjxici8+QXNzdXJlei12b3VzIGRlIGQmZWFjdXRlO2ZpbmlyIGxhIHBlcm1pc3Npb24gJnF1b3Q7TW9kaWZ5IEZyb250RW5kVXNlciBQcm9wZXJ0aWVzJnF1b3Q7JzsKJGxhbmdbJ3Bhc3N3b3JkJ10gPSAnTW90IGRlIHBhc3NlJzsKJGxhbmdbJ3JlcGVhdHBhc3N3b3JkJ10gPSAnRW5jb3JlJzsKJGxhbmdbJ2Vycm9yX2dyb3VwbmFtZV9leGlzdHMnXSA9ICdVbiBncm91cGUgZHUgbSZlY2lyYzttZSBub20gZXhpc3RlIGQmZWFjdXRlO2omYWdyYXZlOyc7CiRsYW5nWydlZGl0Z3JvdXAnXSA9ICcmRWFjdXRlO2RpdGVyIGxlIGdyb3VwZSc7CiRsYW5nWydzdWJtaXQnXSA9ICdFbnZveWVyJzsKJGxhbmdbJ2NhbmNlbCddID0gJ0FubnVsZXInOwokbGFuZ1snZGVsZXRlJ10gPSAnU3VwcHJpbWVyJzsKJGxhbmdbJ2NvbmZpcm1fZWRpdGdyb3VwJ10gPSAnJkVjaXJjO3Rlcy12b3VzIHMmdWNpcmM7ciBxdWUgY2V0dGUgcHJvcHJpJmVhY3V0ZTt0JmVhY3V0ZTsgZXN0IGNvcnJlY3RlIHBvdXIgY2UgZ3JvdXBlP1xuRCZlYWN1dGU7c2FjdGl2ZXIgdW5lIHByb3ByaSZlYWN1dGU7dCZlYWN1dGU7IG4wZWZmYWNlcmEgcGFzIGxlcyBlbnRyJmVhY3V0ZTtlcyBkYW5zIGxhIHRhYmxlIGRlcyBwcm9wcmkmZWFjdXRlO3QmZWFjdXRlO3MgcG91ciBjZSBncm91cGUvdXRpbGlzYXRldXIuIFRvdXQgYXUgcGx1cywgbGVzIHByb3ByaSZlYWN1dGU7dCZlYWN1dGU7cyBuZSBzZXJvbnQgcGFzIGRpc3BvbmlibGVzLic7CiRsYW5nWydhcmV5b3VzdXJlX2RlbGV0ZWdyb3VwJ10gPSAnJkVjaXJjO3Rlcy12b3VzIHMmdWNpcmM7ciBkZSB2b3Vsb2lyIHN1cHByaW1lciBjZSBncm91cGU/JzsKJGxhbmdbJ2NvbmZpcm1fZGVsZXRlX3Byb3AnXSA9ICcmRWNpcmM7dGVzLXZvdXMgcyZ1Y2lyYztyIGRlIHZvdWxvaXIgY29tcGwmZWdyYXZlO3RlbWVudCBzdXBwcmltZXIgY2V0dGUgcHJvcHJpJmVhY3V0ZTt0JmVhY3V0ZTs/XG5DZWxhIHN1cHByaW1lcmEgdG91dGVzIGxlcyBlbnRyJmVhY3V0ZTtlcyBwb3VyIGNldHRlIHByb3ByaSZlYWN1dGU7dCZlYWN1dGU7JzsKJGxhbmdbJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcyddID0gJ1BhcmFtJmVncmF2ZTt0cmVzIGluc3VmZmlzYW50cyc7CiRsYW5nWydpZCddID0gJ0lkJzsKJGxhbmdbJ25hbWUnXSA9ICdOb20nOwokbGFuZ1snZXJyb3JfY2FudGFkZGdvcnVwJ10gPSAncHJvYmwmZWdyYXZlO21lIGxvcnMgZGUgbCYjMDM5O2Fqb3V0IGR1IGdyb3VwZSc7CiRsYW5nWydlcnJvcl9pbnZhbGlkcGFyYW1zJ10gPSAnUGFyYW0mZWdyYXZlO3RyZXMgbm9uIHZhbGlkZXMnOwokbGFuZ1snYXBwbHlmaWx0ZXInXSA9ICdBcHBsaXF1ZXInOwokbGFuZ1snZmlsdGVyJ10gPSAnRmlsdHJlJzsKJGxhbmdbJ3VzZXJmaWx0ZXInXSA9ICdVc2VyIFJlZ3VsYXIgRXhwcmVzc2lvbic7CiRsYW5nWydkZXNjcmlwdGlvbiddID0gJ0Rlc2NyaXB0aW9uJzsKJGxhbmdbJ2dyb3VwbmFtZSddID0gJ05vbSBkdSBncm91cGUnOwokbGFuZ1snYWNjZXNzZGVuaWVkJ10gPSAnQWNjJmVncmF2ZTtzIHJlZnVzJmVhY3V0ZTsnOwokbGFuZ1snZXJyb3InXSA9ICdFcnJldXInOwokbGFuZ1snYWRkZ3JvdXAnXSA9ICdBam91dGVyIHVuIGdyb3VwZSc7CiRsYW5nWydhZGR1c2VyJ10gPSAnQWpvdXRlciB1biB1dGlsaXNhdGV1cic7CiRsYW5nWyd1c2Vyc2ZvdW5kJ10gPSAnVXRpbGlzYXRldXJzIHRyb3V2JmVhY3V0ZTtzJzsKJGxhbmdbJ2dyb3VwJ10gPSAnR3JvdXBlJzsKJGxhbmdbJ3NlbGVjdGdyb3VwJ10gPSAnUyZlYWN1dGU7bGVjdGlvbm5lciBsZSBncm91cGUnOwokbGFuZ1sncmVnaXN0cmF0aW9uX3RlbXBsYXRlJ10gPSAnR2FiYXJpdCBkJiMwMzk7ZW5yZWdpc3RyZW1lbnQnOwokbGFuZ1snbG9nb3V0X3RlbXBsYXRlJ10gPSAnR2FiYXJpdCBkZSBkJmVhY3V0ZTtjb25uZXhpb24nOwokbGFuZ1snbG9naW5fdGVtcGxhdGUnXSA9ICdHYWJhcml0IGRlIGNvbm5leGlvbic7CiRsYW5nWydwcmVmZXJlbmNlcyddID0gJ1ByJmVhY3V0ZTtmJmVhY3V0ZTtyZW5jZXMnOwokbGFuZ1sndXNlcnMnXSA9ICdVdGlsaXNhdGV1cnMnOwokbGFuZ1snZnJpZW5kbHluYW1lJ10gPSAnR2VzdGlvbiBkZXMgdXRpbGlzYXRldXJzIGR1IHNpdGUnOwokbGFuZ1snbW9kZGVzY3JpcHRpb24nXSA9ICdHJmVncmF2ZTtyZSBsZXMgdXRpbGlzYXRldXJzIGR1IHNpdGUnOwokbGFuZ1snZGVmYXVsdGZyb250cGFnZSddID0gJ1BhZ2UgcGFyIGQmZWFjdXRlO2ZhdXQnOwokbGFuZ1snbGFzdGFjY2Vzc2VkcGFnZSddID0gJ0Rlcm5pJmVncmF2ZTtyZSBwYWdlIGFjYyZlYWN1dGU7ZCZlYWN1dGU7ZSc7CiRsYW5nWydvdGhlcnBhZ2UnXSA9ICdBdXRyZSBwYWdlJm5ic3A7Oic7CiRsYW5nWydjaGFuZ2Vsb2cnXSA9ICc8dWw+DQo8bGk+MC4wLjEgLSBPY3RvYmVyIDIwMDUgLSBWZXJzaW9uIGluaXRpYWxlLCBub24gZm9uY3Rpb25uZWxsZTwvbGk+DQo8bGk+MC4xLjAgLSBPY3RvYmVyIDIwMDUgLSBWZXJzaW9uIGluaXRpYWxlPC9saT4NCjxsaT4wLjEuMSAtIE9jdG9icmUgMjAwNSAtIENvcnJlY3Rpb24gZGVzIHByb2JsJmVncmF2ZTttZXMgYXZlYyBsZXMgcHJvcHJpJmVhY3V0ZTt0JmVhY3V0ZTtzPC9saT4NCjxsaT4wLjEuMiAtIE9jdG9icmUgMjAwNSAtIEFqb3V0IGRlIGxhIGZvbmN0aW9uIHBvdXIgbGVzIG1vdHMgZGUgcGFzc2Ugb3VibGkmZWFjdXRlO3M8L2xpPg0KPGxpPjxwPjAuMS4zIC0gTm92ZW1icmUgMjAwNTwvcD4NCiAgICA8cD5Bam91dCBkZSBsYSBwb3NzaWJpbGl0JmVhY3V0ZTsgZGUgc3AmZWFjdXRlO2NpZmllciBsZXMgcGFnZXMgZGUgcmVkaXJlY3Rpb24gYXByJmVncmF2ZTtzIGNvbm5leGlvbiBldCBkJmVhY3V0ZTtjb25uZXhpb24sIG91YmxpIGRlIG1vdCBkZSBwYXNzZSBldCBjaGFuZ2VtZW50IGRlIHBhcmFtJmVncmF2ZTt0cmVzLCBham91dCBkZXMgcGFyYW0mZWdyYXZlO3RyZXMgcmV0dXJudG8gZXQgZGUgZm9ybXVsYWlyZXMgZGFucyBsZSBwYW5uZWF1IHV0aWxpc2F0ZXVyLCBuZXR0b3lhZ2UgZGUgY29kZS4gIENldHRlIHZlcnNpb24gcmVxdWllcnQgQ01TTVMgdjAuMTEgZXQgc3VpdmFudGVzLjwvcD48L2xpPg0KPGxpPjAuMS40IC0gTm92ZW1icmUgMjAwNSAtIFBldGl0IGNoYW5nZW1lbnQgZW4gcmFwcG9ydCBhdmVjIHVuZSBmb25jdGlvbiBvdWJsaSZlYWN1dGU7ZSBxdWkgbiYjMDM5O2VzdCBwbHVzIHV0aWxpcyZlYWN1dGU7ZTwvbGk+DQo8bGk+PHA+MC4xLjUgLSBOb3ZlbWJyZSAyMDA1PC9wPg0KICAgIDxwPlVuIGF1dHJlIHBldGl0IGNoYW5nZW1lbnQsIGFqb3V0IGRlIHRleHRlIGF1IG1lc3NhZ2UgYWZmaWNoJmVhY3V0ZTsgYXByJmVncmF2ZTtzIGwmIzAzOTtpbnN0YWxsYXRpb24uPC9wPjwvbGk+DQo8bGk+PHA+MC4xLjYgLSBKYW52aWVyIDIwMDY8cD4NCiAgICA8cD5DaGFuZ2VtZW50IGRhbnMgbGVzIHByb2Nlc3N1cyBkZSBwZXJtaXNzaW9ucywgZXQgcGV0aXRlcyBjb3JyZWN0aW9ucyBkYW5zIGxlcyBwciZlYWN1dGU7ZiZlYWN1dGU7cmVuY2VzLiAgJkVhY3V0ZTtnYWxlbWVudCBxdWVscXVlcyBjb3JyZWN0aW9uIGVuIHJhcHBvcnQgYXZlYyBwaHA1LCBpbCBkb2l0IGNlcGVuZGFudCByZXN0ZXIgcXVlbHF1ZXMgZXJyZXVycy48L3A+PC9saT4NCjxsaT48cD4wLjEuNyAtIEphbnZpZXIgMjAwNjxwPg0KICAgIDxwPk1pbGxlIG1lcmNpcyAmYWdyYXZlOyA8Yj5rYXRvbjwvYj4gcG91ciBsJiMwMzk7YWpvdXQgZGVzIHR5cGVzIGRlIHByb3ByaSZlYWN1dGU7dCZlYWN1dGU7cyB0ZXh0YXJlYSBldCBtZW51IGQmZWFjdXRlO3JvdWxhbnQuPC9wPg0KICAgIDxwPkNvcnJlY3Rpb25zIGFwcG9ydCZlYWN1dGU7ZXMgcG91ciByJmVhY3V0ZTtzb3VkcmUgbGVzIHByb2JsJmVncmF2ZTttZXMgZCYjMDM5O2VzcGFjZXMgZGFucyBsZXMgbm9tcyBkZSBwcm9wcmkmZWFjdXRlO3QmZWFjdXRlO3MgKG5vdXMgbmUgbGFpc3Nlcm9ucyBwbHVzIGphbWFpcyBjZWxhIHNlIHByb2R1aXJlKS48L3A+DQo8L2xpPg0KPGxpPjxwPjEuMC4wIC0gRiZlYWN1dGU7dnJpZXIgMjAwNjxwPg0KICAgIDxwPkFqb3V0IGRlIGZpbHRyZSBldCBsaW1pdGF0aW9uIGRlcyBsaWduZXMgYXUgcGFubmVhdSBkJiMwMzk7YWRtaW5pc3RyYXRpb24uIEdyb3MgYiZlYWN1dGU7biZlYWN1dGU7ZmljZXMgcG91ciBsZXMgc2l0ZXMgYXZlYyBiZWF1Y291cCBkZSB0cmFmaWMgZXQgZCYjMDM5O3V0aWxpc2F0ZXVycy48L3A+DQogICAgPHA+QWpvdXQgZHUgdHJpIGRhbnMgbGUgcGFubmVhdSBkJiMwMzk7YWRtaW5pc3RyYXRpb248L3A+DQogICAgPHA+QWpvdXQgZGUgbGEgcG9zc2liaWxpdCZlYWN1dGU7IGRlIGQmZWFjdXRlO2ZpbmlyIHVuZSBsb25ndWV1ciBtYXhpbWFsZSBhdSBjaGFtcHMgdGV4dGUgZXQgZW1haWw8L3A+DQogICAgPHA+Q29ycmVjdGlvbiBkJiMwMzk7dW4gcGV0aXQgcHJvYmwmZWdyYXZlO21lIGF2ZWMgbGUgZ3JvdXBlIHBhciBkJmVhY3V0ZTtmYXV0IHF1aSBuJiMwMzk7JmVhY3V0ZTt0YWl0IHBhcyBjaG9pc2kgbG9ycyBkZSBsJiMwMzk7YWpvdXQgZCYjMDM5O3VuIHV0aWxpc2F0ZXVyPC9wPg0KICAgIDxwPlNhdXZlZ2FyZGUgZGVzIHBhcmFtJmVncmF2ZTt0cmVzIGRlIGZpbHRyYWdlIGRhbnMgbGVzIHByJmVhY3V0ZTtmJmVhY3V0ZTtyZW5jZXMsICZlYWN1dGU7Z2FsZW1lbnQgbCYjMDM5O29uZ2xldCBhY3RpZi48L3A+DQogICAgPHA+RWZmYWNlIGxlcyBwcm9wcmkmZWFjdXRlO3QmZWFjdXRlO3MgZGVzIHV0aWxpc2F0ZXVycyBxdWFuZCB1bmUgcHJvcHJpJmVhY3V0ZTt0JmVhY3V0ZTsgZXN0IHN1cHByaW0mZWFjdXRlO2UgPGVtPk5vdGU8L2VtPiwgcGFzIGxvcnNxdSYjMDM5O2VsbGUgZXN0IGQmZWFjdXRlO3NhY3RpdiZlYWN1dGU7ZSBkYW5zIGxlIHBhbm5lYXUgZCYjMDM5OyZlYWN1dGU7ZGl0aW9uIGQmIzAzOTt1biBncm91cGU8L3A+DQogICAgPHA+QWpvdXQgZCYjMDM5O3VuIG1lc3NhZ2UgZGUgY29uZmlybWF0aW9uIGxvcnMgZGUgbCYjMDM5OyZlYWN1dGU7ZGl0aW9uIGQmIzAzOTt1biBncm91cGUuPC9wPg0KICAgIDxwPkFqb3V0IGRlIGRldXggYXV0cmVzIG1lc3NhZ2VzIGRlIGNvbmZpcm1hdGlvbi48L3A+DQogICAgPHA+QWpvdXQgZGUgbCYjMDM5O29wdGlvbiBkJiMwMzk7ZXhwb3J0IHNvdXMgZm9ybWF0IENTVjwvcD4NCiAgICA8cD5BIGZhaXJlIC0gQWpvdXQgZGVzIHByJmVhY3V0ZTtmJmVhY3V0ZTtyZW5jZXMgcG91ciBsZXMgbG9uZ3VldXJzIG1heGltYWxlcyBkZXMgY2hhbXBzICZxdW90O25vbSBkJiMwMzk7dXRpbGlzYXRldXImcXVvdDsgZXQgJnF1b3Q7bW90IGRlIHBhc3NlJnF1b3Q7PC9wPg0KPC9saT4NCjxsaT48cD4xLjAuMSAtIE1hcnMgMjAwNjxwPg0KICAgIDxwPkFqb3V0JmVhY3V0ZTsgbGEgcG9zc2liaWxpdCZlYWN1dGU7IGRlIHYmZWFjdXRlO3JpZmllciBsZXMgYWRyZXNzZXMgZW1haWwgJmFncmF2ZTsgZG91YmxlPC9wPg0KICAgIDxwPkNvcnJlY3Rpb24gZHUgcHJvYmwmZWdyYXZlO21lIG8mdWdyYXZlOyBsYSBkYXRlIGQmIzAzOTtleHBpcmF0aW9uICZlYWN1dGU7dGFpdCBtb2RpZmkmZWFjdXRlO2UgcXVhbmQgdW4gYWRtaW5pc3RyYXRldXIgY2hhbmdlYWl0IGxlcyBwYXJhbSZlZ3JhdmU7dHJlcyBkJiMwMzk7dW4gdXRpbGlzYXRldXI8L3A+DQogICAgPHA+QWpvdXQgZCYjMDM5O3VuIG1lc3NhZ2UgZGUgY29uZmlybWF0aW9uIGF1IGJvdXRvbiBzYXV2ZXIgbGVzIHByJmVhY3V0ZTtmJmVhY3V0ZTtyZW5jZXM8L3A+DQogICAgPHA+Q29ycmVjdGlvbiBkJiMwMzk7dW4gYnVnIG1pbmV1ciBkYW5zIGxlIGNvbXB0ZSBkZXMgdXRpbGlzYXRldXJzIGRhbnMgdW4gZ3JvdXBlPC9wPg0KICAgIDxwPkNvcnJlY3Rpb24gZGUgbGEgdGFpbGxlIGRlcyBjaGFtcHMgbm9tIGQmIzAzOTt1dGlsaXNhdGV1ciBldCBtb3QgZGUgcGFzc2UsIGFpbnNpIHF1ZSBsYSBsb25ndWV1ciBtYXhpbWFsZSBkdSBjaGFtcDwvcD4NCiAgICA8cD5Bam91dCBkJiMwMzk7dW4gZmlsdHJlIGF2YW5jJmVhY3V0ZTsgc3VyIGxlcyBwcm9wcmkmZWFjdXRlO3QmZWFjdXRlO3M8L3A+DQogICAgPHA+Q2hhbmdlbWVudHMgc3VyIGxlcyBsYWJlbHMgcG91ciBsJiMwMzk7YWpvdXQgb3UgbCYjMDM5OyZlYWN1dGU7ZGl0aW9uIGQmIzAzOTt1dGlsaXNhdGV1cjwvcD4NCiAgICA8cD5Db3JyZWN0aW9ucyBkZXMgcHJvYmwmZWdyYXZlO21lcyBhdmVjIGxlcyBmb3JtdWxhaXJlcyBpbmxpbmUgb3Ugbm9uLWlubGluZSwgbGUgbW90IGRlIHBhc3NlIG4mIzAzOTtlc3QgamFtYWlzIGVudm95JmVhY3V0ZTsgc3VyIGxhIGxpZ25lPC9wPg0KICAgIDxwPk1vZGlmaSZlYWN1dGU7IHBvdXIgcXVlIENNUyAwLjEyLWJldGEyIHNvaXQgdW4gbWluaW11bSByZXF1aXMgKHBvdXIgZGVzIHF1ZXN0aW9ucyBkZSBzJmVhY3V0ZTtjdXJpdCZlYWN1dGU7KTwvcD4NCjwvbGk+DQo8bGk+PHA+MS4wLjIgLSBNYXJzIDIwMDY8cD4NCiAgICA8cD5FbmNvcmUgZGVzIGNvcnJlY3Rpb25zIGRlIGxvbmd1ZXVycyBkZSBjaGFtcHM8L3A+DQo8L2xpPg0KPGxpPjxwPjEuMC4zIC0gTWFycyAgMjAwNjxwPg0KICAgIDxwPkV4cG9ydGF0aW9uICZhZ3JhdmU7IHNtYXJ0eSBkZSB0b3V0ZXMgbGVzIHByb3ByaSZlYWN1dGU7dCZlYWN1dGU7cyB1dGlsaXNhdGV1cnMgcXVhbmQgaWxzIHNvbnQgbG9nZyZlYWN1dGU7czwvcD4NCjwvbGk+DQo8bGk+PHA+MS4wLjQgLSBNYWksIDIwMDY8cD4NCiAgICA8cD5Db3JyZWN0aW9uIGR1IGNvZGUgZCYjMDM5O2V4cG9ydGF0aW9uPC9wPg0KICAgIDxwPk5ldHRveWFnZSBkdSBjb2RlIChmb25jdGlvbnMgYWxwaGFiJmVhY3V0ZTt0aXF1ZXMpPC9wPg0KICAgIDxwPlBldGl0ZXMgY29ycmVjdGlvbnMgZXQgYW0mZWFjdXRlO2xpb3JhdGlvbnMgKHJlY29tbWFuZCZlYWN1dGU7ZXMgcGFyIG5pbHM3MykgcG91ciBsZXMgY2hhbmdlbWVudHMgZGUgbW90cyBkZSBwYXNzZS48L3A+DQogICAgPHA+U3VwcHJlc3Npb24gZGUgdmVyc2lvbiBDTVMgMC4xMiByZXF1aXNlLCByZXRvdXIgJmFncmF2ZTsgbGEgdmVyc2lvbiAwLjExLjI8L3A+DQogICAgPHA+QWpvdXIgZHUgZm9ybXVsYWlyZSAmIzAzOTtzaWxlbnQmIzAzOTsgKGNhY2gmZWFjdXRlOyk8L3A+DQogICAgPHA+TmV0dG95YWdlIGRlIGwmIzAzOTthY2MmZWdyYXZlO3MgJmFncmF2ZTsgbGEgYmFzZSBkZSBkb25uJmVhY3V0ZTtlcyBwb3VyIGRlcyByYWlzb25zIGRlIHBlcmZvcm1hbmNlIChlc3AmZWFjdXRlO3JvbnMpPC9wPg0KICAgIDxwPkFqb3V0IGRlIGwmIzAzOTtpbmZvIGNvcHlyaWdodDwvcD4NCiAgICA8cD5Bam91dCBkZSBtYWNybyBwb3VyIGxhIHJlZGlyZWN0aW9uIGRlIGwmIzAzOTt1dGlsaXNhdGV1ciBzdXIgdW5lIHBhZ2Ugc3AmZWFjdXRlO2NpZmlxdWUgbG9ycyBkZSBsYSBjb25uZXhpb24gZXQgZCZlYWN1dGU7Y29ubmV4aW9uPC9wPg0KICAgIDxwPkNoYW5nZW1lbnRzIGRhbnMgbGVzIG9uZ2xldHMgZGUgcHImZWFjdXRlO2YmZWFjdXRlO3JlbmNlczwvcD4NCjwvbGk+JzsKJGxhbmdbJ2hlbHAnXSA9ICc8aDM+UXVlIGZhaXQgY2UgbW9kdWxlID88L2gzPg0KPHA+Q2UgbW9kdWxlIHBlcm1ldCBsYSBnZXN0aW9uIGV0IGwmIzAzOTthZG1pbmlzdHJhdGlvbiBkZXMgdXRpbGlzYXRldXJzIGR1IHNpdGUgc3VyIGxhIHBhcnRpZSBwdWJsaXF1ZSA8aT4odXRpbGlzYXRldXJzIHF1aSBuJiMwMzk7b250IHBhcyBhY2MmZWdyYXZlO3MgYXUgcGFubmVhdSBkJiMwMzk7YWRtaW5pc3RyYXRpb24pPC9pPi4gSWwgcGVybWV0IGxhIGNyJmVhY3V0ZTthdGlvbiBkZSBncm91cGVzIGQmIzAzOTt1dGlsaXNhdGV1cnMsIGRlIGNvbXB0ZXMgdXRpbGlzYXRldXIsIGV0IHBlcm1ldCBhdXggdXRpbGlzYXRldXJzIGRlIHNlIGNvbm5lY3RlciBldCBzZSBkJmVhY3V0ZTtjb25uZWN0ZXIuIElsIHBldXQgJmVjaXJjO3RyZSB1dGlsaXMmZWFjdXRlOyBhdmVjIGxlIG1vZHVsZSBDdXN0b21Db250ZW50IHBvdXIgYWZmaWNoZXIgZHUgY29udGVudSBkaWZmJmVhY3V0ZTtyZW50IHNlbG9uIGxlcyB1dGlsaXNhdGV1cnMsIHVuZSBmb2lzIHF1JiMwMzk7aWxzIHNvbnQgY29ubmVjdCZlYWN1dGU7cy48L3A+DQo8aDM+Rm9uY3Rpb25uYWxpdCZlYWN1dGU7czwvaDM+DQo8dWw+DQo8bGk+PHA+RXhwaXJhdGlvbiBkdSBjb21wdGUgdXRpbGlzYXRldXIuICBWb3VzIHBvdXZleiBjciZlYWN1dGU7ZXIgZGVzIHV0aWxpc2F0ZXVycyB0ZW1wb3JhaXJlczwvcD48L2xpPg0KPGxpPjxwPlByb3ByaSZlYWN1dGU7dCZlYWN1dGU7cyBkZSBncm91cGUuICBWb3VzIHBvdXZleiBkZW1hbmRlciBkZXMgaW5mb3JtYXRpb25zIGRpZmYmZWFjdXRlO3JlbnRlcyBhdXggbWVtYnJlcyBkZSBkaWZmJmVhY3V0ZTtyZW50cyBncm91cGVzPC9wPjwvbGk+DQo8bGk+PHA+UGV1dCBnJmVhY3V0ZTtyZXIgZGVzIGNlbnRhaW5lcyBkJiMwMzk7dXRpbGlzYXRldXJzPC9wPjwvbGk+DQo8bGk+PHA+Q29udGllbnQgdW5lIEFQSSAmZWFjdXRlO3RlbmR1ZSwgcG91ciBsJiMwMzk7YWpvdXQgZGUgZm9uY3Rpb25uYWxpdCZlYWN1dGU7czwvcD48L2xpPg0KPC91bD4NCjxoMz5Db21tZW50IGwmIzAzOTt1dGlsaXNlcjwvaDM+DQo8dWw+DQo8bGk+PHA+QXByJmVncmF2ZTtzIGluc3RhbGxhdGlvbiwgdm91cyBwb3V2ZXogYWNjJmVhY3V0ZTtkZXIgYXUgbW9kdWxlIEZyb250RW5kVXNlcnMgcGFyIGxlIHBhbm5lYXUgZCYjMDM5O2FkbWluaXN0cmF0aW9uIHNvdXMgbGUgbWVudSAmcXVvdDtHcm91cGVzICZhbXA7IFV0aWxpc2F0ZXVycyZxdW90Oy48L3A+PC9saT4NCjxsaT4NCjxwPkRldXhpJmVncmF2ZTttZW1lbnQsIHZvdXMgZGV2cmlleiBkJmVhY3V0ZTtmaW5pciBkZXMgcHJvcHJpJmVhY3V0ZTt0JmVhY3V0ZTtzLiBMZXMgcHJvcHJpJmVhY3V0ZTt0JmVhY3V0ZTtzIHNvbnQgZXNzZW50aWVsbGVtZW50IGRlcyBkJmVhY3V0ZTtmaW5pdGlvbnMgZGUgY2hhbXAsIHZvdXMgcG91dmV6IGljaSBkJmVhY3V0ZTtmaW5pciBsZSB0eXBlIGQmIzAzOTtpbmZvcm1hdGlvbiBxdWUgdm91cyBkJmVhY3V0ZTtzaXJleiBjb2xsZWN0ZXIsIGV0IGxlcyBsaW1pdGVzLiBwLmV4LiBOb20sIEFnZSwgVmlsbGUsIEQmZWFjdXRlO3BhcnRlbWVudCwgUGF5cywgQWRyZXNzZSBlbWFpbCwgZXRjLiA8L3A+DQo8cD48Yj5Ob3RlOjwvYj4gVm91cyBuJiMwMzk7YXZleiBwYXMgYmVzb2luIGRlIGQmZWFjdXRlO2ZpbmlyIGxlcyBwcm9wcmkmZWFjdXRlO3QmZWFjdXRlO3MgZGUgbCYjMDM5O2lkZW50aWZpYW50IGV0IGR1IG1vdCBkZSBwYXNzZSwgaWxzIHNvbnQgY3ImZWFjdXRlOyZlYWN1dGU7cyBwb3VyIHZvdXMuPC9iPg0KPC9saT4NCjxsaT48cD5FbnN1aXRlLCB2b3VzIGRldnJpZXogY3ImZWFjdXRlO2VyIHVuIG91IHBsdXNpZXVycyBub20ocykgZGUgZ3JvdXBlLiBRdWFuZCB2b3VzIGNyJmVhY3V0ZTsmZWFjdXRlO3ogdW4gZ3JvdXBlLCB2b3VzIGRldmV6IGVudHJlciB1biBub20gZGUgZ3JvdXBlLCB1bmUgZGVzY3JpcHRpb24gZXQgZGV2ZXogYXNzb2NpZXIgZGVzIHByb3ByaSZlYWN1dGU7dCZlYWN1dGU7cyBhdSBncm91cGUsIHNwJmVhY3V0ZTtjaWZpZXIgbCYjMDM5O29yZHJlIGRlcyBwcm9wcmkmZWFjdXRlO3QmZWFjdXRlO3MsIHNpIGNlbGxlcy1jaSBzb250IG9wdGlvbm5lbGxlcywgcmVxdWlzZXMgb3UgZGUgY2hhbXAgY2FjaCZlYWN1dGU7PGk+KG9mZiBlc3QgYXVzc2kgdmFsaWRlKTwvaT48L3A+PC9saT4NCjxsaT48cD48Yj5Ob3RlOjwvYj4gQXZhbnQgZGUgY29udGludWVyLCB2ZXVpbGxleiB2b3VzIGFzc3VyZXIgcXVlIGxlcyBwciZlYWN1dGU7ZiZlYWN1dGU7cmVuY2VzIHNvbnQgZCZlYWN1dGU7ZmluaWVzIGNvcnJlY3RlbWVudC48L3A+PC9saT4NCjxsaT48cD5Ucm9pc2kmZWdyYXZlO21lbWVudCwgY3ImZWFjdXRlO2V6IGxlcyB1dGlsaXNhdGV1cnMuIEwmIzAzOTtham91dCBkJiMwMzk7dXRpbGlzYXRldXIgZXN0IHVuIHByb2Nlc3N1cyBlbiBkZXV4IHRlbXBzLiBRdWFuZCB2b3VzIGNyJmVhY3V0ZTsmZWFjdXRlO3ogdW4gdXRpbGlzYXRldXIsIHZvdXMgZGV2ZXogZW50cmVyIHVuIGlkZW50aWZpYW50IGV0IHVuIG1vdCBkZSBwYXNzZSwgYWluc2kgcXUmIzAzOTt1bmUgZGF0ZSBkJiMwMzk7ZXhwaXJhdGlvbi4gVm91cyBkZXZleiBlbnN1aXRlIHMmZWFjdXRlO2xlY3Rpb25uZXIgbGUgb3UgbGVzIGdyb3VwZShzKSBhdSh4KXF1ZWwocykgY2V0IHV0aWxpc2F0ZXVyIGFwcGFydGllbmRyYSwgcHVpcyBjbGlxdWVyIHN1ciBcJiMwMzk7U3VpdmFudFwmIzAzOTs8L3A+DQo8cD48ZW0+Tm90ZTogPC9lbT5DZWNpIGVzdCB1biB0cmF2YWlsIGxvbmcgZXQgbGFib3JpZXV4LCBpbCBlc3QgcGx1cyBmYWNpbGUgZGUgbGFpc3NlciBsZXMgdXRpbGlzYXRldXJzIHMmIzAzOTtlbnJlZ2lzdHJlciBldXgtbSZlY2lyYzttZXMuIFB1aXMgdm91cyBwb3V2ZXogJmVhY3V0ZTtkaXRlciBsZXVyIGdyb3VwZSBkJiMwMzk7YXBwYXJ0ZW5hbmNlLiBDZXBlbmRhbnQsIGNyJmVhY3V0ZTsmZWFjdXRlO3ogYXUgbW9pbnMgdW4gdXRpbGlzYXRldXItdGVzdC48L3A+PC9saT4NCjxsaT48cD5FbmZpbiwgYXByJmVncmF2ZTtzIHF1ZSBsZSBzeXN0JmVncmF2ZTttZSBhaWUgZCZlYWN1dGU7dGVybWluJmVhY3V0ZTsgdG91cyBsZXMgY2hhbXBzIGEgcHImZWFjdXRlO3NlbnRlciAmYWdyYXZlOyBsJiMwMzk7dXRpbGlzYXRldXIsIHZvdXMgdmVycmV6IHVuIGZvcm11bGFpcmUgcXVpIHZvdXMgZGVtYW5kZXJhIGRlIGQmZWFjdXRlO2ZpbmlyIHRvdXMgbGVzIGNoYW1wcyBvYmxpZ2F0b2lyZXMuIFJlbXBsaXNzZXogY2UgZm9ybXVsYWlyZSBwb3VyIHRlcm1pbmVyIGwmIzAzOTtham91dCBkZSBsJiMwMzk7dXRpbGlzYXRldXIuPC9wPjwvbGk+DQo8bGk+PHA+Vm91cyAmZWNpcmM7dGVzIG1haW50ZW5hbnQgcHImZWNpcmM7dCAmYWdyYXZlOyBham91dGVyIGxhIGZvbmN0aW9uIGF1eCBwYWdlcyBkZSB2b3RyZSBzaXRlLiBDJiMwMzk7ZXN0IHRyJmVncmF2ZTtzIHNpbXBsZSwgYWpvdXRleiBsYSBiYWxpc2UgU21hcnR5IHtjbXNfbW9kdWxlIG1vZHVsZT1Gcm9udEVuZFVzZXJzfSAmYWdyYXZlOyB2b3RyZSBwYWdlIG91IGdhYmFyaXQ8L3A+PC9saT4NCjwvdWw+DQo8aDM+U3VwcG9ydDwvaDM+DQo8cD5DZSBtb2R1bGUgbmUgY29udGllbnQgYXVjdW4gc3VwcG9ydCBjb21tZXJjaWFsLiBDZXBlbmRhbnQsIGNlcyByZXNzb3VyY2VzIHNvbnQgZGlzcG9uaWJsZXMgcG91ciB2b3VzIGFpZGVyJm5ic3A7OjwvcD4NCjx1bD4NCjxsaT5Qb3VyIGxhIGRlcm5pJmVncmF2ZTtyZSB2ZXJzaW9uIGRlIGNlIG1vZHVsZSwgbGVzIEZBUXMsIG91IHBvdXIgYW5ub25jZXIgdW4gYnVnLCBvdSBwb3VyIGFjaGV0ZXIgZHUgc3VwcG9ydCBjb21tZXJjaWFsLCB2ZXVpbGxleiB2aXNpdGVyIGxlIHNpdGUgZGUgY2FsZ3V5JiMwMzk7cyA8YSBocmVmPSZxdW90O2h0dHA6Ly90ZWNoY29tLmR5bmRucy5vcmcmcXVvdDs+dGVjaGNvbS5keW5kbnMub3JnPC9hPi48L2xpPg0KPGxpPkRlcyBkaXNjdXNzaW9ucyBjb21wbCZlYWN1dGU7bWVudGFpcmVzIHJlbGF0aXZlcyAmYWdyYXZlOyBjZSBtb2R1bGUgcGV1dmVudCBhdXNzaSAmZWNpcmM7dHJlIHRyb3V2JmVhY3V0ZTtlcyBzdXIgbGVzIDxhIGhyZWY9JnF1b3Q7aHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnJnF1b3Q7IHRhcmdldD0mcXVvdDtfYmxhbmsmcXVvdDs+Rm9ydW1zIENNUyBNYWRlIFNpbXBsZTwvYT4uPC9saT4NCjxsaT5MJiMwMzk7YXV0ZXVyLCBjYWxndXkxMDAwLCBlc3Qgc291dmVudCBzdXIgSVJDIHN1ciBjYW5hbCAjY21zOiBpcmMuZnJlZW5vZGUubmV0LyNjbXM8L2xpPg0KPGxpPkV0IGVuZmluLCB2b3VzIHBvdXZleiByZW5jb250cmVyIHVuIGNlcnRhaW4gc3VjYyZlZ3JhdmU7cyBlbiBlbnZveWFudCB1biBlbWFpbCBkaXJlY3RlbWVudCAmYWdyYXZlOyBsJiMwMzk7YXV0ZXVyLjwvbGk+ICANCjwvdWw+DQo8aDM+UGFyYW0mZWdyYXZlO3RyZXM8L2gzPg0KPHVsPg0KPGxpPjxlbT4ob3B0aW9uZWwpPC9lbT4gZm9ybT0mcXVvdDtuYW1lJnF1b3Q7PC9saT4NCjxwPkZvcm11bGFpcmVzOg0KPHVsPg0KIDxsaT48ZW0+bG9naW48L2VtPiAtIEFmZmljaGUgbGUgZm9ybXVsYWlyZSBkZSBjb25uZXhpb248L2xpPg0KIDxsaT48ZW0+bG9nb3V0PC9lbT4gLSBBZmZpY2hlIGxlIGZvcm11bGFpcmUgZGUgZCZlYWN1dGU7Y29ubmV4aW9uPC9saT4NCiA8bGk+PGVtPmNoYW5nZXNldHRpbmdzPC9lbT4gLSBBZmZpY2hlIGxlIGZvcm11bGFpcmUgZGUgY2hhbmdlbWVudCBkZSBwYXJhbSZlZ3JhdmU7dHJlczwvbGk+DQogPGxpPjxlbT5mb3Jnb3RwdzwvZW0+IC0gQWZmaWNoZSBsZSBmb3JtdWxhaXJlIGQmIzAzOTtvdWJsaSBkZSBtb3QgZGUgcGFzc2U8L2xpPg0KPGxpPjxlbT5zaWxlbnQ8L2VtPiA9IE4mIzAzOTthZmZpY2hlIHJpZW4sIG1haXMgZXhwb3J0ZSBsZXMgcHJvcHJpJmVhY3V0ZTt0JmVhY3V0ZTtzIGV0IGF1dHJlcyB2YXJpYWJsZXMgc21hcnR5IHBvdXIgbCYjMDM5O3V0aWxpc2F0ZXVyIGNvbm5lY3QmZWFjdXRlOy4gU2kgYXVjdW4gdXRpbGlzYXRldXIgbiYjMDM5O2VzdCBjb25uZWN0JmVhY3V0ZTssIGF1Y3VuZSB2YXJpYWJsZSBuJiMwMzk7ZXN0IGV4cG9ydCZlYWN1dGU7ZS48L2xpPg0KPC91bD4NCjwvcD4NCjxsaT48ZW0+KG9wdGlvbmVsKTwvZW0+IHJldHVybnRvPSZxdW90O3BhZ2UmcXVvdDs8L2xpPg0KPHA+VXRpbGlzJmVhY3V0ZTsgYXZlYyBsZXMgZm9ybXVsYWlyZXMgZGUgY29ubmV4aW9uLCBkZSBkJmVhY3V0ZTtjb25uZXhpb24sIGV0IGRlIGNoYW5nZW1lbnQgZGUgcGFyYW0mZWdyYXZlO3RyZXMsIGNlIHBhcmFtJmVncmF2ZTt0cmUgY29udGllbnQgbCYjMDM5O2lkIG91IGwmIzAzOTthbGlhcyBkZSBsYSBwYWdlICZhZ3JhdmU7IGxhcXVlbGxlIHJlZGlyaWdlciBsJiMwMzk7dXRpbGlzYXRldXIgYXByJmVncmF2ZTtzIGwmIzAzOTtlbnZvaSBkdSBmb3JtdWxhaXJlLCBzaSBjZWx1aS1jaSBhICZlYWN1dGU7dCZlYWN1dGU7IHRyYWl0JmVhY3V0ZTsgYXZlYyBzdWNjJmVncmF2ZTtzPC9wPg0KPC91bD4NCjxwPkNvbmZvcm0mZWFjdXRlO21lbnQgJmFncmF2ZTsgbGEgbGljZW5jZSBHUEwsIGNlIG1vZHVsZSBlc3QgZGlzdHJpYnUmZWFjdXRlOyB0ZWwgcXVlbC4gVmV1aWxsZXogdm91cyByJmVhY3V0ZTtmJmVhY3V0ZTtyZXIgZGlyZWN0ZW1lbnQgJmFncmF2ZTsgbGEgbGljZW5jZSBwb3VyIHRvdXQgYXZpcyBkZSBub24gcmVzcG9uc2FiaWxpdCZlYWN1dGU7LjwvcD4NCjxoMz5SZXF1aXM8L2gzPg0KPHA+UG91ciBsJiMwMzk7aW1wbCZlYWN1dGU7bWVudGF0aW9uIGRlIGxhIHImZWFjdXRlO2luaXRpYWxpc2F0aW9uIGRlIG1vdCBkZSBwYXNzZSBvdWJsaSZlYWN1dGU7LCBjZSBtb2R1bGUgcmVxdWllcnQgcXVlIGxlIG1vZHVsZSBDTVNNYWlsZXIgc29pdCBwciZlYWN1dGU7YWxhYmxlbWVudCBpbnN0YWxsJmVhY3V0ZTsuPC9wPg0KPGgzPkNvcHlyaWdodCBldCBMaWNlbmNlPC9oMz4NCjxwPkNvcHlyaWdodCAmY29weTsgMjAwNSwgUm9iZXJ0IENhbXBiZWwgPGEgaHJlZj0mcXVvdDttYWlsdG86Y2FsZ3V5MTAwMEBob3RtYWlsLmNvbSZxdW90Oz48Y2FsZ3V5MTAwMEBob3RtYWlsLmNvbT48L2E+LiBUb3VzIGRyb2l0cyByJmVhY3V0ZTtzZXJ2JmVhY3V0ZTtzLjwvcD4NCjxwPkNlIG1vZHVsZSBlc3QgZGlzdHJpYnUmZWFjdXRlOyBzb3VzIGxhIGxpY2VuY2UgPGEgaHJlZj0mcXVvdDtodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwmcXVvdDsgdGFyZ2V0PSZxdW90O19ibGFuayZxdW90Oz5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBWb3VzIGRldmV6IGFnciZlYWN1dGU7ZXIgYXV4IHRlcm1lcyBkZSBjZXR0ZSBsaWNlbmNlIHBvdXIgcG91dm9pciB1dGlsaXNlciBjZSBtb2R1bGUuPC9wPic7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/it_IT.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2JhY2tlbmRfZ3JvdXAnXSA9ICdHcnVwcG8gZGkgQmFja2VuZCc7CiRsYW5nWydpbmZvX3N0YXInXSA9ICcqIExlIHNlZ3VlbnRpIG1hY3JvIHBvc3Nvbm8gZXNzZXJlIHVzYXRlIGluIHF1ZXN0byBjYW1waTogeyR1c2VybmFtZX0nOwokbGFuZ1snaW5mb19hZG1pbl9wYXNzd29yZCddID0gJ01vZGlmaWNhIHF1ZXN0byBjYW1wbyBwZXIgcmVzZXR0YXJlIGxhIHBhc3N3b3JkJzsKJGxhbmdbJ2luZm9fYWRtaW5fcmVwZWF0cGFzc3dvcmQnXSA9ICdNb2RpZmljYSBxdWVzdG8gY2FtcG8gcGVyIHJlc2V0dGFyZSBsYSBwYXNzd29yZCc7CiRsYW5nWydlcnJvcl91c2VybmFtZV9leGlzdHMnXSA9ICdVbiB1dGVudGUgY29uIHF1ZWwgdXNlcm5hbWUgZ2kmYWdyYXZlOyBlc2lzdGUnOwokbGFuZ1snbm9jc3ZyZXN1bHRzJ10gPSAnTmVzc3VuIHJpc3VsdGF0byBkaSByaXRvcm5vIGRhbGwmIzAzOTtlc3BvcnRhemlvbmUgY3N2JzsKJGxhbmdbJ3Byb21wdF91bmZsZGxlbiddID0gJ0x1bmdoZXp6YSBkZWwgY2FtcG8gdXNlcm5hbWUnOwokbGFuZ1sncHJvbXB0X3B3ZmxkbGVuJ10gPSAnTHVuZ2hlenphIGRlbCBjYW1wbyBwYXNzd29yZCc7CiRsYW5nWydlcnJvcl9pbnZhbGlkcGFzc3dvcmRsZW5ndGhzJ10gPSAnTHVuZ2hlenplIE1pbi9NYXggbm9uIHZhbGlkZSBkZWxsYSBwYXNzd29yZCc7CiRsYW5nWydlcnJvcl9pbnZhbGlkdXNlcm5hbWVsZW5ndGhzJ10gPSAnTHVuZ2hlenplIE1pbi9NYXggbm9uIHZhbGlkZSBkZWxsbyB1c2VybmFtZSc7CiRsYW5nWydlcnJvcl9ub2VtYWlsYWRkcmVzcyddID0gJ05vbiB0cm92byB1biBpbmRpcml6em8gZW1haWwgcGVyIHF1ZXN0byBhY2NvdW50JzsKJGxhbmdbJ3VzZXJfYWRkZWQnXSA9ICdVdGVudGUgYWdnaXVudG8gJXMgPSAlcyc7CiRsYW5nWyd1c2VyX2RlbGV0ZWQnXSA9ICdVdGVudGUgY2FuY2VsbGF0byB1aWQ9JXMnOwokbGFuZ1sncHJvcGVydHlmaWx0ZXInXSA9ICdQcm9waWV0JmFncmF2ZTsnOwokbGFuZ1sndmFsdWVyZWdleCddID0gJ1ZhbG9yZSAocmVndWxhciBleHByZXNzaW9uKSc7CiRsYW5nWyd3YXJuaW5nX2VmZmVjdHNmaWVsZGxlbmd0aCddID0gJ0F0dGVuemlvbmU6IFF1ZXN0aSBjYW1waSBpbmZsdWlzY29ubyBzdWxsYSBkaW1lbnNpb25lIGRlaSBjYW1waSBkZWwgZm9ybS4gUG90cmViYmUgbm9uIGVzc2VyZSBjb25zaWdsaWFiaWxlIGRpbWludWlyZSBxdWVzdG8gbnVtZXJvIHN1IHVuIHNpdG8gZXNpc3RlbnRlJzsKJGxhbmdbJ2NvbmZpcm1fc3VibWl0cHJlZnMnXSA9ICdDYW1iaWF0ZSBsZSBwcmVmZXJlbnplIGRpIGFtbWluaXN0cmF6aW9uZT8nOwokbGFuZ1snZXJyb3JfZW1haWxhbHJlYWR5dXNlZCddID0gJ0luZGlyaXp6byBlbWFpbCBnaSZhZ3JhdmU7IHVzYXRvJzsKJGxhbmdbJ3Byb21wdF9hbGxvd19kdXBsaWNhdGVfZW1haWxzJ10gPSAnUGVybWV0dGkgZW1haWwgZHVwbGljYXRlJzsKJGxhbmdbJ2luZm9fYWxsb3dfZHVwbGljYXRlX2VtYWlscyddID0gJyhwZXJtZXR0aSBwaSZ1Z3JhdmU7IHV0ZW50aSBjb24gbG8gc3Rlc3NvIGluZGlyaXp6byBlbWFpbCknOwokbGFuZ1snZXJyb3JfbWlzc2luZ3VzZXJuYW1lJ10gPSAnTm9uIGF2ZXRlIGluc2VyaXRvIHVuIHVzZXJuYW1lJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdwYXNzd29yZCddID0gJ05vbiBhdmV0ZSBpbnNlcml0byB1bmEgcGFzc3dvcmQnOwokbGFuZ1snZnJvbnRlbmR1c2VyX2xvZ291dCddID0gJ0xvZ291dCBVdGVudGUnOwokbGFuZ1snZnJvbnRlbmR1c2VyX2xvZ2dlZGluJ10gPSAnTG9naW4gVXRlbnRlJzsKJGxhbmdbJ2VkaXRwcm9wX2luZm9tc2cnXSA9ICc8c3BhbiBzdHlsZT0mcXVvdDtjb2xvcjpyZWQmcXVvdDs+PGI+VVNBUkUgQ09OIENBVVRFTEE8L2I+IHF1YW5kbyBtb2RpZmljYXRlIHByb3ByaWV0JmFncmF2ZTsgZXNpc3RlbnRpIGNoZSBzb25vIGFzc2VnbmF0ZSBhIGdydXBwaSwgcG90ZW56aWFsbWVudGUgcG90ZXRlIGNhdXNhcmUgZGFubmVnZ2lhbWVudGkgZSBmZXJtYXJlIHVuIHNpdGUgZXNpc3RlbnRlPGk+IChzcGVjaWFsbWVudGUgc2UgcmlkdWNldGUgbGEgbHVuZ2hlenphIGRlaSBjYW1waSwgZXRjKTwvaT48L3NwYW4+JzsKJGxhbmdbJ2luZm9fc210cHZhbGlkYXRlJ10gPSAnUXVlc3RhIGZ1bnppb25lIG5vbiBsYXZvcmEgc3Ugd2luZG93cyc7CiRsYW5nWydtc2dfZG9udGNyZWF0ZXVzZXJuYW1lJ10gPSAnTm9uIGNyZWF0ZSB1bmEgcHJvcHJpZXQmYWdyYXZlOyBwZXIgdXNlcm5hbWUgbyBhbHRyZSBjb3NlIGNvbWUgcXVlc3RhIHBvaWNoJmVncmF2ZTsgJmVncmF2ZTsgZ2kmYWdyYXZlOyBpbnNlcml0YSBuZWwgbW9kdWxvIEZyb250RW5kVXNlcnMnOwokbGFuZ1sncHJvbXB0X2V4cG9ydGNzdiddID0gJ0VzcG9ydGEgZ2xpIHV0ZW50aSBpbiBDU1YnOwokbGFuZ1snZXhwb3J0Y3N2J10gPSAnRXNwb3J0YSc7CiRsYW5nWydhZG1pbiddID0gJ0FtbWluaXN0YXppb25lJzsKJGxhbmdbJ2VkaXRwcm9wJ10gPSAnTW9kaWZpY2EgcHJvcHJpZXQmYWdyYXZlOyc7CiRsYW5nWydtYXhsZW5ndGgnXSA9ICdNYXNzaW1hIGx1bmdoZXp6YSc7CiRsYW5nWydjcmVhdGVkJ10gPSAnQ3JlYXRvJzsKJGxhbmdbJ3NvcnRieSddID0gJ09yZGluYXRvIHBlcic7CiRsYW5nWydzb3J0J10gPSAnT3JkaW5hbWVudG8nOwokbGFuZ1sndXNlcnNpbmdyb3VwJ10gPSAnVXRlbnRpIG5lbCBncnVwcG8nOwokbGFuZ1sndXNlcmxpbWl0J10gPSAnTGltaXRhIHJpc3VsdGF0aSBhJzsKJGxhbmdbJ2Vycm9yX25vZW1haWxmaWVsZCddID0gJ05vbiBwb3NzbyB0cm92YXJlIHVuIGNhbXBvIGVtYWlsIHBlciBxdWVzdG8gdXRlbnRlLiBEb3ZyZXN0ZSBjb250YXR0YXJlIGwmIzAzOTthbW1pbmlzdHJhdG9yZSBkZWwgc2lzdGVtYSc7CiRsYW5nWydwcm9tcHRfZm9yZ290cHdfcGFnZSddID0gJ0lEL0FsaWFzIGRlbGxhIHBhZ2luYSBwZXIgaWwgbW9kdWxvIGRpIFBhc3N3b3JkIGRpbWVudGljYXRhJzsKJGxhbmdbJ3Byb21wdF9jaGFuZ2VzZXR0aW5nc19wYWdlJ10gPSAnSUQvQWxpYXMgZGVsbGEgcGFnaW5hIHBlciBpbCBtb2R1bG8gZGkgTW9kaWZpY2EgY29uZmlndXJhemlvbmknOwokbGFuZ1sncHJvbXB0X2xvZ2luX3BhZ2UnXSA9ICdEb3BvIGlsIGxvZ2luIHNhbHRhcmUgYWxsYSBQYWdpbmEgSUQvQWxpYXMgKic7CiRsYW5nWydwcm9tcHRfbG9nb3V0X3BhZ2UnXSA9ICdEb3BvIGlsIGxvZ291dCBzYWx0YXJlIGFsbGEgUGFnaW5hIElEL0FsaWFzIConOwokbGFuZ1snc29ydG9yZGVyJ10gPSAnT3JkaW5lJzsKJGxhbmdbJ3Byb21wdF9udW1yZXNldHJlY29yZCddID0gJ1VuIG51bWVybyBkaSB1dGVudGkgc29ubyBuZWwgbWV6em8gZGkgcmlzaXN0ZW1hemlvbmUgZGVsbGEgcGFzc3dvcmQgcGVyc2EuIEluIHF1ZXN0byBtb21lbnRvIGlsIGNvbnRhdG9yZSAmZWdyYXZlOyBhOic7CiRsYW5nWydyZW1vdmUxd2VlayddID0gJ1JpbXVvdmkgdHV0dGUgbGUgZW50aXQmYWdyYXZlOyBwaSZ1Z3JhdmU7IHZlY2NoaWUgZGkgdW5hIHNldHRpbWFuYSc7CiRsYW5nWydyZW1vdmUxbW9udGgnXSA9ICdSaW11b3ZpIHR1dHRlIGxlIGVudGl0JmFncmF2ZTsgcGkmdWdyYXZlOyB2ZWNjaGllIGRpIHVuIG1lc2UnOwokbGFuZ1sncmVtb3ZlYWxsJ10gPSAnUmltdW92aSB0dXR0ZSBsZSBlbnRpdCZhZ3JhdmU7JzsKJGxhbmdbJ2FyZXlvdXN1cmUnXSA9ICdTZWkgc2ljdXJvPyc7CiRsYW5nWydlcnJvcl9pbnZhbGlkY29kZSddID0gJ1VuIGNvZGljZSBpbnZhbGlkbyAmZWdyYXZlOyBzdGF0byBhZ2dpdW50bywgcHJvdmEgZGkgbnVvdm8nOwokbGFuZ1snZXJyb3JfdGVtcGNvZGVub3Rmb3VuZCddID0gJ1VuIGNvZGljZSB0ZW1wb3JhbmVvIHBlciBpbCB2b3N0cm8gdXRlbnRlIG5vbiAmZWdyYXZlOyBzdGF0byB0cm92YXRvIHN1bCBkYXRhYmFzZSc7CiRsYW5nWydmb3Jnb3RwYXNzd29yZF92ZXJpZnl0ZW1wbGF0ZSddID0gJ01vZGVsbG8gdXNhdG8gcGVyIHZpc3VhbGl6emFyZSBpbCBtb2R1bG8gZGkgdmVyaWZpY2EnOwokbGFuZ1snZm9yZ290cGFzc3dvcmRfZW1haWx0ZW1wbGF0ZSddID0gJ01vZGVsbG8gdXNhdG8gcGVyIGxhIHBhc3NvcmQgZGltZW50aWNhdGEnOwokbGFuZ1snZXJyb3JfcmVzZXRhbHJlYWR5c2VudCddID0gJ1ZvaSBzdGVzc2kgbyBxdWFsY3VuIGFsdHJvIGhhIHJpY2hpZXN0byBkaSBhenplcmFyZSBsYSBwYXNzd29yZCBwZXIgcXVlc3RvIGFjY291bnQuIENvbnRyb2xsYXRlIGxhIHZvc3RyYSBlbWFpbCwgYXZyZXRlIHVsdGVyaW9yaSBpc3RydXppb25pIHN1IGNvbWUgcmlzaXN0ZW1hcmUgbGEgdm9zdHJhIHBhc3N3b3JkJzsKJGxhbmdbJ2Vycm9yX2RiZXJyb3InXSA9ICdFcnJvcmUgbmVsIGRhdGFiYXNlJzsKJGxhbmdbJ21lc3NhZ2VfZm9yZ290cHdlbWFpbCddID0gJ0hhaSByaWNldnV0byBxdWVzdG8gbWVzc2FnZ2lvIHBlcmNoJmVncmF2ZTsgcXVhbGN1bm8gaGEgc2VnbmFsYXRvIGNoZSBoYWkgcGVyc28gbGEgdHVhIHBhc3N3b3JkLiBTZSBxdWVzdG8gJmVncmF2ZTsgdmVybywgbGVnZ2kgbGUgaXN0cnV6aW9uaSBzb3R0b3N0YW50aS4gU2UgaW52ZWNlIG5vbiAmZWdyYXZlOyBxdWVzdG8gaWwgY2FzbyBhbGxvcmEgc2VpIHByZWdhdG8gZGkgY2FuY2VsbGFyZSBxdWVzdG8gbWVzc2FnZ2lvIGUgY2kgc2N1c2lhbW8gZGVsbCYjMDM5O2FjY2FkdXRvLic7CiRsYW5nWydwcm9tcHRfY29kZSddID0gJ0NvZGljZSc7CiRsYW5nWydtZXNzYWdlX2NvZGUnXSA9ICdJbCBzZWd1ZW50ZSBjb2RpY2UgJmVncmF2ZTsgc3RhdG8gZ2VuZXJhdG8gaW4gbWFuaWVyYSByYW5kb20gcGVyIHZlcmlmaWNhcmUgbG8gdXNlciBhY2NvdW50LiBRdWFuZG8gZmF0ZSBjbGljayBzdWwgbGluayBzb3R0b3N0YW50ZSB2aSBzYXImYWdyYXZlOyBwcmVzZW50YXRvIHVuIGNhbXBvIHBlciBpbnNlcmlyZSBxdWVzdG8gY29kaWNlLiBOb3JtYWxtZW50ZSBpbCBjYW1wbyAmZWdyYXZlOyBwcmUtY29tcGlsYXRvLCBtYSBzZSBjb3MmaWdyYXZlOyBub24gZm9zc2UgaWwgY29kaWNlICZlZ3JhdmU7Oic7CiRsYW5nWydwcm9tcHRfbGluayddID0gJ1NlZ3VlbmRvIGlsIGxpbmsgc2VndWVudGUgcG90cmV0ZSBpbnNlcmlyZSBpbCBjb2RpY2Ugc290dG9zdGFudGUgZSBhenplcmFyZSBsYSB2b3N0cmEgcGFzc3dvcmQ6JzsKJGxhbmdbJ2xvc3RwYXNzd29yZF9lbWFpbHN1YmplY3QnXSA9ICdQYXNzd29yZCBwZXJzYSc7CiRsYW5nWydlcnJvcl9ub21haWxlcm1vZHVsZSddID0gJ05vbiB0cm92byBpbCBtb2R1bG8gQ01TTWFpbGVyJzsKJGxhbmdbJ2luZm9fZm9yZ290cHdtZXNzYWdlc2VudCddID0gJ1VuYSBlbWFpbCAmZWdyYXZlOyBzdGF0YSBzcGVkaXRhIGEgJXMgY29uIGxlIGlzdHJ1emlvbmkgZGkgY29tZSBhenplcmFyZSBsYSB2b3N0cmEgcGFzc3dvcmQuIEdyYXppZSc7CiRsYW5nWydsb3N0cHdfbWVzc2FnZSddID0gJ1Bhc3N3b3JkIGRpbWVudGljYXRhIG8gcGVyc2EuIERpZ2l0YXRlIHF1aSBpbCB2b3N0cm8gdXNlcm5hbWUgZSBzZSBkIHRyb3ZhdG8gc3BlZGlyZW1vIHVuYSBlbWFpbCBjb24gbGUgaXN0cnV6aW9uaSBzdSBjb21lIGF6emVyYXJsYSc7CiRsYW5nWydmb3Jnb3RwYXNzd29yZF90ZW1wbGF0ZSddID0gJ01vZGVsbG8gcGVyIFBhc3N3b3JkIGRpbWVudGljYXRhJzsKJGxhbmdbJ2Vycm9yX3Byb3Bub3Rmb3VuZCddID0gJ1Byb3ByaWV0JmFncmF2ZTsgJXMgbm9uIHRyb3ZhdGEnOwokbGFuZ1sncHJvcHNmb3VuZCddID0gJ1Byb3ByaWV0JmFncmF2ZTsgdHJvdmF0YSc7CiRsYW5nWydhZGRwcm9wJ10gPSAnQWdnaXVuZ2UgUHJvcHJpZXQmYWdyYXZlOyc7CiRsYW5nWydlcnJvcl9yZXF1aXJlZGZpZWxkJ10gPSAnVW4gY2FtcG8gcmljaGllc3RvICglcykgZXJhIHZ1b3RvJzsKJGxhbmdbJ2luZm9fZW1wdHlwYXNzd29yZGZpZWxkJ10gPSAnSW5zZXJpcmUgdW5hIG51b3ZhIHBhc3N3b3JkIHBlciBtb2RpZmljYXJsYSc7CiRsYW5nWydlcnJvcl9ub3Rsb2dnZWRpbiddID0gJ05vbiBhcHBhcmkgZXNzZXJlIGNvbm5lc3NvJzsKJGxhbmdbJ3VzZXJfc2V0dGluZ3MnXSA9ICdDb25maWd1cmF6aW9uaSc7CiRsYW5nWyd1c2VyX3JlZ2lzdHJhdGlvbiddID0gJ1JlZ2lzdHJhemlvbmUnOwokbGFuZ1snZXJyb3JfYWNjb3VudGV4cGlyZWQnXSA9ICdRdWVzdG8gYWNjb3VudCAmZWdyYXZlOyBzcGlyYXRvJzsKJGxhbmdbJ2Vycm9yX2ltcHJvcGVyZW1haWxmb3JtYXQnXSA9ICdGb3JtYXR0YXppb25lIG5vbiB2YWxpZGEgZGVsbCYjMDM5O2luZGlyaXp6byBkaSBlbWFpbCc7CiRsYW5nWydlcnJvcl9pbnZhbGlkZXhwaXJ5ZGF0ZSddID0gJ0RhdGFkaSBzY2FkZW56YSBub24gdmFsaWRhJzsKJGxhbmdbJ2Vycm9yX3Byb2JsZW1zZXR0aW5ncHJvcGVydHknXSA9ICdFcnJvcmUgbmVsbGEgcHJvcHJpZXQmYWdyYXZlOyAlcyBwZXIgbCYjMDM5O3V0ZW50ZSAkcyc7CiRsYW5nWydlcnJvcl9pbnZhbGlkZ3JvdXBpZCddID0gJ0dydXBwbyBJRCAlcyBub24gdmFsaWRvJzsKJGxhbmdbJ2hpZGRlbmZpZWxkbWFya2VyJ10gPSAnTWFyY2F0b3JlIGRlbCBjYW1wbyBuYXNjb3N0byc7CiRsYW5nWydoaWRkZW5maWVsZGNvbG9yJ10gPSAnQ29sb3JlIGRlbCBjYW1wbyBuYXNjb3N0byc7CiRsYW5nWydoaWRkZW4nXSA9ICdOYXNjb3N0byc7CiRsYW5nWydlcnJvcl9kdXBsaWNhdGVuYW1lJ10gPSAnVW5hIHByb3ByaWV0JmFncmF2ZTsgY29uIHF1ZWwgbm9tZSAmZWdyYXZlOyBnaSZhZ3JhdmU7IGRlZmluaXRhJzsKJGxhbmdbJ2Vycm9yX25vcHJvcGVydGllcyddID0gJ05lc3N1bmEgcHJvcHJpZXQmYWdyYXZlOyBkZWZpbml0YSc7CiRsYW5nWydlcnJvcl9ub3JlbGF0aW9ucyddID0gJ05lc3N1bmEgcHJvcHJpZXQmYWdyYXZlOyBzZWxlemlvbmF0YSBwZXIgcXVlc3RvIGdydXBwbyc7CiRsYW5nWydncm91cHNmb3VuZCddID0gJ0dydXBwaSB0cm92YXRpJzsKJGxhbmdbJ2Vycm9yX29uZWdyb3VwcmVxdWlyZWQnXSA9ICdFJiMwMzk7IHJpY2hpZXN0byBkaSBlc3NlcmUgbWVtYnJvIGluIGFsbWVubyB1biBncnVwcG8nOwokbGFuZ1sncHJvbXB0X3JlcXVpcmVvbmVncm91cCddID0gJ1NpIHJpY2hpZWRlIGRpIGVzc2VyZSBtZW1icm8gaW4gYWxtZW5vIHVuIGdydXBwbyc7CiRsYW5nWydiYWNrJ10gPSAnSW5kaWV0cm8nOwokbGFuZ1snZXJyb3JfbWlzc2luZ19yZXF1aXJlZF9wYXJhbSddID0gJyVzICZlZ3JhdmU7IHVuIGNhbXBvIHJpY2hpZXN0byc7CiRsYW5nWydyZXF1aXJlZGZpZWxkbWFya2VyJ10gPSAnTWFyY2EgaSBjYW1waSByaWNoaWVzdGkgY29uJzsKJGxhbmdbJ3JlcXVpcmVkZmllbGRjb2xvciddID0gJ0V2aWRlbnppYXJlIGkgY2FtcGkgcmljaGllc3RpIGluJzsKJGxhbmdbJ25leHQnXSA9ICdBdmFudGknOwokbGFuZ1snZXJyb3JfZ3JvdXBleGlzdHMnXSA9ICdVbiBncnVwcG8gY29uIHF1ZWwgbm9tZSBnaSZhZ3JhdmU7IGVzaXN0ZSc7CiRsYW5nWydyZXF1aXJlZCddID0gJ0NhbXBvIHJpY2hpZXN0byc7CiRsYW5nWydvcHRpb25hbCddID0gJ09wemlvbmFsZSc7CiRsYW5nWydvZmYnXSA9ICdPZmYnOwokbGFuZ1snbGVuZ3RoJ10gPSAnTHVuZ2hlenphJzsKJGxhbmdbJ2xlbmd0aGNvbW1lbnQnXSA9ICc8YnIgLz4oY2FyYXR0ZXJpIG5lbCBjYW1wbyBkaSB0ZXN0byknOwokbGFuZ1snc2Vsb3B0aW9ucyddID0gJ09wemlvbmkgZGVsbGEgdGVuZGluYSwgc2VwYXJhdGkgZGEgPGJyIC8+JzsKJGxhbmdbJ3llcyddID0gJ1MmaWdyYXZlOyc7CiRsYW5nWydwcm9tcHQnXSA9ICdQcm9tcHQnOwokbGFuZ1sndHlwZSddID0gJ1RpcG8nOwokbGFuZ1sndGV4dCddID0gJ1Rlc3RvJzsKJGxhbmdbJ2NoZWNrYm94J10gPSAnQ2hlY2tib3gnOwokbGFuZ1snZW1haWwnXSA9ICdJbmRpcml6em8gZW1haWwnOwokbGFuZ1sndGV4dGFyZWEnXSA9ICdBcmVhIHRlc3RvJzsKJGxhbmdbJ2Ryb3Bkb3duJ10gPSAnVGVuZGluYSc7CiRsYW5nWydtc2dfY3VycmVudGx5bG9nZ2VkaW5hcyddID0gJ0JlbnZlbnV0byc7CiRsYW5nWydsb2dvdXQnXSA9ICdFc2NpIGRhbGxhIHNlc3Npb25lJzsKJGxhbmdbJ3Byb21wdF9jaGFuZ2VzZXR0aW5ncyddID0gJ01vZGlmaWNhIGxlIG1pZSBjb25maWd1cmF6aW9uaSc7CiRsYW5nWydlcnJvcl9sb2dpbmZhaWxlZCddID0gJ0xvZ2luIGZhbGxpdG8sIGRhdGkgZXJyYXRpPyc7CiRsYW5nWydsb2dpbiddID0gJ0FjY2VkaSc7CiRsYW5nWydwcm9tcHRfdXNlcm5hbWUnXSA9ICdVc2VybmFtZSc7CiRsYW5nWydwcm9tcHRfcGFzc3dvcmQnXSA9ICdQYXNzd29yZCc7CiRsYW5nWydyZWdpc3RlciddID0gJ1JlZ2lzdHJhdGknOwokbGFuZ1snZm9yZ290cHcnXSA9ICdEaW1lbnRpY2F0YSBsYSBwYXNzd29yZD8nOwokbGFuZ1snZGVmYXVsdHMnXSA9ICdQcmVkZWZpbml0byc7CiRsYW5nWyd0ZW1wbGF0ZSddID0gJ01vZGVsbG8nOwokbGFuZ1snZXJyb3JfdXNlcm5vdGZvdW5kJ10gPSAnVXNlciBJRCBub24gdHJvdmF0byc7CiRsYW5nWydlcnJvcl91c2VybmFtZXRha2VuJ10gPSAnUXVlc3RvIHVzZXJuYW1lICglcykgJmVncmF2ZTsgZ2kmYWdyYXZlOyBpbiB1c28nOwokbGFuZ1sncHJvbXB0X3NtdHB2YWxpZGF0ZSddID0gJ1VzbyBpbCBtZXRvZG8gU01UUCBwZXIgdmFsaWRhcmUgaW5kaXJpenppIGVtYWlsPyc7CiRsYW5nWydwcm9tcHRfbWlucHdsZW4nXSA9ICdMdW5naGV6emEgbWluaW1hIGRlbGxhIHBhc3N3b3JkJzsKJGxhbmdbJ3Byb21wdF9tYXhwd2xlbiddID0gJ0x1bmdoZXp6YSBtYXNzaW1hIGRlbGxhIHBhc3N3b3JkJzsKJGxhbmdbJ3Byb21wdF9taW51bmxlbiddID0gJ0x1bmdoZXp6YSBtaW5pbWEgZGVsbG8gdXNlcm5hbWUnOwokbGFuZ1sncHJvbXB0X21heHVubGVuJ10gPSAnTHVuZ2hlenphIG1hc3NpbWEgZGVsbG8gdXNlcm5hbWUnOwokbGFuZ1sncHJvbXB0X3Nlc3Npb250aW1lb3V0J10gPSAnU2Vzc2lvbiBUaW1lb3V0IChtaW51dGVzKSc7CiRsYW5nWydwcm9tcHRfYWxsb3dlbWFpbHJlZyddID0gJ1Blcm1ldHRpIHJlZ2lzdHJhemlvbmUgRW1haWwnOwokbGFuZ1sncHJvbXB0X2RmbHRncm91cCddID0gJ0dydXBwbyBwcmVkZWZpbml0byBwZXIgbnVvdmkgdXRlbnRpJzsKJGxhbmdbJ2NoYW5nZXNldHRpbmdzX3RlbXBsYXRlJ10gPSAnQ2FtYmlhIGlsIE1vZGVsbG8gZGVsbGUgY29uZmlndXJhemlvbmknOwokbGFuZ1snZXJyb3JfcGFzc3dvcmRtaXNtYXRjaCddID0gJ0xlIHBhc3N3b3JkIG5vbiBjb2luY2lkb25vJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWR1c2VybmFtZSddID0gJ1VzZXJuYW1lIG5vbiB2YWxpZG8nOwokbGFuZ1snZXJyb3JfaW52YWxpZHBhc3N3b3JkJ10gPSAnUGFzc3dvcmQgbm9uIHZhbGlkYSc7CiRsYW5nWydlZGl0dXNlciddID0gJ01vZGlmaWNhIFV0ZW50ZSc7CiRsYW5nWyd2YWxpZCddID0gJ1ZhbGlkbyc7CiRsYW5nWyd1c2VybmFtZSddID0gJ1VzZXJuYW1lJzsKJGxhbmdbJ3N0YXR1cyddID0gJ1N0YXRvJzsKJGxhbmdbJ2Vycm9yX21lbWJlcmdyb3VwcyddID0gJ1F1ZXN0byB1dGVudGUgbm9uICZlZ3JhdmU7IG1lbWJybyBkaSBuZXNzdW4gZ3J1cHBvJzsKJGxhbmdbJ2Vycm9yX3Byb3BlcnRpZXMnXSA9ICdOZXNzdW5hIFByb3ByaWV0JmFncmF2ZTsnOwokbGFuZ1sndmFsdWUnXSA9ICdWYWxvcmUnOwokbGFuZ1snZ3JvdXBzJ10gPSAnR3J1cHBpJzsKJGxhbmdbJ3Byb3BlcnRpZXMnXSA9ICdQcm9wcmlldCZhZ3JhdmU7JzsKJGxhbmdbJ3Byb3BuYW1lJ10gPSAnTm9tZSBkZWxsYSBwcm9wcmlldCZhZ3JhdmU7JzsKJGxhbmdbJ3Byb3B2YWx1ZSddID0gJ1ZhbG9yZSBkZWxsYSBwcm9wcmlldCZhZ3JhdmU7JzsKJGxhbmdbJ2FkZCddID0gJ0FnZ2l1bmdlcmUnOwokbGFuZ1snZWRpdCddID0gJ01vZGlmaWNhJzsKJGxhbmdbJ2V4cGlyZXMnXSA9ICdTY2FkZW56ZSc7CiRsYW5nWydzcGVjaWZ5X2RhdGUnXSA9ICdTcGVjaWZpY2FyZSB1bmEgZGF0YSc7CiRsYW5nWycxMmhycyddID0gJzEyIE9yZSc7CiRsYW5nWycyNGhycyddID0gJzI0IE9yZSc7CiRsYW5nWyc0OGhycyddID0gJzQ4IE9yZSc7CiRsYW5nWycxd2VlayddID0gJzEgU2V0dGltYW5hJzsKJGxhbmdbJzJ3ZWVrcyddID0gJzIgU2V0dGltYW5lJzsKJGxhbmdbJzFtb250aCddID0gJzEgTWVzZSc7CiRsYW5nWyczbW9udGhzJ10gPSAnMyBNZXNpJzsKJGxhbmdbJzZtb250aHMnXSA9ICc2IE1lc2knOwokbGFuZ1snMXllYXInXSA9ICcxIEFubm8nOwokbGFuZ1snbmV2ZXInXSA9ICdNYWknOwokbGFuZ1sncG9zdGluc3RhbGxtZXNzYWdlJ10gPSAnTW9kdWxvIGluc3RhbGxhdG8uPGJyIC8+RXNzZXJlIHNpY3VyaSBkaSBjb25maWd1cmFyZSAmcXVvdDtNb2RpZmljYSBGcm9udEVuZFVzZXIgcHJvcHJpZXQmYWdyYXZlOyBwZXJtZXNzaS4mcXVvdDsnOwokbGFuZ1sncGFzc3dvcmQnXSA9ICdQYXNzd29yZCc7CiRsYW5nWydyZXBlYXRwYXNzd29yZCddID0gJ0RpIG51b3ZvJzsKJGxhbmdbJ2Vycm9yX2dyb3VwbmFtZV9leGlzdHMnXSA9ICdVbiBncnVwcG8gY29uIHF1ZWwgbm9tZSBnaSZhZ3JhdmU7IGVzaXN0ZSc7CiRsYW5nWydlZGl0Z3JvdXAnXSA9ICdNb2RpZmljYSBHcnVwcG8nOwokbGFuZ1snc3VibWl0J10gPSAnSW52aWEnOwokbGFuZ1snY2FuY2VsJ10gPSAnQ2FuY2VsbGEnOwokbGFuZ1snZGVsZXRlJ10gPSAnQ2FuY2VsbGEnOwokbGFuZ1snY29uZmlybV9lZGl0Z3JvdXAnXSA9ICdTZWkgc2ljdXJvIGNoZSBzaWEgbGEgY29uZmlndXJhemlvbmUgZ2l1c3RhIHBlciBxdWVzdG8gZ3J1cHBvP1xuQ2FtYmlhbmRvIGEgb2ZmIHVuYSBwcm9wcmlldCZhZ3JhdmU7IG5vbiBzaSBjYW5jZWxsYW5vIGkgZGF0aSBuZWxsYSB0YWJlbGxhIHByb3ByaWV0JmFncmF2ZTsgcGVyIHF1ZWwgZ3J1cHBvL3V0ZW50ZS4gU2FyJmFncmF2ZTsgc29sbyBub24gdXRpbGl6emFiaWxlLic7CiRsYW5nWydhcmV5b3VzdXJlX2RlbGV0ZWdyb3VwJ10gPSAnU2VpIHNpY3VybyBkaSB2b2xlciBjYW5jZWxsYXJlIHF1ZXN0byBncnVwcG8/JzsKJGxhbmdbJ2NvbmZpcm1fZGVsZXRlX3Byb3AnXSA9ICdTZWkgc2ljdXJvIGRpIHZvbGVyIGNvbXBsZXRhbWVudGUgY2FuY2VsbGFyZSBxdWVzdGEgcHJvcHJpZXQmYWdyYXZlOz9cbkZhY2VuZG8gcXVlc3RvIHNhcmFubm8gY2FuY2VsbGF0aSB0dXR0aSBpIGRhdGkgZGVnbGkgdXRlbnRpIHBlciBxdWVzdGEgcHJvcHJpZXQmYWdyYXZlOy4nOwokbGFuZ1snZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJ10gPSAnUGFyYW1ldHJpIGluc3VmZmljaWVudGknOwokbGFuZ1snaWQnXSA9ICdJRCc7CiRsYW5nWyduYW1lJ10gPSAnTm9tZSc7CiRsYW5nWydlcnJvcl9jYW50YWRkZ29ydXAnXSA9ICdQcm9ibGVtYSBuZWxsJiMwMzk7YWdnaXVuZ2VyZSBpbCBncnVwcG8nOwokbGFuZ1snZXJyb3JfaW52YWxpZHBhcmFtcyddID0gJ1BhcmFtZXRyaSBub24gdmFsaWRpJzsKJGxhbmdbJ2FwcGx5ZmlsdGVyJ10gPSAnQXBwbGljYSc7CiRsYW5nWydmaWx0ZXInXSA9ICdGaWx0cm8nOwokbGFuZ1sndXNlcmZpbHRlciddID0gJ0VzcHJlc3Npb25pIHJlZ29sYXJpIHN1IFVzZXJuYW1lJzsKJGxhbmdbJ2Rlc2NyaXB0aW9uJ10gPSAnRGVzY3JpemlvbmUnOwokbGFuZ1snZ3JvdXBuYW1lJ10gPSAnTm9tZSBncnVwcG8nOwokbGFuZ1snYWNjZXNzZGVuaWVkJ10gPSAnQWNjZXNzbyBuZWdhdG8nOwokbGFuZ1snZXJyb3InXSA9ICdFcnJvcmUnOwokbGFuZ1snYWRkZ3JvdXAnXSA9ICdBZ2dpdW5nZXJlIGdydXBwbyc7CiRsYW5nWydhZGR1c2VyJ10gPSAnQWdnaXVuZ2VyZSB1dGVudGUnOwokbGFuZ1sndXNlcnNmb3VuZCddID0gJ1V0ZW50aSB0cm92YXRpIGNoZSBzb2RkaXNmYW5vIGlsIGNyaXRlcmlvJzsKJGxhbmdbJ2dyb3VwJ10gPSAnR3J1cHBvJzsKJGxhbmdbJ3NlbGVjdGdyb3VwJ10gPSAnR3J1cHBvIHNlbGV6aW9uYXRvJzsKJGxhbmdbJ3JlZ2lzdHJhdGlvbl90ZW1wbGF0ZSddID0gJ01vZGVsbG8gcmVnaXN0cmF6aW9uZSc7CiRsYW5nWydsb2dvdXRfdGVtcGxhdGUnXSA9ICdNb2RlbGxvIGRpIGxvZ291dCc7CiRsYW5nWydsb2dpbl90ZW1wbGF0ZSddID0gJ01vZGVsbG8gZGkgbG9naW4nOwokbGFuZ1sncHJlZmVyZW5jZXMnXSA9ICdQcmVmZXJlbnplJzsKJGxhbmdbJ3VzZXJzJ10gPSAnVXRlbnRpJzsKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0dlc3Rpb25lIHV0ZW50aSBkaSBGcm9udGVuZCc7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ0dlc3Rpc2NpIHV0ZW50aSBkaSBGcm9udGVuZCc7CiRsYW5nWydkZWZhdWx0ZnJvbnRwYWdlJ10gPSAnRnJvbnQgcGFnZSBwcmVkZWZpbml0YSc7CiRsYW5nWydsYXN0YWNjZXNzZWRwYWdlJ10gPSAnVWx0aW1hIHBhZ2luYSBhY2NlZHV0YSc7CiRsYW5nWydvdGhlcnBhZ2UnXSA9ICdBbHRyYSBwYWdpbmE6ICc7CiRsYW5nWydjaGFuZ2Vsb2cnXSA9ICc8dWw+DQo8bGk+MC4wLjEgLSBPY3RvYmVyLCAyMDA1IC0gSW5pdGlhbCBOUlBUIChOb3QgUmVhZHkgZm9yIFByaW1lIFRpbWUpIHJlbGVhc2U8L2xpPg0KPGxpPjAuMS4wIC0gT2N0b2JlciwgMjAwNSAtIEluaXRpYWwgcmVsZWFzZTwvbGk+DQo8bGk+MC4xLjEgLSBPY3RvYmVyLCAyMDA1IC0gRml4ZWQgaXNzdWVzIHdpdGggcHJvcGVydGllczwvbGk+DQo8bGk+MC4xLjIgLSBPY3RvYmVyLCAyMDA1IC0gQWRkZWQgZm9yZ290dGVuIHBhc3N3b3JkIGZ1bmN0aW9uYWxpdHk8L2xpPg0KPGxpPjxwPjAuMS4zIC0gTm92ZW1iZXIsIDIwMDU8L3A+DQogICAgPHA+QWRkZWQgdGhlIGFiaWxpdHkgdG8gc3BlY2lmeSBhIHJlZGlyZWN0IHBhZ2Ugb24gbG9naW4sIGxvZ291dCwgZm9yZ290IHBhc3N3b3JkLCBhbmQgY2hhbmdlIHNldHRpbmdzLCBhbmQgYWRkZWQgdGhlIHJldHVybnRvIGFuZCBmb3JtIHBhcmFtZXRlcnMgdG8gdGhlIHVzZXIgc2lkZSBvZiB0aGluZ3MsIGFsc28gZGlkIGEgY291cGxlIGxmIGxpdHRsZSBjbGVhbnVwcy4gIFRoaXMgdmVyc2lvbiByZXF1aXJlcyB2MC4xMSBhbmQgYWJvdmUgZm9yIGNlcnRhaW4uPC9wPjwvbGk+DQo8bGk+MC4xLjQgLSBOb3ZlbWJlciwgMjAwNSAtIFZlcnkgbWlub3IgY2hhbmdlIHdpdGggcmVzcGVjdCB0byBhIGZvcmdvdHRlbiBhbmQgbm8gbG9uZ2VyIG5lZWRlZCBmdW5jdGlvbiBjYWxsPC9saT4NCjxsaT48cD4wLjEuNSAtIE5vdmVtYmVyLCAyMDA1PC9wPg0KICAgIDxwPkFub3RoZXIgdmVyeSBtaW5vciBjaGFuZ2UsIGFkZGVkIHNvbWUgdGV4dCB0byB0aGUgUG9zdEluc3RhbGwgbWVzc2FnZS48L3A+PC9saT4NCjxsaT48cD4wLjEuNiAtIEphbnVhcnksIDIwMDY8cD4NCiAgICA8cD5DaGFuZ2VzIHRvIHRoZSBwZXJtaXNzaW9uIG1vZGVsLCBhbmQgbWlub3IgYnVnIGZpeGVzIHRvIHRoZSBwcmVmZXJlbmNlcy4gIEFsc28gc29tZSBwaHA1IGZpeGVzIGJ1dCBJIGFtIHN1cmUgdGhhdCB0aGVyZSBhcmUgbW9yZSBvdXQgdGhlcmUuPC9wPjwvbGk+DQo8bGk+PHA+MC4xLjcgLSBKYW51YXJ5LCAyMDA2PHA+DQogICAgPHA+TWFueSB0aGFua3MgdG8gPGI+a2F0b248L2I+IGZvciBhZGRpbmcgdGhlIHRleHRhcmVhIGFuZCBkcm9wZG93biBwcm9wZXJ0eSB0eXBlcy48L3A+DQogICAgPHA+Rml4ZXMgdG8gdGhlIHByb3BlcnR5IGFkZGluZyB0byBmaXggcHJvYmxlbXMgd2l0aCBzcGFjZXMgaW4gcHJvcGVydHkgbmFtZXMgKHdlIG5vIGxvbmdlciBsZXQgdGhhdCBoYXBwZW4pLjwvcD4NCjwvbGk+DQo8bGk+PHA+MS4wLjAgLSBGZWJydWFyeSwgMjAwNjxwPg0KICAgIDxwPkFkZGVkIGZpbHRlcmluZyBhbmQgcm93IGxpbWl0aW5nIHRvIHRoZSBhZG1pbiBwYW5lbC4gVGhpcyB3aWxsIGhhdmUgYmlnIGJlbmVmaXRzIHRvIHRob3NlIHRoYXQgYXJlIHVzaW5nIHRoaXMgbW9kdWxlIGZvciBoaWdoIHRyYWZpYywgYW5kIGhpZ2ggdXNlciBzaXRlcy48L3A+DQogICAgPHA+QWRkZWQgc29ydGluZyB0byB0aGUgYWRtaW4gcGFuZWw8L3A+DQogICAgPHA+QWRkZWQgbWF4IGxlbmd0aCBhYmlsaXR5IHRvIHRleHQgYW5kIGVtYWlsIGZpZWxkczwvcD4NCiAgICA8cD5GaXhlZCBhIHNtYWxsIHByb2JsZW0gd2l0aCB0aGUgZGVmYXVsdCBncm91cCBub3QgYmVpbmcgY2hlY2tlZCB3aGVuIGFkZGluZyBhIHVzZXI8L3A+DQogICAgPHA+U2F2ZSBmaWx0ZXIgc2V0dGluZ3MgaW4gcHJlZmVyZW5jZXMsIGFuZCB0aGUgYWN0aXZlIHRhYiB0b28uPC9wPg0KICAgIDxwPkRlbGV0ZSB1c2VyIHByb3BlcnRpZXMgd2hlbiBhIHByb3BlcnR5IGlzIGRlbGV0ZWQgPGVtPk5vdGU8L2VtPiwgbm90IHdoZW4gaXQgaXMgZGlzYWJsZWQgaW4gdGhlIGVkaXQgZ3JvdXAgZGlhbG9nPC9wPg0KICAgIDxwPkFkZCBjb25maXJtYXRpb24gbWVzc2FnZSBpbiBlZGl0IGdyb3Vwcy48L3A+DQogICAgPHA+QWRkZWQgYSBjb3VwbGUgbW9yZSBjb25maXJtYXRpb24gbWVzc2FnZXMuPC9wPg0KICAgIDxwPkFkZGVkIENTViBFeHBvcnQgb3B0aW9uPC9wPg0KICAgIDxwPlRvZG8gLSBBZGQgcHJlZmVyZW5jZXMgZm9yIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBmaWVsZGxlbmd0aDwvcD4NCjwvbGk+DQo8bGk+PHA+MS4wLjEgLSBGZWJydWFyeSwgMjAwNjxwPg0KICAgIDxwPkFkZGVkIHRoZSBhYmlsaXR5IHRvIGNoZWNrIGZvciBkdXBsaWNhdGUgZW1haWwgYWRkcmVzc2VzPC9wPg0KICAgIDxwPkZpeCBwcm9ibGVtIHdoZXJlIGV4cGlyeSBkYXRlIHdhcyBiZWluZyBtb2RpZmllZCB3aGVuIGFkbWluIG1vZGlmaWVkIHVzZXIgc2V0dGluZ3M8L3A+DQogICAgPHA+QWRkIGEgY29uZmlybWF0aW9uIG1lc3NhZ2UgdG8gdGhlIHByZWZlcmVuY2VzIHN1Ym1pdCBidXR0b248L3A+DQogICAgPHA+Rml4ZWQgYSBtaW5vciBidWcgd2hlbiBjb3V0aW5nIHRoZSBudW1iZXIgb2YgdXNlcnMgaW4gYSBncm91cDwvcD4NCiAgICA8cD5GaXhlcyB0byB0aGUgc2l6ZSBvZiB1c2VybmFtZSBhbmQgcGFzc3dvcmQgZmllbGRzLCBhbmQgbWF4bGVuZ3RoPC9wPg0KICAgIDxwPkFkZGVkIGFkdmFuY2VkIGZpbHRlcmluZyBvbiBwcm9wZXJ0aWVzPC9wPg0KPC9saT4NCjxsaT48cD4xLjAuMiAtIE1hcmNoLCAyMDA2PHA+DQogICAgPHA+TW9yZSBmaWVsZCBsZW5ndGggZml4ZXM8L3A+DQo8L2xpPg0KPGxpPjxwPjEuMC4zIC0gTWFyY2gsIDIwMDY8cD4NCiAgICA8cD5FeHBvcnQgdG8gc21hcnR5IGFsbCBvZiB0aGUgdXNlciBwcm9wZXJ0aWVzIHdoZW4gdGhleSBhcmUgbG9nZ2VkIGluPC9wPg0KPC9saT4NCjxsaT48cD4xLjAuNCAtIE1heSwgMjAwNjxwPg0KICAgIDxwPkZpeGVzIHRvIHRoZSBleHBvcnQgY29kZTwvcD4NCiAgICA8cD5Db2RlIGNsZWFudXAgKGFscGhhYmV0aXplIGZ1bmN0aW9ucyk8L3A+DQogICAgPHA+TWlub3IgZml4ZXMgYW5kIGVuaGFuY2VtZW50cyAocmVjb21tZW5kZWQgYnkgbmlsczczKSBmb3IgZGVhbGluZyB3aXRoIHRoZSBjaGFuZ2UgcGFzc3dvcmQgc3R1ZmYuPC9wPg0KICAgIDxwPlJlbW92ZWQgdGhlIHJlcXVpcmVtZW50IGZvciBDTVMgMC4xMiwgYW5kIHB1dCBpdCBiYWNrIHRvIDAuMTEuMjwvcD4NCiAgICA8cD5BZGRlZCB0aGUgXCYjMDM5O3NpbGVudFwmIzAzOTsgZm9ybTwvcD4NCiAgICA8cD5DbGVhbmVkIHVwIGRhdGFiYXNlIGFjY2VzcyBzdHVmZiBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyAoaG9wZWZ1bGx5KTwvcD4NCiAgICA8cD5BZGRlZCBjb3B5cmlnaHQgaW5mbzwvcD4NCiAgICA8cD5BZGRlZCBtYWNyb3MgZm9yIHJlZGlyZWN0byB0byBhIHVzZXIgc3BlY2lmaWMgcGFnZSBvbiBsb2dpbiBvciBsb2dvdXQ8L3A+DQogICAgPHA+VHdlYWtzIHRvIHRoZSBhZG1pbiBwcmVmZXJlbmNlcyB0YWI8L3A+DQo8L2xpPg0KPGxpPjxwPjEuMC41IC0gTWF5LCAyMDA2PHA+DQogICAgPHA+Rml4ZWQgYSBwcm9ibGVtIHdpdGggZXhwaXJ5IGRhdGVzPC9wPg0KICAgIDxwPlN0YXJ0IHNwbGl0dGluZyB0aGUgY29kZSB1cCBpbnRvIHNldmVyYWwgZmlsZXM8L3A+DQo8L2xpPg0KPC91bD4nOwokbGFuZ1snaGVscCddID0gJzxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPg0KPHA+VGhpcyBtb2R1bGUgYWxsb3dzIG1hbmFnZW1lbnQgYW5kIGFkbWluaXN0cmF0aW9uIG9mIGZyb250IGVuZCB1c2VycyA8aT4odXNlcnMgd2hvIGhhdmUgbm8gYWRtaW4gYWNjZXNzcyk8L2k+LiAgSXQgYWxsb3dzIGNyZWF0aW9uIG9mIHVzZXIgZ3JvdXBzLCBhbmQgdXNlciBhY2NvdW50cyBhbmQgYWxsb3dzIHVzZXJzIHRvIGxvZ2luIGFuZCBsb2dvdXQuICBpdCBjYW4gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBDdXN0b21Db250ZW50IG1vZHVsZSB0byBkaXNwbGF5IGRpZmZlcmVudCBjb250ZW50IHRvIGRpZmZlcmVudCB1c2VycyBvbmNlIHRoZXkgaGF2ZSBsb2dnZWQgaW48L3A+DQo8aDM+RmVhdHVyZXM8L2gzPg0KPHVsPg0KPGxpPjxwPlVzZXIgYWNjb3VudCBleHBpcmF0aW9uLiAgWW91IGNhbiBjcmVhdGUgdGVtcG9yYXJ5IHVzZXJzPC9wPjwvbGk+DQo8bGk+PHA+R3JvdXAgUHJvcGVydGllcy4gIFlvdSBjYW4gYXNrIGZvciBkaWZmZXJlbnQgaW5mb3JtYXRpb24gZnJvbSBtZW1iZXJzIG9mIGRpZmZlcmVudCBncm91cHM8L3A+PC9saT4NCjxsaT48cD5DYXBhYmxlIG9mIGhhbmRsaW5nIGh1bmRyZWRzIG9mIHVzZXJzPC9wPjwvbGk+DQo8bGk+PHA+SGFzIGFuIGV4dGVuc2l2ZSBBUEkgZm9yIGFkZGluZyBmdW5jdGlvbmFsaXR5PC9wPjwvbGk+DQo8L3VsPg0KPGgzPkhvdyBkbyBJIHVzZSBpdDwvaDM+DQo8dWw+DQo8bGk+PHA+QWZ0ZXIgaW5zdGFsbGF0aW9uIHlvdSBjYW4gYWNjZXNzIGFkbWluIHBhbmVsIHRvIHRoZSBGcm9udEVuZFVzZXJzIG1vZHVsZSB1bmRlciB0aGUgJmFtcDtxdW90O1VzZXJzICZhbXA7IGdHcm91cHMmYW1wO3F1b3Q7IG1lbnUuPC9wPjwvbGk+DQo8bGk+DQo8cD5TZWNvbmRseSwgeW91IHNob3VsZCBkZWZpbmUgcHJvcGVydGllcy4gIFByb3BlcnRpZXMgYXJlIGVzc2VudGlhbGx5IGZpZWxkIGRlZmluaXRpb25zLCBoZXJlIHlvdSBzcGVjaWZ5IHRoZSB0eXBlIG9mIGluZm9ybWF0aW9uIHlvdSB3YW50IHRvIGdhdGhlciwgYW5kIGxpbWl0cy4gaS5lOiAgTmFtZSwgQWdlLCBDaXR5LCBTdGF0ZSwgQ291bnRyeSwgRW1haWwgYWRkcmVzcywgZXRjLjwvcD4NCjxwPjxiPk5vdGU6PC9iPiBZb3UgZG8gbm90IG5lZWQgdG8gZGVmaW5lIHByb3BlcnRpZXMgZm9yIHVzZXJuYW1lIGFuZCBwYXNzd29yZCwgdGhlc2Ugd2lsbCBiZSBwcm92aWRlZCBmb3IgeW91PC9iPg0KPC9saT4NCjxsaT48cD5OZXh0IHlvdSBzaG91bGQgY3JlYXRlIG9uZSBvciBtb3JlIHVzZXIgZ3JvdXBzLiAgV2hlbiB5b3UgY3JlYXRlIGEgZ3JvdXAsIHlvdSBhcmUgYXNrZWQgZm9yIGEgZ3JvdXAgbmFtZSwgYSBkZXNjcmlwdGlvbiBhbmQgdG8gYXNzb2NpYXRlIHByb3BlcnRpZXMgd2l0aCB0aGF0IGdyb3VwLCBzcGVjaWZ5IHRoZSBwcm9wZXJ0aWVzIHNvcnQgb3JkZXIsIGFuZCB3ZXRoZXIgaXQgaXMgYW4gb3B0aW9uYWwsIHJlcXVpcmVkLCBvciBoaWRkZW4gZmllbGQgPGk+KG9mZiBpcyBhbHNvIHZhbGlkKTwvaT48L3A+PC9saT4NCjxsaT48cD48Yj5Ob3RlOjwvYj4gQmVmb3JlIHByb2NlZWRpbmcsIHlvdSBzaG91bGQgZW5zdXJlIHRoYXQgdGhlIHByZWZlcmVuY2VzIGFyZSBzZXQgY29ycmVjdGx5LjwvcD48L2xpPg0KPGxpPjxwPlRoaXJkbHkgeW91IHNob3VsZCBjcmVhdGUgc29tZSB1c2Vycy4gIEFkZGluZyB1c2VycyBpcyBhIHR3byBzdGVwIHByb2Nlc3MuICBXaGVuIGNyZWF0aW5nIGEgdXNlciB5b3UgYXJlIGFza2VkIGZvciB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLCBhbmQgYW4gZXhwaXJ5IGRhdGUgZm9yIHRoYXQgdXNlci4gIFlvdSB0aGVuIG11c3Qgc2VsZWN0IHRoZSBncm91cHMgdGhhdCB0aGF0IHVzZXIgaXMgYSBtZW1iZXIgb2YsIGFuZCBjbGljayAmIzAzOTtOZXh0JiMwMzk7PC9wPg0KPHA+PGVtPk5vdGU6IDwvZW0+VGhpcyBpcyBhIGxhYm91ciBpbnRlbnNpdmUgYW5kIGJvcmluZyBwcm9jZXNzLCBpdCBpcyBlYXNpZXIgdG8gbGV0IHVzZXJzIHJlZ2lzdGVyIHRoZW1zZWx2ZXMsIGFuZCB0aGVuIHlvdSBjYW4gZWRpdCB0aGVpciBncm91cCBpbmZvcm1hdGlvbi4gIGJ1dCBmb3IgdGVzdGluZyBwdXJwb3NlcywgcGxlYXNlIGNyZWF0ZSBhdCBsZXN0IG9uZSB1c2VyPC9wPjwvbGk+DQo8bGk+PHA+TGFzdGx5LCBhZnRlciB0aGUgc3lzdGVtIGhhcyBkZXRlcm1pbmVkIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gZmllbGRzIHRvIGJlIHByZXNlbnRlZCBmb3IgdGhhdCB1c2VyLCB5b3UgYXJlIHByZXNlbnRlZCB3aXRoIGEgZm9ybSBhc2tpbmcgZm9yIGFsbCBvZiB0aGUgcmVxdWlyZWQgdXNlciBpbmZvcm1hdGlvbi4gIENvbXBsZXRlIHRoaXMgZm9ybSB0byBjb21wbGV0ZSB0aGUgdXNlciBhZGRpdGlvbjwvcD48L2xpPg0KPGxpPjxwPllvdSBhcmUgbm93IHJlYWR5IHRvIGFkZCB0aGUgZnJvbnQgZW5kIGZ1bmN0aW9uYWxpdHkgdG8geW91ciBzaXRlLiAgVGhpcyBpcyBhcyBzaW1wbGUgYXMgYWRkaW5nIHRoZSB7Y21zX21vZHVsZSBtb2R1bGU9RnJvbnRFbmRVc2Vyc30gdGFnIHRvIHlvdXIgcGFnZSBvciB0ZW1wbGF0ZTwvcD48L2xpPg0KPC91bD4NCjxoMz5TdXBwb3J0PC9oMz4NCjxwPlRoaXMgbW9kdWxlIGRvZXMgbm90IGluY2x1ZGUgY29tbWVyY2lhbCBzdXBwb3J0LiBIb3dldmVyLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0OjwvcD4NCjx1bD4NCjxsaT5Gb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlLCBGQVFzLCBvciB0byBmaWxlIGEgQnVnIFJlcG9ydCBvciBidXkgY29tbWVyY2lhbCBzdXBwb3J0LCBwbGVhc2UgdmlzaXQgY2FsZ3V5XCYjMDM5O3MNCm1vZHVsZSBob21lcGFnZSBhdCA8YSBocmVmPSZhbXA7cXVvdDtodHRwOi8vdGVjaGNvbS5keW5kbnMub3JnJmFtcDtxdW90Oz50ZWNoY29tLmR5bmRucy5vcmc8L2E+LjwvbGk+DQo8bGk+QWRkaXRpb25hbCBkaXNjdXNzaW9uIG9mIHRoaXMgbW9kdWxlIG1heSBhbHNvIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSZhbXA7cXVvdDtodHRwOi8vZm9ydW0uY21zbWFkZXNpbXBsZS5vcmcmYW1wO3F1b3Q7PkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LjwvbGk+DQo8bGk+VGhlIGF1dGhvciwgY2FsZ3V5MTAwMCwgY2FuIG9mdGVuIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSZhbXA7cXVvdDtpcmM6Ly9pcmMuZnJlZW5vZGUubmV0LyNjbXMmYW1wO3F1b3Q7PkNNUyBJUkMgQ2hhbm5lbDwvYT4uPC9saT4NCjxsaT5MYXN0bHksIHlvdSBtYXkgaGF2ZSBzb21lIHN1Y2Nlc3MgZW1haWxpbmcgdGhlIGF1dGhvciBkaXJlY3RseS48L2xpPiAgDQo8L3VsPg0KPGgzPlBhcmFtZXRlcnM8L2gzPg0KPHVsPg0KPGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gZm9ybT0mcXVvdDtuYW1lJnF1b3Q7PC9saT4NCjxwPkZvcm1zOg0KPHVsPg0KIDxsaT48ZW0+bG9naW48L2VtPiAtIERpc3BsYXkgdGhlIGxvZ2luIGZvcm08L2xpPg0KIDxsaT48ZW0+bG9nb3V0PC9lbT4gLSBEaXNwbGF5IHRoZSBsb2dvdXQgZm9ybTwvbGk+DQogPGxpPjxlbT5jaGFuZ2VzZXR0aW5nczwvZW0+IC0gRGlzcGxheSB0aGUgY2hhbmdlIHNldHRpbmdzIGZvcm08L2xpPg0KIDxsaT48ZW0+Zm9yZ290cHc8L2VtPiAtIERpc3BsYXkgdGhlIGZvcmdvdCBwYXNzd29yZCBmb3JtPC9saT4NCjxsaT48ZW0+c2lsZW50PC9lbT4gPSBEaXNwbGF5IG5vdGhpbmcsIGJ1dCBleHBvcnQgcHJvcGVydGllcyBhbmQgb3RoZXIgc21hcnR5IHZhcmlhYmxlcyBmb3IgdGhlIGN1cnJlbnRseSBsb2dnZWQgaW4gdXNlcjwvbGk+DQo8L3VsPg0KPC9wPg0KPGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gcmV0dXJudG89JnF1b3Q7cGFnZSZxdW90OzwvbGk+DQo8cD5Vc2VkIHdpdGggdGhlIGxvZ2luLCBsb2dvdXQsIGFuZCBjaGFuZ2VzZXR0aW5ncyBmb3JtcywgdGhpcyBwYXJhbWV0ZXIgY29udGFpbnMgdGhlIHBhZ2UgaWQgb3IgYWxpYXMgb2YgYSBwYWdlIHRvIHJlZGlyZWN0IHRvLCB3aGVuIHRoZSBmb3JtIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQ8L3A+DQo8L3VsPg0KPHA+QXMgcGVyIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYXMtaXMuIFBsZWFzZSByZWFkIHRoZSB0ZXh0DQpvZiB0aGUgbGljZW5zZSBmb3IgdGhlIGZ1bGwgZGlzY2xhaW1lci48L3A+DQo8aDM+UmVxdWlyZW1lbnRzPC9oMz4NCjxwPkluIG9yZGVyIHRvIGltcGxlbWVudCB0aGUgZm9yZ290dGVuIHBhc3N3b3JkIGZ1bmN0aW9uYWxpdHksIHRoaXMgbW9kdWxlIHJlcXVpcmVzIHRoZSBDTVNNYWlsZXIgbW9kdWxlIHRvIGJlIHByZXZpb3VzbHkgaW5zdGFsbGVkPC9wPg0KPGgzPkNvcHlyaWdodCBhbmQgTGljZW5zZTwvaDM+DQo8cD5Db3B5cmlnaHQgJmFtcDtjb3B5OyAyMDA1LCBSb2JlcnQgQ2FtcGJlbCA8YSBocmVmPSZhbXA7cXVvdDttYWlsdG86Y2FsZ3V5MTAwMEBob3RtYWlsLmNvbSZhbXA7cXVvdDs+JmFtcDtsdDtjYWxndXkxMDAwQGhvdG1haWwuY29tJmFtcDtndDs8L2E+LiBBbGwgUmlnaHRzIEFyZSBSZXNlcnZlZC48L3A+DQo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0mYW1wO3F1b3Q7aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMJmFtcDtxdW90Oz5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPic7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nl_NL.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2luZm9fc3RhciddID0gJyogRGUgdm9sZ2VuZGUgbWFjcm9zIGt1bm5lbiBpbiBkZXplIHZlbGRlbiB3b3JkZW4gZ2VicnVpa3Q6IHskdXNlcm5hbWV9JzsKJGxhbmdbJ2luZm9fYWRtaW5fcGFzc3dvcmQnXSA9ICdXaWp6aWcgZGl0IHZlbGQgb20gaGV0IHdhY2h0d29vcmQgdGUgcmVzZXR0ZW4nOwokbGFuZ1snaW5mb19hZG1pbl9yZXBlYXRwYXNzd29yZCddID0gJ1dpanppZyBkaXQgdmVsZCBvbSBoZXQgd2FjaHR3b29yZCB0ZSByZXNldHRlbic7CiRsYW5nWydlcnJvcl91c2VybmFtZV9leGlzdHMnXSA9ICdEZXplIGdlYnJ1aWtlcnNuYWFtIGJlc3RhYXQgYWwnOwokbGFuZ1snbm9jc3ZyZXN1bHRzJ10gPSAnRGV6ZSBleHBvcnQgbGV2ZXJkZSBnZWVuIHdhYXJkZShzKSBvcCc7CiRsYW5nWydwcm9tcHRfdW5mbGRsZW4nXSA9ICdMZW5ndGUgdmFuIGhldCBnZWJydWlrZXJzbmFhbSB2ZWxkJzsKJGxhbmdbJ3Byb21wdF9wd2ZsZGxlbiddID0gJ0xlbmd0ZSB2YW4gaGV0IHdhY2h0d29vcmQgdmVsZCc7CiRsYW5nWydlcnJvcl9pbnZhbGlkcGFzc3dvcmRsZW5ndGhzJ10gPSAnTWluL01heCBnZWxkaWdlIHdhY2h0d29vcmQgbGVuZ3Rlcyc7CiRsYW5nWydlcnJvcl9pbnZhbGlkdXNlcm5hbWVsZW5ndGhzJ10gPSAnTWluL01heCBnZWxkaWdlIGdlYnJ1aWtlcnNuYWFtIGxlbmd0ZXMnOwokbGFuZ1snZXJyb3Jfbm9lbWFpbGFkZHJlc3MnXSA9ICdHZWVuIEUtbWFpbCBhZHJlcyBnZXZvbmRlbiB2b29yIGRpdCBhY2NvdW50JzsKJGxhbmdbJ3VzZXJfYWRkZWQnXSA9ICdHZWJydWlrZXIgVG9lZ2V2b2VnZCAlcyA9ICVzJzsKJGxhbmdbJ3VzZXJfZGVsZXRlZCddID0gJ0dlYnJ1aWtlciB2ZXJ3aWpkZXJkIGlkPSVzJzsKJGxhbmdbJ3Byb3BlcnR5ZmlsdGVyJ10gPSAnRWlnZW5zY2hhcCc7CiRsYW5nWyd2YWx1ZXJlZ2V4J10gPSAnV2FhcmRlIChyZWd1bGFyIGV4cHJlc3Npb24pJzsKJGxhbmdbJ3dhcm5pbmdfZWZmZWN0c2ZpZWxkbGVuZ3RoJ10gPSAnV2FhcnNjaHV3aW5nOiBEZXplIHZlbGRlbiBiZSZhbXA7aXVtbDtudmxvZWRlbiBkZSBncm9vdHRlIHZhbiBpbnZvZXJ2ZWxkZW4gdm9vciBmb3JtdWxpZXJlbi4gSGV0IGFhbnRhbCB2ZXJrbGVpbmdlbiBvcCBlZW4gYmVzdGFhbmRlIHdlYnNpdGUgaXMgbWlzc2NoaWVuIG5pZXQgYWFuIHRlIHJhZGVuLic7CiRsYW5nWydjb25maXJtX3N1Ym1pdHByZWZzJ10gPSAnQmVoZWVyIHZvb3JrZXVyZW4gd2lqemlnZW4/JzsKJGxhbmdbJ2Vycm9yX2VtYWlsYWxyZWFkeXVzZWQnXSA9ICdFLW1haWwgYWRyZXMgd29yZHQgYWwgZ2VicnVpa3QnOwokbGFuZ1sncHJvbXB0X2FsbG93X2R1cGxpY2F0ZV9lbWFpbHMnXSA9ICdEZXplbGZkZSBFLW1haWxzIHRvZXN0YWFuJzsKJGxhbmdbJ2luZm9fYWxsb3dfZHVwbGljYXRlX2VtYWlscyddID0gJyhtZWVyZGVyZSBnZWJydWlrZXJzIG1ldCBoZXR6ZWxmZGUgRS1tYWlsIGFkcmVzIHRvZXN0YWFuKSc7CiRsYW5nWydlcnJvcl9taXNzaW5ndXNlcm5hbWUnXSA9ICdHZWVuIGdlYnJ1aWtlcnNuYWFtIGluZ2V2b2VyZCc7CiRsYW5nWydlcnJvcl9taXNzaW5ncGFzc3dvcmQnXSA9ICdHZWVuIHdhY2h0d29vcmQgaW5nZXZvZXJkJzsKJGxhbmdbJ2Zyb250ZW5kdXNlcl9sb2dvdXQnXSA9ICdGcm9udGVuZCBHZWJydWlrZXIgTG9nb3V0JzsKJGxhbmdbJ2Zyb250ZW5kdXNlcl9sb2dnZWRpbiddID0gJ0Zyb250ZW5kIEdlYnJ1aWtlciBMb2dpbic7CiRsYW5nWydlZGl0cHJvcF9pbmZvbXNnJ10gPSAnPGZvbnQgY29sb3I9JmFtcDtxdW90O3JlZCZhbXA7cXVvdDs+PGI+VVNFIENBVVRJT048L2I+IHdoZW4gY2hhbmdpbmcgZXhpc3RpbmcgcHJvcGVydGllcyB0aGF0IGFyZSBhc3NpZ25lZCB0byBncm91cHMsIHlvdSBtYXkgcG90ZW50aWFsbHkgY2F1c2UgZGFtYWdlIGFuZCBicmVhayBhbiBleGlzdGluZyBzaXRlIDxpPihlc3BlY2lhbGx5IGlmIHlvdSByZWR1Y2UgZmllbGQgbGVuZ3RocywgZXRjKTwvaT48L2ZvbnQ+JzsKJGxhbmdbJ2luZm9fc210cHZhbGlkYXRlJ10gPSAnRGV6ZSBmdW5jdGllIHdlcmt0IG5pZXQgb25kZXIgd2luZG93cyc7CiRsYW5nWydtc2dfZG9udGNyZWF0ZXVzZXJuYW1lJ10gPSAnTWFhayBnZWVuIHByb3BlcnR5IGFhbiB2b29yOiB1c2VybmFtZS9wYXNzd29yZC4gRGV6ZSB6aWpuIGluZ2Vib3V3ZCBpbiBkZSBtb2R1bGUuJzsKJGxhbmdbJ3Byb21wdF9leHBvcnRjc3YnXSA9ICdHZWJydWlrZXJzIGV4cG9ydGVyZW4gbmFhciBDU1YnOwokbGFuZ1snZXhwb3J0Y3N2J10gPSAnRXhwb3J0ZXJlbic7CiRsYW5nWydhZG1pbiddID0gJ0JlaGVlcic7CiRsYW5nWydlZGl0cHJvcCddID0gJ1dhYXJkZSBXaWp6aWdlbic7CiRsYW5nWydtYXhsZW5ndGgnXSA9ICdNYXhpbWFsZSBsZW5ndGUnOwokbGFuZ1snY3JlYXRlZCddID0gJ0FhbmdlbWFha3QnOwokbGFuZ1snc29ydGJ5J10gPSAnU29ydGVyZW4gT3AnOwokbGFuZ1snc29ydCddID0gJ1NvcnRlcmluZyc7CiRsYW5nWyd1c2Vyc2luZ3JvdXAnXSA9ICdHZWJydWlrZXJzIGluIGRlIGdlc2VsZWN0ZWVyZGUgZ3JvZXAoZW4pJzsKJGxhbmdbJ3VzZXJsaW1pdCddID0gJ1Jlc3VsdGF0ZW4gYmVwZXJrZW4gdG90JzsKJGxhbmdbJ2Vycm9yX25vZW1haWxmaWVsZCddID0gJ0thbiBnZWVuIGUtbWFpbCB2ZWxkIHZpbmRlbiB2b29yIGRlemUgZ2VicnVpa2VyLiBOZWVtIGNvbnRhY3Qgb3AgbWV0IGRlIGJlaGVlcmRlci4nOwokbGFuZ1sncHJvbXB0X2ZvcmdvdHB3X3BhZ2UnXSA9ICdQYWdlSUQvQWxpYXMgdm9vciBwYXNzd29yZCB2ZXJnZXRlbiBmb3JtdWxpZXInOwokbGFuZ1sncHJvbXB0X2NoYW5nZXNldHRpbmdzX3BhZ2UnXSA9ICdQYWdlSUQvQWxpYXMgdm9vciAmIzAzOTt3aWp6aWcgaW5zdGVsbGluZ2VuJiMwMzk7IGZvcm11bGllcic7CiRsYW5nWydwcm9tcHRfbG9naW5fcGFnZSddID0gJ1BhZ2VJRC9BbGlhcyB0byBqdW1wIHRvIGFmdGVyIGxvZ2luJzsKJGxhbmdbJ3Byb21wdF9sb2dvdXRfcGFnZSddID0gJ1BhZ2VJRC9BbGlhcyB0byBqdW1wIHRvIGFmdGVyIGxvZ291dCc7CiRsYW5nWydzb3J0b3JkZXInXSA9ICdTb3J0ZWVyIHZvbGdvcmRlJzsKJGxhbmdbJ3Byb21wdF9udW1yZXNldHJlY29yZCddID0gJ0VlbiBhYW50YWwgZ2VicnVpa2VycyBoZWVmdCBlZW4gdmVyem9layB0b3QgcmVzZXR0ZW4gd2FjaHR3b29yZCBpbmdlZGllbmQsIG1vbWVudGVlbCB6aWpuIGRpdCBlcjonOwokbGFuZ1sncmVtb3ZlMXdlZWsnXSA9ICdWZXJ3aWpkZXIgYWxsZSBhYW5tZWxkaW5nZW4gbWVlciBkYW4gZWVuIHdlZWsgb3VkJzsKJGxhbmdbJ3JlbW92ZTFtb250aCddID0gJ1ZlcndpamRlciBhbGxlIGFhbm1lbGRpbmdlbiBtZWVyIGRhbiBlZW4gbWFhbmQgb3VkJzsKJGxhbmdbJ3JlbW92ZWFsbCddID0gJ0FsbGUgZW50cmllcyB2ZXJ3aWpkZXJlbic7CiRsYW5nWydhcmV5b3VzdXJlJ10gPSAnWmVrZXIgd2V0ZW4/JzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRjb2RlJ10gPSAnRXIgaXMgZWVuIHZlcmtlZXJkZSBjb2RlIGluZ2V2b2VyZCwgcHJvYmVlciBoZXQgc3ZwIG5vZ21hYWxzJzsKJGxhbmdbJ2Vycm9yX3RlbXBjb2Rlbm90Zm91bmQnXSA9ICdEZSB0aWpkZWxpamtlIGNvZGUgdm9vciB1dyBhY2NvdW50IGtvbiBuaWV0IGluIG9uemUgZGF0YWJhc2Ugd29yZGVuIGdldm9uZGVuJzsKJGxhbmdbJ2ZvcmdvdHBhc3N3b3JkX3ZlcmlmeXRlbXBsYXRlJ10gPSAnU2phYmxvb24gb20gaGV0IGJldmVzdGlnaW5ncyBmb3JtdWxpZXIgdGUgdG9uZW4uJzsKJGxhbmdbJ2ZvcmdvdHBhc3N3b3JkX2VtYWlsdGVtcGxhdGUnXSA9ICdTamFibG9vbiBvbSBoZXQgcGFzc3dvcmQgdmVyZ2V0ZW4gZm9ybXVsaWVyIHRlIHRvbmVuLic7CiRsYW5nWydlcnJvcl9yZXNldGFscmVhZHlzZW50J10gPSAnSmlqemVsZiBvZiBpZW1hbmQgYW5kZXJzIGhlZWZ0IGFsIGVlbiBwYXNzd29yZCByZXNldCBwcm9jZWR1cmUgaW4gZ2FuZyBnZXpldC4gS2lqayBqZSBlLW1haWwgbmEsIHdlIGhlYmJlbiBhYW53aWp6aW5nZW4gaG9lIHRlIGhhbmRlbGVuIGRhYXIgbmFhciB0b2UgZ2VzdHV1cmQuJzsKJGxhbmdbJ2Vycm9yX2RiZXJyb3InXSA9ICdEYXRhYmFzZSBlcnJvci4nOwokbGFuZ1snbWVzc2FnZV9mb3Jnb3Rwd2VtYWlsJ10gPSAnSmUgb250dmFuZ3QgZGV6ZSBib29kc2NoYXAgb21kYXQgaWVtYW5kIGhlZWZ0IGdlbWVsZCBkYXQgamUgamUgcGFzc3dvcmQga3dpanQgYmVudC4gQWxzIGRpdCB6byBpcyBsZWVzIGRhbiBkZSBvbmRlcnN0YWFuZGUgYWFud2lqemluZ2VuIGFhbmRhY2h0aWcgZG9vci4gQWxzIGplIGhpZXIgbmlldHMgdmFuIGJlZ3JpanB0LCBkYW4ga2FuIGplIGRpdCBiZXJpY2h0amUgZ2V3b29uIHdpc3Nlbi4nOwokbGFuZ1sncHJvbXB0X2NvZGUnXSA9ICdDb2RlICc7CiRsYW5nWydtZXNzYWdlX2NvZGUnXSA9ICdUaGUgZm9sbG93aW5nIGNvZGUgaGFzIGJlZW4gZ2VuZXJhdGVkIHJhbmRvbWx5IGdlbmVyYXRlZCBpbiBvcmRlciB0byB2ZXJpZnkgdGhlIHVzZXIgYWNjb3VudC4gIHdoZW4geW91IGNsaWNrIG9uIHRoZSBsaW5rIGJlbG93IHlvdSB3aWxsIGJlIHByZXNlbnRlZCB3aXRoIGEgZmllbGQgdG8gZW50ZXIgdGhpcyBjb2RlLiAgTm9ybWFsbHkgdGhlIGZpZWxkIGlzIHByZS1jb21wbGV0ZWQgZm9yIHlvdSwgYnV0IGluY2FzZSBpdCBpc24mIzAzOTt0IHRoZSBjb2RlIGlzOic7CiRsYW5nWydwcm9tcHRfbGluayddID0gJ0NsaWNraW5nIG9uIHRoZSBmb2xsb3dpbmcgbGluayB3aWxsIHRha2UgeW91IHRvIHRoZSB3ZWJzaXRlIHdoZXJlIHlvdSBjYW4gZW50ZXIgdGhlIGFib3ZlIGNvZGUsIGFuZCByZXNldCB5b3VyIHBhc3N3b3JkOic7CiRsYW5nWydsb3N0cGFzc3dvcmRfZW1haWxzdWJqZWN0J10gPSAnV2FjaHR3b29yZCBWZXJnZXRlbic7CiRsYW5nWydlcnJvcl9ub21haWxlcm1vZHVsZSddID0gJ0NvdWxkIG5vdCBmaW5kIHRoZSBDTVNNYWlsZXIgbW9kdWxlICc7CiRsYW5nWydpbmZvX2ZvcmdvdHB3bWVzc2FnZXNlbnQnXSA9ICdBbiBlbWFpbCBoYXMgYmVlbiBzZW50IHRvICVzIHdpdGggaW5zdHJ1Y3Rpb25zIGFzIHRvIGhvdyB0byByZXNldCB5b3VyIHBhc3N3b3JkLiAgVGhhbmsgeW91JzsKJGxhbmdbJ2xvc3Rwd19tZXNzYWdlJ10gPSAnU28geW91IGZvcmdvdCBvciBsb3N0IHlvdXIgcGFzc3dvcmQuIFdlbGwsIHR5cGUgeW91ciB1c2VybmFtZSBpbiBoZXJlLCBhbmQgaWYgd2UgY2FuIGZpbmQgeW91IHdlIHdpbGwgc2VuZCB5b3UgYW4gZW1haWwgd2l0aCBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHJlc2V0IGl0JzsKJGxhbmdbJ2ZvcmdvdHBhc3N3b3JkX3RlbXBsYXRlJ10gPSAnV2FjaHR3b29yZCBWZXJnZXRlbiBUZW1wbGF0ZXMnOwokbGFuZ1snZXJyb3JfcHJvcG5vdGZvdW5kJ10gPSAnRWlnZW5zY2hhcCAlcyBuaWV0IGdldm9uZGVuJzsKJGxhbmdbJ3Byb3BzZm91bmQnXSA9ICdHZXZvbmRlbiBlaWdlbnNjaGFwcGVuJzsKJGxhbmdbJ2FkZHByb3AnXSA9ICdFaWdlbnNjaGFwIHRvZXZvZWdlbic7CiRsYW5nWydlcnJvcl9yZXF1aXJlZGZpZWxkJ10gPSAnRWVuIHZlcnBsaWNodCB2ZWxkICglcykgaXMgbmlldCBpbmdldnVsZCc7CiRsYW5nWydpbmZvX2VtcHR5cGFzc3dvcmRmaWVsZCddID0gJ1Z1bCBoaWVyIGVlbiBuaWV1dyB3YWNodHdvb3JkIGluIG9tIGhldCB3YWNodHdvb3JkIHRlIHJlc2V0dGVuJzsKJGxhbmdbJ2Vycm9yX25vdGxvZ2dlZGluJ10gPSAnSGV0IHNjaGlqbnQgZGF0IHUgbmlldCBpbmdlbG9nZWQgYmVudCc7CiRsYW5nWyd1c2VyX3NldHRpbmdzJ10gPSAnSW5zdGVsbGluZ2VuJzsKJGxhbmdbJ3VzZXJfcmVnaXN0cmF0aW9uJ10gPSAnUmVnaXN0cmF0aWUnOwokbGFuZ1snZXJyb3JfYWNjb3VudGV4cGlyZWQnXSA9ICdEaXQgYWNjb3VudCBpcyB2ZXJsb3Blbic7CiRsYW5nWydlcnJvcl9pbXByb3BlcmVtYWlsZm9ybWF0J10gPSAnVmVya2VlcmQgZS1tYWlsIGFkcmVzIGZvcm1hYXQnOwokbGFuZ1snZXJyb3JfaW52YWxpZGV4cGlyeWRhdGUnXSA9ICdPbmdlbGRpZ2UgYWZsb29wIGRhdHVtJzsKJGxhbmdbJ2Vycm9yX3Byb2JsZW1zZXR0aW5ncHJvcGVydHknXSA9ICdFcnJvciBzZXR0aW5nIHByb3BlcnR5ICVzIGZvciB1c2VyICRzJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRncm91cGlkJ10gPSAnT25nZWxkaWdlIGdyb2VwIGlkICVzJzsKJGxhbmdbJ2hpZGRlbmZpZWxkbWFya2VyJ10gPSAnSGlkZGVuIGZpZWxkIG1hcmtlciAnOwokbGFuZ1snaGlkZGVuZmllbGRjb2xvciddID0gJ0hpZGRlbiBmaWVsZCBjb2xvciAnOwokbGFuZ1snaGlkZGVuJ10gPSAnVmVyYm9yZ2VuJzsKJGxhbmdbJ2Vycm9yX2R1cGxpY2F0ZW5hbWUnXSA9ICdBIHByb3BlcnR5IHdpdGggdGhhdCBuYW1lIGlzIGFscmVhZHkgZGVmaW5lZCc7CiRsYW5nWydlcnJvcl9ub3Byb3BlcnRpZXMnXSA9ICdHZWVuIGVpZ2Vuc2NoYXBwZW4gZ2VkZWZpbmVlcmQnOwokbGFuZ1snZXJyb3Jfbm9yZWxhdGlvbnMnXSA9ICdObyBwcm9wZXJ0aWVzIHdlcmUgc2VsZWN0ZWQgZm9yIHRoaXMgZ3JvdXAnOwokbGFuZ1snZ3JvdXBzZm91bmQnXSA9ICdHZXZvbmRlbiBncm9lcGVuJzsKJGxhbmdbJ2Vycm9yX29uZWdyb3VwcmVxdWlyZWQnXSA9ICdNZW1iZXJzaGlwIGluIGF0IGxlYXN0IG9uZSBncm91cCBpcyByZXF1aXJlZCc7CiRsYW5nWydwcm9tcHRfcmVxdWlyZW9uZWdyb3VwJ10gPSAnUmVxdWlyZSBtZW1iZXJzaGlwIGluIGF0bGVhc3Qgb25lIGdyb3VwJzsKJGxhbmdbJ2JhY2snXSA9ICdUZXJ1Zyc7CiRsYW5nWydlcnJvcl9taXNzaW5nX3JlcXVpcmVkX3BhcmFtJ10gPSAnJXMgaXMgZWVuIHZlcnBsaWNodCB2ZWxkJzsKJGxhbmdbJ3JlcXVpcmVkZmllbGRtYXJrZXInXSA9ICdWZXJwbGljaHRlIHZlbGRlbiBtYXJrZXJlbiBtZXQnOwokbGFuZ1sncmVxdWlyZWRmaWVsZGNvbG9yJ10gPSAnVmVycGxpY2h0ZSB2ZWxkZW4gaGlnaGxpZ2h0ZW4gaW4gJzsKJGxhbmdbJ25leHQnXSA9ICdWb2xnZW5kZSc7CiRsYW5nWydlcnJvcl9ncm91cGV4aXN0cyddID0gJ0VlbiBncm9lcCBtZXQgZGllIG5hYW0gYmVzdGFhdCBhbCc7CiRsYW5nWydyZXF1aXJlZCddID0gJ1ZlcnBsaWNodCB2ZWxkJzsKJGxhbmdbJ29wdGlvbmFsJ10gPSAnT3B0aW9uZWVsJzsKJGxhbmdbJ29mZiddID0gJ1VpdCc7CiRsYW5nWydsZW5ndGgnXSA9ICdMZW5ndGUnOwokbGFuZ1snbGVuZ3RoY29tbWVudCddID0gJzxicj4oY2hhcnMgaW4gdGhlIHRleHQgaW5wdXQpJzsKJGxhbmdbJ3NlbG9wdGlvbnMnXSA9ICdEcm9wZG93biBvcHRpb25zLCBzZXBhcmF0ZWQgYnkgbGluZSBicmVha3MnOwokbGFuZ1sneWVzJ10gPSAnSmEnOwokbGFuZ1sncHJvbXB0J10gPSAnUHJvbXB0JzsKJGxhbmdbJ3R5cGUnXSA9ICdUeXBlJzsKJGxhbmdbJ3RleHQnXSA9ICdUZWtzdCc7CiRsYW5nWydjaGVja2JveCddID0gJ0FhbnZpbmsgdmFramUnOwokbGFuZ1snZW1haWwnXSA9ICdFbWFpbCBBZHJlcyc7CiRsYW5nWyd0ZXh0YXJlYSddID0gJ1Rla3N0dmVsZCc7CiRsYW5nWydkcm9wZG93biddID0gJ1VpdGtsYXAnOwokbGFuZ1snbXNnX2N1cnJlbnRseWxvZ2dlZGluYXMnXSA9ICdXZWxrb20nOwokbGFuZ1snbG9nb3V0J10gPSAnVWl0bG9nZ2VuJzsKJGxhbmdbJ3Byb21wdF9jaGFuZ2VzZXR0aW5ncyddID0gJ01pam4gSW5zdGVsbGluZ2VuIHdpanppZ2VuJzsKJGxhbmdbJ2Vycm9yX2xvZ2luZmFpbGVkJ10gPSAnTG9naW4gbmlldCBnZWx1a3QgLSB3YWNodHdvb3JkL3VzZXJuYW1lIHByb2JsZWVtPyc7CiRsYW5nWydsb2dpbiddID0gJ0lubG9nZ2VuJzsKJGxhbmdbJ3Byb21wdF91c2VybmFtZSddID0gJ0dlYnJ1aWtlcnNuYWFtJzsKJGxhbmdbJ3Byb21wdF9wYXNzd29yZCddID0gJ1dhY2h0d29vcmQnOwokbGFuZ1sncmVnaXN0ZXInXSA9ICdSZWdpc3RyZXJlbic7CiRsYW5nWydmb3Jnb3RwdyddID0gJ1dhY2h0d29vcmQgVmVyZ2V0ZW4/JzsKJGxhbmdbJ2RlZmF1bHRzJ10gPSAnU3RhbmRhYXJkJzsKJGxhbmdbJ3RlbXBsYXRlJ10gPSAnU2phYmxvb24nOwokbGFuZ1snZXJyb3JfdXNlcm5vdGZvdW5kJ10gPSAnR2VicnVpa2VyIElEIG5pZXQgZ2V2b25kZW4nOwokbGFuZ1snZXJyb3JfdXNlcm5hbWV0YWtlbiddID0gJ0RpZSBnZWJydWlrZXJzbmFhbSAoJXMpIGlzIGFsIGluIGdlYnJ1aWsnOwokbGFuZ1sncHJvbXB0X3NtdHB2YWxpZGF0ZSddID0gJ1VzZSBTTVRQIHRvIHZhbGlkYXRlIGVtYWlsIGFkZHJlc3Nlcz8nOwokbGFuZ1sncHJvbXB0X21pbnB3bGVuJ10gPSAnTWluaW11bSBQYXNzd29yZCBMZW5ndGgnOwokbGFuZ1sncHJvbXB0X21heHB3bGVuJ10gPSAnTWF4aW11bSBQYXNzd29yZCBMZW5ndGgnOwokbGFuZ1sncHJvbXB0X21pbnVubGVuJ10gPSAnTWluaW11bSBVc2VybmFtZSBMZW5ndGgnOwokbGFuZ1sncHJvbXB0X21heHVubGVuJ10gPSAnTWF4aW11bSBVc2VybmFtZSBMZW5ndGgnOwokbGFuZ1sncHJvbXB0X3Nlc3Npb250aW1lb3V0J10gPSAnU2Vzc2lvbiBUaW1lb3V0IChzZWNvbmRzKSc7CiRsYW5nWydwcm9tcHRfYWxsb3dlbWFpbHJlZyddID0gJ0FsbG93IEVtYWlsIFJlZ2lzdHJhdGlvbic7CiRsYW5nWydwcm9tcHRfZGZsdGdyb3VwJ10gPSAnRGVmYXVsdCBHcm91cCBmb3IgbmV3IHVzZXJzJzsKJGxhbmdbJ2NoYW5nZXNldHRpbmdzX3RlbXBsYXRlJ10gPSAnQ2hhbmdlIFNldHRpbmdzIFRlbXBsYXRlJzsKJGxhbmdbJ2Vycm9yX3Bhc3N3b3JkbWlzbWF0Y2gnXSA9ICdQYXNzd29yZHMgRG8gbm90IG1hdGNoJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWR1c2VybmFtZSddID0gJ0ludmFsaWQgVXNlcm5hbWUnOwokbGFuZ1snZXJyb3JfaW52YWxpZHBhc3N3b3JkJ10gPSAnSW52YWxpZCBQYXNzd29yZCc7CiRsYW5nWydlZGl0dXNlciddID0gJ0VkaXQgVXNlcic7CiRsYW5nWyd2YWxpZCddID0gJ0dlbGRpZyc7CiRsYW5nWyd1c2VybmFtZSddID0gJ0dlYnJ1aWtlcnNuYWFtJzsKJGxhbmdbJ3N0YXR1cyddID0gJ1N0YXR1cyc7CiRsYW5nWydlcnJvcl9tZW1iZXJncm91cHMnXSA9ICdUaGlzIHVzZXIgaXMgbm90IGEgbWVtYmVyIG9mIGFueSBncm91cHMnOwokbGFuZ1snZXJyb3JfcHJvcGVydGllcyddID0gJ05vIFByb3BlcnRpZXMnOwokbGFuZ1sndmFsdWUnXSA9ICdXYWFyZGUnOwokbGFuZ1snZ3JvdXBzJ10gPSAnR3JvZXBlbic7CiRsYW5nWydwcm9wZXJ0aWVzJ10gPSAnRWlnZW5zY2hhcHBlbic7CiRsYW5nWydwcm9wbmFtZSddID0gJ1Byb3BlcnR5IE5hbWUnOwokbGFuZ1sncHJvcHZhbHVlJ10gPSAnUHJvcGVydHkgVmFsdWUnOwokbGFuZ1snYWRkJ10gPSAnVG9ldm9lZ2VuJzsKJGxhbmdbJ2VkaXQnXSA9ICdBYW5wYXNzZW4nOwokbGFuZ1snZXhwaXJlcyddID0gJ1Zlcmxvb3B0JzsKJGxhbmdbJ3NwZWNpZnlfZGF0ZSddID0gJ0RhdHVtIG9wZ2V2ZW4nOwokbGFuZ1snMTJocnMnXSA9ICcxMiBVdXInOwokbGFuZ1snMjRocnMnXSA9ICcyNCBVdXInOwokbGFuZ1snNDhocnMnXSA9ICc0OCBVdXInOwokbGFuZ1snMXdlZWsnXSA9ICcxIFdlZWsnOwokbGFuZ1snMndlZWtzJ10gPSAnMiBXZWtlbic7CiRsYW5nWycxbW9udGgnXSA9ICcxIE1hYW5kJzsKJGxhbmdbJzNtb250aHMnXSA9ICczIE1hYW5kZW4nOwokbGFuZ1snNm1vbnRocyddID0gJzYgTWFhbmRlbic7CiRsYW5nWycxeWVhciddID0gJzEgSmFhcic7CiRsYW5nWyduZXZlciddID0gJ05vb2l0JzsKJGxhbmdbJ3Bvc3RpbnN0YWxsbWVzc2FnZSddID0gJ01vZHVsZSBpbnN0YWxsZWQgc3VjZXNzZnVsbHkuPGJyLz5CZSBzdXJlIHRvIHNldCB0aGUgJnF1b3Q7TW9kaWZ5IEZyb250RW5kVXNlciBQcm9wZXJ0aWVzIHBlcm1pc3Npb24uJnF1b3Q7JzsKJGxhbmdbJ3Bhc3N3b3JkJ10gPSAnV2FjaHR3b29yZCc7CiRsYW5nWydyZXBlYXRwYXNzd29yZCddID0gJ05vZ21hYWxzJzsKJGxhbmdbJ2Vycm9yX2dyb3VwbmFtZV9leGlzdHMnXSA9ICdFciBiZXN0YWF0IGFsIGVlbiBncm9lcCBtZXQgZGllIG5hYW0nOwokbGFuZ1snZWRpdGdyb3VwJ10gPSAnR3JvZXAgYmV3ZXJrZW4nOwokbGFuZ1snc3VibWl0J10gPSAnVmVyc3R1cmVuJzsKJGxhbmdbJ2NhbmNlbCddID0gJ0FubnVsZXJlbic7CiRsYW5nWydkZWxldGUnXSA9ICdWZXJ3aWpkZXJlbic7CiRsYW5nWydjb25maXJtX2VkaXRncm91cCddID0gJ0FyZSB5b3Ugc3VyZSB0aGlzIGlzIHRoZSBwcm9wZXIgc2V0dGluZ3MgZm9yIHRoaXMgZ3JvdXA/XG5UdXJuaW5nIGEgcHJvcGVydHkgb2ZmIHdpbGwgbm90IGRlbGV0ZSBhbnkgZW50cmllcyBpbiB0aGUgcHJvcGVydGllcyB0YWJsZSBmb3IgdGhpcyBncm91cC91c2VyLiAgVGhleSB3aWxsIG1lcmVseSBiZSB1bmF2YWlsYWJsZS4nOwokbGFuZ1snYXJleW91c3VyZV9kZWxldGVncm91cCddID0gJ1dlZXQgamUgemVrZXIgZGF0IGplIGRlemUgZ3JvZXAgd2lsdCB2ZXJ3aWpkZXJlbj8nOwokbGFuZ1snY29uZmlybV9kZWxldGVfcHJvcCddID0gJ1dlZXQgamUgemVrZXIgZGF0IGplIGRlemUgcHJvcGVydHkgZGVmaW50aWVmIHdpbHQgdmVyd2lqZGVyZW4/XG5BbHMgamUgZGF0IGRvZXQgdmVyd2lqZGVyIGplIG1ldGVlbiBvb2sgYWxsZSBwcm9wZXJ0aWVzIGdlbGlua2VkIGFhbiBkZSBnZWJydWlrZXJzLic7CiRsYW5nWydlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnXSA9ICdUZSB3ZWluaWcgcGFyYW1ldGVycyc7CiRsYW5nWydpZCddID0gJ0lkJzsKJGxhbmdbJ25hbWUnXSA9ICdOYWFtJzsKJGxhbmdbJ2Vycm9yX2NhbnRhZGRnb3J1cCddID0gJ1Byb2JsZWVtIGJpaiBoZXQgdG9ldm9lZ2VuIHZhbiBkZSBncm9lcCc7CiRsYW5nWydlcnJvcl9pbnZhbGlkcGFyYW1zJ10gPSAnT25nZWxkaWdlIFBhcmFtZXRlcnMnOwokbGFuZ1snYXBwbHlmaWx0ZXInXSA9ICdUb2VwYXNzZW4nOwokbGFuZ1snZmlsdGVyJ10gPSAnRmlsdGVyJzsKJGxhbmdbJ3VzZXJmaWx0ZXInXSA9ICdHZWJydWlrZXJzbmFhbSBSZWd1bGFyIEV4cHJlc3Npb24nOwokbGFuZ1snZGVzY3JpcHRpb24nXSA9ICdPbXNjaHJpanZpbmcnOwokbGFuZ1snZ3JvdXBuYW1lJ10gPSAnR3JvZXAgTmFhbSc7CiRsYW5nWydhY2Nlc3NkZW5pZWQnXSA9ICdUb2VnYW5nIEdld2VpZ2VyZCc7CiRsYW5nWydlcnJvciddID0gJ0ZvdXQnOwokbGFuZ1snYWRkZ3JvdXAnXSA9ICdHcm9lcCBUb2V2b2VnZW4nOwokbGFuZ1snYWRkdXNlciddID0gJ0dlYnJ1aWtlciBUb2V2b2VnZW4nOwokbGFuZ1sndXNlcnNmb3VuZCddID0gJ0dlYnJ1aWtlcnMgZ2V2b25kZW4gZGllIHZvbGRvZW4gYWFuIGRlIGdlZ2V2ZW4gem9layBjcml0ZXJpYSc7CiRsYW5nWydncm91cCddID0gJ0dyb2VwJzsKJGxhbmdbJ3NlbGVjdGdyb3VwJ10gPSAnR3JvZXAgU2VsZWN0ZXJlbic7CiRsYW5nWydyZWdpc3RyYXRpb25fdGVtcGxhdGUnXSA9ICdSZWdpc3RyYXRpZSBTamFibG9vbic7CiRsYW5nWydsb2dvdXRfdGVtcGxhdGUnXSA9ICdVaXRsb2cgU2phYmxvb24nOwokbGFuZ1snbG9naW5fdGVtcGxhdGUnXSA9ICdJbmxvZyBTamFibG9vbic7CiRsYW5nWydwcmVmZXJlbmNlcyddID0gJ1Zvb3JrZXVyZW4nOwokbGFuZ1sndXNlcnMnXSA9ICdHZWJydWlrZXJzJzsKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0Zyb250ZW5kIEdlYnJ1aWtlcnMgTWFuYWdlbWVudCc7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ0JlaGVlciBGcm9udGVuZCBHZWJydWlrZXJzJzsKJGxhbmdbJ2RlZmF1bHRmcm9udHBhZ2UnXSA9ICdTdGFuZGFhcmQgYmlubmVua29tc3QgcGFnaW5hJzsKJGxhbmdbJ2xhc3RhY2Nlc3NlZHBhZ2UnXSA9ICdMYWF0c3QgYmV6b2NodGUgcGFnaW5hJzsKJGxhbmdbJ290aGVycGFnZSddID0gJ0FuZGVyZSBwYWdpbmE6JzsKJGxhbmdbJ2NoYW5nZWxvZyddID0gJzx1bD4NCjxsaT4wLjAuMSAtIE9jdG9iZXIsIDIwMDUgLSBJbml0aWFsIE5SUFQgKE5vdCBSZWFkeSBmb3IgUHJpbWUgVGltZSkgcmVsZWFzZTwvbGk+DQo8bGk+MC4xLjAgLSBPY3RvYmVyLCAyMDA1IC0gSW5pdGlhbCByZWxlYXNlPC9saT4NCjxsaT4wLjEuMSAtIE9jdG9iZXIsIDIwMDUgLSBGaXhlZCBpc3N1ZXMgd2l0aCBwcm9wZXJ0aWVzPC9saT4NCjxsaT4wLjEuMiAtIE9jdG9iZXIsIDIwMDUgLSBBZGRlZCBmb3Jnb3R0ZW4gcGFzc3dvcmQgZnVuY3Rpb25hbGl0eTwvbGk+DQo8bGk+PHA+MC4xLjMgLSBOb3ZlbWJlciwgMjAwNTwvcD4NCiAgICA8cD5BZGRlZCB0aGUgYWJpbGl0eSB0byBzcGVjaWZ5IGEgcmVkaXJlY3QgcGFnZSBvbiBsb2dpbiwgbG9nb3V0LCBmb3Jnb3QgcGFzc3dvcmQsIGFuZCBjaGFuZ2Ugc2V0dGluZ3MsIGFuZCBhZGRlZCB0aGUgcmV0dXJudG8gYW5kIGZvcm0gcGFyYW1ldGVycyB0byB0aGUgdXNlciBzaWRlIG9mIHRoaW5ncywgYWxzbyBkaWQgYSBjb3VwbGUgbGYgbGl0dGxlIGNsZWFudXBzLiAgVGhpcyB2ZXJzaW9uIHJlcXVpcmVzIHYwLjExIGFuZCBhYm92ZSBmb3IgY2VydGFpbi48L3A+PC9saT4NCjxsaT4wLjEuNCAtIE5vdmVtYmVyLCAyMDA1IC0gVmVyeSBtaW5vciBjaGFuZ2Ugd2l0aCByZXNwZWN0IHRvIGEgZm9yZ290dGVuIGFuZCBubyBsb25nZXIgbmVlZGVkIGZ1bmN0aW9uIGNhbGw8L2xpPg0KPGxpPjxwPjAuMS41IC0gTm92ZW1iZXIsIDIwMDU8L3A+DQogICAgPHA+QW5vdGhlciB2ZXJ5IG1pbm9yIGNoYW5nZSwgYWRkZWQgc29tZSB0ZXh0IHRvIHRoZSBQb3N0SW5zdGFsbCBtZXNzYWdlLjwvcD48L2xpPg0KPGxpPjxwPjAuMS42IC0gSmFudWFyeSwgMjAwNjxwPg0KICAgIDxwPkNoYW5nZXMgdG8gdGhlIHBlcm1pc3Npb24gbW9kZWwsIGFuZCBtaW5vciBidWcgZml4ZXMgdG8gdGhlIHByZWZlcmVuY2VzLiAgQWxzbyBzb21lIHBocDUgZml4ZXMgYnV0IEkgYW0gc3VyZSB0aGF0IHRoZXJlIGFyZSBtb3JlIG91dCB0aGVyZS48L3A+PC9saT4NCjxsaT48cD4wLjEuNyAtIEphbnVhcnksIDIwMDY8cD4NCiAgICA8cD5NYW55IHRoYW5rcyB0byA8Yj5rYXRvbjwvYj4gZm9yIGFkZGluZyB0aGUgdGV4dGFyZWEgYW5kIGRyb3Bkb3duIHByb3BlcnR5IHR5cGVzLjwvcD4NCiAgICA8cD5GaXhlcyB0byB0aGUgcHJvcGVydHkgYWRkaW5nIHRvIGZpeCBwcm9ibGVtcyB3aXRoIHNwYWNlcyBpbiBwcm9wZXJ0eSBuYW1lcyAod2Ugbm8gbG9uZ2VyIGxldCB0aGF0IGhhcHBlbikuPC9wPg0KPC9saT4NCjxsaT48cD4xLjAuMCAtIEZlYnJ1YXJ5LCAyMDA2PHA+DQogICAgPHA+QWRkZWQgZmlsdGVyaW5nIGFuZCByb3cgbGltaXRpbmcgdG8gdGhlIGFkbWluIHBhbmVsLiBUaGlzIHdpbGwgaGF2ZSBiaWcgYmVuZWZpdHMgdG8gdGhvc2UgdGhhdCBhcmUgdXNpbmcgdGhpcyBtb2R1bGUgZm9yIGhpZ2ggdHJhZmljLCBhbmQgaGlnaCB1c2VyIHNpdGVzLjwvcD4NCiAgICA8cD5BZGRlZCBzb3J0aW5nIHRvIHRoZSBhZG1pbiBwYW5lbDwvcD4NCiAgICA8cD5BZGRlZCBtYXggbGVuZ3RoIGFiaWxpdHkgdG8gdGV4dCBhbmQgZW1haWwgZmllbGRzPC9wPg0KICAgIDxwPkZpeGVkIGEgc21hbGwgcHJvYmxlbSB3aXRoIHRoZSBkZWZhdWx0IGdyb3VwIG5vdCBiZWluZyBjaGVja2VkIHdoZW4gYWRkaW5nIGEgdXNlcjwvcD4NCiAgICA8cD5TYXZlIGZpbHRlciBzZXR0aW5ncyBpbiBwcmVmZXJlbmNlcywgYW5kIHRoZSBhY3RpdmUgdGFiIHRvby48L3A+DQogICAgPHA+RGVsZXRlIHVzZXIgcHJvcGVydGllcyB3aGVuIGEgcHJvcGVydHkgaXMgZGVsZXRlZCA8ZW0+Tm90ZTwvZW0+LCBub3Qgd2hlbiBpdCBpcyBkaXNhYmxlZCBpbiB0aGUgZWRpdCBncm91cCBkaWFsb2c8L3A+DQogICAgPHA+QWRkIGNvbmZpcm1hdGlvbiBtZXNzYWdlIGluIGVkaXQgZ3JvdXBzLjwvcD4NCiAgICA8cD5BZGRlZCBhIGNvdXBsZSBtb3JlIGNvbmZpcm1hdGlvbiBtZXNzYWdlcy48L3A+DQogICAgPHA+QWRkZWQgQ1NWIEV4cG9ydCBvcHRpb248L3A+DQogICAgPHA+VG9kbyAtIEFkZCBwcmVmZXJlbmNlcyBmb3IgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGZpZWxkbGVuZ3RoPC9wPg0KPC9saT4NCjxsaT48cD4xLjAuMSAtIE1hcmNoLCAyMDA2PHA+DQogICAgPHA+QWRkZWQgdGhlIGFiaWxpdHkgdG8gY2hlY2sgZm9yIGR1cGxpY2F0ZSBlbWFpbCBhZGRyZXNzZXM8L3A+DQogICAgPHA+Rml4IHByb2JsZW0gd2hlcmUgZXhwaXJ5IGRhdGUgd2FzIGJlaW5nIG1vZGlmaWVkIHdoZW4gYWRtaW4gbW9kaWZpZWQgdXNlciBzZXR0aW5nczwvcD4NCiAgICA8cD5BZGQgYSBjb25maXJtYXRpb24gbWVzc2FnZSB0byB0aGUgcHJlZmVyZW5jZXMgc3VibWl0IGJ1dHRvbjwvcD4NCiAgICA8cD5GaXhlZCBhIG1pbm9yIGJ1ZyB3aGVuIGNvdXRpbmcgdGhlIG51bWJlciBvZiB1c2VycyBpbiBhIGdyb3VwPC9wPg0KICAgIDxwPkZpeGVzIHRvIHRoZSBzaXplIG9mIHVzZXJuYW1lIGFuZCBwYXNzd29yZCBmaWVsZHMsIGFuZCBtYXhsZW5ndGg8L3A+DQogICAgPHA+QWRkZWQgYWR2YW5jZWQgZmlsdGVyaW5nIG9uIHByb3BlcnRpZXM8L3A+DQogICAgPHA+Q2hhbmdlcyB0byBsYWJlbGluZyBpbiBhZGQgb3IgZWRpdCB1c2VyPC9wPg0KICAgIDxwPkZpeGVzIHRvIHByb2JsZW1zIHdpdGggaW5saW5lIGFuZCBub24gaW5saW5lIGZvcm1zLCB0aGUgcGFzc3dvcmQgaXMgbmV2ZXIgc2VudCBvbiB0aGUgZ2V0IGxpbmU8L3A+DQogICAgPHA+Q2hhbmdlZCB0byByZXF1aXJlIENNUyAwLjEyLWJldGEyIGF0IGEgbWluaW11bSAoZm9yIHNhZmV0eSBwdXJwb3Nlcyk8L3A+DQo8L2xpPg0KPGxpPjxwPjEuMC4yIC0gTWFyY2gsIDIwMDY8cD4NCiAgICA8cD5Nb3JlIGZpZWxkIGxlbmd0aCBmaXhlczwvcD4NCjwvbGk+DQo8bGk+PHA+MS4wLjMgLSBNYXJjaCwgMjAwNjxwPg0KICAgIDxwPkV4cG9ydCB0byBzbWFydHkgYWxsIG9mIHRoZSB1c2VyIHByb3BlcnRpZXMgd2hlbiB0aGV5IGFyZSBsb2dnZWQgaW48L3A+DQo8L2xpPg0KPC91bD4nOwokbGFuZ1snaGVscCddID0gJzxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPg0KPHA+VGhpcyBtb2R1bGUgYWxsb3dzIG1hbmFnZW1lbnQgYW5kIGFkbWluaXN0cmF0aW9uIG9mIGZyb250IGVuZCB1c2VycyA8aT4odXNlcnMgd2hvIGhhdmUgbm8gYWRtaW4gYWNjZXNzcyk8L2k+LiAgSXQgYWxsb3dzIGNyZWF0aW9uIG9mIHVzZXIgZ3JvdXBzLCBhbmQgdXNlciBhY2NvdW50cyBhbmQgYWxsb3dzIHVzZXJzIHRvIGxvZ2luIGFuZCBsb2dvdXQuICBpdCBjYW4gYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBDdXN0b21Db250ZW50IG1vZHVsZSB0byBkaXNwbGF5IGRpZmZlcmVudCBjb250ZW50IHRvIGRpZmZlcmVudCB1c2VycyBvbmNlIHRoZXkgaGF2ZSBsb2dnZWQgaW48L3A+DQo8aDM+RmVhdHVyZXM8L2gzPg0KPHVsPg0KPGxpPjxwPlVzZXIgYWNjb3VudCBleHBpcmF0aW9uLiAgWW91IGNhbiBjcmVhdGUgdGVtcG9yYXJ5IHVzZXJzPC9wPjwvbGk+DQo8bGk+PHA+R3JvdXAgUHJvcGVydGllcy4gIFlvdSBjYW4gYXNrIGZvciBkaWZmZXJlbnQgaW5mb3JtYXRpb24gZnJvbSBtZW1iZXJzIG9mIGRpZmZlcmVudCBncm91cHM8L3A+PC9saT4NCjxsaT48cD5DYXBhYmxlIG9mIGhhbmRsaW5nIGh1bmRyZWRzIG9mIHVzZXJzPC9wPjwvbGk+DQo8bGk+PHA+SGFzIGFuIGV4dGVuc2l2ZSBBUEkgZm9yIGFkZGluZyBmdW5jdGlvbmFsaXR5PC9wPjwvbGk+DQo8L3VsPg0KPGgzPkhvdyBkbyBJIHVzZSBpdDwvaDM+DQo8dWw+DQo8bGk+PHA+QWZ0ZXIgaW5zdGFsbGF0aW9uIHlvdSBjYW4gYWNjZXNzIGFkbWluIHBhbmVsIHRvIHRoZSBGcm9udEVuZFVzZXJzIG1vZHVsZSB1bmRlciB0aGUgJnF1b3Q7VXNlcnMgJmFtcDsgZ0dyb3VwcyZxdW90OyBtZW51LjwvcD48L2xpPg0KPGxpPg0KPHA+U2Vjb25kbHksIHlvdSBzaG91bGQgZGVmaW5lIHByb3BlcnRpZXMuICBQcm9wZXJ0aWVzIGFyZSBlc3NlbnRpYWxseSBmaWVsZCBkZWZpbml0aW9ucywgaGVyZSB5b3Ugc3BlY2lmeSB0aGUgdHlwZSBvZiBpbmZvcm1hdGlvbiB5b3Ugd2FudCB0byBnYXRoZXIsIGFuZCBsaW1pdHMuIGkuZTogIE5hbWUsIEFnZSwgQ2l0eSwgU3RhdGUsIENvdW50cnksIEVtYWlsIGFkZHJlc3MsIGV0Yy48L3A+DQo8cD48Yj5Ob3RlOjwvYj4gWW91IGRvIG5vdCBuZWVkIHRvIGRlZmluZSBwcm9wZXJ0aWVzIGZvciB1c2VybmFtZSBhbmQgcGFzc3dvcmQsIHRoZXNlIHdpbGwgYmUgcHJvdmlkZWQgZm9yIHlvdTwvYj4NCjwvbGk+DQo8bGk+PHA+TmV4dCB5b3Ugc2hvdWxkIGNyZWF0ZSBvbmUgb3IgbW9yZSB1c2VyIGdyb3Vwcy4gIFdoZW4geW91IGNyZWF0ZSBhIGdyb3VwLCB5b3UgYXJlIGFza2VkIGZvciBhIGdyb3VwIG5hbWUsIGEgZGVzY3JpcHRpb24gYW5kIHRvIGFzc29jaWF0ZSBwcm9wZXJ0aWVzIHdpdGggdGhhdCBncm91cCwgc3BlY2lmeSB0aGUgcHJvcGVydGllcyBzb3J0IG9yZGVyLCBhbmQgd2V0aGVyIGl0IGlzIGFuIG9wdGlvbmFsLCByZXF1aXJlZCwgb3IgaGlkZGVuIGZpZWxkIDxpPihvZmYgaXMgYWxzbyB2YWxpZCk8L2k+PC9wPjwvbGk+DQo8bGk+PHA+PGI+Tm90ZTo8L2I+IEJlZm9yZSBwcm9jZWVkaW5nLCB5b3Ugc2hvdWxkIGVuc3VyZSB0aGF0IHRoZSBwcmVmZXJlbmNlcyBhcmUgc2V0IGNvcnJlY3RseS48L3A+PC9saT4NCjxsaT48cD5UaGlyZGx5IHlvdSBzaG91bGQgY3JlYXRlIHNvbWUgdXNlcnMuICBBZGRpbmcgdXNlcnMgaXMgYSB0d28gc3RlcCBwcm9jZXNzLiAgV2hlbiBjcmVhdGluZyBhIHVzZXIgeW91IGFyZSBhc2tlZCBmb3IgdGhlIHVzZXJuYW1lIGFuZCBwYXNzd29yZCwgYW5kIGFuIGV4cGlyeSBkYXRlIGZvciB0aGF0IHVzZXIuICBZb3UgdGhlbiBtdXN0IHNlbGVjdCB0aGUgZ3JvdXBzIHRoYXQgdGhhdCB1c2VyIGlzIGEgbWVtYmVyIG9mLCBhbmQgY2xpY2sgXCYjMDM5O05leHRcJiMwMzk7PC9wPg0KPHA+PGVtPk5vdGU6IDwvZW0+VGhpcyBpcyBhIGxhYm91ciBpbnRlbnNpdmUgYW5kIGJvcmluZyBwcm9jZXNzLCBpdCBpcyBlYXNpZXIgdG8gbGV0IHVzZXJzIHJlZ2lzdGVyIHRoZW1zZWx2ZXMsIGFuZCB0aGVuIHlvdSBjYW4gZWRpdCB0aGVpciBncm91cCBpbmZvcm1hdGlvbi4gIGJ1dCBmb3IgdGVzdGluZyBwdXJwb3NlcywgcGxlYXNlIGNyZWF0ZSBhdCBsZXN0IG9uZSB1c2VyPC9wPjwvbGk+DQo8bGk+PHA+TGFzdGx5LCBhZnRlciB0aGUgc3lzdGVtIGhhcyBkZXRlcm1pbmVkIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gZmllbGRzIHRvIGJlIHByZXNlbnRlZCBmb3IgdGhhdCB1c2VyLCB5b3UgYXJlIHByZXNlbnRlZCB3aXRoIGEgZm9ybSBhc2tpbmcgZm9yIGFsbCBvZiB0aGUgcmVxdWlyZWQgdXNlciBpbmZvcm1hdGlvbi4gIENvbXBsZXRlIHRoaXMgZm9ybSB0byBjb21wbGV0ZSB0aGUgdXNlciBhZGRpdGlvbjwvcD48L2xpPg0KPGxpPjxwPllvdSBhcmUgbm93IHJlYWR5IHRvIGFkZCB0aGUgZnJvbnQgZW5kIGZ1bmN0aW9uYWxpdHkgdG8geW91ciBzaXRlLiAgVGhpcyBpcyBhcyBzaW1wbGUgYXMgYWRkaW5nIHRoZSB7Y21zX21vZHVsZSBtb2R1bGU9RnJvbnRFbmRVc2Vyc30gdGFnIHRvIHlvdXIgcGFnZSBvciB0ZW1wbGF0ZTwvcD48L2xpPg0KPC91bD4NCjxoMz5TdXBwb3J0PC9oMz4NCjxwPlRoaXMgbW9kdWxlIGRvZXMgbm90IGluY2x1ZGUgY29tbWVyY2lhbCBzdXBwb3J0LiBIb3dldmVyLCB0aGVyZSBhcmUgYSBudW1iZXIgb2YgcmVzb3VyY2VzIGF2YWlsYWJsZSB0byBoZWxwIHlvdSB3aXRoIGl0OjwvcD4NCjx1bD4NCjxsaT5Gb3IgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbW9kdWxlLCBGQVFzLCBvciB0byBmaWxlIGEgQnVnIFJlcG9ydCBvciBidXkgY29tbWVyY2lhbCBzdXBwb3J0LCBwbGVhc2UgdmlzaXQgY2FsZ3V5XCYjMDM5O3MNCm1vZHVsZSBob21lcGFnZSBhdCA8YSBocmVmPSZhbXA7cXVvdDtodHRwOi8vdGVjaGNvbS5keW5kbnMub3JnJmFtcDtxdW90Oz50ZWNoY29tLmR5bmRucy5vcmc8L2E+LjwvbGk+DQo8bGk+QWRkaXRpb25hbCBkaXNjdXNzaW9uIG9mIHRoaXMgbW9kdWxlIG1heSBhbHNvIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSZhbXA7cXVvdDtodHRwOi8vZm9ydW0uY21zbWFkZXNpbXBsZS5vcmcmYW1wO3F1b3Q7PkNNUyBNYWRlIFNpbXBsZSBGb3J1bXM8L2E+LjwvbGk+DQo8bGk+VGhlIGF1dGhvciwgY2FsZ3V5MTAwMCwgY2FuIG9mdGVuIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSZhbXA7cXVvdDtpcmM6Ly9pcmMuZnJlZW5vZGUubmV0LyNjbXMmYW1wO3F1b3Q7PkNNUyBJUkMgQ2hhbm5lbDwvYT4uPC9saT4NCjxsaT5MYXN0bHksIHlvdSBtYXkgaGF2ZSBzb21lIHN1Y2Nlc3MgZW1haWxpbmcgdGhlIGF1dGhvciBkaXJlY3RseS48L2xpPiAgDQo8L3VsPg0KPGgzPlBhcmFtZXRlcnM8L2gzPg0KPHVsPg0KPGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gZm9ybT0mcXVvdDtuYW1lJnF1b3Q7PC9saT4NCjxwPkZvcm1zOg0KPHVsPg0KIDxsaT48ZW0+bG9naW48L2VtPiAtIERpc3BsYXkgdGhlIGxvZ2luIGZvcm08L2xpPg0KIDxsaT48ZW0+bG9nb3V0PC9lbT4gLSBEaXNwbGF5IHRoZSBsb2dvdXQgZm9ybTwvbGk+DQogPGxpPjxlbT5jaGFuZ2VzZXR0aW5nczwvZW0+IC0gRGlzcGxheSB0aGUgY2hhbmdlIHNldHRpbmdzIGZvcm08L2xpPg0KIDxsaT48ZW0+Zm9yZ290cHc8L2VtPiAtIERpc3BsYXkgdGhlIGZvcmdvdCBwYXNzd29yZCBmb3JtPC9saT4NCjwvdWw+DQo8L3A+DQo8bGk+PGVtPihvcHRpb25hbCk8L2VtPiByZXR1cm50bz0mcXVvdDtwYWdlJnF1b3Q7PC9saT4NCjxwPlVzZWQgd2l0aCB0aGUgbG9naW4sIGxvZ291dCwgYW5kIGNoYW5nZXNldHRpbmdzIGZvcm1zLCB0aGlzIHBhcmFtZXRlciBjb250YWlucyB0aGUgcGFnZSBpZCBvciBhbGlhcyBvZiBhIHBhZ2UgdG8gcmVkaXJlY3QgdG8sIHdoZW4gdGhlIGZvcm0gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZDwvcD4NCjwvdWw+DQo8cD5BcyBwZXIgdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBhcy1pcy4gUGxlYXNlIHJlYWQgdGhlIHRleHQNCm9mIHRoZSBsaWNlbnNlIGZvciB0aGUgZnVsbCBkaXNjbGFpbWVyLjwvcD4NCjxoMz5SZXF1aXJlbWVudHM8L2gzPg0KPHA+SW4gb3JkZXIgdG8gaW1wbGVtZW50IHRoZSBmb3Jnb3R0ZW4gcGFzc3dvcmQgZnVuY3Rpb25hbGl0eSwgdGhpcyBtb2R1bGUgcmVxdWlyZXMgdGhlIENNU01haWxlciBtb2R1bGUgdG8gYmUgcHJldmlvdXNseSBpbnN0YWxsZWQ8L3A+DQo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4NCjxwPkNvcHlyaWdodCAmY29weTsgMjAwNSwgUm9iZXJ0IENhbXBiZWwgPGEgaHJlZj0mYW1wO3F1b3Q7bWFpbHRvOmNhbGd1eTEwMDBAaG90bWFpbC5jb20mYW1wO3F1b3Q7PjxjYWxndXkxMDAwQGhvdG1haWwuY29tPjwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4NCjxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIHJlbGVhc2VkIHVuZGVyIHRoZSA8YSBocmVmPSZhbXA7cXVvdDtodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwmYW1wO3F1b3Q7PkdOVSBQdWJsaWMgTGljZW5zZTwvYT4uIFlvdSBtdXN0IGFncmVlIHRvIHRoaXMgbGljZW5zZSBiZWZvcmUgdXNpbmcgdGhlIG1vZHVsZS48L3A+JzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKIEZyb250RW5kVXNlcnMuIEEgcGx1Z2luIGZvciBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIENvcHlyaWdodCAoYykgMjAwNC0wNSBieSBSb2JlcnQgQ2FtcGJlbGwgPHJvYkB0ZWNoY29tLmR5bmRucy5vcmc+CgogVHJhbnNsYXRpb25zOgogRnJlbmNoOiBQYXRyaWNpYSBCcnVuLCBodHRwOi8vd3d3LmJydW1hbHNvbHN0aWNlLmNvbQogTm9yd2VnaWFuIChib2ttP2wpOiBSb2dlciAiU3RpZ21hIiBLbnV0c2VuIDxzdGlnbWFzdGVyQGdtYWlsLmNvbT4KCiBDTVMtIENNUyBNYWRlIFNpbXBsZSBpcyBDb3B5cmlnaHQgKGMpIFRlZCBLdWxwICh3aXNoeUB1c2Vycy5zZi5uZXQpCiBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwoKIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCgogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQoqLwoKICAgICRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKICAgICRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKICAgIAogICAgJHRhYm9wdGFycmF5ID0gYXJyYXkoJ215c3FsJyA9PiAnVFlQRT1NeUlTQU0nKTsKICAgIAogICAgLy9Vc2VyIGxpc3QKICAgICRmbGRzID0gIgogICAgICAgICAgICAgaWQgSSBLRVksCgkgICAgIHVzZXJuYW1lIEMoODApIE5PVCBOVUxMLAogICAgICAgICAgICAgcGFzc3dvcmQgQygzMikgTk9UIE5VTEwsCiAgICAgICAgICAgICBjcmVhdGVkYXRlIFQsCiAgICAgICAgICAgICBleHBpcmVzIFQKICAgICAgICAgICAgIjsKICAgICRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3VzZXJzIiwgCgkJCQkgICAgICAkZmxkcywgJHRhYm9wdGFycmF5ICk7CiAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCAkc3FsYXJyYXkgKTsKICAgICRkYi0+Q3JlYXRlU2VxdWVuY2UoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfdXNlcnNfc2VxIiApOwogICAgCiAgICAvL0dyb3VwIGxpc3QKICAgICRmbGRzID0gIgoJICAgICBpZCBJIEtFWSwKCSAgICAgZ3JvdXBuYW1lIEMoMzIpLAoJICAgICBncm91cGRlc2MgQygxMjgpCgkgICAgIjsKICAgICRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2dyb3VwcyIsCgkJCQkgICAgICAkZmxkcywgJHRhYm9wdGFycmF5ICk7CiAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCAkc3FsYXJyYXkgKTsKICAgICRkYi0+Q3JlYXRlU2VxdWVuY2UoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfZ3JvdXBzX3NlcSIgKTsKCiAgICAvLyBsb2dnZWRpbgogICAgJGZsZHMgPSAiCgkgICAgIHNlc3Npb25pZCBDKDMyKSwKCSAgICAgbGFzdHVzZWQgSSwKCSAgICAgdXNlcmlkIEkKCSAgICAiOwogICAgJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfbG9nZ2VkaW4iLAoJCQkJICAgICAgJGZsZHMsICR0YWJvcHRhcnJheSApOwogICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSggJHNxbGFycmF5ICk7CiAgICAKICAgIC8vQ29ubmVjdGlvbnMgYmV0d2VlbiB1c2VycyBhbmQgZ3JvdXBzCiAgICAkZmxkcyA9ICIKCSAgICAgdXNlcmlkIEksCgkgICAgIGdyb3VwaWQgSQoJICAgICI7CiAgICAkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19iZWxvbmdzIiwKCQkJCSAgICAgICRmbGRzLCAkdGFib3B0YXJyYXkgKTsKICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoICRzcWxhcnJheSApOwoKICAgIC8vcHJvcGVydHkgZGVmaW5pdGlvbgogICAgJGZsZHMgPSAiCiAgICAgICAgICAgICBuYW1lICAgICAgQyg0MCkgS0VZLAogICAgICAgICAgICAgcHJvbXB0ICAgIEMoODApIE5PVCBOVUxMLAogICAgICAgICAgICAgdHlwZSAgICAgIEMoMjApIE5PVCBOVUxMLAogICAgICAgICAgICAgbGVuZ3RoICAgIEksCiAgICAgICAgICAgICBtYXhsZW5ndGggSQogICAgICAgICAgICAiOwogICAgJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU3FsKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfcHJvcGRlZm4iLAoJCQkJICAgICAgJGZsZHMsICR0YWJvcHRhcnJheSApOwogICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSggJHNxbGFycmF5ICk7CgogICAgLy9kcm9wZG93biBzZWxlY3Qgb3B0aW9ucwogICAgJGZsZHMgPSAiCiAgICAgICAgICAgICBvcmRlcl9pZAkJSSwKICAgICAgICAgICAgIG9wdGlvbl9uYW1lCUMoNDApIE5PVCBOVUxMLAogICAgICAgICAgICAgb3B0aW9uX3RleHQJQyg4MCkgTk9UIE5VTEwsCiAgICAgICAgICAgICBjb250cm9sX25hbWUJQyg0MCkgTk9UIE5VTEw7CiAgICAgICAgICAgICI7CiAgICAkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTcWwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19kcm9wZG93bnMiLAoJCQkJICAgICAgJGZsZHMsICR0YWJvcHRhcnJheSApOwogICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSggJHNxbGFycmF5ICk7CgogICAgLy8gZ3JvdXAgcHJvcGVydHkgbWFwCiAgICAkZmxkcyA9ICIKICAgICAgICAgICAgICBuYW1lICAgIEMoNDApIEtFWSwKICAgICAgICAgICAgICBncm91cF9pZCBJIEtFWSwKICAgICAgICAgICAgICBzb3J0X2tleSBJLCAKICAgICAgICAgICAgICByZXF1aXJlZCBJIE5PVCBOVUxMCiAgICAgICAgICAgICI7CiAgICAkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTcWwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19ncm91cHByb3BtYXAiLAoJCQkJICAgICAgJGZsZHMsICR0YWJvcHRhcnJheSApOwogICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSggJHNxbGFycmF5ICk7CgogICAgLy91c2VyIHByb3BlcnRpZXMKICAgICRmbGRzID0gIgoJICAgICBpZCBJIEtFWSwKCSAgICAgdXNlcmlkIEksCgkgICAgIHRpdGxlIEMoMTAwKSwKCSAgICAgZGF0YSBDKDI1NSkKCSAgICAiOwogICAgJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfcHJvcGVydGllcyIsCgkJCQkgICAgICAkZmxkcywgJHRhYm9wdGFycmF5ICk7CiAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCAkc3FsYXJyYXkgKTsKICAgICRkYi0+Q3JlYXRlU2VxdWVuY2UoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfcHJvcGVydGllc19zZXEiICk7CgogICAgLy8gZm9yZ290dGVuIHBhc3N3b3JkIHN0dWZmCiAgICAkZmxkcyA9ICIKCSAgICAgdXNlcmlkIEkgS0VZLAogICAgICAgICAgICAgY29kZSBDKDI1KSwKICAgICAgICAgICAgIGNyZWF0ZWQgVAoJICAgICI7CiAgICAkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc190ZW1wY29kZSIsCgkJCQkgICAgICAkZmxkcywgJHRhYm9wdGFycmF5ICk7CiAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCAkc3FsYXJyYXkgKTsKCiAgICAvLyB0ZW1wbGF0ZXMKICAgICR0aGlzLT5TZXRUZW1wbGF0ZSgnZmV1c2Vyc19sb2dpbmZvcm0nLCAkdGhpcy0+ZGZsdF9sb2dpbmZvcm10ZW1wbGF0ZSk7CiAgICAkdGhpcy0+U2V0VGVtcGxhdGUoJ2ZldXNlcnNfbG9nb3V0Zm9ybScsICR0aGlzLT5kZmx0X2xvZ291dGZvcm10ZW1wbGF0ZSk7CiAgICAkdGhpcy0+U2V0VGVtcGxhdGUoJ2ZldXNlcnNfY2hhbmdlc2V0dGluZ3Nmb3JtJywgJHRoaXMtPmRmbHRfY2hhbmdlc2V0dGluZ3N0ZW1wbGF0ZSk7IAogICAgJHRoaXMtPlNldFRlbXBsYXRlKCdmZXVzZXJzX2ZvcmdvdHBhc3N3b3JkZm9ybScsICR0aGlzLT5kZmx0X2ZvcmdvdHBhc3N3b3JkdGVtcGxhdGUxKTsKICAgICR0aGlzLT5TZXRUZW1wbGF0ZSgnZmV1c2Vyc19mb3Jnb3RwYXNzd29yZGVtYWlsZm9ybScsICR0aGlzLT5kZmx0X2ZvcmdvdHBhc3N3b3JkdGVtcGxhdGUyKTsKICAgICR0aGlzLT5TZXRUZW1wbGF0ZSgnZmV1c2Vyc19mb3Jnb3RwYXNzd29yZHZlcmlmeWZvcm0nLCAkdGhpcy0+ZGZsdF9mb3Jnb3RwYXNzd29yZHRlbXBsYXRlMyk7CgogICAgLy8gcHJlZmVyZW5jZXMKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtaW5fcGFzc3dvcmRsZW5ndGgnLCA2KTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtYXhfcGFzc3dvcmRsZW5ndGgnLCAyMCk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnbWluX3VzZXJuYW1lbGVuZ3RoJywgNCk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnbWF4X3VzZXJuYW1lbGVuZ3RoJywgMjApOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3VzZXJfc2Vzc2lvbl9leHBpcmVzJywgMTgwMCk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGVmYXVsdF9ncm91cCcsIC0xKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkb19zbXRwX3ZhbGlkYXRlX2VtYWlsJywgMCk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgncmVxdWlyZWRfZmllbGRfbWFya2VyJywgJyonKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdyZXF1aXJlZF9maWVsZF9jb2xvcicsICdibHVlJyk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgncmVxdWlyZV9vbmVncm91cCcsIDEpOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2hpZGRlbl9maWVsZF9tYXJrZXInLCAnIScpOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2hpZGRlbl9maWVsZF9jb2xvcicsICdncmVlbicpOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3BhZ2VpZF9mb3Jnb3RwYXNzd2QnLCAnJyk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgncGFnZWlkX2NoYW5nZXNldHRpbmdzJywgJycpOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3BhZ2VpZF9sb2dpbicsJycpOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3BhZ2VpZF9sb2dvdXQnLCcnKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdhbGxvd19kdXBsaWNhdGVfZW1haWxzJywxKTsgLy8gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmxpdHkKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdwYXNzd29yZGZsZGxlbmd0aCcsIDIwKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCd1c2VybmFtZWZsZGxlbmd0aCcsIDIwKTsKCiAgICAvLyBwZXJtaXNzaW9ucwogICAgJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oJ01vZGlmeSBGcm9udEVuZFVzZXJQcm9wcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTW9kaWZ5IEZyb250RW5kVXNlciBQcm9wZXJ0aWVzJyk7Cj8+]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKIEZyb250RW5kVXNlcnMuIEEgcGx1Z2luIGZvciBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIENvcHlyaWdodCAoYykgMjAwNC0wNSBieSBSb2JlcnQgQ2FtcGJlbGwgPHJvYkB0ZWNoY29tLmR5bmRucy5vcmc+CgogVHJhbnNsYXRpb25zOgogRnJlbmNoOiBQYXRyaWNpYSBCcnVuLCBodHRwOi8vd3d3LmJydW1hbHNvbHN0aWNlLmNvbQogTm9yd2VnaWFuIChib2ttP2wpOiBSb2dlciAiU3RpZ21hIiBLbnV0c2VuIDxzdGlnbWFzdGVyQGdtYWlsLmNvbT4KCiBDTVMtIENNUyBNYWRlIFNpbXBsZSBpcyBDb3B5cmlnaHQgKGMpIFRlZCBLdWxwICh3aXNoeUB1c2Vycy5zZi5uZXQpCiBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwoKIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCgogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQoqLwoKICAgICRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKICAgICRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoICRkYiApOwogICAgJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc191c2VycyIgKTsKICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKICAgICRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfZ3JvdXBzIiApOwogICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwogICAgJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19sb2dnZWRpbiIgKTsKICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKICAgICRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfYmVsb25ncyIgKTsKICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKICAgICRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfcHJvcGVydGllcyIgKTsKICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKICAgICRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfcHJvcGRlZm4iICk7CiAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiAgICAkc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2Ryb3Bkb3ducyIgKTsKICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKICAgICRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfZ3JvdXBwcm9wbWFwIiApOwogICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwogICAgJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc190ZW1wY29kZSIgKTsKICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKICAgIAogICAgJGRiLT5Ecm9wU2VxdWVuY2UoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfdXNlcnNfc2VxIiApOwogICAgJGRiLT5Ecm9wU2VxdWVuY2UoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfZ3JvdXBzX3NlcSIgKTsKICAgICRkYi0+RHJvcFNlcXVlbmNlKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3Byb3BlcnRpZXNfc2VxIiApOwoKICAgIC8vIHRlbXBsYXRlcwogICAgJHRoaXMtPkRlbGV0ZVRlbXBsYXRlKCdmZXVzZXJzX2xvZ2luZm9ybScpOyAKICAgICR0aGlzLT5EZWxldGVUZW1wbGF0ZSgnZmV1c2Vyc19sb2dvdXRmb3JtJyk7IAogICAgJHRoaXMtPkRlbGV0ZVRlbXBsYXRlKCdmZXVzZXJzX2NoYW5nZXNldHRpbmdzZm9ybScpOyAKICAgICR0aGlzLT5EZWxldGVUZW1wbGF0ZSgnZmV1c2Vyc19mb3Jnb3RwYXNzd29yZGZvcm0nKTsKICAgICR0aGlzLT5EZWxldGVUZW1wbGF0ZSgnZmV1c2Vyc19mb3Jnb3RwYXNzd29yZGVtYWlsZm9ybScpOwogICAgJHRoaXMtPkRlbGV0ZVRlbXBsYXRlKCdmZXVzZXJzX2ZvcmdvdHBhc3N3b3JkdmVyaWZ5Zm9ybScpOwoKICAgIC8vIHByZWZlcmVuY2VzCiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnbWluX3Bhc3N3b3JkbGVuZ3RoJyk7CiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnbWF4X3Bhc3N3b3JkbGVuZ3RoJyk7CiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnbWluX3VzZXJuYW1lbGVuZ3RoJyk7CiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnbWF4X3VzZXJuYW1lbGVuZ3RoJyk7CiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgndXNlcl9zZXNzaW9uX2V4cGlyZXMnKTsKICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdkZWZhdWx0X2dyb3VwJyk7CiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnZG9fc210cF92YWxpZGF0ZV9lbWFpbCcpOwogICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ3JlcXVpcmVkX2ZpZWxkX21hcmtlcicpOwogICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ3JlcXVpcmVkX2ZpZWxkX2NvbG9yJyk7CiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgncmVxdWlyZV9vbmVncm91cCcpOwogICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ2hpZGRlbl9maWVsZF9tYXJrZXInKTsKICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdoaWRkZW5fZmllbGRfY29sb3InKTsKICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdwYWdlaWRfZm9yZ290cGFzc3dkJyk7CiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgncGFnZWlkX2NoYW5nZXNldHRpbmdzJyk7CiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgncGFnZWlkX2xvZ2luJyk7CiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgncGFnZWlkX2xvZ291dCcpOwogICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ2N1cnJlbnRfZ3JvdXAnKTsKICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdjdXJyZW50X3JlZ2V4Jyk7CiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnY3VycmVudF9saW1pdCcpOwogICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ2N1cnJlbnRfc29ydCcpOwogICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ2N1cnJlbnRfcHJvcHNlbCcpOwogICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ2N1cnJlbnRfcHJvcHZhbCcpOwogICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ2FjdGl2ZV90YWInKTsKICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdhbGxvd19kdXBsaWNhdGVfZW1haWxzJyk7CiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgncGFzc3dvcmRmbGRsZW5ndGgnKTsKICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCd1c2VybmFtZWZsZGxlbmd0aCcpOwoKICAgIC8vIHBlcm1pc3Npb25zCiAgICAkdGhpcy0+UmVtb3ZlUGVybWlzc2lvbignTW9kaWZ5IEZyb250RW5kVXNlclByb3BzJyk7Cj8+]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLyoKIEZyb250RW5kVXNlcnMuIEEgcGx1Z2luIGZvciBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIENvcHlyaWdodCAoYykgMjAwNC0wNSBieSBSb2JlcnQgQ2FtcGJlbGwgPHJvYkB0ZWNoY29tLmR5bmRucy5vcmc+CgogVHJhbnNsYXRpb25zOgogRnJlbmNoOiBQYXRyaWNpYSBCcnVuLCBodHRwOi8vd3d3LmJydW1hbHNvbHN0aWNlLmNvbQogTm9yd2VnaWFuIChib2ttP2wpOiBSb2dlciAiU3RpZ21hIiBLbnV0c2VuIDxzdGlnbWFzdGVyQGdtYWlsLmNvbT4KCiBDTVMtIENNUyBNYWRlIFNpbXBsZSBpcyBDb3B5cmlnaHQgKGMpIFRlZCBLdWxwICh3aXNoeUB1c2Vycy5zZi5uZXQpCiBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwoKIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCgogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQoqLwoKICAgIHN3aXRjaCggJG9sZHZlcnNpb24gKQogICAgICB7CiAgICAgICAgY2FzZSAnMC4xLjAnOgogICAgICAgIGNhc2UgJzAuMS4xJzoKICAgICAgICAgIHsKICAgICAgICAgICAgLy8gcGVybWlzc2lvbnMKICAgICAgICAgICAgJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oJ01vZGlmeSBGcm9udEVuZFVzZXJQcm9wcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01vZGlmeSBGcm9udEVuZFVzZXIgUHJvcGVydGllcycpOwogICAgICAgICAgICAkdGhpcy0+U2V0VGVtcGxhdGUoJ2ZldXNlcnNfZm9yZ290cGFzc3dvcmRmb3JtJywgJHRoaXMtPmRmbHRfZm9yZ290cGFzc3dvcmR0ZW1wbGF0ZTEpOwogICAgICAgICAgICAkdGhpcy0+U2V0VGVtcGxhdGUoJ2ZldXNlcnNfZm9yZ290cGFzc3dvcmRlbWFpbGZvcm0nLCAkdGhpcy0+ZGZsdF9mb3Jnb3RwYXNzd29yZHRlbXBsYXRlMik7CiAgICAgICAgICAgICR0aGlzLT5TZXRUZW1wbGF0ZSgnZmV1c2Vyc19mb3Jnb3RwYXNzd29yZHZlcmlmeWZvcm0nLCAkdGhpcy0+ZGZsdF9mb3Jnb3RwYXNzd29yZHRlbXBsYXRlMyk7CgogICAgICAgICAgICAvLyBmb3Jnb3R0ZW4gcGFzc3dvcmQgc3R1ZmYKICAgICAgICAgICAgJGZsZHMgPSAiCgkgICAgICAgICAgICAgdXNlcmlkIEkgS0VZLAogICAgICAgICAgICAgICAgICAgICBjb2RlIEMoMjUpLAogICAgICAgICAgICAgICAgICAgICBjcmVhdGVkIFQKCSAgICAgICAgICAgICI7CiAgICAgICAgICAgICRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKICAgICAgICAgICAgJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwogICAgICAgICAgICAkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc190ZW1wY29kZSIsCgkJCQkgICAgICAgICAgICAgICRmbGRzLCAkdGFib3B0YXJyYXkgKTsKICAgICAgICAgICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSggJHNxbGFycmF5ICk7CiAgICAgICAgICAgIC8vIG5vdGljZSBubyBicmVhawogICAgICAgICAgfQoKICAgICAgICBjYXNlICcwLjEuMic6CiAgICAgICAgICB7CiAgICAgICAgICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdwYWdlaWRfZm9yZ290cGFzc3dkJywgJycpOwogICAgICAgICAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgncGFnZWlkX2NoYW5nZXNldHRpbmdzJywgJycpOwogICAgICAgICAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgncGFnZWlkX2xvZ2luJywnJyk7CiAgICAgICAgICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdwYWdlaWRfbG9nb3V0JywnJyk7CiAgICAgICAgICAgIC8vIG5vdGljZSBubyBicmVhawogICAgICAgICAgfQoJY2FzZSAnMC4xLjMnOgoJY2FzZSAnMC4xLjQnOgoJY2FzZSAnMC4xLjUnOgoJY2FzZSAnMC4xLjYnOgoJICB7CgkJLy9kcm9wZG93biBzZWxlY3Qgb3B0aW9ucwoJCSRkYiA9JiAkdGhpcy0+R2V0RGIoKTsKCQkkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CgkJJHRhYm9wdGFycmF5ID0gYXJyYXkoJ215c3FsJyA9PiAnVFlQRT1NeUlTQU0nKTsKCQkkZmxkcyA9ICIKCQkJCSBvcmRlcl9pZAkJSSwKCQkJCSBvcHRpb25fbmFtZQlDKDQwKSBOT1QgTlVMTCwKCQkJCSBvcHRpb25fdGV4dAlDKDgwKSBOT1QgTlVMTCwKCQkJCSBjb250cm9sX25hbWUJQyg0MCkgTk9UIE5VTEw7CgkJCQkiOwoJCSRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNxbChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2Ryb3Bkb3ducyIsCgkJCQkJCSAgJGZsZHMsICR0YWJvcHRhcnJheSApOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoICRzcWxhcnJheSApOwoKICAgICAgICAgICAgICAgIC8vIGFuZCBjbGVhbnVwIHByb3BlcnR5IG5hbWVzCiAgICAgICAgICAgICAgICAkcSA9ICd1cGRhdGUgJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV9mZXVzZXJzX3Byb3BkZWZuIHNldCBuYW1lID0gbGNhc2UocmVwbGFjZShuYW1lLCIgIiwiXyIpKSc7CiAgICAgICAgICAgICAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxICk7CgkgIH0gLy9jYXNlCgljYXNlICcwLjEuNyc6CiAgICAgICAgICB7CgkJJGRiID0mICR0aGlzLT5HZXREYigpOwoJCSRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKICAgICAgICAgICAgICAgICRzcWxhcnJheSA9ICRkaWN0LT5BZGRjb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19wcm9wZGVmbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXhsZW5ndGggSSIpOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoICRzcWxhcnJheSApOwogICAgICAgICAgfSAvLyBjYXNlCiAgICAgICAgY2FzZSAnMS4wLjAnOgogICAgICAgICAgewogICAgICAgICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2FsbG93X2R1cGxpY2F0ZV9lbWFpbHMnLDEpOwogICAgICAgICAgfQogICAgICAgIGNhc2UgJzEuMC4xJzoKICAgICAgICAgIHsKICAgICAgICAgICAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgncGFzc3dvcmRmbGRsZW5ndGgnLCAyMCk7CiAgICAgICAgICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3VzZXJuYW1lZmxkbGVuZ3RoJywgMjApOwogICAgICAgICAgfQogICAgICAgfSAvLyBzd2l0Y2gKPz4=]]></data>
	</file>
	<file>
	  <filename>/Random.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHANCg0KLyoqDQogKiBHZW5lcmF0ZSByYW5kb20gY2hhcmFjdGVycy4NCiAqDQogKiBAYXV0aG9yICAgIExhdXJlbnRpdSBUYW5hc2UgPGV4cGVydHBocEB5YWhvby5jb20+DQogKiBAdmVyc2lvbiAgIDEuMQ0KICovDQoNCmNsYXNzIFJhbmRvbQ0Kew0KCS8qKg0KCSAqIFNldCBkZWZhdWx0IGNoYXJhY3RlcnMuDQogICAgICoNCiAgICAgKiBAdmFyICAgICAgc3RyaW5nDQogICAgICogQGFjY2VzcyAgIHByaXZhdGUNCiAgICAgKi8NCg0KCXZhciAkX3ZjcnM7DQoNCgkvKioNCgkgKiBJZiBoYXZlIG51bWJlcg0KICAgICAqDQogICAgICogQHZhciAgICAgIGJvb2wNCiAgICAgKiBAYWNjZXNzICAgcHJpdmF0ZQ0KICAgICAqLw0KDQoJdmFyICRfdm51bTsNCg0KCS8qKg0KCSAqIElmIGRvZXNuJ3QgaGF2ZSBudW1iZXINCiAgICAgKg0KICAgICAqIEB2YXIgICAgICBib29sDQogICAgICogQGFjY2VzcyAgIHByaXZhdGUNCiAgICAgKi8NCg0KCXZhciAkX3Zub3Q7DQoNCgkvKioNCgkgKiBDb25zdHJ1Y3Rvcg0KCSAqDQoJICogU2V0IGRlZmF1bHQgdmFsdWVzDQoJICoNCgkgKiBAcGFyYW0gIHN0cmluZyAgJGNycyAgIENoYXJhY3RlcnMgb3V0cHV0DQoJICogQHBhcmFtICBib29sICAgICRudW0gICBXaXRoIG51bWJlcg0KCSAqIEBwYXJhbSAgYm9vbCAgICAkbm90ICAgV2l0aCBub3QgbnVtYmVyDQoJICovDQoNCglmdW5jdGlvbiBSYW5kb20oJGNycyA9IGZhbHNlLCAkbnVtID0gZmFsc2UsICRub3QgPSBmYWxzZSl7DQoJCSR0aGlzLT5fdm51bSA9ICRudW07DQoJCSR0aGlzLT5fdm5vdCA9ICRub3Q7DQoJCWlmKCEkY3JzKXsNCgkJCSR0aGlzLT5fdmNycyA9ICIwMTIzNDU2Nzg5Ii4NCgkJCQkiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLg0KCQkJCSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI7DQoJCX1lbHNlew0KCQkJJHRoaXMtPl92Y3JzID0gJGNyczsNCgkJCWlmKCgkbnVtIHx8ICRub3QpICYmICEkdGhpcy0+X3JlYygkY3JzLCAkbnVtLCAkbm90KSl7DQoJCQkJaWYoJG51bSAmJiAkbm90KSAkZXJyID0gIm51bWJlciBvciBub3QgbnVtYmVyIjsNCgkJCQllbHNlaWYoJG51bSkgJGVyciA9ICJudW1iZXIiOw0KCQkJCWVsc2VpZigkbm90KSAkZXJyID0gIm5vdCBudW1iZXIiOw0KCQkJCWVsc2UgJGVyciA9ICJjb21wYXJhdGlvbiI7DQoJCQkJdHJpZ2dlcl9lcnJvcigiQ2xhc3MgUmFuZG9tIC0gU3RyaW5nIGlucHV0IFsgIi4kY3JzLiIgXSBkb2Vzbid0IGhhdmUgIi4kZXJyLCBFX1VTRVJfRVJST1IpOw0KCQkJfQ0KCQl9DQoJfQ0KDQoJLyoqDQoJICogQ29tcGFyZSBpbnB1dCBzdHJpbmcNCgkgKg0KCSAqIEBhY2Nlc3MgIHByaXZhdGUNCgkgKiBAcGFyYW0gICBzdHJpbmcgICAkc3RyICAgICAgQ2hhcmFjdGVycyBpbnB1dA0KCSAqIEBwYXJhbSAgIGJvb2wgICAgICRudW1iZXIgICBIYXZlIG51bWJlcg0KCSAqIEBwYXJhbSAgIGJvb2wgICAgICRub3RudW0gICBIYXZlIG5vdCBudW1iZXINCgkgKiBAcmV0dXJuICBib29sICAgICBJZiBoYXZlIG51bWJlciBvci9hbmQgbm90IG51bWJlcg0KCSAqLw0KDQoJZnVuY3Rpb24gX3JlYygkc3RyLCAkbnVtYmVyID0gdHJ1ZSwgJG5vdG51bSA9IHRydWUpew0KCQkkY250ID0gc3RybGVuKCRzdHIpOw0KCQkkc2V0MSA9ICRzZXQyID0gZmFsc2U7DQoJCWlmKCRudW1iZXIgfHwgJG5vdG51bSl7DQoJCQlmb3IoJGk9MDskaTwkY250OyRpKyspew0KCQkJCWlmKCRzdHJ7JGl9ID09PSBzdHJ2YWwoaW50dmFsKCRzdHJ7JGl9KSkpICRzZXQxID0gdHJ1ZTsNCgkJCQllbHNlICRzZXQyID0gdHJ1ZTsNCgkJCQlpZigkc2V0MSAmJiAkc2V0MikgYnJlYWs7DQoJCQl9DQoJCQlpZigkbnVtYmVyICYmICRub3RudW0pIHJldHVybiAoJHNldDEgJiYgJHNldDIpOw0KCQkJZWxzZWlmKCRudW1iZXIpIHJldHVybiAkc2V0MTsNCgkJCWVsc2VpZigkbm90bnVtKSByZXR1cm4gJHNldDI7DQoJCQllbHNlIHJldHVybiB0cnVlOw0KCQl9ZWxzZSByZXR1cm4gdHJ1ZTsNCgl9DQoNCgkvKioNCgkgKiBHZW5lcmF0ZSByYW5kb20gY2hhcmFjdGVycw0KCSAqDQoJICogQGFjY2VzcyAgcHVibGljDQoJICogQHBhcmFtICAgaW50ICAgICAgJGxlbiAgIExlbmd0aCBvZiB0aGUgc3RyaW5nIHlvdSB3YW50IGdlbmVyYXRlZA0KCSAqIEByZXR1cm4gIHN0cmluZyAgIFJhbmRvbSBjaGFyYWN0ZXJzDQoJICovDQoNCglmdW5jdGlvbiBnZXQoJGxlbil7DQoJCWlmKCEoaXNfaW50KCRsZW4pICYmICRsZW4gPiAwKSkgcmV0dXJuICR0aGlzLT5fdmNyczsNCgkJJHJldCA9ICIiOw0KCQkkY250ID0gc3RybGVuKCR0aGlzLT5fdmNycyktMTsNCgkJZm9yKCRpPTA7JGk8JGxlbjskaSsrKSAkcmV0IC49ICR0aGlzLT5fdmNyc3tyYW5kKDAsICRjbnQpfTsNCgkJaWYoJHRoaXMtPl92bnVtIHx8ICR0aGlzLT5fdm5vdCkgcmV0dXJuICR0aGlzLT5fcmVjKCRyZXQsICR0aGlzLT5fdm51bSwgJHRoaXMtPl92bm90KSA/ICRyZXQgOiBSYW5kb206OmdldCgkbGVuKTsNCgkJZWxzZSByZXR1cm4gJHJldDsNCgl9DQoNCn0NCg0KPz4=]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/addgroup.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyR0aXRsZX0Ke2lmICRtZXNzYWdlICE9ICcnfQogIHtpZiAkZXJyb3IgIT0gJyd9CiAgICA8cD48Zm9udCBjb2xvcj0icmVkIj57JG1lc3NhZ2V9PC9mb250PjwvcD4KICB7ZWxzZX0KICAgIDxwPnskbWVzc2FnZX08L3A+CiAgey9pZn0Key9pZn0KeyRzdGFydGZvcm19CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfZ3JvdXBuYW1lfTwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfZ3JvdXBuYW1lfTwvcD4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9ncm91cGRlc2N9PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9ncm91cGRlc2N9PC9wPgogIDwvZGl2Pgp7aWYgJHByb3Bjb3VudCA+IDB9Cjxici8+Cjx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InBhZ2V0YWJsZSI+Cgk8dGhlYWQ+CgkJPHRyPgoJCQk8dGg+eyRuYW1ldGV4dH08L3RoPgoJICAgICAgICAgICAgICAgIDx0aD57JHByb21wdHRleHR9PC90aD4KCQkJPHRoPnskdHlwZXRleHR9PC90aD4KCSAgICAgICAgICAgICAgICA8dGg+eyRzb3J0b3JkZXJ0ZXh0fTwvdGg+CgkJCTx0aD57JHJlcXVpcmVkdGV4dH08L3RoPgoJCTwvdHI+Cgk8L3RoZWFkPgoJPHRib2R5Pgp7Zm9yZWFjaCBmcm9tPSRwcm9wcyBpdGVtPXByb3BlfQoJCTx0ciBjbGFzcz0ieyRwcm9wLT5yb3djbGFzc30iPgoJCQk8dGQ+eyRwcm9wZS0+bmFtZX08L3RkPgoJCQk8dGQ+eyRwcm9wZS0+cHJvbXB0fTwvdGQ+CgkJCTx0ZD57JHByb3BlLT50eXBlfTwvdGQ+CgkgICAgICAgICAgICAgICAgPHRkPnskcHJvcGUtPnNvcnRvcmRlcn08L3RkPgoJCQk8dGQ+eyRwcm9wZS0+cmVxdWlyZWR9PC90ZD4KCQk8L3RyPgp7L2ZvcmVhY2h9Cgk8L3Rib2R5Pgo8L3RhYmxlPgp7L2lmfQogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaGlkZGVufXskc3VibWl0fXskY2FuY2VsfTwvcD4KICA8L2Rpdj4KeyRlbmRmb3JtfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/addprop.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyR0aXRsZX0Ke2lmICRtZXNzYWdlICE9ICcnfQogIHtpZiAkZXJyb3IgIT0gJyd9CiAgICA8cD48Zm9udCBjb2xvcj0icmVkIj57JG1lc3NhZ2V9PC9mb250PjwvcD4KICB7ZWxzZX0KICAgIDxwPnskbWVzc2FnZX08L3A+CiAgey9pZn0Key9pZn0KeyRzdGFydGZvcm19Cnskb3JpZ190eXBlfQp7JGVkaXRwcm9wfTxici8+CnskaW5mb21zZzF9PGJyLz4KeyRpbmZvbXNnMn08aHIvPgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X25hbWV9PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9uYW1lfTwvcD4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9wcm9tcHR9PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9wcm9tcHR9PC9wPgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X3R5cGV9PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF90eXBlfTwvcD4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdH08L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0fTwvcD4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdDJ9PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dDJ9PC9wPgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaGlkZGVufXskc3VibWl0fXskY2FuY2VsfTwvcD4KICA8L2Rpdj4KeyRlbmRmb3JtfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/addprop2.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyR0aXRsZX0Ke2lmICRtZXNzYWdlICE9ICcnfQogIHtpZiAkZXJyb3IgIT0gJyd9CiAgICA8cD48Zm9udCBjb2xvcj0icmVkIj57JG1lc3NhZ2V9PC9mb250PjwvcD4KICB7ZWxzZX0KICAgIDxwPnskbWVzc2FnZX08L3A+CiAgey9pZn0Key9pZn0KeyRzdGFydGZvcm19CiAgeyRpbnB1dF9uYW1lfQogIHskaW5wdXRfcHJvbXB0fQogIHskaW5wdXRfdHlwZX0KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdDF9PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dDF9PC9wPgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0Mn08L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0Mn08L3A+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRoaWRkZW59eyRzdWJtaXR9eyRjYW5jZWx9PC9wPgogIDwvZGl2Pgp7JGVuZGZvcm19Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/adduser1.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyR0aXRsZX0Ke2lmICRtZXNzYWdlICE9ICcnfQogIHtpZiAkZXJyb3IgIT0gJyd9CiAgICA8cD48Zm9udCBjb2xvcj0icmVkIj57JG1lc3NhZ2V9PC9mb250PjwvcD4KICB7ZWxzZX0KICAgIDxwPnskbWVzc2FnZX08L3A+CiAgey9pZn0Key9pZn0KeyRzdGFydGZvcm19CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfdXNlcm5hbWV9PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF91c2VybmFtZX08L3A+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfcGFzc3dvcmR9PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9wYXNzd29yZH0mbmJzcDt7JGluZm9fcGFzc3dvcmR9PC9wPgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X3JlcGVhdHBhc3N3b3JkfTwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfcmVwZWF0cGFzc3dvcmR9Jm5ic3A7eyRpbmZvX3JlcGVhdHBhc3N3b3JkfTwvcD4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9leHBpcmVzfTwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPntodG1sX3NlbGVjdF9kYXRlIHByZWZpeD0kZXhwaXJlc19kYXRlcHJlZml4IHRpbWU9JGV4cGlyZXNkYXRlIHN0YXJ0X3llYXI9MjAwMCBlbmRfeWVhcj0yMDQwfSB7aHRtbF9zZWxlY3RfdGltZSBwcmVmaXg9JGV4cGlyZXNkYXRlcHJlZml4IHRpbWU9JGV4cGlyZXNkYXRlfTwvcD4KICA8L2Rpdj4Ke2lmICRpdGVtY291bnQgPiAwfQo8YnIvPgp7JGdyb3Vwc3RpdGxlfQo8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJwYWdldGFibGUiPgoJPHRoZWFkPgoJCTx0cj4KCQkJPHRoIHdpZHRoPSI1JSI+eyRpZHRleHR9PC90aD4KCQkJPHRoPnskbmFtZXRleHR9PC90aD4KCQkJPHRoPnskZGVzY3RleHR9PC90aD4KCQkJPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4KCQk8L3RyPgoJPC90aGVhZD4KCTx0Ym9keT4Ke2ZvcmVhY2ggZnJvbT0kaXRlbXMgaXRlbT1lbnRyeX0KCQk8dHIgY2xhc3M9InskZW50cnktPnJvd2NsYXNzfSI+CgkJCTx0ZD57JGVudHJ5LT5pZH08L3RkPgoJCQk8dGQ+eyRlbnRyeS0+bmFtZX08L3RkPgoJCQk8dGQ+eyRlbnRyeS0+ZGVzY308L3RkPgoJCQk8dGQ+eyRlbnRyeS0+bWVtYmVyfTwvdGQ+CgkJPC90cj4Key9mb3JlYWNofQoJPC90Ym9keT4KPC90YWJsZT4Key9pZn0KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGhpZGRlbn17JHVzZXJfaWR9eyRzdWJtaXR9eyRjYW5jZWx9PC9wPgogIDwvZGl2Pgp7JGVuZGZvcm19Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/adduser2.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyR0aXRsZX0Ke2lmICRtZXNzYWdlICE9ICcnfQogIHtpZiAkZXJyb3IgIT0gJyd9CiAgICA8cD48Zm9udCBjb2xvcj0icmVkIj57JG1lc3NhZ2V9PC9mb250PjwvcD4KICB7ZWxzZX0KICAgIDxwPnskbWVzc2FnZX08L3A+CiAgey9pZn0Key9pZn0KeyRzdGFydGZvcm19CntpZiAkY29udHJvbGNvdW50ID4gMH0KICA8Y2VudGVyPgogIDx0YWJsZSB3aWR0aD0iNzUlIj4Ke2ZvcmVhY2ggZnJvbT0kY29udHJvbHMgaXRlbT1jb250cm9sfQogIDx0cj4KICAgIDx0ZD57JGNvbnRyb2wtPmhpZGRlbn08Zm9udCBjb2xvcj0ieyRjb250cm9sLT5jb2xvcn0iPnskY29udHJvbC0+cHJvbXB0fXskY29udHJvbC0+bWFya2VyfTwvZm9udD48L3RkPgogICAgPHRkPnskY29udHJvbC0+Y29udHJvbH08L3RkPgogIDwvdHI+CnsvZm9yZWFjaH0KICA8L3RhYmxlPgogIDwvY2VudGVyPgo8YnIvPgp7L2lmfQp7JGhpZGRlbn17JGhpZGRlbjJ9eyRiYWNrfXskc3VibWl0fXskY2FuY2VsfQp7JGVuZGZvcm19Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/adminprefs.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICRtZXNzYWdlIT0nJ308cD57JG1lc3NhZ2V9PC9wPnsvaWZ9Cnskc3RhcnRmb3JtfQoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+eyRpbmZvX21pbnB3bGVufTwvc3Ryb25nPjwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X3B3ZmxkbGVufTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9wd2ZsZGxlbn08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9taW5wd2xlbn06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfbWlucHdsZW59PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfbWF4cHdsZW59OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X21heHB3bGVufTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X3VuZmxkbGVufTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF91bmZsZGxlbn08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9taW51bmxlbn06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfbWludW5sZW59PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfbWF4dW5sZW59OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X21heHVubGVufTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgICAgICAgIDxociB3aWR0aD0iNTAlIiBhbGlnbj0ibGVmdCIvPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfc2Vzc2lvbnRpbWVvdXR9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3Nlc3Npb250aW1lb3V0fTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X3NtdHB2YWxpZGF0ZX06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfc210cHZhbGlkYXRlfSZuYnNwOzxzdHJvbmc+CiAgICAgICAgICAgICAgICAgICB7JGluZm9fc210cHZhbGlkYXRlfTwvc3Ryb25nPjwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X2FsbG93X2R1cGxpY2F0ZV9lbWFpbHN9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2FsbG93X2R1cGxpY2F0ZV9lbWFpbHN9CiAgICAgICAgICAgICAgICAgICA8YnIvPjxzdHJvbmc+eyRpbmZvX2FsbG93X2R1cGxpY2F0ZV9lbWFpbHN9PC9zdHJvbmc+PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfcmVxdWlyZW9uZWdyb3VwfTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9yZXF1aXJlb25lZ3JvdXB9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfZGZsdGdyb3VwfTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9kZmx0Z3JvdXB9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfcmVxdWlyZWRtYXJrZXJ9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3JlcXVpcmVkbWFya2VyfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X3JlcXVpcmVkY29sb3J9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3JlcXVpcmVkY29sb3J9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfaGlkZGVubWFya2VyfTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9oaWRkZW5tYXJrZXJ9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfaGlkZGVuY29sb3J9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2hpZGRlbmNvbG9yfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgICAgICAgIDxociB3aWR0aD0iNTAlIiBhbGlnbj0ibGVmdCIvPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfZm9yZ290cHdfcGFnZX06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfZm9yZ290cHdfcGFnZX08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9jaGFuZ2VzZXR0aW5nc19wYWdlfTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9jaGFuZ2VzZXR0aW5nc19wYWdlfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X2xvZ2luX3BhZ2V9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2xvZ2luX3BhZ2V9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfbG9nb3V0X3BhZ2V9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2xvZ291dF9wYWdlfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCXskaW5mb19zdGFyfQoJPC9kaXY+CiAgICAgICAge2lmICRkYXRhX251bXJlc2V0cmVjb3JkcyAhPSAiIn0KIAkgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICAgICAgICA8aHIgd2lkdGg9IjUwJSIgYWxpZ249ImxlZnQiLz4KICAJICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgIAkgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9udW1yZXNldHJlY29yZHN9PC9wPgoJICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskZGF0YV9udW1yZXNldHJlY29yZHN9PC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgoJICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfcmVtb3ZlMXdlZWt9eyRpbnB1dF9yZW1vdmUxbW9udGh9eyRpbnB1dF9yZW1vdmVhbGx9PC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgey9pZn0KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRoaWRkZW59eyRzdWJtaXR9eyRjYW5jZWx9PC9wPgoJPC9kaXY+CnskZW5kZm9ybX0K]]></data>
	</file>
	<file>
	  <filename>/templates/admintasks.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICRtZXNzYWdlIT0nJ308cD57JG1lc3NhZ2V9PC9wPnsvaWZ9Cnskc3RhcnRmb3JtfQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfZXhwb3J0fTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9leHBvcnR9PC9wPgo8L2Rpdj4KPGhyLz4KeyRlbmRmb3JtfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/edituserprops.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyR0aXRsZX0Ke2lmICRtZXNzYWdlICE9ICcnfQogIHtpZiAkZXJyb3IgIT0gJyd9CiAgICA8cD48Zm9udCBjb2xvcj0icmVkIj57JG1lc3NhZ2V9PC9mb250PjwvcD4KICB7ZWxzZX0KICAgIDxwPnskbWVzc2FnZX08L3A+CiAgey9pZn0Key9pZn0KeyRzdGFydGZvcm19CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfcHJvcG5hbWV9PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9wcm9wbmFtZX08L3A+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfcHJvcHZhbHVlfTwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfcHJvcHZhbHVlfTwvcD4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGhpZGRlbnBhcmFtc317JHN1Ym1pdH08L3A+CiAgPC9kaXY+CnskZW5kZm9ybX0K]]></data>
	</file>
	<file>
	  <filename>/templates/error.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfZXJyb3J9PC9oMz4KPHA+eyRhZG1pbl9uYXZ9PC9wPgp7aWYgJG1lc3NhZ2UhPScnfTxwPnskbWVzc2FnZX08L3A+ey9pZn0=]]></data>
	</file>
	<file>
	  <filename>/templates/forgotpw_templateform.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRzdGFydGZvcm19CjxwPnskcHJvbXB0X3RlbXBsYXRlMX08L3A+CnskaW5wdXRfdGVtcGxhdGUxfQo8YnIvPgo8cD57JHByb21wdF90ZW1wbGF0ZTJ9PC9wPgp7JGlucHV0X3RlbXBsYXRlMn0KPGJyLz4KPHA+eyRwcm9tcHRfdGVtcGxhdGUzfTwvcD4KeyRpbnB1dF90ZW1wbGF0ZTN9Cjxici8+Cnskc3VibWl0fXskZGVmYXVsdHN9CnskZW5kZm9ybX0K]]></data>
	</file>
	<file>
	  <filename>/templates/grouplist.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHA+eyRpdGVtY291bnR9Jm5ic3A7eyRncm91cHNmb3VuZH08L3A+CntpZiAkaXRlbWNvdW50ID4gMH0KPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0icGFnZXRhYmxlIj4KCTx0aGVhZD4KCQk8dHI+CgkJCTx0aCB3aWR0aD0iNSUiPnskaWR0ZXh0fTwvdGg+CgkJCTx0aD57JG5hbWV0ZXh0fTwvdGg+CgkJCTx0aD57JGRlc2N0ZXh0fTwvdGg+CgkJCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+CgkJCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+CgkJPC90cj4KCTwvdGhlYWQ+Cgk8dGJvZHk+Cntmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09ZW50cnl9CgkJPHRyIGNsYXNzPSJ7JGVudHJ5LT5yb3djbGFzc30iPgoJCQk8dGQ+eyRlbnRyeS0+aWR9PC90ZD4KCQkJPHRkPnskZW50cnktPm5hbWV9PC90ZD4KCQkJPHRkPnskZW50cnktPmRlc2N9PC90ZD4KCQkJPHRkPnskZW50cnktPmVkaXRsaW5rfTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5kZWxldGVsaW5rfTwvdGQ+CgkJPC90cj4Key9mb3JlYWNofQoJPC90Ym9keT4KPC90YWJsZT4Key9pZn0KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPjxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRhZGRsaW5rfTwvcD48L2Rpdj4K]]></data>
	</file>
	<file>
	  <filename>/templates/propertiesform.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyR0aXRsZX0Ke2lmICRtZXNzYWdlICE9ICcnfQogIHtpZiAkZXJyb3IgIT0gJyd9CiAgICA8cD48Zm9udCBjb2xvcj0icmVkIj57JG1lc3NhZ2V9PC9mb250PjwvcD4KICB7ZWxzZX0KICAgIDxwPnskbWVzc2FnZX08L3A+CiAgey9pZn0Key9pZn0KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPgo8cD57JHByb3Bjb3VudH0mbmJzcDt7JHByb3BzZm91bmR9PC9wPgp7aWYgJHByb3Bjb3VudCA+IDB9Cjxici8+Cjx0YWJsZSBjZWxsc3BhY2luZz0iMCIgY2xhc3M9InBhZ2V0YWJsZSI+Cgk8dGhlYWQ+CgkJPHRyPgoJCQk8dGg+eyRuYW1ldGV4dH08L3RoPgoJCQk8dGg+eyRwcm9tcHR0ZXh0fTwvdGg+CgkJCTx0aD57JHR5cGV0ZXh0fTwvdGg+CgkJCTx0aD57JGxlbmd0aHRleHR9PC90aD4KCQkJPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4KCQkJPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4KCQk8L3RyPgoJPC90aGVhZD4KCTx0Ym9keT4Ke2ZvcmVhY2ggZnJvbT0kcHJvcHMgaXRlbT1wcm9wZX0KCQk8dHIgY2xhc3M9InskcHJvcGUtPnJvd2NsYXNzfSI+CgkJCTx0ZD57JHByb3BlLT5uYW1lfTwvdGQ+CgkJCTx0ZD57JHByb3BlLT5wcm9tcHR9PC90ZD4KCQkJPHRkPnskcHJvcGUtPnR5cGV9PC90ZD4KCQkJPHRkPnskcHJvcGUtPmxlbmd0aH08L3RkPgoJCQk8dGQ+eyRwcm9wZS0+ZWRpdGxpbmt9PC90ZD4KCQkJPHRkPnskcHJvcGUtPmRlbGV0ZWxpbmt9PC90ZD4KCQk8L3RyPgp7L2ZvcmVhY2h9Cgk8L3Rib2R5Pgo8L3RhYmxlPgp7L2lmfQo8L2Rpdj4KPGJyLz4KPHA+eyRhZGRsaW5rfTwvcD4K]]></data>
	</file>
	<file>
	  <filename>/templates/templateform.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRzdGFydGZvcm19CjxwPnskcHJvbXB0X3RlbXBsYXRlfTwvcD4KeyRpbnB1dF90ZW1wbGF0ZX0KPGJyLz4KeyRzdWJtaXR9eyRkZWZhdWx0c30KeyRlbmRmb3JtfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/userlist.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRzdGFydGZvcm19CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiA8cCBjbGFzcz0icGFnZXRleHQiPjxzdHJvbmc+eyRwcm9tcHRfZmlsdGVyfTo8L3N0cm9uZz48L3A+CiA8cCBjbGFzcz0icGFnZWlucHV0Ij4mbmJzcDs8L3A+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9ncm91cH08L3A+CiA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGZpbHRlcl9ncm91cH08L3A+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF91c2VyZmlsdGVyfTwvcD4KIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskZmlsdGVyX3JlZ2V4fTwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiA8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X3Byb3BlcnR5ZmlsdGVyc2VsfTwvcD4KIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskZmlsdGVyX3Byb3BlcnR5c2VsfTwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiA8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X3Byb3BlcnR5ZmlsdGVyfTwvcD4KIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskZmlsdGVyX3Byb3BlcnR5fTwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiA8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X2xpbWl0fTwvcD4KIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskZmlsdGVyX2xpbWl0fTwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiA8cCBjbGFzcz0icGFnZXRleHQiPjxzdHJvbmc+eyRwcm9tcHRfc29ydH06PC9zdHJvbmc+PC9wPgogPHAgY2xhc3M9InBhZ2VpbnB1dCI+Jm5ic3A7PC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfc29ydGJ5fTwvcD4KIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskZmlsdGVyX3NvcnRieX08L3A+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CiA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3NlbGVjdH17JGlucHV0X2hpZGRlbn08L3A+PGJyLz4KPC9kaXY+CnskZW5kZm9ybX0KPGhyIHdpZHRoPSI1MCUiIGFsaWduPSJsZWZ0Ii8+CjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj4KIDxwPnskbnVtdXNlcnN9Jm5ic3A7eyR1c2Vyc2luZ3JvdXB9PC9wPgogPHA+eyRpdGVtY291bnR9Jm5ic3A7eyR1c2Vyc2ZvdW5kfTwvcD4Ke2lmICRpdGVtY291bnQgPiAwfQo8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJwYWdldGFibGUiPgoJPHRoZWFkPgoJCTx0cj4KCQkJPHRoPnskdXNlcm5hbWV0ZXh0fTwvdGg+CgkJCTx0aD57JGNyZWF0ZWR0ZXh0fTwvdGg+CgkJCTx0aD57JGV4cGlyZXN0ZXh0fTwvdGg+CgkJCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+CgkJCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+CgkJPC90cj4KCTwvdGhlYWQ+Cgk8dGJvZHk+Cntmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09ZW50cnl9CgkJPHRyIGNsYXNzPSJ7JGVudHJ5LT5yb3djbGFzc30iPgoJCQk8dGQ+eyRlbnRyeS0+dXNlcm5hbWV9PC90ZD4KCQkJPHRkPnskZW50cnktPmNyZWF0ZWR9PC90ZD4KCQkJPHRkPnskZW50cnktPmV4cGlyZXN9PC90ZD4KCQkJPHRkPnskZW50cnktPmVkaXRsaW5rfTwvdGQ+CgkJCTx0ZD57JGVudHJ5LT5kZWxldGVsaW5rfTwvdGQ+CgkJPC90cj4JIAp7L2ZvcmVhY2h9Cgk8L3Rib2R5Pgo8L3RhYmxlPgp7L2lmfQogPHA+eyRhZGRsaW5rfTwvcD4KPC9kaXY+Cg==]]></data>
	</file>
	<file>
	  <filename>/UserManipulator.class.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmNsYXNzIFVzZXJNYW5pcHVsYXRvcgp7CiAgdmFyICRtb2Q7CgogIGZ1bmN0aW9uIENvdW50VGVtcENvZGVSZWNvcmRzKCkKICB7CiAgICByZXR1cm4gMDsKICB9CgogIC8qIGV4cGlyeWNvZGUgaXMgYSBzdHJ0b3RpbWUgc3RyaW5nICovCiAgZnVuY3Rpb24gRXhwaXJlVGVtcENvZGVzKCRleHBpcnljb2RlKQogIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIGZ1bmN0aW9uIFJlbW92ZVVzZXJUZW1wQ29kZSggJHVpZCApCiAgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgZnVuY3Rpb24gR2V0VXNlclRlbXBDb2RlKCAkdWlkICkKICB7CiAgICByZXR1cm4gYXJyYXkoRkFMU0UsIkZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZCIpOwogIH0KCiAgZnVuY3Rpb24gU2V0VXNlclRlbXBDb2RlKCAkdWlkLCAkY29kZSApCiAgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgZnVuY3Rpb24gU2V0UHJvcGVydHlEZWZuKCAkbmFtZSwgJG5ld25hbWUsICRwcm9tcHQsICRsZW5ndGgsICR0eXBlICkKICB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBmdW5jdGlvbiBEZWxldGVQcm9wZXJ0eURlZm4oICRuYW1lICkKICB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBmdW5jdGlvbiBHZXRQcm9wZXJ0eUdyb3VwUmVsYXRpb25zKCAkdGl0bGUgKQogIHsKICAgIHJldHVybiBhcnJheShGQUxTRSwiRnVuY3Rpb24gbm90IGltcGxlbWVudGVkIik7CiAgfQoKICBmdW5jdGlvbiBJc0FjY291bnRFeHBpcmVkKCAkdWlkICkKICB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGZ1bmN0aW9uIEdldEdyb3VwUHJvcGVydHlSZWxhdGlvbnMoICRncnBpZCApCiAgewogICAgcmV0dXJuIGFycmF5KEZBTFNFLCJGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQiKTsKICB9CgoKICBmdW5jdGlvbiBBZGRHcm91cFByb3BlcnR5UmVsYXRpb24oICRncnBpZCwgJHByb3BuYW1lLCAkc29ydGtleSwgJHZhbCApCiAgewogICAgcmV0dXJuIGFycmF5KEZBTFNFLCJGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQiKTsKICB9CgoKICBmdW5jdGlvbiBEZWxldGVBbGxHcm91cFByb3BlcnR5UmVsYXRpb25zKCAkZ3JwaWQgKQogIHsKICAgIHJldHVybiBhcnJheShGQUxTRSwiRnVuY3Rpb24gbm90IGltcGxlbWVudGVkIik7CiAgfQoKCiAgZnVuY3Rpb24gRGVsZXRlR3JvdXBQcm9wZXJ0eVJlbGF0aW9uKCAkZ3JwaWQsICRwcm9wbmFtZSApCiAgewogICAgcmV0dXJuIGFycmF5KEZBTFNFLCJGdW5jdGlvbiBub3QgaW1wbGVtZW50ZWQiKTsKICB9CgoKICBmdW5jdGlvbiBMb2dpbiggJHVzZXJuYW1lLCAkcGFzc3dvcmQgKQogIHsKICAgIHJldHVybiBhcnJheShGQUxTRSwiRnVuY3Rpb24gbm90IGltcGxlbWVudGVkIik7CiAgfQoKCiAgZnVuY3Rpb24gVXNlck1hbmlwdWxhdG9yKCAkdGhlX21vZHVsZSApCiAgewogICAgJHRoaXMtPm1vZCA9ICR0aGVfbW9kdWxlOwogIH0KCgogIGZ1bmN0aW9uIEdldERiKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPm1vZC0+R2V0RGIoKTsKICB9CgoKICBmdW5jdGlvbiBHZXRNb2R1bGUoKQogIHsKICAgIHJldHVybiAkdGhpcy0+bW9kOwogIH0KCgogIC8vISBDaGVjayBpZiB0aGUgZ3JvdXAgc3BlY2lmaWVkIGhhcyB0aGUgcmVxdWlyZWQgcGVybWlzc2lvbgogIGZ1bmN0aW9uIENoZWNrR3JvdXBQZXJtaXNzaW9uKCAkZ2lkLCAkcGVybSApCiAgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCgogIC8vISBDaGVjayBpZiB0aGUgdXNlciBoYXMgdGhlIHNwZWNpZmllZCBwZXJtaXNzaW9uCiAgZnVuY3Rpb24gQ2hlY2tVc2VyUGVybWlzc2lvbiggJHBlcm0gKQogIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgoKICAvLyEgQ2hlY2sgaWYgdGhlIHNwZWNpZmllZCB1c2VyIGhhcyB0aGUgc3BlY2lmaWVkIHBlcm1pc3Npb24KICBmdW5jdGlvbiBDaGVja1VzZXJQZXJtaXNzaW9uQnlVaWQoICR1aWQsICRwZXJtICkKICB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLyEgQXNzaWduIHRoZSB1c2VyIHNwZWNpZmllZCAoYnkgaWQpIHRvIHRoZSBncm91cCBzcGVjaWZpZWQgKGJ5IGlkKQogIC8vIQogIC8vIVxwYXJhbSAgdWlkICBUaGUgdXNlcmlkIGZvciB0aGUgbmV3IGFzc29jaWF0aW9uCiAgLy8hXHBhcmFtICBnaWQgIFRoZSBncm91cCBpZCBmb3IgdGhlIG5ldyBhc3NvY2lhdGlvbgogIC8vIVxyZXR1cm4gdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UKICAvLyEKICBmdW5jdGlvbiBBc3NpZ25Vc2VyVG9Hcm91cCggJHVpZCwgJGdpZCApCiAgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCgogIC8vISBDaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIHN1cHBsaWVkIHBhc3N3b3JkCiAgLy8hCiAgLy8hXHBhcmFtICBwYXNzd29yZCBUaGUgcGFzc3dvcmQgdG8gdGVzdC4KICAvLyFccmV0dXJuIHRydWUgaWYgdGhlIHBhc3N3b3JkIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UKICAvLyEKICBmdW5jdGlvbiBJc1ZhbGlkUGFzc3dvcmQoICRwYXNzd29yZCApCiAgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCgogIC8vISBDb21wbGV0ZWx5IGRlbGV0ZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgc3VwcGxpZWQgdXNlciBpZAogIC8vIQogIC8vIVRoaXMgbWV0aG9kIGNvbXBsZXRlbHkgZGVsZXRlcyBhbnl0aGluZyBmcm9tIHRoZSBkYXRhYmFzZSByZWxhdGVkIHRvIHRoZSBzcGVjaWZpZWQgdXNlciBpZC4KICAvLyFzcGVjaWZpY2FsbHksIGdyb3VwIGFzc29jaWF0aW9ucywgcHJvcGVydGllcywgYW5kIHRoZSB1c2VyIHJlY29yZCBpdHNlbGYuCiAgLy8hCiAgLy8hXHBhcmFtIHVpZCB0aGUgdXNlcmlkIHRvIGRlbGV0ZSBhbGwgcmVmZXJlbmNlcyB0bwogIC8vIVxyZXR1cm4gYXJyYXksIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSBhcnJheSBpcyBhIGJvb2xlYW4gaW5kaWNhdGluZyBzdWNjZXNzIG9yIGZhaWx1cmUuCiAgLy8hICAgaWYgdGhlIGZpcnN0IGVsZW1lbnQgaXMgZmFsc2UsIHRoZW4gdGhlIHNlY29uZCBlbGVtZW50IHdpbGwgY29udGFpbiBhbiBlcnJvciBtZXNzYWdlLgogIC8vIQogIGZ1bmN0aW9uIERlbGV0ZVVzZXJGdWxsKCAkdWlkICkKICB7CiAgICByZXR1cm4gYXJyYXkoRkFMU0UsIk5vIGZ1bmN0aW9uIGRlZmluZWQiKTsKICB9CgoKICAvLyEgR2V0IGluZm9ybWF0aW9uIGFib3V0IHRoZSBncm91cAogIC8vIQogIC8vISBUaGlzIG1ldGhvZCByZXR1cm5zIGFuIGFzc29jaWF0aW9uIHdpdGggdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3BlY2lmaWVkIAogIC8vISBncm91cCBpZAogIC8vISAgICBpZCA9PiBUaGUgcmVxdWVzdGVkIGdyb3VwIGlkCiAgLy8hICAgIGdyb3VwbmFtZSA9PiBUaGUgbmFtZSBvZiB0aGUgZ3JvdXAKICAvLyEgICAgZ3JvdXBkZXNjID0+IFRoZSBncm91cCBkZXNjcmlwdGlvbgogIC8vIQogIC8vISBccGFyYW0gZ2lkIFRoZSBncm91cCBpZAogIC8vISBccGFyYW0gYXNzb2NpYXRpdmUgYXJyYXksIG9yIGFycmF5IHdpdGggZmlyc3QgZWxlbWVudCBvZiBmYWxzZSwgc2Vjb25kIGVsZW1lbnQgY29udGFpbnMgZXJyb3IgbWVzc2FnZQogIC8vISBccmV0dXJuIGFuIGFzc29jaWF0aXZlIGFycmF5IHdpdGggZ3JvdXAgaW5mbywgb3IgZmFsc2UKICAvLyEKICBmdW5jdGlvbiBHZXRHcm91cEluZm8oICRnaWQgKQogIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgoKICAvLyEgR2V0IGluZm9ybWF0aW9uIGFib3V0IGEgdXNlcgogIC8vIQogIC8vISBUaGlzIG1ldGhvZCByZXR1cm5zIGFuIGFzc29jaWF0aW9uIHdpdGggdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3BlY2lmaWVkIAogIC8vISB1c2VyIGlkCiAgLy8hICAgaWQgPSB0aGUgcmVxdWVzdGVkIHVzZXIgaWQKICAvLyEgICB1c2VybmFtZSA9IHRoZSB1c2VycyBuYW1lCiAgLy8hICAgcGFzc3dvcmQgPSB0aGUgKGVuY3J5cHRlZCkgdXNlciBwYXNzd29yZAogIC8vISAgIGVtYWlsICAgID0gdGhlIHVzZXJzIGVtYWlsIGFkZHJlc3MKICAvLyEgICBleHBpcmVzICA9IHRoZSB1c2VycyBleHBpcnkgZGF0ZQogIC8vISAgIHN0YXR1cyAgID0gdGhlIHVzZXJzIHN0YXR1cwogIC8vIQogIC8vISBccGFyYW0gdWlkIFRoZSB1c2VyaWQgdG8gaW5xdWlyZSBhYm91dAogIC8vISBccmV0dXJuIGFuIGFycmF5LCB0aGUgZmlyc3QgZWxlbWVudCBjb250YWlucyByZXR1cm4gc3RhdHVzICh0cnVlL2ZhbHNlKSwgdGhlIHNlY29uZCBlbGVtZW50CiAgLy8hICAgIGlzIGVpdGhlciBhbiBhcnJheSBjb250YWluaW5nIHRoZSBkZXRhaWxzIGFib3ZlLCBvciBhbiBlcnJvciBtZXNzYWdlLgogIC8vIQogIGZ1bmN0aW9uIEdldFVzZXJJbmZvKCAkdWlkICkKICB7CiAgICByZXR1cm4gYXJyYXkoRkFMU0UsIkZ1bmN0aW9uIG5vdCBkZWZpbmVkIik7CiAgfQoKCiAgLy8hIEdldCBhIGxpc3Qgb2YgdGhlIHVzZXJzIHRoYXQgYmVsb25nIHRvIHRoZSBzcGVjaWZpZWQgZ3JvdXAKICAvLyEKICAvLyEgVGhpcyBtZXRob2QgcmV0dXJucyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBjb250YWluaW5nIGEgY29tcGxldGUgc2V0IG9mIHRoZQogIC8vISBpbmZvcm1hdGlvbiBhYm91dCBhbGwgb2YgdGhlIHVzZXJzIHRoYXQgYmVsb25nIHRvIHRoZSBzcGVjaWZpZWQgZ3JvdXAKICAvLyEgCiAgLy8hIFxwYXJhbSBncm91cGlkIHRoZSBkZXNpcmVkIGdyb3VwIGlkCiAgLy8hIFxyZXR1cm4gYW4gYXJyYXkgb2YgdXNlciBpbmZvcm1hdGlvbiAoc2VlIEdldFVzZXJJbmZvKSwgb3IgZmFsc2UKICAvLyEgXHNhIEdldFVzZXJJbmZvCiAgLy8hCiAgZnVuY3Rpb24gR2V0VXNlcnNJbkdyb3VwKCAkZ3JvdXBpZCA9ICcnICkKICB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKCiAgLy8hIEEgZnVuY3Rpb24gdGhhdCB0ZXN0cyB3ZXRoZXIgYSBncm91cCB3aXRoIHRoZSBzcGVmaWZpZWQgaWQgZXhpc3RzCiAgLy8hCiAgLy8hIFxwYXJhbSBnaWQgVGhlIGRlc2lyZWQgZ3JvdXAgaWQKICAvLyEgXHJldHVybiBib29sZWFuCiAgIC8vIQogIGZ1bmN0aW9uIEdyb3VwRXhpc3RzQnlJRCggJGdpZCApCiAgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCgogIC8vISBBIGZ1bmN0aW9uIHRoYXQgdGVzdHMgd2V0aGVyIGEgZ3JvdXAgd2l0aCB0aGUgbmFtZSBleGlzdHMKICAvLyEKICAvLyEgXHBhcmFtIGdpZCBUaGUgZGVzaXJlZCBncm91cCBuYW1lCiAgLy8hIFxyZXR1cm4gYm9vbGVhbgogICAvLyEKICBmdW5jdGlvbiBHcm91cEV4aXN0c0J5TmFtZSggJG5hbWUgKQogIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgoKICAvLyEgVGVzdCB3ZXRoZXIgdGhlIHNwZWNpZmllZCBlbWFpbCBhZGRyZXNzIHBhc3NlcyB0aGUgcnVsZXMuCiAgLy8hCiAgLy8hIFRoaXMgbWV0aG9kIHdpbGwgdGVzdCBpZiB0aGUgZW1haWwgYWRkcmVzcyBzdXBwbGllZCBtYXRjaGVzIHRoZSAKICAvLyEgc2V0IHJ1bGVzLiAgT3B0aW9uYWxseSwgdGhlIGVtYWlsIGFkZHJlc3MgY2FuIGJlIHZhbGlkYXRlZCB2aWEKICAvLyEgc210cC4KICAvLyEKICAvLyEgXHBhcmFtICBlbWFpbCBUaGUgYWRkcmVzcyB0byB0ZXN0CiAgLy8hIFxwYXJhbSBzbXRwdmFsaWRhdGUgQSBib29sZWFuIGluZGljYXRpbmcgd2V0aGVyIHNtdHAgdmFsaWRhdGlvbiBzaG91bGQgYmUgdXNlZC4KICAvLyEgXHJldHVybiBhbiBhcnJheSwgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGFycmF5IGluZGljdWF0ZXMgc3VjY2VzcyBvciBmYWlsdXJlCiAgLy8hICAgIHRoZSBzZWNvbmQgZWxlbWVudCBpcyB0aGUgZXJyb3IgbWVzc2FnZSwgaWYgYW4gZXJyb3Igb2NjdXJyZWQKICAvLyEKICBmdW5jdGlvbiBJc1ZhbGlkRW1haWxBZGRyZXNzKCAkZW1haWwsICRzbXRwdmFsaWRhdGUgPSBmYWxzZSApCiAgewogICAgcmV0dXJuIGFycmF5KEZBTFNFLCJGdW5jdGlvbiBub3QgZGVmaW5lZCIpOwogIH0KCgogIC8vISBDaGVjayB3ZXRoZXIgdGhlIHVzZXJuYW1lIHN1cHBsaWVkIHBhc3NlcyB0aGUgcnVsZXMKICAvLyEKICAvLyFccGFyYW0gdXNlcm5hbWUgVGhlIHVzZXJuYW1lIHRvIGJlIHRlc3RlZAogIC8vIVxyZXR1cm4gYm9vbGVhbiB0cnVlL2ZhbHNlCiAgLy8hCiAgZnVuY3Rpb24gSXNWYWxpZFVzZXJuYW1lKCAkdXNlcm5hbWUgKQogIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgoKICAvLyEgUmVtb3ZlIHRoZSBzcGVjaWZpZWQgdXNlciBmcm9tIHRoZSBzcGVjaWZpZWQgZ3JvdXAKICAvLyEKICAvLyFUaGlzIG1ldGhvZCByZXZva2VzIHRoZSBtZW1iZXJzaGlwIG9mIHVzZXIgJHVpZCBmcm9tIGdyb3VwICRnaWQKICAvLyEKICAvLyFccGFyYW0gdWlkCiAgLy8hXHBhcmFtIGdpZAogIC8vIVxyZXR1cm4gYXJyYXksIHRoZSBmaXJzdCBlbGVtZW50IGNvbnRhaW5zIGV4aXQgc3RhdHVzIChib29sZWFuKSwgdGhlIHNlY29uZCBlbGVtZW50CiAgLy8hICAgKG9wdGlvbmFsKSByZXR1cm5zIGFuIGVycm9yIG1lc3NhZ2UsIGlmIGFuIGVycm9yIG9jY3VycmVkLgogIC8vIQogIGZ1bmN0aW9uIFJlbW92ZVVzZXJGcm9tR3JvdXAoICR1aWQsICRnaWQgKQogIHsKICAgIHJldHVybiBhcnJheShGQUxTRSwiRnVuY3Rpb24gbm90IGRlZmluZWQiKTsKICB9CgoKICAvLyEgQSBtZXRob2QgdG8gbW9kaWZ5IGFuIGV4aXN0aW5nIGdyb3VwCiAgLy8hCiAgLy8hXHBhcmFtIGdpZCBBbiBleGlzdGluZyBncm91cCBpZAogIC8vIVxwYXJhbSBuYW1lIFRoZSBuZXcgZ3JvdXAgbmFtZQogIC8vIVxwYXJhbSBkZXNjIFRoZSBuZXcgZ3JvdXAgZGVzY3JpcHRpb24KICAvLyFccmV0dXJuIEFuIGFycmF5LCB0aGUgZmlyc3QgZWxlbWVudCBpcyBhIGJvb2xlYW4gd2hpY2ggaW5kaWNhdGVzIHN1Y2Nlc3Mgb3IgZmFpbHVyZSwgdGhlCiAgLy8hICBzZWNvbmQgZWxlbWVudCAob3B0aW9uYWwpIGNvbnRhaW5zIGFuIGVycm9yIG1lc3NhZ2UgaW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yLgogIC8vIQogIGZ1bmN0aW9uIFNldEdyb3VwKCAkZ2lkLCAkbmFtZSwgJGRlc2MgKQogIHsKICAgIHJldHVybiBhcnJheShGQUxTRSwiRnVuY3Rpb24gbm90IGRlZmluZWQiKTsKICB9CgoKICBmdW5jdGlvbiBTZXRVc2VyUGFzc3dvcmQoICR1aWQsICRwYXNzd29yZCApCiAgewogICAgcmV0dXJuIGFycmF5KEZBTFNFLCJGdW5jdGlvbiBub3QgZGVmaW5lZCIpOwogIH0KCgogIC8vISBNb2RpZnkgYW4gZXhpc3RpbmcgZ3JvdXAKICAvLyEKICAvLyEgXHBhcmFtIHVpZCBUaGUgaWQgb2YgdGhlIGV4aXN0aW5nIHVzZXIKICAvLyEgXHBhcmFtIHVzZXJuYW1lIFRoZSBuZXcgdXNlciBuYW1lCiAgLy8hIFxwYXJhbSBlbWFpbCBUaGUgbmV3IGVtYWlsIGFkZHJlc3MKICAvLyEgXHBhcmFtIHBhc3N3b3JkIFRoZSBuZXcgKHVuZW5jcnlwdGVkKSBwYXNzd29yZAogIC8vISBccGFyYW0gZXhwaXJlcyBUaGUgbmV3IGV4cGlyeSBkYXRlCiAgLy8hIFxwYXJhbSBzdGF0dXMgdGhlIG5ldyBzdGF0dXMKICAvLyEgXHJldHVybiBBbiBhcnJheSwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgYSBib29sZWFuIHdoaWNoIGluZGljYXRlcyBzdWNjZXNzIG9yIGZhaWx1cmUsIHRoZQogIC8vISAgICBzZWNvbmQgZWxlbWVudCAob3B0aW9uYWwpIGNvbnRhaW5zIGFuIGVycm9yIG1lc3NhZ2UgaW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yLgogIC8vIQogIGZ1bmN0aW9uIFNldFVzZXIoICR1aWQsICR1c2VybmFtZSwgJHBhc3N3b3JkLCAkZXhwaXJlcyApCiAgewogICAgcmV0dXJuIGFycmF5KEZBTFNFLCJGdW5jdGlvbiBub3QgZGVmaW5lZCIpOwogIH0KCgogIC8vISBTZXQgdGhlIHVzZXIncyBncm91cCBtZW1iZXJzaGlwcyBhYnNvbHV0ZWx5CiAgLy8hCiAgLy8hVGhpcyBtZXRob2QgcmVtb3ZlcyBhbGwgcHJldmlvdXMgZ3JvdXAgYXNzb2NpYXRpb25zLCBhbmQgc2V0cyBuZXcgb25lcwogIC8vIXRvIG1hdGNoIHRob3NlIGluIHRoZSBncnBpZHMgYXJyYXkuCiAgLy8hCiAgLy8hXHBhcmFtIHVpZCBUaGUgdXNlciBpZCB0byBlZGl0CiAgLy8hXHBhcmFtIGdycGlkcyBBbiBhcnJheSBvZiB1c2VyIGlkcyB0byBhc3NvY2lhdGUgd2l0aAogIC8vIVxyZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlCiAgLy8hCiAgZnVuY3Rpb24gU2V0VXNlckdyb3VwcyggJHVpZCwgJGdycGlkcyApCiAgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCgogIC8vISBTZXQgdGhlIHVzZXIncyBwcm9wZXJ0aWVzIGFic29sdXRlbHkuCiAgLy8hCiAgLy8hIFRoaXMgbWV0aG9kIGRlbGV0ZXMgYW55IGV4aXN0aW5nIHVzZXIgcHJvcGVydGllcyBhbmQgc2V0cyB0aGVtIGFjY29yZGluZyB0byB0aGUgcHJvcGVydGllcwogIC8vISBzdXBwbGllZC4KICAvLyEKICAvLyEgXHBhcmFtIHVpZCBUaGUgdXNlciBpZCB0byBiZSBlZGl0ZWQKICAvLyEgXHBhcmFtIHByb3BzIEFuIGFycmF5IG9mIEtleT1WYWx1ZSBzdHJpbmdzIGNvbnNpc3Rpbmcgb2YgdGhlIHVzZXIgcHJvcGVydGllcy4KICAvLyEgXHJldHVybiB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZQogIC8vIQogIGZ1bmN0aW9uIFNldFVzZXJQcm9wZXJ0aWVzKCAkdWlkLCAkcHJvcHMgKSAgCiAgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCgogIC8vISBUZXN0IGlmIHRoZSB1c2VyIGlkIGlzIGFscmVhZHkgdGFrZW4KICAvLyEKICAvLyEgVGVzdHMgaWYgYSB1c2VyIGJ5IHRoYXQgaWQgYWxyZWFkeSBleGlzdHMKICAvLyEKICAvLyEgXHBhcmFtIHVpZCBUaGUgdXNlcmlkIHRvIHRlc3QKICAvLyEgXHJldHVybiBib29sZWFuCiAgLy8hCiAgZnVuY3Rpb24gVXNlckV4aXN0c0J5SUQoICR1aWQgKQogIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgoKICAvLyEgUmV0dXJuIGFuIGFycmF5IG9mIHRoZSB1c2VyJ3MgcHJvcGVydGllcwogIC8vIQogIC8vISBSZXR1cm5zIGEgY29tcGxldGUgbGlzdCBvZiB0aGUgdXNlcnMgcHJvcGVydGllcwogIC8vIQogIC8vISBccGFyYW0gdWlkIFRoZSB1aWQgdG8gdGVzdAogIC8vISBccmV0dXJuIGZhbHNlIG9uIGVycm9yLCBvdGhlcndpc2UgYW4gYXJyYXkgb2YgYXNzb2NpYXRpb25zLCBlYWNoIGFzc29jaWF0aW9uCiAgLy8hICAgaGFzIHRoZSBmb2xsb3dpbmcga2V5czoKICAvLyEgICAgICBpZCAgICAgPSBUaGUgcHJvcGVydHkgaWQKICAvLyEgICAgICB1c2VyaWQgPSBUaGUgbWF0Y2hpbmcgdXNlciBpZAogIC8vISAgICAgIHRpdGxlICA9IFRoZSBwcm9wZXJ0eSB0aXRsZQogIC8vISAgICAgIGRhdGEgICA9IFRoZSBwcm9wZXJ0eSBkYXRhCiAgLy8hCiAgZnVuY3Rpb24gR2V0VXNlclByb3BlcnRpZXMoJHVpZCkKICB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKICAvLyEgUmV0dXJuIGEgY29tcGxldGUgbGlzdCBvZiB0aGUgZ3JvdXBzIHRoYXQgdGhpcyB1c2VyIGJlbG9uZ3MgdG8KICAvLyEKICAvLyEgUmV0dXJucyBhbiBhcnJheSBvZiBncm91cGluZm8gcmVjb3JkcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBncm91cHMgdGhhdAogIC8vISB0aGlzIHVzZXIgaXMgYXNzb2NpYXRlZCB3aXRoLgogIC8vIQogIC8vISBccGFyYW0gdXNlcmlkIFRoZSB1c2VyaWQgdG8gdGVzdAogIC8vISBccmV0dXJuIGZhbHNlIG9uIGVycm9yLCBvdGhlcndpc2UsIGFuIGFycmF5IG9mIGdyb3VwaW5mbyByZWNvcmRzLgogIC8vIQogIGZ1bmN0aW9uIEdldE1lbWJlckdyb3Vwc0FycmF5KCR1c2VyaWQpCiAgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCgogIC8vISBBZGQgYSBzaW5nbGUgcHJvcGVydHkgZGVmaW5pdGlvbgogIC8vISBccGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkKICAvLyEgXHBhcmFtIHByb21wdCBUaGUgcHJvbXB0IHRvIGRpc3BsYXkgdG8gdGhlIHVzZXIKICAvLyEgICAgICAgbm90ZSwgdGhpcyB3aWxsIGJlIExhbmdpZmllZAogIC8vISBccGFyYW0gdHlwZSAgVGhlIHR5cGUgb2YgdGhlIHByb3BlcnR5CiAgLy8hICAgICAgIDAgPSB0ZXh0LCAxID0gY2hlY2tib3gsIDIgPSBlbWFpbAogIC8vISBccGFyYW0gcmVxdWlyZWQgd2V0aGVyIG9yIG5vdCB0aGUgcHJvcGVydHkgaXMgcmVxdWlyZWQKICAvLyEgXHJldHVybiBBbiBhcnJheSwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgYSBib29sZWFuIHdoaWNoIGluZGljYXRlcyBzdWNjZXNzIG9yIGZhaWx1cmUsIHRoZQogIC8vISAgICBzZWNvbmQgZWxlbWVudCAob3B0aW9uYWwpIGNvbnRhaW5zIGFuIGVycm9yIG1lc3NhZ2UgaW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yLgogIC8vIQogIGZ1bmN0aW9uIEFkZFByb3BlcnR5RGVmbiggJG5hbWUsICRwcm9tcHQsICR0eXBlLCAkbGVuZ3RoICkKICB7CiAgICByZXR1cm4gYXJyYXkoRkFMU0UsIk5vdCBJbXBsZW1lbnRlZCIpOwogIH0KCgogIC8vISBEZWxldGUgYWxsIHByb3BlcnR5IGRlZmluaXRpb25zICh1c2Ugd2l0aCBjYXV0aW9uKQogIGZ1bmN0aW9uIERlbGV0ZVByb3BlcnR5RGVmbnMoKQogIHsKICAgIHJldHVybiBhcnJheShGQUxTRSwiTm90IEltcGxlbWVudGVkIik7CiAgfQoKICAvLyEgR2V0IGEgc2luZ2xlIHByb3BlcnR5IGRlZmluaXRpb24gYnkgbmFtZQogIGZ1bmN0aW9uIEdldFByb3BlcnR5RGVmbiggJG5hbWUgKQogIHsKICAgIHJldHVybiBGQUxTRTsKICB9CgogIC8vISBHZXQgYW4gYXJyYXkgb2YgcHJvcGVydHkgZGVmaW5pdGlvbnMKICBmdW5jdGlvbiBHZXRQcm9wZXJ0eURlZm5zKCkKICB7CiAgICByZXR1cm4gYXJyYXkoRkFMU0UsIk5vdCBJbXBsZW1lbnRlZCIpOwogIH0KCgogIC8vISBHZXQgYSBzaW5nbGUgcHJvcGVydHkgZm9yIHRoZSBjdXJyZW50IHVzZXIKICAvLyEKICAvLyEgR2V0IGEgc2luZ2xlIHByb3BlcnR5IGZvciB0aGUgY3VycmVudGx5IGxvZ2dlZCBpbiB1c2VyLgogIC8vISAKICAvLyEgXHBhcmFtIHRpdGxlIFRoZSBuYW1lIG9mIHRoZSBwYXJhbWV0ZXIgdG8gcmV0dXJuCiAgLy8hIFxwYXJhbSBkZWZhdWx0dmFsdWUgQSB2YWx1ZSB0byByZXR1cm4gaWYgdGhlIHByb3BlcnR5IGRvZXMgbm90IGV4aXN0IGZvciB0aGF0IHVzZXIKICAvLyEgXHJldHVybiBUaGUgcHJvcGVydHkgdmFsdWUsIG9yIGZhbHNlLgogIC8vIQogIGZ1bmN0aW9uIEdldFVzZXJQcm9wZXJ0eSgkdGl0bGUsJGRlZmF1bHR2YWx1ZT1mYWxzZSkgCiAgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCgogIC8vISBHZXQgcHJvcGVydHkgaW5mb3JtYXRpb24gZm9yIHRoZSBzcGVjaWZpZWQgdXNlciBpZAogIC8vIQogIC8vISBccGFyYW0gdGl0bGUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHdlIGFyZSBzZWFyY2hpbmcgZm9yCiAgLy8hIFxwYXJhbSB1c2VyaWQgVGhlIHVzZXJpZCBmb3Igd2hvJ3MgcHJvcGVydHkgd2UgYXJlIHNlYXJjaGluZwogIC8vISBccGFyYW0gZGVmYXVsdHZhbHVlIFRoZSB2YWx1ZSB0byByZXR1cm4gaWYgdGhpcyBwcm9wZXJ0eSBkb2VzIG5vdCBleGlzdCBmb3IgdGhpcyB1c2VyCiAgLy8hIFxyZXR1cm4gVGhlIHByb3BlcnR5IHZhbHVlLCBvciBmYWxzZS4KICAvLyEKICBmdW5jdGlvbiBHZXRVc2VyUHJvcGVydHlGdWxsKCR0aXRsZSwkdXNlcmlkLCAkZGVmYXVsdHZhbHVlPWZhbHNlKSAKICB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKCgogIC8vISBTZXQgYSBwcm9wZXJ0eSBmb3IgdGhlIGN1cnJlbnQgdXNlcgogIC8vISAKICAvLyEgU2V0cyBhIHByb3BlcnR5IGZvciB0aGUgY3VycmVudGx5IGxvZ2dlZCBpbiB1c2VyCiAgLy8hCiAgLy8hIFxwYXJhbSB0aXRsZSBUaGUgcHJvcGVydHkgbmFtZQogIC8vISBccGFyYW0gZGF0YSAgVGhlIHByb3BlcnR5IHZhbHVlCiAgLy8hIFxyZXR1cm5zIHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb3RoZXJ3aXNlCiAgLy8hCiAgZnVuY3Rpb24gU2V0VXNlclByb3BlcnR5KCR0aXRsZSwkZGF0YSkgCiAgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCgogIC8vISBTZXQgYSBwcm9wZXJ0eSBmb3IgdGhlIHByb3ZpZGVkIHVzZXJpZAogIC8vIQogIC8vISBTZXRzIGEgcHJvcGVydHkgZXhjbHVzaXZlbHkgZm9yIGEgY2VydGFpbiB1c2VyCiAgLy8hCiAgLy8hIFxwYXJhbSB0aXRsZSBUaGUgcHJvcGVydHkgbmFtZQogIC8vISBccGFyYW0gZGF0YSAgVGhlIHByb3BlcnR5IHZhbHVlCiAgLy8hIFxwYXJhbSB1c2VyaWQgVGhlIGRlc2lyZWQgdXNlciBpZAogIC8vIQogIGZ1bmN0aW9uIFNldFVzZXJQcm9wZXJ0eUZ1bGwoJHRpdGxlLCRkYXRhLCR1c2VyaWQpIAogIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgoKICAvLyEgRGVsZXRlIGEgcHJvcGVydHkgZm9yIHRoZSBjdXJyZW50IHVzZXIKICAvLyEKICAvLyEgUmVtb3ZlIGEgcHJvcGVydHkgZnJvbSB0aGUgZGF0YWJhc2UgZm9yIHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXIKICAvLyEKICAvLyEgXHBhcmFtIHRpdGxlIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byBkZWxldGUKICAvLyEgXHBhcmFtIGFsbCAgIE9wdGlvbmFsbHkgZGVsZXRlIGFsbCBwcm9wZXJ0aWVzIGZvciB0aGlzIHVzZXIgIAogIC8vISBccmV0dXJucyB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aHdlcmlzZW4KICAvLyEKICBmdW5jdGlvbiBEZWxldGVVc2VyUHJvcGVydHkoJHRpdGxlLCRhbGw9ZmFsc2UpIAogIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgoKICAvLyEgRGVsZXRlIGEgcHJvcGVydHkgZm9yIGEgc3BlY2lmaWVkIHVzZXIKICAvLyEKICAvLyFccGFyYW0gdGl0bGUgVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGRlbGV0ZQogIC8vIVxwYXJhbSB1c2VyaWQgVGhlIGlkIHRvIGRlbGV0ZSB0aGUgcHJvcGVydHkgZm9yCiAgLy8hXHBhcmFtIGFsbCAob3B0aW9uYWwpIERlbGV0ZSBhbGwgcHJvcGVydGllcyBmb3IgdGhlIHNwZWNpZmllZCB1c2VyaWQuCiAgLy8hXHJldHVybiB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZS4KICAvLyEKICBmdW5jdGlvbiBEZWxldGVVc2VyUHJvcGVydHlGdWxsKCR0aXRsZSwkdXNlcmlkLCRhbGw9ZmFsc2UpIAogIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgoKICAvLyEgRGVsZXRlIGFsbCBvZiB0aGUgY3VycmVudCB1c2VycyBwcm9wZXJ0aWVzCiAgLy8hCiAgLy8hIFxyZXR1cm4gdHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UKICAvLyEKICBmdW5jdGlvbiBEZWxldGVBbGxVc2VyUHJvcGVydGllcygpIAogIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgoKICAvLyEgRGVsZXRlIEFsbCBwcm9wZXJ0aWVzIGZvciBhIHNwZWNpZmllZCB1c2VyIGlkCiAgLy8hCiAgLy8hIFxwYXJhbSB1c2VyaWQKICAvLyEgXHJldHVybiB0cnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG90aGVyd2lzZQogIC8vIQogIGZ1bmN0aW9uIERlbGV0ZUFsbFVzZXJQcm9wZXJ0aWVzRnVsbCgkdXNlcmlkKSAKICB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKCiAgLy8hIENoZWNrIHRoZSBzdXBwbGllZCBwYXNzd29yZCBhbmQgZW5zdXJlIGl0IG1hY2hlcyB0aGUgb25lIGluIHRoZSBkYXRhYmFzZQogIC8vIQogIC8vIVxwYXJhbXMgdXNlcm5hbWUgVGhlIHVzZXJuYW1lIHRvIHRlc3QgZm9yCiAgLy8hXHBhcmFtcyBwYXNzd29yZCBUaGUgcGFzc3dvcmQgdG8gdGVzdAogIC8vIVxyZXR1cm4gdHJ1ZSBpZiBwYXNzd29yZHMgbWF0Y2gsIGZhbHNlIG90aGVyd2lzZS4KICAvLyEKICBmdW5jdGlvbiBDaGVja1Bhc3N3b3JkKCR1c2VybmFtZSwkcGFzc3dvcmQpIAogIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgoKICAvLyEgUmV0dXJuIHRoZSB1c2VybmFtZSBvZiB0aGUgY3VycmVudCB1c2VyCiAgLy8hCiAgLy8hIFxyZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdXNlcm5hbWUgb2YgdGhlIGN1cnJlbnRseSBsb2dnZWQgaW4gdXNlcgogIC8vISAgIGlmIG5vb25lIGlzIGxvZ2dlZCBpbiwgdGhlbiBhbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQKICAvLyEKICBmdW5jdGlvbiBMb2dnZWRJbk5hbWUoKSAKICB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKCiAgLy8hIFJldHVybiB0aGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgY3VycmVudCB1c2VyCiAgLy8hCiAgLy8hIFxyZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZW1haWwgYWRkcmVzcyBvZiB0aGUgY3VycmVudGx5IGxvZ2dlZCBpbiB1c2VyCiAgLy8hICAgaWYgbm9vbmUgaXMgbG9nZ2VkIGluLCB0aGVuIGFuIGVtcHR5IHN0cmluZyBpcyByZXR1cm5lZAogIC8vIQogIGZ1bmN0aW9uIExvZ2dlZEluRW1haWwoKSAKICB7CiAgICByZXR1cm4gIiI7CiAgfQoKCiAgLy8hIExvZ291dCB0aGUgY3VycmVudCB1c2VyCiAgZnVuY3Rpb24gTG9nb3V0KCkgCiAgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCgogIC8vISBFeHBpcmUgYW55IGFuZCBhbGwgdXNlcnMgdGhhdCBoYXZlIGJlZW4gYXdheSBmb3IgdG9vIGxvbmcKICBmdW5jdGlvbiBFeHBpcmVVc2VycygpIAogIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgogIC8vISBSZXR1cm4gdGhlIHVzZXJpZCBvZiB0aGUgY3VycmVudGx5IGxvZ2dlZCBpbiB1c2VyCiAgZnVuY3Rpb24gTG9nZ2VkSW5JZCgpIAogIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgoKICAvLyEgVGVzdHMgd2V0aGVyIHRoZSBjdXJyZW50IHVzZXIgaXMgbG9nZ2VkIGluIG9yIG5vdC4KICBmdW5jdGlvbiBMb2dnZWRJbigpIAogIHsKICAgIGlmICgkdGhpcy0+TG9nZ2VkSW5JZCgpPT1mYWxzZSkgcmV0dXJuIGZhbHNlOyBlbHNlIHJldHVybiB0cnVlOwogIH0KCgogIC8vISBUZXN0IHdldGhlciBhbiBhc3NvY2lhdGlvbiBleGlzdHMgYmV0d2VlbiB0aGUgc3BlY2lmaWVkIHVzZXIgYW5kIGdyb3VwCiAgLy8hCiAgLy8hIFxwYXJhbSB1c2VyaWQgVGhlIHVzZXJpZCB0byB0ZXN0CiAgLy8hIFxwYXJhbSBncm91cGlkIFRoZSBncm91cGlkIHRvIHRlc3QKICAvLyEgXHJldHVybiB0cnVlIGlmIGFuIGFzc29jaWF0aW9uIGV4aXN0cywgZmFsc2Ugb3RoZXJ3aXNlCiAgLy8hCiAgZnVuY3Rpb24gTWVtYmVyT2ZHcm91cCgkdXNlcmlkLCRncm91cGlkKSAKICB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKCiAgLy8hIFJldHVybiB0aGUgdXNlcm5hbWUgdGhhdCBtYWNoZXMgdGhlIHNwZWNpZmllZCB1c2VyIGlkCiAgLy8hCiAgLy8hXHJldHVybiBUaGUgbWF0Y2hpbmcgdXNlcm5hbWUsIG9yIGZhbHNlCiAgLy8hCiAgZnVuY3Rpb24gR2V0VXNlck5hbWUoJHVzZXJpZCkgCiAgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCgogIC8vISBHZXQgdGhlIGVtYWlsIGFkZHJlc3Mgb2YgdGhlIHVzZXIgd2l0aCB0aGUgc3BlY2lmaWVkIGlkCiAgLy8hCiAgLy8hXHJldHVybiBFbWFpbCBhZGRyZXNzLCBvciBmYWxzZQogIC8vIQogIGZ1bmN0aW9uIEdldEVtYWlsKCR1c2VyaWQpIAogIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgoKICAvLyEgR2V0IHRoZSB1c2VyaWQgb2YgdGhlIHVzZXIgd2l0aCB0aGUgbWF0Y2hpbmcgbmFtZQogIC8vIQogIC8vISBccmV0dXJuIFVzZXJJRCwgb3IgZmFsc2UKICAvLyEKICBmdW5jdGlvbiBHZXRVc2VySUQoJHVzZXJuYW1lKSAKICB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKCiAgLy8hIEFkZCBhIG5ldyBncm91cAogIC8vIQogIC8vISBBZGRzIGEgbmV3IGdyb3VwIHdpdGggdGhlIHN1cHBsaWVkIG5hbWUgYW5kIGRlc2NyaXB0aW9uCiAgLy8hCiAgLy8hIFxwYXJhbSBuYW1lIFRoZSBuZXcgZ3JvdXAgbmFtZQogIC8vISBccGFyYW0gZGVzY3JpcHRpb24gdGhlIGdyb3VwIGRlc2NyaXB0aW9uCiAgLy8hIFxyZXR1cm4gYW4gYXJyYXksIHRoZSBmaXJzdCBlbGVtZW50IGlzIGEgZGVzY3JpcHRpb24gZGVzY3JpYmluZyB0aGUgcmV0dXJuIHN0YXR1cyAKICAvLyEgICAgKHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb24gZXJyb3IpLiAgVGhlIHNlY29uZCBlbGVtZW50IChvcHRpb25hbCkgaXMgYW4gZXJyb3Igc3RyaW5nIGluIHRoZSAKICAvLyEgICAgZXZlbnQgb2YgYW4gZXJyb3IuCiAgLy8hCiAgZnVuY3Rpb24gQWRkR3JvdXAoICRuYW1lLCAkZGVzY3JpcHRpb24gKQogIHsKICAgIHJldHVybiBhcnJheShGQUxTRSwiRnVuY3Rpb24gbm90IGRlZmluZWQiKTsKICB9CgoKICAvLyEgQWRkIGEgbmV3IHVzZXIKICAvLyEKICAvLyEgQWRkIHRoZSBzcGVjaWZpZWQgdXNlciB0byB0aGUgZGF0YWJhc2UKICAvLyEKICAvLyEgXHBhcmFtIG5hbWUgVGhlIGRlc2lyZWQgdXNlcm5hbWUKICAvLyEgXHBhcmFtIHBhc3N3b3JkIFRoZSBkZXNpcmVkIHBhc3N3b3JkICh1bmVuY3J5cHRlZCkKICAvLyEgXHBhcmFtIGV4cGlyZXMgVGhlIGV4cGlyeSBkYXRlCiAgLy8hIFxyZXR1cm4gYW4gYXJyYXksIHRoZSBmaXJzdCBlbGVtZW50IGlzIGEgZGVzY3JpcHRpb24gZGVzY3JpYmluZyB0aGUgcmV0dXJuIHN0YXR1cyAKICAvLyEgICAgKHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb24gZXJyb3IpLiAgVGhlIHNlY29uZCBlbGVtZW50IChvcHRpb25hbCkgaXMgYW4gZXJyb3Igc3RyaW5nIGluIHRoZSAKICAvLyEgICAgZXZlbnQgb2YgYW4gZXJyb3IsIG9yIHRoZSB1c2VyaWQgb3RoZXJ3aXNlCiAgLy8hCiAgZnVuY3Rpb24gQWRkVXNlciggJG5hbWUsICRwYXNzd29yZCwgJGV4cGlyZXMgKQogIHsKICAgIHJldHVybiBhcnJheShGQUxTRSwiRnVuY3Rpb24gbm90IGRlZmluZWQiKTsKICB9CgoKICAvLyEgR2V0IHRoZSBncm91cCBuYW1lIGdpdmVuIGEgZ3JvdXAgaWQKICAvLyEKICAvLyEgXHJldHVybiBncm91cCBuYW1lLCBvciBmYWxzZQogIC8vIQogIGZ1bmN0aW9uIEdldEdyb3VwTmFtZSgkZ3JvdXBpZCkgCiAgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCgogIC8vISBHZXQgdGhlIGdyb3VwIGRlc2NyaXB0aW9uIGdpdmVuIGEgZ3JvdXAgaWQKICAvLyEKICAvLyEgXHJldHVybiBncm91cCBkZXNjcmlwdGlvbiwgb3IgZmFsc2UKICAvLyEKICBmdW5jdGlvbiBHZXRHcm91cERlc2MoJGdyb3VwaWQpCiAgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCgogIC8vISBEZWxldGUgdGhlIHNwZWNpZmllZCBncm91cAogIC8vIQogIC8vISBEZWxldGUgdGhlIGdyb3VwIHJlY29yZCBmb3IgdGhlIG1hdGNoaW5kIGlkCiAgLy8hCiAgLy8hIFxyZXR1cm4gYW4gYXJyYXksIHRoZSBmaXJzdCBlbGVtZW50IGlzIGEgZGVzY3JpcHRpb24gZGVzY3JpYmluZyB0aGUgcmV0dXJuIHN0YXR1cyAKICAvLyEgICAgKHRydWUgb24gc3VjY2VzcywgZmFsc2Ugb24gZXJyb3IpLiAgVGhlIHNlY29uZCBlbGVtZW50IChvcHRpb25hbCkgaXMgYW4gZXJyb3Igc3RyaW5nIGluIHRoZSAKICAvLyEgICAgZXZlbnQgb2YgYW4gZXJyb3IuCiAgLy8hCiAgZnVuY3Rpb24gRGVsZXRlR3JvdXBGdWxsKCAkaWQgKQogIHsKICAgIHJldHVybiBhcnJheShGQUxTRSwiRnVuY3Rpb24gbm90IGRlZmluZWQiKTsKICB9CgoKICAvLyEgR2V0IGEgbGlzdCBvZiBhbGwgb2YgdGhlIGdyb3VwcywgYW5kIHRoZWlyIGlkJ3MKICAvLyEKICAvLyEgXHJldHVybiBhbiBhc3NvY2lhdGl2ZSBhcnJheSBjb250YWluaW5nIGdyb3VwIG5hbWVzIGFzIGtleXMsIGFuZCBpZCdzIGFzIHZhbHVlcwogIC8vIQogIGZ1bmN0aW9uIEdldEdyb3VwTGlzdCgpCiAgewogICAgcmV0dXJuIGFycmF5KCk7CiAgfQoKCiAgLy8hIEdldCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGxldGUgbGlzdCBvZiBncm91cHMKICAvLyEKICAvLyEgVGhpcyBtZXRob2QgcmV0dXJucyBhbiBhcnJheSBvZiBncm91cGluZm8gYXNzb2NpYXRpb25zLCByZXByZXNlbnRpbmcgYWxsIG9mIHRoZQogIC8vISBncm91cHMgaW4gdGhlIHRhYmxlLgogIC8vIQogIC8vISBccmV0dXJucyBhbiBhcnJheSBvZiBncm91cGluZm8gYXNzb2NpYXRpb25zCiAgLy8hCiAgZnVuY3Rpb24gR2V0R3JvdXBMaXN0RnVsbCgpCiAgewogICAgcmV0dXJuIGFycmF5KCk7CiAgfQoKCiAgLy8hIEdldCB0aGUgZ3JvdXBpZCBnaXZlbiBhIGdyb3VwIG5hbWUKICAvLyEKICAvLyEgXHJldHVybiBncm91cGlkIG9yIGZhbHNlCiAgLy8hCiAgZnVuY3Rpb24gR2V0R3JvdXBJRCgkZ3JvdXBuYW1lKQogIHsKICAgIHJldHVybiBmYWxzZTsKICB9CgoKICAvLyEgR2V0IGEgbGlzdCBvZiB0aGUgZ3JvdXBzIHRoYXQgdGhlIHNwZWNpZmllZCB1c2VyIGJlbG9uZ3MgdG8KICAvLyEKICAvLyEgUmV0dXJuIGEgc3RyaW5nIG9mIGNvbW1hIGRlbGltaXRlZCBncm91cCBuYW1lcywgY29ycmVzcG9uZGluZyB0byB0aGUKICAvLyEgZ3JvdXBzIHRoYXQgdGhlIHVzZXIgaXMgYSBtZW1iZXIgb2YKICAvLyEKICAvLyEgXHJldHVybiBhIGNvbW1hIGRlbGltaXRlZCBsaXN0IG9mIGdyb3VwIG5hbWVzLCBvciAibm9uZSIKICAvLyEKICBmdW5jdGlvbiBHZXRNZW1iZXJHcm91cHMoJHVzZXJpZCkKICB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKCiAgLy8hIERlbGV0ZSB0aGUgdXNlciB3aXRoIHRoZSBzcGVjaWZpZWQgaWQKICAvLyEgXG5vdGUgVGhpcyBpcyBhIGRlcHJlY2F0ZWQgZnVuY3Rpb24gYXMgaXQgcmVsaWVzIG9uIHRoZSB1c2VyaWQgYmVpbmcgc2V0IGluIHRoZSBfR0VUCiAgLy8hIHZhcmlhYmxlLgogIC8vIQogIGZ1bmN0aW9uIERlbGV0ZVVzZXIoJGlkKSAgCiAgewogICAgcmV0dXJuIGZhbHNlOwogIH0KCn0gLy8gY2xhc3MKCj8+]]></data>
	</file>
</module>
