<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE module [
  <!ELEMENT module (dtdversion,name,version,description*,help*,about*,requires*,file+)>
  <!ELEMENT dtdversion (#PCDATA)>
  <!ELEMENT name (#PCDATA)>
  <!ELEMENT version (#PCDATA)>
  <!ELEMENT mincmsversion (#PCDATA)>
  <!ELEMENT description (#PCDATA)>
  <!ELEMENT help (#PCDATA)>
  <!ELEMENT about (#PCDATA)>
  <!ELEMENT requires (requiredname,requiredversion)>
  <!ELEMENT requiredname (#PCDATA)>
  <!ELEMENT requiredversion (#PCDATA)>
  <!ELEMENT file (filename,isdir,data)>
  <!ELEMENT filename (#PCDATA)>
  <!ELEMENT isdir (#PCDATA)>
  <!ELEMENT data (#PCDATA)>
]>
<module>
	<dtdversion>1.3</dtdversion>
	<name>ECB2</name>
	<version>1.6</version>
    <mincmsversion>2.0</mincmsversion>
	<help><![CDATA[CjxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPgo8cD5Nb2R1bGUgYWRkcyBhZGl0aW9uYWwgY29udGVudCBibG9ja3MgZm9yIENNUyBNYWRlIFNpbXBsZSB2MisuIFRoaXMgaXMgYSBmb3JrIG9mIHRoZSBvcmlnaW5hbCBFQ0IgbW9kdWxlIHRoYXQgd29ya2VkIHdpdGggQ01TTVMgdjEuPC9wPgo8cD5Qcm92aWRlcyB0aGUgZm9sbG93aW5nIGZpZWxkIHR5cGVzOjxicj4KPG9sPgogICA8bGk+ZmlsZV9zZWxlY3RvcjwvbGk+CiAgIDxsaT5jb2xvcl9waWNrZXI8L2xpPgogICA8bGk+ZHJvcGRvd248L2xpPgogICA8bGk+ZHJvcGRvd25fZnJvbV91ZHQ8L2xpPgogICA8bGk+ZHJvcGRvd25fZnJvbV9jdXN0b21nczwvbGk+CiAgIDxsaT5jaGVja2JveDwvbGk+CiAgIDxsaT5tb2R1bGVfbGluazwvbGk+CiAgIDxsaT5saW5rPC9saT4KICAgPGxpPnRpbWVwaWNrZXI8L2xpPgogICA8bGk+ZGF0ZXBpY2tlcjwvbGk+CiAgIDxsaT5pbnB1dDwvbGk+CiAgIDxsaT50ZXh0YXJlYTwvbGk+CiAgIDxsaT5lZGl0b3IgKHRleHRhcmVhIHdpdGggd3lzaXd5Zyk8L2xpPgogICA8bGk+dGV4dCA8L2xpPgogICA8bGk+cGFnZXMgPC9saT4KICAgPGxpPmhyIChob3Jpem9udGFsIGxpbmUpPC9saT4KICAgPGxpPnNvcnRhYmxlbGlzdDwvbGk+CiAgIDxsaT5yYWRpbzwvbGk+CiAgIDxsaT5oaWRkZW48L2xpPgogICA8bGk+ZmllbGRzZXRfc3RhcnQ8L2xpPgogICA8bGk+ZmllbGRzZXRfZW5kPC9saT4KICAgPGxpPmdhbGxlcnlfcGlja2VyPC9saT4KICAgPGxpPmlucHV0X3JlcGVhdGVyPC9saT4KPC9vbD4KPC9wPjxicj4KCjxwPklmIHlvdSBsaWtlIHRoaXMgbW9kdWxlIHBsZWFzZSA8YSBocmVmPSJodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnL2Fib3V0LWxpbmsvZG9uYXRpb25zLyIgdGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJmb250LXdlaWdodDpib2xkOyI+ZG9uYXRlIHRvIENNU01TPC9hPjwvcD48YnI+Cgo8aDM+RmllbGRzPC9oMz4KCjxwPjxzdHJvbmc+ZmlsZV9zZWxlY3Rvcjwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZTogIHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJmaWxlX3NlbGVjdG9yIiBibG9jaz0idGVzdDEwIiBkaXI9ImltYWdlcyIgZmlsZXR5cGVzPSJqcGcsZ2lmLHBuZyIgZXhjbHVkZXByZWZpeD0idGh1bWJfIn0gICAgICAgIDwvcD4KPHA+UGFyYW1ldGVyczoKZmlsZXR5cGVzIC0gY29tbWEgc2VwYXJhdGVkPGJyPgpkaXIgKG9wdGlvbmFsKSAtIGRlZmF1bHQgdXBsb2Fkcy88YnI+CmV4Y2x1ZGVwcmVmaXggKG9wdGlvbmFsKTxicj4KcmVjdXJzZSAob3B0aW9uYWwpIC0gZGVmYXVsdCBmYWxzZSwgcmVjdXJzZT0xIHdpbGwgc2hvdyBhbGwgZmlsZXMgaW4gc3ViZm9sZGVycwpzb3J0ZmlsZXMgKG9wdGlvbmFsKTxicj4KcHJldmlldyAob3B0aW9uYWwpIC0gb25seSBmb3IgaW1hZ2VzPGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcgo8L3A+PGJyPgoKPHA+PHN0cm9uZz5jb2xvcl9waWNrZXI8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6ICB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iY29sb3JfcGlja2VyIiBibG9jaz0idGVzdDEiIGxhYmVsPSJDb2xvciIgZGVmYXVsdF92YWx1ZT0iIzAwMDAwMCJ9PC9wPgo8cD5QYXJhbWV0ZXJzOgpkZWZhdWx0X3ZhbHVlIChvcHRpb25hbCk8YnI+CnNpemUgKG9wdGlvbmFsKSAtIGRlZmF1bHQgMTA8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+CgoKCjxwPjxzdHJvbmc+ZHJvcGRvd248L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJkcm9wZG93biIgYmxvY2s9InRlc3Q1IiBsYWJlbD0iRnJ1aXQiICB2YWx1ZXM9IkFwcGxlPWFwcGxlLE9yYW5nZT1vcmFuZ2UiIGZpcnN0X3ZhbHVlPSJzZWxlY3QgZnJ1aXQifTwvcD4KPHA+UGFyYW1ldGVyczoKdmFsdWVzIChyZXF1aXJlZCkgLSBjb21tYSBzZXBhcmF0ZWQuIEV4YW1wbGU6IEFwcGxlPWFwcGxlLE9yYW5nZT1vcmFuZ2UsR3JlZW49Z3JlZW4gPGJyPgpmaXJzdF92YWx1ZSAob3B0aW9uYWwpPGJyPgptdWx0aXBsZSAob3B0aW9uYWwpIC0gYWRkIG11bHRpcGxlIG9wdGlvbiBzZWxlY3Qgc3VwcG9ydDxicj4Kc2l6ZSAob3B0aW9uYWwpIC0gbXVsdGlwbGUgZW5hYmxlZCBvbmx5PGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcjxicj4KY29tcGFjdCAob3B0aW9uYWwpIC0gZGVmYXVsdDpmYWxzZSAtIGlmIHNldCwgYSBzdW1tYXJ5IG9mIHRoZSBzZWxlY3RlZCBvcHRpb25zIGlzIGRpc3BsYXllZCBhbmQgdGhlIGZ1bGwgc2VsZWN0IGlzIHNob3duL2hpZGRlbiB3aGVuICdlZGl0L2hpZGUnIGlzIGNsaWNrZWQKPC9wPjxicj4KCgoKPHA+PHN0cm9uZz5kcm9wZG93bl9mcm9tX3VkdDwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImRyb3Bkb3duX2Zyb21fdWR0IiBibG9jaz0idGVzdDIiIGxhYmVsPSJHYWxsZXJ5IiB1ZHQ9Im15Y3VzdG9tdWR0IiAgZmlyc3RfdmFsdWU9Ij1zZWxlY3Q9In08L3A+CjxwPk91cHV0IGZyb20gVURUIG11c3QgYmUgYXJyYXkoKSAtIGV4YW1wbGU6IHJldHVybiBhcnJheSgibGFiZWwiPT4idmFsdWUiLCAibGFiZWwgMiAiPT4idmFsdWUgMiIpPC9wPgo8cD5QYXJhbWV0ZXJzOgp1ZHQgKHJlcXVpcmVkKSAtIHVkdCBuYW1lPGJyPgpmaXJzdF92YWx1ZSAob3B0aW9uYWwpIDxicj4KbXVsdGlwbGUgKG9wdGlvbmFsKSAtIGFkZCBtdWx0aXBsZSBvcHRpb24gc2VsZWN0IHN1cHBvcnQ8YnI+CnNpemUgKG9wdGlvbmFsKSAtIG11bHRpcGxlIGVuYWJsZWQgb25seTxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3I8YnI+CmNvbXBhY3QgKG9wdGlvbmFsKSAtIGRlZmF1bHQ6ZmFsc2UgLSBpZiBzZXQsIGEgc3VtbWFyeSBvZiB0aGUgc2VsZWN0ZWQgb3B0aW9ucyBpcyBkaXNwbGF5ZWQgYW5kIHRoZSBmdWxsIHNlbGVjdCBpcyBzaG93bi9oaWRkZW4gd2hlbiAnZWRpdC9oaWRlJyBpcyBjbGlja2VkCjwvcD4KPHA+PHN0cm9uZz5FeGFtcGxlcyBVRFQ8L3N0cm9uZz46Cjxicj4KPGEgaHJlZj0iaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20va3V6bWFueS82Nzc5YzE5M2I4MTA0YWE2YWJmZSI+R2FsbGVyeSBsaXN0IGZyb20gR2FsbGVyeSBtb2R1bGU8L2E+IDxicj4KPGEgaHJlZj0iaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20va3V6bWFueS80NjQyNzZlMTZmM2I3NGMwNzU1NSI+R3JvdXAgbGlzdCBmcm9tIEZFVTwvYT4gPGJyPgo8YSBocmVmPSJodHRwczovL2dpc3QuZ2l0aHViLmNvbS9rdXptYW55LzUxNTgzYzY0MzljYjA0MTY3OWE2Ij5Vc2VycyBsaXN0IGZyb20gRkVVPC9hPgo8L3A+PGJyPgoKCjxwPjxzdHJvbmc+ZHJvcGRvd25fZnJvbV9jdXN0b21nczwvc3Ryb25nPiA8c3BhbiBzdHlsZT0iY29sb3I6cmVkOyI+bmV3PC9zcGFuPjwvcD4KPHA+UHJvdmlkZXMgYSBzaW5nbGUgb3IgbXVsdGlwbGUgc2VsZWN0IHVzaW5nIHRoZSBjb250ZW50IHNldCBpbiBhIEN1c3RvbUdTIE1vZHVsZSBmaWVsZC48L3A+CjxwPlJlcXVpcmVzIHRoZSBDdXN0b21HUyBtb2R1bGUgYW5kIHRvIGhhdmUgYSBmaWVsZCBvZiB0eXBlICd0ZXh0IGFyZWEnLjwvcD4KPHA+RXhhbXBsZToKICAgICAge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0nRUNCMicgZmllbGQ9J2Ryb3Bkb3duX2Zyb21fY3VzdG9tZ3MnIGN1c3RvbWdzX2ZpZWxkPSdTZWN0aW9uX1N0eWxlcycgYmxvY2s9c3R5bGUxIGxhYmVsPSdTZWN0aW9uIDEgTGF5b3V0IFN0eWxlJyBhc3NpZ249c3R5bGUxfTwvcD4KPHA+UGFyYW1ldGVyczo8L3A+Cjx1bD4KICAgPGxpPmN1c3RvbWdzX2ZpZWxkIChyZXF1aXJlZCkgLSBuYW1lIG9mIGN1c3RvbWdzX2ZpZWxkIHRvIHJldHJpZXZlICh3aXRoIHVuZGVyc2NvcmVzIG5vdCBzcGFjZXMpPC9saT4KICAgPGxpPmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhbiBvcHRpb25hbCBkZXNjcmlwdGlvbiBvZiB0aGUgZmllbGQ8L2xpPgogICA8bGk+bXVsdGlwbGUgKG9wdGlvbmFsKSAtIGFuIG9wdGlvbiBpZiBzZXQsIHRvIG91cHV0IGEgbXVsdGktc2VsZWN0IGJveCByYXRoZXIgdGhhbiBhIHNpbmdsZSBzZWxlY3QgZHJvd25kb3duPC9saT4KICAgPGxpPnNpemUgKG9wdGlvbmFsKSAtIGFuIG9wdGlvbiB0byBzZXQgdGhlIHNpemUgb2YgYSBtdWx0aS1zZWxlY3QgYm94PC9saT4KICAgPGxpPmNvbXBhY3QgKG9wdGlvbmFsKSAtIGRlZmF1bHQ6ZmFsc2UgLSBpZiBzZXQsIGEgc3VtbWFyeSBvZiB0aGUgc2VsZWN0ZWQgb3B0aW9ucyBpcyBkaXNwbGF5ZWQgYW5kIHRoZSBmdWxsIHNlbGVjdCBpcyBzaG93bi9oaWRkZW4gd2hlbiAnZWRpdC9oaWRlJyBpcyBjbGlja2VkPC9saT4KPC91bD4KPGJyPgoKCgo8cD48c3Ryb25nPmNoZWNrYm94PC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iY2hlY2tib3giIGJsb2NrPSJ0ZXN0MTEiIGxhYmVsPSJDaGVja2JveCIgZGVmYXVsdF92YWx1ZT0iMSJ9PC9wPgo8cD5QYXJhbWV0ZXJzOgpkZWZhdWx0X3ZhbHVlIChvcHRpb25hbCk8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPm1vZHVsZV9saW5rPC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0ibW9kdWxlX2xpbmsiIGxhYmVsPSJNb2R1bGUgZWRpdCIgYmxvY2s9InRlc3QzIiBtb2Q9IkNhdGFsb2dlciIgdGV4dD0iRWRpdCBjYXRhbG9nIiB9PC9wPgo8cD5QYXJhbWV0ZXJzOgptb2QgKHJlcXVpcmVkKSA8YnI+CnRleHQgKHJlcXVpcmVkKSA8YnI+CnRhcmdldCAob3B0aW9uYWwpIC0gZGVmYXVsdCBfc2VsZjxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+bGluazwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImxpbmsiIGxhYmVsPSJTZWFyY2giIGJsb2NrPSJ0ZXN0NCIgdGFyZ2V0PSJfYmxhbmsiIGxpbms9Imh0dHA6Ly93d3cuYmluZy5jb20iIHRleHQ9ImJpbmcgc2VhcmNoIn08L3A+CjxwPlBhcmFtZXRlcnM6CmxpbmsgKHJlcXVpcmVkKSA8YnI+CnRleHQgKHJlcXVpcmVkKSA8YnI+CnRhcmdldCAob3B0aW9uYWwpIC0gZGVmYXVsdCBfc2VsZjxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+dGltZXBpY2tlcjwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9InRpbWVwaWNrZXIiIGxhYmVsPSJUaW1lIiBibG9jaz0idGVzdDQ1In08L3A+CjxwPlBhcmFtZXRlcnM6CnNpemUgKG9wdGlvbmFsKSBkZWZhdWx0IDEwMDxicj4KdGltZV9mb3JtYXQgKG9wdGlvbmFsKSBkZWZhdWx0IEhIOjpzczxicj4KbWF4X2xlbmd0aCAob3B0aW9uYWwpIGRlZmF1bHQgMTA8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPmRhdGVwaWNrZXI8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJkYXRlcGlja2VyIiBsYWJlbD0iRGF0ZSIgYmxvY2s9InRlc3Q0NCJ9PC9wPgo8cD5QYXJhbWV0ZXJzOgpzaXplIChvcHRpb25hbCkgZGVmYXVsdCAxMDA8YnI+CmRhdGVfZm9ybWF0IChvcHRpb25hbCkgZGVmYXVsdCB5eS1tbS1kZDxicj4KdGltZSAob3B0aW9uYWwpIC0gYWRkIHRpbWUgcGlja2VyIGRlZmF1bHQgMDxicj4KdGltZV9mb3JtYXQgKG9wdGlvbmFsKSBkZWZhdWx0IEhIOjpzczxicj4KbWF4X2xlbmd0aCAob3B0aW9uYWwpIGRlZmF1bHQgMTAgPGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcgo8L3A+PGJyPgoKPHA+PHN0cm9uZz5pbnB1dDwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImlucHV0IiBsYWJlbD0iVGV4dCIgYmxvY2s9InRlc3Q1IiBzaXplPTU1IG1heF9sZW5ndGg9NTUgZGVmYXVsdF92YWx1ZT0iZmlsbCBpdCJ9PC9wPgo8cD5QYXJhbWV0ZXJzOgpzaXplIChvcHRpb25hbCkgZGVmYXVsdCAzMDxicj4KbWF4X2xlbmd0aCAob3B0aW9uYWwpIGRlZmF1bHQgMjU1IDxicj4KZGVmYXVsdF92YWx1ZSAob3B0aW9uYWwpIC0gZGVmYXVsdCB2YWx1ZSBmb3IgaW5wdXQ8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPnRleHRhcmVhPC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0idGV4dGFyZWEiIGxhYmVsPSJUZXh0YXJlYSIgYmxvY2s9InRlc3Q2IiByb3dzPTEwIGNvbHM9NDAgZGVmYXVsdF92YWx1ZT0iZmlsbCBpdCJ9PC9wPgo8cD5QYXJhbWV0ZXJzOgpyb3dzIChvcHRpb25hbCkgZGVmYXVsdCAyMDxicj4KY29scyAob3B0aW9uYWwpIGRlZmF1bHQgODAgPGJyPgpkZWZhdWx0X3ZhbHVlIChvcHRpb25hbCkgLSBkZWZhdWx0IHZhbHVlIGZvciB0ZXh0YXJlYTxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+ZWRpdG9yICh0ZXh0YXJlYSB3aXRoIHd5c2l3eWcpPC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iZWRpdG9yIiBsYWJlbD0iVGV4dGFyZWEiIGJsb2NrPSJ0ZXN0NyIgcm93cz0xMCBjb2xzPTQwIGRlZmF1bHRfdmFsdWU9ImZpbGwgaXQifTwvcD4KPHA+UGFyYW1ldGVyczoKcm93cyAob3B0aW9uYWwpIGRlZmF1bHQgMjA8YnI+CmNvbHMgKG9wdGlvbmFsKSBkZWZhdWx0IDgwIDxicj4KZGVmYXVsdF92YWx1ZSAob3B0aW9uYWwpIC0gZGVmYXVsdCB2YWx1ZSBmb3IgdGV4dGFyZWE8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPnRleHQgPC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0idGV4dCIgbGFiZWw9IlRleHQiIGJsb2NrPSJ0ZXN0OCIgdGV4dD0iSGVsbG8gd29yZCEifTwvcD4KPHA+UGFyYW1ldGVyczoKdGV4dCAocmVxdWlyZWQpIHRleHQgaW4gYWRtaW4gKGFkZCBpbmZvcm1hdGlvbiBmb3IgdXNlcnMpPGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcgo8L3A+PGJyPgoKPHA+PHN0cm9uZz5wYWdlcyA8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJwYWdlcyIgbGFiZWw9IlBhZ2UiIGJsb2NrPSJ0ZXN0MTAifTwvcD4KPHA+UGFyYW1ldGVyczoKZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+aHIgKGhvcml6b250YWwgbGluZSk8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJociIgbGFiZWw9Ik90aGVyIGJsb2NrcyIgYmxvY2s9ImJsb2NrbmFtZSJ9PHA+ClBhcmFtZXRlcnM6CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPnNvcnRhYmxlbGlzdDwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9InNvcnRhYmxlbGlzdCIgYmxvY2s9InRlc3Rzb3J0YWJsZWxpc3QiIGxhYmVsPSJDaG9vc2UgZnJ1aXQiIHVkdD0ibXlkdXQifTwvcD4KPHA+UGFyYW1ldGVyczoKdmFsdWVzIChvcHRpb25hbCkgLSBjb21tYSBzZXBhcmF0ZWQuIEV4YW1wbGU6IFwnQXBwbGU9YXBwbGUsT3JhbmdlPW9yYW5nZSxHcmVlbj1ncmVlbix2YWx1ZT1MYWJlbFwnIDxicj4KdWR0IChvcHRpb25hbCkgLSBuYW1lIG9mIHVkdCB0aGF0IHJldHVybnMgYW4gYXJyYXkgaW4gdGhlIGZvcm1hdCBcJ3ZhbHVlXCcgPT4gXCdMYWJlbFwnLDxicj4KZmlyc3RfdmFsdWUgKG9wdGlvbmFsKTxicj4KbGFiZWxfbGVmdCAob3B0aW9uYWwpPGJyPgpsYWJlbF9yaWdodCAob3B0aW9uYWwpPGJyPgptYXhfbnVtYmVyIChvcHRpb25hbCkgLSBsaW1pdHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGJlIHNlbGVjdGVkPGJyPgpyZXF1aXJlZF9udW1iZXIgKG9wdGlvbmFsKSAtIHNldHMgYSBzcGVjaWZpYyBudW1iZXIgb2YgaXRlbXMgdGhhdCBtdXN0IGJlIHNlbGVjdGVkIChvciBub25lKTxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+cmFkaW88L3N0cm9uZz4gPC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0icmFkaW8iIGJsb2NrPSJ0ZXN0MTciIGxhYmVsPSJGcnVpdCIgdmFsdWVzPSJBcHBsZT1hcHBsZSxPcmFuZ2U9b3JhbmdlLEtpd2lmcnVpdD1raXdpZnJ1aXQiIGRlZmF1bHRfdmFsdWU9Ik9yYW5nZSJ9PC9wPgo8cD5QYXJhbWV0ZXJzOgp2YWx1ZXMgKHJlcXVpcmVkKSAtIGNvbW1hIHNlcGFyYXRlZC4gRXhhbXBsZTogQXBwbGU9YXBwbGUsT3JhbmdlPW9yYW5nZSxLaXdpZnJ1aXQ9a2l3aWZydWl0PGJyPgpkZWZhdWx0X3ZhbHVlIChvcHRpb25hbCkgLSBkZWZhdWx0IGlzIGZpcnN0IGNob2ljZSAtIHNldCB0byBkZWZhdWx0IHZhbHVlIGUuZy4gIk9yYW5nZSIKaW5saW5lIChvcHRpb25hbCkgLSBpZiBzZXQgZGlzcGxheXMgYWRtaW4gcmFkaW8gYnV0dG9ucyBpbmxpbmU8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPmhpZGRlbjwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0nRUNCMicgYmxvY2s9J3Rlc3QxOGhpZGRlbicgYXNzaWduPSd0ZXN0aGlkZGVuJyBmaWVsZD0naGlkZGVuJyB2YWx1ZT0nbWFya2VydmFsdWUnfTxicj4KQ2FuIGJlIHVzZWQgdG8gc2V0IGEgcGFnZSBhdHRyaWJ1dGUgdGhhdCBjYW4gdGhlbiBiZSBhY2Nlc3NlZCAoZS5nLiBmcm9tIGEgTmF2aWdhdG9yLVRlbXBsYXRlKSwgdXNpbmcge3BhZ2VfYXR0ciBwYWdlPSRub2RlLT5hbGlhcyBrZXk9J3Rlc3RoaWRkZW4nfTwvcD4KPHA+UGFyYW1ldGVyczoKdmFsdWUgKHJlcXVpcmVkKSAtIGhpZGRlbiB2YWx1ZSB0byBiZSBzYXZlZDxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+ZmllbGRzZXRfc3RhcnQ8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9J0VDQjInIGZpZWxkPSdmaWVsZHNldF9zdGFydCcgbGFiZWw9JyYgbmJzcDsnIGJsb2NrPSd0ZXN0MTlmaWVsZHNldCcgYXNzaWduPSd0ZXN0MTlmaWVsZHNldCcgbGVnZW5kPSdGaWVsZHNldCBUZXN0IExlZ2VuZCcgZGVzY3JpcHRpb249J0NhbiBhZGQgYSBkZXNjcmlwdGlvbiBpbiBoZXJlJ308YnI+CkNyZWF0ZXMgdGhlIHN0YXJ0IG9mIGEgZmllbGRzZXQgZm9yIGdyb3VwaW5nIHJlbGF2YW50IGFkbWluIGZpZWxkcyB0b2dldGhlci4gTm90ZTogYSBtYXRjaGluZyAnZmllbGRzZXRfZW5kJyBibG9jayBpcyByZXF1aXJlZCBmb3IgZWFjaCBmaWVsZHNldF9zdGFydC48YnI+ClRJUDogc2V0IGxhYmVsPScmIG5ic3A7JyB0byBub3Qgc2hvdyB0aGUgZmllbGQgbGFiZWwuPC9wPgo8cD5QYXJhbWV0ZXJzOgpsZWdlbmQgKG9wdGlvbmFsKSAtIGFkZHMgYW4gb3B0aW9uYWwgbGVnZW5kIChkZWZhdWx0ID0gbm8gbGVnZW5kKTxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+ZmllbGRzZXRfZW5kPC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0nZmllbGRzZXRfZW5kJyBsYWJlbD0nJiBuYnNwOycgYmxvY2s9J3Rlc3QxOWZpZWxkc2V0ZW5kJyBhc3NpZ249J3Rlc3QxOWZpZWxkc2V0ZW5kJyB9PGJyPgpDcmVhdGVzIHRoZSBlbmQgb2YgYSBmaWVsZHNldCBmb3IgZ3JvdXBpbmcgcmVsYXZhbnQgYWRtaW4gZmllbGRzIHRvZ2V0aGVyLiBOb3RlOiBhIG1hdGNoaW5nICdmaWVsZHNldF9zdGFydCcgYmxvY2sgaXMgcmVxdWlyZWQgZm9yIGVhY2ggZmllbGRzZXRfZW5kLjxicj4KVElQOiBzZXQgbGFiZWw9JyYgbmJzcDsnIHRvIG5vdCBzaG93IHRoZSBmaWVsZCBsYWJlbC4KPC9wPjxicj4KCgo8cD48c3Ryb25nPmdhbGxlcnlfcGlja2VyPC9zdHJvbmc+IDxzcGFuIHN0eWxlPSJjb2xvcjpyZWQ7Ij5uZXc8L3NwYW4+PC9wPgo8cD5Qcm92aWRlcyBhIGdhbGxlcnkgcGlja2VyIGZvciB0aGUgR2FsbGVyeSBtb2R1bGUuPC9wPgo8cD5FeGFtcGxlOgogICAgICB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0nZ2FsbGVyeV9waWNrZXInIGJsb2NrPXBhZ2VUb3BHYWxsZXJ5IGxhYmVsPSdQYWdlIFRvcCBHYWxsZXJ5JyBkaXI9J3BhZ2UtdG9wLWdhbGxlcmllcyd9PC9wPgo8cD5QYXJhbWV0ZXJzOjwvcD4KPHVsPgogICA8bGk+ZGlyIChvcHRpb25hbCkgLSBvbmx5IHJldHVybnMgZ2FsbGVyaWVzIHRoYXQgYXJlIHN1Yi1nYWxsZXJpZXMgb2YgdGhpcyBnYWxsZXJ5IGRpciwgZGVmYXVsdCBpcyBhbGwgZ2FsbGVyaWVzLCBleGNsdWRpbmcgZGVmYXVsdCB0b3AgbGV2ZWwgZ2FsbGVyeTwvbGk+CiAgIDxsaT5kZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYSBkZXNjcmlwdGlvbiBvZiB0aGUgZmllbGQ8L2xpPgo8L3VsPgo8YnI+CgoKPHA+PHN0cm9uZz5pbnB1dF9yZXBlYXRlcjwvc3Ryb25nPiA8c3BhbiBzdHlsZT0iY29sb3I6cmVkOyI+bmV3PC9zcGFuPjwvcD4KPHA+UHJvdmlkZXMgb25lIG9yIG1vcmUgdGV4dCBpbnB1dHMgdGhhdCBjYW4gYmUgYWRkZWQgb3IgcmVtb3ZlZCBieSB0aGUgZWRpdG9yLjwvcD4KPHA+VGhlIGNvbnRlbnQgYmxvY2sgb3V0cHV0IGlzIGEgc3RyaW5nIHdpdGggZWFjaCBpbnB1dCBmaWVsZCdzIGNvbnRlbnRzIGRlbGltaXRlciBieSAnfHwnLiBUbyBtYWtlIHRoZSBvdXRwdXQgYSBtb3JlIHVzZWZ1bCBhcnJheSB1c2UgJ2V4cGxvZGUnLCBlLmcuIHsifHwifGV4cGxvZGU6JGNvbnRlbnRfYmxvY2tfbmFtZX08L3A+CjxwPkV4YW1wbGU6CiAgICAgIHskaW5wdXRfcmVwZWF0ZXJfdGVzdD0ifHwifGV4cGxvZGU6Intjb250ZW50X21vZHVsZSBtb2R1bGU9J0VDQjInIGZpZWxkPSdpbnB1dF9yZXBlYXRlcicgbGFiZWw9J1Rlc3QgMjI6IGlucHV0X3JlcGVhdGVyJyBibG9jaz0ndGVzdDIyJyBzaXplPTUwIG1heF9sZW5ndGg9MjU1IGRlc2NyaXB0aW9uPSdQcmVzcyAoKykgYW5kICgtKSB0byBhZGQgYW5kIHJlbW92ZSBhZGRpdGlvbmFsIGlucHV0IGZpZWxkcyd9IiBzY29wZT1nbG9iYWx9PC9wPgo8cD5UbyB1c2U6IHskaW5wdXRfcmVwZWF0ZXJfdGVzdHxwcmludF9yfTwvcD4KPGJyPgoKCgo8aDM+VXBncmFkZSBmcm9tIEVDQjwvaDM+CjxwPkluc3RhbGwgRUNCMiBtb2R1bGUgYW5kIGNoYW5nZSBhbGwgIm1vZHVsZSIgcGFyYW1ldGVycywgaW4gY29udGVudF9tb2R1bGUgdGFncyB0byBiZSBtb2R1bGU9IkVDQjIiICh3YXMgIkVDQiIpLiBUaGVuIEVDQiBjYW4gYmUgdW5pbnN0YWxsZWQuPC9wPjxicj4KCgoKPGgzPlN1cHBvcnQ8L2gzPgo8cD5BcyBwZXIgdGhlIEdQTCBsaWNlbmNlLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzIGlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dCBvZiB0aGUgbGljZW5zZSBmb3IgdGhlIGZ1bGwgZGlzY2xhaW1lci4KVGhlIG1vZHVsZSBhdXRob3IgaXMgbm90IG9ibGlnYXRlZCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoaXMgY29kZS4gSG93ZXZlciB5b3UgbWlnaHQgZ2V0IHN1cHBvcnQgdGhyb3VnaCB0aGUgZm9sbG93aW5nOjwvcD4KPHVsPgogICA8bGk+Rm9yIHN1cHBvcnQsIGZpcnN0IDxzdHJvbmc+c2VhcmNoPC9zdHJvbmc+IHRoZSA8YSBocmVmPSIvL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW08L2E+LCBmb3IgaXNzdWVzIHdpdGggdGhlIG1vZHVsZSBzaW1pbGFyIHRvIHRob3NlIHlvdSBhcmUgZmluZGluZy48L2xpPgogICA8bGk+VGhlbiwgaWYgbmVjZXNzYXJ5LCBvcGVuIGEgPHN0cm9uZz5uZXcgZm9ydW0gdG9waWM8L3N0cm9uZz4gdG8gcmVxdWVzdCBoZWxwLCB3aXRoIGEgdGhvcm91Z2ggZGVzY3JpcHRpb24gb2YgeW91ciBpc3N1ZSwgYW5kIHN0ZXBzIHRvIHJlcHJvZHVjZSBpdC48L2xpPgogICA8bGk+SWYgeW91IGZpbmQgYSBidWcgeW91IGNhbiA8YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL2J1Zy9saXN0LzEzNjYiPnN1Ym1pdCBhIEJ1ZyBSZXBvcnQ8L2E+LjwvbGk+CiAgIDxsaT5Gb3IgYW55IGdvb2QgaWRlYXMgeW91IGNhbiA8YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL2ZlYXR1cmVfcmVxdWVzdC9saXN0LzEzNjYiPnN1Ym1pdCBhIEZlYXR1cmUgUmVxdWVzdDwvYT4uPC9saT4KICAgPGxpPklmIHlvdSBmb3VuZCB0aGUgTW9kdWxlIHVzZWZ1bCAtIHNob3V0IG91dCB0byBtZSBvbiBUd2l0dGVyIDxhIGhyZWY9Ii8vdHdpdHRlci5jb20vS2l3aUNocmlzQlQiPkBLaXdpQ2hyaXNCVDwvYT48L2xpPgo8L3VsPjxicj4KCgoKPGgzPkNvcHlyaWdodCAmYW1wOyBMaWNlbmNlPC9oMz4KPHA+Q29weXJpZ2h0IMKpIDIwMTksIENocmlzIFRheWxvciA8Y2hyaXMgYXQgYmlubm92YXRpdmUgZG90IGNvIGRvdCB1az4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD48YnI+CjxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIHJlbGVhc2VkIHVuZGVyIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdjMuIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiBZb3UgbWF5IG9ubHkgdXNlIHRoaXMgc29mdHdhcmUgd2hlbiB0aGVyZSBpcyBhIGNsZWFyIGFuZCBvYnZpb3VzIGluZGljYXRpb24gaW4gdGhlIGFkbWluIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBTaW1wbGUhPC9wPjxicj4KPGJyPg==]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBDaHJpcyBUYXlsb3IgKHR3aXR0ZXIuY29tL0tpd2lDaHJpc0JUKSAmbHQ7Y2hyaXNAYmlubm92YXRpdmUuY28udWsmZ3Q7PGJyIC8+PGJyIC8+VmVyc2lvbjogMS42PGJyIC8+PGJyIC8+Q2hhbmdlIEhpc3Rvcnk6PGJyIC8+CjxoMz5WZXJzaW9uIDEuNiAtIDAzSnVuMjA8L2gzPgo8dWw+CiAgIDxsaT5hbGwgJ2Ryb3Bkb3duJyBjb250ZW50IGJsb2NrcyBub3cgaGF2ZSB0aGUgb3B0aW9uIGZvciBhICdjb21wYWN0JyBkaXNwbGF5IG9uIHRoZSBhZG1pbiBwYWdlLiBTZXQgImNvbXBhY3Q9MSIgaW4gdGhlIHBhcmFtZXRlcnMgYSBzdW1tYXJ5IG9mIHRoZSBzZWxlY3RlZCBvcHRpb25zIGlzIGRpc3BsYXllZCBhbmQgdGhlIGZ1bGwgc2VsZWN0IGlzIHNob3duL2hpZGRlbiB3aGVuICdlZGl0L2hpZGUnIGlzIGNsaWNrZWQ8L2xpPgogICA8bGk+ZmlsZV9zZWxlY3RvciBjb250ZW50IGJsb2NrIC0gdXBkYXRlZCBub3cgdXNlcyBjb3JlIG1ldGhvZCBpbnN0ZWFkIG9mIENHRXh0ZW5zaW9uczwvbGk+CiAgIDxsaT5yZW1vdmVkIENHRXh0ZW5zaW9ucyBkZXBlbmRhbmN5PC9saT4KICAgPGxpPkJ1ZyBmaXg6IGRlZmF1bHQgdmFsdWUgbm93IHdvcmtzIGZvciBjaGVja2JveCwgaW5wdXQsIHRleHRhcmVhICYgZWRpdG9yIGNvbnRlbnQgYmxvY2tzPC9saT4KPC91bD4KPGJyPgoKPGgzPlZlcnNpb24gMS41LjMgLSAxN0p1bjE5PC9oMz4KPHVsPgogICA8bGk+bWlub3IgYnVnIGZpeCBpbiBoZWxwPC9saT4KPC91bD4KPGJyPgoKPGgzPlZlcnNpb24gMS41LjIgLSAxOUZlYjE5PC9oMz4KPHVsPgogICA8bGk+YnVnIGZpeCAtIGFkbWluIGpzIHVwZGF0ZWQgLSBmaXhlcyB2MS41LjEgbXVsdGlwbGUgc2VsZWN0J3MgJiBpbnB1dF9yZXBlYXRlciBub3Qgd29ya2luZyAtIHBsZWFzZSB1cGRhdGU8L2xpPgo8L3VsPgo8YnI+Cgo8aDM+VmVyc2lvbiAxLjUuMSAtIDE4RmViMTk8L2gzPgo8dWw+CiAgIDxsaT5nYWxsZXJ5X3BpY2tlciAtIGJ1ZyBmaXg8L2xpPgo8L3VsPgo8YnI+Cgo8aDM+VmVyc2lvbiAxLjUgLSAxNkZlYjE5PC9oMz4KPHVsPgogICA8bGk+aW5wdXRfcmVwZWF0ZXIgY29udGVudCBibG9jayAtIGFkZGVkIC0gdGhhbmtzIHRvIFNpbW9uIFJhZGZvcmQ8L2xpPgogICA8bGk+Z2FsbGVyeV9waWNrZXIgY29udGVudCBibG9jayAtIGFkZGVkPC9saT4KICAgPGxpPmRyb3Bkb3duX2Zyb21fY3VzdG9tZ3MgY29udGVudCBibG9jayAtIGFkZGVkPC9saT4KICAgPGxpPmFkZGVkIGVycm9yIG1lc3NhZ2UgZm9yIG1pc3Npbmcgb3IgaW5jb3JyZWN0bHkgc3BlbHQgZmllbGQgcGFyYW1hdGVyIC0gQlIjMTE1NTcgLSB0aGFua3MgTHVkZ2VyPC9saT4KICAgPGxpPnJlbW92ZWQgQWRtaW4gcGFnZSB0aGF0IG9ubHkgc2hvd2VkIGhlbHAgLSByZWR1bmRhbnQgYXMgaGVscCBlYXNpbHkgdmlzaWJsZSBmcm9tIHdpdGhpbiBNb2R1bGUgTWFuYWdlcjwvbGk+CiAgIDxsaT5yZW1vdmVkIFBlcm1pc3Npb24gJ1VzZSBFQ0IyJyAtIGFsc28gcmVkdW5kYW50PC9saT4KICAgPGxpPmNvZGUgdGlkeSB1cCAtIGNvbnNvbGlkYXRlIGpzICYgY3NzIGludG8gc2VwYXJhdGUgZXh0ZXJuYWwgZmlsZXM8L2xpPgo8L3VsPgo8YnI+Cgo8aDM+VmVyc2lvbiAxLjMuMSAtIDEySnVsMTc8L2gzPgo8dWw+CiAgIDxsaT5taW5vciBidWcgZml4PC9saT4KPC91bD4KPGJyPgoKPGgzPlZlcnNpb24gMS4zIC0gMTFKdWwxNzwvaDM+Cjx1bD4KICAgPGxpPnNvcnRhYmxlbGlzdCAtIGFkZGVkIG1heF9udW1iZXIgYW5kIHJlcXVpcmVkX251bWJlciBvcHRpb25zPC9saT4KICAgPGxpPkFkZGVkICdmaWVsZHNldF9zdGFydCcgYW5kICdmaWVsZHNldF9lbmQnIGZpZWxkczwvbGk+CjwvdWw+Cjxicj4KCjxoMz5WZXJzaW9uIDEuMi4yIC0gMDVKdWwxNzwvaDM+Cjx1bD4KICAgPGxpPnRlc3QgZm9yIGFuZCBkaXNwbGF5IHdhcm5pbmcgaW4gYWRtaW4gaWYgVURUIGRvZXMgbm90IGV4aXN0PC9saT4KPC91bD4KPGJyPgoKPGgzPlZlcnNpb24gMS4yLjEgLSAxOUFwcjE3PC9oMz4KPHVsPgogICA8bGk+YnVnIGZpeCBmb3IgY29sb3JfcGlja2VyLCBkZWZhdWx0X3ZhbHVlIC0gQlIjMTEzNTQgLSB0aGFua3MgU3R1YXJ0PC9saT4KICAgPGxpPmNvbG9yX3BpY2tlciAtIHR3ZWFrZWQgbGF5b3V0PC9saT4KICAgPGxpPnNvcnRhYmxlbGlzdCAtIG5vdyB1c2UganF1ZXJ5IHNvcnRhYmxlIGluc3RlYWQgb2YgQ0dFeHRlbnNpb25zLiBQYXJhbWV0ZXJzIHJlbW92ZWQ6ICd0ZW1wbGF0ZScuIFBhcmFtZXRlcnMgbm90IG9wZXJhdGlvbmFsOiAnbWF4X3NlbGVjdGVkJywgJ2FsbG93ZHVwbGljYXRlcycgKHBsZWFzZSBhZHZpc2UgaWYgeW91IHJlcXVpcmUgdGhlc2UpLiBQbHVzIHNvbWUgYnVnIGZpeGVzLjwvbGk+CjwvdWw+Cjxicj4KCjxoMz5WZXJzaW9uIDEuMiAtIDA3Tm92MTY8L2gzPgo8dWw+CiAgIDxsaT5BZGRlZCAnZGVzY3JpcHRpb24nIHBhcmFtZXRlciBmb3IgYWxsIGZpZWxkcyAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcjwvbGk+CiAgIDxsaT5BZGRlZCAnaGlkZGVuJyBmaWVsZCAtIENhbiBiZSB1c2VkIHRvIHNldCBhIHBhZ2UgYXR0cmlidXRlIHRoYXQgY2FuIHRoZW4gYmUgYWNjZXNzZWQgKGUuZy4gZnJvbSBhIE5hdmlnYXRvci1UZW1wbGF0ZSksIHVzaW5nIHtwYWdlX2F0dHIgcGFnZT0kbm9kZS0+YWxpYXMga2V5PSd0ZXN0aGlkZGVuJ308L2xpPgogICA8bGk+QnVnIGZpeCAtIGZvciBwaHAgbm90aWNlPC9saT4KPC91bD4KPGJyPgoKPGgzPlZlcnNpb24gMS4xIC0gMTVBcHIxNjwvaDM+Cjx1bD4KICAgIDxsaT5CdWcgZml4PC9saT4KPC91bD4KPGJyPgoKPGgzPlZlcnNpb24gMS4wIC0gMTVBcHIxNjwvaDM+Cjx1bD4KICAgIDxsaT5Jbml0aWFsIHJlbGVhc2UuIEEgZm9yayBvZiBFQ0IgbW9kdWxlIHYxLjYsIHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoIENNU01TIHYyKzwvbGk+CiAgICA8bGk+QWRkZWQgcmFkaW8gZmllbGQgLSB0byBwcm92aWRlIHJhZGlvIGJ1dHRvbnMgb24gYW4gYWRtaW4gcGFnZTwvbGk+CjwvdWw+Cjxicj48YnIgLz4=]]></about>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogRUNCMiAtIEV4dGVuZGVkIENvbnRlbnQgQmxvY2tzIDIKIyBBdXRob3I6IENocmlzIFRheWxvcgojIENvcHlyaWdodDogKEMpIDIwMTYgQ2hyaXMgVGF5bG9yLCBjaHJpc0BiaW5ub3ZhdGl2ZS5jby51awojIExpY2VuY2U6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMwojICAgICAgICAgIHNlZSAvRUNCMi9sYW5nL0xJQ0VOQ0UudHh0IG9yIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKaWYgKCFpc3NldCgkZ0NtcykpCiAgICBleGl0OwoKIyMgbm90aGluZyAtIHNob3VsZCBub3QgZ2V0IGhlcmUKCj8+]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogRUNCMiAtIEV4dGVuZGVkIENvbnRlbnQgQmxvY2tzIDIKIyBBdXRob3I6IENocmlzIFRheWxvcgojIENvcHlyaWdodDogKEMpIDIwMTYgQ2hyaXMgVGF5bG9yLCBjaHJpc0BiaW5ub3ZhdGl2ZS5jby51awojIExpY2VuY2U6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMwojICAgICAgICAgIHNlZSAvRUNCMi9sYW5nL0xJQ0VOQ0UudHh0IG9yIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKaWYgKCFpc3NldCgkZ0NtcykpCiAgICBleGl0OwoKIyMgbm90aGluZyAtIHNob3VsZCBub3QgZ2V0IGhlcmUKCj8+]]></data>
	</file>
	<file>
	  <filename>/action.refresh.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogRUNCMiAtIEV4dGVuZGVkIENvbnRlbnQgQmxvY2tzIDIKIyBBdXRob3I6IENocmlzIFRheWxvcgojIENvcHlyaWdodDogKEMpIDIwMTYgQ2hyaXMgVGF5bG9yLCBjaHJpc0BiaW5ub3ZhdGl2ZS5jby51awojIExpY2VuY2U6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMwojICAgICAgICAgIHNlZSAvRUNCMi9sYW5nL0xJQ0VOQ0UudHh0IG9yIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgoKaWYgKCFpc3NldCgkcGFyYW1zWydibG9ja19uYW1lJ10pIHx8ICFpc3NldCgkcGFyYW1zWyd2YWx1ZSddKSB8fCAhaXNzZXQoJHBhcmFtc1snYWRkaW5nJ10pKQogICAgcmV0dXJuOwoKJGJsb2NrTmFtZSA9ICRwYXJhbXNbJ2Jsb2NrX25hbWUnXTsKJHZhbHVlID0gJHBhcmFtc1sndmFsdWUnXTsKJGFkZGluZyA9ICRwYXJhbXNbJ2FkZGluZyddOwoKCiRlY2IyID0gbmV3IGVjYjJfdG9vbHMoJGJsb2NrTmFtZSwgJHZhbHVlLCAkcGFyYW1zLCAkYWRkaW5nKTsKZWNobyAkZWNiMi0+Z2V0X2NvbnRlbnRfYmxvY2tfaW5wdXQoKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/ECB2.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogRUNCMiAtIEV4dGVuZGVkIENvbnRlbnQgQmxvY2tzIDIKIyBBdXRob3I6IENocmlzIFRheWxvcgojIENvcHlyaWdodDogKEMpIDIwMTYgQ2hyaXMgVGF5bG9yLCBjaHJpc0BiaW5ub3ZhdGl2ZS5jby51awojIExpY2VuY2U6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMwojICAgICAgICAgIHNlZSAvRUNCMi9sYW5nL0xJQ0VOQ0UudHh0IG9yIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQSBmb3JrIG9mIG1vZHVsZTogRXh0ZW5kZWQgQ29udGVudCBCbG9ja3MgKEVDQikKIyBPcmlnaW5hbCBBdXRob3I6IFpkZW5vIEt1em1hbnkgKHpkZW5vQGt1em1hbnkuYml6KSAvIGt1em1hbnkuYml6ICAvIHR3aXR0ZXIuY29tL2t1em1hbnkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAxMSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgUHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgTW9kdWxlJ3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly9kZXYuY21zbWFkZXNpbXBsZS5vcmcvcHJvamVjdHMvZWNiMgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzCiMgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOwojIHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiMgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiMgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpjbGFzcyBFQ0IyIGV4dGVuZHMgXENNU01vZHVsZSB7CgogICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKSB7CiAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoKTsKICAgfQoKICAgcHVibGljIGZ1bmN0aW9uIEdldE5hbWUoKSB7IHJldHVybiAnRUNCMic7ICB9CiAgIHB1YmxpYyBmdW5jdGlvbiBHZXRGcmllbmRseU5hbWUoKSB7IHJldHVybiAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyk7IH0KICAgcHVibGljIGZ1bmN0aW9uIEdldFZlcnNpb24oKSB7IHJldHVybiAnMS42JzsgfQogICBwdWJsaWMgZnVuY3Rpb24gTWluaW11bUNNU1ZlcnNpb24oKSB7IHJldHVybiAnMi4wJzsgfQogICBwdWJsaWMgZnVuY3Rpb24gTGF6eUxvYWRGcm9udGVuZCgpIHsgcmV0dXJuIFRSVUU7IH0KICAgcHVibGljIGZ1bmN0aW9uIEluaXRpYWxpemVBZG1pbigpIHsgJHRoaXMtPkFkZEltYWdlRGlyKCdpY29ucycpOyB9CiAgIHB1YmxpYyBmdW5jdGlvbiBHZXRIZWxwKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ2hlbHAnKTsgfQogICBwdWJsaWMgZnVuY3Rpb24gR2V0QXV0aG9yKCkgeyByZXR1cm4gJ0NocmlzIFRheWxvciAodHdpdHRlci5jb20vS2l3aUNocmlzQlQpJzsgfQogICBwdWJsaWMgZnVuY3Rpb24gR2V0QXV0aG9yRW1haWwoKSB7IHJldHVybiAnY2hyaXNAYmlubm92YXRpdmUuY28udWsnOyB9CiAgIHB1YmxpYyBmdW5jdGlvbiBHZXRDaGFuZ2VMb2coKSB7IHJldHVybiAkdGhpcy0+TGFuZygnY2hhbmdlbG9nJyk7IH0KICAgcHVibGljIGZ1bmN0aW9uIEhhc0FkbWluKCkgeyByZXR1cm4gRkFMU0U7fQogICBwdWJsaWMgZnVuY3Rpb24gR2V0RGVzY3JpcHRpb24oKSB7IHJldHVybiAkdGhpcy0+TGFuZygnbW9kdWxlX2Rlc2NyaXB0aW9uJyk7IH0KICAgcHVibGljIGZ1bmN0aW9uIEluc3RhbGxQb3N0TWVzc2FnZSgpIHsgcmV0dXJuICR0aGlzLT5MYW5nKCdwb3N0aW5zdGFsbCcpO30KICAgcHVibGljIGZ1bmN0aW9uIFVuaW5zdGFsbFBvc3RNZXNzYWdlKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ3Bvc3R1bmluc3RhbGwnKTt9CiAgIHB1YmxpYyBmdW5jdGlvbiBVbmluc3RhbGxQcmVNZXNzYWdlKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcoJ3JlYWxseV91bmluc3RhbGwnKTt9CgogICBwdWJsaWMgZnVuY3Rpb24gSW5pdGlhbGl6ZUZyb250ZW5kKCkgewogICAgICAkdGhpcy0+UmVnaXN0ZXJNb2R1bGVQbHVnaW4oKTsKICAgICAgJHRoaXMtPlJlc3RyaWN0VW5rbm93blBhcmFtcygpOwogICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnYmxvY2tfbmFtZScsIENMRUFOX1NUUklORyk7CiAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCd2YWx1ZScsIENMRUFOX1NUUklORyk7CiAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdhZGRpbmcnLCBDTEVBTl9TVFJJTkcpOwogICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnc29ydGZpbGVzJywgQ0xFQU5fU1RSSU5HKTsKICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2V4Y2x1ZGVwcmVmaXgnLCBDTEVBTl9TVFJJTkcpOwogICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgncmVjdXJzZScsIENMRUFOX1NUUklORyk7CiAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdmaWxldHlwZXMnLCBDTEVBTl9TVFJJTkcpOwogICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZmllbGQnLCBDTEVBTl9TVFJJTkcpOwogICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZGlyJywgQ0xFQU5fU1RSSU5HKTsKICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3ByZXZpZXcnLCBDTEVBTl9TVFJJTkcpOwogICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZGF0ZV9mb3JtYXQnLCBDTEVBTl9TVFJJTkcpOwogICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZGVzY3JpcHRpb24nLCBDTEVBTl9TVFJJTkcpOwogICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZGVmYXVsdF92YWx1ZScsIENMRUFOX1NUUklORyk7CiAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdtYXhfbnVtYmVyJywgQ0xFQU5fSU5UKTsKICAgICAgJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ21heG51bWJlcicsIENMRUFOX0lOVCk7CiAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdsZWdlbmQnLCBDTEVBTl9TVFJJTkcpOwogICAgICAkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnY29tcGFjdCcsIENMRUFOX1NUUklORyk7CiAgICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdzaXplJywgQ0xFQU5fSU5UKTsKICAgfQoKCgogICBmdW5jdGlvbiBIYXNDYXBhYmlsaXR5KCRjYXBhYmlsaXR5LCAkcGFyYW1zID0gYXJyYXkoKSkgewogICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgIC8vIGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcvYXBpZG9jL0NNUy9DTVNNb2R1bGUuaHRtbCNIYXNDYXBhYmlsaXR5CiAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgc3dpdGNoICgkY2FwYWJpbGl0eSkgewogICAgICAgICBjYXNlICdjb250ZW50YmxvY2tzJzoKICAgICAgICAgICAgcmV0dXJuIFRSVUU7CgogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gRkFMU0U7CiAgICAgIH0KICAgfQoKCgogICBwdWJsaWMgZnVuY3Rpb24gR2V0Q29udGVudEJsb2NrRmllbGRJbnB1dCgkYmxvY2tOYW1lLCAkdmFsdWUsICRwYXJhbXMsICRhZGRpbmc9ZmFsc2UsIENvbnRlbnRCYXNlICRjb250ZW50X29iaikgewogICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgIC8vIGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcvQVBJRE9DMl8wL2NsYXNzZXMvQ01TTW9kdWxlLmh0bWwjbWV0aG9kX0dldENvbnRlbnRCbG9ja0ZpZWxkSW5wdXQKICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAkZWNiMiA9IG5ldyBlY2IyX3Rvb2xzKCRibG9ja05hbWUsICR2YWx1ZSwgJHBhcmFtcywgJGFkZGluZyk7CgogICAgICByZXR1cm4gJGVjYjItPmdldF9jb250ZW50X2Jsb2NrX2lucHV0KCk7CiAgIH0KCgoKfQoKCg==]]></data>
	</file>
	<file>
	  <filename>/icons/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/icons/ajax-refresh-icon.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAMQAAP///wAAAPj4+Dg4OISEhAYGBiYmJtbW1qioqBYWFnZ2dmZmZuTk5JiYmMbGxkhISFZWVgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAVQICCOZGmepTAUbCEqhGCqrZgUxpEaNYDwBtmIgFuNBDwCaYVQkRCFAYmFoo6sKSyASVr4oiRi8LpIkpA4hKg1Jh14iTVrIDwTFPJ5HcXvj0IAOw==]]></data>
	</file>
	<file>
	  <filename>/icons/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></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[PD9waHAKCiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdFeHRlbmRlZCBDb250ZW50IEJsb2NrcyAyJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnRXh0ZW5kZWQgQ29udGVudCBCbG9ja3MgMiB3YXMgc3VjY2Vzc2Z1bCBpbnN0YWxsZWQnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ0V4dGVuZGVkIENvbnRlbnQgQmxvY2tzIDIgd2FzIHN1Y2Nlc3NmdWwgdW5pbnN0YWxsZWQnOwokbGFuZ1sncmVhbGx5X3VuaW5zdGFsbCddID0gJ1JlYWxseT8gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHVuc2luc3RhbGwgdGhpcyBmaW5lIG1vZHVsZT8nOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bGUgVW5pbnN0YWxsZWQuJzsKJGxhbmdbJ2luc3RhbGxlZCddID0gJ01vZHVsZSB2ZXJzaW9uICVzIGluc3RhbGxlZC4nOwokbGFuZ1sndXBncmFkZWQnXSA9ICdNb2R1bGUgdXBncmFkZWQgdG8gdmVyc2lvbiAlcy4nOwovLyRsYW5nWydhZG1pbmRlc2NyaXB0aW9uJ10gPSAnVGhpcyBtb2R1bGUgYWRkcyBuZXcgY29udGVudCBibG9ja3MgdG8gQ01TIE1hZGUgU2ltcGxlIHYyKyc7CiRsYW5nWydtb2R1bGVfZGVzY3JpcHRpb24nXSA9ICdUaGlzIG1vZHVsZSBhZGRzIG5ldyBjb250ZW50IGJsb2NrcyB0byBDTVMgTWFkZSBTaW1wbGUgdjIrJzsKCiRsYW5nWydzZWxlY3RlZCddID0gJ1NlbGVjdGVkJzsKJGxhbmdbJ3NlbGVjdCddID0gJ1NlbGVjdCc7CiRsYW5nWydyZWZyZXNoJ10gPSAnUmVmcmVzaCc7CgokbGFuZ1snY29udGVudF9ibG9ja19sYWJlbF9zZWxlY3RlZCddID0gJ1NlbGVjdGVkJzsKJGxhbmdbJ2NvbnRlbnRfYmxvY2tfbGFiZWxfYXZhaWxhYmxlJ10gPSAnQXZhaWxhYmxlJzsKJGxhbmdbJ2Ryb3BfaXRlbXMnXSA9ICdObyBpdGVtcyBzZWxlY3RlZCAtIGRyb3Agc2VsZWN0ZWQgaXRlbXMgaGVyZSc7CiRsYW5nWydkcm9wX3JlcXVpcmVkX2l0ZW1zJ10gPSAnRHJvcCAlcyByZXF1aXJlZCBpdGVtcyBoZXJlJzsKJGxhbmdbJ3JlbW92ZSddID0gJ1JlbW92ZSc7CgokbGFuZ1sndWR0X2Vycm9yJ10gPSAnVURUIFwnJXNcJyBkb2VzIG5vdCBleGlzdCc7CiRsYW5nWydjdXN0b21nc19maWVsZF9lcnJvciddID0gIlBsZWFzZSBjcmVhdGUgb3B0aW9uICclcycgaW4gQ3VzdG9tR1MiOwokbGFuZ1snZmllbGRfZXJyb3InXSA9ICdQbGVhc2Ugc3BlY2lmeSBhIGNvcnJlY3QgZmllbGQgcGFyYW1ldGVyIGZvciB0aGUgRUNCMiBjb250ZW50IGJsb2NrLic7CgokbGFuZ1snZ2FsbGVyeV9tb2R1bGVfZXJyb3InXSA9ICdHYWxsZXJ5IG1vZHVsZSBpcyBub3QgaW5zdGFsbGVkLic7CgokbGFuZ1snYWRkX2xpbmUnXSA9ICdBZGQgbGluZSc7CiRsYW5nWydyZW1vdmVfbGluZSddID0gJ1JlbW92ZSBsaW5lJzsKCiRsYW5nWydub25lX3NlbGVjdGVkJ10gPSAnLS0tIG5vbmUgLS0tJzsKCgoKCgoKCgojIyMgICAgIyMjICAgIyMjIyMjIyMjICAgIyMjICAgICAgICAjIyMjIyMjIyMKIyMjICAgICMjIyAgICMjIyMjIyMjIyAgICMjIyAgICAgICAgIyMjIyMjIyMjCiMjIyAgICAjIyMgICAjIyMgICAgICAgICAjIyMgICAgICAgICMjIyAgICMjIwojIyMjIyMjIyMjICAgIyMjIyMjIyMjICAgIyMjICAgICAgICAjIyMjIyMjIyMKIyMjIyMjIyMjIyAgICMjIyMjIyMjIyAgICMjIyAgICAgICAgIyMjIyMjIyMjCiMjIyAgICAjIyMgICAjIyMgICAgICAgICAjIyMgICAgICAgICMjIwojIyMgICAgIyMjICAgIyMjIyMjIyMjICAgIyMjIyMjIyMjICAjIyMKIyMjICAgICMjIyAgICMjIyMjIyMjIyAgICMjIyMjIyMjIyAgIyMjCgokbGFuZ1snaGVscCddID0gPDw8J0VPRCcKCjxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPgo8cD5Nb2R1bGUgYWRkcyBhZGl0aW9uYWwgY29udGVudCBibG9ja3MgZm9yIENNUyBNYWRlIFNpbXBsZSB2MisuIFRoaXMgaXMgYSBmb3JrIG9mIHRoZSBvcmlnaW5hbCBFQ0IgbW9kdWxlIHRoYXQgd29ya2VkIHdpdGggQ01TTVMgdjEuPC9wPgo8cD5Qcm92aWRlcyB0aGUgZm9sbG93aW5nIGZpZWxkIHR5cGVzOjxicj4KPG9sPgogICA8bGk+ZmlsZV9zZWxlY3RvcjwvbGk+CiAgIDxsaT5jb2xvcl9waWNrZXI8L2xpPgogICA8bGk+ZHJvcGRvd248L2xpPgogICA8bGk+ZHJvcGRvd25fZnJvbV91ZHQ8L2xpPgogICA8bGk+ZHJvcGRvd25fZnJvbV9jdXN0b21nczwvbGk+CiAgIDxsaT5jaGVja2JveDwvbGk+CiAgIDxsaT5tb2R1bGVfbGluazwvbGk+CiAgIDxsaT5saW5rPC9saT4KICAgPGxpPnRpbWVwaWNrZXI8L2xpPgogICA8bGk+ZGF0ZXBpY2tlcjwvbGk+CiAgIDxsaT5pbnB1dDwvbGk+CiAgIDxsaT50ZXh0YXJlYTwvbGk+CiAgIDxsaT5lZGl0b3IgKHRleHRhcmVhIHdpdGggd3lzaXd5Zyk8L2xpPgogICA8bGk+dGV4dCA8L2xpPgogICA8bGk+cGFnZXMgPC9saT4KICAgPGxpPmhyIChob3Jpem9udGFsIGxpbmUpPC9saT4KICAgPGxpPnNvcnRhYmxlbGlzdDwvbGk+CiAgIDxsaT5yYWRpbzwvbGk+CiAgIDxsaT5oaWRkZW48L2xpPgogICA8bGk+ZmllbGRzZXRfc3RhcnQ8L2xpPgogICA8bGk+ZmllbGRzZXRfZW5kPC9saT4KICAgPGxpPmdhbGxlcnlfcGlja2VyPC9saT4KICAgPGxpPmlucHV0X3JlcGVhdGVyPC9saT4KPC9vbD4KPC9wPjxicj4KCjxwPklmIHlvdSBsaWtlIHRoaXMgbW9kdWxlIHBsZWFzZSA8YSBocmVmPSJodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnL2Fib3V0LWxpbmsvZG9uYXRpb25zLyIgdGFyZ2V0PSJfYmxhbmsiIHN0eWxlPSJmb250LXdlaWdodDpib2xkOyI+ZG9uYXRlIHRvIENNU01TPC9hPjwvcD48YnI+Cgo8aDM+RmllbGRzPC9oMz4KCjxwPjxzdHJvbmc+ZmlsZV9zZWxlY3Rvcjwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZTogIHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJmaWxlX3NlbGVjdG9yIiBibG9jaz0idGVzdDEwIiBkaXI9ImltYWdlcyIgZmlsZXR5cGVzPSJqcGcsZ2lmLHBuZyIgZXhjbHVkZXByZWZpeD0idGh1bWJfIn0gICAgICAgIDwvcD4KPHA+UGFyYW1ldGVyczoKZmlsZXR5cGVzIC0gY29tbWEgc2VwYXJhdGVkPGJyPgpkaXIgKG9wdGlvbmFsKSAtIGRlZmF1bHQgdXBsb2Fkcy88YnI+CmV4Y2x1ZGVwcmVmaXggKG9wdGlvbmFsKTxicj4KcmVjdXJzZSAob3B0aW9uYWwpIC0gZGVmYXVsdCBmYWxzZSwgcmVjdXJzZT0xIHdpbGwgc2hvdyBhbGwgZmlsZXMgaW4gc3ViZm9sZGVycwpzb3J0ZmlsZXMgKG9wdGlvbmFsKTxicj4KcHJldmlldyAob3B0aW9uYWwpIC0gb25seSBmb3IgaW1hZ2VzPGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcgo8L3A+PGJyPgoKPHA+PHN0cm9uZz5jb2xvcl9waWNrZXI8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6ICB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iY29sb3JfcGlja2VyIiBibG9jaz0idGVzdDEiIGxhYmVsPSJDb2xvciIgZGVmYXVsdF92YWx1ZT0iIzAwMDAwMCJ9PC9wPgo8cD5QYXJhbWV0ZXJzOgpkZWZhdWx0X3ZhbHVlIChvcHRpb25hbCk8YnI+CnNpemUgKG9wdGlvbmFsKSAtIGRlZmF1bHQgMTA8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+CgoKCjxwPjxzdHJvbmc+ZHJvcGRvd248L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJkcm9wZG93biIgYmxvY2s9InRlc3Q1IiBsYWJlbD0iRnJ1aXQiICB2YWx1ZXM9IkFwcGxlPWFwcGxlLE9yYW5nZT1vcmFuZ2UiIGZpcnN0X3ZhbHVlPSJzZWxlY3QgZnJ1aXQifTwvcD4KPHA+UGFyYW1ldGVyczoKdmFsdWVzIChyZXF1aXJlZCkgLSBjb21tYSBzZXBhcmF0ZWQuIEV4YW1wbGU6IEFwcGxlPWFwcGxlLE9yYW5nZT1vcmFuZ2UsR3JlZW49Z3JlZW4gPGJyPgpmaXJzdF92YWx1ZSAob3B0aW9uYWwpPGJyPgptdWx0aXBsZSAob3B0aW9uYWwpIC0gYWRkIG11bHRpcGxlIG9wdGlvbiBzZWxlY3Qgc3VwcG9ydDxicj4Kc2l6ZSAob3B0aW9uYWwpIC0gbXVsdGlwbGUgZW5hYmxlZCBvbmx5PGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcjxicj4KY29tcGFjdCAob3B0aW9uYWwpIC0gZGVmYXVsdDpmYWxzZSAtIGlmIHNldCwgYSBzdW1tYXJ5IG9mIHRoZSBzZWxlY3RlZCBvcHRpb25zIGlzIGRpc3BsYXllZCBhbmQgdGhlIGZ1bGwgc2VsZWN0IGlzIHNob3duL2hpZGRlbiB3aGVuICdlZGl0L2hpZGUnIGlzIGNsaWNrZWQKPC9wPjxicj4KCgoKPHA+PHN0cm9uZz5kcm9wZG93bl9mcm9tX3VkdDwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImRyb3Bkb3duX2Zyb21fdWR0IiBibG9jaz0idGVzdDIiIGxhYmVsPSJHYWxsZXJ5IiB1ZHQ9Im15Y3VzdG9tdWR0IiAgZmlyc3RfdmFsdWU9Ij1zZWxlY3Q9In08L3A+CjxwPk91cHV0IGZyb20gVURUIG11c3QgYmUgYXJyYXkoKSAtIGV4YW1wbGU6IHJldHVybiBhcnJheSgibGFiZWwiPT4idmFsdWUiLCAibGFiZWwgMiAiPT4idmFsdWUgMiIpPC9wPgo8cD5QYXJhbWV0ZXJzOgp1ZHQgKHJlcXVpcmVkKSAtIHVkdCBuYW1lPGJyPgpmaXJzdF92YWx1ZSAob3B0aW9uYWwpIDxicj4KbXVsdGlwbGUgKG9wdGlvbmFsKSAtIGFkZCBtdWx0aXBsZSBvcHRpb24gc2VsZWN0IHN1cHBvcnQ8YnI+CnNpemUgKG9wdGlvbmFsKSAtIG11bHRpcGxlIGVuYWJsZWQgb25seTxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3I8YnI+CmNvbXBhY3QgKG9wdGlvbmFsKSAtIGRlZmF1bHQ6ZmFsc2UgLSBpZiBzZXQsIGEgc3VtbWFyeSBvZiB0aGUgc2VsZWN0ZWQgb3B0aW9ucyBpcyBkaXNwbGF5ZWQgYW5kIHRoZSBmdWxsIHNlbGVjdCBpcyBzaG93bi9oaWRkZW4gd2hlbiAnZWRpdC9oaWRlJyBpcyBjbGlja2VkCjwvcD4KPHA+PHN0cm9uZz5FeGFtcGxlcyBVRFQ8L3N0cm9uZz46Cjxicj4KPGEgaHJlZj0iaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20va3V6bWFueS82Nzc5YzE5M2I4MTA0YWE2YWJmZSI+R2FsbGVyeSBsaXN0IGZyb20gR2FsbGVyeSBtb2R1bGU8L2E+IDxicj4KPGEgaHJlZj0iaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20va3V6bWFueS80NjQyNzZlMTZmM2I3NGMwNzU1NSI+R3JvdXAgbGlzdCBmcm9tIEZFVTwvYT4gPGJyPgo8YSBocmVmPSJodHRwczovL2dpc3QuZ2l0aHViLmNvbS9rdXptYW55LzUxNTgzYzY0MzljYjA0MTY3OWE2Ij5Vc2VycyBsaXN0IGZyb20gRkVVPC9hPgo8L3A+PGJyPgoKCjxwPjxzdHJvbmc+ZHJvcGRvd25fZnJvbV9jdXN0b21nczwvc3Ryb25nPiA8c3BhbiBzdHlsZT0iY29sb3I6cmVkOyI+bmV3PC9zcGFuPjwvcD4KPHA+UHJvdmlkZXMgYSBzaW5nbGUgb3IgbXVsdGlwbGUgc2VsZWN0IHVzaW5nIHRoZSBjb250ZW50IHNldCBpbiBhIEN1c3RvbUdTIE1vZHVsZSBmaWVsZC48L3A+CjxwPlJlcXVpcmVzIHRoZSBDdXN0b21HUyBtb2R1bGUgYW5kIHRvIGhhdmUgYSBmaWVsZCBvZiB0eXBlICd0ZXh0IGFyZWEnLjwvcD4KPHA+RXhhbXBsZToKICAgICAge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0nRUNCMicgZmllbGQ9J2Ryb3Bkb3duX2Zyb21fY3VzdG9tZ3MnIGN1c3RvbWdzX2ZpZWxkPSdTZWN0aW9uX1N0eWxlcycgYmxvY2s9c3R5bGUxIGxhYmVsPSdTZWN0aW9uIDEgTGF5b3V0IFN0eWxlJyBhc3NpZ249c3R5bGUxfTwvcD4KPHA+UGFyYW1ldGVyczo8L3A+Cjx1bD4KICAgPGxpPmN1c3RvbWdzX2ZpZWxkIChyZXF1aXJlZCkgLSBuYW1lIG9mIGN1c3RvbWdzX2ZpZWxkIHRvIHJldHJpZXZlICh3aXRoIHVuZGVyc2NvcmVzIG5vdCBzcGFjZXMpPC9saT4KICAgPGxpPmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhbiBvcHRpb25hbCBkZXNjcmlwdGlvbiBvZiB0aGUgZmllbGQ8L2xpPgogICA8bGk+bXVsdGlwbGUgKG9wdGlvbmFsKSAtIGFuIG9wdGlvbiBpZiBzZXQsIHRvIG91cHV0IGEgbXVsdGktc2VsZWN0IGJveCByYXRoZXIgdGhhbiBhIHNpbmdsZSBzZWxlY3QgZHJvd25kb3duPC9saT4KICAgPGxpPnNpemUgKG9wdGlvbmFsKSAtIGFuIG9wdGlvbiB0byBzZXQgdGhlIHNpemUgb2YgYSBtdWx0aS1zZWxlY3QgYm94PC9saT4KICAgPGxpPmNvbXBhY3QgKG9wdGlvbmFsKSAtIGRlZmF1bHQ6ZmFsc2UgLSBpZiBzZXQsIGEgc3VtbWFyeSBvZiB0aGUgc2VsZWN0ZWQgb3B0aW9ucyBpcyBkaXNwbGF5ZWQgYW5kIHRoZSBmdWxsIHNlbGVjdCBpcyBzaG93bi9oaWRkZW4gd2hlbiAnZWRpdC9oaWRlJyBpcyBjbGlja2VkPC9saT4KPC91bD4KPGJyPgoKCgo8cD48c3Ryb25nPmNoZWNrYm94PC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iY2hlY2tib3giIGJsb2NrPSJ0ZXN0MTEiIGxhYmVsPSJDaGVja2JveCIgZGVmYXVsdF92YWx1ZT0iMSJ9PC9wPgo8cD5QYXJhbWV0ZXJzOgpkZWZhdWx0X3ZhbHVlIChvcHRpb25hbCk8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPm1vZHVsZV9saW5rPC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0ibW9kdWxlX2xpbmsiIGxhYmVsPSJNb2R1bGUgZWRpdCIgYmxvY2s9InRlc3QzIiBtb2Q9IkNhdGFsb2dlciIgdGV4dD0iRWRpdCBjYXRhbG9nIiB9PC9wPgo8cD5QYXJhbWV0ZXJzOgptb2QgKHJlcXVpcmVkKSA8YnI+CnRleHQgKHJlcXVpcmVkKSA8YnI+CnRhcmdldCAob3B0aW9uYWwpIC0gZGVmYXVsdCBfc2VsZjxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+bGluazwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImxpbmsiIGxhYmVsPSJTZWFyY2giIGJsb2NrPSJ0ZXN0NCIgdGFyZ2V0PSJfYmxhbmsiIGxpbms9Imh0dHA6Ly93d3cuYmluZy5jb20iIHRleHQ9ImJpbmcgc2VhcmNoIn08L3A+CjxwPlBhcmFtZXRlcnM6CmxpbmsgKHJlcXVpcmVkKSA8YnI+CnRleHQgKHJlcXVpcmVkKSA8YnI+CnRhcmdldCAob3B0aW9uYWwpIC0gZGVmYXVsdCBfc2VsZjxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+dGltZXBpY2tlcjwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9InRpbWVwaWNrZXIiIGxhYmVsPSJUaW1lIiBibG9jaz0idGVzdDQ1In08L3A+CjxwPlBhcmFtZXRlcnM6CnNpemUgKG9wdGlvbmFsKSBkZWZhdWx0IDEwMDxicj4KdGltZV9mb3JtYXQgKG9wdGlvbmFsKSBkZWZhdWx0IEhIOjpzczxicj4KbWF4X2xlbmd0aCAob3B0aW9uYWwpIGRlZmF1bHQgMTA8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPmRhdGVwaWNrZXI8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJkYXRlcGlja2VyIiBsYWJlbD0iRGF0ZSIgYmxvY2s9InRlc3Q0NCJ9PC9wPgo8cD5QYXJhbWV0ZXJzOgpzaXplIChvcHRpb25hbCkgZGVmYXVsdCAxMDA8YnI+CmRhdGVfZm9ybWF0IChvcHRpb25hbCkgZGVmYXVsdCB5eS1tbS1kZDxicj4KdGltZSAob3B0aW9uYWwpIC0gYWRkIHRpbWUgcGlja2VyIGRlZmF1bHQgMDxicj4KdGltZV9mb3JtYXQgKG9wdGlvbmFsKSBkZWZhdWx0IEhIOjpzczxicj4KbWF4X2xlbmd0aCAob3B0aW9uYWwpIGRlZmF1bHQgMTAgPGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcgo8L3A+PGJyPgoKPHA+PHN0cm9uZz5pbnB1dDwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImlucHV0IiBsYWJlbD0iVGV4dCIgYmxvY2s9InRlc3Q1IiBzaXplPTU1IG1heF9sZW5ndGg9NTUgZGVmYXVsdF92YWx1ZT0iZmlsbCBpdCJ9PC9wPgo8cD5QYXJhbWV0ZXJzOgpzaXplIChvcHRpb25hbCkgZGVmYXVsdCAzMDxicj4KbWF4X2xlbmd0aCAob3B0aW9uYWwpIGRlZmF1bHQgMjU1IDxicj4KZGVmYXVsdF92YWx1ZSAob3B0aW9uYWwpIC0gZGVmYXVsdCB2YWx1ZSBmb3IgaW5wdXQ8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPnRleHRhcmVhPC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0idGV4dGFyZWEiIGxhYmVsPSJUZXh0YXJlYSIgYmxvY2s9InRlc3Q2IiByb3dzPTEwIGNvbHM9NDAgZGVmYXVsdF92YWx1ZT0iZmlsbCBpdCJ9PC9wPgo8cD5QYXJhbWV0ZXJzOgpyb3dzIChvcHRpb25hbCkgZGVmYXVsdCAyMDxicj4KY29scyAob3B0aW9uYWwpIGRlZmF1bHQgODAgPGJyPgpkZWZhdWx0X3ZhbHVlIChvcHRpb25hbCkgLSBkZWZhdWx0IHZhbHVlIGZvciB0ZXh0YXJlYTxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+ZWRpdG9yICh0ZXh0YXJlYSB3aXRoIHd5c2l3eWcpPC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iZWRpdG9yIiBsYWJlbD0iVGV4dGFyZWEiIGJsb2NrPSJ0ZXN0NyIgcm93cz0xMCBjb2xzPTQwIGRlZmF1bHRfdmFsdWU9ImZpbGwgaXQifTwvcD4KPHA+UGFyYW1ldGVyczoKcm93cyAob3B0aW9uYWwpIGRlZmF1bHQgMjA8YnI+CmNvbHMgKG9wdGlvbmFsKSBkZWZhdWx0IDgwIDxicj4KZGVmYXVsdF92YWx1ZSAob3B0aW9uYWwpIC0gZGVmYXVsdCB2YWx1ZSBmb3IgdGV4dGFyZWE8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPnRleHQgPC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0idGV4dCIgbGFiZWw9IlRleHQiIGJsb2NrPSJ0ZXN0OCIgdGV4dD0iSGVsbG8gd29yZCEifTwvcD4KPHA+UGFyYW1ldGVyczoKdGV4dCAocmVxdWlyZWQpIHRleHQgaW4gYWRtaW4gKGFkZCBpbmZvcm1hdGlvbiBmb3IgdXNlcnMpPGJyPgpkZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYWRkcyBhZGRpdGlvbmFsIHRleHQgZXhwbGFuYXRpb24gZm9yIGVkaXRvcgo8L3A+PGJyPgoKPHA+PHN0cm9uZz5wYWdlcyA8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJwYWdlcyIgbGFiZWw9IlBhZ2UiIGJsb2NrPSJ0ZXN0MTAifTwvcD4KPHA+UGFyYW1ldGVyczoKZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+aHIgKGhvcml6b250YWwgbGluZSk8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJociIgbGFiZWw9Ik90aGVyIGJsb2NrcyIgYmxvY2s9ImJsb2NrbmFtZSJ9PHA+ClBhcmFtZXRlcnM6CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPnNvcnRhYmxlbGlzdDwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9InNvcnRhYmxlbGlzdCIgYmxvY2s9InRlc3Rzb3J0YWJsZWxpc3QiIGxhYmVsPSJDaG9vc2UgZnJ1aXQiIHVkdD0ibXlkdXQifTwvcD4KPHA+UGFyYW1ldGVyczoKdmFsdWVzIChvcHRpb25hbCkgLSBjb21tYSBzZXBhcmF0ZWQuIEV4YW1wbGU6IFwnQXBwbGU9YXBwbGUsT3JhbmdlPW9yYW5nZSxHcmVlbj1ncmVlbix2YWx1ZT1MYWJlbFwnIDxicj4KdWR0IChvcHRpb25hbCkgLSBuYW1lIG9mIHVkdCB0aGF0IHJldHVybnMgYW4gYXJyYXkgaW4gdGhlIGZvcm1hdCBcJ3ZhbHVlXCcgPT4gXCdMYWJlbFwnLDxicj4KZmlyc3RfdmFsdWUgKG9wdGlvbmFsKTxicj4KbGFiZWxfbGVmdCAob3B0aW9uYWwpPGJyPgpsYWJlbF9yaWdodCAob3B0aW9uYWwpPGJyPgptYXhfbnVtYmVyIChvcHRpb25hbCkgLSBsaW1pdHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHRoYXQgY2FuIGJlIHNlbGVjdGVkPGJyPgpyZXF1aXJlZF9udW1iZXIgKG9wdGlvbmFsKSAtIHNldHMgYSBzcGVjaWZpYyBudW1iZXIgb2YgaXRlbXMgdGhhdCBtdXN0IGJlIHNlbGVjdGVkIChvciBub25lKTxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+cmFkaW88L3N0cm9uZz4gPC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0icmFkaW8iIGJsb2NrPSJ0ZXN0MTciIGxhYmVsPSJGcnVpdCIgdmFsdWVzPSJBcHBsZT1hcHBsZSxPcmFuZ2U9b3JhbmdlLEtpd2lmcnVpdD1raXdpZnJ1aXQiIGRlZmF1bHRfdmFsdWU9Ik9yYW5nZSJ9PC9wPgo8cD5QYXJhbWV0ZXJzOgp2YWx1ZXMgKHJlcXVpcmVkKSAtIGNvbW1hIHNlcGFyYXRlZC4gRXhhbXBsZTogQXBwbGU9YXBwbGUsT3JhbmdlPW9yYW5nZSxLaXdpZnJ1aXQ9a2l3aWZydWl0PGJyPgpkZWZhdWx0X3ZhbHVlIChvcHRpb25hbCkgLSBkZWZhdWx0IGlzIGZpcnN0IGNob2ljZSAtIHNldCB0byBkZWZhdWx0IHZhbHVlIGUuZy4gIk9yYW5nZSIKaW5saW5lIChvcHRpb25hbCkgLSBpZiBzZXQgZGlzcGxheXMgYWRtaW4gcmFkaW8gYnV0dG9ucyBpbmxpbmU8YnI+CmRlc2NyaXB0aW9uIChvcHRpb25hbCkgLSBhZGRzIGFkZGl0aW9uYWwgdGV4dCBleHBsYW5hdGlvbiBmb3IgZWRpdG9yCjwvcD48YnI+Cgo8cD48c3Ryb25nPmhpZGRlbjwvc3Ryb25nPjwvcD4KPHA+RXhhbXBsZToge2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0nRUNCMicgYmxvY2s9J3Rlc3QxOGhpZGRlbicgYXNzaWduPSd0ZXN0aGlkZGVuJyBmaWVsZD0naGlkZGVuJyB2YWx1ZT0nbWFya2VydmFsdWUnfTxicj4KQ2FuIGJlIHVzZWQgdG8gc2V0IGEgcGFnZSBhdHRyaWJ1dGUgdGhhdCBjYW4gdGhlbiBiZSBhY2Nlc3NlZCAoZS5nLiBmcm9tIGEgTmF2aWdhdG9yLVRlbXBsYXRlKSwgdXNpbmcge3BhZ2VfYXR0ciBwYWdlPSRub2RlLT5hbGlhcyBrZXk9J3Rlc3RoaWRkZW4nfTwvcD4KPHA+UGFyYW1ldGVyczoKdmFsdWUgKHJlcXVpcmVkKSAtIGhpZGRlbiB2YWx1ZSB0byBiZSBzYXZlZDxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+ZmllbGRzZXRfc3RhcnQ8L3N0cm9uZz48L3A+CjxwPkV4YW1wbGU6IHtjb250ZW50X21vZHVsZSBtb2R1bGU9J0VDQjInIGZpZWxkPSdmaWVsZHNldF9zdGFydCcgbGFiZWw9JyYgbmJzcDsnIGJsb2NrPSd0ZXN0MTlmaWVsZHNldCcgYXNzaWduPSd0ZXN0MTlmaWVsZHNldCcgbGVnZW5kPSdGaWVsZHNldCBUZXN0IExlZ2VuZCcgZGVzY3JpcHRpb249J0NhbiBhZGQgYSBkZXNjcmlwdGlvbiBpbiBoZXJlJ308YnI+CkNyZWF0ZXMgdGhlIHN0YXJ0IG9mIGEgZmllbGRzZXQgZm9yIGdyb3VwaW5nIHJlbGF2YW50IGFkbWluIGZpZWxkcyB0b2dldGhlci4gTm90ZTogYSBtYXRjaGluZyAnZmllbGRzZXRfZW5kJyBibG9jayBpcyByZXF1aXJlZCBmb3IgZWFjaCBmaWVsZHNldF9zdGFydC48YnI+ClRJUDogc2V0IGxhYmVsPScmIG5ic3A7JyB0byBub3Qgc2hvdyB0aGUgZmllbGQgbGFiZWwuPC9wPgo8cD5QYXJhbWV0ZXJzOgpsZWdlbmQgKG9wdGlvbmFsKSAtIGFkZHMgYW4gb3B0aW9uYWwgbGVnZW5kIChkZWZhdWx0ID0gbm8gbGVnZW5kKTxicj4KZGVzY3JpcHRpb24gKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3IKPC9wPjxicj4KCjxwPjxzdHJvbmc+ZmllbGRzZXRfZW5kPC9zdHJvbmc+PC9wPgo8cD5FeGFtcGxlOiB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0nZmllbGRzZXRfZW5kJyBsYWJlbD0nJiBuYnNwOycgYmxvY2s9J3Rlc3QxOWZpZWxkc2V0ZW5kJyBhc3NpZ249J3Rlc3QxOWZpZWxkc2V0ZW5kJyB9PGJyPgpDcmVhdGVzIHRoZSBlbmQgb2YgYSBmaWVsZHNldCBmb3IgZ3JvdXBpbmcgcmVsYXZhbnQgYWRtaW4gZmllbGRzIHRvZ2V0aGVyLiBOb3RlOiBhIG1hdGNoaW5nICdmaWVsZHNldF9zdGFydCcgYmxvY2sgaXMgcmVxdWlyZWQgZm9yIGVhY2ggZmllbGRzZXRfZW5kLjxicj4KVElQOiBzZXQgbGFiZWw9JyYgbmJzcDsnIHRvIG5vdCBzaG93IHRoZSBmaWVsZCBsYWJlbC4KPC9wPjxicj4KCgo8cD48c3Ryb25nPmdhbGxlcnlfcGlja2VyPC9zdHJvbmc+IDxzcGFuIHN0eWxlPSJjb2xvcjpyZWQ7Ij5uZXc8L3NwYW4+PC9wPgo8cD5Qcm92aWRlcyBhIGdhbGxlcnkgcGlja2VyIGZvciB0aGUgR2FsbGVyeSBtb2R1bGUuPC9wPgo8cD5FeGFtcGxlOgogICAgICB7Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0nZ2FsbGVyeV9waWNrZXInIGJsb2NrPXBhZ2VUb3BHYWxsZXJ5IGxhYmVsPSdQYWdlIFRvcCBHYWxsZXJ5JyBkaXI9J3BhZ2UtdG9wLWdhbGxlcmllcyd9PC9wPgo8cD5QYXJhbWV0ZXJzOjwvcD4KPHVsPgogICA8bGk+ZGlyIChvcHRpb25hbCkgLSBvbmx5IHJldHVybnMgZ2FsbGVyaWVzIHRoYXQgYXJlIHN1Yi1nYWxsZXJpZXMgb2YgdGhpcyBnYWxsZXJ5IGRpciwgZGVmYXVsdCBpcyBhbGwgZ2FsbGVyaWVzLCBleGNsdWRpbmcgZGVmYXVsdCB0b3AgbGV2ZWwgZ2FsbGVyeTwvbGk+CiAgIDxsaT5kZXNjcmlwdGlvbiAob3B0aW9uYWwpIC0gYSBkZXNjcmlwdGlvbiBvZiB0aGUgZmllbGQ8L2xpPgo8L3VsPgo8YnI+CgoKPHA+PHN0cm9uZz5pbnB1dF9yZXBlYXRlcjwvc3Ryb25nPiA8c3BhbiBzdHlsZT0iY29sb3I6cmVkOyI+bmV3PC9zcGFuPjwvcD4KPHA+UHJvdmlkZXMgb25lIG9yIG1vcmUgdGV4dCBpbnB1dHMgdGhhdCBjYW4gYmUgYWRkZWQgb3IgcmVtb3ZlZCBieSB0aGUgZWRpdG9yLjwvcD4KPHA+VGhlIGNvbnRlbnQgYmxvY2sgb3V0cHV0IGlzIGEgc3RyaW5nIHdpdGggZWFjaCBpbnB1dCBmaWVsZCdzIGNvbnRlbnRzIGRlbGltaXRlciBieSAnfHwnLiBUbyBtYWtlIHRoZSBvdXRwdXQgYSBtb3JlIHVzZWZ1bCBhcnJheSB1c2UgJ2V4cGxvZGUnLCBlLmcuIHsifHwifGV4cGxvZGU6JGNvbnRlbnRfYmxvY2tfbmFtZX08L3A+CjxwPkV4YW1wbGU6CiAgICAgIHskaW5wdXRfcmVwZWF0ZXJfdGVzdD0ifHwifGV4cGxvZGU6Intjb250ZW50X21vZHVsZSBtb2R1bGU9J0VDQjInIGZpZWxkPSdpbnB1dF9yZXBlYXRlcicgbGFiZWw9J1Rlc3QgMjI6IGlucHV0X3JlcGVhdGVyJyBibG9jaz0ndGVzdDIyJyBzaXplPTUwIG1heF9sZW5ndGg9MjU1IGRlc2NyaXB0aW9uPSdQcmVzcyAoKykgYW5kICgtKSB0byBhZGQgYW5kIHJlbW92ZSBhZGRpdGlvbmFsIGlucHV0IGZpZWxkcyd9IiBzY29wZT1nbG9iYWx9PC9wPgo8cD5UbyB1c2U6IHskaW5wdXRfcmVwZWF0ZXJfdGVzdHxwcmludF9yfTwvcD4KPGJyPgoKCgo8aDM+VXBncmFkZSBmcm9tIEVDQjwvaDM+CjxwPkluc3RhbGwgRUNCMiBtb2R1bGUgYW5kIGNoYW5nZSBhbGwgIm1vZHVsZSIgcGFyYW1ldGVycywgaW4gY29udGVudF9tb2R1bGUgdGFncyB0byBiZSBtb2R1bGU9IkVDQjIiICh3YXMgIkVDQiIpLiBUaGVuIEVDQiBjYW4gYmUgdW5pbnN0YWxsZWQuPC9wPjxicj4KCgoKPGgzPlN1cHBvcnQ8L2gzPgo8cD5BcyBwZXIgdGhlIEdQTCBsaWNlbmNlLCB0aGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzIGlzLiBQbGVhc2UgcmVhZCB0aGUgdGV4dCBvZiB0aGUgbGljZW5zZSBmb3IgdGhlIGZ1bGwgZGlzY2xhaW1lci4KVGhlIG1vZHVsZSBhdXRob3IgaXMgbm90IG9ibGlnYXRlZCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoaXMgY29kZS4gSG93ZXZlciB5b3UgbWlnaHQgZ2V0IHN1cHBvcnQgdGhyb3VnaCB0aGUgZm9sbG93aW5nOjwvcD4KPHVsPgogICA8bGk+Rm9yIHN1cHBvcnQsIGZpcnN0IDxzdHJvbmc+c2VhcmNoPC9zdHJvbmc+IHRoZSA8YSBocmVmPSIvL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW08L2E+LCBmb3IgaXNzdWVzIHdpdGggdGhlIG1vZHVsZSBzaW1pbGFyIHRvIHRob3NlIHlvdSBhcmUgZmluZGluZy48L2xpPgogICA8bGk+VGhlbiwgaWYgbmVjZXNzYXJ5LCBvcGVuIGEgPHN0cm9uZz5uZXcgZm9ydW0gdG9waWM8L3N0cm9uZz4gdG8gcmVxdWVzdCBoZWxwLCB3aXRoIGEgdGhvcm91Z2ggZGVzY3JpcHRpb24gb2YgeW91ciBpc3N1ZSwgYW5kIHN0ZXBzIHRvIHJlcHJvZHVjZSBpdC48L2xpPgogICA8bGk+SWYgeW91IGZpbmQgYSBidWcgeW91IGNhbiA8YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL2J1Zy9saXN0LzEzNjYiPnN1Ym1pdCBhIEJ1ZyBSZXBvcnQ8L2E+LjwvbGk+CiAgIDxsaT5Gb3IgYW55IGdvb2QgaWRlYXMgeW91IGNhbiA8YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL2ZlYXR1cmVfcmVxdWVzdC9saXN0LzEzNjYiPnN1Ym1pdCBhIEZlYXR1cmUgUmVxdWVzdDwvYT4uPC9saT4KICAgPGxpPklmIHlvdSBmb3VuZCB0aGUgTW9kdWxlIHVzZWZ1bCAtIHNob3V0IG91dCB0byBtZSBvbiBUd2l0dGVyIDxhIGhyZWY9Ii8vdHdpdHRlci5jb20vS2l3aUNocmlzQlQiPkBLaXdpQ2hyaXNCVDwvYT48L2xpPgo8L3VsPjxicj4KCgoKPGgzPkNvcHlyaWdodCAmYW1wOyBMaWNlbmNlPC9oMz4KPHA+Q29weXJpZ2h0IMKpIDIwMTksIENocmlzIFRheWxvciA8Y2hyaXMgYXQgYmlubm92YXRpdmUgZG90IGNvIGRvdCB1az4uIEFsbCBSaWdodHMgQXJlIFJlc2VydmVkLjwvcD48YnI+CjxwPlRoaXMgbW9kdWxlIGhhcyBiZWVuIHJlbGVhc2VkIHVuZGVyIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgdjMuIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiBZb3UgbWF5IG9ubHkgdXNlIHRoaXMgc29mdHdhcmUgd2hlbiB0aGVyZSBpcyBhIGNsZWFyIGFuZCBvYnZpb3VzIGluZGljYXRpb24gaW4gdGhlIGFkbWluIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBTaW1wbGUhPC9wPjxicj4KPGJyPgpFT0Q7CgoKCgoKCgoKIyMjIyMjIyMjICAjIyMgICAgIyMjICAjIyMjIyMjIyMjICAjIyMgICAgIyMjICAjIyMjIyMjIyMgICMjIyMjIyMjICAjIyMgICAgICAgIyMjIyMjIyMjICAjIyMjIyMjIyMKIyMjIyMjIyMjICAjIyMgICAgIyMjICAjIyMjIyMjIyMjICAjIyMjICAgIyMjICAjIyMjIyMjIyMgICMjIyMjIyMjICAjIyMgICAgICAgIyMjIyMjIyMjICAjIyMjIyMjIyMKIyMjICAgICAgICAjIyMgICAgIyMjICAjIyMgICAgIyMjICAjIyMjIyAgIyMjICAjIyMgICAgICAgICMjIyAgICAgICAjIyMgICAgICAgIyMjICAgIyMjICAjIyMKIyMjICAgICAgICAjIyMjIyMjIyMjICAjIyMjIyMjIyMjICAjIyMgIyMgIyMjICAjIyMgICAgICAgICMjIyMjIyMjICAjIyMgICAgICAgIyMjICAgIyMjICAjIyMKIyMjICAgICAgICAjIyMjIyMjIyMjICAjIyMjIyMjIyMjICAjIyMgICMjIyMjICAjIyMgICAjIyMgICMjIyMjIyMjICAjIyMgICAgICAgIyMjICAgIyMjICAjIyMgICAjIyMKIyMjICAgICAgICAjIyMgICAgIyMjICAjIyMgICAgIyMjICAjIyMgICAjIyMjICAjIyMgICAjIyMgICMjIyAgICAgICAjIyMgICAgICAgIyMjICAgIyMjICAjIyMgICAjIyMKIyMjIyMjIyMjICAjIyMgICAgIyMjICAjIyMgICAgIyMjICAjIyMgICAgIyMjICAjIyMjIyMjIyMgICMjIyMjIyMjICAjIyMjIyMjIyMgIyMjIyMjIyMjICAjIyMjIyMjIyMKIyMjIyMjIyMjICAjIyMgICAgIyMjICAjIyMgICAgIyMjICAjIyMgICAgIyMjICAjIyMjIyMjIyMgICMjIyMjIyMjICAjIyMjIyMjIyMgIyMjIyMjIyMjICAjIyMjIyMjIyMKCiRsYW5nWydjaGFuZ2Vsb2cnXSA9IDw8PCdFT0QnCgo8aDM+VmVyc2lvbiAxLjYgLSAwM0p1bjIwPC9oMz4KPHVsPgogICA8bGk+YWxsICdkcm9wZG93bicgY29udGVudCBibG9ja3Mgbm93IGhhdmUgdGhlIG9wdGlvbiBmb3IgYSAnY29tcGFjdCcgZGlzcGxheSBvbiB0aGUgYWRtaW4gcGFnZS4gU2V0ICJjb21wYWN0PTEiIGluIHRoZSBwYXJhbWV0ZXJzIGEgc3VtbWFyeSBvZiB0aGUgc2VsZWN0ZWQgb3B0aW9ucyBpcyBkaXNwbGF5ZWQgYW5kIHRoZSBmdWxsIHNlbGVjdCBpcyBzaG93bi9oaWRkZW4gd2hlbiAnZWRpdC9oaWRlJyBpcyBjbGlja2VkPC9saT4KICAgPGxpPmZpbGVfc2VsZWN0b3IgY29udGVudCBibG9jayAtIHVwZGF0ZWQgbm93IHVzZXMgY29yZSBtZXRob2QgaW5zdGVhZCBvZiBDR0V4dGVuc2lvbnM8L2xpPgogICA8bGk+cmVtb3ZlZCBDR0V4dGVuc2lvbnMgZGVwZW5kYW5jeTwvbGk+CiAgIDxsaT5CdWcgZml4OiBkZWZhdWx0IHZhbHVlIG5vdyB3b3JrcyBmb3IgY2hlY2tib3gsIGlucHV0LCB0ZXh0YXJlYSAmIGVkaXRvciBjb250ZW50IGJsb2NrczwvbGk+CjwvdWw+Cjxicj4KCjxoMz5WZXJzaW9uIDEuNS4zIC0gMTdKdW4xOTwvaDM+Cjx1bD4KICAgPGxpPm1pbm9yIGJ1ZyBmaXggaW4gaGVscDwvbGk+CjwvdWw+Cjxicj4KCjxoMz5WZXJzaW9uIDEuNS4yIC0gMTlGZWIxOTwvaDM+Cjx1bD4KICAgPGxpPmJ1ZyBmaXggLSBhZG1pbiBqcyB1cGRhdGVkIC0gZml4ZXMgdjEuNS4xIG11bHRpcGxlIHNlbGVjdCdzICYgaW5wdXRfcmVwZWF0ZXIgbm90IHdvcmtpbmcgLSBwbGVhc2UgdXBkYXRlPC9saT4KPC91bD4KPGJyPgoKPGgzPlZlcnNpb24gMS41LjEgLSAxOEZlYjE5PC9oMz4KPHVsPgogICA8bGk+Z2FsbGVyeV9waWNrZXIgLSBidWcgZml4PC9saT4KPC91bD4KPGJyPgoKPGgzPlZlcnNpb24gMS41IC0gMTZGZWIxOTwvaDM+Cjx1bD4KICAgPGxpPmlucHV0X3JlcGVhdGVyIGNvbnRlbnQgYmxvY2sgLSBhZGRlZCAtIHRoYW5rcyB0byBTaW1vbiBSYWRmb3JkPC9saT4KICAgPGxpPmdhbGxlcnlfcGlja2VyIGNvbnRlbnQgYmxvY2sgLSBhZGRlZDwvbGk+CiAgIDxsaT5kcm9wZG93bl9mcm9tX2N1c3RvbWdzIGNvbnRlbnQgYmxvY2sgLSBhZGRlZDwvbGk+CiAgIDxsaT5hZGRlZCBlcnJvciBtZXNzYWdlIGZvciBtaXNzaW5nIG9yIGluY29ycmVjdGx5IHNwZWx0IGZpZWxkIHBhcmFtYXRlciAtIEJSIzExNTU3IC0gdGhhbmtzIEx1ZGdlcjwvbGk+CiAgIDxsaT5yZW1vdmVkIEFkbWluIHBhZ2UgdGhhdCBvbmx5IHNob3dlZCBoZWxwIC0gcmVkdW5kYW50IGFzIGhlbHAgZWFzaWx5IHZpc2libGUgZnJvbSB3aXRoaW4gTW9kdWxlIE1hbmFnZXI8L2xpPgogICA8bGk+cmVtb3ZlZCBQZXJtaXNzaW9uICdVc2UgRUNCMicgLSBhbHNvIHJlZHVuZGFudDwvbGk+CiAgIDxsaT5jb2RlIHRpZHkgdXAgLSBjb25zb2xpZGF0ZSBqcyAmIGNzcyBpbnRvIHNlcGFyYXRlIGV4dGVybmFsIGZpbGVzPC9saT4KPC91bD4KPGJyPgoKPGgzPlZlcnNpb24gMS4zLjEgLSAxMkp1bDE3PC9oMz4KPHVsPgogICA8bGk+bWlub3IgYnVnIGZpeDwvbGk+CjwvdWw+Cjxicj4KCjxoMz5WZXJzaW9uIDEuMyAtIDExSnVsMTc8L2gzPgo8dWw+CiAgIDxsaT5zb3J0YWJsZWxpc3QgLSBhZGRlZCBtYXhfbnVtYmVyIGFuZCByZXF1aXJlZF9udW1iZXIgb3B0aW9uczwvbGk+CiAgIDxsaT5BZGRlZCAnZmllbGRzZXRfc3RhcnQnIGFuZCAnZmllbGRzZXRfZW5kJyBmaWVsZHM8L2xpPgo8L3VsPgo8YnI+Cgo8aDM+VmVyc2lvbiAxLjIuMiAtIDA1SnVsMTc8L2gzPgo8dWw+CiAgIDxsaT50ZXN0IGZvciBhbmQgZGlzcGxheSB3YXJuaW5nIGluIGFkbWluIGlmIFVEVCBkb2VzIG5vdCBleGlzdDwvbGk+CjwvdWw+Cjxicj4KCjxoMz5WZXJzaW9uIDEuMi4xIC0gMTlBcHIxNzwvaDM+Cjx1bD4KICAgPGxpPmJ1ZyBmaXggZm9yIGNvbG9yX3BpY2tlciwgZGVmYXVsdF92YWx1ZSAtIEJSIzExMzU0IC0gdGhhbmtzIFN0dWFydDwvbGk+CiAgIDxsaT5jb2xvcl9waWNrZXIgLSB0d2Vha2VkIGxheW91dDwvbGk+CiAgIDxsaT5zb3J0YWJsZWxpc3QgLSBub3cgdXNlIGpxdWVyeSBzb3J0YWJsZSBpbnN0ZWFkIG9mIENHRXh0ZW5zaW9ucy4gUGFyYW1ldGVycyByZW1vdmVkOiAndGVtcGxhdGUnLiBQYXJhbWV0ZXJzIG5vdCBvcGVyYXRpb25hbDogJ21heF9zZWxlY3RlZCcsICdhbGxvd2R1cGxpY2F0ZXMnIChwbGVhc2UgYWR2aXNlIGlmIHlvdSByZXF1aXJlIHRoZXNlKS4gUGx1cyBzb21lIGJ1ZyBmaXhlcy48L2xpPgo8L3VsPgo8YnI+Cgo8aDM+VmVyc2lvbiAxLjIgLSAwN05vdjE2PC9oMz4KPHVsPgogICA8bGk+QWRkZWQgJ2Rlc2NyaXB0aW9uJyBwYXJhbWV0ZXIgZm9yIGFsbCBmaWVsZHMgKG9wdGlvbmFsKSAtIGFkZHMgYWRkaXRpb25hbCB0ZXh0IGV4cGxhbmF0aW9uIGZvciBlZGl0b3I8L2xpPgogICA8bGk+QWRkZWQgJ2hpZGRlbicgZmllbGQgLSBDYW4gYmUgdXNlZCB0byBzZXQgYSBwYWdlIGF0dHJpYnV0ZSB0aGF0IGNhbiB0aGVuIGJlIGFjY2Vzc2VkIChlLmcuIGZyb20gYSBOYXZpZ2F0b3ItVGVtcGxhdGUpLCB1c2luZyB7cGFnZV9hdHRyIHBhZ2U9JG5vZGUtPmFsaWFzIGtleT0ndGVzdGhpZGRlbid9PC9saT4KICAgPGxpPkJ1ZyBmaXggLSBmb3IgcGhwIG5vdGljZTwvbGk+CjwvdWw+Cjxicj4KCjxoMz5WZXJzaW9uIDEuMSAtIDE1QXByMTY8L2gzPgo8dWw+CiAgICA8bGk+QnVnIGZpeDwvbGk+CjwvdWw+Cjxicj4KCjxoMz5WZXJzaW9uIDEuMCAtIDE1QXByMTY8L2gzPgo8dWw+CiAgICA8bGk+SW5pdGlhbCByZWxlYXNlLiBBIGZvcmsgb2YgRUNCIG1vZHVsZSB2MS42LCB0aGF0IGlzIGNvbXBhdGlibGUgd2l0aCBDTVNNUyB2Mis8L2xpPgogICAgPGxpPkFkZGVkIHJhZGlvIGZpZWxkIC0gdG8gcHJvdmlkZSByYWRpbyBidXR0b25zIG9uIGFuIGFkbWluIHBhZ2U8L2xpPgo8L3VsPgo8YnI+CkVPRDsKCgoKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.ecb2_tools.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIwojIEVDQjIgLSBFeHRlbmRlZCBDb250ZW50IEJsb2NrcyAyCiMKIyBtYWludGFpbmVkIGJ5IENocmlzIFRheWxvciwgPGNocmlzQGJpbm5vdmF0aXZlLmNvLnVrPiwgc2luY2UgMjAxNgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBBIGZvcmsgb2YgbW9kdWxlOiBFeHRlbmRlZCBDb250ZW50IEJsb2NrcyAoRUNCKQojIE9yaWdpbmFsIEF1dGhvcjogWmRlbm8gS3V6bWFueSAoemRlbm9Aa3V6bWFueS5iaXopIC8ga3V6bWFueS5iaXogIC8gdHdpdHRlci5jb20va3V6bWFueQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDkgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMgVGhlIG1vZHVsZSdzIGhvbWVwYWdlIGlzOiBodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3NrZWxldG9uLwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgpjbGFzcyBlY2IyX3Rvb2xzIHsKCiAgIHByaXZhdGUgJGJsb2NrX25hbWUgPSAnJzsKICAgcHJpdmF0ZSAkdmFsdWUgPSAnJzsKICAgcHJpdmF0ZSAkYWRkaW5nID0gZmFsc2U7CiAgIHByaXZhdGUgJG9wdGlvbnMgPSBhcnJheSgpOwogICBwcml2YXRlICRhbGlhcyA9ICcnOwogICBwcml2YXRlICRmaWVsZCA9ICcnOwogICBwcml2YXRlICR0eHQgPSAnJzsKICAgcHJpdmF0ZSAkaXNfY29sb3JfcGlja2VyX2xpYl9sb2FkID0gZmFsc2U7CiAgIHByaXZhdGUgJGlzX2RhdGVwaWNrZXJfbGliX2xvYWQgPSBmYWxzZTsKICAgLyoqCiAgICAqCiAgICAqIEBwYXJhbSBzdHJpYm5nICRibG9ja05hbWUKICAgICogQHBhcmFtIHN0cmluZyAkdmFsdWUKICAgICogQHBhcmFtIGFycmF5ICRwYXJhbXMKICAgICogQHBhcmFtIGJvb2xlYW4gJGFkZGluZwogICAgKi8KICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRibG9ja05hbWUsICR2YWx1ZSwgJHBhcmFtcywgJGFkZGluZykgewoKICAgICAgJHRoaXMtPmJsb2NrX25hbWUgPSAkYmxvY2tOYW1lOwogICAgICAkdGhpcy0+YWxpYXMgPSBtdW5nZV9zdHJpbmdfdG9fdXJsKCRibG9ja05hbWUsIHRydWUpOwogICAgICAkdGhpcy0+dmFsdWUgPSAkdmFsdWU7CgogICAgICAkdGhpcy0+YWRkaW5nID0gJGFkZGluZzsKCiAgICAgICR0aGlzLT5nZXRfZXh0cmFfb3B0aW9ucygkcGFyYW1zKTsKICAgICAgaWYgKCBpc3NldCgkdGhpcy0+b3B0aW9uc1siZGVmYXVsdF92YWx1ZSJdKSAmJiBpc1NldCgkcGFyYW1zWyJkZWZhdWx0X3ZhbHVlIl0pICkgewogICAgICAgICAkdGhpcy0+ZGVmYXVsdCA9ICRwYXJhbXNbImRlZmF1bHRfdmFsdWUiXTsKICAgICAgICAgaWYgKCAkYWRkaW5nPT10cnVlICYmIGVtcHR5KCR2YWx1ZSk9PXRydWUgKSAkdGhpcy0+dmFsdWUgPSAkcGFyYW1zWyJkZWZhdWx0X3ZhbHVlIl07CiAgICAgIH0KCiAgICAgIC8vIGlmIGZpcnN0IEVDQjIgY29udGVudCBibG9jayBvbiB0aGUgcGFnZSAtIGxvYWQgRUNCMiBqcyAmIGNzcyAobW92ZSBhbGwganMgJiBjc3MgaW50byB0aGVzZSkKICAgICAgaWYgKCFjbXNfdXRpbHM6OmdldF9hcHBfZGF0YSgnRUNCMl9qc19jc3NfbG9hZGVkJykpIHsKICAgICAgICAgZWNobyAnCiAgICAgICAgICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL21vZHVsZXMvRUNCMi9saWIvY3NzL2VjYjJfYWRtaW4uY3NzIj4KICAgICAgICAgICAgPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgc3JjPSIuLi9tb2R1bGVzL0VDQjIvbGliL2pzL2VjYjJfYWRtaW4uanMiPjwvc2NyaXB0Pic7CiAgICAgICAgIGNtc191dGlsczo6c2V0X2FwcF9kYXRhKCdFQ0IyX2pzX2Nzc19sb2FkZWQnLCAxKTsKICAgICAgfQoKICAgfQoKICAgLyoqCiAgICogIGdldCBjb250ZW50IGJsb2NrCiAgICogQHJldHVybiBzdHJpbmcKICAgKi8KICAgcHVibGljIGZ1bmN0aW9uIGdldF9jb250ZW50X2Jsb2NrX2lucHV0KCkgewoKICAgICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnRUNCMicpOwogICAgICAkZnVuY3Rpb24gPSAnZ2V0XycgLiAkdGhpcy0+ZmllbGQ7CiAgICAgICRmdW5jdGlvbkV4aXN0cyA9IG1ldGhvZF9leGlzdHMoJ2VjYjJfdG9vbHMnLCAkZnVuY3Rpb24pOwogICAgICBpZiAoIGVtcHR5KCR0aGlzLT5maWVsZCkgfHwgISRmdW5jdGlvbkV4aXN0cyApIHsKICAgICAgICAgJGVyciA9ICc8ZGl2IGNsYXNzPSJwYWdld2FybmluZyI+JyAuICRtb2QtPkxhbmcoJ2ZpZWxkX2Vycm9yJykgLiAnPC9kaXY+PGJyPic7CiAgICAgICAgIHJldHVybiAkZXJyOwogICAgICB9CgogICAgICBpZiAoICFlbXB0eSgkdGhpcy0+b3B0aW9uc1snZGVzY3JpcHRpb24nXSkgKSB7CiAgICAgICAgICR0aGlzLT5vcHRpb25zWydkZXNjcmlwdGlvbiddIC49ICc8YnI+JzsKICAgICAgfQogICAgICByZXR1cm4gJHRoaXMtPiRmdW5jdGlvbigpOwogICB9CgoKCiAgICAvKioKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldF90ZXh0YXJlYSgpIHsKICAgICAgICAkdG1wID0gJzx0ZXh0YXJlYSBuYW1lPSIlcyIgcm93cz0iJWQiIGNvbHM9IiVkIj4lczwvdGV4dGFyZWE+JzsKICAgICAgICAkdmFsdWUgPSAkdGhpcy0+dmFsdWUgPyAkdGhpcy0+dmFsdWUgOiAkdGhpcy0+b3B0aW9uc1siZGVmYXVsdF92YWx1ZSJdOwogICAgICAgIHJldHVybiAkdGhpcy0+b3B0aW9uc1snZGVzY3JpcHRpb24nXS5zcHJpbnRmKCR0bXAsICR0aGlzLT5ibG9ja19uYW1lLCAkdGhpcy0+b3B0aW9uc1sicm93cyJdLCAkdGhpcy0+b3B0aW9uc1siY29scyJdLCAkdmFsdWUpOwogICAgfQoKICAgIC8qKgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0X3BhZ2VzKCkgewogICAgICAgICRjb250ZW50T3BzID0gXENvbnRlbnRPcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKTsKICAgICAgICByZXR1cm4gJHRoaXMtPm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10uJGNvbnRlbnRPcHMtPkNyZWF0ZUhpZXJhcmNoeURyb3Bkb3duKCcnLCAkdGhpcy0+dmFsdWUsICR0aGlzLT5ibG9ja19uYW1lLCAxLCAxKTsKICAgIH0KCiAgICAvKioKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldF9lZGl0b3IoKSB7CiAgICAgICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnRUNCMicpOwogICAgICAgICR2YWx1ZSA9ICR0aGlzLT52YWx1ZSA/ICR0aGlzLT52YWx1ZSA6ICR0aGlzLT5vcHRpb25zWyJkZWZhdWx0X3ZhbHVlIl07CiAgICAgICAgcmV0dXJuICR0aGlzLT5vcHRpb25zWydkZXNjcmlwdGlvbiddLiRtb2QtPkNyZWF0ZVRleHRBcmVhKHRydWUsICcnLCAkdmFsdWUsICR0aGlzLT5ibG9ja19uYW1lLCAnJywgJycsICcnLCAnJywgJHRoaXMtPm9wdGlvbnNbImNvbHMiXSwgJHRoaXMtPm9wdGlvbnNbInJvd3MiXSk7CiAgICB9CgogICAgLyoqCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfaW5wdXQoKSB7CiAgICAgICAgJHRtcCA9ICc8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iJXMiIHNpemU9IiVkIiBtYXhsZW5ndGg9IiVkIiB2YWx1ZT0iJXMiLz4nOwogICAgICAgICR2YWx1ZSA9ICR0aGlzLT52YWx1ZSA/ICR0aGlzLT52YWx1ZSA6ICR0aGlzLT5vcHRpb25zWyJkZWZhdWx0X3ZhbHVlIl07CiAgICAgICAgcmV0dXJuICR0aGlzLT5vcHRpb25zWydkZXNjcmlwdGlvbiddLnNwcmludGYoJHRtcCwgJHRoaXMtPmJsb2NrX25hbWUsICR0aGlzLT5vcHRpb25zWyJzaXplIl0sICR0aGlzLT5vcHRpb25zWyJtYXhfbGVuZ3RoIl0sICR2YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfdGltZXBpY2tlcigpIHsKICAgICAgICAkdG1wID0gJHRoaXMtPmdldF9kYXRlcGlja2VyX2xpYigpOwogICAgICAgICR0bXAgLj0gJzxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0idGltZXBpY2tlciIgIG5hbWU9IiVzIiBzaXplPSIlZCIgbWF4bGVuZ3RoPSIlZCIgdmFsdWU9IiVzIi8+JzsKICAgICAgICByZXR1cm4gJHRoaXMtPm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10uc3ByaW50ZigkdG1wLCAkdGhpcy0+YmxvY2tfbmFtZSwgJHRoaXMtPm9wdGlvbnNbInNpemUiXSwgJHRoaXMtPm9wdGlvbnNbIm1heF9sZW5ndGgiXSwgJHRoaXMtPnZhbHVlKTsKICAgIH0KCiAgICAvKioKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldF9kYXRlcGlja2VyKCkgewogICAgICAgICR0bXAgPSAkdGhpcy0+Z2V0X2RhdGVwaWNrZXJfbGliKCk7CiAgICAgICAgJHRtcCAuPSAnPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJkYXRlcGlja2VyIiAgbmFtZT0iJXMiIHNpemU9IiVkIiBtYXhsZW5ndGg9IiVkIiB2YWx1ZT0iJXMiLz4nOwogICAgICAgIHJldHVybiAkdGhpcy0+b3B0aW9uc1snZGVzY3JpcHRpb24nXS5zcHJpbnRmKCR0bXAsICR0aGlzLT5ibG9ja19uYW1lLCAkdGhpcy0+b3B0aW9uc1sic2l6ZSJdLCAkdGhpcy0+b3B0aW9uc1sibWF4X2xlbmd0aCJdLCAkdGhpcy0+dmFsdWUpOwogICAgfQoKCgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfZGF0ZXBpY2tlcl9saWIoKSB7CiAgICAgICAgaWYgKCR0aGlzLT5pc19kYXRlcGlja2VyX2xpYl9sb2FkKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnRUNCMicpOwogICAgICAgICRjb25maWcgPSBjbXNtcygpLT5HZXRDb25maWcoKTsKICAgICAgICAkdG1wID0gIgogICAgICAgIDxzY3JpcHQgbGFuZ3VhZ2U9XCJqYXZhc2NyaXB0XCIgZmllbGQ9XCJ0ZXh0L2phdmFzY3JpcHRcIiBzcmM9XCIiIC4gJGNvbmZpZ1sicm9vdF91cmwiXSAuICIvbW9kdWxlcy8iIC4gJG1vZC0+R2V0TmFtZSgpIC4gIi9saWIvanMvanF1ZXJ5LXVpLXRpbWVwaWNrZXItYWRkb24uanNcIj48L3NjcmlwdD4KICAgICAgICA8c2NyaXB0IHR5cGU9XCJ0ZXh0L2phdmFzY3JpcHRcIj4KICAgICAgICAkKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAkKCcuZGF0ZXBpY2tlcicpLiIgLiAoaXNzZXQoJHRoaXMtPm9wdGlvbnNbInRpbWUiXSkgJiYgJHRoaXMtPm9wdGlvbnNbInRpbWUiXSA/ICdkYXRldGltZXBpY2tlcicgOiAnZGF0ZXBpY2tlcicgKSAuICIgKHsKICAgICAgICAgICAgICAgICIgLiAoaXNzZXQoJHRoaXMtPm9wdGlvbnNbImRhdGVfZm9ybWF0Il0pICYmICR0aGlzLT5vcHRpb25zWyJkYXRlX2Zvcm1hdCJdID8gImRhdGVGb3JtYXQ6ICciIC4gJHRoaXMtPm9wdGlvbnNbImRhdGVfZm9ybWF0Il0gLiAiJywiIDogIiIpIC4gIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgLiAoaXNzZXQoJHRoaXMtPm9wdGlvbnNbInRpbWVfZm9ybWF0Il0pICYmICR0aGlzLT5vcHRpb25zWyJ0aW1lX2Zvcm1hdCJdID8gInRpbWVGb3JtYXQ6ICciIC4gJHRoaXMtPm9wdGlvbnNbInRpbWVfZm9ybWF0Il0gLiAiJyIgOiAiIikgLiAiLAogICAgICAgICAgICAgICAgc2hvd090aGVyTW9udGhzOiB0cnVlLAogICAgICAgICAgICAgICAgc2VsZWN0T3RoZXJNb250aHM6IHRydWUKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICQoJy50aW1lcGlja2VyJykudGltZXBpY2tlciAoewogICAgICAgICAgICAgICAgdGltZUZvcm1hdDogJyIgLiAkdGhpcy0+b3B0aW9uc1sidGltZV9mb3JtYXQiXSAuICInCiAgICAgICAgICAgIH0pOwoKICAgICAgICB9KTsKPC9zY3JpcHQ+IjsKICAgICAgICAkdGhpcy0+aXNfZGF0ZXBpY2tlcl9saWJfbG9hZCA9IHRydWU7CiAgICAgICAgcmV0dXJuICR0bXA7CiAgICB9CgogICAgLyoqCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfY29sb3JfcGlja2VyKCkgewoKICAgICAgICAkdHh0ID0gJyc7CiAgICAgICAgJGZpcnN0ID0gY21zX3V0aWxzOjpnZXRfYXBwX2RhdGEoX19GVU5DVElPTl9fKTsKICAgICAgICAkY29uZmlnID0gY21zbXMoKS0+R2V0Q29uZmlnKCk7CiAgICAgICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnRUNCMicpOwogICAgICAgIGlmICggIWlzc2V0KCR0aGlzLT52YWx1ZSkgJiYgaXNzZXQoJHRoaXMtPmRlZmF1bHQpICkKICAgICAgICAgICAgJHRoaXMtPnZhbHVlID0gJHRoaXMtPmRlZmF1bHQ7CgogICAgICAgIGlmICghJGZpcnN0KSB7CiAgICAgICAgICAgICR0eHQuPSAnPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgZmllbGQ9InRleHQvamF2YXNjcmlwdCIgc3JjPSInIC4gJGNvbmZpZ1sicm9vdF91cmwiXSAuICcvbW9kdWxlcy8nIC4gJG1vZC0+R2V0TmFtZSgpIC4gJy9saWIvanMvbUNvbG9yUGlja2VyLm1pbi5qcyI+PC9zY3JpcHQ+JzsKICAgICAgICAgICAgJHR4dC49ICc8c2NyaXB0PgokLmZuLm1Db2xvclBpY2tlci5kZWZhdWx0cy5pbWFnZUZvbGRlciA9ICIgJyAuICRjb25maWdbInJvb3RfdXJsIl0gLiAnL21vZHVsZXMvJyAuICRtb2QtPkdldE5hbWUoKSAuICcvbGliL2pzL2ltYWdlcy8iOwo8L3NjcmlwdD4nOwogICAgICAgIH0KCiAgICAgICAgJHRtcCA9ICc8aW5wdXQgIHR5cGU9ImNvbG9yIiBkYXRhLWhleD0idHJ1ZSIgbmFtZT0iJXMiIGlkPSIlcyIgc2l6ZT0iJyAuICR0aGlzLT5vcHRpb25zWyJzaXplIl0gLiAnIiB2YWx1ZT0iJXMiLz4nOwogICAgICAgICR0eHQgLj0gc3ByaW50ZigkdG1wLCAkdGhpcy0+YmxvY2tfbmFtZSwgJHRoaXMtPmFsaWFzLCAkdGhpcy0+dmFsdWUpOwoKICAgICAgICBjbXNfdXRpbHM6OnNldF9hcHBfZGF0YShfX0ZVTkNUSU9OX18sIDEpOwoKICAgICAgICByZXR1cm4gJHRoaXMtPm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10uJHR4dDsKICAgIH0KCiAgICAvKioKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldF9jaGVja2JveCgpIHsKCiAgICAgICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnRUNCMicpOwogICAgICAgICR2YWx1ZSA9ICR0aGlzLT52YWx1ZSA/ICR0aGlzLT52YWx1ZSA6ICR0aGlzLT5vcHRpb25zWyJkZWZhdWx0X3ZhbHVlIl07CiAgICAgICAgcmV0dXJuICR0aGlzLT5vcHRpb25zWydkZXNjcmlwdGlvbiddLiRtb2QtPkNyZWF0ZUlucHV0SGlkZGVuKCcnLCAkdGhpcy0+YmxvY2tfbmFtZSwgMCkgLiAkbW9kLT5DcmVhdGVJbnB1dENoZWNrYm94KCcnLCAkdGhpcy0+YmxvY2tfbmFtZSwgMSwgJHZhbHVlKTsKICAgIH0KCgoKICAgLyoqCiAgICAqCiAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAqLwogICBwcml2YXRlIGZ1bmN0aW9uIGdldF9maWxlX3NlbGVjdG9yKCkgewogICAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdFQ0IyJyk7CiAgICAgICRjb25maWcgPSBjbXNtcygpLT5HZXRDb25maWcoKTsKCiAgICAgIC8vIEdldCB0aGUgZGlyZWN0b3J5IGNvbnRlbnRzCiAgICAgICRhZGRkaXIgPSBnZXRfc2l0ZV9wcmVmZXJlbmNlKCdjb250ZW50aW1hZ2VfcGF0aCcpOwogICAgICBpZiAoJHRoaXMtPm9wdGlvbnNbJ2RpciddKQogICAgICAgICAkYWRkZGlyID0gJHRoaXMtPm9wdGlvbnNbJ2RpciddOwoKICAgICAgJGRpciA9IGNtc19qb2luX3BhdGgoJGNvbmZpZ1sndXBsb2Fkc19wYXRoJ10sICRhZGRkaXIpOwogICAgICAkZmlsZXR5cGVzID0gJHRoaXMtPm9wdGlvbnNbJ2ZpbGV0eXBlcyddOwogICAgICBpZiAoJGZpbGV0eXBlcyAhPSAnJykgewogICAgICAgICAkZmlsZXR5cGVzID0gZXhwbG9kZSgnLCcsICRmaWxldHlwZXMpOwogICAgICB9CgogICAgICAkZXhjbHVkZXMgPSAkdGhpcy0+b3B0aW9uc1snZXhjbHVkZXByZWZpeCddOwogICAgICBpZiAoJGV4Y2x1ZGVzICE9ICcnKSB7CiAgICAgICAgICRleGNsdWRlcyA9IGV4cGxvZGUoJywnLCAkZXhjbHVkZXMpOwogICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCBjb3VudCgkZXhjbHVkZXMpOyAkaSsrKSB7CiAgICAgICAgICAgICRleGNsdWRlc1skaV0gPSAkZXhjbHVkZXNbJGldIC4gJyonOwogICAgICAgICB9CiAgICAgIH0KICAgICAgJG1heGRlcHRoID0gIWVtcHR5KCR0aGlzLT5vcHRpb25zWydyZWN1cnNlJ10pID8gLTEgOiAwOyAgIC8vIGRlZmF1bHQKICAgICAgJGZsID0gZ2V0X3JlY3Vyc2l2ZV9maWxlX2xpc3QoICRkaXIsICRleGNsdWRlcywgJG1heGRlcHRoLCAnRklMRVMnICk7CgogICAgICAvLyBSZW1vdmUgcHJlZml4CiAgICAgICRmaWxlbGlzdCA9IGFycmF5KCk7CiAgICAgIGZvciAoJGkgPSAwOyAkaSA8IGNvdW50KCRmbCk7ICRpKyspIHsKICAgICAgICAgaWYgKCBpbl9hcnJheSggcGF0aGluZm8oJGZsWyRpXSwgUEFUSElORk9fRVhURU5TSU9OKSwgJGZpbGV0eXBlcyApICkKICAgICAgICAgICAgJGZpbGVsaXN0W10gPSBzdHJfcmVwbGFjZSgkZGlyLCAnJywgJGZsWyRpXSk7CiAgICAgIH0KCiAgICAgIC8vIFNvcnQKICAgICAgaWYgKGlzX2FycmF5KCRmaWxlbGlzdCkgJiYgJHRoaXMtPm9wdGlvbnNbJ3NvcnRmaWxlcyddKSB7CiAgICAgICAgIHNvcnQoJGZpbGVsaXN0KTsKICAgICAgfQoKICAgICAgLy8gY3JlYXRlIHNlbGVjdCBvcHRpb25zCiAgICAgICRvcHRzID0gYXJyYXkoKTsKICAgICAgJHVybF9wcmVmaXggPSAkYWRkZGlyOwogICAgICBmb3IgKCRpID0gMDsgJGkgPCBjb3VudCgkZmlsZWxpc3QpOyAkaSsrKSB7CiAgICAgICAgICRvcHRzWyRmaWxlbGlzdFskaV1dID0gJHVybF9wcmVmaXggLiAkZmlsZWxpc3RbJGldOwogICAgICB9CiAgICAgICRvcHRzID0gYXJyYXkoJycgPT4gJycpICsgJG9wdHM7CgogICAgICAkcHJldmlldyA9ICcnOwogICAgICBpZiAoJHRoaXMtPm9wdGlvbnNbJ3ByZXZpZXcnXSkgewogICAgICAgICBpZiAoJHRoaXMtPnZhbHVlKSB7CiAgICAgICAgICAgICRwcmV2aWV3ID0gJzxpbWcgc3R5bGU9Im1heC13aWR0aDoxMzBweDsiIGNsYXNzPSJmaWxlX3NlbGVjdG9yX3ByZXZpZXciIGRhdGEtdXBsb2Fkc3VybD0iJyAuICRjb25maWdbInVwbG9hZHNfdXJsIl0gLiAnIiAgIHNyYz0iJyAuICRjb25maWdbInVwbG9hZHNfdXJsIl0gLiAnLycgLiAkdGhpcy0+dmFsdWUgLiAnIiBhbHQ9IiI+JzsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHByZXZpZXcgPSAnPGltZyBzdHlsZT0ibWF4LXdpZHRoOjEzMHB4OyIgY2xhc3M9ImZpbGVfc2VsZWN0b3JfcHJldmlldyIgYWx0PSIiIGRhdGEtdXBsb2Fkc3VybD0iJyAuICRjb25maWdbInVwbG9hZHNfdXJsIl0gLiAnIj4nOwogICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiAkdGhpcy0+b3B0aW9uc1snZGVzY3JpcHRpb24nXS4nPGRpdiBjbGFzcz0iZWNiX2ZpbGVfc2VsZWN0b3Jfc2VsZWN0Ij4nIC4gJG1vZC0+Q3JlYXRlSW5wdXREcm9wZG93bignJywgJHRoaXMtPmJsb2NrX25hbWUsICRvcHRzLCAtMSwgJHRoaXMtPnZhbHVlKSAuICc8L2Rpdj4nIC4gJHByZXZpZXc7CiAgIH0KCgoKICAgLyoqCiAgICoKICAgKiBAcmV0dXJuIHN0cmluZwogICAqLwogICBwcml2YXRlIGZ1bmN0aW9uIGdldF9zb3J0YWJsZWxpc3QoKSB7CiAgICAgICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0VDQjInKTsKICAgICAgJG9wdGlvbnMgPSBhcnJheSgpOwogICAgICAkdG1wID0gYXJyYXkoKTsKCiAgICAgIGlmICgkdGhpcy0+b3B0aW9uc1sidWR0Il0pCiAgICAgICAgICRvcHRpb25zID0gVXNlclRhZ09wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpLT5DYWxsVXNlclRhZygkdGhpcy0+b3B0aW9uc1sidWR0Il0sICR0bXApOwogICAgICAkb3B0aW9uc2FycmF5ID0gZXhwbG9kZSgnLCcsICR0aGlzLT5vcHRpb25zWyJ2YWx1ZXMiXSk7CiAgICAgIGlmIChlbXB0eSgkb3B0aW9uc2FycmF5KSkKICAgICAgICAgcmV0dXJuOwogICAgICBmb3JlYWNoICgkb3B0aW9uc2FycmF5IGFzICRvcHRpb24pIHsKICAgICAgICAgaWYgKCRvcHRpb24hPScnKSB7CiAgICAgICAgICAgICRrZXlfdmFsID0gZXhwbG9kZSgnPScsICRvcHRpb24pOwogICAgICAgICAgICAkb3B0aW9uc1ska2V5X3ZhbFswXV0gPSAka2V5X3ZhbFsxXTsKICAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChlbXB0eSgkdGhpcy0+b3B0aW9uc1snZmlyc3RfdmFsdWUnXSkgPT0gZmFsc2UpCiAgICAgICAgICRvcHRpb25zID0gYXJyYXkoJHRoaXMtPm9wdGlvbnNbJ2ZpcnN0X3ZhbHVlJ10gPT4gJycpICsgJG9wdGlvbnM7CiAgICAgICRzZWxlY3RlZExpc3QgPSBleHBsb2RlKCcsJywgJHRoaXMtPnZhbHVlKTsKICAgICAgJGF2YWlsYWJsZSA9ICRvcHRpb25zOwogICAgICAkc2VsZWN0ZWQgPSBhcnJheSgpOwogICAgICBmb3JlYWNoICgkc2VsZWN0ZWRMaXN0IGFzICRpdGVtKSB7CiAgICAgICAgIGlmICggYXJyYXlfa2V5X2V4aXN0cygkaXRlbSwgJGF2YWlsYWJsZSkgKSB7CiAgICAgICAgICAgICRzZWxlY3RlZFskaXRlbV0gPSAkYXZhaWxhYmxlWyRpdGVtXTsKICAgICAgICAgICAgdW5zZXQoJGF2YWlsYWJsZVskaXRlbV0pOwogICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCR0aGlzLT5vcHRpb25zWyJtYXhfbnVtYmVyIl0pIC8vIG1heF9udW1iZXIgdGFrZXMgcHJlY2lkZW5jZSBpZiBib3RoIHNldAogICAgICAgICAkdGhpcy0+b3B0aW9uc1sicmVxdWlyZWRfbnVtYmVyIl0gPSAiIjsKICAgICAgJHNtYXJ0eSA9IFNtYXJ0eV9DTVM6OmdldF9pbnN0YW5jZSgpOwogICAgICAkdHBsID0gJHNtYXJ0eS0+Q3JlYXRlVGVtcGxhdGUoJG1vZC0+R2V0VGVtcGxhdGVSZXNvdXJjZSgnc29ydGFibGVsaXN0X3RlbXBsYXRlLnRwbCcpLCBudWxsLCBudWxsLCAkc21hcnR5KTsKICAgICAgJHRwbC0+YXNzaWduKCdzZWxlY3RhcmVhX3ByZWZpeCcsJHRoaXMtPmJsb2NrX25hbWUpOwogICAgICAkdHBsLT5hc3NpZ24oJ3NlbGVjdGVkX3N0cicsJHRoaXMtPnZhbHVlKTsKICAgICAgJHRwbC0+YXNzaWduKCdzZWxlY3RlZCcsJHNlbGVjdGVkKTsKICAgICAgJHRwbC0+YXNzaWduKCdhdmFpbGFibGUnLCAkYXZhaWxhYmxlKTsKICAgICAgJHRwbC0+YXNzaWduKCdkZXNjcmlwdGlvbicsICR0aGlzLT5vcHRpb25zWydkZXNjcmlwdGlvbiddKTsKICAgICAgJHRwbC0+YXNzaWduKCdsYWJlbExlZnQnLCAkdGhpcy0+b3B0aW9uc1sibGFiZWxfbGVmdCJdKTsKICAgICAgJHRwbC0+YXNzaWduKCdsYWJlbFJpZ2h0JywgJHRoaXMtPm9wdGlvbnNbImxhYmVsX3JpZ2h0Il0pOwogICAgICAkdHBsLT5hc3NpZ24oJ21vZCcsJG1vZCk7CiAgICAgICR0cGwtPmFzc2lnbignbWF4TnVtYmVyJywgJHRoaXMtPm9wdGlvbnNbIm1heF9udW1iZXIiXSk7CiAgICAgICR0cGwtPmFzc2lnbigncmVxdWlyZWROdW1iZXInLCAkdGhpcy0+b3B0aW9uc1sicmVxdWlyZWRfbnVtYmVyIl0pOwogICAgICByZXR1cm4gJHRoaXMtPm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10uJHRwbC0+ZmV0Y2goKTsKICAgfQoKCgogICAgLyoqCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfdGV4dCgpIHsKCiAgICAgICAgaWYgKCEkdGhpcy0+b3B0aW9uc1sidGV4dCJdKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgcmV0dXJuICR0aGlzLT5vcHRpb25zWydkZXNjcmlwdGlvbiddLiR0aGlzLT5vcHRpb25zWyJ0ZXh0Il07CiAgICB9CgogICAgLyoqCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfaHIoKSB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5vcHRpb25zWydkZXNjcmlwdGlvbiddLic8aHIgc3R5bGU9ImRpc3BsYXk6YmxvY2s7IGJvcmRlcjowIG5vbmU7IGJhY2tncm91bmQ6I2NjYzsiIC8+JzsKICAgIH0KCiAgICAvKioKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldF9saW5rKCkgewoKICAgICAgICBpZiAoISR0aGlzLT5vcHRpb25zWyJsaW5rIl0gfHwgISR0aGlzLT5vcHRpb25zWyJ0ZXh0Il0pCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnRUNCMicpOwogICAgICAgIHJldHVybiAkdGhpcy0+b3B0aW9uc1snZGVzY3JpcHRpb24nXS4nPGEgdGFyZ2V0PSInIC4gJHRoaXMtPm9wdGlvbnNbInRhcmdldCJdIC4gJyIgaHJlZj0iJyAuICR0aGlzLT5vcHRpb25zWyJsaW5rIl0gLiAnIj4nIC4gJHRoaXMtPm9wdGlvbnNbInRleHQiXSAuICc8L2E+JzsKICAgIH0KCiAgICAvKioKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldF9tb2R1bGVfbGluaygpIHsKCiAgICAgICAgJG1vZCA9ICcnOwogICAgICAgIGlmICgkdGhpcy0+b3B0aW9uc1sibW9kIl0pCiAgICAgICAgICAgICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJHRoaXMtPm9wdGlvbnNbIm1vZCJdKTsKCiAgICAgICAgJHVzZXJpZCA9IGdldF91c2VyaWQoKTsKICAgICAgICAkdXNlcm9wcyA9IGNtc21zKCktPkdldFVzZXJPcGVyYXRpb25zKCk7CiAgICAgICAgJGFkbWludXNlciA9ICR1c2Vyb3BzLT5Vc2VySW5Hcm91cCgkdXNlcmlkLCAxKTsKCiAgICAgICAgJHRtcCA9ICc8aW5wdXQgaWQ9Im10XycgLiAkdGhpcy0+YmxvY2tfbmFtZSAuICciICcgLiAoICRhZG1pbnVzZXIgPyAndHlwZT0idGV4dCInIDogJ3R5cGU9ImhpZGRlbiInKSAuICcgbmFtZT0iJyAuICR0aGlzLT5ibG9ja19uYW1lIC4gJyIgdmFsdWU9IicgLiAoJHRoaXMtPnZhbHVlID8gJHRoaXMtPnZhbHVlIDogJHRoaXMtPm9wdGlvbnNbImRlZmF1bHRfdmFsdWUiXSkgLiAnIiAgc2l6ZT0iJWQiIG1heGxlbmd0aD0iJWQiIC8+JzsKICAgICAgICAkdG1wID0gc3ByaW50ZigkdG1wLCAkdGhpcy0+b3B0aW9uc1sic2l6ZSJdLCAkdGhpcy0+b3B0aW9uc1sibWF4X2xlbmd0aCJdKTsKICAgICAgICAvLyBvcmlnaW5hbCBDVCBlZGl0CiAgICAgICAgcmV0dXJuICR0aGlzLT5vcHRpb25zWydkZXNjcmlwdGlvbiddLihpc19vYmplY3QoJG1vZCkgPyAkbW9kLT5DcmVhdGVMaW5rKCcnLCAnZGVmYXVsdGFkbWluJywgJycsICR0aGlzLT5vcHRpb25zWyJ0ZXh0Il0sIGFycmF5KCksICcnLCBmYWxzZSwgMCwgJ3RhcmdldD0iJyAuICR0aGlzLT5vcHRpb25zWyJ0YXJnZXQiXSAuICciJykgOiAkdGhpcy0+b3B0aW9uc1sidGV4dCJdKTsgLy8gLiAnPGJyIC8+JyAuICR0bXA7IC8vIENUIGNvbW1lbnQgb3V0CiAgICB9CgoKCiAgIHByaXZhdGUgZnVuY3Rpb24gX2NyZWF0ZV9zZWxlY3QoICRvcHRpb25zICkgewogICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgIC8vIGRyb3Bkb3duIENvbnRlbnQgQmxvY2sgLSBjcmVhdGVzIGEgc2VsZWN0IHVzaW5nIHRoZSBzdXBwbGllZCBwYXJhbWV0ZXJzICYgJHRoaXMtPm9wdGlvbnMKICAgLy8KICAgLy8gY3JlYXRlcyBhIHNlbGVjdCB1c2luZyB0aGUgc3VwcGxpZWQgb3B0aW9ucwogICAvLwogICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0VDQjInKTsKICAgICAgJHNtYXJ0eSA9IFxDbXNBcHA6OmdldF9pbnN0YW5jZSgpLT5HZXRTbWFydHkoKTsKCiAgICAgICR0cGwgPSAkc21hcnR5LT5DcmVhdGVUZW1wbGF0ZSggJG1vZC0+R2V0VGVtcGxhdGVSZXNvdXJjZSgnc2VsZWN0X3RlbXBsYXRlLnRwbCcpLCBudWxsLCBudWxsLCAkc21hcnR5ICk7CiAgICAgICR0cGwtPmFzc2lnbiggJ2Jsb2NrX25hbWUnLCAkdGhpcy0+YmxvY2tfbmFtZSApOwogICAgICAkdHBsLT5hc3NpZ24oICdkZXNjcmlwdGlvbicsICR0aGlzLT5vcHRpb25zWydkZXNjcmlwdGlvbiddICk7CiAgICAgICR0cGwtPmFzc2lnbiggJ211bHRpcGxlJywgJHRoaXMtPm9wdGlvbnNbJ211bHRpcGxlJ10gKTsKICAgICAgJHRwbC0+YXNzaWduKCAnY29tcGFjdCcsICR0aGlzLT5vcHRpb25zWydjb21wYWN0J10gKTsKICAgICAgJHRwbC0+YXNzaWduKCAnbm9uZV9zZWxlY3RlZCcsICRtb2QtPkxhbmcoJ25vbmVfc2VsZWN0ZWQnKSApOwoKICAgICAgaWYgKCBpc3NldCgkdGhpcy0+b3B0aW9uc1snc2l6ZSddKSAmJiAkdGhpcy0+b3B0aW9uc1snc2l6ZSddPjAgKSB7CiAgICAgICAgICRzaXplID0gJHRoaXMtPm9wdGlvbnNbJ3NpemUnXTsKICAgICAgfSBlbHNlaWYgKCAhZW1wdHkoJHRoaXMtPm9wdGlvbnNbJ2NvbXBhY3QnXSkgKSB7CiAgICAgICAgICRzaXplID0gY291bnQoJG9wdGlvbnMpOwogICAgICB9IGVsc2UgewogICAgICAgICAkc2l6ZSA9IDU7ICAvLyBkZWZhdWx0CiAgICAgIH0KICAgICAgJHRwbC0+YXNzaWduKCAnc2l6ZScsICRzaXplICk7CgogICAgICAkdHBsLT5hc3NpZ24oICdzZWxlY3RlZCcsICR0aGlzLT52YWx1ZSApOwogICAgICBpZiAoICR0aGlzLT5vcHRpb25zWydtdWx0aXBsZSddICkgewogICAgICAgICAkc2VsZWN0ZWRfdmFsdWVzID0gZXhwbG9kZSgnLCcsICR0aGlzLT52YWx1ZSk7CiAgICAgICAgICRzZWxlY3RlZF90ZXh0ID0gW107CiAgICAgICAgIGZvcmVhY2ggKCRzZWxlY3RlZF92YWx1ZXMgYXMgJHZhbHVlKSB7CiAgICAgICAgICAgICRzZWxlY3RlZF90ZXh0W10gPSBhcnJheV9zZWFyY2goICR2YWx1ZSwgJG9wdGlvbnMgKTsKICAgICAgICAgfQogICAgICAgICAkc2VsZWN0ZWRfdGV4dCA9IGltcGxvZGUoJywgJywgJHNlbGVjdGVkX3RleHQpOwogICAgICAgICAkdHBsLT5hc3NpZ24oICdzZWxlY3RlZF92YWx1ZXMnLCAkc2VsZWN0ZWRfdmFsdWVzICk7ICAvLyBhcnJheQogICAgICAgICAkdHBsLT5hc3NpZ24oICdzZWxlY3RlZF90ZXh0JywgJHNlbGVjdGVkX3RleHQgKTsgICAgICAvLyB0ZXh0CiAgICAgIH0KICAgICAgaWYgKCBlbXB0eSgkdGhpcy0+b3B0aW9uc1snZmlyc3RfdmFsdWUnXSk9PWZhbHNlICkKICAgICAgICAgJG9wdGlvbnMgPSBhcnJheSgkdGhpcy0+b3B0aW9uc1snZmlyc3RfdmFsdWUnXSA9PiAnJykgKyAkb3B0aW9uczsKICAgICAgJHRwbC0+YXNzaWduKCdvcHRpb25zJywgJG9wdGlvbnMgKTsKICAgICAgcmV0dXJuICR0cGwtPmZldGNoKCk7CgogICB9CgoKCiAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0X2Ryb3Bkb3duKCkgewogICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgIC8vIGRyb3Bkb3duIENvbnRlbnQgQmxvY2sKICAgLy8KICAgLy8gcmV0dXJucyBhIHNlbGVjdAogICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgIGlmICghJHRoaXMtPm9wdGlvbnNbInZhbHVlcyJdKSByZXR1cm47CgogICAgICAkb3B0aW9ucyA9IGFycmF5KCk7CiAgICAgICR0bXBPcHRpb25zID0gZXhwbG9kZSgnLCcsICR0aGlzLT5vcHRpb25zWyJ2YWx1ZXMiXSk7CiAgICAgIGZvcmVhY2ggKCR0bXBPcHRpb25zIGFzICRvcHRpb24pIHsKICAgICAgICAgJGtleV92YWwgPSBleHBsb2RlKCc9JywgJG9wdGlvbik7CiAgICAgICAgIGlmICggY291bnQoJGtleV92YWwpPjEgKSB7CiAgICAgICAgICAgICRvcHRpb25zWyRrZXlfdmFsWzBdXSA9ICRrZXlfdmFsWzFdOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkb3B0aW9uc1ska2V5X3ZhbFswXV0gPSAka2V5X3ZhbFswXTsKICAgICAgICAgfQogICAgICB9CgogICAgICByZXR1cm4gJHRoaXMtPl9jcmVhdGVfc2VsZWN0KCAkb3B0aW9ucyApOwogICB9CgoKCiAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0X2Ryb3Bkb3duX2Zyb21fdWR0KCkgewogICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgIC8vIGRyb3Bkb3duIENvbnRlbnQgQmxvY2sgd2l0aCAkb3B0aW9ucyBhcnJheSBjb21pbmcgZnJvbSBhIFVEVAogICAvLwogICAvLyByZXR1cm5zIGEgc2VsZWN0CiAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgaWYgKCEkdGhpcy0+b3B0aW9uc1sidWR0Il0pIHJldHVybjsKCiAgICAgICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0VDQjInKTsKICAgICAgJHNtYXJ0eSA9IGNtc21zKCktPkdldFNtYXJ0eSgpOwoKICAgICAgaWYgKCBVc2VyVGFnT3BlcmF0aW9uczo6Z2V0X2luc3RhbmNlKCktPlVzZXJUYWdFeGlzdHMoJHRoaXMtPm9wdGlvbnNbInVkdCJdKSApIHsKICAgICAgICAgJHRtcCA9IGFycmF5KCk7CiAgICAgICAgICRvcHRpb25zID0gVXNlclRhZ09wZXJhdGlvbnM6OmdldF9pbnN0YW5jZSgpLT5DYWxsVXNlclRhZygkdGhpcy0+b3B0aW9uc1sidWR0Il0sICR0bXApOwogICAgICB9IGVsc2UgewogICAgICAgICAkZXJyID0gJG1vZC0+TGFuZygndWR0X2Vycm9yJywgJHRoaXMtPm9wdGlvbnNbInVkdCJdICk7CiAgICAgICAgICRvcHRpb25zID0gYXJyYXkoKTsKICAgICAgfQoKICAgICAgaWYgKGVtcHR5KCR0aGlzLT5vcHRpb25zWydmaXJzdF92YWx1ZSddKSA9PSBmYWxzZSkKICAgICAgICAgJG9wdGlvbnMgPSBhcnJheSgkdGhpcy0+b3B0aW9uc1snZmlyc3RfdmFsdWUnXSA9PiAnJykgKyAkb3B0aW9uczsKCiAgICAgIGlmICghZW1wdHkoJGVycikpIHJldHVybiAnPGRpdiBjbGFzcz0icGFnZXdhcm5pbmciPicuJGVyci4nPC9kaXY+JzsKCiAgICAgIHJldHVybiAkdGhpcy0+X2NyZWF0ZV9zZWxlY3QoICRvcHRpb25zICk7CiAgIH0KCgoKICAgLyoqCiAgICAqCiAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAqLwogICBwcml2YXRlIGZ1bmN0aW9uIGdldF9kcm9wZG93bl9mcm9tX2diYygpIHsKICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAvLyBkcm9wZG93biBDb250ZW50IEJsb2NrIHdpdGggJG9wdGlvbnMgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBmcm9tIGEgR0NCCiAgIC8vCiAgIC8vIHJldHVybnMgYSBzZWxlY3QKICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICBpZiAoISR0aGlzLT5vcHRpb25zWyJnYmMiXSkgcmV0dXJuOwoKICAgICAgJHNtYXJ0eSA9IGNtc21zKCktPkdldFNtYXJ0eSgpOwoKICAgICAgJHRtcCA9IGFycmF5KCk7CiAgICAgICRvcHRpb25zID0gYXJyYXkoKTsKICAgICAgJG9wdGlvbnNnYmMgPSAkc21hcnR5LT5mZXRjaCgnZ2xvYmFsY29udGVudDonIC4gJHRoaXMtPm9wdGlvbnNbImdiYyJdKTsKCiAgICAgICRvcHRpb25zYXJyYXkgPSBleHBsb2RlKCcsJywgJG9wdGlvbnNnYmMpOwogICAgICBpZiAoZW1wdHkoJG9wdGlvbnNhcnJheSkpIHJldHVybjsKCiAgICAgIGZvcmVhY2ggKCRvcHRpb25zYXJyYXkgYXMgJG9wdGlvbikgewogICAgICAgICAka2V5X3ZhbCA9IGV4cGxvZGUoJz0nLCAkb3B0aW9uKTsKICAgICAgICAgJG9wdGlvbnNbJGtleV92YWxbMF1dID0gJGtleV92YWxbMV07CiAgICAgIH0KCiAgICAgIGlmIChlbXB0eSgkdGhpcy0+b3B0aW9uc1snZmlyc3RfdmFsdWUnXSkgPT0gZmFsc2UpCiAgICAgICAgICRvcHRpb25zID0gYXJyYXkoJHRoaXMtPm9wdGlvbnNbJ2ZpcnN0X3ZhbHVlJ10gPT4gJycpICsgJG9wdGlvbnM7CgogICAgICByZXR1cm4gJHRoaXMtPl9jcmVhdGVfc2VsZWN0KCAkb3B0aW9ucyApOwogICB9CgoKCiAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZHJvcGRvd25fZnJvbV9jdXN0b21ncygpIHsKICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAvLyBjcmVhdGVzIGEgZHJvcGRvd24gZnJvbSB0aGUgdmFsdWVzIGluIGEgQ3VzdG9tR1MgZmllbGQKICAgLy8gbm90ZTogdGhlIEN1c3RvbUdTIGZpZWxkIHNob3VsZCBiZSBhIHBsYWluIHRleHRhcmVhCiAgIC8vICAgICAgIHVzZSBlaXRoZXIgbmV3bGluZXMgb3IgY29tbWFzIHRvIHNlcGFyYXRlIGVhY2ggdGl0bGUtdmFsdWUgcGFpcgogICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICRkcm9wZG93biA9IGFycmF5KCk7CiAgICAgICRlcnIgPSAnJzsKICAgICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnRUNCMicpOwogICAgICAkQ3VzdG9tR1MgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0N1c3RvbUdTJyk7CgogICAgICBpZiggaXNfb2JqZWN0KCRDdXN0b21HUykgKSB7CiAgICAgICAgIC8vIGNyZWF0ZSBhcnJheSAkZHJvcGRvd24gd2l0aCBhCiAgICAgICAgICRzZWxlY3RPcHRpb25zID0gJEN1c3RvbUdTLT5HZXRGaWVsZCggJHRoaXMtPm9wdGlvbnNbJ2N1c3RvbWdzX2ZpZWxkJ10gKTsKICAgICAgICAgaWYgKCBlbXB0eSgkc2VsZWN0T3B0aW9uc1sndmFsdWUnXSkgKSB7CiAgICAgICAgICAgICRlcnIgPSAnPGRpdiBjbGFzcz0icGFnZXdhcm5pbmciPicgLiAkbW9kLT5MYW5nKCdjdXN0b21nc19maWVsZF9lcnJvcicsICR0aGlzLT5vcHRpb25zWydjdXN0b21nc19maWVsZCddICkgLiAnPC9kaXY+PGJyPic7CgogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyB1c2UgZWl0aGVyIG5ld2xpbmVzIG9yIGNvbW1hcyB0byBzZXBhcmF0ZSBlYWNoIHRpdGxlLXZhbHVlIHBhaXIKICAgICAgICAgICAgJHNlbGVjdE9wdGlvbnMgPSBzdHJfcmVwbGFjZShQSFBfRU9MLCAnLCcsICRzZWxlY3RPcHRpb25zWyd2YWx1ZSddKTsKICAgICAgICAgICAgJHNlbGVjdExpbmVzID0gZXhwbG9kZSgnLCcsICRzZWxlY3RPcHRpb25zKTsKICAgICAgICAgICAgZm9yZWFjaCAoJHNlbGVjdExpbmVzIGFzICRvbmVPcHRpb24pIHsKICAgICAgICAgICAgICAgJG9wdCA9IGV4cGxvZGUoICc9JywgdHJpbSgkb25lT3B0aW9uKSApOwogICAgICAgICAgICAgICAkZHJvcGRvd25bJG9wdFswXV0gPSBpc1NldCgkb3B0WzFdKSA/ICRvcHRbMV0gOiAkb3B0WzBdOwogICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgfQoKICAgICAgcmV0dXJuICRlcnIuJHRoaXMtPl9jcmVhdGVfc2VsZWN0KCAkZHJvcGRvd24gKTsKICAgfQoKCgogICAvKioKICAgICogREVQUkVDQVRFRAogICAgKiBAcmV0dXJuIHN0cmluZwogICAgKi8KICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRfZHJvcGRvd25fZnJvbV9tb2R1bGUoKSB7CiAgICAgICAgaWYgKCEkdGhpcy0+b3B0aW9uc1sibW9kIl0pCiAgICAgICAgICAgIHJldHVybjsKCiAgICAgICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnRUNCMicpOwogICAgICAgICRkYXRhID0gJG1vZC0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGEoJ3snIC4gJHRoaXMtPm9wdGlvbnNbIm1vZCJdIC4gJ30nKTsKCiAgICAgICAgJG9wdGlvbnMgPSBhcnJheSgpOwogICAgICAgICRvcHRpb25zYXJyYXkgPSBleHBsb2RlKCcsJywgJGRhdGEpOwogICAgICAgIGlmIChlbXB0eSgkb3B0aW9uc2FycmF5KSkKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICBmb3JlYWNoICgkb3B0aW9uc2FycmF5IGFzICRvcHRpb24pIHsKICAgICAgICAgICAgJGtleV92YWwgPSBleHBsb2RlKCc9JywgJG9wdGlvbik7CiAgICAgICAgICAgICRvcHRpb25zWyRrZXlfdmFsWzBdXSA9ICRrZXlfdmFsWzFdOwogICAgICAgIH0KICAgICAgICBpZiAoZW1wdHkoJHRoaXMtPm9wdGlvbnNbJ2RlZmF1bHRfdmFsdWUnXSkgPT0gZmFsc2UpCiAgICAgICAgICAgICRvcHRpb25zID0gYXJyYXkoJHRoaXMtPm9wdGlvbnNbJ2RlZmF1bHRfdmFsdWUnXSA9PiAnJykgKyAkb3B0aW9uczsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5vcHRpb25zWydkZXNjcmlwdGlvbiddLiRtb2QtPkNyZWF0ZUlucHV0RHJvcGRvd24oJycsICR0aGlzLT5ibG9ja19uYW1lLCAkb3B0aW9ucywgLTEsICR0aGlzLT52YWx1ZSk7CiAgIH0KCgoKICAgIC8qKgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0X21vZHVsZSgpIHsKCiAgICAgICAgJG1vZG9wcyA9IGNtc21zKCktPkdldE1vZHVsZU9wZXJhdGlvbnMoKTsKICAgICAgICAkbW9kdWxlcyA9ICRtb2RvcHMtPkdldEluc3RhbGxlZE1vZHVsZXMoKTsKICAgICAgICAkbW9kdWxlc2FycmF5ID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoICgkbW9kdWxlcyBhcyAkbW9kdWxlKSB7CiAgICAgICAgICAgICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJG1vZHVsZSk7CiAgICAgICAgICAgIGlmIChpc19vYmplY3QoJG1vZCkpCiAgICAgICAgICAgICAgICAkbW9kdWxlc2FycmF5WyRtb2QtPkdldE5hbWUoKV0gPSAkbW9kdWxlOwogICAgICAgIH0KCiAgICAgICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnRUNCMicpOwogICAgICAgIHJldHVybiAkdGhpcy0+b3B0aW9uc1snZGVzY3JpcHRpb24nXS4kbW9kLT5DcmVhdGVJbnB1dERyb3Bkb3duKCcnLCAkdGhpcy0+YmxvY2tfbmFtZSwgJG1vZHVsZXNhcnJheSwgLTEsICR0aGlzLT52YWx1ZSk7CiAgICB9CgoKCiAgICAvKioKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldF9yYWRpbygpIHsKICAgICAgICBpZiAoISR0aGlzLT5vcHRpb25zWyJ2YWx1ZXMiXSkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0VDQjInKTsKICAgICAgICAkc21hcnR5ID0gY21zbXMoKS0+R2V0U21hcnR5KCk7CgogICAgICAgICRvcHRpb25zID0gYXJyYXkoKTsKCiAgICAgICAgJG9wdGlvbnNhcnJheSA9IGV4cGxvZGUoJywnLCAkdGhpcy0+b3B0aW9uc1sidmFsdWVzIl0pOwogICAgICAgIGlmIChlbXB0eSgkb3B0aW9uc2FycmF5KSkKICAgICAgICAgICAgcmV0dXJuOwoKICAgICAgICBmb3JlYWNoICgkb3B0aW9uc2FycmF5IGFzICRvcHRpb24pIHsKICAgICAgICAgICAgJGtleV92YWwgPSBleHBsb2RlKCc9JywgJG9wdGlvbik7CiAgICAgICAgICAgICRvcHRpb25zWyRrZXlfdmFsWzBdXSA9ICRrZXlfdmFsWzFdOwogICAgICAgIH0KCiAgICAgICAgJGRlbGltaXRlciA9ICgkdGhpcy0+b3B0aW9uc1siaW5saW5lIl0pID8gJyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOycgOiAnPGJyPic7CgogICAgICAgIGlmICggIWVtcHR5KCR0aGlzLT52YWx1ZSkgKSB7CiAgICAgICAgICAgICRzZWxlY3RlZFZhbHVlID0gJHRoaXMtPnZhbHVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+b3B0aW9uc1siZGVmYXVsdF92YWx1ZSJdPT0nLTEnKSB7CiAgICAgICAgICAgICAgICAkc2VsZWN0ZWRWYWx1ZSA9IHJlc2V0KCRvcHRpb25zKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRzZWxlY3RlZFZhbHVlID0gJG9wdGlvbnNbJHRoaXMtPm9wdGlvbnNbImRlZmF1bHRfdmFsdWUiXV07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+b3B0aW9uc1snZGVzY3JpcHRpb24nXS4kbW9kLT5DcmVhdGVJbnB1dFJhZGlvR3JvdXAoJycsICR0aGlzLT5ibG9ja19uYW1lLCAkb3B0aW9ucywgJHNlbGVjdGVkVmFsdWUsICcnLCAkZGVsaW1pdGVyKTsKICAgIH0KCgoKICAgIC8qKgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfaGlkZGVuKCkgewogICAgICAgICR0bXAgPSAnPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iJXMiIHZhbHVlPSIlcyI+JzsKICAgICAgICAkaW5wdXQgPSBzcHJpbnRmKCR0bXAsICR0aGlzLT5ibG9ja19uYW1lLCAkdGhpcy0+b3B0aW9uc1sndmFsdWUnXSk7CiAgICAgICAgcmV0dXJuICRpbnB1dDsKICAgIH0KCgoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfZmllbGRzZXRfc3RhcnQoKSB7CiAgICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgIC8vCiAgICAvLwogICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICAgJHRtcCA9ICc8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxmaWVsZHNldCBuYW1lPSIlcyI+CiAgICAgICAgICAgIDxsZWdlbmQ+JXM8L2xlZ2VuZD4KICAgICAgICAgICAgJXMKICAgICAgICA8ZGl2PjxwPic7CiAgICAgICAgJGlucHV0ID0gc3ByaW50ZigkdG1wLCAkdGhpcy0+YmxvY2tfbmFtZSwgJHRoaXMtPm9wdGlvbnNbJ2xlZ2VuZCddLCAkdGhpcy0+b3B0aW9uc1snZGVzY3JpcHRpb24nXSk7CiAgICAgICAgcmV0dXJuICRpbnB1dDsKICAgIH0KCgoKICAgcHVibGljIGZ1bmN0aW9uIGdldF9maWVsZHNldF9lbmQoKSB7CiAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAvLwogICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgcmV0dXJuICc8L3A+CiAgICAgIDwvZGl2PgogICAgICA8L2ZpZWxkc2V0PgogICAgICA8ZGl2PjxwPic7CiAgIH0KCgoKICAgcHVibGljIGZ1bmN0aW9uIGdldF9nYWxsZXJ5X3BpY2tlcigpIHsKICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAvLyBnYWxsZXJ5X3BpY2tlciBDb250ZW50IEJsb2NrCiAgIC8vCiAgIC8vIHJldHVybnMgYW4gc2VsZWN0IGlucHV0IG9mIGdhbGxlcmllcyAnZ2FsbGVyeSB0aXRsZScgPT4gJ2dhbGxlcnktZGlyJywgaG9tZSBnYWxsZXJ5IGlzIGV4Y2x1ZGVkCiAgIC8vIFBhcmFtZXRlcnM6CiAgIC8vICAgIGRpciAtIG9ubHkgcmV0dXJuIGdhbGxlcmllcyB0aGF0IGFyZSBzdWItZ2FsbGVyaWVzIG9mIHRoaXMgZ2FsbGVyeSBkaXIsCiAgIC8vICAgICAgICAgIGRlZmF1bHQgaXMgYWxsIGdhbGxlcmllcywgZXhjbHVkaW5nIGRlZmF1bHQgdG9wIGxldmVsIGdhbGxlcnkKICAgLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAkZGlyID0gJHRoaXMtPm9wdGlvbnNbJ2RpciddLicvJzsgICAgLy8gZGVmYXVsdCBkaXIgKG5lZWRzICcvJyBhdCBlbmQpCgogICAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdFQ0IyJyk7CiAgICAgICRHYWxsZXJ5TW9kdWxlID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdHYWxsZXJ5Jyk7CiAgICAgIGlmICghaXNfb2JqZWN0KCRHYWxsZXJ5TW9kdWxlKSkgewogICAgICAgICAkZXJyID0gJzxkaXYgY2xhc3M9InBhZ2V3YXJuaW5nIj4nIC4gJG1vZC0+TGFuZygnZ2FsbGVyeV9tb2R1bGVfZXJyb3InKSAuICc8L2Rpdj48YnI+JzsKICAgICAgICAgcmV0dXJuICRlcnI7CiAgICAgIH0KCiAgICAgICRnYWxsZXJpZXMgPSBHYWxsZXJ5X3V0aWxzOjpHZXRHYWxsZXJpZXMoKTsKICAgICAgJGdhbGxlcnlBcnJheSA9IGFycmF5KCctLS0gbm9uZSAtLS0nID0+ICcnKTsKCiAgICAgIGZvcmVhY2ggKCRnYWxsZXJpZXMgYXMgJGdhbGxlcnkpIHsKICAgICAgICAgaWYgKCRnYWxsZXJ5WydmaWxlbmFtZSddIT0nJykgeyAgICAvLyBpZ25vcmVzIGRlZmF1bHQgZ2FsbGVyeQogICAgICAgICAgICBpZiAoJGRpciE9Jy8nKSB7CiAgICAgICAgICAgICAgIC8vIG9ubHkgc2VsZWN0IHN1Yi1nYWxsZXJpZXMgb2YgJGRpcgogICAgICAgICAgICAgICAkaXNTdWJEaXIgPSBzdHJpcG9zKCRnYWxsZXJ5WydmaWxlcGF0aCddLCAkZGlyKTsKCiAgICAgICAgICAgICAgIGlmICgkaXNTdWJEaXIhPT1GQUxTRSAmJiAkaXNTdWJEaXI9PTApIHsKICAgICAgICAgICAgICAgICAgJGdhbGxlcnlfZGlyID0gJGdhbGxlcnlbJ2ZpbGVwYXRoJ10ucnRyaW0oJGdhbGxlcnlbJ2ZpbGVuYW1lJ10sICcvJyk7CiAgICAgICAgICAgICAgICAgICRnYWxsZXJ5QXJyYXlbJGdhbGxlcnlbJ3RpdGxlJ11dID0gJGdhbGxlcnlfZGlyOwogICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAvLyBzZWxlY3QgYWxsIGdhbGxlcmllcwogICAgICAgICAgICAgICAkZ2FsbGVyeV9kaXIgPSAkZ2FsbGVyeVsnZmlsZXBhdGgnXS5ydHJpbSgkZ2FsbGVyeVsnZmlsZW5hbWUnXSwgJy8nKTsKICAgICAgICAgICAgICAgJGdhbGxlcnlBcnJheVskZ2FsbGVyeVsndGl0bGUnXV0gPSAkZ2FsbGVyeV9kaXI7CiAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICB9CgogICAgICByZXR1cm4gJHRoaXMtPm9wdGlvbnNbJ2Rlc2NyaXB0aW9uJ10uJG1vZC0+Q3JlYXRlSW5wdXREcm9wZG93bignJywgJHRoaXMtPmJsb2NrX25hbWUsICRnYWxsZXJ5QXJyYXksIC0xLCAkdGhpcy0+dmFsdWUpOwogICB9CgoKCiAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0X2lucHV0X3JlcGVhdGVyKCkgewogICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgIC8vICAgIGNyZWF0ZXMgYSByZXBlYXRpbmcgdGV4dCBmaWVsZCB0aGF0CiAgIC8vCiAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgJHNtYXJ0eSA9IFxDbXNBcHA6OmdldF9pbnN0YW5jZSgpLT5HZXRTbWFydHkoKTsKICAgICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnRUNCMicpOwoKICAgICAgJGZpZWxkcyA9IGV4cGxvZGUoJ3x8JywgJHRoaXMtPnZhbHVlKTsKICAgICAgJHRwbCA9ICRzbWFydHktPkNyZWF0ZVRlbXBsYXRlKCAkbW9kLT5HZXRUZW1wbGF0ZVJlc291cmNlKCdpbnB1dF9yZXBlYXRlcl90ZW1wbGF0ZS50cGwnKSwgbnVsbCwgbnVsbCwgJHNtYXJ0eSApOwogICAgICAkdHBsLT5hc3NpZ24oJ2Jsb2NrX25hbWUnLCAkdGhpcy0+YmxvY2tfbmFtZSApOwogICAgICAkdHBsLT5hc3NpZ24oJ3NpemUnLCAkdGhpcy0+b3B0aW9uc1sic2l6ZSJdICk7CiAgICAgICR0cGwtPmFzc2lnbignbWF4X2xlbmd0aCcsICR0aGlzLT5vcHRpb25zWyJtYXhfbGVuZ3RoIl0gKTsKICAgICAgJHRwbC0+YXNzaWduKCd2YWx1ZScsICR0aGlzLT52YWx1ZSApOwogICAgICAkdHBsLT5hc3NpZ24oJ2ZpZWxkcycsICRmaWVsZHMgKTsKICAgICAgJHRwbC0+YXNzaWduKCdkZXNjcmlwdGlvbicsICR0aGlzLT5vcHRpb25zWydkZXNjcmlwdGlvbiddICk7CiAgICAgICR0cGwtPmFzc2lnbigndGl0bGVfYWRkX2xpbmUnLCAkbW9kLT5MYW5nKCdhZGRfbGluZScpICk7CiAgICAgICR0cGwtPmFzc2lnbigndGl0bGVfcmVtb3ZlX2xpbmUnLCAkbW9kLT5MYW5nKCdyZW1vdmVfbGluZScpICk7CiAgICAgIHJldHVybiAkdHBsLT5mZXRjaCgpOwogICB9CgoKCiAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0X2V4dHJhX29wdGlvbnMoYXJyYXkgJHBhcmFtcykgewogICAvLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgIC8vCiAgIC8vCiAgIC8vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgaWYgKCFpc1NldCgkcGFyYW1zWyJmaWVsZCJdKSkKICAgICAgICAgcmV0dXJuOwoKICAgICAgJG9wdGlvbnMgPSBhcnJheSgpOwogICAgICAkZGVmYXVsdF9vcHRpb25zID0gYXJyYXkoKTsKICAgICAgc3dpdGNoIChzdHJ0b2xvd2VyKCRwYXJhbXNbImZpZWxkIl0pKSB7CiAgICAgICAgICAgIGNhc2UgImNvbG9yX3BpY2tlciI6CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJzaXplIl0gPSAxMDsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlZmF1bHRfdmFsdWUiXSA9ICcnOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVzY3JpcHRpb24iXSA9ICcnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIm1vZHVsZV9saW5rIjoKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbIm1vZCJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJ0ZXh0Il0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbInRhcmdldCJdID0gJ19zZWxmJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlZmF1bHRfdmFsdWUiXSA9ICcnOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sic2l6ZSJdID0gMzA7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJtYXhfbGVuZ3RoIl0gPSAyNTU7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZXNjcmlwdGlvbiJdID0gJyc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAibGluayI6CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJ0ZXh0Il0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbInRhcmdldCJdID0gJ19zZWxmJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImxpbmsiXSA9ICcnOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVzY3JpcHRpb24iXSA9ICcnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgIm1vZHVsZSI6CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZWZhdWx0X3ZhbHVlIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbInRleHQiXSA9ICcnOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sibGluayJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZXNjcmlwdGlvbiJdID0gJyc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZHJvcGRvd25fZnJvbV9tb2R1bGUiOgogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sibW9kIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlZmF1bHRfdmFsdWUiXSA9ICcnOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZmlyc3RfdmFsdWUiXSA9ICcnOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVzY3JpcHRpb24iXSA9ICcnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImZpbGVfc2VsZWN0b3IiOgogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZmlsZXR5cGVzIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImV4Y2x1ZGVwcmVmaXgiXSA9ICcnOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sicmVjdXJzZSJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJzb3J0ZmlsZXMiXSA9ICcnOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGlyIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbInByZXZpZXciXSA9ICcnOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVzY3JpcHRpb24iXSA9ICcnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImRyb3Bkb3duIjoKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sic2l6ZSJdID0gJyc7CiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbIm11bHRpcGxlIl0gPSAnJzsKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sidmFsdWVzIl0gPSAnJzsKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVmYXVsdF92YWx1ZSJdID0gJyc7CiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImZpcnN0X3ZhbHVlIl0gPSAnJzsKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVzY3JpcHRpb24iXSA9ICcnOwogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJjb21wYWN0Il0gPSAnJzsKICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImRyb3Bkb3duX2Zyb21fdWR0IjoKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sic2l6ZSJdID0gNTsKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sibXVsdGlwbGUiXSA9ICcnOwogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJ2YWx1ZXMiXSA9ICcnOwogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZWZhdWx0X3ZhbHVlIl0gPSAnJzsKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZmlyc3RfdmFsdWUiXSA9ICcnOwogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJ1ZHQiXSA9ICcnOwogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZXNjcmlwdGlvbiJdID0gJyc7CiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImNvbXBhY3QiXSA9ICcnOwogICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiZHJvcGRvd25fZnJvbV9nYmMiOgogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJzaXplIl0gPSA1OwogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJtdWx0aXBsZSJdID0gJyc7CiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbInZhbHVlcyJdID0gJyc7CiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlZmF1bHRfdmFsdWUiXSA9ICcnOwogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJmaXJzdF92YWx1ZSJdID0gJyc7CiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImdiYyJdID0gJyc7CiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlc2NyaXB0aW9uIl0gPSAnJzsKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siY29tcGFjdCJdID0gJyc7CiAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdkcm9wZG93bl9mcm9tX2N1c3RvbWdzJzoKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1snbXVsdGlwbGUnXSA9ICcnOwogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWydzaXplJ10gPSAnJzsKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1snY3VzdG9tZ3NfZmllbGQnXSA9ICcnOwogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWydkZXNjcmlwdGlvbiddID0gJyc7CiAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImNvbXBhY3QiXSA9ICcnOwogICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAidGV4dGFyZWEiOgogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVmYXVsdF92YWx1ZSJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJyb3dzIl0gPSAyMDsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImNvbHMiXSA9IDgwOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVzY3JpcHRpb24iXSA9ICcnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgImVkaXRvciI6CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZWZhdWx0X3ZhbHVlIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbInJvd3MiXSA9IDIwOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siY29scyJdID0gODA7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZXNjcmlwdGlvbiJdID0gJyc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiaW5wdXQiOgogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVmYXVsdF92YWx1ZSJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJzaXplIl0gPSAzMDsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbIm1heF9sZW5ndGgiXSA9IDI1NTsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlc2NyaXB0aW9uIl0gPSAnJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJzb3J0YWJsZWxpc3QiOgogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sidmFsdWVzIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImZpcnN0X3ZhbHVlIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImFsbG93ZHVwbGljYXRlcyJdID0gZmFsc2U7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJtYXhfc2VsZWN0ZWQiXSA9IC0xOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sibGFiZWxfbGVmdCJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJsYWJlbF9yaWdodCJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJ1ZHQiXSA9ICcnOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVzY3JpcHRpb24iXSA9ICcnOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sibWF4X251bWJlciJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJyZXF1aXJlZF9udW1iZXIiXSA9ICcnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgInRleHQiOgogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sidGV4dCJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJleGVjdXRlIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlc2NyaXB0aW9uIl0gPSAnJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJwYWdlcyI6CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZWZhdWx0X3ZhbHVlIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlc2NyaXB0aW9uIl0gPSAnJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJjaGVja2JveCI6CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZWZhdWx0X3ZhbHVlIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlc2NyaXB0aW9uIl0gPSAnJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICd0aW1lcGlja2VyJzoKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbInNpemUiXSA9IDEwOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sibWF4X2xlbmd0aCJdID0gMTA7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJ0aW1lX2Zvcm1hdCJdID0gJ0hIOm1tJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlc2NyaXB0aW9uIl0gPSAnJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdkYXRlcGlja2VyJzoKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbInNpemUiXSA9IDIwOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sibWF4X2xlbmd0aCJdID0gMjA7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkYXRlX2Zvcm1hdCJdID0gJ3l5LW1tLWRkJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbInRpbWVfZm9ybWF0Il0gPSAnSEg6bW0nOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sidGltZSJdID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZXNjcmlwdGlvbiJdID0gJyc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAncmFkaW8nOgogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sibXVsdGlwbGUiXSA9ICcnOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sidmFsdWVzIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlZmF1bHRfdmFsdWUiXSA9IC0xOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siaW5saW5lIl0gPSBmYWxzZTsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlc2NyaXB0aW9uIl0gPSAnJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJociI6CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZXNjcmlwdGlvbiJdID0gJyc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAiaW1hZ2VfcGlja2VyIjoKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbImRlc2NyaXB0aW9uIl0gPSAnJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICdoaWRkZW4nOgogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sndmFsdWUnXSA9ICcnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgJ2ZpZWxkc2V0X3N0YXJ0JzoKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbJ2xlZ2VuZCddID0gJyc7CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZXNjcmlwdGlvbiJdID0gJyc7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSAnZ2FsbGVyeV9waWNrZXInOgogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWydkaXInXSA9ICcnOwogICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWydkZXNjcmlwdGlvbiddID0gJyc7CiAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlICJpbnB1dF9yZXBlYXRlciI6CiAgICAgICAgICAgICAgICAkZGVmYXVsdF9vcHRpb25zWyJkZWZhdWx0X3ZhbHVlIl0gPSAnJzsKICAgICAgICAgICAgICAgICRkZWZhdWx0X29wdGlvbnNbInNpemUiXSA9IDUwOwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1sibWF4X2xlbmd0aCJdID0gMjU1OwogICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1siZGVzY3JpcHRpb24iXSA9ICcnOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgIH0KCiAgICAgICR0aGlzLT5maWVsZCA9ICRwYXJhbXNbImZpZWxkIl07CgogICAgICBpZiAoZW1wdHkoJHBhcmFtcykgPT0gZmFsc2UpIHsKICAgICAgICAgZm9yZWFjaCAoJHBhcmFtcyBhcyAka2V5ID0+ICRwYXJhbSkgewogICAgICAgICAgICBpZiAoaXNTZXQoJGRlZmF1bHRfb3B0aW9uc1ska2V5XSkgJiYgZW1wdHkoJHBhcmFtKSA9PSBmYWxzZSkKICAgICAgICAgICAgICAgJGRlZmF1bHRfb3B0aW9uc1ska2V5XSA9ICRwYXJhbTsKICAgICAgICAgfQogICAgICB9CgogICAgICAkdGhpcy0+b3B0aW9ucyA9ICRkZWZhdWx0X29wdGlvbnM7CiAgIH0KCn0KCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/css/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/css/ecb2_admin.css</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyogZWNiMl9hZG1pbi5jc3MgLSB2MS4xIC0gMTZGZWIxOQ0KDQogICAtIHYxLjEgLSAxNkZlYjE5IC0gZWNiX3JlcGVhdGVyIGFkZGVkICYgYmVnYW4gY29uc29saWRhdGluZyBDU1MgaW50byB0aGlzIGZpbGUNCiAgIC0gdjEuMCAtIDE4QXByMTcgLSBpbml0aWFsIGNzcyBmaWxlDQoNCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8NCg0KLnNvcnRhYmxlLWVjYjItbGlzdCB0ciB7Y3Vyc29yOm1vdmU7fQ0KI2xvYWRlciB7cGFkZGluZy1sZWZ0OjUwcHg7fQ0KDQouZWNiMi1idXR0b24taW5saW5lIHtwYWRkaW5nLXJpZ2h0OjEwcHg7IHBhZGRpbmctbGVmdDoxMHB4OyBmb250LXNpemU6MjBweDsgZm9udC13ZWlnaHQ6Ym9sZDt9DQoNCi5lY2JfcmVwZWF0ZXIgLnJlcGVhdGVyLXdyYXBwZXIge3dpZHRoOjEwMCU7fQ0KLmVjYl9yZXBlYXRlciAucmVwZWF0ZXItd3JhcHBlcjpmaXJzdC1jaGlsZCAuZWNiMi1yZXBlYXRlci1yZW1vdmUge2Rpc3BsYXk6bm9uZTt9DQouZWNiX3JlcGVhdGVyIC5yZXBlYXRlci1maWVsZCB7bWF4LXdpZHRoOmNhbGMoMTAwJSAtIDEwMHB4KTt9DQoNCi5lY2JfY29tcGFjdCAuZWNiX3NlbGVjdF9lZGl0OjpiZWZvcmUge2NvbnRlbnQ6J0hpZGUnO30NCi5lY2JfY29tcGFjdCBzZWxlY3Qge2Rpc3BsYXk6aW5saW5lLWJsb2NrOyBtYXgtaGVpZ2h0Ojgwdmg7fQ0KLmVjYl9jb21wYWN0Om5vdCguc2hvdykgLmVjYl9zZWxlY3RfZWRpdDo6YmVmb3JlIHtjb250ZW50OidFZGl0Jzt9DQouZWNiX2NvbXBhY3Q6bm90KC5zaG93KSBzZWxlY3Qge2Rpc3BsYXk6bm9uZTt9]]></data>
	</file>
	<file>
	  <filename>/lib/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/lib/js/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/js/ecb2_admin.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gZWNiMl9hZG1pbi5qcyAtIHYxLjIgLSAxNkZlYjE5DQovLw0KLy8gICAgLSB2MS4yIC0gMTZGZWIxOSAtIGVjYl9yZXBlYXRlciBhZGRlZA0KLy8gICAgICAgICAgICAgICAgICAgICAtIGJlZ2FuIGNvbnNvbGlkYXRpbmcgYWxsIGpzIGludG8gdGhpcyBmaWxlDQovLyAgICAtIHYxLjEgLSAxMUp1bDE3IC0gdXBkYXRlZCBmb3IgbWF4X251bWJlciAmIHJlcXVpcmVkX251bWJlciAmIHVwZGF0ZUVDQjJQbGFjZWhvbGRlcigpDQovLyAgICAtIHYxLjAgLSAxOEFwcjE3IC0gaW5pdGlhbCBqcyBmaWxlDQovLw0KLy8gICAgZW5hYmxlcyBkcmFnLW4tZHJvcCBzZWxlY3Rpb24gb2YgbGlzdCBpdGVtcywgcmVxdWlyZXMganF1ZXJ5IHVpIHNvcnRhYmxlDQovLw0KLy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KJChmdW5jdGlvbigpIHsNCg0KDQogICAvLyBlY2JfZmlsZV9zZWxlY3Rvcg0KICAgJCgnLmVjYl9maWxlX3NlbGVjdG9yX3NlbGVjdCBzZWxlY3QnKS5jaGFuZ2UoIGZ1bmN0aW9uKCkgew0KICAgICAgdmFyIGltZ3RhZyA9ICQodGhpcykucGFyZW50KCkubmV4dCgpOw0KICAgICAgaW1ndGFnLmF0dHIoJ3NyYycsIGltZ3RhZy5kYXRhKCd1cGxvYWRzdXJsJykrJy8nKyQodGhpcykudmFsKCkpOw0KICAgfSk7DQoNCg0KDQogICAvLyBlY2JfbXVsdGlwbGVfc2VsZWN0DQogICAkKCcuZWNiX211bHRpcGxlX3NlbGVjdCBzZWxlY3QnKS5jaGFuZ2UoZnVuY3Rpb24oKSB7DQogICAgICB2YXIgc2VsZWN0ZWRWYWx1ZXMgPSAkKHRoaXMpLnZhbCgpID8gJCh0aGlzKS52YWwoKS5qb2luKCcsJykgOiAnJzsNCiAgICAgICQodGhpcykuc2libGluZ3MoJy5lY2Jfc2VsZWN0X2lucHV0JykudmFsKCBzZWxlY3RlZFZhbHVlcyApOw0KICAgICAgLy8gdGhlbiB1cGRhdGUgc3VtbWFyeSB0ZXh0IC0gaWYgaXQgZXhpc3RzDQogICAgICB2YXIgJHNlbGVjdFN1bW1hcnkgPSAkKHRoaXMpLnNpYmxpbmdzKCcuZWNiX3NlbGVjdF9zdW1tYXJ5Jyk7DQogICAgICBpZiAoICRzZWxlY3RTdW1tYXJ5Lmxlbmd0aD4wICkgew0KICAgICAgICAgdmFyIHNlbGVjdGVkVGV4dCA9ICQodGhpcykuY2hpbGRyZW4oJ29wdGlvbjpzZWxlY3RlZCcpLm1hcChmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgIHJldHVybiAkKHRoaXMpLnRleHQoKTsNCiAgICAgICAgICAgIH0pLmdldCgpLmpvaW4oJywgJyk7DQogICAgICAgICAkKHRoaXMpLnNpYmxpbmdzKCcuZWNiX3NlbGVjdF9zdW1tYXJ5JykudmFsKCBzZWxlY3RlZFRleHQgKTsNCiAgICAgICAgIHZhciAkc3VtbWFyeVRleHQgPSAkKHRoaXMpLnNpYmxpbmdzKCcuZWNiX3NlbGVjdF9zdW1tYXJ5JykuY2hpbGRyZW4oJy5lY2Jfc2VsZWN0X3RleHQnKTsNCiAgICAgICAgIGlmICggc2VsZWN0ZWRUZXh0PT0nJyApIHsNCiAgICAgICAgICAgICRzZWxlY3RTdW1tYXJ5LmNoaWxkcmVuKCcuZWNiX3NlbGVjdF90ZXh0JykuaHRtbCggJHN1bW1hcnlUZXh0LmRhdGEoJ2VtcHR5JykgKTsNCiAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkc2VsZWN0U3VtbWFyeS5jaGlsZHJlbignLmVjYl9zZWxlY3RfdGV4dCcpLmh0bWwoIHNlbGVjdGVkVGV4dCApOw0KICAgICAgICAgfQ0KICAgICAgfQ0KICAgfSk7DQoNCiAgIC8vIGVjYl9jb21wYWN0IC0gc2hvdyAmIGhpZGUgdGhlIGZ1bGwgc2VsZWN0ICYgdXBkYXRlIHN1bW1hcnkgdGV4dA0KICAgJCgnLmVjYl9jb21wYWN0IC5lY2Jfc2VsZWN0X2VkaXQnKS5jbGljayggZnVuY3Rpb24oZSkgew0KICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgJCh0aGlzKS5jbG9zZXN0KCcuZWNiX2NvbXBhY3QnKS50b2dnbGVDbGFzcygnc2hvdycpOw0KICAgfSk7DQoNCg0KDQogICAvLyBlY2JfcmVwZWF0ZXINCiAgICQoJy5lY2JfcmVwZWF0ZXInKS5vbignY2hhbmdlJywgJy5yZXBlYXRlci1maWVsZCcsIGZ1bmN0aW9uKGUpIHsNCiAgICAgIHVwZGF0ZV9yZXBlYXRlciggJCgkKHRoaXMpLmRhdGEoJ3JlcGVhdGVyJykpICk7DQogICB9KTsNCg0KICAgJCgnLmVjYl9yZXBlYXRlcicpLm9uKCdjbGljaycsICcuZWNiMi1yZXBlYXRlci1hZGQnLCBmdW5jdGlvbihlKSB7DQogICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICB2YXIgJGZpZWxkV3JhcHBlciA9ICQodGhpcykuY2xvc2VzdCgnLnJlcGVhdGVyLXdyYXBwZXInKTsNCiAgICAgICRmaWVsZFdyYXBwZXIuY2xvbmUoKS5pbnNlcnRBZnRlciggJGZpZWxkV3JhcHBlciApLmZpbmQoJy5yZXBlYXRlci1maWVsZCcpLnZhbCgnJyk7DQogICAgICB1cGRhdGVfcmVwZWF0ZXIoICQoJCh0aGlzKS5kYXRhKCdyZXBlYXRlcicpKSApOw0KICAgfSk7DQogICAkKCcuZWNiX3JlcGVhdGVyJykub24oJ2NsaWNrJywgJy5lY2IyLXJlcGVhdGVyLXJlbW92ZScsIGZ1bmN0aW9uKGUpIHsNCiAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgIHZhciAkZmllbGRXcmFwcGVyID0gJCh0aGlzKS5jbG9zZXN0KCcucmVwZWF0ZXItd3JhcHBlcicpLA0KICAgICAgICAgICRyZXBlYXRlciA9ICQoJCh0aGlzKS5kYXRhKCdyZXBlYXRlcicpKQ0KICAgICAgJGZpZWxkV3JhcHBlci5yZW1vdmUoKTsNCiAgICAgIHVwZGF0ZV9yZXBlYXRlciggJHJlcGVhdGVyICk7DQogICB9KTsNCg0KDQoNCiAgIGZ1bmN0aW9uIHVwZGF0ZV9yZXBlYXRlciggJHJlcGVhdGVyICkgew0KICAgICAgdmFyICRwYXJlbnQgPSAkKCAkcmVwZWF0ZXIuZGF0YSgncGFyZW50JykgKSwNCiAgICAgICAgICAkZmllbGRzID0gW107DQogICAgICAkcmVwZWF0ZXIuZmluZCgnLnJlcGVhdGVyLWZpZWxkJykuZWFjaChmdW5jdGlvbihpKXsNCiAgICAgICAgICRmaWVsZHMucHVzaCggJCh0aGlzKS52YWwoKSApOw0KICAgICAgfSkNCiAgICAgICRwYXJlbnQudmFsKCAkZmllbGRzLmpvaW4oJ3x8JykgKTsNCiAgIH0NCg0KDQoNCiAgIC8vIHNvcnRhYmxlIGxpc3RzDQogICAkKCd1bC5zb3J0YWJsZS1lY2IyLWxpc3QnKS5lYWNoKGZ1bmN0aW9uKCkgew0KICAgICAgICB2YXIgJHBhcmVudCA9ICQodGhpcykuY2xvc2VzdCgnLmVjYjItY2InKTsNCiAgICAgICAgdmFyICRzZWxlY3RlZCA9ICRwYXJlbnQuZmluZCgndWwuc2VsZWN0ZWQtaXRlbXMnKTsNCiAgICAgICAgJCh0aGlzKS5zb3J0YWJsZSh7DQogICAgICAgICAgICBjb25uZWN0V2l0aDogJHNlbGVjdGVkLA0KICAgICAgICAgICAgZGVsYXk6IDE1MCwNCiAgICAgICAgICAgIHJldmVydDogMzAwLA0KICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICd1aS1zdGF0ZS1oaWdobGlnaHQnLA0KICAgICAgICAgICAgaXRlbXM6ICdsaTpub3QoLm5vLXNvcnQpJywNCiAgICAgICAgICAgIGhlbHBlcjogZnVuY3Rpb24oZXZlbnQsIHVpKSB7DQogICAgICAgICAgICAgICAgaWYgKCF1aS5oYXNDbGFzcygnc2VsZWN0ZWQnKSkgew0KICAgICAgICAgICAgICAgICAgICB1aS5hZGRDbGFzcygnc2VsZWN0ZWQnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgLnNpYmxpbmdzKCkNCiAgICAgICAgICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygnc2VsZWN0ZWQnKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgdmFyIGVsZW1lbnRzID0gdWkucGFyZW50KCkNCiAgICAgICAgICAgICAgICAgICAgLmNoaWxkcmVuKCcuc2VsZWN0ZWQnKQ0KICAgICAgICAgICAgICAgICAgICAuY2xvbmUoKSwNCiAgICAgICAgICAgICAgICAgICAgaGVscGVyID0gJCgnPGxpLz4nKTsNCiAgICAgICAgICAgICAgICB1aS5kYXRhKCdtdWx0aWRyYWcnLCBlbGVtZW50cykuc2libGluZ3MoJy5zZWxlY3RlZCcpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgIHJldHVybiBoZWxwZXIuYXBwZW5kKGVsZW1lbnRzKTsNCiAgICAgICAgICAgIH0sDQogICAgICAgICAgICBzdG9wOiBmdW5jdGlvbihldmVudCwgdWkpIHsNCiAgICAgICAgICAgICAgICB2YXIgZWxlbWVudHMgPSB1aS5pdGVtLmRhdGEoJ211bHRpZHJhZycpOw0KICAgICAgICAgICAgICAgIHZhciAkdWxTZWxlY3RlZCA9ICQodWkuaXRlbSkucGFyZW50KCk7DQogICAgICAgICAgICAgICAgdWkuaXRlbS5hZnRlcihlbGVtZW50cykucmVtb3ZlKCk7DQogICAgICAgICAgICAgICAgdXBkYXRlRUNCMkNCSW5wdXQoJHVsU2VsZWN0ZWQpOw0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIHJlY2VpdmU6IGZ1bmN0aW9uKGV2ZW50LCB1aSkgew0KICAgICAgICAgICAgICAgIHZhciBlbGVtZW50cyA9IHVpLml0ZW0uZGF0YSgnbXVsdGlkcmFnJyk7DQogICAgICAgICAgICAgICAgaWYgKCQodGhpcykuZGF0YSgnbWF4LW51bWJlcicpICYmICQodGhpcykuY2hpbGRyZW4oKS5sZW5ndGggLSAxID4gJCh0aGlzKS5kYXRhKCdtYXgtbnVtYmVyJykpIHsNCiAgICAgICAgICAgICAgICAgICAgJCh1aS5zZW5kZXIpLnNvcnRhYmxlKCdjYW5jZWwnKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICB1cGRhdGVFQ0IyUGxhY2Vob2xkZXIoJCh0aGlzKSk7DQogICAgICAgICAgICAgICAgICAgICQoZWxlbWVudHMpLnJlbW92ZUNsYXNzKCdzZWxlY3RlZCB1aS1zdGF0ZS1ob3ZlcicpDQogICAgICAgICAgICAgICAgICAgICAgICAuZmluZCgnLnNvcnRhYmxlLXJlbW92ZScpLnJlbW92ZUNsYXNzKCdoaWRkZW4nKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgIH0pOw0KDQogICAgLy8gcmVtb3ZlIGZyb20gc2VsZWN0ZWQgbGlzdCAtIGJ5IGRyYWdnaW5nIGJhY2sgdG8gYXZhaWxhYmxlDQogICAgJCgndWwuc2VsZWN0ZWQtaXRlbXMnKS5lYWNoKGZ1bmN0aW9uKCkgew0KICAgICAgICB2YXIgJHBhcmVudCA9ICQodGhpcykuY2xvc2VzdCgnLmVjYjItY2InKTsNCiAgICAgICAgdmFyICRhdmFpbGFibGUgPSAkcGFyZW50LmZpbmQoJ3VsLmF2YWlsYWJsZS1pdGVtcycpOw0KICAgICAgICAkKHRoaXMpLnNvcnRhYmxlKHsNCiAgICAgICAgICAgIGNvbm5lY3RXaXRoOiAkYXZhaWxhYmxlLA0KICAgICAgICAgICAgZGVsYXk6IDE1MCwNCiAgICAgICAgICAgIHJldmVydDogMzAwLA0KICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICd1aS1zdGF0ZS1oaWdobGlnaHQnLA0KICAgICAgICAgICAgc3RvcDogZnVuY3Rpb24oZXZlbnQsIHVpKSB7DQogICAgICAgICAgICAgICAgdmFyICR1bFNlbGVjdGVkID0gJCh1aS5pdGVtKS5jbG9zZXN0KCcuZWNiMi1jYicpLmZpbmQoJy5zZWxlY3RlZC1pdGVtcycpOw0KICAgICAgICAgICAgICAgICQodWkuaXRlbSkucmVtb3ZlQ2xhc3MoJ3NlbGVjdGVkJykNCiAgICAgICAgICAgICAgICAkKHVpLml0ZW0pLmNoaWxkcmVuKCcuc29ydGFibGUtcmVtb3ZlJykuYWRkQ2xhc3MoJ2hpZGRlbicpOw0KICAgICAgICAgICAgICAgIHVwZGF0ZUVDQjJDQklucHV0KCR1bFNlbGVjdGVkKTsNCiAgICAgICAgICAgICAgICB1cGRhdGVFQ0IyUGxhY2Vob2xkZXIoJHVsU2VsZWN0ZWQpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9KTsNCiAgICB9KTsNCg0KICAgIC8vIHJlbW92ZSBmcm9tIHNlbGVjdGVkIGxpc3QgLSBieSBjbGlja2luZyByZW1vdmUgaWNvbg0KICAgICQoZG9jdW1lbnQpLm9uKCdjbGljaycsICcjc2VsZWN0ZWQtaXRlbXMgLnNvcnRhYmxlLXJlbW92ZScsIGZ1bmN0aW9uKGUpIHsNCiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgICB2YXIgJHVsU2VsZWN0ZWQgPSAkKHRoaXMpLmNsb3Nlc3QoJ3VsLnNlbGVjdGVkLWl0ZW1zJyk7DQogICAgICAgIHZhciAkdWxBdmFpbGFibGUgPSAkKHRoaXMpLmNsb3Nlc3QoJy5lY2IyLWNiJykuZmluZCgnLmF2YWlsYWJsZS1pdGVtcycpOw0KICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdoaWRkZW4nKQ0KICAgICAgICAgICAgLnBhcmVudCgnbGknKS5yZW1vdmVDbGFzcygnbm8tc29ydCcpDQogICAgICAgICAgICAuYXBwZW5kVG8oJHVsQXZhaWxhYmxlKTsNCiAgICAgICAgdXBkYXRlRUNCMkNCSW5wdXQoJHVsU2VsZWN0ZWQpOw0KICAgICAgICB1cGRhdGVFQ0IyUGxhY2Vob2xkZXIoJHVsU2VsZWN0ZWQpOw0KICAgIH0pOw0KDQogICAgZnVuY3Rpb24gdXBkYXRlRUNCMkNCSW5wdXQoJHVsU2VsZWN0ZWQpIHsNCiAgICAgICAgdmFyICRhbGxTZWxlY3RlZCA9ICR1bFNlbGVjdGVkLmNoaWxkcmVuKCdsaTpub3QoLnBsYWNlaG9sZGVyKScpOw0KICAgICAgICB2YXIgJHRhcmdldElucHV0ID0gJCgnIycgKyAkdWxTZWxlY3RlZC5kYXRhKCdjbXNtcy1jYi1pbnB1dCcpKTsNCiAgICAgICAgdmFyIHNlbGVjdGVkU3RyID0gJyc7DQogICAgICAgIHZhciByZXF1aXJlZE51bWJlciA9ICR1bFNlbGVjdGVkLmRhdGEoJ3JlcXVpcmVkLW51bWJlcicpOw0KICAgICAgICBpZiAocmVxdWlyZWROdW1iZXIgJiYgJGFsbFNlbGVjdGVkLmxlbmd0aCAhPSByZXF1aXJlZE51bWJlcikgew0KICAgICAgICAgICAgJHRhcmdldElucHV0LnZhbCgnJyk7IC8vIHNldCB0byBlbXB0eQ0KDQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkYWxsU2VsZWN0ZWQuZWFjaChmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRTdHIgPT0gJycpIHsNCiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRTdHIgPSAkKHRoaXMpLmRhdGEoJ2Ntc21zLWl0ZW0taWQnKTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFN0ciA9IHNlbGVjdGVkU3RyICsgJywnICsgJCh0aGlzKS5kYXRhKCdjbXNtcy1pdGVtLWlkJyk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAkdGFyZ2V0SW5wdXQudmFsKHNlbGVjdGVkU3RyKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGZ1bmN0aW9uIHVwZGF0ZUVDQjJQbGFjZWhvbGRlcigkdWxTZWxlY3RlZCkgew0KICAgICAgICB2YXIgcmVxdWlyZWROdW1iZXIgPSAkdWxTZWxlY3RlZC5kYXRhKCdyZXF1aXJlZC1udW1iZXInKTsNCiAgICAgICAgdmFyIG51bWJlclNlbGVjdGVkID0gJHVsU2VsZWN0ZWQuY2hpbGRyZW4oKS5sZW5ndGggLSAxOyAvLyBleGNsdWRlIHBsYWNlaG9sZGVyDQogICAgICAgIGlmICgoIXJlcXVpcmVkTnVtYmVyICYmIG51bWJlclNlbGVjdGVkID4gMCkgfHwgKHJlcXVpcmVkTnVtYmVyID4gMCAmJiBudW1iZXJTZWxlY3RlZCA9PSByZXF1aXJlZE51bWJlcikpIHsNCiAgICAgICAgICAgICR1bFNlbGVjdGVkLmNoaWxkcmVuKCcucGxhY2Vob2xkZXInKS5hZGRDbGFzcygnaGlkZGVuJyk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkdWxTZWxlY3RlZC5jaGlsZHJlbignLnBsYWNlaG9sZGVyJykucmVtb3ZlQ2xhc3MoJ2hpZGRlbicpOw0KICAgICAgICB9DQoNCg0KICAgIH0NCg0KfSk7]]></data>
	</file>
	<file>
	  <filename>/lib/js/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/js/images/color.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAMOSURBVDjLVZNNaBxlAIafb+ab2Z3N7Oxv/nYTEyv2LzQJpKBgrQqNUKmY4kUIXqUHT70p9iB48CKIiN5E0It6KFiwiv9FpAVpKUggNc3mZ7vpJpv9n93ZnZ35PNRI+8B7e9/n9gqlFAeIVUfPeN3zh0R0eVpYM1OanhvTCEY0f3tU79+ctnpfHM73fuQhxIHAWHnmkOGXPjgZyS09l5hnNv4YOdMhoQmigzqGt4nhfeub1fpnVsl/e+hMv/q/QKy+Me0EO5dfso/OvzB8grgV4HGXJC7jwAQ2oxxDuC36xZ+Rhe+v6iutZf2iqklReNe0tPSHZ2Nz84ujR7ht3iJKjcexiOIQI8SiixxcR7QtRORFlK7O9t0rlyy4KBEj5+YisVeez85wy9zGIUeGDDYhDhYOITYuoh2BvTJ68y7B0GnCym8XGq+KL2U0MrE8Z2SRVhqdPmlCsvgk8RlCkgAivRbUNKj1YPMeeu4wcnjRql7/+jVpyvxsPjbK3whi5LEAB0WWgBRgqwAaFah04X4V7puwdwddz+FXjJMSbXI8aSTYCgU2oKMwEdgCEoDhug/G5SjsmFDUoV+DXJ7BnpiUVCNBaJqEXfDVfwG6CjoKnF4crZGCVvNBug0IPXzPZOCnAunfk8W6ro7H2gK3A02gGoDeA1MDGx2nkYG6C24bvDaMSzq7ZfxBsiC7O+aNDaWOn0oLfl0HMwDlQRCAHYUkEGvFkLsp2G9Bo0n41AiNG6sMBvY1yZr6/JsV//XZZ3WZaEp2t6DvgWFA1QRHQbwjSDeTUGvCiSPU1ovU/typQPIrTV0yrrl3vE+/+8XlaCIgq8H+BtSLUN2C2ibsl8ArR+HYGE0rwvbvRTr96HsL6od1CUDDf+enK92JwT+982cWEswvRmiug6qAr0E4AV4uoFXosnV1g8bN5kcp7E8eOZOYKtmUqm/ZiDdfPhV3Zp6IM5k0SIUBstwmXKvCX5UdM6y9n2b34wV1IXxEcEBU3J4dprU0zODpjFBTIyoIxgjXxlB/PIl1eUmdLjzc/xceOVXddrB6BQAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/lib/js/images/grid.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhFAAUAJEAAAAAAP///+zp2P///yH5BAEAAAMALAAAAAAUABQAAAIojI+iy+jBonhJLnrsxVBP7n1YyHVaSYKhh7Lq+VotPLo1TaW3HEtlAQA7]]></data>
	</file>
	<file>
	  <filename>/lib/js/images/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/lib/js/images/meta100.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAAAAACMIRMSAAAACXBIWXMAAABIAAAASABGyWs+AAAACXZwQWcAAAAaAAAAGgAHsmYvAAACLklEQVQoz0VSW0hUURRd9zVvBcmhyKEMhCghMCT6KIwoiIgIIwZ6CNXHEEUf1cd81Jc9fiKjQoL6kLDQiqISmZgypCdoQUSIg2YoFNhrpgxm5px7V3uuA204j73X2efss/YCxTytlPbom+cqpdyKAxnarcRc/X/2lOdDisWRTGa0RC0hl+OPM8O/WNYCaWZbDMBsfUKt+Kk9DCBxxSt5UOwzYQeDFqx75GQjTCdgGzhGBc7E4VSyHDR84TYETMCwbAzIhRcQRENPVwwBXM/BhHXybrPsdwiUlLWHPCUnDt+SaS85BAuNeXANUDNNPoeNLWmEcJPFP8uA2BjyS4Gm8WnmpLLWpOC3f2iuk7QhzC4GaheFB7/XAM1bYTm10X5uliOD+LkEpmHhUCEGtOyEbVro4CaBnqK0AkZkQeL954CB9SnYVjTxTN43nVFwA4zY6zyzcNB+Vio877KQAOqmwH3iXiWPy3LigVS4S73otm0s/wvekFi8rzsk3+v/KrxEm4REB/vly3MrERJyrDBW/eZBhFF/5+OZoDlCaL6KwzANAwvfUhfagGvvkhOPuir0aub2xB2jvmOi0tO59OpvKdSNsey30uXs6FSequjqkjiXAmEcmYc8XebudInSc4/um+1C3NHT1L42RAIDds2B3uGXD8+12cDaD9SiIsyriDOpCHyLbOwtijK8KiRCcpnPXu7svHh/0pUUP1aFPFWu6pCuqu6qkK/Asti8On37BwKNc9D2ur7jAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDEwLTA4LTE1VDEyOjUwOjE3LTA0OjAwUhXmOgAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxMC0wOC0xNVQxMjo1MDoxNy0wNDowMCNIXoYAAAARdEVYdGpwZWc6Y29sb3JzcGFjZQAyLHVVnwAAACB0RVh0anBlZzpzYW1wbGluZy1mYWN0b3IAMngyLDF4MSwxeDFJ+qa0AAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/lib/js/images/picker.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAMAAAACICAIAAAA+tXNRAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAE6NJREFUeNrcXcGywrYOtR0WXXTRL3j9///rTBfE0gNCEtmWZAWiDC5zhwkhF84xx7Isy0rE+z08HjEwD/akcp574KGLzSeb82MTcEP/uBiDJ4GI//5bgIoC0igzUF9W7Y/B+hLVk7KAhiTghr4V0MkEIv7zT59BFFgaDrb2RwNAVF8ux7h+9hEB/ToBN/RUQC4EbmGea4wtXpZKJB/V/pTlWyg8K29JF6NmgUYl4IzekcBDQPcCZgzWl9iQiOuHq9i/ecmdtCP+RQIRvdH7EiAWiKKTjqWTyA3F5CT95haF8bg9KQhoJAKtgBzQOxIoBdT+tW9h+e7jZeLGbc6Gtiikk0G+AOpPY1EOQ+Aq9F4EbiHnDoNEqCSOE8hDcRCN6dG/LwT00wSuRX8+gcUC4Q4nCZpfsGdyzAYoVOWz2IE7E+R3mysruIMR8EfvSSBSAaVVz4njRHkAecsAX6LCosvrZbB+VXUZiAIaksC16M8msAsorbhSSSKtw2xsLCkbINj+XZ0MUCAtTGguoP8iCGhUAheidyAQ3z4Q7r4Zlq7a9jLJM8skuG24h7G6AyzIzy18KPpIFBCPQcAZvd3p+YjAU0D3+3MqmUr9L8+JePlYCpteXMUIVGOq45VOqrTiinVIAkvbX4X+bAJxmcZvJDZEkdjEDT49Q7nGxjraYijIoc7NSeW4FNCQBLa2d0PvSaAW0OM7p5IBEviJmylOckeQl+BY0wkC8OpM1gQ0HgEqIDf0bgRqAaXSDlK9tnPHtH5OapQd+96/UeSZgw+igMYjQNveE70PgaeAHk50xBpvxSBp+Sb7lZHDHE0kpD+9/aFGMB6Ba9GfTeA1jb8XvQDJgRTjZuGzf7EzAYCGRBbgS2fKDjwegYTe6D0JvONAi4CmZuGszTFhAURukVO2ocY5pUQi1/1ia/whCWwC8kfvQKAQ0OatTSUWJRsFyGIMChlIXM6SPg5ncpB7ZxrjORiBTUDO6H0I7AKaVuyhPAgNleoZuK7RkNDXYKSxt4KfOU5lBx6PQMIL0LsReAsoIZ+hdhOSJWMjfnaIDnUsAs3iz6Xmq2anB2v7j0og4TXofQhEWAW0mc5N/2FdVqsQVWkEyuK/Og6DoH/kukCWX+LucQ5JIOHF6E8l8BLQgwTU2IOKneaqSNixPwFAg91sX86igIYkkNAVvTOB9BBQngOAplsl5QnKVWPW04+dOYAUImmP55LQ/O6jqdfxfprAhegdCKS3DwRaHlsk9rRNfzIb0O00CGswUkdgu0MuLJCeiPfTBBJeg96HwC4g1n1fYObyuOoCSTCgsg0Nhjio1OBzc4z7AsCQBLYJjBt6TwKFgKqc7Mp65tJuJvLt1aJwLw6nZ6OwkQfgSDQCGpIAnQE7o3cgUAuIYs8lg8QJHhvTmILxYcluYhUzawIajwAbQvFHfxIBRkBszIHqH8pABLscrIaxQPDfutOADbsqoMEIVALyQe9G4CmgxywMYc9yy4Lfv3xUItgThycw4zAKoVBQ14JZl7l665XOPZVpeoMRmNAbvSeBBGQW1m6gTWQjSW40XwWikjYTqJYJocnb7q7E5Mb8z28BYbOLfCQCiBegdyPwFND90QuAnz6m0oYCIQRkQS9xW2CFFTy9C2QhkF5Zz+Xv/h7CQA6gDEAA0BW9M4G3D4TAxDtTOWtMjYVL3Kai454bGGwoyOMw7hsWhiSQ8Er0ZxN4+0B0e1K7RzI14hey26WQFprX8SwuHH139YFSGJbAhN7oPQmk3FigwDFInDqlba/H9d8NZs0EeGVGsa5wMhgBxCvRn02gEBDbBdLq/ScD/KAFs5RkuO4cAIRYRCmgIQkgXoPeh0AtoFjKPpG5I/R22oeGR+QduaDu3Ge7wCy4EI2AxiOAeAF6NwJ9AS0kJq4jsACCltNnH4ez8DdrQ9iQBHQBnYfeh8BLQDlgrlGnhkQS7NzBTKxgSEvJ5mW9udjWPyQBxMvQOxCY8hKJzh0SkzzR6xUl6pamsQdBVSd6VAKIruidCeA7Er1aoFmAnxseUr0S8wQAeindUObAzVwYurFA4xGgFsgZvQOBXUAb/JkzoBNZjJkMXUCo2hcOpnS3CzDtbBL32ktDEkB0Re9M4CmgfH8OYXnd2k8njhP5qMkci5DXAw5tKmGjENV84P7+5C1sOyQBf/RuBGBekurzO+wwlwwocHrMlq6yRSGkERiFrZtZyMQiSxk0bjIegYjXoPciQIawtL5FY1iZUEGD8xa+XY/Z6vSxqy9cHCgQB3RIApejP48AVgJqlV/Zs0ktz3hkGUb6y9x2/moElgU0JAFP9M4EXgK6FwKaSEeYiFUVSmNYNibZ14KzMI9U1sKgFtB4BC5EfzYBWAKJU65HutQ4b60o27QkdslFrREKvc1t3eRKLOz9eAQiXobeg8B7KSPv+p9fz1OTVASNbc2v3dtSOP3IOl63F4Dgws37LGxgAv7o3QggFdAGfybGNAtjYjsNDGKtLFQTu429YBZX40PT/oMRcEbvSeApoPv9LaDben4S7JYlEKHua0Ch0rUSxgJ1EvlyIbaiXkMSQLgGvQ8BWCzQ49TUYM/C2HtwNQ/l2kZgq9CnrybBu1bpwAQ80TsTeFqgZ5HNvIt/UvdygLAe05tHWpaAu4u/7OZgfO/CG5XAw4l2Ru9LgFigqfwhMleega1fbphHdm9SVVnSLAzCbR/G3QKNSsAfvRsBfAto3klIvQBJjWnshSDMJQahiWG13j+oCWVQCGhIApeg9yHwFFAuBXQTvH+jAZWKox/MRpFG4Gpb1RqHo40/GIEI16B3IgDL3Xqylj+UVV/OUs/YUCYUbblMHK5kvfAnCSS4DL0DgbjsTMV51/9MegHILhwYLGkvhgWGXCZQJzH32gcakoAzelcCy1rYMoRt8FsSmbtLBZtS8FGhXFBL4epxuJcPNIeRCVyC3ofAOxK9CKiF3zWgoO4xiRp26AXSlRlksxa5hXDHIxDhAvR+BCoBSeLXbSiY1oItQVCLDZ01AY1HgArIE70TARpItHtxUkq3ucay5YYfudnNdp4T/UMEPnCiv0B/NoGYbzC/jm5HXH8QUvq5GSLE+h0w3NzMvsUN3xZoVAIRXdGHyLx5HoGHgGZ71BvlCtSwZltXf1OYkQn9gfAZ+ZxkzYEJnI0+IB98PY1AKaBuCVgU4gUzicCr7V8lt2UuVP9FAYqxCTigbwV0MoFb7uYb4cG1tnLozOpwCupiIRiqCBgSpgYg4IY+BGcCt7ue8ajU8WQJLeM5kA4Mu92sbhQBctKCjt1sgQYj4IA+QDFynU+ADGFHN963wHO5oLy0fyqWrti+cDTSiudUDvgtAj7oQ6oXD08m8BKQpfKQNPbempczSfBK4T4VeOeD0w1l8+XB0km/S8AT/ePgHjwJlBaIvgvmMozQiJ8waH3QbqqUEiXrLXUOTMAHPetEn0ngBi0dXf/dMozlXzc+Ji30wIdVSIcncCr6EDwJxMWJxm78oR2HkbOnU/ny/urAUIy9bVrb9nnZVsvteNrpAATc0C9OtBeBuAxhqOz9qLSYyXdJd7ObiiT3xQeVgg9U/1g2TdUFgilIPzABH/SbE+1CYBUQyrs+kEsdyII9pcGs6e3CzYm5Q0oWbuqKhkVmQ9L4YAQ80dNZ2PkE4hJIxG6qGpprMFZ/99dy7ZFgVteGfpRr9+sE3NCHmxZl/JbAywdCMoR9kDXLrvZPe6mtbRJDx9svp49Hbmbx6wSc0dNZ2PkEXkNY3G8Yc2DPEMi5jqvpfLd/6swjFR6SPY3FTxDVDvzrBJzRh8Qspp5GgDjR2JsJGPMTaHmSpv2zOgjnrxYDxibghr71gc4kUM7CDhVBY7eecUUilQ4McsJUt4bt11XcfpGAA3rdAn1LoBGQUgjWUkQmMZ3i0f4fbFhhGRwv3jYegbPRh9RPi/ycwEtA+IoHsdsbdeCJG35zWekvhnvSBl5lJmAu5MbOj4ch4Iz+uZgX3AiUcSBLyiyuhY1aQtXwO7/hS3G41mh29+0a5vBDEvBErwQSTyDQRKJRvo2LMhSnBjvRfxuHm4WVGOyVUbI5QKMS8EHPBhJPI1DOwoKhkPkmdVo8PREXLpKDWORjGe1m7t2KxnZn0MEIuKGnCWXnE+AskOWOiMCVU5+aOxOlVyA3ifd7hF4NpeMpxQMT8EEfknbHzW8JHJnGo1zrkY66c33TvTaMohf/1LPi1OoTwxNwQM/GgU4j8F4Lg6ORLCh1Tv+q26YFJowy9+aRlijEd6G4nyPghp6NA51GIC3TeLDvK6HwWTaxPCDtfygQoey8lL3PIQk4ow+p7wN9TiAtQxh8UEiPRV0xeN2CJoNpIZgdk9t5rKEC16gEfNAHsC7Ff0KACAhtBUBYErGxnnFfJ2RdiFnGbvTf5KSaIQm4oZd8oHMIpBCJBQpr+fzp+GicyT27Sh40DiftSmqnjyjfiK+3JDA2gbPRV4HEkwk0Q5hS/UPpBS3wuFenmROTDDdzIQh2yAU5FhGPlS/5dQI+6IOQT3kOgVJA9lhELu9SyqHeHrMaS9f3lRxMShyegAP6oMbRvyVQ+kAfVKOm3hr9m/cetsXhZnUbyqEy7MfzgX6dgBv60IRBzySwCqglZqkaE5se0fYFfLZ/N6Vb2dpPO0Iw5YWOR8AT/SIgLwLEiZaUnwTPLRLxhwZ44Nt/VqteHSoAaI5Bj0HADX0loJMJND6QtJqXOPFT5cN7F6TS/q3zBrZ0JjhQnWN4AmejpwI6nwA3hCl9geq/5RFIp5j3k0scblbvggfcZAAPZBWPTcAT/RZIdCHAOdFsSlwsn6np3J5pu0xrGAvExexvvDjBDRqYgBt6ZTX+BAJcHGiDTAfhikdFJRP9N+a4msRIqFEIoYd+JhBblWA8Aj7og0H+nxPgfKDqekqi7RcU/sy3h9KB2/LoKNfnCsfy6gcmcCp63QJ9SyAtO1MB5bRKKvvtmH0IEXiIxzK5LSEIJLFc5FeYhiGA6Ip+KfPrReA5jX878NgrLrLdXDvw6wji4k60buQ2FvQ/siNsGAJu6C0C+orAc2tzxt5UMhIzVi34siEI8r+QrAlw9iJ9WG8NCOMScEb/kB0ENwK4+EA5qMMsNaOhDHNK+SzTPgJv7Q/CXsh8ELg5FDcSATf0VEDnE8DFB8r6ijBVe2h4bP84rc9rAOvd/pG5hRBbp+2DOrPIb6saiYAz+u1WBy4EIOAzJzqj2gtaKtIAQn/Y1W1f2n8mlZGMN7Ru0wuklSO1yOkABDzRbwJyIhDJEKaEsYIgfimRLu0ZubQD6weWMJa6o2FgAm7oKwt0MgHiA3VnAtjGi0jiJK6bTaaVwbTqP/Ews1r5Bns7s49PZX6dgA/6kETEJxDApUpr/ozK9jmpZENduPjcO2SpsWUsaXq8xMV4BE5F/yQQ3AhAYYG2wXOSlY/FOm/BmAZNSbY3RH7LdXf9F45VGf8vEHBAHyIP9xwCuGws3KfxUY6GBjIZQC7AHvkzlvZHQ4FrW0biqATc0BsF9DmBlwVCsqQby3L7iTwHsgMglFdWDIDvwG2OSW6SxlG9MbEcRhmYgCf6SkAnEyjjQG3KYigjoKHMHogllbgCT8XObOnORSgjVbC3s4+y/ccj4Iw+BE8CUESiI8eg6gVliKroNbHMQgCx/VHeOmvJZZKnYAMTcEMfgieBZhpPLSOsCmejoRR4Khkk8lEvhxCERAGUOSn3iultDh6VgBv6ENwIrE40NpltZUrSzqNaxMMSfiTD7/oS4vu/u/CVfdi2m7WNSsAT/eIDORIgcSDk9tmmclmPyj6W1rNd+lujEO1uyyA4ZtkQCOllYo1KwAd9CJ4EYLFAs0JISmGCJp9g6x2peEta6AlcWIytbxI+vIn22AROQq8stZ1D4DZvAkJxY8jurUVuXbiyrdBp/2A4kHwGuTrH8AR80IfgTIAEEqNAAhpzGeQkg1i/hdEKP8hUQieKODwBN/SHesBhAu8aiTP16VmGyGWjKIkq5BmjFuSwPEtvce0/JAFP9FRALgTiX7fbPM9i0sD3L7mvRfnkoXe5xJghCTij9yJwu93in4uAgvzl3WPDxSgkvtiPsecu/AcIuKH3IvAU0B9UQKGX9R/NJ4X2DwYdHLr4CNBhCJyN3ovAU0Dxs99FGbFDsXYcUZu3Hvq8Mx5jEziO/nFBDJ4E4v/+/puxQJYwhYVBeLf/oRaJ4YLH2ATM6DcBuRB4WiB8PZ7/tz7osf4AAOXMdiwdSM/0JXsN+1I6rq5vL1O+XYHd/RwWnkKKvaD6xu3kIcDtL6W/lB6sSN55bbje8imuYxoid4Ox3ogXDUPi9vXtPy7P7AXdL12up8fKh7OXWWBXHCu+9IuUNlFaiUUuYYivx2HrhWeOsumQFCzfXf02H8Blf4ZvWuSUJvu4b9gbzfjSCfw5Ajra1hTZZtws0Nm+1f13aj+qyyoDIxFp7dDpP0P359cbWTfA9DwdUC4zOdVnpnD5o/sz0BasLJk09Oht9JmpbwF3h/UTO/oH3oKfmVF+pnT6dxs7t+KmGF0EyT9Yjtt3qSIP+UAWg3FoCGs1R50bxXxWajaO9U7CWj42fWPlKqpGoEaTW0mq67qyxuZjXocUc3QIU1pD8h2V3nKZ41wNl4UF+mZ6ohse3RdR+m41kHXhbW9V+mN/zg98IPu0tGuBDjVvxesDx/EUg9T20uXM/wUYAOBDukFiC65yAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/lib/js/index.html</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBEVU1NWSBIVE1MIEZJTEUgLS0+]]></data>
	</file>
	<file>
	  <filename>/lib/js/jquery-ui-timepicker-addon.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[LyoKICogalF1ZXJ5IHRpbWVwaWNrZXIgYWRkb24KICogQnk6IFRyZW50IFJpY2hhcmRzb24gW2h0dHA6Ly90cmVudHJpY2hhcmRzb24uY29tXQogKiBWZXJzaW9uIDEuMS4xCiAqIExhc3QgTW9kaWZpZWQ6IDExLzA3LzIwMTIKICoKICogQ29weXJpZ2h0IDIwMTIgVHJlbnQgUmljaGFyZHNvbgogKiBZb3UgbWF5IHVzZSB0aGlzIHByb2plY3QgdW5kZXIgTUlUIG9yIEdQTCBsaWNlbnNlcy4KICogaHR0cDovL3RyZW50cmljaGFyZHNvbi5jb20vSW1wcm9tcHR1L0dQTC1MSUNFTlNFLnR4dAogKiBodHRwOi8vdHJlbnRyaWNoYXJkc29uLmNvbS9JbXByb21wdHUvTUlULUxJQ0VOU0UudHh0CiAqLwoKLypqc2xpbnQgZXZpbDogdHJ1ZSwgd2hpdGU6IGZhbHNlLCB1bmRlZjogZmFsc2UsIG5vbWVuOiBmYWxzZSAqLwoKKGZ1bmN0aW9uKCQpIHsKCgkvKgoJKiBMZXRzIG5vdCByZWRlZmluZSB0aW1lcGlja2VyLCBQcmV2ZW50ICJVbmNhdWdodCBSYW5nZUVycm9yOiBNYXhpbXVtIGNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZCIKCSovCgkkLnVpLnRpbWVwaWNrZXIgPSAkLnVpLnRpbWVwaWNrZXIgfHwge307CglpZiAoJC51aS50aW1lcGlja2VyLnZlcnNpb24pIHsKCQlyZXR1cm47Cgl9CgoJLyoKCSogRXh0ZW5kIGpRdWVyeVVJLCBnZXQgaXQgc3RhcnRlZCB3aXRoIG91ciB2ZXJzaW9uIG51bWJlcgoJKi8KCSQuZXh0ZW5kKCQudWksIHsKCQl0aW1lcGlja2VyOiB7CgkJCXZlcnNpb246ICIxLjEuMSIKCQl9Cgl9KTsKCgkvKiAKCSogVGltZXBpY2tlciBtYW5hZ2VyLgoJKiBVc2UgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIGNsYXNzLCAkLnRpbWVwaWNrZXIsIHRvIGludGVyYWN0IHdpdGggdGhlIHRpbWUgcGlja2VyLgoJKiBTZXR0aW5ncyBmb3IgKGdyb3VwcyBvZikgdGltZSBwaWNrZXJzIGFyZSBtYWludGFpbmVkIGluIGFuIGluc3RhbmNlIG9iamVjdCwKCSogYWxsb3dpbmcgbXVsdGlwbGUgZGlmZmVyZW50IHNldHRpbmdzIG9uIHRoZSBzYW1lIHBhZ2UuCgkqLwoJZnVuY3Rpb24gVGltZXBpY2tlcigpIHsKCQl0aGlzLnJlZ2lvbmFsID0gW107IC8vIEF2YWlsYWJsZSByZWdpb25hbCBzZXR0aW5ncywgaW5kZXhlZCBieSBsYW5ndWFnZSBjb2RlCgkJdGhpcy5yZWdpb25hbFsnJ10gPSB7IC8vIERlZmF1bHQgcmVnaW9uYWwgc2V0dGluZ3MKCQkJY3VycmVudFRleHQ6ICdOb3cnLAoJCQljbG9zZVRleHQ6ICdEb25lJywKCQkJYW1OYW1lczogWydBTScsICdBJ10sCgkJCXBtTmFtZXM6IFsnUE0nLCAnUCddLAoJCQl0aW1lRm9ybWF0OiAnSEg6bW0nLAoJCQl0aW1lU3VmZml4OiAnJywKCQkJdGltZU9ubHlUaXRsZTogJ0Nob29zZSBUaW1lJywKCQkJdGltZVRleHQ6ICdUaW1lJywKCQkJaG91clRleHQ6ICdIb3VyJywKCQkJbWludXRlVGV4dDogJ01pbnV0ZScsCgkJCXNlY29uZFRleHQ6ICdTZWNvbmQnLAoJCQltaWxsaXNlY1RleHQ6ICdNaWxsaXNlY29uZCcsCgkJCXRpbWV6b25lVGV4dDogJ1RpbWUgWm9uZScsCgkJCWlzUlRMOiBmYWxzZQoJCX07CgkJdGhpcy5fZGVmYXVsdHMgPSB7IC8vIEdsb2JhbCBkZWZhdWx0cyBmb3IgYWxsIHRoZSBkYXRldGltZSBwaWNrZXIgaW5zdGFuY2VzCgkJCXNob3dCdXR0b25QYW5lbDogdHJ1ZSwKCQkJdGltZU9ubHk6IGZhbHNlLAoJCQlzaG93SG91cjogdHJ1ZSwKCQkJc2hvd01pbnV0ZTogdHJ1ZSwKCQkJc2hvd1NlY29uZDogZmFsc2UsCgkJCXNob3dNaWxsaXNlYzogZmFsc2UsCgkJCXNob3dUaW1lem9uZTogZmFsc2UsCgkJCXNob3dUaW1lOiB0cnVlLAoJCQlzdGVwSG91cjogMSwKCQkJc3RlcE1pbnV0ZTogMSwKCQkJc3RlcFNlY29uZDogMSwKCQkJc3RlcE1pbGxpc2VjOiAxLAoJCQlob3VyOiAwLAoJCQltaW51dGU6IDAsCgkJCXNlY29uZDogMCwKCQkJbWlsbGlzZWM6IDAsCgkJCXRpbWV6b25lOiBudWxsLAoJCQl1c2VMb2NhbFRpbWV6b25lOiBmYWxzZSwKCQkJZGVmYXVsdFRpbWV6b25lOiAiKzAwMDAiLAoJCQlob3VyTWluOiAwLAoJCQltaW51dGVNaW46IDAsCgkJCXNlY29uZE1pbjogMCwKCQkJbWlsbGlzZWNNaW46IDAsCgkJCWhvdXJNYXg6IDIzLAoJCQltaW51dGVNYXg6IDU5LAoJCQlzZWNvbmRNYXg6IDU5LAoJCQltaWxsaXNlY01heDogOTk5LAoJCQltaW5EYXRlVGltZTogbnVsbCwKCQkJbWF4RGF0ZVRpbWU6IG51bGwsCgkJCW9uU2VsZWN0OiBudWxsLAoJCQlob3VyR3JpZDogMCwKCQkJbWludXRlR3JpZDogMCwKCQkJc2Vjb25kR3JpZDogMCwKCQkJbWlsbGlzZWNHcmlkOiAwLAoJCQlhbHdheXNTZXRUaW1lOiB0cnVlLAoJCQlzZXBhcmF0b3I6ICcgJywKCQkJYWx0RmllbGRUaW1lT25seTogdHJ1ZSwKCQkJYWx0VGltZUZvcm1hdDogbnVsbCwKCQkJYWx0U2VwYXJhdG9yOiBudWxsLAoJCQlhbHRUaW1lU3VmZml4OiBudWxsLAoJCQlwaWNrZXJUaW1lRm9ybWF0OiBudWxsLAoJCQlwaWNrZXJUaW1lU3VmZml4OiBudWxsLAoJCQlzaG93VGltZXBpY2tlcjogdHJ1ZSwKCQkJdGltZXpvbmVJc284NjAxOiBmYWxzZSwKCQkJdGltZXpvbmVMaXN0OiBudWxsLAoJCQlhZGRTbGlkZXJBY2Nlc3M6IGZhbHNlLAoJCQlzbGlkZXJBY2Nlc3NBcmdzOiBudWxsLAoJCQljb250cm9sVHlwZTogJ3NsaWRlcicsCgkJCWRlZmF1bHRWYWx1ZTogbnVsbCwKCQkJcGFyc2U6ICdzdHJpY3QnCgkJfTsKCQkkLmV4dGVuZCh0aGlzLl9kZWZhdWx0cywgdGhpcy5yZWdpb25hbFsnJ10pOwoJfQoKCSQuZXh0ZW5kKFRpbWVwaWNrZXIucHJvdG90eXBlLCB7CgkJJGlucHV0OiBudWxsLAoJCSRhbHRJbnB1dDogbnVsbCwKCQkkdGltZU9iajogbnVsbCwKCQlpbnN0OiBudWxsLAoJCWhvdXJfc2xpZGVyOiBudWxsLAoJCW1pbnV0ZV9zbGlkZXI6IG51bGwsCgkJc2Vjb25kX3NsaWRlcjogbnVsbCwKCQltaWxsaXNlY19zbGlkZXI6IG51bGwsCgkJdGltZXpvbmVfc2VsZWN0OiBudWxsLAoJCWhvdXI6IDAsCgkJbWludXRlOiAwLAoJCXNlY29uZDogMCwKCQltaWxsaXNlYzogMCwKCQl0aW1lem9uZTogbnVsbCwKCQlkZWZhdWx0VGltZXpvbmU6ICIrMDAwMCIsCgkJaG91ck1pbk9yaWdpbmFsOiBudWxsLAoJCW1pbnV0ZU1pbk9yaWdpbmFsOiBudWxsLAoJCXNlY29uZE1pbk9yaWdpbmFsOiBudWxsLAoJCW1pbGxpc2VjTWluT3JpZ2luYWw6IG51bGwsCgkJaG91ck1heE9yaWdpbmFsOiBudWxsLAoJCW1pbnV0ZU1heE9yaWdpbmFsOiBudWxsLAoJCXNlY29uZE1heE9yaWdpbmFsOiBudWxsLAoJCW1pbGxpc2VjTWF4T3JpZ2luYWw6IG51bGwsCgkJYW1wbTogJycsCgkJZm9ybWF0dGVkRGF0ZTogJycsCgkJZm9ybWF0dGVkVGltZTogJycsCgkJZm9ybWF0dGVkRGF0ZVRpbWU6ICcnLAoJCXRpbWV6b25lTGlzdDogbnVsbCwKCQl1bml0czogWydob3VyJywnbWludXRlJywnc2Vjb25kJywnbWlsbGlzZWMnXSwKCQljb250cm9sOiBudWxsLAoKCQkvKiAKCQkqIE92ZXJyaWRlIHRoZSBkZWZhdWx0IHNldHRpbmdzIGZvciBhbGwgaW5zdGFuY2VzIG9mIHRoZSB0aW1lIHBpY2tlci4KCQkqIEBwYXJhbSAgc2V0dGluZ3MgIG9iamVjdCAtIHRoZSBuZXcgc2V0dGluZ3MgdG8gdXNlIGFzIGRlZmF1bHRzIChhbm9ueW1vdXMgb2JqZWN0KQoJCSogQHJldHVybiB0aGUgbWFuYWdlciBvYmplY3QKCQkqLwoJCXNldERlZmF1bHRzOiBmdW5jdGlvbihzZXR0aW5ncykgewoJCQlleHRlbmRSZW1vdmUodGhpcy5fZGVmYXVsdHMsIHNldHRpbmdzIHx8IHt9KTsKCQkJcmV0dXJuIHRoaXM7CgkJfSwKCgkJLyoKCQkqIENyZWF0ZSBhIG5ldyBUaW1lcGlja2VyIGluc3RhbmNlCgkJKi8KCQlfbmV3SW5zdDogZnVuY3Rpb24oJGlucHV0LCBvKSB7CgkJCXZhciB0cF9pbnN0ID0gbmV3IFRpbWVwaWNrZXIoKSwKCQkJCWlubGluZVNldHRpbmdzID0ge30sCiAgICAgICAgICAgICAgICBmbnMgPSB7fSwKCQkgICAgICAgIG92ZXJyaWRlcywgaTsKCgkJCWZvciAodmFyIGF0dHJOYW1lIGluIHRoaXMuX2RlZmF1bHRzKSB7CgkJCQlpZih0aGlzLl9kZWZhdWx0cy5oYXNPd25Qcm9wZXJ0eShhdHRyTmFtZSkpewoJCQkJCXZhciBhdHRyVmFsdWUgPSAkaW5wdXQuYXR0cigndGltZTonICsgYXR0ck5hbWUpOwoJCQkJCWlmIChhdHRyVmFsdWUpIHsKCQkJCQkJdHJ5IHsKCQkJCQkJCWlubGluZVNldHRpbmdzW2F0dHJOYW1lXSA9IGV2YWwoYXR0clZhbHVlKTsKCQkJCQkJfSBjYXRjaCAoZXJyKSB7CgkJCQkJCQlpbmxpbmVTZXR0aW5nc1thdHRyTmFtZV0gPSBhdHRyVmFsdWU7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCQkgICAgb3ZlcnJpZGVzID0gewoJCSAgICAgICAgYmVmb3JlU2hvdzogZnVuY3Rpb24gKGlucHV0LCBkcF9pbnN0KSB7CgkJICAgICAgICAgICAgaWYgKCQuaXNGdW5jdGlvbih0cF9pbnN0Ll9kZWZhdWx0cy5ldm50cy5iZWZvcmVTaG93KSkgewoJCSAgICAgICAgICAgICAgICByZXR1cm4gdHBfaW5zdC5fZGVmYXVsdHMuZXZudHMuYmVmb3JlU2hvdy5jYWxsKCRpbnB1dFswXSwgaW5wdXQsIGRwX2luc3QsIHRwX2luc3QpOwoJCSAgICAgICAgICAgIH0KCQkgICAgICAgIH0sCgkJICAgICAgICBvbkNoYW5nZU1vbnRoWWVhcjogZnVuY3Rpb24gKHllYXIsIG1vbnRoLCBkcF9pbnN0KSB7CgkJICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0aW1lIGFzIHdlbGwgOiB0aGlzIHByZXZlbnRzIHRoZSB0aW1lIGZyb20gZGlzYXBwZWFyaW5nIGZyb20gdGhlICRpbnB1dCBmaWVsZC4KCQkgICAgICAgICAgICB0cF9pbnN0Ll91cGRhdGVEYXRlVGltZShkcF9pbnN0KTsKCQkgICAgICAgICAgICBpZiAoJC5pc0Z1bmN0aW9uKHRwX2luc3QuX2RlZmF1bHRzLmV2bnRzLm9uQ2hhbmdlTW9udGhZZWFyKSkgewoJCSAgICAgICAgICAgICAgICB0cF9pbnN0Ll9kZWZhdWx0cy5ldm50cy5vbkNoYW5nZU1vbnRoWWVhci5jYWxsKCRpbnB1dFswXSwgeWVhciwgbW9udGgsIGRwX2luc3QsIHRwX2luc3QpOwoJCSAgICAgICAgICAgIH0KCQkgICAgICAgIH0sCgkJICAgICAgICBvbkNsb3NlOiBmdW5jdGlvbiAoZGF0ZVRleHQsIGRwX2luc3QpIHsKCQkgICAgICAgICAgICBpZiAodHBfaW5zdC50aW1lRGVmaW5lZCA9PT0gdHJ1ZSAmJiAkaW5wdXQudmFsKCkgIT09ICcnKSB7CgkJICAgICAgICAgICAgICAgIHRwX2luc3QuX3VwZGF0ZURhdGVUaW1lKGRwX2luc3QpOwoJCSAgICAgICAgICAgIH0KCQkgICAgICAgICAgICBpZiAoJC5pc0Z1bmN0aW9uKHRwX2luc3QuX2RlZmF1bHRzLmV2bnRzLm9uQ2xvc2UpKSB7CgkJICAgICAgICAgICAgICAgIHRwX2luc3QuX2RlZmF1bHRzLmV2bnRzLm9uQ2xvc2UuY2FsbCgkaW5wdXRbMF0sIGRhdGVUZXh0LCBkcF9pbnN0LCB0cF9pbnN0KTsKCQkgICAgICAgICAgICB9CgkJICAgICAgICB9CgkJICAgIH07CgkJICAgIGZvciAoaSBpbiBvdmVycmlkZXMpIHsKCQkgICAgICAgIGlmIChvdmVycmlkZXMuaGFzT3duUHJvcGVydHkoaSkpIHsKCQkgICAgICAgICAgICBmbnNbaV0gPSBvW2ldIHx8IG51bGw7CgkJICAgICAgICB9CgkJICAgIH0KCQkgICAgdHBfaW5zdC5fZGVmYXVsdHMgPSAkLmV4dGVuZCh7fSwgdGhpcy5fZGVmYXVsdHMsIGlubGluZVNldHRpbmdzLCBvLCBvdmVycmlkZXMsIHsKCQkgICAgICAgIGV2bnRzOmZucywKCQkgICAgICAgIHRpbWVwaWNrZXI6IHRwX2luc3QgLy8gYWRkIHRpbWVwaWNrZXIgYXMgYSBwcm9wZXJ0eSBvZiBkYXRlcGlja2VyOiAkLmRhdGVwaWNrZXIuX2dldChkcF9pbnN0LCAndGltZXBpY2tlcicpOwoJCSAgICB9KTsKCQkJdHBfaW5zdC5hbU5hbWVzID0gJC5tYXAodHBfaW5zdC5fZGVmYXVsdHMuYW1OYW1lcywgZnVuY3Rpb24odmFsKSB7CgkJCQlyZXR1cm4gdmFsLnRvVXBwZXJDYXNlKCk7CgkJCX0pOwoJCQl0cF9pbnN0LnBtTmFtZXMgPSAkLm1hcCh0cF9pbnN0Ll9kZWZhdWx0cy5wbU5hbWVzLCBmdW5jdGlvbih2YWwpIHsKCQkJCXJldHVybiB2YWwudG9VcHBlckNhc2UoKTsKCQkJfSk7CgoJCQkvLyBjb250cm9sVHlwZSBpcyBzdHJpbmcgLSBrZXkgdG8gb3VyIHRoaXMuX2NvbnRyb2xzCgkJCWlmKHR5cGVvZih0cF9pbnN0Ll9kZWZhdWx0cy5jb250cm9sVHlwZSkgPT09ICdzdHJpbmcnKXsKCQkJCWlmKCQuZm5bdHBfaW5zdC5fZGVmYXVsdHMuY29udHJvbFR5cGVdID09PSB1bmRlZmluZWQpewoJCQkJCXRwX2luc3QuX2RlZmF1bHRzLmNvbnRyb2xUeXBlID0gJ3NlbGVjdCc7CgkJCQl9CgkJCQl0cF9pbnN0LmNvbnRyb2wgPSB0cF9pbnN0Ll9jb250cm9sc1t0cF9pbnN0Ll9kZWZhdWx0cy5jb250cm9sVHlwZV07CgkJCX0KCQkJLy8gY29udHJvbFR5cGUgaXMgYW4gb2JqZWN0IGFuZCBtdXN0IGltcGxlbWVudCBjcmVhdGUsIG9wdGlvbnMsIHZhbHVlIG1ldGhvZHMKCQkJZWxzZXsgCgkJCQl0cF9pbnN0LmNvbnRyb2wgPSB0cF9pbnN0Ll9kZWZhdWx0cy5jb250cm9sVHlwZTsKCQkJfQoKCQkJaWYgKHRwX2luc3QuX2RlZmF1bHRzLnRpbWV6b25lTGlzdCA9PT0gbnVsbCkgewoJCQkJdmFyIHRpbWV6b25lTGlzdCA9IFsnLTEyMDAnLCAnLTExMDAnLCAnLTEwMDAnLCAnLTA5MzAnLCAnLTA5MDAnLCAnLTA4MDAnLCAnLTA3MDAnLCAnLTA2MDAnLCAnLTA1MDAnLCAnLTA0MzAnLCAnLTA0MDAnLCAnLTAzMzAnLCAnLTAzMDAnLCAnLTAyMDAnLCAnLTAxMDAnLCAnKzAwMDAnLCAKCQkJCQkJCQkJJyswMTAwJywgJyswMjAwJywgJyswMzAwJywgJyswMzMwJywgJyswNDAwJywgJyswNDMwJywgJyswNTAwJywgJyswNTMwJywgJyswNTQ1JywgJyswNjAwJywgJyswNjMwJywgJyswNzAwJywgJyswODAwJywgJyswODQ1JywgJyswOTAwJywgJyswOTMwJywgCgkJCQkJCQkJCScrMTAwMCcsICcrMTAzMCcsICcrMTEwMCcsICcrMTEzMCcsICcrMTIwMCcsICcrMTI0NScsICcrMTMwMCcsICcrMTQwMCddOwoKCQkJCWlmICh0cF9pbnN0Ll9kZWZhdWx0cy50aW1lem9uZUlzbzg2MDEpIHsKCQkJCQl0aW1lem9uZUxpc3QgPSAkLm1hcCh0aW1lem9uZUxpc3QsIGZ1bmN0aW9uKHZhbCkgewoJCQkJCQlyZXR1cm4gdmFsID09ICcrMDAwMCcgPyAnWicgOiAodmFsLnN1YnN0cmluZygwLCAzKSArICc6JyArIHZhbC5zdWJzdHJpbmcoMykpOwoJCQkJCX0pOwoJCQkJfQoJCQkJdHBfaW5zdC5fZGVmYXVsdHMudGltZXpvbmVMaXN0ID0gdGltZXpvbmVMaXN0OwoJCQl9CgoJCQl0cF9pbnN0LnRpbWV6b25lID0gdHBfaW5zdC5fZGVmYXVsdHMudGltZXpvbmU7CgkJCXRwX2luc3QuaG91ciA9IHRwX2luc3QuX2RlZmF1bHRzLmhvdXI7CgkJCXRwX2luc3QubWludXRlID0gdHBfaW5zdC5fZGVmYXVsdHMubWludXRlOwoJCQl0cF9pbnN0LnNlY29uZCA9IHRwX2luc3QuX2RlZmF1bHRzLnNlY29uZDsKCQkJdHBfaW5zdC5taWxsaXNlYyA9IHRwX2luc3QuX2RlZmF1bHRzLm1pbGxpc2VjOwoJCQl0cF9pbnN0LmFtcG0gPSAnJzsKCQkJdHBfaW5zdC4kaW5wdXQgPSAkaW5wdXQ7CgoJCQlpZiAoby5hbHRGaWVsZCkgewoJCQkJdHBfaW5zdC4kYWx0SW5wdXQgPSAkKG8uYWx0RmllbGQpLmNzcyh7CgkJCQkJY3Vyc29yOiAncG9pbnRlcicKCQkJCX0pLmZvY3VzKGZ1bmN0aW9uKCkgewoJCQkJCSRpbnB1dC50cmlnZ2VyKCJmb2N1cyIpOwoJCQkJfSk7CgkJCX0KCgkJCWlmICh0cF9pbnN0Ll9kZWZhdWx0cy5taW5EYXRlID09PSAwIHx8IHRwX2luc3QuX2RlZmF1bHRzLm1pbkRhdGVUaW1lID09PSAwKSB7CgkJCQl0cF9pbnN0Ll9kZWZhdWx0cy5taW5EYXRlID0gbmV3IERhdGUoKTsKCQkJfQoJCQlpZiAodHBfaW5zdC5fZGVmYXVsdHMubWF4RGF0ZSA9PT0gMCB8fCB0cF9pbnN0Ll9kZWZhdWx0cy5tYXhEYXRlVGltZSA9PT0gMCkgewoJCQkJdHBfaW5zdC5fZGVmYXVsdHMubWF4RGF0ZSA9IG5ldyBEYXRlKCk7CgkJCX0KCgkJCS8vIGRhdGVwaWNrZXIgbmVlZHMgbWluRGF0ZS9tYXhEYXRlLCB0aW1lcGlja2VyIG5lZWRzIG1pbkRhdGVUaW1lL21heERhdGVUaW1lLi4KCQkJaWYgKHRwX2luc3QuX2RlZmF1bHRzLm1pbkRhdGUgIT09IHVuZGVmaW5lZCAmJiB0cF9pbnN0Ll9kZWZhdWx0cy5taW5EYXRlIGluc3RhbmNlb2YgRGF0ZSkgewoJCQkJdHBfaW5zdC5fZGVmYXVsdHMubWluRGF0ZVRpbWUgPSBuZXcgRGF0ZSh0cF9pbnN0Ll9kZWZhdWx0cy5taW5EYXRlLmdldFRpbWUoKSk7CgkJCX0KCQkJaWYgKHRwX2luc3QuX2RlZmF1bHRzLm1pbkRhdGVUaW1lICE9PSB1bmRlZmluZWQgJiYgdHBfaW5zdC5fZGVmYXVsdHMubWluRGF0ZVRpbWUgaW5zdGFuY2VvZiBEYXRlKSB7CgkJCQl0cF9pbnN0Ll9kZWZhdWx0cy5taW5EYXRlID0gbmV3IERhdGUodHBfaW5zdC5fZGVmYXVsdHMubWluRGF0ZVRpbWUuZ2V0VGltZSgpKTsKCQkJfQoJCQlpZiAodHBfaW5zdC5fZGVmYXVsdHMubWF4RGF0ZSAhPT0gdW5kZWZpbmVkICYmIHRwX2luc3QuX2RlZmF1bHRzLm1heERhdGUgaW5zdGFuY2VvZiBEYXRlKSB7CgkJCQl0cF9pbnN0Ll9kZWZhdWx0cy5tYXhEYXRlVGltZSA9IG5ldyBEYXRlKHRwX2luc3QuX2RlZmF1bHRzLm1heERhdGUuZ2V0VGltZSgpKTsKCQkJfQoJCQlpZiAodHBfaW5zdC5fZGVmYXVsdHMubWF4RGF0ZVRpbWUgIT09IHVuZGVmaW5lZCAmJiB0cF9pbnN0Ll9kZWZhdWx0cy5tYXhEYXRlVGltZSBpbnN0YW5jZW9mIERhdGUpIHsKCQkJCXRwX2luc3QuX2RlZmF1bHRzLm1heERhdGUgPSBuZXcgRGF0ZSh0cF9pbnN0Ll9kZWZhdWx0cy5tYXhEYXRlVGltZS5nZXRUaW1lKCkpOwoJCQl9CgkJCXRwX2luc3QuJGlucHV0LmJpbmQoJ2ZvY3VzJywgZnVuY3Rpb24oKSB7CgkJCQl0cF9pbnN0Ll9vbkZvY3VzKCk7CgkJCX0pOwoKCQkJcmV0dXJuIHRwX2luc3Q7CgkJfSwKCgkJLyoKCQkqIGFkZCBvdXIgc2xpZGVycyB0byB0aGUgY2FsZW5kYXIKCQkqLwoJCV9hZGRUaW1lUGlja2VyOiBmdW5jdGlvbihkcF9pbnN0KSB7CgkJCXZhciBjdXJyRFQgPSAodGhpcy4kYWx0SW5wdXQgJiYgdGhpcy5fZGVmYXVsdHMuYWx0RmllbGRUaW1lT25seSkgPyB0aGlzLiRpbnB1dC52YWwoKSArICcgJyArIHRoaXMuJGFsdElucHV0LnZhbCgpIDogdGhpcy4kaW5wdXQudmFsKCk7CgoJCQl0aGlzLnRpbWVEZWZpbmVkID0gdGhpcy5fcGFyc2VUaW1lKGN1cnJEVCk7CgkJCXRoaXMuX2xpbWl0TWluTWF4RGF0ZVRpbWUoZHBfaW5zdCwgZmFsc2UpOwoJCQl0aGlzLl9pbmplY3RUaW1lUGlja2VyKCk7CgkJfSwKCgkJLyoKCQkqIHBhcnNlIHRoZSB0aW1lIHN0cmluZyBmcm9tIGlucHV0IHZhbHVlIG9yIF9zZXRUaW1lCgkJKi8KCQlfcGFyc2VUaW1lOiBmdW5jdGlvbih0aW1lU3RyaW5nLCB3aXRoRGF0ZSkgewoJCQlpZiAoIXRoaXMuaW5zdCkgewoJCQkJdGhpcy5pbnN0ID0gJC5kYXRlcGlja2VyLl9nZXRJbnN0KHRoaXMuJGlucHV0WzBdKTsKCQkJfQoKCQkJaWYgKHdpdGhEYXRlIHx8ICF0aGlzLl9kZWZhdWx0cy50aW1lT25seSkgewoJCQkJdmFyIGRwX2RhdGVGb3JtYXQgPSAkLmRhdGVwaWNrZXIuX2dldCh0aGlzLmluc3QsICdkYXRlRm9ybWF0Jyk7CgkJCQl0cnkgewoJCQkJCXZhciBwYXJzZVJlcyA9IHBhcnNlRGF0ZVRpbWVJbnRlcm5hbChkcF9kYXRlRm9ybWF0LCB0aGlzLl9kZWZhdWx0cy50aW1lRm9ybWF0LCB0aW1lU3RyaW5nLCAkLmRhdGVwaWNrZXIuX2dldEZvcm1hdENvbmZpZyh0aGlzLmluc3QpLCB0aGlzLl9kZWZhdWx0cyk7CgkJCQkJaWYgKCFwYXJzZVJlcy50aW1lT2JqKSB7CgkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQl9CgkJCQkJJC5leHRlbmQodGhpcywgcGFyc2VSZXMudGltZU9iaik7CgkJCQl9IGNhdGNoIChlcnIpIHsKCQkJCQkkLmRhdGVwaWNrZXIubG9nKCJFcnJvciBwYXJzaW5nIHRoZSBkYXRlL3RpbWUgc3RyaW5nOiAiICsgZXJyICsKCQkJCQkJCQkJIlxuZGF0ZS90aW1lIHN0cmluZyA9ICIgKyB0aW1lU3RyaW5nICsKCQkJCQkJCQkJIlxudGltZUZvcm1hdCA9ICIgKyB0aGlzLl9kZWZhdWx0cy50aW1lRm9ybWF0ICsKCQkJCQkJCQkJIlxuZGF0ZUZvcm1hdCA9ICIgKyBkcF9kYXRlRm9ybWF0KTsKCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQl9CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJfSBlbHNlIHsKCQkJCXZhciB0aW1lT2JqID0gJC5kYXRlcGlja2VyLnBhcnNlVGltZSh0aGlzLl9kZWZhdWx0cy50aW1lRm9ybWF0LCB0aW1lU3RyaW5nLCB0aGlzLl9kZWZhdWx0cyk7CgkJCQlpZiAoIXRpbWVPYmopIHsKCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQl9CgkJCQkkLmV4dGVuZCh0aGlzLCB0aW1lT2JqKTsKCQkJCXJldHVybiB0cnVlOwoJCQl9CgkJfSwKCgkJLyoKCQkqIGdlbmVyYXRlIGFuZCBpbmplY3QgaHRtbCBmb3IgdGltZXBpY2tlciBpbnRvIHVpIGRhdGVwaWNrZXIKCQkqLwoJCV9pbmplY3RUaW1lUGlja2VyOiBmdW5jdGlvbigpIHsKCQkJdmFyICRkcCA9IHRoaXMuaW5zdC5kcERpdiwKCQkJCW8gPSB0aGlzLmluc3Quc2V0dGluZ3MsCgkJCQl0cF9pbnN0ID0gdGhpcywKCQkJCWxpdGVtID0gJycsCgkJCQl1aXRlbSA9ICcnLAoJCQkJbWF4ID0ge30sCgkJCQlncmlkU2l6ZSA9IHt9LAoJCQkJc2l6ZSA9IG51bGw7CgoJCQkvLyBQcmV2ZW50IGRpc3BsYXlpbmcgdHdpY2UKCQkJaWYgKCRkcC5maW5kKCJkaXYudWktdGltZXBpY2tlci1kaXYiKS5sZW5ndGggPT09IDAgJiYgby5zaG93VGltZXBpY2tlcikgewoJCQkJdmFyIG5vRGlzcGxheSA9ICcgc3R5bGU9ImRpc3BsYXk6bm9uZTsiJywKCQkJCQlodG1sID0gJzxkaXYgY2xhc3M9InVpLXRpbWVwaWNrZXItZGl2JysgKG8uaXNSVEw/ICcgdWktdGltZXBpY2tlci1ydGwnIDogJycpICsnIj48ZGw+JyArICc8ZHQgY2xhc3M9InVpX3RwaWNrZXJfdGltZV9sYWJlbCInICsgKChvLnNob3dUaW1lKSA/ICcnIDogbm9EaXNwbGF5KSArICc+JyArIG8udGltZVRleHQgKyAnPC9kdD4nICsgCgkJCQkJCQkJJzxkZCBjbGFzcz0idWlfdHBpY2tlcl90aW1lIicgKyAoKG8uc2hvd1RpbWUpID8gJycgOiBub0Rpc3BsYXkpICsgJz48L2RkPic7CgoJCQkJLy8gQ3JlYXRlIHRoZSBtYXJrdXAKCQkJCWZvcih2YXIgaT0wLGw9dGhpcy51bml0cy5sZW5ndGg7IGk8bDsgaSsrKXsKCQkJCQlsaXRlbSA9IHRoaXMudW5pdHNbaV07CgkJCQkJdWl0ZW0gPSBsaXRlbS5zdWJzdHIoMCwxKS50b1VwcGVyQ2FzZSgpICsgbGl0ZW0uc3Vic3RyKDEpOwoJCQkJCS8vIEFkZGVkIGJ5IFBldGVyIE1lZGVpcm9zOgoJCQkJCS8vIC0gRmlndXJlIG91dCB3aGF0IHRoZSBob3VyL21pbnV0ZS9zZWNvbmQgbWF4IHNob3VsZCBiZSBiYXNlZCBvbiB0aGUgc3RlcCB2YWx1ZXMuCgkJCQkJLy8gLSBFeGFtcGxlOiBpZiBzdGVwTWludXRlIGlzIDE1LCB0aGVuIG1pbk1heCBpcyA0NS4KCQkJCQltYXhbbGl0ZW1dID0gcGFyc2VJbnQoKG9bbGl0ZW0rJ01heCddIC0gKChvW2xpdGVtKydNYXgnXSAtIG9bbGl0ZW0rJ01pbiddKSAlIG9bJ3N0ZXAnK3VpdGVtXSkpLCAxMCk7CgkJCQkJZ3JpZFNpemVbbGl0ZW1dID0gMDsKCgkJCQkJaHRtbCArPSAnPGR0IGNsYXNzPSJ1aV90cGlja2VyXycrIGxpdGVtICsnX2xhYmVsIicgKyAoKG9bJ3Nob3cnK3VpdGVtXSkgPyAnJyA6IG5vRGlzcGxheSkgKyAnPicgKyBvW2xpdGVtICsnVGV4dCddICsgJzwvZHQ+JyArIAoJCQkJCQkJCSc8ZGQgY2xhc3M9InVpX3RwaWNrZXJfJysgbGl0ZW0gKyciPjxkaXYgY2xhc3M9InVpX3RwaWNrZXJfJysgbGl0ZW0gKydfc2xpZGVyIicgKyAoKG9bJ3Nob3cnK3VpdGVtXSkgPyAnJyA6IG5vRGlzcGxheSkgKyAnPjwvZGl2Pic7CgoJCQkJCWlmIChvWydzaG93Jyt1aXRlbV0gJiYgb1tsaXRlbSsnR3JpZCddID4gMCkgewoJCQkJCQlodG1sICs9ICc8ZGl2IHN0eWxlPSJwYWRkaW5nLWxlZnQ6IDFweCI+PHRhYmxlIGNsYXNzPSJ1aS10cGlja2VyLWdyaWQtbGFiZWwiPjx0cj4nOwoKCQkJCQkJaWYobGl0ZW0gPT0gJ2hvdXInKXsKCQkJCQkJCWZvciAodmFyIGggPSBvW2xpdGVtKydNaW4nXTsgaCA8PSBtYXhbbGl0ZW1dOyBoICs9IHBhcnNlSW50KG9bbGl0ZW0rJ0dyaWQnXSwgMTApKSB7CgkJCQkJCQkJZ3JpZFNpemVbbGl0ZW1dKys7CgkJCQkJCQkJdmFyIHRtcGggPSAkLmRhdGVwaWNrZXIuZm9ybWF0VGltZSh1c2VBbXBtKG8ucGlja2VyVGltZUZvcm1hdCB8fCBvLnRpbWVGb3JtYXQpPyAnaGh0JzonSEgnLCB7aG91cjpofSwgbyk7CQkJCQkJCQkJCgkJCQkJCQkJaHRtbCArPSAnPHRkIGRhdGEtZm9yPSInK2xpdGVtKyciPicgKyB0bXBoICsgJzwvdGQ+JzsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQllbHNlewoJCQkJCQkJZm9yICh2YXIgbSA9IG9bbGl0ZW0rJ01pbiddOyBtIDw9IG1heFtsaXRlbV07IG0gKz0gcGFyc2VJbnQob1tsaXRlbSsnR3JpZCddLCAxMCkpIHsKCQkJCQkJCQlncmlkU2l6ZVtsaXRlbV0rKzsKCQkJCQkJCQlodG1sICs9ICc8dGQgZGF0YS1mb3I9IicrbGl0ZW0rJyI+JyArICgobSA8IDEwKSA/ICcwJyA6ICcnKSArIG0gKyAnPC90ZD4nOwoJCQkJCQkJfQoJCQkJCQl9CgoJCQkJCQlodG1sICs9ICc8L3RyPjwvdGFibGU+PC9kaXY+JzsKCQkJCQl9CgkJCQkJaHRtbCArPSAnPC9kZD4nOwoJCQkJfQoJCQkJCgkJCQkvLyBUaW1lem9uZQoJCQkJaHRtbCArPSAnPGR0IGNsYXNzPSJ1aV90cGlja2VyX3RpbWV6b25lX2xhYmVsIicgKyAoKG8uc2hvd1RpbWV6b25lKSA/ICcnIDogbm9EaXNwbGF5KSArICc+JyArIG8udGltZXpvbmVUZXh0ICsgJzwvZHQ+JzsKCQkJCWh0bWwgKz0gJzxkZCBjbGFzcz0idWlfdHBpY2tlcl90aW1lem9uZSIgJyArICgoby5zaG93VGltZXpvbmUpID8gJycgOiBub0Rpc3BsYXkpICsgJz48L2RkPic7CgoJCQkJLy8gQ3JlYXRlIHRoZSBlbGVtZW50cyBmcm9tIHN0cmluZwoJCQkJaHRtbCArPSAnPC9kbD48L2Rpdj4nOwoJCQkJdmFyICR0cCA9ICQoaHRtbCk7CgoJCQkJLy8gaWYgd2Ugb25seSB3YW50IHRpbWUgcGlja2VyLi4uCgkJCQlpZiAoby50aW1lT25seSA9PT0gdHJ1ZSkgewoJCQkJCSR0cC5wcmVwZW5kKCc8ZGl2IGNsYXNzPSJ1aS13aWRnZXQtaGVhZGVyIHVpLWhlbHBlci1jbGVhcmZpeCB1aS1jb3JuZXItYWxsIj4nICsgJzxkaXYgY2xhc3M9InVpLWRhdGVwaWNrZXItdGl0bGUiPicgKyBvLnRpbWVPbmx5VGl0bGUgKyAnPC9kaXY+JyArICc8L2Rpdj4nKTsKCQkJCQkkZHAuZmluZCgnLnVpLWRhdGVwaWNrZXItaGVhZGVyLCAudWktZGF0ZXBpY2tlci1jYWxlbmRhcicpLmhpZGUoKTsKCQkJCX0KCQkJCQoJCQkJLy8gYWRkIHNsaWRlcnMsIGFkanVzdCBncmlkcywgYWRkIGV2ZW50cwoJCQkJZm9yKHZhciBpPTAsbD10cF9pbnN0LnVuaXRzLmxlbmd0aDsgaTxsOyBpKyspewoJCQkJCWxpdGVtID0gdHBfaW5zdC51bml0c1tpXTsKCQkJCQl1aXRlbSA9IGxpdGVtLnN1YnN0cigwLDEpLnRvVXBwZXJDYXNlKCkgKyBsaXRlbS5zdWJzdHIoMSk7CgkJCQkJCgkJCQkJLy8gYWRkIHRoZSBzbGlkZXIKCQkJCQl0cF9pbnN0W2xpdGVtKydfc2xpZGVyJ10gPSB0cF9pbnN0LmNvbnRyb2wuY3JlYXRlKHRwX2luc3QsICR0cC5maW5kKCcudWlfdHBpY2tlcl8nK2xpdGVtKydfc2xpZGVyJyksIGxpdGVtLCB0cF9pbnN0W2xpdGVtXSwgb1tsaXRlbSsnTWluJ10sIG1heFtsaXRlbV0sIG9bJ3N0ZXAnK3VpdGVtXSk7CgoJCQkJCS8vIGFkanVzdCB0aGUgZ3JpZCBhbmQgYWRkIGNsaWNrIGV2ZW50CgkJCQkJaWYgKG9bJ3Nob3cnK3VpdGVtXSAmJiBvW2xpdGVtKydHcmlkJ10gPiAwKSB7CgkJCQkJCXNpemUgPSAxMDAgKiBncmlkU2l6ZVtsaXRlbV0gKiBvW2xpdGVtKydHcmlkJ10gLyAobWF4W2xpdGVtXSAtIG9bbGl0ZW0rJ01pbiddKTsKCQkJCQkJJHRwLmZpbmQoJy51aV90cGlja2VyXycrbGl0ZW0rJyB0YWJsZScpLmNzcyh7CgkJCQkJCQl3aWR0aDogc2l6ZSArICIlIiwKCQkJCQkJCW1hcmdpbkxlZnQ6IG8uaXNSVEw/ICcwJyA6ICgoc2l6ZSAvICgtMiAqIGdyaWRTaXplW2xpdGVtXSkpICsgIiUiKSwKCQkJCQkJCW1hcmdpblJpZ2h0OiBvLmlzUlRMPyAoKHNpemUgLyAoLTIgKiBncmlkU2l6ZVtsaXRlbV0pKSArICIlIikgOiAnMCcsCgkJCQkJCQlib3JkZXJDb2xsYXBzZTogJ2NvbGxhcHNlJwoJCQkJCQl9KS5maW5kKCJ0ZCIpLmNsaWNrKGZ1bmN0aW9uKGUpewoJCQkJCQkJCXZhciAkdCA9ICQodGhpcyksCgkJCQkJCQkJCWggPSAkdC5odG1sKCksCgkJCQkJCQkJCW4gPSBwYXJzZUludChoLnJlcGxhY2UoL1teMC05XS9nKSwxMCksCgkJCQkJCQkJCWFwID0gaC5yZXBsYWNlKC9bXmFwbV0vaWcpLAoJCQkJCQkJCQlmID0gJHQuZGF0YSgnZm9yJyk7IC8vIGxvc2VzIHNjb3BlLCBzbyB3ZSB1c2UgZGF0YS1mb3IKCgkJCQkJCQkJaWYoZiA9PSAnaG91cicpewoJCQkJCQkJCQlpZihhcC5pbmRleE9mKCdwJykgIT09IC0xICYmIG4gPCAxMil7CgkJCQkJCQkJCQluICs9IDEyOwoJCQkJCQkJCQl9CgkJCQkJCQkJCWVsc2V7CgkJCQkJCQkJCQlpZihhcC5pbmRleE9mKCdhJykgIT09IC0xICYmIG4gPT09IDEyKXsKCQkJCQkJCQkJCQluID0gMDsKCQkJCQkJCQkJCX0KCQkJCQkJCQkJfQoJCQkJCQkJCX0KCQkJCQkJCQkKCQkJCQkJCQl0cF9pbnN0LmNvbnRyb2wudmFsdWUodHBfaW5zdCwgdHBfaW5zdFtmKydfc2xpZGVyJ10sIGxpdGVtLCBuKTsKCgkJCQkJCQkJdHBfaW5zdC5fb25UaW1lQ2hhbmdlKCk7CgkJCQkJCQkJdHBfaW5zdC5fb25TZWxlY3RIYW5kbGVyKCk7CgkJCQkJCQl9KQoJCQkJCQkuY3NzKHsKCQkJCQkJCQljdXJzb3I6ICdwb2ludGVyJywKCQkJCQkJCQl3aWR0aDogKDEwMCAvIGdyaWRTaXplW2xpdGVtXSkgKyAnJScsCgkJCQkJCQkJdGV4dEFsaWduOiAnY2VudGVyJywKCQkJCQkJCQlvdmVyZmxvdzogJ2hpZGRlbicKCQkJCQkJCX0pOwoJCQkJCX0gLy8gZW5kIGlmIGdyaWQgPiAwCgkJCQl9IC8vIGVuZCBmb3IgbG9vcAoKCQkJCS8vIEFkZCB0aW1lem9uZSBvcHRpb25zCgkJCQl0aGlzLnRpbWV6b25lX3NlbGVjdCA9ICR0cC5maW5kKCcudWlfdHBpY2tlcl90aW1lem9uZScpLmFwcGVuZCgnPHNlbGVjdD48L3NlbGVjdD4nKS5maW5kKCJzZWxlY3QiKTsKCQkJCSQuZm4uYXBwZW5kLmFwcGx5KHRoaXMudGltZXpvbmVfc2VsZWN0LAoJCQkJJC5tYXAoby50aW1lem9uZUxpc3QsIGZ1bmN0aW9uKHZhbCwgaWR4KSB7CgkJCQkJcmV0dXJuICQoIjxvcHRpb24gLz4iKS52YWwodHlwZW9mIHZhbCA9PSAib2JqZWN0IiA/IHZhbC52YWx1ZSA6IHZhbCkudGV4dCh0eXBlb2YgdmFsID09ICJvYmplY3QiID8gdmFsLmxhYmVsIDogdmFsKTsKCQkJCX0pKTsKCQkJCWlmICh0eXBlb2YodGhpcy50aW1lem9uZSkgIT0gInVuZGVmaW5lZCIgJiYgdGhpcy50aW1lem9uZSAhPT0gbnVsbCAmJiB0aGlzLnRpbWV6b25lICE9PSAiIikgewoJCQkJCXZhciBsb2NhbF9kYXRlID0gbmV3IERhdGUodGhpcy5pbnN0LnNlbGVjdGVkWWVhciwgdGhpcy5pbnN0LnNlbGVjdGVkTW9udGgsIHRoaXMuaW5zdC5zZWxlY3RlZERheSwgMTIpOwoJCQkJCXZhciBsb2NhbF90aW1lem9uZSA9ICQudGltZXBpY2tlci50aW1lWm9uZU9mZnNldFN0cmluZyhsb2NhbF9kYXRlKTsKCQkJCQlpZiAobG9jYWxfdGltZXpvbmUgPT0gdGhpcy50aW1lem9uZSkgewoJCQkJCQlzZWxlY3RMb2NhbFRpbWVab25lKHRwX2luc3QpOwoJCQkJCX0gZWxzZSB7CgkJCQkJCXRoaXMudGltZXpvbmVfc2VsZWN0LnZhbCh0aGlzLnRpbWV6b25lKTsKCQkJCQl9CgkJCQl9IGVsc2UgewoJCQkJCWlmICh0eXBlb2YodGhpcy5ob3VyKSAhPSAidW5kZWZpbmVkIiAmJiB0aGlzLmhvdXIgIT09IG51bGwgJiYgdGhpcy5ob3VyICE9PSAiIikgewoJCQkJCQl0aGlzLnRpbWV6b25lX3NlbGVjdC52YWwoby5kZWZhdWx0VGltZXpvbmUpOwoJCQkJCX0gZWxzZSB7CgkJCQkJCXNlbGVjdExvY2FsVGltZVpvbmUodHBfaW5zdCk7CgkJCQkJfQoJCQkJfQoJCQkJdGhpcy50aW1lem9uZV9zZWxlY3QuY2hhbmdlKGZ1bmN0aW9uKCkgewoJCQkJCXRwX2luc3QuX2RlZmF1bHRzLnVzZUxvY2FsVGltZXpvbmUgPSBmYWxzZTsKCQkJCQl0cF9pbnN0Ll9vblRpbWVDaGFuZ2UoKTsKCQkJCX0pOwoJCQkJLy8gRW5kIHRpbWV6b25lIG9wdGlvbnMKCQkJCQoJCQkJLy8gaW5qZWN0IHRpbWVwaWNrZXIgaW50byBkYXRlcGlja2VyCgkJCQl2YXIgJGJ1dHRvblBhbmVsID0gJGRwLmZpbmQoJy51aS1kYXRlcGlja2VyLWJ1dHRvbnBhbmUnKTsKCQkJCWlmICgkYnV0dG9uUGFuZWwubGVuZ3RoKSB7CgkJCQkJJGJ1dHRvblBhbmVsLmJlZm9yZSgkdHApOwoJCQkJfSBlbHNlIHsKCQkJCQkkZHAuYXBwZW5kKCR0cCk7CgkJCQl9CgoJCQkJdGhpcy4kdGltZU9iaiA9ICR0cC5maW5kKCcudWlfdHBpY2tlcl90aW1lJyk7CgoJCQkJaWYgKHRoaXMuaW5zdCAhPT0gbnVsbCkgewoJCQkJCXZhciB0aW1lRGVmaW5lZCA9IHRoaXMudGltZURlZmluZWQ7CgkJCQkJdGhpcy5fb25UaW1lQ2hhbmdlKCk7CgkJCQkJdGhpcy50aW1lRGVmaW5lZCA9IHRpbWVEZWZpbmVkOwoJCQkJfQoKCQkJCS8vIHNsaWRlQWNjZXNzIGludGVncmF0aW9uOiBodHRwOi8vdHJlbnRyaWNoYXJkc29uLmNvbS8yMDExLzExLzExL2pxdWVyeS11aS1zbGlkZXJzLWFuZC10b3VjaC1hY2Nlc3NpYmlsaXR5LwoJCQkJaWYgKHRoaXMuX2RlZmF1bHRzLmFkZFNsaWRlckFjY2VzcykgewoJCQkJCXZhciBzbGlkZXJBY2Nlc3NBcmdzID0gdGhpcy5fZGVmYXVsdHMuc2xpZGVyQWNjZXNzQXJncywKCQkJCQkJcnRsID0gdGhpcy5fZGVmYXVsdHMuaXNSVEw7CgkJCQkJc2xpZGVyQWNjZXNzQXJncy5pc1JUTCA9IHJ0bDsKCQkJCQkJCgkJCQkJc2V0VGltZW91dChmdW5jdGlvbigpIHsgLy8gZml4IGZvciBpbmxpbmUgbW9kZQoJCQkJCQlpZiAoJHRwLmZpbmQoJy51aS1zbGlkZXItYWNjZXNzJykubGVuZ3RoID09PSAwKSB7CgkJCQkJCQkkdHAuZmluZCgnLnVpLXNsaWRlcjp2aXNpYmxlJykuc2xpZGVyQWNjZXNzKHNsaWRlckFjY2Vzc0FyZ3MpOwoKCQkJCQkJCS8vIGZpeCBhbnkgZ3JpZHMgc2luY2Ugc2xpZGVycyBhcmUgc2hvcnRlcgoJCQkJCQkJdmFyIHNsaWRlckFjY2Vzc1dpZHRoID0gJHRwLmZpbmQoJy51aS1zbGlkZXItYWNjZXNzOmVxKDApJykub3V0ZXJXaWR0aCh0cnVlKTsKCQkJCQkJCWlmIChzbGlkZXJBY2Nlc3NXaWR0aCkgewoJCQkJCQkJCSR0cC5maW5kKCd0YWJsZTp2aXNpYmxlJykuZWFjaChmdW5jdGlvbigpIHsKCQkJCQkJCQkJdmFyICRnID0gJCh0aGlzKSwKCQkJCQkJCQkJCW9sZFdpZHRoID0gJGcub3V0ZXJXaWR0aCgpLAoJCQkJCQkJCQkJb2xkTWFyZ2luTGVmdCA9ICRnLmNzcyhydGw/ICdtYXJnaW5SaWdodCc6J21hcmdpbkxlZnQnKS50b1N0cmluZygpLnJlcGxhY2UoJyUnLCAnJyksCgkJCQkJCQkJCQluZXdXaWR0aCA9IG9sZFdpZHRoIC0gc2xpZGVyQWNjZXNzV2lkdGgsCgkJCQkJCQkJCQluZXdNYXJnaW5MZWZ0ID0gKChvbGRNYXJnaW5MZWZ0ICogbmV3V2lkdGgpIC8gb2xkV2lkdGgpICsgJyUnLAoJCQkJCQkJCQkJY3NzID0geyB3aWR0aDogbmV3V2lkdGgsIG1hcmdpblJpZ2h0OiAwLCBtYXJnaW5MZWZ0OiAwIH07CgkJCQkJCQkJCWNzc1tydGw/ICdtYXJnaW5SaWdodCc6J21hcmdpbkxlZnQnXSA9IG5ld01hcmdpbkxlZnQ7CgkJCQkJCQkJCSRnLmNzcyhjc3MpOwoJCQkJCQkJCX0pOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfSwgMTApOwoJCQkJfQoJCQkJLy8gZW5kIHNsaWRlQWNjZXNzIGludGVncmF0aW9uCgoJCQl9CgkJfSwKCgkJLyoKCQkqIFRoaXMgZnVuY3Rpb24gdHJpZXMgdG8gbGltaXQgdGhlIGFiaWxpdHkgdG8gZ28gb3V0c2lkZSB0aGUKCQkqIG1pbi9tYXggZGF0ZSByYW5nZQoJCSovCgkJX2xpbWl0TWluTWF4RGF0ZVRpbWU6IGZ1bmN0aW9uKGRwX2luc3QsIGFkanVzdFNsaWRlcnMpIHsKCQkJdmFyIG8gPSB0aGlzLl9kZWZhdWx0cywKCQkJCWRwX2RhdGUgPSBuZXcgRGF0ZShkcF9pbnN0LnNlbGVjdGVkWWVhciwgZHBfaW5zdC5zZWxlY3RlZE1vbnRoLCBkcF9pbnN0LnNlbGVjdGVkRGF5KTsKCgkJCWlmICghdGhpcy5fZGVmYXVsdHMuc2hvd1RpbWVwaWNrZXIpIHsKCQkJCXJldHVybjsKCQkJfSAvLyBObyB0aW1lIHNvIG5vdGhpbmcgdG8gY2hlY2sgaGVyZQoKCQkJaWYgKCQuZGF0ZXBpY2tlci5fZ2V0KGRwX2luc3QsICdtaW5EYXRlVGltZScpICE9PSBudWxsICYmICQuZGF0ZXBpY2tlci5fZ2V0KGRwX2luc3QsICdtaW5EYXRlVGltZScpICE9PSB1bmRlZmluZWQgJiYgZHBfZGF0ZSkgewoJCQkJdmFyIG1pbkRhdGVUaW1lID0gJC5kYXRlcGlja2VyLl9nZXQoZHBfaW5zdCwgJ21pbkRhdGVUaW1lJyksCgkJCQkJbWluRGF0ZVRpbWVEYXRlID0gbmV3IERhdGUobWluRGF0ZVRpbWUuZ2V0RnVsbFllYXIoKSwgbWluRGF0ZVRpbWUuZ2V0TW9udGgoKSwgbWluRGF0ZVRpbWUuZ2V0RGF0ZSgpLCAwLCAwLCAwLCAwKTsKCgkJCQlpZiAodGhpcy5ob3VyTWluT3JpZ2luYWwgPT09IG51bGwgfHwgdGhpcy5taW51dGVNaW5PcmlnaW5hbCA9PT0gbnVsbCB8fCB0aGlzLnNlY29uZE1pbk9yaWdpbmFsID09PSBudWxsIHx8IHRoaXMubWlsbGlzZWNNaW5PcmlnaW5hbCA9PT0gbnVsbCkgewoJCQkJCXRoaXMuaG91ck1pbk9yaWdpbmFsID0gby5ob3VyTWluOwoJCQkJCXRoaXMubWludXRlTWluT3JpZ2luYWwgPSBvLm1pbnV0ZU1pbjsKCQkJCQl0aGlzLnNlY29uZE1pbk9yaWdpbmFsID0gby5zZWNvbmRNaW47CgkJCQkJdGhpcy5taWxsaXNlY01pbk9yaWdpbmFsID0gby5taWxsaXNlY01pbjsKCQkJCX0KCgkJCQlpZiAoZHBfaW5zdC5zZXR0aW5ncy50aW1lT25seSB8fCBtaW5EYXRlVGltZURhdGUuZ2V0VGltZSgpID09IGRwX2RhdGUuZ2V0VGltZSgpKSB7CgkJCQkJdGhpcy5fZGVmYXVsdHMuaG91ck1pbiA9IG1pbkRhdGVUaW1lLmdldEhvdXJzKCk7CgkJCQkJaWYgKHRoaXMuaG91ciA8PSB0aGlzLl9kZWZhdWx0cy5ob3VyTWluKSB7CgkJCQkJCXRoaXMuaG91ciA9IHRoaXMuX2RlZmF1bHRzLmhvdXJNaW47CgkJCQkJCXRoaXMuX2RlZmF1bHRzLm1pbnV0ZU1pbiA9IG1pbkRhdGVUaW1lLmdldE1pbnV0ZXMoKTsKCQkJCQkJaWYgKHRoaXMubWludXRlIDw9IHRoaXMuX2RlZmF1bHRzLm1pbnV0ZU1pbikgewoJCQkJCQkJdGhpcy5taW51dGUgPSB0aGlzLl9kZWZhdWx0cy5taW51dGVNaW47CgkJCQkJCQl0aGlzLl9kZWZhdWx0cy5zZWNvbmRNaW4gPSBtaW5EYXRlVGltZS5nZXRTZWNvbmRzKCk7CgkJCQkJCQlpZiAodGhpcy5zZWNvbmQgPD0gdGhpcy5fZGVmYXVsdHMuc2Vjb25kTWluKSB7CgkJCQkJCQkJdGhpcy5zZWNvbmQgPSB0aGlzLl9kZWZhdWx0cy5zZWNvbmRNaW47CgkJCQkJCQkJdGhpcy5fZGVmYXVsdHMubWlsbGlzZWNNaW4gPSBtaW5EYXRlVGltZS5nZXRNaWxsaXNlY29uZHMoKTsKCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJaWYgKHRoaXMubWlsbGlzZWMgPCB0aGlzLl9kZWZhdWx0cy5taWxsaXNlY01pbikgewoJCQkJCQkJCQl0aGlzLm1pbGxpc2VjID0gdGhpcy5fZGVmYXVsdHMubWlsbGlzZWNNaW47CgkJCQkJCQkJfQoJCQkJCQkJCXRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWluID0gdGhpcy5taWxsaXNlY01pbk9yaWdpbmFsOwoJCQkJCQkJfQoJCQkJCQl9IGVsc2UgewoJCQkJCQkJdGhpcy5fZGVmYXVsdHMuc2Vjb25kTWluID0gdGhpcy5zZWNvbmRNaW5PcmlnaW5hbDsKCQkJCQkJCXRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWluID0gdGhpcy5taWxsaXNlY01pbk9yaWdpbmFsOwoJCQkJCQl9CgkJCQkJfSBlbHNlIHsKCQkJCQkJdGhpcy5fZGVmYXVsdHMubWludXRlTWluID0gdGhpcy5taW51dGVNaW5PcmlnaW5hbDsKCQkJCQkJdGhpcy5fZGVmYXVsdHMuc2Vjb25kTWluID0gdGhpcy5zZWNvbmRNaW5PcmlnaW5hbDsKCQkJCQkJdGhpcy5fZGVmYXVsdHMubWlsbGlzZWNNaW4gPSB0aGlzLm1pbGxpc2VjTWluT3JpZ2luYWw7CgkJCQkJfQoJCQkJfSBlbHNlIHsKCQkJCQl0aGlzLl9kZWZhdWx0cy5ob3VyTWluID0gdGhpcy5ob3VyTWluT3JpZ2luYWw7CgkJCQkJdGhpcy5fZGVmYXVsdHMubWludXRlTWluID0gdGhpcy5taW51dGVNaW5PcmlnaW5hbDsKCQkJCQl0aGlzLl9kZWZhdWx0cy5zZWNvbmRNaW4gPSB0aGlzLnNlY29uZE1pbk9yaWdpbmFsOwoJCQkJCXRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWluID0gdGhpcy5taWxsaXNlY01pbk9yaWdpbmFsOwoJCQkJfQoJCQl9CgoJCQlpZiAoJC5kYXRlcGlja2VyLl9nZXQoZHBfaW5zdCwgJ21heERhdGVUaW1lJykgIT09IG51bGwgJiYgJC5kYXRlcGlja2VyLl9nZXQoZHBfaW5zdCwgJ21heERhdGVUaW1lJykgIT09IHVuZGVmaW5lZCAmJiBkcF9kYXRlKSB7CgkJCQl2YXIgbWF4RGF0ZVRpbWUgPSAkLmRhdGVwaWNrZXIuX2dldChkcF9pbnN0LCAnbWF4RGF0ZVRpbWUnKSwKCQkJCQltYXhEYXRlVGltZURhdGUgPSBuZXcgRGF0ZShtYXhEYXRlVGltZS5nZXRGdWxsWWVhcigpLCBtYXhEYXRlVGltZS5nZXRNb250aCgpLCBtYXhEYXRlVGltZS5nZXREYXRlKCksIDAsIDAsIDAsIDApOwoKCQkJCWlmICh0aGlzLmhvdXJNYXhPcmlnaW5hbCA9PT0gbnVsbCB8fCB0aGlzLm1pbnV0ZU1heE9yaWdpbmFsID09PSBudWxsIHx8IHRoaXMuc2Vjb25kTWF4T3JpZ2luYWwgPT09IG51bGwpIHsKCQkJCQl0aGlzLmhvdXJNYXhPcmlnaW5hbCA9IG8uaG91ck1heDsKCQkJCQl0aGlzLm1pbnV0ZU1heE9yaWdpbmFsID0gby5taW51dGVNYXg7CgkJCQkJdGhpcy5zZWNvbmRNYXhPcmlnaW5hbCA9IG8uc2Vjb25kTWF4OwoJCQkJCXRoaXMubWlsbGlzZWNNYXhPcmlnaW5hbCA9IG8ubWlsbGlzZWNNYXg7CgkJCQl9CgoJCQkJaWYgKGRwX2luc3Quc2V0dGluZ3MudGltZU9ubHkgfHwgbWF4RGF0ZVRpbWVEYXRlLmdldFRpbWUoKSA9PSBkcF9kYXRlLmdldFRpbWUoKSkgewoJCQkJCXRoaXMuX2RlZmF1bHRzLmhvdXJNYXggPSBtYXhEYXRlVGltZS5nZXRIb3VycygpOwoJCQkJCWlmICh0aGlzLmhvdXIgPj0gdGhpcy5fZGVmYXVsdHMuaG91ck1heCkgewoJCQkJCQl0aGlzLmhvdXIgPSB0aGlzLl9kZWZhdWx0cy5ob3VyTWF4OwoJCQkJCQl0aGlzLl9kZWZhdWx0cy5taW51dGVNYXggPSBtYXhEYXRlVGltZS5nZXRNaW51dGVzKCk7CgkJCQkJCWlmICh0aGlzLm1pbnV0ZSA+PSB0aGlzLl9kZWZhdWx0cy5taW51dGVNYXgpIHsKCQkJCQkJCXRoaXMubWludXRlID0gdGhpcy5fZGVmYXVsdHMubWludXRlTWF4OwoJCQkJCQkJdGhpcy5fZGVmYXVsdHMuc2Vjb25kTWF4ID0gbWF4RGF0ZVRpbWUuZ2V0U2Vjb25kcygpOwoJCQkJCQl9IGVsc2UgaWYgKHRoaXMuc2Vjb25kID49IHRoaXMuX2RlZmF1bHRzLnNlY29uZE1heCkgewoJCQkJCQkJdGhpcy5zZWNvbmQgPSB0aGlzLl9kZWZhdWx0cy5zZWNvbmRNYXg7CgkJCQkJCQl0aGlzLl9kZWZhdWx0cy5taWxsaXNlY01heCA9IG1heERhdGVUaW1lLmdldE1pbGxpc2Vjb25kcygpOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJaWYgKHRoaXMubWlsbGlzZWMgPiB0aGlzLl9kZWZhdWx0cy5taWxsaXNlY01heCkgewoJCQkJCQkJCXRoaXMubWlsbGlzZWMgPSB0aGlzLl9kZWZhdWx0cy5taWxsaXNlY01heDsKCQkJCQkJCX0KCQkJCQkJCXRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWF4ID0gdGhpcy5taWxsaXNlY01heE9yaWdpbmFsOwoJCQkJCQl9CgkJCQkJfSBlbHNlIHsKCQkJCQkJdGhpcy5fZGVmYXVsdHMubWludXRlTWF4ID0gdGhpcy5taW51dGVNYXhPcmlnaW5hbDsKCQkJCQkJdGhpcy5fZGVmYXVsdHMuc2Vjb25kTWF4ID0gdGhpcy5zZWNvbmRNYXhPcmlnaW5hbDsKCQkJCQkJdGhpcy5fZGVmYXVsdHMubWlsbGlzZWNNYXggPSB0aGlzLm1pbGxpc2VjTWF4T3JpZ2luYWw7CgkJCQkJfQoJCQkJfSBlbHNlIHsKCQkJCQl0aGlzLl9kZWZhdWx0cy5ob3VyTWF4ID0gdGhpcy5ob3VyTWF4T3JpZ2luYWw7CgkJCQkJdGhpcy5fZGVmYXVsdHMubWludXRlTWF4ID0gdGhpcy5taW51dGVNYXhPcmlnaW5hbDsKCQkJCQl0aGlzLl9kZWZhdWx0cy5zZWNvbmRNYXggPSB0aGlzLnNlY29uZE1heE9yaWdpbmFsOwoJCQkJCXRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWF4ID0gdGhpcy5taWxsaXNlY01heE9yaWdpbmFsOwoJCQkJfQoJCQl9CgoJCQlpZiAoYWRqdXN0U2xpZGVycyAhPT0gdW5kZWZpbmVkICYmIGFkanVzdFNsaWRlcnMgPT09IHRydWUpIHsKCQkJCXZhciBob3VyTWF4ID0gcGFyc2VJbnQoKHRoaXMuX2RlZmF1bHRzLmhvdXJNYXggLSAoKHRoaXMuX2RlZmF1bHRzLmhvdXJNYXggLSB0aGlzLl9kZWZhdWx0cy5ob3VyTWluKSAlIHRoaXMuX2RlZmF1bHRzLnN0ZXBIb3VyKSksIDEwKSwKCQkJCQltaW5NYXggPSBwYXJzZUludCgodGhpcy5fZGVmYXVsdHMubWludXRlTWF4IC0gKCh0aGlzLl9kZWZhdWx0cy5taW51dGVNYXggLSB0aGlzLl9kZWZhdWx0cy5taW51dGVNaW4pICUgdGhpcy5fZGVmYXVsdHMuc3RlcE1pbnV0ZSkpLCAxMCksCgkJCQkJc2VjTWF4ID0gcGFyc2VJbnQoKHRoaXMuX2RlZmF1bHRzLnNlY29uZE1heCAtICgodGhpcy5fZGVmYXVsdHMuc2Vjb25kTWF4IC0gdGhpcy5fZGVmYXVsdHMuc2Vjb25kTWluKSAlIHRoaXMuX2RlZmF1bHRzLnN0ZXBTZWNvbmQpKSwgMTApLAoJCQkJCW1pbGxpc2VjTWF4ID0gcGFyc2VJbnQoKHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWF4IC0gKCh0aGlzLl9kZWZhdWx0cy5taWxsaXNlY01heCAtIHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWluKSAlIHRoaXMuX2RlZmF1bHRzLnN0ZXBNaWxsaXNlYykpLCAxMCk7CgoJCQkJaWYgKHRoaXMuaG91cl9zbGlkZXIpIHsKCQkJCQl0aGlzLmNvbnRyb2wub3B0aW9ucyh0aGlzLCB0aGlzLmhvdXJfc2xpZGVyLCAnaG91cicsIHsgbWluOiB0aGlzLl9kZWZhdWx0cy5ob3VyTWluLCBtYXg6IGhvdXJNYXggfSk7CgkJCQkJdGhpcy5jb250cm9sLnZhbHVlKHRoaXMsIHRoaXMuaG91cl9zbGlkZXIsICdob3VyJywgdGhpcy5ob3VyKTsKCQkJCX0KCQkJCWlmICh0aGlzLm1pbnV0ZV9zbGlkZXIpIHsKCQkJCQl0aGlzLmNvbnRyb2wub3B0aW9ucyh0aGlzLCB0aGlzLm1pbnV0ZV9zbGlkZXIsICdtaW51dGUnLCB7IG1pbjogdGhpcy5fZGVmYXVsdHMubWludXRlTWluLCBtYXg6IG1pbk1heCB9KTsKCQkJCQl0aGlzLmNvbnRyb2wudmFsdWUodGhpcywgdGhpcy5taW51dGVfc2xpZGVyLCAnbWludXRlJywgdGhpcy5taW51dGUpOwoJCQkJfQoJCQkJaWYgKHRoaXMuc2Vjb25kX3NsaWRlcikgewoJCQkJCXRoaXMuY29udHJvbC5vcHRpb25zKHRoaXMsIHRoaXMuc2Vjb25kX3NsaWRlciwgJ3NlY29uZCcsIHsgbWluOiB0aGlzLl9kZWZhdWx0cy5zZWNvbmRNaW4sIG1heDogc2VjTWF4IH0pOwoJCQkJCXRoaXMuY29udHJvbC52YWx1ZSh0aGlzLCB0aGlzLnNlY29uZF9zbGlkZXIsICdzZWNvbmQnLCB0aGlzLnNlY29uZCk7CgkJCQl9CgkJCQlpZiAodGhpcy5taWxsaXNlY19zbGlkZXIpIHsKCQkJCQl0aGlzLmNvbnRyb2wub3B0aW9ucyh0aGlzLCB0aGlzLm1pbGxpc2VjX3NsaWRlciwgJ21pbGxpc2VjJywgeyBtaW46IHRoaXMuX2RlZmF1bHRzLm1pbGxpc2VjTWluLCBtYXg6IG1pbGxpc2VjTWF4IH0pOwoJCQkJCXRoaXMuY29udHJvbC52YWx1ZSh0aGlzLCB0aGlzLm1pbGxpc2VjX3NsaWRlciwgJ21pbGxpc2VjJywgdGhpcy5taWxsaXNlYyk7CgkJCQl9CgkJCX0KCgkJfSwKCgkJLyoKCQkqIHdoZW4gYSBzbGlkZXIgbW92ZXMsIHNldCB0aGUgaW50ZXJuYWwgdGltZS4uLgoJCSogb24gdGltZSBjaGFuZ2UgaXMgYWxzbyBjYWxsZWQgd2hlbiB0aGUgdGltZSBpcyB1cGRhdGVkIGluIHRoZSB0ZXh0IGZpZWxkCgkJKi8KCQlfb25UaW1lQ2hhbmdlOiBmdW5jdGlvbigpIHsKCQkJdmFyIGhvdXIgPSAodGhpcy5ob3VyX3NsaWRlcikgPyB0aGlzLmNvbnRyb2wudmFsdWUodGhpcywgdGhpcy5ob3VyX3NsaWRlciwgJ2hvdXInKSA6IGZhbHNlLAoJCQkJbWludXRlID0gKHRoaXMubWludXRlX3NsaWRlcikgPyB0aGlzLmNvbnRyb2wudmFsdWUodGhpcywgdGhpcy5taW51dGVfc2xpZGVyLCAnbWludXRlJykgOiBmYWxzZSwKCQkJCXNlY29uZCA9ICh0aGlzLnNlY29uZF9zbGlkZXIpID8gdGhpcy5jb250cm9sLnZhbHVlKHRoaXMsIHRoaXMuc2Vjb25kX3NsaWRlciwgJ3NlY29uZCcpIDogZmFsc2UsCgkJCQltaWxsaXNlYyA9ICh0aGlzLm1pbGxpc2VjX3NsaWRlcikgPyB0aGlzLmNvbnRyb2wudmFsdWUodGhpcywgdGhpcy5taWxsaXNlY19zbGlkZXIsICdtaWxsaXNlYycpIDogZmFsc2UsCgkJCQl0aW1lem9uZSA9ICh0aGlzLnRpbWV6b25lX3NlbGVjdCkgPyB0aGlzLnRpbWV6b25lX3NlbGVjdC52YWwoKSA6IGZhbHNlLAoJCQkJbyA9IHRoaXMuX2RlZmF1bHRzLAoJCQkJcGlja2VyVGltZUZvcm1hdCA9IG8ucGlja2VyVGltZUZvcm1hdCB8fCBvLnRpbWVGb3JtYXQsCgkJCQlwaWNrZXJUaW1lU3VmZml4ID0gby5waWNrZXJUaW1lU3VmZml4IHx8IG8udGltZVN1ZmZpeDsKCgkJCWlmICh0eXBlb2YoaG91cikgPT0gJ29iamVjdCcpIHsKCQkJCWhvdXIgPSBmYWxzZTsKCQkJfQoJCQlpZiAodHlwZW9mKG1pbnV0ZSkgPT0gJ29iamVjdCcpIHsKCQkJCW1pbnV0ZSA9IGZhbHNlOwoJCQl9CgkJCWlmICh0eXBlb2Yoc2Vjb25kKSA9PSAnb2JqZWN0JykgewoJCQkJc2Vjb25kID0gZmFsc2U7CgkJCX0KCQkJaWYgKHR5cGVvZihtaWxsaXNlYykgPT0gJ29iamVjdCcpIHsKCQkJCW1pbGxpc2VjID0gZmFsc2U7CgkJCX0KCQkJaWYgKHR5cGVvZih0aW1lem9uZSkgPT0gJ29iamVjdCcpIHsKCQkJCXRpbWV6b25lID0gZmFsc2U7CgkJCX0KCgkJCWlmIChob3VyICE9PSBmYWxzZSkgewoJCQkJaG91ciA9IHBhcnNlSW50KGhvdXIsIDEwKTsKCQkJfQoJCQlpZiAobWludXRlICE9PSBmYWxzZSkgewoJCQkJbWludXRlID0gcGFyc2VJbnQobWludXRlLCAxMCk7CgkJCX0KCQkJaWYgKHNlY29uZCAhPT0gZmFsc2UpIHsKCQkJCXNlY29uZCA9IHBhcnNlSW50KHNlY29uZCwgMTApOwoJCQl9CgkJCWlmIChtaWxsaXNlYyAhPT0gZmFsc2UpIHsKCQkJCW1pbGxpc2VjID0gcGFyc2VJbnQobWlsbGlzZWMsIDEwKTsKCQkJfQoKCQkJdmFyIGFtcG0gPSBvW2hvdXIgPCAxMiA/ICdhbU5hbWVzJyA6ICdwbU5hbWVzJ11bMF07CgoJCQkvLyBJZiB0aGUgdXBkYXRlIHdhcyBkb25lIGluIHRoZSBpbnB1dCBmaWVsZCwgdGhlIGlucHV0IGZpZWxkIHNob3VsZCBub3QgYmUgdXBkYXRlZC4KCQkJLy8gSWYgdGhlIHVwZGF0ZSB3YXMgZG9uZSB1c2luZyB0aGUgc2xpZGVycywgdXBkYXRlIHRoZSBpbnB1dCBmaWVsZC4KCQkJdmFyIGhhc0NoYW5nZWQgPSAoaG91ciAhPSB0aGlzLmhvdXIgfHwgbWludXRlICE9IHRoaXMubWludXRlIHx8IHNlY29uZCAhPSB0aGlzLnNlY29uZCB8fCBtaWxsaXNlYyAhPSB0aGlzLm1pbGxpc2VjIAoJCQkJCQkJCXx8ICh0aGlzLmFtcG0ubGVuZ3RoID4gMCAmJiAoaG91ciA8IDEyKSAhPSAoJC5pbkFycmF5KHRoaXMuYW1wbS50b1VwcGVyQ2FzZSgpLCB0aGlzLmFtTmFtZXMpICE9PSAtMSkpIAoJCQkJCQkJCXx8ICgodGhpcy50aW1lem9uZSA9PT0gbnVsbCAmJiB0aW1lem9uZSAhPSB0aGlzLmRlZmF1bHRUaW1lem9uZSkgfHwgKHRoaXMudGltZXpvbmUgIT09IG51bGwgJiYgdGltZXpvbmUgIT0gdGhpcy50aW1lem9uZSkpKTsKCgkJCWlmIChoYXNDaGFuZ2VkKSB7CgoJCQkJaWYgKGhvdXIgIT09IGZhbHNlKSB7CgkJCQkJdGhpcy5ob3VyID0gaG91cjsKCQkJCX0KCQkJCWlmIChtaW51dGUgIT09IGZhbHNlKSB7CgkJCQkJdGhpcy5taW51dGUgPSBtaW51dGU7CgkJCQl9CgkJCQlpZiAoc2Vjb25kICE9PSBmYWxzZSkgewoJCQkJCXRoaXMuc2Vjb25kID0gc2Vjb25kOwoJCQkJfQoJCQkJaWYgKG1pbGxpc2VjICE9PSBmYWxzZSkgewoJCQkJCXRoaXMubWlsbGlzZWMgPSBtaWxsaXNlYzsKCQkJCX0KCQkJCWlmICh0aW1lem9uZSAhPT0gZmFsc2UpIHsKCQkJCQl0aGlzLnRpbWV6b25lID0gdGltZXpvbmU7CgkJCQl9CgoJCQkJaWYgKCF0aGlzLmluc3QpIHsKCQkJCQl0aGlzLmluc3QgPSAkLmRhdGVwaWNrZXIuX2dldEluc3QodGhpcy4kaW5wdXRbMF0pOwoJCQkJfQoKCQkJCXRoaXMuX2xpbWl0TWluTWF4RGF0ZVRpbWUodGhpcy5pbnN0LCB0cnVlKTsKCQkJfQoJCQlpZiAodXNlQW1wbShvLnRpbWVGb3JtYXQpKSB7CgkJCQl0aGlzLmFtcG0gPSBhbXBtOwoJCQl9CgoJCQkvLyBVcGRhdGVzIHRoZSB0aW1lIHdpdGhpbiB0aGUgdGltZXBpY2tlcgoJCQl0aGlzLmZvcm1hdHRlZFRpbWUgPSAkLmRhdGVwaWNrZXIuZm9ybWF0VGltZShvLnRpbWVGb3JtYXQsIHRoaXMsIG8pOwoJCQlpZiAodGhpcy4kdGltZU9iaikgewoJCQkJaWYocGlja2VyVGltZUZvcm1hdCA9PT0gby50aW1lRm9ybWF0KXsKCQkJCQl0aGlzLiR0aW1lT2JqLnRleHQodGhpcy5mb3JtYXR0ZWRUaW1lICsgcGlja2VyVGltZVN1ZmZpeCk7CgkJCQl9CgkJCQllbHNlewoJCQkJCXRoaXMuJHRpbWVPYmoudGV4dCgkLmRhdGVwaWNrZXIuZm9ybWF0VGltZShwaWNrZXJUaW1lRm9ybWF0LCB0aGlzLCBvKSArIHBpY2tlclRpbWVTdWZmaXgpOwoJCQkJfQoJCQl9CgoJCQl0aGlzLnRpbWVEZWZpbmVkID0gdHJ1ZTsKCQkJaWYgKGhhc0NoYW5nZWQpIHsKCQkJCXRoaXMuX3VwZGF0ZURhdGVUaW1lKCk7CgkJCX0KCQl9LAoKCQkvKgoJCSogY2FsbCBjdXN0b20gb25TZWxlY3QuCgkJKiBiaW5kIHRvIHNsaWRlcnMgc2xpZGVzdG9wLCBhbmQgZ3JpZCBjbGljay4KCQkqLwoJCV9vblNlbGVjdEhhbmRsZXI6IGZ1bmN0aW9uKCkgewoJCQl2YXIgb25TZWxlY3QgPSB0aGlzLl9kZWZhdWx0cy5vblNlbGVjdCB8fCB0aGlzLmluc3Quc2V0dGluZ3Mub25TZWxlY3Q7CgkJCXZhciBpbnB1dEVsID0gdGhpcy4kaW5wdXQgPyB0aGlzLiRpbnB1dFswXSA6IG51bGw7CgkJCWlmIChvblNlbGVjdCAmJiBpbnB1dEVsKSB7CgkJCQlvblNlbGVjdC5hcHBseShpbnB1dEVsLCBbdGhpcy5mb3JtYXR0ZWREYXRlVGltZSwgdGhpc10pOwoJCQl9CgkJfSwKCgkJLyoKCQkqIHVwZGF0ZSBvdXIgaW5wdXQgd2l0aCB0aGUgbmV3IGRhdGUgdGltZS4uCgkJKi8KCQlfdXBkYXRlRGF0ZVRpbWU6IGZ1bmN0aW9uKGRwX2luc3QpIHsKCQkJZHBfaW5zdCA9IHRoaXMuaW5zdCB8fCBkcF9pbnN0OwoJCQl2YXIgZHQgPSAkLmRhdGVwaWNrZXIuX2RheWxpZ2h0U2F2aW5nQWRqdXN0KG5ldyBEYXRlKGRwX2luc3Quc2VsZWN0ZWRZZWFyLCBkcF9pbnN0LnNlbGVjdGVkTW9udGgsIGRwX2luc3Quc2VsZWN0ZWREYXkpKSwKCQkJCWRhdGVGbXQgPSAkLmRhdGVwaWNrZXIuX2dldChkcF9pbnN0LCAnZGF0ZUZvcm1hdCcpLAoJCQkJZm9ybWF0Q2ZnID0gJC5kYXRlcGlja2VyLl9nZXRGb3JtYXRDb25maWcoZHBfaW5zdCksCgkJCQl0aW1lQXZhaWxhYmxlID0gZHQgIT09IG51bGwgJiYgdGhpcy50aW1lRGVmaW5lZDsKCQkJdGhpcy5mb3JtYXR0ZWREYXRlID0gJC5kYXRlcGlja2VyLmZvcm1hdERhdGUoZGF0ZUZtdCwgKGR0ID09PSBudWxsID8gbmV3IERhdGUoKSA6IGR0KSwgZm9ybWF0Q2ZnKTsKCQkJdmFyIGZvcm1hdHRlZERhdGVUaW1lID0gdGhpcy5mb3JtYXR0ZWREYXRlOwoKCQkJLyoKCQkJKiByZW1vdmUgZm9sbG93aW5nIGxpbmVzIHRvIGZvcmNlIGV2ZXJ5IGNoYW5nZXMgaW4gZGF0ZSBwaWNrZXIgdG8gY2hhbmdlIHRoZSBpbnB1dCB2YWx1ZQoJCQkqIEJ1ZyBkZXNjcmlwdGlvbnM6IHdoZW4gYW4gaW5wdXQgZmllbGQgaGFzIGEgZGVmYXVsdCB2YWx1ZSwgYW5kIGNsaWNrIG9uIHRoZSBmaWVsZCB0byBwb3AgdXAgdGhlIGRhdGUgcGlja2VyLiAKCQkJKiBJZiB0aGUgdXNlciBtYW51YWxseSBlbXB0eSB0aGUgdmFsdWUgaW4gdGhlIGlucHV0IGZpZWxkLCB0aGUgZGF0ZSBwaWNrZXIgd2lsbCBuZXZlciBjaGFuZ2Ugc2VsZWN0ZWQgdmFsdWUuCgkJCSovCgkJCS8vaWYgKGRwX2luc3QubGFzdFZhbCAhPT0gdW5kZWZpbmVkICYmIChkcF9pbnN0Lmxhc3RWYWwubGVuZ3RoID4gMCAmJiB0aGlzLiRpbnB1dC52YWwoKS5sZW5ndGggPT09IDApKSB7CgkJCS8vCXJldHVybjsKCQkJLy99CgoJCQlpZiAodGhpcy5fZGVmYXVsdHMudGltZU9ubHkgPT09IHRydWUpIHsKCQkJCWZvcm1hdHRlZERhdGVUaW1lID0gdGhpcy5mb3JtYXR0ZWRUaW1lOwoJCQl9IGVsc2UgaWYgKHRoaXMuX2RlZmF1bHRzLnRpbWVPbmx5ICE9PSB0cnVlICYmICh0aGlzLl9kZWZhdWx0cy5hbHdheXNTZXRUaW1lIHx8IHRpbWVBdmFpbGFibGUpKSB7CgkJCQlmb3JtYXR0ZWREYXRlVGltZSArPSB0aGlzLl9kZWZhdWx0cy5zZXBhcmF0b3IgKyB0aGlzLmZvcm1hdHRlZFRpbWUgKyB0aGlzLl9kZWZhdWx0cy50aW1lU3VmZml4OwoJCQl9CgoJCQl0aGlzLmZvcm1hdHRlZERhdGVUaW1lID0gZm9ybWF0dGVkRGF0ZVRpbWU7CgoJCQlpZiAoIXRoaXMuX2RlZmF1bHRzLnNob3dUaW1lcGlja2VyKSB7CgkJCQl0aGlzLiRpbnB1dC52YWwodGhpcy5mb3JtYXR0ZWREYXRlKTsKCQkJfSBlbHNlIGlmICh0aGlzLiRhbHRJbnB1dCAmJiB0aGlzLl9kZWZhdWx0cy5hbHRGaWVsZFRpbWVPbmx5ID09PSB0cnVlKSB7CgkJCQl0aGlzLiRhbHRJbnB1dC52YWwodGhpcy5mb3JtYXR0ZWRUaW1lKTsKCQkJCXRoaXMuJGlucHV0LnZhbCh0aGlzLmZvcm1hdHRlZERhdGUpOwoJCQl9IGVsc2UgaWYgKHRoaXMuJGFsdElucHV0KSB7CgkJCQl0aGlzLiRpbnB1dC52YWwoZm9ybWF0dGVkRGF0ZVRpbWUpOwoJCQkJdmFyIGFsdEZvcm1hdHRlZERhdGVUaW1lID0gJycsCgkJCQkJYWx0U2VwYXJhdG9yID0gdGhpcy5fZGVmYXVsdHMuYWx0U2VwYXJhdG9yID8gdGhpcy5fZGVmYXVsdHMuYWx0U2VwYXJhdG9yIDogdGhpcy5fZGVmYXVsdHMuc2VwYXJhdG9yLAoJCQkJCWFsdFRpbWVTdWZmaXggPSB0aGlzLl9kZWZhdWx0cy5hbHRUaW1lU3VmZml4ID8gdGhpcy5fZGVmYXVsdHMuYWx0VGltZVN1ZmZpeCA6IHRoaXMuX2RlZmF1bHRzLnRpbWVTdWZmaXg7CgoJCQkJaWYgKHRoaXMuX2RlZmF1bHRzLmFsdEZvcm1hdCkgYWx0Rm9ybWF0dGVkRGF0ZVRpbWUgPSAkLmRhdGVwaWNrZXIuZm9ybWF0RGF0ZSh0aGlzLl9kZWZhdWx0cy5hbHRGb3JtYXQsIChkdCA9PT0gbnVsbCA/IG5ldyBEYXRlKCkgOiBkdCksIGZvcm1hdENmZyk7CgkJCQllbHNlIGFsdEZvcm1hdHRlZERhdGVUaW1lID0gdGhpcy5mb3JtYXR0ZWREYXRlOwoJCQkJaWYgKGFsdEZvcm1hdHRlZERhdGVUaW1lKSBhbHRGb3JtYXR0ZWREYXRlVGltZSArPSBhbHRTZXBhcmF0b3I7CgkJCQlpZiAodGhpcy5fZGVmYXVsdHMuYWx0VGltZUZvcm1hdCkgYWx0Rm9ybWF0dGVkRGF0ZVRpbWUgKz0gJC5kYXRlcGlja2VyLmZvcm1hdFRpbWUodGhpcy5fZGVmYXVsdHMuYWx0VGltZUZvcm1hdCwgdGhpcywgdGhpcy5fZGVmYXVsdHMpICsgYWx0VGltZVN1ZmZpeDsKCQkJCWVsc2UgYWx0Rm9ybWF0dGVkRGF0ZVRpbWUgKz0gdGhpcy5mb3JtYXR0ZWRUaW1lICsgYWx0VGltZVN1ZmZpeDsKCQkJCXRoaXMuJGFsdElucHV0LnZhbChhbHRGb3JtYXR0ZWREYXRlVGltZSk7CgkJCX0gZWxzZSB7CgkJCQl0aGlzLiRpbnB1dC52YWwoZm9ybWF0dGVkRGF0ZVRpbWUpOwoJCQl9CgoJCQl0aGlzLiRpbnB1dC50cmlnZ2VyKCJjaGFuZ2UiKTsKCQl9LAoKCQlfb25Gb2N1czogZnVuY3Rpb24oKSB7CgkJCWlmICghdGhpcy4kaW5wdXQudmFsKCkgJiYgdGhpcy5fZGVmYXVsdHMuZGVmYXVsdFZhbHVlKSB7CgkJCQl0aGlzLiRpbnB1dC52YWwodGhpcy5fZGVmYXVsdHMuZGVmYXVsdFZhbHVlKTsKCQkJCXZhciBpbnN0ID0gJC5kYXRlcGlja2VyLl9nZXRJbnN0KHRoaXMuJGlucHV0LmdldCgwKSksCgkJCQkJdHBfaW5zdCA9ICQuZGF0ZXBpY2tlci5fZ2V0KGluc3QsICd0aW1lcGlja2VyJyk7CgkJCQlpZiAodHBfaW5zdCkgewoJCQkJCWlmICh0cF9pbnN0Ll9kZWZhdWx0cy50aW1lT25seSAmJiAoaW5zdC5pbnB1dC52YWwoKSAhPSBpbnN0Lmxhc3RWYWwpKSB7CgkJCQkJCXRyeSB7CgkJCQkJCQkkLmRhdGVwaWNrZXIuX3VwZGF0ZURhdGVwaWNrZXIoaW5zdCk7CgkJCQkJCX0gY2F0Y2ggKGVycikgewoJCQkJCQkJJC5kYXRlcGlja2VyLmxvZyhlcnIpOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQl9CgkJfSwKCgkJLyoKCQkqIFNtYWxsIGFic3RyYWN0aW9uIHRvIGNvbnRyb2wgdHlwZXMKCQkqIFdlIGNhbiBhZGQgbW9yZSwganVzdCBiZSBzdXJlIHRvIGZvbGxvdyB0aGUgcGF0dGVybjogY3JlYXRlLCBvcHRpb25zLCB2YWx1ZQoJCSovCgkJX2NvbnRyb2xzOiB7CgkJCS8vIHNsaWRlciBtZXRob2RzCgkJCXNsaWRlcjogewoJCQkJY3JlYXRlOiBmdW5jdGlvbih0cF9pbnN0LCBvYmosIHVuaXQsIHZhbCwgbWluLCBtYXgsIHN0ZXApewoJCQkJCXZhciBydGwgPSB0cF9pbnN0Ll9kZWZhdWx0cy5pc1JUTDsgLy8gaWYgcnRsIGdvIC02MC0+MCBpbnN0ZWFkIG9mIDAtPjYwCgkJCQkJcmV0dXJuIG9iai5wcm9wKCdzbGlkZScsIG51bGwpLnNsaWRlcih7CgkJCQkJCW9yaWVudGF0aW9uOiAiaG9yaXpvbnRhbCIsCgkJCQkJCXZhbHVlOiBydGw/IHZhbCotMSA6IHZhbCwKCQkJCQkJbWluOiBydGw/IG1heCotMSA6IG1pbiwKCQkJCQkJbWF4OiBydGw/IG1pbiotMSA6IG1heCwKCQkJCQkJc3RlcDogc3RlcCwKCQkJCQkJc2xpZGU6IGZ1bmN0aW9uKGV2ZW50LCB1aSkgewoJCQkJCQkJdHBfaW5zdC5jb250cm9sLnZhbHVlKHRwX2luc3QsICQodGhpcyksIHVuaXQsIHJ0bD8gdWkudmFsdWUqLTE6dWkudmFsdWUpOwoJCQkJCQkJdHBfaW5zdC5fb25UaW1lQ2hhbmdlKCk7CgkJCQkJCX0sCgkJCQkJCXN0b3A6IGZ1bmN0aW9uKGV2ZW50LCB1aSkgewoJCQkJCQkJdHBfaW5zdC5fb25TZWxlY3RIYW5kbGVyKCk7CgkJCQkJCX0KCQkJCQl9KTsJCgkJCQl9LAoJCQkJb3B0aW9uczogZnVuY3Rpb24odHBfaW5zdCwgb2JqLCB1bml0LCBvcHRzLCB2YWwpewoJCQkJCWlmKHRwX2luc3QuX2RlZmF1bHRzLmlzUlRMKXsKCQkJCQkJaWYodHlwZW9mKG9wdHMpID09ICdzdHJpbmcnKXsKCQkJCQkJCWlmKG9wdHMgPT0gJ21pbicgfHwgb3B0cyA9PSAnbWF4Jyl7CgkJCQkJCQkJaWYodmFsICE9PSB1bmRlZmluZWQpCgkJCQkJCQkJCXJldHVybiBvYmouc2xpZGVyKG9wdHMsIHZhbCotMSk7CgkJCQkJCQkJcmV0dXJuIE1hdGguYWJzKG9iai5zbGlkZXIob3B0cykpOwoJCQkJCQkJfQoJCQkJCQkJcmV0dXJuIG9iai5zbGlkZXIob3B0cyk7CgkJCQkJCX0KCQkJCQkJdmFyIG1pbiA9IG9wdHMubWluLCAKCQkJCQkJCW1heCA9IG9wdHMubWF4OwoJCQkJCQlvcHRzLm1pbiA9IG9wdHMubWF4ID0gbnVsbDsKCQkJCQkJaWYobWluICE9PSB1bmRlZmluZWQpCgkJCQkJCQlvcHRzLm1heCA9IG1pbiAqIC0xOwoJCQkJCQlpZihtYXggIT09IHVuZGVmaW5lZCkKCQkJCQkJCW9wdHMubWluID0gbWF4ICogLTE7CgkJCQkJCXJldHVybiBvYmouc2xpZGVyKG9wdHMpOwoJCQkJCX0KCQkJCQlpZih0eXBlb2Yob3B0cykgPT0gJ3N0cmluZycgJiYgdmFsICE9PSB1bmRlZmluZWQpCgkJCQkJCQlyZXR1cm4gb2JqLnNsaWRlcihvcHRzLCB2YWwpOwoJCQkJCXJldHVybiBvYmouc2xpZGVyKG9wdHMpOwoJCQkJfSwKCQkJCXZhbHVlOiBmdW5jdGlvbih0cF9pbnN0LCBvYmosIHVuaXQsIHZhbCl7CgkJCQkJaWYodHBfaW5zdC5fZGVmYXVsdHMuaXNSVEwpewoJCQkJCQlpZih2YWwgIT09IHVuZGVmaW5lZCkKCQkJCQkJCXJldHVybiBvYmouc2xpZGVyKCd2YWx1ZScsIHZhbCotMSk7CgkJCQkJCXJldHVybiBNYXRoLmFicyhvYmouc2xpZGVyKCd2YWx1ZScpKTsKCQkJCQl9CgkJCQkJaWYodmFsICE9PSB1bmRlZmluZWQpCgkJCQkJCXJldHVybiBvYmouc2xpZGVyKCd2YWx1ZScsIHZhbCk7CgkJCQkJcmV0dXJuIG9iai5zbGlkZXIoJ3ZhbHVlJyk7CgkJCQl9CgkJCX0sCgkJCS8vIHNlbGVjdCBtZXRob2RzCgkJCXNlbGVjdDogewoJCQkJY3JlYXRlOiBmdW5jdGlvbih0cF9pbnN0LCBvYmosIHVuaXQsIHZhbCwgbWluLCBtYXgsIHN0ZXApewoJCQkJCXZhciBzZWwgPSAnPHNlbGVjdCBjbGFzcz0idWktdGltZXBpY2tlci1zZWxlY3QiIGRhdGEtdW5pdD0iJysgdW5pdCArJyIgZGF0YS1taW49IicrIG1pbiArJyIgZGF0YS1tYXg9IicrIG1heCArJyIgZGF0YS1zdGVwPSInKyBzdGVwICsnIj4nLAoJCQkJCQl1bCA9IHRwX2luc3QuX2RlZmF1bHRzLnRpbWVGb3JtYXQuaW5kZXhPZigndCcpICE9PSAtMT8gJ3RvTG93ZXJDYXNlJzondG9VcHBlckNhc2UnLAoJCQkJCQltID0gMDsKCgkJCQkJZm9yKHZhciBpPW1pbjsgaTw9bWF4OyBpKz1zdGVwKXsJCQkJCQkKCQkJCQkJc2VsICs9ICc8b3B0aW9uIHZhbHVlPSInKyBpICsnIicrIChpPT12YWw/ICcgc2VsZWN0ZWQnOicnKSArJz4nOwoJCQkJCQlpZih1bml0ID09ICdob3VyJyAmJiB1c2VBbXBtKHRwX2luc3QuX2RlZmF1bHRzLnBpY2tlclRpbWVGb3JtYXQgfHwgdHBfaW5zdC5fZGVmYXVsdHMudGltZUZvcm1hdCkpCgkJCQkJCQlzZWwgKz0gJC5kYXRlcGlja2VyLmZvcm1hdFRpbWUoImhoIFRUIiwge2hvdXI6aX0sIHRwX2luc3QuX2RlZmF1bHRzKTsKCQkJCQkJZWxzZSBpZih1bml0ID09ICdtaWxsaXNlYycgfHwgaSA+PSAxMCkgc2VsICs9IGk7CgkJCQkJCWVsc2Ugc2VsICs9ICcwJysgaS50b1N0cmluZygpOwoJCQkJCQlzZWwgKz0gJzwvb3B0aW9uPic7CgkJCQkJfQoJCQkJCXNlbCArPSAnPC9zZWxlY3Q+JzsKCgkJCQkJb2JqLmNoaWxkcmVuKCdzZWxlY3QnKS5yZW1vdmUoKTsKCgkJCQkJJChzZWwpLmFwcGVuZFRvKG9iaikuY2hhbmdlKGZ1bmN0aW9uKGUpewoJCQkJCQl0cF9pbnN0Ll9vblRpbWVDaGFuZ2UoKTsKCQkJCQkJdHBfaW5zdC5fb25TZWxlY3RIYW5kbGVyKCk7CgkJCQkJfSk7CgoJCQkJCXJldHVybiBvYmo7CgkJCQl9LAoJCQkJb3B0aW9uczogZnVuY3Rpb24odHBfaW5zdCwgb2JqLCB1bml0LCBvcHRzLCB2YWwpewoJCQkJCXZhciBvID0ge30sCgkJCQkJCSR0ID0gb2JqLmNoaWxkcmVuKCdzZWxlY3QnKTsKCQkJCQlpZih0eXBlb2Yob3B0cykgPT0gJ3N0cmluZycpewoJCQkJCQlpZih2YWwgPT09IHVuZGVmaW5lZCkKCQkJCQkJCXJldHVybiAkdC5kYXRhKG9wdHMpOwoJCQkJCQlvW29wdHNdID0gdmFsOwkKCQkJCQl9CgkJCQkJZWxzZSBvID0gb3B0czsKCQkJCQlyZXR1cm4gdHBfaW5zdC5jb250cm9sLmNyZWF0ZSh0cF9pbnN0LCBvYmosICR0LmRhdGEoJ3VuaXQnKSwgJHQudmFsKCksIG8ubWluIHx8ICR0LmRhdGEoJ21pbicpLCBvLm1heCB8fCAkdC5kYXRhKCdtYXgnKSwgby5zdGVwIHx8ICR0LmRhdGEoJ3N0ZXAnKSk7CgkJCQl9LAoJCQkJdmFsdWU6IGZ1bmN0aW9uKHRwX2luc3QsIG9iaiwgdW5pdCwgdmFsKXsKCQkJCQl2YXIgJHQgPSBvYmouY2hpbGRyZW4oJ3NlbGVjdCcpOwoJCQkJCWlmKHZhbCAhPT0gdW5kZWZpbmVkKQoJCQkJCQlyZXR1cm4gJHQudmFsKHZhbCk7CgkJCQkJcmV0dXJuICR0LnZhbCgpOwoJCQkJfQoJCQl9CgkJfSAvLyBlbmQgX2NvbnRyb2xzCgoJfSk7CgoJJC5mbi5leHRlbmQoewoJCS8qCgkJKiBzaG9ydGhhbmQganVzdCB0byB1c2UgdGltZXBpY2tlci4uCgkJKi8KCQl0aW1lcGlja2VyOiBmdW5jdGlvbihvKSB7CgkJCW8gPSBvIHx8IHt9OwoJCQl2YXIgdG1wX2FyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpOwoKCQkJaWYgKHR5cGVvZiBvID09ICdvYmplY3QnKSB7CgkJCQl0bXBfYXJnc1swXSA9ICQuZXh0ZW5kKG8sIHsKCQkJCQl0aW1lT25seTogdHJ1ZQoJCQkJfSk7CgkJCX0KCgkJCXJldHVybiAkKHRoaXMpLmVhY2goZnVuY3Rpb24oKSB7CgkJCQkkLmZuLmRhdGV0aW1lcGlja2VyLmFwcGx5KCQodGhpcyksIHRtcF9hcmdzKTsKCQkJfSk7CgkJfSwKCgkJLyoKCQkqIGV4dGVuZCB0aW1lcGlja2VyIHRvIGRhdGVwaWNrZXIKCQkqLwoJCWRhdGV0aW1lcGlja2VyOiBmdW5jdGlvbihvKSB7CgkJCW8gPSBvIHx8IHt9OwoJCQl2YXIgdG1wX2FyZ3MgPSBhcmd1bWVudHM7CgoJCQlpZiAodHlwZW9mKG8pID09ICdzdHJpbmcnKSB7CgkJCQlpZiAobyA9PSAnZ2V0RGF0ZScpIHsKCQkJCQlyZXR1cm4gJC5mbi5kYXRlcGlja2VyLmFwcGx5KCQodGhpc1swXSksIHRtcF9hcmdzKTsKCQkJCX0gZWxzZSB7CgkJCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKCQkJCQkJdmFyICR0ID0gJCh0aGlzKTsKCQkJCQkJJHQuZGF0ZXBpY2tlci5hcHBseSgkdCwgdG1wX2FyZ3MpOwoJCQkJCX0pOwoJCQkJfQoJCQl9IGVsc2UgewoJCQkJcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpIHsKCQkJCQl2YXIgJHQgPSAkKHRoaXMpOwoJCQkJCSR0LmRhdGVwaWNrZXIoJC50aW1lcGlja2VyLl9uZXdJbnN0KCR0LCBvKS5fZGVmYXVsdHMpOwoJCQkJfSk7CgkJCX0KCQl9Cgl9KTsKCgkvKgoJKiBQdWJsaWMgVXRpbGl0eSB0byBwYXJzZSBkYXRlIGFuZCB0aW1lCgkqLwoJJC5kYXRlcGlja2VyLnBhcnNlRGF0ZVRpbWUgPSBmdW5jdGlvbihkYXRlRm9ybWF0LCB0aW1lRm9ybWF0LCBkYXRlVGltZVN0cmluZywgZGF0ZVNldHRpbmdzLCB0aW1lU2V0dGluZ3MpIHsKCQl2YXIgcGFyc2VSZXMgPSBwYXJzZURhdGVUaW1lSW50ZXJuYWwoZGF0ZUZvcm1hdCwgdGltZUZvcm1hdCwgZGF0ZVRpbWVTdHJpbmcsIGRhdGVTZXR0aW5ncywgdGltZVNldHRpbmdzKTsKCQlpZiAocGFyc2VSZXMudGltZU9iaikgewoJCQl2YXIgdCA9IHBhcnNlUmVzLnRpbWVPYmo7CgkJCXBhcnNlUmVzLmRhdGUuc2V0SG91cnModC5ob3VyLCB0Lm1pbnV0ZSwgdC5zZWNvbmQsIHQubWlsbGlzZWMpOwoJCX0KCgkJcmV0dXJuIHBhcnNlUmVzLmRhdGU7Cgl9OwoKCS8qCgkqIFB1YmxpYyB1dGlsaXR5IHRvIHBhcnNlIHRpbWUKCSovCgkkLmRhdGVwaWNrZXIucGFyc2VUaW1lID0gZnVuY3Rpb24odGltZUZvcm1hdCwgdGltZVN0cmluZywgb3B0aW9ucykgewkJCgkJdmFyIG8gPSBleHRlbmRSZW1vdmUoZXh0ZW5kUmVtb3ZlKHt9LCAkLnRpbWVwaWNrZXIuX2RlZmF1bHRzKSwgb3B0aW9ucyB8fCB7fSk7CgoJCS8vIFN0cmljdCBwYXJzZSByZXF1aXJlcyB0aGUgdGltZVN0cmluZyB0byBtYXRjaCB0aGUgdGltZUZvcm1hdCBleGFjdGx5CgkJdmFyIHN0cmljdFBhcnNlID0gZnVuY3Rpb24oZiwgcywgbyl7CgoJCQkvLyBwYXR0ZXJuIGZvciBzdGFuZGFyZCBhbmQgbG9jYWxpemVkIEFNL1BNIG1hcmtlcnMKCQkJdmFyIGdldFBhdHRlcm5BbXBtID0gZnVuY3Rpb24oYW1OYW1lcywgcG1OYW1lcykgewoJCQkJdmFyIG1hcmtlcnMgPSBbXTsKCQkJCWlmIChhbU5hbWVzKSB7CgkJCQkJJC5tZXJnZShtYXJrZXJzLCBhbU5hbWVzKTsKCQkJCX0KCQkJCWlmIChwbU5hbWVzKSB7CgkJCQkJJC5tZXJnZShtYXJrZXJzLCBwbU5hbWVzKTsKCQkJCX0KCQkJCW1hcmtlcnMgPSAkLm1hcChtYXJrZXJzLCBmdW5jdGlvbih2YWwpIHsKCQkJCQlyZXR1cm4gdmFsLnJlcGxhY2UoL1suKis/fCgpXFtcXXt9XFxdL2csICdcXCQmJyk7CgkJCQl9KTsKCQkJCXJldHVybiAnKCcgKyBtYXJrZXJzLmpvaW4oJ3wnKSArICcpPyc7CgkJCX07CgoJCQkvLyBmaWd1cmUgb3V0IHBvc2l0aW9uIG9mIHRpbWUgZWxlbWVudHMuLiBjYXVzZSBqcyBjYW50IGRvIG5hbWVkIGNhcHR1cmVzCgkJCXZhciBnZXRGb3JtYXRQb3NpdGlvbnMgPSBmdW5jdGlvbih0aW1lRm9ybWF0KSB7CgkJCQl2YXIgZmluZHMgPSB0aW1lRm9ybWF0LnRvTG93ZXJDYXNlKCkubWF0Y2goLyhoezEsMn18bXsxLDJ9fHN7MSwyfXxsezF9fHR7MSwyfXx6fCcuKj8nKS9nKSwKCQkJCQlvcmRlcnMgPSB7CgkJCQkJCWg6IC0xLAoJCQkJCQltOiAtMSwKCQkJCQkJczogLTEsCgkJCQkJCWw6IC0xLAoJCQkJCQl0OiAtMSwKCQkJCQkJejogLTEKCQkJCQl9OwoKCQkJCWlmIChmaW5kcykgewoJCQkJCWZvciAodmFyIGkgPSAwOyBpIDwgZmluZHMubGVuZ3RoOyBpKyspIHsKCQkJCQkJaWYgKG9yZGVyc1tmaW5kc1tpXS50b1N0cmluZygpLmNoYXJBdCgwKV0gPT0gLTEpIHsKCQkJCQkJCW9yZGVyc1tmaW5kc1tpXS50b1N0cmluZygpLmNoYXJBdCgwKV0gPSBpICsgMTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJCXJldHVybiBvcmRlcnM7CgkJCX07CgoJCQl2YXIgcmVnc3RyID0gJ14nICsgZi50b1N0cmluZygpCgkJCQkJLnJlcGxhY2UoLyhbaEhdezEsMn18bW0/fHNzP3xbdFRdezEsMn18W2x6XXwnLio/JykvZywgZnVuY3Rpb24gKG1hdGNoKSB7CgkJCQkJCQlzd2l0Y2ggKG1hdGNoLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpKSB7CgkJCQkJCQkJY2FzZSAnaCc6IHJldHVybiAnKFxcZD9cXGQpJzsKCQkJCQkJCQljYXNlICdtJzogcmV0dXJuICcoXFxkP1xcZCknOwoJCQkJCQkJCWNhc2UgJ3MnOiByZXR1cm4gJyhcXGQ/XFxkKSc7CgkJCQkJCQkJY2FzZSAnbCc6IHJldHVybiAnKFxcZD9cXGQ/XFxkKSc7CgkJCQkJCQkJY2FzZSAneic6IHJldHVybiAnKHp8Wy0rXVxcZFxcZDo/XFxkXFxkfFxcUyspPyc7CgkJCQkJCQkJY2FzZSAndCc6IHJldHVybiBnZXRQYXR0ZXJuQW1wbShvLmFtTmFtZXMsIG8ucG1OYW1lcyk7CgkJCQkJCQkJZGVmYXVsdDogICAgLy8gbGl0ZXJhbCBlc2NhcGVkIGluIHF1b3RlcwoJCQkJCQkJCQlyZXR1cm4gJygnICsgbWF0Y2gucmVwbGFjZSgvXCcvZywgIiIpLnJlcGxhY2UoLyhcLnxcJHxcXnxcXHxcL3xcKHxcKXxcW3xcXXxcP3xcK3xcKikvZywgZnVuY3Rpb24gKG0pIHsgcmV0dXJuICJcXCIgKyBtOyB9KSArICcpPyc7CgkJCQkJCQl9CgkJCQkJCX0pCgkJCQkJLnJlcGxhY2UoL1xzL2csICdcXHM/JykgKwoJCQkJCW8udGltZVN1ZmZpeCArICckJywKCQkJCW9yZGVyID0gZ2V0Rm9ybWF0UG9zaXRpb25zKGYpLAoJCQkJYW1wbSA9ICcnLAoJCQkJdHJlZzsKCgkJCXRyZWcgPSBzLm1hdGNoKG5ldyBSZWdFeHAocmVnc3RyLCAnaScpKTsKCgkJCXZhciByZXNUaW1lID0gewoJCQkJaG91cjogMCwKCQkJCW1pbnV0ZTogMCwKCQkJCXNlY29uZDogMCwKCQkJCW1pbGxpc2VjOiAwCgkJCX07CgoJCQlpZiAodHJlZykgewoJCQkJaWYgKG9yZGVyLnQgIT09IC0xKSB7CgkJCQkJaWYgKHRyZWdbb3JkZXIudF0gPT09IHVuZGVmaW5lZCB8fCB0cmVnW29yZGVyLnRdLmxlbmd0aCA9PT0gMCkgewoJCQkJCQlhbXBtID0gJyc7CgkJCQkJCXJlc1RpbWUuYW1wbSA9ICcnOwoJCQkJCX0gZWxzZSB7CgkJCQkJCWFtcG0gPSAkLmluQXJyYXkodHJlZ1tvcmRlci50XS50b1VwcGVyQ2FzZSgpLCBvLmFtTmFtZXMpICE9PSAtMSA/ICdBTScgOiAnUE0nOwoJCQkJCQlyZXNUaW1lLmFtcG0gPSBvW2FtcG0gPT0gJ0FNJyA/ICdhbU5hbWVzJyA6ICdwbU5hbWVzJ11bMF07CgkJCQkJfQoJCQkJfQoKCQkJCWlmIChvcmRlci5oICE9PSAtMSkgewoJCQkJCWlmIChhbXBtID09ICdBTScgJiYgdHJlZ1tvcmRlci5oXSA9PSAnMTInKSB7CgkJCQkJCXJlc1RpbWUuaG91ciA9IDA7IC8vIDEyYW0gPSAwIGhvdXIKCQkJCQl9IGVsc2UgewoJCQkJCQlpZiAoYW1wbSA9PSAnUE0nICYmIHRyZWdbb3JkZXIuaF0gIT0gJzEyJykgewoJCQkJCQkJcmVzVGltZS5ob3VyID0gcGFyc2VJbnQodHJlZ1tvcmRlci5oXSwgMTApICsgMTI7IC8vIDEycG0gPSAxMiBob3VyLCBhbnkgb3RoZXIgcG0gPSBob3VyICsgMTIKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCXJlc1RpbWUuaG91ciA9IE51bWJlcih0cmVnW29yZGVyLmhdKTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCgkJCQlpZiAob3JkZXIubSAhPT0gLTEpIHsKCQkJCQlyZXNUaW1lLm1pbnV0ZSA9IE51bWJlcih0cmVnW29yZGVyLm1dKTsKCQkJCX0KCQkJCWlmIChvcmRlci5zICE9PSAtMSkgewoJCQkJCXJlc1RpbWUuc2Vjb25kID0gTnVtYmVyKHRyZWdbb3JkZXIuc10pOwoJCQkJfQoJCQkJaWYgKG9yZGVyLmwgIT09IC0xKSB7CgkJCQkJcmVzVGltZS5taWxsaXNlYyA9IE51bWJlcih0cmVnW29yZGVyLmxdKTsKCQkJCX0KCQkJCWlmIChvcmRlci56ICE9PSAtMSAmJiB0cmVnW29yZGVyLnpdICE9PSB1bmRlZmluZWQpIHsKCQkJCQl2YXIgdHogPSB0cmVnW29yZGVyLnpdLnRvVXBwZXJDYXNlKCk7CgkJCQkJc3dpdGNoICh0ei5sZW5ndGgpIHsKCQkJCQljYXNlIDE6CgkJCQkJCS8vIFoKCQkJCQkJdHogPSBvLnRpbWV6b25lSXNvODYwMSA/ICdaJyA6ICcrMDAwMCc7CgkJCQkJCWJyZWFrOwoJCQkJCWNhc2UgNToKCQkJCQkJLy8gK2hobW0KCQkJCQkJaWYgKG8udGltZXpvbmVJc284NjAxKSB7CgkJCQkJCQl0eiA9IHR6LnN1YnN0cmluZygxKSA9PSAnMDAwMCcgPyAnWicgOiB0ei5zdWJzdHJpbmcoMCwgMykgKyAnOicgKyB0ei5zdWJzdHJpbmcoMyk7CgkJCQkJCX0KCQkJCQkJYnJlYWs7CgkJCQkJY2FzZSA2OgoJCQkJCQkvLyAraGg6bW0KCQkJCQkJaWYgKCFvLnRpbWV6b25lSXNvODYwMSkgewoJCQkJCQkJdHogPSB0eiA9PSAnWicgfHwgdHouc3Vic3RyaW5nKDEpID09ICcwMDowMCcgPyAnKzAwMDAnIDogdHoucmVwbGFjZSgvOi8sICcnKTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCWlmICh0ei5zdWJzdHJpbmcoMSkgPT0gJzAwOjAwJykgewoJCQkJCQkJCXR6ID0gJ1onOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQlyZXNUaW1lLnRpbWV6b25lID0gdHo7CgkJCQl9CgoKCQkJCXJldHVybiByZXNUaW1lOwoJCQl9CgkJCXJldHVybiBmYWxzZTsKCQl9Oy8vIGVuZCBzdHJpY3RQYXJzZQoKCQkvLyBGaXJzdCB0cnkgSlMgRGF0ZSwgaWYgdGhhdCBmYWlscywgdXNlIHN0cmljdFBhcnNlCgkJdmFyIGxvb3NlUGFyc2UgPSBmdW5jdGlvbihmLHMsbyl7CgkJCXRyeXsKCQkJCXZhciBkID0gbmV3IERhdGUoJzIwMTItMDEtMDEgJysgcyk7CgkJCQlyZXR1cm4gewoJCQkJCWhvdXI6IGQuZ2V0SG91cnMoKSwKCQkJCQltaW51dGVzOiBkLmdldE1pbnV0ZXMoKSwKCQkJCQlzZWNvbmRzOiBkLmdldFNlY29uZHMoKSwKCQkJCQltaWxsaXNlYzogZC5nZXRNaWxsaXNlY29uZHMoKSwKCQkJCQl0aW1lem9uZTogJC50aW1lcGlja2VyLnRpbWVab25lT2Zmc2V0U3RyaW5nKGQpCgkJCQl9OwoJCQl9CgkJCWNhdGNoKGVycil7CgkJCQl0cnl7CgkJCQkJcmV0dXJuIHN0cmljdFBhcnNlKGYscyxvKTsKCQkJCX0KCQkJCWNhdGNoKGVycjIpewoJCQkJCSQuZGF0ZXBpY2tlci5sb2coIlVuYWJsZSB0byBwYXJzZSBcbnRpbWVTdHJpbmc6ICIrIHMgKyJcbnRpbWVGb3JtYXQ6ICIrIGYpOwoJCQkJfQkJCQkKCQkJfQoJCQlyZXR1cm4gZmFsc2U7CgkJfTsgLy8gZW5kIGxvb3NlUGFyc2UKCQkKCQlpZih0eXBlb2Ygby5wYXJzZSA9PT0gImZ1bmN0aW9uIil7CgkJCXJldHVybiBvLnBhcnNlKHRpbWVGb3JtYXQsIHRpbWVTdHJpbmcsIG8pCgkJfQoJCWlmKG8ucGFyc2UgPT09ICdsb29zZScpewoJCQlyZXR1cm4gbG9vc2VQYXJzZSh0aW1lRm9ybWF0LCB0aW1lU3RyaW5nLCBvKTsKCQl9CgkJcmV0dXJuIHN0cmljdFBhcnNlKHRpbWVGb3JtYXQsIHRpbWVTdHJpbmcsIG8pOwoJfTsKCgkvKgoJKiBQdWJsaWMgdXRpbGl0eSB0byBmb3JtYXQgdGhlIHRpbWUKCSogZm9ybWF0ID0gc3RyaW5nIGZvcm1hdCBvZiB0aGUgdGltZQoJKiB0aW1lID0gYSB7fSwgbm90IGEgRGF0ZSgpIGZvciB0aW1lem9uZXMKCSogb3B0aW9ucyA9IGVzc2VudGlhbGx5IHRoZSByZWdpb25hbFtdLi4gYW1OYW1lcywgcG1OYW1lcywgYW1wbQoJKi8KCSQuZGF0ZXBpY2tlci5mb3JtYXRUaW1lID0gZnVuY3Rpb24oZm9ybWF0LCB0aW1lLCBvcHRpb25zKSB7CgkJb3B0aW9ucyA9IG9wdGlvbnMgfHwge307CgkJb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCAkLnRpbWVwaWNrZXIuX2RlZmF1bHRzLCBvcHRpb25zKTsKCQl0aW1lID0gJC5leHRlbmQoewoJCQlob3VyOiAwLAoJCQltaW51dGU6IDAsCgkJCXNlY29uZDogMCwKCQkJbWlsbGlzZWM6IDAsCgkJCXRpbWV6b25lOiAnKzAwMDAnCgkJfSwgdGltZSk7CgoJCXZhciB0bXB0aW1lID0gZm9ybWF0LAoJCQlhbXBtTmFtZSA9IG9wdGlvbnMuYW1OYW1lc1swXSwKCQkJaG91ciA9IHBhcnNlSW50KHRpbWUuaG91ciwgMTApOwoKCQlpZiAoaG91ciA+IDExKSB7CgkJCWFtcG1OYW1lID0gb3B0aW9ucy5wbU5hbWVzWzBdOwoJCX0KCgkJdG1wdGltZSA9IHRtcHRpbWUucmVwbGFjZSgvKD86SEg/fGhoP3xtbT98c3M/fFt0VF17MSwyfXxbbHpdfCgnLio/J3wiLio/IikpL2csIGZ1bmN0aW9uKG1hdGNoKSB7CgkJc3dpdGNoIChtYXRjaCkgewoJCQljYXNlICdISCc6CgkJCQlyZXR1cm4gKCcwJyArIGhvdXIpLnNsaWNlKC0yKTsKCQkJY2FzZSAnSCc6CgkJCQlyZXR1cm4gaG91cjsKCQkJY2FzZSAnaGgnOgoJCQkJcmV0dXJuICgnMCcgKyBjb252ZXJ0MjR0bzEyKGhvdXIpKS5zbGljZSgtMik7CgkJCWNhc2UgJ2gnOgoJCQkJcmV0dXJuIGNvbnZlcnQyNHRvMTIoaG91cik7CgkJCWNhc2UgJ21tJzoKCQkJCXJldHVybiAoJzAnICsgdGltZS5taW51dGUpLnNsaWNlKC0yKTsKCQkJY2FzZSAnbSc6CgkJCQlyZXR1cm4gdGltZS5taW51dGU7CgkJCWNhc2UgJ3NzJzoKCQkJCXJldHVybiAoJzAnICsgdGltZS5zZWNvbmQpLnNsaWNlKC0yKTsKCQkJY2FzZSAncyc6CgkJCQlyZXR1cm4gdGltZS5zZWNvbmQ7CgkJCWNhc2UgJ2wnOgoJCQkJcmV0dXJuICgnMDAnICsgdGltZS5taWxsaXNlYykuc2xpY2UoLTMpOwoJCQljYXNlICd6JzoKCQkJCXJldHVybiB0aW1lLnRpbWV6b25lID09PSBudWxsPyBvcHRpb25zLmRlZmF1bHRUaW1lem9uZSA6IHRpbWUudGltZXpvbmU7CgkJCWNhc2UgJ1QnOiAKCQkJCXJldHVybiBhbXBtTmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKTsKCQkJY2FzZSAnVFQnOiAKCQkJCXJldHVybiBhbXBtTmFtZS50b1VwcGVyQ2FzZSgpOwoJCQljYXNlICd0JzoKCQkJCXJldHVybiBhbXBtTmFtZS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKTsKCQkJY2FzZSAndHQnOgoJCQkJcmV0dXJuIGFtcG1OYW1lLnRvTG93ZXJDYXNlKCk7CgkJCWRlZmF1bHQ6CgkJCQlyZXR1cm4gbWF0Y2gucmVwbGFjZSgvXCcvZywgIiIpIHx8ICInIjsKCQkJfQoJCX0pOwoKCQl0bXB0aW1lID0gJC50cmltKHRtcHRpbWUpOwoJCXJldHVybiB0bXB0aW1lOwoJfTsKCgkvKgoJKiB0aGUgYmFkIGhhY2sgOi8gb3ZlcnJpZGUgZGF0ZXBpY2tlciBzbyBpdCBkb2VzbnQgY2xvc2Ugb24gc2VsZWN0CgkvLyBpbnNwaXJlZDogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMjUyNTEyL2pxdWVyeS1kYXRlcGlja2VyLXByZXZlbnQtY2xvc2luZy1waWNrZXItd2hlbi1jbGlja2luZy1hLWRhdGUvMTc2MjM3OCMxNzYyMzc4CgkqLwoJJC5kYXRlcGlja2VyLl9iYXNlX3NlbGVjdERhdGUgPSAkLmRhdGVwaWNrZXIuX3NlbGVjdERhdGU7CgkkLmRhdGVwaWNrZXIuX3NlbGVjdERhdGUgPSBmdW5jdGlvbihpZCwgZGF0ZVN0cikgewoJCXZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdCgkKGlkKVswXSksCgkJCXRwX2luc3QgPSB0aGlzLl9nZXQoaW5zdCwgJ3RpbWVwaWNrZXInKTsKCgkJaWYgKHRwX2luc3QpIHsKCQkJdHBfaW5zdC5fbGltaXRNaW5NYXhEYXRlVGltZShpbnN0LCB0cnVlKTsKCQkJaW5zdC5pbmxpbmUgPSBpbnN0LnN0YXlfb3BlbiA9IHRydWU7CgkJCS8vVGhpcyB3YXkgdGhlIG9uU2VsZWN0IGhhbmRsZXIgY2FsbGVkIGZyb20gY2FsZW5kYXJwaWNrZXIgZ2V0IHRoZSBmdWxsIGRhdGVUaW1lCgkJCXRoaXMuX2Jhc2Vfc2VsZWN0RGF0ZShpZCwgZGF0ZVN0cik7CgkJCWluc3QuaW5saW5lID0gaW5zdC5zdGF5X29wZW4gPSBmYWxzZTsKCQkJdGhpcy5fbm90aWZ5Q2hhbmdlKGluc3QpOwoJCQl0aGlzLl91cGRhdGVEYXRlcGlja2VyKGluc3QpOwoJCX0gZWxzZSB7CgkJCXRoaXMuX2Jhc2Vfc2VsZWN0RGF0ZShpZCwgZGF0ZVN0cik7CgkJfQoJfTsKCgkvKgoJKiBzZWNvbmQgYmFkIGhhY2sgOi8gb3ZlcnJpZGUgZGF0ZXBpY2tlciBzbyBpdCB0cmlnZ2VycyBhbiBldmVudCB3aGVuIGNoYW5naW5nIHRoZSBpbnB1dCBmaWVsZAoJKiBhbmQgZG9lcyBub3QgcmVkcmF3IHRoZSBkYXRlcGlja2VyIG9uIGV2ZXJ5IHNlbGVjdERhdGUgZXZlbnQKCSovCgkkLmRhdGVwaWNrZXIuX2Jhc2VfdXBkYXRlRGF0ZXBpY2tlciA9ICQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlcjsKCSQuZGF0ZXBpY2tlci5fdXBkYXRlRGF0ZXBpY2tlciA9IGZ1bmN0aW9uKGluc3QpIHsKCgkJLy8gZG9uJ3QgcG9wdXAgdGhlIGRhdGVwaWNrZXIgaWYgdGhlcmUgaXMgYW5vdGhlciBpbnN0YW5jZSBhbHJlYWR5IG9wZW5lZAoJCXZhciBpbnB1dCA9IGluc3QuaW5wdXRbMF07CgkJaWYgKCQuZGF0ZXBpY2tlci5fY3VySW5zdCAmJiAkLmRhdGVwaWNrZXIuX2N1ckluc3QgIT0gaW5zdCAmJiAkLmRhdGVwaWNrZXIuX2RhdGVwaWNrZXJTaG93aW5nICYmICQuZGF0ZXBpY2tlci5fbGFzdElucHV0ICE9IGlucHV0KSB7CgkJCXJldHVybjsKCQl9CgoJCWlmICh0eXBlb2YoaW5zdC5zdGF5X29wZW4pICE9PSAnYm9vbGVhbicgfHwgaW5zdC5zdGF5X29wZW4gPT09IGZhbHNlKSB7CgoJCQl0aGlzLl9iYXNlX3VwZGF0ZURhdGVwaWNrZXIoaW5zdCk7CgoJCQkvLyBSZWxvYWQgdGhlIHRpbWUgY29udHJvbCB3aGVuIGNoYW5naW5nIHNvbWV0aGluZyBpbiB0aGUgaW5wdXQgdGV4dCBmaWVsZC4KCQkJdmFyIHRwX2luc3QgPSB0aGlzLl9nZXQoaW5zdCwgJ3RpbWVwaWNrZXInKTsKCQkJaWYgKHRwX2luc3QpIHsKCQkJCXRwX2luc3QuX2FkZFRpbWVQaWNrZXIoaW5zdCk7CgoJCQkJaWYgKHRwX2luc3QuX2RlZmF1bHRzLnVzZUxvY2FsVGltZXpvbmUpIHsgLy9jaGVja3MgZGF5bGlnaHQgc2F2aW5nIHdpdGggdGhlIG5ldyBkYXRlLgoJCQkJCXZhciBkYXRlID0gbmV3IERhdGUoaW5zdC5zZWxlY3RlZFllYXIsIGluc3Quc2VsZWN0ZWRNb250aCwgaW5zdC5zZWxlY3RlZERheSwgMTIpOwoJCQkJCXNlbGVjdExvY2FsVGltZVpvbmUodHBfaW5zdCwgZGF0ZSk7CgkJCQkJdHBfaW5zdC5fb25UaW1lQ2hhbmdlKCk7CgkJCQl9CgkJCX0KCQl9Cgl9OwoKCS8qCgkqIHRoaXJkIGJhZCBoYWNrIDovIG92ZXJyaWRlIGRhdGVwaWNrZXIgc28gaXQgYWxsb3dzIHNwYWNlcyBhbmQgY29sb24gaW4gdGhlIGlucHV0IGZpZWxkCgkqLwoJJC5kYXRlcGlja2VyLl9iYXNlX2RvS2V5UHJlc3MgPSAkLmRhdGVwaWNrZXIuX2RvS2V5UHJlc3M7CgkkLmRhdGVwaWNrZXIuX2RvS2V5UHJlc3MgPSBmdW5jdGlvbihldmVudCkgewoJCXZhciBpbnN0ID0gJC5kYXRlcGlja2VyLl9nZXRJbnN0KGV2ZW50LnRhcmdldCksCgkJCXRwX2luc3QgPSAkLmRhdGVwaWNrZXIuX2dldChpbnN0LCAndGltZXBpY2tlcicpOwoKCQlpZiAodHBfaW5zdCkgewoJCQlpZiAoJC5kYXRlcGlja2VyLl9nZXQoaW5zdCwgJ2NvbnN0cmFpbklucHV0JykpIHsKCQkJCXZhciBhbXBtID0gdXNlQW1wbSh0cF9pbnN0Ll9kZWZhdWx0cy50aW1lRm9ybWF0KSwKCQkJCQlkYXRlQ2hhcnMgPSAkLmRhdGVwaWNrZXIuX3Bvc3NpYmxlQ2hhcnMoJC5kYXRlcGlja2VyLl9nZXQoaW5zdCwgJ2RhdGVGb3JtYXQnKSksCgkJCQkJZGF0ZXRpbWVDaGFycyA9IHRwX2luc3QuX2RlZmF1bHRzLnRpbWVGb3JtYXQudG9TdHJpbmcoKQoJCQkJCQkJCQkJCS5yZXBsYWNlKC9baG1zXS9nLCAnJykKCQkJCQkJCQkJCQkucmVwbGFjZSgvVFQvZywgYW1wbSA/ICdBUE0nIDogJycpCgkJCQkJCQkJCQkJLnJlcGxhY2UoL1R0L2csIGFtcG0gPyAnQWFQcE1tJyA6ICcnKQoJCQkJCQkJCQkJCS5yZXBsYWNlKC90VC9nLCBhbXBtID8gJ0FhUHBNbScgOiAnJykKCQkJCQkJCQkJCQkucmVwbGFjZSgvVC9nLCBhbXBtID8gJ0FQJyA6ICcnKQoJCQkJCQkJCQkJCS5yZXBsYWNlKC90dC9nLCBhbXBtID8gJ2FwbScgOiAnJykKCQkJCQkJCQkJCQkucmVwbGFjZSgvdC9nLCBhbXBtID8gJ2FwJyA6ICcnKSArIAoJCQkJCQkJCQkJCSIgIiArIHRwX2luc3QuX2RlZmF1bHRzLnNlcGFyYXRvciArIAoJCQkJCQkJCQkJCXRwX2luc3QuX2RlZmF1bHRzLnRpbWVTdWZmaXggKyAKCQkJCQkJCQkJCQkodHBfaW5zdC5fZGVmYXVsdHMuc2hvd1RpbWV6b25lID8gdHBfaW5zdC5fZGVmYXVsdHMudGltZXpvbmVMaXN0LmpvaW4oJycpIDogJycpICsgCgkJCQkJCQkJCQkJKHRwX2luc3QuX2RlZmF1bHRzLmFtTmFtZXMuam9pbignJykpICsgKHRwX2luc3QuX2RlZmF1bHRzLnBtTmFtZXMuam9pbignJykpICsgCgkJCQkJCQkJCQkJZGF0ZUNoYXJzLAoJCQkJCWNociA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZXZlbnQuY2hhckNvZGUgPT09IHVuZGVmaW5lZCA/IGV2ZW50LmtleUNvZGUgOiBldmVudC5jaGFyQ29kZSk7CgkJCQlyZXR1cm4gZXZlbnQuY3RybEtleSB8fCAoY2hyIDwgJyAnIHx8ICFkYXRlQ2hhcnMgfHwgZGF0ZXRpbWVDaGFycy5pbmRleE9mKGNocikgPiAtMSk7CgkJCX0KCQl9CgoJCXJldHVybiAkLmRhdGVwaWNrZXIuX2Jhc2VfZG9LZXlQcmVzcyhldmVudCk7Cgl9OwoKCS8qCgkqIEZvdXJ0aCBiYWQgaGFjayA6LyBvdmVycmlkZSBfdXBkYXRlQWx0ZXJuYXRlIGZ1bmN0aW9uIHVzZWQgaW4gaW5saW5lIG1vZGUgdG8gaW5pdCBhbHRGaWVsZAoJKi8KCSQuZGF0ZXBpY2tlci5fYmFzZV91cGRhdGVBbHRlcm5hdGUgPSAkLmRhdGVwaWNrZXIuX3VwZGF0ZUFsdGVybmF0ZTsKCS8qIFVwZGF0ZSBhbnkgYWx0ZXJuYXRlIGZpZWxkIHRvIHN5bmNocm9uaXNlIHdpdGggdGhlIG1haW4gZmllbGQuICovCgkkLmRhdGVwaWNrZXIuX3VwZGF0ZUFsdGVybmF0ZSA9IGZ1bmN0aW9uKGluc3QpIHsKCQl2YXIgdHBfaW5zdCA9IHRoaXMuX2dldChpbnN0LCAndGltZXBpY2tlcicpOwoJCWlmKHRwX2luc3QpewoJCQl2YXIgYWx0RmllbGQgPSB0cF9pbnN0Ll9kZWZhdWx0cy5hbHRGaWVsZDsKCQkJaWYgKGFsdEZpZWxkKSB7IC8vIHVwZGF0ZSBhbHRlcm5hdGUgZmllbGQgdG9vCgkJCQl2YXIgYWx0Rm9ybWF0ID0gdHBfaW5zdC5fZGVmYXVsdHMuYWx0Rm9ybWF0IHx8IHRwX2luc3QuX2RlZmF1bHRzLmRhdGVGb3JtYXQsCgkJCQkJZGF0ZSA9IHRoaXMuX2dldERhdGUoaW5zdCksCgkJCQkJZm9ybWF0Q2ZnID0gJC5kYXRlcGlja2VyLl9nZXRGb3JtYXRDb25maWcoaW5zdCksCgkJCQkJYWx0Rm9ybWF0dGVkRGF0ZVRpbWUgPSAnJywgCgkJCQkJYWx0U2VwYXJhdG9yID0gdHBfaW5zdC5fZGVmYXVsdHMuYWx0U2VwYXJhdG9yID8gdHBfaW5zdC5fZGVmYXVsdHMuYWx0U2VwYXJhdG9yIDogdHBfaW5zdC5fZGVmYXVsdHMuc2VwYXJhdG9yLCAKCQkJCQlhbHRUaW1lU3VmZml4ID0gdHBfaW5zdC5fZGVmYXVsdHMuYWx0VGltZVN1ZmZpeCA/IHRwX2luc3QuX2RlZmF1bHRzLmFsdFRpbWVTdWZmaXggOiB0cF9pbnN0Ll9kZWZhdWx0cy50aW1lU3VmZml4LAoJCQkJCWFsdFRpbWVGb3JtYXQgPSB0cF9pbnN0Ll9kZWZhdWx0cy5hbHRUaW1lRm9ybWF0ICE9PSBudWxsID8gdHBfaW5zdC5fZGVmYXVsdHMuYWx0VGltZUZvcm1hdCA6IHRwX2luc3QuX2RlZmF1bHRzLnRpbWVGb3JtYXQ7CgkJCQkKCQkJCWFsdEZvcm1hdHRlZERhdGVUaW1lICs9ICQuZGF0ZXBpY2tlci5mb3JtYXRUaW1lKGFsdFRpbWVGb3JtYXQsIHRwX2luc3QsIHRwX2luc3QuX2RlZmF1bHRzKSArIGFsdFRpbWVTdWZmaXg7CgkJCQlpZighdHBfaW5zdC5fZGVmYXVsdHMudGltZU9ubHkgJiYgIXRwX2luc3QuX2RlZmF1bHRzLmFsdEZpZWxkVGltZU9ubHkpewoJCQkJCWlmKHRwX2luc3QuX2RlZmF1bHRzLmFsdEZvcm1hdCkKCQkJCQkJYWx0Rm9ybWF0dGVkRGF0ZVRpbWUgPSAkLmRhdGVwaWNrZXIuZm9ybWF0RGF0ZSh0cF9pbnN0Ll9kZWZhdWx0cy5hbHRGb3JtYXQsIChkYXRlID09PSBudWxsID8gbmV3IERhdGUoKSA6IGRhdGUpLCBmb3JtYXRDZmcpICsgYWx0U2VwYXJhdG9yICsgYWx0Rm9ybWF0dGVkRGF0ZVRpbWU7CgkJCQkJZWxzZSBhbHRGb3JtYXR0ZWREYXRlVGltZSA9IHRwX2luc3QuZm9ybWF0dGVkRGF0ZSArIGFsdFNlcGFyYXRvciArIGFsdEZvcm1hdHRlZERhdGVUaW1lOwoJCQkJfQoJCQkJJChhbHRGaWVsZCkudmFsKGFsdEZvcm1hdHRlZERhdGVUaW1lKTsKCQkJfQoJCX0KCQllbHNlewoJCQkkLmRhdGVwaWNrZXIuX2Jhc2VfdXBkYXRlQWx0ZXJuYXRlKGluc3QpOwoJCX0KCX07CgoJLyoKCSogT3ZlcnJpZGUga2V5IHVwIGV2ZW50IHRvIHN5bmMgbWFudWFsIGlucHV0IGNoYW5nZXMuCgkqLwoJJC5kYXRlcGlja2VyLl9iYXNlX2RvS2V5VXAgPSAkLmRhdGVwaWNrZXIuX2RvS2V5VXA7CgkkLmRhdGVwaWNrZXIuX2RvS2V5VXAgPSBmdW5jdGlvbihldmVudCkgewoJCXZhciBpbnN0ID0gJC5kYXRlcGlja2VyLl9nZXRJbnN0KGV2ZW50LnRhcmdldCksCgkJCXRwX2luc3QgPSAkLmRhdGVwaWNrZXIuX2dldChpbnN0LCAndGltZXBpY2tlcicpOwoKCQlpZiAodHBfaW5zdCkgewoJCQlpZiAodHBfaW5zdC5fZGVmYXVsdHMudGltZU9ubHkgJiYgKGluc3QuaW5wdXQudmFsKCkgIT0gaW5zdC5sYXN0VmFsKSkgewoJCQkJdHJ5IHsKCQkJCQkkLmRhdGVwaWNrZXIuX3VwZGF0ZURhdGVwaWNrZXIoaW5zdCk7CgkJCQl9IGNhdGNoIChlcnIpIHsKCQkJCQkkLmRhdGVwaWNrZXIubG9nKGVycik7CgkJCQl9CgkJCX0KCQl9CgoJCXJldHVybiAkLmRhdGVwaWNrZXIuX2Jhc2VfZG9LZXlVcChldmVudCk7Cgl9OwoKCS8qCgkqIG92ZXJyaWRlICJUb2RheSIgYnV0dG9uIHRvIGFsc28gZ3JhYiB0aGUgdGltZS4KCSovCgkkLmRhdGVwaWNrZXIuX2Jhc2VfZ290b1RvZGF5ID0gJC5kYXRlcGlja2VyLl9nb3RvVG9kYXk7CgkkLmRhdGVwaWNrZXIuX2dvdG9Ub2RheSA9IGZ1bmN0aW9uKGlkKSB7CgkJdmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KCQoaWQpWzBdKSwKCQkJJGRwID0gaW5zdC5kcERpdjsKCQl0aGlzLl9iYXNlX2dvdG9Ub2RheShpZCk7CgkJdmFyIHRwX2luc3QgPSB0aGlzLl9nZXQoaW5zdCwgJ3RpbWVwaWNrZXInKTsKCQlzZWxlY3RMb2NhbFRpbWVab25lKHRwX2luc3QpOwoJCXZhciBub3cgPSBuZXcgRGF0ZSgpOwoJCXRoaXMuX3NldFRpbWUoaW5zdCwgbm93KTsKCQkkKCcudWktZGF0ZXBpY2tlci10b2RheScsICRkcCkuY2xpY2soKTsKCX07CgoJLyoKCSogRGlzYWJsZSAmIGVuYWJsZSB0aGUgVGltZSBpbiB0aGUgZGF0ZXRpbWVwaWNrZXIKCSovCgkkLmRhdGVwaWNrZXIuX2Rpc2FibGVUaW1lcGlja2VyRGF0ZXBpY2tlciA9IGZ1bmN0aW9uKHRhcmdldCkgewoJCXZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdCh0YXJnZXQpOwoJCWlmICghaW5zdCkgewoJCQlyZXR1cm47CgkJfQoKCQl2YXIgdHBfaW5zdCA9IHRoaXMuX2dldChpbnN0LCAndGltZXBpY2tlcicpOwoJCSQodGFyZ2V0KS5kYXRlcGlja2VyKCdnZXREYXRlJyk7IC8vIEluaXQgc2VsZWN0ZWRbWWVhcnxNb250aHxEYXldCgkJaWYgKHRwX2luc3QpIHsKCQkJdHBfaW5zdC5fZGVmYXVsdHMuc2hvd1RpbWVwaWNrZXIgPSBmYWxzZTsKCQkJdHBfaW5zdC5fdXBkYXRlRGF0ZVRpbWUoaW5zdCk7CgkJfQoJfTsKCgkkLmRhdGVwaWNrZXIuX2VuYWJsZVRpbWVwaWNrZXJEYXRlcGlja2VyID0gZnVuY3Rpb24odGFyZ2V0KSB7CgkJdmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KHRhcmdldCk7CgkJaWYgKCFpbnN0KSB7CgkJCXJldHVybjsKCQl9CgoJCXZhciB0cF9pbnN0ID0gdGhpcy5fZ2V0KGluc3QsICd0aW1lcGlja2VyJyk7CgkJJCh0YXJnZXQpLmRhdGVwaWNrZXIoJ2dldERhdGUnKTsgLy8gSW5pdCBzZWxlY3RlZFtZZWFyfE1vbnRofERheV0KCQlpZiAodHBfaW5zdCkgewoJCQl0cF9pbnN0Ll9kZWZhdWx0cy5zaG93VGltZXBpY2tlciA9IHRydWU7CgkJCXRwX2luc3QuX2FkZFRpbWVQaWNrZXIoaW5zdCk7IC8vIENvdWxkIGJlIGRpc2FibGVkIG9uIHBhZ2UgbG9hZAoJCQl0cF9pbnN0Ll91cGRhdGVEYXRlVGltZShpbnN0KTsKCQl9Cgl9OwoKCS8qCgkqIENyZWF0ZSBvdXIgb3duIHNldCB0aW1lIGZ1bmN0aW9uCgkqLwoJJC5kYXRlcGlja2VyLl9zZXRUaW1lID0gZnVuY3Rpb24oaW5zdCwgZGF0ZSkgewoJCXZhciB0cF9pbnN0ID0gdGhpcy5fZ2V0KGluc3QsICd0aW1lcGlja2VyJyk7CgkJaWYgKHRwX2luc3QpIHsKCQkJdmFyIGRlZmF1bHRzID0gdHBfaW5zdC5fZGVmYXVsdHM7CgoJCQkvLyBjYWxsaW5nIF9zZXRUaW1lIHdpdGggbm8gZGF0ZSBzZXRzIHRpbWUgdG8gZGVmYXVsdHMKCQkJdHBfaW5zdC5ob3VyID0gZGF0ZSA/IGRhdGUuZ2V0SG91cnMoKSA6IGRlZmF1bHRzLmhvdXI7CgkJCXRwX2luc3QubWludXRlID0gZGF0ZSA/IGRhdGUuZ2V0TWludXRlcygpIDogZGVmYXVsdHMubWludXRlOwoJCQl0cF9pbnN0LnNlY29uZCA9IGRhdGUgPyBkYXRlLmdldFNlY29uZHMoKSA6IGRlZmF1bHRzLnNlY29uZDsKCQkJdHBfaW5zdC5taWxsaXNlYyA9IGRhdGUgPyBkYXRlLmdldE1pbGxpc2Vjb25kcygpIDogZGVmYXVsdHMubWlsbGlzZWM7CgoJCQkvL2NoZWNrIGlmIHdpdGhpbiBtaW4vbWF4IHRpbWVzLi4gCgkJCXRwX2luc3QuX2xpbWl0TWluTWF4RGF0ZVRpbWUoaW5zdCwgdHJ1ZSk7CgoJCQl0cF9pbnN0Ll9vblRpbWVDaGFuZ2UoKTsKCQkJdHBfaW5zdC5fdXBkYXRlRGF0ZVRpbWUoaW5zdCk7CgkJfQoJfTsKCgkvKgoJKiBDcmVhdGUgbmV3IHB1YmxpYyBtZXRob2QgdG8gc2V0IG9ubHkgdGltZSwgY2FsbGFibGUgYXMgJCgpLmRhdGVwaWNrZXIoJ3NldFRpbWUnLCBkYXRlKQoJKi8KCSQuZGF0ZXBpY2tlci5fc2V0VGltZURhdGVwaWNrZXIgPSBmdW5jdGlvbih0YXJnZXQsIGRhdGUsIHdpdGhEYXRlKSB7CgkJdmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KHRhcmdldCk7CgkJaWYgKCFpbnN0KSB7CgkJCXJldHVybjsKCQl9CgoJCXZhciB0cF9pbnN0ID0gdGhpcy5fZ2V0KGluc3QsICd0aW1lcGlja2VyJyk7CgoJCWlmICh0cF9pbnN0KSB7CgkJCXRoaXMuX3NldERhdGVGcm9tRmllbGQoaW5zdCk7CgkJCXZhciB0cF9kYXRlOwoJCQlpZiAoZGF0ZSkgewoJCQkJaWYgKHR5cGVvZiBkYXRlID09ICJzdHJpbmciKSB7CgkJCQkJdHBfaW5zdC5fcGFyc2VUaW1lKGRhdGUsIHdpdGhEYXRlKTsKCQkJCQl0cF9kYXRlID0gbmV3IERhdGUoKTsKCQkJCQl0cF9kYXRlLnNldEhvdXJzKHRwX2luc3QuaG91ciwgdHBfaW5zdC5taW51dGUsIHRwX2luc3Quc2Vjb25kLCB0cF9pbnN0Lm1pbGxpc2VjKTsKCQkJCX0gZWxzZSB7CgkJCQkJdHBfZGF0ZSA9IG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpKTsKCQkJCX0KCQkJCWlmICh0cF9kYXRlLnRvU3RyaW5nKCkgPT0gJ0ludmFsaWQgRGF0ZScpIHsKCQkJCQl0cF9kYXRlID0gdW5kZWZpbmVkOwoJCQkJfQoJCQkJdGhpcy5fc2V0VGltZShpbnN0LCB0cF9kYXRlKTsKCQkJfQoJCX0KCgl9OwoKCS8qCgkqIG92ZXJyaWRlIHNldERhdGUoKSB0byBhbGxvdyBzZXR0aW5nIHRpbWUgdG9vIHdpdGhpbiBEYXRlIG9iamVjdAoJKi8KCSQuZGF0ZXBpY2tlci5fYmFzZV9zZXREYXRlRGF0ZXBpY2tlciA9ICQuZGF0ZXBpY2tlci5fc2V0RGF0ZURhdGVwaWNrZXI7CgkkLmRhdGVwaWNrZXIuX3NldERhdGVEYXRlcGlja2VyID0gZnVuY3Rpb24odGFyZ2V0LCBkYXRlKSB7CgkJdmFyIGluc3QgPSB0aGlzLl9nZXRJbnN0KHRhcmdldCk7CgkJaWYgKCFpbnN0KSB7CgkJCXJldHVybjsKCQl9CgoJCXZhciB0cF9kYXRlID0gKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSA/IG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpKSA6IGRhdGU7CgoJCXRoaXMuX3VwZGF0ZURhdGVwaWNrZXIoaW5zdCk7CgkJdGhpcy5fYmFzZV9zZXREYXRlRGF0ZXBpY2tlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwoJCXRoaXMuX3NldFRpbWVEYXRlcGlja2VyKHRhcmdldCwgdHBfZGF0ZSwgdHJ1ZSk7Cgl9OwoKCS8qCgkqIG92ZXJyaWRlIGdldERhdGUoKSB0byBhbGxvdyBnZXR0aW5nIHRpbWUgdG9vIHdpdGhpbiBEYXRlIG9iamVjdAoJKi8KCSQuZGF0ZXBpY2tlci5fYmFzZV9nZXREYXRlRGF0ZXBpY2tlciA9ICQuZGF0ZXBpY2tlci5fZ2V0RGF0ZURhdGVwaWNrZXI7CgkkLmRhdGVwaWNrZXIuX2dldERhdGVEYXRlcGlja2VyID0gZnVuY3Rpb24odGFyZ2V0LCBub0RlZmF1bHQpIHsKCQl2YXIgaW5zdCA9IHRoaXMuX2dldEluc3QodGFyZ2V0KTsKCQlpZiAoIWluc3QpIHsKCQkJcmV0dXJuOwoJCX0KCgkJdmFyIHRwX2luc3QgPSB0aGlzLl9nZXQoaW5zdCwgJ3RpbWVwaWNrZXInKTsKCgkJaWYgKHRwX2luc3QpIHsKCQkJLy8gaWYgaXQgaGFzbid0IHlldCBiZWVuIGRlZmluZWQsIGdyYWIgZnJvbSBmaWVsZAoJCQlpZihpbnN0Lmxhc3RWYWwgPT09IHVuZGVmaW5lZCl7CgkJCQl0aGlzLl9zZXREYXRlRnJvbUZpZWxkKGluc3QsIG5vRGVmYXVsdCk7CgkJCX0KCgkJCXZhciBkYXRlID0gdGhpcy5fZ2V0RGF0ZShpbnN0KTsKCQkJaWYgKGRhdGUgJiYgdHBfaW5zdC5fcGFyc2VUaW1lKCQodGFyZ2V0KS52YWwoKSwgdHBfaW5zdC50aW1lT25seSkpIHsKCQkJCWRhdGUuc2V0SG91cnModHBfaW5zdC5ob3VyLCB0cF9pbnN0Lm1pbnV0ZSwgdHBfaW5zdC5zZWNvbmQsIHRwX2luc3QubWlsbGlzZWMpOwoJCQl9CgkJCXJldHVybiBkYXRlOwoJCX0KCQlyZXR1cm4gdGhpcy5fYmFzZV9nZXREYXRlRGF0ZXBpY2tlcih0YXJnZXQsIG5vRGVmYXVsdCk7Cgl9OwoKCS8qCgkqIG92ZXJyaWRlIHBhcnNlRGF0ZSgpIGJlY2F1c2UgVUkgMS44LjE0IHRocm93cyBhbiBlcnJvciBhYm91dCAiRXh0cmEgY2hhcmFjdGVycyIKCSogQW4gb3B0aW9uIGluIGRhdGFwaWNrZXIgdG8gaWdub3JlIGV4dHJhIGZvcm1hdCBjaGFyYWN0ZXJzIHdvdWxkIGJlIG5pY2VyLgoJKi8KCSQuZGF0ZXBpY2tlci5fYmFzZV9wYXJzZURhdGUgPSAkLmRhdGVwaWNrZXIucGFyc2VEYXRlOwoJJC5kYXRlcGlja2VyLnBhcnNlRGF0ZSA9IGZ1bmN0aW9uKGZvcm1hdCwgdmFsdWUsIHNldHRpbmdzKSB7CgkJdmFyIGRhdGU7CgkJdHJ5IHsKCQkJZGF0ZSA9IHRoaXMuX2Jhc2VfcGFyc2VEYXRlKGZvcm1hdCwgdmFsdWUsIHNldHRpbmdzKTsKCQl9IGNhdGNoIChlcnIpIHsKCQkJLy8gSGFjayEgIFRoZSBlcnJvciBtZXNzYWdlIGVuZHMgd2l0aCBhIGNvbG9uLCBhIHNwYWNlLCBhbmQKCQkJLy8gdGhlICJleHRyYSIgY2hhcmFjdGVycy4gIFdlIHJlbHkgb24gdGhhdCBpbnN0ZWFkIG9mCgkJCS8vIGF0dGVtcHRpbmcgdG8gcGVyZmVjdGx5IHJlcHJvZHVjZSB0aGUgcGFyc2luZyBhbGdvcml0aG0uCgkJCWRhdGUgPSB0aGlzLl9iYXNlX3BhcnNlRGF0ZShmb3JtYXQsIHZhbHVlLnN1YnN0cmluZygwLHZhbHVlLmxlbmd0aC0oZXJyLmxlbmd0aC1lcnIuaW5kZXhPZignOicpLTIpKSwgc2V0dGluZ3MpOwoJCQkkLmRhdGVwaWNrZXIubG9nKCJFcnJvciBwYXJzaW5nIHRoZSBkYXRlIHN0cmluZzogIiArIGVyciArICJcbmRhdGUgc3RyaW5nID0gIiArIHZhbHVlICsgIlxuZGF0ZSBmb3JtYXQgPSAiICsgZm9ybWF0KTsKCQl9CgkJcmV0dXJuIGRhdGU7Cgl9OwoKCS8qCgkqIG92ZXJyaWRlIGZvcm1hdERhdGUgdG8gc2V0IGRhdGUgd2l0aCB0aW1lIHRvIHRoZSBpbnB1dAoJKi8KCSQuZGF0ZXBpY2tlci5fYmFzZV9mb3JtYXREYXRlID0gJC5kYXRlcGlja2VyLl9mb3JtYXREYXRlOwoJJC5kYXRlcGlja2VyLl9mb3JtYXREYXRlID0gZnVuY3Rpb24oaW5zdCwgZGF5LCBtb250aCwgeWVhcikgewoJCXZhciB0cF9pbnN0ID0gdGhpcy5fZ2V0KGluc3QsICd0aW1lcGlja2VyJyk7CgkJaWYgKHRwX2luc3QpIHsKCQkJdHBfaW5zdC5fdXBkYXRlRGF0ZVRpbWUoaW5zdCk7CgkJCXJldHVybiB0cF9pbnN0LiRpbnB1dC52YWwoKTsKCQl9CgkJcmV0dXJuIHRoaXMuX2Jhc2VfZm9ybWF0RGF0ZShpbnN0KTsKCX07CgoJLyoKCSogb3ZlcnJpZGUgb3B0aW9ucyBzZXR0ZXIgdG8gYWRkIHRpbWUgdG8gbWF4RGF0ZShUaW1lKSBhbmQgbWluRGF0ZShUaW1lKS4gTWF4RGF0ZQoJKi8KCSQuZGF0ZXBpY2tlci5fYmFzZV9vcHRpb25EYXRlcGlja2VyID0gJC5kYXRlcGlja2VyLl9vcHRpb25EYXRlcGlja2VyOwoJJC5kYXRlcGlja2VyLl9vcHRpb25EYXRlcGlja2VyID0gZnVuY3Rpb24odGFyZ2V0LCBuYW1lLCB2YWx1ZSkgewoJCXZhciBpbnN0ID0gdGhpcy5fZ2V0SW5zdCh0YXJnZXQpLAoJICAgICAgICBuYW1lX2Nsb25lOwoJCWlmICghaW5zdCkgewoJCQlyZXR1cm4gbnVsbDsKCQl9CgoJCXZhciB0cF9pbnN0ID0gdGhpcy5fZ2V0KGluc3QsICd0aW1lcGlja2VyJyk7CgkJaWYgKHRwX2luc3QpIHsKCQkJdmFyIG1pbiA9IG51bGwsCgkJCQltYXggPSBudWxsLAoJCQkJb25zZWxlY3QgPSBudWxsLAoJCQkJb3ZlcnJpZGVzID0gdHBfaW5zdC5fZGVmYXVsdHMuZXZudHMsCgkJCQlmbnMgPSB7fSwKCQkJCXByb3A7CgkJICAgIGlmICh0eXBlb2YgbmFtZSA9PSAnc3RyaW5nJykgeyAvLyBpZiBtaW4vbWF4IHdhcyBzZXQgd2l0aCB0aGUgc3RyaW5nCgkJICAgICAgICBpZiAobmFtZSA9PT0gJ21pbkRhdGUnIHx8IG5hbWUgPT09ICdtaW5EYXRlVGltZScpIHsKCQkgICAgICAgICAgICBtaW4gPSB2YWx1ZTsKCQkgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ21heERhdGUnIHx8IG5hbWUgPT09ICdtYXhEYXRlVGltZScpIHsKCQkgICAgICAgICAgICBtYXggPSB2YWx1ZTsKCQkgICAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ29uU2VsZWN0JykgewoJCSAgICAgICAgICAgIG9uc2VsZWN0ID0gdmFsdWU7CgkJICAgICAgICB9IGVsc2UgaWYgKG92ZXJyaWRlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgewoJCSAgICAgICAgICAgIGlmICh0eXBlb2YgKHZhbHVlKSA9PT0gJ3VuZGVmaW5lZCcpIHsKCQkgICAgICAgICAgICAgICAgcmV0dXJuIG92ZXJyaWRlc1tuYW1lXTsKCQkgICAgICAgICAgICB9CgkJICAgICAgICAgICAgZm5zW25hbWVdID0gdmFsdWU7CgkJICAgICAgICAgICAgbmFtZV9jbG9uZSA9IHt9OyAvL2VtcHR5IHJlc3VsdHMgaW4gZXhpdGluZyBmdW5jdGlvbiBhZnRlciBvdmVycmlkZXMgdXBkYXRlZAoJCSAgICAgICAgfQoJCSAgICB9IGVsc2UgaWYgKHR5cGVvZiBuYW1lID09ICdvYmplY3QnKSB7IC8vaWYgbWluL21heCB3YXMgc2V0IHdpdGggdGhlIEpTT04KCQkgICAgICAgIGlmIChuYW1lLm1pbkRhdGUpIHsKCQkgICAgICAgICAgICBtaW4gPSBuYW1lLm1pbkRhdGU7CgkJICAgICAgICB9IGVsc2UgaWYgKG5hbWUubWluRGF0ZVRpbWUpIHsKCQkgICAgICAgICAgICBtaW4gPSBuYW1lLm1pbkRhdGVUaW1lOwoJCSAgICAgICAgfSBlbHNlIGlmIChuYW1lLm1heERhdGUpIHsKCQkgICAgICAgICAgICBtYXggPSBuYW1lLm1heERhdGU7CgkJICAgICAgICB9IGVsc2UgaWYgKG5hbWUubWF4RGF0ZVRpbWUpIHsKCQkgICAgICAgICAgICBtYXggPSBuYW1lLm1heERhdGVUaW1lOwoJCSAgICAgICAgfQoJCSAgICAgICAgZm9yIChwcm9wIGluIG92ZXJyaWRlcykgewoJCSAgICAgICAgICAgIGlmIChvdmVycmlkZXMuaGFzT3duUHJvcGVydHkocHJvcCkgJiYgbmFtZVtwcm9wXSkgewoJCSAgICAgICAgICAgICAgICBmbnNbcHJvcF0gPSBuYW1lW3Byb3BdOwoJCSAgICAgICAgICAgIH0KCQkgICAgICAgIH0KCQkgICAgfQoJCSAgICBmb3IgKHByb3AgaW4gZm5zKSB7CgkJICAgICAgICBpZiAoZm5zLmhhc093blByb3BlcnR5KHByb3ApKSB7CgkJICAgICAgICAgICAgb3ZlcnJpZGVzW3Byb3BdID0gZm5zW3Byb3BdOwoJCSAgICAgICAgICAgIGlmICghbmFtZV9jbG9uZSkgeyBuYW1lX2Nsb25lID0gJC5leHRlbmQoe30sIG5hbWUpO30KCQkgICAgICAgICAgICBkZWxldGUgbmFtZV9jbG9uZVtwcm9wXTsKCQkgICAgICAgIH0KCQkgICAgfQoJCSAgICBpZiAobmFtZV9jbG9uZSAmJiBpc0VtcHR5T2JqZWN0KG5hbWVfY2xvbmUpKSB7IHJldHVybjsgfQoJCSAgICBpZiAobWluKSB7IC8vaWYgbWluIHdhcyBzZXQKCQkgICAgICAgIGlmIChtaW4gPT09IDApIHsKCQkgICAgICAgICAgICBtaW4gPSBuZXcgRGF0ZSgpOwoJCSAgICAgICAgfSBlbHNlIHsKCQkgICAgICAgICAgICBtaW4gPSBuZXcgRGF0ZShtaW4pOwoJCSAgICAgICAgfQoJCSAgICAgICAgdHBfaW5zdC5fZGVmYXVsdHMubWluRGF0ZSA9IG1pbjsKCQkgICAgICAgIHRwX2luc3QuX2RlZmF1bHRzLm1pbkRhdGVUaW1lID0gbWluOwoJCSAgICB9IGVsc2UgaWYgKG1heCkgeyAvL2lmIG1heCB3YXMgc2V0CgkJICAgICAgICBpZiAobWF4ID09PSAwKSB7CgkJICAgICAgICAgICAgbWF4ID0gbmV3IERhdGUoKTsKCQkgICAgICAgIH0gZWxzZSB7CgkJICAgICAgICAgICAgbWF4ID0gbmV3IERhdGUobWF4KTsKCQkgICAgICAgIH0KCQkgICAgICAgIHRwX2luc3QuX2RlZmF1bHRzLm1heERhdGUgPSBtYXg7CgkJICAgICAgICB0cF9pbnN0Ll9kZWZhdWx0cy5tYXhEYXRlVGltZSA9IG1heDsKCQkgICAgfSBlbHNlIGlmIChvbnNlbGVjdCkgewoJCSAgICAgICAgdHBfaW5zdC5fZGVmYXVsdHMub25TZWxlY3QgPSBvbnNlbGVjdDsKCQkgICAgfQoJCX0KCQlpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgewoJCQlyZXR1cm4gdGhpcy5fYmFzZV9vcHRpb25EYXRlcGlja2VyLmNhbGwoJC5kYXRlcGlja2VyLCB0YXJnZXQsIG5hbWUpOwoJCX0KCQlyZXR1cm4gdGhpcy5fYmFzZV9vcHRpb25EYXRlcGlja2VyLmNhbGwoJC5kYXRlcGlja2VyLCB0YXJnZXQsIG5hbWVfY2xvbmUgfHwgbmFtZSwgdmFsdWUpOwoJfTsKCS8qCgkqIGpRdWVyeSBpc0VtcHR5T2JqZWN0IGRvZXMgbm90IGNoZWNrIGhhc093blByb3BlcnR5IC0gaWYgc29tZW9uZSBoYXMgYWRkZWQgdG8gdGhlIG9iamVjdCBwcm90b3R5cGUsCgkqIGl0IHdpbGwgcmV0dXJuIGZhbHNlIGZvciBhbGwgb2JqZWN0cwoJKi8KCXZhciBpc0VtcHR5T2JqZWN0ID0gZnVuY3Rpb24ob2JqKSB7CgkJdmFyIHByb3A7CgkJZm9yIChwcm9wIGluIG9iaikgewoJCQlpZiAob2JqLmhhc093blByb3BlcnR5KG9iaikpIHsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX07CgoJLyoKCSogalF1ZXJ5IGV4dGVuZCBub3cgaWdub3JlcyBudWxscyEKCSovCgl2YXIgZXh0ZW5kUmVtb3ZlID0gZnVuY3Rpb24odGFyZ2V0LCBwcm9wcykgewoJCSQuZXh0ZW5kKHRhcmdldCwgcHJvcHMpOwoJCWZvciAodmFyIG5hbWUgaW4gcHJvcHMpIHsKCQkJaWYgKHByb3BzW25hbWVdID09PSBudWxsIHx8IHByb3BzW25hbWVdID09PSB1bmRlZmluZWQpIHsKCQkJCXRhcmdldFtuYW1lXSA9IHByb3BzW25hbWVdOwoJCQl9CgkJfQoJCXJldHVybiB0YXJnZXQ7Cgl9OwoKCS8qCgkqIERldGVybWluZSBieSB0aGUgdGltZSBmb3JtYXQgaWYgc2hvdWxkIHVzZSBhbXBtCgkqIFJldHVybnMgdHJ1ZSBpZiBzaG91bGQgdXNlIGFtcG0sIGZhbHNlIGlmIG5vdAoJKi8KCXZhciB1c2VBbXBtID0gZnVuY3Rpb24odGltZUZvcm1hdCl7CgkJcmV0dXJuICh0aW1lRm9ybWF0LmluZGV4T2YoJ3QnKSAhPT0gLTEgJiYgdGltZUZvcm1hdC5pbmRleE9mKCdoJykgIT09IC0xKTsKCX07CgoJLyoKCSogQ29udmVydHMgMjQgaG91ciBmb3JtYXQgaW50byAxMiBob3VyCgkqIFJldHVybnMgMTIgaG91ciB3aXRob3V0IGxlYWRpbmcgMAoJKi8KCXZhciBjb252ZXJ0MjR0bzEyID0gZnVuY3Rpb24oaG91cikgewoJCWlmIChob3VyID4gMTIpIHsKCQkJaG91ciA9IGhvdXIgLSAxMjsKCQl9CgoJCWlmIChob3VyID09IDApIHsKCQkJaG91ciA9IDEyOwoJCX0KCgkJcmV0dXJuIFN0cmluZyhob3VyKTsKCX07CgoJLyoKCSogU3BsaXRzIGRhdGV0aW1lIHN0cmluZyBpbnRvIGRhdGUgYW5zIHRpbWUgc3Vic3RyaW5ncy4KCSogVGhyb3dzIGV4Y2VwdGlvbiB3aGVuIGRhdGUgY2FuJ3QgYmUgcGFyc2VkCgkqIFJldHVybnMgW2RhdGVTdHJpbmcsIHRpbWVTdHJpbmddCgkqLwoJdmFyIHNwbGl0RGF0ZVRpbWUgPSBmdW5jdGlvbihkYXRlRm9ybWF0LCBkYXRlVGltZVN0cmluZywgZGF0ZVNldHRpbmdzLCB0aW1lU2V0dGluZ3MpIHsKCQl0cnkgewoJCQkvLyBUaGUgaWRlYSBpcyB0byBnZXQgdGhlIG51bWJlciBzZXBhcmF0b3Igb2NjdXJhbmNlcyBpbiBkYXRldGltZSBhbmQgdGhlIHRpbWUgZm9ybWF0IHJlcXVlc3RlZCAoc2luY2UgdGltZSBoYXMgCgkJCS8vIGZld2VyIHVua25vd25zLCBtb3N0bHkgbnVtYmVycyBhbmQgYW0vcG0pLiBXZSB3aWxsIHVzZSB0aGUgdGltZSBwYXR0ZXJuIHRvIHNwbGl0LgoJCQl2YXIgc2VwYXJhdG9yID0gdGltZVNldHRpbmdzICYmIHRpbWVTZXR0aW5ncy5zZXBhcmF0b3IgPyB0aW1lU2V0dGluZ3Muc2VwYXJhdG9yIDogJC50aW1lcGlja2VyLl9kZWZhdWx0cy5zZXBhcmF0b3IsCgkJCQlmb3JtYXQgPSB0aW1lU2V0dGluZ3MgJiYgdGltZVNldHRpbmdzLnRpbWVGb3JtYXQgPyB0aW1lU2V0dGluZ3MudGltZUZvcm1hdCA6ICQudGltZXBpY2tlci5fZGVmYXVsdHMudGltZUZvcm1hdCwKCQkJCXRpbWVQYXJ0cyA9IGZvcm1hdC5zcGxpdChzZXBhcmF0b3IpLCAvLyBob3cgbWFueSBvY2N1cmFuY2VzIG9mIHNlcGFyYXRvciBtYXkgYmUgaW4gb3VyIGZvcm1hdD8KCQkJCXRpbWVQYXJ0c0xlbiA9IHRpbWVQYXJ0cy5sZW5ndGgsCgkJCQlhbGxQYXJ0cyA9IGRhdGVUaW1lU3RyaW5nLnNwbGl0KHNlcGFyYXRvciksCgkJCQlhbGxQYXJ0c0xlbiA9IGFsbFBhcnRzLmxlbmd0aDsKCgkJCWlmIChhbGxQYXJ0c0xlbiA+IDEpIHsKCQkJCXJldHVybiBbCgkJCQkJCWFsbFBhcnRzLnNwbGljZSgwLGFsbFBhcnRzTGVuLXRpbWVQYXJ0c0xlbikuam9pbihzZXBhcmF0b3IpLAoJCQkJCQlhbGxQYXJ0cy5zcGxpY2UoMCx0aW1lUGFydHNMZW4pLmpvaW4oc2VwYXJhdG9yKQoJCQkJCV07CgkJCX0KCgkJfSBjYXRjaCAoZXJyKSB7CgkJCSQuZGF0ZXBpY2tlci5sb2coJ0NvdWxkIG5vdCBzcGxpdCB0aGUgZGF0ZSBmcm9tIHRoZSB0aW1lLiBQbGVhc2UgY2hlY2sgdGhlIGZvbGxvd2luZyBkYXRldGltZXBpY2tlciBvcHRpb25zJyArCgkJCQkJIlxudGhyb3duIGVycm9yOiAiICsgZXJyICsKCQkJCQkiXG5kYXRlVGltZVN0cmluZyIgKyBkYXRlVGltZVN0cmluZyArCgkJCQkJIlxuZGF0ZUZvcm1hdCA9ICIgKyBkYXRlRm9ybWF0ICsKCQkJCQkiXG5zZXBhcmF0b3IgPSAiICsgdGltZVNldHRpbmdzLnNlcGFyYXRvciArCgkJCQkJIlxudGltZUZvcm1hdCA9ICIgKyB0aW1lU2V0dGluZ3MudGltZUZvcm1hdCk7CgoJCQlpZiAoZXJyLmluZGV4T2YoIjoiKSA+PSAwKSB7CgkJCQkvLyBIYWNrISAgVGhlIGVycm9yIG1lc3NhZ2UgZW5kcyB3aXRoIGEgY29sb24sIGEgc3BhY2UsIGFuZAoJCQkJLy8gdGhlICJleHRyYSIgY2hhcmFjdGVycy4gIFdlIHJlbHkgb24gdGhhdCBpbnN0ZWFkIG9mCgkJCQkvLyBhdHRlbXB0aW5nIHRvIHBlcmZlY3RseSByZXByb2R1Y2UgdGhlIHBhcnNpbmcgYWxnb3JpdGhtLgoJCQkJdmFyIGRhdGVTdHJpbmdMZW5ndGggPSBkYXRlVGltZVN0cmluZy5sZW5ndGggLSAoZXJyLmxlbmd0aCAtIGVyci5pbmRleE9mKCc6JykgLSAyKSwKCQkJCQl0aW1lU3RyaW5nID0gZGF0ZVRpbWVTdHJpbmcuc3Vic3RyaW5nKGRhdGVTdHJpbmdMZW5ndGgpOwoKCQkJCXJldHVybiBbJC50cmltKGRhdGVUaW1lU3RyaW5nLnN1YnN0cmluZygwLCBkYXRlU3RyaW5nTGVuZ3RoKSksICQudHJpbShkYXRlVGltZVN0cmluZy5zdWJzdHJpbmcoZGF0ZVN0cmluZ0xlbmd0aCkpXTsKCgkJCX0gZWxzZSB7CgkJCQl0aHJvdyBlcnI7CgkJCX0KCQl9CgkJcmV0dXJuIFtkYXRlVGltZVN0cmluZywgJyddOwoJfTsKCgkvKgoJKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBwYXJzZSBkYXRldGltZSBpbnRlcnZhbAoJKiBSZXR1cm5zOiB7ZGF0ZTogRGF0ZSwgdGltZU9iajogT2JqZWN0fSwgd2hlcmUKCSogICBkYXRlIC0gcGFyc2VkIGRhdGUgd2l0aG91dCB0aW1lICh0eXBlIERhdGUpCgkqICAgdGltZU9iaiA9IHtob3VyOiAsIG1pbnV0ZTogLCBzZWNvbmQ6ICwgbWlsbGlzZWM6IH0gLSBwYXJzZWQgdGltZS4gT3B0aW9uYWwKCSovCgl2YXIgcGFyc2VEYXRlVGltZUludGVybmFsID0gZnVuY3Rpb24oZGF0ZUZvcm1hdCwgdGltZUZvcm1hdCwgZGF0ZVRpbWVTdHJpbmcsIGRhdGVTZXR0aW5ncywgdGltZVNldHRpbmdzKSB7CgkJdmFyIGRhdGU7CgkJdmFyIHNwbGl0UmVzID0gc3BsaXREYXRlVGltZShkYXRlRm9ybWF0LCBkYXRlVGltZVN0cmluZywgZGF0ZVNldHRpbmdzLCB0aW1lU2V0dGluZ3MpOwoJCWRhdGUgPSAkLmRhdGVwaWNrZXIuX2Jhc2VfcGFyc2VEYXRlKGRhdGVGb3JtYXQsIHNwbGl0UmVzWzBdLCBkYXRlU2V0dGluZ3MpOwoJCWlmIChzcGxpdFJlc1sxXSAhPT0gJycpIHsKCQkJdmFyIHRpbWVTdHJpbmcgPSBzcGxpdFJlc1sxXSwKCQkJCXBhcnNlZFRpbWUgPSAkLmRhdGVwaWNrZXIucGFyc2VUaW1lKHRpbWVGb3JtYXQsIHRpbWVTdHJpbmcsIHRpbWVTZXR0aW5ncyk7CgoJCQlpZiAocGFyc2VkVGltZSA9PT0gbnVsbCkgewoJCQkJdGhyb3cgJ1dyb25nIHRpbWUgZm9ybWF0JzsKCQkJfQoJCQlyZXR1cm4gewoJCQkJZGF0ZTogZGF0ZSwKCQkJCXRpbWVPYmo6IHBhcnNlZFRpbWUKCQkJfTsKCQl9IGVsc2UgewoJCQlyZXR1cm4gewoJCQkJZGF0ZTogZGF0ZQoJCQl9OwoJCX0KCX07CgoJLyoKCSogSW50ZXJuYWwgZnVuY3Rpb24gdG8gc2V0IHRpbWV6b25lX3NlbGVjdCB0byB0aGUgbG9jYWwgdGltZXpvbmUKCSovCgl2YXIgc2VsZWN0TG9jYWxUaW1lWm9uZSA9IGZ1bmN0aW9uKHRwX2luc3QsIGRhdGUpIHsKCQlpZiAodHBfaW5zdCAmJiB0cF9pbnN0LnRpbWV6b25lX3NlbGVjdCkgewoJCQl0cF9pbnN0Ll9kZWZhdWx0cy51c2VMb2NhbFRpbWV6b25lID0gdHJ1ZTsKCQkJdmFyIG5vdyA9IHR5cGVvZiBkYXRlICE9PSAndW5kZWZpbmVkJyA/IGRhdGUgOiBuZXcgRGF0ZSgpOwoJCQl2YXIgdHpvZmZzZXQgPSAkLnRpbWVwaWNrZXIudGltZVpvbmVPZmZzZXRTdHJpbmcobm93KTsKCQkJaWYgKHRwX2luc3QuX2RlZmF1bHRzLnRpbWV6b25lSXNvODYwMSkgewoJCQkJdHpvZmZzZXQgPSB0em9mZnNldC5zdWJzdHJpbmcoMCwgMykgKyAnOicgKyB0em9mZnNldC5zdWJzdHJpbmcoMyk7CgkJCX0KCQkJdHBfaW5zdC50aW1lem9uZV9zZWxlY3QudmFsKHR6b2Zmc2V0KTsKCQl9Cgl9OwoKCS8qCgkqIENyZWF0ZSBhIFNpbmdsZXRvbiBJbnNhbmNlCgkqLwoJJC50aW1lcGlja2VyID0gbmV3IFRpbWVwaWNrZXIoKTsKCgkvKioKCSAqIEdldCB0aGUgdGltZXpvbmUgb2Zmc2V0IGFzIHN0cmluZyBmcm9tIGEgZGF0ZSBvYmplY3QgKGVnICcrMDUzMCcgZm9yIFVUQys1LjUpCgkgKiBAcGFyYW0gIGRhdGUKCSAqIEByZXR1cm4gc3RyaW5nCgkgKi8KCSQudGltZXBpY2tlci50aW1lWm9uZU9mZnNldFN0cmluZyA9IGZ1bmN0aW9uKGRhdGUpIHsKCQl2YXIgb2ZmID0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpICogLTEsCgkJCW1pbnV0ZXMgPSBvZmYgJSA2MCwKCQkJaG91cnMgPSAob2ZmIC0gbWludXRlcykgLyA2MDsKCQlyZXR1cm4gKG9mZiA+PSAwID8gJysnIDogJy0nKSArICgnMCcgKyAoaG91cnMgKiAxMDEpLnRvU3RyaW5nKCkpLnN1YnN0cigtMikgKyAoJzAnICsgKG1pbnV0ZXMgKiAxMDEpLnRvU3RyaW5nKCkpLnN1YnN0cigtMik7Cgl9OwoKCS8qKgoJICogQ2FsbHMgYHRpbWVwaWNrZXIoKWAgb24gdGhlIGBzdGFydFRpbWVgIGFuZCBgZW5kVGltZWAgZWxlbWVudHMsIGFuZCBjb25maWd1cmVzIHRoZW0gdG8KCSAqIGVuZm9yY2UgZGF0ZSByYW5nZSBsaW1pdHMuCgkgKiBuLmIuIFRoZSBpbnB1dCB2YWx1ZSBtdXN0IGJlIGNvcnJlY3RseSBmb3JtYXR0ZWQgKHJlZm9ybWF0dGluZyBpcyBub3Qgc3VwcG9ydGVkKQoJICogQHBhcmFtICBFbGVtZW50IHN0YXJ0VGltZQoJICogQHBhcmFtICBFbGVtZW50IGVuZFRpbWUKCSAqIEBwYXJhbSAgb2JqIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIHRpbWVwaWNrZXIoKSBjYWxsCgkgKiBAcmV0dXJuIGpRdWVyeQoJICovCgkkLnRpbWVwaWNrZXIudGltZVJhbmdlID0gZnVuY3Rpb24oc3RhcnRUaW1lLCBlbmRUaW1lLCBvcHRpb25zKSB7CgkJcmV0dXJuICQudGltZXBpY2tlci5oYW5kbGVSYW5nZSgndGltZXBpY2tlcicsIHN0YXJ0VGltZSwgZW5kVGltZSwgb3B0aW9ucyk7Cgl9OwoKCS8qKgoJICogQ2FsbHMgYGRhdGV0aW1lcGlja2VyYCBvbiB0aGUgYHN0YXJ0VGltZWAgYW5kIGBlbmRUaW1lYCBlbGVtZW50cywgYW5kIGNvbmZpZ3VyZXMgdGhlbSB0bwoJICogZW5mb3JjZSBkYXRlIHJhbmdlIGxpbWl0cy4KCSAqIEBwYXJhbSAgRWxlbWVudCBzdGFydFRpbWUKCSAqIEBwYXJhbSAgRWxlbWVudCBlbmRUaW1lCgkgKiBAcGFyYW0gIG9iaiBvcHRpb25zIE9wdGlvbnMgZm9yIHRoZSBgdGltZXBpY2tlcigpYCBjYWxsLiBBbHNvIHN1cHBvcnRzIGByZWZvcm1hdGAsCgkgKiAgIGEgYm9vbGVhbiB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlZm9ybWF0IHRoZSBpbnB1dCB2YWx1ZXMgdG8gdGhlIGBkYXRlRm9ybWF0YC4KCSAqIEBwYXJhbSAgc3RyaW5nIG1ldGhvZCBDYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSB0eXBlIG9mIHBpY2tlciB0byBiZSBhZGRlZAoJICogQHJldHVybiBqUXVlcnkKCSAqLwoJJC50aW1lcGlja2VyLmRhdGVUaW1lUmFuZ2UgPSBmdW5jdGlvbihzdGFydFRpbWUsIGVuZFRpbWUsIG9wdGlvbnMpIHsKCQkkLnRpbWVwaWNrZXIuZGF0ZVJhbmdlKHN0YXJ0VGltZSwgZW5kVGltZSwgb3B0aW9ucywgJ2RhdGV0aW1lcGlja2VyJyk7Cgl9OwoKCS8qKgoJICogQ2FsbHMgYG1ldGhvZGAgb24gdGhlIGBzdGFydFRpbWVgIGFuZCBgZW5kVGltZWAgZWxlbWVudHMsIGFuZCBjb25maWd1cmVzIHRoZW0gdG8KCSAqIGVuZm9yY2UgZGF0ZSByYW5nZSBsaW1pdHMuCgkgKiBAcGFyYW0gIEVsZW1lbnQgc3RhcnRUaW1lCgkgKiBAcGFyYW0gIEVsZW1lbnQgZW5kVGltZQoJICogQHBhcmFtICBvYmogb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgYHRpbWVwaWNrZXIoKWAgY2FsbC4gQWxzbyBzdXBwb3J0cyBgcmVmb3JtYXRgLAoJICogICBhIGJvb2xlYW4gdmFsdWUgdGhhdCBjYW4gYmUgdXNlZCB0byByZWZvcm1hdCB0aGUgaW5wdXQgdmFsdWVzIHRvIHRoZSBgZGF0ZUZvcm1hdGAuCgkgKiBAcGFyYW0gIHN0cmluZyBtZXRob2QgQ2FuIGJlIHVzZWQgdG8gc3BlY2lmeSB0aGUgdHlwZSBvZiBwaWNrZXIgdG8gYmUgYWRkZWQKCSAqIEByZXR1cm4galF1ZXJ5CgkgKi8KCSQudGltZXBpY2tlci5kYXRlUmFuZ2UgPSBmdW5jdGlvbihzdGFydFRpbWUsIGVuZFRpbWUsIG9wdGlvbnMsIG1ldGhvZCkgewoJCW1ldGhvZCA9IG1ldGhvZCB8fCAnZGF0ZXBpY2tlcic7CgkJJC50aW1lcGlja2VyLmhhbmRsZVJhbmdlKG1ldGhvZCwgc3RhcnRUaW1lLCBlbmRUaW1lLCBvcHRpb25zKTsKCX07CgoJLyoqCgkgKiBDYWxscyBgbWV0aG9kYCBvbiB0aGUgYHN0YXJ0VGltZWAgYW5kIGBlbmRUaW1lYCBlbGVtZW50cywgYW5kIGNvbmZpZ3VyZXMgdGhlbSB0bwoJICogZW5mb3JjZSBkYXRlIHJhbmdlIGxpbWl0cy4KCSAqIEBwYXJhbSAgc3RyaW5nIG1ldGhvZCBDYW4gYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSB0eXBlIG9mIHBpY2tlciB0byBiZSBhZGRlZAoJICogQHBhcmFtICBFbGVtZW50IHN0YXJ0VGltZQoJICogQHBhcmFtICBFbGVtZW50IGVuZFRpbWUKCSAqIEBwYXJhbSAgb2JqIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIGB0aW1lcGlja2VyKClgIGNhbGwuIEFsc28gc3VwcG9ydHMgYHJlZm9ybWF0YCwKCSAqICAgYSBib29sZWFuIHZhbHVlIHRoYXQgY2FuIGJlIHVzZWQgdG8gcmVmb3JtYXQgdGhlIGlucHV0IHZhbHVlcyB0byB0aGUgYGRhdGVGb3JtYXRgLgoJICogQHJldHVybiBqUXVlcnkKCSAqLwoJJC50aW1lcGlja2VyLmhhbmRsZVJhbmdlID0gZnVuY3Rpb24obWV0aG9kLCBzdGFydFRpbWUsIGVuZFRpbWUsIG9wdGlvbnMpIHsKCQkkLmZuW21ldGhvZF0uY2FsbChzdGFydFRpbWUsICQuZXh0ZW5kKHsKCQkJb25DbG9zZTogZnVuY3Rpb24oZGF0ZVRleHQsIGluc3QpIHsKCQkJCWNoZWNrRGF0ZXModGhpcywgZW5kVGltZSwgZGF0ZVRleHQpOwoJCQl9LAoJCQlvblNlbGVjdDogZnVuY3Rpb24oc2VsZWN0ZWREYXRlVGltZSkgewoJCQkJc2VsZWN0ZWQodGhpcywgZW5kVGltZSwgJ21pbkRhdGUnKTsKCQkJfQoJCX0sIG9wdGlvbnMsIG9wdGlvbnMuc3RhcnQpKTsKCQkkLmZuW21ldGhvZF0uY2FsbChlbmRUaW1lLCAkLmV4dGVuZCh7CgkJCW9uQ2xvc2U6IGZ1bmN0aW9uKGRhdGVUZXh0LCBpbnN0KSB7CgkJCQljaGVja0RhdGVzKHRoaXMsIHN0YXJ0VGltZSwgZGF0ZVRleHQpOwoJCQl9LAoJCQlvblNlbGVjdDogZnVuY3Rpb24oc2VsZWN0ZWREYXRlVGltZSkgewoJCQkJc2VsZWN0ZWQodGhpcywgc3RhcnRUaW1lLCAnbWF4RGF0ZScpOwoJCQl9CgkJfSwgb3B0aW9ucywgb3B0aW9ucy5lbmQpKTsKCQkvLyB0aW1lcGlja2VyIGRvZXNuJ3QgcHJvdmlkZSBhY2Nlc3MgdG8gaXRzICd0aW1lRm9ybWF0JyBvcHRpb24sIAoJCS8vIG5vciBjb3VsZCBJIGdldCBkYXRlcGlja2VyLmZvcm1hdFRpbWUoKSB0byBiZWhhdmUgd2l0aCB0aW1lcywgc28gSQoJCS8vIGhhdmUgZGlzYWJsZWQgcmVmb3JtYXR0aW5nIGZvciB0aW1lcGlja2VyCgkJaWYgKG1ldGhvZCAhPSAndGltZXBpY2tlcicgJiYgb3B0aW9ucy5yZWZvcm1hdCkgewoJCQkkKFtzdGFydFRpbWUsIGVuZFRpbWVdKS5lYWNoKGZ1bmN0aW9uKCkgewoJCQkJdmFyIGZvcm1hdCA9ICQodGhpcylbbWV0aG9kXS5jYWxsKCQodGhpcyksICdvcHRpb24nLCAnZGF0ZUZvcm1hdCcpLAoJCQkJCWRhdGUgPSBuZXcgRGF0ZSgkKHRoaXMpLnZhbCgpKTsKCQkJCWlmICgkKHRoaXMpLnZhbCgpICYmIGRhdGUpIHsKCQkJCQkkKHRoaXMpLnZhbCgkLmRhdGVwaWNrZXIuZm9ybWF0RGF0ZShmb3JtYXQsIGRhdGUpKTsKCQkJCX0KCQkJfSk7CgkJfQoJCWNoZWNrRGF0ZXMoc3RhcnRUaW1lLCBlbmRUaW1lLCBzdGFydFRpbWUudmFsKCkpOwoKCQlmdW5jdGlvbiBjaGVja0RhdGVzKGNoYW5nZWQsIG90aGVyLCBkYXRlVGV4dCkgewoJCQlpZiAob3RoZXIudmFsKCkgJiYgKG5ldyBEYXRlKHN0YXJ0VGltZS52YWwoKSkgPiBuZXcgRGF0ZShlbmRUaW1lLnZhbCgpKSkpIHsKCQkJCW90aGVyLnZhbChkYXRlVGV4dCk7CgkJCX0KCQl9CgkJc2VsZWN0ZWQoc3RhcnRUaW1lLCBlbmRUaW1lLCAnbWluRGF0ZScpOwoJCXNlbGVjdGVkKGVuZFRpbWUsIHN0YXJ0VGltZSwgJ21heERhdGUnKTsKCgkJZnVuY3Rpb24gc2VsZWN0ZWQoY2hhbmdlZCwgb3RoZXIsIG9wdGlvbikgewoJCQlpZiAoISQoY2hhbmdlZCkudmFsKCkpIHsKCQkJCXJldHVybjsKCQkJfQoJCQl2YXIgZGF0ZSA9ICQoY2hhbmdlZClbbWV0aG9kXS5jYWxsKCQoY2hhbmdlZCksICdnZXREYXRlJyk7CgkJCS8vIHRpbWVwaWNrZXIgZG9lc24ndCBpbXBsZW1lbnQgJ2dldERhdGUnIGFuZCByZXR1cm5zIGEgalF1ZXJ5CgkJCWlmIChkYXRlLmdldFRpbWUpIHsKCQkJCSQob3RoZXIpW21ldGhvZF0uY2FsbCgkKG90aGVyKSwgJ29wdGlvbicsIG9wdGlvbiwgZGF0ZSk7CgkJCX0KCQl9CgkJcmV0dXJuICQoW3N0YXJ0VGltZS5nZXQoMCksIGVuZFRpbWUuZ2V0KDApXSk7Cgl9OwoKCS8qCgkqIEtlZXAgdXAgd2l0aCB0aGUgdmVyc2lvbgoJKi8KCSQudGltZXBpY2tlci52ZXJzaW9uID0gIjEuMS4xIjsKCn0pKGpRdWVyeSk7]]></data>
	</file>
	<file>
	  <filename>/lib/js/mColorPicker.min.js</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[77u/LyoNCiAgbUNvbG9yUGlja2VyDQogIFZlcnNpb246IDEuMCByMzkNCg0KICBDb3B5cmlnaHQgKGMpIDIwMTAgTWV0YTEwMCBMTEMuDQogIGh0dHA6Ly93d3cubWV0YTEwMC5jb20vDQoNCiAgTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlDQogIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwDQoqLw0KIWZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlLGY9YShkb2N1bWVudCksZz1hKCI8ZGl2PiIpLGg9YSgiPGRpdj4iKSxpPWEoIjxkaXY+Iiksaj1hKCI8aW5wdXQ+Iiksaz0vXnJnYlthXT9cKChcZCspLFxzKihcZCspLFxzKihcZCspKCxccyooXGQrXC5cZCspKik/XCkvLGw9LyhbYS1mMC05XSkoW2EtZjAtOV0pKFthLWYwLTldKS8sbT0vI1thLWYwLTldezN9LyxuPS8jW2EtZjAtOV17Nn0vO2EuZm4ubUNvbG9yUGlja2VyPWZ1bmN0aW9uKGQpe3ZhciBlPWEuZm4ubUNvbG9yUGlja2VyLmdldENvb2tpZSgic3dhdGNoZXMiKTtyZXR1cm4gYj1hLmV4dGVuZChhLmZuLm1Db2xvclBpY2tlci5kZWZhdWx0cyxkKSxhLmZuLm1Db2xvclBpY2tlci5kZWZhdWx0cy5zd2F0Y2hlcy5jb25jYXQoYi5zd2F0Y2hlcykuc2xpY2UoLTEwKSxjLmVuaGFuY2VkU3dhdGNoZXMmJmUmJihiLnN3YXRjaGVzPWUuc3BsaXQoInx8IikuY29uY2F0KGIuc3dhdGNoZXMpLnNsaWNlKDAsMTApfHxiLnN3YXRjaGVzKSxhKCJkaXYjbUNvbG9yUGlja2VyIikubGVuZ3RofHxhLmZuLm1Db2xvclBpY2tlci5kcmF3UGlja2VyKCksYSgiI2Nzc19kaXNhYmxlZF9jb2xvcl9waWNrZXIiKS5sZW5ndGh8fGEoImhlYWQiKS5wcmVwZW5kKCc8bWV0YSBkYXRhLXJlbW92ZS1tZT0idHJ1ZSIvPjxzdHlsZSBpZD0iY3NzX2Rpc2FibGVkX2NvbG9yX3BpY2tlciIgdHlwZT0idGV4dC9jc3MiPi5tQ29sb3JQaWNrZXJbZGlzYWJsZWRdICsgc3BhbiwgLm1Db2xvclBpY2tlcltkaXNhYmxlZD0iZGlzYWJsZWQiXSArIHNwYW4sIC5tQ29sb3JQaWNrZXJbZGlzYWJsZWQ9InRydWUiXSArIHNwYW4ge2ZpbHRlcjphbHBoYShvcGFjaXR5PTUwKTstbW96LW9wYWNpdHk6MC41Oy13ZWJraXQtb3BhY2l0eTowLjU7LWtodG1sLW9wYWNpdHk6IDAuNTtvcGFjaXR5OiAwLjU7Y3Vyc29yOmRlZmF1bHQ7fTwvc3R5bGU+JyksYSgibWV0YVtkYXRhLXJlbW92ZS1tZT10cnVlXSIpLnJlbW92ZSgpLHRoaXMuZWFjaChhLmZuLm1Db2xvclBpY2tlci5kcmF3UGlja2VyVHJpZ2dlcnMpLHRoaXN9LGEuZm4ubUNvbG9yUGlja2VyLmluaXQ9e3JlcGxhY2U6Ilt0eXBlPWNvbG9yXSIsaW5kZXg6MCxlbmhhbmNlZFN3YXRjaGVzOiEwLGFsbG93VHJhbnNwYXJlbmN5OiEwLHNsb2dhbjoiTWV0YTEwMCAtIERlc2lnbmluZyBGdW4iLHNob3dMb2dvOiEwfSxhLmZuLm1Db2xvclBpY2tlci5kZWZhdWx0cz17Y3VycmVudElkOiExLGN1cnJlbnRJbnB1dDohMSxjdXJyZW50Q29sb3I6ITEsY2hhbmdlQ29sb3I6ITEsY29sb3I6ITEsaW1hZ2VGb2xkZXI6ImltYWdlcy8iLHN3YXRjaGVzOiIjZmZmZmZmLCNmZmZmMDAsIzAwZmYwMCwjMDBmZmZmLCMwMDAwZmYsI2ZmMDBmZiwjZmYwMDAwLCM0YzJiMTEsIzNiM2IzYiwjMDAwMDAwIi5zcGxpdCgiLCIpfSxhLmZuLm1Db2xvclBpY2tlci5zdGFydD1mdW5jdGlvbigpe2EoJ2lucHV0W2RhdGEtbWNvbG9ycGlja2VyIT0idHJ1ZSJdJykuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIlt0eXBlPWNvbG9yXSI9PWMucmVwbGFjZT8iY29sb3IiPT10aGlzLmdldEF0dHJpYnV0ZSgidHlwZSIpOmEodGhpcykuaXMoYy5yZXBsYWNlKX0pLm1Db2xvclBpY2tlcigpfSxhLmZuLm1Db2xvclBpY2tlci5ldmVudHM9ZnVuY3Rpb24oKXthKCIjbUNvbG9yUGlja2VyQmciKS5saXZlKCJjbGljayIsYS5mbi5tQ29sb3JQaWNrZXIuY2xvc2VQaWNrZXIpLGEoIi5tQ29sb3JQaWNrZXIiKS5saXZlKCJrZXl1cCIsZnVuY3Rpb24oKXt0cnl7YSh0aGlzKS5jc3MoeyJiYWNrZ3JvdW5kLWNvbG9yIjphKHRoaXMpLnZhbCgpfSkuY3NzKHtjb2xvcjphLmZuLm1Db2xvclBpY2tlci50ZXh0Q29sb3IoYSh0aGlzKS5jc3MoImJhY2tncm91bmQtY29sb3IiKSl9KS50cmlnZ2VyKCJjaGFuZ2UiKX1jYXRjaChhKXt9fSksYSgiLm1Db2xvclBpY2tlclRyaWdnZXIiKS5saXZlKCJjbGljayIsYS5mbi5tQ29sb3JQaWNrZXIuY29sb3JTaG93KSxhKCIubUNvbG9yLCAubVBhc3RDb2xvciIpLmxpdmUoIm1vdXNlbW92ZSIsZnVuY3Rpb24oYyl7aWYoIWIuY2hhbmdlQ29sb3IpcmV0dXJuITE7dmFyIGQ9YSh0aGlzKSxlPWQub2Zmc2V0KCksZj1iLmN1cnJlbnRJbnB1dCxmPWYuYXR0cigiZGF0YS1oZXgiKXx8Zi5hdHRyKCJoZXgiKTtiLmNvbG9yPWQuY3NzKCJiYWNrZ3JvdW5kLWNvbG9yIiksZC5oYXNDbGFzcygibVBhc3RDb2xvciIpP2IuY29sb3I9YS5mbi5tQ29sb3JQaWNrZXIuc2V0Q29sb3IoYi5jb2xvcixmKTpkLmhhc0NsYXNzKCJtQ29sb3JUcmFuc3BhcmVudCIpP2IuY29sb3I9InRyYW5zcGFyZW50IjpkLmhhc0NsYXNzKCJtUGFzdENvbG9yIil8fChiLmNvbG9yPWEuZm4ubUNvbG9yUGlja2VyLndoaWNoQ29sb3IoYy5wYWdlWC1lLmxlZnQsYy5wYWdlWS1lLnRvcCxmKSksYi5jdXJyZW50SW5wdXQubVNldElucHV0Q29sb3IoYi5jb2xvcil9KS5saXZlKCJjbGljayIsYS5mbi5tQ29sb3JQaWNrZXIuY29sb3JQaWNrZWQpLGEoIiNtQ29sb3JQaWNrZXJJbnB1dCIpLmxpdmUoImtleXVwIixmdW5jdGlvbihjKXt0cnl7Yi5jb2xvcj1hKHRoaXMpLnZhbCgpLGIuY3VycmVudElucHV0Lm1TZXRJbnB1dENvbG9yKGIuY29sb3IpLDEzPT1jLndoaWNoJiZhLmZuLm1Db2xvclBpY2tlci5jb2xvclBpY2tlZCgpfWNhdGNoKGEpe319KS5saXZlKCJibHVyIixmdW5jdGlvbigpe2IuY3VycmVudElucHV0Lm1TZXRJbnB1dENvbG9yKGIuY29sb3IpfSksYSgiI21Db2xvclBpY2tlcldyYXBwZXIiKS5saXZlKCJtb3VzZWxlYXZlIixmdW5jdGlvbigpe2lmKCFiLmNoYW5nZUNvbG9yKXJldHVybiExO3ZhciBjPWIuY3VycmVudElucHV0O2IuY3VycmVudElucHV0Lm1TZXRJbnB1dENvbG9yKGEuZm4ubUNvbG9yUGlja2VyLnNldENvbG9yKGIuY3VycmVudENvbG9yLGMuYXR0cigiZGF0YS1oZXgiKXx8Yy5hdHRyKCJoZXgiKSkpfSl9LGEuZm4ubUNvbG9yUGlja2VyLmRyYXdQaWNrZXJUcmlnZ2Vycz1mdW5jdGlvbigpe3ZhciBkPWEodGhpcyksZj1kLmF0dHIoImlkIil8fCJjb2xvcl8iK2MuaW5kZXgrKyxnPSJoaWRkZW4iPT1kLmF0dHIoInRleHQiKXx8ImhpZGRlbiI9PWQuYXR0cigiZGF0YS10ZXh0IiksaD1hLmZuLm1Db2xvclBpY2tlci5zZXRDb2xvcihkLnZhbCgpLGQuYXR0cigiZGF0YS1oZXgiKXx8ZC5hdHRyKCJoZXgiKSksaT1kLndpZHRoKCksaj1kLmhlaWdodCgpLGs9ZC5jc3MoImZsb2F0IiksbD1hKCI8c3Bhbj4iKSxtPWEoIjxzcGFuPiIpLG49IiI7cmV0dXJuIGwuYXR0cih7aWQ6ImNvbG9yX3dvcmtfYXJlYSIsY2xhc3M6Im1Db2xvclBpY2tlcklucHV0In0pLmFwcGVuZFRvKGUpLG0uYXR0cih7aWQ6Im1jcF8iK2YsY2xhc3M6Im1Db2xvclBpY2tlclRyaWdnZXIifSkuY3NzKHtkaXNwbGF5OiJpbmxpbmUtYmxvY2siLGN1cnNvcjoicG9pbnRlciJ9KS5pbnNlcnRBZnRlcihkKSxhKCI8aW1nPiIpLmF0dHIoe3NyYzpiLmltYWdlRm9sZGVyKyJjb2xvci5wbmcifSkuY3NzKHtib3JkZXI6MCxtYXJnaW46IjAgMCAwIDNweCIsInZlcnRpY2FsLWFsaWduIjoidGV4dC1ib3R0b20ifSkuYXBwZW5kVG8obSksbC5hcHBlbmQoZCksbj1sLmh0bWwoKS5yZXBsYWNlKC90eXBlPVteYS16IF0qY29sb3JbXmEteiBcL1wvPl0qL2dpLCd0eXBlPSInKyhnPyJoaWRkZW4iOiJ0ZXh0IikrJyInKSxsLmh0bWwoIiIpLnJlbW92ZSgpLGQ9YShuKS5hdHRyKCJpZCIsZikuYWRkQ2xhc3MoIm1Db2xvclBpY2tlciIpLnZhbChoKS5pbnNlcnRCZWZvcmUobSksZyYmbS5jc3Moe2JvcmRlcjoiMXB4IHNvbGlkIGJsYWNrIixmbG9hdDprLHdpZHRoOmksaGVpZ2h0Omp9KS5hZGRDbGFzcyhkLmF0dHIoImNsYXNzIikpLmh0bWwoIiZuYnNwOyIpLGQubVNldElucHV0Q29sb3IoaCksZH0sYS5mbi5tQ29sb3JQaWNrZXIuZHJhd1BpY2tlcj1mdW5jdGlvbigpe3ZhciBmPWEoIjxkaXY+IiksbD0oYSgiPGE+IiksYSgiPGRpdj4iKSksbT1hKCI8ZGl2PiIpO2ZvcihoLmF0dHIoe2lkOiJtQ29sb3JQaWNrZXJCZyJ9KS5jc3Moe2Rpc3BsYXk6Im5vbmUiLGJhY2tncm91bmQ6ImJsYWNrIixvcGFjaXR5Oi4wMSxwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLHJpZ2h0OjAsYm90dG9tOjAsbGVmdDowfSkuYXBwZW5kVG8oZSksZy5hdHRyKHtpZDoibUNvbG9yUGlja2VyIiwiZGF0YS1tY29sb3JwaWNrZXIiOiEwfSkuY3NzKHtwb3NpdGlvbjoiYWJzb2x1dGUiLGJvcmRlcjoiMXB4IHNvbGlkICNjY2MiLGNvbG9yOiIjZmZmIix3aWR0aDoiMTk0cHgiLGhlaWdodDoiMTg0cHgiLCJmb250LXNpemUiOiIxMnB4IiwiZm9udC1mYW1pbHkiOiJ0aW1lcyIsZGlzcGxheToibm9uZSJ9KS5hcHBlbmRUbyhlKSxpLmF0dHIoe2lkOiJtQ29sb3JQaWNrZXJUZXN0In0pLmNzcyh7ZGlzcGxheToibm9uZSJ9KS5hcHBlbmRUbyhlKSxtLmF0dHIoe2lkOiJtQ29sb3JQaWNrZXJXcmFwcGVyIn0pLmNzcyh7cG9zaXRpb246InJlbGF0aXZlIixib3JkZXI6InNvbGlkIDFweCBncmF5In0pLmFwcGVuZFRvKGcpLGEoIjxkaXY+IikuYXR0cih7aWQ6Im1Db2xvclBpY2tlckltZyIsY2xhc3M6Im1Db2xvciJ9KS5jc3Moe2hlaWdodDoiMTM2cHgiLHdpZHRoOiIxOTJweCIsYm9yZGVyOjAsY3Vyc29yOiJjcm9zc2hhaXIiLCJiYWNrZ3JvdW5kLWltYWdlIjoidXJsKCIrYi5pbWFnZUZvbGRlcisicGlja2VyLnBuZykifSkuYXBwZW5kVG8obSksZi5hdHRyKHtpZDoibUNvbG9yUGlja2VyU3dhdGNoZXMifSkuY3NzKHsiYm9yZGVyLXJpZ2h0IjoiMXB4IHNvbGlkICMwMDAifSkuYXBwZW5kVG8obSksYSgiPGRpdj4iKS5hZGRDbGFzcygibUNsZWFyIikuY3NzKHtjbGVhcjoiYm90aCJ9KS5hcHBlbmRUbyhmKSxkPTk7LTE8ZDtkLS0pYSgiPGRpdj4iKS5hdHRyKHtpZDoiY2VsbCIrZCxjbGFzczoibVBhc3RDb2xvciIrKDA8ZD8iIG1Ob0xlZnRCb3JkZXIiOiIiKX0pLmNzcyh7ImJhY2tncm91bmQtY29sb3IiOmIuc3dhdGNoZXNbZF0udG9Mb3dlckNhc2UoKSxoZWlnaHQ6IjE4cHgiLHdpZHRoOiIxOHB4Iixib3JkZXI6IjFweCBzb2xpZCAjMDAwIixmbG9hdDoibGVmdCJ9KS5odG1sKCImbmJzcDsiKS5wcmVwZW5kVG8oZik7bC5hdHRyKHtpZDoibUNvbG9yUGlja2VyRm9vdGVyIn0pLmNzcyh7ImJhY2tncm91bmQtaW1hZ2UiOiJ1cmwoIitiLmltYWdlRm9sZGVyKyJncmlkLmdpZikiLHBvc2l0aW9uOiJyZWxhdGl2ZSJ9KS5hcHBlbmRUbyhtKSxqLmF0dHIoe2lkOiJtQ29sb3JQaWNrZXJJbnB1dCIsdHlwZToidGV4dCJ9KS5jc3Moe2JvcmRlcjoic29saWQgMXB4IGdyYXkiLCJmb250LXNpemUiOiIxMHB0IixtYXJnaW46IjNweCIsd2lkdGg6IjgwcHgifSkuYXBwZW5kVG8obCksYy5hbGxvd1RyYW5zcGFyZW5jeSYmYSgiPHNwYW4+IikuYXR0cih7aWQ6Im1Db2xvclBpY2tlclRyYW5zcGFyZW50IixjbGFzczoibUNvbG9yIG1Db2xvclRyYW5zcGFyZW50In0pLmNzcyh7ImZvbnQtc2l6ZSI6IjE2cHgiLGNvbG9yOiIjMDAwIiwicGFkZGluZy1yaWdodCI6IjEwcHgiLCJwYWRkaW5nLXRvcCI6IjZweCIsY3Vyc29yOiJwb2ludGVyIixvdmVyZmxvdzoiaGlkZGVuIixmbG9hdDoicmlnaHQifSkudGV4dCgidHJhbnNwYXJlbnQiKS5hcHBlbmRUbyhsKSxhKCIubU5vTGVmdEJvcmRlciIpLmNzcyh7ImJvcmRlci1sZWZ0IjowfSl9LGEuZm4ubUNvbG9yUGlja2VyLmNsb3NlUGlja2VyPWZ1bmN0aW9uKCl7aC5oaWRlKCksZy5mYWRlT3V0KCl9LGEuZm4ubUNvbG9yUGlja2VyLmNvbG9yU2hvdz1mdW5jdGlvbigpe3ZhciBjPWEodGhpcyksZD1jLmF0dHIoImlkIikucmVwbGFjZSgibWNwXyIsIiIpLGU9Yy5vZmZzZXQoKSxpPWEoIiMiK2QpLGs9ZS50b3ArYy5vdXRlckhlaWdodCgpLGw9ZS5sZWZ0O2lmKGkuYXR0cigiZGlzYWJsZWQiKSlyZXR1cm4hMTtiLmN1cnJlbnRDb2xvcj1pLmNzcygiYmFja2dyb3VuZC1jb2xvciIpLGIuY2hhbmdlQ29sb3I9ITAsYi5jdXJyZW50SW5wdXQ9aSxiLmN1cnJlbnRJZD1kLGsrZy5oZWlnaHQoKT5mLmhlaWdodCgpJiYoaz1lLnRvcC1nLmhlaWdodCgpKSxsK2cud2lkdGgoKT5mLndpZHRoKCkmJihsPWUubGVmdC1nLndpZHRoKCkrYy5vdXRlcldpZHRoKCkpLGcuY3NzKHt0b3A6aysicHgiLGxlZnQ6bCsicHgifSkuZmFkZUluKCJmYXN0IiksaC5zaG93KCksYi5jb2xvcj1hKCIjIitkKS5hdHRyKCJkYXRhLXRleHQiKT9jLmNzcygiYmFja2dyb3VuZC1jb2xvciIpOmkuY3NzKCJiYWNrZ3JvdW5kLWNvbG9yIiksYi5jb2xvcj1hLmZuLm1Db2xvclBpY2tlci5zZXRDb2xvcihiLmNvbG9yLGkuYXR0cigiZGF0YS1oZXgiKXx8aS5hdHRyKCJoZXgiKSksai52YWwoYi5jb2xvcil9LGEuZm4ubUNvbG9yUGlja2VyLnNldElucHV0Q29sb3I9ZnVuY3Rpb24oYixjKXthKCIjIitiKS5tU2V0SW5wdXRDb2xvcihjKX0sYS5mbi5tU2V0SW5wdXRDb2xvcj1mdW5jdGlvbihjKXt2YXIgZD1hKHRoaXMpLGU9eyJiYWNrZ3JvdW5kLWNvbG9yIjpjLCJiYWNrZ3JvdW5kLWltYWdlIjoidHJhbnNwYXJlbnQiPT1jPyJ1cmwoJyIrYi5pbWFnZUZvbGRlcisiZ3JpZC5naWYnKSI6IiIsY29sb3I6YS5mbi5tQ29sb3JQaWNrZXIudGV4dENvbG9yKGMpfTsoZC5hdHRyKCJkYXRhLXRleHQiKXx8ZC5hdHRyKCJ0ZXh0IikpJiZkLm5leHQoKS5jc3MoZSksZC52YWwoYykuY3NzKGUpLnRyaWdnZXIoImNoYW5nZSIpLGoudmFsKGMpfSxhLmZuLm1Db2xvclBpY2tlci50ZXh0Q29sb3I9ZnVuY3Rpb24oYil7cmV0dXJuIGI9YS5mbi5tQ29sb3JQaWNrZXIuUkdCdG9IZXgoYiksdm9pZCAwPT09Ynx8InRyYW5zcGFyZW50Ij09Yj8iYmxhY2siOjQwMD5wYXJzZUludChiLnN1YnN0cigxLDIpLDE2KStwYXJzZUludChiLnN1YnN0cigzLDIpLDE2KStwYXJzZUludChiLnN1YnN0cig1LDIpLDE2KT8id2hpdGUiOiJibGFjayJ9LGEuZm4ubUNvbG9yUGlja2VyLnNldENvb2tpZT1mdW5jdGlvbihhLGIsYyl7YT1hKyI9Iitlc2NhcGUoYiksYj1uZXcgRGF0ZSxiLnNldERhdGUoYi5nZXREYXRlKCkrYyksYSs9IjsgZXhwaXJlcz0iK2IudG9HTVRTdHJpbmcoKSxkb2N1bWVudC5jb29raWU9YX0sYS5mbi5tQ29sb3JQaWNrZXIuZ2V0Q29va2llPWZ1bmN0aW9uKGEpe3JldHVybihhPWRvY3VtZW50LmNvb2tpZS5tYXRjaCgiKF58OykgPyIrYSsiPShbXjtdKikoO3wkKSIpKT91bmVzY2FwZShhWzJdKTpudWxsfSxhLmZuLm1Db2xvclBpY2tlci5jb2xvclBpY2tlZD1mdW5jdGlvbigpe2IuY2hhbmdlQ29sb3I9ITEsYS5mbi5tQ29sb3JQaWNrZXIuY2xvc2VQaWNrZXIoKSxhLmZuLm1Db2xvclBpY2tlci5hZGRUb1N3YXRjaCgpLGIuY3VycmVudElucHV0LnRyaWdnZXIoImNvbG9ycGlja2VkIil9LGEuZm4ubUNvbG9yUGlja2VyLmFkZFRvU3dhdGNoPWZ1bmN0aW9uKGUpe2lmKCFjLmVuaGFuY2VkU3dhdGNoZXMpcmV0dXJuITE7dmFyIGY9W107ZD0wLCJzdHJpbmciPT10eXBlb2YgZSYmKGIuY29sb3I9ZSksInRyYW5zcGFyZW50IiE9Yi5jb2xvciYmKGZbMF09YS5mbi5tQ29sb3JQaWNrZXIuaGV4VG9SR0IoYi5jb2xvcikpLGEoIi5tUGFzdENvbG9yIikuZWFjaChmdW5jdGlvbigpe3ZhciBjPWEodGhpcyk7Yi5jb2xvcj1hLmZuLm1Db2xvclBpY2tlci5oZXhUb1JHQihjLmNzcygiYmFja2dyb3VuZC1jb2xvciIpKSxiLmNvbG9yIT1mWzBdJiZmLmxlbmd0aDwxMCYmKGZbZi5sZW5ndGhdPWIuY29sb3IpLGMuY3NzKCJiYWNrZ3JvdW5kLWNvbG9yIixmW2QrK10pfSksYy5lbmhhbmNlZFN3YXRjaGVzJiZhLmZuLm1Db2xvclBpY2tlci5zZXRDb29raWUoInN3YXRjaGVzIixmLmpvaW4oInx8IiksMzY1KX0sYS5mbi5tQ29sb3JQaWNrZXIud2hpY2hDb2xvcj1mdW5jdGlvbihiLGMsZCl7dmFyIGU9WzI1NSwyNTUsMjU1XTszMj5iPyhlWzFdPTgqYixlWzJdPTApOjY0PmI/KGVbMF09MjU2LTgqKGItMzIpLGVbMl09MCk6OTY+Yj8oZVswXT0wLGVbMl09OCooYi02NCkpOjEyOD5iPyhlWzBdPTAsZVsxXT0yNTYtOCooYi05NikpOjE2MD5iPyhlWzBdPTgqKGItMTI4KSxlWzFdPTApOihlWzFdPTAsZVsyXT0yNTYtOCooYi0xNjApKTtmb3IodmFyIGY9MDszPmY7ZisrKTY0PmM/ZVtmXSs9KDI1Ni1lW2ZdKSooNjQtYykvNjQ6MTI4Pj1jP2VbZl0tPWVbZl0qKGMtNjQpLzY0OjEyODxjJiYoZVtmXT0yNTYtYi8xOTIqMjU2KSxlW2ZdPU1hdGgucm91bmQoTWF0aC5taW4oZVtmXSwyNTUpKSwidHJ1ZSI9PWQmJihlW2ZdPWEuZm4ubUNvbG9yUGlja2VyLmRlY1RvSGV4KGVbZl0pKTtyZXR1cm4idHJ1ZSI9PWQ/IiMiK2Uuam9pbigiIik6InJnYigiK2Uuam9pbigiLCAiKSsiKSJ9LGEuZm4ubUNvbG9yUGlja2VyLnNldENvbG9yPWZ1bmN0aW9uKGIsYyl7cmV0dXJuInRydWUiPT1jP2EuZm4ubUNvbG9yUGlja2VyLlJHQnRvSGV4KGIpOmEuZm4ubUNvbG9yUGlja2VyLmhleFRvUkdCKGIpfSxhLmZuLm1Db2xvclBpY2tlci5jb2xvclRlc3Q9ZnVuY3Rpb24oYSl7cmV0dXJuIGkuY3NzKCJiYWNrZ3JvdW5kLWNvbG9yIixhKSxpLmNzcygiYmFja2dyb3VuZC1jb2xvciIpfSxhLmZuLm1Db2xvclBpY2tlci5kZWNUb0hleD1mdW5jdGlvbihhKXtyZXR1cm4gYT1wYXJzZUludChhKSwiMDEyMzQ1Njc4OUFCQ0RFRiIuY2hhckF0KE1hdGguZmxvb3IoYS8xNikpKyIiKyIwMTIzNDU2Nzg5QUJDREVGIi5jaGFyQXQoYS0xNipNYXRoLmZsb29yKGEvMTYpKX0sYS5mbi5tQ29sb3JQaWNrZXIuUkdCdG9IZXg9ZnVuY3Rpb24oYil7dmFyIGQsYz0iIyIsYj0hIWImJmIudG9Mb3dlckNhc2UoKTtpZighYilyZXR1cm4iIjtpZihuLnRlc3QoYikpcmV0dXJuIGIuc3Vic3RyKDAsNyk7aWYobS50ZXN0KGIpKXJldHVybiBiLnJlcGxhY2UobCwiJDEkMSQyJDIkMyQzIikuc3Vic3RyKDAsNyk7aWYoZD1iLm1hdGNoKGspKXtmb3IoYj0xOzQ+YjtiKyspYys9YS5mbi5tQ29sb3JQaWNrZXIuZGVjVG9IZXgoZFtiXSk7cmV0dXJuIGN9cmV0dXJuIGEuZm4ubUNvbG9yUGlja2VyLmNvbG9yVGVzdChiKX0sYS5mbi5tQ29sb3JQaWNrZXIuaGV4VG9SR0I9ZnVuY3Rpb24oYil7cmV0dXJuIGI9ISFiJiZiLnRvTG93ZXJDYXNlKCksYj9rLnRlc3QoYik/YjptLnRlc3QoYik/KG4udGVzdChiKXx8KGI9Yi5yZXBsYWNlKGwsIiQxJDEkMiQyJDMkMyIpKSwicmdiKCIrcGFyc2VJbnQoYi5zdWJzdHIoMSwyKSwxNikrIiwgIitwYXJzZUludChiLnN1YnN0cigzLDIpLDE2KSsiLCAiK3BhcnNlSW50KGIuc3Vic3RyKDUsMiksMTYpKyIpIik6YS5mbi5tQ29sb3JQaWNrZXIuY29sb3JUZXN0KGIpOiIifSxjPWEuZm4ubUNvbG9yUGlja2VyLmluaXQsZi5yZWFkeShmdW5jdGlvbigpe2U9YSgiYm9keSIpLGEuZm4ubUNvbG9yUGlja2VyLmV2ZW50cygpLGMucmVwbGFjZSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBhLmZuLm1ET011cGRhdGU/YSgiaW5wdXQiKS5tRE9NdXBkYXRlKGEuZm4ubUNvbG9yUGlja2VyLnN0YXJ0KToiZnVuY3Rpb24iPT10eXBlb2YgYS5mbi5saXZlcXVlcnk/YSgiaW5wdXQiKS5saXZlcXVlcnkoYS5mbi5tQ29sb3JQaWNrZXIuc3RhcnQpOihhLmZuLm1Db2xvclBpY2tlci5zdGFydCgpLGYubGl2ZSgiYWpheFN1Y2Nlc3MubUNvbG9yUGlja2VyIixhLmZuLm1Db2xvclBpY2tlci5zdGFydCkpKX0pfShqUXVlcnkpOw==]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogRUNCMiAtIEV4dGVuZGVkIENvbnRlbnQgQmxvY2tzIDIKIyBBdXRob3I6IENocmlzIFRheWxvcgojIENvcHlyaWdodDogKEMpIDIwMTYgQ2hyaXMgVGF5bG9yLCBjaHJpc0BiaW5ub3ZhdGl2ZS5jby51awojIExpY2VuY2U6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMwojICAgICAgICAgIHNlZSAvRUNCMi9sYW5nL0xJQ0VOQ0UudHh0IG9yIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgojIyBub3RoaW5nIHRvIGRvCgoK]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogRUNCMiAtIEV4dGVuZGVkIENvbnRlbnQgQmxvY2tzIDIKIyBBdXRob3I6IENocmlzIFRheWxvcgojIENvcHlyaWdodDogKEMpIDIwMTYgQ2hyaXMgVGF5bG9yLCBjaHJpc0BiaW5ub3ZhdGl2ZS5jby51awojIExpY2VuY2U6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMwojICAgICAgICAgIHNlZSAvRUNCMi9sYW5nL0xJQ0VOQ0UudHh0IG9yIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgoKLy8gcmVtb3ZlIHRoZSBwZXJtaXNzaW9ucwokdGhpcy0+UmVtb3ZlUHJlZmVyZW5jZSgpOwokdGhpcy0+RGVsZXRlVGVtcGxhdGUoKTsKCgo=]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogRUNCMiAtIEV4dGVuZGVkIENvbnRlbnQgQmxvY2tzIDIKIyBBdXRob3I6IENocmlzIFRheWxvcgojIENvcHlyaWdodDogKEMpIDIwMTYgQ2hyaXMgVGF5bG9yLCBjaHJpc0BiaW5ub3ZhdGl2ZS5jby51awojIExpY2VuY2U6IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMwojICAgICAgICAgIHNlZSAvRUNCMi9sYW5nL0xJQ0VOQ0UudHh0IG9yIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoKaWYgKCFpc3NldCgkZ0NtcykpIGV4aXQ7CgovLyByZW1vdmUgcGVybWlzc2lvbiBVU0VfRUNCMgpkZWZpbmUoJ1VTRV9FQ0IyJywgJ1VzZSBFeHRlbmRlZCBDb250ZW50IEJsb2NrcyAyJyk7CiRkYiA9ICR0aGlzLT5HZXREYigpOwppZiAoIHZlcnNpb25fY29tcGFyZSgkb2xkdmVyc2lvbiwgJzEuNCcpIDwgMCApIHsKICAgJHRoaXMtPlJlbW92ZVBlcm1pc3Npb24oVVNFX0VDQjIpOwp9CgoKPz4=]]></data>
	</file>
	<file>
	  <filename>/moduleinfo.ini</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[W21vZHVsZV0KbmFtZSA9ICJFQ0IyIg0KdmVyc2lvbiA9IDEuNg0KYXV0aG9yID0gIkNocmlzIFRheWxvciAodHdpdHRlci5jb20vS2l3aUNocmlzQlQpIg0KYXV0aG9yZW1haWwgPSAiY2hyaXNAYmlubm92YXRpdmUuY28udWsiDQptaW5jbXN2ZXJzaW9uID0gMi4wDQpsYXp5bG9hZGFkbWluID0gMA0KbGF6eWxvYWRmcm9udGVuZCA9IDENCg==]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/ECB2_Test_Template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogRUNCMl9UZXN0X1RlbXBsYXRlIC0gdjEuNisgLSAyMERlYzE5DQoNCiAgIC0gdjEuNyAtIDMwTWF5MjAgLSBleHRyYSB0ZXN0cyBmb3IgZHJvcGRvd24gJiBkcm9wZG93bl9mcm9tX3VkdA0KICAgLSB2MS42IC0gMjBEZWMxOSAtIGV4dHJhIGZpbGVfc2VsZWN0b3IgdGVzdHMNCiAgIC0gdjEuNSAtIDE2RmViMTkgLSBhZGRlZCBpbnB1dGVyX3JlcGVhdGVyDQogICAtIHYxLjQgLSAwNEZlYjE5IC0gdXBkYXRlZCBmb3IgQlM0IGFuZCBsYXRlc3QgdGVtcGxhdGVzDQogICAtIHYxLjMgLSAxOEFwcjE3DQoNCiAgIFRlbXBsYXRlIHN0b3JlZCBpbiBFQ0IyL3RlbXBsYXRlcy9FQ0IyX1Rlc3RfVGVtcGxhdGUudHBsDQogICAgICAtIGNyZWF0ZSBhIHZlcnkgc2ltcGxlIGNvcmU6cGFnZSB0ZW1wbGF0ZSAnRUNCMl9UZXN0JyB3aXRoIGp1c3QgdGhlIDEgbGluZToNCiAgICAgICAgICAgIHtpbmNsdWRlIGZpbGU9J21vZHVsZV9maWxlX3RwbDpFQ0IyO0VDQjJfVGVzdF9UZW1wbGF0ZS50cGwnfQ0KICAgICAgLSBjcmVhdGUgJ0VDQjIgVGVzdCcgcGFnZSwgdXNpbmcgdGhlIGFib3ZlIHRlbXBsYXRlLg0KDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip9DQoNCntjZ2pzX3JlcXVpcmUgbGliPSdqcXVlcnknfQ0Ke2NnanNfcmVxdWlyZSBqc2ZpbGU9J2Fzc2V0cy9qcy9ib290c3RyYXAuYnVuZGxlLm1pbi5qcyd9DQp7Y2dqc19yZXF1aXJlIGpzZmlsZT0nYXNzZXRzL2pzL3NsaWNrLm1pbi5qcyd9DQp7Y2dqc19yZXF1aXJlIGpzZmlsZT0nYXNzZXRzL2pzL21haW4uanMnfQ0KDQoNCg0KPCFET0NUWVBFIGh0bWw+DQo8aHRtbCBsYW5nPSJlbiI+DQo8aGVhZD4NCiAgIHtjbXNfc3R5bGVzaGVldH0NCiAgIDxzdHlsZT57bGl0ZXJhbH0ucHJlIHtmb250LWZhbWlseTptb25vc3BhY2U7IHdoaXRlLXNwYWNlOnByZS13cmFwOyB3b3JkLXdyYXA6YnJlYWstd29yZDsNCiAgICAgIGJhY2tncm91bmQtY29sb3I6I0RERDsgcGFkZGluZzoxZW07fXsvbGl0ZXJhbH08L3N0eWxlPg0KPC9oZWFkPg0KDQo8Ym9keSBjbGFzcz0icGFnZS17JHBhZ2VfYWxpYXN9Ij4NCg0Ke2dsb2JhbF9jb250ZW50IG5hbWU9J2hlYWRlcid9DQoNCjxkaXYgY2xhc3M9Im1haW4iPg0KICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4NCiAgICAgIDxkaXYgY2xhc3M9InJvdyI+DQogICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtMTIiPg0KDQo8aDE+RUNCMiBUZXN0IFBhZ2UgMTwvaDE+DQp7Y29udGVudCBvbmVsaW5lPTF9DQoNCg0KPGgyPmZpbGVfc2VsZWN0b3IgMTwvaDI+DQo8cD5zZWxlY3RlZCBmaWxlOid7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iZmlsZV9zZWxlY3RvciIgYmxvY2s9InRlc3QxIiBsYWJlbD0iVGVzdCAxOiBmaWxlX3NlbGVjdG9yIiBkaXI9ImltYWdlcyIgZmlsZXR5cGVzPSJnaWYscG5nLGpwZyIgZXhjbHVkZXByZWZpeD0idGh1bWJfIiBkZXNjcmlwdGlvbj0iZmlsZV9zZWxlY3RvcjogVGVzdCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpIGNhbiBiZSBzaG93biBoZXJlIn0nPHA+DQoNCjxoMj5maWxlX3NlbGVjdG9yIDFBIC0gcmVjdXJzZTwvaDI+DQo8cD5zZWxlY3RlZCBmaWxlOid7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iZmlsZV9zZWxlY3RvciIgYmxvY2s9InRlc3QxYSIgbGFiZWw9IlRlc3QgMUE6IGZpbGVfc2VsZWN0b3IgLSByZWN1cnNpdmUiIGRpcj0iaW1hZ2VzIiBmaWxldHlwZXM9ImdpZixwbmcsanBnIiBleGNsdWRlcHJlZml4PSJ0aHVtYl8iIHJlY3Vyc2U9MSBkZXNjcmlwdGlvbj0iZmlsZV9zZWxlY3RvcjogVGVzdCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpIGNhbiBiZSBzaG93biBoZXJlIn0nPHA+DQoNCjxoMj5maWxlX3NlbGVjdG9yIDFCIC0gaW1hZ2UgcHJldmlldzwvaDI+DQo8cD5zZWxlY3RlZCBmaWxlOid7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iZmlsZV9zZWxlY3RvciIgYmxvY2s9InRlc3QxYiIgbGFiZWw9IlRlc3QgMUI6IGZpbGVfc2VsZWN0b3IgLSBpbWFnZSBwcmV2aWV3IChubyBkZXNjcmlwdGlvbikiIGRpcj0iaW1hZ2VzIiBmaWxldHlwZXM9ImdpZixwbmcsanBnIiBleGNsdWRlcHJlZml4PSJ0aHVtYl8iIHByZXZpZXc9MX0nPHA+DQoNCg0KDQo8aDI+Y29sb3JfcGlja2VyPC9oMj4NCntjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJjb2xvcl9waWNrZXIiIGJsb2NrPSJ0ZXN0MiIgbGFiZWw9IlRlc3QgMjogY29sb3JfcGlja2VyIiBkZWZhdWx0X3ZhbHVlPSIjQ0NDQ0NDIiBhc3NpZ249dGVzdDIgZGVzY3JpcHRpb249IlRlc3QgZGVzY3JpcHRpb24gLSBzaG9ydCJ9DQo8cCBzdHlsZT0iY29sb3I6I0ZGRjsgYmFja2dyb3VuZC1jb2xvcjp7JHRlc3QyfTsiPmNvbG91cjoneyR0ZXN0Mn0nPC9wPg0KDQo8aDI+Y29sb3JfcGlja2VyICMyQTwvaDI+DQp7Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iY29sb3JfcGlja2VyIiBibG9jaz0idGVzdDJfMkEiIGxhYmVsPSJUZXN0IDItMkE6IGNvbG9yX3BpY2tlciIgZGVmYXVsdF92YWx1ZT0iIzVjNTFhNSIgYXNzaWduPXRlc3QyXzJBIGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIC0gc2hvcnQgLSA1YzUxYTUifQ0KPHAgc3R5bGU9ImNvbG9yOiNGRkY7IGJhY2tncm91bmQtY29sb3I6eyR0ZXN0Ml8yQX07Ij5jb2xvdXI6J3skdGVzdDJfMkF9JzwvcD4NCg0KPGgyPmNvbG9yX3BpY2tlciAjMmM8L2gyPg0Ke2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImNvbG9yX3BpY2tlciIgYmxvY2s9InRlc3QyXzJjIiBsYWJlbD0iVGVzdCAyLTJjOiBjb2xvcl9waWNrZXIgZGVmYXVsdCBSRUQiIGRlZmF1bHRfdmFsdWU9IiNGRjAwMDAiIGFzc2lnbj10ZXN0Ml8yY30NCjxwIHN0eWxlPSJjb2xvcjojRkZGOyBiYWNrZ3JvdW5kLWNvbG9yOnskdGVzdDJfMmN9OyI+Y29sb3VyOid7JHRlc3QyXzJjfSc8L3A+DQoNCg0KPGgyPmNvbG9yX3BpY2tlciAtIHByb21vX2JnY29sb3I8L2gyPg0KeyRwcm9tb19iZ2NvbG9yPSJ7Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0nY29sb3JfcGlja2VyJyBibG9jaz0ncHJvbW9fYmdjb2xvcicgbGFiZWw9J0JhY2tncm91bmQgQ29sb3InIGRlZmF1bHRfdmFsdWU9J3RyYW5zcGFyZW50J30iIHNjb3BlPWdsb2JhbH0NCjxwIHN0eWxlPSJjb2xvcjojRkZGOyBiYWNrZ3JvdW5kLWNvbG9yOnskcHJvbW9fYmdjb2xvcn07Ij5jb2xvdXI6J3skcHJvbW9fYmdjb2xvcn0nPC9wPg0KDQoNCg0KPGgyPlRlc3QgMzogZHJvcGRvd248L2gyPg0KPHA+e2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImRyb3Bkb3duIiBibG9jaz0idGVzdDMiIGxhYmVsPSJUZXN0IDM6IGRyb3Bkb3duIiB2YWx1ZXM9IkFwcGxlPWFwcGxlLE9yYW5nZT1vcmFuZ2UiIGZpcnN0X3ZhbHVlPSJzZWxlY3QgZnJ1aXQiIGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUifTwvcD4NCg0KPGgyPlRlc3QgM0E6IGRyb3Bkb3duIC0gbXVsdGlwbGU8L2gyPg0KPHA+e2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImRyb3Bkb3duIiBibG9jaz0idGVzdDNBIiBsYWJlbD0iVGVzdCAzQTogZHJvcGRvd24gLSBtdWx0aXBsZSIgdmFsdWVzPSJBcHBsZT1hcHBsZSxPcmFuZ2U9b3JhbmdlLEJhbmFuYSxQaW5lYXBwbGUsVGVzdCBudW1iZXIgNSxUZXN0IDYsVGVzdDcsVGVzdDgsdGVzdDksdGVzdDEwLHRlc3QxMSIgbXVsdGlwbGU9MSBkZXNjcmlwdGlvbj0iVGVzdCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpIGNhbiBiZSBzaG93biBoZXJlIn08L3A+DQoNCjxoMj5UZXN0IDNCOiBkcm9wZG93biAtIG11bHRpcGxlICYgY29tcGFjdDwvaDI+DQo8cD57Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iZHJvcGRvd24iIGJsb2NrPSJ0ZXN0M0IiIGxhYmVsPSJUZXN0IDNCOiBjb21wYWN0IGRyb3Bkb3duIC0gbXVsdGlwbGUiIHZhbHVlcz0iQXBwbGU9YXBwbGUsT3JhbmdlPW9yYW5nZSxCYW5hbmEsUGluZWFwcGxlLFRlc3QgbnVtYmVyIDUsVGVzdCA2LFRlc3Q3LFRlc3Q4LHRlc3Q5LHRlc3QxMCx0ZXN0MTEiIG11bHRpcGxlPTEgY29tcGFjdD0xIGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUifTwvcD4NCg0KDQoNCjxoMj5UZXN0NDogZHJvcGRvd25fZnJvbV91ZHQ8L2gyPg0KPHA+U2VjdGlvbiAxIExheW91dCBTdHlsZTone2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0nRUNCMicgZmllbGQ9J2Ryb3Bkb3duX2Zyb21fdWR0JyBibG9jaz0ndGVzdDQnIGxhYmVsPSdUZXN0IDQ6IGRyb3Bkb3duX2Zyb21fdWR0JyB1ZHQ9J2VjYjJfc29ydGFibGVfdWR0X3Rlc3QnIGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUifSc8L3A+DQoNCjxwPlNlY3Rpb24gMSBMYXlvdXQgU3R5bGUgKHdpdGggZmlyc3RfdmFsdWUpOid7Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0nZHJvcGRvd25fZnJvbV91ZHQnIGJsb2NrPSd0ZXN0NGEnIGxhYmVsPSdUZXN0IDRhOiBkcm9wZG93bl9mcm9tX3VkdCAod2l0aCBmaXJzdF92YWx1ZSknIHVkdD0nZWNiMl9zb3J0YWJsZV91ZHRfdGVzdCcgZmlyc3RfdmFsdWU9Ij1zZWxlY3Q9IiBtdWx0aXBsZT0xIGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUifSc8L3A+DQoNCjxwPlNlY3Rpb24gMSBMYXlvdXQgU3R5bGUgLSBjb21wYWN0Oid7Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0nZHJvcGRvd25fZnJvbV91ZHQnIGJsb2NrPSd0ZXN0NGInIGxhYmVsPSdUZXN0IDRiOiBkcm9wZG93bl9mcm9tX3VkdCAtIGNvbXBhY3QnIHVkdD0nZWNiMl9zb3J0YWJsZV91ZHRfdGVzdCcgbXVsdGlwbGU9MSBjb21wYWN0PTEgZGVzY3JpcHRpb249IlRlc3QgZGVzY3JpcHRpb24gKG9wdGlvbmFsKSBjYW4gYmUgc2hvd24gaGVyZSJ9JzwvcD4NCg0KDQoNCjxoMj5jaGVja2JveDwvaDI+DQo8cD57Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iY2hlY2tib3giIGJsb2NrPSJ0ZXN0NWEiIGxhYmVsPSJUZXN0IDU6IENoZWNrYm94IiBkZWZhdWx0X3ZhbHVlPSIwIiBkZXNjcmlwdGlvbj0iVGVzdCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpIGNhbiBiZSBzaG93biBoZXJlIn08L3A+DQoNCg0KPGgyPm1vZHVsZV9saW5rPC9oMj4NCjxwPntjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJtb2R1bGVfbGluayIgbGFiZWw9IlRlc3QgNjogbW9kdWxlX2xpbms6R2FsbGVyeSIgYmxvY2s9InRlc3Q2IiBtb2Q9IkdhbGxlcnkiIHRleHQ9IkVkaXQgR2FsbGVyaWVzIiBkZXNjcmlwdGlvbj0iVGVzdCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpIGNhbiBiZSBzaG93biBoZXJlIn08L3A+DQoNCg0KPGgyPmxpbms8L2gyPg0KPHA+e2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9ImxpbmsiIGxhYmVsPSJUZXN0IDc6IGxpbmsiIGJsb2NrPSJ0ZXN0NyIgdGFyZ2V0PSJfYmxhbmsiIGxpbms9Imh0dHA6Ly93d3cuYmluZy5jb20iIHRleHQ9ImJpbmcgc2VhcmNoIiBkZXNjcmlwdGlvbj0iVGVzdCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpIGNhbiBiZSBzaG93biBoZXJlIn08L3A+DQoNCg0KPGgyPnRpbWVwaWNrZXI8L2gyPg0KPHA+e2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9InRpbWVwaWNrZXIiIGxhYmVsPSJUZXN0IDg6IHRpbWVwaWNrZXIiIGJsb2NrPSJ0ZXN0OCIgZGVzY3JpcHRpb249IlRlc3QgZGVzY3JpcHRpb24gKG9wdGlvbmFsKSBjYW4gYmUgc2hvd24gaGVyZSJ9PC9wPg0KDQoNCjxoMj5kYXRlcGlja2VyPC9oMj4NCjxwPntjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJkYXRlcGlja2VyIiBsYWJlbD0iVGVzdCA5OiBkYXRlcGlja2VyIiBibG9jaz0idGVzdDkiIGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUifTwvcD4NCg0KDQoNCjxoMj5UZXN0IDEwOiBpbnB1dDwvaDI+DQo8cD57Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iaW5wdXQiIGxhYmVsPSJUZXN0IDEwOiBpbnB1dCIgYmxvY2s9InRlc3QxMCIgc2l6ZT01NSBtYXhfbGVuZ3RoPTU1IGRlZmF1bHRfdmFsdWU9ImZpbGwgaXQiIGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUifTwvcD4NCg0KPGgyPlRlc3QgMTBBOiBpbnB1dCBubyBkZWZhdWx0IHZhbHVlPC9oMj4NCjxwPntjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJpbnB1dCIgbGFiZWw9IlRlc3QgMTA6IGlucHV0IiBibG9jaz0idGVzdDEwQSIgc2l6ZT01NSBtYXhfbGVuZ3RoPTU1IGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUifTwvcD4NCg0KDQoNCjxoMj5UZXN0IDExOiB0ZXh0YXJlYTwvaDI+DQo8cD57Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0idGV4dGFyZWEiIGxhYmVsPSJUZXN0IDExOiB0ZXh0YXJlYSIgYmxvY2s9InRlc3QxMSIgcm93cz0xMCBjb2xzPTQwIGRlZmF1bHRfdmFsdWU9ImZpbGwgaXQiIGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUifTwvcD4NCg0KDQo8aDI+ZWRpdG9yPC9oMj4NCjxwPntjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJlZGl0b3IiIGxhYmVsPSJUZXN0IDEyOiBlZGl0b3IiIGJsb2NrPSJ0ZXN0MTIiIHJvd3M9MTAgY29scz00MCBkZWZhdWx0X3ZhbHVlPSJmaWxsIGl0IiBkZXNjcmlwdGlvbj0iVGVzdCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpIGNhbiBiZSBzaG93biBoZXJlIn08L3A+DQoNCg0KPGgyPlRlc3QgMTM6IHRleHQ8L2gyPg0Ke2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0iRUNCMiIgZmllbGQ9InRleHQiIGxhYmVsPSJUZXN0IDEzOiB0ZXh0IiBibG9jaz0idGVzdDEzIiB0ZXh0PSJIZWxsbyB3b3JkISIgZGVzY3JpcHRpb249IlRlc3QgZGVzY3JpcHRpb24gKG9wdGlvbmFsKSBjYW4gYmUgc2hvd24gaGVyZSJ9DQoNCg0KPGgyPnBhZ2VzPC9oMj4NCjxwPntjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJwYWdlcyIgbGFiZWw9IlRlc3QgMTQ6IHBhZ2VzIiBibG9jaz0idGVzdDE0IiBkZXNjcmlwdGlvbj0iVGVzdCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpIGNhbiBiZSBzaG93biBoZXJlIn08L3A+DQoNCg0KPGgyPmhyPC9oMj4NCjxwPntjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJociIgbGFiZWw9IlRlc3QgMTU6IGhyIiBibG9jaz0idGVzdDE1IiBkZXNjcmlwdGlvbj0iVGVzdCBkZXNjcmlwdGlvbiAob3B0aW9uYWwpIGNhbiBiZSBzaG93biBoZXJlIn08L3A+DQoNCg0KPGgyPnNvcnRhYmxlbGlzdDwvaDI+DQp7Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0nc29ydGFibGVsaXN0JyBibG9jaz0ndGVzdDE2JyB1ZHQ9J2VjYjJfc29ydGFibGVfdWR0X3Rlc3QnIGxhYmVsPSd0ZXN0MTY6c29ydGFibGVsaXN0JyBsYWJlbF9sZWZ0PSdTZWxlY3RlZCBXaWRnZXRzJyBsYWJlbF9yaWdodD0nQXZhaWxhYmxlIFdpZGdldHMnIGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUsIHVzaW5nICd1ZHQnIG9wdGlvbiJ9DQoNCjxoMj5zb3J0YWJsZWxpc3QgMjwvaDI+DQp7Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0nc29ydGFibGVsaXN0JyBibG9jaz0ndGVzdDE2YScgdmFsdWVzPSdhcHBsZT1BcHBsZSxvcmFuZ2U9T3JhbmdlLGdyZWVuPUdyZWVuLHZhbHVlPUxhYmVsJyBsYWJlbD0ndGVzdDE2YTpzb3J0YWJsZWxpc3QnIGRlc2NyaXB0aW9uPSJUZXN0IHVzaW5nIGRlZmF1bHQgbGFiZWxzLCAybmQgc29ydGFibGUgLSBzbyBzaG91bGQgYmUgbm8gbGliIG91dHB1dCwgdXNlcyB2YWx1ZXMgKG5vdCB1ZHQpIn0NCg0KPGgyPnJhZGlvPC9oMj4NCntjb250ZW50X21vZHVsZSBtb2R1bGU9IkVDQjIiIGZpZWxkPSJyYWRpbyIgYmxvY2s9InRlc3QxN2EiIGxhYmVsPSJUZXN0IDE3IiAgdmFsdWVzPSJBcHBsZT1hcHBsZSxPcmFuZ2U9b3JhbmdlLEtpd2lmcnVpdD1raXdpZnJ1aXQiIGRlZmF1bHRfdmFsdWU9J09yYW5nZScgZGVzY3JpcHRpb249IlRlc3QgZGVzY3JpcHRpb24gKG9wdGlvbmFsKSBjYW4gYmUgc2hvd24gaGVyZSJ9DQoNCjxoMj5pbnB1dDwvaDI+DQo8cD57Y29udGVudF9tb2R1bGUgbW9kdWxlPSJFQ0IyIiBmaWVsZD0iaW5wdXQiIGxhYmVsPSJUZXN0IDE3Yjogbm8gZGVzY3JpcHRpb24iIGJsb2NrPSJ0ZXN0MTdiIiBzaXplPTU1IG1heF9sZW5ndGg9NTUgZGVmYXVsdF92YWx1ZT0iY2hlY2sgZm9yIG5vIGRlc2NyaXB0aW9uIG9uIHRoaXMgZmllbGQifTwvcD4NCg0KPGgyPmhpZGRlbjwvaDI+DQo8cD57Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0naGlkZGVuJyBibG9jaz0ndGVzdDE4JyBhc3NpZ249J3Rlc3QxOGhpZGRlbicgbGFiZWw9J2hpZGRlbicgZGVzY3JpcHRpb249J0hpZGRlbjogd291bGQgbm90IG5vcm1hbGx5IHVzZSBhIGRlc2NyaXB0aW9uIGZpZWxkIScgdmFsdWU9Im1hcmtlcnZhbHVlIn08L3A+DQoNCjxoMj5UZXN0IDE5OiBnYWxsZXJ5X3BpY2tlcjwvaDI+DQo8cD57Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBmaWVsZD0nZ2FsbGVyeV9waWNrZXInIGJsb2NrPSd0ZXN0MTknIGRpcj0nb24tcGFnZS1nYWxsZXJpZXMnIGFzc2lnbj0ndGVzdDE5JyBsYWJlbD0nVGVzdCAxOTogZ2FsbGVyeV9waWNrZXInIGRlc2NyaXB0aW9uPSJUZXN0IGRlc2NyaXB0aW9uIChvcHRpb25hbCkgY2FuIGJlIHNob3duIGhlcmUifTwvcD4NCntpZiAhZW1wdHkoJHRlc3QxOSl9DQo8ZGl2IGNsYXNzPSJjb2wtNCI+DQogICBBIGZ1bmN0aW9uaW5nIGdhbGxlcnkgc2hvdWxkIGJlIHNob3duIGJlbG93Ojxicj4NCiAgIHtHYWxsZXJ5IGRpcj0kdGVzdDE5fQ0KPC9kaXY+DQp7L2lmfTxicj4NCg0KPGgyPlRlc3QgMjA6IGdldF9kcm9wZG93bl9mcm9tX2N1c3RvbWdzPC9oMj4NCjxwPntjb250ZW50X21vZHVsZSBtb2R1bGU9J0VDQjInIGZpZWxkPSdkcm9wZG93bl9mcm9tX2N1c3RvbWdzJyBjdXN0b21nc19maWVsZD0nU2VjdGlvbiBTdHlsZXMnIGJsb2NrPSd0ZXN0MjAnIGFzc2lnbj0ndGVzdDIwJyBsYWJlbD0nVGVzdCAyMDogZHJvcGRvd25fZnJvbV9jdXN0b21ncycgZGVzY3JpcHRpb249IlRlc3QgZGVzY3JpcHRpb24gKG9wdGlvbmFsKSBjYW4gYmUgc2hvd24gaGVyZSJ9PC9wPg0KPGRpdj5zZWxlY3RlZDogJ3skdGVzdDIwfSc8L2Rpdj4NCg0KPGgyPlRlc3QgMjBBOiBnZXRfZHJvcGRvd25fZnJvbV9jdXN0b21ncyAtIENvbXBhY3QgZGlzcGxheSBvZiBzZWxlY3Rpb248L2gyPg0KPHA+TXVsdGlwbGUgU2VsZWN0IHdpdGggY29tcGFjdCBkaXNwbGF5IG9mIG9wdGlvbnMgJiBlZGl0PC9wPg0KPHA+e2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0nRUNCMicgZmllbGQ9J2Ryb3Bkb3duX2Zyb21fY3VzdG9tZ3MnIGN1c3RvbWdzX2ZpZWxkPSdTZWN0aW9uIFN0eWxlcycgZGlyPSdvbi1wYWdlLWdhbGxlcmllcycgYmxvY2s9J3Rlc3QyMEEnIGFzc2lnbj0ndGVzdDIwQScgbGFiZWw9J1Rlc3QgMjBBOiBkcm9wZG93bl9mcm9tX2N1c3RvbWdzJyBjb21wYWN0PTEgZGVzY3JpcHRpb249J011bHRpcGxlIFNlbGVjdCB3aXRoIGNvbXBhY3QgZGlzcGxheSBvZiBvcHRpb25zICYgZWRpdCcgbXVsdGlwbGU9MSBzaXplPTB9PC9wPg0KPGRpdj5zZWxlY3RlZDogJ3skdGVzdDIwQX0nPC9kaXY+DQoNCjxoMj5UZXN0IDIxOiBUZXN0IGZvciBlcnJvciAtIGZpZWxkIG5vdCBzcGVjaWZpZWQgb3Igbm90IGNvcnJlY3RseSBuYW1lZDwvaDI+DQo8cD57Y29udGVudF9tb2R1bGUgbW9kdWxlPSdFQ0IyJyBibG9jaz0ndGVzdDIxJyBhc3NpZ249J3Rlc3QyMScgbGFiZWw9J1Rlc3QgMjE6IFRlc3QgZm9yIGVycm9yIC0gZmllbGQgbm90IHNwZWNpZmllZCBvciBub3QgY29ycmVjdGx5IG5hbWVkJ308L3A+DQo8ZGl2PnNlbGVjdGVkOiAneyR0ZXN0MjF9JzwvZGl2Pg0KDQo8aDI+VGVzdCAyMjogaW5wdXRfcmVwZWF0ZXI8L2gyPg0KPHA+eyRpbnB1dF9yZXBlYXRlcl90ZXN0PSJ8fCJ8ZXhwbG9kZToie2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0nRUNCMicgZmllbGQ9J2lucHV0X3JlcGVhdGVyJyBsYWJlbD0nVGVzdCAyMjogaW5wdXRfcmVwZWF0ZXInIGJsb2NrPSd0ZXN0MjInIHNpemU9MTAwIG1heF9sZW5ndGg9MjU1IGRlZmF1bHRfdmFsdWU9J2ZpbGwgaXQnIGRlc2NyaXB0aW9uPSdQcmVzcyAoKykgYW5kICgtKSB0byBhZGQgYW5kIHJlbW92ZSBhZGRpdGlvbmFsIGlucHV0IGZpZWxkcyd9IiBzY29wZT1nbG9iYWx9PC9wPg0KPGRpdiBjbGFzcz0icHJlIj4kaW5wdXRfcmVwZWF0ZXJfdGVzdDp7JGlucHV0X3JlcGVhdGVyX3Rlc3R8cHJpbnRfcn08L2Rpdj4NCg0KDQo8YnI+PGJyPjxwPlRoYXQncyBpdC4gQWxsIFRlc3RzIGRvbmUgOik8L3A+DQoNCg0KICAgICAgICAgPC9kaXY+DQogICAgICA8L2Rpdj4NCiAgIDwvZGl2Pg0KPC9kaXY+PCEtLSBtYWluLS0+DQoNCg0Ke2dsb2JhbF9jb250ZW50IG5hbWU9J2Zvb3Rlcid9DQoNCntjZ2pzX3JlbmRlciBhZGRrZXk9JzE5T2N0MTgnfQ0KDQo8L2JvZHk+DQo8L2h0bWw+]]></data>
	</file>
	<file>
	  <filename>/templates/input_repeater_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogaW5wdXRfcmVwZWF0ZXJfdGVtcGxhdGUudHBsIC0gdjEuMCAtIDE1RmViMTkNCg0KICAgLSB2MS4wIC0gMTVGZWIxOSAtIGluaXRpYWwNCg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KICAgeyRkZXNjcmlwdGlvbn0NCiAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJ7JGJsb2NrX25hbWV9IiBuYW1lPSJ7JGJsb2NrX25hbWV9IiB2YWx1ZT0ieyR2YWx1ZX0iIHNpemU9IjEwMCIvPg0KDQogICA8ZGl2IGlkPSJ7JGJsb2NrX25hbWV9LXJlcGVhdGVyIiBjbGFzcz0iZWNiX3JlcGVhdGVyIiBkYXRhLXBhcmVudD0iI3skYmxvY2tfbmFtZX0iPg0Ke2ZvcmVhY2ggJGZpZWxkcyBhcyAkZmllbGR9DQogICAgICA8ZGl2IGNsYXNzPSJyZXBlYXRlci13cmFwcGVyIj4NCiAgICAgICAgIDxpbnB1dCBpZD0icmVwZWF0ZXItZmllbGQteyRibG9ja19uYW1lfS17JGZpZWxkQGl0ZXJhdGlvbn0iIGNsYXNzPSJyZXBlYXRlci1maWVsZCIgc2l6ZT0ieyRzaXplfSIgbWF4bGVuZ3RoPSJ7JG1heF9sZW5ndGh9IiB2YWx1ZT0ieyRmaWVsZH0iIGRhdGEtcmVwZWF0ZXI9IiN7JGJsb2NrX25hbWV9LXJlcGVhdGVyIi8+DQogICAgICAgICA8YnV0dG9uIGNsYXNzPSJlY2IyLXJlcGVhdGVyLWFkZCBlY2IyLWJ1dHRvbi1pbmxpbmUgdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtaWNvbi1wcmltYXJ5IiBkYXRhLXJlcGVhdGVyPSIjeyRibG9ja19uYW1lfS1yZXBlYXRlciIgdGl0bGU9InskdGl0bGVfYWRkX2xpbmV9IiByb2xlPSJidXR0b24iIGFyaWEtZGlzYWJsZWQ9ImZhbHNlIj4rPC9idXR0b24+DQogICAgICAgICA8YnV0dG9uIGNsYXNzPSJlY2IyLXJlcGVhdGVyLXJlbW92ZSBlY2IyLWJ1dHRvbi1pbmxpbmUgdWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwgdWktYnV0dG9uLXRleHQtaWNvbi1wcmltYXJ5IiBkYXRhLXJlcGVhdGVyPSIjeyRibG9ja19uYW1lfS1yZXBlYXRlciIgdGl0bGU9InskdGl0bGVfcmVtb3ZlX2xpbmV9IiByb2xlPSJidXR0b24iIGFyaWEtZGlzYWJsZWQ9ImZhbHNlIj4mbWludXM7PC9idXR0b24+DQogICAgICA8L2Rpdj4NCnsvZm9yZWFjaH0NCiAgIDwvZGl2Pg==]]></data>
	</file>
	<file>
	  <filename>/templates/select_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogc2VsZWN0X3RlbXBsYXRlLnRwbCAtIHYxLjAgLSAyMURlYzE5DQoNCiAgIC0gdjEuMCAtIDIxRGVjMTkgLSBpbml0aWFsDQoNCiAgIE5vdGU6ICRzZWxlY3RlZF92YWx1ZXMgaXMgYW4gYXJyYXkgc3VwcGxpZWQgd2hlbiBzZWxlY3QgaXMgbXVsdGlwbGUNCiAgICAgICAgICRvcHRpb25zIGFycmF5IG9mOiAkdGV4dCA9PiAkdmFsdWUNCg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0Ke2lmICRkZXNjcmlwdGlvbn17JGRlc2NyaXB0aW9ufXsvaWZ9DQp7aWYgJG11bHRpcGxlfQ0KICAgICAgPGRpdiBjbGFzcz0iZWNiX211bHRpcGxlX3NlbGVjdCBjbXNfZHJvcGRvd24ge2lmICRjb21wYWN0fWVjYl9jb21wYWN0ey9pZn0iPg0KICAgICAge2lmICRjb21wYWN0fQ0KICAgICAgICAgPGRpdiBjbGFzcz0iZWNiX3NlbGVjdF9zdW1tYXJ5Ij4NCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJlY2Jfc2VsZWN0X3RleHQiIGRhdGEtZW1wdHk9Inskbm9uZV9zZWxlY3RlZH0iPnskc2VsZWN0ZWRfdGV4dHxkZWZhdWx0OiRub25lX3NlbGVjdGVkfTwvc3Bhbj4NCiAgICAgICAgICAgICZuYnNwOzxhIGNsYXNzPSJlY2Jfc2VsZWN0X2VkaXQiIGhyZWY9ImVkaXQvaGlkZSI+PC9hPg0KICAgICAgICAgPC9kaXY+DQogICAgICB7L2lmfQ0KICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgaWQ9InskYmxvY2tfbmFtZX0iIGNsYXNzPSJlY2Jfc2VsZWN0X2lucHV0IiBuYW1lPSJ7JGJsb2NrX25hbWV9IiB2YWx1ZT0ieyRzZWxlY3RlZH0iIC8+DQogICAgICAgICA8c2VsZWN0IGNsYXNzPSJjbXNfZHJvcGRvd24iIG5hbWU9InskYmxvY2tfbmFtZX1fdG1wIiBtdWx0aXBsZSBzaXplPSJ7JHNpemV9Ij4NCiAgICAgICAgIHtmb3JlYWNoICRvcHRpb25zIGFzICR0ZXh0ID0+ICR2YWx1ZX0NCiAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InskdmFsdWV9IiB7aWYgJHZhbHVlfGluX2FycmF5OiRzZWxlY3RlZF92YWx1ZXN9c2VsZWN0ZWR7L2lmfT57JHRleHR8ZGVmYXVsdDokdmFsdWV9PC9vcHRpb24+DQogICAgICAgICB7L2ZvcmVhY2h9DQogICAgICAgICA8L3NlbGVjdD4NCiAgICAgIDwvZGl2Pg0Ke2Vsc2V9DQoNCiAgICAgIDxzZWxlY3QgY2xhc3M9ImNtc19kcm9wZG93biIgbmFtZT0ieyRibG9ja19uYW1lfSI+DQogICAgICB7Zm9yZWFjaCAkb3B0aW9ucyBhcyAkdGV4dCA9PiAkdmFsdWV9DQogICAgICAgICA8b3B0aW9uIHZhbHVlPSJ7JHZhbHVlfSIge2lmICRzZWxlY3RlZD09JHZhbHVlfXNlbGVjdGVkey9pZn0+eyR0ZXh0fTwvb3B0aW9uPg0KICAgICAgey9mb3JlYWNofQ0KICAgICAgPC9zZWxlY3Q+DQp7L2lmfQ==]]></data>
	</file>
	<file>
	  <filename>/templates/sortablelist_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogc29ydGFibGVsaXN0X3RlbXBsYXRlLnRwbCAtIHYxLjEgLSAxNUZlYjE5DQoNCiAgIC0gdjEuMSAtIDE1RmViMTkgLSByZW1vdmVkIG91dHB1dCBvZiBqcyAmIGNzcyAtIG5vdyBtb2R1bGUgd2lkZSBvbiBmaXJzdCBjYWxsDQogICAtIHYxLjAgLSAxOEFwcjE3IC0gMXN0IHZlcnNpb24NCg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqfQ0KDQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBpZD0ieyRzZWxlY3RhcmVhX3ByZWZpeH0iIG5hbWU9Inskc2VsZWN0YXJlYV9wcmVmaXh9IiB2YWx1ZT0ieyRzZWxlY3RlZF9zdHJ9IiBzaXplPSIxMDAiLz4NCjxkaXYgY2xhc3M9ImNfZnVsbCBjZiBlY2IyLWNiIHskc2VsZWN0YXJlYV9wcmVmaXh9Ij4NCiAgICA8ZGl2IGNsYXNzPSJncmlkXzYgYWxwaGEiPg0KICAgICAgICA8ZmllbGRzZXQ+DQogICAgICAgICAgICA8bGVnZW5kPntpZiAkbGFiZWxMZWZ0IT0nJ317JGxhYmVsTGVmdH17ZWxzZX17JG1vZC0+TGFuZygnY29udGVudF9ibG9ja19sYWJlbF9zZWxlY3RlZCcpfXsvaWZ9PC9sZWdlbmQ+DQogICAgICAgICAgICA8ZGl2IGlkPSJzZWxlY3RlZC1pdGVtcyI+DQogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJzb3J0YWJsZS1lY2IyLWxpc3Qgc29ydGFibGUtbGlzdCBzZWxlY3RlZC1pdGVtcyIgZGF0YS1jbXNtcy1jYi1pbnB1dD0ieyRzZWxlY3RhcmVhX3ByZWZpeH0iDQogICAgICAgICAgICAgICAge2lmICRtYXhOdW1iZXJ9IGRhdGEtbWF4LW51bWJlcj0ieyRtYXhOdW1iZXJ9InsvaWZ9e2lmICRyZXF1aXJlZE51bWJlcn0gZGF0YS1yZXF1aXJlZC1udW1iZXI9InskcmVxdWlyZWROdW1iZXJ9InsvaWZ9Pg0KICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9InBsYWNlaG9sZGVyIG5vLXNvcnQge2lmICRzZWxlY3RlZHxAY291bnQ+MH0gaGlkZGVuey9pZn0iPntpZiAkcmVxdWlyZWROdW1iZXJ9eyRtb2QtPkxhbmcoJ2Ryb3BfcmVxdWlyZWRfaXRlbXMnLCAkcmVxdWlyZWROdW1iZXIpfXtlbHNlfXskbW9kLT5MYW5nKCdkcm9wX2l0ZW1zJyl9ey9pZn08L2xpPg0KICAgICAgICAgICAgICAgICAgICB7Zm9yZWFjaCAkc2VsZWN0ZWQgYXMgJGFsaWFzID0+ICRuYW1lfQ0KICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ1aS1zdGF0ZS1kZWZhdWx0IGNmIHNvcnRhYmxlLWl0ZW0iIGRhdGEtY21zbXMtaXRlbS1pZD0ieyRhbGlhc30iPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHskbmFtZX0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIjIiB0aXRsZT0ieyRtb2QtPkxhbmcoJ3JlbW92ZScpfSIgY2xhc3M9InVpLWljb24gdWktaWNvbi10cmFzaCBzb3J0YWJsZS1yZW1vdmUiPnskbW9kLT5MYW5nKCdyZW1vdmUnKX08L2E+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2xpPg0KICAgICAgICAgICAgICAgICAgICB7L2ZvcmVhY2h9DQogICAgICAgICAgICAgICAgPC91bD4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2ZpZWxkc2V0Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImdyaWRfNiBvbWVnYSBkcmFnZ2FibGUtYXJlYSI+DQogICAgICAgIDxmaWVsZHNldD4NCiAgICAgICAgICAgIDxsZWdlbmQ+e2lmICRsYWJlbFJpZ2h0IT0nJ317JGxhYmVsUmlnaHR9e2Vsc2V9eyRtb2QtPkxhbmcoJ2NvbnRlbnRfYmxvY2tfbGFiZWxfYXZhaWxhYmxlJyl9ey9pZn08L2xlZ2VuZD4NCiAgICAgICAgICAgIDxkaXYgaWQ9ImF2YWlsYWJsZS1pdGVtcyI+DQogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJzb3J0YWJsZS1lY2IyLWxpc3Qgc29ydGFibGUtbGlzdCBhdmFpbGFibGUtaXRlbXMiPg0KICAgICAgICAgICAgICAgIHtmb3JlYWNoICRhdmFpbGFibGUgYXMgJGFsaWFzID0+ICRuYW1lfQ0KICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ1aS1zdGF0ZS1kZWZhdWx0IiBkYXRhLWNtc21zLWl0ZW0taWQ9InskYWxpYXN9Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7JG5hbWV9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIyIgdGl0bGU9InskbW9kLT5MYW5nKCdyZW1vdmUnKX0iIGNsYXNzPSJ1aS1pY29uIHVpLWljb24tdHJhc2ggc29ydGFibGUtcmVtb3ZlIGhpZGRlbiI+eyRtb2QtPkxhbmcoJ3JlbW92ZScpfTwvYT4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGk+DQogICAgICAgICAgICAgICAgey9mb3JlYWNofQ0KICAgICAgICAgICAgICAgIDwvdWw+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9maWVsZHNldD4NCiAgICA8L2Rpdj4NCjwvZGl2Pg==]]></data>
	</file>
	<file>
	  <filename>/test/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/test/ecb2_sortable_udt_test.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ly8gZWNiMl9zb3J0YWJsZV91ZHRfdGVzdCANCi8vDQovLyByZXR1cm5zIGFuIGFycmF5IG9mIG9wdGlvbnMgdG8gZGlzcGxheSBpbiBFQ0IyIGxpc3Rzb3J0YWJsZTogInZhbHVlPWxhYmVsLHZhbHVlPWxhYmVsLC4uLiINCi8vIA0KLy8gICAgVURUIHN0b3JlZCBpbiBFQ0IyL3Rlc3QvZWNiMl9zb3J0YWJsZV91ZHRfdGVzdC5waHANCi8vICAgICAgIC0gY29weSBpbnRvIFVEVCAnZWNiMl9zb3J0YWJsZV91ZHRfdGVzdCcNCg0KJG9wdGlvbnMgPSBhcnJheSgNCiAgICdvcHRpb24xJyA9PiAnVGVzdCBPcHRpb24gMScsDQogICAnb3B0aW9uMicgPT4gJ1Rlc3QgMjIyMjIyMicsDQogICAnb3B0aW9uMycgPT4gJ1Rlc3QgbnVtYmVyIDMnLA0KICAgJ29wdGlvbjQnID0+ICdUZXN0IDQ0NDQ0NDQnLA0KICAgJ29wdGlvbjUnID0+ICdUZXN0IExBU1QgIzUnDQopOw0KDQpyZXR1cm4gJG9wdGlvbnM7]]></data>
	</file>
</module>
