<?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.4</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+IC0gRGlzcGxheSB0aGUgZm9yZ290IHBhc3N3b3JkIGZvcm08L2xpPgo8L3VsPgo8L3A+CjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IHJldHVybnRvPSJwYWdlIjwvbGk+CjxwPlVzZWQgd2l0aCB0aGUgbG9naW4sIGxvZ291dCwgYW5kIGNoYW5nZXNldHRpbmdzIGZvcm1zLCB0aGlzIHBhcmFtZXRlciBjb250YWlucyB0aGUgcGFnZSBpZCBvciBhbGlhcyBvZiBhIHBhZ2UgdG8gcmVkaXJlY3QgdG8sIHdoZW4gdGhlIGZvcm0gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZDwvcD4KPC91bD4KPHA+QXMgcGVyIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYXMtaXMuIFBsZWFzZSByZWFkIHRoZSB0ZXh0Cm9mIHRoZSBsaWNlbnNlIGZvciB0aGUgZnVsbCBkaXNjbGFpbWVyLjwvcD4KPGgzPlJlcXVpcmVtZW50czwvaDM+CjxwPkluIG9yZGVyIHRvIGltcGxlbWVudCB0aGUgZm9yZ290dGVuIHBhc3N3b3JkIGZ1bmN0aW9uYWxpdHksIHRoaXMgbW9kdWxlIHJlcXVpcmVzIHRoZSBDTVNNYWlsZXIgbW9kdWxlIHRvIGJlIHByZXZpb3VzbHkgaW5zdGFsbGVkPC9wPgo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDA1LCBSb2JlcnQgQ2FtcGJlbCA8YSBocmVmPSJtYWlsdG86Y2FsZ3V5MTAwMEBob3RtYWlsLmNvbSI+Jmx0O2NhbGd1eTEwMDBAaG90bWFpbC5jb20mZ3Q7PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPjxoMz5EZXBlbmRlbmNpZXM8L2gzPjx1bD48bGk+Q01TTWFpbGVyID0mZ3Q7IDEuNzMuMzwvbGk+PC91bD48aDM+UGFyYW1ldGVyczwvaDM+PHVsPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGxhbmc9ImVuX1VTIiAtIFBhcmFtZXRlciBpcyB1c2VkIHRvIHNwZWNpZnkgd2hhdCBsYW5ndWFnZSB0byB1c2UgZm9yIGRpc3BsYXkgb24gdGhlIGZyb250ZW5kLiBOb3QgYWxsIG1vZHVsZXMgc3VwcG9ydCBvciBuZWVkIHRoaXMuPC9saT48L3VsPg==</help>
  <about>PGJyIC8+QXV0aG9yOiBjYWxndXkxMDAwICZsdDtjYWxndXkxMDAwQGhvdG1haWwuY29tJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuMC40PGJyIC8+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+MS4wLjQgLSBBcHJpbCwgMjAwNjxwPgogICAgPHA+Rml4ZXMgdG8gdGhlIGV4cG9ydCBjb2RlPC9wPgogICAgPHA+Q29kZSBjbGVhbnVwIChhbHBoYWJldGl6ZSBmdW5jdGlvbnMpPC9wPgogICAgPHA+TWlub3IgZml4ZXMgYW5kIGVuaGFuY2VtZW50cyAocmVjb21tZW5kZWQgYnkgbmlsczczKSBmb3IgZGVhbGluZyB3aXRoIHRoZSBjaGFuZ2UgcGFzc3dvcmQgc3R1ZmYuPC9wPgogICAgPHA+UmVtb3ZlZCB0aGUgcmVxdWlyZW1lbnQgZm9yIENNUyAwLjEyLCBhbmQgcHV0IGl0IGJhY2sgdG8gMC4xMS4yPC9wPgo8L2xpPgo8L3VsPjxiciAvPg==</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[PD9waHAKcmVxdWlyZV9vbmNlKCAiVXNlck1hbmlwdWxhdG9yLmNsYXNzLnBocCIgKTsKCmNsYXNzIEZyb250RW5kVXNlcnNNYW5pcHVsYXRvciBleHRlbmRzIFVzZXJNYW5pcHVsYXRvcgp7CiAgZnVuY3Rpb24gQ291bnRUZW1wQ29kZVJlY29yZHMoKQogIHsKICAgICRkYiA9ICR0aGlzLT5HZXREQigpOwogICAgJHEgPSAiU0VMRUNUIENPVU5UKCopIEFTIGNvdW50IEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3RlbXBjb2RlIjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEgKTsKICAgIGlmKCAhJGRicmVzdWx0ICkKICAgICAgewoJcmV0dXJuIDA7CiAgICAgIH0KICAgICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7CiAgICByZXR1cm4gJHJvd1snY291bnQnXTsKICB9CgogIGZ1bmN0aW9uIEV4cGlyZVRlbXBDb2RlcygkZXhwaXJ5Y29kZSkKICB7CiAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKICAgICRleHBpcmVzID0gc3RydG90aW1lKCAkZXhwaXJ5Y29kZSApOwogICAgJHEgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3RlbXBjb2RlCiAgICAgICAgICBXSEVSRSBjcmVhdGVkID4gPyI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggJGV4cGlyZXMgKSApOwogICAgaWYoICEkZGJyZXN1bHQgKSByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gdHJ1ZTsgICAgCiAgfQoKICBmdW5jdGlvbiBSZW1vdmVVc2VyVGVtcENvZGUoICR1aWQgKQogIHsKICAgICRkYiA9ICR0aGlzLT5HZXREYigpOwogICAgJHEgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3RlbXBjb2RlCiAgICAgICAgICBXSEVSRSB1c2VyaWQgPSA/IjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkdWlkICkgKTsKICAgIGlmKCAhJGRicmVzdWx0ICkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRydWU7CiAgfQoKCiAgZnVuY3Rpb24gR2V0VXNlclRlbXBDb2RlKCAkdWlkICkKICB7CiAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKICAgICRxID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3RlbXBjb2RlCiAgICAgICAgICBXSEVSRSB1c2VyaWQgPSA/IjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkdWlkICkpOwogICAgaWYoICRkYnJlc3VsdCA9PSBGQUxTRSB8fCAkZGJyZXN1bHQtPlJvd0NvdW50KCkgPT0gMCApCiAgICAgIHsKCXJldHVybiBhcnJheShGQUxTRSwkZGItPkVycm9yTXNnKCkpOwogICAgICB9CiAgICAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpOwogICAgcmV0dXJuIGFycmF5KFRSVUUsJHJvdyk7CiAgfQoKCiAgZnVuY3Rpb24gU2V0VXNlclRlbXBDb2RlKCAkdWlkLCAkY29kZSApCiAgewogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICAkcSA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfdGVtcGNvZGUKICAgICAgICAgIFZBTFVFUyg/LD8sPykiOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICR1aWQsICRjb2RlLAoJCQkJCSAkZGItPkRCVGltZVN0YW1wKHRpbWUoKSkpICk7CiAgICBpZiggJGRicmVzdWx0ID09IGZhbHNlICkKICAgICAgewoJcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgoKICBmdW5jdGlvbiBTZXRQcm9wZXJ0eURlZm4oICRuYW1lLCAkbmV3bmFtZSwgJHByb21wdCwgJGxlbmd0aCwgJHR5cGUsICRtYXhsZW5ndGggPSAwICkKICB7CiAgICAkZGIgPSAkdGhpcy0+Z2V0RGIoKTsKICAgIAogICAgaWYoICRtYXhsZW5ndGggPT0gMCApCiAgICAgIHsKCSRtYXhsZW5ndGggPSAkbGVuZ3RoOwogICAgICB9CiAgICAkcSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3Byb3BkZWZuCiAgICAgICAgICBTRVQgbmFtZSA9ID8sIHByb21wdCA9ID8sIHR5cGUgPSA/LCBsZW5ndGggPSA/LCBtYXhsZW5ndGggPSA/IAogICAgICAgICAgV0hFUkUgbmFtZSA9ID8iOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICRuZXduYW1lLCAkcHJvbXB0LCAkdHlwZSwgJGxlbmd0aCwgJG1heGxlbmd0aCwgJG5hbWUgKSk7CiAgICBpZiggISRkYnJlc3VsdCApCiAgICAgIHsKCXJldHVybiBmYWxzZTsKICAgICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKCiAgZnVuY3Rpb24gRGVsZXRlUHJvcGVydHlEZWZuKCAkbmFtZSApCiAgewogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CgogICAgJHEgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3Byb3BkZWZuCiAgICAgICAgICBXSEVSRSBuYW1lPT8iOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICRuYW1lICkgKTsKICAgIGlmKCAhJGRicmVzdWx0ICkKICAgICAgewoJcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CgoKICBmdW5jdGlvbiBHZXRQcm9wZXJ0eUdyb3VwUmVsYXRpb25zKCAkdGl0bGUgKQogIHsKICAgICRkYiA9ICR0aGlzLT5HZXREYigpOwoKICAgICRxID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2dyb3VwcHJvcG1hcAogICAgICAgICAgV0hFUkUgbmFtZSA9ID8gT1JERVIgQlkgc29ydF9rZXkgREVTQyI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggJHRpdGxlICkgKTsKICAgIGlmKCAhJGRicmVzdWx0ICkKICAgICAgewoJcmV0dXJuIGFycmF5KEZBTFNFLCRkYi0+RXJyb3JNc2coKSk7CiAgICAgIH0KICAgICRyZXN1bHQgPSBhcnJheSgpOwogICAgd2hpbGUoICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkgKQogICAgICB7CglhcnJheV9wdXNoKCAkcmVzdWx0LCAkcm93ICk7CiAgICAgIH0KICAgIHJldHVybiAkcmVzdWx0OwogIH0KCgogIGZ1bmN0aW9uIElzQWNjb3VudEV4cGlyZWQoICR1aWQgKQogIHsKICAgICRkYiA9ICR0aGlzLT5HZXREYigpOwogICAgCiAgICAkcSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc191c2VycwogICAgICAgICAgV0hFUkUgaWQgPSA/IEFORCBleHBpcmVzID4gPyI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggJHVpZCwgCgkJCQkJICRkYi0+RGJUaW1lU3RhbXAodGltZSgpKSApICk7CiAgICBpZiggJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+Um93Q291bnQoKSA9PSAxICkKICAgICAgewoJcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgcmV0dXJuIHRydWU7CiAgfQoKCiAgZnVuY3Rpb24gR2V0R3JvdXBQcm9wZXJ0eVJlbGF0aW9ucyggJGdycGlkICkKICB7CiAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKCiAgICAkcSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19ncm91cHByb3BtYXAKICAgICAgICAgIFdIRVJFIGdyb3VwX2lkID0gPyBPUkRFUiBCWSBzb3J0X2tleSBERVNDIjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkZ3JwaWQgKSk7CiAgICBpZiggISRkYnJlc3VsdCApCiAgICAgIHsKCXJldHVybiBhcnJheShGQUxTRSwkZGItPkVycm9yTXNnKCkpOwogICAgICB9CiAgICAkcmVzdWx0ID0gYXJyYXkoKTsKICAgIHdoaWxlKCAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpICkKICAgICAgewoJJHJlc3VsdFtdID0gJHJvdzsKICAgICAgfQogICAgcmV0dXJuICRyZXN1bHQ7CiAgfQoKCiAgZnVuY3Rpb24gQWRkR3JvdXBQcm9wZXJ0eVJlbGF0aW9uKCAkZ3JwaWQsICRwcm9wbmFtZSwgJHNvcnRrZXksICR2YWwgKQogIHsKICAgICRkYiA9ICR0aGlzLT5HZXREYigpOwoKICAgICRxID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19ncm91cHByb3BtYXAKICAgICAgICAgIFZBTFVFUyg/LD8sPyw/KSI7IAogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICRwcm9wbmFtZSwgJGdycGlkLCAkc29ydGtleSwgJHZhbCApKTsKICAgIGlmKCAhJGRicmVzdWx0ICkKICAgICAgewoJcmV0dXJuIGFycmF5KEZBTFNFLCRkYi0+RXJyb3JNc2coKSk7CiAgICAgIH0KICAgIHJldHVybiBhcnJheShUUlVFKTsKICB9CgoKICBmdW5jdGlvbiBEZWxldGVBbGxHcm91cFByb3BlcnR5UmVsYXRpb25zKCAkZ3JwaWQgKQogIHsKICAgICRkYiA9ICR0aGlzLT5HZXREYigpOwogICAgCiAgICAkcSA9ICJERUxFVEUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfZ3JvdXBwcm9wbWFwCiAgICAgICAgICBXSEVSRSBncm91cF9pZCA9ID8iOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICRncnBpZCApKTsKICAgIGlmKCAhJGRicmVzdWx0ICkKICAgICAgewoJcmV0dXJuIGFycmF5KEZBTFNFLCRkYi0+RXJyb3JNc2coKSk7CiAgICAgIH0KICAgIHJldHVybiBhcnJheShUUlVFKTsKICB9CgoKICBmdW5jdGlvbiBEZWxldGVHcm91cFByb3BlcnR5UmVsYXRpb24oICRncnBpZCwgJHByb3BuYW1lICkKICB7CiAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKCiAgICAkcSA9ICJERUxFVEUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfZ3JvdXBwcm9wbWFwCiAgICAgICAgICBXSEVSRSBuYW1lID0gPyBBTkQgZ3JvdXBfaWQgPSA/IjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkcHJvcG5hbWUsICRncnBpZCApKTsKICAgIGlmKCAhJGRicmVzdWx0ICkKICAgICAgewoJcmV0dXJuIGFycmF5KEZBTFNFLCRkYi0+RXJyb3JNc2coKSk7CiAgICAgIH0KICAgIHJldHVybiBhcnJheShUUlVFKTsKICB9CgoKICBmdW5jdGlvbiBBZGRQcm9wZXJ0eURlZm4oICRuYW1lLCAkcHJvbXB0LCAkdHlwZSwgJGxlbmd0aCwgJG1heGxlbmd0aCA9IDAgKQogIHsKICAgICRkYiA9ICR0aGlzLT5HZXREYigpOwoKICAgIGlmKCAkbWF4bGVuZ3RoID09IDAgKQogICAgICB7CgkkbWF4bGVuZ3RoID09ICRsZW5ndGg7CiAgICAgIH0KCiAgICAkcCA9IGFycmF5KCAkbmFtZSwgJHByb21wdCwgJHR5cGUsICRsZW5ndGgsICRtYXhsZW5ndGggKTsKICAgICRxID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19wcm9wZGVmbgogICAgICAgICAgVkFMVUVTICg/LD8sPyw/LD8pIjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsICRwICk7CiAgICBpZiggJGRicmVzdWx0ID09IGZhbHNlICkKICAgICAgewoJcmV0dXJuIGFycmF5KEZBTFNFLCAkZGItPkVycm9yTXNnKCkpOwogICAgICB9CiAgICByZXR1cm4gYXJyYXkoVFJVRSk7CiAgfQoKCiAgZnVuY3Rpb24gQWRkU2VsZWN0T3B0aW9ucyggJG5hbWUsICRvcHRpb25zICkKICB7CiAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKICAgICRpbnNlcnRfdmFscyA9ICcnOwogICAgJG9yZGVyX2lkID0gMDsKICAgIGZvcmVhY2ggKCRvcHRpb25zIGFzICRvcHR0ZXh0KXsKICAgICAgLy8gaWYgbm8gYWN0dWFsIHRleHQgaW4gdGhlIGxpbmUsIG1ha2Ugc3VyZSBpdCBlcXVhbHMgJycsCiAgICAgIC8vIGluIG9yZGVyIG5vdCB0byBhZGQgaXQgdG8gdGhlIGRiCiAgICAgICRvcHR0ZXh0ID0gdHJpbSgkb3B0dGV4dCk7CiAgICAgIGlmKHRyaW0oJG9wdHRleHQpID09ICcnIHx8IHRyaW0oJG9wdHRleHQpID09ICdfXycgKXsKCWNvbnRpbnVlOwogICAgICB9CiAgICAgICRvcHRuYW1lID0gc3RyX3JlcGxhY2UoJyAnLCAnXycsICRvcHR0ZXh0KTsKICAgICAgJG9yZGVyX2lkKys7CiAgICAgICRpbnNlcnRfdmFscyAuPSAiKCciCgkuICRvcmRlcl9pZCAuICInLCAnIgoJLiAkb3B0bmFtZSAuICInLCAnIgoJLiAkb3B0dGV4dCAuICInLCAnIgoJLiAkbmFtZS4gIicpLCAiOwogICAgfQogICAgCiAgICAkaW5zZXJ0X3ZhbHMgPSBzdWJzdHIoJGluc2VydF92YWxzLCAwLCAtMik7CgogICAgJGRiID0gJHRoaXMtPmdldERiKCk7CiAgICAkcXVlcnkgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2Ryb3Bkb3ducwoJCQkob3JkZXJfaWQsIG9wdGlvbl9uYW1lLCBvcHRpb25fdGV4dCwgY29udHJvbF9uYW1lKSAKCQkJVkFMVUVTICIgLiAkaW5zZXJ0X3ZhbHM7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKICAgIGlmKCAkZGJyZXN1bHQgPT0gZmFsc2UgKSB7CiAgICAgIHJldHVybiBhcnJheShGQUxTRSwgJGRiLT5FcnJvck1zZygpKTsKICAgIH0KICAgIHJldHVybiBhcnJheShUUlVFKTsKICB9CgkJCgogIAogIAogIGZ1bmN0aW9uIERlbGV0ZVByb3BlcnR5RGVmbnMoKQogIHsKICAgICRkYiA9ICR0aGlzLT5HZXREYigpOwogICAgJHEgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3Byb3BkZWZuIjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEgKTsKICAgIGlmKCAkZGJyZXN1bHQgPT0gZmFsc2UgKQogICAgICB7CglyZXR1cm4gYXJyYXkoRkFMU0UsJGRiLT5FcnJvck1zZygpKTsKICAgICAgfQogICAgcmV0dXJuIGFycmF5KFRSVUUpOwogIH0KCgogIGZ1bmN0aW9uIERlbGV0ZVNlbGVjdE9wdGlvbnMoICRuYW1lICkKICB7CiAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKICAgICRxID0gIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19kcm9wZG93bnMKICAgICAgICAgIFdIRVJFIGNvbnRyb2xfbmFtZSA9ID8iOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICRuYW1lICkgKTsKICAgIGlmKCAkZGJyZXN1bHQgPT0gZmFsc2UgKQogICAgICB7CglyZXR1cm4gYXJyYXkoRkFMU0UsJGRiLT5FcnJvck1zZygpKTsKICAgICAgfQogICAgcmV0dXJuIGFycmF5KFRSVUUpOwogIH0KCgogIGZ1bmN0aW9uIEdldFByb3BlcnR5RGVmbiggJG5hbWUgKQogIHsKICAgICRkYiA9ICR0aGlzLT5HZXREYigpOwogICAgCiAgICAkcSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19wcm9wZGVmbgogICAgICAgICAgV0hFUkUgbmFtZSA9ID8iOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICRuYW1lICkgKTsKICAgIGlmKCAkZGJyZXN1bHQgPT0gZmFsc2UgKQogICAgICB7CglyZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7CiAgICBpZiggJHJvdyApCiAgICAgIHsKCXJldHVybiAkcm93OwogICAgICB9CiAgICBlbHNlCiAgICAgIHJldHVybiBGQUxTRTsKICB9CgogIGZ1bmN0aW9uIEdldFByb3BlcnR5RGVmbnMoKQogIHsKICAgICRkYiA9ICR0aGlzLT5HZXREYigpOwogICAgCiAgICAkcSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19wcm9wZGVmbiI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxICk7CiAgICBpZiggJGRicmVzdWx0ID09IGZhbHNlICkKICAgICAgewoJcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAkcmV0ID0gYXJyYXkoKTsKICAgIHdoaWxlKCAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpICkKICAgICAgewoJYXJyYXlfcHVzaCggJHJldCwgJHJvdyApOwogICAgICB9CiAgICByZXR1cm4gJHJldDsKICB9CgogIC8qKgogICAqIFJldHVybnMgc2VsZWN0IG9wdGlvbnMgYXMgYSBzaW1wbGUgb3IgYSAyIGRpbWVuc2lvbmFsIGFycmF5CiAgICoKICAgKiBAcGFyYW0gU3RyaW5nICRjb250cm9sbmFtZSAtIG5hbWUgb2YgdGhlIGRyb3Bkb3duIGFzIGluIHRoZSBwcm9wZGVmbiB0YWJsZQogICAqIEBwYXJhbSBpbnQgJGRpbSAtIGRpbWVuc2lvbiBvZiB0aGUgYXJyYXkKICAgKiAJaWYgJGRpbSA9PSAxLCByZXR1cm5zIGEgMSBkaW1lbnNpb25hbCBhcnJheSBuYW1lPT50ZXh0CiAgICogICAgaWYgJGRpbSA9PSAyLCByZXR1cm5zIGEgMiBkaW1lbnNpb25hbCBhcnJheSwgZWFjaCBpdGVtIGJlaW5nIGFuCiAgICogCQlhcnJheSB3aXRoIHByb3BlcnRpZXMgJ29wdGlvbl9uYW1lJywgJ29wdGlvbl90ZXh0JywgJ2NvbnRyb2xfbmFtZScuCiAgICovCiAgZnVuY3Rpb24gR2V0U2VsZWN0T3B0aW9ucyggJGNvbnRyb2xuYW1lLCAkZGltPTEgKQogIHsKCSRkYiA9ICR0aGlzLT5HZXREYigpOwoJCgkkcSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19kcm9wZG93bnMKCQlXSEVSRSBjb250cm9sX25hbWUgPSA/IE9SREVSIEJZIG9yZGVyX2lkIjsKCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCRjb250cm9sbmFtZSkgKTsKCWlmKCAkZGJyZXN1bHQgPT0gZmFsc2UgKSB7CgkJcmV0dXJuIGZhbHNlOwoJfQoJJHJldCA9IGFycmF5KCk7Cgl3aGlsZSggJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSApIHsKCQlpZiAoJGRpbT09Mil7CgkJCQlhcnJheV9wdXNoKCAkcmV0LCAkcm93ICk7CgkJfSBlbHNlIHsKCQkJCSRyZXRbJHJvd1snb3B0aW9uX25hbWUnXV0gPSAkcm93WydvcHRpb25fdGV4dCddOwoJCX0KCX0KCXJldHVybiAkcmV0OwogIH0KCiAgCiAgZnVuY3Rpb24gTG9naW4oICR1c2VybmFtZSwgJHBhc3N3b3JkICkKICB7CiAgICBpZiggISR0aGlzLT5DaGVja1Bhc3N3b3JkKCAkdXNlcm5hbWUsICRwYXNzd29yZCApICkKICAgICAgewoJJG1vZCA9ICR0aGlzLT5HZXRNb2R1bGUoKTsKCXJldHVybiBhcnJheShGQUxTRSwkbW9kLT5MYW5nKCdlcnJvcl9sb2dpbmZhaWxlZCcpKTsKICAgICAgfQoKICAgICR1aWQgPSAkdGhpcy0+R2V0VXNlcklEKCAkdXNlcm5hbWUgKTsKCiAgICBpZiggJHRoaXMtPklzQWNjb3VudEV4cGlyZWQoICR1aWQgKSApCiAgICAgIHsKCSRtb2QgPSAkdGhpcy0+R2V0TW9kdWxlKCk7CglyZXR1cm4gYXJyYXkoRkFMU0UsJG1vZC0+TGFuZygnZXJyb3JfYWNjb3VudGV4cGlyZWQnKSk7CiAgICAgIH0KCiAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKICAgICRxID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19sb2dnZWRpbiBWQUxVRVMgKD8sPyw/KSI7CgogICAgLyogd2UgbWF5IG5lZWQgdG8gc3RhcnQgYSBzZXNzaW9uIG5vdyAqLwogICAgaWYoIHNlc3Npb25faWQoKSA9PSAiIiApCiAgICAgIHsKICAgICAgICBzZXNzaW9uX3N0YXJ0KCk7CiAgICAgIH0KCiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggc2Vzc2lvbl9pZCgpLCB0aW1lKCksICR1aWQgKSk7CiAgICBpZiggISRkYnJlc3VsdCApIAogICAgICB7CglyZXR1cm4gYXJyYXkoRkFMU0UsICRkYi0+RXJyb3JNc2coKSk7CiAgICAgIH0KICAgIHJldHVybiBhcnJheShUUlVFKTsKICB9CgoKICBmdW5jdGlvbiBGZXVzZXJzTWFuaXB1bGF0b3IoICR0aGVfbW9kdWxlICkKICB7CiAgICBwYXJlbnQ6OlVzZXJNYW5pcHVsYXRvciggJHRoZV9tb2R1bGUgKTsKICB9CgogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICAvLyByZXR1cm5zIHRydWUvZmF1c2UKICBmdW5jdGlvbiBDaGVja0dyb3VwUGVybWlzc2lvbiggJGdpZCwgJHBlcm0gKQogIHsKICAgIC8vIHdlIGFsd2F5cyBoYXZlIHRvIHJldHVybiBmYWxzZSB1c2luZyB0aGlzIG1lY2hhbmlzbSAKICAgIC8vIGJlY2F1c2Ugd2UgYXJlIHVzaW5nIGRpZmZlcmVudCB0YWJsZXMgdGhhbiB3aXNoeSBpcyB1c2luZyBmb3IgCiAgICAvLyB1c2VycyBhbmQgZ3JvdXBzCiAgICByZXR1cm4gZmFsc2U7Ci8vICAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKICAgIAovLyAgICAgJHEgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4icGVybWlzc2lvbnMgV0hFUkUgcGVybWlzc2lvbl9uYW1lID0gPyI7Ci8vICAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggJHBlcm0gKSApOwovLyAgICAgaWYoICEkZGJyZXN1bHQgfHwgJGRicmVzdWx0LT5Sb3dDb3VudCgpID09IDAgKSByZXR1cm4gZmFsc2U7CgovLyAgICAgJHByb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7Ci8vICAgICAkcSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJncm91cF9wZXJtcyBXSEVSRSBwZXJtaXNzaW9uX2lkID0gPwovLyAgICAgICAgICAgQU5EIGdyb3VwX2lkID0gPyI7Ci8vICAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggJHByb3dbJ3Blcm1pc3Npb25faWQnXSwgJGdpZCApICk7Ci8vICAgICBpZiggISRkYnJlc3VsdCB8fCAkZGJyZXN1bHQtPlJvd0NvdW50KCkgPT0gMCApIHJldHVybiBmYWxzZTsKCi8vICAgICByZXR1cm4gdHJ1ZTsKICB9CgoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgLy8gcmV0dXJucyB0cnVlL2ZhbHNlCiAgZnVuY3Rpb24gQ2hlY2tVc2VyUGVybWlzc2lvbiggJHBlcm0gKQogIHsKICAgICR1aWQgPSAkdGhpcy0+TG9nZ2VkSW5JZCgpOwogICAgaWYoICRpZCA9PSBmYWxzZSApIHJldHVybiBmYWxzZTsKCiAgICByZXR1cm4gQ2hlY2tVc2VyUGVybWlzc2lvbkJ5VWlkKCAkdWlkLCAkcGVybSApOwogIH0KCgogIGZ1bmN0aW9uIENoZWNrVXNlclBlcm1pc3Npb25CeVVpZCggJHVpZCwgJHBlcm0gKQogIHsKICAgIC8vIHdlIGFsd2F5cyBoYXZlIHRvIHJldHVybiBmYWxzZSB1c2luZyB0aGlzIG1lY2hhbmlzbSAKICAgIC8vIGJlY2F1c2Ugd2UgYXJlIHVzaW5nIGRpZmZlcmVudCB0YWJsZXMgdGhhbiB3aXNoeSBpcyB1c2luZyBmb3IgCiAgICAvLyB1c2VycyBhbmQgZ3JvdXBzCiAgICByZXR1cm4gZmFsc2U7Ci8vICAgICAvLyBpZiB0aGUgdXNlciBiZWxvbmdzIHRvIGEgZ3JvdXAgdGhhdCBoYXMgdGhlIHBlcm1pc3Npb24sIHdlJ3JlIGxhdWdoaW5nCi8vICAgICAkZ3JvdXBzID0gJHRoaXMtPkdldE1lbWJlckdyb3Vwc0FycmF5KCAkdWlkICk7Ci8vICAgICBpZiggJGdyb3VwcyA9PSBmYWxzZSApIHJldHVybiBmYWxzZTsKICAgIAovLyAgICAgJGRiID0gJHRoaXMtPkdldERiKCk7Ci8vICAgICAkcSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJwZXJtaXNzaW9ucyBXSEVSRSBwZXJtaXNzaW9uX25hbWUgPSA/IjsKLy8gICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkcGVybSApICk7Ci8vICAgICBpZiggISRkYnJlc3VsdCB8fCAkZGJyZXN1bHQtPlJvd0NvdW50KCkgPT0gMCApIHJldHVybiBmYWxzZTsKLy8gICAgICRwcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpOwoKLy8gICAgIGZvcmVhY2goICRncm91cHMgYXMgJGdyb3VwICkKLy8gICAgIHsKLy8gICAgICAgJHEgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4iZ3JvdXBfcGVybXMgV0hFUkUgcGVybWlzc2lvbl9pZCA9ID8KLy8gICAgICAgICAgIEFORCBncm91cF9pZCA9ID8iOwovLyAgICAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggJHByb3dbJ3Blcm1pc3Npb25faWQnXSwgJGdpZCApICk7Ci8vICAgICAgIGlmKCAkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5Sb3dDb3VudCgpID4gMCApIHJldHVybiB0cnVlOyAgICAgIAovLyAgICAgfQoKLy8gICAgIHJldHVybiBmYWxzZTsKICB9CgoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgLy8gcmV0dXJucyB0cnVlL2ZhbHNlCiAgZnVuY3Rpb24gQXNzaWduVXNlclRvR3JvdXAoICR1aWQsICRnaWQgKQogIHsKICAgIC8vIHZhbGlkYXRlIHRoZSB1c2VyIGlkCiAgICBpZiggISR0aGlzLT5Vc2VyRXhpc3RzQnlJRCggJHVpZCApICkKICAgICAgewoJcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAKICAgIC8vIHZhbGlkYXRlIHRoZSBncm91cCBpZAogICAgaWYoICEkdGhpcy0+R3JvdXBFeGlzdHNCeUlEKCAkZ2lkICkgKQogICAgICB7CglyZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIAogICAgLy8gYWRkIHRoZSByZWNvcmQgdG8gdGhlIHRhYmxlIHRvIG1ha2UgdGhpcyAKICAgIC8vIHVzZXIgYSBtZW1iZXIgb2YgdGhpcyBncm91cAogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICAkcSA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfYmVsb25ncyAKICAgICAgICAgICAgICAgIFZBTFVFUyAoPyw/KSI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggJHVpZCwgJGdpZCApICk7CiAgICByZXR1cm4oICRkYnJlc3VsdCAhPSBmYWxzZSApOwogIH0KCiAgCiAgLy8gdXNlcmlkIGFwaSBmdW5jdGlvbgogIC8vIHJldHVybnMgdHJ1ZS9mYWxzZQogIGZ1bmN0aW9uIElzVmFsaWRQYXNzd29yZCggJHBhc3N3b3JkICkKICB7CiAgICAvLyBhIHBhc3N3b3JkIGlzIHZhbGlkLCBpZiBpdCdzIGxlbmd0aCBpcwogICAgLy8gd2l0aGluIGNlcnRhaW4gcmFuZ2VzCiAgICAkbW9kdWxlID0gJHRoaXMtPkdldE1vZHVsZSgpOwogICAgJG1pbmxlbiA9ICRtb2R1bGUtPkdldFByZWZlcmVuY2UoJ21pbl9wYXNzd29yZGxlbmd0aCcsIDYgKTsKICAgICRtYXhsZW4gPSAkbW9kdWxlLT5HZXRQcmVmZXJlbmNlKCdtYXhfcGFzc3dvcmRsZW5ndGgnLCAyMCApOwogICAgJGxlbiA9IHN0cmxlbigkcGFzc3dvcmQpOwogICAgaWYoICRsZW4gPCAkbWlubGVuICkKICAgICAgewoJcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICBlbHNlIGlmKCAkbGVuID4gJG1heGxlbiApCiAgICAgIHsKCXJldHVybiBmYWxzZTsKICAgICAgfQogICAgCiAgICAvKgogICAgLy8gdGhlcmUgbXVzdCBiZSBhdGxlYXN0IDMgdW5pcXVlIGNoYXJhY3RlcnMKICAgIGlmKCBzdHJsZW4oY291bnRfY2hhcnMoICR1c2VybmFtZSwgMyApKSA8IG1pbigzLG1pbmxlbikpCiAgICAgIHsKCXJldHVybiBmYWxzZTsKICAgICAgfQogICAgKi8KICAgIHJldHVybiB0cnVlOwogIH0KCgogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICAvLyByZXR1cm5zIGFuIGFycmF5CiAgZnVuY3Rpb24gRGVsZXRlVXNlckZ1bGwoICRpZCApCiAgewogICAgLy8gbG9nIHRoZSB1c2VyIG91dAogICAgJHRoaXMtPkxvZ291dFVzZXIoICRpZCApOwoKICAgIC8vIGRlbGV0ZSB1c2VyIHByb3BlcnRpZXMKICAgICR0aGlzLT5EZWxldGVBbGxVc2VyUHJvcGVydGllc0Z1bGwoICRpZCApOwoKICAgIC8vIGRlbGV0ZSB1c2VyIGZyb20gZ3JvdXBzCiAgICAkcmV0ID0gJHRoaXMtPlJlbW92ZVVzZXJGcm9tR3JvdXAoICRpZCwgJycgKTsKICAgIGlmKCAkcmV0WzBdID09IGZhbHNlICkKICAgICAgewoJcmV0dXJuICRyZXQ7CiAgICAgIH0KCiAgICAvLyBkZWxldGUgdXNlciByZWNvcmQKICAgICRkYiA9ICR0aGlzLT5HZXREYigpOwogICAgJHEgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3VzZXJzCiAgICAgICAgICBXSEVSRSBpZCA9ID8iOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICRpZCApICk7CiAgICBpZiggISRkYnJlc3VsdCApCiAgICAgIHsKCXJldHVybiBhcnJheSggRkFMU0U8ICRkYi0+RXJyb3JNc2coKSApOwogICAgICB9CgogICAgLy8gYW5kIGRlbGV0ZSBhbnl0aGluZyBmcm9tIHRoZSB0ZW1wY29kZXMgdGFibGUgdG9vCiAgICAkcSA9ICJERUxFVEUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfdGVtcGNvZGUKICAgICAgICAgIFdIRVJFIHVzZXJpZCA9ID8iOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICRpZCApICk7CiAgICBpZiggISRkYnJlc3VsdCApCiAgICAgIHsKCXJldHVybiBhcnJheSggRkFMU0U8ICRkYi0+RXJyb3JNc2coKSApOwogICAgICB9CiAgICAKICAgIHJldHVybiBhcnJheSggVFJVRSwgIiIgKTsKICB9CgoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgLy8gcmV0dXJucyBhbiBhcnJheQogIGZ1bmN0aW9uIEdldEdyb3VwSW5mbyggJGdpZCApCiAgewogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICAkcSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19ncm91cHMgV0hFUkUgaWQgPSA/IjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkZ2lkICkgKTsKICAgIGlmKCAhJGRicmVzdWx0ICkKICAgICAgewoJcmV0dXJuIGFycmF5KEZBTFNFLCRkYi0+RXJyb3JNc2coKSk7CiAgICAgIH0KICAgICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7CiAgICByZXR1cm4gJHJvdzsKICB9CiAgCiAgCiAgLy8gdXNlcmlkIGFwaSBmdW5jdGlvbgogIC8vIHJldHVybnMgYW4gYXJyYXkKICAvLyBzZWNvbmQgZWxlbWVudCBvZiBhcnJheSBtYXkgYmUgYW4gYXJyYXkKICBmdW5jdGlvbiBHZXRVc2VySW5mbyggJHVpZCApCiAgewogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICAkcSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc191c2VycwogICAgICAgICAgICAgICAgV0hFUkUgaWQgPSA/IjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkdWlkICkgKTsKICAgIGlmKCAhJGRicmVzdWx0ICkKICAgICAgewoJcmV0dXJuIGFycmF5KEZBTFNFLCRkYi0+RXJyb3JNc2coKSk7CiAgICAgIH0KICAgICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7CiAgICByZXR1cm4gYXJyYXkoIFRSVUUsICRyb3cgKTsKICB9CiAgCgogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICAvLyByZXR1cm5zIGFuIGFycmF5IG9yIGZhbHNlCiAgZnVuY3Rpb24gQ291bnRVc2Vyc0luR3JvdXAoICRncm91cGlkICkKICB7CiAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKICAgIAogICAgJHEgPSAnJzsKICAgICRwYXJtcyA9IGFycmF5KCk7CiAgICBpZiggJGdyb3VwaWQgPT0gJycgfHwgJGdyb3VwaWQgPCAwICkKICAgICAgewoJJHEgPSAiU0VMRUNUIGNvdW50KGlkKSBhcyBudW0gRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfdXNlcnMiOyAKICAgICAgfQogICAgZWxzZQogICAgICB7CgkkcSA9ICJTRUxFQ1QgY291bnQoaWQpIGFzIG51bSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc191c2VycywiLgoJICBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2JlbG9uZ3MgV0hFUkUgaWQ9dXNlcmlkIEFORCBncm91cGlkID0gPyI7CgkkcGFybXNbXSA9ICRncm91cGlkOwogICAgICB9CgogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgJHBhcm1zICk7CiAgICBpZiggISRkYnJlc3VsdCApCiAgICAgIHsKCXJldHVybiBmYWxzZTsKICAgICAgfQoKICAgICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7CiAgICByZXR1cm4gJHJvd1snbnVtJ107CiAgfQoKICBmdW5jdGlvbiBHZXRVc2Vyc0luR3JvdXAoICRncm91cGlkID0gJycsICR1c2VycmVnZXggPSAnJywgJGxpbWl0ID0gJycsICRzb3J0ID0gJycsCgkJCSAgICAkcHJvcGVydHkgPSAnJywgJHByb3ByZWdleCA9ICcnKQogIHsKICAgICRkYiA9ICR0aGlzLT5HZXREYigpOwoKICAgICRwYXJtcyA9IGFycmF5KCk7CiAgICAkd2hlcmUgPSBhcnJheSgpOwogICAgJG9yZGVyc29ydCA9ICIiOwogICAgJHEgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfdXNlcnMgQSI7IAogICAgaWYoICRwcm9wZXJ0eSAhPSAnJyAmJiAkcHJvcHJlZ2V4ICE9ICcnICkKICAgICAgewoJJHEgLj0gIiwiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfcHJvcGVydGllcyBCIjsKCSR3aGVyZVtdID0gIiBBLmlkID0gQi51c2VyaWQiOwogICAgICB9CiAgICBpZiggJGdyb3VwaWQgIT0gJycgJiYgJGdyb3VwaWQgPj0gMCApCiAgICAgIHsKCSRxIC49ICIsIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2JlbG9uZ3MgQyI7Cgkkd2hlcmVbXSA9ICIgQS5pZCA9IEMudXNlcmlkIjsKCSR3aGVyZVtdID0gIiBncm91cGlkID0gPyI7CgkkcGFybXNbXSA9ICRncm91cGlkOwogICAgICB9CiAgICBpZiggJHByb3BlcnR5ICE9ICcnICYmICRwcm9wcmVnZXggIT0gJycgKQogICAgICB7Cgkkd2hlcmVbXSA9ICIgQi50aXRsZSA9ID8gYW5kIEIuZGF0YSBSRUdFWFAgPyI7CgkkcGFybXNbXSA9ICRwcm9wZXJ0eTsKCSRwYXJtc1tdID0gJHByb3ByZWdleDsKICAgICAgfQogICAgaWYoICR1c2VycmVnZXggIT0gJycgKQogICAgICB7Cgkkd2hlcmVbXSA9ICIgdXNlcm5hbWUgUkVHRVhQID8iOwoJJHBhcm1zW10gPSAkdXNlcnJlZ2V4OwogICAgICB9CiAgICBpZiggJHNvcnQgIT0gJycgKQogICAgICB7Cgkkb3JkZXJzb3J0IC49ICIgT1JERVIgQlkgJHNvcnQiOwogICAgICB9CiAgICBpZiggJGxpbWl0ICE9ICcnICYmICRsaW1pdCA+IDAgKQogICAgICB7Cgkkb3JkZXJzb3J0IC49ICIgTElNSVQgJGxpbWl0IjsgCiAgICAgIH0KCiAgICAvLyBwdXQgdGhlIHF1ZXJ5IHRvZ2V0aGVyCiAgICBpZiggY291bnQoJHdoZXJlICkgKQogICAgICB7CgkkcSAuPSAiIFdIRVJFICIgLiBpbXBsb2RlKCIgQU5EICIsJHdoZXJlKTsKICAgICAgfQogICAgJHEgLj0gJG9yZGVyc29ydDsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsICRwYXJtcyApOwogICAgaWYoICEkZGJyZXN1bHQgKQogICAgICB7CglyZXR1cm4gZmFsc2U7CiAgICAgIH0KCiAgICAkcmVzdWx0ID0gYXJyYXkoKTsKICAgIHdoaWxlKCAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpICkKICAgICAgewoJYXJyYXlfcHVzaCggJHJlc3VsdCwgJHJvdyApOwogICAgICB9CiAgICByZXR1cm4gJHJlc3VsdDsKICB9CgoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgLy8gcmV0dXJucyB0cnVlL2ZhbHNlCiAgZnVuY3Rpb24gR3JvdXBFeGlzdHNCeUlEKCAkZ2lkICkKICB7CiAgICAkZGF0YSA9ICR0aGlzLT5HZXRHcm91cEluZm8oICRnaWQgKTsKICAgIHJldHVybiggJGRhdGEgIT0gZmFsc2UgKTsKICB9CgoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgLy8gcmV0dXJucyB0cnVlL2ZhbHNlCiAgZnVuY3Rpb24gR3JvdXBFeGlzdHNCeU5hbWUoICRuYW1lICkKICB7CiAgICAkZ2lkID0gJHRoaXMtPkdldEdyb3VwSUQoICRuYW1lICk7CiAgICByZXR1cm4oICRnaWQgIT0gZmFsc2UgKTsKICB9CiAgCiAgCiAgLy8gdXNlcmlkIGFwaSBmdW5jdGlvbgogIC8vIHJldHVybnMgYXJyYXkKICBmdW5jdGlvbiBJc1ZhbGlkRW1haWxBZGRyZXNzKCAkZW1haWwsICRzbXRwdmFsaWRhdGUgPSBmYWxzZSApCiAgewogICAgJG1vZHVsZSA9ICR0aGlzLT5HZXRNb2R1bGUoKTsKICAgICRyZXN1bHQgPSBhcnJheSgpOwogICAgaWYoICFlcmVnaSgiXltfYS16MC05LV0rKFwuW19hLXowLTktXSspKkBbYS16MC05LV0rKFwuW2EtejAtOS1dKykqKFwuW2Etel17MiwzfSkkIiwgJGVtYWlsICkgKQogICAgICB7CgkkcmVzdWx0WzBdID0gZmFsc2U7CgkkcmVzdWx0WzFdID0gJG1vZHVsZS0+TGFuZygnZXJyb3JfaW1wcm9wZXJlbWFpbGZvcm1hdCcpOwoJcmV0dXJuICRyZXN1bHQ7CiAgICAgIH0KCiAgICAkbW9kdWxlID0gJHRoaXMtPkdldE1vZHVsZSgpOwogICAgaWYoICEkbW9kdWxlLT5HZXRQcmVmZXJlbmNlKCdhbGxvd19kdXBsaWNhdGVfZW1haWxzJykgKQogICAgICB7CgkkZGIgPSAkdGhpcy0+R2V0RGIoKTsKCSRxID0gIlNFTEVDVCBkYXRhIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3Byb3BkZWZuLCIuCgkgIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfcHJvcGVydGllcyBXSEVSRSBuYW1lPXRpdGxlIEFORAogICAgICAgICAgdHlwZT0yIEFORCBkYXRhIExJS0UgPyI7CgkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggJGVtYWlsICkgKTsKCWlmKCAkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5Sb3dDb3VudCgpICkKCSAgewoJICAgICRyZXN1bHRbMF0gPSBmYWxzZTsKCSAgICAkcmVzdWx0WzFdID0gJG1vZHVsZS0+TGFuZygnZXJyb3JfZW1haWxhbHJlYWR5dXNlZCcpOwoJICAgIHJldHVybiAkcmVzdWx0OwoJICB9CiAgICAgIH0KCiAgICBpZiggJHNtdHB2YWxpZGF0ZSA9PSBmYWxzZSApCiAgICAgIHsKCSRyZXN1bHRbMF0gPSB0cnVlOwoJcmV0dXJuICRyZXN1bHQ7CiAgICAgIH0KICAgIAogICAgLy8gZ28gYWhlYWQgYW5kIHZhbGlkYXRlIHRoZSBlbWFpbCBhZGRyZXNzIGZ1cnRoZXIKICAgIGxpc3QgKCAkdW5hbWUsICRkb21haW4gKSA9IHNwbGl0KCAiQCIsICRlbWFpbCApOwogICAgaWYoIGdldG14cnIoJGRvbWFpbiwgJG14aG9zdCApICkKICAgICAgewoJJGNvbm5lY3RhZGRyZXNzID0gJG14aG9zdFswXTsKICAgICAgfQogICAgZWxzZSAKICAgICAgewoJJGNvbm5lY3RhZGRyZXNzID0gJGRvbWFpbjsKICAgICAgfQogICAgJGNvbm5lY3QgPSBmc29ja29wZW4oICRjb25uZWN0YWRkcmVzcywgMjUgKTsKICAgIGlmKCAkY29ubmVjdCApCiAgICAgIHsKCWlmKCBlcmVnKCdeMjIwJywgJG91dCA9IGZnZXRzKCAkY29ubmVjdCwgMTAyNCApICkgKQoJICB7CgkgICAgZnB1dHMoICRjb25uZWN0LCAiSEVMTyAkSFRUUF9IT1NUXHJcbiIpOwoJICAgICRvdXQgPSBmZ2V0cyggJGNvbm5lY3QsIDEwMjQgKTsKCSAgICBmcHV0cyggJGNvbm5lY3QsICJNQUlMIEZST00gPHskZW1haWx9PlxyXG4iKTsKCSAgICAkZnJvbSA9IGZnZXRzKCAkY29ubmVjdCwgMTAyNCApOwoJICAgIGZwdXRzKCAkY29ubmVjdCwgIlJDUFQgVE86IDx7JGVtYWlsfT5cclxuIik7CgkgICAgJHRvID0gZmdldHMoICRjb25uZWN0LiAxMDI0ICk7CgkgICAgZnB1dHMoICRjb25uZWN0LCAiUVVJVFxyXG4iKTsKCSAgICBmY2xvc2UoICRjb25uZWN0ICk7CgkgICAgaWYoICFlcmVnKCAiXjI1MCIsICRmcm9tICkgfHwgIWVyZWcoIl4yNTAiLCAkdG8pKQoJICAgICAgewoJCSRyZXN1bHRbMF0gPSBmYWxzZTsKCQkkcmVzdWx0WzFdID0gJHRoaXMtPkxhbmcoJ2Vycm9yX3NlcnZlcnJlamVjdGVkZW1haWwnKTsKCQlyZXR1cm4gJHJlc3VsdDsKCSAgICAgIH0KCSAgICBlbHNlCgkgICAgICB7CgkJJHJlc3VsdFswXSA9IGZhbHNlOwoJCSRyZXN1bHRbMV0gPSAkdGhpcy0+TGFuZygnZXJyb3Jfbm9yZXNwb25zZWZyb21zZXJ2ZXInKTsKCQlyZXR1cm4gJHJlc3VsdDsKCSAgICAgIH0KCSAgfQoJZWxzZSAKCSAgewoJICAgICRyZXN1bHRbMF0gPSBmYWxzZTsKCSAgICAkcmVzdWx0WzFdID0gJHRoaXMtPkxhbmcoJ2Vycm9yX25vcmVzcG9uc2Vmcm9tc2VydmVyJyk7CgkgICAgcmV0dXJuICRyZXN1bHQ7CgkgIH0KICAgICAgfQogIH0KCiAgLy8gdXNlcmlkIGFwaSBmdW5jdGlvbgogIC8vIHJldHVybnMgdHJ1ZS9mYWxzZQogIGZ1bmN0aW9uIElzVmFsaWRVc2VybmFtZSggJHVzZXJuYW1lICkKICB7CiAgICAvLyBhIHVzZXJuYW1lIGlzIHZhbGlkLCBpZiBpdCdzIGxlbmd0aCBpcwogICAgLy8gd2l0aGluIGNlcnRhaW4gcmFuZ2VzLCBhbmQgaXQgY29udGFpbnMKICAgIC8vIG9ubHkgYWxwaGFudW1lcmljcwogICAgJG1vZHVsZSA9ICR0aGlzLT5HZXRNb2R1bGUoKTsKICAgICRtaW5sZW4gPSAkbW9kdWxlLT5HZXRQcmVmZXJlbmNlKCdtaW5fdXNlcm5hbWVsZW5ndGgnLCA0ICk7CiAgICAkbWF4bGVuID0gJG1vZHVsZS0+R2V0UHJlZmVyZW5jZSgnbWF4X3VzZXJuYW1lbGVuZ3RoJywgMjAgKTsKICAgIGlmKCBzdHJsZW4oICR1c2VybmFtZSApIDwgJG1pbmxlbiB8fCBzdHJsZW4oICR1c2VybmFtZSApID4gJG1heGxlbiApCiAgICAgIHsKCXJldHVybiBmYWxzZTsKICAgICAgfQoKICAgIGlmKCAhcHJlZ19tYXRjaCggJy9eW2EtekEtWjAtOV8tXSokLycsICR1c2VybmFtZSApICkKICAgICAgewoJcmV0dXJuIGZhbHNlOwogICAgICB9CgogICAgLyoKICAgIC8vIHRoZXJlIG11c3QgYmUgYXRsZWFzdCAzIHVuaXF1ZSBjaGFyYWN0ZXJzCiAgICBpZiggc3RybGVuKGNvdW50X2NoYXJzKCAkdXNlcm5hbWUsIDMgKSkgPCBtaW4oMyxtaW5sZW4pKQogICAgICB7CglyZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICovCiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIAogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICAvLyByZXR1cm5zIGFuIGFycmF5CiAgZnVuY3Rpb24gUmVtb3ZlVXNlckZyb21Hcm91cCggJHVpZCwgJGdpZCApCiAgewogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICAkcGFybXMgPSBhcnJheSggJHVpZCApOwogICAgJHEgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2JlbG9uZ3MKICAgICAgICAgIFdIRVJFIHVzZXJpZCA9ID8iOwogICAgaWYoICRnaWQgIT0gJycgKQogICAgICB7CgkkcSAuPSAiIEFORCBncm91cGlkID0gPyI7CglhcnJheV9wdXNoKCAkcGFybXMsICRnaWQgKTsKICAgICAgfQogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgJHBhcm1zICk7CiAgICBpZiggJGRicmVzdWx0ID09IGZhbHNlICkKICAgICAgewoJcmV0dXJuIGFycmF5KCBGQUxTRSwgJGRiLT5FcnJvck1zZygpICk7CiAgICAgIH0KICAgIGVsc2UKICAgICAgewoJcmV0dXJuIGFycmF5KCBUUlVFICk7CiAgICAgIH0KICB9CgoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgLy8gcmV0dXJucyBhcnJheQogIGZ1bmN0aW9uIFNldEdyb3VwKCAkaWQsICRuYW1lLCAkZGVzYyApCiAgewogICAgaWYoICFpc3NldCggJG5hbWUgKSB8fCAkbmFtZSA9PSAnJyApCiAgICAgIHsKCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSAoJGlkLCAkcGFyYW1zLCAkcmV0dXJuX2lkLAoJCQkJICAkdGhpcy0+TGFuZyAoJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcycpKTsKCXJldHVybjsKICAgICAgfQogICAgCiAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKCiAgICAkZWlkID0gJHRoaXMtPkdldEdyb3VwSUQoICRuYW1lICk7CiAgICBpZiggJGVpZCAhPSBmYWxzZSAmJiAkZWlkICE9ICRpZCApCiAgICAgIHsKCSRtb2QgPSAkdGhpcy0+R2V0TW9kdWxlKCk7CglyZXR1cm4gYXJyYXkoRkFMU0UsJG1vZC0+TGFuZygnZXJyb3JfZ3JvdXBuYW1lX2V4aXN0cycpKTsKICAgICAgfQogICAgCiAgICAkcSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2dyb3VwcyBTRVQKICAgICAgICAgICAgICAgIGdyb3VwbmFtZSA9ID8sIGdyb3VwZGVzYyA9ID8gV0hFUkUgaWQgPSA/IjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkbmFtZSwgJGRlc2MsICRpZCApICk7CiAgICBpZiggISRkYnJlc3VsdCApCiAgICAgIHsKCXJldHVybiBhcnJheShGQUxTRSwkZGItPkVycm9yTXNnKCkpOwogICAgICB9CiAgICByZXR1cm4gYXJyYXkoIFRSVUUsICcnKTsKICB9CgoKICBmdW5jdGlvbiBTZXRVc2VyUGFzc3dvcmQoICR1aWQsICRwYXNzd29yZCApCiAgewogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICAkcSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3VzZXJzCiAgICAgICAgICBTRVQgcGFzc3dvcmQgPSA/IFdIRVJFIGlkID0gPyI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggbWQ1KCRwYXNzd29yZCksICR1aWQgKSk7CiAgICBpZiggISRkYnJlc3VsdCApCiAgICAgIHsKCXJldHVybiBhcnJheShGQUxTRSwkZGItPkVycm9yTXNnKCkpOwogICAgICB9CiAgICByZXR1cm4gYXJyYXkoVFJVRSwiIik7CiAgfQoKCiAgLy8gdXNlcmlkIGFwaSBmdW5jdGlvbgogIC8vIHJldHVybnMgYXJyYXkKICBmdW5jdGlvbiBTZXRVc2VyKCAkdWlkLCAkdXNlcm5hbWUsICRwYXNzd29yZCwgJGV4cGlyZXMgPSBmYWxzZSApCiAgewogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICAKICAgIC8vIG1ha2Ugc3VyZSB0aGF0IHRoaXMgdXNlciBleGlzdHMKICAgICRyZXQgPSAkdGhpcy0+R2V0VXNlckluZm8oICR1aWQgKTsKICAgIGlmKCAkcmV0WzBdID09IEZBTFNFICkKICAgICAgewoJcmV0dXJuIGFycmF5KEZBTFNFLCAkdGhpcy0+TGFuZygnZXJyb3JfdXNlcm5vdGZvdW5kJykpOwogICAgICB9CgogICAgLy8gbWFrZSBzdXJlIHRoYXQgdGhpcyB1c2VybmFtZSBpcyBub3QgdGFrZW4gYnkgc29tZSBvdGhlciBpZAogICAgJG51aWQgPSAkdGhpcy0+R2V0VXNlcklEKCR1c2VybmFtZSk7CiAgICBpZiggJG51aWQgIT0gZmFsc2UgJiYgJG51aWQgIT0gJHVpZCApCiAgICAgIHsKCSRtb2R1bGUgPSAkdGhpcy0+R2V0TW9kdWxlKCk7CglyZXR1cm4gYXJyYXkoRkFMU0UsICRtb2R1bGUtPkxhbmcoJ2Vycm9yX3VzZXJuYW1ldGFrZW4nLCR1aWQpKTsKICAgICAgfQoKICAgICRkYnJlc3VsdCA9ICcnOwogICAgJHBhcm1zID0gYXJyYXkoKTsKICAgICRxID0gIlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfdXNlcnMgU0VUCiAgICAgICAgIHVzZXJuYW1lID0gPyI7CgkKICAgICRwYXJtc1tdID0gJHVzZXJuYW1lOwogICAgaWYoIHRyaW0oICRwYXNzd29yZCApICE9ICcnICkKICAgICAgewoJJHEgLj0gIiwgcGFzc3dvcmQgPSA/IjsKCSRwYXJtc1tdID0gbWQ1KCRwYXNzd29yZCk7CiAgICAgIH0KICAgIGlmKCAkZXhwaXJlcyAhPSBmYWxzZSApCiAgICAgIHsKCSRxIC49ICIsIGV4cGlyZXMgPSA/IjsKCSRwYXJtc1tdID0gJGRiLT5EQlRpbWVTdGFtcCgkZXhwaXJlcyk7CiAgICAgIH0KICAgICRxIC49ICIgV0hFUkUgaWQgPSA/IjsKICAgICRwYXJtc1tdID0gJHVpZDsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsICRwYXJtcyApOwoKICAgIGlmKCAkZGJyZXN1bHQgPT0gZmFsc2UgKQogICAgICB7CglyZXR1cm4gYXJyYXkoIEZBTFNFLCAkZGItPkVycm9yTXNnKCkgKTsKICAgICAgfQogICAgcmV0dXJuIGFycmF5KCBUUlVFLCAiIiApOwogIH0KCiAgCiAgLy8gdXNlcmlkIGFwaSBmdW5jdGlvbgogIC8vIHJldHVybnMgdHJ1ZS9mYWxzZQogIGZ1bmN0aW9uIFNldFVzZXJHcm91cHMoICR1aWQsICRncnBpZHMgKQogIHsKICAgICRkYiA9ICR0aGlzLT5HZXREYigpOwoKICAgIC8vIGZpcnN0IG1ha2Ugc3VyZSB0aGlzIHVzZXIgZXhpc3RzCiAgICAkcmV0ID0gJHRoaXMtPkdldFVzZXJJbmZvKCAkdWlkICk7CiAgICBpZiggJHJldFswXSA9PSBGQUxTRSApCiAgICAgIHsKCXJldHVybiBhcnJheShGQUxTRSwgIlVzZXIgZG9lcyBub3QgZXhpc3QiKTsKICAgICAgfQoKICAgIC8vIHRoZW4gcmVtb3ZlIGFsbCBoaXMgY3VycmVudCBhc3NpZ25tZW50cwogICAgJHEgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2JlbG9uZ3MgCiAgICAgICAgICBXSEVSRSB1c2VyaWQgPSA/IjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkdWlkICkpOwogICAgaWYoICEkZGJyZXN1bHQgKQogICAgICB7CglyZXR1cm4gYXJyYXkoIEZBTFNFLCAkZGItPkVycm9yTXNnKCkgICk7CiAgICAgIH0KCiAgICAvLyBhbmQgYWRkIGFsbCBvZiB0aGVtIGluCiAgICAkcSA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfYmVsb25ncwogICAgICAgICAgVkFMVUVTICg/LD8pIjsKICAgIGZvcmVhY2goICRncnBpZHMgYXMgJGdycGlkICkKICAgIHsKICAgICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICR1aWQsICRncnBpZCApICk7CiAgICAgIGlmKCAhJGRicmVzdWx0ICkKCXsKCSAgcmV0dXJuIGFycmF5KCBGQUxTRSwgJGRiLT5FcnJvck1zZygpICApOwoJfQogICAgfQogICAgcmV0dXJuIGFycmF5KCBUUlVFLCAiIiApOwogIH0KCgogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICAvLyByZXR1cm5zIHRydWUvZmFsc2UKICBmdW5jdGlvbiBTZXRVc2VyUHJvcGVydGllcyggJHVpZCwgJHByb3BzICkKICB7CiAgICAvLyBEZWxldGUgYWxsIHRoZSB1c2VyIHByb3BlcnRpZXMKICAgIC8vIGFuZCBzZXQgbmV3IG9uZXMKICAgICR0aGlzLT5EZWxldGVVc2VyUHJvcGVydHlGdWxsKCAiIiwgJHVpZCwgdHJ1ZSApOwoKICAgIGZvcmVhY2goICRwcm9wcyBhcyAkcHJvcCApCiAgICB7CiAgICAgIGxpc3QoICRrZXksICR2YWwgKSA9IHNwbGl0KCI9IiwkcHJvcCk7CiAgICAgICR0aGlzLT5TZXRVc2VyUHJvcGVydHkoICRrZXksICR2YWwsICR1aWQgKTsKICAgIH0KCiAgICByZXR1cm4gdHJ1ZTsKICB9CgoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgLy8gcmV0dXJucyB0cnVlL2ZhbHNlCiAgZnVuY3Rpb24gVXNlckV4aXN0c0J5SUQoICR1aWQgKQogIHsKICAgICRkYXRhID0gJHRoaXMtPkdldFVzZXJJbmZvKCAkdWlkICk7CiAgICByZXR1cm4oICRkYXRhWzBdICE9IGZhbHNlICk7CiAgfQoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgLy8gcmV0dXJucyBhbiBhcnJheSBvciBmYWxzZQogIGZ1bmN0aW9uIEdldFVzZXJQcm9wZXJ0aWVzKCR1aWQpCiAgewogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICAkcT0iU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfcHJvcGVydGllcyBXSEVSRSB1c2VyaWQ9PyI7CiAgICAkcD1hcnJheSgkdWlkKTsKICAgICRhcnIgPSBhcnJheSgpOwogICAgJGRicmVzdWx0PSRkYi0+RXhlY3V0ZSgkcSwkcCk7CiAgICBpZiggJGRicmVzdWx0ID09IGZhbHNlICkKICAgICAgewoJcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB3aGlsZSggJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSApCiAgICAgIHsKCWFycmF5X3B1c2goICRhcnIsICRyb3cgKTsKICAgICAgfQogICAgcmV0dXJuICRhcnI7CiAgfQoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgLy8gcmV0dXJucyBhbiBhcnJheSBvZiByZWNvcmRzIG9yIGZhbHNlCiAgZnVuY3Rpb24gR2V0TWVtYmVyR3JvdXBzQXJyYXkoJHVzZXJpZCkgewogICAgJGRiPSR0aGlzLT5HZXREYigpOwogICAgJHE9IlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2JlbG9uZ3MgV0hFUkUgdXNlcmlkPT8iOwogICAgJGRicmVzdWx0PSRkYi0+RXhlY3V0ZSgkcSxhcnJheSgkdXNlcmlkKSk7CiAgICBpZiAoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+Um93Q291bnQoKSkgewogICAgICAkcmVzdWx0PWFycmF5KCk7OwogICAgICB3aGlsZSAoJHJvdz0kZGJyZXN1bHQtPkZldGNoUm93KCkpIHsKCWFycmF5X3B1c2goICRyZXN1bHQsICRyb3cgKTsKICAgICAgfQogICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CgogIC8vCiAgLy8gZW5kIG9mIHJjIGZ1bmN0aW9ucwogIC8vCgogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICBmdW5jdGlvbiBHZXRVc2VyUHJvcGVydHkoJHRpdGxlLCRkZWZhdWx0dmFsdWU9ZmFsc2UpIAogIHsKICAgICR1c2VyaWQ9JHRoaXMtPkxvZ2dlZEluSWQoKTsKICAgIGlmICgkdXNlcmlkPT09ZmFsc2UpIHJldHVybiBmYWxzZTsKICAgIHJldHVybiAkdGhpcy0+R2V0VXNlclByb3BlcnR5RnVsbCgkdGl0bGUsJHVzZXJpZCwkZGVmYXVsdHZhbHVlKTsKICB9CiAgCiAgLy8gdXNlcmlkIGFwaSBmdW5jdGlvbgogIGZ1bmN0aW9uIEdldFVzZXJQcm9wZXJ0eUZ1bGwoJHRpdGxlLCR1c2VyaWQsICRkZWZhdWx0dmFsdWU9ZmFsc2UpIAogIHsKICAgICRkYj0kdGhpcy0+R2V0REIoKTsKICAgICRxPSJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19wcm9wZXJ0aWVzIFdIRVJFIHRpdGxlPT8gQU5EIHVzZXJpZD0/IjsKICAgICRwPWFycmF5KCR0aXRsZSwkdXNlcmlkKTsKICAgICRyZXN1bHQ9JGRiLT5FeGVjdXRlKCRxLCRwKTsKICAgIGlmICgkcmVzdWx0ICYmICRyZXN1bHQtPlJvd0NvdW50KCkpIHsKICAgICAgJHJvdz0kcmVzdWx0LT5GZXRjaFJvdygpOwogICAgICByZXR1cm4gJHJvd1siZGF0YSJdOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICRkZWZhdWx0dmFsdWU7CiAgICB9CiAgfQoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgZnVuY3Rpb24gU2V0VXNlclByb3BlcnR5KCR0aXRsZSwkZGF0YSkgCiAgewogICAgJHVzZXJpZD0kdGhpcy0+TG9nZ2VkSW5JZCgpOwogICAgaWYgKCR1c2VyaWQ9PT1mYWxzZSkgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuICR0aGlzLT5TZXRVc2VyUHJvcGVydHlGdWxsKCR0aXRsZSwkZGF0YSwkdXNlcmlkKTsKICB9CgogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICBmdW5jdGlvbiBTZXRVc2VyUHJvcGVydHlGdWxsKCR0aXRsZSwkZGF0YSwkdXNlcmlkKSAKICB7CiAgICAkZGI9JHRoaXMtPkdldERCKCk7CiAgICAkcT0iU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfcHJvcGVydGllcyBXSEVSRSB0aXRsZT0/IEFORCB1c2VyaWQ9PyI7CiAgICAkcD1hcnJheSgkdGl0bGUsJHVzZXJpZCk7CiAgICAkcj0kZGItPkV4ZWN1dGUoJHEsJHApOwogICAgaWYgKCEkciB8fCAoJHItPk51bVJvd3MoKT09MCkpIHsKICAgICAgJG5ld2lkPSRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19wcm9wZXJ0aWVzX3NlcSIpOwogICAgICAkcT0iSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3Byb3BlcnRpZXMgKGlkLHVzZXJpZCx0aXRsZSxkYXRhKSBWQUxVRVMgKD8sPyw/LD8pIjsKICAgICAgJHA9YXJyYXkoJG5ld2lkLCR1c2VyaWQsJHRpdGxlLCRkYXRhKTsKICAgICAgJHI9JGRiLT5FeGVjdXRlKCRxLCRwKTsKICAgIH0gZWxzZSB7CiAgICAgICRyb3c9JHItPkZldGNoUm93KCk7CiAgICAgICRxPSJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3Byb3BlcnRpZXMgU0VUIGRhdGE9PyBXSEVSRSBpZD0/IjsKICAgICAgJHA9YXJyYXkoJGRhdGEsJHJvd1siaWQiXSk7CiAgICAgICRyPSRkYi0+RXhlY3V0ZSgkcSwkcCk7CiAgICB9CiAgICByZXR1cm4gKCRyIT1mYWxzZSk7CiAgfQoKICAvLyBkZWxldGUgYWxsIG9jY3VyYW5jZXMgb2YgdGhlIHVzZXJwcm9wZXJ0eSBieSBuYW1lCiAgZnVuY3Rpb24gRGVsZXRlVXNlclByb3BlcnR5QnlOYW1lKCAkdGl0bGUgKQogIHsKICAgICRkYiA9ICR0aGlzLT5HZXREQigpOwogICAgJHEgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3Byb3BlcnRpZXMgV0hFUkUgdGl0bGU9PyI7CiAgICAkcCA9IGFycmF5KCAkdGl0bGUgKTsKICAgICRyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCAkcCApOwogICAgcmV0dXJuICgkcmVzdWx0IT1mYWxzZSk7CiAgfQoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgZnVuY3Rpb24gRGVsZXRlVXNlclByb3BlcnR5KCR0aXRsZSwkYWxsPWZhbHNlKSAKICB7CiAgICAkdXNlcmlkPSR0aGlzLT5Mb2dnZWRJbklkKCk7CiAgICBpZiAoJHVzZXJpZD09PWZhbHNlKSByZXR1cm4gZmFsc2U7CiAgICAkZGI9JHRoaXMtPkdldERCKCk7CiAgICAkcT0iREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3Byb3BlcnRpZXMgV0hFUkUgdXNlcmlkPT8iOwogICAgaWYgKCEkYWxsKSAkcS49IiBBTkQgdGl0bGU9PyI7CiAgICAkcD1hcnJheSgpOwogICAgaWYgKCRhbGwpICRwPWFycmF5KCR1c2VyaWQpOyBlbHNlICRwPWFycmF5KCR1c2VyaWQsJHRpdGxlKTsKICAgICRyZXN1bHQ9JGRiLT5FeGVjdXRlKCRxLCRwKTsKICAgIHJldHVybiAoJHJlc3VsdCE9ZmFsc2UpOwogIH0KICAKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgZnVuY3Rpb24gRGVsZXRlVXNlclByb3BlcnR5RnVsbCgkdGl0bGUsJHVzZXJpZCwkYWxsPWZhbHNlKSAKICB7CiAgICAkZGI9JHRoaXMtPkdldERCKCk7CiAgICAkcT0iREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3Byb3BlcnRpZXMgV0hFUkUgdXNlcmlkPT8iOwogICAgaWYgKCEkYWxsKSAkcS49IiBBTkQgdGl0bGU9PyI7CiAgICAkcD1hcnJheSgpOwogICAgaWYgKCRhbGwpICRwPWFycmF5KCR1c2VyaWQpOyBlbHNlICRwPWFycmF5KCR1c2VyaWQsJHRpdGxlKTsKICAgICRyZXN1bHQ9JGRiLT5FeGVjdXRlKCRxLCRwKTsKICAgIHJldHVybiAoJHJlc3VsdCE9ZmFsc2UpOwogIH0KCiAgLy8gdXNlcmlkIGFwaSBmdW5jdGlvbgogIGZ1bmN0aW9uIERlbGV0ZUFsbFVzZXJQcm9wZXJ0aWVzKCkgCiAgewogICAgcmV0dXJuICR0aGlzLT5EZWxldGVVc2VyUHJvcGVydHkoIiIsdHJ1ZSk7CiAgfQoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgZnVuY3Rpb24gRGVsZXRlQWxsVXNlclByb3BlcnRpZXNGdWxsKCR1c2VyaWQpIAogIHsKICAgIHJldHVybiAkdGhpcy0+RGVsZXRlVXNlclByb3BlcnR5RnVsbCgiIiwkdXNlcmlkLHRydWUpOwogIH0KCiAgLy8gdXNlcmlkIGFwaSBmdW5jdGlvbgogIGZ1bmN0aW9uIENoZWNrUGFzc3dvcmQoJHVzZXJuYW1lLCRwYXNzd29yZCkgCiAgewogICAgJGRiPSR0aGlzLT5HZXREYigpOwogICAgJHE9IlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3VzZXJzIFdIRVJFIHVzZXJuYW1lPT8gQU5EIHBhc3N3b3JkPT8iOwogICAgJHA9YXJyYXkoJHVzZXJuYW1lLG1kNSgkcGFzc3dvcmQpKTsKICAgICRyZXN1bHQ9JGRiLT5FeGVjdXRlKCRxLCRwKTsKICAgIGlmICgkcmVzdWx0ICYmICRyZXN1bHQtPlJvd0NvdW50KCkpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGZhbHNlOwogIH0KICAKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgZnVuY3Rpb24gTG9nZ2VkSW5OYW1lKCkgCiAgewogICAgJHVzZXJpZD0kdGhpcy0+TG9nZ2VkSW5JZCgpOwogICAgaWYgKCR1c2VyaWQhPSIiKSByZXR1cm4gJHRoaXMtPkdldFVzZXJOYW1lKCR1c2VyaWQpOyBlbHNlIHJldHVybiAiIjsKICB9CgoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgZnVuY3Rpb24gTG9nZ2VkSW5FbWFpbCgpIAogIHsKICAgICR1c2VyaWQ9JHRoaXMtPkxvZ2dlZEluSWQoKTsKICAgIGlmICgkdXNlcmlkIT0iIikgcmV0dXJuICR0aGlzLT5HZXRFbWFpbCgkdXNlcmlkKTsgZWxzZSByZXR1cm4gIiI7CiAgfQoKCiAgLy8gdXNlcmlkIGFwaSBmdW5jdGlvbgogIGZ1bmN0aW9uIExvZ291dCgpIAogIHsKICAgICRkYj0kdGhpcy0+R2V0RGIoKTsKICAgICRxPSJERUxFVEUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfbG9nZ2VkaW4gV0hFUkUgc2Vzc2lvbmlkPT8iOwogICAgJHA9YXJyYXkoc2Vzc2lvbl9pZCgpKTsKICAgICRyZXN1bHQ9JGRiLT5FeGVjdXRlKCRxLCRwKTsKICB9CgogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICBmdW5jdGlvbiBMb2dvdXRVc2VyKCR1aWQpIAogIHsKICAgICRkYj0kdGhpcy0+R2V0RGIoKTsKICAgICRxPSJERUxFVEUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfbG9nZ2VkaW4gV0hFUkUgdXNlcmlkPT8iOwogICAgJHA9YXJyYXkoJHVpZCk7CiAgICAkcmVzdWx0PSRkYi0+RXhlY3V0ZSgkcSwkcCk7CiAgfQoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgZnVuY3Rpb24gRXhwaXJlVXNlcnMoKSAKICB7CiAgICAkbW9kdWxlID0gJHRoaXMtPkdldE1vZHVsZSgpOwogICAgJGV4cGlyeXRpbWUgPSAkbW9kdWxlLT5HZXRQcmVmZXJlbmNlKCd1c2VyX3Nlc3Npb25fZXhwaXJlcycpOwogICAgJGRiPSR0aGlzLT5HZXREYigpOwogICAgJHE9IkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19sb2dnZWRpbiBXSEVSRSBsYXN0dXNlZDw/IjsKICAgICRtb2R1bGUgPSAkdGhpcy0+R2V0TW9kdWxlKCk7CiAgICAkcD1hcnJheSh0aW1lKCktJGV4cGlyeXRpbWUpOwogICAgJHJlc3VsdD0kZGItPkV4ZWN1dGUoJHEsJHApOwogIH0KCiAgLy8gdXNlcmlkIGFwaSBmdW5jdGlvbgogIGZ1bmN0aW9uIExvZ2dlZEluSWQoKSAKICB7CiAgICBpZiggc2Vzc2lvbl9pZCgpID09ICIiICkKICAgICAgewoJLy8gaWYgd2UgZG9uJ3QgaGF2ZSBhIHNlc3Npb24gaWQsIHRoZW4gd2UgYXJlbid0IGxvZ2dlZCBpbi4KCXJldHVybiBmYWxzZTsKICAgICAgfQoKICAgICRkYj0kdGhpcy0+R2V0RGIoKTsKICAgICR0aGlzLT5FeHBpcmVVc2VycygpOwogICAgJHE9IlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2xvZ2dlZGluIFdIRVJFIHNlc3Npb25pZD0/IjsKICAgICRwPWFycmF5KHNlc3Npb25faWQoKSk7CiAgICAkcmVzdWx0PSRkYi0+RXhlY3V0ZSgkcSwkcCk7CiAgICBpZiAoJHJlc3VsdCAmJiAkcmVzdWx0LT5Sb3dDb3VudCgpKSB7CiAgICAgICRyb3c9JHJlc3VsdC0+RmV0Y2hSb3coKTsKICAgICAgJHJldHZhbCA9ICRyb3dbInVzZXJpZCJdOwoKICAgICAgLy8gbm93IHRvdWNoIHRoZSBsYXN0dXNlZAogICAgICAvLyB0aGlzIHdpbGwgZW5zdXJlIHRoYXQgZXZlcnkgdGltZSB3ZSBjaGVjayB0aGF0IGEgdXNlciBpcwogICAgICAvLyBsb2dnZWQgaW4sIGl0IHRvdWNoZXMgaGlzIGxvZ2dlZCBpbiBlbnRyeQogICAgICAkcSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2xvZ2dlZGluIFNFVCBsYXN0dXNlZCA9ID8gd2hlcmUgc2Vzc2lvbmlkID0gPyI7CiAgICAgICRyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggdGltZSgpLCBzZXNzaW9uX2lkKCkgKSApOwogICAgICByZXR1cm4gJHJldHZhbDsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CgogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICBmdW5jdGlvbiBMb2dnZWRJbigpIAogIHsKICAgIGlmKCAhJHRoaXMtPkxvZ2dlZEluSWQoKSApIAogICAgICB7CglyZXR1cm4gZmFsc2U7IAogICAgICB9CiAgICBlbHNlCiAgICAgIHsKCXJldHVybiB0cnVlOwogICAgICB9CiAgfQoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgZnVuY3Rpb24gTWVtYmVyT2ZHcm91cCgkdXNlcmlkLCRncm91cGlkKSAKICB7CiAgICAkZGI9JHRoaXMtPkdldERiKCk7CiAgICAkcT0iIjsKICAgICRxPSJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19iZWxvbmdzIFdIRVJFIHVzZXJpZD0/IEFORCBncm91cGlkPT8iOwogICAgCiAgICAkcGFyYW1zPWFycmF5KCR1c2VyaWQsJGdyb3VwaWQpOwogICAgJHJlc3VsdD0kZGItPkV4ZWN1dGUoJHEsJHBhcmFtcyk7CiAgICBpZiAoJHJlc3VsdCAmJiAkcmVzdWx0LT5Sb3dDb3VudCgpKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KICAKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgZnVuY3Rpb24gR2V0VXNlck5hbWUoJHVzZXJpZCkgCiAgewogICAgJGRiPSR0aGlzLT5HZXREYigpOwogICAgJHE9IlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3VzZXJzIFdIRVJFIGlkPSciLiR1c2VyaWQuIiciOwogICAgCiAgICAkZGJyZXN1bHQ9JGRiLT5FeGVjdXRlKCRxKTsKICAgIGlmICgkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5Sb3dDb3VudCgpKSB7CiAgICAgICRyb3c9JGRicmVzdWx0LT5GZXRjaFJvdygpOwogICAgICByZXR1cm4gJHJvd1sidXNlcm5hbWUiXTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CiAgCiAgLy8gdXNlcmlkIGFwaSBmdW5jdGlvbgogIGZ1bmN0aW9uIEdldEVtYWlsKCR1c2VyaWQpIAogIHsKICAgICRkYj0kdGhpcy0+R2V0RGIoKTsKICAgICRxPSIiOwogICAgJHE9IlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3VzZXJzIFdIRVJFIGlkPSciLiR1c2VyaWQuIiciOwogICAgCiAgICAkZGJyZXN1bHQ9JGRiLT5FeGVjdXRlKCRxKTsKICAgIGlmICgkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5Sb3dDb3VudCgpKSB7CiAgICAgICRyb3c9JGRicmVzdWx0LT5GZXRjaFJvdygpOwogICAgICByZXR1cm4gJHJvd1siZW1haWwiXTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9CiAgCiAgLy8gdXNlcmlkIGFwaSBmdW5jdGlvbgogIGZ1bmN0aW9uIEdldFVzZXJJRCgkdXNlcm5hbWUpIAogIHsKICAgICRkYj0kdGhpcy0+R2V0RGIoKTsKICAgICRxPSJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc191c2VycyBXSEVSRSB1c2VybmFtZT0nIi4kdXNlcm5hbWUuIiciOwogICAgJGRicmVzdWx0PSRkYi0+RXhlY3V0ZSgkcSk7CiAgICBpZiAoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+Um93Q291bnQoKSkgewogICAgICAkcm93PSRkYnJlc3VsdC0+RmV0Y2hSb3coKTsKICAgICAgcmV0dXJuICRyb3dbImlkIl07CiAgICB9IGVsc2UgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQogIAogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICAvLyByZXR1cm5zIGFycmF5CiAgZnVuY3Rpb24gQWRkR3JvdXAoICRuYW1lLCAkZGVzY3JpcHRpb24gKQogIHsKICAgICRkYiA9ICR0aGlzLT5HZXREYigpOwogICAgCiAgICAvLyBzZWUgaWYgaXQgZXhpc3RzIGFscmVhZHkgb3Igbm90IChieSBuYW1lKQogICAgJHEgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4KICAgICAgIm1vZHVsZV9mZXVzZXJzX2dyb3VwcyBXSEVSRSBncm91cG5hbWUgPSA/IjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkbmFtZSApICk7CiAgICBpZiggISRkYnJlc3VsdCApCiAgICAgIHsKCXJldHVybiBhcnJheShGQUxTRSwkZGItPkVycm9yTXNnKCkpOwogICAgICB9CiAgICAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpOwogICAgaWYoICRyb3cgKQogICAgICB7CglyZXR1cm4gYXJyYXkoRkFMU0UsJHRoaXMtPkxhbmcoJ2Vycm9yX2dyb3VwbmFtZV9leGlzdHMnKSk7CiAgICAgIH0KICAgIAogICAgJGdycGlkID0gCiAgICAgICRkYi0+R2VuSUQoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfZ3JvdXBzX3NlcSIgKTsKICAgICRxID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLgogICAgICAibW9kdWxlX2ZldXNlcnNfZ3JvdXBzIFZBTFVFUyAoPyw/LD8pIjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkZ3JwaWQsICRuYW1lLCAkZGVzY3JpcHRpb24gKSApOwogICAgaWYoICEkZGJyZXN1bHQgKQogICAgICB7CglyZXR1cm4gYXJyYXkoRkFMU0UsJGRiLT5FcnJvck1zZygpKTsKICAgICAgfQogICAgcmV0dXJuIGFycmF5KFRSVUUsJGdycGlkKTsKICB9CgoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgLy8gcmV0dXJucyBhcnJheQogIGZ1bmN0aW9uIEFkZFVzZXIoICRuYW1lLCAkcGFzc3dvcmQsICRleHBpcmVzICkKICB7CiAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKICAgIAogICAgLy8gc2VlIGlmIGl0IGV4aXN0cyBhbHJlYWR5IG9yIG5vdCAoYnkgbmFtZSkKICAgICRxID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuCiAgICAgICJtb2R1bGVfZmV1c2Vyc191c2VycyBXSEVSRSB1c2VybmFtZSA9ID8iOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICRuYW1lICkgKTsKICAgIGlmKCAhJGRicmVzdWx0ICkKICAgICAgewoJcmV0dXJuIGFycmF5KEZBTFNFLCRkYi0+RXJyb3JNc2coKSk7CiAgICAgIH0KICAgICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCk7CiAgICBpZiggJHJvdyApCiAgICAgIHsKCSRtb2R1bGUgPSAkdGhpcy0+R2V0TW9kdWxlKCk7CglyZXR1cm4gYXJyYXkoRkFMU0UsJG1vZHVsZS0+TGFuZygnZXJyb3JfdXNlcm5hbWVfZXhpc3RzJykpOwogICAgICB9CiAgICAKICAgIC8vIGdlbmVyYXRlIHRoZSBzZXF1ZW5jZQogICAgJHVpZCA9IAogICAgICAkZGItPkdlbklEKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3VzZXJzX3NlcSIgKTsKCiAgICAvLyBpbnNlcnQgdGhlIHJlY29yZAogICAgJHEgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuCiAgICAgICJtb2R1bGVfZmV1c2Vyc191c2VycyBWQUxVRVMgKD8sPyw/LD8sPykiOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICR1aWQsICRuYW1lLCBtZDUoJHBhc3N3b3JkKSwgCgkJCQkJICRkYi0+RGJUaW1lU3RhbXAodGltZSgpKSwKCQkJCQkgJGRiLT5EYlRpbWVTdGFtcCgkZXhwaXJlcykgKSApOwogICAgaWYoICEkZGJyZXN1bHQgKQogICAgICB7CglyZXR1cm4gYXJyYXkoRkFMU0UsJGRiLT5FcnJvck1zZygpKTsKICAgICAgfQogICAgcmV0dXJuIGFycmF5KFRSVUUsJHVpZCk7CiAgfQogIAogIAogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICBmdW5jdGlvbiBHZXRHcm91cE5hbWUoJGdyb3VwaWQpIAogIHsKICAgICRkYj0kdGhpcy0+R2V0RGIoKTsKICAgICRxPSJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19ncm91cHMgV0hFUkUgaWQ9JyIuJGdyb3VwaWQuIiciOwogICAgJGRicmVzdWx0PSRkYi0+RXhlY3V0ZSgkcSk7CiAgICBpZiAoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+Um93Q291bnQoKSkgewogICAgICAkcm93PSRkYnJlc3VsdC0+RmV0Y2hSb3coKTsKICAgICAgcmV0dXJuICRyb3dbImdyb3VwbmFtZSJdOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KICAKICAKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgZnVuY3Rpb24gR2V0R3JvdXBEZXNjKCRncm91cGlkKSB7CiAgICAkZGI9JHRoaXMtPkdldERiKCk7CiAgICAkcT0iU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfZ3JvdXBzIFdIRVJFIGlkPSciLiRncm91cGlkLiInIjsKICAgICRkYnJlc3VsdD0kZGItPkV4ZWN1dGUoJHEpOwogICAgaWYgKCRkYnJlc3VsdCAmJiAkZGJyZXN1bHQtPlJvd0NvdW50KCkpIHsKICAgICAgJHJvdz0kZGJyZXN1bHQtPkZldGNoUm93KCk7CiAgICAgIHJldHVybiAkcm93WyJncm91cGRlc2MiXTsKICAgIH0gCWVsc2UgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQogIAoKICAvLyB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgLy8gcmV0dXJucyBhbiBhcnJheQogIGZ1bmN0aW9uIERlbGV0ZUdyb3VwRnVsbCggJGlkICkKICB7CiAgICAkZGIgPSAkdGhpcy0+R2V0REIoKTsKICAgICRyZXN1bHQgPSBhcnJheSgpOwoKICAgIC8vIGRlbGV0ZSBhbGwgcHJvcGVydHkgcmVsYXRpb25zIGZyb20gdGhpcyBncm91cAogICAgJHEgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2dyb3VwcHJvcG1hcCBXSEVSRSBncm91cF9pZCA9ID8iOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICRpZCApICk7CiAgICBpZiggISRkYnJlc3VsdCApCiAgICAgIHsKCXJldHVybiBhcnJheSggRkFMU0UsICRkYi0+RXJyb3JNc2coKSApOwogICAgICB9CgogICAgLy8gZGVsZXRlIGFsbCBpbmRpY2F0aW9uIHRoYXQgYW55Ym9keSBpcyBhIG1lbWJlcgogICAgLy8gb2YgdGhpcyBncm91cAogICAgJHEgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2JlbG9uZ3MgV0hFUkUgZ3JvdXBpZCA9ID8iOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICRpZCApICk7CiAgICBpZiggISRkYnJlc3VsdCApCiAgICAgIHsKCXJldHVybiBhcnJheSggRkFMU0UsICRkYi0+RXJyb3JNc2coKSApOwogICAgICB9CiAgICAKICAgIC8vIGFuZCB0aGVuIGRlbGV0ZSB0aGUgZ3JvdXAKICAgICRxID0gIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19ncm91cHMgV0hFUkUgaWQgPSA/IjsKICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkaWQgKSApOwogICAgaWYoICEkZGJyZXN1bHQgKQogICAgICB7CglyZXR1cm4gYXJyYXkoIEZBTFNFLCAkZGItPkVycm9yTXNnKCkgKTsKICAgICAgfQogICAgCiAgICByZXR1cm4gYXJyYXkoIFRSVUUsICcnICk7CiAgfQogIAogIAogIC8vIHVzZXJpZCBhcGkgZnVuY3Rpb24KICBmdW5jdGlvbiBHZXRHcm91cExpc3QoKQogIHsKICAgICRkYiA9ICR0aGlzLT5HZXREYigpOwogICAgCiAgICAkcmVzdWx0ID0gYXJyYXkoKTsKICAgICRxID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2dyb3VwcyI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxICk7CiAgICBpZiggJGRicmVzdWx0ICkgewogICAgd2hpbGUoICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkgKQogICAgICB7CgkkcmVzdWx0WyRyb3dbJ2dyb3VwbmFtZSddXSA9ICRyb3dbJ2lkJ107CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAkcmVzdWx0OwogIH0KICAKCiAgLy8gdXNlcmlkIGFwaSBmdW5jdGlvbgogIGZ1bmN0aW9uIEdldEdyb3VwTGlzdEZ1bGwoKQogIHsKICAgICRkYiA9ICR0aGlzLT5HZXREYigpOwoJICAKICAgICRyZXN1bHQgPSBhcnJheSgpOwogICAgJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2dyb3VwcyI7CiAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxdWVyeSApOwogICAgaWYoICRkYnJlc3VsdCApIHsKICAgICAgd2hpbGUoICRyb3cgPSAkZGJyZXN1bHQtPkZldGNoUm93KCkgKQogICAgICAgIHsKCSAgYXJyYXlfcHVzaCgkcmVzdWx0LCRyb3cpOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAkcmVzdWx0OwogIH0KCgogIC8vIG9sZCB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgZnVuY3Rpb24gR2V0R3JvdXBJRCgkZ3JvdXBuYW1lKSAKICB7CiAgICAkZGI9JHRoaXMtPkdldERiKCk7CgogICAgJHE9IlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2dyb3VwcyBXSEVSRSBncm91cG5hbWU9JyIuJGdyb3VwbmFtZS4iJyI7CiAgICAkZGJyZXN1bHQ9JGRiLT5FeGVjdXRlKCRxKTsKICAgIGlmICgkZGJyZXN1bHQgJiYgJGRicmVzdWx0LT5Sb3dDb3VudCgpKSAKICAgICAgewoJJHJvdz0kZGJyZXN1bHQtPkZldGNoUm93KCk7CglyZXR1cm4gJHJvd1siaWQiXTsKICAgICAgfSAKICAgIGVsc2UgCiAgICAgIHsKCXJldHVybiBmYWxzZTsKICAgICAgfQogIH0KCgogIC8vIG9sZCB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgZnVuY3Rpb24gR2V0TWVtYmVyR3JvdXBzKCR1c2VyaWQpIHsKICAgICRkYj0kdGhpcy0+R2V0RGIoKTsKICAgICRxPSJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19iZWxvbmdzIFdIRVJFIHVzZXJpZD0nIi4kdXNlcmlkLiInIjsKICAgICRkYnJlc3VsdD0kZGItPkV4ZWN1dGUoJHEpOwogICAgaWYgKCRkYnJlc3VsdCAmJiAkZGJyZXN1bHQtPlJvd0NvdW50KCkpIHsKICAgICAgJHJlc3VsdD0iIjsKICAgICAgd2hpbGUgKCRyb3c9JGRicmVzdWx0LT5GZXRjaFJvdygpKSB7CglpZiAoJHJlc3VsdCE9IiIpIHsKCSAgJHJlc3VsdC49IiwiLiR0aGlzLT5HZXRHcm91cE5hbWUoJHJvd1siZ3JvdXBpZCJdKTsKCX0gZWxzZSB7CgkgICRyZXN1bHQ9JHRoaXMtPkdldEdyb3VwTmFtZSgkcm93WyJncm91cGlkIl0pOwoJfQogICAgICB9CiAgICAgIHJldHVybiAkcmVzdWx0OwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuICJub25lIjsKICAgIH0KICB9CgoKICAvLyBvbGQgdXNlcmlkIGFwaSBmdW5jdGlvbgogIGZ1bmN0aW9uIENoYW5nZVVzZXIoJGlkKSAKICB7CiAgICAkZGI9JHRoaXMtPkdldERiKCk7CiAgICBpZiAoaXNzZXQoJF9QT1NUWyRpZC4idXNlcmlkIl0pKSAkdXNlcmlkPXRyaW0oJF9QT1NUWyRpZC4idXNlcmlkIl0pOyBlbHNlIHJldHVybiAiVW5yZWNvdmVyYWJsZSBlcnJvciI7CiAgICAkdXNlcm5hbWU9dHJpbSgkX1BPU1RbJGlkLiJ1c2VybmFtZSJdKTsKICAgICRxdWVyeT0iU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfdXNlcnMgV0hFUkUgdXNlcm5hbWU9JyIuJHVzZXJuYW1lLiInIjsKICAgICRyZXN1bHQ9JGRiLT5FeGVjdXRlKCRxdWVyeSk7CiAgICBpZiAoJHJlc3VsdCAmJiAkcmVzdWx0LT5Sb3dDb3VudCgpKSB7CiAgICAgICRyb3c9JHJlc3VsdC0+RmV0Y2hSb3coKTsKICAgICAgaWYgKCRyb3dbImlkIl0hPSR1c2VyaWQpIHJldHVybiAiVXNlcm5hbWUgYWxyZWFkeSBleGlzdHMhIjsKICAgIH0KICAgIAogICAgaWYgKGlzc2V0KCRfUE9TVFskaWQuImVtYWlsIl0pKSAkZW1haWw9dHJpbSgkX1BPU1RbJGlkLiJlbWFpbCJdKTsgZWxzZSByZXR1cm4gIkVtYWlsIGFkZHJlc3MgbXVzdCBiZSBwcm92aWRlZCI7CiAgICAKICAgIGlmIChpc3NldCgkX1BPU1RbJGlkLiJwYXNzd29yZCJdKSkgJHBhc3N3b3JkPXRyaW0oJF9QT1NUWyRpZC4icGFzc3dvcmQiXSk7IGVsc2UgJHBhc3N3b3JkPSIiOwogICAgaWYgKCRwYXNzd29yZCE9IiIpIHsKICAgICAgJHBhc3N3b3JkMj10cmltKCRfUE9TVFskaWQuInBhc3N3b3JkMiJdKTsKICAgICAgaWYgKCRwYXNzd29yZCE9JHBhc3N3b3JkMikgcmV0dXJuICJQYXNzd29yZHMgZG8gbm90IG1hdGNoISI7CiAgICAgICRxdWVyeT0iVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc191c2VycyBTRVQgdXNlcm5hbWU9PyxTRVQgcGFzc3dvcmQ9PyxlbWFpbD0/IFdIRVJFIGlkPT8iOwogICAgICAkcGFyYW1zPWFycmF5KCR1c2VybmFtZSxtZDUoJHBhc3N3b3JkKSwkZW1haWwsJHVzZXJpZCk7CiAgICAgICRkYnJlc3VsdD0kZGItPkV4ZWN1dGUoJHF1ZXJ5LCRwYXJhbXMpOwogICAgfSBlbHNlIHsKICAgICAgJHF1ZXJ5PSJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3VzZXJzIFNFVCB1c2VybmFtZT0/LGVtYWlsPT8gV0hFUkUgaWQ9PyI7CiAgICAgICRwYXJhbXM9YXJyYXkoJHVzZXJuYW1lLCRlbWFpbCwkdXNlcmlkKTsKICAgICAgJGRicmVzdWx0PSRkYi0+RXhlY3V0ZSgkcXVlcnksJHBhcmFtcyk7CiAgICB9CiAgICAKICAgICRxPSJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19ncm91cHMiOwogICAgJGRicmVzdWx0PSRkYi0+RXhlY3V0ZSgkcSk7CiAgICBpZiAoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+Um93Q291bnQoKSkgewogICAgICB3aGlsZSAoJHJvdz0kZGJyZXN1bHQtPkZldGNoUm93KCkpIHsKCS8vRmlyc3QgcmVzZXQgdGhlIGFzc29jaW9hdGlvbnMKCSRxPSJERUxFVEUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfYmVsb25ncyBXSEVSRSB1c2VyaWQ9PyBBTkQgZ3JvdXBpZD0/IjsKCSRwYXJhbXMxPWFycmF5KCR1c2VyaWQsJHJvd1siaWQiXSk7CgkkZGJyZXN1bHQyPSRkYi0+RXhlY3V0ZSgkcSwkcGFyYW1zMSk7CgllY2hvICRkYi0+RXJyb3JNc2coKTsKCS8vVGhlbiBjcmVhdGUgYSBuZXcgb25lIGlmIGl0IHdhcyBzZWxlY3RlZAoJaWYgKCRfUE9TVFskaWQuImdyb3VwIi4kcm93WyJpZCJdXT09InllcyIpIHsKCSAgLy9DcmVhdGUgYW4gYXNzb2NpYXRpb24KCSAgJHE9IklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19iZWxvbmdzICh1c2VyaWQsZ3JvdXBpZCkgVkFMVUVTICg/LD8pIjsKCSAgJHBhcmFtczI9YXJyYXkoJHVzZXJpZCwkcm93WyJpZCJdKTsKCSAgJGRicmVzdWx0Mj0kZGItPkV4ZWN1dGUoJHEsJHBhcmFtczIpOwoJfQogICAgICB9CiAgICB9CiAgfQoJCgogIC8vIG9sZCB1c2VyaWQgYXBpIGZ1bmN0aW9uCiAgZnVuY3Rpb24gRGVsZXRlVXNlcigkaWQpIAogIHsKICAgICRkYj0kdGhpcy0+R2V0RGIoKTsKICAgIGlmIChpc3NldCgkX0dFVFskaWQuInVzZXJpZCJdKSkgJHVzZXJpZD0kX0dFVFskaWQuInVzZXJpZCJdOyBlbHNlIHJldHVybjsKICAgICRxPSJERUxFVEUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfdXNlcnMgV0hFUkUgaWQ9JyR1c2VyaWQnIjsKICAgICRkYnJlc3VsdD0kZGItPkV4ZWN1dGUoJHEpOwogICAgJHE9IkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19iZWxvbmdzIFdIRVJFIHVzZXJpZD0nJHVzZXJpZCciOwogICAgJGRicmVzdWx0PSRkYi0+RXhlY3V0ZSgkcSk7CiAgfQoKfSAvLyBjbGFzcwoKPz4K]]></data>
  </file>
  <file>
    <filename>/FrontEndUsers.module.php</filename>
    <isdir>0</isdir>
    <data><![CDATA[PD9waHAKLyoKIEZyb250RW5kVXNlcnMuIEEgcGx1Z2luIGZvciBDTVMgLSBDTVMgTWFkZSBTaW1wbGUKIENvcHlyaWdodCAoYykgMjAwNC0wNSBieSBNb3J0ZW4gUG91bHNlbiA8bW9ydGVuQHBvdWxzZW4ub3JnPgoKIFRyYW5zbGF0aW9uczoKIEZyZW5jaDogUGF0cmljaWEgQnJ1biwgaHR0cDovL3d3dy5icnVtYWxzb2xzdGljZS5jb20KIE5vcndlZ2lhbiAoYm9rbT9sKTogUm9nZXIgIlN0aWdtYSIgS251dHNlbiA8c3RpZ21hc3RlckBnbWFpbC5jb20+CgogQ01TLSBDTVMgTWFkZSBTaW1wbGUgaXMgQ29weXJpZ2h0IChjKSBUZWQgS3VscCAod2lzaHlAdXNlcnMuc2YubmV0KQogVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9jbXNtYWRlc2ltcGxlLnNmLm5ldAoKIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCgogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQoqLwoKLy8gYSB2ZXJ5IGltcG9ydGFudCBsaW5lIHRoYXQgaW5jbHVkZXMgYWxsIG9mIG91ciBhcGkgZnVuY3Rpb25zCnJlcXVpcmVfb25jZSggIkZyb250RW5kVXNlcnMuYXBpLnBocCIgKTsKcmVxdWlyZV9vbmNlKCAiUmFuZG9tLnBocCIgKTsKCmZ1bmN0aW9uIGFycmF5X2tleV9leGlzdHNfc3Vic3RyKCAkYXJyLCAkZXhwciApCnsKICAka2V5cyA9IGFycmF5X2tleXMoICRhcnIgKTsKICBmb3JlYWNoKCAka2V5cyBhcyAkayApCiAgewogICAgaWYoIHN0cnN0ciggJGssICRleHByICkgKSByZXR1cm4gdHJ1ZTsKICB9CiAgcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiBhcnJheV9maW5kX2tleV9yZWdleHAoICRhcnIsICRleHByICkKewogICRrZXlzID0gYXJyYXlfa2V5cyggJGFyciApOwogIGZvcmVhY2goICRrZXlzIGFzICRrICkKICB7CiAgICBpZiggcHJlZ19tYXRjaCggJGV4cHIsICRrICkgKSByZXR1cm4gJGs7CiAgfQogIHJldHVybiBmYWxzZTsKfQoKCmZ1bmN0aW9uIGFycmF5X21lcmdlX2J5X25hbWVfcmVxdWlyZWQoICRhcnIxLCAkYXJyMiApCnsKICAkeHhyZXN1bHQgPSBhcnJheSgpOwogIC8vIGFkZCBpdGVtcyBjb21tb24gdG8gYXJyMSBhbmQgYXJyMiAKICAvLyBidXQgZmF2b3IgcmVxdWlyZWQgaXRlbXMKICBpZiggIWlzX2FycmF5KCAkYXJyMSApIHx8ICFpc19hcnJheSggJGFycjIgKSApCiAgICB7CiAgICAgIHJldHVybjsKICAgIH0KICBmb3JlYWNoKCAkYXJyMSBhcyAkYTEgKQogIHsKICAgIGZvcmVhY2goICRhcnIyIGFzICRhMiApCiAgICB7CiAgICAgIGlmKCAkYTFbJ25hbWUnXSA9PSAkYTJbJ25hbWUnXSApIAoJewoJICBpZiggJGExWydyZXF1aXJlZCddID09IDIgKSAKCSAgICB7CgkgICAgICBhcnJheV9wdXNoKCAkeHhyZXN1bHQsICRhMSApOwoJICAgICAgYnJlYWs7CgkgICAgfQoJICBlbHNlIAoJICAgIHsKCSAgICAgIGFycmF5X3B1c2goICR4eHJlc3VsdCwgJGEyICk7CgkgICAgICBicmVhazsKCSAgICB9Cgl9ICAgIAogICAgfQogIH0KICAKICAvLyBhZGQgaXRlbXMgaW4gYXJyMSBub3QgaW4gcmVzdWx0CiAgZm9yZWFjaCggJGFycjEgYXMgJGExICkKICB7CiAgICAkZm91bmQgPSBmYWxzZTsKICAgIGZvcmVhY2goICR4eHJlc3VsdCBhcyAkcmVzICkKICAgIHsKICAgICAgaWYoICRhMVsnbmFtZSddID09ICRyZXNbJ25hbWUnXSApCgl7CgkgICRmb3VuZCA9IHRydWU7CgkgIGJyZWFrOwoJfQogICAgfQogICAgaWYoICEkZm91bmQgKQogICAgICB7CglhcnJheV9wdXNoKCAkeHhyZXN1bHQsICRhMSApOwogICAgICB9CiAgfQogIAogIC8vIGFkZCBpdGVtcyBpbiBhcnIyIG5vdCBpbiByZXN1bHQKICBmb3JlYWNoKCAkYXJyMiBhcyAkYTIgKQogIHsKICAgICRmb3VuZCA9IGZhbHNlOwogICAgZm9yZWFjaCggJHh4cmVzdWx0IGFzICRyZXMgKQogICAgewogICAgICBpZiggJGEyWyduYW1lJ10gPT0gJHJlc1snbmFtZSddICkKCXsKCSAgJGZvdW5kID0gdHJ1ZTsKCSAgYnJlYWs7Cgl9CiAgICB9CiAgICBpZiggISRmb3VuZCApCiAgICAgIHsKCWFycmF5X3B1c2goICR4eHJlc3VsdCwgJGEyICk7CiAgICAgIH0KICB9CiAgcmV0dXJuICR4eHJlc3VsdDsKfQoKCmZ1bmN0aW9uIGNvbXBhcmVfZWxlbWVudHNfYnlfc29ydG9yZGVyX2tleSggJGUxLCAkZTIgKQp7CiAgaWYoICRlMVsnc29ydF9rZXknXSA8ICRlMlsnc29ydF9rZXknXSApCiAgICB7CiAgICAgIHJldHVybiAtMTsKICAgIH0KICBlbHNlIGlmKCAkZTFbJ3NvcnRfa2V5J10gPiAkZTJbJ3NvcnRfa2V5J10gKQogICAgewogICAgICByZXR1cm4gMTsKICAgIH0KICByZXR1cm4gMDsKfQoKCmZ1bmN0aW9uIGV4cGxvZGVfd2l0aF9rZXkoJHN0ciwgJGluZ2x1ZT0nPScsICRvdXRnbHVlPScmJykKewogICRyZXQgPSBhcnJheSgpOwogICRhMSA9IHNwbGl0KCRvdXRnbHVlLCRzdHIpOwogIGZvcmVhY2goICRhMSBhcyAkYTIgKQogIHsKICAgIGxpc3QoICRrLCAkdiApID0gc3BsaXQoICRpbmdsdWUsICRhMiApOwogICAgJHJldFsgJGsgXSA9ICR2OwogIH0KICByZXR1cm4gJHJldDsKfQoKCmZ1bmN0aW9uIGZpbmRfaW5kZXhfb2ZfdmFsdWUoICRkYXRhLCAkdmFsdWUsICRkZmx0ICkKewogICRpID0gMDsKICBmb3JlYWNoKCAkZGF0YSBhcyAkaz0+JHYgKQogIHsKICAgIGlmKCAkdiA9PSAkdmFsdWUgKQogICAgICB7CglyZXR1cm4gJGk7CiAgICAgIH0KICAgICRpKys7CiAgfQogIHJldHVybiAkZGZsdDsKfQoKCmZ1bmN0aW9uIGltcGxvZGVfd2l0aF9rZXkoJGFzc29jLCAkaW5nbHVlID0gJz0nLCAkb3V0Z2x1ZSA9ICcmJykKewogICAkcmV0dXJuID0gbnVsbDsKICAgZm9yZWFjaCAoJGFzc29jIGFzICR0ayA9PiAkdHYpICRyZXR1cm4gLj0gJG91dGdsdWUuJHRrLiRpbmdsdWUuJHR2OwogICByZXR1cm4gc3Vic3RyKCRyZXR1cm4sc3RybGVuKCRvdXRnbHVlKSk7Cn0KCgoKZnVuY3Rpb24gbXlDcmVhdGVJbnB1dENoZWNrYm94KCRpZCwgJG5hbWUsICR2YWx1ZT0nJywgJHNlbGVjdGVkdmFsdWU9JycsIAoJCQkgICAgICAgJGFkZHR0ZXh0PScnKQp7CiAgJHRleHQgPSAnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSInLiRpZC4kbmFtZS4nIiB2YWx1ZT0iJy4kdmFsdWUuJyInOwogICRhcnIgPSBzcGxpdCgiLCIsJHNlbGVjdGVkdmFsdWUpOwogIGZvcmVhY2goICRhcnIgYXMgJGEgKQogIHsKICAgIGlmICgkYSA9PSAkdmFsdWUpCiAgICAgIHsKCSR0ZXh0IC49ICcgJyAuICdjaGVja2VkPSJjaGVja2VkIic7CiAgICAgIH0KICB9CiAgaWYgKCRhZGR0dGV4dCAhPSAnJykKICAgIHsKICAgICAgJHRleHQgLj0gJyAnLiRhZGR0dGV4dDsKICAgIH0KICAkdGV4dCAuPSAiIC8+XG4iOwogIHJldHVybiAkdGV4dDsKfQoKZnVuY3Rpb24gbXlDcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICRuYW1lLCAkdmFsdWU9JycsICRpbWFnZT0nJywgJGFkZHR0ZXh0PScnKQp7CiAgZ2xvYmFsICRnQ21zOwogICR0ZXh0ID0gJzxpbnB1dCBuYW1lPSInLiRpZC4kbmFtZS4nIiB2YWx1ZT0iJy4kdmFsdWUuJyIgdHlwZT0nOwogIGlmICgkaW1hZ2UgIT0gJycpCiAgICB7CiAgICAgICR0ZXh0IC49ICciaW1hZ2UiJzsKICAgICAgJGltZyA9ICRnQ21zLT5jb25maWdbJ3Jvb3RfdXJsJ10uRElSRUNUT1JZX1NFUEFSQVRPUi4kaW1hZ2U7CiAgICAgICR0ZXh0IC49ICcgc3JjPSInLiRpbWcuJyInOwogICAgfQogIGVsc2UgCiAgICB7CiAgICAgICR0ZXh0IC49ICcic3VibWl0Iic7CiAgICB9CiAgaWYgKCRhZGR0dGV4dCAhPSAnJykKICAgIHsKICAgICAgJHRleHQgLj0gJyAnLiRhZGR0dGV4dDsKICAgIH0KICAkdGV4dCAuPSAnIC8+JzsKICByZXR1cm4gJHRleHQgLiAiXG4iOwp9CgoKZnVuY3Rpb24gbXlDcmVhdGVJbnB1dEhpZGRlbiggJGlkLCAkbmFtZSwgJHZhbHVlPScnLCAkYWRkdGV4dD0nJywgJGRlbGltPScsJykKewogIGlmKCBpc19hcnJheSggJHZhbHVlICkgKQogICAgewogICAgICAkdmFsID0gaW1wbG9kZV93aXRoX2tleSggJHZhbHVlICk7CiAgICB9CiAgZWxzZQogICAgewogICAgICAkdmFsID0gJHZhbHVlOwogICAgfQogICR2YWwgPSBzdHJfcmVwbGFjZSgnIicsICcmcXVvdDsnLCAkdmFsKTsKICAkdGV4dCA9ICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSInLiRpZC4kbmFtZS4nIiB2YWx1ZT0iJy4kdmFsLiciJzsKICBpZiAoJGFkZHRleHQgIT0gJycpCiAgICB7CiAgICAgICR0ZXh0IC49ICcgJy4kYWRkdGV4dDsKICAgIH0KICAkdGV4dCAuPSAiIC8+XG4iOwogIHJldHVybiAkdGV4dDsKfQoKY2xhc3MgRnJvbnRFbmRVc2VycyBleHRlbmRzIENNU01vZHVsZSAKewogIHZhciAkZGV2ZGVidWcgPSAwOwoKICAvKioKICAgKiBUaGUgZGVmYXVsdCB0ZW1wbGF0ZSB1c2VkIGZvciB0aGUgbG9naW4gZm9ybQogICAqLwogIHZhciAkZGZsdF9mb3Jnb3RwYXNzd29yZHRlbXBsYXRlMSA9ICcKPCEtLSBmb3Jnb3QgcGFzc3dvcmQgdGVtcGxhdGUgLS0+Cnskc3RhcnRmb3JtfQp7JHRpdGxlfQp7aWYgJG1lc3NhZ2UgIT0gXCdcJ30KICB7aWYgJGVycm9yICE9IFwnXCd9CiAgICA8cD48Zm9udCBjb2xvcj0icmVkIj57JG1lc3NhZ2V9PC9mb250PjwvcD4KICB7ZWxzZX0KICAgIDxwPnskbWVzc2FnZX08L3A+CiAgey9pZn0Key9pZn0KPHA+eyRsb3N0cHdfbWVzc2FnZX08L3A+CjxwPnskcHJvbXB0X3VzZXJuYW1lfSZuYnNwO3skaW5wdXRfdXNlcm5hbWV9PC9wPgo8cD57JGhpZGRlbn17JHN1Ym1pdH0mbmJzcHskY2FuY2VsfTwvcD4KeyRlbmRmb3JtfQo8IS0tIGZvcmdvdCBwYXNzd29yZCB0ZW1wbGF0ZSAtLT4gCiAgJzsKCiAgdmFyICRkZmx0X2ZvcmdvdHBhc3N3b3JkdGVtcGxhdGUyID0gJwo8IS0tIGZvcmdvdCBwYXNzd29yZCBlbWFpbCB0ZW1wbGF0ZSAtLT4KPHA+eyRtZXNzYWdlX2ZvcmdvdHB3ZW1haWx9PC9wPgo8cD57JHByb21wdF9jb2RlfSZuYnNwO3skZGF0YV9jb2RlfTwvcD4KPHA+eyRwcm9tcHRfbGlua30mbmJzcDt7JGRhdGFfbGlua308cD4KPCEtLSBmb3Jnb3QgcGFzc3dvcmQgZW1haWwgdGVtcGxhdGUgLS0+CiAgJzsKCgogIHZhciAkZGZsdF9mb3Jnb3RwYXNzd29yZHRlbXBsYXRlMyA9ICcKPCEtLSBmb3Jnb3QgcGFzc3dvcmQgdmVyaWZpY2F0aW9uIHRlbXBsYXRlIC0tPgp7JHN0YXJ0Zm9ybX0KeyR0aXRsZX0Ke2lmICRtZXNzYWdlICE9IFwnXCd9CiAge2lmICRlcnJvciAhPSBcJ1wnfQogICAgPHA+PGZvbnQgY29sb3I9InJlZCI+eyRtZXNzYWdlfTwvZm9udD48L3A+CiAge2Vsc2V9CiAgICA8cD57JG1lc3NhZ2V9PC9wPgogIHsvaWZ9CnsvaWZ9CjxwPnskcHJvbXB0X3VzZXJuYW1lfSZuYnNwO3skaW5wdXRfdXNlcm5hbWV9PC9wPgo8cD57JHByb21wdF9jb2RlfSZuYnNwO3skaW5wdXRfY29kZX08L3A+CjxwPnskcHJvbXB0X3Bhc3N3b3JkfSZuYnNwO3skaW5wdXRfcGFzc3dvcmR9PC9wPgo8cD57JHByb21wdF9yZXBlYXRwYXNzd29yZH0mbmJzcDt7JGlucHV0X3JlcGVhdHBhc3N3b3JkfTwvcD4KPHA+eyRoaWRkZW59eyRzdWJtaXR9PC9wPgp7JGVuZGZvcm19CjwhLS0gZm9yZ290IHBhc3N3b3JkIHZlcmlmaWNhdGlvbiB0ZW1wbGF0ZSAtLT4KJzsKCiAgdmFyICRkZmx0X2xvZ2luZm9ybXRlbXBsYXRlID0gJwo8IS0tIExvZ2luIGZvcm0gdGVtcGxhdGUgLS0+CiA8Zm9udCBzaXplPSItMiI+CiB7JHN0YXJ0Zm9ybX0KIHtpZiAkZXJyb3J9CiAgeyRlcnJvcn08YnI+CiB7L2lmfQogIDxwPnskcHJvbXB0X3VzZXJuYW1lfSZuYnNwO3skaW5wdXRfdXNlcm5hbWV9Jm5ic3A7eyRwcm9tcHRfcGFzc3dvcmR9Jm5ic3A7CiAgeyRpbnB1dF9wYXNzd29yZH0mbmJzcDt7JGlucHV0X3N1Ym1pdH08YnIvPgogIHskbGlua19mb3Jnb3R9CiB7JGVuZGZvcm19CiAgPC9mb250Pgo8IS0tIExvZ2luIGZvcm0gdGVtcGxhdGUgLS0+CiAnOwoKICB2YXIgJGRmbHRfbG9nb3V0Zm9ybXRlbXBsYXRlID0gJwo8IS0tIExvZ291dCBmb3JtIHRlbXBsYXRlIC0tPgogeyRzdGFydGZvcm19CiAgPHA+eyRwcm9tcHRfbG9nZ2VkaW59Jm5ic3A7eyR1c2VybmFtZX08L3A+IAogIDxwPnskbGlua19sb2dvdXR9PC9wPgogIDxwPnskbGlua19jaGFuZ2VzZXR0aW5nc308L3A+CiB7JGVuZGZvcm19CjwhLS0gTG9nb3V0IGZvcm0gdGVtcGxhdGUgLS0+CiAnOwoKICB2YXIgJGRmbHRfY2hhbmdlc2V0dGluZ3N0ZW1wbGF0ZSA9ICcKPCEtLSBjaGFuZ2Ugc2V0dGluZ3MgdGVtcGxhdGUgLS0+CnskdGl0bGV9CntpZiAkbWVzc2FnZSAhPSBcJ1wnfQogIHtpZiAkZXJyb3IgIT0gXCdcJ30KICAgIDxwPjxmb250IGNvbG9yPSJyZWQiPnskbWVzc2FnZX08L2ZvbnQ+PC9wPgogIHtlbHNlfQogICAgPHA+eyRtZXNzYWdlfTwvcD4KICB7L2lmfQp7L2lmfQp7JHN0YXJ0Zm9ybX0KIHtpZiAkY29udHJvbGNvdW50ID4gMH0KICA8Y2VudGVyPgogIDx0YWJsZSB3aWR0aD0iNzUlIj4KICAgICB7Zm9yZWFjaCBmcm9tPSRjb250cm9scyBpdGVtPWNvbnRyb2x9CiAgPHRyPgogICAgIDx0ZD57JGNvbnRyb2wtPmhpZGRlbn08Zm9udCBjb2xvcj0ieyRjb250cm9sLT5jb2xvcn0iPnskY29udHJvbC0+cHJvbXB0fXskY29udHJvbC0+bWFya2VyfTwvZm9udD48L3RkPgogICAgIDx0ZD57JGNvbnRyb2wtPmNvbnRyb2x9eyRjb250cm9sLT5hZGR0ZXh0fTwvdGQ+CiB7L2ZvcmVhY2h9CiAgPC90YWJsZT4KICA8L2NlbnRlcj4KIHsvaWZ9CiB7JGhpZGRlbn17JGhpZGRlbjJ9eyRzdWJtaXR9eyRjYW5jZWx9CnskZW5kZm9ybX0KPCEtLSBjaGFuZ2Ugc2V0dGluZ3MgdGVtcGxhdGUgLS0+CiAnOwoKCiAgLy9Ib3cgbWFueSBzZWNvbmRzIG9mIGluYWN0aXZpdHkgYmVmb3JlIGEgdXNlciBpcyBhdXRvbWF0aWNhbGx5IGxvZ2dlZCBvdXQuCiAgdmFyICRleHBpcnl0aW1lOwogIAogIC8vU2V0IHRoaXMgdG8gdHJ1ZSBpZiB1c2VyIHNob3VsZCBiZSByZWRpcmVjdGVkIHRvIGRlZmF1bHQgcGFnZSBhZnRlciAKICAvLyBsb2dnaW5nIGluL291dC4KICB2YXIgJGxvZ2ludGFyZ2V0OwogIHZhciAkb3RoZXJpbnRhcmdldDsKICB2YXIgJGxvZ291dHRhcmdldDsKICB2YXIgJG90aGVyb3V0dGFyZ2V0OyAgCiAgdmFyICRhbGxvd3VzZXJhZG1pbjsKICB2YXIgJGVuYWJsZWVtYWlscHc7CiAgdmFyICRsYW5nPSIiOwogIHZhciAkdXNlcm1hbmlwID0gZmFsc2U7CiAgdmFyICR0eXBlcyA9IGZhbHNlOwoKICAvLyBjb25zdHJ1Y3RvcgogIGZ1bmN0aW9uIEZyb250RW5kVXNlcnMoKQogIHsKICAgIHBhcmVudDo6Q01TTW9kdWxlKCk7CiAgICAkdGhpcy0+dXNlcm1hbmlwID0gbmV3IEZyb250RW5kVXNlcnNNYW5pcHVsYXRvciggJHRoaXMgKTsKICAgICR0aGlzLT50eXBlcyA9IGFycmF5KCAndGV4dCcgPT4gMCwKCQkJICAnY2hlY2tib3gnID0+IDEsCgkJCSAgJ2VtYWlsJyA9PiAyLAoJCQkgICd0ZXh0YXJlYScgPT4gMywKCQkJICAnZHJvcGRvd24nID0+IDQgKTsKICB9CgogIGZ1bmN0aW9uIEdlbmVyYXRlUmFuZG9tUHJpbnRhYmxlU3RyaW5nKCAkbGVuID0gMTAgKQogIHsKICAgICRvMSA9IG5ldyBSYW5kb20oIjIzNDU2Nzg5QUJDREVGR0hKS01OUFFSU1RVVldYWVoiKTsKICAgIHJldHVybiAkbzEtPmdldCgkbGVuKTsKICB9CgogIGZ1bmN0aW9uIEdldE5hbWUoKSAJewogICAgcmV0dXJuICdGcm9udEVuZFVzZXJzJzsKICB9CiAKICAgZnVuY3Rpb24gR2V0VmVyc2lvbigpCXsKICAgIHJldHVybiAnMS4wLjQnOwogIH0KCiAKICAgZnVuY3Rpb24gbGFuZ2lmeUtleXMoICRhcnIgKQogIHsKICAgICRvdXQgPSBhcnJheSgpOwogICAgZm9yZWFjaCggJGFyciBhcyAkaz0+JHYgKQogICAgewogICAgICAkayA9ICR0aGlzLT5MYW5nKCRrKTsKICAgICAgJG91dFsgJGsgXSA9ICR2OwogICAgfQogICAgcmV0dXJuICRvdXQ7CiAgfQoKCiAgZnVuY3Rpb24gSXNQbHVnaW5Nb2R1bGUoKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CgogIGZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uKCkKICB7CiAgICByZXR1cm4gIjAuMTEuMiI7CiAgfQogIAogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldEFkbWluRGVzY3JpcHRpb24oKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldEFkbWluRGVzY3JpcHRpb24gKCkKICB7CiAgICByZXR1cm4gJHRoaXMtPkxhbmcgKCdtb2RkZXNjcmlwdGlvbicpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIEdldEFkbWluU2VjdGlvbigpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gR2V0QWRtaW5TZWN0aW9uICgpCiAgewogICAgcmV0dXJuICd1c2Vyc2dyb3Vwcyc7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgR2V0RGVwZW5kZW5jaWVzKCkKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBHZXREZXBlbmRlbmNpZXMoKQogIHsKICAgIHJldHVybiBhcnJheSggJ0NNU01haWxlcicgPT4gJzEuNzMuMycgKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRGcmllbmRseU5hbWUoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIENvbnRlbnRQcmVSZW5kZXIoJiRjb250ZW50KQogIHsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZmV1c2Vyc19sb2dnZWRpbicsKCR0aGlzLT5Mb2dnZWRJbklkKCkgPiAwKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2ZldXNlcnNfbG9nZ2lubmFtZScsJHRoaXMtPkxvZ2dlZEluTmFtZSgpKTsKICB9CgoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBHZXRGcmllbmRseU5hbWUoKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEdldEZyaWVuZGx5TmFtZSAoKQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyk7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgSGFzQWRtaW4oKQogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogIGZ1bmN0aW9uIEhhc0FkbWluICgpCiAgewogICAgcmV0dXJuIHRydWU7CiAgfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgX0dldFVzZXJzSW5DU1ZGb3JtYXQoKQogICBOT1RFOiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBpbiB0aGUgYXBpCiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAgZnVuY3Rpb24gX0dldFVzZXJzSW5DU1ZGb3JtYXQoKQogIHsKICAgICAkc3RhcnQgPSAwOwogICAgICRudW0gPSAyOyAvLyB0b2RvLCBzaG91bGQgYmUgYSBwcmVmZXJlbmNlCiAgICAgJGRvbmUgPSAwOwoKICAgICAvLyBnZXQgYSBsaXN0IG9mIGFsbCBvZiB0aGUgcHJvcGVydHkgZGVmaW5pdGlvbnMKICAgICAvLyAkZGVmbnMgPSAkdGhpcy0+R2V0UHJvcGVydHlEZWZucygpOwoKICAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKCiAgICAgJHVpZCA9ICcnOwogICAgICRmaXJzdCA9IDE7CiAgICAgd2hpbGUoICRkb25lID09IDAgKQogICAgIHsKICAgICAgICRxdWVyeSA9ICJzZWxlY3QgZGlzdGluY3QgdXNlcmlkLHVzZXJuYW1lLGNyZWF0ZWRhdGUsZXhwaXJlcyxkYXRhIGZyb20gY21zX21vZHVsZV9mZXVzZXJzX2dyb3VwcyBBLGNtc19tb2R1bGVfZmV1c2Vyc19ncm91cHByb3BtYXAgQiwgY21zX21vZHVsZV9mZXVzZXJzX3Byb3BlcnRpZXMgQywgY21zX21vZHVsZV9mZXVzZXJzX3VzZXJzIEQgd2hlcmUgQS5pZD1CLmdyb3VwX2lkIGFuZCBDLnRpdGxlID0gQi5uYW1lIGFuZCBDLnVzZXJpZCA9IEQuaWQgb3JkZXIgYnkgdXNlcmlkLHNvcnRfa2V5LG5hbWUgbGltaXQgJHN0YXJ0LCRudW0iOwogICAgICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcXVlcnkgKTsKICAgICAgIGlmKCAhJGRicmVzdWx0IHx8ICgkZGJyZXN1bHQtPlJvd0NvdW50KCkgPT0gMCkgKQogICAgICAgewogICAgICAgICBlY2hvICRkYi0+RXJyb3JNc2coKTsKICAgICAgICAgJGRvbmUgPSAxOwogICAgICAgICBicmVhazsKICAgICAgIH0KCiAgICAgICAvLyBub3cgaXRlcmF0ZSB0aHJvdWdoIGFsbCBvZiB0aGUgcmVzdWx0cywgYW5kIGRvIHRoZSBleHBvcnQKICAgICAgICRvdXRwdXQgPSAnJzsKICAgICAgIHdoaWxlKCAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpICkKICAgICAgIHsKICAgICAgICAgIGlmKCAkdWlkICE9ICRyb3dbJ3VzZXJpZCddICkKICAgICAgICAgIHsgCiAgICAgICAgICAgIC8vIHVpZCBjaGFuZ2VkIGZyb20gdGhlIGxhc3Qgb25lCiAgICAgICAgICAgIGlmKCAkZmlyc3QgPT0gMCApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAkb3V0cHV0IC49ICJcbiI7ICAvLyBuZXdsaW5lCiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGZpcnN0ID0gMDsKICAgICAgICAgICAgJG91dHB1dCAuPSAkcm93Wyd1c2VyaWQnXS4iLCIuJHJvd1sndXNlcm5hbWUnXS4iLCIuCiAgICAgICAgICAgICAgICAgICAgICAgJHJvd1snY3JlYXRlZGF0ZSddLiIsIi4kcm93WydleHBpcmVzJ107CiAgICAgICAgICAgICR1aWQgPSAkcm93Wyd1c2VyaWQnXTsKICAgICAgICAgIH0KCiAgICAgICAgICAvLyBvdXRwdXQgdGhlIHByb3BlcnR5CiAgICAgICAgICAkb3V0cHV0IC49ICIsIi4kcm93WydkYXRhJ107CiAgICAgICB9CgogICAgICAgLy8gZ2V0IHJlYWR5IGZvciBhbm90aGVyIHJvdW5kCiAgICAgICBlY2hvICRvdXRwdXQ7CiAgICAgICAkc3RhcnQgKz0gJG51bTsKICAgICB9CgogICAgIC8vIG9uZSBsYXN0IG5ld2xpbmUKICAgICBlY2hvICJcbmVuZFxuIjsKICB9CgogIGZ1bmN0aW9uIF9HZXRVc2VyTG9naW5Gb3JtKCRpZCwmJHBhcmFtcywkcmV0dXJuaWQpIAogIHsKICAgICR1c2VybmFtZSA9IChpc3NldCgkcGFyYW1zWydpbnB1dF91c2VybmFtZSddKT8kcGFyYW1zWydpbnB1dF91c2VybmFtZSddOicnKTsKICAgICRwYXNzd29yZCA9IChpc3NldCgkcGFyYW1zWydpbnB1dF9wYXNzd29yZCddKT8kcGFyYW1zWydpbnB1dF9wYXNzd29yZCddOicnKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZXJyb3InLCAkcGFyYW1zWydlcnJvciddKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywgCgkJCSAgJHRoaXMtPmZlQ3JlYXRlRm9ybVN0YXJ0KCAkaWQsICdkb19sb2dpbicsICRyZXR1cm5pZCApKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X3VzZXJuYW1lJywgJHRoaXMtPkxhbmcoJ3Byb21wdF91c2VybmFtZScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfdXNlcm5hbWUnLCAKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCAkaWQsICdpbnB1dF91c2VybmFtZScsIAoJCQkJCQkgICRpbnB1dF91c2VybmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgndXNlcm5hbWVmbGRsZW5ndGgnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWF4X3VzZXJuYW1lbGVuZ3RoJykpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfbGFiZWwnLCAkaWQgKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X3Bhc3N3b3JkJywgJHRoaXMtPkxhbmcoJ3Byb21wdF9wYXNzd29yZCcpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfcGFzc3dvcmQnLAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dFBhc3N3b3JkKCRpZCwgJ2lucHV0X3Bhc3N3b3JkJywgCgkJCQkJCSAgICAgJGlucHV0X3Bhc3N3b3JkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwYXNzd29yZGZsZGxlbmd0aCcpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtYXhfcGFzc3dvcmRsZW5ndGgnKSkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9zdWJtaXQnLAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdidG5fbG9naW4nLCAKCQkJCQkJICAgJHRoaXMtPkxhbmcoJ2xvZ2luJykpKTsKICAgICRwYWdlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3BhZ2VpZGZvcmdvdHBhc3N3ZCcpOwogICAgaWYoICRwYWdlICkKICAgIHsKICAgICAgJGlkID0gQ29udGVudE1hbmFnZXI6OkdldFBhZ2VJREZyb21BbGlhcyggJHBhZ2UgKTsKICAgICAgaWYoICRpZCA9PSBmYWxzZSApCiAgICAgIHsKICAgICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2xpbmtfZm9yZ290JywnPCEtLSBFcnJvciBjb3VsZCBub3QgZGV0ZXJtaW5lIHBhZ2UgZnJvbSBhbGlhcy9pZCAtLT4nKTsKICAgICAgfQogICAgICBlbHNlIAogICAgICB7CiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdsaW5rX2ZvcmdvdCcsCgkJCSAgICAkdGhpcy0+Q3JlYXRlQ29udGVudExpbmsoJGlkLCR0aGlzLT5MYW5nKCdmb3Jnb3RwdycpKSk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UgCiAgICB7CiAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignbGlua19mb3Jnb3QnLAoJCQkgICAgJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdmb3Jnb3RwdycsICRyZXR1cm5pZCwKCQkJCQkgICAgJHRoaXMtPkxhbmcoJ2ZvcmdvdHB3JykpKTsKICAgIH0KICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZW5kZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtRW5kICgpKTsKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhYmFzZSgnZmV1c2Vyc19sb2dpbmZvcm0nKTsKICB9CgoJCiBmdW5jdGlvbiBHZXRQYWdlSWQoJGFsaWFzKSB7CQkKICAgIGlmICgkYWxpYXM9PSIiKSByZXR1cm4gZmFsc2U7CiAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKICAgICRxdWVyeSA9ICJTRUxFQ1QgY29udGVudF9pZCBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJjb250ZW50IFdIRVJFIGNvbnRlbnRfYWxpYXMgPSAnIi4kYWxpYXMuIiciOwogICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCRxdWVyeSk7CiAgICBpZiAoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+Um93Q291bnQoKSA+IDApCXsKICAgICAgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKTsKICAgICAgcmV0dXJuICRyb3dbJ2NvbnRlbnRfaWQnXTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CgoKICBmdW5jdGlvbiBfR2V0VXNlckxvZ291dEZvcm0oJGlkLCYkcGFyYW1zLCRyZXR1cm5pZCkgCiAgewogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfbG9nZ2VkaW4nLAoJCQkgICR0aGlzLT5MYW5nKCdtc2dfY3VycmVudGx5bG9nZ2VkaW5hcycpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigndXNlcm5hbWUnLCAkdGhpcy0+TG9nZ2VkSW5OYW1lKCkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdsaW5rX2xvZ291dCcsCgkJCSAgJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCJsb2dvdXQiLCRyZXR1cm5pZCwKCQkJCQkgICAgJHRoaXMtPkxhbmcoJ2xvZ291dCcpKSk7CiAgICAkcGFnZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwYWdlaWRfY2hhbmdlc2V0dGluZ3MnKTsKICAgIGlmKCAkcGFnZSApCiAgICB7CiAgICAgICRpZCA9IENvbnRlbnRNYW5hZ2VyOjpHZXRQYWdlSURGcm9tQWxpYXMoICRwYWdlICk7CiAgICAgIGlmKCAkaWQgPT0gZmFsc2UgKQogICAgICB7CiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdsaW5rX2NoYW5nZXNldHRpbmdzJywnPCEtLSBFcnJvciBjb3VsZCBub3QgZGV0ZXJtaW5lIHBhZ2UgZnJvbSBhbGlhcy9pZCAtLT4nKTsKICAgICAgfQogICAgICBlbHNlIAogICAgICB7CiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdsaW5rX2NoYW5nZXNldHRpbmdzJywKICAgICAgICAgICAkdGhpcy0+Q3JlYXRlQ29udGVudExpbmsoICRpZCwgJHRoaXMtPkxhbmcoJ3Byb21wdF9jaGFuZ2VzZXR0aW5ncycpKSk7CiAgICAgIH0KICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignbGlua19jaGFuZ2VzZXR0aW5ncycsCgkJCSAgJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCJjaGFuZ2VzZXR0aW5ncyIsJHJldHVybmlkLAoJCQkJCSAgICAkdGhpcy0+TGFuZygncHJvbXB0X2NoYW5nZXNldHRpbmdzJykpKTsKICAgIH0KICAgICRwcm9wcyA9ICR0aGlzLT5HZXRVc2VyUHJvcGVydGllcyggJHRoaXMtPkxvZ2dlZEluSWQoKSApOwogICAgZm9yZWFjaCggJHByb3BzIGFzICRwICkKICAgIHsKICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCRwWyd0aXRsZSddLCRwWydkYXRhJ10pOwogICAgfQogICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGFiYXNlKCdmZXVzZXJzX2xvZ291dGZvcm0nKTsKICB9CgoKIGZ1bmN0aW9uIF9IYXNTdWZmaWNpZW50UGVybWlzc2lvbnMoICRwZXJtID0gJycgKQogIHsKICAgICRwMSA9ICR0aGlzLT5DaGVja1Blcm1pc3Npb24oICdBZGQgVXNlcnMnICk7CiAgICAkcDIgPSAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCAnTW9kaWZ5IFVzZXJzJyApOwogICAgJHAzID0gJHRoaXMtPkNoZWNrUGVybWlzc2lvbiggJ1JlbW92ZSBVc2VycycgKTsKICAgICRwNCA9ICR0aGlzLT5DaGVja1Blcm1pc3Npb24oICdBZGQgR3JvdXBzJyApOwogICAgJHA1ID0gJHRoaXMtPkNoZWNrUGVybWlzc2lvbiggJ01vZGlmeSBHcm91cHMnICk7CiAgICAkcDYgPSAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCAnTW9kaWZ5IEdyb3VwIEFzc2lnbm1lbnRzJyApOwogICAgJHA3ID0gJHRoaXMtPkNoZWNrUGVybWlzc2lvbiggJ1JlbW92ZSBHcm91cHMnICk7CiAgICAkcDggPSAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCAnTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnICk7CiAgICAkcDkgPSAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCAnTW9kaWZ5IEZyb250RW5kVXNlclByb3BzJyApOwogICAgJHAxMCA9ICR0aGlzLT5DaGVja1Blcm1pc3Npb24oICdNb2RpZnkgVGVtcGxhdGVzJyApOwoKICAgICRyZXQgPSAwOwogICAgc3dpdGNoKCAkcGVybSApCiAgICAgIHsKICAgICAgY2FzZSAnJzogIC8vIGFueSBwZXJtaXNzaW9uCgkkcmV0ID0gKCRwMSB8fCAkcDIgfHwgJHAzIHx8ICRwNCB8fCAkcDUgfHwgJHA2IHx8ICRwNyB8fCAkcDggfHwgJHA5IHx8ICRwMTAgKTsKCWJyZWFrOwoKICAgICAgY2FzZSAnYWRkZ3JvdXAnOgoJJHJldCA9ICgkcDQpOwoJYnJlYWs7CgogICAgICBjYXNlICdhZGR1c2VyJzoKCSRyZXQgPSAoJHAxKTsKCWJyZWFrOwoKICAgICAgY2FzZSAnYWRkcHJvcCc6CiAgICAgIGNhc2UgJ2FkZHByb3AyJzoKICAgICAgY2FzZSAnZWRpdHByb3AnOgogICAgICBjYXNlICdkZWxldGVwcm9wJzoKICAgICAgY2FzZSAncHJvcGVydGllcyc7CiAgICAgICAgJHJldCA9ICgkcDkpOwogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSAnbGlzdHVzZXJzJzoKCSRyZXQgPSAoJHAyIHx8ICRwMyk7CglicmVhazsKCiAgICAgIGNhc2UgJ2xpc3Rncm91cHMnOgoJJHJldCA9ICgkcDUgfHwgJHA2KTsKCWJyZWFrOwoKICAgICAgY2FzZSAnZWRpdGdyb3Vwcyc6CgkkcmV0ID0gKCRwNSB8fCAkcDYpOwoJYnJlYWs7CgogICAgICBjYXNlICdlZGl0dXNlcnMnOgoJJHJldCA9ICgkcDIpOwoJYnJlYWs7CiAKICAgICAgY2FzZSAncmVtb3ZlZ3JvdXBzJzoKCSRyZXQgPSAoJHA3KTsKCWJyZWFrOwoKICAgICAgY2FzZSAncmVtb3ZldXNlcnMnOgoJJHJldCA9ICgkcDMpOwoJYnJlYWs7CgogICAgICBjYXNlICdlZGl0cHJlZnMnOgogICAgICBjYXNlICdzaXRlcHJlZnMnOgoJJHJldCA9ICgkcDgpOwoJYnJlYWs7CgogICAgICBjYXNlICd1c2Vyc25ncm91cHMnOgogICAgICAgICRyZXQgPSAoJHAxIHx8ICRwMiB8fCAkcDMgfHwgJHA0IHx8ICRwNSB8fCAkcDYgfHwgJHA3KTsKICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgJ3RlbXBsYXRlcyc6CiAgICAgICAgJHJldCA9ICgkcDEwKTsKICAgICAgICBicmVhazsKCiAgICAgIGRlZmF1bHQ6CgkkcmV0ID0gMDsKCWJyZWFrOwogICAgICB9CgogICAgcmV0dXJuICRyZXQ7CiAgfQoKCiAgZnVuY3Rpb24gSW5zdGFsbCgpIHsKICAgICRkYiA9ICR0aGlzLT5HZXREYigpOwogICAgJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwogICAgCiAgICAkdGFib3B0YXJyYXkgPSBhcnJheSgnbXlzcWwnID0+ICdUWVBFPU15SVNBTScpOwogICAgCiAgICAvL1VzZXIgbGlzdAogICAgJGZsZHMgPSAiCiAgICAgICAgICAgICBpZCBJIEtFWSwKCSAgICAgdXNlcm5hbWUgQyg4MCkgTk9UIE5VTEwsCiAgICAgICAgICAgICBwYXNzd29yZCBDKDMyKSBOT1QgTlVMTCwKICAgICAgICAgICAgIGNyZWF0ZWRhdGUgVCwKICAgICAgICAgICAgIGV4cGlyZXMgVAogICAgICAgICAgICAiOwogICAgJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfdXNlcnMiLCAKCQkJCSAgICAgICRmbGRzLCAkdGFib3B0YXJyYXkgKTsKICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoICRzcWxhcnJheSApOwogICAgJGRiLT5DcmVhdGVTZXF1ZW5jZSggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc191c2Vyc19zZXEiICk7CiAgICAKICAgIC8vR3JvdXAgbGlzdAogICAgJGZsZHMgPSAiCgkgICAgIGlkIEkgS0VZLAoJICAgICBncm91cG5hbWUgQygzMiksCgkgICAgIGdyb3VwZGVzYyBDKDEyOCkKCSAgICAiOwogICAgJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfZ3JvdXBzIiwKCQkJCSAgICAgICRmbGRzLCAkdGFib3B0YXJyYXkgKTsKICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoICRzcWxhcnJheSApOwogICAgJGRiLT5DcmVhdGVTZXF1ZW5jZSggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19ncm91cHNfc2VxIiApOwoKICAgIC8vIGxvZ2dlZGluCiAgICAkZmxkcyA9ICIKCSAgICAgc2Vzc2lvbmlkIEMoMzIpLAoJICAgICBsYXN0dXNlZCBJLAoJICAgICB1c2VyaWQgSQoJICAgICI7CiAgICAkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19sb2dnZWRpbiIsCgkJCQkgICAgICAkZmxkcywgJHRhYm9wdGFycmF5ICk7CiAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCAkc3FsYXJyYXkgKTsKICAgIAogICAgLy9Db25uZWN0aW9ucyBiZXR3ZWVuIHVzZXJzIGFuZCBncm91cHMKICAgICRmbGRzID0gIgoJICAgICB1c2VyaWQgSSwKCSAgICAgZ3JvdXBpZCBJCgkgICAgIjsKICAgICRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2JlbG9uZ3MiLAoJCQkJICAgICAgJGZsZHMsICR0YWJvcHRhcnJheSApOwogICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSggJHNxbGFycmF5ICk7CgogICAgLy9wcm9wZXJ0eSBkZWZpbml0aW9uCiAgICAkZmxkcyA9ICIKICAgICAgICAgICAgIG5hbWUgICAgICBDKDQwKSBLRVksCiAgICAgICAgICAgICBwcm9tcHQgICAgQyg4MCkgTk9UIE5VTEwsCiAgICAgICAgICAgICB0eXBlICAgICAgQygyMCkgTk9UIE5VTEwsCiAgICAgICAgICAgICBsZW5ndGggICAgSSwKICAgICAgICAgICAgIG1heGxlbmd0aCBJCiAgICAgICAgICAgICI7CiAgICAkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTcWwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19wcm9wZGVmbiIsCgkJCQkgICAgICAkZmxkcywgJHRhYm9wdGFycmF5ICk7CiAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCAkc3FsYXJyYXkgKTsKCiAgICAvL2Ryb3Bkb3duIHNlbGVjdCBvcHRpb25zCiAgICAkZmxkcyA9ICIKICAgICAgICAgICAgIG9yZGVyX2lkCQlJLAogICAgICAgICAgICAgb3B0aW9uX25hbWUJQyg0MCkgTk9UIE5VTEwsCiAgICAgICAgICAgICBvcHRpb25fdGV4dAlDKDgwKSBOT1QgTlVMTCwKICAgICAgICAgICAgIGNvbnRyb2xfbmFtZQlDKDQwKSBOT1QgTlVMTDsKICAgICAgICAgICAgIjsKICAgICRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNxbChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2Ryb3Bkb3ducyIsCgkJCQkgICAgICAkZmxkcywgJHRhYm9wdGFycmF5ICk7CiAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCAkc3FsYXJyYXkgKTsKCiAgICAvLyBncm91cCBwcm9wZXJ0eSBtYXAKICAgICRmbGRzID0gIgogICAgICAgICAgICAgIG5hbWUgICAgQyg0MCkgS0VZLAogICAgICAgICAgICAgIGdyb3VwX2lkIEkgS0VZLAogICAgICAgICAgICAgIHNvcnRfa2V5IEksIAogICAgICAgICAgICAgIHJlcXVpcmVkIEkgTk9UIE5VTEwKICAgICAgICAgICAgIjsKICAgICRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNxbChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2dyb3VwcHJvcG1hcCIsCgkJCQkgICAgICAkZmxkcywgJHRhYm9wdGFycmF5ICk7CiAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCAkc3FsYXJyYXkgKTsKCiAgICAvL3VzZXIgcHJvcGVydGllcwogICAgJGZsZHMgPSAiCgkgICAgIGlkIEkgS0VZLAoJICAgICB1c2VyaWQgSSwKCSAgICAgdGl0bGUgQygxMDApLAoJICAgICBkYXRhIEMoMjU1KQoJICAgICI7CiAgICAkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19wcm9wZXJ0aWVzIiwKCQkJCSAgICAgICRmbGRzLCAkdGFib3B0YXJyYXkgKTsKICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoICRzcWxhcnJheSApOwogICAgJGRiLT5DcmVhdGVTZXF1ZW5jZSggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19wcm9wZXJ0aWVzX3NlcSIgKTsKCiAgICAvLyBmb3Jnb3R0ZW4gcGFzc3dvcmQgc3R1ZmYKICAgICRmbGRzID0gIgoJICAgICB1c2VyaWQgSSBLRVksCiAgICAgICAgICAgICBjb2RlIEMoMjUpLAogICAgICAgICAgICAgY3JlYXRlZCBUCgkgICAgIjsKICAgICRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3RlbXBjb2RlIiwKCQkJCSAgICAgICRmbGRzLCAkdGFib3B0YXJyYXkgKTsKICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoICRzcWxhcnJheSApOwoKICAgIC8vIHRlbXBsYXRlcwogICAgJHRoaXMtPlNldFRlbXBsYXRlKCdmZXVzZXJzX2xvZ2luZm9ybScsICR0aGlzLT5kZmx0X2xvZ2luZm9ybXRlbXBsYXRlKTsKICAgICR0aGlzLT5TZXRUZW1wbGF0ZSgnZmV1c2Vyc19sb2dvdXRmb3JtJywgJHRoaXMtPmRmbHRfbG9nb3V0Zm9ybXRlbXBsYXRlKTsKICAgICR0aGlzLT5TZXRUZW1wbGF0ZSgnZmV1c2Vyc19jaGFuZ2VzZXR0aW5nc2Zvcm0nLCAkdGhpcy0+ZGZsdF9jaGFuZ2VzZXR0aW5nc3RlbXBsYXRlKTsgCiAgICAkdGhpcy0+U2V0VGVtcGxhdGUoJ2ZldXNlcnNfZm9yZ290cGFzc3dvcmRmb3JtJywgJHRoaXMtPmRmbHRfZm9yZ290cGFzc3dvcmR0ZW1wbGF0ZTEpOwogICAgJHRoaXMtPlNldFRlbXBsYXRlKCdmZXVzZXJzX2ZvcmdvdHBhc3N3b3JkZW1haWxmb3JtJywgJHRoaXMtPmRmbHRfZm9yZ290cGFzc3dvcmR0ZW1wbGF0ZTIpOwogICAgJHRoaXMtPlNldFRlbXBsYXRlKCdmZXVzZXJzX2ZvcmdvdHBhc3N3b3JkdmVyaWZ5Zm9ybScsICR0aGlzLT5kZmx0X2ZvcmdvdHBhc3N3b3JkdGVtcGxhdGUzKTsKCiAgICAvLyBwcmVmZXJlbmNlcwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ21pbl9wYXNzd29yZGxlbmd0aCcsIDYpOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ21heF9wYXNzd29yZGxlbmd0aCcsIDIwKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtaW5fdXNlcm5hbWVsZW5ndGgnLCA0KTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtYXhfdXNlcm5hbWVsZW5ndGgnLCAyMCk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgndXNlcl9zZXNzaW9uX2V4cGlyZXMnLCAxODAwKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkZWZhdWx0X2dyb3VwJywgLTEpOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RvX3NtdHBfdmFsaWRhdGVfZW1haWwnLCAwKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdyZXF1aXJlZF9maWVsZF9tYXJrZXInLCAnKicpOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3JlcXVpcmVkX2ZpZWxkX2NvbG9yJywgJ2JsdWUnKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdyZXF1aXJlX29uZWdyb3VwJywgMSk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnaGlkZGVuX2ZpZWxkX21hcmtlcicsICchJyk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnaGlkZGVuX2ZpZWxkX2NvbG9yJywgJ2dyZWVuJyk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgncGFnZWlkX2ZvcmdvdHBhc3N3ZCcsICcnKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdwYWdlaWRfY2hhbmdlc2V0dGluZ3MnLCAnJyk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgncGFnZWlkX2xvZ2luJywnJyk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgncGFnZWlkX2xvZ291dCcsJycpOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2FsbG93X2R1cGxpY2F0ZV9lbWFpbHMnLDEpOyAvLyBmb3IgYmFja3dhcmRzIGNvbXBhdGlibGl0eQogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3Bhc3N3b3JkZmxkbGVuZ3RoJywgMjApOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3VzZXJuYW1lZmxkbGVuZ3RoJywgMjApOwoKICAgIC8vIHBlcm1pc3Npb25zCiAgICAkdGhpcy0+Q3JlYXRlUGVybWlzc2lvbignTW9kaWZ5IEZyb250RW5kVXNlclByb3BzJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdNb2RpZnkgRnJvbnRFbmRVc2VyIFByb3BlcnRpZXMnKTsKICB9CgogIAogIGZ1bmN0aW9uIEluc3RhbGxQb3N0TWVzc2FnZSgpCXsKICAgIHJldHVybiAkdGhpcy0+TGFuZygncG9zdGluc3RhbGxtZXNzYWdlJyk7CiAgfQoKCiAgZnVuY3Rpb24gVXBncmFkZSgkb2xkdmVyc2lvbiwgJG5ld3ZlcnNpb24pIAogIHsKICAgIHN3aXRjaCggJG9sZHZlcnNpb24gKQogICAgICB7CiAgICAgICAgY2FzZSAnMC4xLjAnOgogICAgICAgIGNhc2UgJzAuMS4xJzoKICAgICAgICAgIHsKICAgICAgICAgICAgLy8gcGVybWlzc2lvbnMKICAgICAgICAgICAgJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24oJ01vZGlmeSBGcm9udEVuZFVzZXJQcm9wcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01vZGlmeSBGcm9udEVuZFVzZXIgUHJvcGVydGllcycpOwogICAgICAgICAgICAkdGhpcy0+U2V0VGVtcGxhdGUoJ2ZldXNlcnNfZm9yZ290cGFzc3dvcmRmb3JtJywgJHRoaXMtPmRmbHRfZm9yZ290cGFzc3dvcmR0ZW1wbGF0ZTEpOwogICAgICAgICAgICAkdGhpcy0+U2V0VGVtcGxhdGUoJ2ZldXNlcnNfZm9yZ290cGFzc3dvcmRlbWFpbGZvcm0nLCAkdGhpcy0+ZGZsdF9mb3Jnb3RwYXNzd29yZHRlbXBsYXRlMik7CiAgICAgICAgICAgICR0aGlzLT5TZXRUZW1wbGF0ZSgnZmV1c2Vyc19mb3Jnb3RwYXNzd29yZHZlcmlmeWZvcm0nLCAkdGhpcy0+ZGZsdF9mb3Jnb3RwYXNzd29yZHRlbXBsYXRlMyk7CgogICAgICAgICAgICAvLyBmb3Jnb3R0ZW4gcGFzc3dvcmQgc3R1ZmYKICAgICAgICAgICAgJGZsZHMgPSAiCgkgICAgICAgICAgICAgdXNlcmlkIEkgS0VZLAogICAgICAgICAgICAgICAgICAgICBjb2RlIEMoMjUpLAogICAgICAgICAgICAgICAgICAgICBjcmVhdGVkIFQKCSAgICAgICAgICAgICI7CiAgICAgICAgICAgICRkYiA9ICR0aGlzLT5HZXREYigpOwogICAgICAgICAgICAkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7CiAgICAgICAgICAgICRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3RlbXBjb2RlIiwKCQkJCSAgICAgICAgICAgICAgJGZsZHMsICR0YWJvcHRhcnJheSApOwogICAgICAgICAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCAkc3FsYXJyYXkgKTsKICAgICAgICAgICAgLy8gbm90aWNlIG5vIGJyZWFrCiAgICAgICAgICB9CgogICAgICAgIGNhc2UgJzAuMS4yJzoKICAgICAgICAgIHsKICAgICAgICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3BhZ2VpZF9mb3Jnb3RwYXNzd2QnLCAnJyk7CiAgICAgICAgICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdwYWdlaWRfY2hhbmdlc2V0dGluZ3MnLCAnJyk7CiAgICAgICAgICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdwYWdlaWRfbG9naW4nLCcnKTsKICAgICAgICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3BhZ2VpZF9sb2dvdXQnLCcnKTsKICAgICAgICAgICAgLy8gbm90aWNlIG5vIGJyZWFrCiAgICAgICAgICB9CgljYXNlICcwLjEuMyc6CgljYXNlICcwLjEuNCc6CgljYXNlICcwLjEuNSc6CgljYXNlICcwLjEuNic6CgkgIHsKCQkvL2Ryb3Bkb3duIHNlbGVjdCBvcHRpb25zCgkJJGRiID0gJHRoaXMtPkdldERiKCk7CgkJJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwoJCSR0YWJvcHRhcnJheSA9IGFycmF5KCdteXNxbCcgPT4gJ1RZUEU9TXlJU0FNJyk7CgkJJGZsZHMgPSAiCgkJCQkgb3JkZXJfaWQJCUksCgkJCQkgb3B0aW9uX25hbWUJQyg0MCkgTk9UIE5VTEwsCgkJCQkgb3B0aW9uX3RleHQJQyg4MCkgTk9UIE5VTEwsCgkJCQkgY29udHJvbF9uYW1lCUMoNDApIE5PVCBOVUxMOwoJCQkJIjsKCQkkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTcWwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19kcm9wZG93bnMiLAoJCQkJCQkgICRmbGRzLCAkdGFib3B0YXJyYXkgKTsKCQkkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCAkc3FsYXJyYXkgKTsKCiAgICAgICAgICAgICAgICAvLyBhbmQgY2xlYW51cCBwcm9wZXJ0eSBuYW1lcwogICAgICAgICAgICAgICAgJHEgPSAndXBkYXRlICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZmV1c2Vyc19wcm9wZGVmbiBzZXQgbmFtZSA9IGxjYXNlKHJlcGxhY2UobmFtZSwiICIsIl8iKSknOwogICAgICAgICAgICAgICAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcSApOwoJICB9IC8vY2FzZQoJY2FzZSAnMC4xLjcnOgogICAgICAgICAgewoJCSRkYiA9ICR0aGlzLT5HZXREYigpOwoJCSRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKICAgICAgICAgICAgICAgICRzcWxhcnJheSA9ICRkaWN0LT5BZGRjb2x1bW5TUUwoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19wcm9wZGVmbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXhsZW5ndGggSSIpOwoJCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoICRzcWxhcnJheSApOwogICAgICAgICAgfSAvLyBjYXNlCiAgICAgICAgY2FzZSAnMS4wLjAnOgogICAgICAgICAgewogICAgICAgICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2FsbG93X2R1cGxpY2F0ZV9lbWFpbHMnLDEpOwogICAgICAgICAgfQogICAgICAgIGNhc2UgJzEuMC4xJzoKICAgICAgICAgIHsKICAgICAgICAgICAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgncGFzc3dvcmRmbGRsZW5ndGgnLCAyMCk7CiAgICAgICAgICAgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3VzZXJuYW1lZmxkbGVuZ3RoJywgMjApOwogICAgICAgICAgfQogICAgICAgfSAvLyBzd2l0Y2gKCiAgfSAvLyB1cGdyYWRlCgogIAogIGZ1bmN0aW9uIFVuaW5zdGFsbCgpIAogIHsKICAgICRkYiA9ICR0aGlzLT5HZXREYigpOwogICAgJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSggJGRiICk7CiAgICAkc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3VzZXJzIiApOwogICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwogICAgJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19ncm91cHMiICk7CiAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiAgICAkc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2xvZ2dlZGluIiApOwogICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwogICAgJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19iZWxvbmdzIiApOwogICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwogICAgJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19wcm9wZXJ0aWVzIiApOwogICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwogICAgJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19wcm9wZGVmbiIgKTsKICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKICAgICRzcWxhcnJheSA9ICRkaWN0LT5Ecm9wVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfZHJvcGRvd25zIiApOwogICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwogICAgJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19ncm91cHByb3BtYXAiICk7CiAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7CiAgICAkc3FsYXJyYXkgPSAkZGljdC0+RHJvcFRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3RlbXBjb2RlIiApOwogICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwogICAgCiAgICAkZGItPkRyb3BTZXF1ZW5jZSggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc191c2Vyc19zZXEiICk7CiAgICAkZGItPkRyb3BTZXF1ZW5jZSggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19ncm91cHNfc2VxIiApOwogICAgJGRiLT5Ecm9wU2VxdWVuY2UoIGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfcHJvcGVydGllc19zZXEiICk7CgogICAgLy8gdGVtcGxhdGVzCiAgICAkdGhpcy0+RGVsZXRlVGVtcGxhdGUoJ2ZldXNlcnNfbG9naW5mb3JtJyk7IAogICAgJHRoaXMtPkRlbGV0ZVRlbXBsYXRlKCdmZXVzZXJzX2xvZ291dGZvcm0nKTsgCiAgICAkdGhpcy0+RGVsZXRlVGVtcGxhdGUoJ2ZldXNlcnNfY2hhbmdlc2V0dGluZ3Nmb3JtJyk7IAogICAgJHRoaXMtPkRlbGV0ZVRlbXBsYXRlKCdmZXVzZXJzX2ZvcmdvdHBhc3N3b3JkZm9ybScpOwogICAgJHRoaXMtPkRlbGV0ZVRlbXBsYXRlKCdmZXVzZXJzX2ZvcmdvdHBhc3N3b3JkZW1haWxmb3JtJyk7CiAgICAkdGhpcy0+RGVsZXRlVGVtcGxhdGUoJ2ZldXNlcnNfZm9yZ290cGFzc3dvcmR2ZXJpZnlmb3JtJyk7CgogICAgLy8gcHJlZmVyZW5jZXMKICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdtaW5fcGFzc3dvcmRsZW5ndGgnKTsKICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdtYXhfcGFzc3dvcmRsZW5ndGgnKTsKICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdtaW5fdXNlcm5hbWVsZW5ndGgnKTsKICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdtYXhfdXNlcm5hbWVsZW5ndGgnKTsKICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCd1c2VyX3Nlc3Npb25fZXhwaXJlcycpOwogICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ2RlZmF1bHRfZ3JvdXAnKTsKICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdkb19zbXRwX3ZhbGlkYXRlX2VtYWlsJyk7CiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgncmVxdWlyZWRfZmllbGRfbWFya2VyJyk7CiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgncmVxdWlyZWRfZmllbGRfY29sb3InKTsKICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdyZXF1aXJlX29uZWdyb3VwJyk7CiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnaGlkZGVuX2ZpZWxkX21hcmtlcicpOwogICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ2hpZGRlbl9maWVsZF9jb2xvcicpOwogICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ3BhZ2VpZF9mb3Jnb3RwYXNzd2QnKTsKICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdwYWdlaWRfY2hhbmdlc2V0dGluZ3MnKTsKICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdwYWdlaWRfbG9naW4nKTsKICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdwYWdlaWRfbG9nb3V0Jyk7CiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnY3VycmVudF9ncm91cCcpOwogICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ2N1cnJlbnRfcmVnZXgnKTsKICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdjdXJyZW50X2xpbWl0Jyk7CiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnY3VycmVudF9zb3J0Jyk7CiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnY3VycmVudF9wcm9wc2VsJyk7CiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnY3VycmVudF9wcm9wdmFsJyk7CiAgICAkdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgnYWN0aXZlX3RhYicpOwogICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ2FsbG93X2R1cGxpY2F0ZV9lbWFpbHMnKTsKICAgICR0aGlzLT5SZW1vdmVQcmVmZXJlbmNlKCdwYXNzd29yZGZsZGxlbmd0aCcpOwogICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UoJ3VzZXJuYW1lZmxkbGVuZ3RoJyk7CgogICAgLy8gcGVybWlzc2lvbnMKICAgICR0aGlzLT5SZW1vdmVQZXJtaXNzaW9uKCdNb2RpZnkgRnJvbnRFbmRVc2VyUHJvcHMnKTsKICB9CgogIAogZnVuY3Rpb24gVmlzaWJsZVRvQWRtaW5Vc2VyKCkKICB7CiAgICAgcmV0dXJuICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJykgfHwKICAgICAgICAgICAgJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFRlbXBsYXRlcycpIHx8CiAgICAgICAgICAgICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ0FkZCBHcm91cHMnKSB8fAogICAgICAgICAgICAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgR3JvdXBzJykgfHwKICAgICAgICAgICAgJHRoaXMtPkNoZWNrUGVybWlzc2lvbignUmVtb3ZlIEdyb3VwcycpIHx8CiAgICAgICAgICAgICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ0FkZCBVc2VycycpIHx8CiAgICAgICAgICAgICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBVc2VycycpIHx8CiAgICAgICAgICAgICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1JlbW92ZSBVc2VycycpIHx8CiAgICAgICAgICAgICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBGcm9udEVuZFVzZXJQcm9wcycpOwogIH0KCgogIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgIF9EaXNwbGF5RXJyb3JQYWdlKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkbWVzc2FnZSkKICAgTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKCiAgIFRoaXMgaXMgYW4gZXhhbXBsZSBvZiBhIHNpbXBsZSBtZXRob2QgdG8gZGlzcGxheQogICBlcnJvciBpbmZvcm1hdGlvbiBvbiB0aGUgYWRtaW4gc2lkZS4KICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICBmdW5jdGlvbiBfRGlzcGxheUVycm9yUGFnZSgkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQsICRtZXNzYWdlPScnKQogIHsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGVfZXJyb3InLCAkdGhpcy0+TGFuZygnZXJyb3InKSk7CiAgICBpZiAoJG1lc3NhZ2UgIT0gJycpCiAgICAgIHsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignbWVzc2FnZScsICRtZXNzYWdlKTsKICAgICAgfQogICAgICAKICAgIC8vIERpc3BsYXkgdGhlIHBvcHVsYXRlZCB0ZW1wbGF0ZQogICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdlcnJvci50cGwnKTsKICB9CgoKICBmdW5jdGlvbiBfRG9BZGRHcm91cCggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIC8vIGFyZSB3ZSBjYW5jZWxsaW5nCiAgICBpZiAoaXNzZXQgKCRwYXJhbXNbJ2NhbmNlbCddKSkKICAgIHsKICAgICAgJHRoaXMtPm15UmVkaXJlY3RUb1RhYigkaWQsICdncm91cHMnICk7CiAgICB9CgogICAgJGdyb3VwbmFtZSA9ICcnOwogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9ncm91cG5hbWUnXSApICkKICAgICAgewoJJGdyb3VwbmFtZSA9IHRyaW0oJHBhcmFtc1snaW5wdXRfZ3JvdXBuYW1lJ10pOwogICAgICB9CiAgICAkZ3JvdXBkZXNjID0gJyc7CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X2dyb3VwZGVzYyddICkgKQogICAgICB7CgkkZ3JvdXBkZXNjID0gdHJpbSgkcGFyYW1zWydpbnB1dF9ncm91cGRlc2MnXSk7CiAgICAgIH0KCiAgICAvLyBtYWtlIHN1cmUgdGhlIHBhcmFtZXRlcnMgYXJlIGZpbGxlZCBpbgogICAgaWYoICRncm91cG5hbWUgPT0gJycgfHwgJGdyb3VwZGVzYyA9PSAnJyApCiAgICAgIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAnMSc7CgkkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZHBhcmFtcycpOwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2FkZGdyb3VwJywgJHJldHVybmlkLCAkcGFyYW1zICk7CglyZXR1cm47CiAgICAgIH0KCiAgICAvLyBtYWtlIHN1cmUgdGhlIGdyb3VwIG5hbWUgZG9lc24ndCBhbHJlYWR5IGV4aXN0CiAgICBpZiggJHRoaXMtPkdldEdyb3VwSUQoICRncm91cG5hbWUgKSAhPSBmYWxzZSApCiAgICAgIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAnMSc7CgkkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfZ3JvdXBleGlzdHMnKTsKCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdhZGRncm91cCcsICRyZXR1cm5pZCwgJHBhcmFtcyApOwoJcmV0dXJuOwogICAgICB9CgogICAgJHJlbG5hZGRlZCA9IDA7CiAgICBmb3JlYWNoKCAkcGFyYW1zIGFzICRrZXkgPT4gJHZhbCApCiAgICB7CiAgICAgICRwcm9wbmFtZSA9ICcnOwogICAgICAkc29ydG9yZGVyID0gJyc7CiAgICAgIGlmKCBwcmVnX21hdGNoKCAnL15pbnB1dF9yZXF1aXJlZF8vJywgJGtleSApICYmICgkdmFsICE9IDApICkKCXsKCSAgJHJlbG5hZGRlZCsrOwoJfQogICAgfQogICAgaWYoICRyZWxuYWRkZWQgPT0gMCApCiAgICAgIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAnMSc7CgkkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3Jfbm9yZWxhdGlvbnMnKTsKCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdhZGRncm91cCcsICRyZXR1cm5pZCwgJHBhcmFtcyApOwoJcmV0dXJuOwogICAgICB9CgogICAgLy8gd2UncmUgY2xlYXIgdG8gYWRkCiAgICAkcmV0ID0gJHRoaXMtPkFkZEdyb3VwKCAkZ3JvdXBuYW1lLCAkZ3JvdXBkZXNjICk7CiAgICBpZiggJHJldFswXSA9PSBGQUxTRSApCiAgICAgIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAnMSc7CgkkcGFyYW1zWydtZXNzYWdlJ10gPSAkcmV0WzFdOwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2FkZGdyb3VwJywgJHJldHVybmlkLCAkcGFyYW1zICk7CglyZXR1cm47CiAgICAgIH0KCiAgICAvLyBhbHNvIGFkZCB0aGUgcHJvcGVydHkgY2hvaWNlcwogICAgJHRoaXMtPkRlbGV0ZUFsbEdyb3VwUHJvcGVydHlSZWxhdGlvbnMoICRyZXRbMV0gKTsKICAgIGZvcmVhY2goICRwYXJhbXMgYXMgJGtleSA9PiAkdmFsICkKICAgIHsKICAgICAgJHByb3BuYW1lID0gJyc7CiAgICAgICRzb3J0b3JkZXIgPSAnJzsKICAgICAgaWYoIHByZWdfbWF0Y2goICcvXmlucHV0X3JlcXVpcmVkXy8nLCAka2V5ICkgKQoJewoJICAkcHJvcG5hbWUgPSBzdWJzdHIoJGtleSxzdHJsZW4oJ2lucHV0X3JlcXVpcmVkXycpKTsKCX0KICAgICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9zb3J0b3JkZXJfJy4kcHJvcG5hbWVdICkgKQoJewoJICAkc29ydG9yZGVyID0gJHBhcmFtc1snaW5wdXRfc29ydG9yZGVyXycuJHByb3BuYW1lXTsKCX0KCiAgICAgIGlmKCAkdmFsICE9IDAgJiYgJHByb3BuYW1lICE9ICcnKQoJewoJICAkdGhpcy0+QWRkR3JvdXBQcm9wZXJ0eVJlbGF0aW9uKCAkcmV0WzFdLCAkcHJvcG5hbWUsICRzb3J0b3JkZXIsICR2YWwgKTsKCX0KICAgIH0KCiAgICAkdGhpcy0+bXlSZWRpcmVjdFRvVGFiKCRpZCwgJ2dyb3VwcycsICRwYXJhbXMgKTsgCiAgfQoKCiAgZnVuY3Rpb24gX0RvQWRkUHJvcCggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIC8vIGFyZSB3ZSBjYW5jZWxsaW5nCiAgICBpZiAoaXNzZXQgKCRwYXJhbXNbJ2NhbmNlbCddKSkKICAgICAgewoJJHRoaXMtPm15UmVkaXJlY3RUb1RhYigkaWQsICdwcm9wZXJ0aWVzJyApOwogICAgICB9CiAgICAKICAgICRuYW1lID0gJyc7CiAgICBpZiggaXNzZXQoJHBhcmFtc1snaW5wdXRfbmFtZSddICkgKSB7CiAgICAgICRuYW1lID0gdHJpbSgkcGFyYW1zWydpbnB1dF9uYW1lJ10pOwogICAgICAkbmFtZSA9IHN0cnRvbG93ZXIocHJlZ19yZXBsYWNlKCcvIC8nLCdfJywkbmFtZSkpOwogICAgfQogICAgJHByb21wdCA9ICcnOwogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ2lucHV0X3Byb21wdCddICkgKSB7CiAgICAgICRwcm9tcHQgPSB0cmltKCRwYXJhbXNbJ2lucHV0X3Byb21wdCddKTsKICAgIH0KICAgICR0eXBlID0gJyc7CiAgICBpZiggaXNzZXQoJHBhcmFtc1snaW5wdXRfdHlwZSddKSApIHsKICAgICAgJHR5cGUgPSAkcGFyYW1zWydpbnB1dF90eXBlJ107CiAgICB9CiAgICAkc2Vsb3B0aW9ucyA9ICcnOwogICAgJG9wdGlvbnMgPSAnJzsKICAgIGlmKCBpc3NldCgkcGFyYW1zWydpbnB1dF9zZWxvcHRpb25zJ10gKSApIHsKICAgICAgJHNlbG9wdGlvbnMgPSAkcGFyYW1zWydpbnB1dF9zZWxvcHRpb25zJ107CiAgICAgICRvcHRpb25zID0gZXhwbG9kZSgiXG4iLCAkc2Vsb3B0aW9ucyk7CiAgICB9CiAgICAKICAgIC8vIG5vdyBjaGVjayBldmVyeXRoaW5nIG91dAogICAgLy8gdG9kbywgYWRkIGEgbWF4aW11bSBmaWVsZCBsZW5ndGggcHJlZmVyZW5jZQogICAgaWYoICRuYW1lID09ICcnIHx8ICRwcm9tcHQgPT0gJycgKXsKICAgICAgJHBhcmFtc1snZXJyb3InXSA9IDE7CiAgICAgICRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkcGFyYW1zJyk7CiAgICAgICR0aGlzLT5teVJlZGlyZWN0KCRpZCwnYWRkcHJvcCcsJHJldHVybmlkLCRwYXJhbXMpOwogICAgICByZXR1cm47CiAgICB9IAoKICAgIHN3aXRjaCgkdHlwZSl7CiAgICBjYXNlIDA6CiAgICBjYXNlIDI6CiAgICAgICRsZW5ndGggPSAyMDsKICAgICAgJG1heGxlbmd0aCA9IDIwOwogICAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X2xlbmd0aCddICkgKSB7CgkkbGVuZ3RoID0gdHJpbSgkcGFyYW1zWydpbnB1dF9sZW5ndGgnXSk7CiAgICAgIH0KICAgICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9tYXhsZW5ndGgnXSApICkgewoJJG1heGxlbmd0aCA9IHRyaW0oJHBhcmFtc1snaW5wdXRfbWF4bGVuZ3RoJ10pOwogICAgICB9CiAgICAgIGJyZWFrOwogICAgY2FzZSAxOgogICAgICAkbGVuZ3RoID0gMTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDM6CiAgICAgICRsZW5ndGggPSAyNTU7CiAgICAgIGJyZWFrOwogICAgY2FzZSA0OgogICAgICAvLyBnZXQgdGhlIG51bWJlciBvZiBlbXB0eSB2YWx1ZXMKICAgICAgLy8gYW5kIHN1YnRyYWN0IGl0IGZyb20gdGhlIGFycmF5IGNvdW50CiAgICAgICRlbGVtZW50X2NvdW50X2FycmF5ID0gYXJyYXlfY291bnRfdmFsdWVzKCRvcHRpb25zKTsKICAgICAgJGVtcHR5X2VsZW1lbnRfY291bnQgPSAKCSRlbGVtZW50X2NvdW50X2FycmF5WyIiXSArCgkkZWxlbWVudF9jb3VudF9hcnJheVsiXHIiXSArCgkkZWxlbWVudF9jb3VudF9hcnJheVsiX18iXSArCgkkZWxlbWVudF9jb3VudF9hcnJheVsiX19cciJdOwogICAgICAkbGVuZ3RoID0gY291bnQoJG9wdGlvbnMpIC0gJGVtcHR5X2VsZW1lbnRfY291bnQ7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgJGxlbmd0aCA9IDE7CiAgICB9CiAgICAKICAgIAogICAgaWYoICgoJHR5cGUgPT0gMCB8fCAkdHlwZSA9PSAyKSAmJiAoICRsZW5ndGggPCAxIHx8ICRsZW5ndGggPiAyNTUgKSkgfHwKCSgkdHlwZSA9PSA0ICYmICRzZWxvcHRpb25zID09ICcnICkgKXsKICAgICAgJHBhcmFtc1snZXJyb3InXSA9IDE7CiAgICAgICRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkcGFyYW1zJyk7CiAgICAgICR0aGlzLT5teVJlZGlyZWN0KCRpZCwnYWRkcHJvcDInLCRyZXR1cm5pZCwkcGFyYW1zKTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIAogICAgLy8gQWRkIHNlbGVjdCBvcHRpb25zCiAgICBpZiAoJHNlbG9wdGlvbnMpIHsKICAgICAgJHJlc3VsdCA9ICR0aGlzLT5BZGRTZWxlY3RPcHRpb25zKCAkbmFtZSwgJG9wdGlvbnMgKTsKICAgICAgaWYoICEkcmVzdWx0WzBdICkgewoJJHBhcmFtc1snZXJyb3InXSA9IDE7CgkkcGFyYW1zWydtZXNzYWdlJ10gPSAkcmVzdWx0WzFdOwoJJHRoaXMtPm15UmVkaXJlY3QoJGlkLCdhZGRwcm9wJywkcmV0dXJuaWQsJHBhcmFtcyk7CiAgICAgIH0KICAgIH0KCiAgICAKICAgIC8vIGFuZCBhZGQgdGhlIHByb3BlcnR5IGRlZmluaXRpb24KICAgICRyZXN1bHQgPSAkdGhpcy0+QWRkUHJvcGVydHlEZWZuKCAkbmFtZSwgJHByb21wdCwgJHR5cGUsICRsZW5ndGgsICRtYXhsZW5ndGggKTsKICAgIGlmKCAhJHJlc3VsdFswXSApIHsKICAgICAgJHBhcmFtc1snZXJyb3InXSA9IDE7CiAgICAgICRwYXJhbXNbJ21lc3NhZ2UnXSA9ICRyZXN1bHRbMV07CiAgICAgICR0aGlzLT5teVJlZGlyZWN0KCRpZCwnYWRkcHJvcCcsJHJldHVybmlkLCRwYXJhbXMpOwogICAgfQogICAgCiAgICAkdGhpcy0+bXlSZWRpcmVjdHRvVGFiKCAkaWQsICdwcm9wZXJ0aWVzJyApOwogIH0KCgogIGZ1bmN0aW9uIF9Eb0FkZFVzZXJTdGVwMSggJGlkLCAmJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICAvLyBhcmUgd2UgY2FuY2VsbGluZwogICAgaWYgKGlzc2V0ICgkcGFyYW1zWydjYW5jZWwnXSkpCiAgICB7CiAgICAgICR0aGlzLT5teVJlZGlyZWN0VG9UYWIoJGlkLCAndXNlcnMnICk7CiAgICB9CgogICAgLy8gbWFrZSBzdXJlIHRoZSBwYXJhbWV0ZXJzIGFyZSBmaWxsZWQgaW4KICAgICR1c2VybmFtZSA9IHRyaW0oJHBhcmFtc1snaW5wdXRfdXNlcm5hbWUnXSk7CiAgICAkcGFzc3dvcmQgPSB0cmltKCRwYXJhbXNbJ2lucHV0X3Bhc3N3b3JkJ10pOwogICAgJHJlcGVhdCAgID0gdHJpbSgkcGFyYW1zWydpbnB1dF9yZXBlYXRwYXNzd29yZCddKTsKCiAgICAkcmV0ID0gJHRoaXMtPl9oYW5kbGVVc2VySW5mb1ZhbGlkYXRpb24oICRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkbWVzc2FnZSwgdHJ1ZSApOwogICAgc3dpdGNoKCAkcmV0ICkKICAgICAgewogICAgICBjYXNlIC0xOiAvLyBlcnJvcgoJJHBhcmFtc1snZXJyb3InXSA9IDE7CgkkcGFyYW1zWydtZXNzYWdlJ10gPSAkbWVzc2FnZTsKCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdhZGR1c2VyJywgJHJldHVybmlkLCRwYXJhbXMgKTsKCXJldHVybjsKCWJyZWFrOwogICAgICBjYXNlIDA6ICAvLyBubyBlcnJvciwgYnV0IGRvbid0IGNvbnRpbnVlIG9wZXJhdGlvbgoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2FkZHVzZXInLCAkcmV0dXJuaWQsJHBhcmFtcyApOwoJcmV0dXJuOwoJYnJlYWs7CiAgICAgIGNhc2UgMTogIC8vIGFsbCBpcyBnb29kLCBjb250aW51ZSBvcGVyYXRpb24KCWJyZWFrOwogICAgICB9CgoKICAgIC8vIGNvbnZlcnQgdGhlIGV4cGlyZXMgZmllbGQgdG8gYSByZWFsIHRpbWUKICAgICRleHBpcmVzID0gTlVMTDsKCiAgICAvLyBhbmQgc3RvcmUgdGhpcyBhbGwgaW4gdGhlIHBhcmFtcywgCiAgICAkcGFyYW1zWydpbnB1dF91c2VybmFtZSddID0gJHVzZXJuYW1lOwogICAgJHBhcmFtc1snaW5wdXRfcGFzc3dvcmQnXSA9ICRwYXNzd29yZDsKICAgICRwYXJhbXNbJ2lucHV0X3JlcGVhdHBhc3N3b3JkJ10gPSAkcmVwZWF0OwoKICAgIC8vIGFuZCBnbyB0byBzdGVwIDIKICAgICR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkb19hZGR1c2VyMicsICRyZXR1cm5pZCwkcGFyYW1zICk7CgovKiAgICAKIC8vIGFuZCBhZGQgdGhlIHVzZXIKICRyZXQgPSAkdGhpcy0+QWRkVXNlciggJHVzZXJuYW1lLCAkZW1haWwsICRwYXNzd29yZCwgJGV4cGlyZXMgKTsKIGlmKCAkcmV0WzBdID09IGZhbHNlICkKIHsKICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2Vycm9yJywgIjEiKTsKICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnbWVzc2FnZScsICRyZXRbMV0gKTsKCSR0aGlzLT5fRGlzcGxheUFkbWluQWRkVXNlclN0ZXAxUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCXJldHVybjsJCiAgICAgIH0KCiAgICAgICR1aWQgPSAkdGhpcy0+R2V0VXNlcklEKCR1c2VybmFtZSk7CiAgICBpZiggJHVpZCA9PSBmYWxzZSApCiAgICB7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdlcnJvcicsICIxIik7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdtZXNzYWdlJywgJHRoaXMtPkxhbmcoJ2Vycm9yX3VzZXJub3Rmb3VuZCcpICk7CgkkdGhpcy0+X0Rpc3BsYXlBZG1pbkFkZFVzZXJTdGVwMVBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CglyZXR1cm47CQogICAgICB9CgogICAgLy8gYW5kIHRoZW4gYWRkIGhpbSB0byBoaXMgZ3JvdXBzIAogICAgaWYoIGFycmF5X2tleV9leGlzdHNfc3Vic3RyKCAkcGFyYW1zLCAnbWVtYmVyb2ZfJykgKQogICAgICB7CiAgICAgIAoJJGdycGlkcyA9IHNwbGl0KCIsIiwkcGFyYW1zWydtZW1iZXJvZiddKTsKCWZvcmVhY2goICRncnBpZHMgYXMgJGdpZCApCgl7CgkgICRyZXQgPSAkdGhpcy0+QXNzaWduVXNlclRvR3JvdXAoICR1aWQsICRnaWQgKTsKCSAgaWYoICRyZXQgPT0gZmFsc2UgKQoJICAgIHsKCSAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2Vycm9yJywgIjEiKTsKCSAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ21lc3NhZ2UnLCAkdGhpcy0+TGFuZygnZXJyb3JfY2FudGFzc2lnbnVzZXInKSApOwoJICAgICAgJHRoaXMtPl9EaXNwbGF5QWRtaW5BZGRVc2VyU3RlcDFQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJICAgICAgcmV0dXJuOwkKCSAgICB9Cgl9CiAgICAgIH0KCiAgICAvLyBhbmQgdGhlbiBhZGQgaGlzIHByb3BlcnRpZXMKICAgIGlmKCBpc3NldCggJHBhcmFtc1sndXNlcnByb3BzJ10gKSApCiAgICAgIHsKCSRwcm9wcyA9IHNwbGl0KCIsIiwkcGFyYW1zWyd1c2VycHJvcHMnXSk7Cglmb3JlYWNoKCAkcHJvcHMgYXMgJHByb3AgKQoJewoJICBsaXN0KCAkaywgJHYgKSA9IHNwbGl0KCI9IiwkcHJvcCk7CgkgICR0aGlzLT5TZXRVc2VyUHJvcGVydHlGdWxsKCRrLCR2LCR1aWQpOwoJfQogICAgICB9CgogICAgLy8gYW5kIHdlJ3JlIGRvbmUKICAgICR0aGlzLT5teVJlZGlyZWN0ICgkaWQsICdkZWZhdWx0YWRtaW4nKTsKKi8KICB9CgoKICBmdW5jdGlvbiBfRG9BZGRVc2VyU3RlcDIoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgLy8gZG8gd2Ugd2FudCB0byBnbyBiYWNrCiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2JhY2snXSApICkKICAgICAgewoJLy8geXVwIHdlIGRvCgkkcGFyYW1zID0gZXhwbG9kZV93aXRoX2tleSggJHBhcmFtc1snc3RlcDFfcGFyYW1zJ10gKTs7CgkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnYWRkdXNlcicsICRyZXR1cm5pZCwkcGFyYW1zICk7CiAgICAgIH0KICAgIGlmKCBpc3NldCggJHBhcmFtc1snY2FuY2VsJ10gKSApCiAgICAgIHsKCS8vIHl1cCB3ZSBkbwoJJHRoaXMtPm15UmVkaXJlY3RUb1RhYiggJGlkLCAndXNlcnMnICk7CiAgICAgIH0KCiAgICAvLyBnZXQgdGhlIGZpZWxkIGluZm8KICAgICRmbGRpbmZvID0gYXJyYXkoKTsKICAgIGZvcmVhY2goICRwYXJhbXMgYXMgJGsgPT4gJHYgKQogICAgICB7CglpZiggcHJlZ19tYXRjaCgnL15oaWRkZW5fLycsICRrICkgKQoJICB7CgkgICAgJGZsZG5hbWUgPSBzdWJzdHIoICRrLCBzdHJsZW4oJ2hpZGRlbl8nKSk7CgkgICAgJHByb3BpbmZvID0gc3BsaXQoJzsnLCR2KTsKCSAgICAkZmxkaW5mb1skZmxkbmFtZV0gPSAkcHJvcGluZm87CgkgIH0KICAgICAgfQoKICAgIC8vIG5vdyBnZXQgZWFjaCBvZiB0aGUgZmllbGRzCiAgICAkZmllbGRzID0gYXJyYXkoKTsKICAgIGZvcmVhY2goICRwYXJhbXMgYXMgJGsgPT4gJHYgKQogICAgICB7CglpZiggcHJlZ19tYXRjaCgnL15pbnB1dF8vJywgJGsgKSApCgkgIHsKCSAgICAkZmxkbmFtZSA9IHN1YnN0ciggJGssIHN0cmxlbignaW5wdXRfJykpOwoJICAgICRmaWVsZHNbJGZsZG5hbWVdID0gJHY7IAoJICB9CiAgICAgIH0KCiAgICAvLyBub3cgdmFsaWRhdGUKICAgIGZvcmVhY2goICRmbGRpbmZvIGFzICRuYW1lID0+ICR2YWwgKQogICAgICB7CgkvLyBwcm9jZXNzIGVtcHR5IHJlcXVpcmVkIGZpZWxkcwoJLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCBlbXB0eSBvcHRpb25hbCBvbmVzCglpZiggJHZhbFszXSA9PSAyICYmICghaXNzZXQoICRmaWVsZHNbJG5hbWVdICkgfHwgJGZpZWxkc1skbmFtZV0gPT0gJycpICkKCSAgewoJICAgIC8vIGEgcmVxdWlyZWQgZmllbGQgaXMgZW1wdHkKCSAgICAkcGFyYW1zID0gYXJyYXlfbWVyZ2UoICRwYXJhbXMsIGV4cGxvZGVfd2l0aF9rZXkoICRwYXJhbXNbJ3N0ZXAxX3BhcmFtcyddICkpOwoJICAgICRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJICAgICRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9taXNzaW5nX3JlcXVpcmVkX3BhcmFtJywkbmFtZSk7CgkgICAgJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RvX2FkZHVzZXIyJywgJHJldHVybmlkLCRwYXJhbXMgKTsKCSAgICByZXR1cm47CgkgIH0KCgkvLyB2YWxpZGF0ZSBmaWxsZWQgaW4gZmllbGRzCglpZiggaXNzZXQoICRmaWVsZHNbJG5hbWVdICkgKQoJICB7CgkgICAgc3dpdGNoKCAkdmFsWzFdICkKCSAgICAgIHsKCSAgICAgIGNhc2UgMDogLy8gdGV4dAoJCS8vIG5vdCBtdWNoIHdlIGNhbiBkbyB0byB2YWxpZGF0ZSBhIHRleHQgZmllbGQuCgkJYnJlYWs7CgkgICAgICBjYXNlIDE6IC8vIGNoZWNrYm94CgkJLy8gb3IgYSBjaGVja2JveAoJCWJyZWFrOwoJICAgICAgY2FzZSAyOiAvLyBlbWFpbAoJCS8vIGVtYWlsIGFkZHJlc3NlcyBjYW4gYmUgdmFsaWRhdGVkIHRob3VnaAoJCWJyZWFrOwoJICAgICAgY2FzZSAzOiAvLyB0ZXh0YXJlYQoJCS8vIGEgdGV4dGFyZWEgY2FuIGJlIHZhbGlkYXRlZCBmb3IgbGVuZ3RoLgoJCWJyZWFrOwoJICAgICAgY2FzZSA0OiAvLyBkcm9wZG93bgoJCS8vIGhvdyBjYW4gd2UgdmFsaWRhdGUgYSBkcm9wZG93bj8KCQlicmVhazsKCSAgICAgIH0KCSAgfQogICAgICB9CgogICAgLy8gZ2V0IHRoZSBwYXJtcyBmcm9tIHRoZSBmaXJzdCBzdGVwCiAgICAkcGFybXMxID0gZXhwbG9kZV93aXRoX2tleSggJHBhcmFtc1snc3RlcDFfcGFyYW1zJ10gKTsKICAgIAogICAgLy8gYW5kIG1lcmdlIGVtIGludG8gJHBhcmFtcyBzbyB3ZSBjYW4gYWN0dWFsbHkgYWRkIHRoZSB1c2VyIGFjY291bnQKICAgICRwYXJhbXMgPSBhcnJheV9tZXJnZSggJHBhcmFtcywgJHBhcm1zMSApOwoKICAgIC8vIG5vdyBmaW5kIG91dCB3aGljaCBncm91cHMgaGUncyBhIG1lbWJlciBvZgogICAgJG1lbWJlcm9mID0gYXJyYXkoKTsKICAgIGZvcmVhY2goICRwYXJhbXMgYXMgJGsgPT4gJHYgKQogICAgICB7CglpZiggcHJlZ19tYXRjaCgnL15tZW1iZXJvZl8vJywgJGsgKSApCgkgIHsKCSAgICAkbWVtYmVyb2ZbXSA9ICRwYXJhbXNbJGtdOwoJICB9CiAgICAgIH0KCiAgICAvLyBub3cgd2UgY2FuIGFjdHVhbGx5IGFkZCB0aGUgdXNlcgogICAgJHJldCA9ICR0aGlzLT5BZGRVc2VyKCAkcGFyYW1zWydpbnB1dF91c2VybmFtZSddLCAKCQkJICAgJHBhcmFtc1snaW5wdXRfcGFzc3dvcmQnXSwKCQkJICAgJHBhcmFtc1snaW5wdXRfZXhwaXJlc2RhdGUnXSApOwogICAgaWYoICRyZXRbMF0gPT0gRkFMU0UgKQogICAgICB7CgkkcGFyYW1zWydlcnJvciddID0gMTsKCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICRyZXRbMV07CgkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZG9fYWRkdXNlcjInLCAkcmV0dXJuaWQsJHBhcmFtcyApOwoJcmV0dXJuOwogICAgICB9CiAgICAkdWlkID0gJHJldFsxXTsKCiAgICAvLyBhbmQgYWRkIGhpbSB0byBoaXMgZ3JvdXBzCiAgICBmb3JlYWNoKCAkbWVtYmVyb2YgYXMgJG1lbSApCiAgICAgIHsKCWlmKCAhJHRoaXMtPkFzc2lnblVzZXJUb0dyb3VwKCAkcmV0WzFdLCAkbWVtICkgKQoJICB7CgkgICAgJHBhcmFtc1snZXJyb3InXSA9IDE7CgkgICAgJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRncm91cGlkJywkbWVtKTsKCSAgICAkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZG9fYWRkdXNlcjInLCAkcmV0dXJuaWQsJHBhcmFtcyApOwoJICAgIHJldHVybjsKCSAgfQogICAgICB9CgogICAgLy8gYW5kIGFkZCBoaXMgcHJvcGVydGllcwogICAgZm9yZWFjaCggJGZpZWxkcyBhcyAkayA9PiAkdiApCiAgICAgIHsKCSRyZXQgPSAkdGhpcy0+U2V0VXNlclByb3BlcnR5RnVsbCggJGssICR2LCAkdWlkICk7CglpZiggJHJldCA9PSBmYWxzZSApCgkgIHsKCSAgICAkcGFyYW1zWydlcnJvciddID0gMTsKCSAgICAkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+bGFuZygnZXJyb3InKTsKCSAgICAkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZG9fYWRkdXNlcjInLCAkcmV0dXJuaWQsJHBhcmFtcyApOwoJICAgIHJldHVybjsKCSAgfQogICAgICB9CgogICAgLy8ga2VlcCBhIGxvZyBvZiBpdAogICAgJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksCgkJICAkdGhpcy0+TGFuZygndXNlcl9hZGRlZCcsYXJyYXkoJHVpZCwkcGFyYW1zWydpbnB1dF91c2VybmFtZSddKSkpOwoKICAgIC8vIGFuZCB0aGF0IHNob3VsZCBiZSBpdAogICAgJHRoaXMtPm15UmVkaXJlY3RUb1RhYiggJGlkLCAndXNlcnMnICk7CiAgfQoKCiAgZnVuY3Rpb24gX0RvQWRtaW5BY3Rpb25zKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydidXR0b25fZXhwb3J0J10gKSApCiAgICAgIHsKCS8vIHdlIHdhbnQgdG8gZXhwb3J0IGEgY3N2IGZpbGUgZG8gd2UKCWhlYWRlcignQ29udGVudC1EZXNjcmlwdGlvbjogRmlsZSBUcmFuc2ZlcicpOwoJaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2ZvcmNlLWRvd25sb2FkJyk7CgloZWFkZXIoJ0NvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPWZldXNlcnMuY3N2Jyk7Cgl3aGlsZShAb2JfZW5kX2NsZWFuKCkpOwoJJHRoaXMtPl9HZXRVc2Vyc0luQ1NWRm9ybWF0KCk7CglleGl0KCk7CiAgICAgIH0KICB9CgogIGZ1bmN0aW9uIF9Eb0RlbGV0ZUdyb3VwKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgaWYgKCFpc3NldCAoJHBhcmFtc1snZ3JvdXBfaWQnXSkgfHwgJHBhcmFtc1snZ3JvdXBfaWQnXSA9PSAiIikKICAgICAgewoJJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlICgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwKCQkJCSAkdGhpcy0+TGFuZyAoJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcycpKTsKCXJldHVybjsKICAgICAgfSAgCgogICAgJHJldCA9ICR0aGlzLT5EZWxldGVHcm91cEZ1bGwoICRwYXJhbXNbJ2dyb3VwX2lkJ10gKTsKICAgIGlmKCAkcmV0WzBdID09IEZBTFNFICkKICAgICAgewoJJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlICgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJHJldFsxXSApOwoJcmV0dXJuOwogICAgICB9CiAgICAgICR0aGlzLT5teVJlZGlyZWN0VG9UYWIoJGlkLCAnZ3JvdXBzJyApOwogIH0KCgogIGZ1bmN0aW9uIF9Eb0RlbGV0ZVByb3BlcnR5KCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgaWYoICFpc3NldCggJHBhcmFtc1sncHJvcG5hbWUnXSApICkKICAgICAgewoJJHBhcmFtc1snZXJyb3InXSA9IDE7CgkkcGFyYW1zWydtZXNhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnN1ZmZpY2VudHBhcmFtcycpOwoJJHRoaXMtPm15UmVkaXJlY3RUb1RhYigkaWQsJ3Byb3BlcnRpZXMnLCRwYXJhbXMpOwoJcmV0dXJuOwogICAgICB9CgogICAgLy8gZGVsZXRlIGFsbCBvY2N1cmFuY2VzIG9mIHRoaXMgcHJvcGVydHkgbmFtZSBpbiB0aGUgcHJvcGVydGllcyB0YWJsZQogICAgJHJlc3VsdCA9ICR0aGlzLT5EZWxldGVVc2VyUHJvcGVydHlCeU5hbWUoICRwYXJhbXNbJ3Byb3BuYW1lJ10gKTsKCiAgICAvLyBXZSBuZWVkIHRvIGRlbGV0ZSBzZWxlY3Qgb3B0aW9ucyByZWdhcmRsZXNzIG9mIHRoZSBjb250cm9sIHR5cGUsCiAgICAvLyBiZWNhdXNlIHdlIGRvbid0IGRlbGV0ZSBzZWxlY3Qgb3B0aW9ucyB3aGVuIGNoYW5naW5nIGNvbnRyb2wgdHlwZXMKICAgICRyZXN1bHQgPSAkdGhpcy0+RGVsZXRlU2VsZWN0T3B0aW9ucyggJHBhcmFtc1sncHJvcG5hbWUnXSApOwogICAgLy8gbm93IHJlYWR5IHRvIGRlbGV0ZSB0aGUgcHJvcGVydHkKICAgICRyZXN1bHQgPSAkdGhpcy0+RGVsZXRlUHJvcGVydHlEZWZuKCAkcGFyYW1zWydwcm9wbmFtZSddICk7CiAgICBpZiggISRyZXN1bHQgKQogICAgICB7CgkkcGFyYW1zWydlcnJvciddID0gMTsKCSRwYXJhbXNbJ21lc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2NvdWxkbm90ZGVsZXRlcHJvcGVydHknKTsKICAgICAgfQogICAgJHRoaXMtPm15UmVkaXJlY3RUb1RhYigkaWQsJ3Byb3BlcnRpZXMnLCRwYXJhbXMpOwogIH0KCgogIGZ1bmN0aW9uIF9Eb0RlbGV0ZVVzZXIoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICBpZiAoIWlzc2V0ICgkcGFyYW1zWyd1c2VyX2lkJ10pIHx8ICRwYXJhbXNbJ3VzZXJfaWQnXSA9PSAiIikKICAgICAgewoJJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlICgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwKCQkJCSAkdGhpcy0+TGFuZyAoJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcycpKTsKCXJldHVybjsKICAgICAgfSAgCgogICAgJHJldCA9ICR0aGlzLT5EZWxldGVVc2VyRnVsbCggJHBhcmFtc1sndXNlcl9pZCddICk7CiAgICBpZiggJHJldFswXSA9PSBGQUxTRSApCiAgICAgIHsKCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSAoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICRyZXRbMV0gKTsKCXJldHVybjsKICAgICAgfQoKICAgIC8vIGFuZCBsb2cgaXQKICAgICR0aGlzLT5BdWRpdCggMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLAoJCSAgJHRoaXMtPkxhbmcoJ3VzZXJfZGVsZXRlZCcsJHBhcmFtc1sndXNlcl9pZCddKSApOwoKICAgICR0aGlzLT5teVJlZGlyZWN0VG9UYWIoJGlkLCAndXNlcnMnICk7CiAgfQoKCiAgZnVuY3Rpb24gX0RvRWRpdEdyb3VwKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIGlmIChpc3NldCAoJHBhcmFtc1snY2FuY2VsJ10pKQogICAgewogICAgICAkdGhpcy0+bXlSZWRpcmVjdFRvVGFiKCRpZCwgJ2dyb3VwcycgKTsKICAgIH0KCiAgICBpZiAoIWlzc2V0ICgkcGFyYW1zWydncm91cF9pZCddKSB8fCAkcGFyYW1zWydncm91cF9pZCddID09ICIiKQogICAgICB7CgkkcGFyYW1zWydlcnJvciddID0gMTsKCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnKTsKCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdlZGl0Z3JvdXAnLCAkcmV0dXJuaWQsJHBhcmFtcyApOwoJcmV0dXJuOwogICAgICB9ICAKCiAgICAkZ3JvdXBuYW1lID0gJyc7CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X2dyb3VwbmFtZSddICkgKQogICAgICB7CgkkZ3JvdXBuYW1lID0gdHJpbSgkcGFyYW1zWydpbnB1dF9ncm91cG5hbWUnXSk7CiAgICAgIH0KICAgICRncm91cGRlc2MgPSAnJzsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfZ3JvdXBkZXNjJ10gKSApCiAgICAgIHsKCSRncm91cGRlc2MgPSB0cmltKCRwYXJhbXNbJ2lucHV0X2dyb3VwZGVzYyddKTsKICAgICAgfQoKICAgIC8vIG1ha2Ugc3VyZSB0aGUgcGFyYW1ldGVycyBhcmUgZmlsbGVkIGluCiAgICBpZiggJGdyb3VwbmFtZSA9PSAnJyB8fCAkZ3JvdXBkZXNjID09ICcnICkKICAgICAgewoJJHBhcmFtc1snZXJyb3InXSA9IDE7CgkkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZHBhcmFtcycpOwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2VkaXRncm91cCcsICRyZXR1cm5pZCwkcGFyYW1zICk7CglyZXR1cm47CiAgICAgIH0KCiAgICAkcmVsbmFkZGVkID0gMDsKICAgIGZvcmVhY2goICRwYXJhbXMgYXMgJGtleSA9PiAkdmFsICkKICAgIHsKICAgICAgJHByb3BuYW1lID0gJyc7CiAgICAgICRzb3J0b3JkZXIgPSAnJzsKICAgICAgaWYoIHByZWdfbWF0Y2goICcvXmlucHV0X3JlcXVpcmVkXy8nLCAka2V5ICkgJiYgKCR2YWwgIT0gMCkgKQoJewoJICAkcmVsbmFkZGVkKys7Cgl9CiAgICB9CiAgICBpZiggJHJlbG5hZGRlZCA9PSAwICkKICAgICAgewoJJHBhcmFtc1snZXJyb3InXSA9ICcxJzsKCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9ub3JlbGF0aW9ucycpOwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2FkZGdyb3VwJywgJHJldHVybmlkLCRwYXJhbXMgKTsKCXJldHVybjsKICAgICAgfQoKICAgICRyZXQgPSAkdGhpcy0+U2V0R3JvdXAoICRwYXJhbXNbJ2dyb3VwX2lkJ10sICRwYXJhbXNbJ2lucHV0X2dyb3VwbmFtZSddLAoJCQkgICAgJHBhcmFtc1snaW5wdXRfZ3JvdXBkZXNjJ10gKTsKICAgIGlmKCAkcmV0WzBdID09IEZBTFNFICkKICAgICAgewoJJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlICgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJHJldFsxXSApOwoJcmV0dXJuOwogICAgICB9CgogICAgLy8gYWxzbyBhZGQgdGhlIHByb3BlcnR5IGNob2ljZXMKICAgICR0aGlzLT5EZWxldGVBbGxHcm91cFByb3BlcnR5UmVsYXRpb25zKCAkcGFyYW1zWydncm91cF9pZCddICk7CiAgICBmb3JlYWNoKCAkcGFyYW1zIGFzICRrZXkgPT4gJHZhbCApCiAgICB7CiAgICAgIGlmKCBwcmVnX21hdGNoKCAnL15pbnB1dF9yZXF1aXJlZF8vJywgJGtleSApICkKCXsKCSAgJHByb3BuYW1lID0gc3Vic3RyKCRrZXksc3RybGVuKCdpbnB1dF9yZXF1aXJlZF8nKSk7Cgl9CiAgICAgIGVsc2UgCgl7CgkgIGNvbnRpbnVlOwoJfQogICAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X3NvcnRvcmRlcl8nLiRwcm9wbmFtZV0gKSApCgl7CgkgICRzb3J0b3JkZXIgPSAkcGFyYW1zWydpbnB1dF9zb3J0b3JkZXJfJy4kcHJvcG5hbWVdOwoJfQogICAgICBpZiggJHZhbCAhPSAwICYmICRwcm9wbmFtZSAhPSAnJyApCgl7CgkgICR0aGlzLT5BZGRHcm91cFByb3BlcnR5UmVsYXRpb24oICRwYXJhbXNbJ2dyb3VwX2lkJ10sICRwcm9wbmFtZSwgJHNvcnRvcmRlciwgJHZhbCApOwoJfQogICAgfQoKICAgICR0aGlzLT5teVJlZGlyZWN0VG9UYWIoJGlkLCAnZ3JvdXBzJyApOwogIH0KCgogIGZ1bmN0aW9uIF9Eb0VkaXRQcm9wZXJ0eSggJGlkLCAmJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICAkbmFtZSA9ICcnOwogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9uYW1lJ10gKSApIAogICAgICB7CgkkbmFtZSA9IHRyaW0oJHBhcmFtc1snaW5wdXRfbmFtZSddKTsgCgkkbmFtZSA9IHN0cnRvbG93ZXIocHJlZ19yZXBsYWNlKCcvIC8nLCdfJywkbmFtZSkpOwogICAgICB9CiAgICAkcHJvbXB0ID0gJyc7CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X3Byb21wdCddICkgKXsKICAgICAgJHByb21wdCA9IHRyaW0oJHBhcmFtc1snaW5wdXRfcHJvbXB0J10pOyAKICAgIH0KICAgICR0eXBlID0gJyc7CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X3R5cGUnXSApICkgewogICAgICAkdHlwZSA9IHRyaW0oJHBhcmFtc1snaW5wdXRfdHlwZSddKTsgCiAgICB9CiAgICAkc2Vsb3B0aW9ucyA9ICcnOwogICAgJG9wdGlvbnMgPSAnJzsKICAgIGlmKCBpc3NldCgkcGFyYW1zWydpbnB1dF9leHRyYSddICkgKSB7CiAgICAgICRzZWxvcHRpb25zID0gdHJpbSgkcGFyYW1zWydpbnB1dF9leHRyYSddKTsKICAgICAgJG9wdGlvbnMgPSBleHBsb2RlKCJfXyIsICRzZWxvcHRpb25zKTsKICAgIH0KCQogICAgaWYoICRuYW1lID09ICcnIHx8ICRwcm9tcHQgPT0gJycpCiAgICAgIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcycpOwoJZWNobyAkdGhpcy0+TGFuZygnZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJyk7CgkkdGhpcy0+bXlSZWRpcmVjdFRvVGFiKCRpZCwncHJvcGVydGllcycsJHBhcmFtcyk7CglyZXR1cm47CiAgICAgIH0KCiAgICBzd2l0Y2goJHR5cGUpewogICAgY2FzZSAwOiAvLyB0ZXh0IGlucHV0CiAgICBjYXNlIDI6IC8vIGVtYWlsCiAgICAgICRsZW5ndGggPSAyMDsKICAgICAgJG1heGxlbmd0aCA9IDIwOwogICAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X2xlbmd0aCddICkgKSB7CgkkbGVuZ3RoID0gdHJpbSgkcGFyYW1zWydpbnB1dF9sZW5ndGgnXSk7CiAgICAgIH0KICAgICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9tYXhsZW5ndGgnXSApICkgewoJJG1heGxlbmd0aCA9IHRyaW0oJHBhcmFtc1snaW5wdXRfbWF4bGVuZ3RoJ10pOwogICAgICB9CiAgICAgIGJyZWFrOwogICAgY2FzZSAxOiAvLyBjaGVja2JveAogICAgICAkbGVuZ3RoID0gMTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDM6IC8vIHRleHRhcmVhCiAgICAgICRsZW5ndGggPSAyNTU7CiAgICAgIGJyZWFrOwogICAgY2FzZSA0OiAvLyBkcm9wZG93bgogICAgICAvLyBnZXQgdGhlIG51bWJlciBvZiBlbXB0eSB2YWx1ZXMKICAgICAgLy8gYW5kIHN1YnRyYWN0IGl0IGZyb20gdGhlIGFycmF5IGNvdW50CiAgICAgICRlbGVtZW50X2NvdW50X2FycmF5ID0gYXJyYXlfY291bnRfdmFsdWVzKCRvcHRpb25zKTsKICAgICAgJGVtcHR5X2VsZW1lbnRfY291bnQgPSAKCSRlbGVtZW50X2NvdW50X2FycmF5WyIiXSArCgkkZWxlbWVudF9jb3VudF9hcnJheVsiXHIiXSArCgkkZWxlbWVudF9jb3VudF9hcnJheVsiX18iXSArCgkkZWxlbWVudF9jb3VudF9hcnJheVsiX19cciJdOwogICAgICAkbGVuZ3RoID0gY291bnQoJG9wdGlvbnMpIC0gJGVtcHR5X2VsZW1lbnRfY291bnQ7CiAgICAgIGJyZWFrOwogICAgZGVmYXVsdDoKICAgICAgJGxlbmd0aCA9IDE7CiAgICB9CgkKICAgIGlmKCAoJHR5cGUgPT0gMCAmJiAoICRsZW5ndGggPCAxIHx8ICRsZW5ndGggPiAyNTUgKSkgfHwKCSgkdHlwZSA9PSA0ICYmICRzZWxvcHRpb25zID09ICcnICkgKXsKICAgICAgJHBhcmFtc1snZXJyb3InXSA9IDE7CiAgICAgICRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkcGFyYW1zJyk7CiAgICAgIGVjaG8gJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRwYXJhbXMnKTsKICAgICAgZWNobyAic2Vsb3B0aW9ucyA9ICIgLiAkc2Vsb3B0aW9uczsKICAgICAgJHRoaXMtPm15UmVkaXJlY3QoJGlkLCdhZGRwcm9wJywkcmV0dXJuaWQsJHBhcmFtcyk7CiAgICAgIHJldHVybjsKICAgIH0KCQogICAgLy8gYW5kIGFkZCB0aGUgcHJvZXBydHkgZGVmaW5pdGlvbgogICAgaWYgKCRzZWxvcHRpb25zKSB7CiAgICAgICRzZWxvcHRpb25zID0gdHJpbSgkc2Vsb3B0aW9ucyk7IC8vIHRyaW0gc3BhY2VzIGV0YwogICAgICAkc2Vsb3B0aW9ucyA9IHRyaW0oJHNlbG9wdGlvbnMsICJfIik7IC8vIHRyaW0gdW5kZXJzY29yZXMgYXQgdGhlIGVuZAogICAgICAkb3B0aW9ucyA9IGV4cGxvZGUoIl9fIiwgJHNlbG9wdGlvbnMpOwogICAgICAkdGhpcy0+RGVsZXRlU2VsZWN0T3B0aW9ucyggJG5hbWUgKTsKICAgICAgJHJlc3VsdCA9ICR0aGlzLT5BZGRTZWxlY3RPcHRpb25zKCAkbmFtZSwgJG9wdGlvbnMgKTsKCiAgICAgIGlmKCAhJHJlc3VsdFswXSApIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJJHBhcmFtc1snbWVzc2FnZSddID0gJHJlc3VsdFsxXTsKCWVjaG8gJHJlc3VsdFsxXTsKCSR0aGlzLT5teVJlZGlyZWN0KCRpZCwnYWRkcHJvcCcsJHJldHVybmlkLCRwYXJhbXMpOwogICAgICB9CiAgICB9CgogICAgJHJlcyA9ICR0aGlzLT5TZXRQcm9wZXJ0eURlZm4oICRwYXJhbXNbJ3Byb3BuYW1lJ10sICRuYW1lLCAkcHJvbXB0LCAkbGVuZ3RoLCAkdHlwZSwgJG1heGxlbmd0aCApOwogICAgaWYoICRyZXMgPT0gZmFsc2UgKQogICAgICB7CgkkcGFyYW1zWydlcnJvciddID0gMTsKCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9kYmVycm9yJyk7CgkkdGhpcy0+bXlSZWRpcmVjdFRvVGFiKCRpZCwncHJvcGVydGllcycsJHBhcmFtcyk7CglyZXR1cm47CiAgICAgIH0KCiAgICAkdGhpcy0+bXlSZWRpcmVjdFRvVGFiKCRpZCwncHJvcGVydGllcycpOwogIH0KCgogIGZ1bmN0aW9uIF9Eb0VkaXRVc2VyU3RlcDEoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgLy8gYXJlIHdlIGNhbmNlbGxpbmcKICAgIGlmIChpc3NldCAoJHBhcmFtc1snY2FuY2VsJ10pKQogICAgICB7CgkkdGhpcy0+bXlSZWRpcmVjdFRvVGFiKCRpZCwgJ3VzZXJzJyApOwogICAgICB9CgogICAgaWYgKCAhaXNzZXQoJHBhcmFtc1sndXNlcl9pZCddKSApCiAgICAgIHsKCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnKSk7CglyZXR1cm47CiAgICAgIH0KCiAgICAvLyBtYWtlIHN1cmUgdGhlIHBhcmFtZXRlcnMgYXJlIGZpbGxlZCBpbgogICAgJHVzZXJfaWQgICA9IHRyaW0oJHBhcmFtc1sndXNlcl9pZCddKTsKICAgICR1c2VybmFtZSA9IHRyaW0oJHBhcmFtc1snaW5wdXRfdXNlcm5hbWUnXSk7CiAgICAkcGFzc3dvcmQgPSB0cmltKCRwYXJhbXNbJ2lucHV0X3Bhc3N3b3JkJ10pOwogICAgJHJlcGVhdCAgID0gdHJpbSgkcGFyYW1zWydpbnB1dF9yZXBlYXRwYXNzd29yZCddKTsKICAgIC8vIG1vcm9uIGxvb2sgaGVyZQovLyAgICAgJHByb3BuYW1lID0gdHJpbSgkcGFyYW1zWydpbnB1dF9wcm9wbmFtZSddKTsKLy8gICAgICRwcm9wbmFtZSA9IHRyaW0oJHBhcmFtc1snaW5wdXRfcHJvcHZhbHVlJ10pOwoKICAgICRyZXQgPSAkdGhpcy0+X2hhbmRsZVVzZXJJbmZvVmFsaWRhdGlvbiggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICRtZXNzYWdlLCBmYWxzZSwgCgkJCQkJICAgICB0cnVlLCBmYWxzZSApOwogICAgc3dpdGNoKCAkcmV0ICkKICAgICAgewogICAgICBjYXNlIC0xOiAvLyBlcnJvcgoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnZXJyb3InLCAiMSIpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnbWVzc2FnZScsICRtZXNzYWdlICk7CgkkdGhpcy0+X0Rpc3BsYXlBZG1pbkVkaXRVc2VyU3RlcDFQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJcmV0dXJuOwogICAgICBjYXNlIDA6ICAvLyBubyBlcnJvciwgYnV0IGRvbid0IGNvbnRpbnVlIG9wZXJhdGlvbgoJJHRoaXMtPl9EaXNwbGF5QWRtaW5Vc2VyUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCXJldHVybjsKICAgICAgY2FzZSAxOiAgLy8gYWxsIGlzIGdvb2QsIGNvbnRpbnVlIG9wZXJhdGlvbgoJYnJlYWs7CiAgICAgIH0KCiAgICAvLyBsb2FkIHByb3BlcnRpZXMgYW5kIHNldCB0aGVtIHVwCiAgICAvLyBmb3IgdGhlIG5leHQgcGFnZQogICAgJHByb3BzID0gJHRoaXMtPkdldFVzZXJQcm9wZXJ0aWVzKCAkdXNlcl9pZCApOwogICAgZm9yZWFjaCggJHByb3BzIGFzICRwcm9wICkKICAgIHsKICAgICAgJHBhcmFtc1snaW5wdXRfJy4kcHJvcFsndGl0bGUnXV0gPSB1cmxlbmNvZGUoJHByb3BbJ2RhdGEnXSk7CiAgICB9CgogICAgLy8gQW5kIEdvIHRvIHN0ZXAgMgogICAgJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2RvX2VkaXR1c2VyMicsICRyZXR1cm5pZCwkcGFyYW1zICk7CgogIH0KCgogIGZ1bmN0aW9uIF9Eb0VkaXRVc2VyU3RlcDMoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgLy8gZG8gd2Ugd2FudCB0byBnbyBiYWNrCiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2JhY2snXSApICkKICAgICAgewoJLy8geXVwIHdlIGRvCgkkcGFyYW1zID0gZXhwbG9kZV93aXRoX2tleSggJHBhcmFtc1snc3RlcDFfcGFyYW1zJ10gKTs7CgkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZWRpdHVzZXInLCAkcmV0dXJuaWQsJHBhcmFtcyApOwogICAgICB9CgogICAgaWYoICFpc3NldCggJHBhcmFtc1sndXNlcl9pZCddICkgKQogICAgICB7CgkkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsCgkJCQkgJHRoaXMtPkxhbmcoJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcycpKTsKICAgICAgfQoKICAgIC8vIGdldCB0aGUgZmllbGQgaW5mbwogICAgJGZsZGluZm8gPSBhcnJheSgpOwogICAgZm9yZWFjaCggJHBhcmFtcyBhcyAkayA9PiAkdiApCiAgICB7CiAgICAgIGlmKCBwcmVnX21hdGNoKCcvXmhpZGRlbl8vJywgJGsgKSApCgl7CgkgICRmbGRuYW1lID0gc3Vic3RyKCAkaywgc3RybGVuKCdoaWRkZW5fJykpOwoJICAkcHJvcGluZm8gPSBzcGxpdCgnOycsJHYpOwoJICAkZmxkaW5mb1skZmxkbmFtZV0gPSAkcHJvcGluZm87Cgl9CiAgICB9CgogICAgLy8gbm93IGdldCBlYWNoIG9mIHRoZSBmaWVsZHMKICAgICRmaWVsZHMgPSBhcnJheSgpOwogICAgZm9yZWFjaCggJHBhcmFtcyBhcyAkayA9PiAkdiApCiAgICB7CiAgICAgIGlmKCBwcmVnX21hdGNoKCcvXmlucHV0Xy8nLCAkayApICkKCXsKCSAgJGZsZG5hbWUgPSBzdWJzdHIoICRrLCBzdHJsZW4oJ2lucHV0XycpKTsKCSAgJGZpZWxkc1skZmxkbmFtZV0gPSAkdjsgCgl9CiAgICB9CgogICAgLy8gbm93IHZhbGlkYXRlCiAgICBmb3JlYWNoKCAkZmxkaW5mbyBhcyAkbmFtZSA9PiAkdmFsICkKICAgIHsKICAgICAgLy8gcHJvY2VzcyBlbXB0eSByZXF1aXJlZCBmaWVsZHMKICAgICAgLy8gd2UgZG9uJ3QgY2FyZSBhYm91dCBlbXB0eSBvcHRpb25hbCBvbmVzCiAgICAgIGlmKCAkdmFsWzNdID09IDIgJiYgKCFpc3NldCggJGZpZWxkc1skbmFtZV0gKSB8fCAkZmllbGRzWyRuYW1lXSA9PSAnJykgKQoJewoJICAvLyBhIHJlcXVpcmVkIGZpZWxkIGlzIGVtcHR5CgkgICRwYXJhbXMgPSBhcnJheV9tZXJnZSggJHBhcmFtcywgZXhwbG9kZV93aXRoX2tleSggJHBhcmFtc1snc3RlcDFfcGFyYW1zJ10gKSk7CgkgICRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJICAkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfbWlzc2luZ19yZXF1aXJlZF9wYXJhbScsJG5hbWUpOwoJICAkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZG9fYWRkdXNlcjInLCAkcmV0dXJuaWQsJHBhcmFtcyApOwoJICByZXR1cm47Cgl9CgogICAgICAvLyB2YWxpZGF0ZSBmaWxsZWQgaW4gZmllbGRzCiAgICAgIGlmKCBpc3NldCggJGZpZWxkc1skbmFtZV0gKSApCgl7CgkgIHN3aXRjaCggJHZhbFsxXSApCgkgICAgewoJICAgIGNhc2UgMDogLy8gdGV4dAoJICAgICAgLy8gbm90IG11Y2ggd2UgY2FuIGRvIHRvIHZhbGlkYXRlIGEgdGV4dCBmaWVsZC4KCSAgICAgIGJyZWFrOwoJICAgIGNhc2UgMTogLy8gY2hlY2tib3gKCSAgICAgIC8vIG9yIGEgY2hlY2tib3gKCSAgICAgIGJyZWFrOwoJICAgIGNhc2UgMjogLy8gZW1haWwKCSAgICAgIC8vIGVtYWlsIGFkZHJlc3NlcyBjYW4gYmUgdmFsaWRhdGVkIHRob3VnaAoJICAgICAgYnJlYWs7CgkgICAgY2FzZSAzOiAvLyB0ZXh0YXJlYQoJICAgICAgLy8gbWF5YmUgc2l6ZT8KCSAgICAgIGJyZWFrOwoJICAgIGNhc2UgNDogLy8gZHJvcGRvd24KCSAgICAgIC8vIEhvdyBjYW4gd2UgdmFsaWRhdGUgYSBkcm9wZG93bj8KCSAgICAgIGJyZWFrOwoJICAgIH0KCX0KICAgIH0KCiAgICAvLyBnZXQgdGhlIHBhcm1zIGZyb20gdGhlIGZpcnN0IHN0ZXAKICAgICRwYXJtczEgPSBleHBsb2RlX3dpdGhfa2V5KCAkcGFyYW1zWydzdGVwMV9wYXJhbXMnXSApOwogICAgCiAgICAvLyBhbmQgbWVyZ2UgZW0gaW50byAkcGFyYW1zIHNvIHdlIGNhbiBhY3R1YWxseSBhZGQgdGhlIHVzZXIgYWNjb3VudAogICAgJHBhcmFtcyA9IGFycmF5X21lcmdlKCAkcGFyYW1zLCAkcGFybXMxICk7CgogICAgLy8gbm93IGZpbmQgb3V0IHdoaWNoIGdyb3VwcyBoZSdzIGEgbWVtYmVyIG9mCiAgICAkZ3JwaWRzID0gYXJyYXkoKTsKICAgIGZvcmVhY2goICRwYXJhbXMgYXMgJGsgPT4gJHYgKQogICAgewogICAgICBpZiggcHJlZ19tYXRjaCgnL15tZW1iZXJvZl8vJywgJGsgKSApCgl7CgkgICRncnBpZHNbXSA9ICRwYXJhbXNbJGtdOwoJfQogICAgfQoKICAgICR1c2VyX2lkID0gJyc7CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ3VzZXJfaWQnXSApICkKICAgICAgewoJJHVzZXJfaWQgPSAkcGFyYW1zWyd1c2VyX2lkJ107CiAgICAgIH0KICAgIGVsc2UgCiAgICAgIHsKCSR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2Vycm9yJywgIjEiKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ21lc3NhZ2UnLCAkcmV0WzFdICk7CgkkdGhpcy0+X0Rpc3BsYXlBZG1pbkFkZFVzZXJTdGVwMlBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CglyZXR1cm47CQogICAgICB9CgogICAgJHVzZXJuYW1lID0gJyc7CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X3VzZXJuYW1lJ10gKSApCiAgICAgIHsKCSR1c2VybmFtZSA9ICRwYXJhbXNbJ2lucHV0X3VzZXJuYW1lJ107CiAgICAgIH0KICAgICRwYXNzd29yZCA9ICcnOwogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9wYXNzd29yZCddICkgJiYgJHBhcmFtc1snaW5wdXRfcGFzc3dvcmQnXSAhPSAnJyApCiAgICAgIHsKCSRwYXNzd29yZCA9ICRwYXJhbXNbJ2lucHV0X3Bhc3N3b3JkJ107CiAgICAgIH0KICAgICRleHBpcmVzID0gc3RydG90aW1lKCcrMTAgeWVhcnMnLCB0aW1lKCkpOwogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9leHBpcmVzZGF0ZSddICkgKQogICAgICB7CgkkZXhwaXJlc2RhdGUgPSAkcGFyYW1zWydpbnB1dF9leHBpcmVzZGF0ZSddOwogICAgICB9CgogICAgLy8gYW5kIFNldCB0aGUgdXNlcgogICAgJHJldCA9ICR0aGlzLT5TZXRVc2VyKCAkdXNlcl9pZCwgJHVzZXJuYW1lLCAkcGFzc3dvcmQgKTsKICAgIGlmKCAkcmV0WzBdID09IGZhbHNlICkKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnZXJyb3InLCAiMSIpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnbWVzc2FnZScsICRyZXRbMV0gKTsKCSR0aGlzLT5fRGlzcGxheUFkbWluQWRkVXNlclN0ZXAyUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCXJldHVybjsJCiAgICAgIH0KCiAgICAvLyBhbmQgdGhlbiBhZGQgaGltIHRvIGhpcyBncm91cHMKICAgICRyZXQgPSAkdGhpcy0+U2V0VXNlckdyb3VwcyggJHVzZXJfaWQsICRncnBpZHMgKTsKICAgIGlmKCAkcmV0WzBdID09IGZhbHNlICkKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnZXJyb3InLCAiMSIpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnbWVzc2FnZScsICR0aGlzLT5MYW5nKCdlcnJvcl9jYW50YXNzaWdudXNlcicpICk7CgkkdGhpcy0+X0Rpc3BsYXlBZG1pbkFkZFVzZXJTdGVwMlBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CglyZXR1cm47CQogICAgICB9IAoKICAgIC8vIGFuZCB0aGVuIGFkZCBoaXMgcHJvcGVydGllcwogICAgJHRoaXMtPkRlbGV0ZVVzZXJQcm9wZXJ0eUZ1bGwoICIiLCAkdXNlcl9pZCwgdHJ1ZSApOwogICAgZm9yZWFjaCggJGZpZWxkcyBhcyAkayA9PiAkdiApCiAgICB7CiAgICAgICRyZXQgPSAkdGhpcy0+U2V0VXNlclByb3BlcnR5RnVsbCggJGssICR2LCAkdXNlcl9pZCApOwogICAgICBpZiggJHJldCA9PSBmYWxzZSApCgl7CgkgICRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJICAkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+bGFuZygnZXJyb3InKTsKCSAgJHRoaXMtPl9EaXNwbGF5QWRtaW5BZGRVc2VyU3RlcDJQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJICByZXR1cm47Cgl9CiAgICB9CgogICAgLy8gYW5kIHdlJ3JlIGRvbmUKICAgICR0aGlzLT5teVJlZGlyZWN0VG9UYWIoJGlkLCAndXNlcnMnICk7CiAgfQoKCiAgZnVuY3Rpb24gX0RvRm9yZ290UGFzc3dvcmQoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgaWYoICFpc3NldCggJHBhcmFtc1snaW5wdXRfdXNlcm5hbWUnXSApICApCiAgICAgIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcycpOwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2ZvcmdvdHB3JywgJHJldHVybmlkLCRwYXJhbXMgKTsKCXJldHVybjsKICAgICAgfQogICAgCiAgICAvLyBzZWUgaWYgd2UgY2FuIGZpbmQgdGhpcyB1c2VyCiAgICAkdWlkID0gJHRoaXMtPkdldFVzZXJJRCggJHBhcmFtc1snaW5wdXRfdXNlcm5hbWUnXSApOwogICAgaWYoICEkdWlkICkKICAgICAgewoJJHBhcmFtc1snZXJyb3InXSA9IDE7CgkkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfdXNlcm5vdGZvdW5kJyk7CgkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAnZm9yZ290cHcnLCAkcmV0dXJuaWQsJHBhcmFtcyApOwoJcmV0dXJuOwogICAgICB9CgoKICAgIC8vIHNlZSBpZiB3ZSBjYW4gZGlnIHVwIGFuIGVtYWlsIGFkZHJlc3MgZm9yIGhpbQogICAgJGVtYWlsID0gZmFsc2U7CiAgICAkZGVmbnMgPSAkdGhpcy0+R2V0UHJvcGVydHlEZWZucygpOwogICAgJHByb3BzID0gJHRoaXMtPkdldFVzZXJQcm9wZXJ0aWVzKCAkdWlkICk7CiAgICBpZiggJHByb3BzICkgCiAgICAgIHsKCS8vIHdlIGhhdmUgcHJvcGVydGllcyBmb3IgdGhpcyB1c2VyCgkvLyBub3cgc2VlIGlmIHdlIGhhdmUgYW4gZW1haWwgZmllbGQKCS8vIHdlJ3JlIGdvbm5hIGl0ZXJhdGUgdGhyb3VnaCB0aGUgcHJvcGVydGllcyB0aWxsIG9uZSBpcyBhbiBlbWFpbCB0eXBlCgkvLyB0aGVuIHdlJ3JlIGdvbm5hIGFzayB0aGUgdXNlciBpZiB0aGlzIGlzIHRoZSByaWdodCBhZGRyZXNzLi4KCWZvcmVhY2goICRwcm9wcyBhcyAkcHJvcGUgKQoJewoJICBmb3JlYWNoKCAkZGVmbnMgYXMgJGRlZm5lICkKCSAgewoJICAgIGlmKCAkcHJvcGVbJ3RpdGxlJ10gPT0gJGRlZm5lWyduYW1lJ10gJiYgJGRlZm5lWyd0eXBlJ10gPT0gMiAmJiAkZW1haWwgPT0gZmFsc2UgKQoJICAgICAgewoJCS8vIGZvdW5kIGEgbWF0Y2ggYW5kIGl0J3MgYW4gZW1haWwgZmllbGQKCQkkZW1haWwgPSAkcHJvcGVbJ2RhdGEnXTsKCQlicmVhazsKCSAgICAgIH0KCSAgfQoKCSAgaWYoICRlbWFpbCAhPSBmYWxzZSApCgkgICAgewoJICAgICAgYnJlYWs7CgkgICAgfQoJfQoKCWlmKCAhJGVtYWlsICkKCSAgewoJICAgICRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJICAgICRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9ub2VtYWlsYWRkcmVzcycpOwoJICAgICR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdmb3Jnb3RwdycsICRyZXR1cm5pZCwkcGFyYW1zICk7CgkgICAgcmV0dXJuOwoJICB9CgllbHNlCgkgIHsKCSAgICAkY21zbWFpbGVyID0gJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdDTVNNYWlsZXInKTsKCSAgICBpZiggISRjbXNtYWlsZXIgKQoJICAgICAgewoJCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9ub21haWxlcm1vZHVsZScpOwoJCSR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdmb3Jnb3RwdycsICRyZXR1cm5pZCwkcGFyYW1zICk7CgkJcmV0dXJuOwoJICAgICAgfQoKCSAgICAvLyB3ZSBmb3VuZCBhbmUgbWFpbCBhZGRyZXNzCgkgICAgLy8gZ2VuZXJhdGUgYSBjb2RlLCBhbmQgc3RvcmUgaXQgc29tZXBsYWNlCgkgICAgLy8gYnV0IHRoYXQgbWVhbnMgd2UgZ290dGEgY2xlYW4gdGhlc2UgdGhpbmdzIHVwCgkgICAgLy8gZnJvbSB0aW1lIHRvIHRpbWUuCgkgICAgJGNvZGUgPSAkdGhpcy0+R2VuZXJhdGVSYW5kb21QcmludGFibGVTdHJpbmcoKTsKCSAgICBpZiggISR0aGlzLT5TZXRVc2VyVGVtcENvZGUoICR1aWQsICRjb2RlICkgKQoJICAgICAgewoJCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9yZXNldGFscmVhZHlzZW50Jyk7CgkJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2ZvcmdvdHB3JywgJHJldHVybmlkLCRwYXJhbXMgKTsKCQlyZXR1cm47CgkgICAgICB9CgoJICAgIC8vIHNlbmQgb3VyIGZ1bmt5IGVtYWlsCgkgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdtZXNzYWdlX2ZvcmdvdHB3ZW1haWwnLAoJCQkJICAkdGhpcy0+TGFuZygnbWVzc2FnZV9mb3Jnb3Rwd2VtYWlsJykpOwoJICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X2NvZGUnLCR0aGlzLT5MYW5nKCdtZXNzYWdlX2NvZGUnKSk7CgkgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdkYXRhX2NvZGUnLCRjb2RlKTsKCSAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF9saW5rJywkdGhpcy0+TGFuZygncHJvbXB0X2xpbmsnKSk7CgkgICAgJHBhcm1zID0gYXJyYXkoICdpbnB1dF91aWQnID0+ICR1aWQsICdpbnB1dF9jb2RlJyA9PiAkY29kZSApOwoJICAgICRsaW5rID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCd2ZXJpZnljb2RlJywkcmV0dXJuaWQsJycsJHBhcm1zLCAnJywgdHJ1ZSk7CgkgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdkYXRhX2xpbmsnLAoJCQkJICAkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ3ZlcmlmeWNvZGUnLCRyZXR1cm5pZCwkbGluaywkcGFybXMpKTsKCSAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2RhdGFfdXJsJywkbGluayk7CgoJICAgICRib2R5ID0gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhYmFzZSgnZmV1c2Vyc19mb3Jnb3RwYXNzd29yZGVtYWlsZm9ybScpOwoKCSAgICAkY21zbWFpbGVyLT5BZGRBZGRyZXNzKCAkZW1haWwgKTsKCSAgICAkY21zbWFpbGVyLT5TZXRCb2R5KCAkYm9keSApOwoJICAgICRjbXNtYWlsZXItPklzSFRNTCh0cnVlKTsKCSAgICBpZiggc3RyaXBfdGFncygkYm9keSkgIT0gJGJvZHkgKQoJICAgICAgewoJCSRjbXNtYWlsZXItPklzSFRNTCh0cnVlKTsKCSAgICAgIH0KCSAgICAkY21zbWFpbGVyLT5TZXRTdWJqZWN0KCR0aGlzLT5MYW5nKCdsb3N0cGFzc3dvcmRfZW1haWxzdWJqZWN0JykpOwoJICAgICRjbXNtYWlsZXItPlNlbmQoKTsKCgkgICAgLy8gYW5kIHRlbGwgdGhlIHVzZXIgc29tZXRoaW5nCgkgICAgJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2luZm9fZm9yZ290cHdtZXNzYWdlc2VudCcsJGVtYWlsKTsKCSAgICAkcGFyYW1zWydza2lwZm9ybWRpc3BsYXknXSA9IDE7CgkgICAgJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2ZvcmdvdHB3JywgJHJldHVybmlkLCRwYXJhbXMgKTsKCSAgICByZXR1cm4gMTsKCSAgfQogICAgICB9CgogICAgLy8gd2UgZm91bmQgbm8gZW1haWwgYWRkcmVzcwogICAgJHBhcmFtc1snZXJyb3InXSA9IDE7CiAgICAkcGFyYW1zWydtZXNhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9jb3VsZG5vdGZpbmRlbWFpbCcpOwogICAgJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ2ZvcmdvdHB3JywgJHJldHVybmlkLCRwYXJhbXMgKTsKICB9CgoKICBmdW5jdGlvbiBfRG9Mb2dpbiggJGlkLCAmJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICBpZiggIWlzc2V0KCAkcGFyYW1zWydpbnB1dF91c2VybmFtZSddICkgfHwgJHBhcmFtc1snaW5wdXRfdXNlcm5hbWUnXSA9PSAnJyApCiAgICAgIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfbWlzc2luZ3VzZXJuYW1lJyk7CgkkdGhpcy0+X0dldFVzZXJMb2dpbkZvcm0oICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CglyZXR1cm47CiAgICAgIH0KCiAgICBpZiggIWlzc2V0KCAkcGFyYW1zWydpbnB1dF9wYXNzd29yZCddICkgfHwgJHBhcmFtc1snaW5wdXRfcGFzc3dvcmQnXSA9PSAnJyApCiAgICAgIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfbWlzc2luZ3Bhc3N3b3JkJyk7CgkkdGhpcy0+X0dldFVzZXJMb2dpbkZvcm0oICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CglyZXR1cm47CiAgICAgIH0KCiAgICAvLyBub3cgdmFsaWRhdGUgdGhlIHBhc3N3b3JkIGFuZCB1c2VybmFtZQogICAgJHJlc3VsdCA9ICR0aGlzLT5Mb2dpbiggJHBhcmFtc1snaW5wdXRfdXNlcm5hbWUnXSwgJHBhcmFtc1snaW5wdXRfcGFzc3dvcmQnXSApOwogICAgaWYoICRyZXN1bHRbMF0gPT0gZmFsc2UgKQogICAgICB7CgkkcGFyYW1zWydlcnJvciddID0gJHJlc3VsdFsxXTsKCSR0aGlzLT5fR2V0VXNlckxvZ2luRm9ybSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCXJldHVybjsKICAgICAgfQogICAgJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksCgkJICAkdGhpcy0+TGFuZygnZnJvbnRlbmR1c2VyX2xvZ2dlZGluJykuIjogIi4kcGFyYW1zWydpbnB1dF91c2VybmFtZSddICk7CgogICAgLy8gd2UncmUgbG9nZ2VkIGluCiAgICAvLyByZWRpcmVjdCBzb21ld2hlcmUgCiAgICAkcGFnZSA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwYWdlaWRfbG9naW4nKTsKICAgIGlmKCBpc3NldCggJHBhcmFtc1sncmV0dXJudG8nXSApICkKICAgICAgewoJJHBhZ2UgPSAkcGFyYW1zWydyZXR1cm50byddOwogICAgICB9CiAgICBpZiggJHBhZ2UgKQogICAgICB7CgkkaWQgPSBDb250ZW50TWFuYWdlcjo6R2V0UGFnZUlERnJvbUFsaWFzKCAkcGFnZSApOwoJaWYoICRpZCApCgkgIHsKCSAgICAkdGhpcy0+UmVkaXJlY3RDb250ZW50KCAkaWQgKTsKCSAgICByZXR1cm47CgkgIH0KICAgICAgfQogICAgJHRoaXMtPlJlZGlyZWN0Q29udGVudCggJHJldHVybmlkICk7CiAgfQoKCiAgZnVuY3Rpb24gX0RvTG9nb3V0KCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgICR0aGlzLT5Mb2dvdXQoKTsKICAgICR0aGlzLT5BdWRpdCggMCwgJHRoaXMtPkxhbmcoJ2ZyaWVuZGx5bmFtZScpLAoJCSAgJHRoaXMtPkxhbmcoJ2Zyb250ZW5kdXNlcl9sb2dvdXQnKSk7CgogICAgLy8gd2UncmUgbG9nZ2VkIG91dAogICAgLy8gcmVkaXJlY3Qgc29tZXdoZXJlIAogICAgLy8gdG9kbywgYWRkIG1vcmUgb3B0aW9ucyBoZXJlLgogICAgJHBhZ2UgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncGFnZWlkX2xvZ291dCcpOwogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydyZXR1cm50byddICkgKQogICAgICB7CgkkcGFnZSA9ICRwYXJhbXNbJ3JldHVybnRvJ107CiAgICAgIH0KICAgIGlmKCAkcGFnZSApCiAgICAgIHsKCSRpZCA9IENvbnRlbnRNYW5hZ2VyOjpHZXRQYWdlSURGcm9tQWxpYXMoICRwYWdlICk7CglpZiggJGlkICkKCSAgewoJICAgICR0aGlzLT5SZWRpcmVjdENvbnRlbnQoICRpZCApOwoJICAgIHJldHVybjsKCSAgfQogICAgICB9CiAgICAkdGhpcy0+UmVkaXJlY3RDb250ZW50KCAkcmV0dXJuaWQgKTsKICB9CgoKICBmdW5jdGlvbiBfRG9SZXNldFVzZXJBY2NvdW50KCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgICR1aWQgPSAnJzsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfdWlkJ10gKSApCiAgICAgIHsKCSR1aWQgPSB0cmltKCRwYXJhbXNbJ2lucHV0X3VpZCddKTsKICAgICAgfQogICAgJGNvZGUgPSAnJzsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfY29kZSddICkgKQogICAgICB7CgkkY29kZSA9IHRyaW0oJHBhcmFtc1snaW5wdXRfY29kZSddKTsKICAgICAgfQogICAgJHBhc3N3b3JkID0gJyc7CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X3Bhc3N3b3JkJ10gKSApCiAgICAgIHsKCSRwYXNzd29yZCA9IHRyaW0oJHBhcmFtc1snaW5wdXRfcGFzc3dvcmQnXSk7CiAgICAgIH0KICAgICRyZXBlYXRwYXNzd29yZCA9ICcnOwogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9yZXBlYXRwYXNzd29yZCddICkgKQogICAgICB7CgkkcmVwZWF0cGFzc3dvcmQgPSB0cmltKCRwYXJhbXNbJ2lucHV0X3JlcGVhdHBhc3N3b3JkJ10pOwogICAgICB9CgogICAgaWYoICRwYXNzd29yZCA9PSAnJyB8fCAkcmVwZWF0cGFzc3dvcmQgPT0gJycgfHwgCgkkcGFzc3dvcmQgIT0gJHJlcGVhdHBhc3N3b3JkIHx8ICEkdGhpcy0+SXNWYWxpZFBhc3N3b3JkKCRwYXNzd29yZCkpCiAgICAgIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRwYXNzd29yZCcpOwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ3ZlcmlmeWNvZGUnLCAkcmV0dXJuaWQsJHBhcmFtcyApOwoJcmV0dXJuOwogICAgICB9CgogICAgLy8gbm93IHdlIGhhdmUgdG8gdmVyaWZ5IHRoZSBjb2RlCiAgICAkcmVzdWx0ID0gJHRoaXMtPkdldFVzZXJUZW1wQ29kZSggJHVpZCApOwogICAgaWYoICRyZXN1bHRbMF0gPT0gRkFMU0UgKQogICAgICB7CgkkcGFyYW1zWydlcnJvciddID0gMTsKCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICRyZXN1bHRbMV07CgkkdGhpcy0+bXlSZWRpcmVjdCggJGlkLCAndmVyaWZ5Y29kZScsICRyZXR1cm5pZCwkcGFyYW1zICk7CglyZXR1cm47CiAgICAgIH0KICAgICRkYmNvZGUgPSAkcmVzdWx0WzFdWydjb2RlJ107CgogICAgaWYoICRkYmNvZGUgIT0gJGNvZGUgKQogICAgICB7CgkkcGFyYW1zWydlcnJvciddID0gMTsKCSRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkY29kZScpOwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ3ZlcmlmeWNvZGUnLCAkcmV0dXJuaWQsJHBhcmFtcyApOwoJcmV0dXJuOwogICAgICB9CgogICAgLy8gd2hldywgd2UgZ290IGl0Li4uIG5vdyB3ZSBjYW4gcmVzZXQgdGhlIHBhc3N3b3JkCiAgICAkcmV0ID0gJHRoaXMtPlNldFVzZXJQYXNzd29yZCggJHVpZCwgJHBhc3N3b3JkICk7CiAgICBpZiggJHJldFswXSAhPSBUUlVFICkKICAgICAgewoJJHBhcmFtc1snZXJyb3InXSA9IDE7CgkkcGFyYW1zWydtZXNzYWdlJ10gPSAkcmV0WzFdOwoJJHRoaXMtPm15UmVkaXJlY3QoICRpZCwgJ3ZlcmlmeWNvZGUnLCAkcmV0dXJuaWQsJHBhcmFtcyApOwoJcmV0dXJuOwogICAgICB9CgogICAgLy8gYW5kIGRlbGV0ZSB0aGUgY29kZQogICAgJHRoaXMtPlJlbW92ZVVzZXJUZW1wQ29kZSggJHVpZCApOwoKICAgIC8vIGFuZCBkaXNwbGF5IGEgbmljZSB3YXJtIGZ1enp5IG1lc3NhZ2UKICAgIC8vIHRvZG8KICAgICR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkZWZhdWx0JywgJHJldHVybmlkICk7CiAgICBicmVhazsKICB9CgogIAogIGZ1bmN0aW9uIF9Eb1NldENoYW5nZVNldHRpbmdzVGVtcGxhdGUoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydkZWZhdWx0cyddICkgKQogICAgICB7CgkkdGhpcy0+U2V0VGVtcGxhdGUoJ2ZldXNlcnNfY2hhbmdlc2V0dGluZ3Nmb3JtJywgJHRoaXMtPmRmbHRfY2hhbmdlc2V0dGluZ3N0ZW1wbGF0ZSk7CiAgICAgIH0KICAgIGVsc2UKICAgICAgewoJJHRoaXMtPlNldFRlbXBsYXRlKCdmZXVzZXJzX2NoYW5nZXNldHRpbmdzZm9ybScsICRwYXJhbXNbJ3RlbXBsYXRlY29udGVudCddKTsKICAgICAgfQogICAgJHRoaXMtPm15UmVkaXJlY3RUb1RhYigkaWQsICdjaGFuZ2VzZXR0aW5nc190ZW1wbGF0ZScgKTsKICB9CgoKICBmdW5jdGlvbiBfRG9TZXRGb3Jnb3RQV1RlbXBsYXRlKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snZGVmYXVsdHMnXSApICkKICAgICAgewoJJHRoaXMtPlNldFRlbXBsYXRlKCdmZXVzZXJzX2ZvcmdvdHBhc3N3b3JkZm9ybScsICR0aGlzLT5kZmx0X2ZvcmdvdHBhc3N3b3JkdGVtcGxhdGUxKTsKCSR0aGlzLT5TZXRUZW1wbGF0ZSgnZmV1c2Vyc19mb3Jnb3RwYXNzd29yZGVtYWlsZm9ybScsICR0aGlzLT5kZmx0X2ZvcmdvdHBhc3N3b3JkdGVtcGxhdGUyKTsKCSR0aGlzLT5TZXRUZW1wbGF0ZSgnZmV1c2Vyc19mb3Jnb3RwYXNzd29yZHZlcmlmeWZvcm0nLCR0aGlzLT5kZmx0X2ZvcmdvdHBhc3N3b3JkdGVtcGxhdGUzKTsKICAgICAgfQogICAgZWxzZQogICAgICB7CgkkdGhpcy0+U2V0VGVtcGxhdGUoJ2ZldXNlcnNfZm9yZ290cGFzc3dvcmRmb3JtJywgJHBhcmFtc1sndGVtcGxhdGVjb250ZW50MSddKTsKCSR0aGlzLT5TZXRUZW1wbGF0ZSgnZmV1c2Vyc19mb3Jnb3RwYXNzd29yZGVtYWlsZm9ybScsICRwYXJhbXNbJ3RlbXBsYXRlY29udGVudDInXSk7OwoJJHRoaXMtPlNldFRlbXBsYXRlKCdmZXVzZXJzX2ZvcmdvdHBhc3N3b3JkdmVyaWZ5Zm9ybScsICRwYXJhbXNbJ3RlbXBsYXRlY29udGVudDMnXSk7OwogICAgICB9CiAgICAkdGhpcy0+bXlSZWRpcmVjdFRvVGFiKCRpZCwgJ2ZvcmdvdHBhc3N3b3JkX3RlbXBsYXRlJyApOwogIH0KCgogIGZ1bmN0aW9uIF9Eb1NldExvZ2luVGVtcGxhdGUoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydkZWZhdWx0cyddICkgKQogICAgICB7CgkkdGhpcy0+U2V0VGVtcGxhdGUoJ2ZldXNlcnNfbG9naW5mb3JtJywgJHRoaXMtPmRmbHRfbG9naW5mb3JtdGVtcGxhdGUpOwogICAgICB9CiAgICBlbHNlCiAgICAgIHsKCSR0aGlzLT5TZXRUZW1wbGF0ZSgnZmV1c2Vyc19sb2dpbmZvcm0nLCAkcGFyYW1zWyd0ZW1wbGF0ZWxvZ2luZm9ybSddKTsKICAgICAgfQogICAgJHRoaXMtPm15UmVkaXJlY3RUb1RhYigkaWQsICdsb2dpbnRlbXBsYXRlJyApOwogIH0KCiAgCiAgZnVuY3Rpb24gX0RvU2V0TG9nb3V0VGVtcGxhdGUoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydkZWZhdWx0cyddICkgKQogICAgICB7CgkkdGhpcy0+U2V0VGVtcGxhdGUoJ2ZldXNlcnNfbG9nb3V0Zm9ybScsICR0aGlzLT5kZmx0X2xvZ291dGZvcm10ZW1wbGF0ZSk7CiAgICAgIH0KICAgIGVsc2UKICAgICAgewoJJHRoaXMtPlNldFRlbXBsYXRlKCdmZXVzZXJzX2xvZ291dGZvcm0nLCAkcGFyYW1zWyd0ZW1wbGF0ZWxvZ291dGZvcm0nXSk7CiAgICAgIH0KICAgICR0aGlzLT5teVJlZGlyZWN0VG9UYWIoJGlkLCAnbG9nb3V0dGVtcGxhdGUnLCAkcGFyYW1zKTsKICB9CgogIAogIGZ1bmN0aW9uIF9Eb1NldFByZWZzKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfcmVtb3ZlYWxsJ10gKSApCiAgICAgIHsKCSR0aGlzLT5FeHBpcmVUZW1wQ29kZXMoJy01IHllYXJzJyk7CglyZXR1cm47CiAgICAgIH0KCiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X3JlbW92ZTF3ZWVrJ10gKSApCiAgICAgIHsKCSR0aGlzLT5FeHBpcmVUZW1wQ29kZXMoJy0xIHdlZWsnKTsKCSR0aGlzLT5teVJlZGlyZWN0VG9UYWIoJGlkLCAncHJlZnMnKTsKICAgICAgfQoKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfcmVtb3ZlMW1vbnRoJ10gKSApCiAgICAgIHsKCSR0aGlzLT5FeHBpcmVUZW1wQ29kZXMoJy0xIG1vbnRoJyk7CgkkdGhpcy0+bXlSZWRpcmVjdFRvVGFiKCRpZCwgJ3ByZWZzJyk7CiAgICAgIH0KCiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2NhbmNlbCddICkgKQogICAgICB7CgkkdGhpcy0+bXlSZWRpcmVjdFRvVGFiKCRpZCwgJ3ByZWZzJyApOwogICAgICB9CgogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9taW5wd2xlbiddICkgJiYgCglpc3NldCggJHBhcmFtc1snaW5wdXRfbWF4cHdsZW4nXSApICkKICAgICAgewoJaWYoICRwYXJhbXNbJ2lucHV0X21pbnB3bGVuJ10gPj0gJHBhcmFtc1snaW5wdXRfbWF4cHdsZW4nXSB8fAoJICAgICRwYXJhbXNbJ2lucHV0X21pbnB3bGVuJ10gPD0gMCApCgkgIHsKCSAgICAkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkLAoJCQkJICAgICAgJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRwYXNzd29yZGxlbmd0aHMnKSApOwoJICAgIHJldHVybjsKCSAgfQoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ21pbl9wYXNzd29yZGxlbmd0aCcsJHBhcmFtc1snaW5wdXRfbWlucHdsZW4nXSk7CgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnbWF4X3Bhc3N3b3JkbGVuZ3RoJywkcGFyYW1zWydpbnB1dF9tYXhwd2xlbiddKTsKICAgICAgfQoKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfbWludW5sZW4nXSApICYmIAoJaXNzZXQoICRwYXJhbXNbJ2lucHV0X21heHVubGVuJ10gKSApCiAgICAgIHsKCWlmKCAkcGFyYW1zWydpbnB1dF9taW51bmxlbiddID49ICRwYXJhbXNbJ2lucHV0X21heHVubGVuJ10gfHwKCSAgICAkcGFyYW1zWydpbnB1dF9taW51bmxlbiddIDw9IDAgKQoJICB7CgkgICAgJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwKCQkJCSAgICAgICR0aGlzLT5MYW5nKCdlcnJvcl9pbnZhbGlkdXNlcm5hbWVsZW5ndGhzJykgKTsKCSAgICByZXR1cm47CgkgIH0KCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdtaW5fdXNlcm5hbWVsZW5ndGgnLCRwYXJhbXNbJ2lucHV0X21pbnVubGVuJ10pOwoJJHRoaXMtPlNldFByZWZlcmVuY2UoJ21heF91c2VybmFtZWxlbmd0aCcsJHBhcmFtc1snaW5wdXRfbWF4dW5sZW4nXSk7CiAgICAgIH0KCiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgndXNlcl9zZXNzaW9uX2V4cGlyZXMnLCAkcGFyYW1zWydpbnB1dF9zZXNzaW9udGltZW91dCddKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkZWZhdWx0X2dyb3VwJywgJHBhcmFtc1snaW5wdXRfZGZsdGdyb3VwJ10pOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RvX3NtdHBfdmFsaWRhdGVfZW1haWwnLCAkcGFyYW1zWydpbnB1dF9zbXRwdmFsaWRhdGUnXSk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgncmVxdWlyZWRfZmllbGRfbWFya2VyJywgJHBhcmFtc1snaW5wdXRfcmVxdWlyZWRmaWVsZG1hcmtlciddKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdyZXF1aXJlZF9maWVsZF9jb2xvcicsICRwYXJhbXNbJ2lucHV0X3JlcXVpcmVkZmllbGRjb2xvciddKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdyZXF1aXJlX29uZWdyb3VwJywgJHBhcmFtc1snaW5wdXRfcmVxdWlyZW9uZWdyb3VwJ10pOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2hpZGRlbl9maWVsZF9tYXJrZXInLCAkcGFyYW1zWydpbnB1dF9oaWRkZW5maWVsZG1hcmtlciddKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdoaWRkZW5fZmllbGRfY29sb3InLCAkcGFyYW1zWydpbnB1dF9oaWRkZW5maWVsZGNvbG9yJ10pOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3BhZ2VpZGZvcmdvdHBhc3N3ZCcsICRwYXJhbXNbJ2lucHV0X2ZvcmdvdHB3X3BhZ2UnXSk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgncGFnZWlkX2NoYW5nZXNldHRpbmdzJywgJHBhcmFtc1snaW5wdXRfY2hhbmdlc2V0dGluZ3NfcGFnZSddKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdwYWdlaWRfbG9naW4nLCAkcGFyYW1zWydpbnB1dF9sb2dpbl9wYWdlJ10pOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3BhZ2VpZF9sb2dvdXQnLCAkcGFyYW1zWydpbnB1dF9sb2dvdXRfcGFnZSddKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdhbGxvd19kdXBsaWNhdGVfZW1haWxzJywgJHBhcmFtc1snaW5wdXRfYWxsb3dfZHVwbGljYXRlX2VtYWlscyddKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdwYXNzd29yZGZsZGxlbmd0aCcsICRwYXJhbXNbJ2lucHV0X3B3ZmxkbGVuJ10pOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3VzZXJuYW1lZmxkbGVuZ3RoJywgJHBhcmFtc1snaW5wdXRfdW5mbGRsZW4nXSk7CiAgICAKICAgICR0aGlzLT5teVJlZGlyZWN0VG9UYWIoJGlkLCAncHJlZnMnKTsKICB9CgogIAogIGZ1bmN0aW9uIF9Eb1NldFByb3BlcnRpZXMoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydjYW5jZWwnXSApICkKICAgICAgewoJLy8gd2UgYXJlIGNhbmNlbGxpbmcKCSR0aGlzLT5teVJlZGlyZWN0VG9UYWIgKCRpZCwgJ3Byb3BlcnRpZXMnICk7CiAgICAgIH0KCiAgICAvLyBjaGVjayBpZiB3ZSBhcmUgYWRkaW5nIGEgcHJvcGVydHkKICAgIGlmKCBpc3NldCggJHBhcmFtc1sncHJvcGFkZCddICkgKQogICAgICB7CgkvLyB5dXAKCS8vIHZhbGlkYXRlIGZpZWxkcwoJJG5hbWUgPSB0cmltKCRwYXJhbXNbJ2lucHV0X25hbWUnXSk7CgkkbmFtZSA9IHN0cnRvbG93ZXIocHJlZ19yZXBsYWNlKCcvIC8nLCdfJywkbmFtZSkpOwoJJHByb21wdCA9IHRyaW0oJHBhcmFtc1snaW5wdXRfcHJvbXB0J10pOwoJJGxlbmd0aCA9IHRyaW0oJHBhcmFtc1snaW5wdXRfbGVuZ3RoJ10pOwoJJHR5cGUgPSAkcGFyYW1zWydpbnB1dF90eXBlJ107CgoJaWYoICRuYW1lID09ICcnIHx8ICRwcm9tcHQgPT0gJycgKQoJICB7CgkgICAgJHBhcmFtc1snZXJyb3InXSA9IDE7CgkgICAgJHBhcmFtc1snbWVzc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnKTsKCSAgICAkdGhpcy0+bXlSZWRpcmVjdFRvVGFiKCAkaWQsICdwcm9wZXJ0aWVzJywgJHBhcmFtcyApOwoJICAgIHJldHVybjsKCSAgfQoKCWlmKCBpc3NldCgkcGFyYW1zWydwcm9wZGVmbiddKSApCgkgIHsKCSAgICAkcHJvcHMgPSBzcGxpdCgiLCIsJHBhcmFtc1sncHJvcGRlZm4nXSk7CgkgICAgZm9yZWFjaCggJHByb3BzIGFzICRwcm9wICkKCSAgICB7CgkgICAgICBsaXN0KCAkZW5hbWUsICRlcHJvbXB0LCAkZXR5cGUsICRlbGVuZ3RoICkgPSBzcGxpdCgiOyIsJHByb3ApOwoJICAgICAgaWYoICRuYW1lID09ICRlbmFtZSApIAoJCXsKCQkgIC8vIG5hbWUgaXMgYWxyZWFkeSB0YWtlbgoJCSAgJHBhcmFtc1snZXJyb3InXSA9IDE7CgkJICAkcGFyYW1zWydtZXNzYWdlJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfZHVwbGljYXRlbmFtZScpOwoJCSAgJHRoaXMtPm15UmVkaXJlY3RUb1RhYiggJGlkLCAncHJvcGVydGllcycsICRwYXJhbXMgKTsKCQkgIHJldHVybjsKCQl9CgkgICAgfQoJICB9CgoJJGVudHJ5ID0gaW1wbG9kZSgiOyIsYXJyYXkoJG5hbWUsJHByb21wdCwkdHlwZSwkbGVuZ3RoKSk7CglpZiggaXNzZXQoJHBhcmFtc1sncHJvcGRlZm4nXSkpCgkgIHsKCSAgICAkcGFyYW1zWydwcm9wZGVmbiddIC49ICIsIi4kZW50cnk7CgkgIH0KCWVsc2UgCgkgIHsKCSAgICAkcGFyYW1zWydwcm9wZGVmbiddID0gJGVudHJ5OwoJICB9CgkkcGFyYW1zWydkb25vdGxvYWRwcm9wcyddID0gMTsKCSR0aGlzLT5teVJlZGlyZWN0VG9UYWIoICRpZCwgJ3Byb3BlcnRpZXMnLCAkcGFyYW1zICk7CglyZXR1cm47CiAgICAgIH0KICAgIGVsc2UgaWYoIGFycmF5X2tleV9leGlzdHNfc3Vic3RyKCAkcGFyYW1zLCAncHJvcGVkaXRfJykgJiYgaXNzZXQoJHBhcmFtc1sncHJvcGRlZm4nXSkpCiAgICAgIHsKCSRrID0gYXJyYXlfZmluZF9rZXlfcmVnZXhwKCAkcGFyYW1zLCAnL15wcm9wZWRpdF8vJyApOwoJJHBvczEgPSBzdHJwb3MoICRrLCAnLScgKTsKCSRwb3MyID0gc3RycnBvcyggJGssICdfJyApOwoJJGtleSAgPSBzdWJzdHIoICRrICwgJHBvczErMSwgJHBvczIgLSAkcG9zMSAtIDEpOwoKCS8vIHdlJ3JlIGVkaXRpbmcgYSBwcm9wZXJ0eQoJLy8gc28gd2UgdGFrZSB0aGUgY3VycmVudCBwcm9wZXJ0eSAoJGtleSkgYW5kIHJlbW92ZSBpdAoJLy8gZnJvbSBwcm9wcywgYW5kIHB1dCBpdCBpbiB0aGUgcGFyYW1zCgkkcHJvcHMgPSBzcGxpdCgnLCcsJHBhcmFtc1sncHJvcGRlZm4nXSk7CgkkbmV3cHJvcHMgPSAiIjsKCWZvcmVhY2goICRwcm9wcyBhcyAkcCApCgl7CgkgICRhcHJvcCA9IHNwbGl0KCI7IiwkcCk7CgkgIGlmKCAkYXByb3BbMF0gPT0gJGtleSApCgkgICAgewoJICAgICAgJHBhcmFtc1snaW5wdXRfbmFtZSddID0gJGFwcm9wWzBdOwoJICAgICAgJHBhcmFtc1snaW5wdXRfcHJvbXB0J10gPSAkYXByb3BbMV07CgkgICAgICAkcGFyYW1zWydpbnB1dF90eXBlJ10gPSAkYXByb3BbMl07CgkgICAgICAkcGFyYW1zWydpbnB1dF9sZW5ndGgnXSA9ICRhcHJvcFszXTsKCSAgICB9CgkgIGVsc2UgCgkgICAgewoJICAgICAgaWYoICRuZXdwcm9wcyA9PSAnJyApCgkJewoJCSAgJG5ld3Byb3BzID0gJHA7CgkJfQoJICAgICAgZWxzZQoJCXsKCQkgICRuZXdwcm9wcyA9ICRuZXdwcm9wcy4iLCIuJHA7CgkJfQoJICAgIH0KCX0KCSRwYXJhbXNbJ3Byb3BkZWZuJ10gPSAkbmV3cHJvcHM7CgkkcGFyYW1zWydkb25vdGxvYWRwcm9wcyddID0gMTsKCSR0aGlzLT5teVJlZGlyZWN0VG9UYWIoICRpZCwgJ3Byb3BlcnRpZXMnLCAkcGFyYW1zICk7CglyZXR1cm47CiAgICAgIH0KICAgIGVsc2UgaWYoIGFycmF5X2tleV9leGlzdHNfc3Vic3RyKCAkcGFyYW1zLCAncHJvcGRlbGV0ZV8nKSAmJiBpc3NldCgkcGFyYW1zWydwcm9wZGVmbiddKSkKICAgICAgewoJJGsgPSBhcnJheV9maW5kX2tleV9yZWdleHAoICRwYXJhbXMsICcvXnByb3BkZWxldGVfLycgKTsKCWxpc3QoICRqdW5rLCAka2V5ICkgPSBzcGxpdCggIl8iLCAkayApOwoKCS8vIHdlJ3JlIGRlbGV0aW5nIGEgcHJvcGVydHkKCS8vIHNvIHdlIHRha2UgdGhlIGN1cnJlbnQgcHJvcGVydHkgKCRrZXkpIGFuZCByZW1vdmUgaXQKCS8vIGZyb20gcHJvcHMsIAoJJHByb3BzID0gc3BsaXQoJywnLCRwYXJhbXNbJ3Byb3BkZWZuJ10pOwoJJG5ld3Byb3BzID0gIiI7Cglmb3JlYWNoKCAkcHJvcHMgYXMgJHAgKQoJewoJICAkYXByb3AgPSBzcGxpdCgiOyIsJHApOwoJICBpZiggJGFwcm9wWzBdID09ICRrZXkgKQoJICAgIHsKCSAgICAgIGNvbnRpbnVlOwoJICAgIH0KCSAgZWxzZSAKCSAgICB7CgkgICAgICBpZiggJG5ld3Byb3BzID09ICcnICkKCQl7CgkJICAkbmV3cHJvcHMgPSAkcDsKCQl9CgkgICAgICBlbHNlCgkJewoJCSAgJG5ld3Byb3BzID0gJG5ld3Byb3BzLiIsIi4kcDsKCQl9CgkgICAgfQoJfQoJJHBhcmFtc1sncHJvcGRlZm4nXSA9ICRuZXdwcm9wczsKCSRwYXJhbXNbJ2Rvbm90bG9hZHByb3BzJ10gPSAxOwogICAgICAgICR0aGlzLT5teVJlZGlyZWN0VG9UYWIoICRpZCwgJ3Byb3BlcnRpZXMnLCAkcGFyYW1zICk7CglyZXR1cm47CiAgICAgIH0KCgogICAgLy8gd2UncmUgc3VibWl0dGluZyB0aGUgcHJvcGVydHkgZGVmaW5pdGlvbnMKICAgICRwcm9wcyA9IHNwbGl0KCcsJywkcGFyYW1zWydwcm9wZGVmbiddKTsKICAgICR0aGlzLT5EZWxldGVQcm9wZXJ0eURlZm5zKCk7CiAgICBmb3JlYWNoKCAkcHJvcHMgYXMgJHByb3AgKQogICAgewogICAgICAkYXByb3AgPSBzcGxpdCgiOyIsJHByb3ApOwoKICAgICAgJHJldCA9ICR0aGlzLT5BZGRQcm9wZXJ0eURlZm4oICRhcHJvcFswXSwgJGFwcm9wWzFdLCAkYXByb3BbMl0sICRhcHJvcFszXSwgJGFwcm9wWzRdICk7CiAgICAgIGlmKCAkcmV0WzBdID09IGZhbHNlICkKCXsKCSAgLy8gbmFtZSBpcyBhbHJlYWR5IHRha2VuCgkgICR0aGlzLT5teVJlZGlyZWN0VG9UYWIoJGlkLCAncHJvcGVydGllcycgKTsKCSAgcmV0dXJuOwoJfQogICAgfQoKICAgICR0aGlzLT5teVJlZGlyZWN0VG9UYWIoJGlkLCAncHJvcGVydGllcycsICRwYXJhbXMgKTsKICAgIHJldHVybjsKICB9CgoKICBmdW5jdGlvbiBfRG9Vc2VyQWN0aW9uKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snZm9ybSddICkgKQogICAgICB7Cglzd2l0Y2goICRwYXJhbXNbJ2Zvcm0nXSApIAoJICB7CgkgIGNhc2UgJ2xvZ2luJzoKCSAgICAkdGhpcy0+X0dldFVzZXJMb2dpbkZvcm0oJGlkLCRwYXJhbXMsJHJldHVybmlkKTsKCSAgICBicmVhazsKCSAgY2FzZSAnbG9nb3V0JzoKCSAgICAkdGhpcy0+X0dldFVzZXJMb2dvdXRGb3JtKCRpZCwkcGFyYW1zLCRyZXR1cm5pZCk7CgkgICAgYnJlYWs7CgkgIGNhc2UgJ2ZvcmdvdHB3JzoKCSAgICAkdGhpcy0+X0Rpc3BsYXlVc2VyRm9yZ290UGFzc3dvcmRQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJICAgIGJyZWFrOwoJICBjYXNlICdjaGFuZ2VzZXR0aW5ncyc6CgkgICAgJHRoaXMtPl9EaXNwbGF5VXNlclNldHRpbmdzUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCSAgICBicmVhazsKCSAgfQoJcmV0dXJuOwogICAgICB9CgogICAgaWYoICEkdGhpcy0+TG9nZ2VkSW4oKSApIAogICAgICB7CgkkdGhpcy0+X0dldFVzZXJMb2dpbkZvcm0oJGlkLCRwYXJhbXMsJHJldHVybmlkKTsKICAgICAgfQogICAgZWxzZSAKICAgICAgewoJJHRoaXMtPl9HZXRVc2VyTG9nb3V0Rm9ybSgkaWQsJHBhcmFtcywkcmV0dXJuaWQpOwogICAgICB9CiAgfQoKCiAgZnVuY3Rpb24gX0RvVXNlckNoYW5nZVNldHRpbmdzKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgICR1aWQgPSAkdGhpcy0+TG9nZ2VkSW5JZCgpOwogICAgaWYoICR1aWQgPT0gZmFsc2UgKSAKICAgICAgewoJLy8gdXNlciBpc24ndCBsb2dnZWQgaW4KCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsIAoJCQkJICAkdGhpcy0+TGFuZygnZXJyb3Jfbm90bG9nZ2VkaW4nKSk7CglyZXR1cm47CiAgICAgIH0KICAgICRyZXN1bHQgPSAkdGhpcy0+R2V0VXNlckluZm8oICR1aWQgKTsKICAgIGlmKCAkcmVzdWx0WzBdID09IEZBTFNFICkKICAgICAgewoJLy8gdXNlciBpc24ndCBsb2dnZWQgaW4KCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsIAoJCQkJICAkcmVzdWx0WzFdKTsKCXJldHVybjsKICAgICAgfQogICAgJHVpbmZvID0gJHJlc3VsdFsxXTsKCiAgICAkcGFzc3dvcmQgPSB0cmltKCRwYXJhbXNbJ2lucHV0X3Bhc3N3b3JkJ10pOwogICAgJHJlcGVhdCAgID0gdHJpbSgkcGFyYW1zWydpbnB1dF9yZXBlYXRwYXNzd29yZCddKTsKICAgIGlmKCAkcGFzc3dvcmQgIT0gJHJlcGVhdCAmJiAkcGFzc3dvcmQgIT0gJycpCiAgICAgIHsKCSRwYXJhbXNbJ2Vycm9yJ10gPSAxOwoJJHBhcmFtc1snbWVzc2FnZSddID0gJHRoaXMtPkxhbmcoJ2Vycm9yX3Bhc3N3b3JkbWlzbWF0Y2gnKTsKCSR0aGlzLT5SZWRpcmVjdCgkaWQsICdjaGFuZ2VzZXR0aW5ncycsICRyZXR1cm5pZCwgJHBhcmFtcyApOwogICAgICB9CgogICAgLy8gZG8gdmFsaWRhdGlvbiBvZiB0aGUgZmllbGRzLgogICAgZm9yZWFjaCggJHBhcmFtcyBhcyAka2V5ID0+ICR2YWwgKQogICAgewogICAgICBpZiggcHJlZ19tYXRjaCggJy9eaGlkZGVuXy8nLCAka2V5ICkgKQoJewoJICAkcHJvcG5hbWUgPSBzdWJzdHIoICRrZXksIHN0cmxlbignaGlkZGVuXycpKTsKCSAgJGFyciA9IHNwbGl0KCI7IiwkcGFyYW1zWyRrZXldKTsKCSAgJHJlcXVpcmVkID0gJGFyclszXTsKCSAgaWYoICRyZXF1aXJlZCA9PSAyICYmIAoJICAgICAgKCFpc3NldCgkcGFyYW1zWydpbnB1dF8nLiRwcm9wbmFtZV0pIHx8ICRwYXJhbXNbJ2lucHV0XycuJHByb3BuYW1lXSA9PSAnJyApICkKCSAgICB7CgkgICAgICAkcGFyYW1zWydlcnJvciddID0gMTsKCSAgICAgICRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9yZXF1aXJlZGZpZWxkJywkcHJvcG5hbWUpOwoJICAgICAgJHRoaXMtPlJlZGlyZWN0KCAkaWQsICdjaGFuZ2VzZXR0aW5ncycsICRyZXR1cm5pZCwgJHBhcmFtcyApOwoJICAgIH0KCgkgIGlmKCAkYXJyWzFdID09ICcyJyApCgkgICAgewoJICAgICAgJHJlc3VsdCA9ICR0aGlzLT5Jc1ZhbGlkRW1haWxBZGRyZXNzKCAkcGFyYW1zWydpbnB1dF8nLiRwcm9wbmFtZV0sCgkJCQkJCSAgICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZG9fc210cF92YWxpZGF0ZV9lbWFpbCcpICk7CgkgICAgICBpZiggJHJlc3VsdFswXSA9PSBmYWxzZSApCgkJewoJCSAgJHBhcmFtc1snZXJyb3InXSA9IDE7CgkJICAkcGFyYW1zWydtZXNzYWdlJ10gPSAkcmVzdWx0WzFdOwoJCSAgJHRoaXMtPlJlZGlyZWN0KCAkaWQsICdjaGFuZ2VzZXR0aW5ncycsICRyZXR1cm5pZCwgJHBhcmFtcyApOwoJCX0KCSAgICB9Cgl9CiAgICB9CgogICAgLy8KICAgIC8vIG5vdyB3ZSBhY3R1YWxseSBjaGFuZ2UgdGhlIHVzZXIgc2V0dGluZ3MKICAgIC8vCgogICAgLy8gcGFzc3dvcmQKICAgIGlmKCAkcGFzc3dvcmQgIT0gJycpCiAgICAgIHsKCSRyZXN1bHQgPSAkdGhpcy0+U2V0VXNlciggJHVpZCwgJHVpbmZvWyd1c2VybmFtZSddLCAkcGFzc3dvcmQsICR1aW5mb1snZXhwaXJlcyddICk7CglpZiggJHJlc3VsdFswXSA9PSBGQUxTRSApCgkgIHsKCSAgICAkcGFyYW1zWydlcnJvciddID0gMTsKCSAgICAkcGFyYW1zWydtZXNzYWdlJ10gPSAkcmVzdWx0WzFdOwoJICAgICR0aGlzLT5SZWRpcmVjdCggJGlkLCAnY2hhbmdlc2V0dGluZ3MnLCAkcmV0dXJuaWQsICRwYXJhbXMgKTsKCSAgfQogICAgICB9CgogICAgLy8gbm93IHRoZSBwcm9wZXJ0aWVzCiAgICAkdGhpcy0+RGVsZXRlVXNlclByb3BlcnR5RnVsbCggIiIsICR1aWQsIHRydWUgKTsKCiAgICBmb3JlYWNoKCAkcGFyYW1zIGFzICRrZXkgPT4gJHZhbCApCiAgICB7CiAgICAgIGlmKCBwcmVnX21hdGNoKCAnL15oaWRkZW5fLycsICRrZXkgKSApCgl7CgkgICRwcm9wbmFtZSA9IHN1YnN0ciggJGtleSwgc3RybGVuKCdoaWRkZW5fJykpOwoJICAkYXJyID0gc3BsaXQoIjsiLCRwYXJhbXNbJGtleV0pOwoJICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0XycuJHByb3BuYW1lXSApICkKCSAgICB7CgkgICAgICAkdmFsID0gJHBhcmFtc1snaW5wdXRfJy4kcHJvcG5hbWVdOwoJICAgICAgJHJldCA9ICR0aGlzLT5TZXRVc2VyUHJvcGVydHlGdWxsKCAkcHJvcG5hbWUsICR2YWwsICR1aWQgKTsKCSAgICAgIGlmKCAkcmV0ID09IGZhbHNlICkKCQl7CgkJICAkcGFyYW1zWydlcnJvciddID0gMTsKCQkgICRwYXJhbXNbJ21lc3NhZ2UnXSA9ICR0aGlzLT5sYW5nKCdlcnJvcicpOwoJCSAgJHRoaXMtPlJlZGlyZWN0KCAkaWQsICdjaGFuZ2VzZXR0aW5ncycsICRyZXR1cm5pZCwgJHBhcmFtcyApOwoJCSAgcmV0dXJuOwoJCX0KCSAgICB9Cgl9CiAgICB9CgogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9yZXR1cm50byddICkgKQogICAgICB7CgkkaWQgPSBDb250ZW50TWFuYWdlcjo6R2V0UGFnZUlERnJvbUFsaWFzKCAkcGFyYW1zWydpbnB1dF9yZXR1cm50byddICk7CglpZiggJGlkICkKCSAgewoJICAgICR0aGlzLT5SZWRpcmVjdENvbnRlbnQoICRpZCApOwoJICAgIHJldHVybjsKCSAgfQogICAgICB9CgogICAgLy8gYW5kIHJlZGlyZWN0IGJhY2sgdG8gZGVmYXVsdAogICAgJHRoaXMtPlJlZGlyZWN0Q29udGVudCggQ29udGVudE1hbmFnZXI6OkdldERlZmF1bHRQYWdlSUQoKSApOwogIH0KCiAgZnVuY3Rpb24gX0Rpc3BsYXlBZG1pbkFkbWluVGFiKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgLy8gYSBmb3JtIGZvciBwZXJmb3JtaW5nIHZhcmlvdXMgYWRtaW4gdGFza3MKICAgIC8vIGxpa2UgZXhwb3J0aW5nIHVzZXJzIHRvIENTViwgcmVzZXR0aW5nIGV4cGlyeSBkYXRlcywgZXRjLCBldGMuCiAgICAKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCggJGlkLCAnZG9fYWRtaW50YXNrcycgKSApOwogICAgJHRoaXMtPnNtYXJ0eS0+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+c21hcnR5LT5hc3NpZ24oJ3Byb3BlcnRpZXN0aXRsZScsICR0aGlzLT5MYW5nKCdwcm9wZXJ0aWVzJykpOwoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvcHMnLAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdwcm9wcycsICR0aGlzLT5MYW5nKCdwcm9wZXJ0aWVzJykuIi4uLiIpKTsKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRkdXNlcjEudHBsJyk7CiAgfQoKCiAgZnVuY3Rpb24gRG9BY3Rpb24oJGFjdGlvbiwgJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgPSAtMSkgCiAgewogICAgaWYoICEgaXNzZXQoJHBhcmFtc1snYWN0aW9uJ10pICkKICAgICAgewoJJHBhcmFtc1snYWN0aW9uJ10gPSAkYWN0aW9uOwogICAgICB9CiAgICBzd2l0Y2ggKCRhY3Rpb24pCiAgICAgIHsKICAgICAgY2FzZSAnYWRkZ3JvdXAnOgoJewoJICAvLyBjaGVjayBwZXJtaXNzaW9ucyBhZ2FpbgoJICBpZiggJHRoaXMtPl9IYXNTdWZmaWNpZW50UGVybWlzc2lvbnMoICdhZGRncm91cCcgKSApCgkgICAgewoJICAgICAgJHRoaXMtPl9EaXNwbGF5QWRtaW5BZGRHcm91cFBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CgkgICAgfQoJICBlbHNlIAoJICAgIHsKCSAgICAgICR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwKCQkJCSAgICAgICR0aGlzLT5MYW5nKCdhY2Nlc3NkZW5pZWQnKSk7CgkgICAgfQoJICBicmVhazsKCX0KCiAgICAgIGNhc2UgJ2FkZHByb3AnOgoJewoJICAvLyBjaGVjayBwZXJtaXNzaW9ucyBhZ2FpbgoJICBpZiggJHRoaXMtPl9IYXNTdWZmaWNpZW50UGVybWlzc2lvbnMoICdhZGRwcm9wJyApICkKCSAgICB7CgkgICAgICAkdGhpcy0+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+X0Rpc3BsYXlBZG1pblVzZXJQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwogIH0KCgogIGZ1bmN0aW9uIF9EaXNwbGF5QWRtaW5Hcm91cHNUYWIoJGlkLCAmJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICBnbG9iYWwgJGdDbXM7CiAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKICAgICRncm91cHMgPSAkdGhpcy0+R2V0R3JvdXBMaXN0RnVsbCgpOwogICAgJHJvd2NsYXNzID0gJ3JvdzEnOwoKICAgICRyb3dhcnJheSA9IGFycmF5KCk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oICdncm91cHNmb3VuZCcsICR0aGlzLT5MYW5nKCdncm91cHNmb3VuZCcpKTsKICAgIGZvcmVhY2goICRncm91cHMgYXMgJG9uZWdyb3VwICkKICAgIHsKICAgICAgaWYoICR0aGlzLT5fSGFzU3VmZmljaWVudFBlcm1pc3Npb25zKCdsaXN0Z3JvdXBzJykgKQoJewoJICAkb25lcm93ID0gbmV3IHN0ZENsYXNzKCk7CgkgICRvbmVyb3ctPmlkID0gJG9uZWdyb3VwWydpZCddOwoJICAkb25lcm93LT5uYW1lID0KCSAgICAkdGhpcy0+Q3JlYXRlTGluayggJGlkLCAnZWRpdGdyb3VwJywgJHJldHVybmlkLCAkb25lZ3JvdXBbJ2dyb3VwbmFtZSddLAoJCQkgICAgICAgYXJyYXkgKCdncm91cF9pZCcgPT4gJG9uZWdyb3VwWydpZCddKSk7CQkJICAgICAgIAoJICAkb25lcm93LT5kZXNjID0gJG9uZWdyb3VwWydncm91cGRlc2MnXTsKCSAgJG9uZXJvdy0+cm93Y2xhc3MgPSAkcm93Y2xhc3M7CgoJICBpZiggJHRoaXMtPl9IYXNTdWZmaWNpZW50UGVybWlzc2lvbnMoJ2VkaXRncm91cHMnKSApCgkgICAgewoJICAgICAgJG9uZXJvdy0+ZWRpdGxpbmsgPQoJCSR0aGlzLT5DcmVhdGVMaW5rICgkaWQsICdlZGl0Z3JvdXAnLCAkcmV0dXJuaWQsCgkJCQkgICAkZ0Ntcy0+dmFyaWFibGVzWydhZG1pbnRoZW1lJ10tPkRpc3BsYXlJbWFnZSAoJ2ljb25zL3N5c3RlbS9lZGl0LmdpZicsCgkJCQkJCQkJCQkgJHRoaXMtPkxhbmcgKCdlZGl0JyksICcnLCAnJywgJ3N5c3RlbWljb24nKSwKCQkJCSAgIGFycmF5ICgnZ3JvdXBfaWQnID0+ICRvbmVncm91cFsnaWQnXSkpOwoJCX0KCSAgaWYoICR0aGlzLT5fSGFzU3VmZmljaWVudFBlcm1pc3Npb25zKCdyZW1vdmVncm91cHMnKSApCgkgICAgewoJICAgICAgJG9uZXJvdy0+ZGVsZXRlbGluayA9CgkJJHRoaXMtPkNyZWF0ZUxpbmsgKCRpZCwgJ2RvX2RlbGV0ZWdyb3VwJywgJHJldHVybmlkLAoJCQkJICAgJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UgKCdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicsCgkJCQkJCQkJCQkgJHRoaXMtPkxhbmcgKCdkZWxldGUnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLAoJCQkJICAgYXJyYXkgKCdncm91cF9pZCcgPT4gJG9uZWdyb3VwWydpZCddKSwKCQkJCSAgICR0aGlzLT5MYW5nICgnYXJleW91c3VyZV9kZWxldGVncm91cCcpKTsKCSAgICB9CgkgIAoJICBhcnJheV9wdXNoICgkcm93YXJyYXksICRvbmVyb3cpOwoJICAoJHJvd2NsYXNzID09ICJyb3cxIiA/ICRyb3djbGFzcyA9ICJyb3cyIiA6ICRyb3djbGFzcyA9ICJyb3cxIik7Cgl9CgogICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2l0ZW1jb3VudCcsY291bnQoJHJvd2FycmF5KSk7CiAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaXRlbXMnLCRyb3dhcnJheSk7CiAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZ3JvdXBzZm91bmQnLCAkdGhpcy0+TGFuZygnZ3JvdXBzZm91bmQnKSApOwogICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lkdGV4dCcsICR0aGlzLT5MYW5nKCAnaWQnICkpOwogICAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ25hbWV0ZXh0JywgJHRoaXMtPkxhbmcoICduYW1lJyApKTsKICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdkZXNjdGV4dCcsICR0aGlzLT5MYW5nKCAnZGVzY3JpcHRpb24nICkpOwogICAgfQoKICAgIGlmKCAkdGhpcy0+X0hhc1N1ZmZpY2llbnRQZXJtaXNzaW9ucygnbGlzdGdyb3VwcycpICkKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdhZGRsaW5rJywgCgkJCSAgICAgICR0aGlzLT5DcmVhdGVMaW5rKCAkaWQsICdhZGRncm91cCcsCgkJCQkJCSAkcmV0dXJuaWQsCgkJCQkJCSAkdGhpcy0+TGFuZygnYWRkZ3JvdXAnKSwKCQkJCQkJIGFycmF5KCksICcnLCBmYWxzZSwKCQkJCQkJIGZhbHNlLAoJCQkJCQkgJ2NsYXNzPSJwYWdlb3B0aW9ucyInKSk7CiAgICAgIH0KCiAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoICdncm91cGxpc3QudHBsJyApOwogIH0KCgogIGZ1bmN0aW9uIF9EaXNwbGF5QWRtaW5DaGFuZ2VTZXR0aW5nc1RlbXBsYXRlVGFiKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywKCQkJICAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCAkaWQsICdkb19zZXRjaGFuZ2VzZXR0aW5nc3RlbXBsYXRlJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfdGVtcGxhdGUnLCR0aGlzLT5MYW5nKCd0ZW1wbGF0ZScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfdGVtcGxhdGUnLAoJCQkgICR0aGlzLT5DcmVhdGVUZXh0QXJlYSggZmFsc2UsICRpZCwKCQkJCQkgICAgICR0aGlzLT5HZXRUZW1wbGF0ZSAoJ2ZldXNlcnNfY2hhbmdlc2V0dGluZ3Nmb3JtJyksCgkJCQkJCSAndGVtcGxhdGVjb250ZW50JykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLAoJCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ3N1Ym1pdCcsCgkJCQkJCQkgICAgJHRoaXMtPkxhbmcoJ3N1Ym1pdCcpKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2RlZmF1bHRzJywKCQkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0ICgkaWQsICdkZWZhdWx0cycsCgkJCQkJCQkgICAgJHRoaXMtPkxhbmcoJ2RlZmF1bHRzJykpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZW5kZm9ybScsJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CiAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ3RlbXBsYXRlZm9ybS50cGwnKTsKICB9CgoKICBmdW5jdGlvbiBfRGlzcGxheUFkbWluRm9yZ290UGFzc3dvcmRUZW1wbGF0ZVRhYiggJGlkLCAmJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsCgkJCSAgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCggJGlkLCAnZG9fc2V0Zm9yZ290cHd0ZW1wbGF0ZScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X3RlbXBsYXRlMScsJHRoaXMtPkxhbmcoJ2ZvcmdvdHBhc3N3b3JkX3RlbXBsYXRlJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF90ZW1wbGF0ZTEnLAoJCQkgICR0aGlzLT5DcmVhdGVUZXh0QXJlYSggZmFsc2UsICRpZCwKCQkJCQkgICAgICR0aGlzLT5HZXRUZW1wbGF0ZSAoJ2ZldXNlcnNfZm9yZ290cGFzc3dvcmRmb3JtJyksCgkJCQkJCSAndGVtcGxhdGVjb250ZW50MScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X3RlbXBsYXRlMicsJHRoaXMtPkxhbmcoJ2ZvcmdvdHBhc3N3b3JkX2VtYWlsdGVtcGxhdGUnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3RlbXBsYXRlMicsCgkJCSAgJHRoaXMtPkNyZWF0ZVRleHRBcmVhKCBmYWxzZSwgJGlkLAoJCQkJCSAgICAgJHRoaXMtPkdldFRlbXBsYXRlICgnZmV1c2Vyc19mb3Jnb3RwYXNzd29yZGVtYWlsZm9ybScpLAoJCQkJCQkgJ3RlbXBsYXRlY29udGVudDInKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF90ZW1wbGF0ZTMnLCR0aGlzLT5MYW5nKCdmb3Jnb3RwYXNzd29yZF92ZXJpZnl0ZW1wbGF0ZScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfdGVtcGxhdGUzJywKCQkJICAkdGhpcy0+Q3JlYXRlVGV4dEFyZWEoIGZhbHNlLCAkaWQsCgkJCQkJICAgICAkdGhpcy0+R2V0VGVtcGxhdGUgKCdmZXVzZXJzX2ZvcmdvdHBhc3N3b3JkdmVyaWZ5Zm9ybScpLAoJCQkJCQkgJ3RlbXBsYXRlY29udGVudDMnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsCgkJCQkgICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnc3VibWl0JywKCQkJCQkJCSAgICAkdGhpcy0+TGFuZygnc3VibWl0JykpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZGVmYXVsdHMnLAoJCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ2RlZmF1bHRzJywKCQkJCQkJCSAgICAkdGhpcy0+TGFuZygnZGVmYXVsdHMnKSkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnZm9yZ290cHdfdGVtcGxhdGVmb3JtLnRwbCcpOwogIH0KCgogIGZ1bmN0aW9uIF9EaXNwbGF5QWRtaW5Mb2dpblRlbXBsYXRlVGFiKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywKCQkJICAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCAkaWQsICdkb19zZXRsb2dpbnRlbXBsYXRlJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfdGVtcGxhdGUnLCR0aGlzLT5MYW5nKCd0ZW1wbGF0ZScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfdGVtcGxhdGUnLAoJCQkgICR0aGlzLT5DcmVhdGVUZXh0QXJlYSggZmFsc2UsICRpZCwKCQkJCQkgICAgICR0aGlzLT5HZXRUZW1wbGF0ZSAoJ2ZldXNlcnNfbG9naW5mb3JtJyksCgkJCQkJCSAndGVtcGxhdGVsb2dpbmZvcm0nKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsCgkJCQkgICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnc3VibWl0JywKCQkJCQkJCSAgICAkdGhpcy0+TGFuZygnc3VibWl0JykpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZGVmYXVsdHMnLAoJCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ2RlZmF1bHRzJywKCQkJCQkJCSAgICAkdGhpcy0+TGFuZygnZGVmYXVsdHMnKSkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgndGVtcGxhdGVmb3JtLnRwbCcpOwogIH0KCgogIGZ1bmN0aW9uIF9EaXNwbGF5QWRtaW5Mb2dvdXRUZW1wbGF0ZVRhYiggJGlkLCAmJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N0YXJ0Zm9ybScsCgkJCSAgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCggJGlkLCAnZG9fc2V0bG9nb3V0dGVtcGxhdGUnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF90ZW1wbGF0ZScsJHRoaXMtPkxhbmcoJ3RlbXBsYXRlJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF90ZW1wbGF0ZScsCgkJCSAgJHRoaXMtPkNyZWF0ZVRleHRBcmVhKCBmYWxzZSwgJGlkLAoJCQkJCSAgICAgJHRoaXMtPkdldFRlbXBsYXRlICgnZmV1c2Vyc19sb2dvdXRmb3JtJyksCgkJCQkJCSAndGVtcGxhdGVsb2dvdXRmb3JtJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLAoJCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ3N1Ym1pdCcsCgkJCQkJCQkgICAgJHRoaXMtPkxhbmcoJ3N1Ym1pdCcpKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2RlZmF1bHRzJywKCQkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0ICgkaWQsICdkZWZhdWx0cycsCgkJCQkJCQkgICAgJHRoaXMtPkxhbmcoJ2RlZmF1bHRzJykpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZW5kZm9ybScsJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CiAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ3RlbXBsYXRlZm9ybS50cGwnKTsKICB9CgoKICBmdW5jdGlvbiBfRGlzcGxheUFkbWluUHJvcGVydGllc1RhYiggJGlkLCAmJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICBnbG9iYWwgJGdDbXM7CiAgICAkbWVzc2FnZSA9ICcnOwogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydtZXNzYWdlJ10gKSApCiAgICAgIHsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignbWVzc2FnZScsICRtZXNzYWdlKTsKICAgICAgfQoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGUnLCR0aGlzLT5MYW5nKCdwcm9wZXJ0aWVzJykpOwoKICAgICRkZWZucyA9ICR0aGlzLT5HZXRQcm9wZXJ0eURlZm5zKCk7CiAgICAkcm93YXJyYXkgPSBhcnJheSgpOwogICAgJHJvd2NsYXNzID0gJ3JvdzEnOwogICAgJGtleXMgPSBhcnJheV9rZXlzKCR0aGlzLT50eXBlcyk7CiAgICBmb3JlYWNoKCAkZGVmbnMgYXMgJGRlZm4gKQogICAgewogICAgICAkcHJvcGdyb3VwcyA9ICR0aGlzLT5HZXRQcm9wZXJ0eUdyb3VwUmVsYXRpb25zKCRkZWZuWyduYW1lJ10pOwoKICAgICAgJG9uZXJvdyA9IG5ldyBTdGRDbGFzcygpOwogICAgICBpZiggJHRoaXMtPl9IYXNTdWZmaWNpZW50UGVybWlzc2lvbnMoJ2VkaXRwcm9wJykpIAoJewoJICAkb25lcm93LT5uYW1lID0gCgkgICAgJHRoaXMtPkNyZWF0ZUxpbmsoICRpZCwgJ2VkaXRwcm9wJywgJHJldHVybmlkLCAkZGVmblsnbmFtZSddLAoJCQkgICAgICAgYXJyYXkoJ3Byb3BuYW1lJyA9PiAkZGVmblsnbmFtZSddKSk7Cgl9CiAgICAgIGVsc2UKCXsKCSAgJG9uZXJvdy0+bmFtZSA9ICRkZWZuWyduYW1lJ107Cgl9CiAgICAgICRvbmVyb3ctPnByb21wdCA9ICRkZWZuWydwcm9tcHQnXTsKICAgICAgJG9uZXJvdy0+dHlwZSA9ICR0aGlzLT5MYW5nKCAka2V5c1skZGVmblsndHlwZSddXSApOwogICAgICAkb25lcm93LT5sZW5ndGggPSAkZGVmblsnbGVuZ3RoJ107CiAgICAgICRvbmVyb3ctPnJvd2NsYXNzID0gJHJvd2NsYXNzOwoKICAgICAgaWYoICR0aGlzLT5fSGFzU3VmZmljaWVudFBlcm1pc3Npb25zKCdlZGl0cHJvcCcpKQoJewoJICAkb25lcm93LT5lZGl0bGluayA9CgkgICAgJHRoaXMtPkNyZWF0ZUxpbmsgKCRpZCwgJ2VkaXRwcm9wJywgJHJldHVybmlkLAoJCQkgICAgICAgJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9lZGl0LmdpZicsCgkJCQkJCQkJCSAgICAkdGhpcy0+TGFuZyAoJ2VkaXQnKSwgJycsICcnLCAnc3lzdGVtaWNvbicpLAoJCQkgICAgICAgYXJyYXkoJ3Byb3BuYW1lJyA9PiAkZGVmblsnbmFtZSddKSk7CgoJICBpZiggY291bnQoJHByb3Bncm91cHMpID09IDAgKQoJICAgIHsKCSAgICAgICRvbmVyb3ctPmRlbGV0ZWxpbmsgPQoJCSR0aGlzLT5DcmVhdGVMaW5rICgkaWQsICdkb19kZWxldGVwcm9wJywgJHJldHVybmlkLAoJCQkJICAgJGdDbXMtPnZhcmlhYmxlc1snYWRtaW50aGVtZSddLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9kZWxldGUuZ2lmJywKCQkJCQkJCQkJCSR0aGlzLT5MYW5nICgnZGVsZXRlJyksICcnLCAnJywgJ3N5c3RlbWljb24nKSwKCQkJCSAgIGFycmF5KCdwcm9wbmFtZScgPT4gJGRlZm5bJ25hbWUnXSwgJ3Byb3B0eXBlJyA9PiAkZGVmblsndHlwZSddKSwgCgkJCQkgICAkdGhpcy0+TGFuZygnY29uZmlybV9kZWxldGVfcHJvcCcpKTsKCSAgICB9Cgl9CgogICAgICBhcnJheV9wdXNoICgkcm93YXJyYXksICRvbmVyb3cpOwogICAgICAoJHJvd2NsYXNzID09ICJyb3cxIiA/ICRyb3djbGFzcyA9ICJyb3cyIiA6ICRyb3djbGFzcyA9ICJyb3cxIik7CiAgICB9CgogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCduYW1ldGV4dCcsJHRoaXMtPkxhbmcoJ25hbWUnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2xlbmd0aHRleHQnLCR0aGlzLT5MYW5nKCdsZW5ndGgnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdHRleHQnLCR0aGlzLT5MYW5nKCdwcm9tcHQnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3R5cGV0ZXh0JywkdGhpcy0+TGFuZygndHlwZScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvcHMnLCRyb3dhcnJheSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb3Bjb3VudCcsIGNvdW50KCRyb3dhcnJheSkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9wc2ZvdW5kJywkdGhpcy0+TGFuZygncHJvcHNmb3VuZCcpKTsKCiAgICBpZiggJHRoaXMtPl9IYXNTdWZmaWNpZW50UGVybWlzc2lvbnMoJ2FkZHByb3AnKSApCiAgICAgIHsKCS8vIHRvZG8sIGFkZCBhIHBlcm1pc3Npb24gY2hlY2sgYXJvdW5kIHRoaXMKCS8vIG1heWJlIGNyZWF0ZSBhbiAiZWRpdCBmcm9udGVuZHVzZXIgcHJvcGVydGllcyIgcGVybWlzc2lvbgoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdhZGRsaW5rJywgCgkJCSAgICAgICR0aGlzLT5DcmVhdGVMaW5rKCAkaWQsICdhZGRwcm9wJywKCQkJCQkJICRyZXR1cm5pZCwKCQkJCQkJICR0aGlzLT5MYW5nKCdhZGRwcm9wJyksCgkJCQkJCSBhcnJheSgpLCAnJywgZmFsc2UsCgkJCQkJCSBmYWxzZSwKCQkJCQkJICdjbGFzcz0icGFnZW9wdGlvbnMiJykpOwogICAgICB9CgoKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgncHJvcGVydGllc2Zvcm0udHBsJyk7CiAgfQoKCiAgZnVuY3Rpb24gX0Rpc3BsYXlBZG1pblVzZXJzVGFiKCRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCkKICB7CiAgICAvLyB0aGlzIHRhYiBoYXMgbWVyZWx5IG9uZSBtb2ZvIGxpc3Qgb2YgdXNlcyBhbmQgdGhlIGFiaWxpdHkgdG8gZWRpdCB0aGVtLCAKICAgIC8vIHNlZSBkZXRhaWxzIGFib3V0IHRoZW0sIGFuZCB0aGVuIGRlbGV0ZSB0aGVtCiAgICAvLyBtYXliZSBzZW5kIGFuIGVtYWlsIHRvIHRoZW0gdG9vIGlmIEkgZ2V0IGFyb3VuZCB0byBpdCB0aGF0IGlzLgoKICAgIGlmKCAkdGhpcy0+X0hhc1N1ZmZpY2llbnRQZXJtaXNzaW9ucygnbGlzdHVzZXJzJykgKQogICAgICB7CgkvLyBmaWx0ZXJpbmcgc3R1ZmYKCWlmKCBpc3NldCggJHBhcmFtc1snZmlsdGVyJ10pICkKCSAgewoJICAgIGlmKCBpc3NldCggJHBhcmFtc1snZmlsdGVyX2dyb3VwJ10gKSApCgkgICAgICB7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2N1cnJlbnRfZ3JvdXAnLCAkcGFyYW1zWydmaWx0ZXJfZ3JvdXAnXSApOwoJICAgICAgfQoJICAgIGlmKCBpc3NldCggJHBhcmFtc1snZmlsdGVyX3JlZ2V4J10gKSApCgkgICAgICB7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2N1cnJlbnRfcmVnZXgnLCAkcGFyYW1zWydmaWx0ZXJfcmVnZXgnXSApOwoJICAgICAgfQoJICAgIGlmKCBpc3NldCggJHBhcmFtc1snZmlsdGVyX2xpbWl0J10gKSApCgkgICAgICB7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2N1cnJlbnRfbGltaXQnLCAkcGFyYW1zWydmaWx0ZXJfbGltaXQnXSApOwoJICAgICAgfQoJICAgIGlmKCBpc3NldCggJHBhcmFtc1snZmlsdGVyX3NvcnRieSddICkgKQoJICAgICAgewoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdjdXJyZW50X3NvcnQnLCAkcGFyYW1zWydmaWx0ZXJfc29ydGJ5J10gKTsKCSAgICAgIH0KCSAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2ZpbHRlcl9wcm9wZXJ0eXNlbCddICkgKQoJICAgICAgewoJCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdjdXJyZW50X3Byb3BzZWwnLCAkcGFyYW1zWydmaWx0ZXJfcHJvcGVydHlzZWwnXSApOwoJICAgICAgfQoJICAgIGlmKCBpc3NldCggJHBhcmFtc1snZmlsdGVyX3Byb3BlcnR5c2VsJ10gKSApCgkgICAgICB7CgkJJHRoaXMtPlNldFByZWZlcmVuY2UoJ2N1cnJlbnRfcHJvcHZhbCcsICRwYXJhbXNbJ2ZpbHRlcl9wcm9wZXJ0eSddICk7CgkgICAgICB9CgkgIH0KCSRjdXJncm91cCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjdXJyZW50X2dyb3VwJywgJycpOwoJJGN1cnJlZ2V4ID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2N1cnJlbnRfcmVnZXgnLCAnJyk7CgkkY3VybGltaXQgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY3VycmVudF9saW1pdCcsIDEwMCk7CgkkY3Vyc29ydCAgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY3VycmVudF9zb3J0JywgJycpOwoJJGN1cnByb3BzZWwgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnY3VycmVudF9wcm9wc2VsJywgJ25vbmUnKTsKCSRjdXJwcm9wdmFsID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2N1cnJlbnRfcHJvcHZhbCcsICcnKTsgCgkKCS8vIGdldCBhIGdyb3VwIGxpc3QgZm9yIHRoZSBmaWx0ZXIKCS8vIGl0IHNob3VsZCBiZSByZWFkeSB0byBnbyByaWdodCBpbnRvIHRoZSBkcm9wZG93biAoY29vbCBlaCkKCSRncm91cHMxID0gJHRoaXMtPkdldEdyb3VwTGlzdCgpOwoJJGdyb3VwcyA9IGFycmF5X21lcmdlKCBhcnJheSgiQWxsIEdyb3VwcyIgPT4gLTEpLCAkZ3JvdXBzMSApOwoJCgkvLyBhIHB1bGxkb3duIGxpc3QgZm9yIGxpbWl0cwoJJGxpbWl0cyA9IGFycmF5KCAnMTAwJyA9PiAxMDAsCgkJCSAnMTAnID0+IDEwLAoJCQkgJzI1JyA9PiAyNSwKCQkJICc1MCcgPT4gNTAsCgkJCSAnMjUwJyA9PiAyNTAsCgkJCSAnNTAwJyA9PiA1MDAgKTsKCgkvLyBhIHB1bGxkb3duIGxpc3QgZm9yIHByb3BlcnR5IGRlZmluaXRpb25zCgkkZGVmbnMxID0gJHRoaXMtPkdldFByb3BlcnR5RGVmbnMoKTsKCSRkZWZucyA9IGFycmF5KCk7CgkkZGVmbnNbJ05vbmUnXSA9ICdub25lJzsKCWZvcmVhY2goICRkZWZuczEgYXMgJGRlZiApCgkgIHsKCSAgICAkZGVmbnNbJGRlZlsncHJvbXB0J11dID0gJGRlZlsnbmFtZSddOwoJICB9CgkKCS8vIGEgcHVsbGRvd24gbGlzdCBmb3Igc29ydGluZwoJJHNvcnRzID0gYXJyYXkgKCdVc2VybmFtZScgPT4gJ3VzZXJuYW1lJywKCQkJJ1VzZXJuYW1lIChkZXNjZW5kaW5nKScgPT4gJ3VzZXJuYW1lIGRlc2MnLAoJCQknQ3JlYXRlIERhdGUnID0+ICdjcmVhdGVkYXRlJywKCQkJJ0NyZWF0ZSBEYXRlIChkZXNjZW5kaW5nKScgPT4gJ2NyZWF0ZWRhdGUgZGVzYycsCgkJCSdFeHBpcnkgRGF0ZScgPT4gJ2V4cGlyZXMnLAoJCQknRXhwaXJ5IERhdGUgKGRlc2NlbmRpbmcpJyA9PiAnZXhwaXJlcyBkZXNjJyk7CgkvLyBub3cgc2V0dXAgdGhlIHRlbXBsYXRlIGZpZWxkcwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCAncHJvbXB0X2ZpbHRlcicsICR0aGlzLT5MYW5nKCdmaWx0ZXInKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oICdwcm9tcHRfc29ydCcsICR0aGlzLT5MYW5nKCdzb3J0JykpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCAnc3RhcnRmb3JtJywKCQkJICAgICAgICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoICRpZCwgJ2RlZmF1bHRhZG1pbicpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbiggJ3Byb21wdF9ncm91cCcsICR0aGlzLT5MYW5nKCdncm91cCcpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbiggJ3VzZXJzZm91bmQnLCAkdGhpcy0+TGFuZygndXNlcnNmb3VuZCcpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbiggJ3VzZXJzaW5ncm91cCcsICR0aGlzLT5MYW5nKCd1c2Vyc2luZ3JvdXAnKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oICdmaWx0ZXJfZ3JvdXAnLAoJCQkgICAgICAgJHRoaXMtPkNyZWF0ZUlucHV0RHJvcERvd24oICRpZCwgJ2ZpbHRlcl9ncm91cCcsICRncm91cHMsIC0xLAoJCQkJCQkJICAgJGN1cmdyb3VwKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oICdwcm9tcHRfdXNlcmZpbHRlcicsICR0aGlzLT5MYW5nKCd1c2VyZmlsdGVyJykpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCAnZmlsdGVyX3JlZ2V4JywgCgkJCSAgICAgICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCAkaWQsICdmaWx0ZXJfcmVnZXgnLAoJCQkJCQkgICAgICAgJGN1cnJlZ2V4LCAyMCwgMjAgKSk7CgoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCAncHJvbXB0X3Byb3BlcnR5ZmlsdGVyc2VsJywkdGhpcy0+TGFuZygncHJvcGVydHlmaWx0ZXInKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oICdmaWx0ZXJfcHJvcGVydHlzZWwnLAoJCQkgICAgICAgJHRoaXMtPkNyZWF0ZUlucHV0RHJvcERvd24oICRpZCwgJ2ZpbHRlcl9wcm9wZXJ0eXNlbCcsCgkJCQkJCQkgICAkZGVmbnMsIC0xLCAkY3VycHJvcHNlbCApKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbiggJ3Byb21wdF9wcm9wZXJ0eWZpbHRlcicsJHRoaXMtPkxhbmcoJ3ZhbHVlcmVnZXgnKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oICdmaWx0ZXJfcHJvcGVydHknLAoJCQkgICAgICAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCggJGlkLCAnZmlsdGVyX3Byb3BlcnR5JywKCQkJCQkJICAgICAgICRjdXJwcm9wdmFsLCAyMCwgMjAgKSk7CgoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCAncHJvbXB0X2xpbWl0JywKCQkJICAgICAgICR0aGlzLT5MYW5nKCd1c2VybGltaXQnKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oICdmaWx0ZXJfbGltaXQnLAoJCQkgICAgICAgJHRoaXMtPkNyZWF0ZUlucHV0RHJvcERvd24oICRpZCwgJ2ZpbHRlcl9saW1pdCcsICRsaW1pdHMsIC0xLAoJCQkJCQkJICAgJGN1cmxpbWl0KSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oICdwcm9tcHRfc29ydGJ5JywKCQkJICAgICAgICR0aGlzLT5MYW5nKCdzb3J0YnknKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oICdmaWx0ZXJfc29ydGJ5JywKCQkJICAgICAgICR0aGlzLT5DcmVhdGVJbnB1dERyb3BEb3duKCAkaWQsICdmaWx0ZXJfc29ydGJ5JywgJHNvcnRzLCAtMSwKCQkJCQkJCSAgICRjdXJzb3J0KSk7CgoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9zZWxlY3QnLAoJCQkgICAgICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoICRpZCwgJ2ZpbHRlcicsIAoJCQkJCQkJJHRoaXMtPkxhbmcoJ2FwcGx5ZmlsdGVyJykpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfaGlkZGVuJywKCQkJICAgICAgJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCAkaWQsICdhY3RpdmVfdGFiJywgJ3VzZXJzJykKCQkJICAgICAgKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2VuZGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybUVuZCAoKSk7CgoKCSR1c2VycyA9ICR0aGlzLT5HZXRVc2Vyc0luR3JvdXAoICRjdXJncm91cCwgJGN1cnJlZ2V4LCAkY3VybGltaXQsICRjdXJzb3J0LAoJCQkJCSAkY3VycHJvcHNlbCwgJGN1cnByb3B2YWwgKTsKCWlmKCAhaXNfYXJyYXkoJHVzZXJzKSApCgkgIHsKCSAgICAvLyBhbiBlcnJvciBvY2N1cnJlZAoJICAgICRkYiA9ICR0aGlzLT5HZXREYigpOwoJICAgICR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSAoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsCgkJCQkgICAgICAkZGItPkVycm9yTXNnKCkgKTsKCSAgICByZXR1cm47CgkgIH0KCgkvLyBnZXQgdGhlIHRvdGFsIG51bWJlciBvZiB1c2VycwoJJG51bXVzZXJzID0gJHRoaXMtPkNvdW50VXNlcnNJbkdyb3VwKCAkY3VyZ3JvdXAgKTsKCgkkcm93YXJyYXkgPSBhcnJheSgpOwoJJHJvd2NsYXNzID0gInJvdzEiOwoJZ2xvYmFsICRnQ21zOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdudW11c2VycycsICRudW11c2VycyApOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd1c2VybmFtZXRleHQnLCAkdGhpcy0+TGFuZygndXNlcm5hbWUnKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2VtYWlsdGV4dCcsICR0aGlzLT5MYW5nKCdlbWFpbCcpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhdHVzdGV4dCcsICR0aGlzLT5MYW5nKCdzdGF0dXMnKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2NyZWF0ZWR0ZXh0JywgJHRoaXMtPkxhbmcoJ2NyZWF0ZWQnKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2V4cGlyZXN0ZXh0JywgJHRoaXMtPkxhbmcoJ2V4cGlyZXMnKSk7Cglmb3JlYWNoKCAkdXNlcnMgYXMgJHJvdyApCgl7CgkgICRvbmVyb3cgPSBuZXcgU3RkQ2xhc3MoKTsKCSAgJG9uZXJvdy0+cm93Y2xhc3MgPSAkcm93Y2xhc3M7CgkgICRvbmVyb3ctPmNyZWF0ZWQgID0gJHJvd1snY3JlYXRlZGF0ZSddOwoJICAkb25lcm93LT51c2VybmFtZSA9ICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2VkaXR1c2VyJywgJHJldHVybmlkLCAkcm93Wyd1c2VybmFtZSddLAoJCQkJCQlhcnJheSgndXNlcl9pZCcgPT4gJHJvd1snaWQnXSkpOwoJICAkb25lcm93LT5leHBpcmVzICA9ICRyb3dbJ2V4cGlyZXMnXTsKCSAgJG9uZXJvdy0+ZWRpdGxpbmsgPQoJICAgICR0aGlzLT5DcmVhdGVMaW5rICgkaWQsICdlZGl0dXNlcicsICRyZXR1cm5pZCwKCQkJICAgICAgICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZWRpdC5naWYnLAoJCQkJCQkJCQkgICAgJHRoaXMtPkxhbmcgKCdlZGl0JyksICcnLCAnJywgJ3N5c3RlbWljb24nKSwKCQkJICAgICAgIGFycmF5ICgndXNlcl9pZCcgPT4gJHJvd1snaWQnXSApKTsKCSAgJG9uZXJvdy0+ZGVsZXRlbGluayA9IAoJICAgICR0aGlzLT5DcmVhdGVMaW5rICgkaWQsJ2RvX2RlbGV0ZXVzZXInLCRyZXR1cm5pZCwKCQkJICAgICAgICRnQ21zLT52YXJpYWJsZXNbJ2FkbWludGhlbWUnXS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vZGVsZXRlLmdpZicsCgkJCQkJCQkJCSAgICAkdGhpcy0+TGFuZyAoJ2RlbGV0ZScpLCAnJywgJycsICdzeXN0ZW1pY29uJyksCgkJCSAgICAgICBhcnJheSAoJ3VzZXJfaWQnID0+ICRyb3dbJ2lkJ10pLAoJCQkgICAgICAgJHRoaXMtPkxhbmcgKCdhcmV5b3VzdXJlJykpOwoJICAKCSAgYXJyYXlfcHVzaCAoJHJvd2FycmF5LCAkb25lcm93KTsKCSAgKCRyb3djbGFzcyA9PSAicm93MSIgPyAkcm93Y2xhc3MgPSAicm93MiIgOiAkcm93Y2xhc3MgPSAicm93MSIpOwoJfQoKCSR0aGlzLT5zbWFydHktPmFzc2lnbignaXRlbXMnLCRyb3dhcnJheSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2l0ZW1jb3VudCcsIGNvdW50KCRyb3dhcnJheSkpOwogICAgICB9CgogICAgaWYoICR0aGlzLT5fSGFzU3VmZmljaWVudFBlcm1pc3Npb25zKCdhZGR1c2VyJykgKQogICAgICB7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2FkZGxpbmsnLCAKCQkJICAgICAgJHRoaXMtPkNyZWF0ZUxpbmsoICRpZCwgJ2FkZHVzZXInLAoJCQkJCQkgJHJldHVybmlkLAoJCQkJCQkgJHRoaXMtPkxhbmcoJ2FkZHVzZXInKSwKCQkJCQkJIGFycmF5KCksICcnLCBmYWxzZSwKCQkJCQkJIGZhbHNlLAoJCQkJCQkgJ2NsYXNzPSJwYWdlb3B0aW9ucyInKSk7CiAgICAgIH0KCiAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoICd1c2VybGlzdC50cGwnICk7CiAgfQoKCiAgZnVuY3Rpb24gX0Rpc3BsYXlBZG1pblBhbmVsKCRpZCwmJHBhcmFtcywkcmV0dXJuaWQpCiAgewogICAgJGRiID0gJHRoaXMtPmNtcy0+ZGI7CgogICAgJGFjdGl2ZV90YWIgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnYWN0aXZlX3RhYicsLTEpOwogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydhY3RpdmVfdGFiJ10gKSApCiAgICAgIHsKCSRhY3RpdmVfdGFiID0gJHBhcmFtc1snYWN0aXZlX3RhYiddOwogICAgICB9CgogICAgLy8gdGhlIHRhYnMKICAgIGVjaG8gJHRoaXMtPlN0YXJ0VGFiSGVhZGVycygpOwoKICAgIGlmKCAkdGhpcy0+X0hhc1N1ZmZpY2llbnRQZXJtaXNzaW9ucygncHJvcGVydGllcycpICkKICAgICAgewoJZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCAncHJvcGVydGllcycsICR0aGlzLT5MYW5nKCdwcm9wZXJ0aWVzJyksCgkJCSAgICAgICgkYWN0aXZlX3RhYiA9PSAncHJvcGVydGllcycpKTsKICAgICAgfQogICAgaWYoICR0aGlzLT5fSGFzU3VmZmljaWVudFBlcm1pc3Npb25zKCd1c2Vyc25ncm91cHMnKSApCiAgICAgIHsKCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlciggJ2dyb3VwcycsICR0aGlzLT5MYW5nKCdncm91cHMnKSwoJGFjdGl2ZV90YWIgPT0gJ2dyb3VwcycpKTsKCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlciggJ3VzZXJzJywgJHRoaXMtPkxhbmcoJ3VzZXJzJyksKCRhY3RpdmVfdGFiID09ICd1c2VycycpKTsKCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlciggJ2FkbWluJywgJHRoaXMtPkxhbmcoJ2FkbWluJyksKCRhY3RpdmVfdGFiID09ICdhZG1pbicpKTsKICAgICAgfQogICAgaWYoICR0aGlzLT5fSGFzU3VmZmljaWVudFBlcm1pc3Npb25zKCdzaXRlcHJlZnMnKSApCiAgICAgIHsKCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlciggJ3ByZWZzJywgJHRoaXMtPkxhbmcoJ3ByZWZlcmVuY2VzJyksKCRhY3RpdmVfdGFiID09ICdwcmVmcycpKTsKICAgICAgfQogICAgaWYoICR0aGlzLT5fSGFzU3VmZmljaWVudFBlcm1pc3Npb25zKCd0ZW1wbGF0ZXMnKSApCiAgICAgIHsKCWVjaG8gJHRoaXMtPlNldFRhYkhlYWRlciggJ2xvZ2ludGVtcGxhdGUnLCAkdGhpcy0+TGFuZygnbG9naW5fdGVtcGxhdGUnKSwKCQkJCSAgKCRhY3RpdmVfdGFiID09ICdsb2dpbnRlbXBsYXRlJykpOwoJZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCAnbG9nb3V0dGVtcGxhdGUnLCAkdGhpcy0+TGFuZygnbG9nb3V0X3RlbXBsYXRlJyksCgkJCQkgICgkYWN0aXZlX3RhYiA9PSAnbG9nb3V0dGVtcGxhdGUnKSk7CgllY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoICdjaGFuZ2VzZXR0aW5nc190ZW1wbGF0ZScsICR0aGlzLT5MYW5nKCdjaGFuZ2VzZXR0aW5nc190ZW1wbGF0ZScpLAoJCQkJICAoJGFjdGl2ZV90YWIgPT0gJ2NoYW5nZXNldHRpbmdzX3RlbXBsYXRlJykpOwoJZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCAnZm9yZ290cGFzc3dvcmRfdGVtcGxhdGUnLCAkdGhpcy0+TGFuZygnZm9yZ290cGFzc3dvcmRfdGVtcGxhdGUnKSwKCQkJCSAgKCRhY3RpdmVfdGFiID09ICdmb3Jnb3RwYXNzd29yZF90ZW1wbGF0ZScpKTsKICAgICAgfQogICAgZWNobyAkdGhpcy0+RW5kVGFiSGVhZGVycygpOwoKICAgIC8vIFRoZWNvbnRlbnQgb2YgdGhlIHRhYnMKICAgIGVjaG8gJHRoaXMtPlN0YXJ0VGFiQ29udGVudCgpOwoKICAgIGlmKCAkdGhpcy0+X0hhc1N1ZmZpY2llbnRQZXJtaXNzaW9ucygncHJvcGVydGllcycpICkKICAgICAgewoJZWNobyAkdGhpcy0+U3RhcnRUYWIoJ3Byb3BlcnRpZXMnKTsKCSR0aGlzLT5fRGlzcGxheUFkbWluUHJvcGVydGllc1RhYiggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCWVjaG8gJHRoaXMtPkVuZFRhYigpOwogICAgICB9CiAgICAKICAgIGlmKCAkdGhpcy0+X0hhc1N1ZmZpY2llbnRQZXJtaXNzaW9ucygndXNlcnNuZ3JvdXBzJykgKQogICAgICB7CgllY2hvICR0aGlzLT5TdGFydFRhYignZ3JvdXBzJyk7CgkkdGhpcy0+X0Rpc3BsYXlBZG1pbkdyb3Vwc1RhYiggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCWVjaG8gJHRoaXMtPkVuZFRhYigpOwoKCWVjaG8gJHRoaXMtPlN0YXJ0VGFiKCd1c2VycycpOwoJJHRoaXMtPl9EaXNwbGF5QWRtaW5Vc2Vyc1RhYiggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCWVjaG8gJHRoaXMtPkVuZFRhYigpOwoKCWVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdhZG1pbicpOwoJJHRoaXMtPl9EaXNwbGF5QWRtaW5BZG1pblRhYiggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCWVjaG8gJHRoaXMtPkVuZFRhYigpOwogICAgICB9CgogICAgaWYoICR0aGlzLT5fSGFzU3VmZmljaWVudFBlcm1pc3Npb25zKCdzaXRlcHJlZnMnKSApCiAgICAgIHsKCWVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdwcmVmcycpOwoJJHRoaXMtPl9EaXNwbGF5QWRtaW5QcmVmc1RhYiggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCWVjaG8gJHRoaXMtPkVuZFRhYigpOwogICAgICB9CgogICAgaWYoICR0aGlzLT5fSGFzU3VmZmljaWVudFBlcm1pc3Npb25zKCd0ZW1wbGF0ZXMnKSApCiAgICAgIHsKCWVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdsb2dpbnRlbXBsYXRlJyk7CgkkdGhpcy0+X0Rpc3BsYXlBZG1pbkxvZ2luVGVtcGxhdGVUYWIoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CgllY2hvICR0aGlzLT5FbmRUYWIoKTsKCgllY2hvICR0aGlzLT5TdGFydFRhYignbG9nb3V0dGVtcGxhdGUnKTsKCSR0aGlzLT5fRGlzcGxheUFkbWluTG9nb3V0VGVtcGxhdGVUYWIoICRpZCwgJHBhcmFtcywgJHJldHVybmlkICk7CgllY2hvICR0aGlzLT5FbmRUYWIoKTsKCgllY2hvICR0aGlzLT5TdGFydFRhYignY2hhbmdlc2V0dGluZ3NfdGVtcGxhdGUnKTsKCSR0aGlzLT5fRGlzcGxheUFkbWluQ2hhbmdlU2V0dGluZ3NUZW1wbGF0ZVRhYiggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCWVjaG8gJHRoaXMtPkVuZFRhYigpOwoKCWVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdmb3Jnb3RwYXNzd29yZF90ZW1wbGF0ZScpOwoJJHRoaXMtPl9EaXNwbGF5QWRtaW5Gb3Jnb3RQYXNzd29yZFRlbXBsYXRlVGFiKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwoJZWNobyAkdGhpcy0+RW5kVGFiKCk7CiAgICAgIH0KCiAgICBlY2hvICR0aGlzLT5FbmRUYWJDb250ZW50KCk7CiAgfQoKCiAgZnVuY3Rpb24gX0Rpc3BsYXlBZG1pblByZWZzVGFiKCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQgKQogIHsKICAgIC8vIGZpbGwgb3V0IHRoZSB0ZW1wbGF0ZQogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydGZvcm0nLAoJCQkgICR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoICRpZCwgJ2RvX3NldHByZWZzJykpOwoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X3B3ZmxkbGVuJywgJHRoaXMtPkxhbmcoJ3Byb21wdF9wd2ZsZGxlbicpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfcHdmbGRsZW4nLCAKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2lucHV0X3B3ZmxkbGVuJywgCgkJCQkJCSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncGFzc3dvcmRmbGRsZW5ndGgnLDIwKSwgCgkJCQkJCSAyLCAyICkpOwoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X21pbnB3bGVuJywgJHRoaXMtPkxhbmcoJ3Byb21wdF9taW5wd2xlbicpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfbWlucHdsZW4nLCAKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2lucHV0X21pbnB3bGVuJywgCgkJCQkJCSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWluX3Bhc3N3b3JkbGVuZ3RoJyksIDIsIDIgKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2luZm9fbWlucHdsZW4nLAoJCQkgICR0aGlzLT5MYW5nKCd3YXJuaW5nX2VmZmVjdHNmaWVsZGxlbmd0aCcpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X21heHB3bGVuJywgJHRoaXMtPkxhbmcoJ3Byb21wdF9tYXhwd2xlbicpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfbWF4cHdsZW4nLCAKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2lucHV0X21heHB3bGVuJywgCgkJCQkJCSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWF4X3Bhc3N3b3JkbGVuZ3RoJyksIDIsIDIgKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2luZm9fbWF4cHdsZW4nLAoJCQkgICR0aGlzLT5MYW5nKCd3YXJuaW5nX2VmZmVjdHNmaWVsZGxlbmd0aCcpKTsKCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF91bmZsZGxlbicsICR0aGlzLT5MYW5nKCdwcm9tcHRfdW5mbGRsZW4nKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3VuZmxkbGVuJywgCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdpbnB1dF91bmZsZGxlbicsIAoJCQkJCQkgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3VzZXJuYW1lZmxkbGVuZ3RoJywyMCksIAoJCQkJCQkgMiwgMiApKTsKCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF9taW51bmxlbicsICR0aGlzLT5MYW5nKCdwcm9tcHRfbWludW5sZW4nKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X21pbnVubGVuJywgCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdpbnB1dF9taW51bmxlbicsIAoJCQkJCQkgJHRoaXMtPkdldFByZWZlcmVuY2UoJ21pbl91c2VybmFtZWxlbmd0aCcpLCAyLCAyICkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbmZvX21pbnVubGVuJywKCQkJICAkdGhpcy0+TGFuZygnd2FybmluZ19lZmZlY3RzZmllbGRsZW5ndGgnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF9tYXh1bmxlbicsICR0aGlzLT5MYW5nKCdwcm9tcHRfbWF4dW5sZW4nKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X21heHVubGVuJywgCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdpbnB1dF9tYXh1bmxlbicsIAoJCQkJCQkgJHRoaXMtPkdldFByZWZlcmVuY2UoJ21heF91c2VybmFtZWxlbmd0aCcpLCAyLCAyICkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbmZvX21heHVubGVuJywKCQkJICAkdGhpcy0+TGFuZygnd2FybmluZ19lZmZlY3RzZmllbGRsZW5ndGgnKSk7CgogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfc2Vzc2lvbnRpbWVvdXQnLCAkdGhpcy0+TGFuZygncHJvbXB0X3Nlc3Npb250aW1lb3V0JykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9zZXNzaW9udGltZW91dCcsIAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCAnaW5wdXRfc2Vzc2lvbnRpbWVvdXQnLCAKCQkJCQkJICR0aGlzLT5HZXRQcmVmZXJlbmNlKCd1c2VyX3Nlc3Npb25fZXhwaXJlcycpLCA0LCA0ICkpOwoJCQkgIAogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfcmVxdWlyZW9uZWdyb3VwJywgJHRoaXMtPkxhbmcoJ3Byb21wdF9yZXF1aXJlb25lZ3JvdXAnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X3JlcXVpcmVvbmVncm91cCcsIAoJCQkgIG15Q3JlYXRlSW5wdXRDaGVja2JveCgkaWQsICdpbnB1dF9yZXF1aXJlb25lZ3JvdXAnLCAxLCAKCQkJCQkJJHRoaXMtPkdldFByZWZlcmVuY2UoJ3JlcXVpcmVfb25lZ3JvdXAnKSkpOwoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X3NtdHB2YWxpZGF0ZScsICR0aGlzLT5MYW5nKCdwcm9tcHRfc210cHZhbGlkYXRlJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9zbXRwdmFsaWRhdGUnLCAKCQkJICBteUNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAnaW5wdXRfc210cHZhbGlkYXRlJywgMSwgCgkJCQkJCSR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkb19zbXRwX3ZhbGlkYXRlX2VtYWlsJykpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5mb19zbXRwdmFsaWRhdGUnLCAkdGhpcy0+TGFuZygnaW5mb19zbXRwdmFsaWRhdGUnKSk7CgoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X2FsbG93X2R1cGxpY2F0ZV9lbWFpbHMnLCAKCQkJICAkdGhpcy0+TGFuZygncHJvbXB0X2FsbG93X2R1cGxpY2F0ZV9lbWFpbHMnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X2FsbG93X2R1cGxpY2F0ZV9lbWFpbHMnLCAKCQkJICBteUNyZWF0ZUlucHV0Q2hlY2tib3goJGlkLCAnaW5wdXRfYWxsb3dfZHVwbGljYXRlX2VtYWlscycsIDEsIAoJCQkJCQkkdGhpcy0+R2V0UHJlZmVyZW5jZSgnYWxsb3dfZHVwbGljYXRlX2VtYWlscycpKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2luZm9fYWxsb3dfZHVwbGljYXRlX2VtYWlscycsICR0aGlzLT5MYW5nKCdpbmZvX2FsbG93X2R1cGxpY2F0ZV9lbWFpbHMnKSk7CgogICAgCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF9kZmx0Z3JvdXAnLCAkdGhpcy0+TGFuZygncHJvbXB0X2RmbHRncm91cCcpKTsKICAgICRncm91cHMxID0gJHRoaXMtPkdldEdyb3VwTGlzdCgpOwogICAgJGdyb3VwcyA9IGFycmF5X21lcmdlKCBhcnJheSgiTm9uZSIgPT4gLTEpLCAkZ3JvdXBzMSApOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9kZmx0Z3JvdXAnLAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dERyb3BEb3duKCAkaWQsICdpbnB1dF9kZmx0Z3JvdXAnLCAkZ3JvdXBzLCAtMSwKCQkJCQkJICAgICAgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2RlZmF1bHRfZ3JvdXAnKSkpOwoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignc3VibWl0JywKCQkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0ICgkaWQsICdzdWJtaXQnLAoJCQkJCQkJICAgICR0aGlzLT5MYW5nKCdzdWJtaXQnKSwnJywnJywKCQkJCQkJCSAgICAkdGhpcy0+TGFuZygnY29uZmlybV9zdWJtaXRwcmVmcycpKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdjYW5jZWwnLAoJCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ2NhbmNlbCcsCgkJCQkJCQkgICAgJHRoaXMtPkxhbmcoJ2NhbmNlbCcpKSk7CgogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfcmVxdWlyZWRtYXJrZXInLAoJCQkgICR0aGlzLT5MYW5nKCdyZXF1aXJlZGZpZWxkbWFya2VyJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9yZXF1aXJlZG1hcmtlcicsCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ2lucHV0X3JlcXVpcmVkZmllbGRtYXJrZXInLAoJCQkJCQkgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3JlcXVpcmVkX2ZpZWxkX21hcmtlcicsJyonKSwyLDIpKTsKCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF9yZXF1aXJlZGNvbG9yJywKCQkJICAkdGhpcy0+TGFuZygncmVxdWlyZWRmaWVsZGNvbG9yJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9yZXF1aXJlZGNvbG9yJywKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwnaW5wdXRfcmVxdWlyZWRmaWVsZGNvbG9yJywKCQkJCQkJICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdyZXF1aXJlZF9maWVsZF9jb2xvcicsJ2JsdWUnKSwxMCwxMCkpOwoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X2hpZGRlbm1hcmtlcicsCgkJCSAgJHRoaXMtPkxhbmcoJ2hpZGRlbmZpZWxkbWFya2VyJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9oaWRkZW5tYXJrZXInLAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCdpbnB1dF9oaWRkZW5maWVsZG1hcmtlcicsCgkJCQkJCSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnaGlkZGVuX2ZpZWxkX21hcmtlcicsJyEhJyksMiwyKSk7CgogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfaGlkZGVuY29sb3InLAoJCQkgICR0aGlzLT5MYW5nKCdoaWRkZW5maWVsZGNvbG9yJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9oaWRkZW5jb2xvcicsCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ2lucHV0X2hpZGRlbmZpZWxkY29sb3InLAoJCQkJCQkgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2hpZGRlbl9maWVsZF9jb2xvcicsJ2dyZWVuJyksMTAsMTApKTsKCiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF9mb3Jnb3Rwd19wYWdlJywKCQkJICAkdGhpcy0+TGFuZygncHJvbXB0X2ZvcmdvdHB3X3BhZ2UnKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2lucHV0X2ZvcmdvdHB3X3BhZ2UnLAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCdpbnB1dF9mb3Jnb3Rwd19wYWdlJywgCgkJCQkJCSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncGFnZWlkZm9yZ290cGFzc3dkJyksIDE1LCAxNSkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfY2hhbmdlc2V0dGluZ3NfcGFnZScsCgkJCSAgJHRoaXMtPkxhbmcoJ3Byb21wdF9jaGFuZ2VzZXR0aW5nc19wYWdlJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9jaGFuZ2VzZXR0aW5nc19wYWdlJywKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwnaW5wdXRfY2hhbmdlc2V0dGluZ3NfcGFnZScsIAoJCQkJCQkgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3BhZ2VpZF9jaGFuZ2VzZXR0aW5ncycpLCAxNSwgMTUpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X2xvZ2luX3BhZ2UnLAoJCQkgICR0aGlzLT5MYW5nKCdwcm9tcHRfbG9naW5fcGFnZScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfbG9naW5fcGFnZScsCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ2lucHV0X2xvZ2luX3BhZ2UnLCAKCQkJCQkJICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdwYWdlaWRfbG9naW4nKSwgMTUsIDE1KSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF9sb2dvdXRfcGFnZScsCgkJCSAgJHRoaXMtPkxhbmcoJ3Byb21wdF9sb2dvdXRfcGFnZScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfbG9nb3V0X3BhZ2UnLAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCdpbnB1dF9sb2dvdXRfcGFnZScsIAoJCQkJCQkgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3BhZ2VpZF9sb2dvdXQnKSwgMTUsIDE1KSk7CgkJCQkJCSAKICAgICRudW0gPSAkdGhpcy0+Q291bnRUZW1wQ29kZVJlY29yZHMoKTsKICAgIGlmKCAkbnVtICkKICAgIHsKICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfbnVtcmVzZXRyZWNvcmRzJywKCQkJICAgICR0aGlzLT5MYW5nKCdwcm9tcHRfbnVtcmVzZXRyZWNvcmQnKSk7CiAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZGF0YV9udW1yZXNldHJlY29yZHMnLCAkbnVtKTsgLy90b2RvCiAgICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfcmVtb3ZlYWxsJywKCQkJICAgICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsJ2lucHV0X3JlbW92ZWFsbCcsCgkJCQkJCSAgICAgJHRoaXMtPkxhbmcoJ3JlbW92ZWFsbCcpLAoJCQkJCQkgICAgICdvbmNsaWNrPSJyZXR1cm4gY29uZmlybShcJycuJHRoaXMtPkxhbmcoJ2FyZXlvdXN1cmUnKS4nXCcpIicpKTsKICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9yZW1vdmUxd2VlaycsCgkJCSAgICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdpbnB1dF9yZW1vdmUxd2VlaycsCgkJCQkJCSAgICAgJHRoaXMtPkxhbmcoJ3JlbW92ZTF3ZWVrJyksCgkJCQkJCSAgICAgJ29uY2xpY2s9InJldHVybiBjb25maXJtKFwnJy4kdGhpcy0+TGFuZygnYXJleW91c3VyZScpLidcJykiJykpOwogICAgICAKICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9yZW1vdmUxbW9udGgnLAoJCQkgICAgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnaW5wdXRfcmVtb3ZlMW1vbnRoJywKCQkJCQkJICAgICAkdGhpcy0+TGFuZygncmVtb3ZlMW1vbnRoJyksCgkJCQkJCSAgICAgJ29uY2xpY2s9InJldHVybiBjb25maXJtKFwnJy4kdGhpcy0+TGFuZygnYXJleW91c3VyZScpLidcJykiJykpOwogICAgfQogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW5wcmVmcy50cGwnKTsKICB9CgoKICBmdW5jdGlvbiBfRGlzcGxheVVzZXJGb3Jnb3RQYXNzd29yZFBhZ2UoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgJHVzZXJuYW1lID0gJyc7CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X3VzZXJuYW1lJ10gKSApCiAgICAgIHsKCSR1c2VybmFtZSA9IHRyaW0oICRwYXJhbXNbJ2lucHV0X3VzZXJuYW1lJ10gKTsKICAgICAgfQoKICAgIGlmKCBpc3NldCggJHBhcmFtc1snZXJyb3InXSApICkKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlcnJvcicsICRwYXJhbXNbJ2Vycm9yJ10gKTsKICAgICAgfQogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydtZXNzYWdlJ10gKSApCiAgICAgIHsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignbWVzc2FnZScsICRwYXJhbXNbJ21lc3NhZ2UnXSApOwogICAgICB9CiAgICAKICAgIGlmKCAhaXNzZXQoICRwYXJhbXNbJ3NraXBmb3JtZGlzcGxheSddICkgKQogICAgICB7CgkvLyBzZXR1cCB0aGUgdGVtcGxhdGUKCSR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywKCQkJICAgICAgJHRoaXMtPmZlQ3JlYXRlRm9ybVN0YXJ0KCAkaWQsICdkb19mb3Jnb3RwdycsICRyZXR1cm5pZCApKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignZW5kZm9ybScsCgkJCSAgICAgICR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCd0aXRsZScsCgkJCSAgICAgICR0aGlzLT5MYW5nKCdmb3Jnb3RwdycpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignbG9zdHB3X21lc3NhZ2UnLAoJCQkgICAgICAkdGhpcy0+TGFuZygnbG9zdHB3X21lc3NhZ2UnKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF91c2VybmFtZScsCgkJCSAgICAgICR0aGlzLT5MYW5nKCdwcm9tcHRfdXNlcm5hbWUnKSk7CiAgICAgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9sYWJlbCcsJGlkKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfdXNlcm5hbWUnLAoJCQkgICAgICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCAkaWQsICdpbnB1dF91c2VybmFtZScsIAoJCQkJCQkgICAgICAkdXNlcm5hbWUsIAoJCQkJCQkgICAgICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWluX3VzZXJuYW1lbGVuZ3RoJyksIAoJCQkJCQkgICAgICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWF4X3VzZXJuYW1lbGVuZ3RoJykpKTsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignc3VibWl0JywKCQkJICAgICAgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3N1Ym1pdCcsJHRoaXMtPkxhbmcoJ3N1Ym1pdCcpKSk7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2NhbmNlbCcsCgkJCSAgICAgICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCgkaWQsICdjYW5jZWwnLCR0aGlzLT5MYW5nKCdjYW5jZWwnKSkpOwoJaWYoIGlzc2V0KCAkcGFyYW1zWydyZXR1cm50byddICkgKQoJICB7CgkgICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdoaWRkZW4nLAoJCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCdpbnB1dF9yZXR1cm50bycsJHBhcmFtc1sncmV0dXJudG8nXSkpOwoJICB9CiAgICAgIH0KICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhYmFzZSggJ2ZldXNlcnNfZm9yZ290cGFzc3dvcmRmb3JtJyApOwogIH0KCgogIGZ1bmN0aW9uIF9EaXNwbGF5VXNlckZvcmdvdFBhc3N3b3JkVmVyaWZpY2F0aW9uUGFnZSggJGlkLCAmJHBhcmFtcywgJHJldHVybmlkICkKICB7CiAgICAvLyBmaWxsIGluIHRoZSB0ZW1wbGF0ZQogICAgJHVpZCA9ICcnOwogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF91aWQnXSApICkKICAgICAgewoJJHVpZCA9ICRwYXJhbXNbJ2lucHV0X3VpZCddOwogICAgICB9CiAgICAkdXNlcm5hbWUgPSAnJzsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfdXNlcm5hbWUnXSApICkKICAgICAgewoJJHVzZXJuYW1lID0gJHBhcmFtc1snaW5wdXRfdXNlcm5hbWUnXTsKICAgICAgfQogICAgZWxzZQogICAgICB7CgkkdXNlcm5hbWUgPSAkdGhpcy0+R2V0VXNlck5hbWUoICR1aWQgKTsKICAgICAgfQogICAgJGNvZGUgPSAnJzsKICAgIGlmKCBpc3NldCggJHBhcmFtc1snaW5wdXRfY29kZSddICkgKQogICAgICB7CgkkY29kZSA9ICRwYXJhbXNbJ2lucHV0X2NvZGUnXTsKICAgICAgfQogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydlcnJvciddICkgKQogICAgICB7CgkkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2Vycm9yJywkcGFyYW1zWydlcnJvciddKTsKICAgICAgfQogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydtZXNzYWdlJ10gKSApCiAgICAgIHsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignbWVzc2FnZScsJHBhcmFtc1snbWVzc2FnZSddKTsKICAgICAgfQoKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywKCQkJICAkdGhpcy0+ZmVDcmVhdGVGb3JtU3RhcnQoJGlkLCdkb192ZXJpZnljb2RlJywkcmV0dXJuaWQpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignZW5kZm9ybScsCgkJCSAgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2hpZGRlbicsCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuKCRpZCwnaW5wdXRfdWlkJywkdWlkKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3N1Ym1pdCcsCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwgJ3N1Ym1pdCcsJHRoaXMtPkxhbmcoJ3N1Ym1pdCcpKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF91c2VybmFtZScsJHRoaXMtPkxhbmcoJ3Byb21wdF91c2VybmFtZScpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignaW5wdXRfdXNlcm5hbWUnLAoJCQkgICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoICRpZCwgJ2lucHV0X3VzZXJuYW1lJywgJHVzZXJuYW1lLCAKCQkJCQkJICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgndXNlcm5hbWVmbGRsZW5ndGgnKSwgCgkJCQkJCSAgJHRoaXMtPkdldFByZWZlcmVuY2UoJ21heF91c2VybmFtZWxlbmd0aCcpLAoJCQkJCQkgICdkaXNhYmxlZD0iZGlzYWJsZWQiJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfY29kZScsJHRoaXMtPkxhbmcoJ3Byb21wdF9jb2RlJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9jb2RlJywKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCAkaWQsICdpbnB1dF9jb2RlJywgJGNvZGUsIDEwLCAxMCApKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigncHJvbXB0X3Bhc3N3b3JkJywkdGhpcy0+TGFuZygncHJvbXB0X3Bhc3N3b3JkJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9wYXNzd29yZCcsCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0UGFzc3dvcmQoJGlkLCAnaW5wdXRfcGFzc3dvcmQnLCAnJywgCgkJCQkJCSAgICAgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3Bhc3N3b3JkZmxkbGVuZ3RoJyksCgkJCQkJCSAgICAgJHRoaXMtPkdldFByZWZlcmVuY2UoJ21heF9wYXNzd29yZGxlbmd0aCcpKSk7CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ3Byb21wdF9yZXBlYXRwYXNzd29yZCcsJHRoaXMtPkxhbmcoJ3JlcGVhdHBhc3N3b3JkJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdpbnB1dF9yZXBlYXRwYXNzd29yZCcsCgkJCSAgJHRoaXMtPkNyZWF0ZUlucHV0UGFzc3dvcmQoJGlkLCAnaW5wdXRfcmVwZWF0cGFzc3dvcmQnLCAnJywKCQkJCQkJICAgICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncGFzc3dvcmRmbGRsZW5ndGgnKSwKCQkJCQkJICAgICAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnbWF4X3Bhc3N3b3JkbGVuZ3RoJykpKTsKICAgIGVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhYmFzZSgnZmV1c2Vyc19mb3Jnb3RwYXNzd29yZHZlcmlmeWZvcm0nKTsKICB9CgoKICBmdW5jdGlvbiBfRGlzcGxheVVzZXJTZXR0aW5nc1BhZ2UoICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCApCiAgewogICAgJHVpZCA9ICR0aGlzLT5Mb2dnZWRJbklkKCk7CiAgICBpZiggJHVpZCA9PSBmYWxzZSApIAogICAgICB7CgkvLyB1c2VyIGlzbid0IGxvZ2dlZCBpbgoJJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgCgkJCQkgICR0aGlzLT5MYW5nKCdlcnJvcl9ub3Rsb2dnZWRpbicpKTsKCXJldHVybjsKICAgICAgfQogICAgJHJlc3VsdCA9ICR0aGlzLT5HZXRVc2VySW5mbyggJHVpZCApOwogICAgaWYoICRyZXN1bHRbMF0gPT0gRkFMU0UgKQogICAgICB7CgkvLyB1c2VyIGlzbid0IGxvZ2dlZCBpbgoJJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgCgkJCQkgICRyZXN1bHRbMV0pOwoJcmV0dXJuOwogICAgICB9CiAgICAkdWluZm8gPSAkcmVzdWx0WzFdOwoKICAgIGlmKCBpc3NldCggJHBhcmFtc1snZXJyb3InXSApICkKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlcnJvcicsICRwYXJhbXNbJ2Vycm9yJ10gKTsKICAgICAgfQogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydtZXNzYWdlJ10gKSApCiAgICAgIHsKCSR0aGlzLT5zbWFydHktPmFzc2lnbignbWVzc2FnZScsICRwYXJhbXNbJ21lc3NhZ2UnXSApOwogICAgICB9CgogICAgLy8gZ2V0IHRoZSB1c2VycyBtZW1iZXIgZ3JvdXBzCiAgICAkZ3JvdXBzID0gJHRoaXMtPkdldE1lbWJlckdyb3Vwc0FycmF5KCAkdWlkICk7CiAgICBpZiggISRncm91cHMgKQogICAgICB7CgkvLyB0aGlzIHVzZXIgaXMgbm90IGEgbWVtYmVyIG9mIGFueSBncnVvcHMuLi4KCS8vIGhhbmRsZSB0aGlzIGxhdGVyIHRvZG8KCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsIAoJCQkJICAkdGhpcy0+TGFuZygnZXJyb3Jfbm9ncm91cHMnKSk7CglyZXR1cm47CiAgICAgIH0KCiAgICAvLyBub3cgd2UgaGF2ZSB0aGUgZ3JvdXBzLCB3ZSBidWlsZCBhIHVuaW9uIG9mIGFsbCBvZiB0aGUgZ3JvdXBzIHByb3BlcnRpZXMKICAgICRwcm9wZXJ0aWVzID0gYXJyYXkoKTsKICAgIGZvcmVhY2goICRncm91cHMgYXMgJGdycHJlY29yZCApCiAgICB7CiAgICAgICRnaWQgPSAkZ3JwcmVjb3JkWydncm91cGlkJ107CiAgICAgICRwcm9wcmVsYXRpb25zID0gJHRoaXMtPkdldEdyb3VwUHJvcGVydHlSZWxhdGlvbnMoICRnaWQgKTsKICAgICAgJHByb3BlcnRpZXMgPSBhcnJheV9tZXJnZV9ieV9uYW1lX3JlcXVpcmVkKCAkcHJvcGVydGllcywgJHByb3ByZWxhdGlvbnMgKTsKICAgICAgdWFzb3J0KCAkcHJvcGVydGllcywgJ2NvbXBhcmVfZWxlbWVudHNfYnlfc29ydG9yZGVyX2tleScgKTsKICAgIH0KCiAgICBpZiggY291bnQoJHByb3BlcnRpZXMpID09IDAgKQogICAgICB7CglpZiggJHRoaXMtPkdldFByZWZlcmVuY2UoJ3JlcXVpcmVfb25lZ3JvdXAnKSA9PSAxICkKCSAgewoJICAgIC8vIHRoaXMgdXNlciBpcyBub3QgYSBtZW1iZXIgb2YgYW55IGdydW9wcy4uLgoJICAgIC8vIGhhbmRsZSB0aGlzIGxhdGVyIHRvZG8KCSAgICAkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAKCQkJCSAgICAgICR0aGlzLT5MYW5nKCdlcnJvcl9vbmVncm91cHJlcXVpcmVkJykpOwoJICAgIHJldHVybjsKCSAgfQogICAgICB9CgoKICAgIC8vIG5vdyB3ZSdyZSByZWFkeSB0byBwb3B1bGF0ZSB0aGUgdGVtcGxhdGUKICAgIC8vIGZpcnN0IHdlIHB1dCBpbiBzdHVmZiB0aGF0IGlzIHJlcXVpcmVkICh1c2VybmFtZSwgcGFzc3dvcmQsIGV0YywgZXRjKQogICAgJHJvd2FycmF5ID0gYXJyYXkoKTsKCiAgICAvLyBtYWtlIHN1cmUgdXNlcm5hbWUgaXMgaW4gdGhlcmUKICAgICR2YWwgPSAkdWluZm9bJ3VzZXJuYW1lJ107CiAgICAkb25lcm93ID0gbmV3IFN0ZENsYXNzKCk7CiAgICAkb25lcm93LT5jb2xvciA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdyZXF1aXJlZF9maWVsZF9jb2xvcicsJ2JsdWUnKTsKICAgICRvbmVyb3ctPm1hcmtlciA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdyZXF1aXJlZF9maWVsZF9tYXJrZXInLCcqJyk7CiAgICAkb25lcm93LT5yZXF1aXJlZCA9IDE7CiAgICAkb25lcm93LT5oaWRkZW4gPSBteUNyZWF0ZUlucHV0SGlkZGVuKCAkaWQsICdoaWRkZW5fdXNlcm5hbWUnLAoJCQkJCSAgIGltcGxvZGUoIjsiLGFycmF5KCd1c2VybmFtZScsMCwzMCwzKSkpOwogICAgJG9uZXJvdy0+cHJvbXB0ID0gJHRoaXMtPkxhbmcoJ3VzZXJuYW1lJyk7CiAgICAkb25lcm93LT5jb250cm9sID0kdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwgJ2lucHV0X3VzZXJuYW1lJywgJHZhbCwKCQkJCQkgICAgICR0aGlzLT5HZXRQcmVmZXJlbmNlKCd1c2VybmFtZWZsZGxlbmd0aCcpLAoJCQkJCSAgICAgJHRoaXMtPkdldFByZWZlcmVuY2UoJ21heF91c2VybmFtZWxlbmd0aCcpLAoJCQkJCSAgICAgJ2Rpc2FibGVkPSJkaXNhYmxlZCInKTsKICAgIGFycmF5X3B1c2goICRyb3dhcnJheSwgJG9uZXJvdyApOwoKICAgIC8vIGFuZCBwYXNzd29yZAogICAgJHZhbCA9ICcnOwogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9wYXNzd29yZCddICkgKQogICAgICAkdmFsID0gJHBhcmFtc1snaW5wdXRfcGFzc3dvcmQnXTsKICAgICRvbmVyb3cgPSBuZXcgU3RkQ2xhc3MoKTsKICAgICRvbmVyb3ctPmNvbG9yID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3JlcXVpcmVkX2ZpZWxkX2NvbG9yJywnYmx1ZScpOwogICAgJG9uZXJvdy0+bWFya2VyID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3JlcXVpcmVkX2ZpZWxkX21hcmtlcicsJyonKTsKICAgICRvbmVyb3ctPnJlcXVpcmVkID0gMTsKICAgICRvbmVyb3ctPmhpZGRlbiA9IG15Q3JlYXRlSW5wdXRIaWRkZW4oICRpZCwgJ2hpZGRlbl9wYXNzd29yZCcsCgkJCQkJICAgaW1wbG9kZSgiOyIsYXJyYXkoJ3Bhc3N3b3JkJywwLDMwLDMpKSk7CiAgICAkb25lcm93LT5wcm9tcHQgPSAkdGhpcy0+TGFuZygncGFzc3dvcmQnKTsKICAgICRvbmVyb3ctPmNvbnRyb2wgPSR0aGlzLT5DcmVhdGVJbnB1dFBhc3N3b3JkKCRpZCwgJ2lucHV0X3Bhc3N3b3JkJywgJHZhbCwgCgkJCQkJCSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncGFzc3dvcmRmbGRsZW5ndGgnKSwKCQkJCQkJICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdtYXhfcGFzc3dvcmRsZW5ndGgnKSk7CiAgICAkb25lcm93LT5hZGR0ZXh0ID0kdGhpcy0+TGFuZygnaW5mb19lbXB0eXBhc3N3b3JkZmllbGQnKTsKICAgIGFycmF5X3B1c2goICRyb3dhcnJheSwgJG9uZXJvdyApOwoKICAgIC8vIGFuZCBtYWtlIGhpbSByZXBlYXQgdGhlIHBhc3N3b3JkCiAgICAkdmFsID0gJyc7CiAgICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X3JlcGVhdHBhc3N3b3JkJ10gKSApCiAgICAgICR2YWwgPSAkcGFyYW1zWydpbnB1dF9yZXBlYXRwYXNzd29yZCddOwogICAgJG9uZXJvdyA9IG5ldyBTdGRDbGFzcygpOwogICAgJG9uZXJvdy0+Y29sb3IgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncmVxdWlyZWRfZmllbGRfY29sb3InLCdibHVlJyk7CiAgICAkb25lcm93LT5tYXJrZXIgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncmVxdWlyZWRfZmllbGRfbWFya2VyJywnKicpOwogICAgJG9uZXJvdy0+cmVxdWlyZWQgPSAxOwogICAgJG9uZXJvdy0+aGlkZGVuID0gbXlDcmVhdGVJbnB1dEhpZGRlbiggJGlkLCAnaGlkZGVuX3JlcGVhdHBhc3N3b3JkJywKCQkJCQkgICBpbXBsb2RlKCI7IixhcnJheSgncmVwZWF0cGFzc3dvcmQnLDAsMzAsMykpKTsKICAgICRvbmVyb3ctPnByb21wdCA9ICR0aGlzLT5MYW5nKCdyZXBlYXRwYXNzd29yZCcpOwogICAgJG9uZXJvdy0+Y29udHJvbCA9JHRoaXMtPkNyZWF0ZUlucHV0UGFzc3dvcmQoJGlkLCAnaW5wdXRfcmVwZWF0cGFzc3dvcmQnLCAkdmFsLCAzMCwgMzApOwogICAgJG9uZXJvdy0+YWRkdGV4dCA9JHRoaXMtPkxhbmcoJ2luZm9fZW1wdHlwYXNzd29yZGZpZWxkJyk7CiAgICBhcnJheV9wdXNoKCAkcm93YXJyYXksICRvbmVyb3cgKTsKICAgICAgICAKICAgIGZvcmVhY2goICRwcm9wZXJ0aWVzIGFzICRwcm9wICkKICAgIHsKICAgICAgLy8gZG9uJ3QgcHJvY2VzcyBoaWRkZW4gZmllbGRzIGhlcmUKICAgICAgaWYoICRwcm9wWydyZXF1aXJlZCddID09IDMgKSBjb250aW51ZTsKCiAgICAgIC8vIGdldCB0aGUgcHJvcGVydHkgZGVmaW5pdGlvbgogICAgICAkZGVmbiA9ICR0aGlzLT5HZXRQcm9wZXJ0eURlZm4oICRwcm9wWyduYW1lJ10gKTsKICAgICAgJHZhbCA9ICR0aGlzLT5HZXRVc2VyUHJvcGVydHlGdWxsKCAkcHJvcFsnbmFtZSddLCAkdWlkICk7CiAgICAgICRvbmVyb3cgPSBuZXcgU3RkQ2xhc3MoKTsgCgogICAgICAkY29sb3IgPSAnJzsKICAgICAgaWYoICRwcm9wWydyZXF1aXJlZCddID09IDIgKSAkY29sb3IgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncmVxdWlyZWRfZmllbGRfY29sb3InLCdibHVlJyk7CiAgICAgICRtYXJrZXIgPSAnJzsKICAgICAgaWYoICRwcm9wWydyZXF1aXJlZCddID09IDIgKSAkbWFya2VyID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3JlcXVpcmVkX2ZpZWxkX21hcmtlcicsJyonKTsKICAgICAgJG9uZXJvdy0+cmVxdWlyZWQgPSAoJHByb3BbJ3JlcXVpcmVkJ10gPT0gMik7CiAgICAgICRvbmVyb3ctPmNvbG9yICAgID0gJGNvbG9yOwogICAgICAkb25lcm93LT5tYXJrZXIgICA9ICRtYXJrZXI7CiAgICAgICRvbmVyb3ctPmhpZGRlbiA9IG15Q3JlYXRlSW5wdXRIaWRkZW4oICRpZCwgJ2hpZGRlbl8nLiRwcm9wWyduYW1lJ10sCgkJCQkJICAgICBpbXBsb2RlKCI7IixhcnJheSgkcHJvcFsnbmFtZSddLCRkZWZuWyd0eXBlJ10sCgkJCQkJCQkgICAgICAgJGRlZm5bJ2xlbmd0aCddLCRwcm9wWydyZXF1aXJlZCddKSkpOwoKICAgICAgJG9uZXJvdy0+cHJvbXB0ID0gJGRlZm5bJ3Byb21wdCddOwogICAgICBzd2l0Y2goICRkZWZuWyd0eXBlJ10gKQoJewoJY2FzZSAwOiAvLyB0ZXh0CgkgICRvbmVyb3ctPmNvbnRyb2wgPSAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCAkaWQsICdpbnB1dF8nLiRwcm9wWyduYW1lJ10sCgkJCQkJCSAgICAgJHZhbCwgJGRlZm5bJ2xlbmd0aCddLCAkZGVmblsnbWF4bGVuZ3RoJ10gKTsKCSAgYnJlYWs7CgoJY2FzZSAxOiAvLyBjaGVja2JveAoJICAkb25lcm93LT5jb250cm9sID0gbXlDcmVhdGVJbnB1dENoZWNrYm94KCAkaWQsICdpbnB1dF8nLiRwcm9wWyduYW1lJ10sIDEsICR2YWwgKTsKCSAgYnJlYWs7CgoJY2FzZSAyOiAvLyBlbWFpbAoJICAkb25lcm93LT5jb250cm9sID0gJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCggJGlkLCAnaW5wdXRfJy4kcHJvcFsnbmFtZSddLAoJCQkJCQkgICAgICR2YWwsICRkZWZuWydsZW5ndGgnXSwgJGRlZm5bJ21heGxlbmd0aCddICk7CgkgIGJyZWFrOwoKCWNhc2UgMzogLy8gdGV4dGFyZWEKCSAgJG9uZXJvdy0+Y29udHJvbCA9ICR0aGlzLT5DcmVhdGVUZXh0QXJlYShmYWxzZSwgJGlkLCAkdmFsLCAnaW5wdXRfJy4kcHJvcFsnbmFtZSddKTsKCSAgYnJlYWs7CgoJY2FzZSA0OiAvLyBkcm9wZG93bgoJICAkb25lcm93LT5jb250cm9sID0gJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oIAoJCQkJCQkJJGlkLCAKCQkJCQkJCSdpbnB1dF8nLiRwcm9wWyduYW1lJ10sIAoJCQkJCQkJJHRoaXMtPkdldFNlbGVjdE9wdGlvbnMoJGRlZm5bJ25hbWUnXSwgMSksIAoJCQkJCQkJLTEsIAoJCQkJCQkJJHZhbCk7CgkgIGJyZWFrOwoJfQoKICAgICAgYXJyYXlfcHVzaCggJHJvd2FycmF5LCAkb25lcm93ICk7CiAgICB9CgogICAgLy8gZmlsbCBpbiB0aGUgdmFyaWFibGVzIGZvciB0aGUgdGVtcGxhdGUKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbigndGl0bGUnLCR0aGlzLT5MYW5nKCd1c2VyX3NldHRpbmdzJykpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdzdGFydGZvcm0nLAoJCQkgICR0aGlzLT5mZUNyZWF0ZUZvcm1TdGFydCgkaWQsJ2RvX3VzZXJjaGFuZ2VzZXR0aW5ncycsJHJldHVybmlkICkpOwogICAgJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywKCQkJICAkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignc3VibWl0JywKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnc3VibWl0JywkdGhpcy0+TGFuZygnc3VibWl0JykpKTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignY2FuY2VsJywKCQkJICAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCAnY2FuY2VsJywkdGhpcy0+TGFuZygnY2FuY2VsJykpKTsKICAgIGlmKCBpc3NldCggJHBhcmFtc1sncmV0dXJudG8nXSApICkKICAgICAgewoJJHRoaXMtPnNtYXJ0eS0+YXNzaWduKCdoaWRkZW4nLAoJCQkgICAgICAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCdpbnB1dF9yZXR1cm50bycsJHBhcmFtc1sncmV0dXJudG8nXSkpOwogICAgICB9CiAgICAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2NvbnRyb2xzJywgJHJvd2FycmF5KTsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbignY29udHJvbGNvdW50JywgY291bnQoJHJvd2FycmF5KSk7CgogICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGFiYXNlKCdmZXVzZXJzX2NoYW5nZXNldHRpbmdzZm9ybScpOwogIH0KCgogIGZ1bmN0aW9uIF9oYW5kbGVVc2VySW5mb1ZhbGlkYXRpb24oICRpZCwgJiRwYXJhbXMsICRyZXR1cm5pZCwgJiRtZXNzYWdlLCAkbmVlZHB3ID0gdHJ1ZSwgCgkJCQkgICAgICAkZG9leHBpcmUgPSB0cnVlLCAkY2hlY2t1c2VybmFtZSA9IHRydWUgKQogIHsKICAgIC8vIG1ha2Ugc3VyZSB0aGUgcGFyYW1ldGVycyBhcmUgZmlsbGVkIGluCiAgICAkdXNlcm5hbWUgPSB0cmltKCRwYXJhbXNbJ2lucHV0X3VzZXJuYW1lJ10pOwogICAgJHBhc3N3b3JkID0gdHJpbSgkcGFyYW1zWydpbnB1dF9wYXNzd29yZCddKTsKICAgICRyZXBlYXQgICA9IHRyaW0oJHBhcmFtc1snaW5wdXRfcmVwZWF0cGFzc3dvcmQnXSk7CiAgICAKICAgIGlmKCAkdXNlcm5hbWUgPT0gJycgCgl8fCAoJG5lZWRwdyAmJiAoJHBhc3N3b3JkID09ICcnIHx8ICRyZXBlYXQgPT0gJycpKSAgKQogICAgICB7CgkkbWVzc2FnZSA9ICR0aGlzLT5MYW5nICgiZXJyb3JfaW52YWxpZHBhcmFtcyIpOwoJcmV0dXJuIC0xOwogICAgICB9CgogICAgLy8gbWFrZSBzdXJlIHRoZSBwYXNzd29yZHMgbWF0Y2gKICAgIGlmKCAkcGFzc3dvcmQgIT0gJHJlcGVhdCApCiAgICAgIHsKCSRtZXNzYWdlID0gJHRoaXMtPkxhbmcoImVycm9yX3Bhc3N3b3JkbWlzbWF0Y2giKTsKCXJldHVybiAtMTsKICAgICAgfQoKICAgIC8vIG1ha2Ugc3VyZSB0aGUgdXNlcm5hbWUgZml0cyB0aGUgcnVsZXMKICAgIGlmKCAkY2hlY2t1c2VybmFtZSApCiAgICAgIHsKCWlmKCAhJHRoaXMtPklzVmFsaWRVc2VybmFtZSggJHVzZXJuYW1lICkgKQoJICB7CgkgICAgJG1lc3NhZ2UgPSAkdGhpcy0+TGFuZyggImVycm9yX2ludmFsaWR1c2VybmFtZSIgKTsKCSAgICByZXR1cm4gLTE7CgkgIH0KICAgICAgfQoKICAgIC8vIG1ha2Ugc3VyZSB0aGUgcGFzc3dvcmQgZml0cyB0aGUgcnVsZXMKICAgIGlmKCAkbmVlZHB3ICYmICEkdGhpcy0+SXNWYWxpZFBhc3N3b3JkKCAkcGFzc3dvcmQgKSApCiAgICAgIHsKCSRtZXNzYWdlID0gJHRoaXMtPkxhbmcoImVycm9yX2ludmFsaWRwYXNzd29yZCIpOwoJcmV0dXJuIC0xOwogICAgICB9CgogICAgaWYoICRkb2V4cGlyZSA9PSBmYWxzZSApCiAgICAgIHsKCXJldHVybiAxOwogICAgICB9CgogICAgLy8gbWFrZSBzdXJlIGFuIGV4cGlyeSBkYXRlIGlzIHNldAogICAgaWYoICFpc3NldCgkcGFyYW1zWydleHBpcmVzZGF0ZV9Nb250aCddKSApCiAgICAgIHsKCSRtZXNzYWdlID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2ludmFsaWRleHBpcnlkYXRlJyk7CiAgICAgIH0KCiAgICAkZXhwaXJlcyA9IG1rdGltZSgkcGFyYW1zWydleHBpcmVzZGF0ZV9Ib3VyJ10sIAoJCSRwYXJhbXNbJ2V4cGlyZXNkYXRlX01pbnV0ZSddLCAkcGFyYW1zWydleHBpcmVzZGF0ZV9TZWNvbmQnXSwKCSAgICAgICAgJHBhcmFtc1snZXhwaXJlc2RhdGVfTW9udGgnXSwgJHBhcmFtc1snZXhwaXJlc2RhdGVfRGF5J10sIAoJICAgICAgICAkcGFyYW1zWydleHBpcmVzZGF0ZV9ZZWFyJ10pOwogICAgJHBhcmFtc1snaW5wdXRfZXhwaXJlc2RhdGUnXSA9ICRleHBpcmVzOwogICAgcmV0dXJuIDE7CiAgfQoKCiAgZnVuY3Rpb24gbXlNb2R1bGVQYXRoKCkKICB7CiAgICRzdHIgPSAiL21vZHVsZXMvIi4kdGhpcy0+R2V0TmFtZSgpLiIvIjsKICAgIHJldHVybiAkc3RyOwogIH0KCiAgZnVuY3Rpb24gbXlSZWRpcmVjdFRvVGFiKCAkaWQsICR0YWIsICRwYXJhbXMgPSAnJyApCiAgewogICAgJHBhcm1zID0gYXJyYXkoKTsKICAgIGlmKCBpc19hcnJheSggJHBhcmFtcyApICkKICAgICAgewoJJHBhcm1zID0gJHBhcmFtczsKICAgICAgfQogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2FjdGl2ZV90YWInLCAkdGFiKTsKICAgICR0aGlzLT5teVJlZGlyZWN0KCAkaWQsICdkZWZhdWx0YWRtaW4nLCAnJywgJHBhcm1zLCB0cnVlICk7CiAgfQoKICBmdW5jdGlvbiBteVJlZGlyZWN0KCAkaWQsICRhY3Rpb24sICRyZXR1cm5pZCwgJHBhcmFtcyA9ICcnICkKICB7CiAgICAkdGhpcy0+UmVkaXJlY3QoICRpZCwgJGFjdGlvbiwgJHJldHVybmlkLCAkcGFyYW1zICk7CiAgfQoKICBmdW5jdGlvbiBmZUNyZWF0ZUZvcm1TdGFydCggJGlkLCAkYWN0aW9uLCAkcmV0dXJuaWQsICRpbmxpbmU9dHJ1ZSwgJG1ldGhvZD0ncG9zdCcsICRlbmN0eXBlPScnLCAkaWRzdWZmaXg9JycgKQogIHsKICAgIHJldHVybiAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwkYWN0aW9uLCRyZXR1cm5pZCwkbWV0aG9kLCRlbmN0eXBlLCRpbmxpbmUsJGlkc3VmZml4KTsKICB9CgogIGZ1bmN0aW9uIEdldEhlbHAoJGxhbmc9J2VuX1VTJykJCiAgewogICAgcmV0dXJuICR0aGlzLT5MYW5nKCdoZWxwJyk7CiAgfQoKICBmdW5jdGlvbiBHZXRBdXRob3IoKSAKICB7CiAgICByZXR1cm4gJ2NhbGd1eTEwMDAnOwogIH0KICAKICBmdW5jdGlvbiBHZXRBdXRob3JFbWFpbCgpCQogIHsKICAgIHJldHVybiAnY2FsZ3V5MTAwMEBob3RtYWlsLmNvbSc7CiAgfQogIAogIGZ1bmN0aW9uIEdldENoYW5nZUxvZygpCQogIHsKICAgIHJldHVybiAkdGhpcy0+TGFuZygnY2hhbmdlbG9nJyk7CiAgfQoKICAvKioKICAgKiBUaGlzIGlzIGEgYXdlc29tZSB1dGlsaXR5IGZ1bmN0aW9uIHRoYXQgcHJvZHVjZXMgdmlydHVhbGx5IGFsbCBoZWxwZnVsCiAgICogZGVidWcgaW5mby4gIFJlbGllcyBvbiB0aGUgdmFsdWUgb2YgdGhlICR2YXJkZWJ1ZyBvZiB0aGUgY2xhc3MuCiAgICoKICAgKiBAcGFyYW0gYXJyYXkgJGRlYnVnYXJyYXkgc2luZ2xlLSBvciBtdWx0aWRpbWVudGlvbmFsIGFycmF5CiAgICogQHBhcmFtIFN0cmluZyAkbWVzc2FnZSB0aGF0IGhlbHAgaWRlbnRpZnkgdGhlIGZ1bmN0aW9uIGNhbGwKICAgKi8KICBmdW5jdGlvbiBfZGVidWdhcnJheSgkZGVidWdhcnJheSwgJG1lc3NhZ2U9JycpCiAgewogICAgaWYgKCR0aGlzLT5kZXZkZWJ1ZyA9PSAxKXsKICAgICAgZWNobyAiXG5cbjxicj48YnI+LS0tLS0tLS0tLS0tLSBEZWJ1ZyBpbmZvOiAtLS0tLS0tLS0tLS0tLS0tPGJyPlxuIjsKICAgICAgJHN0YWNrdHJhY2UgPSBkZWJ1Z19iYWNrdHJhY2UoKTsKICAgICAgaWYgKGNvdW50KCRzdGFja3RyYWNlKSA+IDEgJiYgJHN0YWNrdHJhY2VbMV1bJ2Z1bmN0aW9uJ10gIT0gJycpewoJZWNobyAiSW5zaWRlICIgLiAkc3RhY2t0cmFjZVsxXVsnZnVuY3Rpb24nXSAuICI8YnI+XG4iOwoJZWNobyAiQ2FsbGVkIGZyb20gIgoJICAuICRzdGFja3RyYWNlWzNdWydmdW5jdGlvbiddIC4gIiwgIgoJICAuICRzdGFja3RyYWNlWzJdWydmdW5jdGlvbiddIC4gIjxicj5cbiI7CiAgICAgIH0KICAgICAgaWYgKCRtZXNzYWdlICE9ICcnKXsKCWVjaG8gJG1lc3NhZ2UgLiAiPGJyPiI7CiAgICAgIH0KICAgICAgZWNobyAiXG48dGFibGUgY2VsbHBhZGRpbmc9MTAgYm9yZGVyPTA+XG48dHI+XG48dGQ+IjsKICAgICAgZm9yZWFjaCggJGRlYnVnYXJyYXkgYXMgJGtleSA9PiAkdmFsICl7CgkvLwkJCQllY2hvICI8Yj4ka2V5PC9iPjxicj4iOwoJaWYoaXNfYXJyYXkoJHZhbCkpewoJICBlY2hvICI8L3RkPlxuPHRkPiI7CgkgIGVjaG8gIjxiPkFycmF5PC9iPjxicj4iOwoJICAkdGhpcy0+X2RlYnVnc3ViYXJyYXkoJHZhbCk7Cgl9IGVsc2UgaWYgKGlzX29iamVjdCgkdmFsKSl7CgkgIGVjaG8gIjwvdGQ+XG48dGQ+IjsKCSAgZWNobyAiPGI+T2JqZWN0PC9iPjxicj4iOwoJICAkdGhpcy0+X2RlYnVnc3ViYXJyYXkoZ2V0X29iamVjdF92YXJzKCR2YWwpKTsKCX0gZWxzZSB7CgkgIGVjaG8gIjxiPlZlY3RvcjwvYj48YnI+IjsKCSAgZWNobyAiXHQ8c3BhbiBzdHlsZT1ccGFkZGluZy1sZWZ0OjIwcHhcIj4iCgkgICAgLiAka2V5IC4gIjogIiAuICR2YWwgLiAiPC9zcGFuPjxicj5cbiI7Cgl9CiAgICAgIH07CiAgICAgIGVjaG8gIjwvdGQ+XG48L3RyPlxuPC90YWJsZT5cbiI7CiAgICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0gRW5kIGRlYnVnIGluZm8gLS0tLS0tLS0tLS0tLS0tLTxicj48YnI+XG5cbiI7CiAgICB9CiAgfQoKICAvKioKICAgKiBVdGlsaXR5IGZ1bmN0aW9uLCB1c2VkIGJ5IHRoZSBfZGVidWdhcnJheSBmdW5jdGlvbgogICAqLwogIGZ1bmN0aW9uIF9kZWJ1Z3N1YmFycmF5KCRkZWJ1Z2FycmF5KQogIHsKICAgIGZvcmVhY2goICRkZWJ1Z2FycmF5IGFzICRrZXkgPT4gJHZhbCApCiAgICAgIHsKCWlmKGlzX2FycmF5KCR2YWwpKQoJICB7CgkgICAgZWNobyAiXHQiIC4gJGtleSAuICI6ICIgLiBwcmludF9yKCR2YWwpIC4gIjxicj5cbiI7CgkgIH0gCgllbHNlIAoJICB7CgkgICAgZWNobyAiXHQiIC4gJGtleSAuICI6ICIgLiAkdmFsIC4gIjxicj5cbiI7CgkgIH0KICAgICAgfQogIH0KICAKCiAgLy8gb2xkIGZ1bmN0aW9uIChub3QgdXNlZD8pCiAgLy8gdG9kbywgcHV0IHRoaXMgaW50byB0aGUgVXNlck1hbmlwdWxhdG9yIHN0dWZmCiAgZnVuY3Rpb24gQ3JlYXRlTmV3VXNlcigkaWQpIAogIHsKICAgICRkYj0kdGhpcy0+R2V0RGIoKTsKICAgIGlmIChpc3NldCgkX1BPU1RbJGlkLiJ1c2VybmFtZSJdKSkgJG5ld3VzZXJuYW1lPXRyaW0oJF9QT1NUWyRpZC4idXNlcm5hbWUiXSk7IGVsc2UgJG5ld3VzZXJuYW1lPSIiOwogICAgaWYgKCRuZXd1c2VybmFtZT09IiIpIHJldHVybiAiVXNlcm5hbWUgbXVzdCBiZSBwcm92aWRlZCEiOwogICAgJHF1ZXJ5PSJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc191c2VycyBXSEVSRSB1c2VybmFtZT0nIi4kbmV3dXNlcm5hbWUuIiciOwogICAgJHJlc3VsdD0kZGItPkV4ZWN1dGUoJHF1ZXJ5KTsKICAgIGlmICgkcmVzdWx0ICYmICRyZXN1bHQtPlJvd0NvdW50KCkpIHJldHVybiAiVXNlcm5hbWUgYWxyZWFkeSBleGlzdHMhIjsKICAgIAogICAgJG5ld2VtYWlsPXRyaW0oJF9QT1NUWyRpZC4iZW1haWwiXSk7CiAgICAKICAgICRuZXdwYXNzd29yZD10cmltKCRfUE9TVFskaWQuInBhc3N3b3JkIl0pOwogICAgaWYgKCRuZXdwYXNzd29yZD09IiIpIHJldHVybiAiUGFzc3dvcmQgY2Fubm90IGJlIGJsYW5rISI7CiAgICAkbmV3cGFzc3dvcmQyPXRyaW0oJF9QT1NUWyRpZC4icGFzc3dvcmQyIl0pOwogICAgaWYgKCRuZXdwYXNzd29yZCE9JG5ld3Bhc3N3b3JkMikgcmV0dXJuICJQYXNzd29yZHMgZG8gbm90IG1hdGNoISI7CiAgICAkbmV3aWQ9JGRiLT5HZW5JRChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX3VzZXJzX3NlcSIpOwogICAgJHF1ZXJ5PSJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfdXNlcnMgKGlkLHVzZXJuYW1lLHBhc3N3b3JkLGVtYWlsKSBWQUxVRVMgKD8sPyw/LD8pIjsKICAgICRwYXJhbXM9YXJyYXkoJG5ld2lkLCRuZXd1c2VybmFtZSxtZDUoJG5ld3Bhc3N3b3JkKSwkbmV3ZW1haWwpOwogICAgJGRicmVzdWx0PSRkYi0+RXhlY3V0ZSgkcXVlcnksJHBhcmFtcyk7CiAgICAKICAgICRxPSJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19ncm91cHMiOwogICAgJGRicmVzdWx0PSRkYi0+RXhlY3V0ZSgkcSk7CiAgICBpZiAoJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+Um93Q291bnQoKSkgewogICAgICB3aGlsZSAoJHJvdz0kZGJyZXN1bHQtPkZldGNoUm93KCkpIHsKCWlmICgkX1BPU1RbJGlkLiJncm91cCIuJHJvd1siaWQiXV09PSJ5ZXMiKSB7CgkgIC8vQ3JlYXRlIGFuIGFzc29jaWF0aW9uCgkgICRxPSJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfYmVsb25ncyAodXNlcmlkLGdyb3VwaWQpIFZBTFVFUyAoPyw/KSI7CgkgICRwYXJhbXMyPWFycmF5KCRuZXdpZCwkcm93WyJpZCJdKTsKCSAgJGRicmVzdWx0Mj0kZGItPkV4ZWN1dGUoJHEsJHBhcmFtczIpOwoJfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gIiI7CiAgfQogIAoKICAvLyBvbGQgZnVuY3Rpb24gKG5vdCB1c2VkPykKICAvLyB0b2RvLCBwdXQgdGhpcyBpbnRvIHRoZSBVc2VyTWFuaXB1bGF0b3Igc3R1ZmYKICBmdW5jdGlvbiBDcmVhdGVOZXdHcm91cCgkaWQpIAogIHsKICAgICRkYj0kdGhpcy0+R2V0RGIoKTsKICAgICRuZXdncm91cG5hbWU9dHJpbSgkX1BPU1RbJGlkLiJncm91cG5hbWUiXSk7CiAgICBpZiAoJG5ld2dyb3VwbmFtZT09IiIpIHJldHVybiAiQSB1bmlxdWUgZ3JvdXAgbmFtZSBtdXN0IGJlIHByb3ZpZGVkISI7CiAgICAkcXVlcnk9IlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2dyb3VwcyBXSEVSRSBncm91cG5hbWU9JyIuJG5ld2dyb3VwbmFtZS4iJyI7CiAgICAkcmVzdWx0PSRkYi0+RXhlY3V0ZSgkcXVlcnkpOwogICAgaWYgKCRyZXN1bHQgJiYgJHJlc3VsdC0+Um93Q291bnQoKSkgcmV0dXJuICJHcm91cCBuYW1lIGFscmVhZHkgZXhpc3RzISI7CiAgICAkbmV3Z3JvdXBkZXNjPXRyaW0oJF9QT1NUWyRpZC4iZ3JvdXBkZXNjIl0pOwogICAgJG5ld2lkPSRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19ncm91cHNfc2VxIik7CiAgICAkcXVlcnk9IklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfZmV1c2Vyc19ncm91cHMgKGlkLGdyb3VwbmFtZSxncm91cGRlc2MpIFZBTFVFUyAoPyw/LD8pIjsKICAgICRwYXJhbXM9YXJyYXkoJG5ld2lkLCRuZXdncm91cG5hbWUsJG5ld2dyb3VwZGVzYyk7CiAgICAkZGJyZXN1bHQ9JGRiLT5FeGVjdXRlKCRxdWVyeSwkcGFyYW1zKTsKICAgIHJldHVybiAiIjsKICB9CgoKICAvLyBvbGQgZnVuY3Rpb24gKG5vdCB1c2VkPykKICAvLyB0b2RvLCBwdXQgdGhpcyBpbnRvIHRoZSBVc2VyTWFuaXB1bGF0b3Igc3R1ZmYKICBmdW5jdGlvbiBDaGFuZ2VHcm91cCgkaWQpIAogIHsKICAgICRkYj0kdGhpcy0+R2V0RGIoKTsKICAgIGlmIChpc3NldCgkX1BPU1RbJGlkLiJncm91cGlkIl0pKSAkZ3JvdXBpZD10cmltKCRfUE9TVFskaWQuImdyb3VwaWQiXSk7IGVsc2UgcmV0dXJuICJVbnJlY292ZXJhYmxlIGVycm9yIjsKICAgIGlmIChpc3NldCgkX1BPU1RbJGlkLiJncm91cG5hbWUiXSkpICRncm91cG5hbWU9dHJpbSgkX1BPU1RbJGlkLiJncm91cG5hbWUiXSk7IGVsc2UgcmV0dXJuICJBIHVuaXF1ZSBncm91cCBuYW1lIG11c3QgYmUgcHJvdmlkZWQhIjsKICAgIAogICAgLy9DaGVjayBmb3IgZXhpc3RpbmcgZ3JvdXBuYW1lCiAgICAkcXVlcnk9IlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV9mZXVzZXJzX2dyb3VwcyBXSEVSRSBncm91cG5hbWU9JyIuJGdyb3VwbmFtZS4iJyI7CiAgICAkcmVzdWx0PSRkYi0+RXhlY3V0ZSgkcXVlcnkpOwogICAgaWYgKCRyZXN1bHQgJiYgJHJlc3VsdC0+Um93Q291bnQoKSkgewogICAgICAkcm93PSRyZXN1bHQtPkZldGNoUm93KCk7CiAgICAgIGlmICgkcm93WyJpZCJdIT0kZ3JvdXBpZCkgcmV0dXJuICJHcm91cCBuYW1lIGFscmVhZHkgZXhpc3RzISI7CiAgICAgIC8vRWxzZSBzYW1lIGdyb3VwLi4uCiAgICB9CiAgICAKICAgICRncm91cGRlc2M9dHJpbSgkX1BPU1RbJGlkLiJncm91cGRlc2MiXSk7CiAgICAkcXVlcnk9IlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX2ZldXNlcnNfZ3JvdXBzIFNFVCBncm91cG5hbWU9Pyxncm91cGRlc2M9PyBXSEVSRSBpZD0/IjsKICAgICRwYXJhbXM9YXJyYXkoJGdyb3VwbmFtZSwkZ3JvdXBkZXNjLCRncm91cGlkKTsKICAgICRkYnJlc3VsdD0kZGItPkV4ZWN1dGUoJHF1ZXJ5LCRwYXJhbXMpOwogIH0KCgkKICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAvLyAgQVBJIEZVTkNUSU9OUyAvLwogIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwoKICBmdW5jdGlvbiBBZGRHcm91cCggJG5hbWUsICRkZXNjcmlwdGlvbiApCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkFkZEdyb3VwKCAkbmFtZSwgJGRlc2NyaXB0aW9uICk7CiAgfQoKCiAgZnVuY3Rpb24gQWRkR3JvdXBQcm9wZXJ0eVJlbGF0aW9uKCAkZ3JwaWQsICRwcm9wbmFtZSwgJHNvcnRrZXksICR2YWwgKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5BZGRHcm91cFByb3BlcnR5UmVsYXRpb24oICRncnBpZCwgJHByb3BuYW1lLCAkc29ydGtleSwgJHZhbCApOwogIH0KCgogIGZ1bmN0aW9uIEFkZFByb3BlcnR5RGVmbiggJG5hbWUsICRwcm9tcHQsICR0eXBlLCAkbGVuZ3RoLCAkbWF4bGVuZ3RoICkKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+QWRkUHJvcGVydHlEZWZuKCAkbmFtZSwgJHByb21wdCwgJHR5cGUsICRsZW5ndGgsICRtYXhsZW5ndGggKTsKICB9CgogCiAgZnVuY3Rpb24gQWRkU2VsZWN0T3B0aW9ucyggJG5hbWUsICRzZWxvcHRpb25zICkKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+QWRkU2VsZWN0T3B0aW9ucyggJG5hbWUsICRzZWxvcHRpb25zICk7CiAgfQoKIAogIGZ1bmN0aW9uIEFkZFVzZXIoICRuYW1lLCAkcGFzc3dvcmQsICRleHBpcmVzICkKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+QWRkVXNlciggJG5hbWUsICRwYXNzd29yZCwgJGV4cGlyZXMgKTsKICB9CgoKICBmdW5jdGlvbiBBc3NpZ25Vc2VyVG9Hcm91cCggJHVpZCwgJGdpZCApCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkFzc2lnblVzZXJUb0dyb3VwKCAkdWlkLCAkZ2lkICk7CiAgfQoKIAogIGZ1bmN0aW9uIENoZWNrUGFzc3dvcmQoJHVzZXJuYW1lLCRwYXNzd29yZCkgCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkNoZWNrUGFzc3dvcmQoJHVzZXJuYW1lLCRwYXNzb3JkKTsKICB9CgogCiAgZnVuY3Rpb24gQ291bnRUZW1wQ29kZVJlY29yZHMoKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5Db3VudFRlbXBDb2RlUmVjb3JkcygpOwogIH0KCiAKICBmdW5jdGlvbiBDb3VudFVzZXJzSW5Hcm91cCggJGdpZCA9ICcnICkKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+Q291bnRVc2Vyc0luR3JvdXAoICRnaWQgKTsKICB9CgoKICAvKiB3aGF0J3MgdGhpcz8gKi8KICBmdW5jdGlvbiBEZWxldGVBbGxHcm91cFByb3BlcnR5UmVsYXRpb25zKCAkZ3JwaWQgKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5EZWxldGVBbGxHcm91cFByb3BlcnR5UmVsYXRpb25zKCAkZ3JwaWQgKTsKICB9CgoKICBmdW5jdGlvbiBEZWxldGVBbGxHcm91cFByb3BlcnR5UmVsYXRpb24oICRncnBpZCwgJHByb3BuYW1lICkKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+RGVsZXRlQWxsR3JvdXBQcm9wZXJ0eVJlbGF0aW9ucyggJGdycGlkLCAkcHJvcG5hbWUgKTsKICB9CgogIGZ1bmN0aW9uIERlbGV0ZVByb3BlcnR5RGVmbiggJG5hbWUgKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5EZWxldGVQcm9wZXJ0eURlZm4oICRuYW1lICk7CiAgfQoKCiAgZnVuY3Rpb24gRGVsZXRlUHJvcGVydHlEZWZucygpCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkRlbGV0ZVByb3BlcnR5RGVmbnMoKTsKICB9CgoKICBmdW5jdGlvbiBEZWxldGVTZWxlY3RPcHRpb25zKCAkbmFtZSApCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkRlbGV0ZVNlbGVjdE9wdGlvbnMoICRuYW1lICk7CiAgfQoKCiAgZnVuY3Rpb24gRGVsZXRlVXNlckZ1bGwoICR1aWQgKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5EZWxldGVVc2VyRnVsbCggJHVpZCApOwogIH0KCgogIGZ1bmN0aW9uIERlbGV0ZVVzZXJQcm9wZXJ0eUJ5TmFtZSggJHRpdGxlICkKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+RGVsZXRlVXNlclByb3BlcnR5QnlOYW1lKCR0aXRsZSk7CiAgfQoKICAvKldoYXQgaXMgdGhpcz8qLwogIGZ1bmN0aW9uIERlbGV0ZVVzZXJQcm9wZXJ0eSgkdGl0bGUsJGFsbD1mYWxzZSkgCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkRlbGV0ZVVzZXJQcm9wZXJ0eSgkdGl0bGUsJGFsbCk7CiAgfQoKCiAgZnVuY3Rpb24gRGVsZXRlQWxsVXNlclByb3BlcnRpZXMoKSAKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+RGVsZXRlQWxsVXNlclByb3BlcnRpZXMoKTsKICB9CgogIAogIGZ1bmN0aW9uIERlbGV0ZUFsbFVzZXJQcm9wZXJ0aWVzRnVsbCgkdXNlcmlkKSAKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+RGVsZXRlQWxsVXNlclByb3BlcnRpZXNGdWxsKCR1c2VyaWQpOwogIH0KCgoKICBmdW5jdGlvbiBEZWxldGVVc2VyUHJvcGVydHlGdWxsKCR0aXRsZSwkdXNlcmlkLCRhbGw9ZmFsc2UpIAogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5EZWxldGVVc2VyUHJvcGVydHlGdWxsKCR0aXRsZSwkdXNlcmlkLCRhbGwpOwogIH0KCgogIGZ1bmN0aW9uIERlbGV0ZUdyb3VwRnVsbCggJGdpZCApCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkRlbGV0ZUdyb3VwRnVsbCggJGdpZCApOwogIH0KCgogIGZ1bmN0aW9uIERlbGV0ZVVzZXIoJGlkKSAKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+RGVsZXRlVXNlciggJGlkICk7CiAgfQoKICBmdW5jdGlvbiBFeHBpcmVVc2VycygpIAogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5FeHBpcmVVc2VycygpOwogIH0KCgogIGZ1bmN0aW9uIEV4cGlyZVRlbXBDb2RlcyggJGV4cGlyeWNvZGUgKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5FeHBpcmVUZW1wQ29kZXMoICRleHBpcnljb2RlICk7CiAgfQoKICBmdW5jdGlvbiBHZXRVc2VyUHJvcGVydGllcygkdWlkKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5HZXRVc2VyUHJvcGVydGllcygkdWlkKTsKICB9CiAgCgogIGZ1bmN0aW9uIEdldE1lbWJlckdyb3Vwc0FycmF5KCR1c2VyaWQpCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkdldE1lbWJlckdyb3Vwc0FycmF5KCR1c2VyaWQpOwogIH0KCiAgZnVuY3Rpb24gR2V0VXNlclByb3BlcnR5KCR0aXRsZSwkZGVmYXVsdHZhbHVlPWZhbHNlKSAKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+R2V0VXNlclByb3BlcnR5KCAkdGl0bGUsICRkZWZhdWx0dmFsdWUgKTsKICB9CgogIGZ1bmN0aW9uIEdldFVzZXJQcm9wZXJ0eUZ1bGwoJHRpdGxlLCR1c2VyaWQsICRkZWZhdWx0dmFsdWU9ZmFsc2UpIAogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5HZXRVc2VyUHJvcGVydHlGdWxsKCR0aXRsZSwkdXNlcmlkLCRkZWZhdWx0dmFsdWUpOwogIH0KCiAgZnVuY3Rpb24gR2V0VXNlclRlbXBDb2RlKCAkdWlkICkKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+R2V0VXNlclRlbXBDb2RlKCAkdWlkICk7CiAgfSAgCgoKICBmdW5jdGlvbiBHZXRQcm9wZXJ0eUdyb3VwUmVsYXRpb25zKCAkdGl0bGUgKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5HZXRQcm9wZXJ0eUdyb3VwUmVsYXRpb25zKCAkdGl0bGUgKTsKICB9CgogIGZ1bmN0aW9uIEdldEdyb3VwUHJvcGVydHlSZWxhdGlvbnMoICRncnBpZCApCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkdldEdyb3VwUHJvcGVydHlSZWxhdGlvbnMoICRncnBpZCApOwogIH0KCiAgCiAgZnVuY3Rpb24gR2V0R3JvdXBJbmZvKCAkZ2lkICkKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+R2V0R3JvdXBJbmZvKCAkZ2lkICk7CiAgfQoKCiAgZnVuY3Rpb24gR2V0VXNlckluZm8oICR1aWQgKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5HZXRVc2VySW5mbyggJHVpZCApOwogIH0KIAogIGZ1bmN0aW9uIEdldFVzZXJzSW5Hcm91cCggJGdpZCA9ICcnLCAkcmVnZXggPSAnJywgJGxpbWl0ID0gJycsICRzb3J0ID0gJycsCgkJCSAgJHByb3BlcnR5ID0gJycsICRwcm9wcmVnZXggPSAnJykKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+R2V0VXNlcnNJbkdyb3VwKCAkZ2lkLCAkcmVnZXgsICRsaW1pdCwgJHNvcnQsCgkJCQkJICAgICAgJHByb3BlcnR5LCAkcHJvcHJlZ2V4ICk7CiAgfQoKICBmdW5jdGlvbiBHcm91cEV4aXN0c0J5SUQoICRnaWQgKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5Hcm91cEV4aXN0c0J5SUQoICRnaWQgKTsKICB9CgogIGZ1bmN0aW9uIEdyb3VwRXhpc3RzQnlOYW1lKCAkbmFtZSApCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkdyb3VwRXhpc3RzQnlOYW1lKCAkbmFtZSApOwogIH0KCQogIAogIGZ1bmN0aW9uIEdldFByb3BlcnR5RGVmbnMoKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5HZXRQcm9wZXJ0eURlZm5zKCk7CiAgfQoKICBmdW5jdGlvbiBHZXRQcm9wZXJ0eURlZm4oICRuYW1lICkKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+R2V0UHJvcGVydHlEZWZuKCAkbmFtZSApOwogIH0KCiAgZnVuY3Rpb24gR2V0U2VsZWN0T3B0aW9ucyggJG5hbWUsICRkaW0gKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5HZXRTZWxlY3RPcHRpb25zKCAkbmFtZSwgJGRpbSApOwogIH0KCiAgCiAgZnVuY3Rpb24gR2V0VXNlck5hbWUoJHVzZXJpZCkgCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkdldFVzZXJOYW1lKCR1c2VyaWQpOwogIH0KCiAgCiAgZnVuY3Rpb24gR2V0RW1haWwoJHVzZXJpZCkgCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkdldEVtYWlsKCR1c2VyaWQpOwogIH0KCiAgCiAgZnVuY3Rpb24gR2V0VXNlcklEKCR1c2VybmFtZSkgCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkdldFVzZXJJRCgkdXNlcm5hbWUpOwogIH0KCgogIGZ1bmN0aW9uIEdldEdyb3VwTmFtZSgkZ3JvdXBpZCkgCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkdldEdyb3VwTmFtZSggJGdyb3VwaWQgKTsKICB9CgogIGZ1bmN0aW9uIEdldEdyb3VwRGVzYygkZ3JvdXBpZCkKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+R2V0R3JvdXBEZXNjKCAkZ3JvdXBpZCApOwogIH0KCgogIGZ1bmN0aW9uIEdldEdyb3VwTGlzdCgpCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkdldEdyb3VwTGlzdCgpOwogIH0KCiAgCiAgZnVuY3Rpb24gR2V0R3JvdXBMaXN0RnVsbCgpCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkdldEdyb3VwTGlzdEZ1bGwoKTsKICB9CgogIGZ1bmN0aW9uIEdldEdyb3VwSUQoJGdyb3VwbmFtZSkKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+R2V0R3JvdXBJRCggJGdyb3VwbmFtZSApOwogIH0KCiAgCiBmdW5jdGlvbiBHZXRNZW1iZXJHcm91cHMoJHVzZXJpZCkgCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkdldE1lbWJlckdyb3VwcygkdXNlcmlkKTsKICB9CgogIAogIGZ1bmN0aW9uIElzQWNjb3VudEV4cGlyZWQoICR1aWQgKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5Jc0FjY291bnRFeHBpcmVkKCAkdWlkICk7CiAgfQoKICAKICBmdW5jdGlvbiBJc1ZhbGlkUGFzc3dvcmQoICRwYXNzd29yZCApCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPklzVmFsaWRQYXNzd29yZCggJHBhc3N3b3JkICk7CiAgfQoKIAogIGZ1bmN0aW9uIElzVmFsaWRFbWFpbEFkZHJlc3MoICRlbWFpbCwgJHNtdHB2YWxpZGF0ZSA9IGZhbHNlICkKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+SXNWYWxpZEVtYWlsQWRkcmVzcyggJGVtYWlsLCAkc210cHZhbGlkYXRlICk7CiAgfQoKICAKICBmdW5jdGlvbiBJc1ZhbGlkVXNlcm5hbWUoICR1c2VybmFtZSApCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPklzVmFsaWRVc2VybmFtZSggJHVzZXJuYW1lICk7CiAgfQoKICAKICBmdW5jdGlvbiBMb2dpbiggJHVzZXJuYW1lLCAkcGFzc3dvcmQgKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5Mb2dpbiggJHVzZXJuYW1lLCAkcGFzc3dvcmQgKTsKICB9CgoKICBmdW5jdGlvbiBMb2dnZWRJbk5hbWUoKSAKICB7CiAgICAkc3RyID0gJHRoaXMtPnVzZXJtYW5pcC0+TG9nZ2VkSW5OYW1lKCk7CiAgICByZXR1cm4gJHN0cjsKICB9CgogIAogIGZ1bmN0aW9uIExvZ2dlZEluRW1haWwoKSAKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+TG9nZ2VkSW5FbWFpbCgpOwogIH0KCiAgCiAgZnVuY3Rpb24gTG9nb3V0KCkgCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkxvZ291dCgpOwogIH0KCiAgCiAgZnVuY3Rpb24gTG9nb3V0VXNlcigkdWlkKSAKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+TG9nb3V0VXNlcigkdWlkKTsKICB9CgogCiAgZnVuY3Rpb24gTG9nZ2VkSW5JZCgpIAogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5Mb2dnZWRJbklkKCk7CiAgfQoKIAogIGZ1bmN0aW9uIExvZ2dlZEluKCkgCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPkxvZ2dlZEluKCk7CiAgfQoKIAogIGZ1bmN0aW9uIE1lbWJlck9mR3JvdXAoJHVzZXJpZCwkZ3JvdXBpZCkgCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPk1lbWJlck9mR3JvdXAoJHVzZXJpZCwkZ3JvdXBpZCk7CiAgfQoKICAKICBmdW5jdGlvbiBSZW1vdmVVc2VyVGVtcENvZGUoICR1aWQgKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5SZW1vdmVVc2VyVGVtcENvZGUoICR1aWQgKTsKICB9ICAKCiAgCiAgZnVuY3Rpb24gUmVtb3ZlVXNlckZyb21Hcm91cCggJHVpZCwgJGdpZCApCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPlJlbW92ZVVzZXJGcm9tR3JvdXAoICR1aWQsICRnaWQgKTsKICB9CgogIAogIGZ1bmN0aW9uIFNldFVzZXJUZW1wQ29kZSggJHVpZCwgJGNvZGUgKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5TZXRVc2VyVGVtcENvZGUoICR1aWQsICRjb2RlICk7CiAgfQoKICAKICBmdW5jdGlvbiBTZXRQcm9wZXJ0eURlZm4oICRuYW1lLCAkbmV3bmFtZSwgJHByb21wdCwgJGxlbmd0aCwgJHR5cGUsICRtYXhsZW5ndGggKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5TZXRQcm9wZXJ0eURlZm4oICRuYW1lLCAkbmV3bmFtZSwgJHByb21wdCwgJGxlbmd0aCwgJHR5cGUsICRtYXhsZW5ndGggKTsKICB9CgogIAogIGZ1bmN0aW9uIFNldEdyb3VwKCAkZ2lkLCAkbmFtZSwgJGRlc2MgKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5TZXRHcm91cCggJGdpZCwgJG5hbWUsICRkZXNjICk7CiAgfQoKICAKICBmdW5jdGlvbiBTZXRVc2VyUGFzc3dvcmQoICR1aWQsICRwYXNzd29yZCApCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPlNldFVzZXJQYXNzd29yZCggJHVpZCwgJHBhc3N3b3JkICk7CiAgfQoKICAKICBmdW5jdGlvbiBTZXRVc2VyKCAkdWlkLCAkdXNlcm5hbWUsICRwYXNzd29yZCwgJGV4cGlyZXMgPSBmYWxzZSApCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPlNldFVzZXIoICR1aWQsICR1c2VybmFtZSwgJHBhc3N3b3JkLCAkZXhwaXJlcyApOwogIH0KCiAgZnVuY3Rpb24gU2V0VXNlckdyb3VwcyggJHVpZCwgJGdycGlkcyApCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPlNldFVzZXJHcm91cHMoICR1aWQsICRncnBpZHMgKTsKICB9CgogIAogIGZ1bmN0aW9uIFNldFVzZXJQcm9wZXJ0aWVzKCAkdWlkLCAkcHJvcHMgKQogIHsKICAgIHJldHVybiAkdGhpcy0+dXNlcm1hbmlwLT5TZXRVc2VyUHJvcGVydGllcyggJHVpZCwgJHByb3BzICk7CiAgfQoKICBmdW5jdGlvbiBTZXRVc2VyUHJvcGVydHkoJHRpdGxlLCRkYXRhKSAKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+U2V0VXNlclByb3BlcnR5KCR0aXRsZSwkZGF0YSk7CiAgfQoKICBmdW5jdGlvbiBTZXRVc2VyUHJvcGVydHlGdWxsKCR0aXRsZSwkZGF0YSwkdXNlcmlkKSAKICB7CiAgICByZXR1cm4gJHRoaXMtPnVzZXJtYW5pcC0+U2V0VXNlclByb3BlcnR5RnVsbCgkdGl0bGUsJGRhdGEsJHVzZXJpZCk7CiAgfQoKICBmdW5jdGlvbiBVc2VyRXhpc3RzQnlJRCggJHVpZCApCiAgewogICAgcmV0dXJuICR0aGlzLT51c2VybWFuaXAtPlVzZXJFeGlzdHNCeUlEKCAkdWlkICk7CiAgfQogCn0gLy8gY2xhc3MKCj8+Cg==]]></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[PD9waHAKJGxhbmdbJ2luZm9fYWRtaW5fcGFzc3dvcmQnXSA9ICdFZGl0IHRoaXMgZmllbGQgdG8gcmVzZXQgdGhlIHVzZXJzIHBhc3N3b3JkJzsKJGxhbmdbJ2luZm9fYWRtaW5fcmVwZWF0cGFzc3dvcmQnXSA9ICdFZGl0IHRoaXMgZmllbGQgdG8gcmVzZXQgdGhlIHVzZXJzIHBhc3N3b3JkJzsKJGxhbmdbJ2Vycm9yX3VzZXJuYW1lX2V4aXN0cyddID0gJ0EgdXNlciB3aXRoIHRoYXQgdXNlcm5hbWUgYWxyZWFkeSBleGlzdHMnOwokbGFuZ1snbm9jc3ZyZXN1bHRzJ10gPSAnTm8gcmVzdWx0cyByZXR1cm5lZCBmcm9tIGNzdiBleHBvcnQnOwokbGFuZ1sncHJvbXB0X3VuZmxkbGVuJ10gPSAnTGVuZ3RoIG9mIHVzZXJuYW1lIGZpZWxkJzsKJGxhbmdbJ3Byb21wdF9wd2ZsZGxlbiddID0gJ0xlbmd0aCBvZiBwYXNzd29yZCBmaWVsZCc7CiRsYW5nWydlcnJvcl9pbnZhbGlkcGFzc3dvcmRsZW5ndGhzJ10gPSAnTWluL01heCBwYXNzd29yZCBsZW5ndGhzIGFyZSBpbnZhbGlkJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWR1c2VybmFtZWxlbmd0aHMnXSA9ICdNaW4vTWF4IHVzZXJuYW1lIGxlbmd0aHMgYXJlIGludmFsaWQnOwokbGFuZ1snZXJyb3Jfbm9lbWFpbGFkZHJlc3MnXSA9ICdXZSBjb3VsZCBub3QgZmluZCBhbiBlbWFpbCBhZGRyZXNzIGZvciB0aGlzIGFjY291bnQnOwokbGFuZ1sndXNlcl9hZGRlZCddID0gJ1VzZXIgQWRkZWQgJXMgPSAlcyc7CiRsYW5nWyd1c2VyX2RlbGV0ZWQnXSA9ICdVc2VyIERlbGV0ZWQgdWlkPSVzJzsKJGxhbmdbJ3Byb3BlcnR5ZmlsdGVyJ10gPSAnUHJvcGVydHknOwokbGFuZ1sndmFsdWVyZWdleCddID0gJ1ZhbHVlIChyZWd1bGFyIGV4cHJlc3Npb24pJzsKJGxhbmdbJ3dhcm5pbmdfZWZmZWN0c2ZpZWxkbGVuZ3RoJ10gPSAnV2FybmluZzogVGhlc2UgZmllbGRzIGFmZmVjdCB0aGUgc2l6ZSBvZiBpbnB1dCBmaWVsZHMgZm9yIGZvcm1zLiAgRGVjcmVhc2luZyB0aGlzIG51bWJlciBvbiBhbiBleGlzdGluZyBzaXRlIG1heSBub3QgYmUgYWR2aXNhYmxlJzsKJGxhbmdbJ2NvbmZpcm1fc3VibWl0cHJlZnMnXSA9ICdDaGFuZ2UgYWRtaW4gcHJlZmVyZW5jZXM/JzsKJGxhbmdbJ2Vycm9yX2VtYWlsYWxyZWFkeXVzZWQnXSA9ICdFbWFpbCBhZGRyZXNzIGFscmVhZHkgdXNlZCc7CiRsYW5nWydwcm9tcHRfYWxsb3dfZHVwbGljYXRlX2VtYWlscyddID0gJ0FsbG93IGR1cGxpY2F0ZSBlbWFpbHMnOwokbGFuZ1snaW5mb19hbGxvd19kdXBsaWNhdGVfZW1haWxzJ10gPSAnKGFsbG93IG11bHRpcGxlIHVzZXJzIHdpdGggdGhlIHNhbWUgZW1haWwgYWRkcmVzcyknOwokbGFuZ1snZXJyb3JfbWlzc2luZ3VzZXJuYW1lJ10gPSAnWW91IGRpZCBub3QgZW50ZXIgYSB1c2VybmFtZSc7CiRsYW5nWydlcnJvcl9taXNzaW5ncGFzc3dvcmQnXSA9ICdZb3UgZGlkIG5vdCBlbnRlciBhIHBhc3N3b3JkJzsKJGxhbmdbJ2Zyb250ZW5kdXNlcl9sb2dvdXQnXSA9ICdGcm9udGVuZCBVc2VyIExvZ291dCc7CiRsYW5nWydmcm9udGVuZHVzZXJfbG9nZ2VkaW4nXSA9ICdGcm9udGVuZCBVc2VyIExvZ2luJzsKJGxhbmdbJ2VkaXRwcm9wX2luZm9tc2cnXSA9ICc8Zm9udCBjb2xvcj0icmVkIj48Yj5VU0UgQ0FVVElPTjwvYj4gd2hlbiBjaGFuZ2luZyBleGlzdGluZyBwcm9wZXJ0aWVzIHRoYXQgYXJlIGFzc2lnbmVkIHRvIGdyb3VwcywgeW91IG1heSBwb3RlbnRpYWxseSBjYXVzZSBkYW1hZ2UgYW5kIGJyZWFrIGFuIGV4aXN0aW5nIHNpdGUgPGk+KGVzcGVjaWFsbHkgaWYgeW91IHJlZHVjZSBmaWVsZCBsZW5ndGhzLCBldGMpPC9pPjwvZm9udD4nOwokbGFuZ1snaW5mb19zbXRwdmFsaWRhdGUnXSA9ICdUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHdvcmsgb24gd2luZG93cyc7CiRsYW5nWydtc2dfZG9udGNyZWF0ZXVzZXJuYW1lJ10gPSAnRG8gbm90IGNyZWF0ZSBhIHByb3BlcnR5IGZvciB1c2VybmFtZSwgb3Igc29tZSBzdWNoIHRoaW5nIGFzIHRoaXMgaXMgYnVpbHRpbiB0byB0aGUgRnJvbnRFbmRVc2VycyBtb2R1bGUnOwokbGFuZ1sncHJvbXB0X2V4cG9ydGNzdiddID0gJ0V4cG9ydCBVc2VycyB0byBDU1YnOwokbGFuZ1snZXhwb3J0Y3N2J10gPSAnRXhwb3J0JzsKJGxhbmdbJ2FkbWluJ10gPSAnQWRtaW4nOwokbGFuZ1snZWRpdHByb3AnXSA9ICdFZGl0IFByb3BlcnR5JzsKJGxhbmdbJ21heGxlbmd0aCddID0gJ01heGltdW0gTGVuZ3RoJzsKJGxhbmdbJ2NyZWF0ZWQnXSA9ICdDcmVhdGVkJzsKJGxhbmdbJ3NvcnRieSddID0gJ1NvcnQgQnknOwokbGFuZ1snc29ydCddID0gJ1NvcnRpbmcnOwokbGFuZ1sndXNlcnNpbmdyb3VwJ10gPSAnVXNlcnMgaW4gdGhlIHNlbGVjdGVkIGdyb3VwKHMpJzsKJGxhbmdbJ3VzZXJsaW1pdCddID0gJ0xpbWl0IHJlc3VsdHMgdG8nOwokbGFuZ1snZXJyb3Jfbm9lbWFpbGZpZWxkJ10gPSAnQ291bGQgbm90IGZpbmQgYW4gZW1haWwgZmllbGQgZm9yIHRoaXMgdXNlci4gIFlvdSBtYXkgbmVlZCB0byBjb250YWN0IHRoZSBzeXN0ZW0gYWRtaW5pc3RyYXRvcic7CiRsYW5nWydwcm9tcHRfZm9yZ290cHdfcGFnZSddID0gJ1BhZ2VJRC9BbGlhcyBmb3IgRm9yZ290IFBhc3N3b3JkIGZvcm0nOwokbGFuZ1sncHJvbXB0X2NoYW5nZXNldHRpbmdzX3BhZ2UnXSA9ICdQYWdlSUQvQWxpYXMgZm9yIENoYW5nZSBTZXR0aW5ncyBmb3JtJzsKJGxhbmdbJ3Byb21wdF9sb2dpbl9wYWdlJ10gPSAnUGFnZUlEL0FsaWFzIHRvIGp1bXAgdG8gYWZ0ZXIgbG9naW4nOwokbGFuZ1sncHJvbXB0X2xvZ291dF9wYWdlJ10gPSAnUGFnZUlEL0FsaWFzIHRvIGp1bXAgdG8gYWZ0ZXIgbG9nb3V0JzsKJGxhbmdbJ3NvcnRvcmRlciddID0gJ1NvcnQgb3JkZXInOwokbGFuZ1sncHJvbXB0X251bXJlc2V0cmVjb3JkJ10gPSAnQSBudW1iZXIgb2YgdXNlcnMgYXJlIGluIHRoZSBtaWRkbGUgb2YgcmVzZXR0aW5nIGxvc3QgcGFzc3dvcmRzLiAgQ3VycmVudGx5IHRoaXMgY291bnQgaXMgYXQ6JzsKJGxhbmdbJ3JlbW92ZTF3ZWVrJ10gPSAnUmVtb3ZlIGFsbCBlbnRyaWVzIG1vcmUgdGhhbiBhIHdlZWsgb2xkJzsKJGxhbmdbJ3JlbW92ZTFtb250aCddID0gJ1JlbW92ZSBhbGwgZW50cmllcyBtb3JlIHRoYW4gYSBtb250aCBvbGQnOwokbGFuZ1sncmVtb3ZlYWxsJ10gPSAnUmVtb3ZlIGFsbCBlbnRyaWVzJzsKJGxhbmdbJ2FyZXlvdXN1cmUnXSA9ICdBcmUgeW91IHN1cmU/JzsgCiRsYW5nWydlcnJvcl9pbnZhbGlkY29kZSddID0gJ0FuIGludmFsaWQgY29kZSBoYXMgYmVlbiBlbnRlcmVkLCBwbGVhc2UgdHJ5IGFnYWluJzsKJGxhbmdbJ2Vycm9yX3RlbXBjb2Rlbm90Zm91bmQnXSA9ICdBIHRlbXBvcmFyeSBjb2RlIGZvciB5b3VyIHVzZXIgaWQgY291bGQgbm90IGJlIGZvdW5kIGluIHRoZSBkYXRhYmFzZSc7CiRsYW5nWydmb3Jnb3RwYXNzd29yZF92ZXJpZnl0ZW1wbGF0ZSddID0gJ1RlbXBsYXRlIHVzZWQgdG8gZGlzcGxheSB2ZXJpZmljYXRpb24gZm9ybSc7CiRsYW5nWydmb3Jnb3RwYXNzd29yZF9lbWFpbHRlbXBsYXRlJ10gPSAnVGVtcGxhdGUgdXNlZCBmb3IgZm9yZ290dGVuIHBhc3N3b3JkIGVtYWlsJzsgCiRsYW5nWydlcnJvcl9yZXNldGFscmVhZHlzZW50J10gPSAnRWl0aGVyIHlvdXJzZWxmIG9yIHNvbWVvbmUgZWxzZSBoYXMgYWxyZWFkeSB0cmlnZ2VyZWQgYSBwYXNzd29yZCByZXNldCBvcGVyYXRpb24gZm9yIHRoaXMgYWNjb3VudC4gIENoZWNrIHlvdXIgZW1haWwsIHlvdSBtYXkgaGF2ZSBmdXJ0aGVyIGluc3RydWN0aW9ucyBvbiBob3cgdG8gcmVzZXQgeW91ciBwYXNzd29yZCBpbiB5b3VyIGluYm94JzsKJGxhbmdbJ2Vycm9yX2RiZXJyb3InXSA9ICdEYXRhYmFzZSBlcnJvcic7CiRsYW5nWydtZXNzYWdlX2ZvcmdvdHB3ZW1haWwnXSA9ICdZb3UgYXJlIHJlY2VpdmluZyB0aGlzIG1lc3NhZ2UgYmVjYXVzZSBzb21lYm9keSB0b2xkIG91ciBzaXRlIHRoYXQgeW91IGhhZCBsb3N0IHlvdXIgcGFzc3dvcmQuICBJZiB0aGlzIGlzIHRoZSBjYXNlLCByZWFkIHRoZSBpbnN0cnVjdGlvbnMgYmVsb3cuICBJZiB5b3UgZG9uXCd0IGhhdmUgYSBjbHVlIHdoYXQgdGhpcyBpcywgdGhlbiB5b3UgYXJlIHNhZmUgdG8gZGVsZXRlIHRoaXMgbWVzc2FnZSwgYW5kIHdlIHRoYW5rIHlvdSBmb3IgeW91ciB0aW1lLic7CiRsYW5nWydwcm9tcHRfY29kZSddID0gJ0NvZGUnOwokbGFuZ1snbWVzc2FnZV9jb2RlJ10gPSAnVGhlIGZvbGxvd2luZyBjb2RlIGhhcyBiZWVuIGdlbmVyYXRlZCByYW5kb21seSBnZW5lcmF0ZWQgaW4gb3JkZXIgdG8gdmVyaWZ5IHRoZSB1c2VyIGFjY291bnQuICB3aGVuIHlvdSBjbGljayBvbiB0aGUgbGluayBiZWxvdyB5b3Ugd2lsbCBiZSBwcmVzZW50ZWQgd2l0aCBhIGZpZWxkIHRvIGVudGVyIHRoaXMgY29kZS4gIE5vcm1hbGx5IHRoZSBmaWVsZCBpcyBwcmUtY29tcGxldGVkIGZvciB5b3UsIGJ1dCBpbmNhc2UgaXQgaXNuXCd0IHRoZSBjb2RlIGlzOic7CiRsYW5nWydwcm9tcHRfbGluayddID0gJ0NsaWNraW5nIG9uIHRoZSBmb2xsb3dpbmcgbGluayB3aWxsIHRha2UgeW91IHRvIHRoZSB3ZWJzaXRlIHdoZXJlIHlvdSBjYW4gZW50ZXIgdGhlIGFib3ZlIGNvZGUsIGFuZCByZXNldCB5b3VyIHBhc3N3b3JkOic7CiRsYW5nWydsb3N0cGFzc3dvcmRfZW1haWxzdWJqZWN0J10gPSAnTG9zdCBQYXNzd29yZCc7CiRsYW5nWydlcnJvcl9ub21haWxlcm1vZHVsZSddID0gJ0NvdWxkIG5vdCBmaW5kIHRoZSBDTVNNYWlsZXIgbW9kdWxlJzsKJGxhbmdbJ2luZm9fZm9yZ290cHdtZXNzYWdlc2VudCddID0gJ0FuIGVtYWlsIGhhcyBiZWVuIHNlbnQgdG8gJXMgd2l0aCBpbnN0cnVjdGlvbnMgYXMgdG8gaG93IHRvIHJlc2V0IHlvdXIgcGFzc3dvcmQuICBUaGFuayB5b3UnOwokbGFuZ1snbG9zdHB3X21lc3NhZ2UnXSA9ICdTbyB5b3UgZm9yZ290IG9yIGxvc3QgeW91ciBwYXNzd29yZC4gV2VsbCwgdHlwZSB5b3VyIHVzZXJuYW1lIGluIGhlcmUsIGFuZCBpZiB3ZSBjYW4gZmluZCB5b3Ugd2Ugd2lsbCBzZW5kIHlvdSBhbiBlbWFpbCB3aXRoIGluc3RydWN0aW9ucyBvbiBob3cgdG8gcmVzZXQgaXQnOwokbGFuZ1snZm9yZ290cGFzc3dvcmRfdGVtcGxhdGUnXSA9ICdGb3Jnb3QgUGFzc3dvcmQgVGVtcGF0ZXMnOwokbGFuZ1snZXJyb3JfcHJvcG5vdGZvdW5kJ10gPSAnUHJvcGVydHkgJXMgbm90IGZvdW5kJzsKJGxhbmdbJ3Byb3BzZm91bmQnXSA9ICdQcm9wZXJ0aWVzIGZvdW5kJzsKJGxhbmdbJ2FkZHByb3AnXSA9ICdBZGQgUHJvcGVydHknOwokbGFuZ1snZXJyb3JfcmVxdWlyZWRmaWVsZCddID0gJ0EgcmVxdWlyZWQgZmllbGQgKCVzKSB3YXMgZW1wdHknOwokbGFuZ1snaW5mb19lbXB0eXBhc3N3b3JkZmllbGQnXSA9ICdFbnRlciBhIG5ldyBwYXNzd29yZCBoZXJlIHRvIGNoYW5nZSB5b3VyIHBhc3N3b3JkJzsKJGxhbmdbJ2Vycm9yX25vdGxvZ2dlZGluJ10gPSAnWW91IGRvIG5vdCBhcHBlYXIgdG8gYmUgbG9nZ2VkIGluJzsKJGxhbmdbJ3VzZXJfc2V0dGluZ3MnXSA9ICdTZXR0aW5ncyc7CiRsYW5nWyd1c2VyX3JlZ2lzdHJhdGlvbiddID0gJ1JlZ2lzdHJhdGlvbic7CiRsYW5nWydlcnJvcl9hY2NvdW50ZXhwaXJlZCddID0gJ1RoaXMgYWNjb3VudCBoYXMgZXhwaXJlZCc7CiRsYW5nWydlcnJvcl9pbXByb3BlcmVtYWlsZm9ybWF0J10gPSAnSW1wcm9wZXIgZW1haWwgYWRkcmVzcyBmb3JtYXR0aW5nJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRleHBpcnlkYXRlJ10gPSAnSW52YWxpZCBleHBpcnkgZGF0ZSc7CiRsYW5nWydlcnJvcl9wcm9ibGVtc2V0dGluZ3Byb3BlcnR5J10gPSAnRXJyb3Igc2V0dGluZyBwcm9wZXJ0eSAlcyBmb3IgdXNlciAkcyc7CiRsYW5nWydlcnJvcl9pbnZhbGlkZ3JvdXBpZCddID0gJ0ludmFsaWQgZ3JvdXAgaWQgJXMnOwokbGFuZ1snc29ydG9yZGVyJ10gPSAnU29ydCBvcmRlcic7CiRsYW5nWydoaWRkZW5maWVsZG1hcmtlciddID0gJ0hpZGRlbiBmaWVsZCBtYXJrZXInOwokbGFuZ1snaGlkZGVuZmllbGRjb2xvciddID0gJ0hpZGRlbiBmaWVsZCBjb2xvcic7CiRsYW5nWydoaWRkZW4nXSA9ICdIaWRkZW4nOwokbGFuZ1snZXJyb3JfZHVwbGljYXRlbmFtZSddID0gJ0EgcHJvcGVydHkgd2l0aCB0aGF0IG5hbWUgaXMgYWxyZWFkeSBkZWZpbmVkJzsKJGxhbmdbJ2Vycm9yX25vcHJvcGVydGllcyddID0gJ05vIHByb3BlcnRpZXMgZGVmaW5lZCc7CiRsYW5nWydlcnJvcl9ub3JlbGF0aW9ucyddID0gJ05vIHByb3BlcnRpZXMgd2VyZSBzZWxlY3RlZCBmb3IgdGhpcyBncm91cCc7CiRsYW5nWydncm91cHNmb3VuZCddID0gJ0dyb3VwcyBmb3VuZCc7CiRsYW5nWydlcnJvcl9vbmVncm91cHJlcXVpcmVkJ10gPSAnTWVtYmVyc2hpcCBpbiBhdCBsZWFzdCBvbmUgZ3JvdXAgaXMgcmVxdWlyZWQnOwokbGFuZ1sncHJvbXB0X3JlcXVpcmVvbmVncm91cCddID0gJ1JlcXVpcmUgbWVtYmVyc2hpcCBpbiBhdGxlYXN0IG9uZSBncm91cCc7CiRsYW5nWydiYWNrJ10gPSAnQmFjayc7CiRsYW5nWydlcnJvcl9taXNzaW5nX3JlcXVpcmVkX3BhcmFtJ10gPSAnJXMgaXMgYSByZXF1aXJlZCBmaWVsZCc7CiRsYW5nWydyZXF1aXJlZGZpZWxkbWFya2VyJ10gPSAnTWFyayByZXF1aXJlZCBmaWVsZHMgd2l0aCc7CiRsYW5nWydyZXF1aXJlZGZpZWxkY29sb3InXSA9ICdIaWxpdGUgcmVxdWlyZWQgZmllbGRzIGluJzsKJGxhbmdbJ25leHQnXSA9ICdOZXh0JzsKJGxhbmdbJ2Vycm9yX2dyb3VwZXhpc3RzJ10gPSAnQSBHcm91cCB3aXRoIHRoYXQgbmFtZSBhbHJlYWR5IGV4aXN0cyc7CiRsYW5nWydyZXF1aXJlZCddID0gJ1JlcXVpcmVkJzsKJGxhbmdbJ29wdGlvbmFsJ10gPSAnT3B0aW9uYWwnOwokbGFuZ1snb2ZmJ10gPSAnT2ZmJzsKJGxhbmdbJ2xlbmd0aCddID0gJ0xlbmd0aCc7CiRsYW5nWydsZW5ndGhjb21tZW50J10gPSAnPGJyPihjaGFycyBpbiB0aGUgdGV4dCBpbnB1dCknOwokbGFuZ1snc2Vsb3B0aW9ucyddID0gJ0Ryb3Bkb3duIG9wdGlvbnMsIHNlcGFyYXRlZCBieSBsaW5lIGJyZWFrcyc7CiRsYW5nWyd5ZXMnXSA9ICdZZXMnOwokbGFuZ1sncHJvbXB0J10gPSAnUHJvbXB0JzsKJGxhbmdbJ3R5cGUnXSA9ICdUeXBlJzsKJGxhbmdbJ3JlcXVpcmVkJ10gPSAnUmVxdWlyZWQgRmllbGQnOwokbGFuZ1sndGV4dCddID0gJ1RleHQnOwokbGFuZ1snY2hlY2tib3gnXSA9ICdDaGVja2JveCc7CiRsYW5nWydlbWFpbCddID0gJ0VtYWlsJzsKJGxhbmdbJ3RleHRhcmVhJ10gPSAnVGV4dGFyZWEnOwokbGFuZ1snZHJvcGRvd24nXSA9ICdEcm9wZG93bic7CiRsYW5nWydtc2dfY3VycmVudGx5bG9nZ2VkaW5hcyddID0gJ1dlbGNvbWUnOwokbGFuZ1snbG9nb3V0J10gPSAnU2lnbiBvdXQnOwokbGFuZ1sncHJvbXB0X2NoYW5nZXNldHRpbmdzJ10gPSAnQ2hhbmdlIE15IFNldHRpbmdzJzsKJGxhbmdbJ2Vycm9yX2xvZ2luZmFpbGVkJ10gPSAnTG9naW4gZmFpbGVkIC0gSW52YWxpZCB1c2VybmFtZSBvciBwYXNzd29yZD8nOwokbGFuZ1snbG9naW4nXSA9ICdTaWduIGluJzsKJGxhbmdbJ3Byb21wdF91c2VybmFtZSddID0gJ1VzZXJuYW1lJzsKJGxhbmdbJ3Byb21wdF9wYXNzd29yZCddID0gJ1Bhc3N3b3JkJzsKJGxhbmdbJ3JlZ2lzdGVyJ10gPSAnUmVnaXN0ZXInOwokbGFuZ1snZm9yZ290cHcnXSA9ICdGb3Jnb3QgWW91ciBQYXNzd29yZD8nOwokbGFuZ1snZGVmYXVsdHMnXSA9ICdEZWZhdWx0cyc7CiRsYW5nWyd0ZW1wbGF0ZSddID0gJ1RlbXBsYXRlJzsKJGxhbmdbJ2Vycm9yX3VzZXJub3Rmb3VuZCddID0gJ1VzZXIgSUQgbm90IGZvdW5kJzsKJGxhbmdbJ2Vycm9yX3VzZXJuYW1ldGFrZW4nXSA9ICdUaGF0IHVzZXJuYW1lICglcykgaXMgYWxyZWFkeSBpbiB1c2UnOwokbGFuZ1sncHJvbXB0X3NtdHB2YWxpZGF0ZSddID0gJ1VzZSBTTVRQIHRvIHZhbGlkYXRlIGVtYWlsIGFkZHJlc3Nlcz8nOwokbGFuZ1sncHJvbXB0X21pbnB3bGVuJ10gPSAnTWluaW11bSBQYXNzd29yZCBMZW5ndGgnOwokbGFuZ1sncHJvbXB0X21heHB3bGVuJ10gPSAnTWF4aW11bSBQYXNzd29yZCBMZW5ndGgnOwokbGFuZ1sncHJvbXB0X21pbnVubGVuJ10gPSAnTWluaW11bSBVc2VybmFtZSBMZW5ndGgnOwokbGFuZ1sncHJvbXB0X21heHVubGVuJ10gPSAnTWF4aW11bSBVc2VybmFtZSBMZW5ndGgnOwokbGFuZ1sncHJvbXB0X3Nlc3Npb250aW1lb3V0J10gPSAnU2Vzc2lvbiBUaW1lb3V0IChzZWNvbmRzKSc7CiRsYW5nWydwcm9tcHRfYWxsb3dlbWFpbHJlZyddID0gJ0FsbG93IEVtYWlsIFJlZ2lzdHJhdGlvbic7CiRsYW5nWydwcm9tcHRfZGZsdGdyb3VwJ10gPSAnRGVmYXVsdCBHcm91cCBmb3IgbmV3IHVzZXJzJzsKJGxhbmdbJ2NoYW5nZXNldHRpbmdzX3RlbXBsYXRlJ10gPSAnQ2hhbmdlIFNldHRpbmdzIFRlbXBsYXRlJzsKJGxhbmdbJ2Vycm9yX3Bhc3N3b3JkbWlzbWF0Y2gnXSA9ICdQYXNzd29yZHMgRG8gbm90IG1hdGNoJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWR1c2VybmFtZSddID0gJ0ludmFsaWQgVXNlcm5hbWUnOwokbGFuZ1snZXJyb3JfaW52YWxpZHBhc3N3b3JkJ10gPSAnSW52YWxpZCBQYXNzd29yZCc7CiRsYW5nWydlZGl0dXNlciddID0gJ0VkaXQgVXNlcic7CiRsYW5nWyd2YWxpZCddID0gJ1ZhbGlkJzsKJGxhbmdbJ3VzZXJuYW1lJ10gPSAnVXNlcm5hbWUnOwokbGFuZ1snc3RhdHVzJ10gPSAnU3RhdHVzJzsKJGxhbmdbJ2Vycm9yX21lbWJlcmdyb3VwcyddID0gJ1RoaXMgdXNlciBpcyBub3QgYSBtZW1iZXIgb2YgYW55IGdyb3Vwcyc7CiRsYW5nWydlcnJvcl9wcm9wZXJ0aWVzJ10gPSAnTm8gUHJvcGVydGllcyc7CiRsYW5nWyd2YWx1ZSddID0gJ1ZhbHVlJzsKJGxhbmdbJ2dyb3VwcyddID0gJ0dyb3Vwcyc7CiRsYW5nWydwcm9wZXJ0aWVzJ10gPSAnUHJvcGVydGllcyc7CiRsYW5nWydwcm9wbmFtZSddID0gJ1Byb3BlcnR5IE5hbWUnOwokbGFuZ1sncHJvcHZhbHVlJ10gPSAnUHJvcGVydHkgVmFsdWUnOwokbGFuZ1snYWRkJ10gPSAnQWRkJzsKJGxhbmdbJ2VkaXQnXSA9ICdFZGl0JzsKJGxhbmdbJ2V4cGlyZXMnXSA9ICdFeHBpcmVzJzsKJGxhbmdbJ3NwZWNpZnlfZGF0ZSddID0gJ1NwZWNpZnkgRGF0ZSc7CiRsYW5nWycxMmhycyddID0gJzEyIEhvdXJzJzsKJGxhbmdbJzI0aHJzJ10gPSAnMjQgSG91cnMnOwokbGFuZ1snNDhocnMnXSA9ICc0OCBIb3Vycyc7CiRsYW5nWycxd2VlayddID0gJzEgV2Vlayc7CiRsYW5nWycyd2Vla3MnXSA9ICcyIFdlZWtzJzsKJGxhbmdbJzFtb250aCddID0gJzEgTW9udGgnOwokbGFuZ1snM21vbnRocyddID0gJzMgTW9udGhzJzsKJGxhbmdbJzZtb250aHMnXSA9ICc2IE1vbnRocyc7CiRsYW5nWycxeWVhciddID0gJzEgWWVhcic7CiRsYW5nWyduZXZlciddID0gJ05ldmVyJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsbWVzc2FnZSddID0gJ01vZHVsZSBpbnN0YWxsZWQgc3VjZXNzZnVsbHkuPGJyLz5CZSBzdXJlIHRvIHNldCB0aGUgIk1vZGlmeSBGcm9udEVuZFVzZXIgUHJvcGVydGllcyBwZXJtaXNzaW9uLiInOwokbGFuZ1snZW1haWwnXSA9ICdFbWFpbCBBZGRyZXNzJzsKJGxhbmdbJ3Bhc3N3b3JkJ10gPSAnUGFzc3dvcmQnOwokbGFuZ1sncmVwZWF0cGFzc3dvcmQnXSA9ICdBZ2Fpbic7CiRsYW5nWydlcnJvcl9ncm91cG5hbWVfZXhpc3RzJ10gPSAnR3JvdXAgYnkgdGhhdCBuYW1lIGFscmVhZHkgZXhpc3RzJzsKJGxhbmdbJ2VkaXRncm91cCddID0gJ0VkaXQgR3JvdXAnOwokbGFuZ1snc3VibWl0J10gPSAnU3VibWl0JzsKJGxhbmdbJ2NhbmNlbCddID0gJ0NhbmNlbCc7CiRsYW5nWydkZWxldGUnXSA9ICdEZWxldGUnOwokbGFuZ1snY29uZmlybV9lZGl0Z3JvdXAnXSA9ICdBcmUgeW91IHN1cmUgdGhpcyBpcyB0aGUgcHJvcGVyIHNldHRpbmdzIGZvciB0aGlzIGdyb3VwP1xuVHVybmluZyBhIHByb3BlcnR5IG9mZiB3aWxsIG5vdCBkZWxldGUgYW55IGVudHJpZXMgaW4gdGhlIHByb3BlcnRpZXMgdGFibGUgZm9yIHRoaXMgZ3JvdXAvdXNlci4gIFRoZXkgd2lsbCBtZXJlbHkgYmUgdW5hdmFpbGFibGUuJzsKJGxhbmdbJ2FyZXlvdXN1cmVfZGVsZXRlZ3JvdXAnXSA9ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgZ3JvdXA/JzsKJGxhbmdbJ2NvbmZpcm1fZGVsZXRlX3Byb3AnXSA9ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY29tcGxldGVseSBkZWxldGUgdGhpcyBwcm9wZXJ0eT9cbkRvaW5nIHNvIHdpbGwgYWxzbyBlcmFzZSBhbnkgdXNlciBlbnRyaWVzIGZvciB0aGlzIHByb3BlcnR5Lic7CiRsYW5nWydlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnXSA9ICdJbnN1ZmZpY2llbnQgUGFyYW1ldGVycyc7CiRsYW5nWydpZCddID0gJ0lkJzsKJGxhbmdbJ3VzZXJuYW1lJ10gPSAnVXNlcm5hbWUnOwokbGFuZ1snbmFtZSddID0gJ05hbWUnOwokbGFuZ1snZXJyb3JfY2FudGFkZGdvcnVwJ10gPSAnUHJvYmxlbSBhZGRpbmcgZ3JvdXAnOwokbGFuZ1snZXJyb3JfaW52YWxpZHBhcmFtcyddID0gJ0ludmFsaWQgUGFyYW1ldGVycyc7CiRsYW5nWydhcHBseWZpbHRlciddID0gJ0FwcGx5JzsKJGxhbmdbJ2ZpbHRlciddID0gJ0ZpbHRlcic7CiRsYW5nWyd1c2VyZmlsdGVyJ10gPSAnVXNlcm5hbWUgUmVndWxhciBFeHByZXNzaW9uJzsKJGxhbmdbJ2Rlc2NyaXB0aW9uJ10gPSAnRGVzY3JpcHRpb24nOwokbGFuZ1snbmFtZSddID0gJ05hbWUnOwokbGFuZ1snZ3JvdXBuYW1lJ10gPSAnR3JvdXAgTmFtZSc7CiRsYW5nWydhY2Nlc3NkZW5pZWQnXSA9ICdBY2Nlc3MgRGVuaWVkJzsKJGxhbmdbJ2Vycm9yJ10gPSAnRXJyb3InOwokbGFuZ1snYWRkZ3JvdXAnXSA9ICdBZGQgR3JvdXAnOwokbGFuZ1snYWRkdXNlciddID0gJ0FkZCBVc2VyJzsKJGxhbmdbJ2dyb3Vwc2ZvdW5kJ10gPSAnR3JvdXBzIEZvdW5kJzsKJGxhbmdbJ3VzZXJzZm91bmQnXSA9ICdVc2VycyBmb3VuZCB0aGF0IG1hdGNoIHRoZSBjcml0ZXJpYSc7CiRsYW5nWydncm91cCddID0gJ0dyb3VwJzsKJGxhbmdbJ3NlbGVjdGdyb3VwJ10gPSAnU2VsZWN0IEdyb3VwJzsKJGxhbmdbJ3JlZ2lzdHJhdGlvbl90ZW1wbGF0ZSddID0gJ1JlZ2lzdHJhdGlvbiBUZW1wbGF0ZSc7CiRsYW5nWydsb2dvdXRfdGVtcGxhdGUnXSA9ICdMb2dvdXQgVGVtcGxhdGUnOwokbGFuZ1snbG9naW5fdGVtcGxhdGUnXSA9ICdMb2dpbiBUZW1wbGF0ZSc7CiRsYW5nWydwcmVmZXJlbmNlcyddID0gJ1ByZWZlcmVuY2VzJzsKJGxhbmdbJ2dyb3VwcyddID0gJ0dyb3Vwcyc7CiRsYW5nWyd1c2VycyddID0gIlVzZXJzIjsKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0Zyb250ZW5kIFVzZXIgTWFuYWdtZW50JzsKJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnTWFuYWdlIEZyb250ZW5kIFVzZXJzJzsKJGxhbmdbJ2RlZmF1bHRmcm9udHBhZ2UnXSA9ICJEZWZhdWx0IGZyb250IHBhZ2UiOwokbGFuZ1snbGFzdGFjY2Vzc2VkcGFnZSddID0gJ0xhc3QgYWNjZXNzZWQgcGFnZSc7CiRsYW5nWydvdGhlcnBhZ2UnXSA9ICdPdGhlciBwYWdlOiAnOwokbGFuZ1snY2hhbmdlbG9nJ10gPSA8PDxFT0YKPHVsPgo8bGk+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+MS4wLjQgLSBBcHJpbCwgMjAwNjxwPgogICAgPHA+Rml4ZXMgdG8gdGhlIGV4cG9ydCBjb2RlPC9wPgogICAgPHA+Q29kZSBjbGVhbnVwIChhbHBoYWJldGl6ZSBmdW5jdGlvbnMpPC9wPgogICAgPHA+TWlub3IgZml4ZXMgYW5kIGVuaGFuY2VtZW50cyAocmVjb21tZW5kZWQgYnkgbmlsczczKSBmb3IgZGVhbGluZyB3aXRoIHRoZSBjaGFuZ2UgcGFzc3dvcmQgc3R1ZmYuPC9wPgogICAgPHA+UmVtb3ZlZCB0aGUgcmVxdWlyZW1lbnQgZm9yIENNUyAwLjEyLCBhbmQgcHV0IGl0IGJhY2sgdG8gMC4xMS4yPC9wPgo8L2xpPgo8L3VsPgpFT0Y7CiRsYW5nWydoZWxwJ10gPSA8PDxFT0YKPGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+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+IC0gRGlzcGxheSB0aGUgZm9yZ290IHBhc3N3b3JkIGZvcm08L2xpPgo8L3VsPgo8L3A+CjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IHJldHVybnRvPSJwYWdlIjwvbGk+CjxwPlVzZWQgd2l0aCB0aGUgbG9naW4sIGxvZ291dCwgYW5kIGNoYW5nZXNldHRpbmdzIGZvcm1zLCB0aGlzIHBhcmFtZXRlciBjb250YWlucyB0aGUgcGFnZSBpZCBvciBhbGlhcyBvZiBhIHBhZ2UgdG8gcmVkaXJlY3QgdG8sIHdoZW4gdGhlIGZvcm0gaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZDwvcD4KPC91bD4KPHA+QXMgcGVyIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYXMtaXMuIFBsZWFzZSByZWFkIHRoZSB0ZXh0Cm9mIHRoZSBsaWNlbnNlIGZvciB0aGUgZnVsbCBkaXNjbGFpbWVyLjwvcD4KPGgzPlJlcXVpcmVtZW50czwvaDM+CjxwPkluIG9yZGVyIHRvIGltcGxlbWVudCB0aGUgZm9yZ290dGVuIHBhc3N3b3JkIGZ1bmN0aW9uYWxpdHksIHRoaXMgbW9kdWxlIHJlcXVpcmVzIHRoZSBDTVNNYWlsZXIgbW9kdWxlIHRvIGJlIHByZXZpb3VzbHkgaW5zdGFsbGVkPC9wPgo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDA1LCBSb2JlcnQgQ2FtcGJlbCA8YSBocmVmPSJtYWlsdG86Y2FsZ3V5MTAwMEBob3RtYWlsLmNvbSI+Jmx0O2NhbGd1eTEwMDBAaG90bWFpbC5jb20mZ3Q7PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5UaGlzIG1vZHVsZSBoYXMgYmVlbiByZWxlYXNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMIj5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPgpFT0Y7Cj8+Cg==]]></data>
  </file>
  <file>
    <filename>/lang/ext/</filename>
    <isdir>1</isdir>
  </file>
  <file>
    <filename>/lang/ext/de_DE.php</filename>
    <isdir>0</isdir>
    <data><![CDATA[PD9waHAKJGxhbmdbJ3Byb21wdF91bmZsZGxlbiddID0gJ0wmYXVtbDtuZ2UgZGVzIFVzZXJuYW1lLUZlbGRlcyc7CiRsYW5nWydwcm9tcHRfcHdmbGRsZW4nXSA9ICdMJmF1bWw7bmdlIGRlcyBQYXNzd29ydC1GZWxkZXMnOwokbGFuZ1snZXJyb3JfaW52YWxpZHBhc3N3b3JkbGVuZ3RocyddID0gJ0JlaW0gVW50ZXItLyZVdW1sO2JlcnNjaHJlaXRlbiBkaWVzZXIgTCZhdW1sO25nZSBpc3QgZGFzIFBhc3N3b3J0IHVuZyZ1dW1sO2x0aWcuJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWR1c2VybmFtZWxlbmd0aHMnXSA9ICdCZWltIFVudGVyLS8mVXVtbDtiZXJzY2hyZWl0ZW4gZGllc2VyIEwmYXVtbDtuZ2UgaXN0IGRlciBVc2VybmFtZSB1bmcmdXVtbDtsdGlnLic7CiRsYW5nWydlcnJvcl9ub2VtYWlsYWRkcmVzcyddID0gJ0YmdXVtbDtyIGRpZXNlcyBVc2VyLUtvbnRvIHd1cmRlIGtlaW5lIEVtYWlsYWRyZXNzZSBnZWZ1bmRlbi4nOwokbGFuZ1sndXNlcl9hZGRlZCddID0gJ1VzZXIgJXMgPSAlcyBoaW56dWdlZiZ1dW1sO2d0JzsKJGxhbmdbJ3VzZXJfZGVsZXRlZCddID0gJ1VzZXIgdWlkPSVzIGdlbCZvdW1sO3NjaHQnOwokbGFuZ1sncHJvcGVydHlmaWx0ZXInXSA9ICdFaWdlbnNjaGFmdCc7CiRsYW5nWyd2YWx1ZXJlZ2V4J10gPSAnV2VydCAocmVndWwmYXVtbDtyZXIgQXVzZHJ1Y2spJzsKJGxhbmdbJ3dhcm5pbmdfZWZmZWN0c2ZpZWxkbGVuZ3RoJ10gPSAnV2FybnVuZzogRGllc2UgRmVsZGVyIGJlZWluZmx1c3NlbiBkaWUgR3Imb3VtbDsmc3psaWc7ZSBkZXIgRWluZ2FiZWZlbGRlciBpbiBGb3JtdWxhcmVuLiAgRGllIFZlcnJpbmdlcnVuZyBkaWVzZXIgWmFobCBpc3QgZGFoZXIgYXVmIGVpbmVyIGV4aXN0aWVyZW5kZW4gU2VpdGUgbmljaHQgcmF0c2FtLic7CiRsYW5nWydjb25maXJtX3N1Ym1pdHByZWZzJ10gPSAnQWRtaW5pc3RyYXRvci1FaW5zdGVsbHVuZ2VuICZhdW1sO25kZXJuPyc7CiRsYW5nWydlcnJvcl9lbWFpbGFscmVhZHl1c2VkJ10gPSAnRGllc2UgRW1haWxhZHJlc3NlIGlzdCBiZXJlaXRzIGluIFZlcndlbmR1bmcuJzsKJGxhbmdbJ3Byb21wdF9hbGxvd19kdXBsaWNhdGVfZW1haWxzJ10gPSAnRW1haWwtRHVwbGlrYXRlIGVybGF1YmVuJzsKJGxhbmdbJ2luZm9fYWxsb3dfZHVwbGljYXRlX2VtYWlscyddID0gJyhlcmxhdWJ0IG1laHJlcmVuIFVzZXJuIGRpZSBOdXR6dW5nIGRlciBnbGVpY2hlbiBFbWFpbC1BZHJlc3NlKSc7CiRsYW5nWydlcnJvcl9taXNzaW5ndXNlcm5hbWUnXSA9ICdTaWUgaGFiZW4ga2VpbmVuIFVzZXJuYW1lbiBlaW5nZWdlYmVuLic7CiRsYW5nWydlcnJvcl9taXNzaW5ncGFzc3dvcmQnXSA9ICdTaWUgaGFiZW4ga2VpbiBQYXNzd29ydCBlaW5nZWdlYmVuLic7CiRsYW5nWydmcm9udGVuZHVzZXJfbG9nb3V0J10gPSAnRnJvbnRlbmRVc2VyIC0gQWJtZWxkdW5nJzsKJGxhbmdbJ2Zyb250ZW5kdXNlcl9sb2dnZWRpbiddID0gJ0Zyb250ZW5kVXNlciAtIEFubWVsZHVuZyc7CiRsYW5nWydlZGl0cHJvcF9pbmZvbXNnJ10gPSAnPGZvbnQgY29sb3I9JnF1b3Q7cmVkJnF1b3Q7PjxiPkFDSFRVTkc8L2I+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+DQo8L2xpPg0KPC91bD4nOwokbGFuZ1snaGVscCddID0gJzxoMz5XYXMgbWFjaHQgZGllc2VzIE1vZHVsPzwvaDM+DQo8cD5EaWVzZXMgTW9kdWwgZXJsYXVidCBkaWUgVmVyd2FsdHVuZyB1bmQgQWRtaW5pc3RyYXRpb24gdm9uIEZyb250RW5kLVVzZXJuIDxpPig9VXNlciwgZGllIGtlaW5lbiBadWdyaWZmIGF1ZiBkaWUgQWRtaW5pc3RyYXRpb24gaGFiZW4pPC9pPi4gRXMgIGVybSZvdW1sO2dsaWNodCB6dW0gZWluZW4gZGFzIEVyc3RlbGxlbiB2b24gVXNlcmdydXBwZW4gdW5kIFVzZXItS29udGVuIHVuZCB6dW0gYW5kZXJlbiBkYXMgQW4tIHVuZCBBYm1lbGRlbiB2b24gVXNlcm4uIEluIFZlcmJpbmR1bmcgbWl0IGRlbSBDdXN0b21Db250ZW50LU1vZHVsIGsmb3VtbDtubmVuIHVudGVyc2NoaWVkbGljaGVuIFVzZXJuIHVudGVyc2NoaWVkbGljaGUgSW5oYWx0ZSBhbmdlemVpZ3Qgd2VyZGVuLCBqZXdlaWxzIGluIEFiaCZhdW1sO25naWdrZWl0IGRhdm9uLCBvYiBkZXIgVXNlciBhbmdlbWVsZGV0IGlzdCBvZGVyIG5pY2h0IGJ6dy4gd2VsY2hlciBHcnVwcGUgZXIgYW5nZWgmb3VtbDtydC48L3A+DQo8aDM+RmVhdHVyZXM8L2gzPg0KPHVsPg0KPGxpPjxwPkFibGF1ZiBkZXIgVXNlci1Lb250ZW4uIEhpZXJtaXQgayZvdW1sO25uZW4gc2llIHplaXRsaWNoIGJlc2NociZhdW1sO25rdCBlaW5lbiBVc2VyIGVyc3RlbGxlbi48L3A+PC9saT4NCjxsaT48cD5HcnVwcGVuZWlnZW5zY2hhZnRlbi4gU2llIGsmb3VtbDtubmVuIHZvbiBkZW4gTWl0Z2xpZWRlcm4gdW50ZXJzY2hpZWRsaWNoZSBHcnVwcGVuIHVuZCB1bnRlcnNjaGllZGxpY2hlIEluZm9ybWF0aW9uZW4gYWJmcmFnZW4uPC9wPjwvbGk+DQo8bGk+PHA+SHVuZGVydGUgdm9uIFVzZXJuIHNpbmQgbSZvdW1sO2dsaWNoLjwvcD48L2xpPg0KPGxpPjxwPmhhdCBlaW5lIHVtZmFuZ3JlaWNoZSBBUEkgZiZ1dW1sO3IgZGFzIGhpbnp1ZiZ1dW1sO2dlbiB2b24gRnVua3Rpb25lbjwvcD48L2xpPg0KPC91bD4NCjxoMz5XaWUgd2lyZCBlcyBlaW5nZXNldHp0ID88L2gzPg0KPHVsPg0KPGxpPjxwPk5hY2ggZGVyIEluc3RhbGxhdGlvbiBrJm91bWw7bm5lbiBzaWUgdW50ZXIgZGVtIE1lbiZ1dW1sOyAmcXVvdDtVc2VyICZhbXA7IEdydXBwZW4mcXVvdDsgYXVmIGRpZSBBZG1pbmlzdHJhdGlvbiBkZXMgRnJvbnRFbmRVc2Vycy1Nb2R1bHMgenVncmVpZmVuLjwvcD48L2xpPg0KPGxpPg0KPHA+WnVuJmF1bWw7Y2hzdCBzb2xsdGVuIHNpZSBFaWdlbnNjaGFmdGVuIGRlZmluaWVyZW4uIEVpZ2Vuc2NoYWZ0ZW4gc2luZCBncnVuZHMmYXVtbDt0emxpY2hlIEZlbGRkZWZpbml0aW9uZW4sIGJlaSBkZW5lbiBzaWUgZGVuIFR5cCBkZXIgenUgZXJmYXNzZW5kZW4gSW5mb3JtYXRpb25lbiB1bmQgZGVyZW4gQmVzY2hyJmF1bWw7bmt1bmdlbiBmZXN0bGVnZW4gayZvdW1sO25uZW4gd2llIHp1bSBCZWlzcGllbDogTmFtZSwgQWx0ZXIsIFN0YWR0LCBCdW5kZXNsYW5kLCBTdGFhdCwgRW1haWxhZHJlc3NlIHVzdy48L3A+DQo8cD48Yj5IaW53ZWlzOjwvYj4gRiZ1dW1sO3IgZGVuIFVzZXJuYW1lbiB1bmQgZGFzIFBhc3N3b3J0IG0mdXVtbDtzc2VuIHNpZSBrZWluZSBFaWdlbnNjaGFmdGVuIGZlc3RsZWdlbjsgZGllcyB3aXJkIGJlcmVpdHMgdm9tIE1vZHVsIGVybGVkaWd0LjwvYj4NCjwvbGk+DQo8bGk+PHA+QWxzIE4mYXVtbDtjaHN0ZXMgc29sbHRlbiBzaWUgZWluZSBvZGVyIG1laHJlcmUgR3J1cHBlbiBlcnN0ZWxsZW4uIFdlbm4gc2llIGVpbmUgR3J1cHBlbiBlcnN0ZWxsZW4sIHdlcmRlbiBzaWUgbmFjaCBkZW0gR3J1cHBlbm5hbWVuLCBlaW5lciBCZXNjaHJlaWJ1bmcgc293aWUgZGVuIGRlciBHcnVwcGUgenV6dW9yZG5lbmRlbiBFaWdlbnNjaGFmdGVuIHVuZCBkZXNzZW4gU29ydGllcnVuZyBnZWZyYWd0LiBPcHRpb25hbCBzaW5kIGF1Y2ggZXJmb3JkZXJsaWNoZSBvZGVyIHZlcmJvcmdlbmUgRmVsZGVyIG0mb3VtbDtnbGljaCA8aT4oIGF1Y2ggb2ZmIGlzdCBnJnV1bWw7bHRpZyk8L2k+PC9wPjwvbGk+DQo8bGk+PHA+PGI+SGlud2Vpczo8L2I+IEJldm9yIHNpZSBmb3J0ZmFocmVuLCBzb2xsdGVuIFNpZSBzaWNoZXIgc2VpbiwgZGFzcyBkaWUgRWluc3RlbGx1bmdlbiBrb3JyZWt0IGdlc2V0enQgc2luZC48L3A+PC9saT4NCjxsaT48cD5BbnNjaGxpZSZzemxpZztlbmQgc29sbHRlbiBzaWUgZWluIHBhYXIgVXNlciBlcnN0ZWxsZW4uIERhcyBIaW56dWYmdXVtbDtnZW4gdm9uIFVzZXJuIGVyZm9sZ3QgaW4gendlaSBTY2hyaXR0ZW4uIFdlbm4gc2llIGVpbmVuIFVzZXIgZXJzdGVsbGVuLCB3ZXJkZW4gc2llIG5hY2ggZGVtIFVzZXJuYW1lbiB1bmQgZGVtIFBhc3N3b3J0IHNvd2llIG5hY2ggZWluZW0gQWJsYXVmZGF0dW0gZiZ1dW1sO3IgZGllc2VuIFVzZXIgZ2VmcmFndC4gRGFubiBtJnV1bWw7c3NlbiBzaWUgbm9jaCBkaWUgR3J1cHBlbiBhdXN3JmF1bWw7aGxlbiwgaW4gd2VsY2hlbiBkZXIgVXNlciBNaXRnbGllZCBzZWluIHNvbGwuIEtsaWNrZW4gc2llIGRhbm4gYXVmIFwmIzAzOTtXZWl0ZXJcJiMwMzk7PC9wPg0KPHA+PGVtPkhpbndlaXM6IDwvZW0+RGFzIGlzdCBlaW4gc2VociBhcmJlaXRzaW50ZW5zaXZlciB1bmQgbGFuZ3dlaWxpZ2VyIFByb3plc3MuIEVzIGlzdCBkYWhlciBlaW5mYWNoZXIsIHdlbm4gc2llIHNpY2ggZGllIFVzZXIgc2VsYnN0IHJlZ2lzdHJpZXJlbiBsYXNzZW4uIFNpZSBtJnV1bWw7c3NlbiBkYW5uIGRpZSBVc2VyIG51ciBub2NoIGVpbmVyIG9kZXIgbWVocmVyZW4gR3J1cHBlbiB6dW9yZG5lbi4gQWJlciBmJnV1bWw7ciBUZXN0endlY2tlIGVyc3RlbGxlbiBzaWUgYml0dGUgbWluZGVzdGVucyBlaW5lbiBVc2VyLjwvcD48L2xpPg0KPGxpPjxwPk5hY2hkZW0gZGFzIFN5c3RlbSBhbGxlIGYmdXVtbDtyIGRpZXNlbiBVc2VyIG5vdHdlbmRpZ2VuIEZlbGRlciBiZXN0aW1tdCBoYXQsIHdpcmQgaWhuZW4gZWluIEZvcm11bGFyIG1pdCBkZW4gZXJmb3JkZXJsaWNoZW4gSW5mb3JtYXRpb25lbiAmdXVtbDtiZXIgZGVuIFVzZXIgYW5nZXplaWd0LiBNaXQgZGVyIEtvbXBsZXR0aWVydW5nIGRpZXNlcyBGb3JtdWxhcnMgd2lyZCBkYXMgSGluenVmJnV1bWw7Z2VuIGVpbmVzIFVzZXJzIGFiZ2VzY2hsb3NzZW4uPC9wPjwvbGk+DQo8bGk+PHA+U2llIGsmb3VtbDtubmVuIGpldHp0IGRpZSBGdW5rdGlvbiBkZXMgRnJvbnRFbmQtTW9kdWxzIGF1ZiBpaHJlciBTZWl0ZSBudXR6ZW4uIEhpZXJ6dSBtJnV1bWw7c3NlbiBzaWUgZWluZmFjaCBudXIgZGVuIFRhZyB7Y21zX21vZHVsZSBtb2R1bGU9RnJvbnRFbmRVc2Vyc30gaW4gaWhyZSBTZWl0ZSBvZGVyIFRlbXBsYXRlIGVpbmYmdXVtbDtnZW4uPC9wPjwvbGk+DQo8L3VsPg0KPGgzPlN1cHBvcnQ8L2gzPg0KPHA+RGllc2VzIE1vZHVsIGJlaW5oYWx0ZXQga2VpbmVuIGtvbW1lcnppZWxsZW4gU3VwcG9ydC4gU2llIGsmb3VtbDtubmVuIGplZG9jaCAmdXVtbDtiZXIgZm9sZ2VuZGUgTSZvdW1sO2dsaWNoa2VpdGVuIEhpbGZlIHp1IGRlbSBNb2R1bCBlcmhhbHRlbjo8L3A+DQo8dWw+DQo8bGk+RiZ1dW1sO3IgZGllIGxldHp0ZSBWZXJzaW9uIGRpZXNlcyBNb2R1bHMsIEZBUXMsIGRlbSBWZXJzYW5kIGVpbmVzIEZlaGxlcnJlcG9ydHMgb2RlciBkZW0gS2F1ZiBrb21tZXJ6aWVsbGVuIFN1cHBvcnQgYmVzdWNoZW4gc2llIGJpdHRlIGNhbGd1eXMgSG9tZXBhZ2UgdW50ZXIgPGEgaHJlZj0mcXVvdDtodHRwOi8vdGVjaGNvbS5keW5kbnMub3JnJnF1b3Q7PnRlY2hjb20uZHluZG5zLm9yZzwvYT4uPC9saT4NCjxsaT5FaW5lIHdlaXRlcmUgRGlza3Vzc2lvbiB6dSBkaWVzZW0gTW9kdWwgaXN0IGF1Y2ggaW4gZGVuIEZvcmVuIHZvbiA8YSBocmVmPSZxdW90O2h0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZyZxdW90Oz5DTVMgTWFkZSBTaW1wbGU8L2E+IHp1IGZpbmRlbi48L2xpPg0KPGxpPkRlciBBdXRvciBjYWxndXkxMDAwLCBpc3QgaCZhdW1sO3VmaWcgaW0gPGEgaHJlZj0mcXVvdDtpcmM6Ly9pcmMuZnJlZW5vZGUubmV0LyNjbXMmcXVvdDs+Q01TIElSQyBDaGFubmVsPC9hPiB6dSBmaW5kZW4uPC9saT4NCjxsaT5MZXR6dGxpY2ggZXJyZWljaGVuIHNpZSBkZW4gQXV0b3IgYXVjaCAmdXVtbDtiZXIgZWluZSBkaXJla3RlIEVtYWlsLjwvbGk+ICANCjwvdWw+DQo8aDM+UGFyYW1ldGVyPC9oMz4NCjx1bD4NCjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGZvcm09JnF1b3Q7bmFtZSZxdW90OzwvbGk+DQo8cD5Gb3JtdWxhcmU6DQo8dWw+DQogPGxpPjxlbT5sb2dpbjwvZW0+IC0gWmVpZ3QgZGFzIEZvcm11bGFyIHp1ciBBbm1lbGR1bmcgYW48L2xpPg0KIDxsaT48ZW0+bG9nb3V0PC9lbT4gLSBaZWlndCBkYXMgRm9ybXVsYXIgenVyIEFibWVsZHVuZyBhbjwvbGk+DQogPGxpPjxlbT5jaGFuZ2VzZXR0aW5nczwvZW0+IC0gWmVpZ3QgZGFzIEZvcm11bGFyIHp1bSAmQXVtbDtuZGVybiBkZXIgRWluc3RlbGx1bmdlbiBhbjwvbGk+DQogPGxpPjxlbT5mb3Jnb3RwdzwvZW0+IC0gWmVpZ3QgZGFzIEZvcm11bGFyIGYmdXVtbDtyIHZlcmdlc3NlbmUgUGFzc3cmb3VtbDtydGVyIGFuPC9saT4NCjwvdWw+DQo8L3A+DQo8bGk+PGVtPihvcHRpb25hbCk8L2VtPiByZXR1cm50bz0mcXVvdDtwYWdlJnF1b3Q7PC9saT4NCjxwPkRpZXNlciBQYXJhbWV0ZXIgZW50aCZhdW1sO2x0IGRpZSBJRCBvZGVyIGRlbiBBbGlhcyBlaW5lciBTZWl0ZSwgYXVmIGRpZSBkZXIgVXNlciB3ZWl0ZXJnZWxlaXRldCB3aXJkLCB3ZW5uIGpld2VpbHMgZGFzIEZvcm11bGFyIGVyZm9sZ3JlaWNoIGF1c2dlZiZ1dW1sO2xsdCB3dXJkZS4gRXIgbCZhdW1sO3NzdCBzaWNoIGluIFZlcmJpbmR1bmcgbWl0IGRlbiBGb3JtdWxhcmVuIHp1ciBBbi0gdW5kIEFibWVsZHVuZyBzb3dpZSB6dW0gJkF1bWw7bmRlcm4gZGVyIEVpbnN0ZWxsdW5nZW4gbnV0emVuLjwvcD4NCjwvdWw+DQo8cD5OYWNoIGRlciBHUEwgd2lyZCBkaWVzZSBTb2Z0d2FyZSBzbyB2ZXImb3VtbDtmZmVudGxpY2h0LCB3aWUgc2llIGlzdC4gQml0dGUgbGVzZW4gU2llIGRlbiBMaXplbnp0ZXh0IGYmdXVtbDtyIGRlbiB2b2xsZW4gSGFmdHVuZ3NhdXNzY2hsdXNzLjwvcD4NCjxoMz5BbmZvcmRlcnVuZ2VuPC9oMz4NCjxwPlVtIGRpZSBGdW5rdGlvbiBmJnV1bWw7ciBkaWUgdmVyZ2Vzc2VuZW4gUGFzc3cmb3VtbDtydGVyIHp1IG51dHplbiwgbXVzcyB6dXZvciBkYXMgQ01TTWFpbGVyLU1vZHVsIGluc3RhbGxpZXJ0IHdlcmRlbi48L3A+DQo8aDM+Q29weXJpZ2h0IHVuZCBMaXplbno8L2gzPg0KPHA+Q29weXJpZ2h0ICZhbXA7Y29weTsgMjAwNSwgUm9iZXJ0IENhbXBiZWxsIDxhIGhyZWY9JnF1b3Q7bWFpbHRvOmNhbGd1eTEwMDBAaG90bWFpbC5jb20mcXVvdDs+Y2FsZ3V5MTAwMEBob3RtYWlsLmNvbTwvYT4uIEFsbGUgUmVjaHRlIHZvcmJlaGFsdGVuLjwvcD4NCjxwPkRpZXNlcyBNb2R1bCB3dXJkZSB1bnRlciBkZXIgPGEgaHJlZj0mcXVvdDtodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwmcXVvdDs+R05VIFB1YmxpYyBMaWNlbnNlPC9hPiB2ZXImb3VtbDtmZmVudGxpY2h0LiBTaWUgbSZ1dW1sO3NzZW4gZGllc2VyIExpemVueiB6dXN0aW1tZW4sIGJldm9yIFNpZSBkYXMgTW9kdWwgdmVyd2VuZGVuLjwvcD4nOwo/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[PD9waHAKJGxhbmdbJ2Vycm9yX25vZW1haWxhZGRyZXNzJ10gPSAnSWwgbiYjMDM5O3kgYSBwYXMgZCYjMDM5O2FkcmVzc2UgZW1haWwgZW5yZWdpc3RyJmVhY3V0ZTtlIHBvdXIgY2UgY29tcHRlLic7CiRsYW5nWyd1c2VyX2FkZGVkJ10gPSAnVXRpbGlzYXRldXIgYWpvdXQmZWFjdXRlOyAlcyA9ICVzJzsKJGxhbmdbJ3VzZXJfZGVsZXRlZCddID0gJ1V0aWxpc2F0ZXVyIHN1cHByaW0mZWFjdXRlOyB1aWQ9JXMnOwokbGFuZ1sncHJvcGVydHlmaWx0ZXInXSA9ICdQcm9wcmkmZWFjdXRlO3QmZWFjdXRlOyc7CiRsYW5nWyd2YWx1ZXJlZ2V4J10gPSAnVmFsZXVyIChleHByZXNzaW9uIHImZWFjdXRlO2d1bGkmZWdyYXZlO3JlKSc7CiRsYW5nWyd3YXJuaW5nX2VmZmVjdHNmaWVsZGxlbmd0aCddID0gJ0F0dGVudGlvbjogQ2VzIGNoYW1wcyBhZmZlY3RlbnQgbGEgdGFpbGxlIGRlIGNoYW1wcyBkJiMwMzk7ZW50ciZlYWN1dGU7ZSBkYW5zIGxlcyBmb3JtdWxhaXJlcy4gIERlc2NlbmRyZSBjZXR0ZSB2YWxldXIgc3VyIHVuIHNpdGUgZXhpc3RhbnQgbiYjMDM5O2VzdCBwYXMgcmVjb21tYW5kJmVhY3V0ZTsnOwokbGFuZ1snY29uZmlybV9zdWJtaXRwcmVmcyddID0gJ01vZGlmaWVyIGxlcyBwciZlYWN1dGU7ZiZlYWN1dGU7cmVuY2VzIGFkbWluaXN0cmF0ZXVyPyc7CiRsYW5nWydlcnJvcl9lbWFpbGFscmVhZHl1c2VkJ10gPSAnQ2V0dGUgYWRyZXNzZSBlbWFpbCBlc3QgZCZlYWN1dGU7aiZhZ3JhdmU7IHV0aWxpcyZlYWN1dGU7ZSc7CiRsYW5nWydwcm9tcHRfYWxsb3dfZHVwbGljYXRlX2VtYWlscyddID0gJ0F1dG9yaXNlciBsZXMgZG91YmxvbnMgZCYjMDM5O2VtYWlsJzsKJGxhbmdbJ2luZm9fYWxsb3dfZHVwbGljYXRlX2VtYWlscyddID0gJyhhdXRvcmlzZXIgZGUgbXVsdGlwbGVzIHV0aWxpc2F0ZXVycyBhdmVjIGxhIG0mZWNpcmM7bWUgYWRyZXNzZSBlbWFpbCknOwokbGFuZ1snZXJyb3JfbWlzc2luZ3VzZXJuYW1lJ10gPSAnVm91cyBuJiMwMzk7YXZleiBwYXMgZW50ciZlYWN1dGU7IGRlIG5vbSBkJiMwMzk7dXRpbGlzYXRldXInOwokbGFuZ1snZXJyb3JfbWlzc2luZ3Bhc3N3b3JkJ10gPSAnVm91cyBuJiMwMzk7YXZleiBwYXMgZW50ciZlYWN1dGU7IGRlIG1vdCBkZSBwYXNzZSc7CiRsYW5nWydmcm9udGVuZHVzZXJfbG9nb3V0J10gPSAnRCZlYWN1dGU7Y29ubmV4aW9uIHV0aWxpc2F0ZXVyJzsKJGxhbmdbJ2Zyb250ZW5kdXNlcl9sb2dnZWRpbiddID0gJ0Nvbm5leGlvbiB1dGlsaXNhdGV1cic7CiRsYW5nWydlZGl0cHJvcF9pbmZvbXNnJ10gPSAnPGZvbnQgY29sb3I9JnF1b3Q7cmVkJnF1b3Q7PjxiPkFUVEVOVElPTjwvYj4gZW4gY2hhbmdlYW50IHVuZSBwcm9wcmkmZWFjdXRlO3QmZWFjdXRlOyBxdWkgYSAmZWFjdXRlO3QmZWFjdXRlOyBhc3NpZ24mZWFjdXRlO2UgJmFncmF2ZTsgZGVzIGdyb3VwZXMsIHZvdXMgcG91dmV6IHBvdGVudGllbGxlbWVudCBkJmVhY3V0ZTt0cnVpcmUgb3UgYWImaWNpcmM7bWVyIHVuIHNpdGUgZXhpc3RhbnQgPGk+KGVuIHBhcnRpY3VsaWVyIHNpIHZvdXMgciZlYWN1dGU7ZHVpc2V6IGxlcyBsb25ndWV1cnMgZGUgY2hhbXBzLCBldGMpPC9pPjwvZm9udD4nOwokbGFuZ1snaW5mb19zbXRwdmFsaWRhdGUnXSA9ICdDZXR0ZSBmb25jdGlvbiBuZSBtYXJjaGUgcGFzIHNvdXMgV2luZG93cyc7CiRsYW5nWydtc2dfZG9udGNyZWF0ZXVzZXJuYW1lJ10gPSAnTmUgY3ImZWFjdXRlO2V6IHBhcyBkZSBwcm9wcmkmZWFjdXRlO3QmZWFjdXRlOyBwb3VyIHV0aWxpc2F0ZXVyLCBjYXIgY2VjaSBlc3QgaW5jbHVzIGRhbnMgbGUgbW9kdWxlIEZyb250RW5kVXNlcnMnOwokbGFuZ1sncHJvbXB0X2V4cG9ydGNzdiddID0gJ0V4cG9ydGVyIGxhIGxpc3RlIGRlcyB1dGlsaXNhdGV1ciBkYW5zIHVuIGZpY2hpZXIgYXUgZm9ybWF0IENTVic7CiRsYW5nWydleHBvcnRjc3YnXSA9ICdFeHBvcnRlcic7CiRsYW5nWydhZG1pbiddID0gJ0FkbWluJzsKJGxhbmdbJ2VkaXRwcm9wJ10gPSAnJkVhY3V0ZTtkaXRlciBsYSBwcm9wcmkmZWFjdXRlO3QmZWFjdXRlOyc7CiRsYW5nWydtYXhsZW5ndGgnXSA9ICdMb25ndWV1ciBtYXhpbWFsZSc7CiRsYW5nWydjcmVhdGVkJ10gPSAnQ3ImZWFjdXRlOyZlYWN1dGU7JzsKJGxhbmdbJ3NvcnRieSddID0gJ1RyaWVyIHBhcic7CiRsYW5nWydzb3J0J10gPSAnVHJpJzsKJGxhbmdbJ3VzZXJzaW5ncm91cCddID0gJ1V0aWxpc2F0ZXVycyBkYW5zIGxlIGdyb3VwZSc7CiRsYW5nWyd1c2VybGltaXQnXSA9ICdMaW1pdGVyIGxlcyByJmVhY3V0ZTtzdWx0YXRzICZhZ3JhdmU7JzsKJGxhbmdbJ2Vycm9yX25vZW1haWxmaWVsZCddID0gJ0F1Y3VuIGVtYWlsIHRyb3V2JmVhY3V0ZTsgcG91ciBjZXQgdXRpbGlzYXRldXIuIFZvdXMgZGV2ZXogJmVhY3V0ZTt2ZW50dWVsbGVtZW50IGNvbnRhY3RlciBsJiMwMzk7YWRtaW5pc3RyYXRldXIuJzsKJGxhbmdbJ3Byb21wdF9mb3Jnb3Rwd19wYWdlJ10gPSAnUGFnZUlEL0FsaWFzIGR1IGZvcm11bGFpcmUgbW90IGRlIHBhc3NlIG91YmxpJmVhY3V0ZTsnOwokbGFuZ1sncHJvbXB0X2NoYW5nZXNldHRpbmdzX3BhZ2UnXSA9ICdQYWdlSUQvQWxpYXMgZHUgZm9ybXVsYWlyZSBkZSBjaGFuZ2VtZW50IGRlIHBhcmFtJmVncmF2ZTt0cmVzJzsKJGxhbmdbJ3Byb21wdF9sb2dpbl9wYWdlJ10gPSAnUGFnZUlEL0FsaWFzIG8mdWdyYXZlOyByZWRpcmlnZXIgbCYjMDM5O3V0aWxpc2F0ZXVyIGFwciZlZ3JhdmU7cyBxdSYjMDM5O2lsIHNlIHNvaXQgY29ubmVjdCZlYWN1dGU7JzsKJGxhbmdbJ3Byb21wdF9sb2dvdXRfcGFnZSddID0gJ1BhZ2VJRC9BbGlhcyBvJnVncmF2ZTsgcmVkaXJpZ2VyIGwmIzAzOTt1dGlsaXNhdGV1ciBhcHImZWdyYXZlO3MgcXUmIzAzOTtpbCBzZSBzb2l0IGQmZWFjdXRlO2Nvbm5lY3QmZWFjdXRlOyc7CiRsYW5nWydzb3J0b3JkZXInXSA9ICdPcmRlIGRlIHRyaSc7CiRsYW5nWydwcm9tcHRfbnVtcmVzZXRyZWNvcmQnXSA9ICdVbiBub21icmUgZCYjMDM5O3V0aWxpc2F0ZXVycyBlc3QgZW4gY291cnMgZGUgciZlYWN1dGU7aW5pdGlhbGlzYXRpb24gZGUgbW90cyBkZSBwYXNzZS4gQ2Ugbm9tYnJlIGVzdCBhY3R1ZWxsZW1lbnQgZGU6JzsKJGxhbmdbJ3JlbW92ZTF3ZWVrJ10gPSAnU3VwcHJpbWVyIHRvdXRlcyBsZXMgZW50ciZlYWN1dGU7ZXMgdmllaWxsZXMgZGUgcGx1cyBkJiMwMzk7dW5lIHNlbWFpbmUnOwokbGFuZ1sncmVtb3ZlMW1vbnRoJ10gPSAnU3VwcHJpbWVyIHRvdXRlcyBsZXMgZW50ciZlYWN1dGU7ZXMgdmllaWxsZXMgZGUgcGx1cyBkJiMwMzk7dW4gbW9pcyc7CiRsYW5nWydyZW1vdmVhbGwnXSA9ICdTdXBwcmltZXIgdG91dGVzIGxlcyBlbnRyJmVhY3V0ZTtlcyc7CiRsYW5nWydhcmV5b3VzdXJlJ10gPSAnJkVjaXJjO3Rlcy12b3VzIHMmdWNpcmM7cj8nOwokbGFuZ1snZXJyb3JfaW52YWxpZGNvZGUnXSA9ICdVbiBjb2RlIGludmFsaWRlIGEgJmVhY3V0ZTt0JmVhY3V0ZTsgZW50ciZlYWN1dGU7LCB2ZXVpbGxleiByJmVhY3V0ZTtlc3NheWVyJzsKJGxhbmdbJ2Vycm9yX3RlbXBjb2Rlbm90Zm91bmQnXSA9ICdMZSBjb2RlIHRlbXBvcmFpcmUgcG91ciB2b3RyZSBpZCB1dGlsaXNhdHVlciBuJiMwMzk7YSBwYXMgcHUgJmVjaXJjO3RyZSB0cm91diZlYWN1dGU7IGRhbnMgbGEgYmFzZSBkZSBkb25uJmVhY3V0ZTtlcyc7CiRsYW5nWydmb3Jnb3RwYXNzd29yZF92ZXJpZnl0ZW1wbGF0ZSddID0gJ0dhYmFyaXQgdXRpbGlzJmVhY3V0ZTsgcG91ciBhZmZpY2hlciBsZSBmb3JtdWxhaXJlIGRlIHYmZWFjdXRlO3JpZmljYXRpb24nOwokbGFuZ1snZm9yZ290cGFzc3dvcmRfZW1haWx0ZW1wbGF0ZSddID0gJ0dhYmFyaXQgdXRpbGlzJmVhY3V0ZTsgcG91ciBsJiMwMzk7ZW1haWwgZW52b3kmZWFjdXRlOyBsb3JzIGRlIGwmIzAzOTtvdWJsaSBkdSBtb3QgZGUgcGFzc2UnOwokbGFuZ1snZXJyb3JfcmVzZXRhbHJlYWR5c2VudCddID0gJ1VuZSBkZW1hbmRlIGRlIHImZWFjdXRlO2luaXRpYWxpc2F0aW9uIGRlIG1vdCBkZSBwYXNzZSBhICZlYWN1dGU7dCZlYWN1dGU7IHNvdW1pc2UgcG91ciBjZSBjb21wdGUsIHNvaXQgcGFyIHZvdXMtbSZlY2lyYzttZSwgc29pdCBwYXIgcXVlbHF1JiMwMzk7dW4gZCYjMDM5O2F1dHJlLiBWJmVhY3V0ZTtyaWZpZXogdm90cmUgZW1haWwsIHZvdXMgeSB0cm91dmVyZXogbGVzIGluc3RydWN0aW9ucyBwb3VyIGxhIHImZWFjdXRlO2luaXRpYWxpc2F0aW9uIGRlIHZvdHJlIG1vdCBkZSBwYXNzZS4nOwokbGFuZ1snZXJyb3JfZGJlcnJvciddID0gJ0VycmV1ciBkZSBiYXNlIGRlIGRvbm4mZWFjdXRlO2VzJzsKJGxhbmdbJ21lc3NhZ2VfZm9yZ290cHdlbWFpbCddID0gJ1ZvdXMgcmVjZXZleiBjZSBtZXNzYWdlIGNhciBxdWVscXUmIzAzOTt1biBub3VzIGEgZGl0IHF1ZSB2b3VzIGF2aWV6IHBlcmR1IHZvdHJlIG1vdCBkZSBwYXNzZS4gU2kgYyYjMDM5O2VzdCBsZSBjYXMsIGxpc2V6IGxlcyBpbnN0cnVjdGlvbnMgY2ktZGVzc291cy4gU2kgdm91cyBuZSBzYXZleiBwYXMgZGUgcXVvaSBpbCBzJiMwMzk7YWdpdCwgdm91cyBwb3V2ZXogc2ltcGxlbWVudCBlZmZhY2VyIGNlIG1lc3NhZ2UuIE5vdXMgdm91cyByZW1lcmNpb25zLic7CiRsYW5nWydwcm9tcHRfY29kZSddID0gJ0NvZGUnOwokbGFuZ1snbWVzc2FnZV9jb2RlJ10gPSAnTGUgY29kZSBzdWl2YW50IGEgJmVhY3V0ZTt0JmVhY3V0ZTsgZyZlYWN1dGU7biZlYWN1dGU7ciZlYWN1dGU7IGF1IGhhc2FyZCBwb3VyIGxhIHYmZWFjdXRlO3JpZmljYXRpb24gZHUgY29tcGUgdXRpbGlzYXRldXIuIExvcnNxdWUgdm91cyBjbGlxdWVyZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cywgdm91cyB0cm91dmVyZXogdW4gY2hhbXAgZGFucyBsZXF1ZWwgZW50cmVyIGNlIGNvZGUuIE5vcm1hbGVtZW50LCBjZSBjaGFtcCBlc3QgcmVtcGxpIHBvdXIgdm91cywgbWFpcyBkYW5zIGxlIGNhcyBjb250cmFpcmUsIGxlIGNvZGUgZXN0Jm5ic3A7Oic7CiRsYW5nWydwcm9tcHRfbGluayddID0gJ0xlIGxpZW4gc3VpdmFudCB2b3VzIGFtJmVncmF2ZTtuZSBhdSBzaXRlIG8mdWdyYXZlOyB2b3VzIHBvdXZleiBlbnRyZXIgbGUgY29kZSBjaS1kZXNzdXMsIGV0IHImZWFjdXRlO2luaXRpYWxpc2VyIHZvdHJlIG1vdCBkZSBwYXNzZSZuYnNwOzonOwokbGFuZ1snbG9zdHBhc3N3b3JkX2VtYWlsc3ViamVjdCddID0gJ01vdCBkZSBwYXNzZSBvdWJsaSZlYWN1dGU7JzsKJGxhbmdbJ2Vycm9yX25vbWFpbGVybW9kdWxlJ10gPSAnTGUgbW9kdWxlIENNU01haWxlciBuJiMwMzk7YSBwYXMgJmVhY3V0ZTt0JmVhY3V0ZTsgdHJvdXYmZWFjdXRlOyc7CiRsYW5nWydpbmZvX2ZvcmdvdHB3bWVzc2FnZXNlbnQnXSA9ICdVbiBlbWFpbCBhICZlYWN1dGU7dCZlYWN1dGU7IGVudm95JmVhY3V0ZTsgJmFncmF2ZTsgJXMgYXZlYyBsZXMgaW5zdHJ1Y3Rpb25zIHBvdXIgbGEgciZlYWN1dGU7aW5pdGlhbGlzYXRpb24gZHUgbW90IGRlIHBhc3NlLiBNZXJjaSc7CiRsYW5nWydsb3N0cHdfbWVzc2FnZSddID0gJ1NpIHZvdXMgYXZleiBvdWJsaSZlYWN1dGU7IHZvdHJlIG1vdCBkZSBwYXNzZSwgdmV1aWxsZXogZW50cmVyIHZvdHJlIGlkZW50aWZpYW50IGljaSwgZXQgc2kgbm91cyBsZSB0cm91dm9ucywgdm91cyByZWNldnJleiB1biBlbWFpbCBhdmVjIGxlcyBpbnN0cnVjdGlvbnMgcG91ciBsYSByJmVhY3V0ZTtpbml0aWFsaXNhdGlvbiBkdSBtb3QgZGUgcGFzc2UuJzsKJGxhbmdbJ2ZvcmdvdHBhc3N3b3JkX3RlbXBsYXRlJ10gPSAnR2FiYXJpdHMgcG91ciBsJiMwMzk7b3VibGkgZHUgbW90IGRlIHBhc3NlJzsKJGxhbmdbJ2Vycm9yX3Byb3Bub3Rmb3VuZCddID0gJ0xhIHByb3ByaSZlYWN1dGU7dCZlYWN1dGU7ICVzIG4mIzAzOTthIHBhcyAmZWFjdXRlO3QmZWFjdXRlOyB0cm91diZlYWN1dGU7ZSc7CiRsYW5nWydwcm9wc2ZvdW5kJ10gPSAncHJvcHJpJmVhY3V0ZTt0JmVhY3V0ZTtzIHRyb3V2JmVhY3V0ZTtlcyc7CiRsYW5nWydhZGRwcm9wJ10gPSAnQWpvdXRlciB1bmUgcHJvcHJpJmVhY3V0ZTt0JmVhY3V0ZTsnOwokbGFuZ1snZXJyb3JfcmVxdWlyZWRmaWVsZCddID0gJ1VuIGNoYW1wIHJlcXVpcyAoJXMpIGVzdCB2aWRlJzsKJGxhbmdbJ2luZm9fZW1wdHlwYXNzd29yZGZpZWxkJ10gPSAnVmV1aWxsZXogZW50cmVyIGljaSB1biBub3V2ZWF1IG1vdCBkZSBwYXNzZSc7CiRsYW5nWydlcnJvcl9ub3Rsb2dnZWRpbiddID0gJ1ZvdXMgbmUgc2VtYmxleiBwYXMgJmVjaXJjO3RyZSBjb25uZWN0JmVhY3V0ZTsnOwokbGFuZ1sndXNlcl9zZXR0aW5ncyddID0gJ1BhcmFtJmVncmF2ZTt0cmVzJzsKJGxhbmdbJ3VzZXJfcmVnaXN0cmF0aW9uJ10gPSAnRW5yZWdpc3RyZW1lbnQnOwokbGFuZ1snZXJyb3JfYWNjb3VudGV4cGlyZWQnXSA9ICdDZSBjb21wdGUgYSBleHBpciZlYWN1dGU7JzsKJGxhbmdbJ2Vycm9yX2ltcHJvcGVyZW1haWxmb3JtYXQnXSA9ICdGb3JtYXQgZCYjMDM5O2FkcmVzc2UgZW1haWwgaW52YWxpZGUnOwokbGFuZ1snZXJyb3JfaW52YWxpZGV4cGlyeWRhdGUnXSA9ICdEYXRlIGQmIzAzOTtleHBpcmF0aW9uIGludmFsaWRlJzsKJGxhbmdbJ2Vycm9yX3Byb2JsZW1zZXR0aW5ncHJvcGVydHknXSA9ICdJbCB5IGEgZXUgdW5lIGVycmV1ciBsb3JzIGRlIGxhIGQmZWFjdXRlO2Zpbml0aW9uICVzIHBvdXIgbCYjMDM5O3V0aWxpc2F0ZXVyICRzJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRncm91cGlkJ10gPSAnaWQgZGUgZ3JvdXBlICVzIGludmFsaWRlJzsKJGxhbmdbJ2hpZGRlbmZpZWxkbWFya2VyJ10gPSAnTWFycXVldXIgZGUgY2hhbXAgY2FjaCZlYWN1dGU7JzsKJGxhbmdbJ2hpZGRlbmZpZWxkY29sb3InXSA9ICdDb3VsZXVyIGRlIGNoYW1wIGNhY2gmZWFjdXRlOyc7CiRsYW5nWydoaWRkZW4nXSA9ICdDYWNoJmVhY3V0ZTsnOwokbGFuZ1snZXJyb3JfZHVwbGljYXRlbmFtZSddID0gJ1VuZSBwcm9wcmkmZWFjdXRlO3QmZWFjdXRlOyBkdSBtJmVjaXJjO21lIG5vbSBlc3QgZCZlYWN1dGU7aiZhZ3JhdmU7IGQmZWFjdXRlO2ZpbmllJzsKJGxhbmdbJ2Vycm9yX25vcHJvcGVydGllcyddID0gJ0F1Y3VuZSBwcm9wcmkmZWFjdXRlO3QmZWFjdXRlOyBkJmVhY3V0ZTtmaW5pZSc7CiRsYW5nWydlcnJvcl9ub3JlbGF0aW9ucyddID0gJ0F1Y3VuIHByb3ByaSZlYWN1dGU7dCZlYWN1dGU7IG4mIzAzOTthICZlYWN1dGU7dCZlYWN1dGU7IHMmZWFjdXRlO2xlY3Rpb25uJmVhY3V0ZTtlIHBvdXIgY2UgZ3JvdXBlJzsKJGxhbmdbJ2dyb3Vwc2ZvdW5kJ10gPSAnR3JvdXBlcyB0cm91diZlYWN1dGU7cyc7CiRsYW5nWydlcnJvcl9vbmVncm91cHJlcXVpcmVkJ10gPSAnTCYjMDM5O2FwcGFydGVuYW5jZSAmYWdyYXZlOyBhdSBtb2lucyB1biBncm91cGUgZXN0IHJlcXVpc2UnOwokbGFuZ1sncHJvbXB0X3JlcXVpcmVvbmVncm91cCddID0gJ1JlcXVpZXJ0IGwmIzAzOTthcHBhcnRlbmFuY2UgJmFncmF2ZTsgYXUgbW9pbnMgdW4gZ3JvdXBlJzsKJGxhbmdbJ2JhY2snXSA9ICdSZXRvdXInOwokbGFuZ1snZXJyb3JfbWlzc2luZ19yZXF1aXJlZF9wYXJhbSddID0gJyVzIGVzdCB1biBjaGFtcCByZXF1aXMnOwokbGFuZ1sncmVxdWlyZWRmaWVsZG1hcmtlciddID0gJ01hcnF1ZSBsZXMgY2hhbXBzIHJlcXVpcyBhdmVjJzsKJGxhbmdbJ3JlcXVpcmVkZmllbGRjb2xvciddID0gJ01pc2UgZW4gJmVhY3V0ZTt2aWRlbmNlIGRlcyBjaGFtcHMgcmVxdWlzIGVuJzsKJGxhbmdbJ25leHQnXSA9ICdQcm9jaGFpbic7CiRsYW5nWydlcnJvcl9ncm91cGV4aXN0cyddID0gJ1VuIGdyb3VwZSBkdSBtJmVjaXJjO21lIG5vbSBleGlzdGUgZCZlYWN1dGU7aiZhZ3JhdmU7JzsKJGxhbmdbJ3JlcXVpcmVkJ10gPSAnQ2hhbXAgcmVxdWlzJzsKJGxhbmdbJ29wdGlvbmFsJ10gPSAnT3B0aW9uZWwnOwokbGFuZ1snb2ZmJ10gPSAnT2ZmJzsKJGxhbmdbJ2xlbmd0aCddID0gJ0xvbmd1ZXVyJzsKJGxhbmdbJ2xlbmd0aGNvbW1lbnQnXSA9ICc8YnI+KGNhcmFjdCZlZ3JhdmU7cmVzIGRhbnMgbGUgY2hhbXAgdGV4dGUpJzsKJGxhbmdbJ3NlbG9wdGlvbnMnXSA9ICdPcHRpb25zIG1lbnUgZCZlYWN1dGU7cm91bGFudCwgcyZlYWN1dGU7cGFyJmVhY3V0ZTtlcyBwYXIgZGVzIHJldG91cnMgJmFncmF2ZTsgbGEgbGlnbmUnOwokbGFuZ1sneWVzJ10gPSAnT3VpJzsKJGxhbmdbJ3Byb21wdCddID0gJ0ludml0ZSc7CiRsYW5nWyd0eXBlJ10gPSAnVHlwZSc7CiRsYW5nWyd0ZXh0J10gPSAnVGV4dGUnOwokbGFuZ1snY2hlY2tib3gnXSA9ICdDYXNlICZhZ3JhdmU7IGNvY2hlcic7CiRsYW5nWydlbWFpbCddID0gJ0FkcmVzc2UgZW1haWwnOwokbGFuZ1sndGV4dGFyZWEnXSA9ICdUZXh0YXJlYSc7CiRsYW5nWydkcm9wZG93biddID0gJ01lbnUgZCZlYWN1dGU7cm91bGFudCc7CiRsYW5nWydtc2dfY3VycmVudGx5bG9nZ2VkaW5hcyddID0gJ0JpZW52ZW51ZSc7CiRsYW5nWydsb2dvdXQnXSA9ICdEJmVhY3V0ZTtjb25uZXhpb24nOwokbGFuZ1sncHJvbXB0X2NoYW5nZXNldHRpbmdzJ10gPSAnQ2hhbmdlbWVudCBkZSBNZXMgUGFyYW0mZWdyYXZlO3RyZXMnOwokbGFuZ1snZXJyb3JfbG9naW5mYWlsZWQnXSA9ICdMYSBjb25uZXhpb24gYSAmZWFjdXRlO2Nob3UmZWFjdXRlOyAtIGlkZW50aWZpYW50IG91IG1vdCBkZSBwYXNzZSBpbnZhbGlkZT8nOwokbGFuZ1snbG9naW4nXSA9ICdTJiMwMzk7ZW5yZWdpc3RyZXInOwokbGFuZ1sncHJvbXB0X3VzZXJuYW1lJ10gPSAnSWRlbnRpZmlhbnQnOwokbGFuZ1sncHJvbXB0X3Bhc3N3b3JkJ10gPSAnTW90IGRlIHBhc3NlJzsKJGxhbmdbJ3JlZ2lzdGVyJ10gPSAnRW5yZWdpc3RyZXotdm91cyc7CiRsYW5nWydmb3Jnb3RwdyddID0gJ0F2ZXotdm91cyBvdWJsaSZlYWN1dGU7IHZvdHJlIG1vdCBkZSBwYXNzZT8nOwokbGFuZ1snZGVmYXVsdHMnXSA9ICdQYXIgZCZlYWN1dGU7ZmF1dCc7CiRsYW5nWyd0ZW1wbGF0ZSddID0gJ0dhYmFyaXQnOwokbGFuZ1snZXJyb3JfdXNlcm5vdGZvdW5kJ10gPSAnSUQgdXRpbGlzYXRldXIgbm9uIHRyb3V2JmVhY3V0ZTsnOwokbGFuZ1snZXJyb3JfdXNlcm5hbWV0YWtlbiddID0gJ0NldCBpZGVudGlmaWFudCAoJXMpIGV4aXN0ZSBkJmVhY3V0ZTtqJmFncmF2ZTsnOwokbGFuZ1sncHJvbXB0X3NtdHB2YWxpZGF0ZSddID0gJ1V0aWxpc2VyIFNNVFAgcG91ciBsYSB2YWxpZGF0aW9uIGRlcyBhZHJlc3NlcyBlbWFpbD8nOwokbGFuZ1sncHJvbXB0X21pbnB3bGVuJ10gPSAnTG9uZ3VldXIgbWluaW1hbGUgZHUgbW90IGRlIHBhc3NlJzsKJGxhbmdbJ3Byb21wdF9tYXhwd2xlbiddID0gJ0xvbmd1ZXVyIG1heGltYWxlIGR1IG1vdCBkZSBwYXNzZSc7CiRsYW5nWydwcm9tcHRfbWludW5sZW4nXSA9ICdMb25ndWV1ciBtaW5pbWFsZSBkZSBsJiMwMzk7aWRlbnRpZmlhbnQnOwokbGFuZ1sncHJvbXB0X21heHVubGVuJ10gPSAnTG9uZ3VldXIgbWF4aW1hbGUgZGUgbCYjMDM5O2lkZW50aWZpYW50JzsKJGxhbmdbJ3Byb21wdF9zZXNzaW9udGltZW91dCddID0gJ0V4cGlyYXRpb24gZGUgc2Vzc2lvbiAobWludXRlcyknOwokbGFuZ1sncHJvbXB0X2FsbG93ZW1haWxyZWcnXSA9ICdBdXRvcmlzZSBsJiMwMzk7ZW5yZWdpc3RyZW1lbnQgcGFyIGVtYWlsJzsKJGxhbmdbJ3Byb21wdF9kZmx0Z3JvdXAnXSA9ICdHcm91cGUgcGFyIGQmZWFjdXRlO2ZhdXQgcG91ciBsZXMgbm91dmVhdXggdXRpbGlzYXRldXJzJzsKJGxhbmdbJ2NoYW5nZXNldHRpbmdzX3RlbXBsYXRlJ10gPSAnQ2hhbmdlciBsZSBnYWJhcml0IGRlcyBwYXJhbSZlZ3JhdmU7dHJlcyc7CiRsYW5nWydlcnJvcl9wYXNzd29yZG1pc21hdGNoJ10gPSAnTGVzIG1vdHMgZGUgcGFzc2UgbmUgY29uY29yZGVudCBwYXMnOwokbGFuZ1snZXJyb3JfaW52YWxpZHVzZXJuYW1lJ10gPSAnSWRlbnRpZmlhbnQgbm9uIHZhbGlkZSc7CiRsYW5nWydlcnJvcl9pbnZhbGlkcGFzc3dvcmQnXSA9ICdNb3QgZGUgcGFzc2Ugbm9uIHZhbGlkZSc7CiRsYW5nWydlZGl0dXNlciddID0gJyZFYWN1dGU7ZGl0ZXIgbCYjMDM5O3V0aWxpc2F0ZXVyJzsKJGxhbmdbJ3ZhbGlkJ10gPSAnVmFsaWRlJzsKJGxhbmdbJ3VzZXJuYW1lJ10gPSAnSWRlbnRpZmlhbnQnOwokbGFuZ1snc3RhdHVzJ10gPSAnU3RhdHV0JzsKJGxhbmdbJ2Vycm9yX21lbWJlcmdyb3VwcyddID0gJ0NldCB1dGlsaXNhdGV1ciBuJiMwMzk7ZXN0IG1lbWJyZSBkJiMwMzk7YXVjdW4gZ3JvdXBlJzsKJGxhbmdbJ2Vycm9yX3Byb3BlcnRpZXMnXSA9ICdBdWN1bmUgcHJvcHJpJmVhY3V0ZTt0JmVhY3V0ZTsnOwokbGFuZ1sndmFsdWUnXSA9ICdWYWxldXInOwokbGFuZ1snZ3JvdXBzJ10gPSAnR3JvdXBlcyc7CiRsYW5nWydwcm9wZXJ0aWVzJ10gPSAnUHJvcHJpJmVhY3V0ZTt0JmVhY3V0ZTtzJzsKJGxhbmdbJ3Byb3BuYW1lJ10gPSAnTm9tIGRlIHByb3ByaSZlYWN1dGU7dCZlYWN1dGU7JzsKJGxhbmdbJ3Byb3B2YWx1ZSddID0gJ1ZhbGV1ciBkZSBsYSBwcm9wcmkmZWFjdXRlO3QmZWFjdXRlOyc7CiRsYW5nWydhZGQnXSA9ICdBam91dGVyJzsKJGxhbmdbJ2VkaXQnXSA9ICcmRWFjdXRlO2RpdGVyJzsKJGxhbmdbJ2V4cGlyZXMnXSA9ICdFeHBpcmUnOwokbGFuZ1snc3BlY2lmeV9kYXRlJ10gPSAnU3AmZWFjdXRlO2NpZmlleiB1bmUgZGF0ZSc7CiRsYW5nWycxMmhycyddID0gJzEyIGhldXJlcyc7CiRsYW5nWycyNGhycyddID0gJzI0IGhldXJlcyc7CiRsYW5nWyc0OGhycyddID0gJzQ4IGhldXJlcyc7CiRsYW5nWycxd2VlayddID0gJzEgc2VtYWluZSc7CiRsYW5nWycyd2Vla3MnXSA9ICcyIHNlbWFpbmVzJzsKJGxhbmdbJzFtb250aCddID0gJzEgbW9pcyc7CiRsYW5nWyczbW9udGhzJ10gPSAnMyBtb2lzJzsKJGxhbmdbJzZtb250aHMnXSA9ICc2IG1vaXMnOwokbGFuZ1snMXllYXInXSA9ICcxIGFuJzsKJGxhbmdbJ25ldmVyJ10gPSAnSmFtYWlzJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsbWVzc2FnZSddID0gJ0xlIG1vZHVsZSBhICZlYWN1dGU7dCZlYWN1dGU7IGluc3RhbGwmZWFjdXRlOyBhdmVjIHN1Y2MmZWdyYXZlO3MuPGJyLz5Bc3N1cmV6LXZvdXMgZGUgZCZlYWN1dGU7ZmluaXIgbGEgcGVybWlzc2lvbiAmcXVvdDtNb2RpZnkgRnJvbnRFbmRVc2VyIFByb3BlcnRpZXMmcXVvdDsnOwokbGFuZ1sncGFzc3dvcmQnXSA9ICdNb3QgZGUgcGFzc2UnOwokbGFuZ1sncmVwZWF0cGFzc3dvcmQnXSA9ICdFbmNvcmUnOwokbGFuZ1snZXJyb3JfZ3JvdXBuYW1lX2V4aXN0cyddID0gJ1VuIGdyb3VwZSBkdSBtJmVjaXJjO21lIG5vbSBleGlzdGUgZCZlYWN1dGU7aiZhZ3JhdmU7JzsKJGxhbmdbJ2VkaXRncm91cCddID0gJyZFYWN1dGU7ZGl0ZXIgbGUgZ3JvdXBlJzsKJGxhbmdbJ3N1Ym1pdCddID0gJ0Vudm95ZXInOwokbGFuZ1snY2FuY2VsJ10gPSAnQW5udWxlcic7CiRsYW5nWydkZWxldGUnXSA9ICdTdXBwcmltZXInOwokbGFuZ1snY29uZmlybV9lZGl0Z3JvdXAnXSA9ICcmRWNpcmM7dGVzLXZvdXMgcyZ1Y2lyYztyIHF1ZSBjZXR0ZSBwcm9wcmkmZWFjdXRlO3QmZWFjdXRlOyBlc3QgY29ycmVjdGUgcG91ciBjZSBncm91cGU/XG5EJmVhY3V0ZTtzYWN0aXZlciB1bmUgcHJvcHJpJmVhY3V0ZTt0JmVhY3V0ZTsgbjBlZmZhY2VyYSBwYXMgbGVzIGVudHImZWFjdXRlO2VzIGRhbnMgbGEgdGFibGUgZGVzIHByb3ByaSZlYWN1dGU7dCZlYWN1dGU7cyBwb3VyIGNlIGdyb3VwZS91dGlsaXNhdGV1ci4gVG91dCBhdSBwbHVzLCBsZXMgcHJvcHJpJmVhY3V0ZTt0JmVhY3V0ZTtzIG5lIHNlcm9udCBwYXMgZGlzcG9uaWJsZXMuJzsKJGxhbmdbJ2FyZXlvdXN1cmVfZGVsZXRlZ3JvdXAnXSA9ICcmRWNpcmM7dGVzLXZvdXMgcyZ1Y2lyYztyIGRlIHZvdWxvaXIgc3VwcHJpbWVyIGNlIGdyb3VwZT8nOwokbGFuZ1snY29uZmlybV9kZWxldGVfcHJvcCddID0gJyZFY2lyYzt0ZXMtdm91cyBzJnVjaXJjO3IgZGUgdm91bG9pciBjb21wbCZlZ3JhdmU7dGVtZW50IHN1cHByaW1lciBjZXR0ZSBwcm9wcmkmZWFjdXRlO3QmZWFjdXRlOz9cbkNlbGEgc3VwcHJpbWVyYSB0b3V0ZXMgbGVzIGVudHImZWFjdXRlO2VzIHBvdXIgY2V0dGUgcHJvcHJpJmVhY3V0ZTt0JmVhY3V0ZTsnOwokbGFuZ1snZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJ10gPSAnUGFyYW0mZWdyYXZlO3RyZXMgaW5zdWZmaXNhbnRzJzsKJGxhbmdbJ2lkJ10gPSAnSWQnOwokbGFuZ1snbmFtZSddID0gJ05vbSc7CiRsYW5nWydlcnJvcl9jYW50YWRkZ29ydXAnXSA9ICdwcm9ibCZlZ3JhdmU7bWUgbG9ycyBkZSBsJiMwMzk7YWpvdXQgZHUgZ3JvdXBlJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRwYXJhbXMnXSA9ICdQYXJhbSZlZ3JhdmU7dHJlcyBub24gdmFsaWRlcyc7CiRsYW5nWydhcHBseWZpbHRlciddID0gJ0FwcGxpcXVlcic7CiRsYW5nWydmaWx0ZXInXSA9ICdGaWx0cmUnOwokbGFuZ1sndXNlcmZpbHRlciddID0gJ1VzZXIgUmVndWxhciBFeHByZXNzaW9uJzsKJGxhbmdbJ2Rlc2NyaXB0aW9uJ10gPSAnRGVzY3JpcHRpb24nOwokbGFuZ1snZ3JvdXBuYW1lJ10gPSAnTm9tIGR1IGdyb3VwZSc7CiRsYW5nWydhY2Nlc3NkZW5pZWQnXSA9ICdBY2MmZWdyYXZlO3MgcmVmdXMmZWFjdXRlOyc7CiRsYW5nWydlcnJvciddID0gJ0VycmV1cic7CiRsYW5nWydhZGRncm91cCddID0gJ0Fqb3V0ZXIgdW4gZ3JvdXBlJzsKJGxhbmdbJ2FkZHVzZXInXSA9ICdBam91dGVyIHVuIHV0aWxpc2F0ZXVyJzsKJGxhbmdbJ3VzZXJzZm91bmQnXSA9ICdVdGlsaXNhdGV1cnMgdHJvdXYmZWFjdXRlO3MnOwokbGFuZ1snZ3JvdXAnXSA9ICdHcm91cGUnOwokbGFuZ1snc2VsZWN0Z3JvdXAnXSA9ICdTJmVhY3V0ZTtsZWN0aW9ubmVyIGxlIGdyb3VwZSc7CiRsYW5nWydyZWdpc3RyYXRpb25fdGVtcGxhdGUnXSA9ICdHYWJhcml0IGQmIzAzOTtlbnJlZ2lzdHJlbWVudCc7CiRsYW5nWydsb2dvdXRfdGVtcGxhdGUnXSA9ICdHYWJhcml0IGRlIGQmZWFjdXRlO2Nvbm5leGlvbic7CiRsYW5nWydsb2dpbl90ZW1wbGF0ZSddID0gJ0dhYmFyaXQgZGUgY29ubmV4aW9uJzsKJGxhbmdbJ3ByZWZlcmVuY2VzJ10gPSAnUHImZWFjdXRlO2YmZWFjdXRlO3JlbmNlcyc7CiRsYW5nWyd1c2VycyddID0gJ1V0aWxpc2F0ZXVycyc7CiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdHZXN0aW9uIGRlcyB1dGlsaXNhdGV1cnMgZHUgc2l0ZSc7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ0cmZWdyYXZlO3JlIGxlcyB1dGlsaXNhdGV1cnMgZHUgc2l0ZSc7CiRsYW5nWydkZWZhdWx0ZnJvbnRwYWdlJ10gPSAnUGFnZSBwYXIgZCZlYWN1dGU7ZmF1dCc7CiRsYW5nWydsYXN0YWNjZXNzZWRwYWdlJ10gPSAnRGVybmkmZWdyYXZlO3JlIHBhZ2UgYWNjJmVhY3V0ZTtkJmVhY3V0ZTtlJzsKJGxhbmdbJ290aGVycGFnZSddID0gJ0F1dHJlIHBhZ2UmbmJzcDs6JzsKJGxhbmdbJ2NoYW5nZWxvZyddID0gJzx1bD4NCjxsaT4wLjAuMSAtIE9jdG9iZXIgMjAwNSAtIFZlcnNpb24gaW5pdGlhbGUsIG5vbiBmb25jdGlvbm5lbGxlPC9saT4NCjxsaT4wLjEuMCAtIE9jdG9iZXIgMjAwNSAtIFZlcnNpb24gaW5pdGlhbGU8L2xpPg0KPGxpPjAuMS4xIC0gT2N0b2JyZSAyMDA1IC0gQ29ycmVjdGlvbiBkZXMgcHJvYmwmZWdyYXZlO21lcyBhdmVjIGxlcyBwcm9wcmkmZWFjdXRlO3QmZWFjdXRlO3M8L2xpPg0KPGxpPjAuMS4yIC0gT2N0b2JyZSAyMDA1IC0gQWpvdXQgZGUgbGEgZm9uY3Rpb24gcG91ciBsZXMgbW90cyBkZSBwYXNzZSBvdWJsaSZlYWN1dGU7czwvbGk+DQo8bGk+PHA+MC4xLjMgLSBOb3ZlbWJyZSAyMDA1PC9wPg0KICAgIDxwPkFqb3V0IGRlIGxhIHBvc3NpYmlsaXQmZWFjdXRlOyBkZSBzcCZlYWN1dGU7Y2lmaWVyIGxlcyBwYWdlcyBkZSByZWRpcmVjdGlvbiBhcHImZWdyYXZlO3MgY29ubmV4aW9uIGV0IGQmZWFjdXRlO2Nvbm5leGlvbiwgb3VibGkgZGUgbW90IGRlIHBhc3NlIGV0IGNoYW5nZW1lbnQgZGUgcGFyYW0mZWdyYXZlO3RyZXMsIGFqb3V0IGRlcyBwYXJhbSZlZ3JhdmU7dHJlcyByZXR1cm50byBldCBkZSBmb3JtdWxhaXJlcyBkYW5zIGxlIHBhbm5lYXUgdXRpbGlzYXRldXIsIG5ldHRveWFnZSBkZSBjb2RlLiAgQ2V0dGUgdmVyc2lvbiByZXF1aWVydCBDTVNNUyB2MC4xMSBldCBzdWl2YW50ZXMuPC9wPjwvbGk+DQo8bGk+MC4xLjQgLSBOb3ZlbWJyZSAyMDA1IC0gUGV0aXQgY2hhbmdlbWVudCBlbiByYXBwb3J0IGF2ZWMgdW5lIGZvbmN0aW9uIG91YmxpJmVhY3V0ZTtlIHF1aSBuJiMwMzk7ZXN0IHBsdXMgdXRpbGlzJmVhY3V0ZTtlPC9saT4NCjxsaT48cD4wLjEuNSAtIE5vdmVtYnJlIDIwMDU8L3A+DQogICAgPHA+VW4gYXV0cmUgcGV0aXQgY2hhbmdlbWVudCwgYWpvdXQgZGUgdGV4dGUgYXUgbWVzc2FnZSBhZmZpY2gmZWFjdXRlOyBhcHImZWdyYXZlO3MgbCYjMDM5O2luc3RhbGxhdGlvbi48L3A+PC9saT4NCjxsaT48cD4wLjEuNiAtIEphbnZpZXIgMjAwNjxwPg0KICAgIDxwPkNoYW5nZW1lbnQgZGFucyBsZXMgcHJvY2Vzc3VzIGRlIHBlcm1pc3Npb25zLCBldCBwZXRpdGVzIGNvcnJlY3Rpb25zIGRhbnMgbGVzIHByJmVhY3V0ZTtmJmVhY3V0ZTtyZW5jZXMuICAmRWFjdXRlO2dhbGVtZW50IHF1ZWxxdWVzIGNvcnJlY3Rpb24gZW4gcmFwcG9ydCBhdmVjIHBocDUsIGlsIGRvaXQgY2VwZW5kYW50IHJlc3RlciBxdWVscXVlcyBlcnJldXJzLjwvcD48L2xpPg0KPGxpPjxwPjAuMS43IC0gSmFudmllciAyMDA2PHA+DQogICAgPHA+TWlsbGUgbWVyY2lzICZhZ3JhdmU7IDxiPmthdG9uPC9iPiBwb3VyIGwmIzAzOTtham91dCBkZXMgdHlwZXMgZGUgcHJvcHJpJmVhY3V0ZTt0JmVhY3V0ZTtzIHRleHRhcmVhIGV0IG1lbnUgZCZlYWN1dGU7cm91bGFudC48L3A+DQogICAgPHA+Q29ycmVjdGlvbnMgYXBwb3J0JmVhY3V0ZTtlcyBwb3VyIHImZWFjdXRlO3NvdWRyZSBsZXMgcHJvYmwmZWdyYXZlO21lcyBkJiMwMzk7ZXNwYWNlcyBkYW5zIGxlcyBub21zIGRlIHByb3ByaSZlYWN1dGU7dCZlYWN1dGU7cyAobm91cyBuZSBsYWlzc2Vyb25zIHBsdXMgamFtYWlzIGNlbGEgc2UgcHJvZHVpcmUpLjwvcD4NCjwvbGk+DQo8bGk+PHA+MS4wLjAgLSBGJmVhY3V0ZTt2cmllciAyMDA2PHA+DQogICAgPHA+QWpvdXQgZGUgZmlsdHJlIGV0IGxpbWl0YXRpb24gZGVzIGxpZ25lcyBhdSBwYW5uZWF1IGQmIzAzOTthZG1pbmlzdHJhdGlvbi4gR3JvcyBiJmVhY3V0ZTtuJmVhY3V0ZTtmaWNlcyBwb3VyIGxlcyBzaXRlcyBhdmVjIGJlYXVjb3VwIGRlIHRyYWZpYyBldCBkJiMwMzk7dXRpbGlzYXRldXJzLjwvcD4NCiAgICA8cD5Bam91dCBkdSB0cmkgZGFucyBsZSBwYW5uZWF1IGQmIzAzOTthZG1pbmlzdHJhdGlvbjwvcD4NCiAgICA8cD5Bam91dCBkZSBsYSBwb3NzaWJpbGl0JmVhY3V0ZTsgZGUgZCZlYWN1dGU7ZmluaXIgdW5lIGxvbmd1ZXVyIG1heGltYWxlIGF1IGNoYW1wcyB0ZXh0ZSBldCBlbWFpbDwvcD4NCiAgICA8cD5Db3JyZWN0aW9uIGQmIzAzOTt1biBwZXRpdCBwcm9ibCZlZ3JhdmU7bWUgYXZlYyBsZSBncm91cGUgcGFyIGQmZWFjdXRlO2ZhdXQgcXVpIG4mIzAzOTsmZWFjdXRlO3RhaXQgcGFzIGNob2lzaSBsb3JzIGRlIGwmIzAzOTtham91dCBkJiMwMzk7dW4gdXRpbGlzYXRldXI8L3A+DQogICAgPHA+U2F1dmVnYXJkZSBkZXMgcGFyYW0mZWdyYXZlO3RyZXMgZGUgZmlsdHJhZ2UgZGFucyBsZXMgcHImZWFjdXRlO2YmZWFjdXRlO3JlbmNlcywgJmVhY3V0ZTtnYWxlbWVudCBsJiMwMzk7b25nbGV0IGFjdGlmLjwvcD4NCiAgICA8cD5FZmZhY2UgbGVzIHByb3ByaSZlYWN1dGU7dCZlYWN1dGU7cyBkZXMgdXRpbGlzYXRldXJzIHF1YW5kIHVuZSBwcm9wcmkmZWFjdXRlO3QmZWFjdXRlOyBlc3Qgc3VwcHJpbSZlYWN1dGU7ZSA8ZW0+Tm90ZTwvZW0+LCBwYXMgbG9yc3F1JiMwMzk7ZWxsZSBlc3QgZCZlYWN1dGU7c2FjdGl2JmVhY3V0ZTtlIGRhbnMgbGUgcGFubmVhdSBkJiMwMzk7JmVhY3V0ZTtkaXRpb24gZCYjMDM5O3VuIGdyb3VwZTwvcD4NCiAgICA8cD5Bam91dCBkJiMwMzk7dW4gbWVzc2FnZSBkZSBjb25maXJtYXRpb24gbG9ycyBkZSBsJiMwMzk7JmVhY3V0ZTtkaXRpb24gZCYjMDM5O3VuIGdyb3VwZS48L3A+DQogICAgPHA+QWpvdXQgZGUgZGV1eCBhdXRyZXMgbWVzc2FnZXMgZGUgY29uZmlybWF0aW9uLjwvcD4NCiAgICA8cD5Bam91dCBkZSBsJiMwMzk7b3B0aW9uIGQmIzAzOTtleHBvcnQgc291cyBmb3JtYXQgQ1NWPC9wPg0KICAgIDxwPkEgZmFpcmUgLSBBam91dCBkZXMgcHImZWFjdXRlO2YmZWFjdXRlO3JlbmNlcyBwb3VyIGxlcyBsb25ndWV1cnMgbWF4aW1hbGVzIGRlcyBjaGFtcHMgJnF1b3Q7bm9tIGQmIzAzOTt1dGlsaXNhdGV1ciZxdW90OyBldCAmcXVvdDttb3QgZGUgcGFzc2UmcXVvdDs8L3A+DQo8L2xpPg0KPGxpPjxwPjEuMC4xIC0gTWFycyAyMDA2PHA+DQogICAgPHA+QWpvdXQmZWFjdXRlOyBsYSBwb3NzaWJpbGl0JmVhY3V0ZTsgZGUgdiZlYWN1dGU7cmlmaWVyIGxlcyBhZHJlc3NlcyBlbWFpbCAmYWdyYXZlOyBkb3VibGU8L3A+DQogICAgPHA+Q29ycmVjdGlvbiBkdSBwcm9ibCZlZ3JhdmU7bWUgbyZ1Z3JhdmU7IGxhIGRhdGUgZCYjMDM5O2V4cGlyYXRpb24gJmVhY3V0ZTt0YWl0IG1vZGlmaSZlYWN1dGU7ZSBxdWFuZCB1biBhZG1pbmlzdHJhdGV1ciBjaGFuZ2VhaXQgbGVzIHBhcmFtJmVncmF2ZTt0cmUgZCYjMDM5O3VuIHV0aWxpc2F0ZXVyPC9wPg0KICAgIDxwPkFqb3V0IGQmIzAzOTt1biBtZXNzYWdlIGRlIGNvbmZpcm1hdGlvbiBhdSBib3V0b24gc2F1dmVyIGxlcyBwciZlYWN1dGU7ZiZlYWN1dGU7cmVuY2VzPC9wPg0KICAgIDxwPkNvcnJlY3Rpb24gZCYjMDM5O3VuIGJ1ZyBtaW5ldXIgZGFucyBsZSBjb21wdGUgZGVzIHV0aWxpc2F0ZXVycyBkYW5zIHVuIGdyb3VwZTwvcD4NCiAgICA8cD5Db3JyZWN0aW9uIGRlIGxhIHRhaWxsZSBkZXMgY2hhbXBzIG5vbSBkJiMwMzk7dXRpbGlzYXRldXIgZXQgbW90IGRlIHBhc3NlLCBhaW5zaSBxdWUgbGEgbG9uZ3VldXIgbWF4aW1hbGUgZHUgY2hhbXA8L3A+DQogICAgPHA+QWpvdXQgZCYjMDM5O3VuIGZpbHRyZSBhdmFuYyZlYWN1dGU7IHN1ciBsZXMgcHJvcHJpJmVhY3V0ZTt0JmVhY3V0ZTtzPC9wPg0KICAgIDxwPkNoYW5nZW1lbnRzIHN1ciBsZXMgbGFiZWxzIHBvdXIgbCYjMDM5O2Fqb3V0IG91IGwmIzAzOTsmZWFjdXRlO2RpdGlvbiBkJiMwMzk7dXRpbGlzYXRldXI8L3A+DQogICAgPHA+Q29ycmVjdGlvbnMgZGVzIHByb2JsJmVncmF2ZTttZXMgYXZlYyBsZXMgZm9ybXVsYWlyZXMgaW5saW5lIG91IG5vbi1pbmxpbmUsIGxlIG1vdCBkZSBwYXNzZSBuJiMwMzk7ZXN0IGphbWFpcyBlbnZveSZlYWN1dGU7IHN1ciBsYSBsaWduZTwvcD4NCiAgICA8cD5Nb2RpZmkmZWFjdXRlOyBwb3VyIHF1ZSBDTVMgMC4xMi1iZXRhMiBzb2l0IHVuIG1pbmltdW0gcmVxdWlzIChwb3VyIGRlcyBxdWVzdGlvbnMgZGUgcyZlYWN1dGU7Y3VyaXQmZWFjdXRlOyk8L3A+DQo8L2xpPg0KPC91bD4NCjwvdWw+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+IC0gQWZmaWNoZSBsZSBmb3JtdWxhaXJlIGQmIzAzOTtvdWJsaSBkZSBtb3QgZGUgcGFzc2U8L2xpPg0KPC91bD4NCjwvcD4NCjxsaT48ZW0+KG9wdGlvbmVsKTwvZW0+IHJldHVybnRvPSZxdW90O3BhZ2UmcXVvdDs8L2xpPg0KPHA+VXRpbGlzJmVhY3V0ZTsgYXZlYyBsZXMgZm9ybXVsYWlyZXMgZGUgY29ubmV4aW9uLCBkZSBkJmVhY3V0ZTtjb25uZXhpb24sIGV0IGRlIGNoYW5nZW1lbnQgZGUgcGFyYW0mZWdyYXZlO3RyZXMsIGNlIHBhcmFtJmVncmF2ZTt0cmUgY29udGllbnQgbCYjMDM5O2lkIG91IGwmIzAzOTthbGlhcyBkZSBsYSBwYWdlICZhZ3JhdmU7IGxhcXVlbGxlIHJlZGlyaWdlciBsJiMwMzk7dXRpbGlzYXRldXIgYXByJmVncmF2ZTtzIGwmIzAzOTtlbnZvaSBkdSBmb3JtdWxhaXJlLCBzaSBjZWx1aS1jaSBhICZlYWN1dGU7dCZlYWN1dGU7IHRyYWl0JmVhY3V0ZTsgYXZlYyBzdWNjJmVncmF2ZTtzPC9wPg0KPC91bD4NCjxwPkNvbmZvcm0mZWFjdXRlO21lbnQgJmFncmF2ZTsgbGEgbGljZW5jZSBHUEwsIGNlIG1vZHVsZSBlc3QgZGlzdHJpYnUmZWFjdXRlOyB0ZWwgcXVlbC4gVmV1aWxsZXogdm91cyByJmVhY3V0ZTtmJmVhY3V0ZTtyZXIgZGlyZWN0ZW1lbnQgJmFncmF2ZTsgbGEgbGljZW5jZSBwb3VyIHRvdXQgYXZpcyBkZSBub24gcmVzcG9uc2FiaWxpdCZlYWN1dGU7LjwvcD4NCjxoMz5SZXF1aXM8L2gzPg0KPHA+UG91ciBsJiMwMzk7aW1wbCZlYWN1dGU7bWVudGF0aW9uIGRlIGxhIHImZWFjdXRlO2luaXRpYWxpc2F0aW9uIGRlIG1vdCBkZSBwYXNzZSBvdWJsaSZlYWN1dGU7LCBjZSBtb2R1bGUgcmVxdWllcnQgcXVlIGxlIG1vZHVsZSBDTVNNYWlsZXIgc29pdCBwciZlYWN1dGU7YWxhYmxlbWVudCBpbnN0YWxsJmVhY3V0ZTsuPC9wPg0KPGgzPkNvcHlyaWdodCBldCBMaWNlbmNlPC9oMz4NCjxwPkNvcHlyaWdodCAmY29weTsgMjAwNSwgUm9iZXJ0IENhbXBiZWwgPGEgaHJlZj0mcXVvdDttYWlsdG86Y2FsZ3V5MTAwMEBob3RtYWlsLmNvbSZxdW90Oz48Y2FsZ3V5MTAwMEBob3RtYWlsLmNvbT48L2E+LiBUb3VzIGRyb2l0cyByJmVhY3V0ZTtzZXJ2JmVhY3V0ZTtzLjwvcD4NCjxwPkNlIG1vZHVsZSBlc3QgZGlzdHJpYnUmZWFjdXRlOyBzb3VzIGxhIGxpY2VuY2UgPGEgaHJlZj0mcXVvdDtodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwmcXVvdDsgdGFyZ2V0PSZxdW90O19ibGFuayZxdW90Oz5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBWb3VzIGRldmV6IGFnciZlYWN1dGU7ZXIgYXV4IHRlcm1lcyBkZSBjZXR0ZSBsaWNlbmNlIHBvdXIgcG91dm9pciB1dGlsaXNlciBjZSBtb2R1bGUuPC9wPic7Cj8+]]></data>
  </file>
  <file>
    <filename>/lang/ext/it_IT.php</filename>
    <isdir>0</isdir>
    <data><![CDATA[PD9waHAKJGxhbmdbJ3VzZXJfYWRkZWQnXSA9ICdVdGVudGUgYWdnaXVudG8gJXMgPSAlcyc7CiRsYW5nWyd1c2VyX2RlbGV0ZWQnXSA9ICdVdGVudGUgY2FuY2VsbGF0byB1aWQ9JXMnOwokbGFuZ1sncHJvcGVydHlmaWx0ZXInXSA9ICdQcm9waWV0JmFncmF2ZTsnOwokbGFuZ1sndmFsdWVyZWdleCddID0gJ1ZhbG9yZSAocmVndWxhciBleHByZXNzaW9uKSc7CiRsYW5nWyd3YXJuaW5nX2VmZmVjdHNmaWVsZGxlbmd0aCddID0gJ1dhcm5pbmc6IFRoZXNlIGZpZWxkcyBhZmZlY3QgdGhlIHNpemUgb2YgaW5wdXQgZmllbGRzIGZvciBmb3Jtcy4gIERlY3JlYXNpbmcgdGhpcyBudW1iZXIgb24gYW4gZXhpc3Rpbmcgc2l0ZSBtYXkgbm90IGJlIGFkdmlzYWJsZSc7CiRsYW5nWydjb25maXJtX3N1Ym1pdHByZWZzJ10gPSAnQ2FtYmlhdGUgbGUgcHJlZmVyZW56ZSBkaSBhbW1pbmlzdHJhemlvbmU/JzsKJGxhbmdbJ2Vycm9yX2VtYWlsYWxyZWFkeXVzZWQnXSA9ICdJbmRpcml6em8gZW1haWwgZ2kmYWdyYXZlOyB1c2F0byc7CiRsYW5nWydwcm9tcHRfYWxsb3dfZHVwbGljYXRlX2VtYWlscyddID0gJ1Blcm1ldHRpIGVtYWlsIGR1cGxpY2F0ZSc7CiRsYW5nWydpbmZvX2FsbG93X2R1cGxpY2F0ZV9lbWFpbHMnXSA9ICcocGVybWV0dGkgcGkmdWdyYXZlOyB1dGVudGkgY29uIGxvIHN0ZXNzbyBpbmRpcml6em8gZW1haWwpJzsKJGxhbmdbJ2Vycm9yX21pc3Npbmd1c2VybmFtZSddID0gJ05vbiBhdmV0ZSBpbnNlcml0byB1biB1c2VybmFtZSc7CiRsYW5nWydlcnJvcl9taXNzaW5ncGFzc3dvcmQnXSA9ICdOb24gYXZldGUgaW5zZXJpdG8gdW5hIHBhc3N3b3JkJzsKJGxhbmdbJ2Zyb250ZW5kdXNlcl9sb2dvdXQnXSA9ICdGcm9udGVuZCBVc2VyIExvZ291dCc7CiRsYW5nWydmcm9udGVuZHVzZXJfbG9nZ2VkaW4nXSA9ICdGcm9udGVuZCBVc2VyIExvZ2luJzsKJGxhbmdbJ2VkaXRwcm9wX2luZm9tc2cnXSA9ICc8Zm9udCBjb2xvcj0mcXVvdDtyZWQmcXVvdDs+PGI+VVNBUkUgQ09OIENBVVRFTEE8L2I+IHF1YW5kbyBtb2RpZmljYXRlIHByb3ByaWV0JmFncmF2ZTsgZXNpc3RlbnRpIGNoZSBzb25vIGFzc2VnbmF0ZSBhIGdydXBwaSwgcG90ZW56aWFsbWVudGUgcG90ZXRlIGNhdXNhcmUgZGFubmVnZ2lhbWVudGkgZSBmZXJtYXJlIHVuIHNpdGUgZXNpc3RlbnRlPGk+IChzcGVjaWFsbWVudGUgc2UgcmlkdWNldGUgbGEgbHVuZ2hlenphIGRlaSBjYW1waSwgZXRjKTwvaT48L2ZvbnQ+JzsKJGxhbmdbJ2luZm9fc210cHZhbGlkYXRlJ10gPSAnUXVlc3RhIGZ1bnppb25lIG5vbiBsYXZvcmEgc3Ugd2luZG93cyc7CiRsYW5nWydtc2dfZG9udGNyZWF0ZXVzZXJuYW1lJ10gPSAnTm9uIGNyZWF0ZSB1bmEgcHJvcHJpZXQmYWdyYXZlOyBwZXIgdXNlcm5hbWUgbyBhbHRyZSBjb3NlIGNvbWUgcXVlc3RhIHBvaWNoJmVncmF2ZTsgJmVncmF2ZTsgZ2kmYWdyYXZlOyBpbnNlcml0YSBuZWwgbW9kdWxvIEZyb250RW5kVXNlcnMnOwokbGFuZ1sncHJvbXB0X2V4cG9ydGNzdiddID0gJ0VzcG9ydGEgZ2xpIHV0ZW50aSBpbiBDU1YnOwokbGFuZ1snZXhwb3J0Y3N2J10gPSAnRXNwb3J0YSc7CiRsYW5nWydhZG1pbiddID0gJ0FtbWluaXN0YXppb25lJzsKJGxhbmdbJ2VkaXRwcm9wJ10gPSAnTW9kaWZpY2EgcHJvcHJpZXQmYWdyYXZlOyc7CiRsYW5nWydtYXhsZW5ndGgnXSA9ICdNYXNzaW1hIGx1bmdoZXp6YSc7CiRsYW5nWydjcmVhdGVkJ10gPSAnQ3JlYXRvJzsKJGxhbmdbJ3NvcnRieSddID0gJ09yZGluYXRvIHBlcic7CiRsYW5nWydzb3J0J10gPSAnT3JkaW5hbWVudG8nOwokbGFuZ1sndXNlcnNpbmdyb3VwJ10gPSAnVXRlbnRpIG5lbCBncnVwcG8nOwokbGFuZ1sndXNlcmxpbWl0J10gPSAnTGltaXRhIHJpc3VsdGF0aSBhJzsKJGxhbmdbJ2Vycm9yX25vZW1haWxmaWVsZCddID0gJ05vbiBwb3NzbyB0cm92YXJlIHVuIGNhbXBvIGVtYWlsIHBlciBxdWVzdG8gdXRlbnRlLiBEb3ZyZXN0ZSBjb250YXR0YXJlIGwmIzAzOTthbW1pbmlzdHJhdG9yZSBkZWwgc2lzdGVtYSc7CiRsYW5nWydwcm9tcHRfZm9yZ290cHdfcGFnZSddID0gJ0lEL0FsaWFzIGRlbGxhIHBhZ2luYSBwZXIgaWwgbW9kdWxvIGRpIFBhc3N3b3JkIGRpbWVudGljYXRhJzsKJGxhbmdbJ3Byb21wdF9jaGFuZ2VzZXR0aW5nc19wYWdlJ10gPSAnSUQvQWxpYXMgZGVsbGEgcGFnaW5hIHBlciBpbCBtb2R1bG8gZGkgTW9kaWZpY2EgY29uZmlndXJhemlvbmknOwokbGFuZ1sncHJvbXB0X2xvZ2luX3BhZ2UnXSA9ICdQYWdlSUQvQWxpYXMgdG8ganVtcCB0byBhZnRlciBsb2dpbic7CiRsYW5nWydwcm9tcHRfbG9nb3V0X3BhZ2UnXSA9ICdQYWdlSUQvQWxpYXMgdG8ganVtcCB0byBhZnRlciBsb2dvdXQnOwokbGFuZ1snc29ydG9yZGVyJ10gPSAnT3JkaW5lJzsKJGxhbmdbJ3Byb21wdF9udW1yZXNldHJlY29yZCddID0gJ1VuIG51bWVybyBkaSB1dGVudGkgc29ubyBuZWwgbWV6em8gZGkgcmlzaXN0ZW1hemlvbmUgZGVsbGEgcGFzc3dvcmQgcGVyc2EuIEluIHF1ZXN0byBtb21lbnRvIGlsIGNvbnRhdG9yZSAmZWdyYXZlOyBhOic7CiRsYW5nWydyZW1vdmUxd2VlayddID0gJ1JpbXVvdmkgdHV0dGUgbGUgZW50aXQmYWdyYXZlOyBwaSZ1Z3JhdmU7IHZlY2NoaWUgZGkgdW5hIHNldHRpbWFuYSc7CiRsYW5nWydyZW1vdmUxbW9udGgnXSA9ICdSaW11b3ZpIHR1dHRlIGxlIGVudGl0JmFncmF2ZTsgcGkmdWdyYXZlOyB2ZWNjaGllIGRpIHVuIG1lc2UnOwokbGFuZ1sncmVtb3ZlYWxsJ10gPSAnUmltdW92aSB0dXR0ZSBsZSBlbnRpdCZhZ3JhdmU7JzsKJGxhbmdbJ2FyZXlvdXN1cmUnXSA9ICdTZWkgc2ljdXJvPyc7CiRsYW5nWydlcnJvcl9pbnZhbGlkY29kZSddID0gJ1VuIGNvZGljZSBpbnZhbGlkbyAmZWdyYXZlOyBzdGF0byBhZ2dpdW50bywgcHJvdmEgZGkgbnVvdm8nOwokbGFuZ1snZXJyb3JfdGVtcGNvZGVub3Rmb3VuZCddID0gJ1VuIGNvZGljZSB0ZW1wb3JhbmVvIHBlciBpbCB2b3N0cm8gdXRlbnRlIG5vbiAmZWdyYXZlOyBzdGF0byB0cm92YXRvIHN1bCBkYXRhYmFzZSc7CiRsYW5nWydmb3Jnb3RwYXNzd29yZF92ZXJpZnl0ZW1wbGF0ZSddID0gJ01vZGVsbG8gdXNhdG8gcGVyIHZpc3VhbGl6emFyZSBpbCBtb2R1bG8gZGkgdmVyaWZpY2EnOwokbGFuZ1snZm9yZ290cGFzc3dvcmRfZW1haWx0ZW1wbGF0ZSddID0gJ01vZGVsbG8gdXNhdG8gcGVyIGxhIHBhc3NvcmQgZGltZW50aWNhdGEnOwokbGFuZ1snZXJyb3JfcmVzZXRhbHJlYWR5c2VudCddID0gJ1ZvaSBzdGVzc2kgbyBxdWFsY3VuIGFsdHJvIGhhIHJpY2hpZXN0byBkaSBhenplcmFyZSBsYSBwYXNzd29yZCBwZXIgcXVlc3RvIGFjY291bnQuIENvbnRyb2xsYXRlIGxhIHZvc3RyYSBlbWFpbCwgYXZyZXRlIHVsdGVyaW9yaSBpc3RydXppb25pIHN1IGNvbWUgcmlzaXN0ZW1hcmUgbGEgdm9zdHJhIHBhc3N3b3JkJzsKJGxhbmdbJ2Vycm9yX2RiZXJyb3InXSA9ICdFcnJvcmUgZGF0YWJhc2UnOwokbGFuZ1snbWVzc2FnZV9mb3Jnb3Rwd2VtYWlsJ10gPSAnSGFpIHJpY2V2dXRvIHF1ZXN0byBtZXNzYWdnaW8gcGVyY2gmZWdyYXZlOyBxdWFsY3VubyBoYSBzZWduYWxhdG8gY2hlIGhhaSBwZXJzbyBsYSB0dWEgcGFzc3dvcmQuIFNlIHF1ZXN0byAmZWdyYXZlOyB2ZXJvLCBsZWdnaSBsZSBpc3RydXppb25pIHNvdHRvc3RhbnRpLiBTZSBpbnZlY2Ugbm9uICZlZ3JhdmU7IHF1ZXN0byBpbCBjYXNvIGFsbG9yYSBzZWkgcHJlZ2F0byBkaSBjYW5jZWxsYXJlIHF1ZXN0byBtZXNzYWdnaW8gZSBjaSBzY3VzaWFtbyBkZWxsJiMwMzk7YWNjYWR1dG8uJzsKJGxhbmdbJ3Byb21wdF9jb2RlJ10gPSAnQ29kaWNlJzsKJGxhbmdbJ21lc3NhZ2VfY29kZSddID0gJ0lsIHNlZ3VlbnRlIGNvZGljZSAmZWdyYXZlOyBzdGF0byBnZW5lcmF0byBpbiBtYW5pZXJhIHJhbmRvbSBwZXIgdmVyaWZpY2FyZSBsbyB1c2VyIGFjY291bnQuIFF1YW5kbyBmYXRlIGNsaWNrIHN1bCBsaW5rIHNvdHRvc3RhbnRlIHZpIHNhciZhZ3JhdmU7IHByZXNlbnRhdG8gdW4gY2FtcG8gcGVyIGluc2VyaXJlIHF1ZXN0byBjb2RpY2UuIE5vcm1hbG1lbnRlIGlsIGNhbXBvICZlZ3JhdmU7IHByZS1jb21waWxhdG8sIG1hIHNlIGNvcyZpZ3JhdmU7IG5vbiBmb3NzZSBpbCBjb2RpY2UgJmVncmF2ZTs6JzsKJGxhbmdbJ3Byb21wdF9saW5rJ10gPSAnU2VndWVuZG8gaWwgbGluayBzZWd1ZW50ZSBwb3RyZXRlIGluc2VyaXJlIGlsIGNvZGljZSBzb3R0b3N0YW50ZSBlIGF6emVyYXJlIGxhIHZvc3RyYSBwYXNzd29yZDonOwokbGFuZ1snbG9zdHBhc3N3b3JkX2VtYWlsc3ViamVjdCddID0gJ1Bhc3N3b3JkIHBlcnNhJzsKJGxhbmdbJ2Vycm9yX25vbWFpbGVybW9kdWxlJ10gPSAnTm9uIHRyb3ZvIGlsIG1vZHVsbyBDTVNNYWlsZXInOwokbGFuZ1snaW5mb19mb3Jnb3Rwd21lc3NhZ2VzZW50J10gPSAnVW5hIGVtYWlsICZlZ3JhdmU7IHN0YXRhIHNwZWRpdGEgYSAlcyBjb24gbGUgaXN0cnV6aW9uaSBkaSBjb21lIGF6emVyYXJlIGxhIHZvc3RyYSBwYXNzd29yZC4gR3JhemllJzsKJGxhbmdbJ2xvc3Rwd19tZXNzYWdlJ10gPSAnUGFzc3dvcmQgZGltZW50aWNhdGEgbyBwZXJzYS4gRGlnaXRhdGUgcXVpIGlsIHZvc3RybyB1c2VybmFtZSBlIHNlIGQgdHJvdmF0byBzcGVkaXJlbW8gdW5hIGVtYWlsIGNvbiBsZSBpc3RydXppb25pIHN1IGNvbWUgYXp6ZXJhcmxhJzsKJGxhbmdbJ2ZvcmdvdHBhc3N3b3JkX3RlbXBsYXRlJ10gPSAnTW9kZWxsbyBwZXIgUGFzc3dvcmQgZGltZW50aWNhdGEnOwokbGFuZ1snZXJyb3JfcHJvcG5vdGZvdW5kJ10gPSAnUHJvcHJpZXQmYWdyYXZlOyAlcyBub24gdHJvdmF0YSc7CiRsYW5nWydwcm9wc2ZvdW5kJ10gPSAnUHJvcHJpZXQmYWdyYXZlOyB0cm92YXRhJzsKJGxhbmdbJ2FkZHByb3AnXSA9ICdBZ2dpdW5nZSBQcm9wcmlldCZhZ3JhdmU7JzsKJGxhbmdbJ2Vycm9yX3JlcXVpcmVkZmllbGQnXSA9ICdVbiBjYW1wbyByaWNoaWVzdG8gKCVzKSBlcmEgdnVvdG8nOwokbGFuZ1snaW5mb19lbXB0eXBhc3N3b3JkZmllbGQnXSA9ICdJbnNlcmlyZSBxdWkgdW5hIG51b3ZhIHBhc3N3b3JkIHBlciBtb2RpZmljYXJsYSc7CiRsYW5nWydlcnJvcl9ub3Rsb2dnZWRpbiddID0gJ1lvdSBkbyBub3QgYXBwZWFyIHRvIGJlIGxvZ2dlZCBpbic7CiRsYW5nWyd1c2VyX3NldHRpbmdzJ10gPSAnQ29uZmlndXJhemlvbmknOwokbGFuZ1sndXNlcl9yZWdpc3RyYXRpb24nXSA9ICdSZWdpc3RyYXppb25lJzsKJGxhbmdbJ2Vycm9yX2FjY291bnRleHBpcmVkJ10gPSAnUXVlc3RvIGFjY291bnQgJmVncmF2ZTsgc3BpcmF0byc7CiRsYW5nWydlcnJvcl9pbXByb3BlcmVtYWlsZm9ybWF0J10gPSAnRm9ybWF0dGF6aW9uZSBub24gdmFsaWRhIGRlbGwmIzAzOTtpbmRpcml6em8gZGkgZW1haWwnOwokbGFuZ1snZXJyb3JfaW52YWxpZGV4cGlyeWRhdGUnXSA9ICdEYXRhZGkgc2NhZGVuemEgbm9uIHZhbGlkYSc7CiRsYW5nWydlcnJvcl9wcm9ibGVtc2V0dGluZ3Byb3BlcnR5J10gPSAnRXJyb3JlIG5lbGxhIHByb3ByaWV0JmFncmF2ZTsgJXMgcGVyIGwmIzAzOTt1dGVudGUgJHMnOwokbGFuZ1snZXJyb3JfaW52YWxpZGdyb3VwaWQnXSA9ICdJbnZhbGlkIGdyb3VwIGlkICVzJzsKJGxhbmdbJ2hpZGRlbmZpZWxkbWFya2VyJ10gPSAnTWFyY2F0b3JlIGRlbCBjYW1wbyBuYXNjb3N0byc7CiRsYW5nWydoaWRkZW5maWVsZGNvbG9yJ10gPSAnQ29sb3JlIGRlbCBjYW1wbyBuYXNjb3N0byc7CiRsYW5nWydoaWRkZW4nXSA9ICdOYXNjb3N0byc7CiRsYW5nWydlcnJvcl9kdXBsaWNhdGVuYW1lJ10gPSAnVW5hIHByb3ByaWV0JmFncmF2ZTsgY29uIHF1ZWwgbm9tZSAmZWdyYXZlOyBnaSZhZ3JhdmU7IGRlZmluaXRhJzsKJGxhbmdbJ2Vycm9yX25vcHJvcGVydGllcyddID0gJ05lc3N1bmEgcHJvcHJpZXQmYWdyYXZlOyBkZWZpbml0YSc7CiRsYW5nWydlcnJvcl9ub3JlbGF0aW9ucyddID0gJ05lc3N1bmEgcHJvcHJpZXQmYWdyYXZlOyBzZWxlemlvbmF0YSBwZXIgcXVlc3RvIGdydXBwbyc7CiRsYW5nWydncm91cHNmb3VuZCddID0gJ0dydXBwaSB0cm92YXRpJzsKJGxhbmdbJ2Vycm9yX29uZWdyb3VwcmVxdWlyZWQnXSA9ICdNZW1iZXJzaGlwIGluIGF0IGxlYXN0IG9uZSBncm91cCBpcyByZXF1aXJlZCc7CiRsYW5nWydwcm9tcHRfcmVxdWlyZW9uZWdyb3VwJ10gPSAnUmVxdWlyZSBtZW1iZXJzaGlwIGluIGF0bGVhc3Qgb25lIGdyb3VwJzsKJGxhbmdbJ2JhY2snXSA9ICdJbmRpZXRybyc7CiRsYW5nWydlcnJvcl9taXNzaW5nX3JlcXVpcmVkX3BhcmFtJ10gPSAnJXMgJmVncmF2ZTsgdW4gY2FtcG8gcmljaGllc3RvJzsKJGxhbmdbJ3JlcXVpcmVkZmllbGRtYXJrZXInXSA9ICdNYXJjYSBpIGNhbXBpIHJpY2hpZXN0aSBjb24nOwokbGFuZ1sncmVxdWlyZWRmaWVsZGNvbG9yJ10gPSAnSGlsaXRlIHJlcXVpcmVkIGZpZWxkcyBpbic7CiRsYW5nWyduZXh0J10gPSAnQXZhbnRpJzsKJGxhbmdbJ2Vycm9yX2dyb3VwZXhpc3RzJ10gPSAnQSBHcm91cCB3aXRoIHRoYXQgbmFtZSBhbHJlYWR5IGV4aXN0cyc7CiRsYW5nWydyZXF1aXJlZCddID0gJ0NhbXBvIHJpY2hpZXN0byc7CiRsYW5nWydvcHRpb25hbCddID0gJ09wemlvbmFsZSc7CiRsYW5nWydvZmYnXSA9ICdPZmYnOwokbGFuZ1snbGVuZ3RoJ10gPSAnTHVuZ2hlenphJzsKJGxhbmdbJ2xlbmd0aGNvbW1lbnQnXSA9ICc8YnI+KGNoYXJzIGluIHRoZSB0ZXh0IGlucHV0KSc7CiRsYW5nWydzZWxvcHRpb25zJ10gPSAnRHJvcGRvd24gb3B0aW9ucywgc2VwYXJhdGVkIGJ5IGxpbmUgYnJlYWtzJzsKJGxhbmdbJ3llcyddID0gJ1MmaWdyYXZlOyc7CiRsYW5nWydwcm9tcHQnXSA9ICdQcm9tcHQnOwokbGFuZ1sndHlwZSddID0gJ1RpcG8nOwokbGFuZ1sndGV4dCddID0gJ1Rlc3RvJzsKJGxhbmdbJ2NoZWNrYm94J10gPSAnQ2hlY2tib3gnOwokbGFuZ1snZW1haWwnXSA9ICdJbmRpcml6em8gZW1haWwnOwokbGFuZ1sndGV4dGFyZWEnXSA9ICdUZXh0YXJlYSc7CiRsYW5nWydkcm9wZG93biddID0gJ0Ryb3Bkb3duJzsKJGxhbmdbJ21zZ19jdXJyZW50bHlsb2dnZWRpbmFzJ10gPSAnQmVudmVudXRvJzsKJGxhbmdbJ2xvZ291dCddID0gJ1NpZ24gb3V0JzsKJGxhbmdbJ3Byb21wdF9jaGFuZ2VzZXR0aW5ncyddID0gJ01vZGlmaWNhIGxlIG1pZSBjb25maWd1cmF6aW9uaSc7CiRsYW5nWydlcnJvcl9sb2dpbmZhaWxlZCddID0gJ0xvZ2luIGZhaWxlZCAtIEludmFsaWQgdXNlcm5hbWUgb3IgcGFzc3dvcmQ/JzsKJGxhbmdbJ2xvZ2luJ10gPSAnU2lnbiBpbic7CiRsYW5nWydwcm9tcHRfdXNlcm5hbWUnXSA9ICdVc2VybmFtZSc7CiRsYW5nWydwcm9tcHRfcGFzc3dvcmQnXSA9ICdQYXNzd29yZCc7CiRsYW5nWydyZWdpc3RlciddID0gJ1JlZ2lzdGVyJzsKJGxhbmdbJ2ZvcmdvdHB3J10gPSAnRGltZW50aWNhdGEgbGEgcGFzc3dvcmQ/JzsKJGxhbmdbJ2RlZmF1bHRzJ10gPSAnUHJlZGVmaW5pdG8nOwokbGFuZ1sndGVtcGxhdGUnXSA9ICdNb2RlbGxvJzsKJGxhbmdbJ2Vycm9yX3VzZXJub3Rmb3VuZCddID0gJ1VzZXIgSUQgbm9uIHRyb3ZhdG8nOwokbGFuZ1snZXJyb3JfdXNlcm5hbWV0YWtlbiddID0gJ1F1ZXN0byB1c2VybmFtZSAoJXMpICZlZ3JhdmU7IGdpJmFncmF2ZTsgaW4gdXNvJzsKJGxhbmdbJ3Byb21wdF9zbXRwdmFsaWRhdGUnXSA9ICdVc28gaWwgbWV0b2RvIFNNVFAgcGVyIHZhbGlkYXJlIGluZGlyaXp6aSBlbWFpbD8nOwokbGFuZ1sncHJvbXB0X21pbnB3bGVuJ10gPSAnTHVuZ2hlenphIG1pbmltYSBkZWxsYSBwYXNzd29yZCc7CiRsYW5nWydwcm9tcHRfbWF4cHdsZW4nXSA9ICdMdW5naGV6emEgbWFzc2ltYSBkZWxsYSBwYXNzd29yZCc7CiRsYW5nWydwcm9tcHRfbWludW5sZW4nXSA9ICdMdW5naGV6emEgbWluaW1hIGRlbGxvIHVzZXJuYW1lJzsKJGxhbmdbJ3Byb21wdF9tYXh1bmxlbiddID0gJ0x1bmdoZXp6YSBtYXNzaW1hIGRlbGxvIHVzZXJuYW1lJzsKJGxhbmdbJ3Byb21wdF9zZXNzaW9udGltZW91dCddID0gJ1Nlc3Npb24gVGltZW91dCAobWludXRlcyknOwokbGFuZ1sncHJvbXB0X2FsbG93ZW1haWxyZWcnXSA9ICdBbGxvdyBFbWFpbCBSZWdpc3RyYXRpb24nOwokbGFuZ1sncHJvbXB0X2RmbHRncm91cCddID0gJ0RlZmF1bHQgR3JvdXAgZm9yIG5ldyB1c2Vycyc7CiRsYW5nWydjaGFuZ2VzZXR0aW5nc190ZW1wbGF0ZSddID0gJ0NoYW5nZSBTZXR0aW5ncyBUZW1wbGF0ZSc7CiRsYW5nWydlcnJvcl9wYXNzd29yZG1pc21hdGNoJ10gPSAnTGUgcGFzc3dvcmQgbm9uIGNvaW5jaWRvbm8nOwokbGFuZ1snZXJyb3JfaW52YWxpZHVzZXJuYW1lJ10gPSAnVXNlcm5hbWUgbm9uIHZhbGlkbyc7CiRsYW5nWydlcnJvcl9pbnZhbGlkcGFzc3dvcmQnXSA9ICdQYXNzd29yZCBub24gdmFsaWRhJzsKJGxhbmdbJ2VkaXR1c2VyJ10gPSAnTW9kaWZpY2EgVXRlbnRlJzsKJGxhbmdbJ3ZhbGlkJ10gPSAnVmFsaWRvJzsKJGxhbmdbJ3VzZXJuYW1lJ10gPSAnVXNlcm5hbWUnOwokbGFuZ1snc3RhdHVzJ10gPSAnU3RhdG8nOwokbGFuZ1snZXJyb3JfbWVtYmVyZ3JvdXBzJ10gPSAnUXVlc3RvIHV0ZW50ZSBub24gJmVncmF2ZTsgbWVtYnJvIGRpIG5lc3N1biBncnVwcG8nOwokbGFuZ1snZXJyb3JfcHJvcGVydGllcyddID0gJ05lc3N1bmEgUHJvcHJpZXQmYWdyYXZlOyc7CiRsYW5nWyd2YWx1ZSddID0gJ1ZhbG9yZSc7CiRsYW5nWydncm91cHMnXSA9ICdHcnVwcGknOwokbGFuZ1sncHJvcGVydGllcyddID0gJ1Byb3ByaWV0JmFncmF2ZTsnOwokbGFuZ1sncHJvcG5hbWUnXSA9ICdOb21lIGRlbGxhIHByb3ByaWV0JmFncmF2ZTsnOwokbGFuZ1sncHJvcHZhbHVlJ10gPSAnVmFsb3JlIGRlbGxhIHByb3ByaWV0JmFncmF2ZTsnOwokbGFuZ1snYWRkJ10gPSAnQWdnaXVuZ2VyZSc7CiRsYW5nWydlZGl0J10gPSAnTW9kaWZpY2EnOwokbGFuZ1snZXhwaXJlcyddID0gJ1NjYWRlbnplJzsKJGxhbmdbJ3NwZWNpZnlfZGF0ZSddID0gJ1NwZWNpZmljYXJlIHVuYSBkYXRhJzsKJGxhbmdbJzEyaHJzJ10gPSAnMTIgT3JlJzsKJGxhbmdbJzI0aHJzJ10gPSAnMjQgT3JlJzsKJGxhbmdbJzQ4aHJzJ10gPSAnNDggT3JlJzsKJGxhbmdbJzF3ZWVrJ10gPSAnMSBTZXR0aW1hbmEnOwokbGFuZ1snMndlZWtzJ10gPSAnMiBTZXR0aW1hbmUnOwokbGFuZ1snMW1vbnRoJ10gPSAnMSBNZXNlJzsKJGxhbmdbJzNtb250aHMnXSA9ICczIE1lc2knOwokbGFuZ1snNm1vbnRocyddID0gJzYgTWVzaSc7CiRsYW5nWycxeWVhciddID0gJzEgQW5ubyc7CiRsYW5nWyduZXZlciddID0gJ01haSc7CiRsYW5nWydwb3N0aW5zdGFsbG1lc3NhZ2UnXSA9ICdNb2R1bG8gaW5zdGFsbGF0by48YnIvPkVzc2VyZSBzaWN1cmkgZGkgY29uZmlndXJhcmUgJnF1b3Q7TW9kaWZpY2EgRnJvbnRFbmRVc2VyIHByb3ByaWV0JmFncmF2ZTsgcGVybWVzc2kuJnF1b3Q7JzsKJGxhbmdbJ3Bhc3N3b3JkJ10gPSAnUGFzc3dvcmQnOwokbGFuZ1sncmVwZWF0cGFzc3dvcmQnXSA9ICdEaSBudW92byc7CiRsYW5nWydlcnJvcl9ncm91cG5hbWVfZXhpc3RzJ10gPSAnR3JvdXAgYnkgdGhhdCBuYW1lIGFscmVhZHkgZXhpc3RzJzsKJGxhbmdbJ2VkaXRncm91cCddID0gJ01vZGlmaWNhIEdydXBwbyc7CiRsYW5nWydzdWJtaXQnXSA9ICdJbnZpYSc7CiRsYW5nWydjYW5jZWwnXSA9ICdDYW5jZWxsYSc7CiRsYW5nWydkZWxldGUnXSA9ICdDYW5jZWxsYSc7CiRsYW5nWydjb25maXJtX2VkaXRncm91cCddID0gJ0FyZSB5b3Ugc3VyZSB0aGlzIGlzIHRoZSBwcm9wZXIgc2V0dGluZ3MgZm9yIHRoaXMgZ3JvdXA/XG5UdXJuaW5nIGEgcHJvcGVydHkgb2ZmIHdpbGwgbm90IGRlbGV0ZSBhbnkgZW50cmllcyBpbiB0aGUgcHJvcGVydGllcyB0YWJsZSBmb3IgdGhpcyBncm91cC91c2VyLiAgVGhleSB3aWxsIG1lcmVseSBiZSB1bmF2YWlsYWJsZS4nOwokbGFuZ1snYXJleW91c3VyZV9kZWxldGVncm91cCddID0gJ1NlaSBzaWN1cm8gY2hlIHZ1b2kgY2FuY2VsbGFyZSBxdWVzdG8gZ3J1cHBvPyc7CiRsYW5nWydjb25maXJtX2RlbGV0ZV9wcm9wJ10gPSAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNvbXBsZXRlbHkgZGVsZXRlIHRoaXMgcHJvcGVydHk/XG5Eb2luZyBzbyB3aWxsIGFsc28gZXJhc2UgYW55IHVzZXIgZW50cmllcyBmb3IgdGhpcyBwcm9wZXJ0eS4nOwokbGFuZ1snZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJ10gPSAnUGFyYW1ldHJpIGluc3VmZmljaWVudGknOwokbGFuZ1snaWQnXSA9ICdJRCc7CiRsYW5nWyduYW1lJ10gPSAnTm9tZSc7CiRsYW5nWydlcnJvcl9jYW50YWRkZ29ydXAnXSA9ICdQcm9ibGVtIGFkZGluZyBncm91cCc7CiRsYW5nWydlcnJvcl9pbnZhbGlkcGFyYW1zJ10gPSAnUGFyYW1ldHJpIG5vbiB2YWxpZGknOwokbGFuZ1snYXBwbHlmaWx0ZXInXSA9ICdBcHBsaWNhJzsKJGxhbmdbJ2ZpbHRlciddID0gJ0ZpbHRybyc7CiRsYW5nWyd1c2VyZmlsdGVyJ10gPSAnVXNlcm5hbWUgUmVndWxhciBFeHByZXNzaW9uJzsKJGxhbmdbJ2Rlc2NyaXB0aW9uJ10gPSAnRGVzY3JpemlvbmUnOwokbGFuZ1snZ3JvdXBuYW1lJ10gPSAnTm9tZSBncnVwcG8nOwokbGFuZ1snYWNjZXNzZGVuaWVkJ10gPSAnQWNjZXNzbyBuZWdhdG8nOwokbGFuZ1snZXJyb3InXSA9ICdFcnJvcmUnOwokbGFuZ1snYWRkZ3JvdXAnXSA9ICdBZ2dpdW5nZXJlIGdydXBwbyc7CiRsYW5nWydhZGR1c2VyJ10gPSAnQWdnaXVuZ2VyZSB1dGVudGUnOwokbGFuZ1sndXNlcnNmb3VuZCddID0gJ1V0ZW50aSB0cm92YXRpIGNoZSBzb2RkaXNmYW5vIGlsIGNyaXRlcmlvJzsKJGxhbmdbJ2dyb3VwJ10gPSAnR3J1cHBvJzsKJGxhbmdbJ3NlbGVjdGdyb3VwJ10gPSAnR3J1cHBvIHNlbGV6aW9uYXRvJzsKJGxhbmdbJ3JlZ2lzdHJhdGlvbl90ZW1wbGF0ZSddID0gJ01vZGVsbG8gcmVnaXN0cmF6aW9uZSc7CiRsYW5nWydsb2dvdXRfdGVtcGxhdGUnXSA9ICdMb2dvdXQgVGVtcGxhdGUnOwokbGFuZ1snbG9naW5fdGVtcGxhdGUnXSA9ICdMb2dpbiBUZW1wbGF0ZSc7CiRsYW5nWydwcmVmZXJlbmNlcyddID0gJ1ByZWZlcmVuemUnOwokbGFuZ1sndXNlcnMnXSA9ICdVdGVudGknOwokbGFuZ1snZnJpZW5kbHluYW1lJ10gPSAnRnJvbnRlbmQgVXNlciBNYW5hZ21lbnQnOwokbGFuZ1snbW9kZGVzY3JpcHRpb24nXSA9ICdHZXN0aW9uZSB1dGVudGkgZGkgRnJvbnRlbmQnOwokbGFuZ1snZGVmYXVsdGZyb250cGFnZSddID0gJ0Zyb250IHBhZ2UgcHJlZGVmaW5pdGEnOwokbGFuZ1snbGFzdGFjY2Vzc2VkcGFnZSddID0gJ1VsdGltYSBwYWdpbmEgYWNjZWR1dGEnOwokbGFuZ1snb3RoZXJwYWdlJ10gPSAnQWx0cmEgcGFnaW5hOiAnOwokbGFuZ1snY2hhbmdlbG9nJ10gPSAnPHVsPg0KPGxpPjAuMC4xIC0gT2N0b2JlciwgMjAwNSAtIEluaXRpYWwgTlJQVCAoTm90IFJlYWR5IGZvciBQcmltZSBUaW1lKSByZWxlYXNlPC9saT4NCjxsaT4wLjEuMCAtIE9jdG9iZXIsIDIwMDUgLSBJbml0aWFsIHJlbGVhc2U8L2xpPg0KPGxpPjAuMS4xIC0gT2N0b2JlciwgMjAwNSAtIEZpeGVkIGlzc3VlcyB3aXRoIHByb3BlcnRpZXM8L2xpPg0KPGxpPjAuMS4yIC0gT2N0b2JlciwgMjAwNSAtIEFkZGVkIGZvcmdvdHRlbiBwYXNzd29yZCBmdW5jdGlvbmFsaXR5PC9saT4NCjxsaT48cD4wLjEuMyAtIE5vdmVtYmVyLCAyMDA1PC9wPg0KICAgIDxwPkFkZGVkIHRoZSBhYmlsaXR5IHRvIHNwZWNpZnkgYSByZWRpcmVjdCBwYWdlIG9uIGxvZ2luLCBsb2dvdXQsIGZvcmdvdCBwYXNzd29yZCwgYW5kIGNoYW5nZSBzZXR0aW5ncywgYW5kIGFkZGVkIHRoZSByZXR1cm50byBhbmQgZm9ybSBwYXJhbWV0ZXJzIHRvIHRoZSB1c2VyIHNpZGUgb2YgdGhpbmdzLCBhbHNvIGRpZCBhIGNvdXBsZSBsZiBsaXR0bGUgY2xlYW51cHMuICBUaGlzIHZlcnNpb24gcmVxdWlyZXMgdjAuMTEgYW5kIGFib3ZlIGZvciBjZXJ0YWluLjwvcD48L2xpPg0KPGxpPjAuMS40IC0gTm92ZW1iZXIsIDIwMDUgLSBWZXJ5IG1pbm9yIGNoYW5nZSB3aXRoIHJlc3BlY3QgdG8gYSBmb3Jnb3R0ZW4gYW5kIG5vIGxvbmdlciBuZWVkZWQgZnVuY3Rpb24gY2FsbDwvbGk+DQo8bGk+PHA+MC4xLjUgLSBOb3ZlbWJlciwgMjAwNTwvcD4NCiAgICA8cD5Bbm90aGVyIHZlcnkgbWlub3IgY2hhbmdlLCBhZGRlZCBzb21lIHRleHQgdG8gdGhlIFBvc3RJbnN0YWxsIG1lc3NhZ2UuPC9wPjwvbGk+DQo8bGk+PHA+MC4xLjYgLSBKYW51YXJ5LCAyMDA2PHA+DQogICAgPHA+Q2hhbmdlcyB0byB0aGUgcGVybWlzc2lvbiBtb2RlbCwgYW5kIG1pbm9yIGJ1ZyBmaXhlcyB0byB0aGUgcHJlZmVyZW5jZXMuICBBbHNvIHNvbWUgcGhwNSBmaXhlcyBidXQgSSBhbSBzdXJlIHRoYXQgdGhlcmUgYXJlIG1vcmUgb3V0IHRoZXJlLjwvcD48L2xpPg0KPGxpPjxwPjAuMS43IC0gSmFudWFyeSwgMjAwNjxwPg0KICAgIDxwPk1hbnkgdGhhbmtzIHRvIDxiPmthdG9uPC9iPiBmb3IgYWRkaW5nIHRoZSB0ZXh0YXJlYSBhbmQgZHJvcGRvd24gcHJvcGVydHkgdHlwZXMuPC9wPg0KICAgIDxwPkZpeGVzIHRvIHRoZSBwcm9wZXJ0eSBhZGRpbmcgdG8gZml4IHByb2JsZW1zIHdpdGggc3BhY2VzIGluIHByb3BlcnR5IG5hbWVzICh3ZSBubyBsb25nZXIgbGV0IHRoYXQgaGFwcGVuKS48L3A+DQo8L2xpPg0KPGxpPjxwPjEuMC4wIC0gRmVicnVhcnksIDIwMDY8cD4NCiAgICA8cD5BZGRlZCBmaWx0ZXJpbmcgYW5kIHJvdyBsaW1pdGluZyB0byB0aGUgYWRtaW4gcGFuZWwuIFRoaXMgd2lsbCBoYXZlIGJpZyBiZW5lZml0cyB0byB0aG9zZSB0aGF0IGFyZSB1c2luZyB0aGlzIG1vZHVsZSBmb3IgaGlnaCB0cmFmaWMsIGFuZCBoaWdoIHVzZXIgc2l0ZXMuPC9wPg0KICAgIDxwPkFkZGVkIHNvcnRpbmcgdG8gdGhlIGFkbWluIHBhbmVsPC9wPg0KICAgIDxwPkFkZGVkIG1heCBsZW5ndGggYWJpbGl0eSB0byB0ZXh0IGFuZCBlbWFpbCBmaWVsZHM8L3A+DQogICAgPHA+Rml4ZWQgYSBzbWFsbCBwcm9ibGVtIHdpdGggdGhlIGRlZmF1bHQgZ3JvdXAgbm90IGJlaW5nIGNoZWNrZWQgd2hlbiBhZGRpbmcgYSB1c2VyPC9wPg0KICAgIDxwPlNhdmUgZmlsdGVyIHNldHRpbmdzIGluIHByZWZlcmVuY2VzLCBhbmQgdGhlIGFjdGl2ZSB0YWIgdG9vLjwvcD4NCiAgICA8cD5EZWxldGUgdXNlciBwcm9wZXJ0aWVzIHdoZW4gYSBwcm9wZXJ0eSBpcyBkZWxldGVkIDxlbT5Ob3RlPC9lbT4sIG5vdCB3aGVuIGl0IGlzIGRpc2FibGVkIGluIHRoZSBlZGl0IGdyb3VwIGRpYWxvZzwvcD4NCiAgICA8cD5BZGQgY29uZmlybWF0aW9uIG1lc3NhZ2UgaW4gZWRpdCBncm91cHMuPC9wPg0KICAgIDxwPkFkZGVkIGEgY291cGxlIG1vcmUgY29uZmlybWF0aW9uIG1lc3NhZ2VzLjwvcD4NCiAgICA8cD5BZGRlZCBDU1YgRXhwb3J0IG9wdGlvbjwvcD4NCiAgICA8cD5Ub2RvIC0gQWRkIHByZWZlcmVuY2VzIGZvciB1c2VybmFtZSBhbmQgcGFzc3dvcmQgZmllbGRsZW5ndGg8L3A+DQo8L2xpPg0KPGxpPjxwPjEuMC4xIC0gRmVicnVhcnksIDIwMDY8cD4NCiAgICA8cD5BZGRlZCB0aGUgYWJpbGl0eSB0byBjaGVjayBmb3IgZHVwbGljYXRlIGVtYWlsIGFkZHJlc3NlczwvcD4NCiAgICA8cD5GaXggcHJvYmxlbSB3aGVyZSBleHBpcnkgZGF0ZSB3YXMgYmVpbmcgbW9kaWZpZWQgd2hlbiBhZG1pbiBtb2RpZmllZCB1c2VyIHNldHRpbmdzPC9wPg0KICAgIDxwPkFkZCBhIGNvbmZpcm1hdGlvbiBtZXNzYWdlIHRvIHRoZSBwcmVmZXJlbmNlcyBzdWJtaXQgYnV0dG9uPC9wPg0KICAgIDxwPkZpeGVkIGEgbWlub3IgYnVnIHdoZW4gY291dGluZyB0aGUgbnVtYmVyIG9mIHVzZXJzIGluIGEgZ3JvdXA8L3A+DQogICAgPHA+Rml4ZXMgdG8gdGhlIHNpemUgb2YgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIGZpZWxkcywgYW5kIG1heGxlbmd0aDwvcD4NCiAgICA8cD5BZGRlZCBhZHZhbmNlZCBmaWx0ZXJpbmcgb24gcHJvcGVydGllczwvcD4NCjwvbGk+DQo8L3VsPic7CiRsYW5nWydoZWxwJ10gPSAnPGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+DQo8cD5UaGlzIG1vZHVsZSBhbGxvd3MgbWFuYWdlbWVudCBhbmQgYWRtaW5pc3RyYXRpb24gb2YgZnJvbnQgZW5kIHVzZXJzIDxpPih1c2VycyB3aG8gaGF2ZSBubyBhZG1pbiBhY2Nlc3NzKTwvaT4uICBJdCBhbGxvd3MgY3JlYXRpb24gb2YgdXNlciBncm91cHMsIGFuZCB1c2VyIGFjY291bnRzIGFuZCBhbGxvd3MgdXNlcnMgdG8gbG9naW4gYW5kIGxvZ291dC4gIGl0IGNhbiBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIEN1c3RvbUNvbnRlbnQgbW9kdWxlIHRvIGRpc3BsYXkgZGlmZmVyZW50IGNvbnRlbnQgdG8gZGlmZmVyZW50IHVzZXJzIG9uY2UgdGhleSBoYXZlIGxvZ2dlZCBpbjwvcD4NCjxoMz5GZWF0dXJlczwvaDM+DQo8dWw+DQo8bGk+PHA+VXNlciBhY2NvdW50IGV4cGlyYXRpb24uICBZb3UgY2FuIGNyZWF0ZSB0ZW1wb3JhcnkgdXNlcnM8L3A+PC9saT4NCjxsaT48cD5Hcm91cCBQcm9wZXJ0aWVzLiAgWW91IGNhbiBhc2sgZm9yIGRpZmZlcmVudCBpbmZvcm1hdGlvbiBmcm9tIG1lbWJlcnMgb2YgZGlmZmVyZW50IGdyb3VwczwvcD48L2xpPg0KPGxpPjxwPkNhcGFibGUgb2YgaGFuZGxpbmcgaHVuZHJlZHMgb2YgdXNlcnM8L3A+PC9saT4NCjxsaT48cD5IYXMgYW4gZXh0ZW5zaXZlIEFQSSBmb3IgYWRkaW5nIGZ1bmN0aW9uYWxpdHk8L3A+PC9saT4NCjwvdWw+DQo8aDM+SG93IGRvIEkgdXNlIGl0PC9oMz4NCjx1bD4NCjxsaT48cD5BZnRlciBpbnN0YWxsYXRpb24geW91IGNhbiBhY2Nlc3MgYWRtaW4gcGFuZWwgdG8gdGhlIEZyb250RW5kVXNlcnMgbW9kdWxlIHVuZGVyIHRoZSAmcXVvdDtVc2VycyAmYW1wOyBnR3JvdXBzJnF1b3Q7IG1lbnUuPC9wPjwvbGk+DQo8bGk+DQo8cD5TZWNvbmRseSwgeW91IHNob3VsZCBkZWZpbmUgcHJvcGVydGllcy4gIFByb3BlcnRpZXMgYXJlIGVzc2VudGlhbGx5IGZpZWxkIGRlZmluaXRpb25zLCBoZXJlIHlvdSBzcGVjaWZ5IHRoZSB0eXBlIG9mIGluZm9ybWF0aW9uIHlvdSB3YW50IHRvIGdhdGhlciwgYW5kIGxpbWl0cy4gaS5lOiAgTmFtZSwgQWdlLCBDaXR5LCBTdGF0ZSwgQ291bnRyeSwgRW1haWwgYWRkcmVzcywgZXRjLjwvcD4NCjxwPjxiPk5vdGU6PC9iPiBZb3UgZG8gbm90IG5lZWQgdG8gZGVmaW5lIHByb3BlcnRpZXMgZm9yIHVzZXJuYW1lIGFuZCBwYXNzd29yZCwgdGhlc2Ugd2lsbCBiZSBwcm92aWRlZCBmb3IgeW91PC9iPg0KPC9saT4NCjxsaT48cD5OZXh0IHlvdSBzaG91bGQgY3JlYXRlIG9uZSBvciBtb3JlIHVzZXIgZ3JvdXBzLiAgV2hlbiB5b3UgY3JlYXRlIGEgZ3JvdXAsIHlvdSBhcmUgYXNrZWQgZm9yIGEgZ3JvdXAgbmFtZSwgYSBkZXNjcmlwdGlvbiBhbmQgdG8gYXNzb2NpYXRlIHByb3BlcnRpZXMgd2l0aCB0aGF0IGdyb3VwLCBzcGVjaWZ5IHRoZSBwcm9wZXJ0aWVzIHNvcnQgb3JkZXIsIGFuZCB3ZXRoZXIgaXQgaXMgYW4gb3B0aW9uYWwsIHJlcXVpcmVkLCBvciBoaWRkZW4gZmllbGQgPGk+KG9mZiBpcyBhbHNvIHZhbGlkKTwvaT48L3A+PC9saT4NCjxsaT48cD48Yj5Ob3RlOjwvYj4gQmVmb3JlIHByb2NlZWRpbmcsIHlvdSBzaG91bGQgZW5zdXJlIHRoYXQgdGhlIHByZWZlcmVuY2VzIGFyZSBzZXQgY29ycmVjdGx5LjwvcD48L2xpPg0KPGxpPjxwPlRoaXJkbHkgeW91IHNob3VsZCBjcmVhdGUgc29tZSB1c2Vycy4gIEFkZGluZyB1c2VycyBpcyBhIHR3byBzdGVwIHByb2Nlc3MuICBXaGVuIGNyZWF0aW5nIGEgdXNlciB5b3UgYXJlIGFza2VkIGZvciB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkLCBhbmQgYW4gZXhwaXJ5IGRhdGUgZm9yIHRoYXQgdXNlci4gIFlvdSB0aGVuIG11c3Qgc2VsZWN0IHRoZSBncm91cHMgdGhhdCB0aGF0IHVzZXIgaXMgYSBtZW1iZXIgb2YsIGFuZCBjbGljayBcJiMwMzk7TmV4dFwmIzAzOTs8L3A+DQo8cD48ZW0+Tm90ZTogPC9lbT5UaGlzIGlzIGEgbGFib3VyIGludGVuc2l2ZSBhbmQgYm9yaW5nIHByb2Nlc3MsIGl0IGlzIGVhc2llciB0byBsZXQgdXNlcnMgcmVnaXN0ZXIgdGhlbXNlbHZlcywgYW5kIHRoZW4geW91IGNhbiBlZGl0IHRoZWlyIGdyb3VwIGluZm9ybWF0aW9uLiAgYnV0IGZvciB0ZXN0aW5nIHB1cnBvc2VzLCBwbGVhc2UgY3JlYXRlIGF0IGxlc3Qgb25lIHVzZXI8L3A+PC9saT4NCjxsaT48cD5MYXN0bHksIGFmdGVyIHRoZSBzeXN0ZW0gaGFzIGRldGVybWluZWQgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBmaWVsZHMgdG8gYmUgcHJlc2VudGVkIGZvciB0aGF0IHVzZXIsIHlvdSBhcmUgcHJlc2VudGVkIHdpdGggYSBmb3JtIGFza2luZyBmb3IgYWxsIG9mIHRoZSByZXF1aXJlZCB1c2VyIGluZm9ybWF0aW9uLiAgQ29tcGxldGUgdGhpcyBmb3JtIHRvIGNvbXBsZXRlIHRoZSB1c2VyIGFkZGl0aW9uPC9wPjwvbGk+DQo8bGk+PHA+WW91IGFyZSBub3cgcmVhZHkgdG8gYWRkIHRoZSBmcm9udCBlbmQgZnVuY3Rpb25hbGl0eSB0byB5b3VyIHNpdGUuICBUaGlzIGlzIGFzIHNpbXBsZSBhcyBhZGRpbmcgdGhlIHtjbXNfbW9kdWxlIG1vZHVsZT1Gcm9udEVuZFVzZXJzfSB0YWcgdG8geW91ciBwYWdlIG9yIHRlbXBsYXRlPC9wPjwvbGk+DQo8L3VsPg0KPGgzPlN1cHBvcnQ8L2gzPg0KPHA+VGhpcyBtb2R1bGUgZG9lcyBub3QgaW5jbHVkZSBjb21tZXJjaWFsIHN1cHBvcnQuIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PC9wPg0KPHVsPg0KPGxpPkZvciB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBtb2R1bGUsIEZBUXMsIG9yIHRvIGZpbGUgYSBCdWcgUmVwb3J0IG9yIGJ1eSBjb21tZXJjaWFsIHN1cHBvcnQsIHBsZWFzZSB2aXNpdCBjYWxndXlcJiMwMzk7cw0KbW9kdWxlIGhvbWVwYWdlIGF0IDxhIGhyZWY9JnF1b3Q7aHR0cDovL3RlY2hjb20uZHluZG5zLm9yZyZxdW90Oz50ZWNoY29tLmR5bmRucy5vcmc8L2E+LjwvbGk+DQo8bGk+QWRkaXRpb25hbCBkaXNjdXNzaW9uIG9mIHRoaXMgbW9kdWxlIG1heSBhbHNvIGJlIGZvdW5kIGluIHRoZSA8YSBocmVmPSZxdW90O2h0dHA6Ly9mb3J1bS5jbXNtYWRlc2ltcGxlLm9yZyZxdW90Oz5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi48L2xpPg0KPGxpPlRoZSBhdXRob3IsIGNhbGd1eTEwMDAsIGNhbiBvZnRlbiBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0mcXVvdDtpcmM6Ly9pcmMuZnJlZW5vZGUubmV0LyNjbXMmcXVvdDs+Q01TIElSQyBDaGFubmVsPC9hPi48L2xpPg0KPGxpPkxhc3RseSwgeW91IG1heSBoYXZlIHNvbWUgc3VjY2VzcyBlbWFpbGluZyB0aGUgYXV0aG9yIGRpcmVjdGx5LjwvbGk+ICANCjwvdWw+DQo8aDM+UGFyYW1ldGVyczwvaDM+DQo8dWw+DQo8bGk+PGVtPihvcHRpb25hbCk8L2VtPiBmb3JtPSZxdW90O25hbWUmcXVvdDs8L2xpPg0KPHA+Rm9ybXM6DQo8dWw+DQogPGxpPjxlbT5sb2dpbjwvZW0+IC0gRGlzcGxheSB0aGUgbG9naW4gZm9ybTwvbGk+DQogPGxpPjxlbT5sb2dvdXQ8L2VtPiAtIERpc3BsYXkgdGhlIGxvZ291dCBmb3JtPC9saT4NCiA8bGk+PGVtPmNoYW5nZXNldHRpbmdzPC9lbT4gLSBEaXNwbGF5IHRoZSBjaGFuZ2Ugc2V0dGluZ3MgZm9ybTwvbGk+DQogPGxpPjxlbT5mb3Jnb3RwdzwvZW0+IC0gRGlzcGxheSB0aGUgZm9yZ290IHBhc3N3b3JkIGZvcm08L2xpPg0KPC91bD4NCjwvcD4NCjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IHJldHVybnRvPSZxdW90O3BhZ2UmcXVvdDs8L2xpPg0KPHA+VXNlZCB3aXRoIHRoZSBsb2dpbiwgbG9nb3V0LCBhbmQgY2hhbmdlc2V0dGluZ3MgZm9ybXMsIHRoaXMgcGFyYW1ldGVyIGNvbnRhaW5zIHRoZSBwYWdlIGlkIG9yIGFsaWFzIG9mIGEgcGFnZSB0byByZWRpcmVjdCB0bywgd2hlbiB0aGUgZm9ybSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY29tcGxldGVkPC9wPg0KPC91bD4NCjxwPkFzIHBlciB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzLWlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dA0Kb2YgdGhlIGxpY2Vuc2UgZm9yIHRoZSBmdWxsIGRpc2NsYWltZXIuPC9wPg0KPGgzPlJlcXVpcmVtZW50czwvaDM+DQo8cD5JbiBvcmRlciB0byBpbXBsZW1lbnQgdGhlIGZvcmdvdHRlbiBwYXNzd29yZCBmdW5jdGlvbmFsaXR5LCB0aGlzIG1vZHVsZSByZXF1aXJlcyB0aGUgQ01TTWFpbGVyIG1vZHVsZSB0byBiZSBwcmV2aW91c2x5IGluc3RhbGxlZDwvcD4NCjxoMz5Db3B5cmlnaHQgYW5kIExpY2Vuc2U8L2gzPg0KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDA1LCBSb2JlcnQgQ2FtcGJlbCA8YSBocmVmPSZxdW90O21haWx0bzpjYWxndXkxMDAwQGhvdG1haWwuY29tJnF1b3Q7PjxjYWxndXkxMDAwQGhvdG1haWwuY29tPjwvYT4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD4NCjxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIHJlbGVhc2VkIHVuZGVyIHRoZSA8YSBocmVmPSZxdW90O2h0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTCZxdW90Oz5HTlUgUHVibGljIExpY2Vuc2U8L2E+LiBZb3UgbXVzdCBhZ3JlZSB0byB0aGlzIGxpY2Vuc2UgYmVmb3JlIHVzaW5nIHRoZSBtb2R1bGUuPC9wPic7Cj8+]]></data>
  </file>
  <file>
    <filename>/lang/ext/nl_NL.php</filename>
    <isdir>0</isdir>
    <data><![CDATA[PD9waHAKJGxhbmdbJ3Byb21wdF91bmZsZGxlbiddID0gJ0xlbmd0ZSB2YW4gaGV0IGdlYnJ1aWtlcnNuYWFtIHZlbGQnOwokbGFuZ1sncHJvbXB0X3B3ZmxkbGVuJ10gPSAnTGVuZ3RlIHZhbiBoZXQgd2FjaHR3b29yZCB2ZWxkJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRwYXNzd29yZGxlbmd0aHMnXSA9ICdNaW4vTWF4IGdlbGRpZ2Ugd2FjaHR3b29yZCBsZW5ndGVzJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWR1c2VybmFtZWxlbmd0aHMnXSA9ICdNaW4vTWF4IGdlbGRpZ2UgZ2VicnVpa2Vyc25hYW0gbGVuZ3Rlcyc7CiRsYW5nWydlcnJvcl9ub2VtYWlsYWRkcmVzcyddID0gJ0dlZW4gRS1tYWlsIGFkcmVzIGdldm9uZGVuIHZvb3IgZGl0IGFjY291bnQnOwokbGFuZ1sndXNlcl9hZGRlZCddID0gJ0dlYnJ1aWtlciBUb2VnZXZvZWdkICVzID0gJXMnOwokbGFuZ1sndXNlcl9kZWxldGVkJ10gPSAnR2VicnVpa2VyIHZlcndpamRlcmQgaWQ9JXMnOwokbGFuZ1sncHJvcGVydHlmaWx0ZXInXSA9ICdFaWdlbnNjaGFwJzsKJGxhbmdbJ3ZhbHVlcmVnZXgnXSA9ICdXYWFyZGUgKHJlZ3VsYXIgZXhwcmVzc2lvbiknOwokbGFuZ1snd2FybmluZ19lZmZlY3RzZmllbGRsZW5ndGgnXSA9ICdXYWFyc2NodXdpbmc6IERlemUgdmVsZGVuIGJlJmFtcDtpdW1sO252bG9lZGVuIGRlIGdyb290dGUgdmFuIGludm9lcnZlbGRlbiB2b29yIGZvcm11bGllcmVuLiBIZXQgYWFudGFsIHZlcmtsZWluZ2VuIG9wIGVlbiBiZXN0YWFuZGUgd2Vic2l0ZSBpcyBtaXNzY2hpZW4gbmlldCBhYW4gdGUgcmFkZW4uJzsKJGxhbmdbJ2NvbmZpcm1fc3VibWl0cHJlZnMnXSA9ICdCZWhlZXIgdm9vcmtldXJlbiB3aWp6aWdlbj8nOwokbGFuZ1snZXJyb3JfZW1haWxhbHJlYWR5dXNlZCddID0gJ0UtbWFpbCBhZHJlcyB3b3JkdCBhbCBnZWJydWlrdCc7CiRsYW5nWydwcm9tcHRfYWxsb3dfZHVwbGljYXRlX2VtYWlscyddID0gJ0RlemVsZmRlIEUtbWFpbHMgdG9lc3RhYW4nOwokbGFuZ1snaW5mb19hbGxvd19kdXBsaWNhdGVfZW1haWxzJ10gPSAnKG1lZXJkZXJlIGdlYnJ1aWtlcnMgbWV0IGhldHplbGZkZSBFLW1haWwgYWRyZXMgdG9lc3RhYW4pJzsKJGxhbmdbJ2Vycm9yX21pc3Npbmd1c2VybmFtZSddID0gJ0dlZW4gZ2VicnVpa2Vyc25hYW0gaW5nZXZvZXJkJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdwYXNzd29yZCddID0gJ0dlZW4gd2FjaHR3b29yZCBpbmdldm9lcmQnOwokbGFuZ1snZnJvbnRlbmR1c2VyX2xvZ291dCddID0gJ0Zyb250ZW5kIEdlYnJ1aWtlciBMb2dvdXQnOwokbGFuZ1snZnJvbnRlbmR1c2VyX2xvZ2dlZGluJ10gPSAnRnJvbnRlbmQgR2VicnVpa2VyIExvZ2luJzsKJGxhbmdbJ2VkaXRwcm9wX2luZm9tc2cnXSA9ICc8Zm9udCBjb2xvcj0mYW1wO3F1b3Q7cmVkJmFtcDtxdW90Oz48Yj5VU0UgQ0FVVElPTjwvYj4gd2hlbiBjaGFuZ2luZyBleGlzdGluZyBwcm9wZXJ0aWVzIHRoYXQgYXJlIGFzc2lnbmVkIHRvIGdyb3VwcywgeW91IG1heSBwb3RlbnRpYWxseSBjYXVzZSBkYW1hZ2UgYW5kIGJyZWFrIGFuIGV4aXN0aW5nIHNpdGUgPGk+KGVzcGVjaWFsbHkgaWYgeW91IHJlZHVjZSBmaWVsZCBsZW5ndGhzLCBldGMpPC9pPjwvZm9udD4nOwokbGFuZ1snaW5mb19zbXRwdmFsaWRhdGUnXSA9ICdEZXplIGZ1bmN0aWUgd2Vya3QgbmlldCBvbmRlciB3aW5kb3dzJzsKJGxhbmdbJ21zZ19kb250Y3JlYXRldXNlcm5hbWUnXSA9ICdEbyBub3QgY3JlYXRlIGEgcHJvcGVydHkgZm9yIHVzZXJuYW1lLCBvciBzb21lIHN1Y2ggdGhpbmcgYXMgdGhpcyBpcyBidWlsdGluIHRvIHRoZSBGcm9udEVuZFVzZXJzIG1vZHVsZSc7CiRsYW5nWydwcm9tcHRfZXhwb3J0Y3N2J10gPSAnR2VicnVpa2VycyBleHBvcnRlcmVuIG5hYXIgQ1NWJzsKJGxhbmdbJ2V4cG9ydGNzdiddID0gJ0V4cG9ydGVyZW4nOwokbGFuZ1snYWRtaW4nXSA9ICdCZWhlZXInOwokbGFuZ1snZWRpdHByb3AnXSA9ICdXYWFyZGUgV2lqemlnZW4nOwokbGFuZ1snbWF4bGVuZ3RoJ10gPSAnTWF4aW1hbGUgbGVuZ3RlJzsKJGxhbmdbJ2NyZWF0ZWQnXSA9ICdBYW5nZW1hYWt0JzsKJGxhbmdbJ3NvcnRieSddID0gJ1NvcnRlcmVuIE9wJzsKJGxhbmdbJ3NvcnQnXSA9ICdTb3J0ZXJpbmcnOwokbGFuZ1sndXNlcnNpbmdyb3VwJ10gPSAnR2VicnVpa2VycyBpbiBkZSBnZXNlbGVjdGVlcmRlIGdyb2VwKGVuKSc7CiRsYW5nWyd1c2VybGltaXQnXSA9ICdSZXN1bHRhdGVuIGJlcGVya2VuIHRvdCc7CiRsYW5nWydlcnJvcl9ub2VtYWlsZmllbGQnXSA9ICdDb3VsZCBub3QgZmluZCBhbiBlbWFpbCBmaWVsZCBmb3IgdGhpcyB1c2VyLiAgWW91IG1heSBuZWVkIHRvIGNvbnRhY3QgdGhlIHN5c3RlbSBhZG1pbmlzdHJhdG9yJzsKJGxhbmdbJ3Byb21wdF9mb3Jnb3Rwd19wYWdlJ10gPSAnUGFnZUlEL0FsaWFzIGZvciBGb3Jnb3QgUGFzc3dvcmQgZm9ybSc7CiRsYW5nWydwcm9tcHRfY2hhbmdlc2V0dGluZ3NfcGFnZSddID0gJ1BhZ2VJRC9BbGlhcyBmb3IgQ2hhbmdlIFNldHRpbmdzIGZvcm0nOwokbGFuZ1sncHJvbXB0X2xvZ2luX3BhZ2UnXSA9ICdQYWdlSUQvQWxpYXMgdG8ganVtcCB0byBhZnRlciBsb2dpbic7CiRsYW5nWydwcm9tcHRfbG9nb3V0X3BhZ2UnXSA9ICdQYWdlSUQvQWxpYXMgdG8ganVtcCB0byBhZnRlciBsb2dvdXQnOwokbGFuZ1snc29ydG9yZGVyJ10gPSAnU29ydGVlciB2b2xnb3JkZSc7CiRsYW5nWydwcm9tcHRfbnVtcmVzZXRyZWNvcmQnXSA9ICdBIG51bWJlciBvZiB1c2VycyBhcmUgaW4gdGhlIG1pZGRsZSBvZiByZXNldHRpbmcgbG9zdCBwYXNzd29yZHMuICBDdXJyZW50bHkgdGhpcyBjb3VudCBpcyBhdDonOwokbGFuZ1sncmVtb3ZlMXdlZWsnXSA9ICdSZW1vdmUgYWxsIGVudHJpZXMgbW9yZSB0aGFuIGEgd2VlayBvbGQnOwokbGFuZ1sncmVtb3ZlMW1vbnRoJ10gPSAnUmVtb3ZlIGFsbCBlbnRyaWVzIG1vcmUgdGhhbiBhIG1vbnRoIG9sZCc7CiRsYW5nWydyZW1vdmVhbGwnXSA9ICdBbGxlIGVudHJpZXMgdmVyd2lqZGVyZW4nOwokbGFuZ1snYXJleW91c3VyZSddID0gJ1pla2VyIHdldGVuPyc7CiRsYW5nWydlcnJvcl9pbnZhbGlkY29kZSddID0gJ0FuIGludmFsaWQgY29kZSBoYXMgYmVlbiBlbnRlcmVkLCBwbGVhc2UgdHJ5IGFnYWluJzsKJGxhbmdbJ2Vycm9yX3RlbXBjb2Rlbm90Zm91bmQnXSA9ICdBIHRlbXBvcmFyeSBjb2RlIGZvciB5b3VyIHVzZXIgaWQgY291bGQgbm90IGJlIGZvdW5kIGluIHRoZSBkYXRhYmFzZSc7CiRsYW5nWydmb3Jnb3RwYXNzd29yZF92ZXJpZnl0ZW1wbGF0ZSddID0gJ1RlbXBsYXRlIHVzZWQgdG8gZGlzcGxheSB2ZXJpZmljYXRpb24gZm9ybSc7CiRsYW5nWydmb3Jnb3RwYXNzd29yZF9lbWFpbHRlbXBsYXRlJ10gPSAnVGVtcGxhdGUgdXNlZCBmb3IgZm9yZ290dGVuIHBhc3N3b3JkIGVtYWlsJzsKJGxhbmdbJ2Vycm9yX3Jlc2V0YWxyZWFkeXNlbnQnXSA9ICdFaXRoZXIgeW91cnNlbGYgb3Igc29tZW9uZSBlbHNlIGhhcyBhbHJlYWR5IHRyaWdnZXJlZCBhIHBhc3N3b3JkIHJlc2V0IG9wZXJhdGlvbiBmb3IgdGhpcyBhY2NvdW50LiAgQ2hlY2sgeW91ciBlbWFpbCwgeW91IG1heSBoYXZlIGZ1cnRoZXIgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byByZXNldCB5b3VyIHBhc3N3b3JkIGluIHlvdXIgaW5ib3gnOwokbGFuZ1snZXJyb3JfZGJlcnJvciddID0gJ0RhdGFiYXNlIGVycm9yJzsKJGxhbmdbJ21lc3NhZ2VfZm9yZ290cHdlbWFpbCddID0gJ1lvdSBhcmUgcmVjZWl2aW5nIHRoaXMgbWVzc2FnZSBiZWNhdXNlIHNvbWVib2R5IHRvbGQgb3VyIHNpdGUgdGhhdCB5b3UgaGFkIGxvc3QgeW91ciBwYXNzd29yZC4gIElmIHRoaXMgaXMgdGhlIGNhc2UsIHJlYWQgdGhlIGluc3RydWN0aW9ucyBiZWxvdy4gIElmIHlvdSBkb24mIzAzOTt0IGhhdmUgYSBjbHVlIHdoYXQgdGhpcyBpcywgdGhlbiB5b3UgYXJlIHNhZmUgdG8gZGVsZXRlIHRoaXMgbWVzc2FnZSwgYW5kIHdlIHRoYW5rIHlvdSBmb3IgeW91ciB0aW1lLic7CiRsYW5nWydwcm9tcHRfY29kZSddID0gJ0NvZGUnOwokbGFuZ1snbWVzc2FnZV9jb2RlJ10gPSAnVGhlIGZvbGxvd2luZyBjb2RlIGhhcyBiZWVuIGdlbmVyYXRlZCByYW5kb21seSBnZW5lcmF0ZWQgaW4gb3JkZXIgdG8gdmVyaWZ5IHRoZSB1c2VyIGFjY291bnQuICB3aGVuIHlvdSBjbGljayBvbiB0aGUgbGluayBiZWxvdyB5b3Ugd2lsbCBiZSBwcmVzZW50ZWQgd2l0aCBhIGZpZWxkIHRvIGVudGVyIHRoaXMgY29kZS4gIE5vcm1hbGx5IHRoZSBmaWVsZCBpcyBwcmUtY29tcGxldGVkIGZvciB5b3UsIGJ1dCBpbmNhc2UgaXQgaXNuJiMwMzk7dCB0aGUgY29kZSBpczonOwokbGFuZ1sncHJvbXB0X2xpbmsnXSA9ICdDbGlja2luZyBvbiB0aGUgZm9sbG93aW5nIGxpbmsgd2lsbCB0YWtlIHlvdSB0byB0aGUgd2Vic2l0ZSB3aGVyZSB5b3UgY2FuIGVudGVyIHRoZSBhYm92ZSBjb2RlLCBhbmQgcmVzZXQgeW91ciBwYXNzd29yZDonOwokbGFuZ1snbG9zdHBhc3N3b3JkX2VtYWlsc3ViamVjdCddID0gJ1dhY2h0d29vcmQgVmVyZ2V0ZW4nOwokbGFuZ1snZXJyb3Jfbm9tYWlsZXJtb2R1bGUnXSA9ICdDb3VsZCBub3QgZmluZCB0aGUgQ01TTWFpbGVyIG1vZHVsZSc7CiRsYW5nWydpbmZvX2ZvcmdvdHB3bWVzc2FnZXNlbnQnXSA9ICdBbiBlbWFpbCBoYXMgYmVlbiBzZW50IHRvICVzIHdpdGggaW5zdHJ1Y3Rpb25zIGFzIHRvIGhvdyB0byByZXNldCB5b3VyIHBhc3N3b3JkLiAgVGhhbmsgeW91JzsKJGxhbmdbJ2xvc3Rwd19tZXNzYWdlJ10gPSAnU28geW91IGZvcmdvdCBvciBsb3N0IHlvdXIgcGFzc3dvcmQuIFdlbGwsIHR5cGUgeW91ciB1c2VybmFtZSBpbiBoZXJlLCBhbmQgaWYgd2UgY2FuIGZpbmQgeW91IHdlIHdpbGwgc2VuZCB5b3UgYW4gZW1haWwgd2l0aCBpbnN0cnVjdGlvbnMgb24gaG93IHRvIHJlc2V0IGl0JzsKJGxhbmdbJ2ZvcmdvdHBhc3N3b3JkX3RlbXBsYXRlJ10gPSAnV2FjaHR3b29yZCBWZXJnZXRlbiBUZW1wbGF0ZXMnOwokbGFuZ1snZXJyb3JfcHJvcG5vdGZvdW5kJ10gPSAnRWlnZW5zY2hhcCAlcyBuaWV0IGdldm9uZGVuJzsKJGxhbmdbJ3Byb3BzZm91bmQnXSA9ICdHZXZvbmRlbiBlaWdlbnNjaGFwcGVuJzsKJGxhbmdbJ2FkZHByb3AnXSA9ICdFaWdlbnNjaGFwIHRvZXZvZWdlbic7CiRsYW5nWydlcnJvcl9yZXF1aXJlZGZpZWxkJ10gPSAnQSByZXF1aXJlZCBmaWVsZCAoJXMpIHdhcyBlbXB0eSc7CiRsYW5nWydpbmZvX2VtcHR5cGFzc3dvcmRmaWVsZCddID0gJ0VudGVyIGEgbmV3IHBhc3N3b3JkIGhlcmUgdG8gY2hhbmdlIHlvdXIgcGFzc3dvcmQnOwokbGFuZ1snZXJyb3Jfbm90bG9nZ2VkaW4nXSA9ICdZb3UgZG8gbm90IGFwcGVhciB0byBiZSBsb2dnZWQgaW4nOwokbGFuZ1sndXNlcl9zZXR0aW5ncyddID0gJ0luc3RlbGxpbmdlbic7CiRsYW5nWyd1c2VyX3JlZ2lzdHJhdGlvbiddID0gJ1JlZ2lzdHJhdGllJzsKJGxhbmdbJ2Vycm9yX2FjY291bnRleHBpcmVkJ10gPSAnRGl0IGFjY291bnQgaXMgdmVybG9wZW4nOwokbGFuZ1snZXJyb3JfaW1wcm9wZXJlbWFpbGZvcm1hdCddID0gJ0ltcHJvcGVyIGVtYWlsIGFkZHJlc3MgZm9ybWF0dGluZyc7CiRsYW5nWydlcnJvcl9pbnZhbGlkZXhwaXJ5ZGF0ZSddID0gJ09uZ2VsZGlnZSBhZmxvb3AgZGF0dW0nOwokbGFuZ1snZXJyb3JfcHJvYmxlbXNldHRpbmdwcm9wZXJ0eSddID0gJ0Vycm9yIHNldHRpbmcgcHJvcGVydHkgJXMgZm9yIHVzZXIgJHMnOwokbGFuZ1snZXJyb3JfaW52YWxpZGdyb3VwaWQnXSA9ICdPbmdlbGRpZ2UgZ3JvZXAgaWQgJXMnOwokbGFuZ1snaGlkZGVuZmllbGRtYXJrZXInXSA9ICdIaWRkZW4gZmllbGQgbWFya2VyJzsKJGxhbmdbJ2hpZGRlbmZpZWxkY29sb3InXSA9ICdIaWRkZW4gZmllbGQgY29sb3InOwokbGFuZ1snaGlkZGVuJ10gPSAnVmVyYm9yZ2VuJzsKJGxhbmdbJ2Vycm9yX2R1cGxpY2F0ZW5hbWUnXSA9ICdBIHByb3BlcnR5IHdpdGggdGhhdCBuYW1lIGlzIGFscmVhZHkgZGVmaW5lZCc7CiRsYW5nWydlcnJvcl9ub3Byb3BlcnRpZXMnXSA9ICdHZWVuIGVpZ2Vuc2NoYXBwZW4gZ2VkZWZpbmVlcmQnOwokbGFuZ1snZXJyb3Jfbm9yZWxhdGlvbnMnXSA9ICdObyBwcm9wZXJ0aWVzIHdlcmUgc2VsZWN0ZWQgZm9yIHRoaXMgZ3JvdXAnOwokbGFuZ1snZ3JvdXBzZm91bmQnXSA9ICdHZXZvbmRlbiBncm9lcGVuJzsKJGxhbmdbJ2Vycm9yX29uZWdyb3VwcmVxdWlyZWQnXSA9ICdNZW1iZXJzaGlwIGluIGF0IGxlYXN0IG9uZSBncm91cCBpcyByZXF1aXJlZCc7CiRsYW5nWydwcm9tcHRfcmVxdWlyZW9uZWdyb3VwJ10gPSAnUmVxdWlyZSBtZW1iZXJzaGlwIGluIGF0bGVhc3Qgb25lIGdyb3VwJzsKJGxhbmdbJ2JhY2snXSA9ICdUZXJ1Zyc7CiRsYW5nWydlcnJvcl9taXNzaW5nX3JlcXVpcmVkX3BhcmFtJ10gPSAnJXMgaXMgZWVuIHZlcnBsaWNodCB2ZWxkJzsKJGxhbmdbJ3JlcXVpcmVkZmllbGRtYXJrZXInXSA9ICdWZXJwbGljaHRlIHZlbGRlbiBtYXJrZXJlbiBtZXQnOwokbGFuZ1sncmVxdWlyZWRmaWVsZGNvbG9yJ10gPSAnVmVycGxpY2h0ZSB2ZWxkZW4gaGlnaGxpZ2h0ZW4gaW4gJzsKJGxhbmdbJ25leHQnXSA9ICdWb2xnZW5kZSc7CiRsYW5nWydlcnJvcl9ncm91cGV4aXN0cyddID0gJ0EgR3JvdXAgd2l0aCB0aGF0IG5hbWUgYWxyZWFkeSBleGlzdHMnOwokbGFuZ1sncmVxdWlyZWQnXSA9ICdSZXF1aXJlZCBGaWVsZCc7CiRsYW5nWydvcHRpb25hbCddID0gJ09wdGlvbmVlbCc7CiRsYW5nWydvZmYnXSA9ICdVaXQnOwokbGFuZ1snbGVuZ3RoJ10gPSAnTGVuZ3RlJzsKJGxhbmdbJ2xlbmd0aGNvbW1lbnQnXSA9ICc8YnI+KGNoYXJzIGluIHRoZSB0ZXh0IGlucHV0KSc7CiRsYW5nWydzZWxvcHRpb25zJ10gPSAnRHJvcGRvd24gb3B0aW9ucywgc2VwYXJhdGVkIGJ5IGxpbmUgYnJlYWtzJzsKJGxhbmdbJ3llcyddID0gJ0phJzsKJGxhbmdbJ3Byb21wdCddID0gJ1Byb21wdCc7CiRsYW5nWyd0eXBlJ10gPSAnVHlwZSc7CiRsYW5nWyd0ZXh0J10gPSAnVGVrc3QnOwokbGFuZ1snY2hlY2tib3gnXSA9ICdBYW52aW5rIHZha2plJzsKJGxhbmdbJ2VtYWlsJ10gPSAnRW1haWwgQWRyZXMnOwokbGFuZ1sndGV4dGFyZWEnXSA9ICdUZWtzdHZlbGQnOwokbGFuZ1snZHJvcGRvd24nXSA9ICdVaXRrbGFwJzsKJGxhbmdbJ21zZ19jdXJyZW50bHlsb2dnZWRpbmFzJ10gPSAnV2Vsa29tJzsKJGxhbmdbJ2xvZ291dCddID0gJ1VpdGxvZ2dlbic7CiRsYW5nWydwcm9tcHRfY2hhbmdlc2V0dGluZ3MnXSA9ICdNaWpuIEluc3RlbGxpbmdlbiB3aWp6aWdlbic7CiRsYW5nWydlcnJvcl9sb2dpbmZhaWxlZCddID0gJ0xvZ2luIGZhaWxlZCAtIEludmFsaWQgdXNlcm5hbWUgb3IgcGFzc3dvcmQ/JzsKJGxhbmdbJ2xvZ2luJ10gPSAnSW5sb2dnZW4nOwokbGFuZ1sncHJvbXB0X3VzZXJuYW1lJ10gPSAnR2VicnVpa2Vyc25hYW0nOwokbGFuZ1sncHJvbXB0X3Bhc3N3b3JkJ10gPSAnV2FjaHR3b29yZCc7CiRsYW5nWydyZWdpc3RlciddID0gJ1JlZ2lzdHJlcmVuJzsKJGxhbmdbJ2ZvcmdvdHB3J10gPSAnV2FjaHR3b29yZCBWZXJnZXRlbj8nOwokbGFuZ1snZGVmYXVsdHMnXSA9ICdTdGFuZGFhcmQnOwokbGFuZ1sndGVtcGxhdGUnXSA9ICdTamFibG9vbic7CiRsYW5nWydlcnJvcl91c2Vybm90Zm91bmQnXSA9ICdHZWJydWlrZXIgSUQgbmlldCBnZXZvbmRlbic7CiRsYW5nWydlcnJvcl91c2VybmFtZXRha2VuJ10gPSAnRGllIGdlYnJ1aWtlcnNuYWFtICglcykgaXMgYWwgaW4gZ2VicnVpayc7CiRsYW5nWydwcm9tcHRfc210cHZhbGlkYXRlJ10gPSAnVXNlIFNNVFAgdG8gdmFsaWRhdGUgZW1haWwgYWRkcmVzc2VzPyc7CiRsYW5nWydwcm9tcHRfbWlucHdsZW4nXSA9ICdNaW5pbXVtIFBhc3N3b3JkIExlbmd0aCc7CiRsYW5nWydwcm9tcHRfbWF4cHdsZW4nXSA9ICdNYXhpbXVtIFBhc3N3b3JkIExlbmd0aCc7CiRsYW5nWydwcm9tcHRfbWludW5sZW4nXSA9ICdNaW5pbXVtIFVzZXJuYW1lIExlbmd0aCc7CiRsYW5nWydwcm9tcHRfbWF4dW5sZW4nXSA9ICdNYXhpbXVtIFVzZXJuYW1lIExlbmd0aCc7CiRsYW5nWydwcm9tcHRfc2Vzc2lvbnRpbWVvdXQnXSA9ICdTZXNzaW9uIFRpbWVvdXQgKHNlY29uZHMpJzsKJGxhbmdbJ3Byb21wdF9hbGxvd2VtYWlscmVnJ10gPSAnQWxsb3cgRW1haWwgUmVnaXN0cmF0aW9uJzsKJGxhbmdbJ3Byb21wdF9kZmx0Z3JvdXAnXSA9ICdEZWZhdWx0IEdyb3VwIGZvciBuZXcgdXNlcnMnOwokbGFuZ1snY2hhbmdlc2V0dGluZ3NfdGVtcGxhdGUnXSA9ICdDaGFuZ2UgU2V0dGluZ3MgVGVtcGxhdGUnOwokbGFuZ1snZXJyb3JfcGFzc3dvcmRtaXNtYXRjaCddID0gJ1Bhc3N3b3JkcyBEbyBub3QgbWF0Y2gnOwokbGFuZ1snZXJyb3JfaW52YWxpZHVzZXJuYW1lJ10gPSAnSW52YWxpZCBVc2VybmFtZSc7CiRsYW5nWydlcnJvcl9pbnZhbGlkcGFzc3dvcmQnXSA9ICdJbnZhbGlkIFBhc3N3b3JkJzsKJGxhbmdbJ2VkaXR1c2VyJ10gPSAnRWRpdCBVc2VyJzsKJGxhbmdbJ3ZhbGlkJ10gPSAnR2VsZGlnJzsKJGxhbmdbJ3VzZXJuYW1lJ10gPSAnR2VicnVpa2Vyc25hYW0nOwokbGFuZ1snc3RhdHVzJ10gPSAnU3RhdHVzJzsKJGxhbmdbJ2Vycm9yX21lbWJlcmdyb3VwcyddID0gJ1RoaXMgdXNlciBpcyBub3QgYSBtZW1iZXIgb2YgYW55IGdyb3Vwcyc7CiRsYW5nWydlcnJvcl9wcm9wZXJ0aWVzJ10gPSAnTm8gUHJvcGVydGllcyc7CiRsYW5nWyd2YWx1ZSddID0gJ1dhYXJkZSc7CiRsYW5nWydncm91cHMnXSA9ICdHcm9lcGVuJzsKJGxhbmdbJ3Byb3BlcnRpZXMnXSA9ICdFaWdlbnNjaGFwcGVuJzsKJGxhbmdbJ3Byb3BuYW1lJ10gPSAnUHJvcGVydHkgTmFtZSc7CiRsYW5nWydwcm9wdmFsdWUnXSA9ICdQcm9wZXJ0eSBWYWx1ZSc7CiRsYW5nWydhZGQnXSA9ICdUb2V2b2VnZW4nOwokbGFuZ1snZWRpdCddID0gJ0FhbnBhc3Nlbic7CiRsYW5nWydleHBpcmVzJ10gPSAnVmVybG9vcHQnOwokbGFuZ1snc3BlY2lmeV9kYXRlJ10gPSAnRGF0dW0gb3BnZXZlbic7CiRsYW5nWycxMmhycyddID0gJzEyIFV1cic7CiRsYW5nWycyNGhycyddID0gJzI0IFV1cic7CiRsYW5nWyc0OGhycyddID0gJzQ4IFV1cic7CiRsYW5nWycxd2VlayddID0gJzEgV2Vlayc7CiRsYW5nWycyd2Vla3MnXSA9ICcyIFdla2VuJzsKJGxhbmdbJzFtb250aCddID0gJzEgTWFhbmQnOwokbGFuZ1snM21vbnRocyddID0gJzMgTWFhbmRlbic7CiRsYW5nWyc2bW9udGhzJ10gPSAnNiBNYWFuZGVuJzsKJGxhbmdbJzF5ZWFyJ10gPSAnMSBKYWFyJzsKJGxhbmdbJ25ldmVyJ10gPSAnTm9vaXQnOwokbGFuZ1sncG9zdGluc3RhbGxtZXNzYWdlJ10gPSAnTW9kdWxlIGluc3RhbGxlZCBzdWNlc3NmdWxseS48YnIvPkJlIHN1cmUgdG8gc2V0IHRoZSAmcXVvdDtNb2RpZnkgRnJvbnRFbmRVc2VyIFByb3BlcnRpZXMgcGVybWlzc2lvbi4mcXVvdDsnOwokbGFuZ1sncGFzc3dvcmQnXSA9ICdXYWNodHdvb3JkJzsKJGxhbmdbJ3JlcGVhdHBhc3N3b3JkJ10gPSAnTm9nbWFhbHMnOwokbGFuZ1snZXJyb3JfZ3JvdXBuYW1lX2V4aXN0cyddID0gJ0VyIGJlc3RhYXQgYWwgZWVuIGdyb2VwIG1ldCBkaWUgbmFhbSc7CiRsYW5nWydlZGl0Z3JvdXAnXSA9ICdHcm9lcCBiZXdlcmtlbic7CiRsYW5nWydzdWJtaXQnXSA9ICdWZXJzdHVyZW4nOwokbGFuZ1snY2FuY2VsJ10gPSAnQW5udWxlcmVuJzsKJGxhbmdbJ2RlbGV0ZSddID0gJ1ZlcndpamRlcmVuJzsKJGxhbmdbJ2NvbmZpcm1fZWRpdGdyb3VwJ10gPSAnQXJlIHlvdSBzdXJlIHRoaXMgaXMgdGhlIHByb3BlciBzZXR0aW5ncyBmb3IgdGhpcyBncm91cD9cblR1cm5pbmcgYSBwcm9wZXJ0eSBvZmYgd2lsbCBub3QgZGVsZXRlIGFueSBlbnRyaWVzIGluIHRoZSBwcm9wZXJ0aWVzIHRhYmxlIGZvciB0aGlzIGdyb3VwL3VzZXIuICBUaGV5IHdpbGwgbWVyZWx5IGJlIHVuYXZhaWxhYmxlLic7CiRsYW5nWydhcmV5b3VzdXJlX2RlbGV0ZWdyb3VwJ10gPSAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIGdyb3VwPyc7CiRsYW5nWydjb25maXJtX2RlbGV0ZV9wcm9wJ10gPSAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGNvbXBsZXRlbHkgZGVsZXRlIHRoaXMgcHJvcGVydHk/XG5Eb2luZyBzbyB3aWxsIGFsc28gZXJhc2UgYW55IHVzZXIgZW50cmllcyBmb3IgdGhpcyBwcm9wZXJ0eS4nOwokbGFuZ1snZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJ10gPSAnSW5zdWZmaWNpZW50IFBhcmFtZXRlcnMnOwokbGFuZ1snaWQnXSA9ICdJZCc7CiRsYW5nWyduYW1lJ10gPSAnTmFhbSc7CiRsYW5nWydlcnJvcl9jYW50YWRkZ29ydXAnXSA9ICdQcm9ibGVlbSBiaWogaGV0IHRvZXZvZWdlbiB2YW4gZGUgZ3JvZXAnOwokbGFuZ1snZXJyb3JfaW52YWxpZHBhcmFtcyddID0gJ09uZ2VsZGlnZSBQYXJhbWV0ZXJzJzsKJGxhbmdbJ2FwcGx5ZmlsdGVyJ10gPSAnVG9lcGFzc2VuJzsKJGxhbmdbJ2ZpbHRlciddID0gJ0ZpbHRlcic7CiRsYW5nWyd1c2VyZmlsdGVyJ10gPSAnR2VicnVpa2Vyc25hYW0gUmVndWxhciBFeHByZXNzaW9uJzsKJGxhbmdbJ2Rlc2NyaXB0aW9uJ10gPSAnT21zY2hyaWp2aW5nJzsKJGxhbmdbJ2dyb3VwbmFtZSddID0gJ0dyb2VwIE5hYW0nOwokbGFuZ1snYWNjZXNzZGVuaWVkJ10gPSAnVG9lZ2FuZyBHZXdlaWdlcmQnOwokbGFuZ1snZXJyb3InXSA9ICdGb3V0JzsKJGxhbmdbJ2FkZGdyb3VwJ10gPSAnR3JvZXAgVG9ldm9lZ2VuJzsKJGxhbmdbJ2FkZHVzZXInXSA9ICdHZWJydWlrZXIgVG9ldm9lZ2VuJzsKJGxhbmdbJ3VzZXJzZm91bmQnXSA9ICdVc2VycyBmb3VuZCB0aGF0IG1hdGNoIHRoZSBjcml0ZXJpYSc7CiRsYW5nWydncm91cCddID0gJ0dyb2VwJzsKJGxhbmdbJ3NlbGVjdGdyb3VwJ10gPSAnR3JvZXAgU2VsZWN0ZXJlbic7CiRsYW5nWydyZWdpc3RyYXRpb25fdGVtcGxhdGUnXSA9ICdSZWdpc3RyYXRpZSBTamFibG9vbic7CiRsYW5nWydsb2dvdXRfdGVtcGxhdGUnXSA9ICdVaXRsb2cgU2phYmxvb24nOwokbGFuZ1snbG9naW5fdGVtcGxhdGUnXSA9ICdJbmxvZyBTamFibG9vbic7CiRsYW5nWydwcmVmZXJlbmNlcyddID0gJ1Zvb3JrZXVyZW4nOwokbGFuZ1sndXNlcnMnXSA9ICdHZWJydWlrZXJzJzsKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0Zyb250ZW5kIEdlYnJ1aWtlcnMgTWFuYWdlbWVudCc7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ0JlaGVlciBGcm9udGVuZCBHZWJydWlrZXJzJzsKJGxhbmdbJ2RlZmF1bHRmcm9udHBhZ2UnXSA9ICdTdGFuZGFhcmQgYmlubmVua29tc3QgcGFnaW5hJzsKJGxhbmdbJ2xhc3RhY2Nlc3NlZHBhZ2UnXSA9ICdMYWF0c3QgYmV6b2NodGUgcGFnaW5hJzsKJGxhbmdbJ290aGVycGFnZSddID0gJ0FuZGVyZSBwYWdpbmE6JzsKJGxhbmdbJ2NoYW5nZWxvZyddID0gJzx1bD4NCjxsaT4wLjAuMSAtIE9jdG9iZXIsIDIwMDUgLSBJbml0aWFsIE5SUFQgKE5vdCBSZWFkeSBmb3IgUHJpbWUgVGltZSkgcmVsZWFzZTwvbGk+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>/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[e2lmICRtZXNzYWdlIT0nJ308cD57JG1lc3NhZ2V9PC9wPnsvaWZ9Cnskc3RhcnRmb3JtfQo8dGFibGUgd2lkdGg9IjEwMCUiPgogIDx0cj4KICAgIDx0ZCB3aWR0aD0iNTAlIj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICAgICAgICA8cD48c3Ryb25nPnskaW5mb19taW5wd2xlbn08L3N0cm9uZz48L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9wd2ZsZGxlbn06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfcHdmbGRsZW59PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfbWlucHdsZW59OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X21pbnB3bGVufTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X21heHB3bGVufTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9tYXhwd2xlbn08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF91bmZsZGxlbn06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfdW5mbGRsZW59PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfbWludW5sZW59OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X21pbnVubGVufTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X21heHVubGVufTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9tYXh1bmxlbn08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICAgICAgICA8aHIvPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfc2Vzc2lvbnRpbWVvdXR9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3Nlc3Npb250aW1lb3V0fTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X3NtdHB2YWxpZGF0ZX06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfc210cHZhbGlkYXRlfSZuYnNwOzxzdHJvbmc+eyRpbmZvX3NtdHB2YWxpZGF0ZX08L3N0cm9uZz48L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9hbGxvd19kdXBsaWNhdGVfZW1haWxzfTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9hbGxvd19kdXBsaWNhdGVfZW1haWxzfTxici8+PHN0cm9uZz57JGluZm9fYWxsb3dfZHVwbGljYXRlX2VtYWlsc308L3N0cm9uZz48L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9yZXF1aXJlb25lZ3JvdXB9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3JlcXVpcmVvbmVncm91cH08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9kZmx0Z3JvdXB9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2RmbHRncm91cH08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9yZXF1aXJlZG1hcmtlcn06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfcmVxdWlyZWRtYXJrZXJ9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfcmVxdWlyZWRjb2xvcn06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfcmVxdWlyZWRjb2xvcn08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9oaWRkZW5tYXJrZXJ9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2hpZGRlbm1hcmtlcn08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9oaWRkZW5jb2xvcn06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfaGlkZGVuY29sb3J9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaGlkZGVufXskc3VibWl0fXskY2FuY2VsfTwvcD4KCTwvZGl2PgogICA8dGQ+CiAgIDx0ZCB3aWR0aD0iNTAlIiB2YWxpZ249InRvcCI+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfZm9yZ290cHdfcGFnZX06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfZm9yZ290cHdfcGFnZX08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9jaGFuZ2VzZXR0aW5nc19wYWdlfTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9jaGFuZ2VzZXR0aW5nc19wYWdlfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X2xvZ2luX3BhZ2V9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2xvZ2luX3BhZ2V9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfbG9nb3V0X3BhZ2V9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2xvZ291dF9wYWdlfTwvcD4KCTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9udW1yZXNldHJlY29yZHN9PC9wPgoJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRkYXRhX251bXJlc2V0cmVjb3Jkc308L3A+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+Cgk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3JlbW92ZTF3ZWVrfXskaW5wdXRfcmVtb3ZlMW1vbnRofXskaW5wdXRfcmVtb3ZlYWxsfTwvcD4KICAgICAgPC9kaXY+CiAgIDwvdGQ+CiA8L3RhYmxlPgp7JGVuZGZvcm19Cg==]]></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>
