TimeAccounting
2.2.2
OTRS AG
http://otrs.org/
GNU AFFERO GENERAL PUBLIC LICENSE Version 3, November 2007
Build for TimeAccounting 2.2.2.
Build for TimeAccouting 2.2.1.
Build for TimeAccouting 2.2.0 rc1.
Build for TimeAccouting 2.2.0 beta2.
First release for OTRS 3.2.x.
A Time Registration Module.
Ein Zeiterfassungsmodul.
3.2.x
<br>
<b>WELCOME</b>
<br>
<br>
You are about to install the OTRS package TimeAccounting.<br>
<br>
<br>
((enjoy))<br>
<br>
<br>
<b>WILLKOMMEN</b>
<br>
<br>
Sie sind im Begriff das OTRS-Paket TimeAccounting zu installieren.<br>
<br>
<br>
((enjoy))<br>
<br>
<br>
<b>BIENVENIDO</b>
<br>
<br>
Ud. está a punto de instalar el paquete Contabilidad de Tiempo de OTRS.<br>
<br>
<br>
((enjoy))<br>
<br>
<br>
<b>NOTICE</b>
<br>
<br>
In order to grant users access to the time accounting module, you need to add them as member to the group 'time_accounting'.
<br>
<br>
The menu items that were added by this package will be visible after you log-in to the system again.
<br>
<br>
((enjoy))<br>
<br>
<br>
<b>HINWEIS</b>
<br>
<br>
Um Benutzern Zugriff auf die Zeiterfassung zu gewähren, müssen diese Mitglied der neuen Gruppe 'time_accounting' sein.
<br>
<br>
Die von diesem Paket hinzugefügten Menü-Punkte sind erst nach einem erneuten Anmeldevorgang im System sichtbar.
<br>
<br>
((enjoy))<br>
<br>
<br>
<b>NOTA</b>
<br>
<br>
Para permitirles s los usuarios el acceso al módulo de contabilidad de tiempo, es necesario añadirlos como miembros del grupo 'time_accounting'.
<br>
<br>
Los elementos del menú agregados por este paquete, serán visibles luego de reiniciar sesión en el sistema.
<br>
<br>
((enjoy))<br>
<br>
<br>
<b>ATTENTION</b>
<br>
<br>
If you uninstall this package, all database tables that were created during installation will be deleted.
All data from these tables will be irrevocably lost!
<br>
<br>
The group 'time_accounting' that was created during package installation will be deactivated.
You can activate this group again in the admin area.
<br>
<br>
((enjoy))<br>
<br>
<br>
<b>ACHTUNG</b>
<br>
<br>
Bei der Deinstallation werden die von diesem Paket angelegten Datenbank-Tabellen gelöscht.
Alle darin enthaltenen Daten gehen unwiderruflich verloren!
<br>
<br>
Die von diesem Paket angelegte Gruppe 'time_accounting' wird deaktiviert.
Sie kann jederzeit im Admin-Bereich wieder aktiviert werden.
<br>
<br>
((enjoy))<br>
<br>
<br>
<b>ATTENTION</b>
<br>
<br>
Si usted desinstala este paquete, todas las tablas de la base de datos que se crearon durante la instalación del mismo, se eliminarán y
el contenido de dichas tablas se perderá irrevocablemente.
<br>
<br>
El grupo 'time_accounting' que se dió de alta durante la instalación del paquete, se desactivará.
Es posible reactivar dicho grupo en el área de administración.
<br>
<br>
((enjoy))<br>
<br>
<br>
<b>WELCOME</b>
<br>
<br>
You are about to upgrade the OTRS package TimeAccounting.<br>
<br>
<br>
((enjoy))<br>
<br>
<br>
<b>WILLKOMMEN</b>
<br>
<br>
Sie sind im Begriff das OTRS-Paket TimeAccounting zu aktualisieren.<br>
<br>
<br>
((enjoy))<br>
<br>
<br>
<b>BIENVENIDO</b>
<br>
<br>
Ud. está a punto de actualizar el paquete Contabilidad de Tiempo de OTRS.<br>
<br>
<br>
((enjoy))<br>
<br>
# define function name
my $FunctionName = 'CodeInstall';
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
# load the module
if ( $Self->{MainObject}->Require($CodeModule) ) {
# create new instance
my $CodeObject = $CodeModule->new( %{$Self} );
if ($CodeObject) {
# start method
if ( !$CodeObject->$FunctionName(%{$Self}) ) {
$Self->{LogObject}->Log(
Priority => 'error',
Message => "Could not call method $FunctionName() on $CodeModule.pm."
);
}
}
# error handling
else {
$Self->{LogObject}->Log(
Priority => 'error',
Message => "Could not call method new() on $CodeModule.pm."
);
}
}
# define function name
my $FunctionName = 'CodeUninstall';
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
# load the module
if ( $Self->{MainObject}->Require($CodeModule) ) {
# create new instance
my $CodeObject = $CodeModule->new( %{$Self} );
if ($CodeObject) {
# start method
if ( !$CodeObject->$FunctionName(%{$Self}) ) {
$Self->{LogObject}->Log(
Priority => 'error',
Message => "Could not call method $FunctionName() on $CodeModule.pm."
);
}
}
# error handling
else {
$Self->{LogObject}->Log(
Priority => 'error',
Message => "Could not call method new() on $CodeModule.pm."
);
}
}
2017-10-09 16:15:34
opms.otrs.com
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIxLjAiIGluaXQ9IkFwcGxpY2F0aW9uIj4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudFRpbWVBY2NvdW50aW5nIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkZyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+VGltZUFjY291bnRpbmc8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cD50aW1lX2FjY291bnRpbmc8L0dyb3VwPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+dGltZV9hY2NvdW50aW5nPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGltZSBhY2NvdW50aW5nLjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5UaW1lQWNjb3VudGluZzwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxUaXRsZT5UaW1lQWNjb3VudGluZ1RpdGxlPC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGltZSBhY2NvdW50aW5nLjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPE5hbWU+VGltZSBBY2NvdW50aW5nPC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxMaW5rPkFjdGlvbj1BZ2VudFRpbWVBY2NvdW50aW5nO1N1YmFjdGlvbj1FZGl0PC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxOYXZCYXI+VGltZUFjY291bnRpbmc8L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5NZW51PC9UeXBlPgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjYwMDA8L1ByaW8+CiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc0tleT48L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+SXRlbUFyZWE8L0Jsb2NrPgogICAgICAgICAgICAgICAgPC9OYXZCYXI+CiAgICAgICAgICAgICAgICA8TmF2QmFyPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+dGltZV9hY2NvdW50aW5nPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk92ZXJ2aWV3PC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8TmFtZT5PdmVydmlldzwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249QWdlbnRUaW1lQWNjb3VudGluZztTdWJhY3Rpb249T3ZlcnZpZXc8L0xpbms+CiAgICAgICAgICAgICAgICAgICAgPFR5cGU+PC9UeXBlPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz48L0Jsb2NrPgogICAgICAgICAgICAgICAgICAgIDxOYXZCYXI+VGltZUFjY291bnRpbmc8L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8QWNjZXNzS2V5Pm88L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8UHJpbz4xMDA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhcj4KICAgICAgICAgICAgICAgIDxOYXZCYXI+CiAgICAgICAgICAgICAgICA8R3JvdXBSbz50aW1lX2FjY291bnRpbmc8L0dyb3VwUm8+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RWRpdCB0aW1lIHJlY29yZDwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPE5hbWU+RWRpdDwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249QWdlbnRUaW1lQWNjb3VudGluZztTdWJhY3Rpb249RWRpdDwvTGluaz4KICAgICAgICAgICAgICAgICAgICA8VHlwZT48L1R5cGU+CiAgICAgICAgICAgICAgICAgICAgPEJsb2NrPjwvQmxvY2s+CiAgICAgICAgICAgICAgICAgICAgPE5hdkJhcj5UaW1lQWNjb3VudGluZzwvTmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxBY2Nlc3NLZXk+bjwvQWNjZXNzS2V5PgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjIwMDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyPgogICAgICAgICAgICAgICAgPE5hdkJhcj4KICAgICAgICAgICAgICAgIDxHcm91cD50aW1lX2FjY291bnRpbmc8L0dyb3VwPgogICAgICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlByb2plY3QgdGltZSByZXBvcnRpbmc8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgICAgIDxOYW1lPlJlcG9ydGluZzwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249QWdlbnRUaW1lQWNjb3VudGluZztTdWJhY3Rpb249UmVwb3J0aW5nPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPjwvVHlwZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+PC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8TmF2QmFyPlRpbWVBY2NvdW50aW5nPC9OYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc0tleT48L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8UHJpbz41MDA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhcj4KICAgICAgICAgICAgICAgIDxOYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPEdyb3VwPnRpbWVfYWNjb3VudGluZzwvR3JvdXA+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RWRpdCB0aW1lIGFjY291bnRpbmcgc2V0dGluZ3M8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgICAgIDxOYW1lPlNldHRpbmdzPC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxMaW5rPkFjdGlvbj1BZ2VudFRpbWVBY2NvdW50aW5nO1N1YmFjdGlvbj1TZXR0aW5nPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPjwvVHlwZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+PC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8TmF2QmFyPlRpbWVBY2NvdW50aW5nPC9OYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc0tleT48L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8UHJpbz45MDA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhcj4KICAgICAgICAgICAgICAgIDxMb2FkZXI+CiAgICAgICAgICAgICAgICAgICAgPENTUz5UaW1lQWNjb3VudGluZy5EZWZhdWx0cy5jc3M8L0NTUz4KICAgICAgICAgICAgICAgICAgICA8Q1NTPlRpbWVBY2NvdW50aW5nLlRhYmxlLmNzczwvQ1NTPgogICAgICAgICAgICAgICAgICAgIDxKYXZhU2NyaXB0PnRoaXJkcGFydHkvanF1ZXJ5LXVpLWJ1dHRvbi0xLjguMTYvanF1ZXJ5LXVpLWJ1dHRvbi5qczwvSmF2YVNjcmlwdD4KICAgICAgICAgICAgICAgICAgICA8SmF2YVNjcmlwdD50aGlyZHBhcnR5L2pxdWVyeS1jb21ib2JveC9qcXVlcnktY29tYm9ib3guanM8L0phdmFTY3JpcHQ+CiAgICAgICAgICAgICAgICAgICAgPEphdmFTY3JpcHQ+Q29yZS5VSS5Db21ib0JveC5qczwvSmF2YVNjcmlwdD4KICAgICAgICAgICAgICAgICAgICA8SmF2YVNjcmlwdD5UaW1lQWNjb3VudGluZy5BZ2VudC5Db25maXJtYXRpb25EaWFsb2cuanM8L0phdmFTY3JpcHQ+CiAgICAgICAgICAgICAgICAgICAgPEphdmFTY3JpcHQ+VGltZUFjY291bnRpbmcuQWdlbnQuRWRpdFRpbWVSZWNvcmRzLmpzPC9KYXZhU2NyaXB0PgogICAgICAgICAgICAgICAgICAgIDxKYXZhU2NyaXB0PlRpbWVBY2NvdW50aW5nLkFnZW50LkRhdGVwaWNrZXIuanM8L0phdmFTY3JpcHQ+CiAgICAgICAgICAgICAgICA8L0xvYWRlcj4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJUaW1lQWNjb3VudGluZzo6RGVmYXVsdFByb2plY3ROYW1lIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmF1bHQgbmFtZSBmb3IgbmV3IHByb2plY3RzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlRpbWVBY2NvdW50aW5nPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iIj48L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJUaW1lQWNjb3VudGluZzo6RGVmYXVsdFByb2plY3RTdGF0dXMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmYXVsdCBzdGF0dXMgZm9yIG5ldyBwcm9qZWN0cy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5UaW1lQWNjb3VudGluZzwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iMSI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjAiPmludmFsaWQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjEiPnZhbGlkPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJUaW1lQWNjb3VudGluZzo6RGVmYXVsdEFjdGlvbk5hbWUiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmYXVsdCBuYW1lIGZvciBuZXcgYWN0aW9ucy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5UaW1lQWNjb3VudGluZzwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9IiI+PC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iVGltZUFjY291bnRpbmc6OkRlZmF1bHRBY3Rpb25TdGF0dXMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmYXVsdCBzdGF0dXMgZm9yIG5ldyBhY3Rpb25zLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlRpbWVBY2NvdW50aW5nPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSIxIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMCI+aW52YWxpZDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMSI+dmFsaWQ8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlRpbWVBY2NvdW50aW5nOjpEZWZhdWx0VXNlcldlZWtseUhvdXJzIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmF1bHQgc2V0dGluZyBmb3IgdGhlIHN0YW5kYXJkIHdlZWtseSBob3Vycy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5UaW1lQWNjb3VudGluZzwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9IiI+NDA8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJUaW1lQWNjb3VudGluZzo6RGVmYXVsdFVzZXJMZWF2ZURheXMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmYXVsdCBzZXR0aW5nIGZvciBsZWF2ZSBkYXlzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlRpbWVBY2NvdW50aW5nPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iIj4yMzwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlRpbWVBY2NvdW50aW5nOjpEZWZhdWx0VXNlck92ZXJ0aW1lIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmF1bHQgc2V0dGluZyBmb3Igb3ZlcnRpbWUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+VGltZUFjY291bnRpbmc8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSIiPjA8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJUaW1lQWNjb3VudGluZzo6RGVmYXVsdFVzZXJEYXRlU3RhcnQiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmYXVsdCBzZXR0aW5nIGZvciBkYXRlIHN0YXJ0LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlRpbWVBY2NvdW50aW5nPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iIj4yMDEzLTAxLTAxPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iVGltZUFjY291bnRpbmc6OkRlZmF1bHRVc2VyRGF0ZUVuZCIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZhdWx0IHNldHRpbmcgZm9yIGRhdGUgZW5kLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlRpbWVBY2NvdW50aW5nPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iIj4yMDEzLTEyLTMxPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iVGltZUFjY291bnRpbmc6OkRlZmF1bHRVc2VyRGVzY3JpcHRpb24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmYXVsdCBzZXR0aW5nIGZvciBkZXNjcmlwdGlvbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5UaW1lQWNjb3VudGluZzwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9IiI+UHV0IHlvdXIgZGVzY3JpcHRpb24gaGVyZS48L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJUaW1lQWNjb3VudGluZzo6RGVmYXVsdFVzZXJTdGF0dXMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGVmYXVsdCBzdGF0dXMgZm9yIG5ldyB1c2Vycy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5UaW1lQWNjb3VudGluZzwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iMSI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjAiPmludmFsaWQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjEiPnZhbGlkPC9JdGVtPgogICAgICAgICAgICA8L09wdGlvbj4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJUaW1lQWNjb3VudGluZzo6TWF4SW50ZXJ2YWxPZkluY29tcGxldGVEYXlzIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1heGltdW0gbnVtYmVyIG9mIHdvcmtpbmcgZGF5cyBhZnRlciB3aGljaCB0aGUgd29ya2luZyB1bml0cyBoYXZlIHRvIGJlIGluc2VydGVkLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlRpbWVBY2NvdW50aW5nPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPFN0cmluZyBSZWdleD0iIj40PC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iVGltZUFjY291bnRpbmc6Ok1heEludGVydmFsT2ZJbmNvbXBsZXRlRGF5c0JlZm9yZVdhcm5pbmciIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TWF4aW11bSBudW1iZXIgb2Ygd29ya2luZyBkYXlzIHdpdGhvdXRoIHdvcmtpbmcgdW5pdHMgZW50cnkgYWZ0ZXIgd2hpY2ggYSB3YXJuaW5nIHdpbGwgYmUgc2hvd24uPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+VGltZUFjY291bnRpbmc8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSIiPjI8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6Tm90aWZ5TW9kdWxlIyMjODg4LVRpbWVBY2NvdW50aW5nIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgbm90aWZpY2F0aW9uIG1vZHVsZSBnaXZlcyBhIHdhcm5pbmcgaWYgdGhlcmUgYXJlIHRvbyBtYW55IGluY29tcGxldGUgd29ya2luZyBkYXlzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlRpbWVBY2NvdW50aW5nPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVOb3RpZnk8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6Tm90aWZpY2F0aW9uVGltZUFjY291bnRpbmc8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJUaW1lQWNjb3VudGluZzo6TWF4QWxsb3dlZEluc2VydERheXMiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+Rm9yIGhvdyBtYW55IGRheXMgYWdvIHlvdSBjYW4gaW5zZXJ0IHdvcmtpbmcgdW5pdHMuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+VGltZUFjY291bnRpbmc8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSIiPjEwPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iVGltZUFjY291bnRpbmc6OlJlZHVjZVRpbWUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VG8gdXNlIGlmIHNvbWUgYWN0aW9ucyByZWR1Y2VkIHRoZSB3b3JraW5nIGhvdXJzIChmb3IgZXhhbXBsZSwgaWYgb25seSBoYWxmIG9mIHRoZSB0cmF2ZWxpbmcgdGltZSBpcyBwYWlkIEtleSA9Jmd0OyB0cmF2ZWxpbmc7IENvbnRlbnQgPSZndDsgNTApLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlRpbWVBY2NvdW50aW5nPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9InRyYXZlbGluZyI+NTA8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJUaW1lQWNjb3VudGluZzo6SW5wdXRIb3Vyc1dpdGhvdXRTdGFydEVuZFRpbWUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U3BlY2lmaWVzIGlmIHdvcmtpbmcgaG91cnMgY2FuIGJlIGluc2VydGVkIHdpdGhvdXQgc3RhcnQgYW5kIGVuZCB0aW1lcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5UaW1lQWNjb3VudGluZzwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iMSI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjAiPk5vPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxIj5ZZXM8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlByZUFwcGxpY2F0aW9uTW9kdWxlIyMjQWdlbnRUaW1lQWNjb3VudGluZyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIG1vZHVsZSBmb3JjZXMgaW5zZXJ0cyBpbiBUaW1lQWNjb3VudGluZy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5UaW1lQWNjb3VudGluZzwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9IiI+S2VybmVsOjpNb2R1bGVzOjpBZ2VudFRpbWVBY2NvdW50aW5nPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iVGltZUFjY291bnRpbmc6OlByb2plY3QyUmVtYXJrUmVnRXhwIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIHByb2plY3RzIGZvciB3aGljaCBhIHJlbWFyayBpcyByZXF1aXJlZC4gSWYgdGhlIFJlZ0V4cCBtYXRjaGVzIG9uIHRoZSBwcm9qZWN0LCB5b3UgaGF2ZSB0byBpbnNlcnQgYSByZW1hcmsgdG9vLiBUaGUgUmVnRXhwIHVzZSB0aGUgc214IHBhcmFtZXRlci48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5UaW1lQWNjb3VudGluZzwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9IiI+Xig/OiBQUk9KRUNUXCMgfCBJTkZSQTogfCBQUk9EVUNUOiApPC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iVGltZUFjY291bnRpbmc6OlByb2plY3RMaXN0Q29uc3RyYWludHMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+UmVndWxhciBleHByZXNzaW9ucyBmb3IgY29uc3RyYWluaW5nIHByb2plY3QgbGlzdCBhY2NvcmRpbmcgdG8gdXNlciBncm91cHMuIEtleSBjb250YWlucyByZWd1bGFyIGV4cHJlc3Npb24gZm9yIHByb2plY3QocyksIGNvbnRlbnQgY29udGFpbnMgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgZ3JvdXBzLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlRpbWVBY2NvdW50aW5nPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJUaW1lQWNjb3VudGluZzo6QWN0aW9uTGlzdENvbnN0cmFpbnRzIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlJlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIGNvbnN0cmFpbmluZyBhY3Rpb24gbGlzdCBhY2NvcmRpbmcgdG8gc2VsZWN0ZWQgcHJvamVjdC4gS2V5IGNvbnRhaW5zIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgcHJvamVjdChzKSwgY29udGVudCBjb250YWlucyByZWd1bGFyIGV4cHJlc3Npb25zIGZvciBhY3Rpb24ocykuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+VGltZUFjY291bnRpbmc8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlRpbWVBY2NvdW50aW5nOjpFbmFibGVBdXRvQ29tcGxldGlvbiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5JZiBlbmFibGVkLCB0aGUgZHJvcGRvd24gZWxlbWVudHMgaW4gdGhlIGVkaXQgc2NyZWVuIGFyZSBjaGFuZ2VkIHRvIGF1dG9jb21wbGV0aW9uIGZpZWxkcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5UaW1lQWNjb3VudGluZzwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iMSI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjAiPk5vPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxIj5ZZXM8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlRpbWVBY2NvdW50aW5nOjpBbGxvd01hc3NFbnRyeUZvclVzZXIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+SWYgZW5hYmxlZCwgdGhlIHVzZXIgaXMgYWxsb3dlZCB0byBlbnRlciAib24gdmFjYXRpb24gbGVhdmUiLCAib24gc2ljayBsZWF2ZSIgYW5kICJvbiBvdmVydGltZSBsZWF2ZSIgdG8gbXVsdGlwbGUgZGF0ZXMgYXQgb25jZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5UaW1lQWNjb3VudGluZzwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxPcHRpb24gU2VsZWN0ZWRJRD0iMCI+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjAiPk5vPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSIxIj5ZZXM8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpUb29sQmFyTW9kdWxlIyMjMjAxLVRpbWVBY2NvdW50aW5nOjpJbmNvbXBsZXRlV29ya2luZ0RheXMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+QWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2YgaW5jb21wbGV0ZSB3b3JraW5nIGRheXMgZm9yIHRoZSB1c2VyLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPlRpbWVBY2NvdW50aW5nPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpUb29sQmFyTW9kdWxlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OlRvb2xCYXJJbmNvbXBsZXRlV29ya2luZ0RheXM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNzc0NsYXNzIj5JbmNvbXBsZXRlV29ya2luZ0RheXM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ikljb24iPmljb24tdGltZTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlN0YXRzOjpEeW5hbWljT2JqZWN0UmVnaXN0cmF0aW9uIyMjVGltZUFjY291bnRpbmciIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RGV0ZXJtaW5lcyBpZiB0aGUgc3RhdGlzdGljcyBtb2R1bGUgbWF5IGdlbmVyYXRlIHRpbWUgYWNjb3VudGluZyBpbmZvcm1hdGlvbi48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5UaW1lQWNjb3VudGluZzwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OlN0YXRzPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpTeXN0ZW06OlN0YXRzOjpEeW5hbWljOjpUaW1lQWNjb3VudGluZzwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KPC9vdHJzX2NvbmZpZz4K
77u/IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9kZV9UaW1lQWNjb3VudGluZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmRlX1RpbWVBY2NvdW50aW5nOwoKdXNlIHV0Zjg7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhlIFRpbWUgQWNjb3VudGluZyBvZiB0aGlzIGRheT8nfSA9ICdNw7ZjaHRlbiBTaWUgd2lya2xpY2ggZGVuIEVpbnRyYWcgZsO8ciBkZW4gYWt0dWVsbGVuIFRhZyBsw7ZzY2hlbj8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRpbWUgUmVjb3JkJ30gPSAnWmVpdGVyZmFzc3VuZyBiZWFyYmVpdGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3Qgc2V0dGluZ3MnfSA9ICdQcm9qZWt0a29uZmlndXJhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXRlIE5hdmlnYXRpb24nfSA9ICdEYXR1bXNhdXN3YWhsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByZXZpb3VzIGRheSd9ID0gJ1ZvcmhlcmlnZXIgVGFnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05leHQgZGF5J30gPSAnTsOkY2hzdGVyIFRhZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXlzIHdpdGhvdXQgZW50cmllcyd9ID0gJ05pY2h0IGF1c2dlZsO8bGx0ZSBUYWdlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZpZWxkcyBhcmUgbWFya2VkIHdpdGggYSAiKiIuJ30gPSAnRmVsZGVyLCBkaWUgYXVzZ2Vmw7xsbHQgd2VyZGVuIG3DvHNzZW4sIHNpbmQgbWl0IGVpbmVtIFN0ZXJuICIqIiBnZWtlbm56ZWljaG5ldC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGhhdmUgdG8gZmlsbCBpbiBzdGFydCBhbmQgZW5kIHRpbWUgb3IgYSB0aW1lIHBlcmlvZC4nfSA9ICdTaWUgbcO8c3NlbiBlaW5lIFN0YXJ0LSB1bmQgRW5kemVpdCBvZGVyIGVpbmUgWmVpdHNwYW5uZSBhbmdlYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAnUHJvamVrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYXNrJ30gPSAnVMOkdGlna2VpdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZW1hcmsnfSA9ICdBbm1lcmt1bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF0ZSBOYXZpZ2F0aW9uJ30gPSAnRGF0dW1zbmF2aWdhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgYWRkIGEgcmVtYXJrIHdpdGggbW9yZSB0aGFuIDggY2hhcmFjdGVycyEuJ30gPSAnQml0dGUgZ2ViZW4gU2llIGVpbmUgQW5tZXJrdW5nIG1pdCBtaW5kZXN0ZW5zIDggWmVpY2hlbiBMw6RuZ2UgZWluLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZWdhdGl2ZSB0aW1lcyBhcmUgbm90IGFsbG93ZWQuJ30gPSAnTmVnYXRpdmUgQW5nYWJlbiBzaW5kIG5pY2h0IGVybGF1YnQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGVhdGVkIGhvdXJzIGFyZSBub3QgYWxsb3dlZC4gU3RhcnQgdGltZSBtYXRjaGVzIGFub3RoZXIgaW50ZXJ2YWwuJ30gPSAnRGllc2UgU3RhcnR6ZWl0IHd1cmRlIGJlcmVpdHMgaW4gZWluZW0gYW5kZXJlbiBFaW50cmFnIGFuZ2VnZWJlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIHRpbWUgbXVzdCBiZSBhZnRlciBzdGFydCB0aW1lLid9ID0gJ0RpZSBFbmR6ZWl0IG11c3MgbmFjaCBkZXIgU3RhcnR6ZWl0IHNlaW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGVhdGVkIGhvdXJzIGFyZSBub3QgYWxsb3dlZC4gRW5kIHRpbWUgbWF0Y2hlcyBhbm90aGVyIGludGVydmFsLid9ID0gJ0RpZXNlIEVuZHplaXQgd3VyZGUgYmVyZWl0cyBpbiBlaW5lbSBhbmRlcmVuIEVpbnRyYWcgYW5nZWdlYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJpb2QgaXMgYmlnZ2VyIHRoYW4gdGhlIGludGVydmFsIGJldHdlZW4gc3RhcnQgYW5kIGVuZCB0aW1lcyEnfSA9ICdEaWUgYW5nZWdlYmVuZSBEYXVlciBpc3QgbMOkbmdlciBhbHMgZGllIFplaXQgendpc2NoZW4gU3RhcnQtIHVuZCBFbmR6ZWl0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIHBlcmlvZCEgQSBkYXkgaGFzIG9ubHkgMjQgaG91cnMuJ30gPSAnVW5nw7xsdGlnZSBBbmdhYmUuIEVpbiBUYWcgaGF0IG51ciAyNCBTdHVuZGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHZhbGlkIHBlcmlvZCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLid9ID0gJ0VpbmUgZ8O8bHRpZ2UgWmVpdGRhdWVyIG11c3MgZ3LDtsOfZXIgYWxzIE51bGwgc2Vpbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBwZXJpb2QhIE5lZ2F0aXZlIHBlcmlvZHMgYXJlIG5vdCBhbGxvd2VkLid9ID0gJ1VuZ8O8bHRpZ2UgQW5nYWJlLiBOZWdhdGl2ZSBaZWl0c3Bhbm5lbiBzaW5kIG5pY2h0IG3DtmdsaWNoLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgb25lIHJvdyd9ID0gJ0VpbmUgWmVpbGUgaGluenVmw7xnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG90YWwnfSA9ICdTdW1tZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbiB2YWNhdGlvbid9ID0gJ2ltIFVybGF1Yic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG9ubHkgc2VsZWN0IG9uZSBjaGVja2JveCBlbGVtZW50ISd9ID0gJ1NpZSBrw7ZubmVuIG51ciBlaW5lIENoZWNrYm94IG1hcmtpZXJlbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT24gc2ljayBsZWF2ZSd9ID0gJ0Vya3Jhbmt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09uIG92ZXJ0aW1lIGxlYXZlJ30gPSAnw5xiZXJzdHVuZGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIGl0ZW1zJ30gPSAnQWxsZSBFaW50csOkZ2UgYW56ZWlnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIFRpbWUgQWNjb3VudGluZyBFbnRyeSd9ID0gJ0VpbnRyYWcgbMO2c2NoZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlybSBpbnNlcnQnfSA9ICdFaW5nYWJlIGJlc3TDpHRpZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3b3JrZWQgd2hpbGUgeW91IHdlcmUgb24gc2ljayBsZWF2ZT8nfSA9ICdTaW5kIFNpZSBzaWNoZXIsIGRhc3MgU2llIGdlYXJiZWl0ZXQgaGFiZW4sIG9id29obCBTaWUgZXJrcmFua3Qgc2luZD8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCB3aGlsZSB5b3Ugd2VyZSBvbiB2YWNhdGlvbj8nfSA9ICdTaW5kIFNpZSBzaWNoZXIsIGRhc3MgU2llIGdlYXJiZWl0ZXQgaGFiZW4sIG9id29obCBTaWUgaW0gVXJsYXViIHNpbmQ/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3b3JrZWQgd2hpbGUgeW91IHdlcmUgb24gb3ZlcnRpbWUgbGVhdmU/J30gPSAnU2luZCBTaWUgc2ljaGVyLCBkYXNzIFNpZSBnZWFyYmVpdGV0IGhhYmVuLCBvYndvaGwgU2llIMOcYmVyc3R1bmRlbiBnZW5vbW1lbiBoYWJlbj8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCBtb3JlIHRoYW4gMTYgaG91cnM/J30gPSAnU2luZCBTaWUgc2ljaGVyLCBkYXNzIFNpZSBtZWhyIGFscyAxNiBTdHVuZGVuIGdlYXJiZWl0ZXQgaGFiZW4/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nT3ZlcnZpZXcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgcmVwb3J0aW5nIG1vbnRobHkgb3ZlcnZpZXcnfSA9ICdNb25hdHPDvGJlcnNpY2h0IFplaXRlcmZhc3N1bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnRpbWUgKEhvdXJzKSd9ID0gJ8OcYmVyc3R1bmRlbiAoaW4gU3R1bmRlbiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnRpbWUgKHRoaXMgbW9udGgpJ30gPSAnw5xiZXJzdHVuZGVuIChkaWVzZXIgTW9uYXQpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ0aW1lICh0b3RhbCknfSA9ICfDnGJlcnN0dW5kZW4gKFN1bW1lKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZW1haW5pbmcgb3ZlcnRpbWUgbGVhdmUnfSA9ICfDnGJlcnN0dW5kZW4gKHZlcmJsZWliZW5kKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbiAoRGF5cyknfSA9ICdVcmxhdWIgKGluIFRhZ2VuKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbiB0YWtlbiAodGhpcyBtb250aCknfSA9ICdVcmxhdWJzdGFnZSAoZGllc2VyIE1vbmF0KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbiB0YWtlbiAodG90YWwpJ30gPSAnVXJsYXVic3RhZ2UgKFN1bW1lKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZW1haW5pbmcgdmFjYXRpb24nfSA9ICdVcmxhdWJzdGFnZSAodmVyYmxlaWJlbmQpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpY2sgTGVhdmUgKERheXMpJ30gPSAnRXJrcmFua3QgKGluIFRhZ2VuKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWNrIGxlYXZlIHRha2VuICh0aGlzIG1vbnRoKSd9ID0gJ0Vya3Jhbmt0IChkaWVzZXIgTW9uYXQpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpY2sgbGVhdmUgdGFrZW4gKHRvdGFsKSd9ID0gJ0Vya3Jhbmt0IChTdW1tZSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJldmlvdXMgbW9udGgnfSA9ICdWb3JoZXJpZ2VyIE1vbmF0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05leHQgbW9udGgnfSA9ICdOw6RjaHN0ZXIgTW9uYXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF5J30gPSAnVGFnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dlZWtkYXknfSA9ICdXb2NoZW50YWcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya2luZyBIb3Vycyd9ID0gJ0FyYmVpdHNzdHVuZGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvdGFsIHdvcmtlZCBob3Vycyd9ID0gJ0FyYmVpdHNzdHVuZGVuIChnZXNhbXQpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXJcJ3MgcHJvamVjdCBvdmVydmlldyd9ID0gJ051dHplcmJlcmljaHRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hvdXJzIChtb250aGx5KSd9ID0gJ1N0dW5kZW4gKGltIE1vbmF0KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIb3VycyAoTGlmZXRpbWUpJ30gPSAnU3R1bmRlbiAoZ2VzYW10KSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFuZCB0b3RhbCd9ID0gJ1N1bW1lJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nUHJvamVjdFJlcG9ydGluZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCByZXBvcnQnfSA9ICdQcm9qZWt0w7xiZXJzaWNodCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRUaW1lQWNjb3VudGluZ1JlcG9ydGluZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSByZXBvcnRpbmcnfSA9ICdaZWl0YmVyaWNodGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9udGggTmF2aWdhdGlvbid9ID0gJ0RhdHVtc2F1c3dhaGwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciByZXBvcnRzJ30gPSAnTnV0emVyYmVyaWNodGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9udGhseSB0b3RhbCd9ID0gJ3BybyBNb25hdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWZldGltZSB0b3RhbCd9ID0gJ1N1bW1lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ0aW1lIGxlYXZlJ30gPSAnw5xiZXJzdHVuZGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZhY2F0aW9uJ30gPSAnVXJsYXViJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpY2sgbGVhdmUnfSA9ICdFcmtyYW5rdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbiByZW1haW5pbmcnfSA9ICdWZXJibGVpYmVuZGUgVXJsYXVic3RhZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCByZXBvcnRzJ30gPSAnUHJvamVrdGJlcmljaHRlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nU2V0dGluZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBUaW1lIEFjY291bnRpbmcgUHJvamVjdCBTZXR0aW5ncyd9ID0gJ1plaXRlcmZhc3N1bmc6IEJlYXJiZWl0dW5nIGRlciBQcm9qZWt0a29uZmlndXJhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgcHJvamVjdCd9ID0gJ1Byb2pla3QgaGluenVmw7xnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFByb2plY3QnfSA9ICdQcm9qZWt0IGhpbnp1ZsO8Z2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUHJvamVjdCBTZXR0aW5ncyd9ID0gJ1Byb2pla3Rrb25maWd1cmF0aW9uIGJlYXJiZWl0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlcmUgaXMgYWxyZWFkeSBhIHByb2plY3Qgd2l0aCB0aGlzIG5hbWUuIFBsZWFzZSwgY2hvb3NlIGEgZGlmZmVyZW50IG9uZS4nfSA9ICdFaW4gUHJvamVrdCBtaXQgZ2xlaWNoZW0gTmFtZW4gZXhpc3RpZXJ0IGJlcmVpdHMuIEJpdHRlIHfDpGhsZW4gU2llIGVpbmVuIGFuZGVyZW4gTmFtZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGltZSBBY2NvdW50aW5nIFNldHRpbmdzJ30gPSAnWmVpdGVyZmFzc3VuZ3NlaW5zdGVsbHVuZ2VuIGJlYXJiZWl0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIHRhc2snfSA9ICdUw6R0aWdrZWl0IGhpbnp1ZsO8Z2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyB1c2VyJ30gPSAnTmV1ZXIgQmVudXR6ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlsdGVyIGZvciBQcm9qZWN0cyd9ID0gJ0ZpbHRlciBmw7xyIFByb2pla3RlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgVGFza3MnfSA9ICdGaWx0ZXIgZsO8ciBUw6R0aWdrZWl0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlsdGVyIGZvciBVc2Vycyd9ID0gJ0ZpbHRlciBmw7xyIEJlbnV0emVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgTGlzdCd9ID0gJ1Byb2pla3RsaXN0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYXNrIExpc3QnfSA9ICdUw6R0aWdrZWl0c2xpc3RlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBUYXNrJ30gPSAnVMOkdGlna2VpdCBoaW56dWbDvGdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRhc2sgU2V0dGluZ3MnfSA9ICdUw6R0aWdrZWl0c2VpbnN0ZWxsdW5nZW4gYmVhcmJlaXRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGVyZSBpcyBhbHJlYWR5IGEgdGFzayB3aXRoIHRoaXMgbmFtZS4gUGxlYXNlLCBjaG9vc2UgYSBkaWZmZXJlbnQgb25lLid9ID0gJ0VpbmUgVMOkdGlna2VpdCBtaXQgZ2xlaWNoZW0gTmFtZW4gZXhpc3RpZXJ0IGJlcmVpdHMuIEJpdHRlIHfDpGhsZW4gU2llIGVpbmVuIGFuZGVyZW4gTmFtZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgTGlzdCd9ID0gJ0JlbnV0emVybGlzdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IFVzZXIgU2V0dGluZ3MnfSA9ICdFaW5zdGVsbHVuZ2VuIGbDvHIgbmV1ZW4gQmVudXR6ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBVc2VyIFNldHRpbmdzJ30gPSAnQmVudXR6ZXJlaW5zdGVsbHVuZ2VuIGJlYXJiZWl0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudHMnfSA9ICdLb21tZW50YXJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgT3ZlcnRpbWUnfSA9ICfDnGJlcnN0dW5kZW4gYW56ZWlnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3cgcHJvamVjdCBjcmVhdGlvbid9ID0gJ1Byb2pla3QgZXJzdGVsbGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlcmlvZCBCZWdpbid9ID0gJ0RhdHVtIEJlZ2lubic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJpb2QgRW5kJ30gPSAnRGF0dW0gRW5kZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXlzIG9mIFZhY2F0aW9uJ30gPSAnVXJsYXVic3RhZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG91cnMgcGVyIFdlZWsnfSA9ICdXb2NoZW5zdHVuZGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F1dGhvcml6ZWQgT3ZlcnRpbWUnfSA9ICdhdXRvcmlzaWVydGUgw5xiZXJzdHVuZGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlcmlvZCBlbmQgbXVzdCBiZSBhZnRlciBwZXJpb2QgYmVnaW4uJ30gPSAnRGFzIEVuZGUgZGVyIFplaXRzcGFubmUgbXVzcyBuYWNoIGRlbSBBbmZhbmcgc2Vpbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdGltZSBwZXJpb2RzIGZvdW5kLid9ID0gJ0tlaW5lIFplaXRzcGFubmUgZ2VmdW5kZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCB0aW1lIHBlcmlvZCd9ID0gJ1plaXRzcGFubmUgaGluenVmw7xnZW4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdWaWV3CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWaWV3IFRpbWUgUmVjb3JkJ30gPSAnRGF0ZW5zYXR6IGFuemVpZ2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZpZXcgb2YgJ30gPSAnQW5zaWNodCB2b24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF0ZSBuYXZpZ2F0aW9uJ30gPSAnQXVzd2FobCBEYXR1bSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBkYXRhIGZvdW5kIGZvciB0aGlzIGRheS4nfSA9ICdLZWluIEVpbnRyYWcgZsO8ciBkaWVzZW4gVGFnIGdlZnVuZGVuLic7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGluY29tcGxldGUgd29ya2luZyBkYXlzIGZvciB0aGUgdXNlci4nfSA9ICdNb2R1bCB6dW0gQW56ZWlnZW4gZGVyIEFuemFobCBkZXIgdW52b2xsc3TDpG5kaWdlbiBBcmJlaXRzdGFnZSBkZXMgQmVudXR6ZXJzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IG5hbWUgZm9yIG5ldyBhY3Rpb25zLid9ID0gJ0luaXRpYWxlciBOYW1lIGVpbmVyIG5ldWVuIFTDpHRpZ2tlaXQgaW4gZGVyIFplaXRlcmZhc3N1bmcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbmFtZSBmb3IgbmV3IHByb2plY3RzLid9ID0gJ0FuZmFuZ3NzdGF0dXMgZWluZXMgbmV1ZW4gUHJvamVrdHMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2V0dGluZyBmb3IgZGF0ZSBlbmQuJ30gPSAnRW5kZGF0dW0gZsO8ciBkaWUgRWluZ2FiZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2V0dGluZyBmb3IgZGF0ZSBzdGFydC4nfSA9ICdTdGFydGRhdHVtIGbDvHIgZGllIEVpbmdhYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNldHRpbmcgZm9yIGxlYXZlIGRheXMuJ30gPSAnU3RhbmRhcmQgVXJsYXVic3RhZ2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2V0dGluZyBmb3Igb3ZlcnRpbWUuJ30gPSAnRXZlbnR1ZWxsIHZvcmhhbmRlbmVyIMOcYmVyc3R1bmRlbsO8YmVydHJhZy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciB0aGUgc3RhbmRhcmQgd2Vla2x5IGhvdXJzLid9ID0gJ1N0YW5kYXJkIFdvY2hlbmFyYmVpdHN6ZWl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXR1cyBmb3IgbmV3IGFjdGlvbnMuJ30gPSAnQW5mYW5nc3N0YXR1cyBlaW5lciBuZXVlbiBUw6R0aWdrZWl0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXR1cyBmb3IgbmV3IHByb2plY3RzLid9ID0gJ0FuZmFuZ3NzdGF0dXMgZWluZXMgbmV1ZW4gUHJvamVrdHMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdHVzIGZvciBuZXcgdXNlcnMuJ30gPSAnQW5mYW5nc3N0YXR1cyBlaW5lcyBuZXVlbiBCZW51dHplcnMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHByb2plY3RzIGZvciB3aGljaCBhIHJlbWFyayBpcyByZXF1aXJlZC4gSWYgdGhlIFJlZ0V4cCBtYXRjaGVzIG9uIHRoZSBwcm9qZWN0LCB5b3UgaGF2ZSB0byBpbnNlcnQgYSByZW1hcmsgdG9vLiBUaGUgUmVnRXhwIHVzZSB0aGUgc214IHBhcmFtZXRlci4nfSA9ICdJbm5lcmhhbGIgZGllc2VyIEtvbmZpZ3VyYXRpb25zb3B0aW9uIGthbm4gZWluZSBSZWdFeHAgZGVmaW5pZXJ0IHdlcmRlbiwgZGllIGZlc3RsZWd0LCBiZWkgd2VsY2hlbiBQcm9qZWt0ZW4gZWluZSBCZW1lcmt1bmcgZWluZ2V0cmFnZW4gd2VyZGVuIG11c3MgKGRpZSBSZWdFeHAgYXJiZWl0ZXQgbWl0IHNteC1QYXJhbWV0ZXJuKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aW1lIGFjY291bnRpbmcgc2V0dGluZ3MnfSA9ICdaZWl0ZXJmYXNzdW5nc2VpbnN0ZWxsdW5nZW4gYmVhcmJlaXRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRpbWUgcmVjb3JkJ30gPSAnWmVpdGVyZmFzc3VuZyBiZWFyYmVpdGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZvciBob3cgbWFueSBkYXlzIGFnbyB5b3UgY2FuIGluc2VydCB3b3JraW5nIHVuaXRzLid9ID0gJ0xlZ3QgZmVzdCwgYmlzIHdhbm4gbWFuIGluIMOkbHRlcmUgWmVpdGVpbnRyw6RnZSBiZWFyYmVpdGVuIGthbm4gKHouIEIuIDEwIFRhZ2UgenVyw7xja2xpZWdlbmQpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBlbmFibGVkLCB0aGUgZHJvcGRvd24gZWxlbWVudHMgaW4gdGhlIGVkaXQgc2NyZWVuIGFyZSBjaGFuZ2VkIHRvIGF1dG9jb21wbGV0aW9uIGZpZWxkcy4nfSA9ICdBa3RpdmllcnQgZGllIEF1dG9jb21wbGV0aW9uIGF1ZiBkZW4gRWluZ2FiZWZlbGRlcm4gaW0gQmVhcmJlaXRlbi1CZXJlaWNoLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiB3b3JraW5nIGRheXMgYWZ0ZXIgd2hpY2ggdGhlIHdvcmtpbmcgdW5pdHMgaGF2ZSB0byBiZSBpbnNlcnRlZC4nfSA9ICdNYXhpbWFsZSBBbnphaGwgdm9uIEFyYmVpdHN0YWdlbiwgbmFjaCBkZXIgZGllIEFyYmVpdHN6ZWl0IGVpbmdldHJhZ2VuIHdlcmRlbiBtdXNzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiB3b3JraW5nIGRheXMgd2l0aG91dGggd29ya2luZyB1bml0cyBlbnRyeSBhZnRlciB3aGljaCBhIHdhcm5pbmcgd2lsbCBiZSBzaG93bi4nfSA9ICdNYXhpbWFsZSBBbnphaGwgdm9uIEFyYmVpdHN0YWdlbiBvaG5lIEVpbnRyYWcsIG5hY2ggZGVyIGVpbmUgV2FybnVuZyBhbmdlemVpZ3Qgd2lyZC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCB0aW1lIHJlcG9ydGluZyd9ID0gJ1Byb2pla3QgWmVpdGVyZmFzc3VuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWd1bGFyIGV4cHJlc3Npb25zIGZvciBjb25zdHJhaW5pbmcgYWN0aW9uIGxpc3QgYWNjb3JkaW5nIHRvIHNlbGVjdGVkIHByb2plY3QuIEtleSBjb250YWlucyByZWd1bGFyIGV4cHJlc3Npb24gZm9yIHByb2plY3QocyksIGNvbnRlbnQgY29udGFpbnMgcmVndWxhciBleHByZXNzaW9ucyBmb3IgYWN0aW9uKHMpLid9ID0gJ1JlZ3Vsw6RyZXIgQXVzZHJ1Y2ssIHVtIGRpZSBMaXN0ZSBkZXIgVMOkdGlna2VpdGVuIGJlesO8Z2xpY2ggZGVzIGF1c2dld8OkaGx0ZW4gUHJvamVrdHMgZWluenVzY2hyw6Rua2VuLiBEZXIgU2NobMO8c3NlbCBlbnRow6RsdCBlaW5lbiBSZWd1bMOkcmVuIEF1c2RydWNrIGbDvHIgUHJvamVrdGUsIGRlciBXZXJ0IGVpbmVuIFJlZ3Vsw6RyZW4gQXVzZHJ1Y2sgZsO8ciBkaWUgVMOkdGlna2VpdGVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWd1bGFyIGV4cHJlc3Npb25zIGZvciBjb25zdHJhaW5pbmcgcHJvamVjdCBsaXN0IGFjY29yZGluZyB0byB1c2VyIGdyb3Vwcy4gS2V5IGNvbnRhaW5zIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgcHJvamVjdChzKSwgY29udGVudCBjb250YWlucyBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBncm91cHMuJ30gPSAnUmVndWzDpHJlciBBdXNkcnVjaywgdW0gZGllIExpc3RlIGRlciBQcm9qZWt0ZSBiZXrDvGdsaWNoIGRlcyBha3RpdmVuIEJlbnV0emVycyBlaW56dXNjaHLDpG5rZW4uIERlciBTY2hsw7xzc2VsIGVudGjDpGx0IGVpbmVuIFJlZ3Vsw6RyZW4gQXVzZHJ1Y2sgZsO8ciBQcm9qZWt0ZSwgZGVyIFdlcnQgZW50aMOkbHQgZWluZSBrb21tYS1zZXBhcmllcnRlIExpc3RlIHZvbiBCZW51dHplcmdydXBwZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyBpZiB3b3JraW5nIGhvdXJzIGNhbiBiZSBpbnNlcnRlZCB3aXRob3V0IHN0YXJ0IGFuZCBlbmQgdGltZXMuJ30gPSAnR2lidCBhbiwgb2IgQXJiZWl0c3N0dW5kZW4gb2huZSBTdGFydC0gdW5kIEVuZHplaXQgZWluZ2VnZWJlbiB3ZXJkZW4ga8O2bm5lbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBtb2R1bGUgZm9yY2VzIGluc2VydHMgaW4gVGltZUFjY291bnRpbmcuJ30gPSAnRGllc2VzIE1vZHVsIHp3aW5ndCB6dXIgRWluZ2FiZSB2b24gU3R1bmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBub3RpZmljYXRpb24gbW9kdWxlIGdpdmVzIGEgd2FybmluZyBpZiB0aGVyZSBhcmUgdG9vIG1hbnkgaW5jb21wbGV0ZSB3b3JraW5nIGRheXMuJ30gPSAnTW9kdWwsIGRhc3MgZGVuIEFnZW50IGltIE5vdGlmaWNhdGlvbi1CZXJlaWNoIGRlcyBBZ2VudC1JbnRlcmZhY2VzIGRhcsO8YmVyIGluZm9ybWllcnQsIHdlbm4gc2Nob24genUgbGFuZ2Uga2VpbmUgU3R1bmRlbiBtZWhyIGVpbmdldHJhZ2VuIHd1cmRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBhY2NvdW50aW5nLid9ID0gJ1plaXRlcmZhc3N1bmcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvIHVzZSBpZiBzb21lIGFjdGlvbnMgcmVkdWNlZCB0aGUgd29ya2luZyBob3VycyAoZm9yIGV4YW1wbGUsIGlmIG9ubHkgaGFsZiBvZiB0aGUgdHJhdmVsaW5nIHRpbWUgaXMgcGFpZCBLZXkgPT4gdHJhdmVsaW5nOyBDb250ZW50ID0+IDUwKS4nfSA9ICdIaWVyIGthbm4gbWFuIGVpbmdlYmVuLCBvYiBmw7xyIGVpbmUgYmVzdGltbXRlIFTDpHRpZ2tlaXQsIGRpZSB6dSB2ZXJyZWNobmVuZGVuIFN0dW5kZW4gZ2Vrw7xyenQgd2VyZGVuLiBaLiBCIHdlbm4gUmVpc2V6ZWl0ZW4gbnVyIHp1ciBIw6RsZnRlIHZlcmfDvHRldCB3ZXJkZW4gKEtleSA9Jmd0OyBqb3VybmV5OyBDb250ZW50ID0mZ3Q7IDUwKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgc3RhdGlzdGljcyBtb2R1bGUgbWF5IGdlbmVyYXRlIHRpbWUgYWNjb3VudGluZyBpbmZvcm1hdGlvbi4nfSA9ICdCZXN0aW1tdCwgb2IgZGFzIFN0YXRpc3Rpay1Nb2R1bCBJbmZvcm1hdGlvbmVuIHp1ciBaZWl0ZXJmYXNzdW5nIGdlbmVyaWVyZW4ga2Fubi4nOwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbid9ID0gJ01vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1R1ZSd9ID0gJ0RpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dlZCd9ID0gJ01pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RodSd9ID0gJ0RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyaSd9ID0gJ0ZyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdCd9ID0gJ1NhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1bid9ID0gJ1NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0phbnVhcnknfSA9ICdKYW51YXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmVicnVhcnknfSA9ICdGZWJydWFyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hcmNoJ30gPSAnTcOkcnonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXByaWwnfSA9ICdBcHJpbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXknfSA9ICdNYWknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSnVuZSd9ID0gJ0p1bmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSnVseSd9ID0gJ0p1bGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXVndXN0J30gPSAnQXVndXN0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcHRlbWJlcid9ID0gJ1NlcHRlbWJlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPY3RvYmVyJ30gPSAnT2t0b2Jlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3ZlbWJlcid9ID0gJ05vdmVtYmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlY2VtYmVyJ30gPSAnRGV6ZW1iZXInOwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHByb2plY3RzJ30gPSAnQWxsZSBQcm9qZWt0ZSBhbnplaWdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHZhbGlkIHByb2plY3RzJ30gPSAnQWxsZSBnw7xsdGlnZW4gUHJvamVrdGUgYW56ZWlnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZUFjY291bnRpbmcnfSA9ICdaZWl0ZXJmYXNzdW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdGlvbnMnfSA9ICdBa3Rpb25lbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIHVwZGF0ZWQhJ30gPSAnQmVudXR6ZXIgYWt0dWFsaXNpZXJ0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIGFkZGVkISd9ID0gJ0JlbnV0emVyIGhpbnp1Z2Vmw7xndCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCBhZGRlZCEnfSA9ICdQcm9qZWt0IGhpbnp1Z2Vmw7xndCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCB1cGRhdGVkISd9ID0gJ1Byb2pla3QgYWt0dWFsaXNpZXJ0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYXNrIGFkZGVkISd9ID0gJ1TDpHRpZ2tlaXQgaGluenVnZWbDvGd0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYXNrIHVwZGF0ZWQhJ30gPSAnVMOkdGlna2VpdCBha3R1YWxpc2llcnQhJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBkZWxldGUgV29ya2luZyBVbml0cyEnfSA9ICdLYW5uIEFyYmVpdHNzdHVuZGVuIG5pY2h0IGzDtnNjaGVuISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2F2ZSBzZXR0aW5ncywgYmVjYXVzZSBhIGRheSBoYXMgb25seSAyNCBob3VycyEnfSA9ICdFaW4gVGFnIGhhdCBudXIgMjQgU3R1bmRlbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIGluc2VydCB5b3VyIHdvcmtpbmcgaG91cnMhJ30gPSAnQml0dGUgdHJhZ2VuIFNpZSBJaHJlIEFyYmVpdHN6ZWl0ZW4gZWluISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdCZXJpY2h0c3dlc2VuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Y2Nlc3NmdWwgaW5zZXJ0ISd9ID0gJ0VyZm9sZ3JlaWNoIGVpbmdlZsO8Z3QhJzsKCn0KCjE7Cg==
77u/IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9kYV9UaW1lQWNjb3VudGluZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmRhX1RpbWVBY2NvdW50aW5nOwoKdXNlIHV0Zjg7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhlIFRpbWUgQWNjb3VudGluZyBvZiB0aGlzIGRheT8nfSA9ICdWaWwgZHUgdmlya2VsaWcgc2xldHRlIHRpZHNyZWduc2thYmV0IGZvciBkZW5uZSBkYWc/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBUaW1lIFJlY29yZCd9ID0gJ1JlZGlnZXIgdGlkc3JlZ2lzdHJlcmluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IHNldHRpbmdzJ30gPSAnUHJvamVrdGluZHN0aWxsaW5nZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF0ZSBOYXZpZ2F0aW9uJ30gPSAnRGF0b25hdmlnYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJldmlvdXMgZGF5J30gPSAnRm9ycmlnZSBkYWcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV4dCBkYXknfSA9ICdOw6ZzdGUgZGFnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RheXMgd2l0aG91dCBlbnRyaWVzJ30gPSAnRGFnZSB1ZGVuIG9wdGVnbmVsc2VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZpZWxkcyBhcmUgbWFya2VkIHdpdGggYSAiKiIuJ30gPSAnRGUgcMOla3LDpnZlZGUgZmVsdGVyIGVyIG1hcmtlcmV0IG1lZCAiKiIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBoYXZlIHRvIGZpbGwgaW4gc3RhcnQgYW5kIGVuZCB0aW1lIG9yIGEgdGltZSBwZXJpb2QuJ30gPSAnRHUgc2thbCBpbmR0YXN0ZSBlbiBzdGFydC0gb2cgc2x1dGRhdG8gZWxsZXIgZW4gdGlkc3BlcmlvZGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9qZWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rhc2snfSA9ICdPcGdhdmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVtYXJrJ30gPSAnQmVtw6Zya25pbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF0ZSBOYXZpZ2F0aW9uJ30gPSAnRGF0b25hdmlnYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIGFkZCBhIHJlbWFyayB3aXRoIG1vcmUgdGhhbiA4IGNoYXJhY3RlcnMhLid9ID0gJ1RpbGbDuGogdmVubGlnc3QgZW4gYmVtw6Zya25pbmcgbWVkIG1lcmUgZW5kIDggdGVnbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVnYXRpdmUgdGltZXMgYXJlIG5vdCBhbGxvd2VkLid9ID0gJ05lZ2F0aXYgdGlkIGVyIGlra2UgdGlsbGFkdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwZWF0ZWQgaG91cnMgYXJlIG5vdCBhbGxvd2VkLiBTdGFydCB0aW1lIG1hdGNoZXMgYW5vdGhlciBpbnRlcnZhbC4nfSA9ICdHZW50YWduZSB0aW1lciBlciBpa2tlIHRpbGxhZHQuIFN0YXJ0dGlkZW4gc3ZhcmVyIHRpbCBldCBhbmRldCBpbnRlcnZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIHRpbWUgbXVzdCBiZSBhZnRlciBzdGFydCB0aW1lLid9ID0gJ1NsdXR0aWRlbiBza2FsIHbDpnJlIHNlbmVyZSBlbmQgc3RhcnR0aWRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwZWF0ZWQgaG91cnMgYXJlIG5vdCBhbGxvd2VkLiBFbmQgdGltZSBtYXRjaGVzIGFub3RoZXIgaW50ZXJ2YWwuJ30gPSAnR2VudGFnbmUgdGltZXIgZXIgaWtrZSB0aWxsYWR0LiBTbHV0dGlkZW4gc3ZhcmVyIHRpbCBldCBhbmRldCBpbnRlcnZhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyaW9kIGlzIGJpZ2dlciB0aGFuIHRoZSBpbnRlcnZhbCBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQgdGltZXMhJ30gPSAnUGVyaW9kZW4gZXIgbMOmbmdlcmUgZW5kIGludGVydmFsbGV0IG1lbGxlbSBzdGFydC0gb2cgc2x1dHRpZCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBwZXJpb2QhIEEgZGF5IGhhcyBvbmx5IDI0IGhvdXJzLid9ID0gJ1VneWxkaWcgcGVyaW9kZSEgRW4gZGFnIGhhciBrdW4gMjQgdGltZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgdmFsaWQgcGVyaW9kIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJ30gPSAnRW4gZ3lsZGlnIHBlcmlvZGUgc2thbCB2w6ZyZSBzdMO4cnJlIGVuZCAwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgcGVyaW9kISBOZWdhdGl2ZSBwZXJpb2RzIGFyZSBub3QgYWxsb3dlZC4nfSA9ICdVZ3lsZGlnIHBlcmlvZGUhIE5lZ2F0aXZlIHBlcmlvZGVyIGVyIGlra2UgdGlsbGFkdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG9uZSByb3cnfSA9ICdUaWxmw7hqIGVuIHLDpmtrZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb3RhbCd9ID0gJ0kgYWx0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09uIHZhY2F0aW9uJ30gPSAnUMOlIGZlcmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gb25seSBzZWxlY3Qgb25lIGNoZWNrYm94IGVsZW1lbnQhJ30gPSAnRHUga2FuIGt1biB2w6ZsZ2UgZXQgYWZrcnlkc25pbmdzZmVsdCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT24gc2ljayBsZWF2ZSd9ID0gJ1N5Z2VmcmF2w6ZyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09uIG92ZXJ0aW1lIGxlYXZlJ30gPSAnQWZzcGFkc2VyaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIGl0ZW1zJ30gPSAnVmlzIGFsbGUgcHVua3Rlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWxldGUgVGltZSBBY2NvdW50aW5nIEVudHJ5J30gPSAnU2xldCB0aWRzcmVnbnNrYWJzaW5kdGFzdG5pbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlybSBpbnNlcnQnfSA9ICdCZWtyw6ZmdCBpbmRzw6Z0dGVsc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCB3aGlsZSB5b3Ugd2VyZSBvbiBzaWNrIGxlYXZlPyd9ID0gJ0VyIGR1IHNpa2tlciBww6UsIGF0IGR1IGFyYmVqZGVkZSB1bmRlciBkaXQgc3lnZWZyYXbDpnI/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3b3JrZWQgd2hpbGUgeW91IHdlcmUgb24gdmFjYXRpb24/J30gPSAnRXIgZHUgc2lra2VyIHDDpSwgYXQgZHUgYXJiZWpkZWRlLCBtZW5zIGR1IHZhciBww6UgZmVyaWU/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3b3JrZWQgd2hpbGUgeW91IHdlcmUgb24gb3ZlcnRpbWUgbGVhdmU/J30gPSAnRXIgZHUgc2lra2VyIHDDpSwgYXQgZHUgYXJiZWpkZWRlLCBtZW5zIGR1IHZhciBww6UgYWZzcGFkc2VyaW5nPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd29ya2VkIG1vcmUgdGhhbiAxNiBob3Vycz8nfSA9ICdFciBkdSBzaWtrZXIgcMOlLCBhdCBkdSBhcmJlamRlZGUgbWVyZSBlbmQgMTYgdGltZXI/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nT3ZlcnZpZXcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgcmVwb3J0aW5nIG1vbnRobHkgb3ZlcnZpZXcnfSA9ICdNw6VuZWRsaWcgb3ZlcnNpZ3Qgb3ZlciB0aWRzcmFwb3J0ZXJpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnRpbWUgKEhvdXJzKSd9ID0gJ092ZXJ0aWQgKHRpbWVyKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydGltZSAodGhpcyBtb250aCknfSA9ICdPdmVydGlkIChkZW5uZSBtw6VuZWQpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ0aW1lICh0b3RhbCknfSA9ICdPdmVydGlkIChpIGFsdCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVtYWluaW5nIG92ZXJ0aW1lIGxlYXZlJ30gPSAnUmVzdGVyZW5kZSBhZnNwYWRzZXJpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmFjYXRpb24gKERheXMpJ30gPSAnRmVyaWUgKGRhZ2UpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZhY2F0aW9uIHRha2VuICh0aGlzIG1vbnRoKSd9ID0gJ0ZlcmllZGFnZSBicnVndCAoZGVubmUgbcOlbmVkKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbiB0YWtlbiAodG90YWwpJ30gPSAnRmVyaWVkYWdlIGJydWd0IChpIGFsdCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVtYWluaW5nIHZhY2F0aW9uJ30gPSAnUmVzdGVyZW5kZSBmZXJpZWRhZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2ljayBMZWF2ZSAoRGF5cyknfSA9ICdTeWdlZnJhdsOmciAoZGFnZSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2ljayBsZWF2ZSB0YWtlbiAodGhpcyBtb250aCknfSA9ICdTeWdlZnJhdsOmciBicnVndCAoZGVubmUgbcOlbmVkKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWNrIGxlYXZlIHRha2VuICh0b3RhbCknfSA9ICdTeWdlZnJhdsOmciBicnVndCAoaSBhbHQpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByZXZpb3VzIG1vbnRoJ30gPSAnRm9ycmlnZSBtw6VuZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV4dCBtb250aCd9ID0gJ07DpnN0ZSBtw6VuZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF5J30gPSAnRGFnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dlZWtkYXknfSA9ICdVZ2VkYWcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya2luZyBIb3Vycyd9ID0gJ0FyYmVqZHN0aW1lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb3RhbCB3b3JrZWQgaG91cnMnfSA9ICdBcmJlamRzdGltZXIgaSBhbHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlclwncyBwcm9qZWN0IG92ZXJ2aWV3J30gPSAnQnJ1Z2VycyBwcm9qZWt0b3ZlcmJsaWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG91cnMgKG1vbnRobHkpJ30gPSAnVGltZXIgKG3DpW5lZGxpZyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG91cnMgKExpZmV0aW1lKSd9ID0gJ1NhbWxldCBhbnRhbCB0aW1lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFuZCB0b3RhbCd9ID0gJ0FsdCBpIGFsdCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRUaW1lQWNjb3VudGluZ1Byb2plY3RSZXBvcnRpbmcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgcmVwb3J0J30gPSAnUHJvamVrdHJhcHBvcnQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdSZXBvcnRpbmcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgcmVwb3J0aW5nJ30gPSAnVGlkc3JhcG9ydGVyaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbnRoIE5hdmlnYXRpb24nfSA9ICdNw6VuZWRzbmF2aWdhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIHJlcG9ydHMnfSA9ICdCcnVnZXJyYXBwb3J0ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9udGhseSB0b3RhbCd9ID0gJ0kgYWx0IGZvciBtw6VuZWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGlmZXRpbWUgdG90YWwnfSA9ICdTYW1sZXQgdG90YWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnRpbWUgbGVhdmUnfSA9ICdBZnNwYWRzZXJpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmFjYXRpb24nfSA9ICdGZXJpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWNrIGxlYXZlJ30gPSAnU3lnZWZyYXbDpnInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmFjYXRpb24gcmVtYWluaW5nJ30gPSAnUmVzdGVyZW5kZSBmcmF2w6Zyc2RhZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCByZXBvcnRzJ30gPSAnUHJvamVrdHJhcHBvcnRlcic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRUaW1lQWNjb3VudGluZ1NldHRpbmcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGltZSBBY2NvdW50aW5nIFByb2plY3QgU2V0dGluZ3MnfSA9ICdSZWRpZ2VyIGluZHN0aWxsaW5nZXIgZm9yIHRpZHNyZWduc2thYnNwcm9qZWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBwcm9qZWN0J30gPSAnVGlsZsO4aiBwcm9qZWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBQcm9qZWN0J30gPSAnVGlsZsO4aiBwcm9qZWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUHJvamVjdCBTZXR0aW5ncyd9ID0gJ1JlZGlnZXIgcHJvamVrdGluZHN0aWxsaW5nZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlcmUgaXMgYWxyZWFkeSBhIHByb2plY3Qgd2l0aCB0aGlzIG5hbWUuIFBsZWFzZSwgY2hvb3NlIGEgZGlmZmVyZW50IG9uZS4nfSA9ICdEZXIgZXIgYWxsZXJlZGUgZXQgcHJvamVrdCBtZWQgZGV0dGUgbmF2bi4gVsOmbGcgdmVubGlnc3QgZXQgYW5kZXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGltZSBBY2NvdW50aW5nIFNldHRpbmdzJ30gPSAnUmVkaWdlciB0aWRzcmVnbnNrYWJzaW5kc3RpbGluZ2VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCB0YXNrJ30gPSAnVGlsZsO4aiBvcGdhdmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHVzZXInfSA9ICdOeSBicnVnZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlsdGVyIGZvciBQcm9qZWN0cyd9ID0gJ0ZpbHRyw6lyIHByb2pla3Rlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIFRhc2tzJ30gPSAnRmlsdHLDqXIgb3BnYXZlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIFVzZXJzJ30gPSAnRmlsdHLDqXIgYnJ1Z2VyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IExpc3QnfSA9ICdQcm9qZWt0bGlzdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFzayBMaXN0J30gPSAnT3BnYXZlbGlzdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFRhc2snfSA9ICdUaWxmw7hqIG9wZ2F2ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRhc2sgU2V0dGluZ3MnfSA9ICdSZWRpZ2VyIG9wZ2F2ZWluZHN0aWxsaW5nZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlcmUgaXMgYWxyZWFkeSBhIHRhc2sgd2l0aCB0aGlzIG5hbWUuIFBsZWFzZSwgY2hvb3NlIGEgZGlmZmVyZW50IG9uZS4nfSA9ICdEZXIgZXIgYWxsZXJlZGUgZW4gb3BnYXZlIG1lZCBkZXR0ZSBuYXZuLiBWw6ZsZyB2ZW5saWdzdCBldCBhbmRldC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBMaXN0J30gPSAnQnJ1Z2VybGlzdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IFVzZXIgU2V0dGluZ3MnfSA9ICdOeWUgYnJ1Z2VyaW5kc3RpbGxpbmdlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFVzZXIgU2V0dGluZ3MnfSA9ICdSZWRpZ2VyIGJydWdlcmluZHN0aWxsaW5nZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudHMnfSA9ICdLb21tZW50YXJlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IE92ZXJ0aW1lJ30gPSAnVmlzIG92ZXJ0aWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3cgcHJvamVjdCBjcmVhdGlvbid9ID0gJ1RpbGxhZCBvcHJldHRlbHNlIGFmIHByb2pla3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyaW9kIEJlZ2luJ30gPSAnQmVneW5kIHBlcmlvZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyaW9kIEVuZCd9ID0gJ0Fmc2x1dCBwZXJpb2RlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RheXMgb2YgVmFjYXRpb24nfSA9ICdGZXJpZWRhZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG91cnMgcGVyIFdlZWsnfSA9ICdUaW1lciBwci4gdWdlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F1dGhvcml6ZWQgT3ZlcnRpbWUnfSA9ICdHb2RrZW5kdCBvdmVydGlkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlcmlvZCBlbmQgbXVzdCBiZSBhZnRlciBwZXJpb2QgYmVnaW4uJ30gPSAnUGVyaW9kZW5zIGFmc2x1dG5pbmcgc2thbCB2w6ZyZSBlZnRlciBwZXJpb2RlbnMgc3RhcnQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHRpbWUgcGVyaW9kcyBmb3VuZC4nfSA9ICdJbmdlbiB0aWRzcGVyaW9kZXIgZnVuZGV0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgdGltZSBwZXJpb2QnfSA9ICdUaWxmw7hqIHRpZHNwZXJpb2RlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nVmlldwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmlldyBUaW1lIFJlY29yZCd9ID0gJ1NlIHRpZHNyZWdpc3RyZXJpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmlldyBvZiAnfSA9ICdTZSAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF0ZSBuYXZpZ2F0aW9uJ30gPSAnRGF0b25hdmlnYXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gZGF0YSBmb3VuZCBmb3IgdGhpcyBkYXkuJ30gPSAnRGVyIGVyIGlra2UgZnVuZGV0IGRhdGEgZm9yIGRlbm5lIGRhZy4nOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBpbmNvbXBsZXRlIHdvcmtpbmcgZGF5cyBmb3IgdGhlIHVzZXIuJ30gPSAnQWdlbnQgaW50ZXJmYWNlLW5vdGlmaWNhdGlvbnNtb2R1bGV0IHNrYWwgc2UgYW50YWxsZXQgYWYgdWFmc2x1dHRlZGUgYXJiZWpkc2RhZ2UgZm9yIGJydWdlcmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IG5hbWUgZm9yIG5ldyBhY3Rpb25zLid9ID0gJ1N0YW5kYXJkbmF2biBmb3IgbnllIGhhbmRsaW5nZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbmFtZSBmb3IgbmV3IHByb2plY3RzLid9ID0gJ1N0YW5kYXJkbmF2biBmb3IgbnllIHByb2pla3Rlci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBkYXRlIGVuZC4nfSA9ICdTdGFuZGFyZGluZHN0aWxsaW5nIGZvciBzbHV0ZGF0by4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBkYXRlIHN0YXJ0Lid9ID0gJ1N0YW5kYXJkaW5kc3RpbGxpbmcgZm9yIGJlZ3luZGVsc2VzZGF0by4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBsZWF2ZSBkYXlzLid9ID0gJ1N0YW5kYXJkaW5kc3RpbGxpbmcgZm9yIGZyYXbDpnJzZGFnZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBvdmVydGltZS4nfSA9ICdTdGFuZGFyZGluZHN0aWxsaW5nIGZvciBvdmVydGlkLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNldHRpbmcgZm9yIHRoZSBzdGFuZGFyZCB3ZWVrbHkgaG91cnMuJ30gPSAnU3RhbmRhcmRpbmRzdGlsbGluZyBmb3Igbm9ybWFsZSB1Z2VudGxpZ2UgdGltZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdHVzIGZvciBuZXcgYWN0aW9ucy4nfSA9ICdTdGFuZGFyZGluZHN0aWxsaW5nIGZvciBueWUgaGFuZGxpbmdlci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0dXMgZm9yIG5ldyBwcm9qZWN0cy4nfSA9ICdTdGFuZGFyZGluZHN0aWxsaW5nIGZvciBueWUgcHJvamVrdGVyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXR1cyBmb3IgbmV3IHVzZXJzLid9ID0gJ1N0YW5kYXJkaW5kc3RpbGxpbmcgZm9yIG55ZSBicnVnZXJlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwcm9qZWN0cyBmb3Igd2hpY2ggYSByZW1hcmsgaXMgcmVxdWlyZWQuIElmIHRoZSBSZWdFeHAgbWF0Y2hlcyBvbiB0aGUgcHJvamVjdCwgeW91IGhhdmUgdG8gaW5zZXJ0IGEgcmVtYXJrIHRvby4gVGhlIFJlZ0V4cCB1c2UgdGhlIHNteCBwYXJhbWV0ZXIuJ30gPSAnRGVmaW5lcmVyIGRlIHByb2pla3RlciwgZm9yIGh2aWxrZSBlbiBiZW3DpnJrbmluZyBlciBww6VrcsOmdmV0LiBIdmlzIFJlZ0V4cCBtYXRjaGVyIHDDpSBwcm9qZWt0ZXQsIHNrYWwgZHUgb2dzw6UgaW5kZsO4amUgZW4gYmVtw6Zya25pbmcuIFJlZ0V4cCBicnVnZXIgc214IHBhcmFtZXRlcmV0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRpbWUgYWNjb3VudGluZyBzZXR0aW5ncyd9ID0gJ1JlZGlnZXIgaW5kc3RpbGxpbmdlciBmb3IgdGlkc3JlZ2lzdHJlcmluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRpbWUgcmVjb3JkJ30gPSAnUmVkaWdlciB0aWRzb3B0ZWduZWxzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3IgaG93IG1hbnkgZGF5cyBhZ28geW91IGNhbiBpbnNlcnQgd29ya2luZyB1bml0cy4nfSA9ICdBbmdpdmVyIGZvciBodm9yIG1hbmdlIGRhZ2UsIGR1IGthbiBpbmRzw6Z0dGUgYXJiZWpkc2VuaGVkZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGVuYWJsZWQsIHRoZSBkcm9wZG93biBlbGVtZW50cyBpbiB0aGUgZWRpdCBzY3JlZW4gYXJlIGNoYW5nZWQgdG8gYXV0b2NvbXBsZXRpb24gZmllbGRzLid9ID0gJ0h2aXMgZGVubmUgZXIgYWt0aXZlcmV0LCDDpm5kcmVzIGRyb3Bkb3duLWVsZW1lbnRlcm5lIHDDpSByZWRpZ2VyaW5nc3Nrw6ZybWJpbGxlZGV0IHRpbCBhdXRvZnVsZGbDuHJpbmdzZmVsdGVyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiB3b3JraW5nIGRheXMgYWZ0ZXIgd2hpY2ggdGhlIHdvcmtpbmcgdW5pdHMgaGF2ZSB0byBiZSBpbnNlcnRlZC4nfSA9ICdNYWtzaW1hbHQgYW50YWwgYWYgYXJiZWpkc2RhZ2UgZWZ0ZXIgaHZpbGtldCBhcmJlamRzZW5oZWRlcm5lIHNrYWwgaW5kc8OmdHRlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2Ygd29ya2luZyBkYXlzIHdpdGhvdXRoIHdvcmtpbmcgdW5pdHMgZW50cnkgYWZ0ZXIgd2hpY2ggYSB3YXJuaW5nIHdpbGwgYmUgc2hvd24uJ30gPSAnTWFrc2ltYWx0IGFudGFsIGFmIGFyYmVqZHNkYWdlIHVkZW4gaW5kdGFzdG5pbmcgYWYgYXJiZWpkc2VuaGVkZXIgZWZ0ZXIgaHZpbGtldCBlbiBhZHZhcnNlbCB2aWwgYmxpdmUgdmlzdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCB0aW1lIHJlcG9ydGluZyd9ID0gJ1Byb2pla3R0aWRzcmFwcG9ydGVyaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIGNvbnN0cmFpbmluZyBhY3Rpb24gbGlzdCBhY2NvcmRpbmcgdG8gc2VsZWN0ZWQgcHJvamVjdC4gS2V5IGNvbnRhaW5zIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgcHJvamVjdChzKSwgY29udGVudCBjb250YWlucyByZWd1bGFyIGV4cHJlc3Npb25zIGZvciBhY3Rpb24ocykuJ30gPSAnUmVndWzDpnJlIHVkdHJ5ayBmb3IgYmVncsOmbnNuaW5nIGFmIGhhbmRsaW5nc2xpc3RlIGlmw7hsZ2UgZGV0IHZhbGd0ZSBwcm9qZWt0LiBOw7hnbGVuIGluZGVob2xkZXIgZXQgcmVndWzDpnJ0IHVkdHJ5ayBmb3IgcHJvamVrdChlciksIGluZGhvbGRldCBydW1tZXIgcmVndWzDpnJlIHVkdHJ5ayBmb3IgaGFuZGxpbmcoZXIpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWd1bGFyIGV4cHJlc3Npb25zIGZvciBjb25zdHJhaW5pbmcgcHJvamVjdCBsaXN0IGFjY29yZGluZyB0byB1c2VyIGdyb3Vwcy4gS2V5IGNvbnRhaW5zIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgcHJvamVjdChzKSwgY29udGVudCBjb250YWlucyBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBncm91cHMuJ30gPSAnUmVndWzDpnJlIHVkdHJ5ayBmb3IgYmVncsOmbnNuaW5nIGFmIHByb2pla3RsaXN0ZSBpZsO4bGdlIGJydWdlcmdydXBwZXIuIE7DuGdsZW4gaW5kZWhvbGRlciBldCByZWd1bMOmcnQgdWR0cnlrIGZvciBwcm9qZWt0KGVyKSwgaW5kaG9sZGV0IHJ1bW1lciBrb21tYXNlcGFyZXJldCBsaXN0ZSBvdmVyIGdydXBwZXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyBpZiB3b3JraW5nIGhvdXJzIGNhbiBiZSBpbnNlcnRlZCB3aXRob3V0IHN0YXJ0IGFuZCBlbmQgdGltZXMuJ30gPSAnQW5naXZlciwgb20gYXJiZWpkc3RpbWVyIGthbiBpbmRzw6Z0dGVzIHVkZW4gc3RhcnQtIG9nIHNsdXR0aWRlci4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBtb2R1bGUgZm9yY2VzIGluc2VydHMgaW4gVGltZUFjY291bnRpbmcuJ30gPSAnRGV0dGUgbW9kdWwgZ2VubmVtdHZpbmdlciBpbmRzw6Z0dGVsc2VyIGkgdGlkc3JlZ25za2FiLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG5vdGlmaWNhdGlvbiBtb2R1bGUgZ2l2ZXMgYSB3YXJuaW5nIGlmIHRoZXJlIGFyZSB0b28gbWFueSBpbmNvbXBsZXRlIHdvcmtpbmcgZGF5cy4nfSA9ICdEZXR0ZSBhZHZpc2VyaW5nc21vZHVsIGdpdmVyIGVuIGFkdmFyc2VsLCBodmlzIGRlciBlciBmb3IgbWFuZ2UgdWZ1bGRzdMOmbmRpZ2UgYXJiZWpkc2RhZ2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgYWNjb3VudGluZy4nfSA9ICdUaWRzcmVnbnNrYWInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG8gdXNlIGlmIHNvbWUgYWN0aW9ucyByZWR1Y2VkIHRoZSB3b3JraW5nIGhvdXJzIChmb3IgZXhhbXBsZSwgaWYgb25seSBoYWxmIG9mIHRoZSB0cmF2ZWxpbmcgdGltZSBpcyBwYWlkIEtleSA9PiB0cmF2ZWxpbmc7IENvbnRlbnQgPT4gNTApLid9ID0gJ0JydWdlcywgaHZpcyBub2dsZSBoYW5kbGluZ2VyIGhhciByZWR1Y2VyZXQgYXJiZWpkc3RpbWVybmUgKGYuZWtzLiBodmlzIGt1biBoYWx2ZGVsZW4gYWYgcmVqc2V0aWRlbiBlciBiZXRhbHQgS2V5ID0+IHRyYXZlbGluZzsgQ29udGVudCA9PiA1MCknOwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbid9ID0gJ01hbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUdWUnfSA9ICdUaXJzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dlZCd9ID0gJ09ucyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaHUnfSA9ICdUb3JzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyaSd9ID0gJ0ZyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXQnfSA9ICdMw7hyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1bid9ID0gJ1PDuG4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSmFudWFyeSd9ID0gJ0phbnVhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGZWJydWFyeSd9ID0gJ0ZlYnJ1YXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFyY2gnfSA9ICdNYXJ0cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHJpbCd9ID0gJ0FwcmlsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heSd9ID0gJ01haic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKdW5lJ30gPSAnSnVuaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKdWx5J30gPSAnSnVsaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdWd1c3QnfSA9ICdBdWd1c3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VwdGVtYmVyJ30gPSAnU2VwdGVtYmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09jdG9iZXInfSA9ICdPa3RvYmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdmVtYmVyJ30gPSAnTm92ZW1iZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVjZW1iZXInfSA9ICdEZWNlbWJlcic7CgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgcHJvamVjdHMnfSA9ICdWaXMgYWxsZSBwcm9qZWt0ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB2YWxpZCBwcm9qZWN0cyd9ID0gJ1ZpcyBneWxkaWdlIHByb2pla3Rlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lQWNjb3VudGluZyd9ID0gJ1RpZHNyZWduc2thYic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3Rpb25zJ30gPSAnSGFuZGxpbmdlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIHVwZGF0ZWQhJ30gPSAnQnJ1Z2VyIG9wZGF0ZXJldCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBhZGRlZCEnfSA9ICdCcnVnZXIgdGlsZsO4amV0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IGFkZGVkISd9ID0gJ1Byb2pla3QgdGlsZsO4amV0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IHVwZGF0ZWQhJ30gPSAnUHJvamVrdCBvcGRhdGVyZXQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rhc2sgYWRkZWQhJ30gPSAnT3BnYXZlIHRpbGbDuGpldCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFzayB1cGRhdGVkISd9ID0gJ09wZ2F2ZSBvcGRhdGVyZXQhJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBkZWxldGUgV29ya2luZyBVbml0cyEnfSA9ICdUaWRzZW5oZWRlciBrYW4gaWtrZSBzbGV0dGVzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2F2ZSBzZXR0aW5ncywgYmVjYXVzZSBhIGRheSBoYXMgb25seSAyNCBob3VycyEnfSA9ICdJbmRzdGlsbGluZ2VyIGthbiBpa2tlIGdlbW1lcywgZm9yZGkgZXQgZMO4Z24ga3VuIGhhciAyNCB0aW1lciEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIGluc2VydCB5b3VyIHdvcmtpbmcgaG91cnMhJ30gPSAnSW5kdGFzdCB2ZW5saWdzdCBkaW5lIGFyYmVqZHN0aW1lciEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAnUmFwb3J0ZXJpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VjY2Vzc2Z1bCBpbnNlcnQhJ30gPSAnVmVsbHlra2V0IGluZHRhc3RuaW5nISc7Cgp9CgoxOwo=
77u/IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9lc19UaW1lQWNjb3VudGluZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmVzX1RpbWVBY2NvdW50aW5nOwoKdXNlIHV0Zjg7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhlIFRpbWUgQWNjb3VudGluZyBvZiB0aGlzIGRheT8nfSA9ICfCv1JlYWxtZW50ZSBkZXNlYSBlbGltaW5hciBsYSBDb250YWJpbGlkYWQgZGUgVGllbXBvIGRlIGVzdGUgZMOtYT8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRpbWUgUmVjb3JkJ30gPSAnTW9kaWZpY2FyIFJlZ2lzdHJvIGRlIFRpZW1wbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IHNldHRpbmdzJ30gPSAnQ29uZmlndXJhY2lvbmVzIGRlIHByb3llY3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByZXZpb3VzIGRheSd9ID0gJ0TDrWEgYW50ZXJpb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV4dCBkYXknfSA9ICdEw61hIHNpZ3VpZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXlzIHdpdGhvdXQgZW50cmllcyd9ID0gJ0TDrWFzIHNpbiByZWdpc3Rybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmaWVsZHMgYXJlIG1hcmtlZCB3aXRoIGEgIioiLid9ID0gJ0xvcyBjYW1wb3MgcmVxdWVyaWRvcyBlc3TDoW4gbWFyY2Fkb3MgY29uIHVuICIqIi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGhhdmUgdG8gZmlsbCBpbiBzdGFydCBhbmQgZW5kIHRpbWUgb3IgYSB0aW1lIHBlcmlvZC4nfSA9ICdFcyBuZWNlc2FyaW8gcXVlIHByb3BvcmNpb25lIHVuYSBob3JhIGRlIGluaWNpbyB5IHVuYSBkZSBmaW5hbGl6YWNpw7NuIG8gdW4gcGVyaW9kby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ1Byb3llY3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rhc2snfSA9ICdUYXJlYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZW1hcmsnfSA9ICdDb21lbnRhcmlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RhdGUgTmF2aWdhdGlvbid9ID0gJ05hdmVnYWNpw7NuIHBvciBGZWNoYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgYWRkIGEgcmVtYXJrIHdpdGggbW9yZSB0aGFuIDggY2hhcmFjdGVycyEuJ30gPSAnwqFQb3IgZmF2b3IsIGVzY3JpYmEgdW4gY29tZW50YXJpbyBkZSBtw6FzIGRlIDggY2FyYWN0ZXJlcyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVnYXRpdmUgdGltZXMgYXJlIG5vdCBhbGxvd2VkLid9ID0gJ05vIHNlIHBlcm1pdGUgbGEgaW5zZXJjacOzbiBkZSBob3JhcyBuZWdhdGl2YXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGVhdGVkIGhvdXJzIGFyZSBub3QgYWxsb3dlZC4gU3RhcnQgdGltZSBtYXRjaGVzIGFub3RoZXIgaW50ZXJ2YWwuJ30gPSAnTm8gc2UgcGVybWl0ZSBsYSBpbnNlcmNpw7NuIGRlIGhvcmFzIHJlcGV0aWRhcy4gTGEgaG9yYSBkZSBpbmljaW8gZXN0w6EgaW5jbHXDrWRhIGVuIG90cm8gaW50ZXJ2YWxvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgdGltZSBtdXN0IGJlIGFmdGVyIHN0YXJ0IHRpbWUuJ30gPSAnTGEgaG9yYSBkZSBmaW5hbGl6YWNpw7NuIGRlYmUgc2VyIHBvc3RlcmlvciBhIGxhIGRlIGluaWNpby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwZWF0ZWQgaG91cnMgYXJlIG5vdCBhbGxvd2VkLiBFbmQgdGltZSBtYXRjaGVzIGFub3RoZXIgaW50ZXJ2YWwuJ30gPSAnTm8gc2UgcGVybWl0ZSBsYSBpbnNlcmNpw7NuIGRlIGhvcmFzIHJlcGV0aWRhcy4gTGEgaG9yYSBkZSBmaW5hbGl6YWNpw7NuIGVzdMOhIGluY2x1w61kYSBlbiBvdHJvIGludGVydmFsby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyaW9kIGlzIGJpZ2dlciB0aGFuIHRoZSBpbnRlcnZhbCBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQgdGltZXMhJ30gPSAnwqFFbCBwZXJpb2RvIGVzIG1heW9yIGFsIGludGVydmFsbyBlbnRyZSBsYXMgaG9yYXMgZGUgaW5pY2lvIHkgZmluYWxpemFjacOzbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBwZXJpb2QhIEEgZGF5IGhhcyBvbmx5IDI0IGhvdXJzLid9ID0gJ8KhUGVyaW9kbyBpbnbDoWxpZG8hIFVuIGTDrWEgc8OzbG8gdGllbmUgMjQgaG9yYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgdmFsaWQgcGVyaW9kIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJ30gPSAnVW4gcGVyaW9kbyB2w6FsaWRvIGRlYmUgc2VyIG1heW9yIGEgY2Vyby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBwZXJpb2QhIE5lZ2F0aXZlIHBlcmlvZHMgYXJlIG5vdCBhbGxvd2VkLid9ID0gJ8KhUGVyaW9kbyBpbnbDoWxpZG8hIE5vIHNlIHBlcm1pdGVuIHBlcmlvZG9zIG5lZ2F0aXZvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG9uZSByb3cnfSA9ICdBw7FhZGlyIHVuYSBmaWxhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvdGFsJ30gPSAnVG90YWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT24gdmFjYXRpb24nfSA9ICdEZSB2YWNhY2lvbmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gb25seSBzZWxlY3Qgb25lIGNoZWNrYm94IGVsZW1lbnQhJ30gPSAnwqFTw7NsbyBzZSBwZXJtaXRlIGVsZWdpciB1biBlbGVtZW50byBjaGVja2JveCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT24gc2ljayBsZWF2ZSd9ID0gJ0F1c2VudGUgcG9yIGVuZmVybWVkYWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT24gb3ZlcnRpbWUgbGVhdmUnfSA9ICdBdXNlbnRlIHBvciBoYWJlciB0cmFiYWphZG8gaG9yYXMgZXh0cmFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIGl0ZW1zJ30gPSAnTW9zdHJhciB0b2RvcyBsb3MgZWxlbWVudG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBUaW1lIEFjY291bnRpbmcgRW50cnknfSA9ICdFbGltaW5hciBSZWdpc3RybyBkZSBDb250YWJpbGlkYWQgZGUgVGllbXBvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpcm0gaW5zZXJ0J30gPSAnQ29uZmlybWFyIGluc2VyY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCB3aGlsZSB5b3Ugd2VyZSBvbiBzaWNrIGxlYXZlPyd9ID0gJ8K/RXN0w6Egc2VndXJvIHF1ZSB0cmFiYWrDsyBkdXJhbnRlIHN1IGF1c2VuY2lhIHBvciBlbmZlcm1lZGFkPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd29ya2VkIHdoaWxlIHlvdSB3ZXJlIG9uIHZhY2F0aW9uPyd9ID0gJ8K/RXN0w6Egc2VndXJvIHF1ZSB0cmFiYWrDsyBkdXJhbnRlIHN1cyB2YWNhY2lvbmVzPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd29ya2VkIHdoaWxlIHlvdSB3ZXJlIG9uIG92ZXJ0aW1lIGxlYXZlPyd9ID0gJ8K/RXN0w6Egc2VndXJvIHF1ZSB0cmFiYWrDsyBkdXJhbnRlIHN1IGF1c2VuY2lhIHBvciBoYWJlciB0cmFiYWphZG8gaG9yYXMgZXh0cmFzPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd29ya2VkIG1vcmUgdGhhbiAxNiBob3Vycz8nfSA9ICfCv0VzdMOhIHNlZ3VybyBxdWUgdHJhYmFqw7MgbcOhcyBkZSAxNiBob3Jhcz8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdPdmVydmlldwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSByZXBvcnRpbmcgbW9udGhseSBvdmVydmlldyd9ID0gJ1Zpc3RhIG1lbnN1YWwgZGUgdGllbXBvcyByZXBvcnRhZG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ0aW1lIChIb3VycyknfSA9ICdOw7ptZXJvIGRlIGhvcmFzIGV4dHJhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydGltZSAodGhpcyBtb250aCknfSA9ICdIb3JhcyBleHRyYXMgdHJhYmFqYWRhcyAoZXN0ZSBtZXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ0aW1lICh0b3RhbCknfSA9ICdUb3RhbCBkZSBob3JhcyBleHRyYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVtYWluaW5nIG92ZXJ0aW1lIGxlYXZlJ30gPSAnSG9yYXMgcmVzdGFudGVzIHBhcmEgYXVzZW50YXJzZSBwb3IgaGFiZXIgdHJhYmFqYWRvIGhvcmFzIGV4dHJhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbiAoRGF5cyknfSA9ICdWYWNhY2lvbmVzIChkw61hcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmFjYXRpb24gdGFrZW4gKHRoaXMgbW9udGgpJ30gPSAnVmFjYWNpb25lcyAoZXN0ZSBtZXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZhY2F0aW9uIHRha2VuICh0b3RhbCknfSA9ICdWYWNhY2lvbmVzIHRvbWFkYXMgKHRvdGFsKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZW1haW5pbmcgdmFjYXRpb24nfSA9ICdEw61hcyBkZSB2YWNhY2lvbmVzIHJlc3RhbnRlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWNrIExlYXZlIChEYXlzKSd9ID0gJ0F1c2VuY2lhIHBvciBlbmZlcm1lZGFkIChkw61hcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2ljayBsZWF2ZSB0YWtlbiAodGhpcyBtb250aCknfSA9ICdBdXNlbmNpYXMgcG9yIGVuZmVybWVkYWQgKGVzdGUgbWVzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWNrIGxlYXZlIHRha2VuICh0b3RhbCknfSA9ICdBdXNlbmNpYXMgcG9yIGVuZmVybWVkYWQgKHRvdGFsKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmV2aW91cyBtb250aCd9ID0gJ01lcyBhbnRlcmlvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXh0IG1vbnRoJ30gPSAnTWVzIHNpZ3VpZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXknfSA9ICdEw61hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dlZWtkYXknfSA9ICdEw61hIGRlIGxhIHNlbWFuYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JraW5nIEhvdXJzJ30gPSAnSG9yYXMgdHJhYmFqYWRhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb3RhbCB3b3JrZWQgaG91cnMnfSA9ICdUb3RhbCBkZSBob3JhcyB0cmFiYWphZGFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXJcJ3MgcHJvamVjdCBvdmVydmlldyd9ID0gJ1Zpc3RhIGRlIHByb3llY3RvIGRlIHVzdWFyaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG91cnMgKG1vbnRobHkpJ30gPSAnSG9yYXMgKG1lbnN1YWxlcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG91cnMgKExpZmV0aW1lKSd9ID0gJ0hvcmFzICh0aWVtcG8gZGUgdmlkYSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JhbmQgdG90YWwnfSA9ICdUb3RhbCBuZXRvJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nUHJvamVjdFJlcG9ydGluZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCByZXBvcnQnfSA9ICdSZXBvcnRlIGRlIHByb3llY3RvJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nUmVwb3J0aW5nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIHJlcG9ydGluZyd9ID0gJ1JlcG9ydGUgZGUgdGllbXBvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb250aCBOYXZpZ2F0aW9uJ30gPSAnTmF2ZWdhY2nDs24gcG9yIG1lcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIHJlcG9ydHMnfSA9ICdSZXBvcnRlcyBkZSB1c3VhcmlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbnRobHkgdG90YWwnfSA9ICdUb3RhbCBtZW5zdWFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpZmV0aW1lIHRvdGFsJ30gPSAnVGllbXBvIHRvdGFsIGRlIHZpZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnRpbWUgbGVhdmUnfSA9ICdBdXNlbmNpYSBwb3IgaGFiZXIgdHJhYmFqYWRvIGhvcmFzIGV4dHJhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbid9ID0gJ1ZhY2FjaW9uZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2ljayBsZWF2ZSd9ID0gJ0F1c2VuY2lhIHBvciBlbmZlcm1lZGFkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZhY2F0aW9uIHJlbWFpbmluZyd9ID0gJ0TDrWFzIGxpYnJlcyByZXN0YW50ZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCByZXBvcnRzJ30gPSAnUmVwb3J0ZXMgZGUgcHJveWVjdG8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdTZXR0aW5nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRpbWUgQWNjb3VudGluZyBQcm9qZWN0IFNldHRpbmdzJ30gPSAnTW9kaWZpY2FyIGxhIGNvbmZpZ3VyYWNpw7NuIGRlbCBwcm95ZWN0byBkZSBjb250YWJpbGlkYWQgZGUgdGllbXBvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgcHJvamVjdCd9ID0gJ0FncmVnYXIgcHJveWVjdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFByb2plY3QnfSA9ICdBZ3JlZ2FyIFByb3llY3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUHJvamVjdCBTZXR0aW5ncyd9ID0gJ01vZGlmaWNhciBsYSBDb25maWd1cmFjacOzbiBkZWwgUHJveWVjdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlcmUgaXMgYWxyZWFkeSBhIHByb2plY3Qgd2l0aCB0aGlzIG5hbWUuIFBsZWFzZSwgY2hvb3NlIGEgZGlmZmVyZW50IG9uZS4nfSA9ICdZYSBleGlzdGUgdW4gcHJveWVjdG8gY29uIGVzdGUgbm9tYnJlLiBQb3IgZmF2b3IsIGVsaWphIHVubyBkaWZlcmVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGltZSBBY2NvdW50aW5nIFNldHRpbmdzJ30gPSAnTW9kaWZpY2FyIGxhIENvbmZpZ3VyYWNpw7NuIGRlIGxhIENvbnRhYmlsaWRhZCBkZSBUaWVtcG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIHRhc2snfSA9ICdBZ3JlZ2FyIHRhcmVhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyB1c2VyJ30gPSAnVXN1YXJpbyBudWV2byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIFByb2plY3RzJ30gPSAnRmlsdHJvIHBhcmEgUHJveWVjdG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgVGFza3MnfSA9ICdGaWx0cm8gcGFyYSBUYXJlYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlsdGVyIGZvciBVc2Vycyd9ID0gJ0ZpbHRybyBwYXJhIFVzdWFyaW9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgTGlzdCd9ID0gJ0xpc3RhIGRlIFByb3llY3Rvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYXNrIExpc3QnfSA9ICdMaXN0YSBkZSBUYXJlYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFRhc2snfSA9ICdBZ3JlZ2FyIFRhcmVhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGFzayBTZXR0aW5ncyd9ID0gJ01vZGlmaWNhciBsYSBDb25maWd1cmFjacOzbiBkZSBsYSBUYXJlYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGVyZSBpcyBhbHJlYWR5IGEgdGFzayB3aXRoIHRoaXMgbmFtZS4gUGxlYXNlLCBjaG9vc2UgYSBkaWZmZXJlbnQgb25lLid9ID0gJ1lhIGV4aXN0ZSB1bmEgdGFyZWEgY29uIGVzdGUgbm9tYnJlLiBQb3IgZmF2b3IsIGVsaWphIHVubyBkaWZlcmVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgTGlzdCd9ID0gJ0xpc3RhIGRlIFVzdWFyaW9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBVc2VyIFNldHRpbmdzJ30gPSAnQ29uZmlndXJhY2nDs24gZGUgVXN1YXJpbyBOdWV2byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFVzZXIgU2V0dGluZ3MnfSA9ICdNb2RpZmljYXIgbGEgQ29uZmlndXJhY2nDs24gZGVsIFVzdWFyaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudHMnfSA9ICdDb21lbnRhcmlvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IE92ZXJ0aW1lJ30gPSAnTW9zdHJhciBob3JhcyBleHRyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvdyBwcm9qZWN0IGNyZWF0aW9uJ30gPSAnUGVybWl0aXIgY3JlYWNpw7NuIGRlIHByb3llY3Rvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJpb2QgQmVnaW4nfSA9ICdQZXJpb2RvIGRlIGluaWNpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJpb2QgRW5kJ30gPSAnUGVyaW9kbyBkZSBmaW5hbGl6YWNpw7NuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RheXMgb2YgVmFjYXRpb24nfSA9ICdEw61hcyBkZSBWYWNhY2lvbmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hvdXJzIHBlciBXZWVrJ30gPSAnSG9yYXMgcG9yIFNlbWFuYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdXRob3JpemVkIE92ZXJ0aW1lJ30gPSAnVGllbXBvIEV4dHJhIEF1dG9yaXphZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyaW9kIGVuZCBtdXN0IGJlIGFmdGVyIHBlcmlvZCBiZWdpbi4nfSA9ICdFbCBwZXJpb2RvIGRlIGZpbmFsaXphY2nDs24gZGViZSBzZXIgcG9zdGVyaW9yIGFsIGRlIGluaWNpby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdGltZSBwZXJpb2RzIGZvdW5kLid9ID0gJ05vIHNlIGVuY29udHJhcm9uIHBlcmlvZG9zIGRlIHRpZW1wby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIHRpbWUgcGVyaW9kJ30gPSAnQWdyZWdhciBwZXJpb2RvIGRlIHRpZW1wbyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRUaW1lQWNjb3VudGluZ1ZpZXcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZpZXcgVGltZSBSZWNvcmQnfSA9ICdWZXIgcmVnaXN0cm8gZGUgdGllbXBvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZpZXcgb2YgJ30gPSAnUmVzdW1lbiBkZSAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF0ZSBuYXZpZ2F0aW9uJ30gPSAnTmF2ZWdhY2nDs24gcG9yIGZlY2hhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGRhdGEgZm91bmQgZm9yIHRoaXMgZGF5Lid9ID0gJ05vIHNlIGVuY29udHJhcm9uIGRhdG9zIGRlIGVzdGUgZMOtYS4nOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBpbmNvbXBsZXRlIHdvcmtpbmcgZGF5cyBmb3IgdGhlIHVzZXIuJ30gPSAnTcOzZHVsbyBkZSBub3RpZmljYWNpw7NuIGRlIGxhIGludGVyZmF6IGRlbCBhZ2VudGUsIG5lY2VzYXJpbyBwYXJhIHZpc3VhbGl6YXIgZWwgbsO6bWVybyBkZSBkw61hcyBpbmNvbXBsZXRvcyBkZSB1biB1c3VhcmlvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IG5hbWUgZm9yIG5ldyBhY3Rpb25zLid9ID0gJ05vbWJyZSBwb3IgZGVmZWN0byBwYXJhIGFjY2lvbmVzIG51ZXZhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBuYW1lIGZvciBuZXcgcHJvamVjdHMuJ30gPSAnTm9tYnJlIHBvciBkZWZlY3RvIHBhcmEgcHJveWVjdG9zIG51ZXZvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBkYXRlIGVuZC4nfSA9ICdDb25maWd1cmFjacOzbiBwb3IgZGVmZWN0byBwYXJhIGxhIGZlY2hhIGRlIGZpbmFsaXphY2nDs24uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2V0dGluZyBmb3IgZGF0ZSBzdGFydC4nfSA9ICdDb25maWd1cmFjacOzbiBwb3IgZGVmZWN0byBwYXJhIGxhIGZlY2hhIGRlIGluaWNpby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBsZWF2ZSBkYXlzLid9ID0gJ0NvbmZpZ3VyYWNpw7NuIHBvciBkZWZlY3RvIHBhcmEgbGFzIGZhbHRhcyAoZMOtYXMgZGUgYXVzZW5jaWEpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNldHRpbmcgZm9yIG92ZXJ0aW1lLid9ID0gJ0NvbmZpZ3VyYWNpw7NuIHBvciBkZWZlY3RvIHBhcmEgbGFzIGhvcmFzIGV4dHJhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciB0aGUgc3RhbmRhcmQgd2Vla2x5IGhvdXJzLid9ID0gJ0NvbmZpZ3VyYWNpw7NuIHBvciBkZWZlY3RvIHBhcmEgbGFzIGhvcmFzIHNlbWFuYWxlcyBlc3TDoW5kYXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdHVzIGZvciBuZXcgYWN0aW9ucy4nfSA9ICdFc3RhZG8gcG9yIGRlZmVjdG8gcGFyYSBhY2Npb25lcyBudWV2YXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdHVzIGZvciBuZXcgcHJvamVjdHMuJ30gPSAnRXN0YWRvIHBvciBkZWZlY3RvIHBhcmEgcHJveWVjdG9zIG51ZXZvcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0dXMgZm9yIG5ldyB1c2Vycy4nfSA9ICdFc3RhZG8gcG9yIGRlZmVjdG8gcGFyYSB1c3VhcmlvcyBudWV2b3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHByb2plY3RzIGZvciB3aGljaCBhIHJlbWFyayBpcyByZXF1aXJlZC4gSWYgdGhlIFJlZ0V4cCBtYXRjaGVzIG9uIHRoZSBwcm9qZWN0LCB5b3UgaGF2ZSB0byBpbnNlcnQgYSByZW1hcmsgdG9vLiBUaGUgUmVnRXhwIHVzZSB0aGUgc214IHBhcmFtZXRlci4nfSA9ICdEZWZpbmUgcGFyYSBjdcOhbGVzIHByb3llY3RvcyBlcyBvYmxpZ2F0b3JpYSBsYSBpbnNlcmNpw7NuIGRlIGNvbWVudGFyaW9zLiBTaSBsYSBleHByZXNpw7NuIHJlZ3VsYXIgY29pbmNpZGUgY29uIGVsIHByb3llY3RvLCBzZSB0aWVuZSBxdWUgZXNjcmliaXIgdW4gY29tZW50YXJpby4gTGEgZXhwcmVzacOzbiByZWd1bGFyIHVzYSBlbCBwYXLDoW1ldHJvIHNteC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCB0aW1lIGFjY291bnRpbmcgc2V0dGluZ3MnfSA9ICdNb2RpZmljYXIgbGEgY29uZmlndXJhY2nDs24gZGUgbGEgY29udGFiaWxpZGFkIGRlIHRpZW1wbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRpbWUgcmVjb3JkJ30gPSAnTW9kaWZpY2FyIHJlZ2lzdHJvIGRlIHRpZW1wbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3IgaG93IG1hbnkgZGF5cyBhZ28geW91IGNhbiBpbnNlcnQgd29ya2luZyB1bml0cy4nfSA9ICdFc3BlY2lmaWNhIGVsIG7Dum1lcm8gbcOheGltbyBkZSBkw61hcyBwYXJhIHJlZ2lzdHJhciBob3JhcyBkZSB0cmFiYWpvIGF0cmFzYWRhcyAocG9yIGVqZW1wbG86IDEwIGTDrWFzIGRlIGFudGlnw7xlZGFkKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgZW5hYmxlZCwgdGhlIGRyb3Bkb3duIGVsZW1lbnRzIGluIHRoZSBlZGl0IHNjcmVlbiBhcmUgY2hhbmdlZCB0byBhdXRvY29tcGxldGlvbiBmaWVsZHMuJ30gPSAnU2kgc2UgaGFiaWxpdGEsIGxvcyBlbGVtZW50b3MgZGVzcGxlZ2FibGVzIGRlIGxhIHZlbnRhbmEgZGUgZWRpY2nDs24gc2UgY2FtYmlhbiBwb3IgY2FtcG9zIGRlIGF1dG9jb21wbGV0YWRvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiB3b3JraW5nIGRheXMgYWZ0ZXIgd2hpY2ggdGhlIHdvcmtpbmcgdW5pdHMgaGF2ZSB0byBiZSBpbnNlcnRlZC4nfSA9ICdOw7ptZXJvIG3DoXhpbW8gZGUgZMOtYXMgbGFib3JhbGVzIGRlc3B1w6lzIGRlIGxvcyBjdWFsZXMgZXMgb2JsaWdhdG9yaW8gcmVwb3J0YXIgbGFzIGhvcmFzIHRyYWJhamFkYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIHdvcmtpbmcgZGF5cyB3aXRob3V0aCB3b3JraW5nIHVuaXRzIGVudHJ5IGFmdGVyIHdoaWNoIGEgd2FybmluZyB3aWxsIGJlIHNob3duLid9ID0gJ07Dum1lcm8gbcOheGltbyBkZSBkw61hcyBsYWJvcmFsZXMgc2luIHJlZ2lzdHJvIGRlIGhvcmFzIHRyYWJhamFkYXMgZGVzcHXDqXMgZGUgbG9zIGN1YWxlcyBzZSBtb3N0cmFyw6EgdW5hIGFkdmVydGVuY2lhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IHRpbWUgcmVwb3J0aW5nJ30gPSAnUmVwb3J0ZSBkZSB0aWVtcG9zIGRlIHByb3llY3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIGNvbnN0cmFpbmluZyBhY3Rpb24gbGlzdCBhY2NvcmRpbmcgdG8gc2VsZWN0ZWQgcHJvamVjdC4gS2V5IGNvbnRhaW5zIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgcHJvamVjdChzKSwgY29udGVudCBjb250YWlucyByZWd1bGFyIGV4cHJlc3Npb25zIGZvciBhY3Rpb24ocykuJ30gPSAnRXhwcmVzaW9uZXMgcmVndWxhcmVzIHBhcmEgcmVzdHJpbmdpciBsYSBsaXN0YSBkZSBhY2Npb25lcywgZGUgYWN1ZXJkbyBhbCBwcm95ZWN0byBzZWxlY2Npb25hZG8uIEtleSBjb250aWVuZSBsYSBleHByZXNpw7NuIHJlZ3VsYXIgcGFyYSBsb3MgcHJveWVjdG9zIHkgQ29udGVudCwgbGFzIGV4cHJlc2lvbmVzIHJlZ3VsYXJlcyBwYXJhIGxhcyBhY2Npb25lcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVndWxhciBleHByZXNzaW9ucyBmb3IgY29uc3RyYWluaW5nIHByb2plY3QgbGlzdCBhY2NvcmRpbmcgdG8gdXNlciBncm91cHMuIEtleSBjb250YWlucyByZWd1bGFyIGV4cHJlc3Npb24gZm9yIHByb2plY3QocyksIGNvbnRlbnQgY29udGFpbnMgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgZ3JvdXBzLid9ID0gJ0V4cHJlc2lvbmVzIHJlZ3VsYXJlcyBwYXJhIHJlc3RyaW5naXIgbGEgbGlzdGEgZGUgcHJveWVjdG9zLCBkZSBhY3VlcmRvIGEgbG9zIGdydXBvcyBkZSB1c3Vhcmlvcy4gS2V5IGNvbnRpZW5lIGxhIGV4cHJlc2nDs24gcmVndWxhciBwYXJhIGxvcyBwcm95ZWN0b3MgeSBDb250ZW50LCB1bmEgbGlzdGEgZGUgZ3J1cG9zLCBzZXBhcmFkb3MgcG9yIGNvbWFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgaWYgd29ya2luZyBob3VycyBjYW4gYmUgaW5zZXJ0ZWQgd2l0aG91dCBzdGFydCBhbmQgZW5kIHRpbWVzLid9ID0gJ0VzcGVjaWZpY2Egc2kgZXMgcG9zaWJsZSBpbnNlcnRhciBsYXMgaG9yYXMgdHJhYmFqYWRhcyBzaW4gZGVmaW5pciBsb3MgdGllbXBvcyBkZSBpbmljaW8geSBmaW5hbGl6YWNpw7NuIGRlIGxhcyB0YXJlYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbW9kdWxlIGZvcmNlcyBpbnNlcnRzIGluIFRpbWVBY2NvdW50aW5nLid9ID0gJ0VzdGUgbcOzZHVsbyBoYWNlIG9ibGlnYXRvcmlhIGxhIGluc2VyY2nDs24gZGUgaG9yYXMgdHJhYmFqYWRhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBub3RpZmljYXRpb24gbW9kdWxlIGdpdmVzIGEgd2FybmluZyBpZiB0aGVyZSBhcmUgdG9vIG1hbnkgaW5jb21wbGV0ZSB3b3JraW5nIGRheXMuJ30gPSAnTcOzZHVsbyBkZSBub3RpZmljYWNpw7NuIHF1ZSBtdWVzdHJhIHVuYSBhZHZlcnRlbmNpYSBzaSBoYXkgZGVtYXNpYWRvcyBkw61hcyBzaW4gcmVnaXN0cm8gZGUgaG9yYXMgdHJhYmFqYWRhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSBhY2NvdW50aW5nLid9ID0gJ0NvbnRhYmlsaWRhZCBkZSB0aWVtcG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvIHVzZSBpZiBzb21lIGFjdGlvbnMgcmVkdWNlZCB0aGUgd29ya2luZyBob3VycyAoZm9yIGV4YW1wbGUsIGlmIG9ubHkgaGFsZiBvZiB0aGUgdHJhdmVsaW5nIHRpbWUgaXMgcGFpZCBLZXkgPT4gdHJhdmVsaW5nOyBDb250ZW50ID0+IDUwKS4nfSA9ICdTZSB1c2Egc2kgYWxndW5hcyBhY2Npb25lcyByZWR1Y2VuIGVsIG7Dum1lcm8gZGUgaG9yYXMgdHJhYmFqYWRhcyAocG9yIGVqZW1wbG86IHNpIHPDs2xvIHNlIHBhZ2EgbGEgbWl0YWQgZGVsIHRpZW1wbyBkZSB2aWFqZSBwdWVkZSBlc3BlY2lmaWNhcnNlIEtleSA9PiBWaWFqZTsgQ29udGVudCA9PiA1MCkuJzsKCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb24nfSA9ICdMdW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHVlJ30gPSAnTWFyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dlZCd9ID0gJ01pw6lyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RodSd9ID0gJ0p1ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcmknfSA9ICdWaWVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdCd9ID0gJ1PDoWInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VuJ30gPSAnRG9tJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0phbnVhcnknfSA9ICdFbmVybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGZWJydWFyeSd9ID0gJ0ZlYnJlcm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFyY2gnfSA9ICdNYXJ6byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHJpbCd9ID0gJ0FicmlsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heSd9ID0gJ01heW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSnVuZSd9ID0gJ0p1bmlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0p1bHknfSA9ICdKdWxpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdWd1c3QnfSA9ICdBZ29zdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VwdGVtYmVyJ30gPSAnU2VwdGllbWJyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPY3RvYmVyJ30gPSAnT2N0dWJyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3ZlbWJlcid9ID0gJ05vdmllbWJyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWNlbWJlcid9ID0gJ0RpY2llbWJyZSc7CgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgcHJvamVjdHMnfSA9ICdNb3N0cmFyIHRvZG9zIGxvcyBwcm95ZWN0b3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB2YWxpZCBwcm9qZWN0cyd9ID0gJ01vc3RyYXIgdG9kb3MgbG9zIHByb3llY3RvcyB2w6FsaWRvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lQWNjb3VudGluZyd9ID0gJ0NvbnRhYmlsaWRhZCBEZSBUaWVtcG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0aW9ucyd9ID0gJ0FjY2lvbmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgdXBkYXRlZCEnfSA9ICfCoVVzdWFyaW8gYWN0dWFsaXphZG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgYWRkZWQhJ30gPSAnwqFVc3VhcmlvIGHDsWFkaWRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IGFkZGVkISd9ID0gJ8KhUHJveWVjdG8gYcOxYWRpZG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgdXBkYXRlZCEnfSA9ICfCoVByb3llY3RvIGFjdHVhbGl6YWRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYXNrIGFkZGVkISd9ID0gJ8KhVGFyZWEgYcOxYWRpZGEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rhc2sgdXBkYXRlZCEnfSA9ICfCoVRhcmVhIGFjdHVhbGl6YWRhISc7CgogICAgIwogICAgIyBPQlNPTEVURSBFTlRSSUVTIEZPUiBSRUZFUkVOQ0UsIERPIE5PVCBUUkFOU0xBVEUhCiAgICAjCgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAnUmVwb3J0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzZnVsIGluc2VydCEnfSA9ICfCoUluc2VyY2nDs24gZXhpdG9zYSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNhdmUgc2V0dGluZ3MsIGJlY2F1c2UgYSBkYXkgaGFzIG9ubHkgMjQgaG91cnMhJ30gPSAnwqFJbXBvc2libGUgZ3VhcmRhciBsYSBjb25maWd1cmFjacOzbiBwb3JxdWUgdW4gZMOtYSBzw7NsbyB0aWVuZSAyNCBob3JhcyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGRlbGV0ZSBXb3JraW5nIFVuaXRzISd9ID0gJ8KhSW1wb3NpYmxlIGVsaW1pbmFyIGxhcyB1bmlkYWRlcyBkZSB0cmFiYWpvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgaW5zZXJ0IHlvdXIgd29ya2luZyBob3VycyEnfSA9ICfCoUZhdm9yIGRlIGluc2VydGFyIHN1cyBob3JhcyBkZSB0cmFiYWpvISc7Cn0KCjE7Cg==
77u/IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9odV9UaW1lQWNjb3VudGluZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Omh1X1RpbWVBY2NvdW50aW5nOwoKdXNlIHV0Zjg7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhlIFRpbWUgQWNjb3VudGluZyBvZiB0aGlzIGRheT8nfSA9ICdCaXp0b3NhbiB0w7Zyw7ZsbmkgYWthcmphIGEgbWFpIG5hcCBJZMO1RWxzesOhbW9sw6Fzw6F0Pyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRUaW1lQWNjb3VudGluZ0VkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGltZSBSZWNvcmQnfSA9ICdJZMO1IGJlamVneXrDqXMgc3plcmtlc3p0w6lzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IHNldHRpbmdzJ30gPSAnUHJvamVrdCBiZcOhbGzDrXTDoXNvayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXRlIE5hdmlnYXRpb24nfSA9ICdEw6F0dW0gbmF2aWfDoWNpw7MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJldmlvdXMgZGF5J30gPSAnRWzDtXrDtSBuYXAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV4dCBkYXknfSA9ICdLw7Z2ZXRrZXrDtSBuYXAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF5cyB3aXRob3V0IGVudHJpZXMnfSA9ICdCZWplZ3l6w6lzIG7DqWxrw7xsaSBuYXBvayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmaWVsZHMgYXJlIG1hcmtlZCB3aXRoIGEgIioiLid9ID0gJ0EgIioiLWFsIGplbMO2bHQgbWV6w7VrIGtpdMO2bHTDqXNlIGvDtnRlbGV6w7UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBoYXZlIHRvIGZpbGwgaW4gc3RhcnQgYW5kIGVuZCB0aW1lIG9yIGEgdGltZSBwZXJpb2QuJ30gPSAnS2kga2VsbCB0w7ZsdGVuaWUgYSBrZXpkw7Ugw6lzIGJlZmVqZXrDtSBpZMO1cG9udG90IHZhZ3kgYXogaWTDtXRhcnRhbW90Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAnUHJvamVrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYXNrJ30gPSAnRmVsYWRhdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZW1hcmsnfSA9ICdNZWdqZWd5esOpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXRlIE5hdmlnYXRpb24nfSA9ICdEw6F0dW0gbmF2aWfDoWNpw7MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIGFkZCBhIHJlbWFyayB3aXRoIG1vcmUgdGhhbiA4IGNoYXJhY3RlcnMhLid9ID0gJ0vDqXJlbSBhZGpvbiBtZWcgZWd5IDgga2FyYWt0ZXJuw6lsIGhvc3N6YWJiIG1lZ2plZ3l6w6lzdCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVnYXRpdmUgdGltZXMgYXJlIG5vdCBhbGxvd2VkLid9ID0gJ05lZ2F0w612IGlkw7VrIG5lbSBtZWdlbmdlZGV0dGVrLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBlYXRlZCBob3VycyBhcmUgbm90IGFsbG93ZWQuIFN0YXJ0IHRpbWUgbWF0Y2hlcyBhbm90aGVyIGludGVydmFsLid9ID0gJ0lzbcOpdGzDtWTDtSDDs3LDoWsgbWVnYWTDoXNhIG5lbSBtZWdlbmdlZGV0dC4gQSBrZXpkw7UgaWTDtXBvbnQgZWd5ZXppayBlZ3kgbcOhc2lrIGludGVydmFsdW1tYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCB0aW1lIG11c3QgYmUgYWZ0ZXIgc3RhcnQgdGltZS4nfSA9ICdBIGJlZmVqZXrDtSBpZMO1cG9udCBrw6lzw7ViYmkga2VsbCBsZWd5ZW4sIG1pbnQgYSBrZXpkw7UgaWTDtXBvbnQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGVhdGVkIGhvdXJzIGFyZSBub3QgYWxsb3dlZC4gRW5kIHRpbWUgbWF0Y2hlcyBhbm90aGVyIGludGVydmFsLid9ID0gJ0lzbcOpdGzDtWTDtSDDs3LDoWsgbWVnYWTDoXNhIG5lbSBsZWhldHPDqWdlcy4gQSBiZWZlamV6w7UgaWTDtXBvbnQgZWd5ZXppayBtw6FzIGlkw7VzemFra2FsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJpb2QgaXMgYmlnZ2VyIHRoYW4gdGhlIGludGVydmFsIGJldHdlZW4gc3RhcnQgYW5kIGVuZCB0aW1lcyEnfSA9ICdBeiBpZMO1dGFydGFtIG5hZ3lvYmIsIG1pbnQgYSBrZXpkw7Ugw6lzIGJlamV6w7UgaWTDtXBvbnQga8O2enRpIGlkw7UhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgcGVyaW9kISBBIGRheSBoYXMgb25seSAyNCBob3Vycy4nfSA9ICfDiXJ2w6lueXRlbGVuIGlkw7V0YXJ0YW0hIEEgbmFwIGNzYWsgMjQgw7Nyw6Fiw7NsIMOhbGwhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgdmFsaWQgcGVyaW9kIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJ30gPSAnQXogw6lydsOpbnllcyBpZMO1dGFydGFtbmFrIG5hZ3lvYmJuYWsga2VsbCBsZW5uaWUgbnVsbMOhbsOhbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBwZXJpb2QhIE5lZ2F0aXZlIHBlcmlvZHMgYXJlIG5vdCBhbGxvd2VkLid9ID0gJ8OJcnbDqW55dGVsZW4gaWTDtXRhcnRhbSEgTmVnYXTDrXYgaWTDtXRhcnRhbSBuZW0gbWVnZW5nZWRldHQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBvbmUgcm93J30gPSAnU29yIGhvenrDoWFkw6FzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb3RhbCd9ID0gJ8OWc3N6ZXNlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbiB2YWNhdGlvbid9ID0gJ1N6YWJhZHPDoWdvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgY2FuIG9ubHkgc2VsZWN0IG9uZSBjaGVja2JveCBlbGVtZW50ISd9ID0gJ0NzYWsgZWd5IGplbMO2bMO1bsOpZ3l6ZXRldCB2w6FsYXN6dGhhdCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT24gc2ljayBsZWF2ZSd9ID0gJ0JldGVnc3phYmFkc8OhZ29uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09uIG92ZXJ0aW1lIGxlYXZlJ30gPSAnVMO6bMOzcmEgbGV0w7ZsdMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgaXRlbXMnfSA9ICfDlnNzemVzIGJlamVneXrDqXMgbWVnamVsZW7DrXTDqXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBUaW1lIEFjY291bnRpbmcgRW50cnknfSA9ICdJZMO1RWxzesOhbW9sw6FzIGJlamVneXrDqXMgdMO2cmzDqXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbmZpcm0gaW5zZXJ0J30gPSAnQmVzesO6csOhcyBqw7N2w6FoYWd5w6FzYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd29ya2VkIHdoaWxlIHlvdSB3ZXJlIG9uIHNpY2sgbGVhdmU/J30gPSAnQml6dG9zYW4gZG9sZ296b3R0LCBtaWvDtnpiZW4gYmV0ZWdzemFiYWTDoXNnb24gdm9sdD8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCB3aGlsZSB5b3Ugd2VyZSBvbiB2YWNhdGlvbj8nfSA9ICdCaXp0b3NhbiBkb2xnb3pvdHQsIG1pa8O2emJlbiBiZXRlZ3N6YWJhZMOhc2dvbiB2b2x0Pyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd29ya2VkIHdoaWxlIHlvdSB3ZXJlIG9uIG92ZXJ0aW1lIGxlYXZlPyd9ID0gJ0JpenRvc2FuIGRvbGdvem90dCwgbWlrw7Z6YmVuIHTDumzDs3LDoXQgdMO2bHTDtnR0IGxlPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd29ya2VkIG1vcmUgdGhhbiAxNiBob3Vycz8nfSA9ICdCaXp0b3NhbiB0w7ZiYmV0IGRvbGdvem90dCBtaW50IDE2IMOzcmE/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nT3ZlcnZpZXcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgcmVwb3J0aW5nIG1vbnRobHkgb3ZlcnZpZXcnfSA9ICdJZMO1LWtpbXV0YXTDoXMgaGF2aSDDtnNzemVzw610w7UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnRpbWUgKEhvdXJzKSd9ID0gJ1TDumzDs3JhICjDs3LDoWspJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ0aW1lICh0aGlzIG1vbnRoKSd9ID0gJ1TDumzDs3JhIChlYmJlbiBhIGjDs25hcGJhbiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnRpbWUgKHRvdGFsKSd9ID0gJ1TDumzDs3JhICjDtnNzemVzZW4pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbWFpbmluZyBvdmVydGltZSBsZWF2ZSd9ID0gJ0xldMO2bHRoZXTDtSB0w7psw7NyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbiAoRGF5cyknfSA9ICdTemFiYWRzw6FnIChuYXApJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZhY2F0aW9uIHRha2VuICh0aGlzIG1vbnRoKSd9ID0gJ1N6YWJhZHPDoWcgKGViYmVuIGEgaMOzbmFwYmFuKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbiB0YWtlbiAodG90YWwpJ30gPSAnU3phYmFkc8OhZyAow7Zzc3plc2VuKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZW1haW5pbmcgdmFjYXRpb24nfSA9ICdGZW5ubWFyYWTDsyBzemFiYWRzw6FnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpY2sgTGVhdmUgKERheXMpJ30gPSAnQmV0ZWdzemFiYWRzw6FnIChuYXApJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpY2sgbGVhdmUgdGFrZW4gKHRoaXMgbW9udGgpJ30gPSAnQmV0ZWdzemFiYWRzw6FnIChlYmJlbiBhIGjDs25hcGJhbiknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2ljayBsZWF2ZSB0YWtlbiAodG90YWwpJ30gPSAnQmV0ZWdzemFiYWRzw6FnICjDtnNzemVzZW4pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByZXZpb3VzIG1vbnRoJ30gPSAnRWzDtXrDtSBow7NuYXAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV4dCBtb250aCd9ID0gJ0vDtnZldGtlesO1IGjDs25hcCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXknfSA9ICdOYXAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2Vla2RheSd9ID0gJ0jDqXRrw7Z6bmFwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtpbmcgSG91cnMnfSA9ICdNdW5rYWlkw7UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG90YWwgd29ya2VkIGhvdXJzJ30gPSAnw5Zzc3plcyBtdW5rYWlkw7UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlclwncyBwcm9qZWN0IG92ZXJ2aWV3J30gPSAnRmVsaGFzem7DoWzDs2kgcHJvamVrdCDDtnNzemVmb2dsYWzDsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIb3VycyAobW9udGhseSknfSA9ICfDk3LDoWsgKGhhdmkpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hvdXJzIChMaWZldGltZSknfSA9ICfDk3LDoWsgKMOpbGV0dGFydGFtKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFuZCB0b3RhbCd9ID0gJ01pbmTDtnNzemVzZW4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdQcm9qZWN0UmVwb3J0aW5nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IHJlcG9ydCd9ID0gJ1Byb2pla3Qga3VpbXV0YXTDoXMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdSZXBvcnRpbmcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgcmVwb3J0aW5nJ30gPSAnSWTDtSBraW11dGF0w6FzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbnRoIE5hdmlnYXRpb24nfSA9ICdIw7NuYXAgbmF2aWfDoWNpw7MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciByZXBvcnRzJ30gPSAnRmVsaGFzem7DoWzDsyBraW11dGF0w6FzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbnRobHkgdG90YWwnfSA9ICdIYXZpIMO2c3N6ZXPDrXTDtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMaWZldGltZSB0b3RhbCd9ID0gJ8OJbGV0dGFydGFtIMO2c3N6ZXPDrXTDtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydGltZSBsZWF2ZSd9ID0gJ1TDumzDs3JhIGxldMO2bHTDqXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmFjYXRpb24nfSA9ICdTemFiYWRzw6FnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpY2sgbGVhdmUnfSA9ICdCZXRlZ3N6YWJhZHPDoWcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmFjYXRpb24gcmVtYWluaW5nJ30gPSAnSMOhdHJhbMOpdsO1IHTDoXZvbGzDqXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCByZXBvcnRzJ30gPSAnUHJvamVrdCBraW11dGF0w6Fzb2snOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdTZXR0aW5nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRpbWUgQWNjb3VudGluZyBQcm9qZWN0IFNldHRpbmdzJ30gPSAnSWTDtUVsc3rDoW1vbMOhcyBQcm9qZWt0IEJlw6FsbMOtdMOhc29rJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBwcm9qZWN0J30gPSAnw5pqIHByb2pla3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFByb2plY3QnfSA9ICfDmmogUHJvamVrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFByb2plY3QgU2V0dGluZ3MnfSA9ICdQcm9qZWt0IEJlw6FsbMOtdMOhc29rIFN6ZXJrZXN6dMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlcmUgaXMgYWxyZWFkeSBhIHByb2plY3Qgd2l0aCB0aGlzIG5hbWUuIFBsZWFzZSwgY2hvb3NlIGEgZGlmZmVyZW50IG9uZS4nfSA9ICdNw6FyIHZhbiBpbHllbiBuZXbDuyBwcm9qZWt0LCB2w6FsYXNzem9uIG3DoXMgbmV2ZXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGltZSBBY2NvdW50aW5nIFNldHRpbmdzJ30gPSAnSWTDtUVsc3rDoW1vbMOhcyBCZcOhbGzDrXTDoXNvayBTemVya2VzenTDqXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCB0YXNrJ30gPSAnw5pqIGZlbGFkYXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHVzZXInfSA9ICfDmmogZmVsaGFzem7DoWzDsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIFByb2plY3RzJ30gPSAnUHJvamVrdGVrIFN6w7tyw6lzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIFRhc2tzJ30gPSAnRmVsYWRhdG9rIFN6w7tyw6lzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIFVzZXJzJ30gPSAnRmVsaGFzem7DoWzDs2sgU3rDu3LDqXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgTGlzdCd9ID0gJ1Byb2pla3QgTGlzdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFzayBMaXN0J30gPSAnRmVsYWRhdCBMaXN0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgVGFzayd9ID0gJ8OaaiBGZWxhZGF0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGFzayBTZXR0aW5ncyd9ID0gJ0ZlbGFkYXQgQmXDoWxsw610w6Fzb2sgU3plcmtlc3p0w6lzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGVyZSBpcyBhbHJlYWR5IGEgdGFzayB3aXRoIHRoaXMgbmFtZS4gUGxlYXNlLCBjaG9vc2UgYSBkaWZmZXJlbnQgb25lLid9ID0gJ03DoXIgdmFuIGlseWVuIG5ldsO7IGZlbGFkYXQsIHbDoWxhc3N6b24gbcOhcyBuZXZldC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBMaXN0J30gPSAnRmVsaGFzem7DoWzDsyBMaXN0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgVXNlciBTZXR0aW5ncyd9ID0gJ8OaaiBGZWxoYXN6bsOhbMOzIEJlw6FsbMOtdMOhc2FpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVXNlciBTZXR0aW5ncyd9ID0gJ0ZlbGhhc3puw6Fsw7NpIEJlw6FsbMOtdMOhc29rIFN6ZXJrZXN6dMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29tbWVudHMnfSA9ICdNZWdqZWd5esOpc2VrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgT3ZlcnRpbWUnfSA9ICdNdXRhc3NhIGEgVMO6bMOzcsOhdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvdyBwcm9qZWN0IGNyZWF0aW9uJ30gPSAnUHJvamVrdCBsw6l0cmVob3rDoXPDoW5hayBlbmdlZMOpbHllesOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyaW9kIEJlZ2luJ30gPSAnSWTDtXN6YWsgS2V6ZGV0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJpb2QgRW5kJ30gPSAnSWTDtXN6YWsgVsOpZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF5cyBvZiBWYWNhdGlvbid9ID0gJ1N6YWJhZG5hcG9rJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hvdXJzIHBlciBXZWVrJ30gPSAnw5Nyw6FrIGhldGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXV0aG9yaXplZCBPdmVydGltZSd9ID0gJ0rDs3bDoWhhZ3lvdHQgVMO6bMOzcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyaW9kIGVuZCBtdXN0IGJlIGFmdGVyIHBlcmlvZCBiZWdpbi4nfSA9ICdBeiBpZMO1c3phayB2w6lnw6luZWsgYSBrZXpkZXRlIHV0w6FuIGtlbGwgbGVubmllLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB0aW1lIHBlcmlvZHMgZm91bmQuJ30gPSAnSWTDtXN6YWsgbmVtIHRhbMOhbGhhdMOzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgdGltZSBwZXJpb2QnfSA9ICdJZMO1c3phayBob3p6w6FhZMOhc2EnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdWaWV3CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWaWV3IFRpbWUgUmVjb3JkJ30gPSAnSWTDtSBCZWplZ3l6w6lzIG1lZ3Rla2ludMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmlldyBvZiAnfSA9ICdNZWd0ZWtpbnTDqXMgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RhdGUgbmF2aWdhdGlvbid9ID0gJ0TDoXR1bSBuYXZpZ8OhY2nDsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyBkYXRhIGZvdW5kIGZvciB0aGlzIGRheS4nfSA9ICdOaW5jcyBhZGF0IGVoaGV6IGEgbmFwaG96Lic7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGluY29tcGxldGUgd29ya2luZyBkYXlzIGZvciB0aGUgdXNlci4nfSA9ICfDnGd5aW50w6l6w7UgaW50ZXJmYWNlIGZpZ3llbG1lenRldMO1IG1vZHVsIGEga2l0w7ZsdGV0bGVuIG11bmthbmFwb2sgbWVnamVsZW7DrXTDqXPDqWhlei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBuYW1lIGZvciBuZXcgYWN0aW9ucy4nfSA9ICdBeiDDumogYWtjacOzayBhbGFww6lydGVsbWV6ZXR0IG5ldmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbmFtZSBmb3IgbmV3IHByb2plY3RzLid9ID0gJ0F6IMO6aiBwcm9qZWt0ZWsgYWxhcMOpcnRlbG1lemV0dCBuZXZlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNldHRpbmcgZm9yIGRhdGUgZW5kLid9ID0gJ0FsYXBiZcOhbGzDrXTDoXMgYSBkw6F0dW0gdsOpZ8OpaGV6Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNldHRpbmcgZm9yIGRhdGUgc3RhcnQuJ30gPSAnQWxhcGJlw6FsbMOtdMOhcyBhIGTDoXR1bSBrZXpkZXTDqWhlei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBsZWF2ZSBkYXlzLid9ID0gJ0FsYXBiZcOhbGzDrXTDoXMgYSB0w6F2b2xsw6l0IG5hcGphaWhvei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBvdmVydGltZS4nfSA9ICdBbGFwYmXDoWxsw610w6FzIGEgdMO6bMOzcsOhaG96Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNldHRpbmcgZm9yIHRoZSBzdGFuZGFyZCB3ZWVrbHkgaG91cnMuJ30gPSAnQWxhcGJlw6FsbMOtdMOhcyBhIG5vcm3DoWwgaGV0aSDDs3LDoWtob3ouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdHVzIGZvciBuZXcgYWN0aW9ucy4nfSA9ICdBeiDDumogYWtjacOzayBhbGFww6lydGVsbWV6ZXR0IHN0w6F0dXN6YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0dXMgZm9yIG5ldyBwcm9qZWN0cy4nfSA9ICdBeiDDumogcHJvamVrdGVrIGFsYXDDqXJ0ZWxtZXpldHQgc3TDoXR1c3phLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXR1cyBmb3IgbmV3IHVzZXJzLid9ID0gJ0F6IMO6aiBmZWxoYXN6bsOhbMOzayBhbGFww6lydGVsbWV6ZXR0IHN0w6F0dXN6YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcHJvamVjdHMgZm9yIHdoaWNoIGEgcmVtYXJrIGlzIHJlcXVpcmVkLiBJZiB0aGUgUmVnRXhwIG1hdGNoZXMgb24gdGhlIHByb2plY3QsIHlvdSBoYXZlIHRvIGluc2VydCBhIHJlbWFyayB0b28uIFRoZSBSZWdFeHAgdXNlIHRoZSBzbXggcGFyYW1ldGVyLid9ID0gJ0FkamEgbWVnIGEgcHJvamVrdGVrZXQsIGFtZWx5ZWtoZXoga8O2dGVsZXrDtSBhIG1lZ2plZ3l6w6lzLiBIYSBhIFJlZ0V4cCBraWZlamV6w6lzIGlsbGVzemtlZGlrIGVneSBwcm9qZWt0cmUsIG1lZyBrZWxsIGFkbmlhIG1lZ2plZ3l6w6lzdC4gQSBSZWdFeHAgYXogc214IHBhcmFtw6l0ZXJ0IGhhc3puw6FsamEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGltZSBhY2NvdW50aW5nIHNldHRpbmdzJ30gPSAnSWTDtUVsc3rDoW1vbMOhcyBiZcOhbGzDrXTDoXNvayBzemVya2VzenTDqXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGltZSByZWNvcmQnfSA9ICdJZMO1IGJlamVneXrDqXMgc3plcmtlc3p0w6lzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGb3IgaG93IG1hbnkgZGF5cyBhZ28geW91IGNhbiBpbnNlcnQgd29ya2luZyB1bml0cy4nfSA9ICdIw6FueSBuYXByYSB2aXNzemFtZW7DtWxlZyB0dWRqYSBtZWdhZG5pIGEgbXVua2FpZMO1dC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgZW5hYmxlZCwgdGhlIGRyb3Bkb3duIGVsZW1lbnRzIGluIHRoZSBlZGl0IHNjcmVlbiBhcmUgY2hhbmdlZCB0byBhdXRvY29tcGxldGlvbiBmaWVsZHMuJ30gPSAnSGEgZW5nZWTDqWx5ZXpldHQsIGEgbGVnw7ZyZMO8bMO1IGVsZW1layBoZWx5ZXR0IGF1dG9tYXRpa3VzIGtpZWfDqXN6w610w6lzIGxlc3ogYSBtZXrDtWtuw6lsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiB3b3JraW5nIGRheXMgYWZ0ZXIgd2hpY2ggdGhlIHdvcmtpbmcgdW5pdHMgaGF2ZSB0byBiZSBpbnNlcnRlZC4nfSA9ICdNYXhpbXVtIGjDoW55IG5hcCB1dMOhbiBrw7Z0ZWxlesO1IG1lZ2FkbmkgYSBtdW5rYWlkw7V0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiB3b3JraW5nIGRheXMgd2l0aG91dGggd29ya2luZyB1bml0cyBlbnRyeSBhZnRlciB3aGljaCBhIHdhcm5pbmcgd2lsbCBiZSBzaG93bi4nfSA9ICdNYXhpbXVtIGjDoW55IG11bmthaWTDtSBtZWdhZMOhc2EgbsOpbGvDvGxpIG11bmthbmFwIHV0w6FuIGplbGVuamVuIG1lZyBmaWd5ZWxtZXp0ZXTDqXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgdGltZSByZXBvcnRpbmcnfSA9ICdQcm9qZWt0IGlkw7Uga2ltdXRhdMOhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWd1bGFyIGV4cHJlc3Npb25zIGZvciBjb25zdHJhaW5pbmcgYWN0aW9uIGxpc3QgYWNjb3JkaW5nIHRvIHNlbGVjdGVkIHByb2plY3QuIEtleSBjb250YWlucyByZWd1bGFyIGV4cHJlc3Npb24gZm9yIHByb2plY3QocyksIGNvbnRlbnQgY29udGFpbnMgcmVndWxhciBleHByZXNzaW9ucyBmb3IgYWN0aW9uKHMpLid9ID0gJ1JlZ3Vsw6FyaXMga2lmZWplesOpcyBhIHByb2pla3RoZXogbWVnZmVsZWzDtSBha2Npw7NrIGxpc3TDoWrDoW5hayBzesO8a8OtdMOpc8OpaGV6LiBBIGt1bGNzIHJlZ3Vsw6FyaXMga2lmZWplesOpc3QgdGFydGFsbWF6IGEgcHJvamVrdGVraGV6LCBhIHRhcnRhbG9tIHJlZ3Vsw6FyaXMga2lmZWplesOpc3QgdGFydGFsbWF6IGF6IGFrY2nDs2tob3ouJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIGNvbnN0cmFpbmluZyBwcm9qZWN0IGxpc3QgYWNjb3JkaW5nIHRvIHVzZXIgZ3JvdXBzLiBLZXkgY29udGFpbnMgcmVndWxhciBleHByZXNzaW9uIGZvciBwcm9qZWN0KHMpLCBjb250ZW50IGNvbnRhaW5zIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGdyb3Vwcy4nfSA9ICdSZWd1bMOhcmlzIGtpZmVqZXrDqXMgYSBmZWxoYXN6bsOhbMOzayBjc29wb3J0asOhbmFrIG1lZ2ZlbGVsw7UgcHJvamVrdGVrIGxpc3TDoWrDoW5hayBzesO8a8OtdMOpc8OpaGV6LiBBIGt1bGNzIHJlZ3Vsw6FyaXMga2lmZWplesOpc3QgdGFydGFsbWF6IGEgcHJvamVrdGVraGV6LCBhIHRhcnRhbG9tIHJlZ3Vsw6FyaXMga2lmZWplesOpc3QgdGFydGFsbWF6IGEgY3NvcG9ydG9rIGxpc3TDoWrDoWhvei4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3BlY2lmaWVzIGlmIHdvcmtpbmcgaG91cnMgY2FuIGJlIGluc2VydGVkIHdpdGhvdXQgc3RhcnQgYW5kIGVuZCB0aW1lcy4nfSA9ICdBZGphIG1lZywgaGEgYSBtdW5rYWlkw7UgbWVnYWRoYXTDsyBrZXpkw7Ugw6lzIGJlZmVqZXrDtSBpZMO1cG9udCBuw6lsa8O8bC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBtb2R1bGUgZm9yY2VzIGluc2VydHMgaW4gVGltZUFjY291bnRpbmcuJ30gPSAnRXogYSBtb2R1bCBrw6lueXN6ZXLDrXRpIGF6IElkw7VFbHN6w6Ftb2zDoXMgYmVzesO6csOhc8OhdC4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbm90aWZpY2F0aW9uIG1vZHVsZSBnaXZlcyBhIHdhcm5pbmcgaWYgdGhlcmUgYXJlIHRvbyBtYW55IGluY29tcGxldGUgd29ya2luZyBkYXlzLid9ID0gJ0V6IGEgZmlneWVsbWV6dGV0w7UgbW9kdWwgamVsemksIGhhIHTDumwgc29rIGtpdMO2bHRldGxlbiBtdW5rYW5hcCB2YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgYWNjb3VudGluZy4nfSA9ICdJZMO1RWxzesOhbW9sw6FzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUbyB1c2UgaWYgc29tZSBhY3Rpb25zIHJlZHVjZWQgdGhlIHdvcmtpbmcgaG91cnMgKGZvciBleGFtcGxlLCBpZiBvbmx5IGhhbGYgb2YgdGhlIHRyYXZlbGluZyB0aW1lIGlzIHBhaWQgS2V5ID0+IHRyYXZlbGluZzsgQ29udGVudCA9PiA1MCkuJ30gPSAnSGFzem7DoWxqYSwgaGEgdmFsYW1lbHlpayBha2Npw7MgY3PDtmtrZW50aSBhIG11bmthw7Nyw6FrYXQgKHDDqWxkw6F1bCBoYSBjc2FrIGF6IHV0YXrDoXMgZmVsZSBrZXLDvGwga2lmaXpldMOpc3JlLCBLdWxjcyA9PiBVdGF6w6FzOyBUYXJ0YWxvbSA9PjUwKS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGV0ZXJtaW5lcyBpZiB0aGUgc3RhdGlzdGljcyBtb2R1bGUgbWF5IGdlbmVyYXRlIHRpbWUgYWNjb3VudGluZyBpbmZvcm1hdGlvbi4nfSA9ICdNZWdoYXTDoXJvenphLCBoYSBhIHN0YXRpc3p0aWthIG1vZHVsIGdlbmVyw6FsaGF0IElkw7VFbHN6w6Ftb2zDoXMgaW5mb3Jtw6FjacOza2F0Lic7CgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9uJ30gPSAnSCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUdWUnfSA9ICdLJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dlZCd9ID0gJ1N6ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaHUnfSA9ICdDcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcmknfSA9ICdQJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdCd9ID0gJ1N6byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdW4nfSA9ICdWJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0phbnVhcnknfSA9ICdKYW51w6FyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZlYnJ1YXJ5J30gPSAnRmVicnXDoXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFyY2gnfSA9ICdNw6FyY2l1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHJpbCd9ID0gJ8OBcHJpbGlzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heSd9ID0gJ03DoWp1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKdW5lJ30gPSAnSsO6bml1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKdWx5J30gPSAnSsO6bGl1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdWd1c3QnfSA9ICdBdWd1c3p0dXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VwdGVtYmVyJ30gPSAnU3plcHRlbWJlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPY3RvYmVyJ30gPSAnT2t0w7NiZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm92ZW1iZXInfSA9ICdOb3ZlbWJlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWNlbWJlcid9ID0gJ0RlY2VtYmVyJzsKCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGFsbCBwcm9qZWN0cyd9ID0gJ0F6IMO2c3N6ZXMgcHJvamVrdCBtZWdqZWxlbsOtdMOpc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB2YWxpZCBwcm9qZWN0cyd9ID0gJ0F6IMOpcnbDqW55ZXMgcHJvamVrdGVrIG1lZ2plbGVuw610w6lzZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lQWNjb3VudGluZyd9ID0gJ0lkw7VFbHN6w6Ftb2zDoXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0aW9ucyd9ID0gJ0FrY2nDs2snOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciB1cGRhdGVkISd9ID0gJ0ZlbGhhc3puw6Fsw7MgbcOzZG9zw610dmEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgYWRkZWQhJ30gPSAnRmVsaGFzem7DoWzDsyBob3p6w6FhZHZhISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IGFkZGVkISd9ID0gJ1Byb2pla3QgaG96esOhYWR2YSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCB1cGRhdGVkISd9ID0gJ1Byb2pla3QgbcOzZG9zw610dmEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rhc2sgYWRkZWQhJ30gPSAnRmVsYWRhdCBob3p6w6FhZHZhISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYXNrIHVwZGF0ZWQhJ30gPSAnRmVsYWRhdCBtw7Nkb3PDrXR2YSEnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGRlbGV0ZSBXb3JraW5nIFVuaXRzISd9ID0gJ05lbSBsZWhldCB0w7Zyw7ZsbmkgYSBtdW5rYWlkw7V0ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3Qgc2F2ZSBzZXR0aW5ncywgYmVjYXVzZSBhIGRheSBoYXMgb25seSAyNCBob3VycyEnfSA9ICdOZW0gbGVoZXQgbWVudGVuaSBhIGJlw6FsbMOtdMOhc29rYXQsIGEgbmFwIGNzYWsgMjQgw7Nyw6Fiw7NsIMOhbGwhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBpbnNlcnQgeW91ciB3b3JraW5nIGhvdXJzISd9ID0gJ0vDqXJlbSBhZGphIG1lZyBhIG11bmthaWRlasOpdCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAnS2ltdXRhdMOhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTdWNjZXNzZnVsIGluc2VydCEnfSA9ICdTaWtlcmVzZW4gaG96esOhYWR2YSEnOwoKfQoKMTsK
77u/IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9pdF9UaW1lQWNjb3VudGluZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Oml0X1RpbWVBY2NvdW50aW5nOwoKdXNlIHV0Zjg7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhlIFRpbWUgQWNjb3VudGluZyBvZiB0aGlzIGRheT8nfSA9ICdWdW9pIHZlcmFtZW50ZSBjYW5jZWxsYXJlIGxhIHJlbmRpY29udGF6aW9uZSB0ZW1wb3JhbGUgZGkgb2dnaSA/JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nRWRpdAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBUaW1lIFJlY29yZCd9ID0gJ01vZGlmaWNhIGxhIHJlbmRpY29udGF6aW9uZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IHNldHRpbmdzJ30gPSAnSW1wb3N0YXppb25pIGRlbCBwcm9nZXR0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmV2aW91cyBkYXknfSA9ICdHaW9ybm8gcHJlY2VkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXh0IGRheSd9ID0gJ0dpb3JubyBzdWNjZXNzaXZvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RheXMgd2l0aG91dCBlbnRyaWVzJ30gPSAnR2lvcm5pIHNlbnphIGluZm9ybWF6aW9uaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmaWVsZHMgYXJlIG1hcmtlZCB3aXRoIGEgIioiLid9ID0gJ0kgY2FtcGkgb2JibGlnYXRvcmkgc29ubyBpbmRpY2F0aSBjb24gIioiLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydZb3UgaGF2ZSB0byBmaWxsIGluIHN0YXJ0IGFuZCBlbmQgdGltZSBvciBhIHRpbWUgcGVyaW9kLid9ID0gJ0VcJyBvYmJsaWdhdG9yaW8gaW5zZXJpcmUgaW5pemlvIGUgZmluZSBvcHB1cmUgdW4gcGVyaW9kby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ1Byb2dldHRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rhc2snfSA9ICdDb21waXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbWFyayd9ID0gJ0NvbW1lbnRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RhdGUgTmF2aWdhdGlvbid9ID0gJ05hdmlnYXppb25lIHBlciBkYXRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBhZGQgYSByZW1hcmsgd2l0aCBtb3JlIHRoYW4gOCBjaGFyYWN0ZXJzIS4nfSA9ICdJbnNlcmlyZSB1biBjb21tZXRvIHBpw7kgbHVuZ28gZGkgOCBjYXJhdHRlcmkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZ2F0aXZlIHRpbWVzIGFyZSBub3QgYWxsb3dlZC4nfSA9ICdOb24gcG9zc29ubyBlc3NlcmUgaW5zZXJpdGkgdmFsb3JpIG5lZ2F0aXZpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBlYXRlZCBob3VycyBhcmUgbm90IGFsbG93ZWQuIFN0YXJ0IHRpbWUgbWF0Y2hlcyBhbm90aGVyIGludGVydmFsLid9ID0gJ05vbiDDqCBwZXJtZXNzbyBpbnNlcmlyZSBvcmUgcmlwZXR1dGUuIExcJ29yYXJpbyBkaSBpbml6aW8gY29pbmNpZGUgY29uIHVuIGFsdHJvIGludGVydmFsbG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCB0aW1lIG11c3QgYmUgYWZ0ZXIgc3RhcnQgdGltZS4nfSA9ICdMXCdvcmFyaW8gZGkgZmluZSDDqCBwb3N0ZXJpb3JlIGFsbFwnb3JhcmlvIGRpIGluaXppby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwZWF0ZWQgaG91cnMgYXJlIG5vdCBhbGxvd2VkLiBFbmQgdGltZSBtYXRjaGVzIGFub3RoZXIgaW50ZXJ2YWwuJ30gPSAnTm9uIMOoIHBlcm1lc3NvIGluc2VyaXJlIG9yZSByaXBldHV0ZS4gTFwnb3JhcmlvIGRpIGZpbmUgY29pbmNpZGUgY29uIHVuIGFsdHJvIGludGVydmFsbG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlcmlvZCBpcyBiaWdnZXIgdGhhbiB0aGUgaW50ZXJ2YWwgYmV0d2VlbiBzdGFydCBhbmQgZW5kIHRpbWVzISd9ID0gJ0lsIHBlcmlvZG8gw6ggc3VwZXJpb3JlIGFsbFwnaW50ZXJ2YWxsbyBkaSBpbml6aW9cXGZpbmUhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgcGVyaW9kISBBIGRheSBoYXMgb25seSAyNCBob3Vycy4nfSA9ICdQZXJpb2RvIG5vbiB2YWxpZG8uIFVuYSBnaW9ybmF0YSBoYSBzb2xvIDI0IG9yZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSB2YWxpZCBwZXJpb2QgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4nfSA9ICdVbiBwZXJpb2RvIHZhbGlkbyBkZXZlIGVzc2VyZSBtYWdnaW9yZSBkaSB6ZXJvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIHBlcmlvZCEgTmVnYXRpdmUgcGVyaW9kcyBhcmUgbm90IGFsbG93ZWQuJ30gPSAnUGVyaW9kbyBub24gdmFsaWRvLiBWYWxvcmkgbmVnYXRpdmkgbm9uIGFtbWVzc2kuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBvbmUgcm93J30gPSAnQWdnaXVuZ2VyZSB1bmEgcmlnYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb3RhbCd9ID0gJ1RvdGFsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbiB2YWNhdGlvbid9ID0gJ0ZlcmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gb25seSBzZWxlY3Qgb25lIGNoZWNrYm94IGVsZW1lbnQhJ30gPSAnUHVvaSBzZWxlemlvbmFyZSBzb2xvIHVuIGVsZW1lbnRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbiBzaWNrIGxlYXZlJ30gPSAnQXNzZW50ZSBwZXIgbWFsYXR0aWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT24gb3ZlcnRpbWUgbGVhdmUnfSA9ICdBc3NlbnRlIHBlciByZWN1cGVybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGFsbCBpdGVtcyd9ID0gJ01vc3RyYSB0dXR0aSBnbGkgZWxlbWVudGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIFRpbWUgQWNjb3VudGluZyBFbnRyeSd9ID0gJ0NhbmNlbGxhcmUgdm9jZSBkaSByZW5kaWNvbnRhemlvbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlybSBpbnNlcnQnfSA9ICdDb25mZXJtYXJlIGluc2VyaW1lbnRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3b3JrZWQgd2hpbGUgeW91IHdlcmUgb24gc2ljayBsZWF2ZT8nfSA9ICdTZWkgc2ljdXJvIGRpIGF2ZXIgbGF2b3JhdG8gbWVudHJlIGVyaSBhc3NlbnRlIHBlciBtYWxhdHRpYT8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCB3aGlsZSB5b3Ugd2VyZSBvbiB2YWNhdGlvbj8nfSA9ICdTZWkgc2ljdXJvIGRpIGF2ZXIgbGF2b3JhdG8gbWVudHJlIGVyaSBpbiBmZXJpZT8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCB3aGlsZSB5b3Ugd2VyZSBvbiBvdmVydGltZSBsZWF2ZT8nfSA9ICdTZWkgc2ljdXJvIGRpIGF2ZXIgbGF2b3JhdG8gbWVudHJlIGVyaSBhc3NlbnRlIHBlciByZWN1cGVybyA/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3b3JrZWQgbW9yZSB0aGFuIDE2IGhvdXJzPyd9ID0gJ1NlaSBzaWN1cm8gZGkgYXZlciBsYXZvcmF0byBwacO5IGRpIDE2IG9yZT8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdPdmVydmlldwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSByZXBvcnRpbmcgbW9udGhseSBvdmVydmlldyd9ID0gJ0NydXNjb3R0byBtZW5zaWxlIGRpIHJlbmRpY29udGF6aW9uZSB0ZW1wb3JhbGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnRpbWUgKEhvdXJzKSd9ID0gJ1N0cmFvcmRpbmFyaW8gKG9yZSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnRpbWUgKHRoaXMgbW9udGgpJ30gPSAnU3RyYW9yZGluYXJpbyAocXVlc3RvIG1lc2UpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ0aW1lICh0b3RhbCknfSA9ICdTdHJhb3JkaW5hcmlvICh0b3RhbGUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbWFpbmluZyBvdmVydGltZSBsZWF2ZSd9ID0gJ1RvdGFsZSBvcmUgZGkgcmVjdXBlcm8gZGlzcG9uaWJpbGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmFjYXRpb24gKERheXMpJ30gPSAnRmVyaWUgKGdpb3JuaSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmFjYXRpb24gdGFrZW4gKHRoaXMgbW9udGgpJ30gPSAnRmVyaWUgdXRpbGl6emF0ZSAocXVlc3RvIG1lc2UpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZhY2F0aW9uIHRha2VuICh0b3RhbCknfSA9ICdGZXJpZSB1dGlsaXp6YXRlICh0b3RhbGUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbWFpbmluZyB2YWNhdGlvbid9ID0gJ0ZlcmllIHJlc2lkdWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2ljayBMZWF2ZSAoRGF5cyknfSA9ICdBc3NlbnplIHBlciBtYWxhdHRpYSAoZ2lvcm5pKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWNrIGxlYXZlIHRha2VuICh0aGlzIG1vbnRoKSd9ID0gJ0Fzc2VuemUgcGVyIG1hbGF0dGlhIHV0aWxpenphdGUgKHF1ZXN0byBtZXNlKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWNrIGxlYXZlIHRha2VuICh0b3RhbCknfSA9ICdBc3NlbnplIHBlciBtYWxhdHRpYSAodG90YWxlKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmV2aW91cyBtb250aCd9ID0gJ01lc2UgcHJlY2VkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXh0IG1vbnRoJ30gPSAnTWVzZSBzZWd1ZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXknfSA9ICdHaW9ybm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2Vla2RheSd9ID0gJ0dpb3JubyBkZWxsYSBzZXR0aW1hbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya2luZyBIb3Vycyd9ID0gJ09yZSBsYXZvcmF0aXZlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvdGFsIHdvcmtlZCBob3Vycyd9ID0gJ1RvdGFsZSBvcmUgbGF2b3JhdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlclwncyBwcm9qZWN0IG92ZXJ2aWV3J30gPSAnVmlzdWFsaXp6YXppb25lIGRlbCBwcm9nZXR0byAtIFV0ZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIb3VycyAobW9udGhseSknfSA9ICdPcmUgKG1lbnNpbGkpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hvdXJzIChMaWZldGltZSknfSA9ICdPcmUgKGdsb2JhbGkpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYW5kIHRvdGFsJ30gPSAnVG90YWxlIG9tbmljb21wcmVuc2l2byc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRUaW1lQWNjb3VudGluZ1Byb2plY3RSZXBvcnRpbmcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgcmVwb3J0J30gPSAnUmlhc3N1bnRvIHByb2dldHRvJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nUmVwb3J0aW5nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIHJlcG9ydGluZyd9ID0gJ1JlcG9ydCBkZWwgdGVtcG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9udGggTmF2aWdhdGlvbid9ID0gJ05hdmlnYXppb25lIHBlciBtZXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgcmVwb3J0cyd9ID0gJ1JlcG9ydCB1dGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9udGhseSB0b3RhbCd9ID0gJ1RvdGFsZSBtZW5zaWxlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpZmV0aW1lIHRvdGFsJ30gPSAnVG90YWxlIGdMb2JhbGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnRpbWUgbGVhdmUnfSA9ICdBc3NlbnplIHBlciByZWN1cGVybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbid9ID0gJ0ZlcmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpY2sgbGVhdmUnfSA9ICdNYWxhdHRpYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbiByZW1haW5pbmcnfSA9ICdHaW9ybmkgcmltYW5lbnRpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgcmVwb3J0cyd9ID0gJ1JpYXNzdW50aSBwcm9nZXR0byc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRUaW1lQWNjb3VudGluZ1NldHRpbmcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGltZSBBY2NvdW50aW5nIFByb2plY3QgU2V0dGluZ3MnfSA9ICdNb2RpZmljYXJlIGxlIGNvbmZpZ3VyYXppb25pIGRpIGdlc3Rpb25lIGRlbCB0ZW1wbyBkZWwgcHJvZ2V0dG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBwcm9qZWN0J30gPSAnQWdnaXVuZ2VyZSBwcm9nZXR0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgUHJvamVjdCd9ID0gJ0FnZ2l1bmdlcmUgcHJvZ2V0dG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBQcm9qZWN0IFNldHRpbmdzJ30gPSAnTW9kaWZpY2FyZSBsYSBjb25maWd1cmF6aW9uZSBkZWwgcHJvZ2V0dG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlcmUgaXMgYWxyZWFkeSBhIHByb2plY3Qgd2l0aCB0aGlzIG5hbWUuIFBsZWFzZSwgY2hvb3NlIGEgZGlmZmVyZW50IG9uZS4nfSA9ICdFc2lzdGUgZ2nDoCB1biBwcm9nZXR0byBjb24gcXVlc3RvIG5vbWUuIFNjZWdsZWlyZSB1biBub21lIGRpdmVyc28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGltZSBBY2NvdW50aW5nIFNldHRpbmdzJ30gPSAnTW9kaWZpY2FyZSBsZSBjb25maWd1cmF6aW9uaSBkZWxsYSByZW5kaWNvbnRhemlvbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIHRhc2snfSA9ICdBZ2dpdW5nZXJlIGNvbXBpdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHVzZXInfSA9ICdOdW92byB1dGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlsdGVyIGZvciBQcm9qZWN0cyd9ID0gJ0ZpbHRybyBwZXIgcHJvZ2V0dGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlsdGVyIGZvciBUYXNrcyd9ID0gJ0ZpbHRybyBwZXIgY29tcGl0aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIFVzZXJzJ30gPSAnRmlsdHJvIHBlciB1dGVudGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCBMaXN0J30gPSAnRWxlbmNvIGRlaSBwcm9nZXR0aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYXNrIExpc3QnfSA9ICdFbGVuY28gZGVpIGNvbXBpdGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFRhc2snfSA9ICdBZ2dpdW5nZXJlIGNvbXBpdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBUYXNrIFNldHRpbmdzJ30gPSAnTW9kaWZpY2FyZSBsYSBjb25maWd1cmF6aW9uZSBkZWkgY29tcGl0aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGVyZSBpcyBhbHJlYWR5IGEgdGFzayB3aXRoIHRoaXMgbmFtZS4gUGxlYXNlLCBjaG9vc2UgYSBkaWZmZXJlbnQgb25lLid9ID0gJ0VzaXN0ZSBnacOgIHVuIGNvbXBpdG8gY29uIHF1ZXN0byBub21lLiBTY2VnbGllcmUgdW4gbm9tZSBkaXZlcnNvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIExpc3QnfSA9ICdFbGVuY28gdXRlbnRpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBVc2VyIFNldHRpbmdzJ30gPSAnQ29uZmlndXJhemlvbmkgbnVvdm8gdXRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVXNlciBTZXR0aW5ncyd9ID0gJ01vZGlmaWNhcmUgY29uZmlndXJhemlvbmUgdXRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnRzJ30gPSAnQ29tbWVudGknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBPdmVydGltZSd9ID0gJ01vc3RyYXJlIHN0cmFvcmRpbmFyaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbGxvdyBwcm9qZWN0IGNyZWF0aW9uJ30gPSAnQ29zZW50aXJlIGxhIGNyZWF6aW9uZSBkZWwgcHJvZ2V0dG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyaW9kIEJlZ2luJ30gPSAnUGVyaW9kbyBkaSBpbml6aW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyaW9kIEVuZCd9ID0gJ1BlcmlvZG8gZGkgdGVybWluZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXlzIG9mIFZhY2F0aW9uJ30gPSAnR2lvcm5pIGRpIEFzc2VuemEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG91cnMgcGVyIFdlZWsnfSA9ICdPcmUgYWxsYSBzZXR0aW1hbmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXV0aG9yaXplZCBPdmVydGltZSd9ID0gJ1N0cmFvcmRpbmFyaSBhdXRvcml6emF0aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJpb2QgZW5kIG11c3QgYmUgYWZ0ZXIgcGVyaW9kIGJlZ2luLid9ID0gJ0lsIHBlcmlvZG8gZmluYWxlIGRldmUgZXNzZXJlIHBvc3RlcmlvcmUgYWwgcGVyaW9kbyBpbml6aWFsZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdGltZSBwZXJpb2RzIGZvdW5kLid9ID0gJ05vbiBjaSBzb25vIHBlcmlvZGkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCB0aW1lIHBlcmlvZCd9ID0gJ0FnZ2l1bmdpIHBlcmlvZG8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdWaWV3CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWaWV3IFRpbWUgUmVjb3JkJ30gPSAnVmlzdWFsaXp6YXJlIHJlZ2lzdHJvIG9yYXJpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWaWV3IG9mICd9ID0gJ1Zpc3VhbGl6emF6aW9uZSBkaSAgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RhdGUgbmF2aWdhdGlvbid9ID0gJ05hdmlnYXppb25lIHBlciBkYXRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGRhdGEgZm91bmQgZm9yIHRoaXMgZGF5Lid9ID0gJ05lc3N1biBkYXRvIHRyb3ZhdG8gcGVyIHF1ZXN0byBnaW9ybm8uJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2YgaW5jb21wbGV0ZSB3b3JraW5nIGRheXMgZm9yIHRoZSB1c2VyLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IG5hbWUgZm9yIG5ldyBhY3Rpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IG5hbWUgZm9yIG5ldyBwcm9qZWN0cy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBkYXRlIGVuZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBkYXRlIHN0YXJ0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNldHRpbmcgZm9yIGxlYXZlIGRheXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2V0dGluZyBmb3Igb3ZlcnRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2V0dGluZyBmb3IgdGhlIHN0YW5kYXJkIHdlZWtseSBob3Vycy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0dXMgZm9yIG5ldyBhY3Rpb25zLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXR1cyBmb3IgbmV3IHByb2plY3RzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXR1cyBmb3IgbmV3IHVzZXJzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwcm9qZWN0cyBmb3Igd2hpY2ggYSByZW1hcmsgaXMgcmVxdWlyZWQuIElmIHRoZSBSZWdFeHAgbWF0Y2hlcyBvbiB0aGUgcHJvamVjdCwgeW91IGhhdmUgdG8gaW5zZXJ0IGEgcmVtYXJrIHRvby4gVGhlIFJlZ0V4cCB1c2UgdGhlIHNteCBwYXJhbWV0ZXIuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGltZSBhY2NvdW50aW5nIHNldHRpbmdzJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGltZSByZWNvcmQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9yIGhvdyBtYW55IGRheXMgYWdvIHlvdSBjYW4gaW5zZXJ0IHdvcmtpbmcgdW5pdHMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lmIGVuYWJsZWQsIHRoZSBkcm9wZG93biBlbGVtZW50cyBpbiB0aGUgZWRpdCBzY3JlZW4gYXJlIGNoYW5nZWQgdG8gYXV0b2NvbXBsZXRpb24gZmllbGRzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiB3b3JraW5nIGRheXMgYWZ0ZXIgd2hpY2ggdGhlIHdvcmtpbmcgdW5pdHMgaGF2ZSB0byBiZSBpbnNlcnRlZC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2Ygd29ya2luZyBkYXlzIHdpdGhvdXRoIHdvcmtpbmcgdW5pdHMgZW50cnkgYWZ0ZXIgd2hpY2ggYSB3YXJuaW5nIHdpbGwgYmUgc2hvd24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgdGltZSByZXBvcnRpbmcnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVndWxhciBleHByZXNzaW9ucyBmb3IgY29uc3RyYWluaW5nIGFjdGlvbiBsaXN0IGFjY29yZGluZyB0byBzZWxlY3RlZCBwcm9qZWN0LiBLZXkgY29udGFpbnMgcmVndWxhciBleHByZXNzaW9uIGZvciBwcm9qZWN0KHMpLCBjb250ZW50IGNvbnRhaW5zIHJlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIGFjdGlvbihzKS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVndWxhciBleHByZXNzaW9ucyBmb3IgY29uc3RyYWluaW5nIHByb2plY3QgbGlzdCBhY2NvcmRpbmcgdG8gdXNlciBncm91cHMuIEtleSBjb250YWlucyByZWd1bGFyIGV4cHJlc3Npb24gZm9yIHByb2plY3QocyksIGNvbnRlbnQgY29udGFpbnMgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgZ3JvdXBzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgaWYgd29ya2luZyBob3VycyBjYW4gYmUgaW5zZXJ0ZWQgd2l0aG91dCBzdGFydCBhbmQgZW5kIHRpbWVzLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG1vZHVsZSBmb3JjZXMgaW5zZXJ0cyBpbiBUaW1lQWNjb3VudGluZy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBub3RpZmljYXRpb24gbW9kdWxlIGdpdmVzIGEgd2FybmluZyBpZiB0aGVyZSBhcmUgdG9vIG1hbnkgaW5jb21wbGV0ZSB3b3JraW5nIGRheXMuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgYWNjb3VudGluZy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG8gdXNlIGlmIHNvbWUgYWN0aW9ucyByZWR1Y2VkIHRoZSB3b3JraW5nIGhvdXJzIChmb3IgZXhhbXBsZSwgaWYgb25seSBoYWxmIG9mIHRoZSB0cmF2ZWxpbmcgdGltZSBpcyBwYWlkIEtleSA9PiB0cmF2ZWxpbmc7IENvbnRlbnQgPT4gNTApLid9ID0gJyc7CgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9uJ30gPSAnTHVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1R1ZSd9ID0gJ01hcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXZWQnfSA9ICdNZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGh1J30gPSAnR2lvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyaSd9ID0gJ1Zlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXQnfSA9ICdTw6FiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1bid9ID0gJ0RvbSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKYW51YXJ5J30gPSAnR2VubmFpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGZWJydWFyeSd9ID0gJ0ZlYmJyYWlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hcmNoJ30gPSAnTWFyem8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXByaWwnfSA9ICdBcHJpbGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF5J30gPSAnTWFnZ2lvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0p1bmUnfSA9ICdHaXVnbm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSnVseSd9ID0gJ0x1Z2xpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdWd1c3QnfSA9ICdBZ29zdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VwdGVtYmVyJ30gPSAnU2V0dGVtYnJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09jdG9iZXInfSA9ICdPdHRvYnJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdmVtYmVyJ30gPSAnTm92ZW1icmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVjZW1iZXInfSA9ICdEaWNlbWJyZSc7CgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgcHJvamVjdHMnfSA9ICdNb3N0cmFyZSB0dXR0aSBpIHByb2dldHRpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdmFsaWQgcHJvamVjdHMnfSA9ICdNb3N0cmFyZSBzb2xvIGkgcHJvZ2V0dGkgdmFsaWRpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWVBY2NvdW50aW5nJ30gPSAnUmVuZGljb250YXppb25lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FjdGlvbnMnfSA9ICdBemlvbmknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciB1cGRhdGVkISd9ID0gJ1V0ZW50ZSBhZ2dpb3JuYXRvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIGFkZGVkISd9ID0gJ1V0ZW50ZSBhZ2dpdW50byEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCBhZGRlZCEnfSA9ICdQcm9nZXR0byBhZ2dpdW50byEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCB1cGRhdGVkISd9ID0gJ1Byb2dldHRvIGFnZ2lvcm5hdG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rhc2sgYWRkZWQhJ30gPSAnQ29tcGl0byBhZ2dpdW50byEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFzayB1cGRhdGVkISd9ID0gJ0NvbXBpdG8gYWdnaW9ybmF0byEnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ1JlcG9ydGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VjY2Vzc2Z1bCBpbnNlcnQhJ30gPSAnSW5zZXJpbWVudG8gdGVybWluYXRvIHBvc2l0aXZhbWVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IHNhdmUgc2V0dGluZ3MsIGJlY2F1c2UgYSBkYXkgaGFzIG9ubHkgMjQgaG91cnMhJ30gPSAnwqFJbXBvc2libGUgZ3VhcmRhciBsYSBjb25maWd1cmFjacOzbiBwb3JxdWUgdW4gZMOtYSBzw7NsbyB0aWVuZSAyNCBob3JhcyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGRlbGV0ZSBXb3JraW5nIFVuaXRzISd9ID0gJ8KhSW1wb3NpYmxlIGVsaW1pbmFyIGxhcyB1bmlkYWRlcyBkZSB0cmFiYWpvISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgaW5zZXJ0IHlvdXIgd29ya2luZyBob3VycyEnfSA9ICfCoUZhdm9yIGRlIGluc2VydGFyIHN1cyBob3JhcyBkZSB0cmFiYWpvISc7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyBDb3B5cmlnaHQgKEMpIDIwMTEvMTIvMDggS2FvcnUgSGF5YW1hIFRJUyBJbmMuCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmphX1RpbWVBY2NvdW50aW5nOwoKdXNlIHV0Zjg7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhlIFRpbWUgQWNjb3VudGluZyBvZiB0aGlzIGRheT8nfSA9ICfmnKzlvZPjgavoqbLlvZPml6Xjga7mg4XloLHjgpLliYrpmaTjgZfjgb7jgZnjgYvvvJ8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRpbWUgUmVjb3JkJ30gPSAn44K/44Kk44Og44Os44Kz44O844OJ44Gu57eo6ZuGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3Qgc2V0dGluZ3MnfSA9ICfjg5fjg63jgrjjgqfjgq/jg4jjga7nt6jpm4YnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF0ZSBOYXZpZ2F0aW9uJ30gPSAn5pel5Yil44OK44OT44Ky44O844K344On44OzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByZXZpb3VzIGRheSd9ID0gJ+WJjeOBruaXpSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXh0IGRheSd9ID0gJ+asoeOBruaXpSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXlzIHdpdGhvdXQgZW50cmllcyd9ID0gJ+OCqOODs+ODiOODquODvOOBruOBquOBhOaXpSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmaWVsZHMgYXJlIG1hcmtlZCB3aXRoIGEgIioiLid9ID0gJyog44Gu6aCF55uu44Gv5YWl5Yqb5b+F6aCI44Gn44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBoYXZlIHRvIGZpbGwgaW4gc3RhcnQgYW5kIGVuZCB0aW1lIG9yIGEgdGltZSBwZXJpb2QuJ30gPSAn6ZaL5aeL5pmC6ZaT44Go57WC5LqG5pmC6ZaT44CB44G+44Gf44Gv5pyf6ZaT44KS5oyH5a6a44GX44Gm44GP44Gg44GV44GE44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICfjg5fjg63jgrjjgqfjgq/jg4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFzayd9ID0gJ+OCv+OCueOCryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZW1hcmsnfSA9ICfms6jph4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIGFkZCBhIHJlbWFyayB3aXRoIG1vcmUgdGhhbiA4IGNoYXJhY3RlcnMhLid9ID0gJzjmloflrZfku6XkuIrjga7ms6jph4jjgpLov73liqDjgZfjgabjgY/jgaDjgZXjgYTjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVnYXRpdmUgdGltZXMgYXJlIG5vdCBhbGxvd2VkLid9ID0gJ++8je+8iOODnuOCpOODiuOCue+8ieOBruaZgumWk+OBr+WFpeWKm+OBp+OBjeOBvuOBm+OCkyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBlYXRlZCBob3VycyBhcmUgbm90IGFsbG93ZWQuIFN0YXJ0IHRpbWUgbWF0Y2hlcyBhbm90aGVyIGludGVydmFsLid9ID0gJ+e5sOOCiui/lOOBleOCjOOBn+aZgumWk+OBr+ioseWPr+OBleOCjOOBvuOBm+OCk+OAgumWi+Wni+aZguWIu+OBr+WIpeOBrumWk+malOOBqOS4gOiHtOOBl+OBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgdGltZSBtdXN0IGJlIGFmdGVyIHN0YXJ0IHRpbWUuJ30gPSAn57WC5LqG5pmC6ZaT44Gu5YmN44Gr6ZaL5aeL5pmC6ZaT44KS6Kit5a6a44GZ44KL44GT44Go44Gv44Gn44GN44G+44Gb44KT44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcGVhdGVkIGhvdXJzIGFyZSBub3QgYWxsb3dlZC4gRW5kIHRpbWUgbWF0Y2hlcyBhbm90aGVyIGludGVydmFsLid9ID0gJ0RpZXNlIEVuZHplaXQgd3VyZGUgYmVyZWl0cyBpbiBlaW5lbSBhbmRlcmVuIEVpbnRyYWcgYW5nZWdlYmVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJpb2QgaXMgYmlnZ2VyIHRoYW4gdGhlIGludGVydmFsIGJldHdlZW4gc3RhcnQgYW5kIGVuZCB0aW1lcyEnfSA9ICfjgIzmnJ/plpPjgI3jga7oqK3lrprjgYzkuI3mraPjgafjgZnjgILplovlp4vmmYLplpPjgajntYLkuobmmYLplpPjga7nr4Tlm7LjgpLotoXpgY7jgZfjgabjgYTjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBwZXJpb2QhIEEgZGF5IGhhcyBvbmx5IDI0IGhvdXJzLid9ID0gJ+OAjOacn+mWk+OAjeOBruioreWumuOBjOS4jeato+OBp+OBmeOAgu+8iDI05pmC6ZaT5Lul5LiK44Gv6Kix5Y+v44GV44KM44G+44Gb44KT77yJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0EgdmFsaWQgcGVyaW9kIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8uJ30gPSAn44CM5pyf6ZaT44CN44Gu6Kit5a6a44GM5LiN5q2j44Gn44GZ44CC77yIMOOBr+ioseWPr+OBleOCjOOBvuOBm+OCk++8iSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIHBlcmlvZCEgTmVnYXRpdmUgcGVyaW9kcyBhcmUgbm90IGFsbG93ZWQuJ30gPSAn44CM5pyf6ZaT44CN44Gu6Kit5a6a44GM5LiN5q2j44Gn44GZ44CC77yI77yN77yI44Oe44Kk44OK44K577yJ44Gv6Kix5Y+v44GV44KM44G+44Gb44KT77yJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBvbmUgcm93J30gPSAn6KGM44Gu6L+95YqgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvdGFsJ30gPSAn6KiIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09uIHZhY2F0aW9uJ30gPSAn5LyR5pqH5Y+W5b6X5LitJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBjYW4gb25seSBzZWxlY3Qgb25lIGNoZWNrYm94IGVsZW1lbnQhJ30gPSAnMemgheebruOBruOBv+mBuOaKnuOBp+OBjeOBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbiBzaWNrIGxlYXZlJ30gPSAn55eF5qyg5LitJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09uIG92ZXJ0aW1lIGxlYXZlJ30gPSAn5Luj5LyR5LitJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIGl0ZW1zJ30gPSAn44GZ44G544Gm44Gu44Ki44Kk44OG44Og44KS6KGo56S6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBUaW1lIEFjY291bnRpbmcgRW50cnknfSA9ICfjgqjjg7Pjg4jjg6rjg7zjgpLliYrpmaQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29uZmlybSBpbnNlcnQnfSA9ICfmjL/lhaXjga7norroqo0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCB3aGlsZSB5b3Ugd2VyZSBvbiBzaWNrIGxlYXZlPyd9ID0gJ+eXheasoOOBq+ioreWumuOBleOCjOOBn+acn+mWk+S4reOBq+eovOWDjeOBl+OBvuOBl+OBn+OBi++8nyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd29ya2VkIHdoaWxlIHlvdSB3ZXJlIG9uIHZhY2F0aW9uPyd9ID0gJ+S8keaah+OBq+ioreWumuOBleOCjOOBn+acn+mWk+S4reOBq+eovOWDjeOBl+OBvuOBl+OBn+OBi++8nyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd29ya2VkIHdoaWxlIHlvdSB3ZXJlIG9uIG92ZXJ0aW1lIGxlYXZlPyd9ID0gJ+S7o+S8keOBq+ioreWumuOBleOCjOOBn+acn+mWk+S4reOBq+eovOWDjeOBl+OBvuOBl+OBn+OBi++8nyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd29ya2VkIG1vcmUgdGhhbiAxNiBob3Vycz8nfSA9ICcxNuaZgumWk+S7peS4iueovOWDjeOBl+OBvuOBl+OBn+OBi++8nyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYWxsIGRheXMnfSA9ICflhajjgabjga7ml6XjgpLpgbjmip4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdPdmVydmlldwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSByZXBvcnRpbmcgbW9udGhseSBvdmVydmlldyd9ID0gJ+aciOWIpeS4gOimpyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydGltZSAoSG91cnMpJ30gPSAn6LaF6YGO5Yuk5YuZ77yI77ya5pmC6ZaT77yJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ0aW1lICh0aGlzIG1vbnRoKSd9ID0gJ+i2hemBjuWLpOWLme+8iOS7iuaciO+8iSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydGltZSAodG90YWwpJ30gPSAn6LaF6YGO5Yuk5YuZ77yI57Sv6KiI77yJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbWFpbmluZyBvdmVydGltZSBsZWF2ZSd9ID0gJ+i2hemBjuWLpOWLmeWPr+iDveaui++8iOaZgumWk++8iSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbiAoRGF5cyknfSA9ICfkvJHmmofvvIjml6XmlbDvvIknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmFjYXRpb24gdGFrZW4gKHRoaXMgbW9udGgpJ30gPSAn5LyR5pqH5Y+W5b6X5pel5pWw77yI5LuK5pyI77yJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZhY2F0aW9uIHRha2VuICh0b3RhbCknfSA9ICfkvJHmmoflj5blvpfml6XmlbDvvIjntK/oqIjvvIknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVtYWluaW5nIHZhY2F0aW9uJ30gPSAn5LyR5pqH5Y+W5b6X5q6L5pel5pWwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpY2sgTGVhdmUgKERheXMpJ30gPSAn55eF5qyg77yI5pel5pWw77yJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpY2sgbGVhdmUgdGFrZW4gKHRoaXMgbW9udGgpJ30gPSAn55eF5qyg5pel5pWw77yI5LuK5pyI77yJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpY2sgbGVhdmUgdGFrZW4gKHRvdGFsKSd9ID0gJ+eXheasoOaXpeaVsO+8iOe0r+ioiO+8iSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmV2aW91cyBtb250aCd9ID0gJ+WJjeaciCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXh0IG1vbnRoJ30gPSAn5qyh5pyIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RheSd9ID0gJ+aXpSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXZWVrZGF5J30gPSAn5puc5pelJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dvcmtpbmcgSG91cnMnfSA9ICfnqLzlg43mmYLplpMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG90YWwgd29ya2VkIGhvdXJzJ30gPSAn57eP56i85YON5pmC6ZaTJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXJcJ3MgcHJvamVjdCBvdmVydmlldyd9ID0gJ+ODpuODvOOCtuOBruODl+ODreOCuOOCp+OCr+ODiOS4gOimpyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIb3VycyAobW9udGhseSknfSA9ICfmmYLplpPvvIjku4rmnIjvvIknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG91cnMgKExpZmV0aW1lKSd9ID0gJ+aZgumWk++8iOmAmueul++8iSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydHcmFuZCB0b3RhbCd9ID0gJ+WQiOioiCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRUaW1lQWNjb3VudGluZ1Byb2plY3RSZXBvcnRpbmcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgcmVwb3J0J30gPSAn44OX44Ot44K444Kn44Kv44OI44O744Os44Od44O844OIJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nUmVwb3J0aW5nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIHJlcG9ydGluZyd9ID0gJ+aZgumWk+S8muioiOODrOODneODvOODiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb250aCBOYXZpZ2F0aW9uJ30gPSAn5pyI5Yil44OK44OT44Ky44O844K344On44OzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgcmVwb3J0cyd9ID0gJ+ODpuODvOOCtuODu+ODrOODneODvOODiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb250aGx5IHRvdGFsJ30gPSAn5pyI5ZCI6KiIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpZmV0aW1lIHRvdGFsJ30gPSAn6YCa566X5ZCI6KiIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ0aW1lIGxlYXZlJ30gPSAn5Luj5LyRJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZhY2F0aW9uJ30gPSAn5LyR5pqHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpY2sgbGVhdmUnfSA9ICfnl4XmrKAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmFjYXRpb24gcmVtYWluaW5nJ30gPSAn5LyR5pel5q6L5pel5pWwJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgcmVwb3J0cyd9ID0gJ+ODl+ODreOCuOOCp+OCr+ODiOODu+ODrOODneODvOODiCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRUaW1lQWNjb3VudGluZ1NldHRpbmcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGltZSBBY2NvdW50aW5nIFByb2plY3QgU2V0dGluZ3MnfSA9ICfmmYLplpPkvJroqIgg44OX44Ot44K444Kn44Kv44OI6Kit5a6a44Gu57eo6ZuGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBQcm9qZWN0J30gPSAn5paw6KaP44OX44Ot44K444Kn44Kv44OI44Gu6L+95YqgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBwcm9qZWN0J30gPSAn5paw6KaP44OX44Ot44K444Kn44Kv44OI44Gu6L+95YqgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUHJvamVjdCBTZXR0aW5ncyd9ID0gJ+ODl+ODreOCuOOCp+OCr+ODiOOBrue3qOmbhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGVyZSBpcyBhbHJlYWR5IGEgcHJvamVjdCB3aXRoIHRoaXMgbmFtZS4gUGxlYXNlLCBjaG9vc2UgYSBkaWZmZXJlbnQgb25lLid9ID0gJ+WQjOWQjeOBruODl+ODreOCuOOCp+OCr+ODiOOBjOWtmOWcqOOBl+OBvuOBmeOAguWQjeensOOCkuWkieabtOOBl+OBpuOBj+OBoOOBleOBhOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRpbWUgQWNjb3VudGluZyBTZXR0aW5ncyd9ID0gJ+ioreWumuOBrue3qOmbhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgVGFzayd9ID0gJ+aWsOimj+OCv+OCueOCr+OBrui/veWKoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgdGFzayd9ID0gJ+aWsOimj+OCv+OCueOCr+OBrui/veWKoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgdXNlcid9ID0gJ+aWsOimj+ODpuODvOOCtic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIFByb2plY3RzJ30gPSAn44OX44Ot44K444Kn44Kv44OI44Gu57We44KK6L6844G/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgVGFza3MnfSA9ICfjgr/jgrnjgq/jga7ntZ7jgorovrzjgb8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlsdGVyIGZvciBVc2Vycyd9ID0gJ+ODpuODvOOCtuOBrue1nuOCiui+vOOBvyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IExpc3QnfSA9ICfjg5fjg63jgrjjgqfjgq/jg4jkuIDopqcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFzayBMaXN0J30gPSAn44K/44K544Kv5LiA6KanJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGFzayBTZXR0aW5ncyd9ID0gJ+OCv+OCueOCr+ioreWumic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGVyZSBpcyBhbHJlYWR5IGEgdGFzayB3aXRoIHRoaXMgbmFtZS4gUGxlYXNlLCBjaG9vc2UgYSBkaWZmZXJlbnQgb25lLid9ID0gJ+WQjOWQjeOBruOCv+OCueOCr+OBjOWtmOWcqOOBl+OBvuOBmeOAguWQjeensOOCkuWkieabtOOBl+OBpuOBj+OBoOOBleOBhOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIExpc3QnfSA9ICfjg6bjg7zjgrbkuIDopqcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IFVzZXIgU2V0dGluZ3MnfSA9ICfmlrDopo/jg6bjg7zjgrboqK3lrponOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBVc2VyIFNldHRpbmdzJ30gPSAn44Om44O844K26Kit5a6a44Gu57eo6ZuGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnRzJ30gPSAn44Kz44Oh44Oz44OIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgT3ZlcnRpbWUnfSA9ICfotoXpgY7li6Tli5njgpLooajnpLonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3cgcHJvamVjdCBjcmVhdGlvbid9ID0gJ+ODl+ODreOCuOOCp+OCr+ODiOOBruaWsOimj+i/veWKoOOCkuioseWPr+OBmeOCiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJpb2QgQmVnaW4nfSA9ICfplovlp4vngrknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyaW9kIEVuZCd9ID0gJ+e1guS6hueCuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXlzIG9mIFZhY2F0aW9uJ30gPSAn5LyR5pqHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hvdXJzIHBlciBXZWVrJ30gPSAn5pmC6ZaTIC8g6YCxJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F1dGhvcml6ZWQgT3ZlcnRpbWUnfSA9ICfmib/oqo3muIjjga7otoXpgY7li6Tli5knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyaW9kIGVuZCBtdXN0IGJlIGFmdGVyIHBlcmlvZCBiZWdpbi4nfSA9ICfntYLkuobngrnjga7liY3jgavplovlp4vngrnjgpLoqK3lrprjgZnjgovjgZPjgajjga/jgafjgY3jgb7jgZvjgpPjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm8gdGltZSBwZXJpb2RzIGZvdW5kLid9ID0gJ+acn+mWk+OBjOacquioreWumuOBp+OBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgdGltZSBwZXJpb2QnfSA9ICfmnJ/plpPjgpLov73liqDjgZfjgabjgY/jgaDjgZXjgYTjgIInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdWaWV3CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWaWV3IFRpbWUgUmVjb3JkJ30gPSAn44K/44Kk44Og44O744Os44Kz44O844OJ44KS6KGo56S6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZpZXcgb2YgJ30gPSAn5LiA6KanJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGRhdGEgZm91bmQgZm9yIHRoaXMgZGF5Lid9ID0gJ+ipsuW9k+OBmeOCi+ODh+ODvOOCv+OBjOOBguOCiuOBvuOBm+OCk+OAgic7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FnZW50IGludGVyZmFjZSBub3RpZmljYXRpb24gbW9kdWxlIHRvIHNlZSB0aGUgbnVtYmVyIG9mIGluY29tcGxldGUgd29ya2luZyBkYXlzIGZvciB0aGUgdXNlci4nfSA9ICfjg6bjg7zjgrbjga7kuI3lrozlhajjgarnqLzlg43ml6XmlbDjgpLjgqvjgqbjg7Pjg4jjgZfpgJrnn6XjgZnjgovjgqjjg7zjgrjjgqfjg7Pjg4jjg7vjgqTjg7Pjgr/jg7zjg5XjgqfjgqTjgrnjgafjgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBuYW1lIGZvciBuZXcgYWN0aW9ucy4nfSA9ICfmlrDopo/mk43kvZzjgavlr77jgZnjgovjg4fjg5Xjgqnjg6vjg4jjga7lkI3np7AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBuYW1lIGZvciBuZXcgcHJvamVjdHMuJ30gPSAn5paw6KaP44OX44Ot44K444Kn44Kv44OI44Gr5a++44GZ44KL44OH44OV44Kp44Or44OI44Gu5ZCN56ewJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2V0dGluZyBmb3IgZGF0ZSBlbmQuJ30gPSAn44CM57WC5LqG5pel44CN44Gu44OH44OV44Kp44Or44OI5YCkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2V0dGluZyBmb3IgZGF0ZSBzdGFydC4nfSA9ICfjgIzplovlp4vml6XjgI3jga7jg4fjg5Xjgqnjg6vjg4jlgKQnOwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2V0dGluZyBmb3IgZGVzY3JpcHRpb24uJ30gPSAn44CM6Kqs5piO5paH44CN44Gu44OH44OV44Kp44Or44OI5YCkJzsKCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNldHRpbmcgZm9yIGxlYXZlIGRheXMuJ30gPSAn44CM5LyR5pqH44CN44Gu44OH44OV44Kp44Or44OI5YCkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2V0dGluZyBmb3Igb3ZlcnRpbWUuJ30gPSAn44CM6LaF6YGO5Yuk5YuZ44CN44Gu44OH44OV44Kp44Or44OI5YCkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2V0dGluZyBmb3IgdGhlIHN0YW5kYXJkIHdlZWtseSBob3Vycy4nfSA9ICfpgLHjgYLjgZ/jgorln7rmnKznqLzlg43mmYLplpPjga7jg4fjg5Xjgqnjg6vjg4jlgKQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0dXMgZm9yIG5ldyBhY3Rpb25zLid9ID0gJ+aWsOimj+aTjeS9nOOBq+WvvuOBmeOCi+ODh+ODleOCqeODq+ODiOOBruOCueODhuODvOOCv+OCuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXR1cyBmb3IgbmV3IHByb2plY3RzLid9ID0gJ+aWsOimj+ODl+ODreOCuOOCp+OCr+ODiOOBq+WvvuOBmeOCi+ODh+ODleOCqeODq+ODiOOBruOCueODhuODvOOCv+OCuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXR1cyBmb3IgbmV3IHVzZXJzLid9ID0gJ+aWsOimj+ODpuODvOOCtuOBq+WvvuOBmeOCi+ODh+ODleOCqeODq+ODiOOBruOCueODhuODvOOCv+OCuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIHRoZSBwcm9qZWN0cyBmb3Igd2hpY2ggYSByZW1hcmsgaXMgcmVxdWlyZWQuIElmIHRoZSBSZWdFeHAgbWF0Y2hlcyBvbiB0aGUgcHJvamVjdCwgeW91IGhhdmUgdG8gaW5zZXJ0IGEgcmVtYXJrIHRvby4gVGhlIFJlZ0V4cCB1c2UgdGhlIHNteCBwYXJhbWV0ZXIuJ30gPSAn44CM5rOo6YeI44CN44Ko44Oz44OI44Oq44O844KS5b+F6KaB44Go44GZ44KL6aCF55uu44KS5a6a576p44GX44G+44GZ44CCIOOCguOBl+ODl+ODreOCuOOCp+OCr+ODiOWQjeOBjOOBk+OBk+OBp+ioreWumuOBl+OBn+ato+imj+ihqOePvuOBq+ODnuODg+ODgeOBmeOCi+WgtOWQiOOAgeOAjOazqOmHiO+9neOBr+W/hemgiOmgheebruOBqOOBquOCiuOBvuOBmeOAguKAu+ato+imj+ihqOePvuOBq+OBr1NNWOODkeODqeODoeODvOOCv+OCkuS9v+OBhOOBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRpbWUgYWNjb3VudGluZyBzZXR0aW5ncyd9ID0gJ+aZgumWk+S8muioiOOBruioreWumuOCkue3qOmbhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRpbWUgcmVjb3JkJ30gPSAn44K/44Kk44Og44Os44Kz44O844OJ44KS57eo6ZuGJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZvciBob3cgbWFueSBkYXlzIGFnbyB5b3UgY2FuIGluc2VydCB3b3JraW5nIHVuaXRzLid9ID0gJ+S9leaXpeWJjeOBi+OCieODr+ODvOOCreODs+OCsOODu+ODpuODi+ODg+ODiOOBruaWsOimj+eZu+mMsuOBjOWPr+iDveOBp+OBguOCi+OBi+OBruioreWumuOBp+OBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBlbmFibGVkLCB0aGUgZHJvcGRvd24gZWxlbWVudHMgaW4gdGhlIGVkaXQgc2NyZWVuIGFyZSBjaGFuZ2VkIHRvIGF1dG9jb21wbGV0aW9uIGZpZWxkcy4nfSA9ICfjgZPjga7poIXnm67jgpLjgIzoqLHlj6/jgI3jgavjgZnjgovjgajjgIHnt6jpm4bnlLvpnaLlhoXjga7jg5fjg6vjg4Djgqbjg7Pjg6Hjg4vjg6Xjg7zjgpLjgqrjg7zjg4jjgrPjg7Pjg5fjg6rjg7zjg4jmqZ/og73ku5jjgY3jga7jg5Xjgqnjg7zjg6DjgavlpInmm7TjgZfjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgZW5hYmxlZCwgdGhlIHVzZXIgaXMgYWxsb3dlZCB0byBlbnRlciAib24gdmFjYXRpb24gbGVhdmUnfSA9ICfjgZPjga7poIXnm67jgpLjgIzoqLHlj6/jgI3jgavjgZnjgovjgajjgIHjg6bjg7zjgrbjgYzkvJHmmofnlLPoq4vjgafjgY3jgovjgojjgYbjgavjgarjgorjgb7jgZnjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF4aW11bSBudW1iZXIgb2Ygd29ya2luZyBkYXlzIGFmdGVyIHdoaWNoIHRoZSB3b3JraW5nIHVuaXRzIGhhdmUgdG8gYmUgaW5zZXJ0ZWQuJ30gPSAnMeOBpOS7peS4iuOBruODr+ODvOOCreODs+OCsOODu+ODpuODi+ODg+ODiOOCkuioreWumuOBmeOBueOBjeacgOWkp+OBrueovOWDjeaXpeaVsOOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiB3b3JraW5nIGRheXMgd2l0aG91dGggd29ya2luZyB1bml0cyBlbnRyeSBhZnRlciB3aGljaCBhIHdhcm5pbmcgd2lsbCBiZSBzaG93bi4nfSA9ICcx44Gk5Lul5LiK44Gu44Ov44O844Kt44Oz44Kw44O744Om44OL44OD44OI44GM6Kit5a6a44GV44KM44Gm44GE44Gq44GE5aC05ZCI44CB44Ki44Op44O844OI44KS55m644GZ44KL44G544GN5pyA5aSn44Gu56i85YON5pel5pWw44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgdGltZSByZXBvcnRpbmcnfSA9ICfjg5fjg63jgrjjgqfjgq/jg4jliKXmmYLplpPkvJroqIjjg6zjg53jg7zjg4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVndWxhciBleHByZXNzaW9ucyBmb3IgY29uc3RyYWluaW5nIGFjdGlvbiBsaXN0IGFjY29yZGluZyB0byBzZWxlY3RlZCBwcm9qZWN0LiBLZXkgY29udGFpbnMgcmVndWxhciBleHByZXNzaW9uIGZvciBwcm9qZWN0KHMpLCBjb250ZW50IGNvbnRhaW5zIHJlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIGFjdGlvbihzKS4nfSA9ICfjg5fjg63jgrjjgqfjgq/jg4jjgavjgojjgaPjgabooYzli5Xjg6rjgrnjg4jjgpLntZ7jgorovrzjgoDjgZ/jgoHjga7mraPopo/ooajnj77jgILjgIzpjbXjgI3jgafjga/jg5fjg63jgrjjgqfjgq/jg4jjgavlr77jgZnjgovmraPopo/ooajnj77jgpLjgIHjgIzlhoXlrrnjgI3jgafjga9g6KGM5YuVYOOBq+WvvuOBmeOCi+ato+imj+ihqOePvuOCkuaMh+WumuOBmeOCi+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWd1bGFyIGV4cHJlc3Npb25zIGZvciBjb25zdHJhaW5pbmcgcHJvamVjdCBsaXN0IGFjY29yZGluZyB0byB1c2VyIGdyb3Vwcy4gS2V5IGNvbnRhaW5zIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgcHJvamVjdChzKSwgY29udGVudCBjb250YWlucyBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBncm91cHMuJ30gPSAn44Om44O844K244Kw44Or44O844OX44Gr44KI44Gj44Gm44OX44Ot44K444Kn44Kv44OI44Oq44K544OI44KS57We44KK6L6844KA44Gf44KB44Gu5q2j6KaP6KGo54++44CC44CM6Y2144CN44Gn44Gv44OX44Ot44K444Kn44Kv44OI44Gr5a++44GZ44KL5q2j6KaP6KGo54++44KS44CB44CM5YaF5a6544CN44Gn44Gv44Kr44Oz44Oe5Yy65YiH44KK44Gu44Om44O844K244Oq44K544OI44KS5oyH5a6a44GZ44KL44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NwZWNpZmllcyBpZiB3b3JraW5nIGhvdXJzIGNhbiBiZSBpbnNlcnRlZCB3aXRob3V0IHN0YXJ0IGFuZCBlbmQgdGltZXMuJ30gPSAn5qWt5YuZ5pmC6ZaT44KS44CM6ZaL5aeL5pmC6ZaT44CN44Go44CM57WC5LqG5pmC6ZaT44CN44Gu5oyH5a6a44OK44K344Gn5paw6KaP55m76Yyy44Gn44GN44KL44GL44Gp44GG44GL5oyH5a6a44GZ44KL44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbW9kdWxlIGZvcmNlcyBpbnNlcnRzIGluIFRpbWVBY2NvdW50aW5nLid9ID0gJ1RpbWVBY2NvdW50aW5n44Oi44K444Ol44O844Or44Go5ZCM562J44Gu6aCF55uu44GM6Kit5a6a5b+F6aCI44Go44Gq44KK44G+44GZ44CCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbm90aWZpY2F0aW9uIG1vZHVsZSBnaXZlcyBhIHdhcm5pbmcgaWYgdGhlcmUgYXJlIHRvbyBtYW55IGluY29tcGxldGUgd29ya2luZyBkYXlzLid9ID0gJ+OBguOBvuOCiuOBq+OCguWkmuOBj+OBruS4jeWujOWFqOOBqueovOWDjeaXpeOBjOOBguOCi+WgtOWQiOOAgeOBk+OBrumAmuefpeODouOCuOODpeODvOODq+OBr+itpuWRiuOCkuS4juOBiOOBvuOBmeOAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIGFjY291bnRpbmcuJ30gPSAn5pmC6ZaT5Lya6KiIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvIHVzZSBpZiBzb21lIGFjdGlvbnMgcmVkdWNlZCB0aGUgd29ya2luZyBob3VycyAoZm9yIGV4YW1wbGUsIGlmIG9ubHkgaGFsZiBvZiB0aGUgdHJhdmVsaW5nIHRpbWUgaXMgcGFpZCBLZXkgPT4gdHJhdmVsaW5nOyBDb250ZW50ID0+IDUwKS4nfSA9ICfmpa3li5nkuIrjga7ooYzli5XjgavjgYrjgYTjgabjgIHnqLzlg43mmYLplpPjgajjgZfjgaboqIjkuIrjgZnjgovmmYLplpPjgpLoqr/mlbTjgZnjgovlv4XopoHjgYzjgYLjgovloLTlkIjjgavjgIHjgZPjga7oqK3lrprjgpLkvb/nlKjjgZfjgb7jgZnjgILvvIjkvovvvJrjgIznp7vli5XmmYLplpPjgI3jga41MCXjga7jgb/li6Tli5nmmYLplpPnm7jlvZPjgajjgZnjgovloLTlkIjjgIzpjbXjgI3jgatgam91cm5leWDjgIHjgIzlhoXlrrnjgI3jgatgNTBg44Go6Kit5a6aKSc7CgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9uJ30gPSAn5pyIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1R1ZSd9ID0gJ+eBqyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXZWQnfSA9ICfmsLQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGh1J30gPSAn5pyoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyaSd9ID0gJ+mHkSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTYXQnfSA9ICflnJ8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VuJ30gPSAn5pelJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0phbnVhcnknfSA9ICcx5pyIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZlYnJ1YXJ5J30gPSAnMuaciCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXJjaCd9ID0gJzPmnIgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXByaWwnfSA9ICc05pyIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heSd9ID0gJzXmnIgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSnVuZSd9ID0gJzbmnIgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSnVseSd9ID0gJzfmnIgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXVndXN0J30gPSAnOOaciCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXB0ZW1iZXInfSA9ICc55pyIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09jdG9iZXInfSA9ICcxMOaciCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3ZlbWJlcid9ID0gJzEx5pyIJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlY2VtYmVyJ30gPSAnMTLmnIgnOwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHByb2plY3RzJ30gPSAn44GZ44G544Gm44Gu44OX44Ot44K444Kn44Kv44OI44KS6KGo56S6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgdmFsaWQgcHJvamVjdHMnfSA9ICfmnInlirnjgarjg5fjg63jgrjjgqfjgq/jg4jjgpLooajnpLonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZUFjY291bnRpbmcnfSA9ICfmmYLplpPkvJroqIgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0aW9ucyd9ID0gJ+aTjeS9nCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIHVwZGF0ZWQhJ30gPSAn44Om44O844K25oOF5aCx44GM5pu05paw44GV44KM44G+44GX44GfJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgYWRkZWQhJ30gPSAn44Om44O844K25oOF5aCx44GM6L+95Yqg44GV44KM44G+44GX44GfJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgYWRkZWQhJ30gPSAn44OX44Ot44K444Kn44Kv44OI44GM6L+95Yqg44GV44KM44G+44GX44GfJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgdXBkYXRlZCEnfSA9ICfjg5fjg63jgrjjgqfjgq/jg4jjgYzmm7TmlrDjgZXjgozjgb7jgZfjgZ8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFzayBhZGRlZCEnfSA9ICfjgr/jgrnjgq/jgYzov73liqDjgZXjgozjgb7jgZfjgZ8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFzayB1cGRhdGVkISd9ID0gJ+OCv+OCueOCr+OBjOabtOaWsOOBleOCjOOBvuOBl+OBnyc7CgogICAgIwogICAgIyBPQlNPTEVURSBFTlRSSUVTIEZPUiBSRUZFUkVOQ0UsIERPIE5PVCBUUkFOU0xBVEUhCiAgICAjCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgZGVsZXRlIFdvcmtpbmcgVW5pdHMhJ30gPSAn44Ov44O844Kt44Oz44Kw44O744Om44OL44OD44OI44KS5YmK6Zmk44Gn44GN44G+44Gb44KTJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzYXZlIHNldHRpbmdzLCBiZWNhdXNlIGEgZGF5IGhhcyBvbmx5IDI0IGhvdXJzISd9ID0gJ+aZgumWk+aMh+WumuOBjOS4jeato+OBp+OBmeOAguioreWumuOCkuS/neWtmOOBp+OBjeOBvuOBm+OCk+OBp+OBl+OBn+OAgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgaW5zZXJ0IHlvdXIgd29ya2luZyBob3VycyEnfSA9ICfnqLzlg43mmYLplpPjgpLlhaXlipvjgZfjgabjgY/jgaDjgZXjgYTjgIInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAn57WQ5p6c6KGo56S6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1Y2Nlc3NmdWwgaW5zZXJ0ISd9ID0gJ+aMv+WFpeOBjOaIkOWKn+OBl+OBvuOBl+OBn+OAgic7Cgp9CgoxOwo=
77u/IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9wbF9UaW1lQWNjb3VudGluZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnBsX1RpbWVBY2NvdW50aW5nOwoKdXNlIHV0Zjg7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhlIFRpbWUgQWNjb3VudGluZyBvZiB0aGlzIGRheT8nfSA9ICdDenkgbmEgcGV3bm8gY2hjZXN6IHVzdW7EhcSHIHphcmFwb3J0b3dhbnkgY3phcyBwcmFjeSBkbGEgdGVnbyBkbmlhPyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRUaW1lQWNjb3VudGluZ0VkaXQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGltZSBSZWNvcmQnfSA9ICdFZHl0dWogd3BpcyBjemFzdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IHNldHRpbmdzJ30gPSAnVXN0YXdpZW5pYSBwcm9qZWt0dSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXRlIE5hdmlnYXRpb24nfSA9ICdOYXdpZ2FjamEgcG8gZGFjaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJldmlvdXMgZGF5J30gPSAnUG9wcnplZG5pIGR6aWXFhCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXh0IGRheSd9ID0gJ05hc3TEmXBueSBkemllxYQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF5cyB3aXRob3V0IGVudHJpZXMnfSA9ICdEbmkgYmV6IHJhcG9ydMOzdyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmaWVsZHMgYXJlIG1hcmtlZCB3aXRoIGEgIioiLid9ID0gJ1d5bWFnYW5lIHBvbGEgc8SFIG96bmFjem9uZSAiKiIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBoYXZlIHRvIGZpbGwgaW4gc3RhcnQgYW5kIGVuZCB0aW1lIG9yIGEgdGltZSBwZXJpb2QuJ30gPSAnTXVzaXN6IHdwcm93YWR6acSHIGR6aWXFhCBwb2N6xIV0a3Ugb3JheiBrb8WEY2EgbHViIGN6YXMgdHJ3YW5pYSB3IG9rcmVzaWUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9qZWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rhc2snfSA9ICdaYWRhbmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbWFyayd9ID0gJ1V3YWdhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RhdGUgTmF2aWdhdGlvbid9ID0gJ05hd2lnYWNqYSBwbyBkYWNpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgYWRkIGEgcmVtYXJrIHdpdGggbW9yZSB0aGFuIDggY2hhcmFjdGVycyEuJ30gPSAnUHJvc3rEmSBkb2RhxIcgdXdhZ8SZIHNrxYJhZGFqxIVjxIUgc2nEmSB6IHdpxJljZWogbmnFvCA4IHpuYWvDs3chJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05lZ2F0aXZlIHRpbWVzIGFyZSBub3QgYWxsb3dlZC4nfSA9ICdVamVtbmUgY3phc3kgc8SFIG5pZWRvendvbG9uZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwZWF0ZWQgaG91cnMgYXJlIG5vdCBhbGxvd2VkLiBTdGFydCB0aW1lIG1hdGNoZXMgYW5vdGhlciBpbnRlcnZhbC4nfSA9ICdQb3d0YXJ6YWrEhWNlIHNpxJkgY3phc3kgbmllIHPEhSBkb3p3b2xvbmUuIEN6YXMgcm96cG9jesSZY2lhIHBhc3VqZSBkbyBpbm5lZ28gcHJ6ZWR6aWHFgnUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCB0aW1lIG11c3QgYmUgYWZ0ZXIgc3RhcnQgdGltZS4nfSA9ICdDemFzIHpha2/FhGN6ZW5pYSBtdXNpIGJ5xIcgcG8gY3phc2llIHJvenBvY3rEmWNpYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwZWF0ZWQgaG91cnMgYXJlIG5vdCBhbGxvd2VkLiBFbmQgdGltZSBtYXRjaGVzIGFub3RoZXIgaW50ZXJ2YWwuJ30gPSAnUG93dGFyemFqxIVjZSBzacSZIGN6YXN5IG5pZSBzxIUgZG96d29sb25lLiBDemFzIHpha2/FhGN6ZW5pYSBwYXN1amUgZG8gaW5uZWdvIHByemVkemlhxYJ1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJpb2QgaXMgYmlnZ2VyIHRoYW4gdGhlIGludGVydmFsIGJldHdlZW4gc3RhcnQgYW5kIGVuZCB0aW1lcyEnfSA9ICdPa3JlcyBqZXN0IHdpxJlrc3p5IG5pxbwgb2RzdMSZcCBtacSZZHp5IHBvY3rEhXRraWVtIGkga2/FhGNlbSBjemFzw7N3ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIHBlcmlvZCEgQSBkYXkgaGFzIG9ubHkgMjQgaG91cnMuJ30gPSAnTmllcHJhd2lkxYJvd3kgb2tyZXMhIER6aWXFhCBtYSB0eWxrbyAyNCBnb2R6aW55Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBIHZhbGlkIHBlcmlvZCBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB6ZXJvLid9ID0gJ1ByYXdpZMWCb3d5IG9rcmVzIG11c2kgYnnEhyB3acSZa3N6eSBuacW8IHplcm8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgcGVyaW9kISBOZWdhdGl2ZSBwZXJpb2RzIGFyZSBub3QgYWxsb3dlZC4nfSA9ICdOaWVwcmF3aWTFgm93eSBva3JlcyEgVWplbW55IG9rcmVzIG5pZSBqZXN0IGRvendvbG9ueS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIG9uZSByb3cnfSA9ICdEb2RhaiBqZWRlbiB3aWVyc3onOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG90YWwnfSA9ICdTdW1hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09uIHZhY2F0aW9uJ30gPSAnVXJsb3AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBvbmx5IHNlbGVjdCBvbmUgY2hlY2tib3ggZWxlbWVudCEnfSA9ICdNb8W8ZXN6IHphem5hY3p5xIcgdHlsa28gamVkZW4gZWxlbWVudCEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT24gc2ljayBsZWF2ZSd9ID0gJ1p3b2xuaWVuaWUgbGVrYXJza2llJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09uIG92ZXJ0aW1lIGxlYXZlJ30gPSAnV29sbmUgemEgbmFkZ29kemlueSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGFsbCBpdGVtcyd9ID0gJ1Bva2HFvCB3c3p5c3RraWUgZWxlbWVudHknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVsZXRlIFRpbWUgQWNjb3VudGluZyBFbnRyeSd9ID0gJ1VzdcWEIHBvenljasSZIHphcmFwb3J0b3dhbmVnbyBjemFzdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maXJtIGluc2VydCd9ID0gJ1phdHdpZXJkxbogd3N0YXdpZW5pZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd29ya2VkIHdoaWxlIHlvdSB3ZXJlIG9uIHNpY2sgbGVhdmU/J30gPSAnSmVzdGXFmyBwZXdpZW4gxbxlIHByYWNvd2HFgmXFmyBuYSB6d29sbmllbml1IGxla2Fyc2tpbT8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCB3aGlsZSB5b3Ugd2VyZSBvbiB2YWNhdGlvbj8nfSA9ICdKZXN0ZcWbIHBld2llbiDFvGUgcHJhY293YcWCZcWbIHBvZGN6YXMgdXJsb3B1Pyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd29ya2VkIHdoaWxlIHlvdSB3ZXJlIG9uIG92ZXJ0aW1lIGxlYXZlPyd9ID0gJ0plc3RlxZsgcGV3aWVuIMW8ZSBwcmFjb3dhxYJlxZsgbmEgd29sbnltIHogbmFkZ29kemluPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd29ya2VkIG1vcmUgdGhhbiAxNiBob3Vycz8nfSA9ICdKZXN0ZcWbIHBld2llbiDFvGUgcHJhY293YcWCZcWbIHdpxJljZWogbmnFvCAxNiBnb2R6aW4/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlbGVjdCBhbGwgZGF5cyd9ID0gJ1phem5hY3ogd3N6eXN0a2llIGRuaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXNzIGVudHJ5J30gPSAnTWFzb3d5IHdwaXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIGNob29zZSB0aGUgcmVhc29uIGZvciB5b3VyIGFic2VuY2UgZm9yIHRoZSBzZWxlY3RlZCBkYXlzJ30gPSAnUHJvc3rEmSB3eWJyYcSHIHBvd8OzZCBicmFrdSBvYmVjbm/Fm2NpIGRsYSB3eWJyYW55Y2ggZG5pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBjaG9vc2UgYXQgbGVhc3Qgb25lIGRheSEnfSA9ICdQcm9zesSZIHd5YnJhxIcgY29uYWptbmllaiBqZWRlbiBkemllxYQhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BsZWFzZSBjaG9vc2UgYSByZWFzb24gZm9yIGFic2VuY2UhJ30gPSAnUHJvc3rEmSB3eWJyYcSHIHBvd8OzZCBuaWVvYmVjbm/Fm2NpISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXNzIEVudHJ5J30gPSAnTWFzb3d5IHdwaXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCBmb3JtYXQhIFBsZWFzZSBlbnRlciBhIHRpbWUgd2l0aCB0aGUgZm9ybWF0IEhIOk1NLid9ID0gJ05pZXByYXdpZMWCb3d5IGZvcm1hdCEgUHJvc3rEmSBwb2RhxIcgY3phcyB3IGdvZHppbmFjaCBHRzpNTS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnMjQ6MDAgaXMgb25seSBwZXJtaXR0ZWQgYXMgZW5kIHRpbWUuJ30gPSAnMjQ6MDAgamVzdCBkb3p3b2xvbmUgamVkeW5pZSBqYWtvIGtvbmllYyBjemFzdS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52YWxpZCB0aW1lISBBIGRheSBoYXMgb25seSAyNCBob3Vycy4nfSA9ICdOaWVwcmF3aWTFgm93eSBjemFzISBEemllxYQgbWEgdHlsa28gMjQgZ29kemlueS4nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdPdmVydmlldwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSByZXBvcnRpbmcgbW9udGhseSBvdmVydmlldyd9ID0gJ1ByemVnbMSFZCBtaWVzacSZY3puZWdvIHJhcG9ydHUgY3phc3UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnRpbWUgKEhvdXJzKSd9ID0gJ05hZGdvZHppbnkgKEdvZHppbnkpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ0aW1lICh0aGlzIG1vbnRoKSd9ID0gJ05hZGdvZHppbnkgKHRlbiBtaXNpxIVjKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydGltZSAodG90YWwpJ30gPSAnTmFkZ29kemlueSAoxYLEhWN6bmllKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZW1haW5pbmcgb3ZlcnRpbWUgbGVhdmUnfSA9ICdQb3pvc3RhxYJlIG5hZGdvZHppbnkgZG8gb2RlYnJhbmlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZhY2F0aW9uIChEYXlzKSd9ID0gJ1VybG9wIChEbmkpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZhY2F0aW9uIHRha2VuICh0aGlzIG1vbnRoKSd9ID0gJ1d5a29yenlzdGFuZSBkbmkgdXJsb3B1ICh0ZW4gbWllc2nEhWMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZhY2F0aW9uIHRha2VuICh0b3RhbCknfSA9ICdXeWtvcnp5c3RhbmUgZG5pIHVybG9wdSAoxYLEhWN6bmllKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZW1haW5pbmcgdmFjYXRpb24nfSA9ICdQb3pvc3RhxYJvIHVybG9wdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWNrIExlYXZlIChEYXlzKSd9ID0gJ1VybG9wIGNob3JvYm93eSAoRG5pKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWNrIGxlYXZlIHRha2VuICh0aGlzIG1vbnRoKSd9ID0gJ1d5a29yenlzdGFuZSBkbmkgdXJsb3B1IGNob3JvYm93ZWdvICh0ZW4gbWllc2nEhWMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpY2sgbGVhdmUgdGFrZW4gKHRvdGFsKSd9ID0gJ1d5a29yenlzdGFuZSBkbmkgdXJsb3B1IGNob3JvYm93ZWdvICjFgsSFY3puaWUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByZXZpb3VzIG1vbnRoJ30gPSAnUG9wcnplZG5pIG1pZXNpxIVjJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05leHQgbW9udGgnfSA9ICdOYXN0xJlwbnkgbWllc2nEhWMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF5J30gPSAnRHppZcWEJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dlZWtkYXknfSA9ICdEemllxYQgdHlnb2RuaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV29ya2luZyBIb3Vycyd9ID0gJ0dvZHppbnkgcHJhY3knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG90YWwgd29ya2VkIGhvdXJzJ30gPSAnxYHEhWN6bmUgZ29kemlueSB3eXByYWNvd2FuZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyXCdzIHByb2plY3Qgb3ZlcnZpZXcnfSA9ICdQcnplZ2zEhWQgcHJvamVrdHUgdcW8eXRrb3duaWthL8Ozdyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydIb3VycyAobW9udGhseSknfSA9ICdHb2R6aW55IChtaWVzacSZY3puaWUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hvdXJzIChMaWZldGltZSknfSA9ICdHb2R6aW55ICjFgsSFY3puaWUpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0dyYW5kIHRvdGFsJ30gPSAnT2fDs8WCZW0nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdQcm9qZWN0UmVwb3J0aW5nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IHJlcG9ydCd9ID0gJ1JhcG9ydCBwcm9qZWt0dSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRUaW1lQWNjb3VudGluZ1JlcG9ydGluZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGltZSByZXBvcnRpbmcnfSA9ICdSYXBvcnQgY3phc3UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9udGggTmF2aWdhdGlvbid9ID0gJ05hd2lnYWNqYSBtaWVzacSZY3puYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIHJlcG9ydHMnfSA9ICdSYXBvcnR5IHXFvHl0a293bmlrYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb250aGx5IHRvdGFsJ30gPSAnxYHEhWN6bmllIC0gbWllc2nEmWN6bmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpZmV0aW1lIHRvdGFsJ30gPSAnxYHEhWN6bmllIC0gb2fDs8WCZW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnRpbWUgbGVhdmUnfSA9ICdXb2xuZSB6YSBuYWRnb2R6aW55JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZhY2F0aW9uJ30gPSAnVXJsb3AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2ljayBsZWF2ZSd9ID0gJ1VybG9wIGNob3JvYm93eSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbiByZW1haW5pbmcnfSA9ICdQb3pvc3RhxYJlIGRuaSBwb3phIHByYWPEhSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IHJlcG9ydHMnfSA9ICdSYXBvcnR5IHByb2pla3R1JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nU2V0dGluZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBUaW1lIEFjY291bnRpbmcgUHJvamVjdCBTZXR0aW5ncyd9ID0gJ0VkeXR1aiB1c3Rhd2llbmlhIFJhcG9ydG93YW5pYSBDemFzdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgcHJvamVjdCd9ID0gJ0RvZGFqIHByb2pla3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFByb2plY3QnfSA9ICdEb2RhaiBwcm9qZWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgUHJvamVjdCBTZXR0aW5ncyd9ID0gJ0VkeXR1aiB1c3Rhd2llbmlhIHByb2pla3R1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZXJlIGlzIGFscmVhZHkgYSBwcm9qZWN0IHdpdGggdGhpcyBuYW1lLiBQbGVhc2UsIGNob29zZSBhIGRpZmZlcmVudCBvbmUuJ30gPSAnVyBzeXN0ZW1pZSB6bmFqZHVqZSBzacSZIGp1xbwgcHJvamVrdCBvIHRha2llaiBuYXp3aWUuIFd5YmllcnogaW5uxIUgbmF6d8SZLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRpbWUgQWNjb3VudGluZyBTZXR0aW5ncyd9ID0gJ0VkeXR1aiB1c3Rhd2llbmlhIFJhcG9ydG93YW5pYSBDemFzdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgdGFzayd9ID0gJ0RvZGFqIHphZGFuaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHVzZXInfSA9ICdOb3d5IHXFvHl0a293bmlrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgUHJvamVjdHMnfSA9ICdGaWx0ciBuYSBwcm9qZWt0eSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIFRhc2tzJ30gPSAnRmlsdHIgbmEgemFkYW5pYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIFVzZXJzJ30gPSAnRmlsdHIgbmEgdcW8eXRrb3duaWvDs3cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCBMaXN0J30gPSAnTGlzdGEgcHJvamVrdMOzdyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUYXNrIExpc3QnfSA9ICdMaXN0YSB6YWRhxYQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFRhc2snfSA9ICdEb2RhaiB6YWRhbmllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGFzayBTZXR0aW5ncyd9ID0gJ0VkeXR1aiB1c3Rhd2llbmlhIHphZGFuaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhlcmUgaXMgYWxyZWFkeSBhIHRhc2sgd2l0aCB0aGlzIG5hbWUuIFBsZWFzZSwgY2hvb3NlIGEgZGlmZmVyZW50IG9uZS4nfSA9ICdXIHN5c3RlbWllIHpuYWpkdWplIHNpxJkganXFvCB6YWRhbmllIG8gdGFraWVqIG5hendpZS4gV3liaWVyeiBpbm7EhSBuYXp3xJkuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgTGlzdCd9ID0gJ0xpc3RhIHXFvHl0a293bmlrw7N3JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBVc2VyIFNldHRpbmdzJ30gPSAnVXN0YXdpZW5pYSBub3dlZ28gdcW8eXRrb3duaWthJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVXNlciBTZXR0aW5ncyd9ID0gJ0VkeXR1aiB1c3Rhd2llbmlhIHXFvHl0a293bmlrYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb21tZW50cyd9ID0gJ0tvbWVudGFyeic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IE92ZXJ0aW1lJ30gPSAnUG9rYcW8IG5hZGdvZHppbnknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3cgcHJvamVjdCBjcmVhdGlvbid9ID0gJ1plenfDs2wgbmEgdHdvcnplbmllIHByb2pla3R1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlcmlvZCBCZWdpbid9ID0gJ09rcmVzIC0gIHBvY3rEhXRlayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQZXJpb2QgRW5kJ30gPSAnT2tyZXMgLSBrb25pZWMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGF5cyBvZiBWYWNhdGlvbid9ID0gJ0RuaSB1cmxvcHUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG91cnMgcGVyIFdlZWsnfSA9ICdHb2R6aW4gdyB0eWdvZG5pdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdXRob3JpemVkIE92ZXJ0aW1lJ30gPSAnWmV6d8OzbCBuYSBuYWRnb2R6aW55JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlcmlvZCBlbmQgbXVzdCBiZSBhZnRlciBwZXJpb2QgYmVnaW4uJ30gPSAnT2tyZXMga2/FhGNvd3kgbXVzaSBiecSHIHBvIG9rcmVzaWUgcm96cG9jesSZY2lhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydObyB0aW1lIHBlcmlvZHMgZm91bmQuJ30gPSAnQnJhayBva3Jlc8OzdyBjemFzdS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIHRpbWUgcGVyaW9kJ30gPSAnRG9kYWogb2tyZXMgY3phc3UnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdWaWV3CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWaWV3IFRpbWUgUmVjb3JkJ30gPSAnUG9rYcW8IHdwaXN6IGN6YXN1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZpZXcgb2YgJ30gPSAnV2lkb2sgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGRhdGEgZm91bmQgZm9yIHRoaXMgZGF5Lid9ID0gJ0JyYWsgZGFueWNoIG9kbm/Fm25pZSB0ZWdvIGRuaWEuJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWdlbnQgaW50ZXJmYWNlIG5vdGlmaWNhdGlvbiBtb2R1bGUgdG8gc2VlIHRoZSBudW1iZXIgb2YgaW5jb21wbGV0ZSB3b3JraW5nIGRheXMgZm9yIHRoZSB1c2VyLid9ID0gJ0ludGVyZmVqcyBhZ2VudGEgaW5mb3JtdWrEhWN5IG8gZG5pYWNoIGJleiB6YXJhcG9ydG93YW5lZ28gY3phc3UgcHJhY3kuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgZGF0YSB0byB1c2Ugb24gYXR0cmlidXRlIGZvciB0aWNrZXQgc2VhcmNoIHNjcmVlbi4gRXhhbXBsZTogIlRpY2tldENyZWF0ZVRpbWVTdGFydFllYXI9MjAxMDtUaWNrZXRDcmVhdGVUaW1lU3RhcnRNb250aD0xMDtUaWNrZXRDcmVhdGVUaW1lU3RhcnREYXk9NDtUaWNrZXRDcmVhdGVUaW1lU3RvcFllYXI9MjAxMDtUaWNrZXRDcmVhdGVUaW1lU3RvcE1vbnRoPTExO1RpY2tldENyZWF0ZVRpbWVTdG9wRGF5PTM7Ii4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBuYW1lIGZvciBuZXcgYWN0aW9ucy4nfSA9ICdEb215xZtsbmEgbmF6d2EgZGxhIG5vd2VqIGFrY2ppLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IG5hbWUgZm9yIG5ldyBwcm9qZWN0cy4nfSA9ICdEb215xZtsbmEgbmF6d2EgZGxhIG5vd2VnbyBwcm9qZWt0dS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBkYXRlIGVuZC4nfSA9ICdEb215xZtsbmEgZGF0YSB6YWtvxYRjemVuaWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2V0dGluZyBmb3IgZGF0ZSBzdGFydC4nfSA9ICdEb215xZtsbmEgZGF0YSByb3pwb2N6xJljaWEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2V0dGluZyBmb3IgZGVzY3JpcHRpb24uJ30gPSAnRG9tecWbbG5lIHVzdGF3aWVuaWUgZGxhIG9waXN1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNldHRpbmcgZm9yIGxlYXZlIGRheXMuJ30gPSAnRG9tecWbbG5lIHVzdGF3aWVuaWUgZGxhIHVybG9wdS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBvdmVydGltZS4nfSA9ICdEb215xZtsbmUgdXN0YXdpZW5pZSBkbGEgbmFkZ29kemluLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHNldHRpbmcgZm9yIHRoZSBzdGFuZGFyZCB3ZWVrbHkgaG91cnMuJ30gPSAnRG9tecWbbG5pZSB1c3Rhd2llbmllIGRsYSBzdGFuZGFyZG93eWNoIGdvZHppbiB0eWdvZG5pb3d5Y2guJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdHVzIGZvciBuZXcgYWN0aW9ucy4nfSA9ICdEb215xZtsbnkgc3RhdHVzIGRsYSBub3dlaiBha2NqaS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzdGF0dXMgZm9yIG5ldyBwcm9qZWN0cy4nfSA9ICdEb215xZtsbnkgc3RhdHVzIGRsYSBub3dlZ28gcHJvamVrdHUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc3RhdHVzIGZvciBuZXcgdXNlcnMuJ30gPSAnRG9tecWbbG55IHN0YXR1cyBkbGEgbm93ZWdvIHXFvHl0a293bmlrYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyBpZiB0aW1lIGFjY291bnRpbmcgbXVzdCBiZSBzZXQgdG8gYWxsIHRpY2tldHMgaW4gYnVsayBhY3Rpb24uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmluZXMgdGhlIHByb2plY3RzIGZvciB3aGljaCBhIHJlbWFyayBpcyByZXF1aXJlZC4gSWYgdGhlIFJlZ0V4cCBtYXRjaGVzIG9uIHRoZSBwcm9qZWN0LCB5b3UgaGF2ZSB0byBpbnNlcnQgYSByZW1hcmsgdG9vLiBUaGUgUmVnRXhwIHVzZSB0aGUgc214IHBhcmFtZXRlci4nfSA9ICdEZW50cm8gZGVzdGEgb3DDp8OjbyBkZSBjb25maWd1cmHDp8OjbywgdW1hIHJlZ2V4cCBwb2RlIHNlciBkZWZpbmlkYSBxdWUgZGV0ZXJtaW5hIHF1YWlzIHByb2pldG9zIHPDo28gcmVnaXN0cmFkb3MgY29tIHVtYSBvYnNlcnZhw6fDo28gZGV2ZSBzZXIgKG8gcmVnZXhwIGZ1bmNpb25hIGNvbSBTTVgtcGFyw6JtZXRyb3MpLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRpbWUgYWNjb3VudGluZyBzZXR0aW5ncyd9ID0gJ0VkeXR1aiB1c3Rhd2llbmlhIGN6YXN1IHJhcG9ydG93YW5pYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRpbWUgcmVjb3JkJ30gPSAnRWR5dHVqIHdwaXMgY3phc3UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRm9yIGhvdyBtYW55IGRheXMgYWdvIHlvdSBjYW4gaW5zZXJ0IHdvcmtpbmcgdW5pdHMuJ30gPSAnRGxhIGlsdSBkbmkgd3N0ZWN6IG1vxbxuYSB3c3Rhd2nEhyBqZWRub3N0a2kgY3phc3UgcHJhY3knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgZW5hYmxlZCwgdGhlIGRyb3Bkb3duIGVsZW1lbnRzIGluIHRoZSBlZGl0IHNjcmVlbiBhcmUgY2hhbmdlZCB0byBhdXRvY29tcGxldGlvbiBmaWVsZHMuJ30gPSAnSmXFm2xpIGFrdHl3b3dhbmUsIGxpc3RhIHd5YmllcmFuYSBqZXN0IHphc3TEhXBpb27EhSBhdXRvd3lwZcWCbmlhbmllbS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSWYgZW5hYmxlZCwgdGhlIHVzZXIgaXMgYWxsb3dlZCB0byBlbnRlciAib24gdmFjYXRpb24gbGVhdmUiLCAib24gc2ljayBsZWF2ZSIgYW5kICJvbiBvdmVydGltZSBsZWF2ZSIgdG8gbXVsdGlwbGUgZGF0ZXMgYXQgb25jZS4nfSA9ICdKZcWbbGkgYWt0eXdvd2FuZSwgdcW8eXRrb3duaWsgbW/FvGUgd3N0YXdpxIcgInVybG9wIiwgInVybG9wIGNob3JvYm93eSIgb3JheiAidXJsb3AgemEgbmFkZ29kemlueSIgZG8ga2lsa3UgZGF0IGplZG5vY3plxZtuaWUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIHdvcmtpbmcgZGF5cyBhZnRlciB3aGljaCB0aGUgd29ya2luZyB1bml0cyBoYXZlIHRvIGJlIGluc2VydGVkLid9ID0gJ01ha3N5bWFsbmEgbGljemJhIGRuaSByb2JvY3p5Y2gsIHBvIGt0w7NyeWNoIGplZG5vc3RraSBjemFzdSBwb3dpbm55IHpvc3RhxIcgd3Byb3dhZHpvbmUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heGltdW0gbnVtYmVyIG9mIHdvcmtpbmcgZGF5cyB3aXRob3V0aCB3b3JraW5nIHVuaXRzIGVudHJ5IGFmdGVyIHdoaWNoIGEgd2FybmluZyB3aWxsIGJlIHNob3duLid9ID0gJ01ha3N5bWFsbmEgbGljemJhIGRuaSByb2JvY3p5Y2ggYmV6IHdwcm93YWR6YW5pYSByYXBvcnR1IGN6YXN1LCBwbyBrdMOzcnljaCB6b3N0YW5pZSB3ecWbd2lldGxvbmUgb3N0cnplxbxlbmllLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IHRpbWUgcmVwb3J0aW5nJ30gPSAnTyByZWxhdMOzcmlvIGRlIFRlbXBvIGRvIHByb2pldG8gJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIGNvbnN0cmFpbmluZyBhY3Rpb24gbGlzdCBhY2NvcmRpbmcgdG8gc2VsZWN0ZWQgcHJvamVjdC4gS2V5IGNvbnRhaW5zIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgcHJvamVjdChzKSwgY29udGVudCBjb250YWlucyByZWd1bGFyIGV4cHJlc3Npb25zIGZvciBhY3Rpb24ocykuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIGNvbnN0cmFpbmluZyBwcm9qZWN0IGxpc3QgYWNjb3JkaW5nIHRvIHVzZXIgZ3JvdXBzLiBLZXkgY29udGFpbnMgcmVndWxhciBleHByZXNzaW9uIGZvciBwcm9qZWN0KHMpLCBjb250ZW50IGNvbnRhaW5zIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGdyb3Vwcy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F2ZXMgdGhlIGxvZ2luIGFuZCBwYXNzd29yZCBvbiB0aGUgc2Vzc2lvbiB0YWJsZSBpbiB0aGUgZGF0YWJhc2UsIGlmICJEQiIgd2FzIHNlbGVjdGVkIGZvciBTZXNzaW9uTW9kdWxlLid9ID0gJ1phcGlzdWplIGxvZ2luIG9yYXogaGFzxYJvLCBkbyB0YWJlbGkgc2VzamkgdyBiYXppZSBkYW55Y2gsIGplxZtsaSBiYXphIGRhbnljaCB6b3N0YcWCYSB3eWJyYW5hIHcgU2Vzc2lvbk1vZHVsZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhcnRpY2xlIGFzIHJpY2ggdGV4dCBldmVuIGlmIHJpY2ggdGV4dCB3cml0aW5nIGlzIGRpc2FibGVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgaWYgd29ya2luZyBob3VycyBjYW4gYmUgaW5zZXJ0ZWQgd2l0aG91dCBzdGFydCBhbmQgZW5kIHRpbWVzLid9ID0gJ09rcmXFm2xhLCBjenkgY3phcyBwcmFjeSBtb8W8ZSB6b3N0YcSHIHdwcm93YWR6b255IGJleiBwb2Rhd2FuaWEgY3phc3Ugcm96cG9jesSZY2lhIG9yYXogemFrb8WEY3plbmlhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG1vZHVsZSBmb3JjZXMgaW5zZXJ0cyBpbiBUaW1lQWNjb3VudGluZy4nfSA9ICdUZW4gbW9kdcWCIHd5bXVzemEgd3Byb3dhZHplbmlhIHcgUmFwb3J0YWNoIEN6YXN1Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIG5vdGlmaWNhdGlvbiBtb2R1bGUgZ2l2ZXMgYSB3YXJuaW5nIGlmIHRoZXJlIGFyZSB0b28gbWFueSBpbmNvbXBsZXRlIHdvcmtpbmcgZGF5cy4nfSA9ICdUZW4gbW9kdcWCIGRhamUgb3N0cnplxbxlbmllLCBqZcWbbGkgamVzdCB6Ynl0IG5pZXBlxYJueWNoIGRuaSByb2JvY3p5Y2guJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgYWNjb3VudGluZy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG8gdXNlIGlmIHNvbWUgYWN0aW9ucyByZWR1Y2VkIHRoZSB3b3JraW5nIGhvdXJzIChmb3IgZXhhbXBsZSwgaWYgb25seSBoYWxmIG9mIHRoZSB0cmF2ZWxpbmcgdGltZSBpcyBwYWlkIEtleSA9PiB0cmF2ZWxpbmc7IENvbnRlbnQgPT4gNTApLid9ID0gJ1XFvHl3YW5lIGplxZtsaSBuaWVrdMOzcmUgZHppYcWCYW5pYSB6bW5pZWpzennFgnkgZ29kemlueSBwcmFjeSAobnAuIGplxZtsaSB0eWxrbyBwb8WCb3dhIGN6YXMgcG9kcsOzxbx5IGplc3Qgd3lwxYJhY2FuYSBrbHVjeiA9PiBwb2Ryw7PFvGU7IFphd2FydG/Fm8SHID0+IDUwKS4nOwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vbid9ID0gJ1Bvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUdWUnfSA9ICdXdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXZWQnfSA9ICfFmnInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGh1J30gPSAnQ3p3JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZyaSd9ID0gJ1BpxIUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2F0J30gPSAnU29iJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1N1bid9ID0gJ05pZWR6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0phbnVhcnknfSA9ICdTdHljemXFhCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGZWJydWFyeSd9ID0gJ0x1dHknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFyY2gnfSA9ICdNYXJ6ZWMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXByaWwnfSA9ICdLd2llY2llxYQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF5J30gPSAnTWFqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0p1bmUnfSA9ICdDemVyd2llYyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKdWx5J30gPSAnTGlwaWVjJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F1Z3VzdCd9ID0gJ1NpZXJwaWXFhCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXB0ZW1iZXInfSA9ICdXcnplc2llxYQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2N0b2Jlcid9ID0gJ1Bhxbpkemllcm5payc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3ZlbWJlcid9ID0gJ0xpc3RvcGFkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlY2VtYmVyJ30gPSAnR3J1ZHppZcWEJzsKCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IGFsbCBwcm9qZWN0cyd9ID0gJ1Bva2HFvCB3c3p5c3RraWUgcHJvamVrdHknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyB2YWxpZCBwcm9qZWN0cyd9ID0gJ1Bva2HFvCBha3R1YWxuZSBwcm9qZWt0eSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lQWNjb3VudGluZyd9ID0gJ1JhcG9ydG93YW5pZSBDemFzdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBY3Rpb25zJ30gPSAnQWtjamUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciB1cGRhdGVkISd9ID0gJ1XFvHl0a293bmlrIHphYWt0dWFsaXpvd2FueSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciBhZGRlZCEnfSA9ICdVxbx5dGtvd25payBkb2RhbnkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgYWRkZWQhJ30gPSAnUHJvamVrdCBkb2RhbnkhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgdXBkYXRlZCEnfSA9ICdQcm9qZWt0IHphYWt0dWFsaXpvd2FueSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFzayBhZGRlZCEnfSA9ICdaYWRhbmllIGRvZGFuZSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGFzayB1cGRhdGVkISd9ID0gJ1phZGFuaWUgemFha3R1YWxpem93YW5lISc7CgogICAgIwogICAgIyBPQlNPTEVURSBFTlRSSUVTIEZPUiBSRUZFUkVOQ0UsIERPIE5PVCBUUkFOU0xBVEUhCiAgICAjCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDYW5cJ3QgZGVsZXRlIFdvcmtpbmcgVW5pdHMhJ30gPSAnTmllIG1vxbxuYSB1c3VuxIXEhyBKZWRub3N0ZWsgQ3phc3UhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzYXZlIHNldHRpbmdzLCBiZWNhdXNlIGEgZGF5IGhhcyBvbmx5IDI0IGhvdXJzISd9ID0gJ05pZSBtb8W8bmEgemFwaXNhxIcgdXN0YXdpZcWEIHBvbmlld2HFvCBkemllxYQgbWEgdHlsa28gMjQgZ29kemlueSEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIGluc2VydCB5b3VyIHdvcmtpbmcgaG91cnMhJ30gPSAnUHJvc3rEmSB3cHJvd2FkemnEhyBnb2R6aW55IHByYWN5ISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdSYXBvcnRvd2FuaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VjY2Vzc2Z1bCBpbnNlcnQhJ30gPSAnUG9tecWbbG5pZSB3c3Rhd2lvbm8hJzsKCn0KCjE7Cg==
77u/IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9wdF9CUl9UaW1lQWNjb3VudGluZy5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNyBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnB0X0JSX1RpbWVBY2NvdW50aW5nOwoKdXNlIHV0Zjg7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdEZWxldGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhlIFRpbWUgQWNjb3VudGluZyBvZiB0aGlzIGRheT8nfSA9ICdWb2PDqiByZWFsbWVudGUgZGVzZWphIGV4Y2x1aXIgYSBjb250YWJpbGl6YcOnw6NvIGRlc3NlIGRpYT8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdFZGl0CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRpbWUgUmVjb3JkJ30gPSAnRWRpdGFyIHJlZ2lzdHJvIGRlIHRlbXBvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3Qgc2V0dGluZ3MnfSA9ICdEZWZpbmnDp8O1ZXMgZGUgUHJvamV0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXRlIE5hdmlnYXRpb24nfSA9ICdFc2NvbGhhIGRlIERhdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJldmlvdXMgZGF5J30gPSAnRGlhIGFudGVyaW9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05leHQgZGF5J30gPSAnUHLDs3hpbW8gRGlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RheXMgd2l0aG91dCBlbnRyaWVzJ30gPSAnRGlhcyBzZW0gZW50cmFkYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZmllbGRzIGFyZSBtYXJrZWQgd2l0aCBhICIqIi4nfSA9ICdPcyBjYW1wb3MgcXVlIHPDo28gb2JyaWdhdMOzcmlvcyBzw6NvIG1hcmNhZG9zIGNvbSB1bSBhc3RlcmlzY28gIioiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1lvdSBoYXZlIHRvIGZpbGwgaW4gc3RhcnQgYW5kIGVuZCB0aW1lIG9yIGEgdGltZSBwZXJpb2QuJ30gPSAnVm9jw6ogdGVtIHF1ZSBwcmVlbmNoZXIgbyB0ZW1wbyBkZSBpbsOtY2lvIGUgZmluYWwgb3UgdW0gcGVyw61vZG8gZGUgdGVtcG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9qZXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rhc2snfSA9ICdUYXJlZmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVtYXJrJ30gPSAnTWFyY2FyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RhdGUgTmF2aWdhdGlvbid9ID0gJ0VzY29saGEgZGUgRGF0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgYWRkIGEgcmVtYXJrIHdpdGggbW9yZSB0aGFuIDggY2hhcmFjdGVycyEuJ30gPSAnUG9yIGZhdm9yIGluc2lyYSB1bSBjb21lbnTDoXJpbyBjb20gcGVsbyBtZW5vcyA4IGNhcmFjdGVyZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmVnYXRpdmUgdGltZXMgYXJlIG5vdCBhbGxvd2VkLid9ID0gJ1ZhbG9yZXMgbmVnYXRpdm9zIG7Do28gc8OjbyBwZXJtaXRpZG9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBlYXRlZCBob3VycyBhcmUgbm90IGFsbG93ZWQuIFN0YXJ0IHRpbWUgbWF0Y2hlcyBhbm90aGVyIGludGVydmFsLid9ID0gJ0VzdGUgaG9yw6FyaW8gZGUgaW7DrWNpbyDDqSBpbmRpY2FkbyBlbSBvdXRyYSBlbnRyYWRhLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgdGltZSBtdXN0IGJlIGFmdGVyIHN0YXJ0IHRpbWUuJ30gPSAnSG9yYSBkZSB0w6lybWlubyBkZXZlIHNlciBwb3N0ZXJpb3Igw6AgaG9yYSBkZSBpbsOtY2lvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBlYXRlZCBob3VycyBhcmUgbm90IGFsbG93ZWQuIEVuZCB0aW1lIG1hdGNoZXMgYW5vdGhlciBpbnRlcnZhbC4nfSA9ICdIb3JhcyByZXBldGlkYXMgbsOjbyBzw6NvIHBlcm1pdGlkYXMuIEhvcmEgZGUgdMOpcm1pbm8gY29pbmNpZGUgY29tIG91dHJvIGludGVydmFsby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyaW9kIGlzIGJpZ2dlciB0aGFuIHRoZSBpbnRlcnZhbCBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQgdGltZXMhJ30gPSAnUGVyw61vZG8gw6kgbWFpb3IgZG8gcXVlIG8gaW50ZXJ2YWxvIGVudHJlIG9zIGhvcsOhcmlvcyBkZSBpbsOtY2lvIGUgZmltISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIHBlcmlvZCEgQSBkYXkgaGFzIG9ubHkgMjQgaG91cnMuJ30gPSAnUGVyw61vZG8gaW52w6FsaWRvISBVbSBkaWEgc8OzIHRlbSAyNCBob3Jhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQSB2YWxpZCBwZXJpb2QgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4nfSA9ICdVbSBwZXLDrW9kbyB2w6FsaWRvIGRldmUgc2VyIG1haW9yIHF1ZSB6ZXJvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZhbGlkIHBlcmlvZCEgTmVnYXRpdmUgcGVyaW9kcyBhcmUgbm90IGFsbG93ZWQuJ30gPSAnUGVyw61vZG8gaW52w6FsaWRvISBQZXLDrW9kb3MgbmVnYXRpdm9zIG7Do28gc8OjbyBwZXJtaXRpZG9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgb25lIHJvdyd9ID0gJ0FkaWNpb25hciB1bWEgbGluaGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG90YWwnfSA9ICdUb3RhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPbiB2YWNhdGlvbid9ID0gJ0VtIGbDqXJpYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnWW91IGNhbiBvbmx5IHNlbGVjdCBvbmUgY2hlY2tib3ggZWxlbWVudCEnfSA9ICdWb2PDqiBwb2RlIHNlbGVjaW9uYXIgYXBlbmFzIHVtIGVsZW1lbnRvIGRhIGNhaXhhIGRlIHNlbGXDp8OjbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT24gc2ljayBsZWF2ZSd9ID0gJ0VtIGxpY2Vuw6dhIG3DqWRpY2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT24gb3ZlcnRpbWUgbGVhdmUnfSA9ICdFbSBzb2JyZWhvcmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhbGwgaXRlbXMnfSA9ICdNb3N0cmFyIHRvZG9zIG9zIGl0ZW5zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbGV0ZSBUaW1lIEFjY291bnRpbmcgRW50cnknfSA9ICdFeGNsdWlyIEVudHJhZGEgZGUgQ29udGFiaWxpemHDp8OjbyBkZSBUZW1wbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25maXJtIGluc2VydCd9ID0gJ0NvbmZpcm1lIGluc2VyaXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCB3aGlsZSB5b3Ugd2VyZSBvbiBzaWNrIGxlYXZlPyd9ID0gJ1RlbSBjZXJ0ZXphIHF1ZSB2b2PDqiB0cmFiYWxob3UgZW5xdWFudG8gZXN0ZXZlIGVtIGxpY2Vuw6dhIG3DqWRpY2E/JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FyZSB5b3Ugc3VyZSB0aGF0IHlvdSB3b3JrZWQgd2hpbGUgeW91IHdlcmUgb24gdmFjYXRpb24/J30gPSAnVGVtIGNlcnRlemEgcXVlIHZvY8OqIHRyYWJhbGhvdSBlbnF1YW50byBlc3RldmUgZW0gZsOpcmlhcz8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCB3aGlsZSB5b3Ugd2VyZSBvbiBvdmVydGltZSBsZWF2ZT8nfSA9ICdUZW0gY2VydGV6YSBxdWUgdm9jw6ogdHJhYmFsaG91IGVtIHBlcsOtb2RvIGRlIHNvYnJlaG9yYT8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCBtb3JlIHRoYW4gMTYgaG91cnM/J30gPSAnVGVtIGNlcnRlemEgcXVlIHZvY8OqIHRyYWJhbGhvdSBtYWlzIGRlIDE2IGhvcmFzPyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZWxlY3QgYWxsIGRheXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFzcyBlbnRyeSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgY2hvb3NlIHRoZSByZWFzb24gZm9yIHlvdXIgYWJzZW5jZSBmb3IgdGhlIHNlbGVjdGVkIGRheXMnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGxlYXNlIGNob29zZSBhdCBsZWFzdCBvbmUgZGF5ISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgY2hvb3NlIGEgcmVhc29uIGZvciBhYnNlbmNlISd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXNzIEVudHJ5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgZm9ybWF0ISBQbGVhc2UgZW50ZXIgYSB0aW1lIHdpdGggdGhlIGZvcm1hdCBISDpNTS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnMjQ6MDAgaXMgb25seSBwZXJtaXR0ZWQgYXMgZW5kIHRpbWUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ludmFsaWQgdGltZSEgQSBkYXkgaGFzIG9ubHkgMjQgaG91cnMuJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nT3ZlcnZpZXcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgcmVwb3J0aW5nIG1vbnRobHkgb3ZlcnZpZXcnfSA9ICdWaXPDo28gR2VyYWwgZG8gUmVsYXTDs3JpbyBkZSBDb250YWJpbGl6YcOnw6NvIE1lbnNhbCBkZSBUZW1wbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydGltZSAoSG91cnMpJ30gPSAnSG9yYS1leHRyYSAoZW0gSG9yYXMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J092ZXJ0aW1lICh0aGlzIG1vbnRoKSd9ID0gJ0hvcmEtZXh0cmEgKGVzdGUgbcOqcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3ZlcnRpbWUgKHRvdGFsKSd9ID0gJ0hvcmEtZXh0cmEgKHRvdGFsKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZW1haW5pbmcgb3ZlcnRpbWUgbGVhdmUnfSA9ICdIb3JhLWV4dHJhIHJlbWFuZXNjZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbiAoRGF5cyknfSA9ICdGw6lyaWFzIChlbSBEaWFzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbiB0YWtlbiAodGhpcyBtb250aCknfSA9ICdGw6lyaWFzIGdvemFkYXMgKGVzdGUgbcOqcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmFjYXRpb24gdGFrZW4gKHRvdGFsKSd9ID0gJ0bDqXJpYXMgZ296YWRhcyAodG90YWwpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbWFpbmluZyB2YWNhdGlvbid9ID0gJ0bDqXJpYXMgcmVtYW5lc2NlbnRlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWNrIExlYXZlIChEYXlzKSd9ID0gJ0RpYXMgQWZhc3RhZG9zIChlbSBEaWFzKSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWNrIGxlYXZlIHRha2VuICh0aGlzIG1vbnRoKSd9ID0gJ0FmYXN0YW1lbnRvIHBvciBkb2Vuw6dhIChlc3RlIE3DqnMpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpY2sgbGVhdmUgdGFrZW4gKHRvdGFsKSd9ID0gJ0FmYXN0YW1lbnRvIHBvciBkb2Vuw6dhICh0b3RhbCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJldmlvdXMgbW9udGgnfSA9ICdNw6pzIGFudGVyaW9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05leHQgbW9udGgnfSA9ICdQcsOzeGltbyBtw6pzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RheSd9ID0gJ0RpYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXZWVrZGF5J30gPSAnRGlhIGRlIHNlbWFuYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXb3JraW5nIEhvdXJzJ30gPSAnSG9yYXMgZGUgVHJhYmFsaG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG90YWwgd29ya2VkIGhvdXJzJ30gPSAnVG90YWwgZGUgaG9yYXMgdHJhYmFsaGFkYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlclwncyBwcm9qZWN0IG92ZXJ2aWV3J30gPSAnVmlzw6NvIGdlcmFsIGRlIHByb2pldG9zIGRlIHVzdcOhcmlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hvdXJzIChtb250aGx5KSd9ID0gJ0hvcmFzIChwb3IgbcOqcyknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSG91cnMgKExpZmV0aW1lKSd9ID0gJ0hvcmFzICh0b3RhbCknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnR3JhbmQgdG90YWwnfSA9ICdUb3RhbCBHZXJhbCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRUaW1lQWNjb3VudGluZ1Byb2plY3RSZXBvcnRpbmcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgcmVwb3J0J30gPSAnUmVsYXTDs3JpbyBkbyBwcm9qZXRvJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudFRpbWVBY2NvdW50aW5nUmVwb3J0aW5nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lIHJlcG9ydGluZyd9ID0gJ1JlbGF0w7NyaW8gZGUgSG9yYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9udGggTmF2aWdhdGlvbid9ID0gJ0VzY29saGEgZGUgTcOqcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVc2VyIHJlcG9ydHMnfSA9ICdSZWxhdMOzcmlvcyBkZSB1c3XDoXJpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb250aGx5IHRvdGFsJ30gPSAnVG90YWwgbWVuc2FsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xpZmV0aW1lIHRvdGFsJ30gPSAnU29tYSBUb3RhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdmVydGltZSBsZWF2ZSd9ID0gJ1NvYnJlaG9yYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWYWNhdGlvbid9ID0gJ0bDqXJpYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2ljayBsZWF2ZSd9ID0gJ0xpY2Vuw6dhIG3DqWRpY2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVmFjYXRpb24gcmVtYWluaW5nJ30gPSAnRGlhcyBkZSBBZmFzdGFtZW50byBSZW1hbmVzY2VudGVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgcmVwb3J0cyd9ID0gJ1JlbGF0w7NyaW9zIGRlIHByb2pldG8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdTZXR0aW5nCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRpbWUgQWNjb3VudGluZyBQcm9qZWN0IFNldHRpbmdzJ30gPSAnRWRpdGFyIGRlZmluacOnw7VlcyBkZSBwcm9qZXRvIHBhcmEgY29udGFiaWxpemHDp8OjbyBkZSB0ZW1wbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgcHJvamVjdCd9ID0gJ0FkaWNpb25hciBwcm9qZXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FkZCBQcm9qZWN0J30gPSAnQWRpY2lvbmFyIFByb2pldG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRWRpdCBQcm9qZWN0IFNldHRpbmdzJ30gPSAnRWRpdGFyIGFzIGNvbmZpZ3VyYcOnw7VlcyBkbyBwcm9qZXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZXJlIGlzIGFscmVhZHkgYSBwcm9qZWN0IHdpdGggdGhpcyBuYW1lLiBQbGVhc2UsIGNob29zZSBhIGRpZmZlcmVudCBvbmUuJ30gPSAnSsOhIGV4aXN0ZSB1bSBwcm9qZXRvIGNvbSBlc3RlIG5vbWUuIFBvciBmYXZvciwgZXNjb2xoYSB1bSBkaWZlcmVudGUuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFRpbWUgQWNjb3VudGluZyBTZXR0aW5ncyd9ID0gJ0VkaXRhciBkZWZpbmnDp8O1ZXMgZGUgY29udGFiaWxpemHDp8OjbyBkZSB0ZW1wbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgdGFzayd9ID0gJ0FkaWNpb25hciB0YXJlZmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IHVzZXInfSA9ICdOb3ZvIHVzdcOhcmlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZpbHRlciBmb3IgUHJvamVjdHMnfSA9ICdGaWx0cm8gcGFyYSBQcm9qZXRvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIFRhc2tzJ30gPSAnRmlsdHJvIHBhcmEgVGFyZWZhcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaWx0ZXIgZm9yIFVzZXJzJ30gPSAnRmlsdHJvIHBhcmEgVXN1w6FyaW9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgTGlzdCd9ID0gJ0xpc3RhIGRlIFByb2pldG9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rhc2sgTGlzdCd9ID0gJ0xpc3RhIGRlIFRhcmVmYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWRkIFRhc2snfSA9ICdBZGljaW9uYXIgVGFyZWZhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgVGFzayBTZXR0aW5ncyd9ID0gJ0VkaXRhciBEZWZpbmnDp8O1ZXMgZGEgVGFyZWZhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoZXJlIGlzIGFscmVhZHkgYSB0YXNrIHdpdGggdGhpcyBuYW1lLiBQbGVhc2UsIGNob29zZSBhIGRpZmZlcmVudCBvbmUuJ30gPSAnSsOhIGV4aXN0ZSB1bWEgdGFyZWZhIGNvbSBlc3RlIG5vbWUuIFBvciBmYXZvciwgZXNjb2xoYSB1bSBkaWZlcmVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgTGlzdCd9ID0gJ0xpc3RhIGRlIHVzdcOhcmlvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgVXNlciBTZXR0aW5ncyd9ID0gJ05vdmFzIENvbmZpZ3VyYcOnw7VlcyBkbyBVc3XDoXJpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IFVzZXIgU2V0dGluZ3MnfSA9ICdFZGl0YXIgYXMgY29uZmlndXJhw6fDtWVzIGRvIHVzdcOhcmlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NvbW1lbnRzJ30gPSAnQ29tZW50w6FyaW9zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgT3ZlcnRpbWUnfSA9ICdNb3N0cmFyIFNvYnJlaG9yYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWxsb3cgcHJvamVjdCBjcmVhdGlvbid9ID0gJ1Blcm1pdGlyIGNyaWHDp8OjbyBkZSBwcm9qZXRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BlcmlvZCBCZWdpbid9ID0gJ0luw61jaW8gZGUgUGVyw61vZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyaW9kIEVuZCd9ID0gJ0ZpbSBkZSBQZXLDrW9kbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEYXlzIG9mIFZhY2F0aW9uJ30gPSAnRGlhcyBkZSBGw6lyaWFzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0hvdXJzIHBlciBXZWVrJ30gPSAnSG9yYXMgcG9yIHNlbWFuYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdXRob3JpemVkIE92ZXJ0aW1lJ30gPSAnU29icmVob3JhIGF1dG9yaXphZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGVyaW9kIGVuZCBtdXN0IGJlIGFmdGVyIHBlcmlvZCBiZWdpbi4nfSA9ICdGaW5hbCBkbyBwZXLDrW9kbyBkZXZlIHNlciBhcMOzcyBvIHBlcsOtb2RvIGRlIGluw61jaW8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIHRpbWUgcGVyaW9kcyBmb3VuZC4nfSA9ICdTZW0gcGVyw61vZG9zIGRlIHRlbXBvIGVuY29udHJhZG9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgdGltZSBwZXJpb2QnfSA9ICdBZGljaW9uYXIgcGVyw61vZG8gZGUgdGVtcG8nOwoKICAgICMgVGVtcGxhdGU6IEFnZW50VGltZUFjY291bnRpbmdWaWV3CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydWaWV3IFRpbWUgUmVjb3JkJ30gPSAnVmVyIFJlZ2lzdHJvIGRlIFRlbXBvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ZpZXcgb2YgJ30gPSAnVmlzw6NvIGRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vIGRhdGEgZm91bmQgZm9yIHRoaXMgZGF5Lid9ID0gJ07Do28gZm9yYW0gZW5jb250cmFkb3MgZGFkb3MgcGFyYSBlc3RlIGRpYS4nOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZ2VudCBpbnRlcmZhY2Ugbm90aWZpY2F0aW9uIG1vZHVsZSB0byBzZWUgdGhlIG51bWJlciBvZiBpbmNvbXBsZXRlIHdvcmtpbmcgZGF5cyBmb3IgdGhlIHVzZXIuJ30gPSAnQWdlbnRlIGRlIG5vdGlmaWNhw6fDo28gbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSB2ZXIgbyBuw7ptZXJvIGRlIGRpYXMgZGUgdHJhYmFsaG8gaW5jb21wbGV0byBwYXJhIG8gdXN1w6FyaW8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgZGF0YSB0byB1c2Ugb24gYXR0cmlidXRlIGZvciB0aWNrZXQgc2VhcmNoIHNjcmVlbi4gRXhhbXBsZTogIlRpY2tldENyZWF0ZVRpbWVTdGFydFllYXI9MjAxMDtUaWNrZXRDcmVhdGVUaW1lU3RhcnRNb250aD0xMDtUaWNrZXRDcmVhdGVUaW1lU3RhcnREYXk9NDtUaWNrZXRDcmVhdGVUaW1lU3RvcFllYXI9MjAxMDtUaWNrZXRDcmVhdGVUaW1lU3RvcE1vbnRoPTExO1RpY2tldENyZWF0ZVRpbWVTdG9wRGF5PTM7Ii4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBuYW1lIGZvciBuZXcgYWN0aW9ucy4nfSA9ICdPIG5vbWUgcGFkcsOjbyBwYXJhIG5vdmFzIGHDp8O1ZXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgbmFtZSBmb3IgbmV3IHByb2plY3RzLid9ID0gJ08gbm9tZSBwYWRyw6NvIHBhcmEgbm92b3MgcHJvamV0b3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlZmF1bHQgc2V0dGluZyBmb3IgZGF0ZSBlbmQuJ30gPSAnQ29uZmlndXJhw6fDo28gcGFkcsOjbyBwYXJhIGEgZGF0YSBkZSB0w6lybWluby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBkYXRlIHN0YXJ0Lid9ID0gJ0NvbmZpZ3VyYcOnw6NvIHBhZHLDo28gcGFyYSBhIGRhdGEgZGUgaW7DrWNpby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBkZXNjcmlwdGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBsZWF2ZSBkYXlzLid9ID0gJ0NvbmZpZ3VyYcOnw6NvIHBhZHLDo28gcGFyYSBkaWFzIGRlIGF1c8OqbmNpYS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciBvdmVydGltZS4nfSA9ICdDb25maWd1cmHDp8OjbyBwYWRyw6NvIHBhcmEgaG9yYXMgZXh0cmFvcmRpbsOhcmlhcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmYXVsdCBzZXR0aW5nIGZvciB0aGUgc3RhbmRhcmQgd2Vla2x5IGhvdXJzLid9ID0gJ0NvbmZpZ3VyYcOnw6NvIHBhZHLDo28gcGFyYSBvIGhvcsOhcmlvIHNlbWFuYWwgbm9ybWFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXR1cyBmb3IgbmV3IGFjdGlvbnMuJ30gPSAnRXN0YWRvIHBhZHLDo28gcGFyYSBub3ZhcyBhw6fDtWVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXR1cyBmb3IgbmV3IHByb2plY3RzLid9ID0gJ0VzdGFkbyBwYWRyw6NvIHBhcmEgbm92b3MgcHJvamVjdG9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZhdWx0IHN0YXR1cyBmb3IgbmV3IHVzZXJzLid9ID0gJ0VzdGFkbyBwYWRyw6NvIHBhcmEgb3Mgbm92b3MgdXN1w6FyaW9zLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZWZpbmVzIGlmIHRpbWUgYWNjb3VudGluZyBtdXN0IGJlIHNldCB0byBhbGwgdGlja2V0cyBpbiBidWxrIGFjdGlvbi4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVmaW5lcyB0aGUgcHJvamVjdHMgZm9yIHdoaWNoIGEgcmVtYXJrIGlzIHJlcXVpcmVkLiBJZiB0aGUgUmVnRXhwIG1hdGNoZXMgb24gdGhlIHByb2plY3QsIHlvdSBoYXZlIHRvIGluc2VydCBhIHJlbWFyayB0b28uIFRoZSBSZWdFeHAgdXNlIHRoZSBzbXggcGFyYW1ldGVyLid9ID0gJ0RlbnRybyBkZXN0YSBvcMOnw6NvIGRlIGNvbmZpZ3VyYcOnw6NvLCB1bWEgcmVnZXhwIHBvZGUgc2VyIGRlZmluaWRhIHF1ZSBkZXRlcm1pbmEgcXVhaXMgcHJvamV0b3Mgc8OjbyByZWdpc3RyYWRvcyBjb20gdW1hIG9ic2VydmHDp8OjbyBkZXZlIHNlciAobyByZWdleHAgZnVuY2lvbmEgY29tIFNNWC1wYXLDom1ldHJvcykuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VkaXQgdGltZSBhY2NvdW50aW5nIHNldHRpbmdzJ30gPSAnRWRpdGFyIGRlZmluacOnw7VlcyBkZSBjb250cm9sZSBkZSB0ZW1wbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFZGl0IHRpbWUgcmVjb3JkJ30gPSAnRWRpdGFyIHJlZ2lzdHJvIGRlIHRlbXBvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZvciBob3cgbWFueSBkYXlzIGFnbyB5b3UgY2FuIGluc2VydCB3b3JraW5nIHVuaXRzLid9ID0gJ0RlZmluZS1zZSBxdWFuZG8gw6kgcG9zc8OtdmVsIGVkaXRhciBhcyBlbnRyYWRhcyBkZSB0ZW1wbyBlbSBpZG9zb3MgKHBvciBleGVtcGxvLCAxMCBkaWFzIGFudGVzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBlbmFibGVkLCB0aGUgZHJvcGRvd24gZWxlbWVudHMgaW4gdGhlIGVkaXQgc2NyZWVuIGFyZSBjaGFuZ2VkIHRvIGF1dG9jb21wbGV0aW9uIGZpZWxkcy4nfSA9ICdTZSBhdGl2YWRvLCBvcyBlbGVtZW50b3MgZGUgbGlzdGEgcGVuZGVudGUgbmEgdGVsYSBkZSBlZGnDp8OjbyBzw6NvIGFsdGVyYWRhcyBwYXJhIGNhbXBvcyBhdXRvY29tcGxldGFyLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJZiBlbmFibGVkLCB0aGUgdXNlciBpcyBhbGxvd2VkIHRvIGVudGVyICJvbiB2YWNhdGlvbiBsZWF2ZSIsICJvbiBzaWNrIGxlYXZlIiBhbmQgIm9uIG92ZXJ0aW1lIGxlYXZlIiB0byBtdWx0aXBsZSBkYXRlcyBhdCBvbmNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiB3b3JraW5nIGRheXMgYWZ0ZXIgd2hpY2ggdGhlIHdvcmtpbmcgdW5pdHMgaGF2ZSB0byBiZSBpbnNlcnRlZC4nfSA9ICdPIG7Dum1lcm8gbcOheGltbyBkZSBkaWFzIGRlIHRyYWJhbGhvIGFww7NzIG8gcXVhbCBhcyB1bmlkYWRlcyBkZSB0cmFiYWxobyBkZXZlbSBzZXIgaW5zZXJpZGFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXhpbXVtIG51bWJlciBvZiB3b3JraW5nIGRheXMgd2l0aG91dGggd29ya2luZyB1bml0cyBlbnRyeSBhZnRlciB3aGljaCBhIHdhcm5pbmcgd2lsbCBiZSBzaG93bi4nfSA9ICdPIG7Dum1lcm8gbcOheGltbyBkZSBkaWFzIGRlIHRyYWJhbGhvLCBzZW0gdW1hIGVudHJhZGEsIGFww7NzIG8gcXVhbCBzZXLDoSBleGliaWRvIHVtIGF2aXNvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0IHRpbWUgcmVwb3J0aW5nJ30gPSAnTyByZWxhdMOzcmlvIGRlIFRlbXBvIGRvIHByb2pldG8gJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIGNvbnN0cmFpbmluZyBhY3Rpb24gbGlzdCBhY2NvcmRpbmcgdG8gc2VsZWN0ZWQgcHJvamVjdC4gS2V5IGNvbnRhaW5zIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgcHJvamVjdChzKSwgY29udGVudCBjb250YWlucyByZWd1bGFyIGV4cHJlc3Npb25zIGZvciBhY3Rpb24ocykuJ30gPSAnRXhwcmVzc8O1ZXMgcmVndWxhcmVzIHBhcmEgcmVzdHJpbmdpciBhIGxpc3RhIGRlIGHDp8O1ZXMgZGUgYWNvcmRvIGNvbSBvIHByb2pldG8gc2VsZWNpb25hZG8uIEEgY2hhdmUgY29udMOpbSBhIGV4cHJlc3PDo28gcmVndWxhciBwYXJhIG8gcHJvamV0byhzKSwgbyBjb250ZcO6ZG8gY29udMOpbSBleHByZXNzw7VlcyByZWd1bGFyZXMgcGFyYSBhw6fDo28ow7VlcykuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIGNvbnN0cmFpbmluZyBwcm9qZWN0IGxpc3QgYWNjb3JkaW5nIHRvIHVzZXIgZ3JvdXBzLiBLZXkgY29udGFpbnMgcmVndWxhciBleHByZXNzaW9uIGZvciBwcm9qZWN0KHMpLCBjb250ZW50IGNvbnRhaW5zIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGdyb3Vwcy4nfSA9ICdFeHByZXNzw7VlcyByZWd1bGFyZXMgcGFyYSByZXN0cmluZ2lyIGEgbGlzdGEgZGUgcHJvamV0b3MgZGUgYWNvcmRvIGNvbSBncnVwb3MgZGUgdXN1w6FyaW9zLiBBIGNoYXZlIGNvbnTDqW0gYSBleHByZXNzw6NvIHJlZ3VsYXIgcGFyYSBvKHMpIHByb2pldG8ocyksIG8gY29udGXDumRvIGNvbnTDqW0gYSBsaXN0YSBkZSBncnVwb3Mgc2VwYXJhZG9zIHBvciB2w61yZ3VsYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdmVzIHRoZSBsb2dpbiBhbmQgcGFzc3dvcmQgb24gdGhlIHNlc3Npb24gdGFibGUgaW4gdGhlIGRhdGFiYXNlLCBpZiAiREIiIHdhcyBzZWxlY3RlZCBmb3IgU2Vzc2lvbk1vZHVsZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2hvdyBhcnRpY2xlIGFzIHJpY2ggdGV4dCBldmVuIGlmIHJpY2ggdGV4dCB3cml0aW5nIGlzIGRpc2FibGVkLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTcGVjaWZpZXMgaWYgd29ya2luZyBob3VycyBjYW4gYmUgaW5zZXJ0ZWQgd2l0aG91dCBzdGFydCBhbmQgZW5kIHRpbWVzLid9ID0gJ0VzcGVjaWZpY2Egc2UgYXMgaG9yYXMgZGUgdHJhYmFsaG8gcG9kZW0gc2VyIGludHJvZHV6aWRhcyBzZW0gaG9yw6FyaW9zIGRlIGluw61jaW8gZSBmaW0uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgbW9kdWxlIGZvcmNlcyBpbnNlcnRzIGluIFRpbWVBY2NvdW50aW5nLid9ID0gJ0VzdGUgbcOzZHVsbyBvYnJpZ2EgaW5zZXLDp8O1ZXMgbmEgQ29udGFiaWxpemHDp8OjbyBkZSBUZW1wby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBub3RpZmljYXRpb24gbW9kdWxlIGdpdmVzIGEgd2FybmluZyBpZiB0aGVyZSBhcmUgdG9vIG1hbnkgaW5jb21wbGV0ZSB3b3JraW5nIGRheXMuJ30gPSAnRXN0ZSBtw7NkdWxvIGRlIG5vdGlmaWNhw6fDo28gZMOhIHVtIGF2aXNvIHNlIGhvdXZlciBtdWl0b3MgZGlhcyDDunRlaXMgaW5jb21wbGV0b3MuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RpbWUgYWNjb3VudGluZy4nfSA9ICdDb250YWJpbGlkYWRlIGRlIFRlbXBvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUbyB1c2UgaWYgc29tZSBhY3Rpb25zIHJlZHVjZWQgdGhlIHdvcmtpbmcgaG91cnMgKGZvciBleGFtcGxlLCBpZiBvbmx5IGhhbGYgb2YgdGhlIHRyYXZlbGluZyB0aW1lIGlzIHBhaWQgS2V5ID0+IHRyYXZlbGluZzsgQ29udGVudCA9PiA1MCkuJ30gPSAnUGFyYSB1c2FyIHNlIGFsZ3VtYSBhw6fDtWVzIHJlZHV6aXJhbSBhcyBob3JhcyDDunRlaXMgKHBvciBleGVtcGxvLCBzZSBhcGVuYXMgbWV0YWRlIGRvIHRlbXBvIGRlIHZpYWdlbSDDqSBwYWdvLCBDaGF2ZSA9PiBWaWFnZW07IENvbnRlw7pkbyA9PiA1MCkuJzsKCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb24nfSA9ICdTZWcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHVlJ30gPSAnVGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dlZCd9ID0gJ1F1YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaHUnfSA9ICdRdWknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJpJ30gPSAnU2V4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NhdCd9ID0gJ1PDoWInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VuJ30gPSAnRG9tJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0phbnVhcnknfSA9ICdKYW5laXJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZlYnJ1YXJ5J30gPSAnRmV2ZXJlaXJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hcmNoJ30gPSAnTWFyw6dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcmlsJ30gPSAnQWJyaWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWF5J30gPSAnTWFpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKdW5lJ30gPSAnSnVuaG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSnVseSd9ID0gJ0p1bGhvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F1Z3VzdCd9ID0gJ0Fnb3N0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXB0ZW1iZXInfSA9ICdTZXRlbWJybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPY3RvYmVyJ30gPSAnT3V0dWJybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3ZlbWJlcid9ID0gJ05vdmVtYnJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlY2VtYmVyJ30gPSAnRGV6ZW1icm8nOwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Nob3cgYWxsIHByb2plY3RzJ30gPSAnTW9zdHJhciB0b2RvcyBvcyBwcm9qZXRvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IHZhbGlkIHByb2plY3RzJ30gPSAnTW9zdHJhciBwcm9qZXRvcyB2w6FsaWRvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaW1lQWNjb3VudGluZyd9ID0gJ0NvbnRhYmlsaXphw6fDo28gZGUgVGVtcG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQWN0aW9ucyd9ID0gJ0HDp8O1ZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVXNlciB1cGRhdGVkISd9ID0gJ1VzdcOhcmlvIGF0dWFsaXphZG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VzZXIgYWRkZWQhJ30gPSAnVXN1w6FyaW8gYWRpY2lvbmFkbyEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCBhZGRlZCEnfSA9ICdQcm9qZXRvIGFkaWNpb25hZG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QgdXBkYXRlZCEnfSA9ICdQcm9qZXRvIGF0dWFsaXphZG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rhc2sgYWRkZWQhJ30gPSAnVGFyZWZhIGFkaWNpb25hZGEhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Rhc2sgdXBkYXRlZCEnfSA9ICdUYXJlZmEgYXR1YWxpemFkYSEnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2FuXCd0IGRlbGV0ZSBXb3JraW5nIFVuaXRzISd9ID0gJ07Do28gw6kgcG9zc8OtdmVsIGV4Y2x1aXIgVW5pZGFkZXMgZGUgVHJhYmFsaG8hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NhblwndCBzYXZlIHNldHRpbmdzLCBiZWNhdXNlIGEgZGF5IGhhcyBvbmx5IDI0IGhvdXJzISd9ID0gJ1VtIGRpYSBzw7MgdGVtIDI0IGhvcmFzISc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQbGVhc2UgaW5zZXJ0IHlvdXIgd29ya2luZyBob3VycyEnfSA9ICdJbmZvcm1lIHN1YXMgaG9yYXMgdHJhYmFsaGFkYXMhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ1JlcG9ydGFuZG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU3VjY2Vzc2Z1bCBpbnNlcnQhJ30gPSAnU3VjZXNzbyBuYSBpbnNlcsOnw6NvISc7Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudFRpbWVBY2NvdW50aW5nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpUaW1lQWNjb3VudGluZzsKdXNlIEtlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW07CnVzZSBEYXRlOjpQY2FsYyBxdyhUb2RheSBEYXlzX2luX01vbnRoIERheV9vZl9XZWVrIEFkZF9EZWx0YV9ZTUQgY2hlY2tfZGF0ZSk7CnVzZSBUaW1lOjpMb2NhbDsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgT2JqZWN0cwogICAgZm9yIG15ICROZWVkZWQgKAogICAgICAgIHF3KFBhcmFtT2JqZWN0IERCT2JqZWN0IE1vZHVsZVJlZyBMb2dPYmplY3QgVXNlck9iamVjdAogICAgICAgIENvbmZpZ09iamVjdCBUaWNrZXRPYmplY3QgVGltZU9iamVjdCBHcm91cE9iamVjdCkKICAgICAgICApCiAgICB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICJHb3Qgbm8gJE5lZWRlZCEiICkgaWYgISRTZWxmLT57JE5lZWRlZH07CiAgICB9CgogICAgIyBjcmVhdGUgcmVxdWlyZWQgb2JqZWN0cy4uLgogICAgJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6VGltZUFjY291bnRpbmctPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntDaGVja0l0ZW1PYmplY3R9ICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6Q2hlY2tJdGVtLT5uZXcoJVBhcmFtKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBQcmVSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHBlcm1pc3Npb24gY2hlY2sKICAgIHJldHVybiAxIGlmICEkU2VsZi0+e0FjY2Vzc1JvfTsKCiAgICBteSAoICRTZWMsICRNaW4sICRIb3VyLCAkRGF5LCAkTW9udGgsICRZZWFyICkKICAgICAgICA9ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUyRGF0ZSggU3lzdGVtVGltZSA9PiAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lKCkgKTsKCiAgICBteSAlVXNlciA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Vc2VyQ3VycmVudFBlcmlvZEdldCgKICAgICAgICBZZWFyICA9PiAkWWVhciwKICAgICAgICBNb250aCA9PiAkTW9udGgsCiAgICAgICAgRGF5ICAgPT4gJERheSwKICAgICk7CgogICAgcmV0dXJuIGlmICEkVXNlcnsgJFNlbGYtPntVc2VySUR9IH07CgogICAgbXkgJUluY29tcGxldGVXb3JraW5nRGF5cyA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Xb3JraW5nVW5pdHNDb21wbGV0bmVzc0NoZWNrKCk7CgogICAgIyByZWRpcmVjdCBpZiBpbmNvbXBsZXRlIHdvcmtpbmcgZGF5IGFyZSBvdXQgb2YgcmFuZ2UKICAgIGlmICgKICAgICAgICAkSW5jb21wbGV0ZVdvcmtpbmdEYXlze0VuZm9yY2VJbnNlcnR9CiAgICAgICAgJiYgJFNlbGYtPntBY3Rpb259IG5lICdBZ2VudFRpbWVBY2NvdW50aW5nJwogICAgICAgICYmICRTZWxmLT57QWN0aW9ufSBuZSAnQWdlbnRDYWxlbmRhclNtYWxsJwogICAgICAgICkKICAgIHsKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCgKICAgICAgICAgICAgT1AgPT4gJ0FjdGlvbj1BZ2VudFRpbWVBY2NvdW50aW5nO1N1YmFjdGlvbj1FZGl0JwogICAgICAgICk7CiAgICB9CiAgICByZXR1cm47Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSBATW9udGhBcnJheSA9ICgKICAgICAgICAnJywgICAgICdKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgICAgICdBcHJpbCcsICAgJ01heScsCiAgICAgICAgJ0p1bmUnLCAnSnVseScsICAgICdBdWd1c3QnLCAgICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsCiAgICAgICAgJ0RlY2VtYmVyJywKICAgICk7CiAgICBteSBAV2Vla2RheUFycmF5ID0gKCAnTW9uJywgJ1R1ZScsICdXZWQnLCAnVGh1JywgJ0ZyaScsICdTYXQnLCAnU3VuJywgKTsKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBzaG93IGNvbmZpcm1hdGlvbiBkaWFsb2cgdG8gZGVsZXRlIHRoZSBlbnRyeSBvZiB0aGlzIGRheQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGlmICggJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnRGVsZXRlRGF5JyApICkgewoKICAgICAgICBteSAoICRTZWMsICRNaW4sICRIb3VyLCAkRGF5LCAkTW9udGgsICRZZWFyICkgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgICAgIFN5c3RlbVRpbWUgPT4gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZSgpLAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHBhcmFtcwogICAgICAgIGZvciBteSAkUGFyYW1ldGVyIChxdyhTdGF0dXMgWWVhciBNb250aCBEYXkpKSB7CiAgICAgICAgICAgICRQYXJhbXskUGFyYW1ldGVyfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtZXRlciApOwogICAgICAgIH0KCiAgICAgICAgIyBDaGVjayBEYXRlCiAgICAgICAgaWYgKCAhJFBhcmFte1llYXJ9IHx8ICEkUGFyYW17TW9udGh9IHx8ICEkUGFyYW17RGF5fSApIHsKICAgICAgICAgICAgJFBhcmFte1llYXJ9ICA9ICRZZWFyOwogICAgICAgICAgICAkUGFyYW17TW9udGh9ID0gJE1vbnRoOwogICAgICAgICAgICAkUGFyYW17RGF5fSAgID0gJERheTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRQYXJhbXtZZWFyfSAgPSBzcHJpbnRmKCAiJTAyZCIsICRQYXJhbXtZZWFyfSApOwogICAgICAgICAgICAkUGFyYW17TW9udGh9ID0gc3ByaW50ZiggIiUwMmQiLCAkUGFyYW17TW9udGh9ICk7CiAgICAgICAgICAgICRQYXJhbXtEYXl9ICAgPSBzcHJpbnRmKCAiJTAyZCIsICRQYXJhbXtEYXl9ICk7CiAgICAgICAgfQoKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiB7JVBhcmFtfSwKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudFRpbWVBY2NvdW50aW5nRGVsZXRlJywKICAgICAgICApOwoKICAgICAgICAjIGJ1aWxkIHRoZSByZXR1cm5lZCBkYXRhIHN0cnVjdHVyZQogICAgICAgIG15ICVEYXRhID0gKAogICAgICAgICAgICBIVE1MICAgICAgID0+ICRPdXRwdXQsCiAgICAgICAgICAgIERpYWxvZ1R5cGUgPT4gJ0NvbmZpcm1hdGlvbicsCiAgICAgICAgKTsKCiAgICAgICAgIyByZXR1cm4gSlNPTi1TdHJpbmcgYmVjYXVzZSBvZiBBSkFYLU1vZGUKICAgICAgICBteSAkT3V0cHV0SlNPTiA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SlNPTkVuY29kZSggRGF0YSA9PiBcJURhdGEgKTsKCiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXR0YWNobWVudCgKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9JyAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0NoYXJzZXR9LAogICAgICAgICAgICBDb250ZW50ICAgICA9PiAkT3V0cHV0SlNPTiwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2lubGluZScsCiAgICAgICAgICAgIE5vQ2FjaGUgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGV4cHJlc3Npb24gYWRkIHRpbWUgcGVyaW9kIHdhcyBwcmVzc2VkCiAgICBlbHNpZiAoCiAgICAgICAgJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnQWRkUGVyaW9kJyApCiAgICAgICAgfHwgJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnU3VibWl0VXNlckRhdGEnICkKICAgICAgICApCiAgICB7CiAgICAgICAgbXkgJUdldFBhcmFtID0gKCk7CgogICAgICAgICRHZXRQYXJhbXtVc2VySUR9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnVXNlcklEJyApOwogICAgICAgIG15ICRQZXJpb2RzID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPlVzZXJMYXN0UGVyaW9kTnVtYmVyR2V0KCBVc2VySUQgPT4gJEdldFBhcmFte1VzZXJJRH0gKTsKCiAgICAgICAgIyBjaGVjayB2YWxpZGl0eSBvZiBwZXJpb2RzCiAgICAgICAgbXkgJUVycm9ycyA9ICRTZWxmLT5fQ2hlY2tWYWxpZGl0eVVzZXJQZXJpb2RzKCBQZXJpb2QgPT4gJFBlcmlvZHMgKTsKCiAgICAgICAgIyBpZiB0aGUgcGVyaW9kIGRhdGEgaXMgb2sKICAgICAgICBpZiAoICElRXJyb3JzICkgewoKICAgICAgICAgICAgIyBnZXQgYWxsIHBhcmFtZXRlcnMKICAgICAgICAgICAgZm9yIG15ICRQYXJhbWV0ZXIgKHF3KFN1YmFjdGlvbiBEZXNjcmlwdGlvbiBDYWxlbmRhcikpIHsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1ldGVyfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtZXRlciApOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvciBteSAkUGFyYW1ldGVyIChxdyhTaG93T3ZlcnRpbWUgQ3JlYXRlUHJvamVjdCkpIHsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1ldGVyfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtZXRlciApIHx8IDA7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICRQZXJpb2QgPSAxOwogICAgICAgICAgICBteSAlUGVyaW9kRGF0YTsKCiAgICAgICAgICAgIG15ICVVc2VyRGF0YSA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5TaW5nbGVVc2VyU2V0dGluZ3NHZXQoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJEdldFBhcmFte1VzZXJJRH0KICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IHBhcmFtZXRlcnMgZm9yIGFsbCByZWdpc3RlcmVkIHBlcmlvZHMKICAgICAgICAgICAgd2hpbGUgKCAkVXNlckRhdGF7JFBlcmlvZH0gKSB7CiAgICAgICAgICAgICAgICBmb3IgbXkgJFBhcmFtZXRlciAocXcoV2Vla2x5SG91cnMgT3ZlcnRpbWUgRGF0ZVN0YXJ0IERhdGVFbmQgTGVhdmVEYXlzKSkgewogICAgICAgICAgICAgICAgICAgICRQZXJpb2REYXRheyRQZXJpb2R9eyRQYXJhbWV0ZXJ9CiAgICAgICAgICAgICAgICAgICAgICAgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW1ldGVyIC4gIlskUGVyaW9kXSIgKQogICAgICAgICAgICAgICAgICAgICAgICB8fCAkVXNlckRhdGF7JFBlcmlvZH17JFBhcmFtZXRlcn07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkUGVyaW9kRGF0YXskUGVyaW9kfXtVc2VyU3RhdHVzfQogICAgICAgICAgICAgICAgICAgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiUGVyaW9kU3RhdHVzWyRQZXJpb2RdIiApIHx8IDA7CiAgICAgICAgICAgICAgICAkUGVyaW9kKys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJEdldFBhcmFte1BlcmlvZH0gPSBcJVBlcmlvZERhdGE7CgogICAgICAgICAgICAjIHVwZGF0ZSBwZXJpb2RzCiAgICAgICAgICAgIGlmICggISRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Vc2VyU2V0dGluZ3NVcGRhdGUoJUdldFBhcmFtKSApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ1VuYWJsZSB0byB1cGRhdGUgdXNlciBzZXR0aW5ncyEgUGxlYXNlIGNvbnRhY3QgeW91ciBhZG1pbmlzdHJhdG9yLicKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdBZGRQZXJpb2QnICkgKSB7CgogICAgICAgICAgICAgICAgIyBzaG93IHRoZSBlZGl0IHRpbWUgc2V0dGllbmdzIGFnYWluLCBidXQgbm93IHdpdGggYSBuZXcgZW1wdHkgdGltZSBwZXJpb2QgbGluZQogICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICAgICAgT1AgPT4KICAgICAgICAgICAgICAgICAgICAgICAgIkFjdGlvbj1BZ2VudFRpbWVBY2NvdW50aW5nO1N1YmFjdGlvbj0kR2V0UGFyYW17U3ViYWN0aW9ufTtVc2VySUQ9JEdldFBhcmFte1VzZXJJRH07IgogICAgICAgICAgICAgICAgICAgICAgICAuICJOZXdUaW1lUGVyaW9kPTEiLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIHNob3cgdGhlIG92ZXJ2aWV3IG9mIHRhc2tzIGFuZCB1c2VycwogICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICAgICAgT1AgPT4gIkFjdGlvbj1BZ2VudFRpbWVBY2NvdW50aW5nO1N1YmFjdGlvbj1TZXR0aW5nO1VzZXI9JFNlbGYtPntTdWJhY3Rpb259IiwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgZWRpdCB0aGUgdGltZSBhY2NvdW50aW5nIGVsZW1lbnRzCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0VkaXQnICkgewoKICAgICAgICAjIHBlcm1pc3Npb24gY2hlY2sKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob1Blcm1pc3Npb24oIFdpdGhIZWFkZXIgPT4gJ3llcycgKSBpZiAhJFNlbGYtPntBY2Nlc3NSb307CgogICAgICAgIG15ICVGcm9udGVuZCAgID0gKCk7CiAgICAgICAgbXkgJURhdGEgICAgICAgPSAoKTsKICAgICAgICBteSAlQWN0aW9uTGlzdCA9ICRTZWxmLT5fQWN0aW9uTGlzdCgpOwogICAgICAgIG15ICggJFNlYywgJE1pbiwgJEhvdXIsICREYXksICRNb250aCwgJFllYXIgKSA9ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUyRGF0ZSgKICAgICAgICAgICAgU3lzdGVtVGltZSA9PiAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lKCksCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgZm9yIG15ICRQYXJhbWV0ZXIgKHF3KFN0YXR1cyBZZWFyIE1vbnRoIERheSBOb3RpZmljYXRpb24pKSB7CiAgICAgICAgICAgICRQYXJhbXskUGFyYW1ldGVyfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtZXRlciApIHx8ICcnOwogICAgICAgIH0KICAgICAgICAkUGFyYW17UmVjb3Jkc051bWJlcn0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdSZWNvcmRzTnVtYmVyJyApIHx8IDg7CiAgICAgICAgJFBhcmFte0luc2VydFdvcmtpbmdVbml0c30gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdJbnNlcnRXb3JraW5nVW5pdHMnICk7CgogICAgICAgICMgQ2hlY2sgRGF0ZQogICAgICAgIGlmICggISRQYXJhbXtZZWFyfSB8fCAhJFBhcmFte01vbnRofSB8fCAhJFBhcmFte0RheX0gKSB7CiAgICAgICAgICAgICRQYXJhbXtZZWFyfSAgPSAkWWVhcjsKICAgICAgICAgICAgJFBhcmFte01vbnRofSA9ICRNb250aDsKICAgICAgICAgICAgJFBhcmFte0RheX0gICA9ICREYXk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkUGFyYW17WWVhcn0gID0gc3ByaW50ZiggIiUwMmQiLCAkUGFyYW17WWVhcn0gKTsKICAgICAgICAgICAgJFBhcmFte01vbnRofSA9IHNwcmludGYoICIlMDJkIiwgJFBhcmFte01vbnRofSApOwogICAgICAgICAgICAkUGFyYW17RGF5fSAgID0gc3ByaW50ZiggIiUwMmQiLCAkUGFyYW17RGF5fSApOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBpZiB0aGUgZ2l2ZW4gZGF0ZSBpcyBhIHZhbGlkIGRhdGUKICAgICAgICAjIGlmIG5vdCB2YWxpZCwgc2V0IHRoZSBkYXRlIHRvIHRvZGF5CiAgICAgICAgaWYgKCAhY2hlY2tfZGF0ZSggJFBhcmFte1llYXJ9LCAkUGFyYW17TW9udGh9LCAkUGFyYW17RGF5fSApICkgewogICAgICAgICAgICAkUGFyYW17WWVhcn0gICAgICAgID0gJFllYXI7CiAgICAgICAgICAgICRQYXJhbXtNb250aH0gICAgICAgPSAkTW9udGg7CiAgICAgICAgICAgICRQYXJhbXtEYXl9ICAgICAgICAgPSAkRGF5OwogICAgICAgICAgICAkUGFyYW17J1dyb25nRGF0ZSd9ID0gMTsKICAgICAgICB9CgogICAgICAgIG15ICVVc2VyID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPlVzZXJDdXJyZW50UGVyaW9kR2V0KAogICAgICAgICAgICBZZWFyICA9PiAkUGFyYW17WWVhcn0sCiAgICAgICAgICAgIE1vbnRoID0+ICRQYXJhbXtNb250aH0sCiAgICAgICAgICAgIERheSAgID0+ICRQYXJhbXtEYXl9LAogICAgICAgICk7CgogICAgICAgICMgZm9yIGluaXRpYWwgdXNlLCB0aGUgZmlyc3QgYWdlbnQgd2l0aCBydy1yaWdodCB3aWxsIGJlIHJlZGlyZWN0ZWQKICAgICAgICAjIHRvICdTZXR0aW5nJywgc28gaGUgY2FuIGRvIHRoZSBpbml0aWFsIHNldHRpbmdzCiAgICAgICAgaWYgKCAhJFVzZXJ7ICRTZWxmLT57VXNlcklEfSB9ICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPl9GaXJzdFVzZXJSZWRpcmVjdCgpOwogICAgICAgIH0KCiAgICAgICAgbXkgJUluY29tcGxldGVXb3JraW5nRGF5cyA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Xb3JraW5nVW5pdHNDb21wbGV0bmVzc0NoZWNrKCk7CiAgICAgICAgbXkgJE1heEFsbG93ZWRJbnNlcnREYXlzID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1RpbWVBY2NvdW50aW5nOjpNYXhBbGxvd2VkSW5zZXJ0RGF5cycpIHx8ICcxMCc7CiAgICAgICAgKCAkUGFyYW17WWVhckFsbG93ZWR9LCAkUGFyYW17TW9udGhBbGxvd2VkfSwgJFBhcmFte0RheUFsbG93ZWR9ICkKICAgICAgICAgICAgPSBBZGRfRGVsdGFfWU1EKCAkWWVhciwgJE1vbnRoLCAkRGF5LCAwLCAwLCAtJE1heEFsbG93ZWRJbnNlcnREYXlzICk7CiAgICAgICAgaWYgKAogICAgICAgICAgICB0aW1lbG9jYWwoIDEsIDAsIDAsICRQYXJhbXtEYXl9LCAkUGFyYW17TW9udGh9IC0gMSwgJFBhcmFte1llYXJ9IC0gMTkwMCApIDwgdGltZWxvY2FsKAogICAgICAgICAgICAgICAgMSwgMCwgMCwgJFBhcmFte0RheUFsbG93ZWR9LAogICAgICAgICAgICAgICAgJFBhcmFte01vbnRoQWxsb3dlZH0gLSAxLAogICAgICAgICAgICAgICAgJFBhcmFte1llYXJBbGxvd2VkfSAtIDE5MDAKICAgICAgICAgICAgKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAhJEluY29tcGxldGVXb3JraW5nRGF5c3tJbmNvbXBsZXRlfXsgJFBhcmFte1llYXJ9IH17ICRQYXJhbXtNb250aH0gfQogICAgICAgICAgICAgICAgeyAkUGFyYW17RGF5fSB9CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KAogICAgICAgICAgICAgICAgICAgIE9QID0+CiAgICAgICAgICAgICAgICAgICAgICAgICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1WaWV3O1llYXI9JFBhcmFte1llYXJ9O01vbnRoPSRQYXJhbXtNb250aH07RGF5PSRQYXJhbXtEYXl9IgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBzdG9yZSBsYXN0IHNjcmVlbgogICAgICAgICRTZWxmLT57U2Vzc2lvbk9iamVjdH0tPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICAgICAgS2V5ICAgICAgID0+ICdMYXN0U2NyZWVuJywKICAgICAgICAgICAgVmFsdWUgPT4KICAgICAgICAgICAgICAgICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1FZGl0O1llYXI9JFBhcmFte1llYXJ9O01vbnRoPSRQYXJhbXtNb250aH07RGF5PSRQYXJhbXtEYXl9IiwKICAgICAgICApOwoKICAgICAgICAkUGFyYW17TW9udGhfdG9fVGV4dH0gPSAkTW9udGhBcnJheVsgJFBhcmFte01vbnRofSBdOwoKICAgICAgICAoICRQYXJhbXtZZWFyQmFja30sICRQYXJhbXtNb250aEJhY2t9LCAkUGFyYW17RGF5QmFja30gKQogICAgICAgICAgICA9IEFkZF9EZWx0YV9ZTUQoICRQYXJhbXtZZWFyfSwgJFBhcmFte01vbnRofSwgJFBhcmFte0RheX0sIDAsIDAsIC0xICk7CiAgICAgICAgKCAkUGFyYW17WWVhck5leHR9LCAkUGFyYW17TW9udGhOZXh0fSwgJFBhcmFte0RheU5leHR9ICkKICAgICAgICAgICAgPSBBZGRfRGVsdGFfWU1EKCAkUGFyYW17WWVhcn0sICRQYXJhbXtNb250aH0sICRQYXJhbXtEYXl9LCAwLCAwLCAxICk7CgogICAgICAgIG15ICRSZWR1Y2VUaW1lUmVmID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1RpbWVBY2NvdW50aW5nOjpSZWR1Y2VUaW1lJyk7CgogICAgICAgICMgaGFzaGVzIHRvIHN0b3JlIHNlcnZlciBzaWRlIGVycm9ycwogICAgICAgIG15ICVFcnJvcnMgICAgICAgICAgPSAoKTsKICAgICAgICBteSAlU2VydmVyRXJyb3JEYXRhID0gKCk7CiAgICAgICAgbXkgJEVycm9ySW5kZXggICAgICA9IDE7CgogICAgICAgICMgRWRpdCBXb3JraW5nIFVuaXRzCiAgICAgICAgaWYgKCAkUGFyYW17U3RhdHVzfSApIHsKCiAgICAgICAgICAgICMgYXJyYXlzIHRvIHNhdmUgYWxsIHN0YXJ0IGFuZCBlbmQgdGltZXMgZm9yIHNvbWUgY2hlY2tzCiAgICAgICAgICAgIG15ICggQFN0YXJ0VGltZXMsIEBFbmRUaW1lcyApOwoKICAgICAgICAgICAgIyBkZWxldGUgcHJldmlvdXMgZW50cmllcyBmb3IgdGhpcyBkYXkgYW5kIHVzZXIKICAgICAgICAgICAgJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPldvcmtpbmdVbml0c0RlbGV0ZSgKICAgICAgICAgICAgICAgIFllYXIgID0+ICRQYXJhbXtZZWFyfSwKICAgICAgICAgICAgICAgIE1vbnRoID0+ICRQYXJhbXtNb250aH0sCiAgICAgICAgICAgICAgICBEYXkgICA9PiAkUGFyYW17RGF5fSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIG15ICVDaGVja2JveENoZWNrID0gKCk7CiAgICAgICAgICAgIGZvciBteSAkRWxlbWVudCAocXcoTGVhdmVEYXkgU2ljayBPdmVydGltZSkpIHsKICAgICAgICAgICAgICAgIG15ICRWYWx1ZSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJEVsZW1lbnQgKTsKICAgICAgICAgICAgICAgIGlmICgkVmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAkQ2hlY2tib3hDaGVja3skRWxlbWVudH0gPSAxOwogICAgICAgICAgICAgICAgICAgICRQYXJhbXskRWxlbWVudH0gICAgICAgICA9ICdjaGVja2VkPSJjaGVja2VkIic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkUGFyYW17JEVsZW1lbnR9ID0gJycKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBpZiBtb3JlIHRoYW4gb25lIGNoZWNrIGJveCB3YXMgY2hlY2tlZCBpdCBpcyBhIHNlcnZlciBlcnJvcgogICAgICAgICAgICBpZiAoIHNjYWxhciBrZXlzICVDaGVja2JveENoZWNrID4gMSApIHsKICAgICAgICAgICAgICAgIGZvciBteSAkQ2hlY2tib3ggKCBzb3J0IGtleXMgJUNoZWNrYm94Q2hlY2sgKSB7CiAgICAgICAgICAgICAgICAgICAgJEVycm9yc3sgJENoZWNrYm94IC4gJ0ludmFsaWQnIH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICMgaW5zZXJ0IHZhbHVlcyAoaWYgYW55KQogICAgICAgICAgICAgICAgaWYgKCBzY2FsYXIga2V5cyAlQ2hlY2tib3hDaGVjayA+IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAhJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPldvcmtpbmdVbml0c0luc2VydCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFllYXIgICAgID0+ICRQYXJhbXtZZWFyfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vbnRoICAgID0+ICRQYXJhbXtNb250aH0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXkgICAgICA9PiAkUGFyYW17RGF5fSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlYXZlRGF5ID0+ICRDaGVja2JveENoZWNre0xlYXZlRGF5fSB8fCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU2ljayAgICAgPT4gJENoZWNrYm94Q2hlY2t7U2lja30gfHwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE92ZXJ0aW1lID0+ICRDaGVja2JveENoZWNre092ZXJ0aW1lfSB8fCAwLAogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAnQ2FuXCd0IGluc2VydCBXb3JraW5nIFVuaXRzIScKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJFBhcmFte1N1Y2Nlc3NmdWxJbnNlcnR9ID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgSUQ6CiAgICAgICAgICAgIGZvciBteSAkSUQgKCAxIC4uICRQYXJhbXtSZWNvcmRzTnVtYmVyfSApIHsKCiAgICAgICAgICAgICAgICAjIGFycmF5cyB0byBzYXZlIHRoZSBzZXJ2ZXIgZXJyb3JzIGJsb2NrIHRvIHNob3cgdGhlIGVycm9yIG1zZ3MKICAgICAgICAgICAgICAgIG15ICggQFN0YXJ0VGltZVNlcnZlckVycm9yQmxvY2ssIEBFbmRUaW1lU2VydmVyRXJyb3JCbG9jaywgQFBlcmlvZFNlcnZlckVycm9yQmxvY2sgKSA9ICgpOwoKICAgICAgICAgICAgICAgIGZvciBteSAkUGFyYW1ldGVyIChxdyhQcm9qZWN0SUQgQWN0aW9uSUQgUmVtYXJrIFN0YXJ0VGltZSBFbmRUaW1lIFBlcmlvZCkpIHsKICAgICAgICAgICAgICAgICAgICAkUGFyYW17JFBhcmFtZXRlcn0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbWV0ZXIgLiAnWycgLiAkSUQgLiAnXScgKTsKICAgICAgICAgICAgICAgICAgICBpZiAoICRQYXJhbXskUGFyYW1ldGVyfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJFBhcmFtUmVmID0gXCRQYXJhbXskUGFyYW1ldGVyfTsKCiAgICAgICAgICAgICAgICAgICAgICAgICMgZGVsZXRlIGxlYWRpbmcgYW5kIHRhaWxpbmcgc3BhY2VzCiAgICAgICAgICAgICAgICAgICAgICAgICRQYXJhbVJlZiA9ICRTZWxmLT57Q2hlY2tJdGVtT2JqZWN0fS0+U3RyaW5nQ2xlYW4oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmdSZWYgPT4gJFBhcmFtUmVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJpbUxlZnQgID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmltUmlnaHQgPT4gMSwKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbmV4dCBJRCBpZiAhJFBhcmFte1Byb2plY3RJRH0gJiYgISRQYXJhbXtBY3Rpb25JRH07CgogICAgICAgICAgICAgICAgIyBjaGVjayBmb3IgbWlzc2luZyB2YWx1ZXMKICAgICAgICAgICAgICAgIGlmICggJFBhcmFte1Byb2plY3RJRH0gJiYgISRQYXJhbXtBY3Rpb25JRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJEVycm9yc3skRXJyb3JJbmRleH17QWN0aW9uSURJbnZhbGlkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoICEkUGFyYW17UHJvamVjdElEfSAmJiAkUGFyYW17QWN0aW9uSUR9ICkgewogICAgICAgICAgICAgICAgICAgICRFcnJvcnN7JEVycm9ySW5kZXh9e1Byb2plY3RJREludmFsaWR9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGNyZWF0ZSBhIHZhbGlkIHBlcmlvZAogICAgICAgICAgICAgICAgbXkgJFBlcmlvZCA9ICRQYXJhbXtQZXJpb2R9OwogICAgICAgICAgICAgICAgaWYgKCAkUGVyaW9kID1+IC9eKFxkKyksKFxkKykvICkgewogICAgICAgICAgICAgICAgICAgICRQZXJpb2QgPSAkMSAuICIuIiAuICQyOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICNhbGxvdyBmb3JtYXQgaGg6bW0KICAgICAgICAgICAgICAgIGVsc2lmICggJFBhcmFte1BlcmlvZH0gPX4gL14oXGQrKTooXGQrKS8gKSB7CiAgICAgICAgICAgICAgICAgICAgJFBlcmlvZCA9ICQxICsgJDIgLyA2MDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGlmIHN0YXJ0IG9yIGVuZCB0aW1lcyBhcmUgbWlzc2luZywgZGVsZXRlIHRoZSBvdGhlciBlbnRyeQogICAgICAgICAgICAgICAgaWYgKCAhJFBhcmFte1N0YXJ0VGltZX0gfHwgISRQYXJhbXtFbmRUaW1lfSApIHsKICAgICAgICAgICAgICAgICAgICAkUGFyYW17U3RhcnRUaW1lfSA9ICcnOwogICAgICAgICAgICAgICAgICAgICRQYXJhbXtFbmRUaW1lfSAgID0gJyc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBhZGQgJzowMCcgdG8gdGhlIHRpbWUsIGlmIGl0IGRvZXNuJ3QgaGF2ZSBpdCB5ZXQKICAgICAgICAgICAgICAgIGlmICggJFBhcmFte1N0YXJ0VGltZX0gJiYgJFBhcmFte1N0YXJ0VGltZX0gIX4gL14oXGQrKTooXGQrKSQvICkgewogICAgICAgICAgICAgICAgICAgICRQYXJhbXtTdGFydFRpbWV9IC49ICc6MDAnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCAkUGFyYW17RW5kVGltZX0gJiYgJFBhcmFte0VuZFRpbWV9ICF+IC9eKFxkKyk6KFxkKykkLyApIHsKICAgICAgICAgICAgICAgICAgICAkUGFyYW17RW5kVGltZX0gLj0gJzowMCc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgKCAkUGFyYW17U3RhcnRUaW1lfSA9fiAvXihcZCspOihcZCspJC8gKQogICAgICAgICAgICAgICAgICAgICYmICggJFBhcmFte0VuZFRpbWV9ID1+IC9eKFxkKyk6KFxkKykkLyApCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRQYXJhbXtTdGFydFRpbWV9ID1+IC9eKFxkKyk6KFxkKykkLzsKICAgICAgICAgICAgICAgICAgICBteSAkU3RhcnRUaW1lID0gJDEgKiA2MCArICQyOwogICAgICAgICAgICAgICAgICAgICRQYXJhbXtFbmRUaW1lfSA9fiAvXihcZCspOihcZCspJC87CiAgICAgICAgICAgICAgICAgICAgbXkgJEVuZFRpbWUgPSAkMSAqIDYwICsgJDI7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkUmVkdWNlVGltZVJlZi0+eyAkQWN0aW9uTGlzdHsgJFBhcmFte0FjdGlvbklEfSB9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRQZXJpb2QgPSAoICRFbmRUaW1lIC0gJFN0YXJ0VGltZSApIC8gNjAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICogJFJlZHVjZVRpbWVSZWYtPnsgJEFjdGlvbkxpc3R7ICRQYXJhbXtBY3Rpb25JRH0gfSB9IC8gMTAwOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFBlcmlvZCA9ICggJEVuZFRpbWUgLSAkU3RhcnRUaW1lICkgLyA2MDsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgZW5kIHRpbWUgbXVzdCBiZSBhZnRlciBzdGFydCB0aW1lCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkRW5kVGltZSA8PSAkU3RhcnRUaW1lICkgewogICAgICAgICAgICAgICAgICAgICAgICAkRXJyb3JzeyRFcnJvckluZGV4fXtFbmRUaW1lSW52YWxpZH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBFbmRUaW1lU2VydmVyRXJyb3JCbG9jaywgJ0VuZFRpbWVCZWZvcmVTdGFydFRpbWVTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkU3RhcnRUaW1lc1skSURdID0gJFN0YXJ0VGltZTsKICAgICAgICAgICAgICAgICAgICAkRW5kVGltZXNbJElEXSAgID0gJEVuZFRpbWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICRQYXJhbXtTdGFydFRpbWV9ICYmICRQYXJhbXtTdGFydFRpbWV9ICF+IC9eKFxkKyk6KFxkKykkLyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEVycm9yc3skRXJyb3JJbmRleH17U3RhcnRUaW1lSW52YWxpZH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBTdGFydFRpbWVTZXJ2ZXJFcnJvckJsb2NrLCAnU3RhcnRUaW1lSW52YWxpZEZvcm1hdFNlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkUGFyYW17RW5kVGltZX0gJiYgJFBhcmFte0VuZFRpbWV9ICF+IC9eKFxkKyk6KFxkKykkLyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEVycm9yc3skRXJyb3JJbmRleH17RW5kVGltZUludmFsaWR9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBARW5kVGltZVNlcnZlckVycm9yQmxvY2ssICdFbmRUaW1lSW52YWxpZEZvcm1hdFNlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBuZWdhdGl2ZSB0aW1lcyBhcmUgbm90IGFsbG93ZWQKICAgICAgICAgICAgICAgIGlmICggJFBhcmFte1N0YXJ0VGltZX0gPX4gL14tKFxkKyk6KFxkKykkLyApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3JzeyRFcnJvckluZGV4fXtTdGFydFRpbWVJbnZhbGlkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAU3RhcnRUaW1lU2VydmVyRXJyb3JCbG9jaywgJ1N0YXJ0VGltZU5lZ2F0aXZlU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCAkUGFyYW17RW5kVGltZX0gPX4gL14tKFxkKyk6KFxkKykkLyApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3JzeyRFcnJvckluZGV4fXtFbmRUaW1lSW52YWxpZH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgICAgIHB1c2ggQEVuZFRpbWVTZXJ2ZXJFcnJvckJsb2NrLCAnRW5kVGltZU5lZ2F0aXZlU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgcmVwZWF0ZWQgaG91cnMgYXJlIG5vdCBhbGxvd2VkCiAgICAgICAgICAgICAgICBmb3IgKCBteSAkUG9zaXRpb24gPSAkSUQgLSAxOyAkUG9zaXRpb24gPj0gMTsgJFBvc2l0aW9uLS0gKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBpZiAhZGVmaW5lZCAkU3RhcnRUaW1lc1skUG9zaXRpb25dIHx8ICFkZWZpbmVkICRTdGFydFRpbWVzWyRJRF07CgogICAgICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAgICAgJFN0YXJ0VGltZXNbJFBvc2l0aW9uXSA+ICRTdGFydFRpbWVzWyRJRF0KICAgICAgICAgICAgICAgICAgICAgICAgJiYgJFN0YXJ0VGltZXNbJFBvc2l0aW9uXSA8ICRFbmRUaW1lc1skSURdCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRFcnJvcnN7JEVycm9ySW5kZXh9e0VuZFRpbWVJbnZhbGlkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQEVuZFRpbWVTZXJ2ZXJFcnJvckJsb2NrLCAnRW5kVGltZVJlcGVhdGVkSG91clNlcnZlckVycm9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgIWdyZXAoIC9eRW5kVGltZVJlcGVhdGVkSG91clNlcnZlckVycm9yLywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBFbmRUaW1lU2VydmVyRXJyb3JCbG9jayApOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAkRW5kVGltZXNbJFBvc2l0aW9uXSA+ICRTdGFydFRpbWVzWyRJRF0KICAgICAgICAgICAgICAgICAgICAgICAgJiYgJEVuZFRpbWVzWyRQb3NpdGlvbl0gPCAkRW5kVGltZXNbJElEXQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICRFbmRUaW1lc1skSURdID4gJEVuZFRpbWVzWyRQb3NpdGlvbl0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRXJyb3JzeyRFcnJvckluZGV4fXtTdGFydFRpbWVJbnZhbGlkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBTdGFydFRpbWVTZXJ2ZXJFcnJvckJsb2NrLCAnU3RhcnRUaW1lUmVwZWF0ZWRIb3VyU2VydmVyRXJyb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgIQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXAoIC9eU3RhcnRUaW1lUmVwZWF0ZWRIb3VyU2VydmVyRXJyb3IkLywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAU3RhcnRUaW1lU2VydmVyRXJyb3JCbG9jayApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEVycm9yc3skRXJyb3JJbmRleH17RW5kVGltZUludmFsaWR9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQEVuZFRpbWVTZXJ2ZXJFcnJvckJsb2NrLCAnRW5kVGltZVJlcGVhdGVkSG91clNlcnZlckVycm9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmVwKCAvXkVuZFRpbWVSZXBlYXRlZEhvdXJTZXJ2ZXJFcnJvciQvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBFbmRUaW1lU2VydmVyRXJyb3JCbG9jayApOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoICRTdGFydFRpbWVzWyRQb3NpdGlvbl0gPT0gJFN0YXJ0VGltZXNbJElEXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEVycm9yc3skRXJyb3JJbmRleH17U3RhcnRUaW1lSW52YWxpZH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBTdGFydFRpbWVTZXJ2ZXJFcnJvckJsb2NrLCAnU3RhcnRUaW1lUmVwZWF0ZWRIb3VyU2VydmVyRXJyb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmVwKCAvXlN0YXJ0VGltZVJlcGVhdGVkSG91clNlcnZlckVycm9yJC8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAU3RhcnRUaW1lU2VydmVyRXJyb3JCbG9jayApOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkRW5kVGltZXNbJFBvc2l0aW9uXSA9PSAkRW5kVGltZXNbJElEXSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEVycm9yc3skRXJyb3JJbmRleH17RW5kVGltZUludmFsaWR9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCBARW5kVGltZVNlcnZlckVycm9yQmxvY2ssICdFbmRUaW1lUmVwZWF0ZWRIb3VyU2VydmVyRXJyb3InCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmVwKCAvXkVuZFRpbWVSZXBlYXRlZEhvdXJTZXJ2ZXJFcnJvciQvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgQEVuZFRpbWVTZXJ2ZXJFcnJvckJsb2NrICk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICRTdGFydFRpbWVzWyRJRF0gPiAkU3RhcnRUaW1lc1skUG9zaXRpb25dCiAgICAgICAgICAgICAgICAgICAgICAgICYmICRTdGFydFRpbWVzWyRJRF0gPCAkRW5kVGltZXNbJFBvc2l0aW9uXQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkRXJyb3JzeyRFcnJvckluZGV4fXtTdGFydFRpbWVJbnZhbGlkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQFN0YXJ0VGltZVNlcnZlckVycm9yQmxvY2ssICdTdGFydFRpbWVSZXBlYXRlZEhvdXJTZXJ2ZXJFcnJvcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICEKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXAoIC9eU3RhcnRUaW1lUmVwZWF0ZWRIb3VyU2VydmVyRXJyb3IkLywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBTdGFydFRpbWVTZXJ2ZXJFcnJvckJsb2NrICk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICRFbmRUaW1lc1skSURdID4gJFN0YXJ0VGltZXNbJFBvc2l0aW9uXQogICAgICAgICAgICAgICAgICAgICAgICAmJiAkRW5kVGltZXNbJElEXSA8ICRFbmRUaW1lc1skUG9zaXRpb25dCiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRFcnJvcnN7JEVycm9ySW5kZXh9e0VuZFRpbWVJbnZhbGlkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQEVuZFRpbWVTZXJ2ZXJFcnJvckJsb2NrLCAnRW5kVGltZVJlcGVhdGVkSG91clNlcnZlckVycm9yJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgIQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcCggL15FbmRUaW1lUmVwZWF0ZWRIb3VyU2VydmVyRXJyb3IkLywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBFbmRUaW1lU2VydmVyRXJyb3JCbG9jayApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjICcyNDowMCcgaXMgb25seSBwZXJtaXR0ZWQgYXMgZW5kIHRpbWUKICAgICAgICAgICAgICAgIGlmICggJFN0YXJ0VGltZXNbJElEXSAmJiAkU3RhcnRUaW1lc1skSURdID09IDE0NDAgKSB7CiAgICAgICAgICAgICAgICAgICAgJEVycm9yc3skRXJyb3JJbmRleH17U3RhcnRUaW1lSW52YWxpZH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgICAgIHB1c2ggQFN0YXJ0VGltZVNlcnZlckVycm9yQmxvY2ssICdTdGFydFRpbWUyNEhvdXJzJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHRpbWVzIHN1cGVyaW9yIHRvIDI0OjAwIGFyZSBub3QgYWxsb3dlZAogICAgICAgICAgICAgICAgaWYgKCAkU3RhcnRUaW1lc1skSURdICYmICRTdGFydFRpbWVzWyRJRF0gPiAxNDQwICkgewogICAgICAgICAgICAgICAgICAgICRFcnJvcnN7JEVycm9ySW5kZXh9e1N0YXJ0VGltZUludmFsaWR9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICAgICBwdXNoIEBTdGFydFRpbWVTZXJ2ZXJFcnJvckJsb2NrLCAnU3RhcnRUaW1lSW52YWxpZCc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoICRFbmRUaW1lc1skSURdICYmICRFbmRUaW1lc1skSURdID4gMTQ0MCApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3JzeyRFcnJvckluZGV4fXtFbmRUaW1lSW52YWxpZH0gPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgICAgIHB1c2ggQEVuZFRpbWVTZXJ2ZXJFcnJvckJsb2NrLCAnRW5kVGltZUludmFsaWQnOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgYWRkIHJlZmVyZW5jZSB0byB0aGUgc2VydmVyIGVycm9yIG1zZ3MgdG8gYmUgc2hvd24KICAgICAgICAgICAgICAgIGlmICggJEVycm9yc3skRXJyb3JJbmRleH0gJiYgJEVycm9yc3skRXJyb3JJbmRleH17U3RhcnRUaW1lSW52YWxpZH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJEVycm9yc3skRXJyb3JJbmRleH17U3RhcnRUaW1lU2VydmVyRXJyb3JCbG9ja30gPSBcQFN0YXJ0VGltZVNlcnZlckVycm9yQmxvY2s7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoICRFcnJvcnN7JEVycm9ySW5kZXh9ICYmICRFcnJvcnN7JEVycm9ySW5kZXh9e0VuZFRpbWVJbnZhbGlkfSApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3JzeyRFcnJvckluZGV4fXtFbmRUaW1lU2VydmVyRXJyb3JCbG9ja30gPSBcQEVuZFRpbWVTZXJ2ZXJFcnJvckJsb2NrOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgb3ZlcndyaXRlIHBlcmlvZCBpZiB0aGVyZSBhcmUgc3RhcnQgYW5kIGVuZCB0aW1lcwogICAgICAgICAgICAgICAgaWYgKCAkU3RhcnRUaW1lc1skSURdICYmICRFbmRUaW1lc1skSURdICkgewogICAgICAgICAgICAgICAgICAgICRQZXJpb2QgPSAkRW5kVGltZXNbJElEXSAtICRTdGFydFRpbWVzWyRJRF07CgogICAgICAgICAgICAgICAgICAgICMgY29udmVydCBwZXJpb2QgZnJvbSBtaW51dGVzIHRvIGhvdXJzCiAgICAgICAgICAgICAgICAgICAgJFBlcmlvZCAvPSA2MDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGNoZWNrIGZvciBlcnJvcnMgaW4gdGhlIHBlcmlvZAogICAgICAgICAgICAgICAgaWYgKCAkUGVyaW9kID09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAUGVyaW9kU2VydmVyRXJyb3JCbG9jaywgJ1plcm9Ib3Vyc1BlcmlvZFNlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdUaW1lQWNjb3VudGluZzo6SW5wdXRIb3Vyc1dpdGhvdXRTdGFydEVuZFRpbWUnKQogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAkRXJyb3JzeyRFcnJvckluZGV4fXtQZXJpb2RJbnZhbGlkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkRXJyb3JzeyRFcnJvckluZGV4fXtTdGFydFRpbWVJbnZhbGlkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICAgICAgICAgICRFcnJvcnN7JEVycm9ySW5kZXh9e0VuZFRpbWVJbnZhbGlkfSAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICRQZXJpb2QgPCAwICkgewogICAgICAgICAgICAgICAgICAgICAgICAkRXJyb3JzeyRFcnJvckluZGV4fXtQZXJpb2RJbnZhbGlkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICAgICAgICAgIHB1c2ggQFBlcmlvZFNlcnZlckVycm9yQmxvY2ssICdOZWdhdGl2ZVBlcmlvZFNlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoICRQZXJpb2QgPiAyNCApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3JzeyRFcnJvckluZGV4fXtQZXJpb2RJbnZhbGlkfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBAUGVyaW9kU2VydmVyRXJyb3JCbG9jaywgJ0ludmFsaWRIb3Vyc1BlcmlvZFNlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoICRFcnJvcnN7JEVycm9ySW5kZXh9ICYmICRFcnJvcnN7JEVycm9ySW5kZXh9e1BlcmlvZEludmFsaWR9ICkgewogICAgICAgICAgICAgICAgICAgICRFcnJvcnN7JEVycm9ySW5kZXh9e1BlcmlvZFNlcnZlckVycm9yQmxvY2t9ID0gXEBQZXJpb2RTZXJ2ZXJFcnJvckJsb2NrOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgaWYgdGhlcmUgd2FzIGFuIGVycm9yIG9uIHRoaXMgcm93LCBzYXZlIGFsbCBkYXRhIGluIHRoZSBzZXJ2ZXIgZXJyb3IgaGFzaAogICAgICAgICAgICAgICAgaWYgKCBkZWZpbmVkICRFcnJvcnN7JEVycm9ySW5kZXh9ICkgewogICAgICAgICAgICAgICAgICAgIGZvciBteSAkUGFyYW1ldGVyIChxdyhQcm9qZWN0SUQgQWN0aW9uSUQgUmVtYXJrIFN0YXJ0VGltZSBFbmRUaW1lKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkU2VydmVyRXJyb3JEYXRheyRFcnJvckluZGV4fXskUGFyYW1ldGVyfSA9ICRQYXJhbXskUGFyYW1ldGVyfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJFNlcnZlckVycm9yRGF0YXskRXJyb3JJbmRleH17UGVyaW9kfSA9ICRQZXJpb2Q7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBvdGhlcndpc2UsIHNhdmUgcm93IG9uIHRoZSBEQgogICAgICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgICAgICMgaW5pdGlhbGl6ZSB0aGUgYXJyYXkgb2Ygd29ya2luZyB1bml0cwogICAgICAgICAgICAgICAgICAgIEB7ICREYXRhe1dvcmtpbmdVbml0c30gfSA9ICgpOwoKICAgICAgICAgICAgICAgICAgICAjIHJlcGxhY2UgMjQ6MDAgZm9yIDIzOjU5OjU5IHRvIGJlIGEgdmFsaWQgZW50cnkgaW4gdGhlIERCCiAgICAgICAgICAgICAgICAgICAgJFBhcmFte0VuZFRpbWV9ID0gJFBhcmFte0VuZFRpbWV9IGVxICcyNDowMCcgPyAnMjM6NTk6NTknIDogJFBhcmFte0VuZFRpbWV9OwoKICAgICAgICAgICAgICAgICAgICBteSAlV29ya2luZ1VuaXQgPSAoCiAgICAgICAgICAgICAgICAgICAgICAgIFByb2plY3RJRCA9PiAkUGFyYW17UHJvamVjdElEfSwKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aW9uSUQgID0+ICRQYXJhbXtBY3Rpb25JRH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFJlbWFyayAgICA9PiAkUGFyYW17UmVtYXJrfSwKICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnRUaW1lID0+ICRQYXJhbXtTdGFydFRpbWV9LAogICAgICAgICAgICAgICAgICAgICAgICBFbmRUaW1lICAgPT4gJFBhcmFte0VuZFRpbWV9LAogICAgICAgICAgICAgICAgICAgICAgICBQZXJpb2QgICAgPT4gJFBlcmlvZCwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIHB1c2ggQHsgJERhdGF7V29ya2luZ1VuaXRzfSB9LCBcJVdvcmtpbmdVbml0OwoKICAgICAgICAgICAgICAgICAgICAkRGF0YXtZZWFyfSAgPSAkUGFyYW17WWVhcn07CiAgICAgICAgICAgICAgICAgICAgJERhdGF7TW9udGh9ID0gJFBhcmFte01vbnRofTsKICAgICAgICAgICAgICAgICAgICAkRGF0YXtEYXl9ICAgPSAkUGFyYW17RGF5fTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPldvcmtpbmdVbml0c0luc2VydCglRGF0YSkgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAnQ2FuXCd0IGluc2VydCBXb3JraW5nIFVuaXRzIScKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJFBhcmFte1N1Y2Nlc3NmdWxJbnNlcnR9ID0gMTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIGluY3JlbWVudCB0aGUgZXJyb3IgaW5kZXggaWYgdGhlcmUgd2FzIGFuIGVycm9yIG9uIHRoaXMgcm93CiAgICAgICAgICAgICAgICAkRXJyb3JJbmRleCsrIGlmICggZGVmaW5lZCAkRXJyb3JzeyRFcnJvckluZGV4fSApOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoJVNlcnZlckVycm9yRGF0YSkgewogICAgICAgICAgICAgICAgJFBhcmFte1N1Y2Nlc3NmdWxJbnNlcnR9ID0gdW5kZWY7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgU2hvdyBXb3JraW5nIFVuaXRzCiAgICAgICAgIyBnZXQgZXhpc3Rpbmcgd29ya2luZyB1bml0cwogICAgICAgICVEYXRhID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPldvcmtpbmdVbml0c0dldCgKICAgICAgICAgICAgWWVhciAgPT4gJFBhcmFte1llYXJ9LAogICAgICAgICAgICBNb250aCA9PiAkUGFyYW17TW9udGh9LAogICAgICAgICAgICBEYXkgICA9PiAkUGFyYW17RGF5fSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBudW1iZXIgb2Ygd29ya2luZyB1bml0cyAoPXJlY29yZHMpCiAgICAgICAgIyBpZiBiaWdnZXIgdGhhbiBSZWNvcmRzTnVtYmVyLCBtb3JlIHRoYW4gdGhlIG51bWJlciBvZiBkZWZhdWx0IHJlY29yZHMgd2VyZSBzYXZlZCBmb3IgdGhpcyBkYXRlCiAgICAgICAgaWYgKCAkRGF0YXtXb3JraW5nVW5pdHN9ICkgewogICAgICAgICAgICBteSAkV29ya2luZ1VuaXRzQ291bnQgPSBAeyAkRGF0YXtXb3JraW5nVW5pdHN9IH07CiAgICAgICAgICAgIGlmICggJFdvcmtpbmdVbml0c0NvdW50ID4gJFBhcmFte1JlY29yZHNOdW1iZXJ9ICkgewogICAgICAgICAgICAgICAgJFBhcmFte1JlY29yZHNOdW1iZXJ9ID0gJFdvcmtpbmdVbml0c0NvdW50OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdUaW1lQWNjb3VudGluZzo6SW5wdXRIb3Vyc1dpdGhvdXRTdGFydEVuZFRpbWUnKSApIHsKICAgICAgICAgICAgJFBhcmFte1BlcmlvZEJsb2NrfSAgID0gJ1VuaXRJbnB1dFBlcmlvZCc7CiAgICAgICAgICAgICRGcm9udGVuZHtQZXJpb2ROb3RlfSA9ICcqJzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRQYXJhbXtQZXJpb2RCbG9ja30gICA9ICdVbml0UGVyaW9kV2l0aG91dElucHV0JzsKICAgICAgICAgICAgJEZyb250ZW5ke1BlcmlvZE5vdGV9ID0gJyc7CiAgICAgICAgfQoKICAgICAgICBpZiAoCiAgICAgICAgICAgICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKQogICAgICAgICAgICA+IHRpbWVsb2NhbCggMSwgMCwgMCwgJFBhcmFte0RheX0sICRQYXJhbXtNb250aH0gLSAxLCAkUGFyYW17WWVhcn0gLSAxOTAwICkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1VuaXRCbG9jaycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsgJVBhcmFtLCAlRnJvbnRlbmQgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHNpY2ssIGxlYXZlIGRheSBhbmQgb3ZlcnRpbWUKICAgICAgICAkUGFyYW17U2lja30gICAgID0gJERhdGF7U2lja30gICAgID8gJ2NoZWNrZWQ9ImNoZWNrZWQiJyA6ICcnOwogICAgICAgICRQYXJhbXtMZWF2ZURheX0gPSAkRGF0YXtMZWF2ZURheX0gPyAnY2hlY2tlZD0iY2hlY2tlZCInIDogJyc7CiAgICAgICAgJFBhcmFte092ZXJ0aW1lfSA9ICREYXRhe092ZXJ0aW1lfSA/ICdjaGVja2VkPSJjaGVja2VkIicgOiAnJzsKCiAgICAgICAgJFBhcmFte1RvdGFsfSA9ICREYXRhe1RvdGFsfTsKCiAgICAgICAgIyBzZXQgYWN0aW9uIGxpc3QgYW5kIHJlbGF0ZWQgY29uc3RyYWludHMKICAgICAgICAjIGdlbmVyYXRlIGEgSmF2YVNjcmlwdCBBcnJheSB3aGljaCB3aWxsIGJlIG91dHB1dCB0byB0aGUgdGVtcGxhdGUKICAgICAgICBteSBAQWN0aW9uSURzID0gc29ydCB7ICRBY3Rpb25MaXN0eyRhfSBjbXAgJEFjdGlvbkxpc3R7JGJ9IH0ga2V5cyAlQWN0aW9uTGlzdDsKICAgICAgICBteSBASlNBY3Rpb25zOwogICAgICAgIGZvciBteSAkQWN0aW9uSUQgKEBBY3Rpb25JRHMpIHsKICAgICAgICAgICAgcHVzaCBASlNBY3Rpb25zLCAiWyckQWN0aW9uSUQnLCAnJEFjdGlvbkxpc3R7JEFjdGlvbklEfSddIjsKICAgICAgICB9CiAgICAgICAgJFBhcmFte0pTQWN0aW9uTGlzdH0gPSAnWycgLiAoIGpvaW4gJywgJywgQEpTQWN0aW9ucyApIC4gJ10nOwoKICAgICAgICBteSAkQWN0aW9uTGlzdENvbnN0cmFpbnRzID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1RpbWVBY2NvdW50aW5nOjpBY3Rpb25MaXN0Q29uc3RyYWludHMnKTsKICAgICAgICBteSBASlNBY3Rpb25MaXN0Q29uc3RyYWludHM7CiAgICAgICAgZm9yIG15ICRQcm9qZWN0TmFtZVJlZ0V4cCAoIHNvcnQga2V5cyAleyRBY3Rpb25MaXN0Q29uc3RyYWludHN9ICkgewogICAgICAgICAgICBteSAkQWN0aW9uTmFtZVJlZ0V4cCA9ICRBY3Rpb25MaXN0Q29uc3RyYWludHMtPnskUHJvamVjdE5hbWVSZWdFeHB9OwogICAgICAgICAgICBzeyhbJyJcXF0pfXtcXCQxfXNteGcgZm9yICggJFByb2plY3ROYW1lUmVnRXhwLCAkQWN0aW9uTmFtZVJlZ0V4cCApOwogICAgICAgICAgICBwdXNoIEBKU0FjdGlvbkxpc3RDb25zdHJhaW50cywgIlsnJFByb2plY3ROYW1lUmVnRXhwJywgJyRBY3Rpb25OYW1lUmVnRXhwJ10iOwogICAgICAgIH0KICAgICAgICAkUGFyYW17SlNBY3Rpb25MaXN0Q29uc3RyYWludHN9ID0gJ1snIC4gKCBqb2luICcsICcsIEBKU0FjdGlvbkxpc3RDb25zdHJhaW50cyApIC4gJ10nOwoKICAgICAgICAjIGJ1aWxkIGEgd29ya2luZyB1bml0IGFycmF5CiAgICAgICAgbXkgQFVuaXRzID0gKHVuZGVmKTsKICAgICAgICBpZiAoICREYXRhe1dvcmtpbmdVbml0c30gKSB7CiAgICAgICAgICAgIHB1c2ggQFVuaXRzLCBAeyAkRGF0YXtXb3JraW5nVW5pdHN9IH0KICAgICAgICB9CgogICAgICAgICRFcnJvckluZGV4ID0gMDsKCiAgICAgICAgIyBidWlsZCB1bml0cwogICAgICAgICRQYXJhbXsiSlNQcm9qZWN0TGlzdCJ9ID0gInZhciBKU1Byb2plY3RMaXN0ID0gbmV3IEFycmF5KCk7XG4iOwogICAgICAgIGZvciBteSAkSUQgKCAxIC4uICRQYXJhbXtSZWNvcmRzTnVtYmVyfSApIHsKICAgICAgICAgICAgJFBhcmFte0lEfSA9ICRJRDsKICAgICAgICAgICAgbXkgJFVuaXRSZWYgICA9ICRVbml0c1skSURdOwogICAgICAgICAgICBteSAkU2hvd0Vycm9yID0gMDsKCiAgICAgICAgICAgIGlmICggISRVbml0UmVmICkgewogICAgICAgICAgICAgICAgJEVycm9ySW5kZXgrKzsKICAgICAgICAgICAgICAgICRTaG93RXJyb3IgPSAxOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGdldCBkYXRhIG9mIHByb2plY3RzCiAgICAgICAgICAgIG15ICRQcm9qZWN0TGlzdCA9ICRTZWxmLT5fUHJvamVjdExpc3QoCiAgICAgICAgICAgICAgICBTZWxlY3RlZElEID0+ICRVbml0UmVmLT57UHJvamVjdElEfQogICAgICAgICAgICAgICAgICAgIHx8ICRTZXJ2ZXJFcnJvckRhdGF7JEVycm9ySW5kZXh9e1Byb2plY3RJRH0KICAgICAgICAgICAgICAgICAgICB8fCAnJywKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRQYXJhbXtQcm9qZWN0SUR9ID0gJFVuaXRSZWYtPntQcm9qZWN0SUR9CiAgICAgICAgICAgICAgICB8fCAkU2VydmVyRXJyb3JEYXRheyRFcnJvckluZGV4fXtQcm9qZWN0SUR9CiAgICAgICAgICAgICAgICB8fCAnJzsKICAgICAgICAgICAgJFBhcmFte1Byb2plY3ROYW1lfSA9ICcnOwoKICAgICAgICAgICAgIyBnZW5lcmF0ZSBKYXZhU2NyaXB0IGFycmF5IHdoaWNoIHdpbGwgYmUgb3V0cHV0IHRvIHRoZSB0ZW1wbGF0ZQogICAgICAgICAgICBteSBASlNQcm9qZWN0TGlzdDsKICAgICAgICAgICAgZm9yIG15ICRQcm9qZWN0ICggQHskUHJvamVjdExpc3R9ICkgewogICAgICAgICAgICAgICAgcHVzaCBASlNQcm9qZWN0TGlzdCwKICAgICAgICAgICAgICAgICAgICAne2lkOicgLiAoICRQcm9qZWN0LT57S2V5fSB8fCAnMCcgKSAuICcgLCBuYW1lOlwnJyAuICRQcm9qZWN0LT57VmFsdWV9IC4gJ1wnfSc7CgogICAgICAgICAgICAgICAgaWYgKCAkUHJvamVjdC0+e0tleX0gZXEgJFBhcmFte1Byb2plY3RJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgJFBhcmFte1Byb2plY3ROYW1lfSA9ICRQcm9qZWN0LT57VmFsdWV9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgICRQYXJhbXsiSlNQcm9qZWN0TGlzdCJ9CiAgICAgICAgICAgICAgICAuPSAiSlNQcm9qZWN0TGlzdFskSURdID0gWyIgLiAoIGpvaW4gJywgJywgQEpTUHJvamVjdExpc3QgKSAuICJdO1xuIjsKCiAgICAgICAgICAgICRGcm9udGVuZHtQcm9qZWN0T3B0aW9ufSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICA9PiAkUHJvamVjdExpc3QsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgICA9PiAiUHJvamVjdElEWyRJRF0iLAogICAgICAgICAgICAgICAgSUQgICAgICAgICAgPT4gIlByb2plY3RJRCRJRCIsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAwLAogICAgICAgICAgICAgICAgQ2xhc3MgICAgICAgPT4gJ1ZhbGlkYXRlX1RpbWVBY2NvdW50aW5nX1Byb2plY3QgUHJvamVjdFNlbGVjdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgLiAoICRFcnJvcnN7JEVycm9ySW5kZXh9e1Byb2plY3RJREludmFsaWR9IHx8ICcnICksCiAgICAgICAgICAgICAgICBPbkNoYW5nZSA9PiAiVGltZUFjY291bnRpbmcuQWdlbnQuRWRpdFRpbWVSZWNvcmRzLkZpbGxBY3Rpb25MaXN0KCRJRCk7IiwKICAgICAgICAgICAgKTsKCiAgICAjIGFjdGlvbiBsaXN0IGluaXRpYWxseSBvbmx5IGNvbnRhaW5zIGVtcHR5IGFuZCBzZWxlY3RlZCBlbGVtZW50IGFzIHdlbGwgYXMgZWxlbWVudHMgY29uZmlndXJlZCBmb3Igc2VsZWN0ZWQgcHJvamVjdAogICAgIyBpZiBubyBjb25zdHJhaW50cyBhcmUgY29uZmlndXJlZCwgYWxsIGFjdGlvbnMgd2lsbCBiZSBkaXNwbGF5ZWQKICAgICAgICAgICAgbXkgJEFjdGlvbkRhdGEgPSAkU2VsZi0+X0FjdGlvbkxpc3RDb25zdHJhaW50cygKICAgICAgICAgICAgICAgIFByb2plY3RJRCA9PiAkVW5pdFJlZi0+e1Byb2plY3RJRH0gfHwgJFNlcnZlckVycm9yRGF0YXskRXJyb3JJbmRleH17UHJvamVjdElEfSwKICAgICAgICAgICAgICAgIFByb2plY3RMaXN0ICAgICAgICAgICA9PiAkUHJvamVjdExpc3QsCiAgICAgICAgICAgICAgICBBY3Rpb25MaXN0ICAgICAgICAgICAgPT4gXCVBY3Rpb25MaXN0LAogICAgICAgICAgICAgICAgQWN0aW9uTGlzdENvbnN0cmFpbnRzID0+ICRBY3Rpb25MaXN0Q29uc3RyYWludHMsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRBY3Rpb25EYXRhLT57Jyd9ID0gJyc7CgogICAgICAgICAgICBpZiAoICRVbml0UmVmICYmICRVbml0UmVmLT57QWN0aW9uSUR9ICYmICRBY3Rpb25MaXN0eyAkVW5pdFJlZi0+e0FjdGlvbklEfSB9ICkgewogICAgICAgICAgICAgICAgJEFjdGlvbkRhdGEtPnsgJFVuaXRSZWYtPntBY3Rpb25JRH0gfSA9ICRBY3Rpb25MaXN0eyAkVW5pdFJlZi0+e0FjdGlvbklEfSB9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICgKICAgICAgICAgICAgICAgICRTZXJ2ZXJFcnJvckRhdGF7JEVycm9ySW5kZXh9CiAgICAgICAgICAgICAgICAmJiAkU2VydmVyRXJyb3JEYXRheyRFcnJvckluZGV4fXtBY3Rpb25JRH0KICAgICAgICAgICAgICAgICYmICRBY3Rpb25MaXN0eyAkU2VydmVyRXJyb3JEYXRheyRFcnJvckluZGV4fXtBY3Rpb25JRH0gfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkQWN0aW9uRGF0YS0+eyAkU2VydmVyRXJyb3JEYXRheyRFcnJvckluZGV4fXtBY3Rpb25JRH0gfQogICAgICAgICAgICAgICAgICAgID0gJEFjdGlvbkxpc3R7ICRTZXJ2ZXJFcnJvckRhdGF7JEVycm9ySW5kZXh9e0FjdGlvbklEfSB9OwogICAgICAgICAgICB9CgogICAgICAgICAgICAkRnJvbnRlbmR7QWN0aW9uT3B0aW9ufSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCgogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgPT4gJEFjdGlvbkRhdGEsCiAgICAgICAgICAgICAgICBTZWxlY3RlZElEICA9PiAkVW5pdFJlZi0+e0FjdGlvbklEfSB8fCAkU2VydmVyRXJyb3JEYXRheyRFcnJvckluZGV4fXtBY3Rpb25JRH0gfHwgJycsCiAgICAgICAgICAgICAgICBOYW1lICAgICAgICA9PiAiQWN0aW9uSURbJElEXSIsCiAgICAgICAgICAgICAgICBJRCAgICAgICAgICA9PiAiQWN0aW9uSUQkSUQiLAogICAgICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMCwKICAgICAgICAgICAgICAgIENsYXNzICAgICAgID0+ICdWYWxpZGF0ZV9EZXBlbmRpbmdSZXF1aXJlZEFORCBWYWxpZGF0ZV9EZXBlbmRpbmdfUHJvamVjdElEJwogICAgICAgICAgICAgICAgICAgIC4gJElECiAgICAgICAgICAgICAgICAgICAgLiAnIEFjdGlvblNlbGVjdGlvbiAnCiAgICAgICAgICAgICAgICAgICAgLiAoICRFcnJvcnN7JEVycm9ySW5kZXh9e0FjdGlvbklESW52YWxpZH0gfHwgJycgKSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRQYXJhbXtSZW1hcmt9ID0gJFVuaXRSZWYtPntSZW1hcmt9IHx8ICRTZXJ2ZXJFcnJvckRhdGF7JEVycm9ySW5kZXh9e1JlbWFya30gfHwgJyc7CgogICAgICAgICAgICBteSAkUGVyaW9kOwogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAoICRVbml0UmVmLT57UGVyaW9kfSAmJiAkVW5pdFJlZi0+e1BlcmlvZH0gPT0gMCApCiAgICAgICAgICAgICAgICB8fCAoCiAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCAkU2VydmVyRXJyb3JEYXRheyRFcnJvckluZGV4fXtQZXJpb2R9CiAgICAgICAgICAgICAgICAgICAgJiYgJFNlcnZlckVycm9yRGF0YXskRXJyb3JJbmRleH17UGVyaW9kfSA9PSAwCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRQZXJpb2QgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFBlcmlvZCA9ICRVbml0UmVmLT57UGVyaW9kfSB8fCAkU2VydmVyRXJyb3JEYXRheyRFcnJvckluZGV4fXtQZXJpb2R9IHx8ICcnOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3IgbXkgJFRpbWVQZXJpb2QgKHF3KFN0YXJ0VGltZSBFbmRUaW1lKSkgewogICAgICAgICAgICAgICAgaWYgKCRTaG93RXJyb3IpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIGRlZmluZWQgJFNlcnZlckVycm9yRGF0YXskRXJyb3JJbmRleH17JFRpbWVQZXJpb2R9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkUGFyYW17JFRpbWVQZXJpb2R9ID0gJFNlcnZlckVycm9yRGF0YXskRXJyb3JJbmRleH17JFRpbWVQZXJpb2R9IGVxICcwMDowMCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJycKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJFNlcnZlckVycm9yRGF0YXskRXJyb3JJbmRleH17JFRpbWVQZXJpb2R9OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFBhcmFteyRUaW1lUGVyaW9kfSA9ICcnOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmICggJFVuaXRSZWYtPnskVGltZVBlcmlvZH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRQYXJhbXskVGltZVBlcmlvZH0gPSAkVW5pdFJlZi0+eyRUaW1lUGVyaW9kfSBlcSAnMDA6MDAnID8gJycgOiAkVW5pdFJlZi0+eyRUaW1lUGVyaW9kfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRQYXJhbXskVGltZVBlcmlvZH0gPSAnJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdVbml0JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAlRnJvbnRlbmQsCiAgICAgICAgICAgICAgICAgICAgJXsgJEVycm9yc3skRXJyb3JJbmRleH0gfSwKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGFkZCBwcm9wZXIgc2VydmVyIGVycm9yIG1zZyBmb3IgdGhlIHN0YXJ0IGFuZCBlbmQgdGltZXMKICAgICAgICAgICAgbXkgJFNlcnZlckVycm9yQmxvY2tOYW1lOwogICAgICAgICAgICBpZiAoICRFcnJvcnN7JEVycm9ySW5kZXh9ICYmICRFcnJvcnN7JEVycm9ySW5kZXh9e1N0YXJ0VGltZUludmFsaWR9ICkgewogICAgICAgICAgICAgICAgaWYgKCBzY2FsYXIgQHsgJEVycm9yc3skRXJyb3JJbmRleH17U3RhcnRUaW1lU2VydmVyRXJyb3JCbG9ja30gfSA+IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBAeyAkRXJyb3JzeyRFcnJvckluZGV4fXtTdGFydFRpbWVTZXJ2ZXJFcnJvckJsb2NrfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkU2VydmVyRXJyb3JCbG9ja05hbWUgPSBzaGlmdCBAeyAkRXJyb3JzeyRFcnJvckluZGV4fXtTdGFydFRpbWVTZXJ2ZXJFcnJvckJsb2NrfSB9OwogICAgICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICRTZXJ2ZXJFcnJvckJsb2NrTmFtZSApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ1N0YXJ0VGltZUdlbmVyaWNTZXJ2ZXJFcnJvcicgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoICRFcnJvcnN7JEVycm9ySW5kZXh9ICYmICRFcnJvcnN7JEVycm9ySW5kZXh9e0VuZFRpbWVJbnZhbGlkfSApIHsKICAgICAgICAgICAgICAgIGlmICggc2NhbGFyIEB7ICRFcnJvcnN7JEVycm9ySW5kZXh9e0VuZFRpbWVTZXJ2ZXJFcnJvckJsb2NrfSB9ID4gMCApIHsKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIEB7ICRFcnJvcnN7JEVycm9ySW5kZXh9e0VuZFRpbWVTZXJ2ZXJFcnJvckJsb2NrfSB9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkU2VydmVyRXJyb3JCbG9ja05hbWUgPSBzaGlmdCBAeyAkRXJyb3JzeyRFcnJvckluZGV4fXtFbmRUaW1lU2VydmVyRXJyb3JCbG9ja30gfTsKICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAkU2VydmVyRXJyb3JCbG9ja05hbWUgKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdFbmRUaW1lR2VuZXJpY1NlcnZlckVycm9yJyApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAkUGFyYW17UGVyaW9kQmxvY2t9LAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgUGVyaW9kID0+ICRQZXJpb2QsCiAgICAgICAgICAgICAgICAgICAgSUQgICAgID0+ICRJRCwKICAgICAgICAgICAgICAgICAgICAleyAkRXJyb3JzeyRFcnJvckluZGV4fSB9LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgYWRkIHByb3BlciBzZXJ2ZXIgZXJyb3IgbXNnIGZvciB0aGUgcGVyaW9kCiAgICAgICAgICAgIGlmICggJEVycm9yc3skRXJyb3JJbmRleH0gJiYgJEVycm9yc3skRXJyb3JJbmRleH17UGVyaW9kSW52YWxpZH0gKSB7CiAgICAgICAgICAgICAgICBpZiAoIHNjYWxhciBAeyAkRXJyb3JzeyRFcnJvckluZGV4fXtQZXJpb2RTZXJ2ZXJFcnJvckJsb2NrfSB9ID4gMCApIHsKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIEB7ICRFcnJvcnN7JEVycm9ySW5kZXh9e1BlcmlvZFNlcnZlckVycm9yQmxvY2t9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRTZXJ2ZXJFcnJvckJsb2NrTmFtZSA9IHNoaWZ0IEB7ICRFcnJvcnN7JEVycm9ySW5kZXh9e1BlcmlvZFNlcnZlckVycm9yQmxvY2t9IH07CiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJFNlcnZlckVycm9yQmxvY2tOYW1lICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnUGVyaW9kR2VuZXJpY1NlcnZlckVycm9yJyApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnUGVyaW9kR2VuZXJpY1NlcnZlckVycm9yJyApOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIHZhbGlkaXR5IGNoZWNrCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICRQYXJhbXtJbnNlcnRXb3JraW5nVW5pdHN9CiAgICAgICAgICAgICAgICAmJiAkVW5pdFJlZi0+e1Byb2plY3RJRH0KICAgICAgICAgICAgICAgICYmICRVbml0UmVmLT57QWN0aW9uSUR9CiAgICAgICAgICAgICAgICAmJiAkUGFyYW17U2lja30KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJFBhcmFte0Jsb2NrTmFtZX0gPSAnU2lja0xlYXZlTWVzc2FnZSc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKAogICAgICAgICAgICAgICAgJFBhcmFte0luc2VydFdvcmtpbmdVbml0c30KICAgICAgICAgICAgICAgICYmICRVbml0UmVmLT57UHJvamVjdElEfQogICAgICAgICAgICAgICAgJiYgJFVuaXRSZWYtPntBY3Rpb25JRH0KICAgICAgICAgICAgICAgICYmICRQYXJhbXtMZWF2ZURheX0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJFBhcmFte0Jsb2NrTmFtZX0gPSAnVmFjYXRpb25NZXNzYWdlJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICAgICAkUGFyYW17SW5zZXJ0V29ya2luZ1VuaXRzfQogICAgICAgICAgICAgICAgJiYgJFVuaXRSZWYtPntQcm9qZWN0SUR9CiAgICAgICAgICAgICAgICAmJiAkVW5pdFJlZi0+e0FjdGlvbklEfQogICAgICAgICAgICAgICAgJiYgJFBhcmFte092ZXJ0aW1lfQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkUGFyYW17QmxvY2tOYW1lfSA9ICdPdmVydGltZU1lc3NhZ2UnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoCiAgICAgICAgICAgICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKQogICAgICAgICAgICA+IHRpbWVsb2NhbCggMSwgMCwgMCwgJFBhcmFte0RheX0sICRQYXJhbXtNb250aH0gLSAxLCAkUGFyYW17WWVhcn0gLSAxOTAwICkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJFBhcmFte1RvdGFsfSA9IHNwcmludGYoICIlLjJmIiwgKCAkUGFyYW17VG90YWx9IHx8IDAgKSApOwogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnVG90YWwnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7ICVQYXJhbSwgJUZyb250ZW5kIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHZhbGlkaXR5IGNoZWNrcyBzdGFydAogICAgICAgIG15ICRFcnJvck5vdGU7CiAgICAgICAgaWYgKCAkUGFyYW17VG90YWx9ICYmICRQYXJhbXtUb3RhbH0gPiAyNCApIHsKICAgICAgICAgICAgJEVycm9yTm90ZSA9ICdDYW5cJ3Qgc2F2ZSBzZXR0aW5ncywgYmVjYXVzZSBhIGRheSBoYXMgb25seSAyNCBob3VycyEnOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRQYXJhbXtJbnNlcnRXb3JraW5nVW5pdHN9ICYmICRQYXJhbXtUb3RhbH0gJiYgJFBhcmFte1RvdGFsfSA+IDE2ICkgewogICAgICAgICAgICAkUGFyYW17QmxvY2tOYW1lfSA9ICdNb3JlMTZIb3Vyc01lc3NhZ2UnOwogICAgICAgIH0KICAgICAgICBpZiAoJEVycm9yTm90ZSkgewogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAhJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPldvcmtpbmdVbml0c0RlbGV0ZSgKICAgICAgICAgICAgICAgICAgICBZZWFyICA9PiAkUGFyYW17WWVhcn0sCiAgICAgICAgICAgICAgICAgICAgTW9udGggPT4gJFBhcmFte01vbnRofSwKICAgICAgICAgICAgICAgICAgICBEYXkgICA9PiAkUGFyYW17RGF5fSwKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICAgICAgTWVzc2FnZSA9PiAnQ2FuXCd0IGRlbGV0ZSBXb3JraW5nIFVuaXRzIScKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICggJFBhcmFte0Jsb2NrTmFtZX0gJiYgJFBhcmFte1N1Y2Nlc3NmdWxJbnNlcnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnU2hvd0NvbmZpcm1hdGlvbicsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBCbG9ja05hbWUgPT4gJFBhcmFte0Jsb2NrTmFtZX0sCiAgICAgICAgICAgICAgICAgICAgWWVhciAgICAgID0+ICRQYXJhbXtZZWFyfSwKICAgICAgICAgICAgICAgICAgICBNb250aCAgICAgPT4gJFBhcmFte01vbnRofSwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgICAgPT4gJFBhcmFte0RheX0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJFBhcmFte0RhdGV9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZERhdGVTZWxlY3Rpb24oCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgVmFsaWRhdGUgPT4gMSwKICAgICAgICAgICAgUHJlZml4ICAgPT4gJycsCiAgICAgICAgICAgIEZvcm1hdCAgID0+ICdEYXRlSW5wdXRGb3JtYXQnLAogICAgICAgICk7CgogICAgICAgIGlmICgKICAgICAgICAgICAgdGltZWxvY2FsKCAxLCAwLCAwLCAkUGFyYW17RGF5fSwgJFBhcmFte01vbnRofSAtIDEsICRQYXJhbXtZZWFyfSAtIDE5MDAgKSA8IHRpbWVsb2NhbCgKICAgICAgICAgICAgICAgIDEsIDAsIDAsICRQYXJhbXtEYXlBbGxvd2VkfSwKICAgICAgICAgICAgICAgICRQYXJhbXtNb250aEFsbG93ZWR9IC0gMSwKICAgICAgICAgICAgICAgICRQYXJhbXtZZWFyQWxsb3dlZH0gLSAxOTAwCiAgICAgICAgICAgICkKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJEluY29tcGxldGVXb3JraW5nRGF5c3tJbmNvbXBsZXRlfXsgJFBhcmFte1llYXJ9IH17ICRQYXJhbXtNb250aH0gfXsgJFBhcmFte0RheX0gfQogICAgICAgICAgICAgICAgJiYgISRQYXJhbXtTdWNjZXNzZnVsSW5zZXJ0fQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1JlYWRvbmx5JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRpb24gPT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdUaGlzIERhdGUgaXMgb3V0IG9mIGxpbWl0LCBidXQgeW91IGhhdmVuXCd0IGluc2VydCB0aGlzIGRheSB5ZXQsIHNvIHlvdSBnZXQgb25lKCEpIGNoYW5jZSB0byBpbnNlcnQnCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgZ2V0IGluY29tcGxldGUgd29ya2luZyBkYXlzCiAgICAgICAgbXkgJUluY29tcGxldGVXb3JraW5nRGF5c0xpc3Q7CiAgICAgICAgJUluY29tcGxldGVXb3JraW5nRGF5cyA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Xb3JraW5nVW5pdHNDb21wbGV0bmVzc0NoZWNrKCk7CgogICAgICAgIGZvciBteSAkWWVhcklEICggc29ydCBrZXlzICV7ICRJbmNvbXBsZXRlV29ya2luZ0RheXN7SW5jb21wbGV0ZX0gfSApIHsKICAgICAgICAgICAgZm9yIG15ICRNb250aElEICggc29ydCBrZXlzICV7ICRJbmNvbXBsZXRlV29ya2luZ0RheXN7SW5jb21wbGV0ZX17JFllYXJJRH0gfSApIHsKICAgICAgICAgICAgICAgIGZvciBteSAkRGF5SUQgKAogICAgICAgICAgICAgICAgICAgIHNvcnQga2V5cyAleyAkSW5jb21wbGV0ZVdvcmtpbmdEYXlze0luY29tcGxldGV9eyRZZWFySUR9eyRNb250aElEfSB9CiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRJbmNvbXBsZXRlV29ya2luZ0RheXNMaXN0eyIkWWVhcklELSRNb250aElELSREYXlJRCJ9ID0gIiRZZWFySUQtJE1vbnRoSUQtJERheUlEIjsKICAgICAgICAgICAgICAgICAgICAkUGFyYW17SW5jb21wbGV0ZX0gPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIFNob3cgdGV4dCwgaWYgaW5jb21wbGV0ZSB3b3JraW5nIGRheXMgYXJlIGF2YWlsYWJsZQogICAgICAgIGlmICggJFBhcmFte0luY29tcGxldGV9ICkgewoKICAgICAgICAgICAgIyBpZiBtYXNzIGVudHJ5IG9wdGlvbiBpcyBlbmFibGVkLCBzaG93IGxpc3Qgb2Ygd29ya2luZyBkYXlzCiAgICAgICAgICAgIGlmICggJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIlRpbWVBY2NvdW50aW5nOjpBbGxvd01hc3NFbnRyeUZvclVzZXIiKSApIHsKCiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0luY29tcGxldGVXb3JraW5nRGF5c01hc3NFbnRyeScsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIGZvciBteSAkV29ya2luZ0RheXMgKCBzb3J0IGtleXMgJUluY29tcGxldGVXb3JraW5nRGF5c0xpc3QgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgKCAkWWVhciwgJE1vbnRoLCAkRGF5ICkgPSBzcGxpdCggLy0vLCAkSW5jb21wbGV0ZVdvcmtpbmdEYXlzTGlzdHskV29ya2luZ0RheXN9ICk7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSW5jb21wbGV0ZVdvcmtpbmdEYXlzTWFzc0VudHJ5U2luZ2xlRGF5JywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlICA9PiAkSW5jb21wbGV0ZVdvcmtpbmdEYXlzTGlzdHskV29ya2luZ0RheXN9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgWWVhciAgPT4gJFllYXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb250aCA9PiAkTW9udGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXkgICA9PiAkRGF5LAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9CgogICAgICAgICAgICAjIG90aGVyd2lzZSBzaG93IGluY29tcGxldGUgd29ya2luZyBkYXlzIGFzIGEgZHJvcGRvd24KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgIyBjaGVjayBpZiBjdXJyZW50IGRheSBpcyBpbmNvbXBsZXRlCiAgICAgICAgICAgICAgICAjIGlmIHllcywgc2VsZWN0IHRoZSBjdXJyZW50IGRheSBpbiB0aGUgZHJvcGRvd24KICAgICAgICAgICAgICAgICMgb3RoZXJ3aXNlIHNlbGVjdCB0aGUgZW1wdHkgZWxlbWVudAogICAgICAgICAgICAgICAgbXkgJFNlbGVjdGVkSUQ7CgogICAgICAgICAgICAgICAgaWYgKCAkSW5jb21wbGV0ZVdvcmtpbmdEYXlzTGlzdHsiJFBhcmFte1llYXJ9LSRQYXJhbXtNb250aH0tJFBhcmFte0RheX0ifSApIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZWN0ZWRJRCA9ICIkUGFyYW17WWVhcn0tJFBhcmFte01vbnRofS0kUGFyYW17RGF5fSI7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgbXkgJEluY29tcGxlV29ya2luZ0RheXNTZWxlY3QgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJUluY29tcGxldGVXb3JraW5nRGF5c0xpc3QsCiAgICAgICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRTZWxlY3RlZElELAogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAiSW5jb21wbGV0ZVdvcmtpbmdEYXlzTGlzdCIsCiAgICAgICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSW5jb21wbGV0ZVdvcmtpbmdEYXlzJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgSW5jb21wbGV0ZVdvcmtpbmdEYXlzU2VsZWN0ID0+ICRJbmNvbXBsZVdvcmtpbmdEYXlzU2VsZWN0LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBteSAlVXNlckRhdGEgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+VXNlckdldCgKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICBteSAkVmFjYXRpb25DaGVjayA9ICRTZWxmLT57VGltZU9iamVjdH0tPlZhY2F0aW9uQ2hlY2soCiAgICAgICAgICAgIFllYXIgICAgID0+ICRQYXJhbXtZZWFyfSwKICAgICAgICAgICAgTW9udGggICAgPT4gJFBhcmFte01vbnRofSwKICAgICAgICAgICAgRGF5ICAgICAgPT4gJFBhcmFte0RheX0sCiAgICAgICAgICAgIENhbGVuZGFyID0+ICRVc2VyRGF0YXtDYWxlbmRhcn0sCiAgICAgICAgKTsKCiAgICAgICAgJFBhcmFte1dlZWtkYXl9ID0gRGF5X29mX1dlZWsoICRQYXJhbXtZZWFyfSwgJFBhcmFte01vbnRofSwgJFBhcmFte0RheX0gKTsKCiAgICAgICAgIyBnZXQgd29ya2luZyBkYXlzIG9mIHRoZSB1c2VyJ3MgY2FsZW5kYXIKICAgICAgICBteSAkQ2FsZW5kYXJOYW1lID0gJ1RpbWVXb3JraW5nSG91cnMnOwogICAgICAgICRDYWxlbmRhck5hbWUgLj0gJFVzZXJEYXRhe0NhbGVuZGFyfSA/ICI6OkNhbGVuZGFyJFVzZXJEYXRhe0NhbGVuZGFyfSIgOiAnJzsKICAgICAgICBteSAkQ2FsZW5kYXJXb3JraW5nSG91cnMgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgkQ2FsZW5kYXJOYW1lKTsKCiAgICAgICAgIyBzaG93ICJvdGhlciB0aW1lcyIgYmxvY2ssIGlmIG5lY2Vzc2FyeQogICAgICAgIGlmICgKICAgICAgICAgICAgQHsgJENhbGVuZGFyV29ya2luZ0hvdXJzLT57ICRXZWVrZGF5QXJyYXlbICRQYXJhbXtXZWVrZGF5fSAtIDEgXSB9IH0KICAgICAgICAgICAgJiYgISRWYWNhdGlvbkNoZWNrCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdGhlclRpbWVzJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICAlRnJvbnRlbmQsCiAgICAgICAgICAgICAgICAgICAgJUVycm9ycywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkUGFyYW17V2Vla2RheV90b19UZXh0fSA9ICRXZWVrZGF5QXJyYXlbICRQYXJhbXtXZWVrZGF5fSAtIDEgXTsKCiAgICAgICAgIyBpbnRlZ3JhdGUgdGhlIGhhbmRsaW5nIGZvciByZXF1aXJlZCByZW1hcmtzIGluIHJlbGF0aW9uIHRvIHByb2plY3RzCiAgICAgICAgJFBhcmFte1JlbWFya1JlZ0V4cH0gPSAkU2VsZi0+X1Byb2plY3QyUmVtYXJrUmVnRXhwKCk7CgogICAgICAgICMgZW5hYmxlIGF1dG9jb21wbGV0aW9uPwogICAgICAgICRQYXJhbXtFbmFibGVBdXRvY29tcGxldGlvbn0gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgiVGltZUFjY291bnRpbmc6OkVuYWJsZUF1dG9Db21wbGV0aW9uIik7CgogICAgICAgICMgYnVpbGQgb3V0cHV0CiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCBUaXRsZSA9PiAnRWRpdCcgKTsKCiAgICAgICAgaWYgKCAhJEluY29tcGxldGVXb3JraW5nRGF5c3tFbmZvcmNlSW5zZXJ0fSApIHsKICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3UHJvamVjdCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsgJVBhcmFtLCAlRnJvbnRlbmQgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgc2hvdyBjcmVhdGUgcHJvamVjdCBsaW5rLCBpZiBhbGxvd2VkCiAgICAgICAgICAgIG15ICVVc2VyRGF0YSA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Vc2VyR2V0KAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCAkVXNlckRhdGF7Q3JlYXRlUHJvamVjdH0gKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0NyZWF0ZVByb2plY3QnLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKCAkSW5jb21wbGV0ZVdvcmtpbmdEYXlze1dhcm5pbmd9ICkgewogICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vdGlmeSgKICAgICAgICAgICAgICAgICAgICBJbmZvICAgICA9PiAnUGxlYXNlIGluc2VydCB5b3VyIHdvcmtpbmcgaG91cnMhJywKICAgICAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnRXJyb3InCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoJEVycm9yTm90ZSkgewogICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm90aWZ5KAogICAgICAgICAgICAgICAgSW5mbyAgICAgPT4gJEVycm9yTm90ZSwKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdFcnJvcicKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCBkZWZpbmVkICRQYXJhbXtTdWNjZXNzZnVsSW5zZXJ0fSApCiAgICAgICAgewogICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm90aWZ5KAogICAgICAgICAgICAgICAgSW5mbyA9PiAnU3VjY2Vzc2Z1bCBpbnNlcnQhJywKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgc2hvdyBtYXNzIGVudHJ5IG5vdGlmaWNhdGlvbgogICAgICAgIGlmICggJFBhcmFte05vdGlmaWNhdGlvbn0gZXEgJ0Vycm9yJyApIHsKICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vdGlmeSgKICAgICAgICAgICAgICAgIEluZm8gICAgID0+ICdFcnJvciB3aGlsZSBpbnNlcnRpbmcgbXVsdGlwbGUgZGF0ZXMhJywKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdFcnJvcicKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkUGFyYW17Tm90aWZpY2F0aW9ufSBlcSAnU3VjY2Vzc2Z1bCcgKSB7CiAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob3RpZnkoCiAgICAgICAgICAgICAgICBJbmZvID0+ICdTdWNjZXNzZnVsbHkgaW5zZXJ0ZWQgZW50cmllcyBmb3Igc2V2ZXJhbCBkYXRlcyEnLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBzaG93IG5vdGlmaWNhdGlvbiBpZiB3cm9uZyBkYXRlIHdhcyBzZWxlY3RlZAogICAgICAgIGlmICggJFBhcmFte1dyb25nRGF0ZX0gKSB7CiAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob3RpZnkoCiAgICAgICAgICAgICAgICBJbmZvICAgICA9PiAnRW50ZXJlZCBkYXRlIHdhcyBpbnZhbGlkISBEYXRlIHdhcyBjaGFuZ2VkIHRvIHRvZGF5LicsCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnRXJyb3InCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50VGltZUFjY291bnRpbmdFZGl0JywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICVGcm9udGVuZCwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyB2aWV3IG9sZGVyIGRheSBpbnNlcnRzCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1ZpZXcnICkgewoKICAgICAgICAjIHBlcm1pc3Npb24gY2hlY2sKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob1Blcm1pc3Npb24oIFdpdGhIZWFkZXIgPT4gJ3llcycgKSBpZiAhJFNlbGYtPntBY2Nlc3NSb307CgogICAgICAgICMgZ2V0IHBhcmFtcwogICAgICAgIGZvciBteSAkUGFyYW1ldGVyIChxdyhEYXkgTW9udGggWWVhciBVc2VySUQpKSB7CiAgICAgICAgICAgICRQYXJhbXskUGFyYW1ldGVyfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtZXRlciApOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBuZWVkZWQgcGFyYW1zCiAgICAgICAgZm9yIG15ICROZWVkZWQgKHF3KERheSBNb250aCBZZWFyKSkgewogICAgICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbiggTWVzc2FnZSA9PiAiVmlldzogTmVlZCAkTmVlZGVkIiApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGlmIG5vIFVzZXJJRCBwb3N0ZWQgdXNlIHRoZSBjdXJyZW50IHVzZXIKICAgICAgICAkUGFyYW17VXNlcklEfSB8fD0gJFNlbGYtPntVc2VySUR9OwoKICAgICAgICAjIGdldCBjdXJyZW50IGRhdGUgYW5kIHRpbWUKICAgICAgICBteSAoICRTZWMsICRNaW4sICRIb3VyLCAkRGF5LCAkTW9udGgsICRZZWFyICkgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgICAgIFN5c3RlbVRpbWUgPT4gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZSgpLAogICAgICAgICk7CgogICAgICAgIG15ICRNYXhBbGxvd2VkSW5zZXJ0RGF5cyA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdUaW1lQWNjb3VudGluZzo6TWF4QWxsb3dlZEluc2VydERheXMnKSB8fCAnMTAnOwogICAgICAgICggJFBhcmFte1llYXJBbGxvd2VkfSwgJFBhcmFte01vbnRoQWxsb3dlZH0sICRQYXJhbXtEYXlBbGxvd2VkfSApCiAgICAgICAgICAgID0gQWRkX0RlbHRhX1lNRCggJFllYXIsICRNb250aCwgJERheSwgMCwgMCwgLSRNYXhBbGxvd2VkSW5zZXJ0RGF5cyApOwoKICAgICAgICAjIHJlZGlyZWN0IHRvIHRoZSBlZGl0IHNjcmVlbiwgaWYgbmVjZXNzYXJ5CiAgICAgICAgaWYgKAogICAgICAgICAgICB0aW1lbG9jYWwoIDEsIDAsIDAsICRQYXJhbXtEYXl9LCAkUGFyYW17TW9udGh9IC0gMSwgJFBhcmFte1llYXJ9IC0gMTkwMCApID4gdGltZWxvY2FsKAogICAgICAgICAgICAgICAgMSwgMCwgMCwgJFBhcmFte0RheUFsbG93ZWR9LAogICAgICAgICAgICAgICAgJFBhcmFte01vbnRoQWxsb3dlZH0gLSAxLAogICAgICAgICAgICAgICAgJFBhcmFte1llYXJBbGxvd2VkfSAtIDE5MDAKICAgICAgICAgICAgKSAmJiAkUGFyYW17VXNlcklEfSA9PSAkU2VsZi0+e1VzZXJJRH0KICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoCiAgICAgICAgICAgICAgICBPUCA9PgogICAgICAgICAgICAgICAgICAgICJBY3Rpb249JFNlbGYtPntBY3Rpb259O1N1YmFjdGlvbj1FZGl0O1llYXI9JFBhcmFte1llYXJ9O01vbnRoPSRQYXJhbXtNb250aH07RGF5PSRQYXJhbXtEYXl9IgogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBzaG93IHRoZSBuYW1pbmcgb2YgdGhlIGFnZW50IHdoaWNoIHRpbWUgYWNjb3VudGluZyBpcyB2aXNpdGVkCiAgICAgICAgaWYgKCAkUGFyYW17VXNlcklEfSAhPSAkU2VsZi0+e1VzZXJJRH0gKSB7CiAgICAgICAgICAgIG15ICVTaG93blVzZXJzID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+VXNlckxpc3QoCiAgICAgICAgICAgICAgICBUeXBlICA9PiAnTG9uZycsCiAgICAgICAgICAgICAgICBWYWxpZCA9PiAxCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRQYXJhbXtVc2VyfSA9ICRTaG93blVzZXJzeyAkUGFyYW17VXNlcklEfSB9OwogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnVXNlcicsCiAgICAgICAgICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJFBhcmFte1dlZWtkYXl9ICAgICAgICAgPSBEYXlfb2ZfV2VlayggJFBhcmFte1llYXJ9LCAkUGFyYW17TW9udGh9LCAkUGFyYW17RGF5fSApOwogICAgICAgICRQYXJhbXtXZWVrZGF5X3RvX1RleHR9ID0gJFdlZWtkYXlBcnJheVsgJFBhcmFte1dlZWtkYXl9IC0gMSBdOwogICAgICAgICRQYXJhbXtNb250aF90b19UZXh0fSAgID0gJE1vbnRoQXJyYXlbICRQYXJhbXtNb250aH0gXTsKCiAgICAgICAgIyBWYWx1ZXMgZm9yIHRoZSBsaW5rIGljb25zIDw+CiAgICAgICAgKCAkUGFyYW17WWVhckJhY2t9LCAkUGFyYW17TW9udGhCYWNrfSwgJFBhcmFte0RheUJhY2t9ICkKICAgICAgICAgICAgPSBBZGRfRGVsdGFfWU1EKCAkUGFyYW17WWVhcn0sICRQYXJhbXtNb250aH0sICRQYXJhbXtEYXl9LCAwLCAwLCAtMSApOwogICAgICAgICggJFBhcmFte1llYXJOZXh0fSwgJFBhcmFte01vbnRoTmV4dH0sICRQYXJhbXtEYXlOZXh0fSApCiAgICAgICAgICAgID0gQWRkX0RlbHRhX1lNRCggJFBhcmFte1llYXJ9LCAkUGFyYW17TW9udGh9LCAkUGFyYW17RGF5fSwgMCwgMCwgMSApOwoKICAgICAgICAkUGFyYW17RGF0ZVNlbGVjdGlvbn0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkRGF0ZVNlbGVjdGlvbigKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICBQcmVmaXggICA9PiAnJywKICAgICAgICAgICAgRm9ybWF0ICAgPT4gJ0RhdGVJbnB1dEZvcm1hdCcsCiAgICAgICAgICAgIFZhbGlkYXRlID0+IDEsCiAgICAgICAgICAgIENsYXNzICAgID0+ICRQYXJhbXtFcnJvcnN9LT57RGF0ZUludmFsaWR9LAogICAgICAgICk7CgogICAgICAgICMgU2hvdyBXb3JraW5nIFVuaXRzCiAgICAgICAgIyBnZXQgZXhpc3Rpbmcgd29ya2luZyB1bml0cwogICAgICAgIG15ICVEYXRhID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPldvcmtpbmdVbml0c0dldCgKICAgICAgICAgICAgWWVhciAgID0+ICRQYXJhbXtZZWFyfSwKICAgICAgICAgICAgTW9udGggID0+ICRQYXJhbXtNb250aH0sCiAgICAgICAgICAgIERheSAgICA9PiAkUGFyYW17RGF5fSwKICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICRQYXJhbXtEYXRlfSA9ICREYXRhe0RhdGV9OwoKICAgICAgICAjIGdldCBwcm9qZWN0IGFuZCBhY3Rpb24gc2V0dGluZ3MKICAgICAgICBteSAlUHJvamVjdCA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Qcm9qZWN0U2V0dGluZ3NHZXQoKTsKICAgICAgICBteSAlQWN0aW9uICA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5BY3Rpb25TZXR0aW5nc0dldCgpOwoKICAgICAgICAjIGdldCBzaWNrLCBsZWF2ZSBkYXkgYW5kIG92ZXJ0aW1lCiAgICAgICAgJFBhcmFte1NpY2t9ICAgICA9ICREYXRhe1NpY2t9ICAgICA/ICdjaGVja2VkJyA6ICcnOwogICAgICAgICRQYXJhbXtMZWF2ZURheX0gPSAkRGF0YXtMZWF2ZURheX0gPyAnY2hlY2tlZCcgOiAnJzsKICAgICAgICAkUGFyYW17T3ZlcnRpbWV9ID0gJERhdGF7T3ZlcnRpbWV9ID8gJ2NoZWNrZWQnIDogJyc7CgogICAgICAgICMgb25seSBzaG93IHRoZSB1bml0IGJsb2NrIGlmIHRoZXJlIGlzIHNvbWUgZGF0YQogICAgICAgIG15ICRVbml0c1JlZiA9ICREYXRhe1dvcmtpbmdVbml0c307CiAgICAgICAgaWYgKCAkVW5pdHNSZWYtPlswXSApIHsKCiAgICAgICAgICAgIGZvciBteSAkVW5pdFJlZiAoIEB7JFVuaXRzUmVmfSApIHsKCiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1VuaXQnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBQcm9qZWN0ICAgPT4gJFByb2plY3R7UHJvamVjdH17ICRVbml0UmVmLT57UHJvamVjdElEfSB9LAogICAgICAgICAgICAgICAgICAgICAgICBBY3Rpb24gICAgPT4gJEFjdGlvbnsgJFVuaXRSZWYtPntBY3Rpb25JRH0gfXtBY3Rpb259LAogICAgICAgICAgICAgICAgICAgICAgICBSZW1hcmsgICAgPT4gJFVuaXRSZWYtPntSZW1hcmt9LAogICAgICAgICAgICAgICAgICAgICAgICBTdGFydFRpbWUgPT4gJFVuaXRSZWYtPntTdGFydFRpbWV9LAogICAgICAgICAgICAgICAgICAgICAgICBFbmRUaW1lICAgPT4gJFVuaXRSZWYtPntFbmRUaW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgUGVyaW9kICAgID0+ICRVbml0UmVmLT57UGVyaW9kfSwKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1RvdGFsJywKICAgICAgICAgICAgICAgIERhdGEgPT4geyBUb3RhbCA9PiBzcHJpbnRmKCAiJS4yZiIsICREYXRhe1RvdGFsfSApIH0KICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ05vRGF0YUZvdW5kJyApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkUGFyYW17U2lja30gfHwgJFBhcmFte0xlYXZlRGF5fSB8fCAkUGFyYW17T3ZlcnRpbWV9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3RoZXJUaW1lcycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBTaWNrICAgICA9PiAkUGFyYW17U2lja30sCiAgICAgICAgICAgICAgICAgICAgTGVhdmVEYXkgPT4gJFBhcmFte0xlYXZlRGF5fSwKICAgICAgICAgICAgICAgICAgICBPdmVydGltZSA9PiAkUGFyYW17T3ZlcnRpbWV9LAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIG15ICVVc2VyRGF0YSA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Vc2VyR2V0KAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFZhY2F0aW9uID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+VmFjYXRpb25DaGVjaygKICAgICAgICAgICAgWWVhciAgICAgPT4gJFBhcmFte1llYXJ9LAogICAgICAgICAgICBNb250aCAgICA9PiAkUGFyYW17TW9udGh9LAogICAgICAgICAgICBEYXkgICAgICA9PiAkUGFyYW17RGF5fSwKICAgICAgICAgICAgQ2FsZW5kYXIgPT4gJFVzZXJEYXRhe0NhbGVuZGFyfSwKICAgICAgICApOwoKICAgICAgICBpZiAoJFZhY2F0aW9uKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdWYWNhdGlvbicsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsgVmFjYXRpb24gPT4gJFZhY2F0aW9uIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHByZXNlbnRhdGlvbgogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlciggVGl0bGUgPT4gJ1ZpZXcnICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudFRpbWVBY2NvdW50aW5nVmlldycKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBkZWxldGUgb2JqZWN0IGZyb20gZGF0YWJhc2UKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnRGVsZXRlJyApIHsKICAgICAgICBmb3IgbXkgJFBhcmFtZXRlciAocXcoRGF5IE1vbnRoIFllYXIpKSB7CiAgICAgICAgICAgICRQYXJhbXskUGFyYW1ldGVyfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtZXRlciApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm9QZXJtaXNzaW9uKCBXaXRoSGVhZGVyID0+ICd5ZXMnICkgaWYgISRTZWxmLT57QWNjZXNzUm99OwoKICAgICAgICBpZiAoCiAgICAgICAgICAgICEkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+V29ya2luZ1VuaXRzRGVsZXRlKAogICAgICAgICAgICAgICAgWWVhciAgPT4gJFBhcmFte1llYXJ9LAogICAgICAgICAgICAgICAgTW9udGggPT4gJFBhcmFte01vbnRofSwKICAgICAgICAgICAgICAgIERheSAgID0+ICRQYXJhbXtEYXl9LAogICAgICAgICAgICApCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KAogICAgICAgICAgICBPUCA9PgogICAgICAgICAgICAgICAgIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn07U3ViYWN0aW9uPUVkaXQ7WWVhcj0kUGFyYW17WWVhcn07TW9udGg9JFBhcmFte01vbnRofTtEYXk9JFBhcmFte0RheX0iCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBvdmVydmlldyBhYm91dCB0aGUgdXNlcnMgdGltZSBhY2NvdW50aW5nCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ092ZXJ2aWV3JyApIHsKICAgICAgICBteSAoICRTZWMsICRNaW4sICRIb3VyLCAkQ3VycmVudERheSwgJE1vbnRoLCAkWWVhciApID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgICAgICBTeXN0ZW1UaW1lID0+ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKSwKICAgICAgICApOwoKICAgICAgICAjIHBlcm1pc3Npb24gY2hlY2sKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob1Blcm1pc3Npb24oIFdpdGhIZWFkZXIgPT4gJ3llcycgKSBpZiAhJFNlbGYtPntBY2Nlc3NSb307CgogICAgICAgIGZvciBteSAkUGFyYW1ldGVyIChxdyhTdGF0dXMgRGF5IE1vbnRoIFllYXIgVXNlcklEIFByb2plY3RTdGF0dXNTaG93KSkgewogICAgICAgICAgICAkUGFyYW17JFBhcmFtZXRlcn0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbWV0ZXIgKTsKICAgICAgICB9CiAgICAgICAgJFBhcmFte1N1YmFjdGlvbn0gPSAnRWRpdCc7CgogICAgICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICAgICAkUGFyYW17VXNlcklEfSA9ICRTZWxmLT57VXNlcklEfTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGlmICggJFBhcmFte1VzZXJJRH0gIT0gJFNlbGYtPntVc2VySUR9ICYmICEkU2VsZi0+e0FjY2Vzc1J3fSApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vUGVybWlzc2lvbiggV2l0aEhlYWRlciA9PiAneWVzJyApOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRQYXJhbXtTdWJhY3Rpb259ID0gJ1ZpZXcnOwogICAgICAgIH0KICAgICAgICBpZiAoICRQYXJhbXtVc2VySUR9ICE9ICRTZWxmLT57VXNlcklEfSApIHsKICAgICAgICAgICAgbXkgJVNob3duVXNlcnMgPSAkU2VsZi0+e1VzZXJPYmplY3R9LT5Vc2VyTGlzdCgKICAgICAgICAgICAgICAgIFR5cGUgID0+ICdMb25nJywKICAgICAgICAgICAgICAgIFZhbGlkID0+IDEKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFBhcmFte1VzZXJ9ID0gJFNob3duVXNlcnN7ICRQYXJhbXtVc2VySUR9IH07CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdVc2VyJywKICAgICAgICAgICAgICAgIERhdGEgPT4geyVQYXJhbX0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIENoZWNrIERhdGUKICAgICAgICBpZiAoICEkUGFyYW17WWVhcn0gfHwgISRQYXJhbXtNb250aH0gKSB7CiAgICAgICAgICAgICRQYXJhbXtZZWFyfSAgPSAkWWVhcjsKICAgICAgICAgICAgJFBhcmFte01vbnRofSA9ICRNb250aDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRQYXJhbXtNb250aH0gPSBzcHJpbnRmKCAiJTAyZCIsICRQYXJhbXtNb250aH0gKTsKICAgICAgICB9CgogICAgICAgICMgc3RvcmUgbGFzdCBzY3JlZW4KICAgICAgICAkU2VsZi0+e1Nlc3Npb25PYmplY3R9LT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgICAgIFNlc3Npb25JRCA9PiAkU2VsZi0+e1Nlc3Npb25JRH0sCiAgICAgICAgICAgIEtleSAgICAgICA9PiAnTGFzdFNjcmVlbicsCiAgICAgICAgICAgIFZhbHVlID0+CiAgICAgICAgICAgICAgICAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufTtTdWJhY3Rpb249T3ZlcnZpZXc7WWVhcj0kUGFyYW17WWVhcn07TW9udGg9JFBhcmFte01vbnRofSIsCiAgICAgICAgKTsKCiAgICAgICAgJFBhcmFte01vbnRoX3RvX1RleHR9ID0gJE1vbnRoQXJyYXlbICRQYXJhbXtNb250aH0gXTsKCiAgICAgICAgKCAkUGFyYW17WWVhckJhY2t9LCAkUGFyYW17TW9udGhCYWNrfSwgJFBhcmFte0RheUJhY2t9ICkKICAgICAgICAgICAgPSBBZGRfRGVsdGFfWU1EKCAkUGFyYW17WWVhcn0sICRQYXJhbXtNb250aH0sIDEsIDAsIC0xLCAwICk7CiAgICAgICAgKCAkUGFyYW17WWVhck5leHR9LCAkUGFyYW17TW9udGhOZXh0fSwgJFBhcmFte0RheU5leHR9ICkKICAgICAgICAgICAgPSBBZGRfRGVsdGFfWU1EKCAkUGFyYW17WWVhcn0sICRQYXJhbXtNb250aH0sIDEsIDAsIDEsIDAgKTsKCiAgICAgICAgIyBPdmVydmlldyBwZXIgZGF5CiAgICAgICAgbXkgJERheXNPZk1vbnRoID0gRGF5c19pbl9Nb250aCggJFBhcmFte1llYXJ9LCAkUGFyYW17TW9udGh9ICk7CgogICAgICAgIG15ICVVc2VyRGF0YSA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Vc2VyR2V0KAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgZm9yIG15ICREYXkgKCAxIC4uICREYXlzT2ZNb250aCApIHsKICAgICAgICAgICAgJFBhcmFte0RheX0gPSBzcHJpbnRmKCAiJTAyZCIsICREYXkgKTsKICAgICAgICAgICAgJFBhcmFte1dlZWtkYXl9ID0gRGF5X29mX1dlZWsoICRQYXJhbXtZZWFyfSwgJFBhcmFte01vbnRofSwgJERheSApIC0gMTsKICAgICAgICAgICAgbXkgJFZhY2F0aW9uQ2hlY2sgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5WYWNhdGlvbkNoZWNrKAogICAgICAgICAgICAgICAgWWVhciAgICAgPT4gJFBhcmFte1llYXJ9LAogICAgICAgICAgICAgICAgTW9udGggICAgPT4gJFBhcmFte01vbnRofSwKICAgICAgICAgICAgICAgIERheSAgICAgID0+ICREYXksCiAgICAgICAgICAgICAgICBDYWxlbmRhciA9PiAkVXNlckRhdGF7Q2FsZW5kYXJ9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbXkgJERhdGUgPSBzcHJpbnRmKCAiJTA0ZC0lMDJkLSUwMmQiLCAkUGFyYW17WWVhcn0sICRQYXJhbXtNb250aH0sICREYXkgKTsKICAgICAgICAgICAgbXkgJERheVN0YXJ0VGltZSA9ICRTZWxmLT57VGltZU9iamVjdH0tPlRpbWVTdGFtcDJTeXN0ZW1UaW1lKCBTdHJpbmcgPT4gJERhdGUgLiAnIDAwOjAwOjAwJyApOwogICAgICAgICAgICBteSAkRGF5U3RvcFRpbWUgID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+VGltZVN0YW1wMlN5c3RlbVRpbWUoIFN0cmluZyA9PiAkRGF0ZSAuICcgMjM6NTk6NTknICk7CgogICAgICAgICAgICAjIGFkZCB0aW1lIHpvbmUgdG8gY2FsY3VsYXRpb24KICAgICAgICAgICAgbXkgJFVzZXJDYWxlbmRhciA9ICRVc2VyRGF0YXtDYWxlbmRhcn0gfHwgJyc7CiAgICAgICAgICAgIG15ICRab25lID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoICJUaW1lWm9uZTo6Q2FsZW5kYXIiIC4gJFVzZXJDYWxlbmRhciApOwogICAgICAgICAgICBpZiAoJFpvbmUpIHsKICAgICAgICAgICAgICAgIG15ICRab25lU2Vjb25kcyA9ICRab25lICogNjAgKiA2MDsKICAgICAgICAgICAgICAgICREYXlTdGFydFRpbWUgPSAkRGF5U3RhcnRUaW1lIC0gJFpvbmVTZWNvbmRzOwogICAgICAgICAgICAgICAgJERheVN0b3BUaW1lICA9ICREYXlTdG9wVGltZSAtICRab25lU2Vjb25kczsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgbXkgJFRoaXNEYXlXb3JraW5nVGltZSA9ICRTZWxmLT57VGltZU9iamVjdH0tPldvcmtpbmdUaW1lKAogICAgICAgICAgICAgICAgU3RhcnRUaW1lID0+ICREYXlTdGFydFRpbWUsCiAgICAgICAgICAgICAgICBTdG9wVGltZSAgPT4gJERheVN0b3BUaW1lLAogICAgICAgICAgICAgICAgQ2FsZW5kYXIgID0+ICRVc2VyQ2FsZW5kYXIsCiAgICAgICAgICAgICkgfHwgJzAnOwoKICAgICAgICAgICAgaWYgKCAkUGFyYW17WWVhcn0gZXEgJFllYXIgJiYgJFBhcmFte01vbnRofSBlcSAkTW9udGggJiYgJEN1cnJlbnREYXkgZXEgJERheSApIHsKICAgICAgICAgICAgICAgICRQYXJhbXtDbGFzc30gPSAnQWN0aXZlJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoJFZhY2F0aW9uQ2hlY2spIHsKICAgICAgICAgICAgICAgICRQYXJhbXtDbGFzc30gICA9ICdWYWNhdGlvbic7CiAgICAgICAgICAgICAgICAkUGFyYW17Q29tbWVudH0gPSAkVmFjYXRpb25DaGVjazsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoJFRoaXNEYXlXb3JraW5nVGltZSkgewogICAgICAgICAgICAgICAgJFBhcmFte0NsYXNzfSA9ICdXb3JraW5nRGF5JzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRQYXJhbXtDbGFzc30gPSAnTm9uV29ya2luZ0RheSc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICVEYXRhID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPldvcmtpbmdVbml0c0dldCgKICAgICAgICAgICAgICAgIFllYXIgICA9PiAkUGFyYW17WWVhcn0sCiAgICAgICAgICAgICAgICBNb250aCAgPT4gJFBhcmFte01vbnRofSwKICAgICAgICAgICAgICAgIERheSAgICA9PiAkUGFyYW17RGF5fSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRQYXJhbXtDb21tZW50fSA9ICREYXRhe1NpY2t9CiAgICAgICAgICAgICAgICA/ICdTaWNrIGxlYXZlJwogICAgICAgICAgICAgICAgOiAkRGF0YXtMZWF2ZURheX0gPyAnT24gdmFjYXRpb24nCiAgICAgICAgICAgICAgICA6ICREYXRhe092ZXJ0aW1lfSA/ICdPbiBvdmVydGltZSBsZWF2ZScKICAgICAgICAgICAgICAgIDogICAgICAgICAgICAgICAgICAgJyc7CgogICAgICAgICAgICAkUGFyYW17V29ya2luZ0hvdXJzfSA9ICREYXRhe1RvdGFsfSA/IHNwcmludGYoICIlLjJmIiwgJERhdGF7VG90YWx9ICkgOiAnJzsKCiAgICAgICAgICAgICRQYXJhbXtXZWVrZGF5X3RvX1RleHR9ID0gJFdlZWtkYXlBcnJheVsgJFBhcmFte1dlZWtkYXl9IF07CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdSb3cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFBhcmFte0NvbW1lbnR9ID0gJyc7CiAgICAgICAgfQoKICAgICAgICBteSAlVXNlclJlcG9ydCA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Vc2VyUmVwb3J0aW5nKAogICAgICAgICAgICBZZWFyICA9PiAkUGFyYW17WWVhcn0sCiAgICAgICAgICAgIE1vbnRoID0+ICRQYXJhbXtNb250aH0sCiAgICAgICAgKTsKICAgICAgICBmb3IgbXkgJFJlcG9ydEVsZW1lbnQgKAogICAgICAgICAgICBxdyhUYXJnZXRTdGF0ZSBUYXJnZXRTdGF0ZVRvdGFsIFdvcmtpbmdIb3Vyc1RvdGFsIFdvcmtpbmdIb3VycwogICAgICAgICAgICBPdmVydGltZSBPdmVydGltZVRvdGFsIE92ZXJ0aW1lVW50aWwgTGVhdmVEYXkgTGVhdmVEYXlUb3RhbAogICAgICAgICAgICBMZWF2ZURheVJlbWFpbmluZyBTaWNrIFNpY2tUb3RhbCBTaWNrUmVtYWluaW5nKQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkVXNlclJlcG9ydHsgJFBhcmFte1VzZXJJRH0gfXskUmVwb3J0RWxlbWVudH0gfHw9IDA7CiAgICAgICAgICAgICRQYXJhbXskUmVwb3J0RWxlbWVudH0gPSBzcHJpbnRmKCAiJS4yZiIsICRVc2VyUmVwb3J0eyAkUGFyYW17VXNlcklEfSB9eyRSZXBvcnRFbGVtZW50fSApOwogICAgICAgIH0KCiAgICAgICAgaWYgKCAkVXNlckRhdGF7U2hvd092ZXJ0aW1lfSApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ0aW1lJywKICAgICAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgT3ZlcnZpZXcgcGVyIHByb2plY3QgYW5kIGFjdGlvbgogICAgICAgIG15ICVQcm9qZWN0RGF0YSA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Qcm9qZWN0QWN0aW9uUmVwb3J0aW5nKAogICAgICAgICAgICBZZWFyICAgPT4gJFBhcmFte1llYXJ9LAogICAgICAgICAgICBNb250aCAgPT4gJFBhcmFte01vbnRofSwKICAgICAgICAgICAgVXNlcklEID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgc2hvdyB0aGUgcmVwb3J0IHNvcnQgYnkgcHJvamVjdHMKICAgICAgICBpZiAoICEkUGFyYW17UHJvamVjdFN0YXR1c1Nob3d9IHx8ICRQYXJhbXtQcm9qZWN0U3RhdHVzU2hvd30gZXEgJ3ZhbGlkJyApIHsKICAgICAgICAgICAgJFBhcmFte1Byb2plY3RTdGF0dXNTaG93fSA9ICdhbGwnOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICRQYXJhbXtQcm9qZWN0U3RhdHVzU2hvd30gZXEgJ2FsbCcgKSB7CiAgICAgICAgICAgICRQYXJhbXtQcm9qZWN0U3RhdHVzU2hvd30gPSAndmFsaWQnOwogICAgICAgIH0KCiAgICAgICAgJFBhcmFte1Nob3dQcm9qZWN0c30gPSAnU2hvdyAnIC4gJFBhcmFte1Byb2plY3RTdGF0dXNTaG93fSAuICcgcHJvamVjdHMnOwoKICAgICAgICBQUk9KRUNUSUQ6CiAgICAgICAgZm9yIG15ICRQcm9qZWN0SUQgKAogICAgICAgICAgICBzb3J0IHsgJFByb2plY3REYXRheyRhfXtOYW1lfSBjbXAgJFByb2plY3REYXRheyRifXtOYW1lfSB9CiAgICAgICAgICAgIGtleXMgJVByb2plY3REYXRhCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgIG15ICRQcm9qZWN0UmVmID0gJFByb2plY3REYXRheyRQcm9qZWN0SUR9OwogICAgICAgICAgICBteSAkQWN0aW9uc1JlZiA9ICRQcm9qZWN0UmVmLT57QWN0aW9uc307CgogICAgICAgICAgICAkUGFyYW17UHJvamVjdH0gPSAnJzsKICAgICAgICAgICAgJFBhcmFte1N0YXR1c30gPSAkUHJvamVjdFJlZi0+e1N0YXR1c30gPyAnJyA6ICdwYXNzaXYnOwoKICAgICAgICAgICAgbXkgJFRvdGFsICAgICAgPSAwOwogICAgICAgICAgICBteSAkVG90YWxUb3RhbCA9IDA7CgogICAgICAgICAgICBuZXh0IFBST0pFQ1RJRCBpZiAkUGFyYW17UHJvamVjdFN0YXR1c1Nob3d9IGVxICdhbGwnICYmICRQYXJhbXtTdGF0dXN9OwoKICAgICAgICAgICAgaWYgKCRBY3Rpb25zUmVmKSB7CiAgICAgICAgICAgICAgICBmb3IgbXkgJEFjdGlvbklEICgKICAgICAgICAgICAgICAgICAgICBzb3J0IHsgJEFjdGlvbnNSZWYtPnskYX17TmFtZX0gY21wICRBY3Rpb25zUmVmLT57JGJ9e05hbWV9IH0KICAgICAgICAgICAgICAgICAgICBrZXlzICV7JEFjdGlvbnNSZWZ9CiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG15ICRBY3Rpb25SZWYgPSAkQWN0aW9uc1JlZi0+eyRBY3Rpb25JRH07CgogICAgICAgICAgICAgICAgICAgICRQYXJhbXtBY3Rpb259ICAgICA9ICRBY3Rpb25SZWYtPntOYW1lfTsKICAgICAgICAgICAgICAgICAgICAkUGFyYW17SG91cnN9ICAgICAgPSBzcHJpbnRmKCAiJS4yZiIsICRBY3Rpb25SZWYtPntQZXJNb250aH0gfHwgMCApOwogICAgICAgICAgICAgICAgICAgICRQYXJhbXtIb3Vyc1RvdGFsfSA9IHNwcmludGYoICIlLjJmIiwgJEFjdGlvblJlZi0+e1RvdGFsfSB8fCAwICk7CiAgICAgICAgICAgICAgICAgICAgJFRvdGFsICAgICAgKz0gJFBhcmFte0hvdXJzfTsKICAgICAgICAgICAgICAgICAgICAkVG90YWxUb3RhbCArPSAkUGFyYW17SG91cnNUb3RhbH07CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnQWN0aW9uJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIGlmICggISRQYXJhbXtQcm9qZWN0fSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFBhcmFte1Byb2plY3R9ID0gJFByb2plY3RSZWYtPntOYW1lfTsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJFByb2plY3REZXNjcmlwdGlvbiA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHQgICAgICAgICAgID0+ICRQcm9qZWN0UmVmLT57RGVzY3JpcHRpb259LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgSFRNTFJlc3VsdE1vZGUgPT4gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ld0xpbmUgICAgICAgID0+IDUwLAogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1Byb2plY3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUm93U3BhbiA9PiAoIDEgKyBzY2FsYXIga2V5cyAleyRBY3Rpb25zUmVmfSApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1cyAgPT4gJFBhcmFte1N0YXR1c30sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQcm9qZWN0RGVzY3JpcHRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUHJvamVjdERlc2NyaXB0aW9uJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdERlc2NyaXB0aW9uID0+ICRQcm9qZWN0RGVzY3JpcHRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJFVzZXJEYXRhe0NyZWF0ZVByb2plY3R9ICkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcGVyc29ucyB3aG8gYXJlIGFsbG93ZWQgdG8gc2VlIHRoZSBjcmVhdGUgb2JqZWN0IGxpbmsgYXJlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFsbG93ZWQgdG8gc2VlIHRoZSBwcm9qZWN0IHJlcG9ydGluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdQcm9qZWN0TGluaycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2plY3QgICA9PiAkUHJvamVjdFJlZi0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9qZWN0SUQgPT4gJFByb2plY3RJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUHJvamVjdE5vTGluaycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7IFByb2plY3QgPT4gJFByb2plY3RSZWYtPntOYW1lfSB9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIE5vdyBzaG93IHJvdyB3aXRoIHRvdGFsIHJlc3VsdCBvZiBhbGwgYWN0aW9ucyBvZiB0aGlzIHByb2plY3QKICAgICAgICAgICAgICAgICRQYXJhbXtIb3Vyc30gICAgICA9IHNwcmludGYoICIlLjJmIiwgJFRvdGFsICk7CiAgICAgICAgICAgICAgICAkUGFyYW17SG91cnNUb3RhbH0gPSBzcHJpbnRmKCAiJS4yZiIsICRUb3RhbFRvdGFsICk7CiAgICAgICAgICAgICAgICAkUGFyYW17VG90YWxIb3Vyc30gICAgICArPSAkVG90YWw7CiAgICAgICAgICAgICAgICAkUGFyYW17VG90YWxIb3Vyc1RvdGFsfSArPSAkVG90YWxUb3RhbDsKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnQWN0aW9uVG90YWwnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4geyVQYXJhbX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICggZGVmaW5lZCggJFBhcmFte1RvdGFsSG91cnN9ICkgKSB7CiAgICAgICAgICAgICRQYXJhbXtUb3RhbEhvdXJzfSA9IHNwcmludGYoICIlLjJmIiwgJFBhcmFte1RvdGFsSG91cnN9ICk7CiAgICAgICAgfQogICAgICAgIGlmICggZGVmaW5lZCggJFBhcmFte1RvdGFsSG91cnNUb3RhbH0gKSApIHsKICAgICAgICAgICAgJFBhcmFte1RvdGFsSG91cnNUb3RhbH0gPSBzcHJpbnRmKCAiJS4yZiIsICRQYXJhbXtUb3RhbEhvdXJzVG90YWx9ICk7CiAgICAgICAgfQoKICAgICAgICAjIGJ1aWxkIG91dHB1dAogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlciggVGl0bGUgPT4gJ092ZXJ2aWV3JyApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRUaW1lQWNjb3VudGluZ092ZXJ2aWV3JwogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHNldHRpbmdzIGZvciBoYW5kbGluZyB0aW1lIGFjY291bnRpbmcKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU2V0dGluZycgKSB7CgogICAgICAgICMgZ2V0IHVzZXIgZGF0YQogICAgICAgIG15ICVVc2VyRGF0YSA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Vc2VyR2V0KAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgcGVybWlzc2lvbiBjaGVjawogICAgICAgIGlmICggJFVzZXJEYXRhe0NyZWF0ZVByb2plY3R9IHx8ICRTZWxmLT57QWNjZXNzUnd9ICkgewoKICAgICAgICAgICAgIyBnZXQgdGhlIHVzZXIgYWN0aW9uIHRvIHNob3cgYSBtc2cgaWYgYW4gdXNlciB3YXMgdXBkYXRlZCBvciBhZGRlZAogICAgICAgICAgICBteSAkTm90ZSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1VzZXInICk7CgogICAgICAgICAgICAjIGJ1aWxkIG91dHB1dAogICAgICAgICAgICAkU2VsZi0+X1NldHRpbmdPdmVydmlldygpOwogICAgICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoIFRpdGxlID0+ICdTZXR0aW5nJyApOwogICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAgICAgIyBzaG93IGEgbm90aWZpY2F0aW9uIG1zZyBpZiBwcm9wZXIKICAgICAgICAgICAgaWYgKCROb3RlKSB7CiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICROb3RlIGVxICdFZGl0VXNlcicKICAgICAgICAgICAgICAgICAgICA/ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm90aWZ5KCBJbmZvID0+ICdVc2VyIHVwZGF0ZWQhJyApCiAgICAgICAgICAgICAgICAgICAgOiAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vdGlmeSggSW5mbyA9PiAnVXNlciBhZGRlZCEnICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRUaW1lQWNjb3VudGluZ1NldHRpbmcnCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgICAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICAgICAgfQoKICAgICAgICAjIHJldHVybiBubyBwZXJtaXNzaW9uIHNjcmVlbgogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vUGVybWlzc2lvbiggV2l0aEhlYWRlciA9PiAneWVzJyApOwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHRpbWUgYWNjb3VudGluZyByZXBvcnRpbmcKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnUmVwb3J0aW5nJyApIHsKICAgICAgICBteSAlRnJvbnRlbmQgICA9ICgpOwogICAgICAgIG15ICVTaG93blVzZXJzID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+VXNlckxpc3QoCiAgICAgICAgICAgIFR5cGUgID0+ICdMb25nJywKICAgICAgICAgICAgVmFsaWQgPT4gMAogICAgICAgICk7CiAgICAgICAgbXkgKCAkU2VjLCAkTWluLCAkSG91ciwgJEN1cnJlbnREYXksICRNb250aCwgJFllYXIgKSA9ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUyRGF0ZSgKICAgICAgICAgICAgU3lzdGVtVGltZSA9PiAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lKCksCiAgICAgICAgKTsKCiAgICAgICAgIyBwZXJtaXNzaW9uIGNoZWNrCiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm9QZXJtaXNzaW9uKCBXaXRoSGVhZGVyID0+ICd5ZXMnICkgaWYgISRTZWxmLT57QWNjZXNzUnd9OwoKICAgICAgICBmb3IgbXkgJFBhcmFtZXRlciAocXcoU3RhdHVzIE1vbnRoIFllYXIgUHJvamVjdFN0YXR1c1Nob3cpKSB7CiAgICAgICAgICAgICRQYXJhbXskUGFyYW1ldGVyfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtZXRlciApOwogICAgICAgIH0KCiAgICAgICAgIyBDaGVjayBEYXRlCiAgICAgICAgaWYgKCAhJFBhcmFte1llYXJ9IHx8ICEkUGFyYW17TW9udGh9ICkgewogICAgICAgICAgICAkUGFyYW17WWVhcn0gID0gJFllYXI7CiAgICAgICAgICAgICRQYXJhbXtNb250aH0gPSAkTW9udGg7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkUGFyYW17TW9udGh9ID0gc3ByaW50ZiggIiUwMmQiLCAkUGFyYW17TW9udGh9ICk7CiAgICAgICAgfQoKICAgICAgICAjIHN0b3JlIGxhc3Qgc2NyZWVuCiAgICAgICAgJFNlbGYtPntTZXNzaW9uT2JqZWN0fS0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgICAgICBLZXkgICAgICAgPT4gJ0xhc3RTY3JlZW4nLAogICAgICAgICAgICBWYWx1ZSA9PgogICAgICAgICAgICAgICAgIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn07U3ViYWN0aW9uPVJlcG9ydGluZztZZWFyPSRQYXJhbXtZZWFyfTtNb250aD0kUGFyYW17TW9udGh9IiwKICAgICAgICApOwoKICAgICAgICAkUGFyYW17TW9udGhfdG9fVGV4dH0gPSAkTW9udGhBcnJheVsgJFBhcmFte01vbnRofSBdOwoKICAgICAgICBteSAlTW9udGggPSAoKTsKICAgICAgICBmb3IgbXkgJElEICggMSAuLiAxMiApIHsKICAgICAgICAgICAgJE1vbnRoeyBzcHJpbnRmKCAiJTAyZCIsICRJRCApIH0gPSAkTW9udGhBcnJheVskSURdOwogICAgICAgIH0KCiAgICAgICAgJEZyb250ZW5ke01vbnRoT3B0aW9ufSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgICAgICAgID0+IFwlTW9udGgsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgID0+ICRQYXJhbXtNb250aH0gfHwgJycsCiAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICdNb250aCcsCiAgICAgICAgICAgIFNvcnQgICAgICAgID0+ICdOdW1lcmljS2V5JywKICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMSwKICAgICAgICApOwoKICAgICAgICBteSBAWWVhciA9ICggJFllYXIgLSA0IC4uICRZZWFyICsgMSApOwoKICAgICAgICAkRnJvbnRlbmR7WWVhck9wdGlvbn0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBEYXRhICAgICAgICA9PiBcQFllYXIsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgID0+ICRQYXJhbXtZZWFyfSB8fCAnJywKICAgICAgICAgICAgTmFtZSAgICAgICAgPT4gJ1llYXInLAogICAgICAgICAgICBUcmFuc2xhdGlvbiA9PiAwLAogICAgICAgICk7CgogICAgICAgICggJFBhcmFte1llYXJCYWNrfSwgJFBhcmFte01vbnRoQmFja30sICRQYXJhbXtEYXlCYWNrfSApCiAgICAgICAgICAgID0gQWRkX0RlbHRhX1lNRCggJFBhcmFte1llYXJ9LCAkUGFyYW17TW9udGh9LCAxLCAwLCAtMSwgMCApOwogICAgICAgICggJFBhcmFte1llYXJOZXh0fSwgJFBhcmFte01vbnRoTmV4dH0sICRQYXJhbXtEYXlOZXh0fSApCiAgICAgICAgICAgID0gQWRkX0RlbHRhX1lNRCggJFBhcmFte1llYXJ9LCAkUGFyYW17TW9udGh9LCAxLCAwLCAxLCAwICk7CgogICAgICAgIG15ICVVc2VyUmVwb3J0ID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPlVzZXJSZXBvcnRpbmcoCiAgICAgICAgICAgIFllYXIgICA9PiAkUGFyYW17WWVhcn0sCiAgICAgICAgICAgIE1vbnRoICA9PiAkUGFyYW17TW9udGh9LAogICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJVVzZXJCYXNpY3MgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+VXNlckxpc3QoKTsKCiAgICAgICAgVVNFUklEOgogICAgICAgIGZvciBteSAkVXNlcklEICggc29ydCB7ICRTaG93blVzZXJzeyRhfSBjbXAgJFNob3duVXNlcnN7JGJ9IH0ga2V5cyAlU2hvd25Vc2VycyApIHsKICAgICAgICAgICAgbmV4dCBVU0VSSUQgaWYgISRVc2VyUmVwb3J0eyRVc2VySUR9OwoKICAgICAgICAgICAgZm9yIG15ICRQYXJhbWV0ZXIgKAogICAgICAgICAgICAgICAgcXcoTGVhdmVEYXkgT3ZlcnRpbWUgV29ya2luZ0hvdXJzIFNpY2sgTGVhdmVEYXlSZW1haW5pbmcgT3ZlcnRpbWVUb3RhbCkKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgJFBhcmFteyRQYXJhbWV0ZXJ9ID0gc3ByaW50ZiggIiUuMmYiLCAoICRVc2VyUmVwb3J0eyRVc2VySUR9eyRQYXJhbWV0ZXJ9IHx8IDAgKSApOwogICAgICAgICAgICAgICAgJFBhcmFteyAnVG90YWwnIC4gJFBhcmFtZXRlciB9ICs9ICRQYXJhbXskUGFyYW1ldGVyfTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBTaG93IE92ZXJ0aW1lIGlmIGFsbG93ZWQKICAgICAgICAgICAgaWYgKCAhJFVzZXJCYXNpY3N7JFVzZXJJRH17U2hvd092ZXJ0aW1lfSApIHsKICAgICAgICAgICAgICAgICRQYXJhbXtPdmVydGltZX0gICAgICA9ICcnOwogICAgICAgICAgICAgICAgJFBhcmFte092ZXJ0aW1lVG90YWx9ID0gJyc7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRQYXJhbXtVc2VyfSAgID0gJFNob3duVXNlcnN7JFVzZXJJRH07CiAgICAgICAgICAgICRQYXJhbXtVc2VySUR9ID0gJFVzZXJJRDsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1VzZXInLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7ICVQYXJhbSwgJUZyb250ZW5kIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBmb3IgbXkgJFBhcmFtZXRlciAoCiAgICAgICAgICAgIHF3KFRvdGFsTGVhdmVEYXkgVG90YWxPdmVydGltZSBUb3RhbFdvcmtpbmdIb3VycwogICAgICAgICAgICBUb3RhbFNpY2sgVG90YWxMZWF2ZURheVJlbWFpbmluZyBUb3RhbE92ZXJ0aW1lVG90YWwpCiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRQYXJhbXskUGFyYW1ldGVyfSA9IHNwcmludGYoICIlLjJmIiwgKCAkUGFyYW17JFBhcmFtZXRlcn0gKSB8fCAwICk7CiAgICAgICAgfQoKICAgICAgICAjIHNob3cgdGhlIHJlcG9ydCBzb3J0IGJ5IHByb2plY3RzCiAgICAgICAgaWYgKCAhJFBhcmFte1Byb2plY3RTdGF0dXNTaG93fSB8fCAkUGFyYW17UHJvamVjdFN0YXR1c1Nob3d9IGVxICd2YWxpZCcgKSB7CiAgICAgICAgICAgICRQYXJhbXtQcm9qZWN0U3RhdHVzU2hvd30gPSAnYWxsJzsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkUGFyYW17UHJvamVjdFN0YXR1c1Nob3d9IGVxICdhbGwnICkgewogICAgICAgICAgICAkUGFyYW17UHJvamVjdFN0YXR1c1Nob3d9ID0gJ3ZhbGlkJzsKICAgICAgICB9CgogICAgICAgICRQYXJhbXtTaG93UHJvamVjdHN9ID0gJ1Nob3cgJyAuICRQYXJhbXtQcm9qZWN0U3RhdHVzU2hvd30gLiAnIHByb2plY3RzJzsKCiAgICAgICAgbXkgJVByb2plY3REYXRhID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPlByb2plY3RBY3Rpb25SZXBvcnRpbmcoCiAgICAgICAgICAgIFllYXIgID0+ICRQYXJhbXtZZWFyfSwKICAgICAgICAgICAgTW9udGggPT4gJFBhcmFte01vbnRofSwKICAgICAgICApOwoKICAgICAgICAjIFJFTUFSSzptZXJnZSB0aGlzIHByb2plY3RyZXBvcnRpbmcgbGlzdCB3aXRoIHRoZSBsaXN0IGluIG92ZXJ2aWV3CiAgICAgICAgUFJPSkVDVElEOgogICAgICAgIGZvciBteSAkUHJvamVjdElEICgKICAgICAgICAgICAgc29ydCB7ICRQcm9qZWN0RGF0YXskYX0tPntOYW1lfSBjbXAgJFByb2plY3REYXRheyRifS0+e05hbWV9IH0KICAgICAgICAgICAga2V5cyAlUHJvamVjdERhdGEKICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgbXkgJFByb2plY3RSZWYgPSAkUHJvamVjdERhdGF7JFByb2plY3RJRH07CiAgICAgICAgICAgIG15ICRBY3Rpb25zUmVmID0gJFByb2plY3RSZWYtPntBY3Rpb25zfTsKCiAgICAgICAgICAgICRQYXJhbXtQcm9qZWN0fSA9ICcnOwogICAgICAgICAgICAkUGFyYW17U3RhdHVzfSA9ICRQcm9qZWN0UmVmLT57U3RhdHVzfSA/ICcnIDogJ3Bhc3Npdic7CgogICAgICAgICAgICBteSAkVG90YWwgICAgICA9IDA7CiAgICAgICAgICAgIG15ICRUb3RhbFRvdGFsID0gMDsKCiAgICAgICAgICAgIG5leHQgUFJPSkVDVElEIGlmICRQYXJhbXtQcm9qZWN0U3RhdHVzU2hvd30gZXEgJ2FsbCcgJiYgJFBhcmFte1N0YXR1c307CgogICAgICAgICAgICBmb3IgbXkgJEFjdGlvbklEICgKICAgICAgICAgICAgICAgIHNvcnQgeyAkQWN0aW9uc1JlZi0+eyRhfS0+e05hbWV9IGNtcCAkQWN0aW9uc1JlZi0+eyRifS0+e05hbWV9IH0KICAgICAgICAgICAgICAgIGtleXMgJXskQWN0aW9uc1JlZn0KICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbXkgJEFjdGlvblJlZiA9ICRBY3Rpb25zUmVmLT57JEFjdGlvbklEfTsKCiAgICAgICAgICAgICAgICAkUGFyYW17QWN0aW9ufSAgICAgPSAkQWN0aW9uUmVmLT57TmFtZX07CiAgICAgICAgICAgICAgICAkUGFyYW17SG91cnN9ICAgICAgPSBzcHJpbnRmKCAiJS4yZiIsICRBY3Rpb25SZWYtPntQZXJNb250aH0gfHwgMCApOwogICAgICAgICAgICAgICAgJFBhcmFte0hvdXJzVG90YWx9ID0gc3ByaW50ZiggIiUuMmYiLCAkQWN0aW9uUmVmLT57VG90YWx9IHx8IDAgKTsKICAgICAgICAgICAgICAgICRUb3RhbCAgICAgICs9ICRQYXJhbXtIb3Vyc307CiAgICAgICAgICAgICAgICAkVG90YWxUb3RhbCArPSAkUGFyYW17SG91cnNUb3RhbH07CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0FjdGlvbicsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgaWYgKCAhJFBhcmFte1Byb2plY3R9ICkgewogICAgICAgICAgICAgICAgICAgICRQYXJhbXtQcm9qZWN0fSA9ICRQcm9qZWN0UmVmLT57TmFtZX07CiAgICAgICAgICAgICAgICAgICAgbXkgJFByb2plY3REZXNjcmlwdGlvbiA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QXNjaWkySHRtbCgKICAgICAgICAgICAgICAgICAgICAgICAgVGV4dCAgICAgICAgICAgPT4gJFByb2plY3RSZWYtPntEZXNjcmlwdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgICAgIEhUTUxSZXN1bHRNb2RlID0+IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIE5ld0xpbmUgICAgICAgID0+IDUwLAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1Byb2plY3QnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJvd1NwYW4gICAgICAgICAgICA9PiAoIDEgKyBzY2FsYXIga2V5cyAleyRBY3Rpb25zUmVmfSApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzICAgICAgICAgICAgID0+ICRQYXJhbXtTdGF0dXN9LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdERlc2NyaXB0aW9uID0+ICRQcm9qZWN0RGVzY3JpcHRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9qZWN0ICAgICAgICAgICAgPT4gJFByb2plY3RSZWYtPntOYW1lfSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2plY3RJRCAgICAgICAgICA9PiAkUHJvamVjdElELAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRQYXJhbXtIb3Vyc30gICAgICA9IHNwcmludGYoICIlLjJmIiwgJFRvdGFsICk7CiAgICAgICAgICAgICRQYXJhbXtIb3Vyc1RvdGFsfSA9IHNwcmludGYoICIlLjJmIiwgJFRvdGFsVG90YWwgKTsKICAgICAgICAgICAgJFBhcmFte1RvdGFsSG91cnN9ICAgICAgKz0gJFRvdGFsOwogICAgICAgICAgICAkUGFyYW17VG90YWxIb3Vyc1RvdGFsfSArPSAkVG90YWxUb3RhbDsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0FjdGlvblRvdGFsJywKICAgICAgICAgICAgICAgIERhdGEgPT4geyAlUGFyYW0sICVGcm9udGVuZCB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJFBhcmFte1RvdGFsSG91cnN9ICAgICAgfHw9IDA7CiAgICAgICAgJFBhcmFte1RvdGFsSG91cnNUb3RhbH0gfHw9IDA7CgogICAgICAgICRQYXJhbXtUb3RhbEhvdXJzfSAgICAgID0gc3ByaW50ZiggIiUuMmYiLCAkUGFyYW17VG90YWxIb3Vyc30gKTsKICAgICAgICAkUGFyYW17VG90YWxIb3Vyc1RvdGFsfSA9IHNwcmludGYoICIlLjJmIiwgJFBhcmFte1RvdGFsSG91cnNUb3RhbH0gKTsKCiAgICAgICAgIyBidWlsZCBvdXRwdXQKICAgICAgICBteSAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCBUaXRsZSA9PiAnUmVwb3J0aW5nJyApOwogICAgICAgICRPdXRwdXQgICAgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgJE91dHB1dCAgICAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgRGF0YSA9PiB7ICVQYXJhbSwgJUZyb250ZW5kIH0sCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRUaW1lQWNjb3VudGluZ1JlcG9ydGluZycKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyB0aW1lIGFjY291bnRpbmcgcHJvamVjdCByZXBvcnRpbmcKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnUHJvamVjdFJlcG9ydGluZycgKSB7CiAgICAgICAgbXkgJUZyb250ZW5kID0gKCk7CgogICAgICAgICMgcGVybWlzc2lvbiBjaGVjawogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vUGVybWlzc2lvbiggV2l0aEhlYWRlciA9PiAneWVzJyApIGlmICEkU2VsZi0+e0FjY2Vzc1JvfTsKCiAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgJFBhcmFte1Byb2plY3RJRH0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdQcm9qZWN0SUQnICk7CgogICAgICAgICMgY2hlY2sgbmVlZGVkIHBhcmFtcwogICAgICAgIGlmICggISRQYXJhbXtQcm9qZWN0SUR9ICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ1Byb2plY3RSZXBvcnRpbmc6IE5lZWQgUHJvamVjdElEJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgbXkgJUFjdGlvbiAgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+QWN0aW9uU2V0dGluZ3NHZXQoKTsKICAgICAgICBteSAlUHJvamVjdCA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Qcm9qZWN0U2V0dGluZ3NHZXQoKTsKICAgICAgICAkUGFyYW17UHJvamVjdH0gPSAkUHJvamVjdHtQcm9qZWN0fXsgJFBhcmFte1Byb2plY3RJRH0gfTsKCiAgICAgICAgbXkgJVNob3duVXNlcnMgPSAkU2VsZi0+e1VzZXJPYmplY3R9LT5Vc2VyTGlzdCgKICAgICAgICAgICAgVHlwZSAgPT4gJ0xvbmcnLAogICAgICAgICAgICBWYWxpZCA9PiAwCiAgICAgICAgKTsKCiAgICAgICAgIyBuZWNhc3NhcnkgYmVjYXVzZSB0aGUgUHJvamVjdEFjdGlvblJlcG9ydGluZyBpcyBub3QgcmV3b3JrZWQKICAgICAgICBteSAoICRTZWMsICRNaW4sICRIb3VyLCAkQ3VycmVudERheSwgJE1vbnRoLCAkWWVhciApID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgICAgICBTeXN0ZW1UaW1lID0+ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKSwKICAgICAgICApOwogICAgICAgIG15ICVQcm9qZWN0RGF0YSA9ICgpOwogICAgICAgIG15ICVQcm9qZWN0VGltZSA9ICgpOwoKICAgICAgICAjIE9ubHkgb25lIGZ1bmN0aW9uIHNob3VsZCBiZSBlbm91Z2gKICAgICAgICBmb3IgbXkgJFVzZXJJRCAoIHNvcnQga2V5cyAlU2hvd25Vc2VycyApIHsKCiAgICAgICAgICAgICMgT3ZlcnZpZXcgcGVyIHByb2plY3QgYW5kIGFjdGlvbgogICAgICAgICAgICAjIFJFTUFSSzogVGhpcyBpcyB0aGUgd3JvbmcgZnVuY3Rpb24gdG8gZ2V0IHRoaXMgaW5mb3JtYXRpb24KICAgICAgICAgICAgJVByb2plY3REYXRhID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPlByb2plY3RBY3Rpb25SZXBvcnRpbmcoCiAgICAgICAgICAgICAgICBZZWFyICAgPT4gJFllYXIsCiAgICAgICAgICAgICAgICBNb250aCAgPT4gJE1vbnRoLAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmICggJFByb2plY3REYXRheyAkUGFyYW17UHJvamVjdElEfSB9ICkgewogICAgICAgICAgICAgICAgbXkgJEFjdGlvbnNSZWYgPSAkUHJvamVjdERhdGF7ICRQYXJhbXtQcm9qZWN0SUR9IH17QWN0aW9uc307CiAgICAgICAgICAgICAgICBmb3IgbXkgJEFjdGlvbklEICggc29ydCBrZXlzICV7JEFjdGlvbnNSZWZ9ICkgewogICAgICAgICAgICAgICAgICAgICRQcm9qZWN0VGltZXskQWN0aW9uSUR9eyRVc2VySUR9e0hvdXJzfSA9ICRBY3Rpb25zUmVmLT57JEFjdGlvbklEfXtUb3RhbH07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBkZWxldGUgJFNob3duVXNlcnN7JFVzZXJJRH07CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgc2hvdyB0aGUgaGVhZGVybGluZQogICAgICAgIGZvciBteSAkVXNlcklEICggc29ydCB7ICRTaG93blVzZXJzeyRhfSBjbXAgJFNob3duVXNlcnN7JGJ9IH0ga2V5cyAlU2hvd25Vc2VycyApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ1VzZXJOYW1lJywKICAgICAgICAgICAgICAgIERhdGEgPT4geyBVc2VyID0+ICRTaG93blVzZXJzeyRVc2VySUR9IH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGJldHRlciBzb2x1dGlvbiBmb3Igc29ydCBhY3Rpb25zIG5lY2Vzc2FyeQogICAgICAgIG15ICVOZXdBY3Rpb24gPSAoKTsKICAgICAgICBmb3IgbXkgJEFjdGlvbklEICggc29ydCBrZXlzICVQcm9qZWN0VGltZSApIHsKICAgICAgICAgICAgJE5ld0FjdGlvbnskQWN0aW9uSUR9ID0gJEFjdGlvbnskQWN0aW9uSUR9e0FjdGlvbn07CiAgICAgICAgfQogICAgICAgICVBY3Rpb24gPSAlTmV3QWN0aW9uOwoKICAgICAgICAjIHNob3cgdGhlIHJlc3VsdHMKICAgICAgICBteSAlVG90YWwgPSAoKTsKICAgICAgICBmb3IgbXkgJEFjdGlvbklEICggc29ydCB7ICRBY3Rpb257JGF9IGNtcCAkQWN0aW9ueyRifSB9IGtleXMgJUFjdGlvbiApIHsKICAgICAgICAgICAgbXkgJFRvdGFsSG91cnMgPSAwOwogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnQWN0aW9uJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIEFjdGlvbiA9PiAkQWN0aW9ueyRBY3Rpb25JRH0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgICAgICBmb3IgbXkgJFVzZXJJRCAoIHNvcnQgeyAkU2hvd25Vc2Vyc3skYX0gY21wICRTaG93blVzZXJzeyRifSB9IGtleXMgJVNob3duVXNlcnMgKSB7CiAgICAgICAgICAgICAgICAkVG90YWxIb3VycyArPSAkUHJvamVjdFRpbWV7JEFjdGlvbklEfXskVXNlcklEfXtIb3Vyc30gfHwgMDsKICAgICAgICAgICAgICAgICRUb3RhbHskVXNlcklEfSArPSAkUHJvamVjdFRpbWV7JEFjdGlvbklEfXskVXNlcklEfXtIb3Vyc30gfHwgMDsKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnVXNlcicsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIEhvdXJzID0+IHNwcmludGYoICIlLjJmIiwgJFByb2plY3RUaW1leyRBY3Rpb25JRH17JFVzZXJJRH17SG91cnN9IHx8IDAgKSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBUb3RhbAogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnVXNlcicsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBIb3VycyA9PiBzcHJpbnRmKCAiJS4yZiIsICRUb3RhbEhvdXJzICksCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAkUGFyYW17VG90YWxBbGx9ID0gMDsKICAgICAgICBmb3IgbXkgJFVzZXJJRCAoIHNvcnQgeyAkU2hvd25Vc2Vyc3skYX0gY21wICRTaG93blVzZXJzeyRifSB9IGtleXMgJVNob3duVXNlcnMgKSB7CiAgICAgICAgICAgICRQYXJhbXtUb3RhbEFsbH0gKz0gJFRvdGFseyRVc2VySUR9OwogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnVXNlclRvdGFsJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIFRvdGFsID0+IHNwcmludGYoICIlLjJmIiwgJFRvdGFseyRVc2VySUR9ICksCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJFBhcmFte1RvdGFsQWxsfSA9IHNwcmludGYoICIlLjJmIiwgJFBhcmFte1RvdGFsQWxsfSApOwoKICAgICAgICBteSBAUHJvamVjdEhpc3RvcnlBcnJheSA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Qcm9qZWN0SGlzdG9yeSgKICAgICAgICAgICAgUHJvamVjdElEID0+ICRQYXJhbXtQcm9qZWN0SUR9LAogICAgICAgICk7CiAgICAgICAgZm9yIG15ICRSb3cgKEBQcm9qZWN0SGlzdG9yeUFycmF5KSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdSb3cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgVXNlciAgID0+ICRSb3ctPntVc2VyfSwKICAgICAgICAgICAgICAgICAgICBBY3Rpb24gPT4gJFJvdy0+e0FjdGlvbn0sCiAgICAgICAgICAgICAgICAgICAgUmVtYXJrID0+ICRSb3ctPntSZW1hcmt9IHx8ICctLScsCiAgICAgICAgICAgICAgICAgICAgUGVyaW9kID0+IHNwcmludGYoICIlLjJmIiwgJFJvdy0+e1BlcmlvZH0gKSwKICAgICAgICAgICAgICAgICAgICBEYXRlICAgPT4gJFJvdy0+e0RhdGV9LAogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgc2hvdyB0aGUgdG90YWwgc3VtIG9mIGhvdXJzIGF0IHRoZSBlbmQgb2YgdGhlIGhpc3RvcnkgbGlzdAogICAgICAgICMgSSBhbHNvIGNhbiB1c2UgJFBhcmFte1RvdGFsQWxsfQogICAgICAgIG15ICRQcm9qZWN0VG90YWxIb3VycyA9IHNwcmludGYoCiAgICAgICAgICAgICIlLjJmIiwKICAgICAgICAgICAgJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPlByb2plY3RUb3RhbEhvdXJzKAogICAgICAgICAgICAgICAgUHJvamVjdElEID0+ICRQYXJhbXtQcm9qZWN0SUR9LAogICAgICAgICAgICAgICAgKQogICAgICAgICk7CgogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0hpc3RvcnlUb3RhbCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgSGlzdG9yeVRvdGFsID0+ICRQcm9qZWN0VG90YWxIb3VycyB8fCAwLAogICAgICAgICAgICAgICAgfQogICAgICAgICk7CgogICAgICAgICMgYnVpbGQgb3V0cHV0CiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCBUaXRsZSA9PiAnUHJvamVjdFJlcG9ydGluZycgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIERhdGEgPT4geyAlUGFyYW0sICVGcm9udGVuZCB9LAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50VGltZUFjY291bnRpbmdQcm9qZWN0UmVwb3J0aW5nJwogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGFkZCBwcm9qZWN0CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0FkZFByb2plY3QnICkgewogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgJFNlbGYtPl9Qcm9qZWN0U2V0dGluZ3NFZGl0KCBBY3Rpb24gPT4gJ0FkZFByb2plY3QnICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudFRpbWVBY2NvdW50aW5nU2V0dGluZycsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGFkZCBwcm9qZWN0IGFjdGlvbgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBZGRQcm9qZWN0QWN0aW9uJyApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q2hhbGxlbmdlVG9rZW5DaGVjaygpOwoKICAgICAgICBteSAkTm90ZSA9ICcnOwogICAgICAgIG15ICRQcm9qZWN0SUQ7CiAgICAgICAgbXkgKCAlR2V0UGFyYW0sICVFcnJvcnMgKTsKCiAgICAgICAgIyBnZXQgcGFyYW1ldGVycwogICAgICAgIGZvciBteSAkUGFyYW1ldGVyIChxdyhQcm9qZWN0IFByb2plY3REZXNjcmlwdGlvbikpIHsKICAgICAgICAgICAgJEdldFBhcmFteyRQYXJhbWV0ZXJ9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW1ldGVyICkgfHwgJyc7CiAgICAgICAgfQogICAgICAgICRHZXRQYXJhbXtQcm9qZWN0U3RhdHVzfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1Byb2plY3RTdGF0dXMnICkKICAgICAgICAgICAgfHwgJzAnOwoKICAgICAgICAjIGNoZWNrIGZvciBuZWVkZWQgZGF0YQogICAgICAgIGlmICggISRHZXRQYXJhbXtQcm9qZWN0fSApIHsKICAgICAgICAgICAgJEVycm9yc3tQcm9qZWN0SW52YWxpZH0gICA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICRFcnJvcnN7UHJvamVjdEVycm9yVHlwZX0gPSAnUHJvamVjdE1pc3NpbmdWYWx1ZSc7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBjaGVjayB0aGF0IHRoZSBuYW1lIGlzIHVuaXF1ZQogICAgICAgICAgICBteSAlRXhpc3RpbmdQcm9qZWN0ID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPlByb2plY3RHZXQoIFByb2plY3QgPT4gJEdldFBhcmFte1Byb2plY3R9ICk7CiAgICAgICAgICAgIGlmICglRXhpc3RpbmdQcm9qZWN0KSB7CiAgICAgICAgICAgICAgICAkRXJyb3Jze1Byb2plY3RJbnZhbGlkfSAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICRFcnJvcnN7UHJvamVjdEVycm9yVHlwZX0gPSAnUHJvamVjdER1cGxpY2F0ZU5hbWUnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGlmIG5vIGVycm9ycyBvY2N1cnJlZAogICAgICAgIGlmICggISVFcnJvcnMgKSB7CgogICAgICAgICAgICAjIGFkZCBwcm9qZWN0CiAgICAgICAgICAgICRQcm9qZWN0SUQgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+UHJvamVjdFNldHRpbmdzSW5zZXJ0KCVHZXRQYXJhbSk7CgogICAgICAgICAgICBpZiAoJFByb2plY3RJRCkgewoKICAgICAgICAgICAgICAgICMgYnVpbGQgdGhlIG91dHB1dAogICAgICAgICAgICAgICAgJFNlbGYtPl9TZXR0aW5nT3ZlcnZpZXcoKTsKICAgICAgICAgICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob3RpZnkoIEluZm8gPT4gJ1Byb2plY3QgYWRkZWQhJyApOwogICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50VGltZUFjY291bnRpbmdTZXR0aW5nJywKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4geyVHZXRQYXJhbX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwogICAgICAgICAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkTm90ZSA9ICRTZWxmLT57TG9nT2JqZWN0fS0+R2V0TG9nRW50cnkoCiAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiAnRXJyb3InLAogICAgICAgICAgICAgICAgICAgIFdoYXQgPT4gJ01lc3NhZ2UnLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBzb21ldGhpbmcgd2VudCB3cm9uZwogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTm90ZQogICAgICAgICAgICA/ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm90aWZ5KAogICAgICAgICAgICBQcmlvcml0eSA9PiAnRXJyb3InLAogICAgICAgICAgICBJbmZvICAgICA9PiAkTm90ZSwKICAgICAgICAgICAgKQogICAgICAgICAgICA6ICcnOwogICAgICAgICRTZWxmLT5fUHJvamVjdFNldHRpbmdzRWRpdCgKICAgICAgICAgICAgQWN0aW9uID0+ICdBZGRQcm9qZWN0JywKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAlRXJyb3JzLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudFRpbWVBY2NvdW50aW5nU2V0dGluZycsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGVkaXQgcHJvamVjdAogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdFZGl0UHJvamVjdCcgKSB7CiAgICAgICAgbXkgJElEID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnSUQnICk7CgogICAgICAgICMgZ2V0IHByb2plY3QgZGF0YQogICAgICAgIG15ICVQcm9qZWN0ID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPlByb2plY3RHZXQoIElEID0+ICRJRCApOwoKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICRTZWxmLT5fUHJvamVjdFNldHRpbmdzRWRpdCgKICAgICAgICAgICAgQWN0aW9uID0+ICdFZGl0UHJvamVjdCcsCiAgICAgICAgICAgICVQcm9qZWN0LAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudFRpbWVBY2NvdW50aW5nU2V0dGluZycsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGVkaXQgcHJvamVjdCBhY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnRWRpdFByb2plY3RBY3Rpb24nICkgewoKICAgICAgICAjIGNoYWxsZW5nZSB0b2tlbiBjaGVjayBmb3Igd3JpdGUgYWN0aW9uCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCk7CgogICAgICAgIG15ICROb3RlID0gJyc7CiAgICAgICAgbXkgKCAlR2V0UGFyYW0sICVFcnJvcnMgKTsKCiAgICAgICAgIyBnZXQgcGFyYW1ldGVycwogICAgICAgICRHZXRQYXJhbXtJRH0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdJRCcgKSB8fCAnJzsKICAgICAgICAkR2V0UGFyYW17UHJvamVjdFN0YXR1c30gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdQcm9qZWN0U3RhdHVzJyApCiAgICAgICAgICAgIHx8ICcwJzsKICAgICAgICBmb3IgbXkgJFBhcmFtZXRlciAocXcoUHJvamVjdCBQcm9qZWN0RGVzY3JpcHRpb24pKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1ldGVyfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtZXRlciApIHx8ICcnOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBmb3IgbmVlZGVkIGRhdGEKICAgICAgICBpZiAoICEkR2V0UGFyYW17UHJvamVjdH0gKSB7CiAgICAgICAgICAgICRFcnJvcnN7UHJvamVjdEludmFsaWR9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAjIGNoZWNrIHRoYXQgdGhlIG5hbWUgaXMgdW5pcXVlCiAgICAgICAgICAgIG15ICVFeGlzdGluZ1Byb2plY3QgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+UHJvamVjdEdldCggUHJvamVjdCA9PiAkR2V0UGFyYW17UHJvamVjdH0gKTsKCiAgICAgICAgICAgICMgaWYgdGhlIHByb2plY3QgbmFtZSBpcyBmb3VuZCwgY2hlY2sgdGhhdCB0aGUgSUQgaXMgZGlmZmVyZW50CiAgICAgICAgICAgIGlmICggJUV4aXN0aW5nUHJvamVjdCAmJiAkRXhpc3RpbmdQcm9qZWN0e0lEfSBuZSAkR2V0UGFyYW17SUR9ICkgewogICAgICAgICAgICAgICAgJEVycm9yc3tQcm9qZWN0SW52YWxpZH0gICA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICAkRXJyb3Jze1Byb2plY3RFcnJvclR5cGV9ID0gJ1Byb2plY3REdXBsaWNhdGVOYW1lJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBpZiBubyBlcnJvcnMgb2NjdXJyZWQKICAgICAgICBpZiAoICElRXJyb3JzICkgewoKICAgICAgICAgICAgIyBlZGl0IHByb2plY3QKICAgICAgICAgICAgaWYgKCAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+UHJvamVjdFNldHRpbmdzVXBkYXRlKCVHZXRQYXJhbSkgKSB7CgogICAgICAgICAgICAgICAgJFNlbGYtPl9TZXR0aW5nT3ZlcnZpZXcoKTsKICAgICAgICAgICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob3RpZnkoIEluZm8gPT4gJ1Byb2plY3QgdXBkYXRlZCEnICk7CiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRUaW1lQWNjb3VudGluZ1NldHRpbmcnLAogICAgICAgICAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgICAgICAgICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJE5vdGUgPSAkU2VsZi0+e0xvZ09iamVjdH0tPkdldExvZ0VudHJ5KAogICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gJ0Vycm9yJywKICAgICAgICAgICAgICAgICAgICBXaGF0ID0+ICdNZXNzYWdlJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgc29tZXRoaW5nIHdlbnQgd3JvbmcKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICRPdXRwdXQgLj0gJE5vdGUKICAgICAgICAgICAgPyAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vdGlmeSgKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ0Vycm9yJywKICAgICAgICAgICAgSW5mbyAgICAgPT4gJE5vdGUsCiAgICAgICAgICAgICkKICAgICAgICAgICAgOiAnJzsKICAgICAgICAkU2VsZi0+X1Byb2plY3RTZXR0aW5nc0VkaXQoCiAgICAgICAgICAgIEFjdGlvbiA9PiAnRWRpdFByb2plY3QnLAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJUVycm9ycywKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRUaW1lQWNjb3VudGluZ1NldHRpbmcnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBhZGQgdGFzawogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdBZGRUYXNrJyApIHsKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICRTZWxmLT5fVGFza1NldHRpbmdzRWRpdCggQWN0aW9uID0+ICdBZGRUYXNrJyApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRUaW1lQWNjb3VudGluZ1NldHRpbmcnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBhZGQgdGFzayBhY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQWRkVGFza0FjdGlvbicgKSB7CgogICAgICAgICMgY2hhbGxlbmdlIHRva2VuIGNoZWNrIGZvciB3cml0ZSBhY3Rpb24KICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgbXkgJE5vdGUgPSAnJzsKICAgICAgICBteSAkVGFza0lEOwogICAgICAgIG15ICggJUdldFBhcmFtLCAlRXJyb3JzICk7CgogICAgICAgICMgZ2V0IHBhcmFtZXRlcnMKICAgICAgICAkR2V0UGFyYW17VGFza30gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdUYXNrJyApIHx8ICcnOwogICAgICAgICRHZXRQYXJhbXtUYXNrU3RhdHVzfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1Rhc2tTdGF0dXMnICkKICAgICAgICAgICAgfHwgJzAnOwoKICAgICAgICAjIGNoZWNrIGZvciBuZWVkZWQgZGF0YQogICAgICAgIGlmICggISRHZXRQYXJhbXtUYXNrfSApIHsKICAgICAgICAgICAgJEVycm9yc3tUYXNrSW52YWxpZH0gICA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICRFcnJvcnN7VGFza0Vycm9yVHlwZX0gPSAnVGFza01pc3NpbmdWYWx1ZSc7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBjaGVjayB0aGF0IHRoZSBuYW1lIGlzIHVuaXF1ZQogICAgICAgICAgICBteSAlRXhpc3RpbmdUYXNrID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPkFjdGlvbkdldCggQWN0aW9uID0+ICRHZXRQYXJhbXtUYXNrfSApOwogICAgICAgICAgICBpZiAoJUV4aXN0aW5nVGFzaykgewogICAgICAgICAgICAgICAgJEVycm9yc3tUYXNrSW52YWxpZH0gICA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgICAgICAgICAkRXJyb3Jze1Rhc2tFcnJvclR5cGV9ID0gJ1Rhc2tEdXBsaWNhdGVOYW1lJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBpZiBubyBlcnJvcnMgb2NjdXJyZWQKICAgICAgICBpZiAoICElRXJyb3JzICkgewoKICAgICAgICAgICAgIyBhZGQgdGFzawogICAgICAgICAgICAkVGFza0lEID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPkFjdGlvblNldHRpbmdzSW5zZXJ0KAogICAgICAgICAgICAgICAgQWN0aW9uICAgICAgID0+ICRHZXRQYXJhbXtUYXNrfSwKICAgICAgICAgICAgICAgIEFjdGlvblN0YXR1cyA9PiAkR2V0UGFyYW17VGFza1N0YXR1c30sCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoJFRhc2tJRCkgewoKICAgICAgICAgICAgICAgICMgYnVpbGQgdGhlIG91dHB1dAogICAgICAgICAgICAgICAgJFNlbGYtPl9TZXR0aW5nT3ZlcnZpZXcoKTsKICAgICAgICAgICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob3RpZnkoIEluZm8gPT4gJ1Rhc2sgYWRkZWQhJyApOwogICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50VGltZUFjY291bnRpbmdTZXR0aW5nJywKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4ge30sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwogICAgICAgICAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAkTm90ZSA9ICRTZWxmLT57TG9nT2JqZWN0fS0+R2V0TG9nRW50cnkoCiAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiAnRXJyb3InLAogICAgICAgICAgICAgICAgICAgIFdoYXQgPT4gJ01lc3NhZ2UnLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBzb21ldGhpbmcgd2VudCB3cm9uZwogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkTm90ZQogICAgICAgICAgICA/ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm90aWZ5KAogICAgICAgICAgICBQcmlvcml0eSA9PiAnRXJyb3InLAogICAgICAgICAgICBJbmZvICAgICA9PiAkTm90ZSwKICAgICAgICAgICAgKQogICAgICAgICAgICA6ICcnOwogICAgICAgICRTZWxmLT5fVGFza1NldHRpbmdzRWRpdCgKICAgICAgICAgICAgQWN0aW9uID0+ICdBZGRUYXNrJywKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAlRXJyb3JzLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudFRpbWVBY2NvdW50aW5nU2V0dGluZycsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGVkaXQgdGFzawogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdFZGl0VGFzaycgKSB7CiAgICAgICAgbXkgJElEID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnQWN0aW9uSUQnICkgfHwgJyc7CgogICAgICAgICMgZ2V0IHByb2plY3QgZGF0YQogICAgICAgIG15ICVUYXNrID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPkFjdGlvbkdldCggSUQgPT4gJElEICk7CgogICAgICAgIG15ICVUYXNrRGF0YSA9ICgKICAgICAgICAgICAgVGFzayAgICAgICA9PiAkVGFza3tBY3Rpb259LAogICAgICAgICAgICBUYXNrU3RhdHVzID0+ICRUYXNre0FjdGlvblN0YXR1c30sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAkU2VsZi0+X1Rhc2tTZXR0aW5nc0VkaXQoCiAgICAgICAgICAgIEFjdGlvbiAgID0+ICdFZGl0VGFzaycsCiAgICAgICAgICAgIEFjdGlvbklEID0+ICRJRCwKICAgICAgICAgICAgJVRhc2tEYXRhLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudFRpbWVBY2NvdW50aW5nU2V0dGluZycsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGVkaXQgcHJvamVjdCBhY3Rpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnRWRpdFRhc2tBY3Rpb24nICkgewoKICAgICAgICAjIGNoYWxsZW5nZSB0b2tlbiBjaGVjayBmb3Igd3JpdGUgYWN0aW9uCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5DaGFsbGVuZ2VUb2tlbkNoZWNrKCk7CgogICAgICAgIG15ICROb3RlID0gJyc7CiAgICAgICAgbXkgKCAlR2V0UGFyYW0sICVFcnJvcnMgKTsKCiAgICAgICAgIyBnZXQgcGFyYW1ldGVycwogICAgICAgICRHZXRQYXJhbXtBY3Rpb25JRH0gICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ0FjdGlvbklEJyApICAgfHwgJyc7CiAgICAgICAgJEdldFBhcmFte1Rhc2tTdGF0dXN9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnVGFza1N0YXR1cycgKSB8fCAnMCc7CiAgICAgICAgJEdldFBhcmFte1Rhc2t9ICAgICAgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnVGFzaycgKSAgICAgICB8fCAnJzsKCiAgICAgICAgIyBjaGVjayBmb3IgbmVlZGVkIGRhdGEKICAgICAgICBpZiAoICEkR2V0UGFyYW17VGFza30gKSB7CiAgICAgICAgICAgICRFcnJvcnN7VGFza0ludmFsaWR9ID0gJ1NlcnZlckVycm9yJzsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAjIGNoZWNrIHRoYXQgdGhlIG5hbWUgaXMgdW5pcXVlCiAgICAgICAgICAgIG15ICVFeGlzdGluZ1Rhc2sgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+QWN0aW9uR2V0KCBBY3Rpb24gPT4gJEdldFBhcmFte1Rhc2t9ICk7CgogICAgICAgICAgICAjIGlmIHRoZSB0YXNrIG5hbWUgaXMgZm91bmQsIGNoZWNrIHRoYXQgdGhlIElEIGlzIGRpZmZlcmVudAogICAgICAgICAgICBpZiAoICVFeGlzdGluZ1Rhc2sgJiYgJEV4aXN0aW5nVGFza3tJRH0gbmUgJEdldFBhcmFte0FjdGlvbklEfSApIHsKICAgICAgICAgICAgICAgICRFcnJvcnN7VGFza0ludmFsaWR9ICAgPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAgICAgJEVycm9yc3tUYXNrRXJyb3JUeXBlfSA9ICdUYXNrRHVwbGljYXRlTmFtZSc7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgaWYgbm8gZXJyb3JzIG9jY3VycmVkCiAgICAgICAgaWYgKCAhJUVycm9ycyApIHsKCiAgICAgICAgICAgICMgZWRpdCBhY3Rpb24gKHRhc2spCiAgICAgICAgICAgIG15ICRBY3Rpb25VcGRhdGUgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+QWN0aW9uU2V0dGluZ3NVcGRhdGUoCiAgICAgICAgICAgICAgICBBY3Rpb25JRCAgICAgPT4gJEdldFBhcmFte0FjdGlvbklEfSwKICAgICAgICAgICAgICAgIEFjdGlvbiAgICAgICA9PiAkR2V0UGFyYW17VGFza30sCiAgICAgICAgICAgICAgICBBY3Rpb25TdGF0dXMgPT4gJEdldFBhcmFte1Rhc2tTdGF0dXN9LAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCRBY3Rpb25VcGRhdGUpIHsKICAgICAgICAgICAgICAgICRTZWxmLT5fU2V0dGluZ092ZXJ2aWV3KCk7CiAgICAgICAgICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKICAgICAgICAgICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm90aWZ5KCBJbmZvID0+ICdUYXNrIHVwZGF0ZWQhJyApOwogICAgICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50VGltZUFjY291bnRpbmdTZXR0aW5nJywKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CiAgICAgICAgICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICROb3RlID0gJFNlbGYtPntMb2dPYmplY3R9LT5HZXRMb2dFbnRyeSgKICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICdFcnJvcicsCiAgICAgICAgICAgICAgICAgICAgV2hhdCA9PiAnTWVzc2FnZScsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHNvbWV0aGluZyB3ZW50IHdyb25nCiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAkT3V0cHV0IC49ICROb3RlCiAgICAgICAgICAgID8gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob3RpZnkoCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdFcnJvcicsCiAgICAgICAgICAgIEluZm8gICAgID0+ICROb3RlLAogICAgICAgICAgICApCiAgICAgICAgICAgIDogJyc7CiAgICAgICAgJFNlbGYtPl9UYXNrU2V0dGluZ3NFZGl0KAogICAgICAgICAgICBBY3Rpb24gPT4gJ0VkaXRUYXNrJywKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICVFcnJvcnMsCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50VGltZUFjY291bnRpbmdTZXR0aW5nJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgYWRkIHVzZXIKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQWRkVXNlcicgKSB7CgogICAgICAgICMgZ2V0IHBhcmFtZXRlcnMKICAgICAgICBteSAkTmV3VXNlcklEID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnTmV3VXNlcklEJyApCiAgICAgICAgICAgIHx8ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1VzZXJJRCcgKQogICAgICAgICAgICB8fCAnJzsKICAgICAgICBpZiAoICEkTmV3VXNlcklEICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ1RoZSBVc2VySUQgaXMgbm90IHZhbGlkIScKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIG15ICROZXdUaW1lUGVyaW9kID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnTmV3VGltZVBlcmlvZCcgKTsKCiAgICAgICAgbXkgJExhc3RQZXJpb2ROdW1iZXIgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+VXNlckxhc3RQZXJpb2ROdW1iZXJHZXQoCiAgICAgICAgICAgIFVzZXJJRCA9PiAkTmV3VXNlcklELAogICAgICAgICk7CgogICAgICAgIG15ICRTdWNjZXNzID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPlVzZXJTZXR0aW5nc0luc2VydCgKICAgICAgICAgICAgVXNlcklEID0+ICROZXdVc2VySUQsCiAgICAgICAgICAgIFBlcmlvZCA9PiAkTGFzdFBlcmlvZE51bWJlciArIDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBpZiBpdCBpcyBub3QgYW4gYWN0aW9uIGFib3V0IGFkZGluZyBhIG5ldyB0aW1lIHBlcmlvZAogICAgICAgIGlmICggISROZXdUaW1lUGVyaW9kICkgewogICAgICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ0NhblwndCBpbnNlcnQgdXNlciBkYXRhIScKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIG15ICVHcm91cHMgPSAkU2VsZi0+e0dyb3VwT2JqZWN0fS0+R3JvdXBMaXN0KCBWYWxpZCA9PiAxICk7CiAgICAgICAgICAgIG15ICVHcm91cERhdGEgPSAkU2VsZi0+e0dyb3VwT2JqZWN0fS0+R3JvdXBNZW1iZXJMaXN0KAogICAgICAgICAgICAgICAgVXNlcklEID0+ICROZXdVc2VySUQsCiAgICAgICAgICAgICAgICBUeXBlICAgPT4gJ3JvJywKICAgICAgICAgICAgICAgIFJlc3VsdCA9PiAnSEFTSCcsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGZvciBteSAkR3JvdXBLZXkgKCBzb3J0IGtleXMgJUdyb3VwcyApIHsKICAgICAgICAgICAgICAgIGlmICggJEdyb3Vwc3skR3JvdXBLZXl9IGVxICd0aW1lX2FjY291bnRpbmcnICYmICEkR3JvdXBEYXRheyRHcm91cEtleX0gKSB7CgogICAgICAgICAgICAgICAgICAgICRTZWxmLT57R3JvdXBPYmplY3R9LT5Hcm91cE1lbWJlckFkZCgKICAgICAgICAgICAgICAgICAgICAgICAgR0lEICAgICAgICA9PiAkR3JvdXBLZXksCiAgICAgICAgICAgICAgICAgICAgICAgIFVJRCAgICAgICAgPT4gJE5ld1VzZXJJRCwKICAgICAgICAgICAgICAgICAgICAgICAgUGVybWlzc2lvbiA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBybyAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vdmVfaW50byA9PiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlICAgID0+IDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvd25lciAgICAgPT4gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW9yaXR5ICA9PiAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgcncgICAgICAgID0+IDAsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbXkgJVVzZXIgPSAkU2VsZi0+e1VzZXJPYmplY3R9LT5HZXRVc2VyRGF0YSggVXNlcklEID0+ICROZXdVc2VySUQgKTsKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICRTZWxmLT5fVXNlclNldHRpbmdzRWRpdCgKICAgICAgICAgICAgQWN0aW9uICAgID0+ICdBZGRVc2VyJywKICAgICAgICAgICAgU3ViYWN0aW9uID0+ICdBZGRVc2VyJywKICAgICAgICAgICAgJVVzZXIsCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50VGltZUFjY291bnRpbmdTZXR0aW5nJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgZWRpdCB1c2VyIHNldHRpbmdzCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0VkaXRVc2VyJyApIHsKICAgICAgICBteSAkSUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdVc2VySUQnICkgfHwgJyc7CiAgICAgICAgaWYgKCAhJElEICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgIE1lc3NhZ2UgPT4gJ1RoZSBVc2VySUQgaXMgbm90IHZhbGlkIScKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIG15ICROZXdUaW1lUGVyaW9kID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnTmV3VGltZVBlcmlvZCcgKTsKICAgICAgICBteSAkTGFzdFBlcmlvZE51bWJlciA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Vc2VyTGFzdFBlcmlvZE51bWJlckdldCgKICAgICAgICAgICAgVXNlcklEID0+ICRJRCwKICAgICAgICApOwoKICAgICAgICAjIGlmIGl0IGlzIGFuIGFjdGlvbiBhYm91dCBhZGRpbmcgYSBuZXcgdGltZSBwZXJpb2QsIGluc2VydCBpdAogICAgICAgIGlmICgkTmV3VGltZVBlcmlvZCkgewogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Vc2VyU2V0dGluZ3NJbnNlcnQoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJElELAogICAgICAgICAgICAgICAgUGVyaW9kID0+ICRMYXN0UGVyaW9kTnVtYmVyICsgMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICdVbmFibGUgdG8gYWRkIHRpbWUgcGVyaW9kISBQbGVhc2UgY29udGFjdCB5b3VyIGFkbWluaXN0cmF0b3IuJywKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG15ICVFcnJvcnMgPSAoKTsKCiAgICAgICAgaWYgKAogICAgICAgICAgICAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdBZGRQZXJpb2QnICkKICAgICAgICAgICAgfHwgJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnU3VibWl0VXNlckRhdGEnICkKICAgICAgICAgICAgKQogICAgICAgIHsKCiAgICAgICAgICAgICMgY2hlY2sgdmFsaWRpdHkgb2YgcGVyaW9kcwogICAgICAgICAgICAlRXJyb3JzID0gJFNlbGYtPl9DaGVja1ZhbGlkaXR5VXNlclBlcmlvZHMoIFBlcmlvZCA9PiAkTGFzdFBlcmlvZE51bWJlciApOwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgdXNlciBkYXRhCiAgICAgICAgbXkgJVVzZXIgPSAkU2VsZi0+e1VzZXJPYmplY3R9LT5HZXRVc2VyRGF0YSggVXNlcklEID0+ICRJRCApOwoKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICRTZWxmLT5fVXNlclNldHRpbmdzRWRpdCgKICAgICAgICAgICAgQWN0aW9uICAgID0+ICdFZGl0VXNlcicsCiAgICAgICAgICAgIFN1YmFjdGlvbiA9PiAnRWRpdFVzZXInLAogICAgICAgICAgICBVc2VySUQgICAgPT4gJElELAogICAgICAgICAgICBFcnJvcnMgICAgPT4gXCVFcnJvcnMsCiAgICAgICAgICAgIFBlcmlvZHMgICA9PiAkTGFzdFBlcmlvZE51bWJlciwKICAgICAgICAgICAgJVVzZXIsCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50VGltZUFjY291bnRpbmdTZXR0aW5nJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBtYXNzIGVudHJ5CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ01hc3NFbnRyeScgKSB7CgogICAgICAgICMgcGVybWlzc2lvbiBjaGVjawogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vUGVybWlzc2lvbiggV2l0aEhlYWRlciA9PiAneWVzJyApIGlmICEkU2VsZi0+e0FjY2Vzc1JvfTsKCiAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgZm9yIG15ICRQYXJhbWV0ZXIgKHF3KERhdGVzIExlYXZlRGF5IFNpY2sgT3ZlcnRpbWUpKSB7CiAgICAgICAgICAgICRQYXJhbXskUGFyYW1ldGVyfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtZXRlciApIHx8ICcnOwogICAgICAgIH0KCiAgICAgICAgIyBzcGxpdCB1cCBkYXRlcwogICAgICAgIG15IEBEYXRlcyA9IHNwbGl0IC9bfF0vLCAkUGFyYW17RGF0ZXN9OwogICAgICAgIG15ICRJbnNlcnRFcnJvciA9IDA7CgogICAgICAgICMgc2F2ZSBlbnRyaWVzIGluIHRoZSBkYgogICAgICAgIGZvciBteSAkRGF0ZSAoQERhdGVzKSB7CgogICAgICAgICAgICBteSAoICRZZWFyLCAkTW9udGgsICREYXkgKSA9IHNwbGl0IC9bLV0vLCAkRGF0ZTsKCiAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICEkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+V29ya2luZ1VuaXRzSW5zZXJ0KAogICAgICAgICAgICAgICAgICAgIFllYXIgICAgID0+ICRZZWFyLAogICAgICAgICAgICAgICAgICAgIE1vbnRoICAgID0+ICRNb250aCwKICAgICAgICAgICAgICAgICAgICBEYXkgICAgICA9PiAkRGF5LAogICAgICAgICAgICAgICAgICAgIExlYXZlRGF5ID0+ICRQYXJhbXtMZWF2ZURheX0gfHwgMCwKICAgICAgICAgICAgICAgICAgICBTaWNrICAgICA9PiAkUGFyYW17U2lja30gfHwgMCwKICAgICAgICAgICAgICAgICAgICBPdmVydGltZSA9PiAkUGFyYW17T3ZlcnRpbWV9IHx8IDAsCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRJbnNlcnRFcnJvciA9IDE7CiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgICAjIHJlZGlyZWN0IHRvIGVkaXQgc2NyZWVuIHdpdGggbG9nIG1lc3NhZ2UKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCgKICAgICAgICAgICAgT1AgPT4gJ0FjdGlvbj1BZ2VudFRpbWVBY2NvdW50aW5nO1N1YmFjdGlvbj1FZGl0O05vdGlmaWNhdGlvbj0nCiAgICAgICAgICAgICAgICAuICggJEluc2VydEVycm9yID8gJ0Vycm9yJyA6ICdTdWNjZXNzZnVsJyApCiAgICAgICAgKTsKCiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgc2hvdyBlcnJvciBzY3JlZW4KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbiggTWVzc2FnZSA9PiAnSW52YWxpZCBTdWJhY3Rpb24gcHJvY2VzcyEnICk7Cn0KCnN1YiBfQ2hlY2tWYWxpZGl0eVVzZXJQZXJpb2RzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJUVycm9ycyA9ICgpOwogICAgbXkgJUdldFBhcmFtOwoKICAgIGZvciAoIG15ICRQZXJpb2QgPSAxOyAkUGVyaW9kIDw9ICRQYXJhbXtQZXJpb2R9OyAkUGVyaW9kKysgKSB7CgogICAgICAgICMgY2hlY2sgZm9yIG5lZWRlZCBkYXRhCiAgICAgICAgZm9yIG15ICRQYXJhbWV0ZXIgKHF3KERhdGVTdGFydCBEYXRlRW5kIExlYXZlRGF5cykpIHsKICAgICAgICAgICAgJEdldFBhcmFteyRQYXJhbWV0ZXJ9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW1ldGVyIC4gIlskUGVyaW9kXSIgKTsKICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFteyRQYXJhbWV0ZXJ9ICkgewogICAgICAgICAgICAgICAgJEVycm9yc3sgJFBhcmFtZXRlciAuICctJyAuICRQZXJpb2QgLiAnSW52YWxpZCcgfSAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgICAgICRFcnJvcnN7ICRQYXJhbWV0ZXIgLiAnLScgLiAkUGVyaW9kIC4gJ0Vycm9yVHlwZScgfSA9ICdNaXNzaW5nVmFsdWUnOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIG15ICggJFllYXIsICRNb250aCwgJERheSApID0gc3BsaXQoICctJywgJEdldFBhcmFte0RhdGVTdGFydH0gKTsKICAgICAgICBteSAkU3RhcnREYXRlID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+RGF0ZTJTeXN0ZW1UaW1lKAogICAgICAgICAgICBZZWFyICAgPT4gJFllYXIsCiAgICAgICAgICAgIE1vbnRoICA9PiAkTW9udGgsCiAgICAgICAgICAgIERheSAgICA9PiAkRGF5LAogICAgICAgICAgICBIb3VyICAgPT4gMCwKICAgICAgICAgICAgTWludXRlID0+IDAsCiAgICAgICAgICAgIFNlY29uZCA9PiAwLAogICAgICAgICk7CiAgICAgICAgKCAkWWVhciwgJE1vbnRoLCAkRGF5ICkgPSBzcGxpdCggJy0nLCAkR2V0UGFyYW17RGF0ZUVuZH0gKTsKICAgICAgICBteSAkRW5kRGF0ZSA9ICRTZWxmLT57VGltZU9iamVjdH0tPkRhdGUyU3lzdGVtVGltZSgKICAgICAgICAgICAgWWVhciAgID0+ICRZZWFyLAogICAgICAgICAgICBNb250aCAgPT4gJE1vbnRoLAogICAgICAgICAgICBEYXkgICAgPT4gJERheSwKICAgICAgICAgICAgSG91ciAgID0+IDAsCiAgICAgICAgICAgIE1pbnV0ZSA9PiAwLAogICAgICAgICAgICBTZWNvbmQgPT4gMCwKICAgICAgICApOwogICAgICAgIGlmICggISRTdGFydERhdGUgKSB7CiAgICAgICAgICAgICRFcnJvcnN7ICdEYXRlU3RhcnQtJyAuICRQZXJpb2QgLiAnSW52YWxpZCcgfSAgID0gJ1NlcnZlckVycm9yJzsKICAgICAgICAgICAgJEVycm9yc3sgJ0RhdGVTdGFydC0nIC4gJFBlcmlvZCAuICdFcnJvclR5cGUnIH0gPSAnSW52YWxpZCc7CiAgICAgICAgfQogICAgICAgIGlmICggISRFbmREYXRlICkgewogICAgICAgICAgICAkRXJyb3JzeyAnRGF0ZUVuZC0nIC4gJFBlcmlvZCAuICdJbnZhbGlkJyB9ICAgPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAkRXJyb3JzeyAnRGF0ZUVuZC0nIC4gJFBlcmlvZCAuICdFcnJvclR5cGUnIH0gPSAnSW52YWxpZCc7CiAgICAgICAgfQogICAgICAgIGlmICggJFN0YXJ0RGF0ZSAmJiAkRW5kRGF0ZSAmJiAkU3RhcnREYXRlID49ICRFbmREYXRlICkgewogICAgICAgICAgICAkRXJyb3JzeyAnRGF0ZUVuZC0nIC4gJFBlcmlvZCAuICdJbnZhbGlkJyB9ICAgPSAnU2VydmVyRXJyb3InOwogICAgICAgICAgICAkRXJyb3JzeyAnRGF0ZUVuZC0nIC4gJFBlcmlvZCAuICdFcnJvclR5cGUnIH0gPSAnQmVmb3JlRGF0ZVN0YXJ0JzsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICVFcnJvcnM7Cn0KCnN1YiBfRmlyc3RVc2VyUmVkaXJlY3QgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIGZvciBpbml0aWFsIHVzZWluZywgdGhlIGZpcnN0IGFnZW50IHdpdGggcnctcmlnaHQgd2lsbCBiZSByZWRpcmVjdGVkCiAgICAjIHRvICdTZXR0aW5nJy4gVGhlbiBoZSBjYW4gZG8gdGhlIGluaXRpYWwgc2V0dGluZ3MKCiAgICBteSAlR3JvdXBMaXN0ID0gJFNlbGYtPntHcm91cE9iamVjdH0tPkdyb3VwTWVtYmVyTGlzdCgKICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgIFR5cGUgICA9PiAncncnLAogICAgICAgIFJlc3VsdCA9PiAnSEFTSCcsCiAgICApOwogICAgZm9yIG15ICRHcm91cEtleSAoIHNvcnQga2V5cyAlR3JvdXBMaXN0ICkgewogICAgICAgIGlmICggJEdyb3VwTGlzdHskR3JvdXBLZXl9IGVxICd0aW1lX2FjY291bnRpbmcnICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249QWdlbnRUaW1lQWNjb3VudGluZzsiIC4gIlN1YmFjdGlvbj1TZXR0aW5nIgogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgIE1lc3NhZ2UgPT4KICAgICAgICAgICAgIk5vIFVzZXJQZXJpb2QgYXZhaWxhYmxlLCBwbGVhc2UgY29udGFjdCB0aGUgdGltZSBhY2NvdW50aW5nIGFkbWluIHRvIGluc2VydCB5b3VyIFVzZXJQZXJpb2QhIgogICAgKTsKfQoKc3ViIF9BY3Rpb25MaXN0IHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgbXkgJUFjdGlvbkxpc3Q7CiAgICBteSAlQWN0aW9uID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPkFjdGlvblNldHRpbmdzR2V0KCk7CgogICAgIyBnZXQgYWN0aW9uIHNldHRpbmdzCiAgICBBQ1RJT05JRDoKICAgIGZvciBteSAkQWN0aW9uSUQgKCBzb3J0IGtleXMgJUFjdGlvbiApIHsKICAgICAgICBuZXh0IEFDVElPTklEIGlmICEkQWN0aW9ueyRBY3Rpb25JRH17QWN0aW9uU3RhdHVzfTsKICAgICAgICBuZXh0IEFDVElPTklEIGlmICEkQWN0aW9ueyRBY3Rpb25JRH17QWN0aW9ufTsKICAgICAgICAkQWN0aW9uTGlzdHskQWN0aW9uSUR9ID0gJEFjdGlvbnskQWN0aW9uSUR9e0FjdGlvbn07CiAgICB9CiAgICAkQWN0aW9uTGlzdHsnJ30gPSAnJzsKCiAgICByZXR1cm4gJUFjdGlvbkxpc3Q7Cn0KCnN1YiBfQWN0aW9uTGlzdENvbnN0cmFpbnRzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJUxpc3Q7CiAgICBpZiAoICRQYXJhbXtQcm9qZWN0SUR9ICYmIGtleXMgJXsgJFBhcmFte0FjdGlvbkxpc3RDb25zdHJhaW50c30gfSApIHsKICAgICAgICBteSAkUHJvamVjdE5hbWU7CgogICAgICAgIFBST0pFQ1Q6CiAgICAgICAgZm9yIG15ICRQcm9qZWN0ICggQHsgJFBhcmFte1Byb2plY3RMaXN0fSB9ICkgewogICAgICAgICAgICBpZiAoICRQcm9qZWN0LT57S2V5fSBlcSAkUGFyYW17UHJvamVjdElEfSApIHsKICAgICAgICAgICAgICAgICRQcm9qZWN0TmFtZSA9ICRQcm9qZWN0LT57VmFsdWV9OwogICAgICAgICAgICAgICAgbGFzdCBQUk9KRUNUOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoIGRlZmluZWQoJFByb2plY3ROYW1lKSApIHsKCiAgICAgICAgICAgICMgbG9vcCBvdmVyIGFjdGlvbnMgdG8gZmluZCBtYXRjaGVzIGZvciBjb25maWd1cmVkIHByb2plY3QKICAgICAgICAgICAgIyBhbmQgYWN0aW9uIHJlZ2V4cCBwYWlycwogICAgICAgICAgICBmb3IgbXkgJEFjdGlvbklEICggc29ydCBrZXlzICV7ICRQYXJhbXtBY3Rpb25MaXN0fSB9ICkgewoKICAgICAgICAgICAgICAgIG15ICRBY3Rpb25OYW1lID0gJFBhcmFte0FjdGlvbkxpc3R9LT57JEFjdGlvbklEfTsKCiAgICAgICAgICAgICAgICBSRUdFWFA6CiAgICAgICAgICAgICAgICBmb3IgbXkgJFByb2plY3ROYW1lUmVnRXhwICggc29ydCBrZXlzICV7ICRQYXJhbXtBY3Rpb25MaXN0Q29uc3RyYWludHN9IH0gKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJEFjdGlvbk5hbWVSZWdFeHAgPSAkUGFyYW17QWN0aW9uTGlzdENvbnN0cmFpbnRzfS0+eyRQcm9qZWN0TmFtZVJlZ0V4cH07CiAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAkUHJvamVjdE5hbWUgPX4gbXskUHJvamVjdE5hbWVSZWdFeHB9c214CiAgICAgICAgICAgICAgICAgICAgICAgICYmICRBY3Rpb25OYW1lID1+IG17JEFjdGlvbk5hbWVSZWdFeHB9c214CiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRMaXN0eyRBY3Rpb25JRH0gPSAkQWN0aW9uTmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgbGFzdCBSRUdFWFA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgYWxsIGF2YWlsYWJsZSBhY3Rpb25zIHdpbGwgYmUgYWRkZWQgaWYgbm8gYWN0aW9uIHdhcyBhZGRlZCBhYm92ZSAocG9zc2libGUgbWlzY29uZmlndXJhdGlvbikKICAgIGlmICggIWtleXMgJUxpc3QgKSB7CiAgICAgICAgZm9yIG15ICRBY3Rpb25JRCAoIHNvcnQga2V5cyAleyAkUGFyYW17QWN0aW9uTGlzdH0gfSApIHsKICAgICAgICAgICAgbXkgJEFjdGlvbk5hbWUgPSAkUGFyYW17QWN0aW9uTGlzdH0tPnskQWN0aW9uSUR9OwogICAgICAgICAgICAkTGlzdHskQWN0aW9uSUR9ID0gJEFjdGlvbk5hbWU7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBcJUxpc3Q7Cn0KCnN1YiBfUHJvamVjdExpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGF0IGZpcnN0IGEgZW1wdHkgbGluZQogICAgbXkgQExpc3QgPSAoCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAnJywKICAgICAgICAgICAgVmFsdWUgPT4gJycsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBnZXQgcHJvamVjdCBzZXR0aW5ncwogICAgbXkgJVByb2plY3QgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+UHJvamVjdFNldHRpbmdzR2V0KAogICAgICAgIFN0YXR1cyA9PiAndmFsaWQnLAogICAgKTsKCiAgICBpZiAoICEkU2VsZi0+e0xhc3RQcm9qZWN0c1JlZn0gKSB7CgogICAgICAgICMgZ2V0IHRoZSBsYXN0IHByb2plY3RzCiAgICAgICAgbXkgQExhc3RQcm9qZWN0cyA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5MYXN0UHJvamVjdHNPZlVzZXIoKTsKCiAgICAgICAgIyBhZGQgdGhlIGZhdm9yaXRzCiAgICAgICAgJXsgJFNlbGYtPntMYXN0UHJvamVjdHNSZWZ9IH0gPSBtYXAgeyAkXyA9PiAxIH0gQExhc3RQcm9qZWN0czsKICAgIH0KCiAgICBQUk9KRUNUSUQ6CiAgICBmb3IgbXkgJFByb2plY3RJRCAoCiAgICAgICAgc29ydCB7ICRQcm9qZWN0e1Byb2plY3R9eyRhfSBjbXAgJFByb2plY3R7UHJvamVjdH17JGJ9IH0KICAgICAgICBrZXlzICV7ICRQcm9qZWN0e1Byb2plY3R9IH0KICAgICAgICApCiAgICB7CiAgICAgICAgbmV4dCBQUk9KRUNUSUQgaWYgISRTZWxmLT57TGFzdFByb2plY3RzUmVmfS0+eyRQcm9qZWN0SUR9OwogICAgICAgIG15ICVIYXNoID0gKAogICAgICAgICAgICBLZXkgICA9PiAkUHJvamVjdElELAogICAgICAgICAgICBWYWx1ZSA9PiAkUHJvamVjdHtQcm9qZWN0fXskUHJvamVjdElEfSwKICAgICAgICApOwogICAgICAgIHB1c2ggQExpc3QsIFwlSGFzaDsKCiAgICAgICAgIyBhdCB0aGUgbW9tZW50IGl0IGlzIG5vdCBwb3NzaWxiZSBtYXJrIHRoZSBzZWxlY3RlZCBwcm9qZWN0CiAgICAgICAgIyBpbiB0aGUgZmF2b3JpdCBsaXN0IChJIHRoaW5rIGEgYnVnIGluIEJ1aWxkIHNlbGVjdGlvbj8hKQogICAgfQoKICAgICMgYWRkIHRoZSBzZXBlcmF0b3IKICAgIHB1c2ggQExpc3QsIHsKICAgICAgICBLZXkgICAgICA9PiAnMCcsCiAgICAgICAgVmFsdWUgICAgPT4gJy0tLS0tLS0tLS0tLS0tLS0tLS0tJywKICAgICAgICBEaXNhYmxlZCA9PiAxLAogICAgfTsKCiAgICAjIGFkZCBhbGwgYWxsb3dlZCBwcm9qZWN0cyB0byB0aGUgbGlzdAogICAgUFJPSkVDVElEOgogICAgZm9yIG15ICRQcm9qZWN0SUQgKAogICAgICAgIHNvcnQgeyAkUHJvamVjdHtQcm9qZWN0fXskYX0gY21wICRQcm9qZWN0e1Byb2plY3R9eyRifSB9CiAgICAgICAga2V5cyAleyAkUHJvamVjdHtQcm9qZWN0fSB9CiAgICAgICAgKQogICAgewogICAgICAgIG5leHQgUFJPSkVDVElEIGlmICEkUHJvamVjdHtQcm9qZWN0fXskUHJvamVjdElEfTsKICAgICAgICBteSAlSGFzaCA9ICgKICAgICAgICAgICAgS2V5ICAgPT4gJFByb2plY3RJRCwKICAgICAgICAgICAgVmFsdWUgPT4gJFByb2plY3R7UHJvamVjdH17JFByb2plY3RJRH0sCiAgICAgICAgKTsKICAgICAgICBpZiAoICRQYXJhbXtTZWxlY3RlZElEfSAmJiAkUGFyYW17U2VsZWN0ZWRJRH0gZXEgJFByb2plY3RJRCApIHsKICAgICAgICAgICAgJEhhc2h7U2VsZWN0ZWR9ID0gMTsKICAgICAgICB9CgogICAgICAgIHB1c2ggQExpc3QsIFwlSGFzaDsKICAgIH0KCiAgICBATGlzdCA9ICRTZWxmLT5fUHJvamVjdExpc3RDb25zdHJhaW50cygKICAgICAgICBMaXN0ICAgICAgID0+IFxATGlzdCwKICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtTZWxlY3RlZElEfSB8fCAnJywKICAgICk7CgogICAgcmV0dXJuIFxATGlzdDsKfQoKc3ViIF9Qcm9qZWN0TGlzdENvbnN0cmFpbnRzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgQExpc3Q7CiAgICBteSAkUHJvamVjdENvdW50ICAgICAgICAgICA9IDA7CiAgICBteSAkUHJvamVjdExpc3RDb25zdHJhaW50cyA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdUaW1lQWNjb3VudGluZzo6UHJvamVjdExpc3RDb25zdHJhaW50cycpOwoKICAgIGlmICgga2V5cyAleyRQcm9qZWN0TGlzdENvbnN0cmFpbnRzfSApIHsKCiAgICAgICAgIyBnZXQgZ3JvdXBzIG9mIGN1cnJlbnQgdXNlcgogICAgICAgIG15ICVHcm91cHMgPSAkU2VsZi0+e0dyb3VwT2JqZWN0fS0+R3JvdXBNZW1iZXJMaXN0KAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICBUeXBlICAgPT4gJ3JvJywKICAgICAgICAgICAgUmVzdWx0ID0+ICdIQVNIJywKICAgICAgICApOwogICAgICAgICVHcm91cHMgPSBtYXAgeyAkR3JvdXBzeyRffSA9PiAxIH0ga2V5cyAlR3JvdXBzOwoKICAgICAgICAjIGdldCBwcm9qZWN0IGxpc3QgY29uc3RyYWludHMKICAgICAgICBteSAlUHJvamVjdFJlZ2V4OwogICAgICAgIGZvciBteSAkUHJvamVjdFJlZ2V4ICggc29ydCBrZXlzICV7JFByb2plY3RMaXN0Q29uc3RyYWludHN9ICkgewogICAgICAgICAgICBmb3IgbXkgJFByb2plY3RHcm91cCAoIHNwbGl0IC8sXHMqLywgJFByb2plY3RMaXN0Q29uc3RyYWludHMtPnskUHJvamVjdFJlZ2V4fSApIHsKICAgICAgICAgICAgICAgIGlmICggJEdyb3Vwc3skUHJvamVjdEdyb3VwfSApIHsKICAgICAgICAgICAgICAgICAgICAkUHJvamVjdFJlZ2V4eyRQcm9qZWN0UmVnZXh9ID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBteSBAUHJvamVjdFJlZ2V4ID0ga2V5cyAlUHJvamVjdFJlZ2V4OwoKICAgICAgICAjIHJlZHVjZSBwcm9qZWN0IGxpc3QgYWNjb3JkaW5nIHRvIGNvbmZpZ3VyYXRpb24KICAgICAgICBpZiAoIHJlZiggJFBhcmFte0xpc3R9ICkgJiYgQFByb2plY3RSZWdleCApIHsKCiAgICAgICAgICAgIG15ICRFbGVtZW50Q291bnQgPSAwOwoKICAgICAgICAgICAgZm9yIG15ICRQcm9qZWN0ICggQHsgJFBhcmFte0xpc3R9IH0gKSB7CiAgICAgICAgICAgICAgICBteSAkUHJvamVjdE5hbWUgPSAkUHJvamVjdC0+e1ZhbHVlfTsKCiAgICAgICAgICAgICAgICAjIGVtcHR5IGZpcnN0IGVsZW1lbnQsIGxhc3QgcHJvamVjdHMgc2VwYXJhdG9yIGFuZCBjdXJyZW50bHkgc2VsZWN0ZWQgcHJvamVjdAogICAgICAgICAgICAgICAgaWYgKCAhJEVsZW1lbnRDb3VudCB8fCAhJFByb2plY3QtPntLZXl9IHx8ICRQcm9qZWN0LT57S2V5fSBlcSAkUGFyYW17U2VsZWN0ZWRJRH0gKSB7CiAgICAgICAgICAgICAgICAgICAgcHVzaCBATGlzdCwgJFByb2plY3Q7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBQUk9KRUNUUkVHRVhQOgogICAgICAgICAgICAgICAgICAgIGZvciBteSAkUHJvamVjdFJlZ2V4IChAUHJvamVjdFJlZ2V4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggJFByb2plY3ROYW1lID1+IG17JFByb2plY3RSZWdleH1zbXggKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIEBMaXN0LCAkUHJvamVjdDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQcm9qZWN0Q291bnQrKzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3QgUFJPSkVDVFJFR0VYUDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRFbGVtZW50Q291bnQrKzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiMgZ2V0IGZ1bGwgcHJvamVjdCBsaXN0IGlmIGNvbnN0cmFpbnRzIHJlc3VsdGVkIGluIGVtcHR5IHByb2plY3QgbGlzdCBvciBpZiBjb25zdHJhaW50cyBhcmVuJ3QgY29uZmlndXJlZCAocG9zc2libGUgbWlzY29uZmlndXJhdGlvbikKICAgIGlmICggISRQcm9qZWN0Q291bnQgKSB7CiAgICAgICAgQExpc3QgPSBAeyAkUGFyYW17TGlzdH0gfTsKICAgIH0KCiAgICByZXR1cm4gQExpc3Q7Cn0KCiMgaW50ZWdyYXRlIHRoZSBoYW5kbGluZyBmb3IgcmVxdWlyZWQgcmVtYXJrcyBpbiByZWxhdGlvbiB0byBwcm9qZWN0cwoKc3ViIF9Qcm9qZWN0MlJlbWFya1JlZ0V4cCB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgIG15IEBQcm9qZWN0czJSZW1hcmsgPSAoKTsKICAgIG15ICVQcm9qZWN0RGF0YSAgICAgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+UHJvamVjdFNldHRpbmdzR2V0KAogICAgICAgIFN0YXR1cyA9PiAndmFsaWQnLAogICAgKTsKCiAgICByZXR1cm4gJycgaWYgISRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdUaW1lQWNjb3VudGluZzo6UHJvamVjdDJSZW1hcmtSZWdFeHAnKTsKCiAgICBteSAkUHJvamVjdDJSZW1hcmtSZWdFeHAgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnVGltZUFjY291bnRpbmc6OlByb2plY3QyUmVtYXJrUmVnRXhwJyk7CgogICAgZm9yIG15ICRQcm9qZWN0SUQgKCBzb3J0IGtleXMgJXsgJFByb2plY3REYXRhe1Byb2plY3R9IH0gKSB7CiAgICAgICAgaWYgKCAkUHJvamVjdERhdGF7UHJvamVjdH17JFByb2plY3RJRH0gPX4gbXskUHJvamVjdDJSZW1hcmtSZWdFeHB9c214ICkgewogICAgICAgICAgICBwdXNoIEBQcm9qZWN0czJSZW1hcmssICRQcm9qZWN0SUQ7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBqb2luICd8JywgQFByb2plY3RzMlJlbWFyazsKfQoKc3ViIF9Qcm9qZWN0U2V0dGluZ3NFZGl0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlld1Byb2plY3QnLAogICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICk7CgogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uTGlzdFByb2plY3QnICk7CiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25TZXR0aW5nT3ZlcnZpZXcnICk7CgogICAgIyBkZWZpbmUgc3RhdHVzIGxpc3QKICAgIG15ICVTdGF0dXNMaXN0ID0gKAogICAgICAgIDEgPT4gJ3ZhbGlkJywKICAgICAgICAwID0+ICdpbnZhbGlkJywKICAgICk7CgogICAgbXkgJFByb2plY3RTdGF0dXMgPSAxOwogICAgaWYgKCBkZWZpbmVkICRQYXJhbXtQcm9qZWN0U3RhdHVzfSApIHsKICAgICAgICAkUHJvamVjdFN0YXR1cyA9ICRQYXJhbXtQcm9qZWN0U3RhdHVzfQogICAgfQoKICAgICRQYXJhbXtTdGF0dXNPcHRpb259ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IFwlU3RhdHVzTGlzdCwKICAgICAgICBTZWxlY3RlZElEID0+ICRQcm9qZWN0U3RhdHVzLAogICAgICAgIE5hbWUgICAgICAgPT4gJ1Byb2plY3RTdGF0dXMnLAogICAgKTsKCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3VXBkYXRlUHJvamVjdCcsCiAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgKTsKCiAgICAjIHNob3dzIGhlYWRlcgogICAgaWYgKCAkUGFyYW17QWN0aW9ufSBlcSAnRWRpdFByb2plY3QnICkgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ0hlYWRlckVkaXRQcm9qZWN0JyApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnSGVhZGVyQWRkUHJvamVjdCcgKTsKICAgIH0KCiAgICAjIHNob3cgc2VydmVyIGVycm9yIG1zZyAoaWYgYW55KSBmb3IgdGhlIHByb2plY3QgbmFtZQogICAgaWYgKCAkUGFyYW17UHJvamVjdEVycm9yVHlwZX0gKSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAkUGFyYW17UHJvamVjdEVycm9yVHlwZX0gKTsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKc3ViIF9TZXR0aW5nT3ZlcnZpZXcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlUHJvamVjdCA9ICgpOwogICAgbXkgJURhdGEgICAgPSAoKTsKCiAgICAjIGJ1aWxkIG91dHB1dAogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdTZXR0aW5nJywKICAgICk7CiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25MaXN0U2V0dGluZycgKTsKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkFkZFByb2plY3QnICk7CgogICAgIyBoYXNoIHRvIHNhdmUgcmVnaXN0ZXJlZCB1c2VycwogICAgbXkgJVVzZXI7CgogICAgaWYgKCAkU2VsZi0+e0FjY2Vzc1J3fSApIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25BZGRUYXNrJyApOwoKICAgICAgICAjIGdldCB1c2VyIGRhdGEKICAgICAgICBteSAlU2hvd25Vc2VycyA9ICRTZWxmLT57VXNlck9iamVjdH0tPlVzZXJMaXN0KAogICAgICAgICAgICBUeXBlICA9PiAnTG9uZycsCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBnZXQgbGlzdCBvZiByZWdpc3RlcmVkIHVzZXJzIChpZiBhbnkpCiAgICAgICAgJVVzZXIgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+VXNlckxpc3QoKTsKCiAgICAgICAgVVNFUklEOgogICAgICAgIGZvciBteSAkVXNlckluZm8gKCBzb3J0IHsgJFNob3duVXNlcnN7JGF9IGNtcCAkU2hvd25Vc2Vyc3skYn0gfSBrZXlzICVTaG93blVzZXJzICkgewogICAgICAgICAgICBuZXh0IFVTRVJJRCBpZiAhJFVzZXJ7JFVzZXJJbmZvfTsKCiAgICAgICAgICAgICMgZGVsZXRlIGFscmVhZHkgcmVnaXN0ZXJlZCB1c2VyIGZyb20gdGhlICduZXcnIGxpc3QKICAgICAgICAgICAgZGVsZXRlICRTaG93blVzZXJzeyRVc2VySW5mb307CiAgICAgICAgfQoKICAgICAgICBpZiAoJVNob3duVXNlcnMpIHsKICAgICAgICAgICAgbXkgJE5ld1VzZXJPcHRpb24gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlU2hvd25Vc2VycywKICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAnJywKICAgICAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnTmV3VXNlcklEJywKICAgICAgICAgICAgICAgIFRyYW5zbGF0aW9uICA9PiAwLAogICAgICAgICAgICAgICAgUG9zc2libGVOb25lID0+IDAsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdBY3Rpb25BZGRVc2VyJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIE5ld1VzZXJPcHRpb24gPT4gJE5ld1VzZXJPcHRpb24sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdQcm9qZWN0RmlsdGVyJyApOwoKICAgIGlmICggJFNlbGYtPntBY2Nlc3NSd30gKSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnVGFza0ZpbHRlcicgKTsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdVc2VyRmlsdGVyJyApOwogICAgfQoKICAgICMgU2hvdyBwcm9qZWN0IGRhdGEKICAgICVQcm9qZWN0ID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPlByb2plY3RTZXR0aW5nc0dldCgpOwoKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdSZXN1bHRQcm9qZWN0JywKICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICApOwoKICAgICMgZGVmaW5lIHN0YXR1cyBsaXN0CiAgICBteSAlU3RhdHVzTGlzdCA9ICgKICAgICAgICAxID0+ICd2YWxpZCcsCiAgICAgICAgMCA9PiAnaW52YWxpZCcsCiAgICApOwoKICAgICMgc2hvdyBsaXN0IG9mIGF2YWlsYWJsZSBwcm9qZWN0cyAoaWYgYW55KQogICAgaWYgKCAkUHJvamVjdHtQcm9qZWN0fSApIHsKICAgICAgICBmb3IgbXkgJFByb2plY3RJRCAoCiAgICAgICAgICAgIHNvcnQgeyAkUHJvamVjdHtQcm9qZWN0fXskYX0gY21wICRQcm9qZWN0e1Byb2plY3R9eyRifSB9CiAgICAgICAgICAgIGtleXMgJXsgJFByb2plY3R7UHJvamVjdH0gfQogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkUGFyYW17UHJvamVjdH0gICAgICAgICAgICA9ICRQcm9qZWN0e1Byb2plY3R9eyRQcm9qZWN0SUR9OwogICAgICAgICAgICAkUGFyYW17UHJvamVjdERlc2NyaXB0aW9ufSA9ICRQcm9qZWN0e1Byb2plY3REZXNjcmlwdGlvbn17JFByb2plY3RJRH07CiAgICAgICAgICAgICRQYXJhbXtQcm9qZWN0SUR9ICAgICAgICAgID0gJFByb2plY3RJRDsKICAgICAgICAgICAgJFBhcmFte1N0YXR1c30gICAgICAgICAgICAgPSAkU3RhdHVzTGlzdHsgJFByb2plY3R7UHJvamVjdFN0YXR1c317JFByb2plY3RJRH0gfTsKCiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld1Jlc3VsdFByb2plY3RSb3cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgIyBvdGhlcndpc2UsIHNob3cgYSBubyBkYXRhIGZvdW5kIG1zZwogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnTm9Qcm9qZWN0RGF0YUZvdW5kTXNnJyApOwogICAgfQoKICAgIGlmICggJFNlbGYtPntBY2Nlc3NSd30gKSB7CgogICAgICAgICMgU2hvdyBhY3Rpb24gZGF0YQogICAgICAgIG15ICVBY3Rpb24gPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+QWN0aW9uU2V0dGluZ3NHZXQoKTsKCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdSZXN1bHRTZXR0aW5nJywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CgogICAgICAgICMgc2hvdyBsaXN0IG9mIGF2YWlsYWJsZSB0YXNrcy9hY3Rpb25zIChpZiBhbnkpCiAgICAgICAgaWYgKCVBY3Rpb24pIHsKICAgICAgICAgICAgZm9yIG15ICRBY3Rpb25JRCAoIHNvcnQgeyAkQWN0aW9ueyRhfXtBY3Rpb259IGNtcCAkQWN0aW9ueyRifXtBY3Rpb259IH0ga2V5cyAlQWN0aW9uICkgewogICAgICAgICAgICAgICAgJFBhcmFte0FjdGlvbn0gICA9ICRBY3Rpb257JEFjdGlvbklEfXtBY3Rpb259OwogICAgICAgICAgICAgICAgJFBhcmFte0FjdGlvbklEfSA9ICRBY3Rpb25JRDsKICAgICAgICAgICAgICAgICRQYXJhbXtTdGF0dXN9ICAgPSAkU3RhdHVzTGlzdHsgJEFjdGlvbnskQWN0aW9uSUR9e0FjdGlvblN0YXR1c30gfTsKCiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3UmVzdWx0U2V0dGluZ1JvdycsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgb3RoZXJ3aXNlLCBzaG93IGEgbm8gZGF0YSBmb3VuZCBtc2cKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnTm9TZXR0aW5nRGF0YUZvdW5kTXNnJyApOwogICAgICAgIH0KCiAgICAgICAgIyBzaG93IHVzZXIgZGF0YQogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3UmVzdWx0VXNlcicsCiAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICApOwoKICAgICAgICAjIHNob3cgbGlzdCBvZiByZWdpc3RlcmVkIHVzZXJzIChpZiBhbnkpCiAgICAgICAgaWYgKCVVc2VyKSB7CiAgICAgICAgICAgIGZvciBteSAkVXNlcklEICggc29ydCB7ICRVc2VyeyRhfSBjbXAgJFVzZXJ7JGJ9IH0ga2V5cyAlVXNlciApIHsKCiAgICAgICAgICAgICAgICAjIGdldCBtaXNzaW5nIHVzZXIgZGF0YQogICAgICAgICAgICAgICAgbXkgJVVzZXJEYXRhID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPlVzZXJHZXQoIFVzZXJJRCA9PiAkVXNlcklEICk7CiAgICAgICAgICAgICAgICBteSAlVXNlckdlbmVyYWxEYXRhID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+R2V0VXNlckRhdGEoIFVzZXJJRCA9PiAkVXNlcklEICk7CgogICAgICAgICAgICAgICAgJFBhcmFte1VzZXJ9CiAgICAgICAgICAgICAgICAgICAgPSAiJFVzZXJHZW5lcmFsRGF0YXtVc2VyRmlyc3RuYW1lfSAkVXNlckdlbmVyYWxEYXRhe1VzZXJMYXN0bmFtZX0gKCRVc2VyR2VuZXJhbERhdGF7VXNlckxvZ2lufSkiOwogICAgICAgICAgICAgICAgJFBhcmFte1VzZXJJRH0gICAgID0gJFVzZXJJRDsKICAgICAgICAgICAgICAgICRQYXJhbXtDb21tZW50fSAgICA9ICRVc2VyRGF0YXtEZXNjcmlwdGlvbn07CiAgICAgICAgICAgICAgICAkUGFyYW17Q2FsZW5kYXJOb30gPSAkVXNlckRhdGF7Q2FsZW5kYXJ9OwogICAgICAgICAgICAgICAgJFBhcmFte0NhbGVuZGFyfSAgID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoCiAgICAgICAgICAgICAgICAgICAgIlRpbWVab25lOjpDYWxlbmRhciIKICAgICAgICAgICAgICAgICAgICAgICAgLiAoICRQYXJhbXtDYWxlbmRhck5vfSB8fCAnJyApIC4gIk5hbWUiCiAgICAgICAgICAgICAgICApIHx8ICdEZWZhdWx0JzsKCiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3UmVzdWx0VXNlclJvdycsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7JVBhcmFtfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgb3RoZXJ3aXNlLCBzaG93IGEgbm8gZGF0YSBmb3VuZCBtc2cKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnTm9Vc2VyRGF0YUZvdW5kTXNnJyApOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKc3ViIF9UYXNrU2V0dGluZ3NFZGl0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdTZXR0aW5nJywKICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICApOwoKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkxpc3RTZXR0aW5nJyApOwogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uT3ZlcnZpZXdTZXR0aW5nJyApOwoKICAgICMgZGVmaW5lIHN0YXR1cyBsaXN0CiAgICBteSAlU3RhdHVzTGlzdCA9ICgKICAgICAgICAxID0+ICd2YWxpZCcsCiAgICAgICAgMCA9PiAnaW52YWxpZCcsCiAgICApOwoKICAgIG15ICRUYXNrU3RhdHVzID0gMTsKICAgIGlmICggZGVmaW5lZCAkUGFyYW17VGFza1N0YXR1c30gKSB7CiAgICAgICAgJFRhc2tTdGF0dXMgPSAkUGFyYW17VGFza1N0YXR1c30KICAgIH0KCiAgICAkUGFyYW17U3RhdHVzT3B0aW9ufSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiBcJVN0YXR1c0xpc3QsCiAgICAgICAgU2VsZWN0ZWRJRCA9PiAkVGFza1N0YXR1cywKICAgICAgICBOYW1lICAgICAgID0+ICdUYXNrU3RhdHVzJywKICAgICk7CgogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlld1VwZGF0ZVRhc2snLAogICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICk7CgogICAgIyBzaG93cyBoZWFkZXIKICAgIGlmICggJFBhcmFte0FjdGlvbn0gZXEgJ0VkaXRUYXNrJyApIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdIZWFkZXJFZGl0VGFzaycgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ0hlYWRlckFkZFRhc2snICk7CiAgICB9CgogICAgIyBzaG93IHNlcnZlciBlcnJvciBtc2cgKGlmIGFueSkgZm9yIHRoZSB0YXNrIG5hbWUKICAgIGlmICggJFBhcmFte1Rhc2tFcnJvclR5cGV9ICkgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJFBhcmFte1Rhc2tFcnJvclR5cGV9ICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBfVXNlclNldHRpbmdzRWRpdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwogICAgbXkgJUdldFBhcmFtID0gKCk7CgogICAgIyBnZXQgcGFyYW1ldGVycwogICAgZm9yIG15ICRQYXJhbWV0ZXIgKHF3KERlc2NyaXB0aW9uIFNob3dPdmVydGltZSBDcmVhdGVQcm9qZWN0IENhbGVuZGFyKSkgewogICAgICAgICRHZXRQYXJhbXskUGFyYW1ldGVyfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJFBhcmFtZXRlciApOwogICAgfQoKICAgICMgdGhlIGRhdGVwaWNrZXIgdXNlZCBpbiB0aGlzIHNjcmVlbiBpcyBub24tc3RhbmRhcmQKICAgICMgVGhlcmVmb3Igd2UgaGF2ZSB0byBkZWZpbmUgdGhpcyB2YXIgaW4gdGhlIExheW91dE9iamVjdCBmb3IgYXV0b21hdGljIGNvbmZpZyBnZW5lcmF0aW9uIGluIHRoZSBKUyBmb290ZXIKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0hhc0RhdGVwaWNrZXJ9ID0gMTsKCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ1NldHRpbmcnLAogICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICk7CgogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uTGlzdFNldHRpbmcnICk7CiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25PdmVydmlld1NldHRpbmcnICk7CiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdSZWZlcmVuY2UnICk7CgogICAgIyBkZWZpbmUgc3RhdHVzIGxpc3QKICAgIG15ICVTdGF0dXNMaXN0ID0gKAogICAgICAgIDEgPT4gJ3ZhbGlkJywKICAgICAgICAwID0+ICdpbnZhbGlkJywKICAgICk7CgogICAgIyBmaWxsIHVwIHRoZSBjYWxlbmRhciBsaXN0CiAgICBteSAkQ2FsZW5kYXJMaXN0UmVmID0geyAwID0+ICdEZWZhdWx0JyB9OwogICAgbXkgJENhbGVuZGFySW5kZXggPSAxOwogICAgd2hpbGUgKCAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCggIlRpbWVab25lOjpDYWxlbmRhciIgLiAkQ2FsZW5kYXJJbmRleCAuICJOYW1lIiApICkgewogICAgICAgICRDYWxlbmRhckxpc3RSZWYtPnskQ2FsZW5kYXJJbmRleH0KICAgICAgICAgICAgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCggIlRpbWVab25lOjpDYWxlbmRhciIgLiAkQ2FsZW5kYXJJbmRleCAuICJOYW1lIiApOwogICAgICAgICRDYWxlbmRhckluZGV4Kys7CiAgICB9CgogICAgIyBnZXQgdXNlciBkYXRhCiAgICBteSAlVXNlckRhdGEgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+VXNlckdldCggVXNlcklEID0+ICRQYXJhbXtVc2VySUR9ICk7CgogICAgJFBhcmFte0NhbGVuZGFyT3B0aW9ufSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgPT4gJENhbGVuZGFyTGlzdFJlZiwKICAgICAgICBOYW1lICAgICAgICA9PiAnQ2FsZW5kYXInLAogICAgICAgIFRyYW5zbGF0aW9uID0+IDEsCiAgICAgICAgU2VsZWN0ZWRJRCAgPT4gJEdldFBhcmFte0NhbGVuZGFyfSB8fCAkVXNlckRhdGF7Q2FsZW5kYXJ9IHx8IDAsCiAgICApOwoKICAgICRQYXJhbXtEZXNjcmlwdGlvbn0gPSAkR2V0UGFyYW17RGVzY3JpcHRpb259IHx8ICRVc2VyRGF0YXtEZXNjcmlwdGlvbn0gfHwgJyc7CgogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdPdmVydmlld1VwZGF0ZVVzZXInLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIFNob3dPdmVydGltZSA9PiAoICRHZXRQYXJhbXtTaG93T3ZlcnRpbWV9IHx8ICRVc2VyRGF0YXtTaG93T3ZlcnRpbWV9ICkKICAgICAgICAgICAgPyAnY2hlY2tlZD0iY2hlY2tlZCInCiAgICAgICAgICAgIDogJycsCiAgICAgICAgICAgIENyZWF0ZVByb2plY3QgPT4gKCAkR2V0UGFyYW17Q3JlYXRlUHJvamVjdH0gfHwgJFVzZXJEYXRhe0NyZWF0ZVByb2plY3R9ICkKICAgICAgICAgICAgPyAnY2hlY2tlZD0iY2hlY2tlZCInCiAgICAgICAgICAgIDogJycsCiAgICAgICAgICAgIH0KICAgICk7CgogICAgIyBzaG93cyBoZWFkZXIKICAgIGlmICggJFBhcmFte0FjdGlvbn0gZXEgJ0VkaXRVc2VyJyApIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdIZWFkZXJFZGl0VXNlcicgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0hlYWRlckFkZFVzZXInLAogICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGlmIHRoZXJlIGFyZSBlcnJvcnMgdG8gc2hvdwogICAgaWYgKCAkUGFyYW17RXJyb3JzfSAmJiAleyAkUGFyYW17RXJyb3JzfSB9ICkgewoKICAgICAgICAjIHNob3cgYWxsIGV4aXN0aW5nIHBlcmlvZHMKICAgICAgICBmb3IgKCBteSAkUGVyaW9kID0gMTsgJFBlcmlvZCA8PSAkUGFyYW17UGVyaW9kc307ICRQZXJpb2QrKyApIHsKCiAgICAgICAgICAgIGZvciBteSAkUGFyYW1ldGVyIChxdyhEYXRlU3RhcnQgRGF0ZUVuZCBMZWF2ZURheXMgV2Vla2x5SG91cnMgT3ZlcnRpbWUgUGVyaW9kU3RhdHVzICkpIHsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXskUGFyYW1ldGVyfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIiRQYXJhbWV0ZXJcWyRQZXJpb2RcXSIgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJFBhcmFteyRQZXJpb2R9e1BlcmlvZFN0YXR1c09wdGlvbn0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICAgICAgRGF0YSAgICAgICA9PiBcJVN0YXR1c0xpc3QsCiAgICAgICAgICAgICAgICBTZWxlY3RlZElEID0+ICRHZXRQYXJhbXtQZXJpb2RTdGF0dXN9IHx8ICRQYXJhbXskUGVyaW9kfXtQZXJpb2RTdGF0dXN9LAogICAgICAgICAgICAgICAgTmFtZSAgICAgICA9PiAiUGVyaW9kU3RhdHVzWyRQZXJpb2RdIiwKICAgICAgICAgICAgICAgIElEICAgICAgICAgPT4gIlBlcmlvZFN0YXR1cy0kUGVyaW9kIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdQZXJpb2RPdmVydmlld1JvdycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBQZXJpb2QgICAgICAgICAgID0+ICRQZXJpb2QsCiAgICAgICAgICAgICAgICAgICAgRGF0ZVN0YXJ0SW52YWxpZCA9PiAkUGFyYW17RXJyb3JzfS0+eyAnRGF0ZVN0YXJ0LScgLiAkUGVyaW9kIC4gJ0ludmFsaWQnIH0KICAgICAgICAgICAgICAgICAgICAgICAgfHwgJycsCiAgICAgICAgICAgICAgICAgICAgRGF0ZUVuZEludmFsaWQgPT4gJFBhcmFte0Vycm9yc30tPnsgJ0RhdGVFbmQtJyAuICRQZXJpb2QgLiAnSW52YWxpZCcgfSB8fCAnJywKICAgICAgICAgICAgICAgICAgICBMZWF2ZURheXNJbnZhbGlkID0+ICRQYXJhbXtFcnJvcnN9LT57ICdMZWF2ZURheXMtJyAuICRQZXJpb2QgLiAnSW52YWxpZCcgfQogICAgICAgICAgICAgICAgICAgICAgICB8fCAnJywKICAgICAgICAgICAgICAgICAgICBEYXRlU3RhcnQgICAgICAgICAgPT4gJEdldFBhcmFte0RhdGVTdGFydH0sCiAgICAgICAgICAgICAgICAgICAgRGF0ZUVuZCAgICAgICAgICAgID0+ICRHZXRQYXJhbXtEYXRlRW5kfSwKICAgICAgICAgICAgICAgICAgICBMZWF2ZURheXMgICAgICAgICAgPT4gJEdldFBhcmFte0xlYXZlRGF5c30sCiAgICAgICAgICAgICAgICAgICAgV2Vla2x5SG91cnMgICAgICAgID0+ICRHZXRQYXJhbXtXZWVrbHlIb3Vyc30sCiAgICAgICAgICAgICAgICAgICAgT3ZlcnRpbWUgICAgICAgICAgID0+ICRHZXRQYXJhbXtPdmVydGltZX0sCiAgICAgICAgICAgICAgICAgICAgUGVyaW9kU3RhdHVzT3B0aW9uID0+ICRQYXJhbXskUGVyaW9kfXtQZXJpb2RTdGF0dXNPcHRpb259LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdEYXRlU3RhcnQnCiAgICAgICAgICAgICAgICAgICAgLiAoCiAgICAgICAgICAgICAgICAgICAgJFBhcmFte0Vycm9yc30tPnsgJ0RhdGVTdGFydC0nIC4gJFBlcmlvZCAuICdFcnJvclR5cGUnIH0KICAgICAgICAgICAgICAgICAgICAgICAgfHwgJ01pc3NpbmdWYWx1ZScKICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7IFBlcmlvZCA9PiAkUGVyaW9kIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdEYXRlRW5kJwogICAgICAgICAgICAgICAgICAgIC4gKCAkUGFyYW17RXJyb3JzfS0+eyAnRGF0ZUVuZC0nIC4gJFBlcmlvZCAuICdFcnJvclR5cGUnIH0gfHwgJ01pc3NpbmdWYWx1ZScgKSwKICAgICAgICAgICAgICAgIERhdGEgPT4geyBQZXJpb2QgPT4gJFBlcmlvZCB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgIG15ICVVc2VyID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPlNpbmdsZVVzZXJTZXR0aW5nc0dldCggVXNlcklEID0+ICRQYXJhbXtVc2VySUR9ICk7CgogICAgICAgICMgc2hvdyB1c2VyIGRhdGEKICAgICAgICBpZiAoJVVzZXIpIHsKICAgICAgICAgICAgbXkgJExhc3RQZXJpb2ROdW1iZXIgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+VXNlckxhc3RQZXJpb2ROdW1iZXJHZXQoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0KICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGZvciAoIG15ICRQZXJpb2QgPSAxOyAkUGVyaW9kIDw9ICRMYXN0UGVyaW9kTnVtYmVyOyAkUGVyaW9kKysgKSB7CiAgICAgICAgICAgICAgICBteSAlUGVyaW9kUGFyYW0gPSAoKTsKCiAgICAgICAgICAgICAgICAjIGdldCBhbGwgbmVlZGVkIGRhdGEgdG8gZGlzcGxheQogICAgICAgICAgICAgICAgZm9yIG15ICRQYXJhbWV0ZXIgKHF3KERhdGVTdGFydCBEYXRlRW5kIExlYXZlRGF5cyBXZWVrbHlIb3VycyBPdmVydGltZSkpIHsKICAgICAgICAgICAgICAgICAgICAkUGVyaW9kUGFyYW17JFBhcmFtZXRlcn0gPSAkVXNlcnskUGVyaW9kfXskUGFyYW1ldGVyfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRQZXJpb2RQYXJhbXtQZXJpb2R9ID0gJFBlcmlvZDsKCiAgICAgICAgICAgICAgICAkUGVyaW9kUGFyYW17UGVyaW9kU3RhdHVzT3B0aW9ufSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgICAgICAgICAgRGF0YSAgICAgICA9PiBcJVN0YXR1c0xpc3QsCiAgICAgICAgICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkVXNlcnskUGVyaW9kfXtVc2VyU3RhdHVzfSwKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgID0+ICJQZXJpb2RTdGF0dXNbJFBlcmlvZF0iLAogICAgICAgICAgICAgICAgICAgIElEICAgICAgICAgPT4gIlBlcmlvZFN0YXR1cy0kUGVyaW9kIiwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdQZXJpb2RPdmVydmlld1JvdycsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiBcJVBlcmlvZFBhcmFtLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgIyBzaG93IGEgbm8gZGF0YSBmb3VuZCBtc2cKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnUGVyaW9kT3ZlcnZpZXdSb3dOb0RhdGEnICk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxOwp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIFczMDBweCI+CiAgICA8bGFiZWw+JFRleHR7IlllYXIifTo8L2xhYmVsPgogICAgPHAgY2xhc3M9IlZhbHVlIj4KICAgICAgICAkUURhdGF7IlllYXIifQogICAgPC9wPgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgIDxsYWJlbD4kVGV4dHsiTW9udGgifTo8L2xhYmVsPgogICAgPHAgY2xhc3M9IlZhbHVlIj4KICAgICAgICAkVGV4dHsiJERhdGF7Ik1vbnRoIn0ifQogICAgPC9wPgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgIDxsYWJlbD4kVGV4dHsiRGF5In06PC9sYWJlbD4KICAgIDxwIGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgJFFEYXRheyJEYXkifQogICAgPC9wPgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8L2ZpZWxkc2V0Pgo8cCBjbGFzcz0iU3BhY2luZ1RvcCBDZW50ZXIiPgogICAgJFRleHR7IkRvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhlIFRpbWUgQWNjb3VudGluZyBvZiB0aGlzIGRheT8ifQo8L3A+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIExheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyRmlyc3QiPgogICAgPGgxIGNsYXNzPSJIZWFkZXIiPiRUZXh0eyJFZGl0IFRpbWUgUmVjb3JkIn08L2gxPgoKICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgo8IS0tIGR0bDpibG9jazpPdmVydmlld1Byb2plY3QgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiQWN0aW9ucyJ9PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25MaXN0Ij4KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPU92ZXJ2aWV3O1llYXI9JExRRGF0YXsiWWVhciJ9O01vbnRoPSRMUURhdGF7Ik1vbnRoIn0iIGNsYXNzPSJDYWxsRm9yQWN0aW9uIj48c3Bhbj4kVGV4dHsiR28gdG8gb3ZlcnZpZXcifTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KPCEtLSBkdGw6YmxvY2s6Q3JlYXRlUHJvamVjdCAtLT4KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPVNldHRpbmciIGNsYXNzPSJDYWxsRm9yQWN0aW9uIj48c3Bhbj4kVGV4dHsiUHJvamVjdCBzZXR0aW5ncyJ9PC9zcGFuPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgo8IS0tIGR0bDpibG9jazpDcmVhdGVQcm9qZWN0IC0tPgogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3UHJvamVjdCAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJEYXRlIE5hdmlnYXRpb24ifTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Ik1vbnRoU2VsZWN0aW9uIj4KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQXJyb3cgTGVmdCIgdGl0bGU9IiRUZXh0eyJQcmV2aW91cyBkYXkifSIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249RWRpdDtZZWFyPSRMUURhdGF7IlllYXJCYWNrIn07TW9udGg9JExRRGF0YXsiTW9udGhCYWNrIn07RGF5PSRMUURhdGF7IkRheUJhY2sifSI+PC9hPgogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJBcnJvdyBSaWdodCIgdGl0bGU9IiRUZXh0eyJOZXh0IGRheSJ9IiBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1FZGl0O1llYXI9JExRRGF0YXsiWWVhck5leHQifTtNb250aD0kTFFEYXRheyJNb250aE5leHQifTtEYXk9JExRRGF0YXsiRGF5TmV4dCJ9Ij48L2E+CiAgICAgICAgICAgICAgICAgICAgJFFEYXRheyJZZWFyIn0tJFFEYXRheyJNb250aCJ9LSRRRGF0YXsiRGF5In0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBjbGFzcz0iVmFsaWRhdGUiIG5hbWU9IkRhdGVTZWxlY3Rpb24iPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9IiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IkVkaXQiIC8+CiAgICAgICAgICAgICAgICAgICAgJERhdGF7IkRhdGUifQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iYnV0dG9uIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSIkVGV4dHsiU3VibWl0In0iIC8+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CjwhLS0gZHRsOmJsb2NrOkluY29tcGxldGVXb3JraW5nRGF5cyAtLT4KICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0iU3BhY2luZ1RvcCI+JFRleHR7IkRheXMgd2l0aG91dCBlbnRyaWVzIn06PC9oMj4KICAgICAgICAgICAgICAgICREYXRheyJJbmNvbXBsZXRlV29ya2luZ0RheXNTZWxlY3QifQo8IS0tZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwogICAgJCgnI0luY29tcGxldGVXb3JraW5nRGF5c0xpc3QnKS51bmJpbmQoJ2NoYW5nZS5JbmNvbXBsZXRlV29ya2luZ0RheXMnKS5iaW5kKCdjaGFuZ2UuSW5jb21wbGV0ZVdvcmtpbmdEYXlzJywgZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBEYXRlID0gJCh0aGlzKS52YWwoKS5zcGxpdCgnLScpOwogICAgICAgIGlmIChEYXRlWzBdICYmIERhdGVbMV0gJiYgRGF0ZVsyXSkgewogICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gIiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPUVkaXQ7WWVhcj0iICsgRGF0ZVswXSArICI7TW9udGg9IiArIERhdGVbMV0gKyAiO0RheT0iICsgRGF0ZVsyXTsKICAgICAgICB9CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KPCEtLWR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZS0tPgo8IS0tIGR0bDpibG9jazpJbmNvbXBsZXRlV29ya2luZ0RheXMgLS0+CjwhLS0gZHRsOmJsb2NrOkluY29tcGxldGVXb3JraW5nRGF5c01hc3NFbnRyeSAtLT4KICAgICAgICAgICAgICAgIDxoMiBjbGFzcz0iU3BhY2luZ1RvcCI+JFRleHR7IkRheXMgd2l0aG91dCBlbnRyaWVzIn06PC9oMj4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iSW5jb21wbGV0ZVdvcmtpbmdEYXlzIj4KICAgICAgICAgICAgICAgICAgICA8bGkgaWQ9IlNlbGVjdEFsbERheXMiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IkluY29tcGxldGVXb3JraW5nRGF5LUFsbCIgbmFtZT0iSW5jb21wbGV0ZVdvcmtpbmdEYXktQWxsIiAvPjxsYWJlbCBmb3I9IkluY29tcGxldGVXb3JraW5nRGF5LUFsbCI+PGVtPiRUZXh0eyJTZWxlY3QgYWxsIGRheXMifTwvZW0+PC9sYWJlbD48L2xpPgo8IS0tIGR0bDpibG9jazpJbmNvbXBsZXRlV29ya2luZ0RheXNNYXNzRW50cnlTaW5nbGVEYXkgLS0+CiAgICAgICAgICAgICAgICAgICAgPGxpPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9IkluY29tcGxldGVXb3JraW5nRGF5LSRRRGF0YXsiRGF0ZSJ9IiBuYW1lPSJJbmNvbXBsZXRlV29ya2luZ0RheS0kUURhdGF7IkRhdGUifSIgLz48bGFiZWwgZm9yPSJJbmNvbXBsZXRlV29ya2luZ0RheS0kUURhdGF7IkRhdGUifSI+JFFEYXRheyJEYXRlIn08L2xhYmVsPiAtIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPUVkaXQ7WWVhcj0kTFFEYXRheyJZZWFyIn07TW9udGg9JExRRGF0YXsiTW9udGgifTtEYXk9JExRRGF0YXsiRGF5In0iPiRUZXh0eyJFZGl0In08L2E+PC9saT4KPCEtLSBkdGw6YmxvY2s6SW5jb21wbGV0ZVdvcmtpbmdEYXlzTWFzc0VudHJ5U2luZ2xlRGF5IC0tPgogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgaWQ9Ik1hc3NFbnRyeSIgbmFtZT0iTWFzc0VudHJ5IiBjbGFzcz0iU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iTWFzc0VudHJ5IiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkRhdGVzIiB2YWx1ZT0iIiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkxlYXZlRGF5IiB2YWx1ZT0iIiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlNpY2siIHZhbHVlPSIiIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iT3ZlcnRpbWUiIHZhbHVlPSIiIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJidXR0b24iIHR5cGU9ImJ1dHRvbiIgaWQ9Ik1hc3NFbnRyeVN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJNYXNzIGVudHJ5In0iIC8+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICA8ZGl2IGlkPSJNYXNzRW50cnlDb25maXJtRGlhbG9nIiBjbGFzcz0iSGlkZGVuIj4KICAgICAgICAgICAgICAgICAgICA8aDI+JFRleHR7IlBsZWFzZSBjaG9vc2UgdGhlIHJlYXNvbiBmb3IgeW91ciBhYnNlbmNlIGZvciB0aGUgc2VsZWN0ZWQgZGF5cyJ9LjwvaDI+CiAgICAgICAgICAgICAgICAgICAgPHVsIGlkPSJNYXNzRW50cnlDb25maXJtUmFkaW8iPgogICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJMZWF2ZURheSIgaWQ9IkNvbmZpcm1MZWF2ZURheSIgLz48bGFiZWwgZm9yPSJDb25maXJtTGVhdmVEYXkiPiRUZXh0eyJPbiB2YWNhdGlvbiJ9PC9sYWJlbD48L2xpPgogICAgICAgICAgICAgICAgICAgICAgICA8bGk+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJTaWNrIiBpZD0iQ29uZmlybVNpY2siIC8+PGxhYmVsIGZvcj0iQ29uZmlybVNpY2siPiRUZXh0eyJPbiBzaWNrIGxlYXZlIn08L2xhYmVsPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsaT48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9Ik92ZXJ0aW1lIiBpZD0iQ29uZmlybU92ZXJ0aW1lIiAvPjxsYWJlbCBmb3I9IkNvbmZpcm1PdmVydGltZSI+JFRleHR7Ik9uIG92ZXJ0aW1lIGxlYXZlIn08L2xhYmVsPjwvbGk+CiAgICAgICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICAgIDwvZGl2Pgo8IS0tZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwogICAgVGltZUFjY291bnRpbmcuQWdlbnQuRWRpdFRpbWVSZWNvcmRzLk1hc3NFbnRyeUluaXQoewogICAgICAgIE1zZ0Nob29zZU9uZURheTogICAgJyRKU1RleHR7IlBsZWFzZSBjaG9vc2UgYXQgbGVhc3Qgb25lIGRheSEifScsCiAgICAgICAgTXNnQWJzZW5jZVJlYXNvbjogICAnJEpTVGV4dHsiUGxlYXNlIGNob29zZSBhIHJlYXNvbiBmb3IgYWJzZW5jZSEifScsCiAgICAgICAgTWFzc0VudHJ5OiAgICAgICAgICAnJEpTVGV4dHsiTWFzcyBFbnRyeSJ9JywKICAgICAgICBTdWJtaXQ6ICAgICAgICAgICAgICckSlNUZXh0eyJTdWJtaXQifScsCiAgICAgICAgQ2FuY2VsOiAgICAgICAgICAgICAnJEpTVGV4dHsiQ2FuY2VsIn0nCiAgICB9KTsKLy9dXT48L3NjcmlwdD4KPCEtLWR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZS0tPgo8IS0tIGR0bDpibG9jazpJbmNvbXBsZXRlV29ya2luZ0RheXNNYXNzRW50cnkgLS0+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiUmVmZXJlbmNlIn08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICAgICAgPGxpPiRUZXh0eyJSZXF1aXJlZCBmaWVsZHMgYXJlIG1hcmtlZCB3aXRoIGEgIioiLiJ9PC9saT4KICAgICAgICAgICAgICAgICAgICA8bGk+JFRleHR7IllvdSBoYXZlIHRvIGZpbGwgaW4gc3RhcnQgYW5kIGVuZCB0aW1lIG9yIGEgdGltZSBwZXJpb2QuIn08L2xpPgogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IkRhdGUifTogJFRleHR7IiREYXRheyJXZWVrZGF5X3RvX1RleHQifSJ9ICRRRGF0YXsiWWVhciJ9LSRRRGF0YXsiTW9udGgifS0kUURhdGF7IkRheSJ9PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQgSG9yaXpvbnRhbFNjcm9sbCI+CiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG5hbWU9IldvcmtpbmdVbml0cyIgaWQ9IldvcmtpbmdVbml0cyIgY2xhc3M9IlZhbGlkYXRlIFByZXZlbnRNdWx0aXBsZVN1Ym1pdHMiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9IiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IkVkaXQiIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iUmVjb3Jkc051bWJlciIgaWQ9IlJlY29yZHNOdW1iZXIiIHZhbHVlPSIkUURhdGF7IlJlY29yZHNOdW1iZXIifSIgLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdGF0dXMiIHZhbHVlPSJBY3Rpb24iIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iWWVhciIgdmFsdWU9IiRRRGF0YXsiWWVhciJ9IiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ik1vbnRoIiB2YWx1ZT0iJFFEYXRheyJNb250aCJ9IiAvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkRheSIgdmFsdWU9IiRRRGF0YXsiRGF5In0iIC8+CjwhLS0gZHRsOmJsb2NrOlVuaXRCbG9jayAtLT4KICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSBOb0hvdmVyIEhpZ2hDZWxscyIgaWQ9Ikluc2VydFdvcmtpbmdIb3VycyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gJFRleHR7IlByb2plY3QifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+ICRUZXh0eyJUYXNrIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiUmVtYXJrIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiU3RhcnQifSAoSEg6TU0pPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IkVuZCJ9IChISDpNTSk8L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48c3BhbiBjbGFzcz0iTWFya2VyIj4kUURhdGF7IlBlcmlvZE5vdGUifTwvc3Bhbj4gJFRleHR7IlBlcmlvZCJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KPCEtLSBkdGw6YmxvY2s6VW5pdCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iV29ya2luZ0hvdXJzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICREYXRheyJQcm9qZWN0T3B0aW9uIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUHJvamVjdElEJFFEYXRheyJJRCJ9RXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUHJvamVjdElEJFFEYXRheyJJRCJ9U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iQ29tYm9fUHJvamVjdElEJFFEYXRheyJJRCJ9RXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iQ29tYm9fUHJvamVjdElEJFFEYXRheyJJRCJ9U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJERhdGF7IkFjdGlvbk9wdGlvbiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkFjdGlvbklEJFFEYXRheyJJRCJ9RXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iQWN0aW9uSUQkUURhdGF7IklEIn1TZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPiRUZXh0eyJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiJ9PC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJDb21ib19BY3Rpb25JRCRRRGF0YXsiSUQifUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkNvbWJvX0FjdGlvbklEJFFEYXRheyJJRCJ9U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlJlbWFya1skUURhdGF7IklEIn1dIiBpZD0iUmVtYXJrJFFEYXRheyJJRCJ9IiBjbGFzcz0iVmFsaWRhdGVfVGltZUFjY291bnRpbmdfUmVtYXJrICRRRGF0YXsiUmVtYXJrSW52YWxpZCJ9IiB2YWx1ZT0iJFFEYXRheyJSZW1hcmsifSIgc2l6ZT0iMzUiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlJlbWFyayRRRGF0YXsiSUQifUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+JFRleHR7IlBsZWFzZSBhZGQgYSByZW1hcmsgd2l0aCBtb3JlIHRoYW4gOCBjaGFyYWN0ZXJzIS4ifTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUmVtYXJrJFFEYXRheyJJRCJ9U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlN0YXJ0VGltZVskUURhdGF7IklEIn1dIiBpZD0iU3RhcnRUaW1lJFFEYXRheyJJRCJ9IiBjbGFzcz0iU3RhcnRUaW1lIFZhbGlkYXRlX1RpbWVBY2NvdW50aW5nX1N0YXJ0VGltZSAkUURhdGF7IlN0YXJ0VGltZVJlcXVpcmVkIn0gJFFEYXRheyJTdGFydFRpbWVJbnZhbGlkIn0iIHZhbHVlPSIkUURhdGF7IlN0YXJ0VGltZSJ9IiBzaXplPSI3IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJTdGFydFRpbWUkUURhdGF7IklEIn1FcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IllvdSBoYXZlIHRvIGZpbGwgaW4gc3RhcnQgYW5kIGVuZCB0aW1lIG9yIGEgdGltZSBwZXJpb2QuIn08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJTdGFydFRpbWUkUURhdGF7IklEIn1TZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgo8IS0tIGR0bDpibG9jazpTdGFydFRpbWVHZW5lcmljU2VydmVyRXJyb3IgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD4KPCEtLSBkdGw6YmxvY2s6U3RhcnRUaW1lR2VuZXJpY1NlcnZlckVycm9yIC0tPgo8IS0tIGR0bDpibG9jazpTdGFydFRpbWVOZWdhdGl2ZVNlcnZlckVycm9yIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7Ik5lZ2F0aXZlIHRpbWVzIGFyZSBub3QgYWxsb3dlZC4ifTwvcD4KPCEtLSBkdGw6YmxvY2s6U3RhcnRUaW1lTmVnYXRpdmVTZXJ2ZXJFcnJvciAtLT4KPCEtLSBkdGw6YmxvY2s6U3RhcnRUaW1lUmVwZWF0ZWRIb3VyU2VydmVyRXJyb3IgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiUmVwZWF0ZWQgaG91cnMgYXJlIG5vdCBhbGxvd2VkLiBTdGFydCB0aW1lIG1hdGNoZXMgYW5vdGhlciBpbnRlcnZhbC4ifTwvcD4KPCEtLSBkdGw6YmxvY2s6U3RhcnRUaW1lUmVwZWF0ZWRIb3VyU2VydmVyRXJyb3IgLS0+CjwhLS0gZHRsOmJsb2NrOlN0YXJ0VGltZUludmFsaWRGb3JtYXRTZXJ2ZXJFcnJvciAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyJJbnZhbGlkIGZvcm1hdCEgUGxlYXNlIGVudGVyIGEgdGltZSB3aXRoIHRoZSBmb3JtYXQgSEg6TU0uIn08L3A+CjwhLS0gZHRsOmJsb2NrOlN0YXJ0VGltZUludmFsaWRGb3JtYXRTZXJ2ZXJFcnJvciAtLT4KPCEtLSBkdGw6YmxvY2s6U3RhcnRUaW1lMjRIb3VycyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyIyNDowMCBpcyBvbmx5IHBlcm1pdHRlZCBhcyBlbmQgdGltZS4ifTwvcD4KPCEtLSBkdGw6YmxvY2s6U3RhcnRUaW1lMjRIb3VycyAtLT4KPCEtLSBkdGw6YmxvY2s6U3RhcnRUaW1lSW52YWxpZCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyJJbnZhbGlkIHRpbWUhIEEgZGF5IGhhcyBvbmx5IDI0IGhvdXJzLiJ9PC9wPgo8IS0tIGR0bDpibG9jazpTdGFydFRpbWVJbnZhbGlkIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IkVuZFRpbWVbJFFEYXRheyJJRCJ9XSIgaWQ9IkVuZFRpbWUkUURhdGF7IklEIn0iIGNsYXNzPSJFbmRUaW1lIFZhbGlkYXRlX0RlcGVuZGluZ1JlcXVpcmVkQU5EIFZhbGlkYXRlX0RlcGVuZGluZ19TdGFydFRpbWUkUURhdGF7IklEIn0gJFFEYXRheyJFbmRUaW1lUmVxdWlyZWQifSAkUURhdGF7IkVuZFRpbWVJbnZhbGlkIn0iIHZhbHVlPSIkUURhdGF7IkVuZFRpbWUifSIgc2l6ZT0iNyIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iRW5kVGltZSRRRGF0YXsiSUQifUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiWW91IGhhdmUgdG8gZmlsbCBpbiBzdGFydCBhbmQgZW5kIHRpbWUgb3IgYSB0aW1lIHBlcmlvZC4ifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkVuZFRpbWUkUURhdGF7IklEIn1TZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgo8IS0tIGR0bDpibG9jazpFbmRUaW1lR2VuZXJpY1NlcnZlckVycm9yIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+CjwhLS0gZHRsOmJsb2NrOkVuZFRpbWVHZW5lcmljU2VydmVyRXJyb3IgLS0+CjwhLS0gZHRsOmJsb2NrOkVuZFRpbWVCZWZvcmVTdGFydFRpbWVTZXJ2ZXJFcnJvciAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyJFbmQgdGltZSBtdXN0IGJlIGFmdGVyIHN0YXJ0IHRpbWUuIn08L3A+CjwhLS0gZHRsOmJsb2NrOkVuZFRpbWVCZWZvcmVTdGFydFRpbWVTZXJ2ZXJFcnJvciAtLT4KPCEtLSBkdGw6YmxvY2s6RW5kVGltZU5lZ2F0aXZlU2VydmVyRXJyb3IgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiTmVnYXRpdmUgdGltZXMgYXJlIG5vdCBhbGxvd2VkLiJ9PC9wPgo8IS0tIGR0bDpibG9jazpFbmRUaW1lTmVnYXRpdmVTZXJ2ZXJFcnJvciAtLT4KPCEtLSBkdGw6YmxvY2s6RW5kVGltZVJlcGVhdGVkSG91clNlcnZlckVycm9yIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IlJlcGVhdGVkIGhvdXJzIGFyZSBub3QgYWxsb3dlZC4gRW5kIHRpbWUgbWF0Y2hlcyBhbm90aGVyIGludGVydmFsLiJ9PC9wPgo8IS0tIGR0bDpibG9jazpFbmRUaW1lUmVwZWF0ZWRIb3VyU2VydmVyRXJyb3IgLS0+CjwhLS0gZHRsOmJsb2NrOkVuZFRpbWVJbnZhbGlkRm9ybWF0U2VydmVyRXJyb3IgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiSW52YWxpZCBmb3JtYXQhIFBsZWFzZSBlbnRlciBhIHRpbWUgd2l0aCB0aGUgZm9ybWF0IEhIOk1NLiJ9PC9wPgo8IS0tIGR0bDpibG9jazpFbmRUaW1lSW52YWxpZEZvcm1hdFNlcnZlckVycm9yIC0tPgo8IS0tIGR0bDpibG9jazpFbmRUaW1lSW52YWxpZCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyJJbnZhbGlkIHRpbWUhIEEgZGF5IGhhcyBvbmx5IDI0IGhvdXJzLiJ9PC9wPgo8IS0tIGR0bDpibG9jazpFbmRUaW1lSW52YWxpZCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6VW5pdElucHV0UGVyaW9kIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlBlcmlvZFskUURhdGF7IklEIn1dIiBpZD0iUGVyaW9kJFFEYXRheyJJRCJ9IiBjbGFzcz0iUGVyaW9kIFZhbGlkYXRlX1RpbWVBY2NvdW50aW5nX1BlcmlvZCBWYWxpZGF0ZV9UaW1lVW5pdHMgJFFEYXRheyJQZXJpb2RSZXF1aXJlZCJ9ICRRRGF0YXsiUGVyaW9kSW52YWxpZCJ9IiB2YWx1ZT0iJFFEYXRheyJQZXJpb2QifSIgc2l6ZT0iNyIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUGVyaW9kJFFEYXRheyJJRCJ9RXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyJZb3UgaGF2ZSB0byBmaWxsIGluIHN0YXJ0IGFuZCBlbmQgdGltZSBvciBhIHRpbWUgcGVyaW9kLiJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUGVyaW9kJFFEYXRheyJJRCJ9U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KPCEtLSBkdGw6YmxvY2s6UGVyaW9kR2VuZXJpY1NlcnZlckVycm9yIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+CjwhLS0gZHRsOmJsb2NrOlBlcmlvZEdlbmVyaWNTZXJ2ZXJFcnJvciAtLT4KPCEtLSBkdGw6YmxvY2s6SW52YWxpZEhvdXJzUGVyaW9kU2VydmVyRXJyb3IgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiSW52YWxpZCBwZXJpb2QhIEEgZGF5IGhhcyBvbmx5IDI0IGhvdXJzLiJ9PC9wPgo8IS0tIGR0bDpibG9jazpJbnZhbGlkSG91cnNQZXJpb2RTZXJ2ZXJFcnJvciAtLT4KPCEtLSBkdGw6YmxvY2s6WmVyb0hvdXJzUGVyaW9kU2VydmVyRXJyb3IgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiQSB2YWxpZCBwZXJpb2QgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4ifTwvcD4KPCEtLSBkdGw6YmxvY2s6WmVyb0hvdXJzUGVyaW9kU2VydmVyRXJyb3IgLS0+CjwhLS0gZHRsOmJsb2NrOk5lZ2F0aXZlUGVyaW9kU2VydmVyRXJyb3IgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiSW52YWxpZCBwZXJpb2QhIE5lZ2F0aXZlIHBlcmlvZHMgYXJlIG5vdCBhbGxvd2VkLiJ9PC9wPgo8IS0tIGR0bDpibG9jazpOZWdhdGl2ZVBlcmlvZFNlcnZlckVycm9yIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6VW5pdElucHV0UGVyaW9kIC0tPgo8IS0tIGR0bDpibG9jazpVbml0UGVyaW9kV2l0aG91dElucHV0IC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4kUURhdGF7IlBlcmlvZCJ9PC90ZD4KPCEtLSBkdGw6YmxvY2s6VW5pdFBlcmlvZFdpdGhvdXRJbnB1dCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOlVuaXQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjYiIGNsYXNzPSJSaWdodCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IkNhbGxGb3JBY3Rpb24gUGx1cyIgdHlwZT0iYnV0dG9uIiBpZD0iTW9yZUlucHV0RmllbGRzIiBuYW1lPSJNb3JlSW5wdXRGaWVsZHMiPjxzcGFuPiRUZXh0eyJBZGQgb25lIHJvdyJ9PC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpVbml0QmxvY2sgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjQiPjwvdGQ+CjwhLS0gZHRsOmJsb2NrOlRvdGFsIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4kVGV4dHsiVG90YWwifTo8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48c3BhbiBjbGFzcz0iVG90YWxIb3VycyI+JFFEYXRheyJUb3RhbCJ9PC9zcGFuPjwvdGQ+CjwhLS0gZHRsOmJsb2NrOlRvdGFsIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6UmVhZG9ubHkgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiJERhdGF7IkRlc2NyaXB0aW9uIn0ifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpSZWFkb25seSAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgo8IS0tIGR0bDpibG9jazpPdGhlclRpbWVzIC0tPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIHZhbHVlPSIxIiBpZD0iTGVhdmVEYXkiIG5hbWU9IkxlYXZlRGF5IiB0aXRsZT0iJFRleHR7Ik9uIHZhY2F0aW9uIn0iIGNsYXNzPSIkRGF0YXsiTGVhdmVEYXlJbnZhbGlkIn0iICREYXRheyJMZWF2ZURheSJ9IC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkxlYXZlRGF5Ij4kVGV4dHsiT24gdmFjYXRpb24ifTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkxlYXZlRGF5U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyJZb3UgY2FuIG9ubHkgc2VsZWN0IG9uZSBjaGVja2JveCBlbGVtZW50ISJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiB2YWx1ZT0iMSIgaWQ9IlNpY2siIG5hbWU9IlNpY2siIHRpdGxlPSIkVGV4dHsiT24gc2ljayBsZWF2ZSJ9IiBjbGFzcz0iJERhdGF7IlNpY2tJbnZhbGlkIn0iICREYXRheyJTaWNrIn0gLz4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iU2ljayI+JFRleHR7Ik9uIHNpY2sgbGVhdmUifTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IlNpY2tTZXJ2ZXJFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IllvdSBjYW4gb25seSBzZWxlY3Qgb25lIGNoZWNrYm94IGVsZW1lbnQhIn08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIHZhbHVlPSIxIiBpZD0iT3ZlcnRpbWUiIG5hbWU9Ik92ZXJ0aW1lIiB0aXRsZT0iJFRleHR7Ik9uIG92ZXJ0aW1lIGxlYXZlIn0iIGNsYXNzPSIkRGF0YXsiT3ZlcnRpbWVJbnZhbGlkIn0iICREYXRheyJPdmVydGltZSJ9IC8+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Ik92ZXJ0aW1lIj4kVGV4dHsiT24gb3ZlcnRpbWUgbGVhdmUifTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Ik92ZXJ0aW1lU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiRUZXh0eyJZb3UgY2FuIG9ubHkgc2VsZWN0IG9uZSBjaGVja2JveCBlbGVtZW50ISJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6T3RoZXJUaW1lcyAtLT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDZW50ZXIgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IlByaW1hcnkiIHR5cGU9InN1Ym1pdCIgbmFtZT0iSW5zZXJ0V29ya2luZ1VuaXRzIiB2YWx1ZT0iJFRleHR7IlN1Ym1pdCJ9Ij4kVGV4dHsiU3VibWl0In08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaWQ9IkRlbGV0ZVRpbWVBY2NvdW50aW5nRW50cnkiIGhyZWY9IiMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7IkRlbGV0ZSJ9CiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7Im9yIn0KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249RWRpdCI+JFRleHR7IkNhbmNlbCJ9PC9hPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KPCEtLWR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZS0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgIFRpbWVBY2NvdW50aW5nLkFnZW50LkVkaXRUaW1lUmVjb3Jkcy5BY3Rpb25MaXN0ID0gJFFEYXRheyJKU0FjdGlvbkxpc3QifTsKICAgIFRpbWVBY2NvdW50aW5nLkFnZW50LkVkaXRUaW1lUmVjb3Jkcy5BY3Rpb25MaXN0Q29uc3RyYWludHMgPSAkUURhdGF7IkpTQWN0aW9uTGlzdENvbnN0cmFpbnRzIn07CiAgICBUaW1lQWNjb3VudGluZy5BZ2VudC5FZGl0VGltZVJlY29yZHMuSW5pdCh7CiAgICAgICAgUmVtYXJrUmVnRXhwQ29udGVudDogIiRRRGF0YXsiUmVtYXJrUmVnRXhwIn0iLAogICAgICAgIEF1dG9jb21wbGV0aW9uOiAkUURhdGF7IkVuYWJsZUF1dG9jb21wbGV0aW9uIn0sCiAgICAgICAgTGFuZ3VhZ2U6IHsKICAgICAgICAgICAgU2hvd0FsbEl0ZW1zOiAiJEpTVGV4dHsiU2hvdyBhbGwgaXRlbXMifSIKICAgICAgICB9CiAgICB9KTsKICAgIFRpbWVBY2NvdW50aW5nLkFnZW50LkNvbmZpcm1hdGlvbkRpYWxvZy5CaW5kQ29uZmlybWF0aW9uRGlhbG9nKHsKICAgICAgICBFbGVtZW50SUQ6ICAgICAgICAgICAgICAgICAgJ0RlbGV0ZVRpbWVBY2NvdW50aW5nRW50cnknLAogICAgICAgIEVsZW1lbnRTZWxlY3RvcjogICAgICAgICAgICAnI0RlbGV0ZVRpbWVBY2NvdW50aW5nRW50cnknLAogICAgICAgIERpYWxvZ0NvbnRlbnRRdWVyeVN0cmluZzogICAnQWN0aW9uPUFnZW50VGltZUFjY291bnRpbmc7RGVsZXRlRGF5PTE7WWVhcj0kUURhdGF7IlllYXIifTtNb250aD0kUURhdGF7Ik1vbnRoIn07RGF5PSRRRGF0YXsiRGF5In0nLAogICAgICAgIENvbmZpcm1lZEFjdGlvblF1ZXJ5U3RyaW5nOiAnQWN0aW9uPUFnZW50VGltZUFjY291bnRpbmc7U3ViYWN0aW9uPURlbGV0ZTtZZWFyPSRRRGF0YXsiWWVhciJ9O01vbnRoPSRRRGF0YXsiTW9udGgifTtEYXk9JFFEYXRheyJEYXkifScsCiAgICAgICAgRGlhbG9nVGl0bGU6ICAgICAgICAgICAgICAgICckSlNUZXh0eyJEZWxldGUgVGltZSBBY2NvdW50aW5nIEVudHJ5In0nLAogICAgICAgIFRyYW5zbGF0ZWRUZXh0OiAgICAgICAgICAgICB7CiAgICAgICAgICAgIFllczogJyRKU1RleHR7IlllcyJ9JywKICAgICAgICAgICAgTm86ICAnJEpTVGV4dHsiTm8ifScKICAgICAgICB9CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KPCEtLWR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZS0tPgoKPCEtLSBkdGw6YmxvY2s6U2hvd0NvbmZpcm1hdGlvbiAtLT4KPCEtLWR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZS0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgIC8vIGRlZmluZSB5ZXMgYW5kIG5vIGJ1dHRvbnMKICAgIHZhciBCdXR0b25zID0gW3sKICAgICAgICBMYWJlbDogJyRKU1RleHR7IlllcyJ9JywKICAgICAgICBDbGFzczogIlByaW1hcnkiLAogICAgICAgIFR5cGU6ICJDbG9zZSIsCiAgICAgICAgfSwgewogICAgICAgIExhYmVsOiAnJEpTVGV4dHsiTm8ifScsCgogICAgICAgIC8vIGRlZmluZSB0aGUgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgd2hlbiB0aGUgJ05vJyBidXR0b24gaXMgcHJlc3NlZAogICAgICAgIEZ1bmN0aW9uOiBmdW5jdGlvbigpewoKICAgICAgICAgICAgLy8gZGlzYWJsZSBZZXMgYW5kIE5vIGJ1dHRvbnMgdG8gcHJldmVudCBtdWx0aXBsZSBzdWJtaXRzCiAgICAgICAgICAgICQoJ2Rpdi5EaWFsb2c6dmlzaWJsZSBkaXYuQ29udGVudEZvb3RlciBidXR0b24nKS5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpOwoKICAgICAgICAgICAgLy8gcmVkaXJlY3QgdG8gdGhlIG1vZHVsZSB0aGF0IGRlbGV0ZXMgdGhlIHNhdmVkIGVudHJ5IGFmdGVyIHByZXNzaW5nIHRoZSBObyBidXR0b24KICAgICAgICAgICAgbG9jYXRpb24uaHJlZiA9IENvcmUuQ29uZmlnLkdldCgnQmFzZWxpbmsnKSArICdBY3Rpb249QWdlbnRUaW1lQWNjb3VudGluZztTdWJhY3Rpb249RGVsZXRlO1llYXI9JFFEYXRheyJZZWFyIn07TW9udGg9JFFEYXRheyJNb250aCJ9O0RheT0kUURhdGF7IkRheSJ9JzsKICAgICAgICB9CiAgICB9XTsKICAgIC8vIHNob3cgdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cgdG8gY29uZmlybSB0aGUgYWN0aW9uCiAgICBDb3JlLlVJLkRpYWxvZy5TaG93Q29udGVudERpYWxvZygkKCcjJFFEYXRheyJCbG9ja05hbWUifScpLCAnJEpTVGV4dHsiQ29uZmlybSBpbnNlcnQifScsICcyMCUnLCAnQ2VudGVyJywgdHJ1ZSwgQnV0dG9ucyk7CgovL11dPjwvc2NyaXB0Pgo8IS0tZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlLS0+CjwhLS0gZHRsOmJsb2NrOlNob3dDb25maXJtYXRpb24gLS0+CgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KCjxwIGlkPSJTaWNrTGVhdmVNZXNzYWdlIiBjbGFzcz0iSGlkZGVuIENlbnRlciI+CiAgICAkVGV4dHsiQXJlIHlvdSBzdXJlIHRoYXQgeW91IHdvcmtlZCB3aGlsZSB5b3Ugd2VyZSBvbiBzaWNrIGxlYXZlPyJ9CjwvcD4KCjxwIGlkPSJWYWNhdGlvbk1lc3NhZ2UiIGNsYXNzPSJIaWRkZW4gQ2VudGVyIj4KICAgICRUZXh0eyJBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd29ya2VkIHdoaWxlIHlvdSB3ZXJlIG9uIHZhY2F0aW9uPyJ9CjwvcD4KCjxwIGlkPSJPdmVydGltZU1lc3NhZ2UiIGNsYXNzPSJIaWRkZW4gQ2VudGVyIj4KICAgICRUZXh0eyJBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd29ya2VkIHdoaWxlIHlvdSB3ZXJlIG9uIG92ZXJ0aW1lIGxlYXZlPyJ9CjwvcD4KCjxwIGlkPSJNb3JlMTZIb3Vyc01lc3NhZ2UiIGNsYXNzPSJIaWRkZW4gQ2VudGVyIj4KICAgICRUZXh0eyJBcmUgeW91IHN1cmUgdGhhdCB5b3Ugd29ya2VkIG1vcmUgdGhhbiAxNiBob3Vycz8ifQo8L3A+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIj4KICAgIDxoMSBjbGFzcz0iSGVhZGVyIj4kVGV4dHsiVGltZSByZXBvcnRpbmcgbW9udGhseSBvdmVydmlldyJ9PC9oMT4KCiAgICA8ZGl2IGNsYXNzPSJMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckxhc3QiPgogICAgICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgo8IS0tIGR0bDpibG9jazpPdmVydGltZSAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJPdmVydGltZSAoSG91cnMpIn08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7Ik92ZXJ0aW1lICh0aGlzIG1vbnRoKSJ9OgogICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJSaWdodCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kUURhdGF7Ik92ZXJ0aW1lIn08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiT3ZlcnRpbWUgKHRvdGFsKSJ9OgogICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJSaWdodCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kUURhdGF7Ik92ZXJ0aW1lVW50aWwifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJSZW1haW5pbmcgb3ZlcnRpbWUgbGVhdmUifToKICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUmlnaHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFFEYXRheyJPdmVydGltZVRvdGFsIn08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6T3ZlcnRpbWUgLS0+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDI+JFRleHR7IlZhY2F0aW9uIChEYXlzKSJ9PC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJWYWNhdGlvbiB0YWtlbiAodGhpcyBtb250aCkifToKICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUmlnaHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFFEYXRheyJMZWF2ZURheSJ9PC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7IlZhY2F0aW9uIHRha2VuICh0b3RhbCkifToKICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUmlnaHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFFEYXRheyJMZWF2ZURheVRvdGFsIn08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiUmVtYWluaW5nIHZhY2F0aW9uIn06CiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlJpZ2h0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPiRRRGF0YXsiTGVhdmVEYXlSZW1haW5pbmcifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJTaWNrIExlYXZlIChEYXlzKSJ9PC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJTaWNrIGxlYXZlIHRha2VuICh0aGlzIG1vbnRoKSJ9OgogICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJSaWdodCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kUURhdGF7IlNpY2sifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJTaWNrIGxlYXZlIHRha2VuICh0b3RhbCkifToKICAgICAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iUmlnaHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFFEYXRheyJTaWNrVG90YWwifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2ZpZWxkc2V0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJPdmVydmlldyJ9CjwhLS0gZHRsOmJsb2NrOlVzZXIgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIC0gJFFEYXRheyJVc2VyIn0KPCEtLSBkdGw6YmxvY2s6VXNlciAtLT4KICAgICAgICAgICAgICAgICAgICA8L2gyPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFkZGl0aW9uYWxJbmZvcm1hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJBcnJvdyBMZWZ0IiB0aXRsZT0iJFRleHR7IlByZXZpb3VzIG1vbnRoIn0iIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPU92ZXJ2aWV3O1llYXI9JExRRGF0YXsiWWVhckJhY2sifTtNb250aD0kTFFEYXRheyJNb250aEJhY2sifTtVc2VySUQ9JExRRGF0YXsiVXNlcklEIn0iPjwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IkFycm93IFJpZ2h0IiB0aXRsZT0iJFRleHR7Ik5leHQgbW9udGgifSIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249T3ZlcnZpZXc7WWVhcj0kTFFEYXRheyJZZWFyTmV4dCJ9O01vbnRoPSRMUURhdGF7Ik1vbnRoTmV4dCJ9O1VzZXJJRD0kTFFEYXRheyJVc2VySUQifSI+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiJERhdGF7Ik1vbnRoX3RvX1RleHQifSJ9ICRRRGF0YXsiWWVhciJ9CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiRGF5In08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiV2Vla2RheSJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IkNvbW1lbnQifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJXb3JraW5nIEhvdXJzIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5Pgo8IS0tIGR0bDpibG9jazpSb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9IiRRRGF0YXsiQ2xhc3MifSBNYXN0ZXJBY3Rpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iRml4ZWQgRGF5Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249JExRRGF0YXsiU3ViYWN0aW9uIn07WWVhcj0kTFFEYXRheyJZZWFyIn07TW9udGg9JExRRGF0YXsiTW9udGgifTtEYXk9JExRRGF0YXsiRGF5In07VXNlcklEPSRMUURhdGF7IlVzZXJJRCJ9IiBjbGFzcz0iTWFzdGVyQWN0aW9uTGluayI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUURhdGF7IkRheSJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iRml4ZWQgV2Vla2RheSI+JFRleHR7IiREYXRheyJXZWVrZGF5X3RvX1RleHQifSJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+JFRleHR7IiREYXRheyJDb21tZW50In0ifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJSaWdodCI+JFFEYXRheyJXb3JraW5nSG91cnMifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpSb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJTcGFjaW5nVG9wIFJpZ2h0Ij48c3Ryb25nPiRUZXh0eyJUb3RhbCB3b3JrZWQgaG91cnMifTo8L3N0cm9uZz4gJFFEYXRheyJXb3JraW5nSG91cnMifTwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgyPgogICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiVXNlcidzIHByb2plY3Qgb3ZlcnZpZXcifQogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1PdmVydmlldztZZWFyPSRMUURhdGF7IlllYXIifTtNb250aD0kTFFEYXRheyJNb250aCJ9O1Byb2plY3RTdGF0dXNTaG93PSRMUURhdGF7IlByb2plY3RTdGF0dXNTaG93In07VXNlcklEPSRMUURhdGF7IlVzZXJJRCJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICgkVGV4dHsiJERhdGF7IlNob3dQcm9qZWN0cyJ9In0pCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICA8L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSBOb0hvdmVyIEhpZ2hDZWxscyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IlByb2plY3QifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJUYXNrIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiSG91cnMgKG1vbnRobHkpIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiSG91cnMgKExpZmV0aW1lKSJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KPCEtLSBkdGw6YmxvY2s6QWN0aW9uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgo8IS0tIGR0bDpibG9jazpQcm9qZWN0IC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCByb3dzcGFuPSIkRGF0YXsiUm93U3BhbiJ9IiBjbGFzcz0iUm93U3BhbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+CjwhLS0gZHRsOmJsb2NrOlByb2plY3ROb0xpbmsgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICREYXRheyJQcm9qZWN0In0KPCEtLSBkdGw6YmxvY2s6UHJvamVjdE5vTGluayAtLT4KPCEtLSBkdGw6YmxvY2s6UHJvamVjdExpbmsgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPVByb2plY3RSZXBvcnRpbmc7UHJvamVjdElEPSRMUURhdGF7IlByb2plY3RJRCJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICREYXRheyJQcm9qZWN0In0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgo8IS0tIGR0bDpibG9jazpQcm9qZWN0TGluayAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdHJvbmc+CjwhLS0gZHRsOmJsb2NrOlByb2plY3REZXNjcmlwdGlvbiAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJyLz4kRGF0YXsiUHJvamVjdERlc2NyaXB0aW9uIn0KPCEtLSBkdGw6YmxvY2s6UHJvamVjdERlc2NyaXB0aW9uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CjwhLS0gZHRsOmJsb2NrOlByb2plY3QgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiRRRGF0YXsiQWN0aW9uIn08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iUmlnaHQiPiRRRGF0YXsiSG91cnMifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJSaWdodCI+JFFEYXRheyJIb3Vyc1RvdGFsIn08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6QWN0aW9uVG90YWwgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxzdHJvbmc+JFRleHR7IlRvdGFsIn08L3N0cm9uZz48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iUmlnaHQiPjxzdHJvbmc+JFFEYXRheyJIb3VycyJ9PC9zdHJvbmc+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlJpZ2h0Ij48c3Ryb25nPiRRRGF0YXsiSG91cnNUb3RhbCJ9PC9zdHJvbmc+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOkFjdGlvblRvdGFsIC0tPgo8IS0tIGR0bDpibG9jazpBY3Rpb24gLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9IkdyYW5kVG90YWwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj48c3Ryb25nPiRUZXh0eyJHcmFuZCB0b3RhbCJ9PC9zdHJvbmc+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlJpZ2h0Ij48c3Ryb25nPiRRRGF0YXsiVG90YWxIb3VycyJ9PC9zdHJvbmc+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlJpZ2h0Ij48c3Ryb25nPiRRRGF0YXsiVG90YWxIb3Vyc1RvdGFsIn08L3N0cm9uZz48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2Pgo8IS0tIGR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZSAtLT4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiQoJy5NYXN0ZXJBY3Rpb24nKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgdmFyICRNYXN0ZXJBY3Rpb25MaW5rID0gJCh0aGlzKS5maW5kKCcuTWFzdGVyQWN0aW9uTGluaycpOwogICAgLy8gb25seSBhY3QgaWYgdGhlIGxpbmsgd2FzIG5vdCBjbGlja2VkIGRpcmVjdGx5CiAgICBpZiAoRXZlbnQudGFyZ2V0ICE9PSAkTWFzdGVyQWN0aW9uTGluay5nZXQoMCkpIHsKICAgICAgICB3aW5kb3cubG9jYXRpb24gPSAkTWFzdGVyQWN0aW9uTGluay5hdHRyKCdocmVmJyk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQp9KTsKLy9dXT48L3NjcmlwdD4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIExheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyRmlyc3QiPgogICAgPGgxIGNsYXNzPSJIZWFkZXIiPiRUZXh0eyJQcm9qZWN0IHJlcG9ydCJ9OiAkUURhdGF7IlByb2plY3QifTwvaDE+CgogICAgPGRpdiBjbGFzcz0iU2lkZWJhckNvbHVtbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiQWN0aW9ucyJ9PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25MaXN0Ij4KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPVJlcG9ydGluZyIgY2xhc3M9IkNhbGxGb3JBY3Rpb24iPjxzcGFuPiRUZXh0eyJHbyB0byBvdmVydmlldyJ9PC9zcGFuPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJQcm9qZWN0IHJlcG9ydCJ9OiAkUURhdGF7IlByb2plY3QifTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KCiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSBEYXRhVGFibGVOb0hpZ2hsaWdodCI+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IlRhc2sifTwvdGg+CjwhLS0gZHRsOmJsb2NrOlVzZXJOYW1lIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRRRGF0YXsiVXNlciJ9PC90aD4KPCEtLSBkdGw6YmxvY2s6VXNlck5hbWUgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IlRvdGFsIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5PgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CjwhLS0gZHRsOmJsb2NrOkFjdGlvbiAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4kUURhdGF7IkFjdGlvbiJ9PC90ZD4KPCEtLSBkdGw6YmxvY2s6VXNlciAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iUmlnaHQiPiRRRGF0YXsiSG91cnMifTwvdGQ+CjwhLS0gZHRsOmJsb2NrOlVzZXIgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOkFjdGlvbiAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJHcmFuZFRvdGFsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48c3Ryb25nPiRUZXh0eyJUb3RhbCJ9PC9zdHJvbmc+PC90ZD4KPCEtLSBkdGw6YmxvY2s6VXNlclRvdGFsIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJSaWdodCI+PHN0cm9uZz4kUURhdGF7IlRvdGFsIn08L3N0cm9uZz48L3RkPgo8IS0tIGR0bDpibG9jazpVc2VyVG90YWwgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlJpZ2h0Ij48c3Ryb25nPiRRRGF0YXsiVG90YWxBbGwifTwvc3Ryb25nPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJIaXN0b3J5In06ICRRRGF0YXsiUHJvamVjdCJ9PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIERhdGFUYWJsZU5vSGlnaGxpZ2h0Ij4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiRGF0ZSJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiVXNlciJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiVGFzayJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiUmVtYXJrIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJQZXJpb2QifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CjwhLS0gZHRsOmJsb2NrOlJvdyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiRRRGF0YXsiRGF0ZSJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4kUURhdGF7IlVzZXIifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+JFFEYXRheyJBY3Rpb24ifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+JFFEYXRheyJSZW1hcmsifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlJpZ2h0Ij4kUURhdGF7IlBlcmlvZCJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6Um93IC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9IkdyYW5kVG90YWwiPgo8IS0tIGR0bDpibG9jazpIaXN0b3J5VG90YWwgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iNCI+PHN0cm9uZz4kVGV4dHsiVG90YWwifTwvc3Ryb25nPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlJpZ2h0Ij48c3Ryb25nPiRRRGF0YXsiSGlzdG9yeVRvdGFsIn08L3N0cm9uZz48L3RkPgo8IS0tIGR0bDpibG9jazpIaXN0b3J5VG90YWwgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2Pgo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIExheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyRmlyc3QiPgogICAgPGgxIGNsYXNzPSJIZWFkZXIiPiRUZXh0eyJUaW1lIHJlcG9ydGluZyJ9OiAkVGV4dHsiJERhdGF7Ik1vbnRoX3RvX1RleHQifSJ9ICREYXRheyJZZWFyIn08L2gxPgoKICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7Ik1vbnRoIE5hdmlnYXRpb24ifTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Ik1vbnRoU2VsZWN0aW9uIj4KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQXJyb3cgTGVmdCIgdGl0bGU9IiRUZXh0eyJQcmV2aW91cyBtb250aCJ9IiBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1SZXBvcnRpbmc7WWVhcj0kTFFEYXRheyJZZWFyQmFjayJ9O01vbnRoPSRMUURhdGF7Ik1vbnRoQmFjayJ9Ij48L2E+CiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9IkFycm93IFJpZ2h0IiB0aXRsZT0iJFRleHR7Ik5leHQgbW9udGgifSIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249UmVwb3J0aW5nO1llYXI9JExRRGF0YXsiWWVhck5leHQifTtNb250aD0kTFFEYXRheyJNb250aE5leHQifSI+PC9hPgogICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+JFRleHR7IiREYXRheyJNb250aF90b19UZXh0In0ifSAkRGF0YXsiWWVhciJ9PC9zdHJvbmc+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbmFtZT0iY29tcG9zZSI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiAgICB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iUmVwb3J0aW5nIiAvPgogICAgICAgICAgICAgICAgICAgICREYXRheyJNb250aE9wdGlvbiJ9CiAgICAgICAgICAgICAgICAgICAgJERhdGF7IlllYXJPcHRpb24ifQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iYnV0dG9uIiBhY2Nlc3NrZXk9ImciIHR5cGU9InN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJTdWJtaXQifSIgLz4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJVc2VyIHJlcG9ydHMifTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50IEhvcml6b250YWxTY3JvbGwiPgogICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZCBjbGFzcz0iVHdvUm93cyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNvbHNwYW49IjQiPiRUZXh0eyJNb250aGx5IHRvdGFsIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNvbHNwYW49IjIiPiRUZXh0eyJMaWZldGltZSB0b3RhbCJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJVc2VyIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJXb3JraW5nIEhvdXJzIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJPdmVydGltZSBsZWF2ZSJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiVmFjYXRpb24ifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IlNpY2sgbGVhdmUifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7Ik92ZXJ0aW1lIGxlYXZlIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJWYWNhdGlvbiByZW1haW5pbmcifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CjwhLS0gZHRsOmJsb2NrOlVzZXIgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iTWFzdGVyQWN0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1PdmVydmlldztZZWFyPSRMUURhdGF7IlllYXIifTtNb250aD0kTFFEYXRheyJNb250aCJ9O1VzZXJJRD0kTFFEYXRheyJVc2VySUQifSIgY2xhc3M9Ik1hc3RlckFjdGlvbkxpbmsiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUURhdGF7IlVzZXIifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlJpZ2h0Ij4kUURhdGF7IldvcmtpbmdIb3VycyJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iUmlnaHQiPiRRRGF0YXsiT3ZlcnRpbWUifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlJpZ2h0Ij4kUURhdGF7IkxlYXZlRGF5In08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJSaWdodCI+JFFEYXRheyJTaWNrIn08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJSaWdodCI+JFFEYXRheyJPdmVydGltZVRvdGFsIn08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJSaWdodCI+JFFEYXRheyJMZWF2ZURheVJlbWFpbmluZyJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6VXNlciAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJHcmFuZFRvdGFsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48c3Ryb25nPiRUZXh0eyJUb3RhbCJ9PC9zdHJvbmc+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iUmlnaHQiPjxzdHJvbmc+JFFEYXRheyJUb3RhbFdvcmtpbmdIb3VycyJ9PC9zdHJvbmc+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iUmlnaHQiPjxzdHJvbmc+JFFEYXRheyJUb3RhbE92ZXJ0aW1lIn08L3N0cm9uZz48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJSaWdodCI+PHN0cm9uZz4kUURhdGF7IlRvdGFsTGVhdmVEYXkifTwvc3Ryb25nPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlJpZ2h0Ij48c3Ryb25nPiRRRGF0YXsiVG90YWxTaWNrIn08L3N0cm9uZz48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJSaWdodCI+PHN0cm9uZz4kUURhdGF7IlRvdGFsT3ZlcnRpbWVUb3RhbCJ9PC9zdHJvbmc+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iUmlnaHQiPjxzdHJvbmc+JFFEYXRheyJUb3RhbExlYXZlRGF5UmVtYWluaW5nIn08L3N0cm9uZz48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiUHJvamVjdCByZXBvcnRzIn0KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1SZXBvcnRpbmc7WWVhcj0kTFFEYXRheyJZZWFyIn07TW9udGg9JExRRGF0YXsiTW9udGgifTtQcm9qZWN0U3RhdHVzU2hvdz0kTFFEYXRheyJQcm9qZWN0U3RhdHVzU2hvdyJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgKCRUZXh0eyIkRGF0YXsiU2hvd1Byb2plY3RzIn0ifSkKICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCBIb3Jpem9udGFsU2Nyb2xsIj4KICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIE5vSG92ZXIiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJQcm9qZWN0In08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJUYXNrIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJIb3VycyAobW9udGhseSkifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IkhvdXJzIChMaWZldGltZSkifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CjwhLS0gZHRsOmJsb2NrOkFjdGlvbiAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJNYXN0ZXJBY3Rpb24iPgo8IS0tIGR0bDpibG9jazpQcm9qZWN0IC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHJvd3NwYW49IiREYXRheyJSb3dTcGFuIn0iIGNsYXNzPSJSb3dTcGFuIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPjxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPVByb2plY3RSZXBvcnRpbmc7UHJvamVjdElEPSRMUURhdGF7IlByb2plY3RJRCJ9IiBjbGFzcz0iTWFzdGVyQWN0aW9uTGluayI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJERhdGF7IlByb2plY3QifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPjwvc3Ryb25nPgo8IS0tIGR0bDpibG9jazpQcm9qZWN0RGVzY3JpcHRpb24gLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz4kRGF0YXsiUHJvamVjdERlc2NyaXB0aW9uIn0KPCEtLSBkdGw6YmxvY2s6UHJvamVjdERlc2NyaXB0aW9uIC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgo8IS0tIGR0bDpibG9jazpQcm9qZWN0IC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQ+JFFEYXRheyJBY3Rpb24ifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iUmlnaHQiPiRRRGF0YXsiSG91cnMifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iUmlnaHQiPiRRRGF0YXsiSG91cnNUb3RhbCJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpBY3Rpb25Ub3RhbCAtLT4KICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48c3Ryb25nPiRUZXh0eyJUb3RhbCJ9PC9zdHJvbmc+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJSaWdodCI+PHN0cm9uZz4kUURhdGF7IkhvdXJzIn08L3N0cm9uZz48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IlJpZ2h0Ij48c3Ryb25nPiRRRGF0YXsiSG91cnNUb3RhbCJ9PC9zdHJvbmc+PC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpBY3Rpb25Ub3RhbCAtLT4KPCEtLSBkdGw6YmxvY2s6QWN0aW9uIC0tPgogICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iR3JhbmRUb3RhbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIj48c3Ryb25nPiRUZXh0eyJHcmFuZCB0b3RhbCJ9PC9zdHJvbmc+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJSaWdodCI+PHN0cm9uZz4kUURhdGF7IlRvdGFsSG91cnMifTwvc3Ryb25nPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iUmlnaHQiPjxzdHJvbmc+JFFEYXRheyJUb3RhbEhvdXJzVG90YWwifTwvc3Ryb25nPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+CjwvZGl2Pgo8IS0tIGR0bDpqc19vbl9kb2N1bWVudF9jb21wbGV0ZSAtLT4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiQoJy5NYXN0ZXJBY3Rpb24nKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgdmFyICRNYXN0ZXJBY3Rpb25MaW5rID0gJCh0aGlzKS5maW5kKCcuTWFzdGVyQWN0aW9uTGluaycpOwogICAgLy8gb25seSBhY3QgaWYgdGhlIGxpbmsgd2FzIG5vdCBjbGlja2VkIGRpcmVjdGx5CiAgICBpZiAoRXZlbnQudGFyZ2V0ICE9PSAkTWFzdGVyQWN0aW9uTGluay5nZXQoMCkpIHsKICAgICAgICB3aW5kb3cubG9jYXRpb24gPSAkTWFzdGVyQWN0aW9uTGluay5hdHRyKCdocmVmJyk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQp9KTsKLy9dXT48L3NjcmlwdD4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3UHJvamVjdCAtLT4KPGRpdiBjbGFzcz0iTWFpbkJveCBBUklBUm9sZU1haW4gTGF5b3V0Rml4ZWRTaWRlYmFyIFNpZGViYXJGaXJzdCI+CiAgICA8aDEgY2xhc3M9IkhlYWRlciI+JFRleHR7IkVkaXQgVGltZSBBY2NvdW50aW5nIFByb2plY3QgU2V0dGluZ3MifTwvaDE+CgogICAgPGRpdiBjbGFzcz0iU2lkZWJhckNvbHVtbiI+CjwhLS0gZHRsOmJsb2NrOkFjdGlvbkxpc3RQcm9qZWN0IC0tPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IkFjdGlvbnMifTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQWN0aW9uTGlzdCI+CjwhLS1kdGw6YmxvY2s6QWN0aW9uQWRkUHJvamVjdC0tPgogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJBZGRQcm9qZWN0Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIFBsdXMiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJBZGQifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+JFRleHR7IkFkZCBwcm9qZWN0In08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CjwhLS1kdGw6YmxvY2s6QWN0aW9uQWRkUHJvamVjdC0tPgoKPCEtLSBkdGw6YmxvY2s6QWN0aW9uU2V0dGluZ092ZXJ2aWV3IC0tPgogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249U2V0dGluZyIgY2xhc3M9IkNhbGxGb3JBY3Rpb24iPjxzcGFuPiRUZXh0eyJHbyB0byBvdmVydmlldyJ9PC9zcGFuPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgo8IS0tIGR0bDpibG9jazpBY3Rpb25TZXR0aW5nT3ZlcnZpZXctLT4KICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpBY3Rpb25MaXN0UHJvamVjdCAtLT4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgoKPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdVcGRhdGVQcm9qZWN0IC0tPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CjwhLS0gZHRsOmJsb2NrOkhlYWRlckFkZFByb2plY3QgLS0+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IkFkZCBQcm9qZWN0In08L2gyPgo8IS0tIGR0bDpibG9jazpIZWFkZXJBZGRQcm9qZWN0IC0tPgo8IS0tIGR0bDpibG9jazpIZWFkZXJFZGl0UHJvamVjdCAtLT4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiRWRpdCBQcm9qZWN0IFNldHRpbmdzIn08L2gyPgo8IS0tIGR0bDpibG9jazpIZWFkZXJFZGl0UHJvamVjdCAtLT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0IiBuYW1lPSJQcm9qZWN0VXBkYXRlIiBjbGFzcz0iVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IiRRRGF0YXsiQWN0aW9uIn1BY3Rpb24iPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IklEIiB2YWx1ZT0iJFFEYXRheyJJRCJ9Ii8+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iUHJvamVjdCI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gJFRleHR7Ik5hbWUifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iUHJvamVjdCIgaWQ9IlByb2plY3QiIHZhbHVlPSIkUURhdGF7IlByb2plY3QifSIgY2xhc3M9Ilc1MHBjIFZhbGlkYXRlX1JlcXVpcmVkICRRRGF0YXsiUHJvamVjdEludmFsaWQifSIgbWF4bGVuZ3RoPSI1MCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iUHJvamVjdEVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCjwhLS0gZHRsOmJsb2NrOlByb2plY3RNaXNzaW5nVmFsdWUgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJQcm9qZWN0U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpQcm9qZWN0TWlzc2luZ1ZhbHVlIC0tPgoKPCEtLSBkdGw6YmxvY2s6UHJvamVjdER1cGxpY2F0ZU5hbWUgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJQcm9qZWN0U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiVGhlcmUgaXMgYWxyZWFkeSBhIHByb2plY3Qgd2l0aCB0aGlzIG5hbWUuIFBsZWFzZSwgY2hvb3NlIGEgZGlmZmVyZW50IG9uZS4ifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpQcm9qZWN0RHVwbGljYXRlTmFtZSAtLT4KCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJQcm9qZWN0RGVzY3JpcHRpb24iPiRUZXh0eyJEZXNjcmlwdGlvbiJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJQcm9qZWN0RGVzY3JpcHRpb24iIGlkPSJQcm9qZWN0RGVzY3JpcHRpb24iIHZhbHVlPSIkUURhdGF7IlByb2plY3REZXNjcmlwdGlvbiJ9IiBjbGFzcz0iVzUwcGMiIG1heGxlbmd0aD0iMTUwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJQcm9qZWN0U3RhdHVzIj4kVGV4dHsiU3RhdHVzIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJERhdGF7IlN0YXR1c09wdGlvbiJ9CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IlByaW1hcnkiIHR5cGU9InN1Ym1pdCIgaWQ9IlN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJTdWJtaXQifSI+JFRleHR7IlN1Ym1pdCJ9PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsib3IifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249U2V0dGluZyI+JFRleHR7IkNhbmNlbCJ9PC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpPdmVydmlld1VwZGF0ZVByb2plY3QgLS0+CiAgICA8L2Rpdj4KPC9kaXY+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3UHJvamVjdCAtLT4KCjwhLS0gZHRsOmJsb2NrOlNldHRpbmcgLS0+CjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIExheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyRmlyc3QiPgogICAgPGgxIGNsYXNzPSJIZWFkZXIiPiRUZXh0eyJFZGl0IFRpbWUgQWNjb3VudGluZyBTZXR0aW5ncyJ9PC9oMT4KCiAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIj4KCjwhLS0gZHRsOmJsb2NrOkFjdGlvbkxpc3RTZXR0aW5nIC0tPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IkFjdGlvbnMifTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQWN0aW9uTGlzdCI+CjwhLS1kdGw6YmxvY2s6QWN0aW9uQWRkUHJvamVjdC0tPgogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJBZGRQcm9qZWN0Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJDYWxsRm9yQWN0aW9uIFBsdXMiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJBZGQifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+JFRleHR7IkFkZCBwcm9qZWN0In08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CjwhLS1kdGw6YmxvY2s6QWN0aW9uQWRkUHJvamVjdC0tPgo8IS0tZHRsOmJsb2NrOkFjdGlvbkFkZFRhc2stLT4KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSIkRW52eyJBY3Rpb24ifSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iQWRkVGFzayIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBQbHVzIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSIkVGV4dHsiQWRkIHRhc2sifSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+JFRleHR7IkFkZCB0YXNrIn08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CjwhLS1kdGw6YmxvY2s6QWN0aW9uQWRkVGFzay0tPgo8IS0tZHRsOmJsb2NrOkFjdGlvbkFkZFVzZXItLT4KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSIkRW52eyJBY3Rpb24ifSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iQWRkVXNlciIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJERhdGF7Ik5ld1VzZXJPcHRpb24ifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iQ2FsbEZvckFjdGlvbiIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJFRleHR7Ik5ldyB1c2VyIn0iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPiRUZXh0eyJOZXcgdXNlciJ9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgo8IS0tZHRsOmJsb2NrOkFjdGlvbkFkZFVzZXItLT4KPCEtLSBkdGw6YmxvY2s6QWN0aW9uT3ZlcnZpZXdTZXR0aW5nIC0tPgogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249U2V0dGluZyIgY2xhc3M9IkNhbGxGb3JBY3Rpb24iPjxzcGFuPiRUZXh0eyJHbyB0byBvdmVydmlldyJ9PC9zcGFuPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgo8IS0tIGR0bDpibG9jazpBY3Rpb25PdmVydmlld1NldHRpbmcgLS0+CgogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOkFjdGlvbkxpc3RTZXR0aW5nIC0tPgoKPCEtLSBkdGw6YmxvY2s6UHJvamVjdEZpbHRlciAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPjxsYWJlbCBmb3I9IkZpbHRlclByb2plY3RzIj4kVGV4dHsiRmlsdGVyIGZvciBQcm9qZWN0cyJ9PC9sYWJlbD48L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IkZpbHRlclByb2plY3RzIiBjbGFzcz0iVzUwcGMiIG5hbWU9IkZpbHRlclByb2plY3RzIiB2YWx1ZT0iIiB0aXRsZT0iJFRleHR7IkZpbHRlciBmb3IgUHJvamVjdHMifSIgLz4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOlByb2plY3RGaWx0ZXIgLS0+Cgo8IS0tIGR0bDpibG9jazpUYXNrRmlsdGVyIC0tPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+PGxhYmVsIGZvcj0iRmlsdGVyVGFza3MiPiRUZXh0eyJGaWx0ZXIgZm9yIFRhc2tzIn08L2xhYmVsPjwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iRmlsdGVyVGFza3MiIGNsYXNzPSJXNTBwYyIgbmFtZT0iRmlsdGVyVGFza3MiIHZhbHVlPSIiIHRpdGxlPSIkVGV4dHsiRmlsdGVyIGZvciBUYXNrcyJ9IiAvPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6VGFza0ZpbHRlciAtLT4KCjwhLS0gZHRsOmJsb2NrOlVzZXJGaWx0ZXIgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj48bGFiZWwgZm9yPSJGaWx0ZXJVc2VycyI+JFRleHR7IkZpbHRlciBmb3IgVXNlcnMifTwvbGFiZWw+PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJGaWx0ZXJVc2VycyIgY2xhc3M9Ilc1MHBjIiBuYW1lPSJGaWx0ZXJVc2VycyIgdmFsdWU9IiIgdGl0bGU9IiRUZXh0eyJGaWx0ZXIgZm9yIFVzZXJzIn0iIC8+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpVc2VyRmlsdGVyIC0tPgoKPCEtLSBkdGw6YmxvY2s6UmVmZXJlbmNlIC0tPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiUmVmZXJlbmNlIn08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICAgICAgPGxpPiRUZXh0eyJSZXF1aXJlZCBmaWVsZHMgYXJlIG1hcmtlZCB3aXRoIGEgIioiLiJ9PC9saT4KICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpSZWZlcmVuY2UgLS0+CgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3UmVzdWx0UHJvamVjdCAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+PGEgaHJlZj0iIyIgdGl0bGU9IiRUZXh0eyJTaG93IG9yIGhpZGUgdGhlIGNvbnRlbnQifSI+PHNwYW4+PC9zcGFuPjwvYT48L2Rpdj4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiUHJvamVjdCBMaXN0In08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUiIGlkPSJQcm9qZWN0cyI+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IlByb2plY3QifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IkNvbW1lbnQifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IlN0YXR1cyJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJGaWx0ZXJNZXNzYWdlIEhpZGRlbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7Ik5vIG1hdGNoZXMgZm91bmQuIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk5vUHJvamVjdERhdGFGb3VuZE1zZyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJObyBkYXRhIGZvdW5kLiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpOb1Byb2plY3REYXRhRm91bmRNc2cgLS0+Cgo8IS0tIGR0bDpibG9jazpPdmVydmlld1Jlc3VsdFByb2plY3RSb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YSBjbGFzcz0iQXNCbG9jayIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249RWRpdFByb2plY3Q7SUQ9JExRRGF0YXsiUHJvamVjdElEIn0iPiRRRGF0YXsiUHJvamVjdCJ9PC9hPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgdGl0bGU9IiRRRGF0YXsiUHJvamVjdERlc2NyaXB0aW9uIn0iPiRRRGF0YXsiUHJvamVjdERlc2NyaXB0aW9uIiwiNDAifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+JFRleHR7IiREYXRheyJTdGF0dXMifSJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdSZXN1bHRQcm9qZWN0Um93IC0tPgogICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdSZXN1bHRQcm9qZWN0IC0tPgoKPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwogICAgQ29yZS5VSS5UYWJsZS5Jbml0VGFibGVGaWx0ZXIoJCgnI0ZpbHRlclByb2plY3RzJyksICQoJyNQcm9qZWN0cycpKTsKLy9dXT48L3NjcmlwdD4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+Cgo8IS0tIGR0bDpibG9jazpPdmVydmlld1Jlc3VsdFNldHRpbmcgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEFjdGlvbiBUb2dnbGUiPjxhIGhyZWY9IiMiIHRpdGxlPSIkVGV4dHsiU2hvdyBvciBoaWRlIHRoZSBjb250ZW50In0iPjxzcGFuPjwvc3Bhbj48L2E+PC9kaXY+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IlRhc2sgTGlzdCJ9PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUiIGlkPSJUYXNrcyI+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IlRhc2sifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IlN0YXR1cyJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPSJGaWx0ZXJNZXNzYWdlIEhpZGRlbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7Ik5vIG1hdGNoZXMgZm91bmQuIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk5vU2V0dGluZ0RhdGFGb3VuZE1zZyAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJObyBkYXRhIGZvdW5kLiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpOb1NldHRpbmdEYXRhRm91bmRNc2cgLS0+Cgo8IS0tIGR0bDpibG9jazpPdmVydmlld1Jlc3VsdFNldHRpbmdSb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YSBjbGFzcz0iQXNCbG9jayIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249RWRpdFRhc2s7QWN0aW9uSUQ9JExRRGF0YXsiQWN0aW9uSUQifSI+JFFEYXRheyJBY3Rpb24ifTwvYT48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiRUZXh0eyIkRGF0YXsiU3RhdHVzIn0ifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3UmVzdWx0U2V0dGluZ1JvdyAtLT4KICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3UmVzdWx0U2V0dGluZyAtLT4KCjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgIENvcmUuVUkuVGFibGUuSW5pdFRhYmxlRmlsdGVyKCQoJyNGaWx0ZXJUYXNrcycpLCAkKCcjVGFza3MnKSk7Ci8vXV0+PC9zY3JpcHQ+CjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgoKPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdVcGRhdGVUYXNrIC0tPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CjwhLS0gZHRsOmJsb2NrOkhlYWRlckFkZFRhc2sgLS0+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IkFkZCBUYXNrIn08L2gyPgo8IS0tIGR0bDpibG9jazpIZWFkZXJBZGRUYXNrIC0tPgo8IS0tIGR0bDpibG9jazpIZWFkZXJFZGl0VGFzayAtLT4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiRWRpdCBUYXNrIFNldHRpbmdzIn08L2gyPgo8IS0tIGR0bDpibG9jazpIZWFkZXJFZGl0VGFzayAtLT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0IiBuYW1lPSJUYXNrVXBkYXRlIiBjbGFzcz0iVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IiRRRGF0YXsiQWN0aW9uIn1BY3Rpb24iPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbklEIiB2YWx1ZT0iJFFEYXRheyJBY3Rpb25JRCJ9Ii8+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UiPgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJNYW5kYXRvcnkiIGZvcj0iVGFzayI+PHNwYW4gY2xhc3M9Ik1hcmtlciI+Kjwvc3Bhbj4gJFRleHR7IlRhc2sifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iVGFzayIgaWQ9IlRhc2siIHZhbHVlPSIkUURhdGF7IlRhc2sifSIgY2xhc3M9Ilc1MHBjIFZhbGlkYXRlX1JlcXVpcmVkICRRRGF0YXsiVGFza0ludmFsaWQifSIgbWF4bGVuZ3RoPSI1MCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iVGFza0Vycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KCjwhLS0gZHRsOmJsb2NrOlRhc2tNaXNzaW5nVmFsdWUgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJUYXNrU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpUYXNrTWlzc2luZ1ZhbHVlIC0tPgoKPCEtLSBkdGw6YmxvY2s6VGFza0R1cGxpY2F0ZU5hbWUgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJUYXNrU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD4kVGV4dHsiVGhlcmUgaXMgYWxyZWFkeSBhIHRhc2sgd2l0aCB0aGlzIG5hbWUuIFBsZWFzZSwgY2hvb3NlIGEgZGlmZmVyZW50IG9uZS4ifTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpUYXNrRHVwbGljYXRlTmFtZSAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlRhc2tTdGF0dXMiPiRUZXh0eyJTdGF0dXMifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRGF0YXsiU3RhdHVzT3B0aW9uIn0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSIgdHlwZT0ic3VibWl0IiBpZD0iU3VibWl0IiB2YWx1ZT0iJFRleHR7IlN1Ym1pdCJ9Ij4kVGV4dHsiU3VibWl0In08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJvciJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1TZXR0aW5nIj4kVGV4dHsiQ2FuY2VsIn08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3VXBkYXRlVGFzayAtLT4KCjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3UmVzdWx0VXNlciAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+PGEgaHJlZj0iIyIgdGl0bGU9IiRUZXh0eyJTaG93IG9yIGhpZGUgdGhlIGNvbnRlbnQifSI+PHNwYW4+PC9zcGFuPjwvYT48L2Rpdj4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiVXNlciBMaXN0In08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSIgaWQ9IlVzZXJzIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiVXNlciJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiQ29tbWVudCJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiQ2FsZW5kYXIifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iRmlsdGVyTWVzc2FnZSBIaWRkZW4iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRUZXh0eyJObyBtYXRjaGVzIGZvdW5kLiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpOb1VzZXJEYXRhRm91bmRNc2cgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsiTm8gZGF0YSBmb3VuZC4ifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6Tm9Vc2VyRGF0YUZvdW5kTXNnIC0tPgoKPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdSZXN1bHRVc2VyUm93IC0tPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgY2xhc3M9IkFzQmxvY2siIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn07U3ViYWN0aW9uPUVkaXRVc2VyO1VzZXJJRD0kTFFEYXRheyJVc2VySUQifSI+JFFEYXRheyJVc2VyIn08L2E+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4kRGF0YXsiQ29tbWVudCJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4kVGV4dHsiJERhdGF7IkNhbGVuZGFyIn0ifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3UmVzdWx0VXNlclJvdyAtLT4KICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3UmVzdWx0VXNlciAtLT4KCjwhLS0gZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlIC0tPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgIENvcmUuVUkuVGFibGUuSW5pdFRhYmxlRmlsdGVyKCQoJyNGaWx0ZXJVc2VycycpLCAkKCcjVXNlcnMnKSk7CiAgICBDb3JlLlVJLkluaXRXaWRnZXRBY3Rpb25Ub2dnbGUoKTsKLy9dXT48L3NjcmlwdD4KPCEtLSBkdGw6anNfb25fZG9jdW1lbnRfY29tcGxldGUgLS0+Cgo8IS0tIGR0bDpibG9jazpPdmVydmlld1VwZGF0ZVVzZXIgLS0+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KPCEtLSBkdGw6YmxvY2s6SGVhZGVyQWRkVXNlciAtLT4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiTmV3IFVzZXIgU2V0dGluZ3MifTogJFFEYXRheyJVc2VyRmlyc3RuYW1lIn0gJFFEYXRheyJVc2VyTGFzdG5hbWUifSAoJFFEYXRheyJVc2VyTG9naW4ifSk8L2gyPgo8IS0tIGR0bDpibG9jazpIZWFkZXJBZGRVc2VyIC0tPgo8IS0tIGR0bDpibG9jazpIZWFkZXJFZGl0VXNlciAtLT4KICAgICAgICAgICAgICAgIDxoMj4kVGV4dHsiRWRpdCBVc2VyIFNldHRpbmdzIn08L2gyPgo8IS0tIGR0bDpibG9jazpIZWFkZXJFZGl0VXNlciAtLT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0IiBuYW1lPSJVc2VyVXBkYXRlIiBjbGFzcz0iVmFsaWRhdGUgUHJldmVudE11bHRpcGxlU3VibWl0cyI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iJFFEYXRheyJTdWJhY3Rpb24ifSIgLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJVc2VySUQiIHZhbHVlPSIkUURhdGF7IlVzZXJJRCJ9IiAvPgoKICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Ik5hbWUiPiRUZXh0eyJOYW1lIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iVmFsdWUiPiRRRGF0YXsiVXNlckZpcnN0bmFtZSJ9ICRRRGF0YXsiVXNlckxhc3RuYW1lIn08L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iTmFtZSI+JFRleHR7IlVzZXJuYW1lIn06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iVmFsdWUiPiRRRGF0YXsiVXNlckxvZ2luIn08L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iRGVzY3JpcHRpb24iPiRUZXh0eyJDb21tZW50cyJ9OjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSByb3dzPSIxIiBuYW1lPSJEZXNjcmlwdGlvbiIgaWQ9IkRlc2NyaXB0aW9uIiBjb2xzPSI0MCI+JERhdGF7IkRlc2NyaXB0aW9uIn08L3RleHRhcmVhPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJTaG93T3ZlcnRpbWUiIGlkPSJTaG93T3ZlcnRpbWUiIHZhbHVlPSIxIiAkRGF0YXsiU2hvd092ZXJ0aW1lIn0gLz4kVGV4dHsiU2hvdyBPdmVydGltZSJ9CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9IkNyZWF0ZVByb2plY3QiIGlkPSJDcmVhdGVQcm9qZWN0IiB2YWx1ZT0iMSIgJERhdGF7IkNyZWF0ZVByb2plY3QifSAvPiRUZXh0eyJBbGxvdyBwcm9qZWN0IGNyZWF0aW9uIn0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkNhbGVuZGFyIj4kVGV4dHsiQ2FsZW5kYXIifTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRGF0YXsiQ2FsZW5kYXJPcHRpb24ifQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CgogICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIE5vSG92ZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+ICRUZXh0eyJQZXJpb2QgQmVnaW4ifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjxzcGFuIGNsYXNzPSJNYXJrZXIiPio8L3NwYW4+ICRUZXh0eyJQZXJpb2QgRW5kIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48c3BhbiBjbGFzcz0iTWFya2VyIj4qPC9zcGFuPiAkVGV4dHsiRGF5cyBvZiBWYWNhdGlvbiJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IkhvdXJzIHBlciBXZWVrIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4kVGV4dHsiQXV0aG9yaXplZCBPdmVydGltZSJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IlN0YXR1cyJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KPCEtLSBkdGw6YmxvY2s6UGVyaW9kT3ZlcnZpZXdSb3cgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IkRhdGVTdGFydC0kUURhdGF7IlBlcmlvZCJ9IiBuYW1lPSJEYXRlU3RhcnRbJFFEYXRheyJQZXJpb2QifV0iIHZhbHVlPSIkUURhdGF7IkRhdGVTdGFydCJ9IiBjbGFzcz0iRGF0ZXBpY2tlckVsZW1lbnQgVmFsaWRhdGVfUmVxdWlyZWQgJFFEYXRheyJEYXRlU3RhcnRJbnZhbGlkIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkRhdGVTdGFydC0kUURhdGF7IlBlcmlvZCJ9RXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifSAkVGV4dHsiUGxlYXNlIGluc2VydCBhIHZhbGlkIGRhdGUuIn08L3A+PC9kaXY+CjwhLS0gZHRsOmJsb2NrOkRhdGVTdGFydEludmFsaWQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkRhdGVTdGFydC0kUURhdGF7IlBlcmlvZCJ9U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD4kVGV4dHsiSW52YWxpZCBkYXRlISJ9PC9wPjwvZGl2Pgo8IS0tIGR0bDpibG9jazpEYXRlU3RhcnRJbnZhbGlkIC0tPgo8IS0tIGR0bDpibG9jazpEYXRlU3RhcnRNaXNzaW5nVmFsdWUgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkRhdGVTdGFydC0kUURhdGF7IlBlcmlvZCJ9U2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD4kVGV4dHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4ifTwvcD48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6RGF0ZVN0YXJ0TWlzc2luZ1ZhbHVlIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgaWQ9IkRhdGVFbmQtJFFEYXRheyJQZXJpb2QifSIgbmFtZT0iRGF0ZUVuZFskUURhdGF7IlBlcmlvZCJ9XSIgdmFsdWU9IiRRRGF0YXsiRGF0ZUVuZCJ9IiBjbGFzcz0iRGF0ZXBpY2tlckVsZW1lbnQgVmFsaWRhdGVfUmVxdWlyZWQgJFFEYXRheyJEYXRlRW5kSW52YWxpZCJ9IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJEYXRlRW5kLSRRRGF0YXsiUGVyaW9kIn1FcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPiRUZXh0eyJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiJ9ICRUZXh0eyJQbGVhc2UgaW5zZXJ0IGEgdmFsaWQgZGF0ZS4ifTwvcD48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6RGF0ZUVuZEludmFsaWQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkRhdGVFbmQtJFFEYXRheyJQZXJpb2QifVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+JFRleHR7IkludmFsaWQgZGF0ZSEifTwvcD48L2Rpdj4KPCEtLSBkdGw6YmxvY2s6RGF0ZUVuZEludmFsaWQgLS0+CjwhLS0gZHRsOmJsb2NrOkRhdGVFbmRNaXNzaW5nVmFsdWUgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkRhdGVFbmQtJFFEYXRheyJQZXJpb2QifVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+PC9kaXY+CjwhLS0gZHRsOmJsb2NrOkRhdGVFbmRNaXNzaW5nVmFsdWUgLS0+CjwhLS0gZHRsOmJsb2NrOkRhdGVFbmRCZWZvcmVEYXRlU3RhcnQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9IkRhdGVFbmQtJFFEYXRheyJQZXJpb2QifVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+JFRleHR7IlBlcmlvZCBlbmQgbXVzdCBiZSBhZnRlciBwZXJpb2QgYmVnaW4uIn08L3A+PC9kaXY+CjwhLS0gZHRsOmJsb2NrOkRhdGVFbmRCZWZvcmVEYXRlU3RhcnQgLS0+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iTGVhdmVEYXlzLSRRRGF0YXsiUGVyaW9kIn0iIG5hbWU9IkxlYXZlRGF5c1skUURhdGF7IlBlcmlvZCJ9XSIgdmFsdWU9IiRRRGF0YXsiTGVhdmVEYXlzIn0iIGNsYXNzPSJWYWxpZGF0ZV9SZXF1aXJlZCAkUURhdGF7IkxlYXZlRGF5c0ludmFsaWQifSIgLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTGVhdmVEYXlzLSRRRGF0YXsiUGVyaW9kIn1FcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPiRUZXh0eyJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiJ9PC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJMZWF2ZURheXMtJFFEYXRheyJQZXJpb2QifVNlcnZlckVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+JFRleHR7IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIn08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iV2Vla2x5SG91cnMtJFFEYXRheyJQZXJpb2QifSIgbmFtZT0iV2Vla2x5SG91cnNbJFFEYXRheyJQZXJpb2QifV0iIHZhbHVlPSIkUURhdGF7IldlZWtseUhvdXJzIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iT3ZlcnRpbWUtJFFEYXRheyJQZXJpb2QifSIgbmFtZT0iT3ZlcnRpbWVbJFFEYXRheyJQZXJpb2QifV0iIHZhbHVlPSIkUURhdGF7Ik92ZXJ0aW1lIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICREYXRheyJQZXJpb2RTdGF0dXNPcHRpb24ifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpQZXJpb2RPdmVydmlld1JvdyAtLT4KCjwhLS0gZHRsOmJsb2NrOlBlcmlvZE92ZXJ2aWV3Um93Tm9EYXRhIC0tPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFRleHR7Ik5vIHRpbWUgcGVyaW9kcyBmb3VuZC4ifQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpQZXJpb2RPdmVydmlld1Jvd05vRGF0YSAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJXMTAwcGMgUmlnaHQgU3BhY2luZ1RvcFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIHRpdGxlPSIkVGV4dHsiQWRkIHRpbWUgcGVyaW9kIn0iIHZhbHVlPSIkVGV4dHsiQWRkIHRpbWUgcGVyaW9kIn0iIG5hbWU9IkFkZFBlcmlvZCIgY2xhc3M9IkNhbGxGb3JBY3Rpb24gUGx1cyI+PHNwYW4+JFRleHR7IkFkZCB0aW1lIHBlcmlvZCJ9PC9zcGFuPjwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDZW50ZXIgU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9IlByaW1hcnkiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJTdWJtaXQifSIgbmFtZT0iU3VibWl0VXNlckRhdGEiPiRUZXh0eyJTdWJtaXQifTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICAkVGV4dHsib3IifQogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1TZXR0aW5nIj4kVGV4dHsiQ2FuY2VsIn08L2E+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2Pgo8IS0tZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlLS0+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4vLzwhW0NEQVRBWwogICAgVGltZUFjY291bnRpbmcuQWdlbnQuRGF0ZXBpY2tlci5Jbml0KCQoJy5EYXRlcGlja2VyRWxlbWVudCcpLCB7CiAgICAgICAgRGF0ZUluRnV0dXJlOiBmYWxzZSwKICAgICAgICBXZWVrRGF5U3RhcnQ6IDEKICAgIH0pOwovL11dPjwvc2NyaXB0Pgo8IS0tZHRsOmpzX29uX2RvY3VtZW50X2NvbXBsZXRlLS0+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3VXBkYXRlVXNlciAtLT4KICAgIDwvZGl2Pgo8L2Rpdj4KCjwhLS0gZHRsOmJsb2NrOlNldHRpbmcgLS0+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIExheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyRmlyc3QiPgogICAgPGgxIGNsYXNzPSJIZWFkZXIiPiRUZXh0eyJWaWV3IFRpbWUgUmVjb3JkIn0KPCEtLSBkdGw6YmxvY2s6VXNlciAtLT4KICAgICAgICAtICRUZXh0eyJWaWV3IG9mICJ9ICRRRGF0YXsiVXNlciJ9CjwhLS0gZHRsOmJsb2NrOlVzZXIgLS0+CiAgICA8L2gxPgoKICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IkFjdGlvbnMifTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQWN0aW9uTGlzdCI+CiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9O1N1YmFjdGlvbj1PdmVydmlldztZZWFyPSRMUURhdGF7IlllYXIifTtNb250aD0kTFFEYXRheyJNb250aCJ9IiBjbGFzcz0iQ2FsbEZvckFjdGlvbiI+PHNwYW4+JFRleHR7IkdvIHRvIG92ZXJ2aWV3In08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+CiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPiRUZXh0eyJEYXRlIE5hdmlnYXRpb24ifTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Ik1vbnRoU2VsZWN0aW9uIj4KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQXJyb3cgTGVmdCIgdGl0bGU9IiRUZXh0eyJQcmV2aW91cyBkYXkifSIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249VmlldztZZWFyPSRMUURhdGF7IlllYXJCYWNrIn07TW9udGg9JExRRGF0YXsiTW9udGhCYWNrIn07RGF5PSRMUURhdGF7IkRheUJhY2sifTtVc2VySUQ9JExRRGF0YXsiVXNlcklEIn0iPjwvYT4KICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQXJyb3cgUmlnaHQiIHRpdGxlPSIkVGV4dHsiTmV4dCBkYXkifSIgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifTtTdWJhY3Rpb249VmlldztZZWFyPSRMUURhdGF7IlllYXJOZXh0In07TW9udGg9JExRRGF0YXsiTW9udGhOZXh0In07RGF5PSRMUURhdGF7IkRheU5leHQifTtVc2VySUQ9JExRRGF0YXsiVXNlcklEIn0iPjwvYT4KICAgICAgICAgICAgICAgICAgICAkUURhdGF7IlllYXIifS0kUURhdGF7Ik1vbnRoIn0tJFFEYXRheyJEYXkifQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG5hbWU9IkRhdGVTZWxlY3Rpb24iIGNsYXNzPSJWYWxpZGF0ZSI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iIC8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iVmlldyIgLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJVc2VySUQiICAgIHZhbHVlPSIkUURhdGF7IlVzZXJJRCJ9IiAvPgogICAgICAgICAgICAgICAgICAgICREYXRheyJEYXRlU2VsZWN0aW9uIn0KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImJ1dHRvbiIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJFRleHR7IlN1Ym1pdCJ9IiAvPgogICAgICAgICAgICAgICAgPC9mb3JtPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+JFRleHR7IkRhdGUifTogJFRleHR7IiREYXRheyJXZWVrZGF5X3RvX1RleHQifSJ9ICRRRGF0YXsiRGF0ZSJ9PC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUgRGF0YVRhYmxlTm9IaWdobGlnaHQiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJQcm9qZWN0In08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJUYXNrIn08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJSZW1hcmsifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IlN0YXJ0In08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPiRUZXh0eyJFbmQifTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+JFRleHR7IlBlcmlvZCJ9PC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KPCEtLSBkdGw6YmxvY2s6VW5pdCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiRRRGF0YXsiUHJvamVjdCJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4kUURhdGF7IkFjdGlvbiJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4kUURhdGF7IlJlbWFyayJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iUmlnaHQiPiRRRGF0YXsiU3RhcnRUaW1lIn08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJSaWdodCI+JFFEYXRheyJFbmRUaW1lIn08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJSaWdodCI+JFFEYXRheyJQZXJpb2QifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOlVuaXQgLS0+Cgo8IS0tIGR0bDpibG9jazpUb3RhbCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjQiPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PHN0cm9uZz4kVGV4dHsiVG90YWwifTo8L3N0cm9uZz48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJSaWdodCI+PHN0cm9uZz4kUURhdGF7IlRvdGFsIn08L3N0cm9uZz48L3RkPgoKICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6VG90YWwgLS0+Cgo8IS0tIGR0bDpibG9jazpOb0RhdGFGb3VuZCAtLT4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjYiPiRUZXh0eyJObyBkYXRhIGZvdW5kIGZvciB0aGlzIGRheS4ifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk5vRGF0YUZvdW5kIC0tPgoKICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgPC90YWJsZT4KCjwhLS0gZHRsOmJsb2NrOk90aGVyVGltZXMgLS0+CiAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgdmFsdWU9Ii0yIiBpZD0iTGVhdmVEYXkiIG5hbWU9IkxlYXZlRGF5IiB0aXRsZT0iJFRleHR7Ik9uIHZhY2F0aW9uIn0iICREYXRheyJMZWF2ZURheSJ9IGRpc2FibGVkIC8+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iTGVhdmVEYXkiPiRUZXh0eyJPbiB2YWNhdGlvbiJ9PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIHZhbHVlPSItMSIgaWQ9IlNpY2siIG5hbWU9IlNpY2siIHRpdGxlPSIkVGV4dHsiT24gc2ljayBsZWF2ZSJ9IiAkRGF0YXsiU2ljayJ9IGRpc2FibGVkIC8+CiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iU2ljayI+JFRleHR7Ik9uIHNpY2sgbGVhdmUifTwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiB2YWx1ZT0iLTMiIGlkPSJPdmVydGltZSIgbmFtZT0iT3ZlcnRpbWUiIHRpdGxlPSIkVGV4dHsiT24gb3ZlcnRpbWUgbGVhdmUifSIgJERhdGF7Ik92ZXJ0aW1lIn0gZGlzYWJsZWQgLz4KICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJPdmVydGltZSI+JFRleHR7Ik9uIG92ZXJ0aW1lIGxlYXZlIn08L2xhYmVsPgogICAgICAgICAgICAgICAgPC9kaXY+CjwhLS0gZHRsOmJsb2NrOk90aGVyVGltZXMgLS0+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8IS0tIGR0bDpibG9jazpWYWNhdGlvbiAtLT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IlNwYWNpbmdUb3BTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgPHA+CiAgICAgICAgICAgICAgICAgICAgICAgICRRRGF0YXsiVmFjYXRpb24ifQogICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgIDwvZGl2Pgo8IS0tIGR0bDpibG9jazpWYWNhdGlvbiAtLT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KPC9kaXY+Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6Ok5vdGlmaWNhdGlvblRpbWVBY2NvdW50aW5nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpUaW1lQWNjb3VudGluZzsKdXNlIEtlcm5lbDo6U3lzdGVtOjpUaW1lOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgZm9yIChxdyhDb25maWdPYmplY3QgTG9nT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCBVc2VySUQpKSB7CiAgICAgICAgJFNlbGYtPnskX30gPSAkUGFyYW17JF99IHx8IGRpZSAiR290IG5vICRfISI7CiAgICB9CgogICAgJFNlbGYtPntUaW1lT2JqZWN0fSAgICAgICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6VGltZS0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpUaW1lQWNjb3VudGluZy0+bmV3KCVQYXJhbSk7CiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAoICRTZWMsICRNaW4sICRIb3VyLCAkRGF5LCAkTW9udGgsICRZZWFyICkgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgU3lzdGVtVGltZSA9PiAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lKCksCiAgICApOwogICAgbXkgJVVzZXIgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+VXNlckN1cnJlbnRQZXJpb2RHZXQoCiAgICAgICAgWWVhciAgPT4gJFllYXIsCiAgICAgICAgTW9udGggPT4gJE1vbnRoLAogICAgICAgIERheSAgID0+ICREYXksCiAgICApOwogICAgaWYgKCAkVXNlcnsgJFNlbGYtPntVc2VySUR9IH0gKSB7CiAgICAgICAgbXkgJUluY29tcGxldGVXb3JraW5nRGF5cyA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Xb3JraW5nVW5pdHNDb21wbGV0bmVzc0NoZWNrKCk7CgogICAgICAgICMgcmVkaXJlY3QgaWYgaW5jb21wbGV0ZSB3b3JraW5nIGRheSBhcmUgb3V0IG9mIHJhbmdlCiAgICAgICAgaWYgKCAkSW5jb21wbGV0ZVdvcmtpbmdEYXlze1dhcm5pbmd9ICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob3RpZnkoCiAgICAgICAgICAgICAgICBJbmZvICAgICA9PiAnUGxlYXNlIGluc2VydCB5b3VyIHdvcmtpbmcgaG91cnMhJywKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdFcnJvcicKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gJyc7Cn0KCjE7Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OlRvb2xCYXJJbmNvbXBsZXRlV29ya2luZ0RheXM7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlRpbWVBY2NvdW50aW5nOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgZm9yICgKICAgICAgICBxdyhDb25maWdPYmplY3QgTG9nT2JqZWN0IERCT2JqZWN0IFRpY2tldE9iamVjdCBVc2VyT2JqZWN0IEdyb3VwT2JqZWN0IExheW91dE9iamVjdCBVc2VySUQgVGltZU9iamVjdCkKICAgICAgICApCiAgICB7CiAgICAgICAgJFNlbGYtPnskX30gPSAkUGFyYW17JF99IHx8IGRpZSAiR290IG5vICRfISI7CiAgICB9CgogICAgIyBjcmVhdGUgbmVlZGVkIG9iamVjdHMKICAgICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OlRpbWVBY2NvdW50aW5nLT5uZXcoJVBhcmFtKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGRlZmluZSBhY3Rpb24sIGdyb3VwLCBsYWJlbCwgaW1hZ2UgYW5kIHByaW8KICAgIG15ICRBY3Rpb24gICAgPSAnQWdlbnRUaW1lQWNjb3VudGluZyc7CiAgICBteSAkU3ViYWN0aW9uID0gJ0VkaXQnOwogICAgbXkgJEdyb3VwICAgICA9ICd0aW1lX2FjY291bnRpbmcnOwoKICAgICMgZG8gbm90IHNob3cgaWNvbiBpZiBmcm9udGVuZCBtb2R1bGUgaXMgbm90IHJlZ2lzdGVyZWQKICAgIHJldHVybiBpZiAhJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0Zyb250ZW5kOjpNb2R1bGUnKS0+eyRBY3Rpb259OwoKICAgICMgZ2V0IHRoZSBncm91cCBpZAogICAgbXkgJEdyb3VwSUQgPSAkU2VsZi0+e0dyb3VwT2JqZWN0fS0+R3JvdXBMb29rdXAoIEdyb3VwID0+ICRHcm91cCApOwoKICAgICMgZGVueSBhY2Nlc3MsIHdoZW4gdGhlIGdyb3VwIGlzIG5vdCBmb3VuZAogICAgcmV0dXJuIGlmICEkR3JvdXBJRDsKCiAgICAjIGdldCB1c2VyIGdyb3Vwcywgd2hlcmUgdGhlIHVzZXIgaGFzIHRoZSBhcHByb3ByaWF0ZSBwcml2aWxlZ2UKICAgIG15ICVHcm91cHMgPSAkU2VsZi0+e0dyb3VwT2JqZWN0fS0+R3JvdXBNZW1iZXJMaXN0KAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgVHlwZSAgID0+ICdydycsCiAgICAgICAgUmVzdWx0ID0+ICdIQVNIJywKICAgICk7CgogICAgIyBkZW55IGFjY2VzcyBpZiB0aGUgYWdlbnQgZG9lc24ndCBoYXZlIHRoZSBhcHByb3ByaWF0ZSB0eXBlIGluIHRoZSBhcHByb3ByaWF0ZSBncm91cAogICAgcmV0dXJuIGlmICEkR3JvdXBzeyRHcm91cElEfTsKCiAgICBteSAoICRTZWMsICRNaW4sICRIb3VyLCAkRGF5LCAkTW9udGgsICRZZWFyICkgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgU3lzdGVtVGltZSA9PiAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lKCksCiAgICApOwoKICAgIG15ICVVc2VyQ3VycmVudFBlcmlvZCA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Vc2VyQ3VycmVudFBlcmlvZEdldCgKICAgICAgICBZZWFyICA9PiAkWWVhciwKICAgICAgICBNb250aCA9PiAkTW9udGgsCiAgICAgICAgRGF5ICAgPT4gJERheSwKICAgICk7CgogICAgIyBkZW55IGFjY2VzcywgaWYgdXNlciBoYXMgbm8gdmFsaWQgcGVyaW9kCiAgICByZXR1cm4gaWYgISRVc2VyQ3VycmVudFBlcmlvZHsgJFNlbGYtPntVc2VySUR9IH07CgogICAgIyBnZXQgdGhlIG51bWJlciBvZiBpbmNvbXBsZXRlIHdvcmtpbmcgZGF5cwogICAgbXkgJENvdW50ICAgICAgICAgICAgICAgICA9IDA7CiAgICBteSAlSW5jb21wbGV0ZVdvcmtpbmdEYXlzID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPldvcmtpbmdVbml0c0NvbXBsZXRuZXNzQ2hlY2soKTsKCiAgICBZRUFSSUQ6CiAgICBmb3IgbXkgJFllYXJJRCAoIHNvcnQga2V5cyAleyAkSW5jb21wbGV0ZVdvcmtpbmdEYXlze0luY29tcGxldGV9IH0gKSB7CgogICAgICAgIG5leHQgWUVBUklEIGlmICEkWWVhcklEOwogICAgICAgIG5leHQgWUVBUklEIGlmICEkSW5jb21wbGV0ZVdvcmtpbmdEYXlze0luY29tcGxldGV9eyRZZWFySUR9OwogICAgICAgIG5leHQgWUVBUklEIGlmIHJlZiAkSW5jb21wbGV0ZVdvcmtpbmdEYXlze0luY29tcGxldGV9eyRZZWFySUR9IG5lICdIQVNIJzsKCiAgICAgICAgIyBleHRyYWN0IHllYXIKICAgICAgICBteSAlWWVhciA9ICV7ICRJbmNvbXBsZXRlV29ya2luZ0RheXN7SW5jb21wbGV0ZX17JFllYXJJRH0gfTsKCiAgICAgICAgTU9OVEg6CiAgICAgICAgZm9yIG15ICRNb250aElEICggc29ydCBrZXlzICVZZWFyICkgewoKICAgICAgICAgICAgbmV4dCBNT05USCBpZiAhJE1vbnRoSUQ7CiAgICAgICAgICAgIG5leHQgTU9OVEggaWYgISRZZWFyeyRNb250aElEfTsKICAgICAgICAgICAgbmV4dCBNT05USCBpZiByZWYgJFllYXJ7JE1vbnRoSUR9IG5lICdIQVNIJzsKCiAgICAgICAgICAgICMgZXh0cmFjdCBtb250aAogICAgICAgICAgICBteSAlTW9udGggPSAleyAkWWVhcnskTW9udGhJRH0gfTsKCiAgICAgICAgICAgICRDb3VudCArPSBzY2FsYXIga2V5cyAlTW9udGg7CiAgICAgICAgfQogICAgfQoKICAgICMgcmVtb3ZlIGN1cnJlbnQgZGF5IGJlY2F1c2UgaXQgbWFrZXMgbm8gc2Vuc2UgdG8gc2hvdyB0aGUgY3VycmVudCBkYXkgYXMgaW5jb21wbGV0ZWQKICAgIGlmICggJENvdW50ID4gMCApIHsKICAgICAgICAkQ291bnQtLTsKICAgIH0KCiAgICAjIGdldCBUb29sQmFyIG9iamVjdCBwYXJhbWV0ZXJzCiAgICBteSAkQ2xhc3MgPSAkUGFyYW17Q29uZmlnfS0+e0Nzc0NsYXNzfTsKICAgIG15ICRUZXh0ICA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdJbmNvbXBsZXRlIHdvcmtpbmcgZGF5cycpOwogICAgbXkgJFVSTCAgID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57QmFzZWxpbmt9OwogICAgbXkgJEljb24gID0gJFBhcmFte0NvbmZpZ30tPntJY29ufTsKCiAgICByZXR1cm4gKCkgaWYgISRDb3VudDsKCiAgICBteSAlUmV0dXJuID0gKAogICAgICAgIDEwMDA4MTAgPT4gewogICAgICAgICAgICBCbG9jayAgICAgICA9PiAnVG9vbEJhckl0ZW0nLAogICAgICAgICAgICBEZXNjcmlwdGlvbiA9PiAkVGV4dCwKICAgICAgICAgICAgQ291bnQgICAgICAgPT4gJENvdW50LAogICAgICAgICAgICBDbGFzcyAgICAgICA9PiAkQ2xhc3MsCiAgICAgICAgICAgIEljb24gICAgICAgID0+ICRJY29uLAogICAgICAgICAgICBMaW5rICAgICAgICA9PiAkVVJMIC4gJ0FjdGlvbj0nIC4gJEFjdGlvbiAuICc7U3ViYWN0aW9uPScgLiAkU3ViYWN0aW9uLAogICAgICAgICAgICBBY2Nlc3NLZXkgICA9PiAnJywKICAgICAgICAgICAgfQogICAgKTsKCiAgICByZXR1cm4gJVJldHVybjsKfQoKMTsK
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OlRpbWVBY2NvdW50aW5nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIHZhcnMgcXcoQElTQSk7Cgp1c2UgRGF0ZTo6UGNhbGMgcXcoVG9kYXkgRGF5c19pbl9Nb250aCBEYXlfb2ZfV2VlayBjaGVja19kYXRlKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6VGltZUFjY291bnRpbmcgLSB0aW1lIGFjY291bnRpbmcgbGliCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCB0aW1lIGFjY291bnRpbmcgZnVuY3Rpb25zCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpDb25maWc7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkVuY29kZTsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6TG9nOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpNYWluOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpEQjsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6VGltZTsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6VXNlcjsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6VGltZUFjY291bnRpbmc7CgogICAgbXkgJENvbmZpZ09iamVjdCA9IEtlcm5lbDo6Q29uZmlnLT5uZXcoKTsKICAgIG15ICRFbmNvZGVPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6RW5jb2RlLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICApOwogICAgbXkgJExvZ09iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpMb2ctPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBFbmNvZGVPYmplY3QgPT4gJEVuY29kZU9iamVjdCwKICAgICk7CiAgICBteSAkTWFpbk9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpNYWluLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICApOwogICAgbXkgJERCT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkRCLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgRW5jb2RlT2JqZWN0ID0+ICRFbmNvZGVPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICAgICAgTWFpbk9iamVjdCAgID0+ICRNYWluT2JqZWN0LAogICAgKTsKICAgIG15ICRUaW1lT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OlRpbWUtPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICk7CiAgICBteSAkVXNlck9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpVc2VyLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICAgICAgTWFpbk9iamVjdCAgID0+ICRNYWluT2JqZWN0LAogICAgICAgIFRpbWVPYmplY3QgICA9PiAkVGltZU9iamVjdCwKICAgICAgICBEQk9iamVjdCAgICAgPT4gJERCT2JqZWN0LAogICAgICAgIEVuY29kZU9iamVjdCA9PiAkRW5jb2RlT2JqZWN0LAogICAgKTsKICAgIG15ICRUaW1lQWNjb3VudGluZ09iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpUaW1lQWNjb3VudGluZy0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIExvZ09iamVjdCAgICA9PiAkTG9nT2JqZWN0LAogICAgICAgIERCT2JqZWN0ICAgICA9PiAkREJPYmplY3QsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEyMywKICAgICAgICBNYWluT2JqZWN0ICAgPT4gJE1haW5PYmplY3QsCiAgICAgICAgVGltZU9iamVjdCAgID0+ICRUaW1lT2JqZWN0LAogICAgICAgIFVzZXJPYmplY3QgICA9PiAkVXNlck9iamVjdCwKICAgICk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0IChxdyhEQk9iamVjdCBDb25maWdPYmplY3QgTG9nT2JqZWN0IFVzZXJJRCBUaW1lT2JqZWN0IFVzZXJPYmplY3QgTWFpbk9iamVjdCkpIHsKICAgICAgICAkU2VsZi0+eyRPYmplY3R9ID0gJFBhcmFteyRPYmplY3R9IHx8IGRpZSAiR290IG5vICRPYmplY3QhIjsKICAgIH0KCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIFVzZXJDdXJyZW50UGVyaW9kR2V0KCkKCnJldHVybnMgYSBoYXNoIHdpdGggdGhlIGN1cnJlbnQgcGVyaW9kIGRhdGEgb2YgdGhlIHNwZWNpZmllZCB1c2VyCgogICAgbXkgJVVzZXJEYXRhID0gJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Vc2VyQ3VycmVudFBlcmlvZEdldCgKICAgICAgICBZZWFyICA9PiAnMjAwNScsCiAgICAgICAgTW9udGggPT4gJzEyJywKICAgICAgICBEYXkgICA9PiAnMjQnLAogICAgKTsKClRoZSByZXR1cm5lZCBoYXNoIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZWxlbWVudHM6CgogICAgJVVzZXJEYXRhID0gKAogICAgICAgIDEgPT4gewogICAgICAgICAgICBVc2VySUQgICAgICA9PiAxLAogICAgICAgICAgICBQZXJpb2QgICAgICA9PiAxMjMsCiAgICAgICAgICAgIERhdGVTdGFydCAgID0+ICcyMDA1LTEyLTI0JywKICAgICAgICAgICAgRGF0ZUVuZCAgICAgPT4gJzIwMDUtMTItMjQnLAogICAgICAgICAgICBXZWVrbHlIb3VycyA9PiA0MC40LAogICAgICAgICAgICBMZWF2ZURheXMgICA9PiAxMiwKICAgICAgICAgICAgT3ZlclRpbWUgICAgPT4gMzQsCiAgICAgICAgfSwKICAgICk7Cgo9Y3V0CgpzdWIgVXNlckN1cnJlbnRQZXJpb2RHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBwYXJhbXMKICAgIGZvciBteSAkTmVlZGVkUGFyYW0gKHF3KFllYXIgTW9udGggRGF5KSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkUGFyYW19ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVXNlckN1cnJlbnRQZXJpb2RHZXQ6IE5lZWQgJE5lZWRlZFBhcmFtISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBidWlsZCBkYXRlIHN0cmluZyBmb3IgZ2l2ZW4gcGFyYW1zCiAgICBteSAkRGF0ZSA9IHNwcmludGYoICIlMDRkLSUwMmQtJTAyZCIsICRQYXJhbXtZZWFyfSwgJFBhcmFte01vbnRofSwgJFBhcmFte0RheX0gKSAuICcgMDA6MDA6MDAnOwoKICAgICMgY2hlY2sgY2FjaGUKICAgIGlmICggJFNlbGYtPnsnQ2FjaGU6OlVzZXJDdXJyZW50UGVyaW9kR2V0J317JERhdGV9ICkgewogICAgICAgIHJldHVybiAleyAkU2VsZi0+eydDYWNoZTo6VXNlckN1cnJlbnRQZXJpb2RHZXQnfXskRGF0ZX0gfTsKICAgIH0KCiAgICAjIGRiIHNlbGVjdAogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCB1c2VyX2lkLCBwcmVmZXJlbmNlX3BlcmlvZCwgZGF0ZV9zdGFydCwgZGF0ZV9lbmQsICcKICAgICAgICAgICAgLiAnd2Vla2x5X2hvdXJzLCBsZWF2ZV9kYXlzLCBvdmVydGltZSAnCiAgICAgICAgICAgIC4gJ0ZST00gdGltZV9hY2NvdW50aW5nX3VzZXJfcGVyaW9kICcKICAgICAgICAgICAgLiAnV0hFUkUgZGF0ZV9zdGFydCA8PSA/IEFORCBkYXRlX2VuZCAgPj0gPyAnCiAgICAgICAgICAgIC4gJ0FORCBzdGF0dXMgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCREYXRlLCBcJERhdGUsIFwxLCBdLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSBkYXRhCiAgICBteSAlRGF0YTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgbXkgJFVzZXJSZWYgPSB7CiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRSb3dbMF0sCiAgICAgICAgICAgIFBlcmlvZCAgICAgID0+ICRSb3dbMV0sCiAgICAgICAgICAgIERhdGVTdGFydCAgID0+IHN1YnN0ciggJFJvd1syXSwgMCwgMTAgKSwKICAgICAgICAgICAgRGF0ZUVuZCAgICAgPT4gc3Vic3RyKCAkUm93WzNdLCAwLCAxMCApLAogICAgICAgICAgICBXZWVrbHlIb3VycyA9PiAkUm93WzRdLAogICAgICAgICAgICBMZWF2ZURheXMgICA9PiAkUm93WzVdLAogICAgICAgICAgICBPdmVydGltZSAgICA9PiAkUm93WzZdLAogICAgICAgIH07CiAgICAgICAgJERhdGF7ICRSb3dbMF0gfSA9ICRVc2VyUmVmOwogICAgfQoKICAgICMgY2hlY2sgZm9yIHZhbGlkIHVzZXIgZGF0YQogICAgcmV0dXJuIGlmICElRGF0YTsKCiAgICAjIHN0b3JlIHVzZXIgZGF0YSBpbiBjYWNoZQogICAgJFNlbGYtPnsnQ2FjaGU6OlVzZXJDdXJyZW50UGVyaW9kR2V0J317JERhdGV9ID0gXCVEYXRhOwoKICAgIHJldHVybiAlRGF0YTsKfQoKPWl0ZW0gVXNlclJlcG9ydGluZygpCgpyZXR1cm5zIGEgaGFzaCB3aXRoIGluZm9ybWF0aW9uIGFib3V0IGxlYXZlZGF5cywgb3ZlcnRpbWVzLAp3b3JraW5naG91cnMgZXRjLiBvZiBhbGwgdXNlcnMKCiAgICBteSAlRGF0YSA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+VXNlclJlcG9ydGluZygKICAgICAgICBZZWFyICA9PiAnMjAwNScsCiAgICAgICAgTW9udGggPT4gJzEyJywKICAgICAgICBEYXkgICA9PiAnMTInLCAgICAgICMgT3B0aW9uYWwKICAgICk7Cgo9Y3V0CgpzdWIgVXNlclJlcG9ydGluZyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHBhcmFtcwogICAgZm9yIG15ICROZWVkZWRQYXJhbSAocXcoWWVhciBNb250aCBEYXkpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWRQYXJhbX0gJiYgJE5lZWRlZFBhcmFtIG5lICdEYXknICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiVXNlclJlcG9ydGluZzogTmVlZCAkTmVlZGVkUGFyYW0hIgogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgdmFsaWQgZGF0ZSB2YWx1ZXMKICAgIHJldHVybiBpZiAhY2hlY2tfZGF0ZSggJFBhcmFte1llYXJ9LCAkUGFyYW17TW9udGh9LCAkUGFyYW17RGF5fSB8fCAxICk7CgogICAgIyBnZXQgZGF5cyBvZiBtb250aCBpZiBub3QgcHJvdmlkZWQKICAgICRQYXJhbXtEYXl9IHx8PSBEYXlzX2luX01vbnRoKCAkUGFyYW17WWVhcn0sICRQYXJhbXtNb250aH0gKTsKCiAgICBteSAlVXNlckN1cnJlbnRQZXJpb2QgPSAkU2VsZi0+VXNlckN1cnJlbnRQZXJpb2RHZXQoJVBhcmFtKTsKICAgIG15ICRZZWFyU3RhcnQgICAgICAgICA9IDE5NzA7CiAgICBteSAkTW9udGhTdGFydCAgICAgICAgPSAxOwogICAgbXkgJERheVN0YXJ0ICAgICAgICAgID0gMTsKICAgIG15ICRZZWFyRW5kICAgICAgICAgICA9ICRQYXJhbXtZZWFyfTsKICAgIG15ICRNb250aEVuZCAgICAgICAgICA9ICRQYXJhbXtNb250aH07CiAgICBteSAkRGF5RW5kICAgICAgICAgICAgPSAkUGFyYW17RGF5fTsKCiAgICBteSAlRGF0YTsKCiAgICBVU0VSSUQ6CiAgICBmb3IgbXkgJFVzZXJJRCAoIHNvcnQga2V5cyAlVXNlckN1cnJlbnRQZXJpb2QgKSB7CgogICAgICAgIGlmICggJFVzZXJDdXJyZW50UGVyaW9keyRVc2VySUR9e0RhdGVTdGFydH0gPX4gbXsgXEEgKFxkezR9KS0oXGR7Mn0pLShcZHsyfSkgfXhtcyApIHsKICAgICAgICAgICAgJFllYXJTdGFydCAgPSAkMTsKICAgICAgICAgICAgJE1vbnRoU3RhcnQgPSAkMjsKICAgICAgICAgICAgJERheVN0YXJ0ICAgPSAkMzsKICAgICAgICB9CgogICAgICAgIGlmICggIWNoZWNrX2RhdGUoICRZZWFyU3RhcnQsICRNb250aFN0YXJ0LCAkRGF5U3RhcnQgKSApIHsKCiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ25vdGljZScsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAnVXNlclJlcG9ydGluZzogSW52YWxpZCBzdGFydCBkYXRlIGZvciB1c2VyICcKICAgICAgICAgICAgICAgICAgICAuICIkVXNlcklEOiAkVXNlckN1cnJlbnRQZXJpb2R7JFVzZXJJRH17RGF0ZVN0YXJ0fSIsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBuZXh0IFVTRVJJRDsKICAgICAgICB9CgogICAgICAgIG15ICVDdXJyZW50VXNlckRhdGEgPSAoCiAgICAgICAgICAgIExlYXZlRGF0ZSAgICAgICAgPT4gMCwKICAgICAgICAgICAgU2ljayAgICAgICAgICAgICA9PiAwLAogICAgICAgICAgICBPdmVydGltZSAgICAgICAgID0+IDAsCiAgICAgICAgICAgIFRhcmdldFN0YXRlICAgICAgPT4gMCwKICAgICAgICAgICAgTGVhdmVEYXlUb3RhbCAgICA9PiAwLAogICAgICAgICAgICBTaWNrVG90YWwgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNpY2tUb3RhbCAgICAgICAgPT4gMCwKICAgICAgICAgICAgVGFyZ2V0U3RhdGVUb3RhbCA9PiAwLAogICAgICAgICk7CgogICAgICAgIG15ICRDYWxlbmRhciA9IHsgJFNlbGYtPlVzZXJHZXQoIFVzZXJJRCA9PiAkVXNlcklEICkgfS0+e0NhbGVuZGFyfTsKCiAgICAgICAgWUVBUjoKICAgICAgICBmb3IgbXkgJFllYXIgKCAkWWVhclN0YXJ0IC4uICRZZWFyRW5kICkgewoKICAgICAgICAgICAgbXkgJE1vbnRoU3RhcnRQb2ludCA9ICRZZWFyID09ICRZZWFyU3RhcnQgPyAkTW9udGhTdGFydCA6IDE7CiAgICAgICAgICAgIG15ICRNb250aEVuZFBvaW50ICAgPSAkWWVhciA9PSAkWWVhckVuZCAgID8gJE1vbnRoRW5kICAgOiAxMjsKCiAgICAgICAgICAgIE1PTlRIOgogICAgICAgICAgICBmb3IgbXkgJE1vbnRoICggJE1vbnRoU3RhcnRQb2ludCAuLiAkTW9udGhFbmRQb2ludCApIHsKCiAgICAgICAgICAgICAgICBteSAkRGF5U3RhcnRQb2ludCA9CiAgICAgICAgICAgICAgICAgICAgJFllYXIgPT0gJFllYXJTdGFydCAmJiAkTW9udGggPT0gJE1vbnRoU3RhcnQKICAgICAgICAgICAgICAgICAgICA/ICREYXlTdGFydAogICAgICAgICAgICAgICAgICAgIDogMQogICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICBteSAkRGF5RW5kUG9pbnQgPQogICAgICAgICAgICAgICAgICAgICRZZWFyID09ICRZZWFyRW5kICYmICRNb250aCA9PSAkTW9udGhFbmQKICAgICAgICAgICAgICAgICAgICA/ICREYXlFbmQKICAgICAgICAgICAgICAgICAgICA6IERheXNfaW5fTW9udGgoICRZZWFyLCAkTW9udGggKQogICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICBEQVk6CiAgICAgICAgICAgICAgICBmb3IgbXkgJERheSAoICREYXlTdGFydFBvaW50IC4uICREYXlFbmRQb2ludCApIHsKCiAgICAgICAgICAgICAgICAgICAgbXkgJVdvcmtpbmdVbml0ID0gJFNlbGYtPldvcmtpbmdVbml0c0dldCgKICAgICAgICAgICAgICAgICAgICAgICAgWWVhciAgID0+ICRZZWFyLAogICAgICAgICAgICAgICAgICAgICAgICBNb250aCAgPT4gJE1vbnRoLAogICAgICAgICAgICAgICAgICAgICAgICBEYXkgICAgPT4gJERheSwKICAgICAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAgICAgbXkgJExlYXZlRGF5ICAgID0gMDsKICAgICAgICAgICAgICAgICAgICBteSAkU2ljayAgICAgICAgPSAwOwogICAgICAgICAgICAgICAgICAgIG15ICRPdmVydGltZSAgICA9IDA7CiAgICAgICAgICAgICAgICAgICAgbXkgJFRhcmdldFN0YXRlID0gMDsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkV29ya2luZ1VuaXR7TGVhdmVEYXl9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkQ3VycmVudFVzZXJEYXRhe0xlYXZlRGF5VG90YWx9Kys7CiAgICAgICAgICAgICAgICAgICAgICAgICRMZWF2ZURheSA9IDE7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2lmICggJFdvcmtpbmdVbml0e1NpY2t9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkQ3VycmVudFVzZXJEYXRhe1NpY2tUb3RhbH0rKzsKICAgICAgICAgICAgICAgICAgICAgICAgJFNpY2sgPSAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRXb3JraW5nVW5pdHtPdmVydGltZX0gKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRDdXJyZW50VXNlckRhdGF7T3ZlcnRpbWVUb3RhbH0rKzsKICAgICAgICAgICAgICAgICAgICAgICAgJE92ZXJ0aW1lID0gMTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRDdXJyZW50VXNlckRhdGF7V29ya2luZ0hvdXJzVG90YWx9ICs9ICRXb3JraW5nVW5pdHtUb3RhbH07CiAgICAgICAgICAgICAgICAgICAgbXkgJFZhY2F0aW9uQ2hlY2sgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5WYWNhdGlvbkNoZWNrKAogICAgICAgICAgICAgICAgICAgICAgICBZZWFyICAgICA9PiAkWWVhciwKICAgICAgICAgICAgICAgICAgICAgICAgTW9udGggICAgPT4gJE1vbnRoLAogICAgICAgICAgICAgICAgICAgICAgICBEYXkgICAgICA9PiAkRGF5LAogICAgICAgICAgICAgICAgICAgICAgICBDYWxlbmRhciA9PiAkQ2FsZW5kYXIgfHwgJycsCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICBteSAkV2Vla2RheSA9IERheV9vZl9XZWVrKCAkWWVhciwgJE1vbnRoLCAkRGF5ICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICAgICAkV2Vla2RheSAhPSA2CiAgICAgICAgICAgICAgICAgICAgICAgICYmICRXZWVrZGF5ICE9IDcKICAgICAgICAgICAgICAgICAgICAgICAgJiYgISRWYWNhdGlvbkNoZWNrCiAgICAgICAgICAgICAgICAgICAgICAgICYmICEkU2ljawogICAgICAgICAgICAgICAgICAgICAgICAmJiAhJExlYXZlRGF5CiAgICAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICRDdXJyZW50VXNlckRhdGF7VGFyZ2V0U3RhdGVUb3RhbH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICs9ICRVc2VyQ3VycmVudFBlcmlvZHskVXNlcklEfXtXZWVrbHlIb3Vyc30gLyA1OwogICAgICAgICAgICAgICAgICAgICAgICAkVGFyZ2V0U3RhdGUgPSAkVXNlckN1cnJlbnRQZXJpb2R7JFVzZXJJRH17V2Vla2x5SG91cnN9IC8gNTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIGlmICggJE1vbnRoID09ICRNb250aEVuZCAmJiAkWWVhciA9PSAkWWVhckVuZCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJEN1cnJlbnRVc2VyRGF0YXtUYXJnZXRTdGF0ZX0gICs9ICRUYXJnZXRTdGF0ZTsKICAgICAgICAgICAgICAgICAgICAgICAgJEN1cnJlbnRVc2VyRGF0YXtXb3JraW5nSG91cnN9ICs9ICRXb3JraW5nVW5pdHtUb3RhbH07CiAgICAgICAgICAgICAgICAgICAgICAgICRDdXJyZW50VXNlckRhdGF7TGVhdmVEYXl9ICAgICArPSAkTGVhdmVEYXk7CiAgICAgICAgICAgICAgICAgICAgICAgICRDdXJyZW50VXNlckRhdGF7U2lja30gICAgICAgICArPSAkU2ljazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRDdXJyZW50VXNlckRhdGF7T3ZlcnRpbWV9ICAgICAgPSAkQ3VycmVudFVzZXJEYXRhe1dvcmtpbmdIb3Vyc30gLSAkQ3VycmVudFVzZXJEYXRhe1RhcmdldFN0YXRlfTsKICAgICAgICAkQ3VycmVudFVzZXJEYXRhe092ZXJ0aW1lVG90YWx9ID0gJFVzZXJDdXJyZW50UGVyaW9keyRVc2VySUR9e092ZXJ0aW1lfQogICAgICAgICAgICArICRDdXJyZW50VXNlckRhdGF7V29ya2luZ0hvdXJzVG90YWx9CiAgICAgICAgICAgIC0gJEN1cnJlbnRVc2VyRGF0YXtUYXJnZXRTdGF0ZVRvdGFsfTsKICAgICAgICAkQ3VycmVudFVzZXJEYXRhe092ZXJ0aW1lVW50aWx9ICAgICA9ICRDdXJyZW50VXNlckRhdGF7T3ZlcnRpbWVUb3RhbH0gLSAkQ3VycmVudFVzZXJEYXRhe092ZXJ0aW1lfTsKICAgICAgICAkQ3VycmVudFVzZXJEYXRhe0xlYXZlRGF5UmVtYWluaW5nfSA9ICRVc2VyQ3VycmVudFBlcmlvZHskVXNlcklEfXtMZWF2ZURheXN9IC0gJEN1cnJlbnRVc2VyRGF0YXtMZWF2ZURheVRvdGFsfTsKCiAgICAgICAgJERhdGF7JFVzZXJJRH0gPSBcJUN1cnJlbnRVc2VyRGF0YTsKICAgIH0KCiAgICByZXR1cm4gJURhdGE7Cn0KCj1pdGVtIFByb2plY3RTZXR0aW5nc0dldCgpCgpyZXR1cm5zIGEgaGFzaCB3aXRoIGFsbCB0aGUgcHJvamVjdHMnIGRhdGEKCiAgICBteSAlUHJvamVjdERhdGEgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPlByb2plY3RTZXR0aW5nc0dldCgKICAgICAgICBTdGF0dXMgPT4gJ3ZhbGlkJyB8fCAnaW52YWxpZCcsIG9wdGlvbmFsIGRlZmF1bHQgdmFsaWQgJiYgaW52YWxpZAogICAgKTsKCj1jdXQKCnN1YiBQcm9qZWN0U2V0dGluZ3NHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkV2hlcmUgPSAnJzsKICAgIGlmICggJFBhcmFte1N0YXR1c30gKSB7CiAgICAgICAgJFdoZXJlID0gJyBXSEVSRSBzdGF0dXMgPSAnOwogICAgICAgICRXaGVyZSAuPSAkUGFyYW17U3RhdHVzfSBlcSAnaW52YWxpZCcgPyAiJzAnIiA6ICInMSciOwogICAgfQoKICAgICMgZGIgc2VsZWN0CiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCBpZCwgcHJvamVjdCwgZGVzY3JpcHRpb24sIHN0YXR1cyAiCiAgICAgICAgICAgIC4gIkZST00gdGltZV9hY2NvdW50aW5nX3Byb2plY3QgJFdoZXJlIiwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgZGF0YQogICAgbXkgJURhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIG15ICRJRCA9ICRSb3dbMF07CiAgICAgICAgJERhdGF7UHJvamVjdH17JElEfSAgICAgICAgICAgID0gJFJvd1sxXTsKICAgICAgICAkRGF0YXtQcm9qZWN0RGVzY3JpcHRpb259eyRJRH0gPSAkUm93WzJdOwogICAgICAgICREYXRhe1Byb2plY3RTdGF0dXN9eyRJRH0gICAgICA9ICRSb3dbM107CiAgICB9CgogICAgcmV0dXJuICVEYXRhOwp9Cgo9aXRlbSBQcm9qZWN0R2V0KCkKCnJldHVybnMgYSBoYXNoIHdpdGggdGhlIHJlcXVlc3RlZCBwcm9qZWN0IGRhdGEKCiAgICBteSAlUHJvamVjdERhdGEgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPlByb2plY3RHZXQoIElEID0+IDIgKTsKClRoaXMgcmV0dXJucyBzb21ldGhpbmcgbGlrZToKCiAgICAkVGltZUFjY291bnRpbmdPYmplY3QgPSAoCiAgICAgICAgUHJvamVjdCAgICAgICAgICAgID0+ICdpbnRlcm5hbCcsCiAgICAgICAgUHJvamVjdERlc2NyaXB0aW9uID0+ICdkZXNjcmlwdGlvbicsCiAgICAgICAgUHJvamVjdFN0YXR1cyAgICAgID0+IDEsCiAgICApOwoKICAgIG9yCgogICAgbXkgJVByb2plY3REYXRhID0gJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Qcm9qZWN0R2V0KCBQcm9qZWN0ID0+ICdpbnRlcm5hbCcgKTsKClRoaXMgcmV0dXJucyBzb21ldGhpbmcgbGlrZToKCiAgICAkVGltZUFjY291bnRpbmdPYmplY3QgPSAoCiAgICAgICAgSUQgICAgICAgICAgICAgICAgID0+IDIsCiAgICAgICAgUHJvamVjdERlc2NyaXB0aW9uID0+ICdkZXNjcmlwdGlvbicsCiAgICAgICAgUHJvamVjdFN0YXR1cyAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIFByb2plY3RHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0lEfSAmJiAhJFBhcmFte1Byb2plY3R9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBJRCBvciBwcm9qZWN0IG5hbWUhJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIG15ICVQcm9qZWN0OwoKICAgICMgbG9vayBmb3IgdGhlIHRhc2sgZGF0YSB3aXRoIHRoZSBJRAogICAgaWYgKCAkUGFyYW17SUR9ICkgewoKICAgICAgICAjIHNxbAogICAgICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCA9PiAnU0VMRUNUIHByb2plY3QsIGRlc2NyaXB0aW9uLCBzdGF0dXMgJwogICAgICAgICAgICAgICAgLiAnRlJPTSB0aW1lX2FjY291bnRpbmdfcHJvamVjdCBXSEVSRSBpZCA9ID8nLAogICAgICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtJRH0gXSwKICAgICAgICApOwogICAgICAgIHdoaWxlICggbXkgQERhdGEgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICAlUHJvamVjdCA9ICgKICAgICAgICAgICAgICAgIElEICAgICAgICAgICAgICAgICA9PiAkUGFyYW17SUR9LAogICAgICAgICAgICAgICAgUHJvamVjdCAgICAgICAgICAgID0+ICREYXRhWzBdLAogICAgICAgICAgICAgICAgUHJvamVjdERlc2NyaXB0aW9uID0+ICREYXRhWzFdLAogICAgICAgICAgICAgICAgUHJvamVjdFN0YXR1cyAgICAgID0+ICREYXRhWzJdLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGxvb2sgZm9yIHRoZSB0YXNrIGRhdGEgd2l0aCB0aGUgdGFzayBuYW1lCiAgICBlbHNlIHsKCiAgICAgICAgIyBzcWwKICAgICAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpZCwgZGVzY3JpcHRpb24sIHN0YXR1cyAnCiAgICAgICAgICAgICAgICAuICdGUk9NIHRpbWVfYWNjb3VudGluZ19wcm9qZWN0IFdIRVJFIHByb2plY3QgPSA/JywKICAgICAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17UHJvamVjdH0gXSwKICAgICAgICApOwogICAgICAgIHdoaWxlICggbXkgQERhdGEgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICAlUHJvamVjdCA9ICgKICAgICAgICAgICAgICAgIFByb2plY3QgICAgICAgICAgICA9PiAkUGFyYW17UHJvamVjdH0sCiAgICAgICAgICAgICAgICBJRCAgICAgICAgICAgICAgICAgPT4gJERhdGFbMF0sCiAgICAgICAgICAgICAgICBQcm9qZWN0RGVzY3JpcHRpb24gPT4gJERhdGFbMV0sCiAgICAgICAgICAgICAgICBQcm9qZWN0U3RhdHVzICAgICAgPT4gJERhdGFbMl0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAlUHJvamVjdDsKfQoKPWl0ZW0gUHJvamVjdFNldHRpbmdzSW5zZXJ0KCkKCmluc2VydHMgYSBuZXcgcHJvamVjdCBpbiB0aGUgZGIKCiAgICAkVGltZUFjY291bnRpbmdPYmplY3QtPlByb2plY3RTZXR0aW5nc0luc2VydCgKICAgICAgICBQcm9qZWN0ICAgICAgICAgICAgPT4gJ2ludGVybmFsJywgICAgIyBvcHRpb25hbAogICAgICAgIFByb2plY3REZXNjcmlwdGlvbiA9PiAnZGVzY3JpcHRpb24nLCAjIG9wdGlvbmFsCiAgICAgICAgUHJvamVjdFN0YXR1cyAgICAgID0+IDEgfHwgMCwgICAgICAgICMgb3B0aW9uYWwKICAgICk7CgogICAgcmV0dXJucyBJRCBvZiBjcmVhdGVkIHByb2plY3QKCj1jdXQKCnN1YiBQcm9qZWN0U2V0dGluZ3NJbnNlcnQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAkUGFyYW17UHJvamVjdH0gfHw9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdUaW1lQWNjb3VudGluZzo6RGVmYXVsdFByb2plY3ROYW1lJyk7CiAgICAkUGFyYW17UHJvamVjdERlc2NyaXB0aW9ufSB8fD0gJyc7CgogICAgaWYgKCAkUGFyYW17UHJvamVjdFN0YXR1c30gbmUgJzAnICYmICRQYXJhbXtQcm9qZWN0U3RhdHVzfSBuZSAnMScgKSB7CiAgICAgICAgJFBhcmFte1Byb2plY3RTdGF0dXN9ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1RpbWVBY2NvdW50aW5nOjpEZWZhdWx0UHJvamVjdFN0YXR1cycpOwogICAgfQoKICAgICMgaW5zZXJ0IHByb2plY3QgcmVjb3JkCiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIHRpbWVfYWNjb3VudGluZ19wcm9qZWN0IChwcm9qZWN0LCBkZXNjcmlwdGlvbiwgc3RhdHVzKSAnCiAgICAgICAgICAgIC4gJ1ZBTFVFUyAoPywgPywgPyknLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte1Byb2plY3R9LCBcJFBhcmFte1Byb2plY3REZXNjcmlwdGlvbn0sIFwkUGFyYW17UHJvamVjdFN0YXR1c30gXSwKICAgICk7CgogICAgIyBnZXQgaWQgb2YgbmV3bHkgY3JlYXRlZCBwcm9qZWN0IHJlY29yZAogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gdGltZV9hY2NvdW50aW5nX3Byb2plY3QgV0hFUkUgcHJvamVjdCA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtQcm9qZWN0fSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIGRhdGEKICAgIG15ICRQcm9qZWN0SUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRQcm9qZWN0SUQgPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiAkUHJvamVjdElEOwp9Cgo9aXRlbSBQcm9qZWN0U2V0dGluZ3NVcGRhdGUoKQoKdXBkYXRlcyBhIHByb2plY3QKCiAgICBteSAkU3VjY2VzcyA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+UHJvamVjdFNldHRpbmdzVXBkYXRlKAogICAgICAgIElEICAgICAgICAgICAgICAgICA9PiAxMjMsCiAgICAgICAgUHJvamVjdCAgICAgICAgICAgID0+ICdpbnRlcm5hbCcsCiAgICAgICAgUHJvamVjdERlc2NyaXB0aW9uID0+ICdkZXNjcmlwdGlvbicsCiAgICAgICAgUHJvamVjdFN0YXR1cyAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIFByb2plY3RTZXR0aW5nc1VwZGF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoSUQgUHJvamVjdCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JE5lZWRlZH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICROZWVkZWQhIgogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgc3FsCiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gJ1VQREFURSB0aW1lX2FjY291bnRpbmdfcHJvamVjdCBTRVQgcHJvamVjdCA9ID8sIGRlc2NyaXB0aW9uID0gPywgc3RhdHVzID0gPycKICAgICAgICAgICAgLiAnIFdIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17UHJvamVjdH0sIFwkUGFyYW17UHJvamVjdERlc2NyaXB0aW9ufSwgXCRQYXJhbXtQcm9qZWN0U3RhdHVzfSwgXCRQYXJhbXtJRH0sCiAgICAgICAgXSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIEFjdGlvblNldHRpbmdzR2V0KCkKCnJldHVybnMgYSBoYXNoIHdpdGggYWxsIHRoZSBhY3Rpb25zIHNldHRpbmdzCgogICAgbXkgJUFjdGlvbkRhdGEgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPkFjdGlvblNldHRpbmdzR2V0KCk7Cgo9Y3V0CgpzdWIgQWN0aW9uU2V0dGluZ3NHZXQgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAjIGRiIHNlbGVjdAogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQsIGFjdGlvbiwgc3RhdHVzIEZST00gdGltZV9hY2NvdW50aW5nX2FjdGlvbicsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIGRhdGEKICAgIG15ICVEYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkRGF0YXsgJFJvd1swXSB9e0FjdGlvbn0gICAgICAgPSAkUm93WzFdOwogICAgICAgICREYXRheyAkUm93WzBdIH17QWN0aW9uU3RhdHVzfSA9ICRSb3dbMl07CiAgICB9CgogICAgcmV0dXJuICVEYXRhOwp9Cgo9aXRlbSBBY3Rpb25HZXQoKQoKcmV0dXJucyBhIGhhc2ggd2l0aCB0aGUgcmVxdWVzdGVkIGFjdGlvbiAodGFzaykgZGF0YQoKICAgIG15ICVBY3Rpb25EYXRhID0gJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5BY3Rpb25HZXQoIElEID0+IDIgKTsKClRoaXMgcmV0dXJucyBzb21ldGhpbmcgbGlrZToKCiAgICAkVGltZUFjY291bnRpbmdPYmplY3QgPSAoCiAgICAgICAgQWN0aW9uICAgICAgID0+ICdNeSB0YXNrJywKICAgICAgICBBY3Rpb25TdGF0dXMgPT4gMSwKICAgICk7CgogICAgb3IKCiAgICBteSAlQWN0aW9uRGF0YSA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+QWN0aW9uR2V0KCBBY3Rpb24gPT4gJ015IHRhc2snICk7CgpUaGlzIHJldHVybnMgc29tZXRoaW5nIGxpa2U6CgogICAgJFRpbWVBY2NvdW50aW5nT2JqZWN0ID0gKAogICAgICAgIElEICAgICAgICAgICA9PiAyLAogICAgICAgIEFjdGlvblN0YXR1cyA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBBY3Rpb25HZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0lEfSAmJiAhJFBhcmFte0FjdGlvbn0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIElEIG9yIEFjdGlvbiEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgbXkgJVRhc2s7CgogICAgIyBsb29rIGZvciB0aGUgdGFzayBkYXRhIHdpdGggdGhlIElECiAgICBpZiAoICRQYXJhbXtJRH0gKSB7CgogICAgICAgICMgc3FsCiAgICAgICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMID0+ICdTRUxFQ1QgYWN0aW9uLCBzdGF0dXMgJwogICAgICAgICAgICAgICAgLiAnRlJPTSB0aW1lX2FjY291bnRpbmdfYWN0aW9uIFdIRVJFIGlkID0gPycsCiAgICAgICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0lEfSBdLAogICAgICAgICk7CiAgICAgICAgd2hpbGUgKCBteSBARGF0YSA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgICVUYXNrID0gKAogICAgICAgICAgICAgICAgSUQgICAgICAgICAgID0+ICRQYXJhbXtJRH0sCiAgICAgICAgICAgICAgICBBY3Rpb24gICAgICAgPT4gJERhdGFbMF0sCiAgICAgICAgICAgICAgICBBY3Rpb25TdGF0dXMgPT4gJERhdGFbMV0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgbG9vayBmb3IgdGhlIHRhc2sgZGF0YSB3aXRoIHRoZSB0YXNrIG5hbWUKICAgIGVsc2UgewoKICAgICAgICAjIHNxbAogICAgICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkLCBzdGF0dXMgJwogICAgICAgICAgICAgICAgLiAnRlJPTSB0aW1lX2FjY291bnRpbmdfYWN0aW9uIFdIRVJFIGFjdGlvbiA9ID8nLAogICAgICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtBY3Rpb259IF0sCiAgICAgICAgKTsKICAgICAgICB3aGlsZSAoIG15IEBEYXRhID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgJVRhc2sgPSAoCiAgICAgICAgICAgICAgICBBY3Rpb24gICAgICAgPT4gJFBhcmFte0FjdGlvbn0sCiAgICAgICAgICAgICAgICBJRCAgICAgICAgICAgPT4gJERhdGFbMF0sCiAgICAgICAgICAgICAgICBBY3Rpb25TdGF0dXMgPT4gJERhdGFbMV0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAlVGFzazsKfQoKPWl0ZW0gQWN0aW9uU2V0dGluZ3NJbnNlcnQoKQoKaW5zZXJ0cyBhIG5ldyBhY3Rpb24gaW4gdGhlIGRiCgogICAgJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5BY3Rpb25TZXR0aW5nc0luc2VydCgKICAgICAgICBBY3Rpb24gICAgICAgPT4gJ21lZXRpbmcnLCAgICMgb3B0aW9uYWwKICAgICAgICBBY3Rpb25TdGF0dXMgPT4gMSB8fCAwLCAgICAgICMgb3B0aW9uYWwKICAgICk7Cgo9Y3V0CgpzdWIgQWN0aW9uU2V0dGluZ3NJbnNlcnQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAkUGFyYW17QWN0aW9ufSB8fD0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1RpbWVBY2NvdW50aW5nOjpEZWZhdWx0QWN0aW9uTmFtZScpIHx8ICcnOwogICAgaWYgKCAkUGFyYW17QWN0aW9uU3RhdHVzfSBuZSAnMCcgJiYgJFBhcmFte0FjdGlvblN0YXR1c30gbmUgJzEnICkgewogICAgICAgICRQYXJhbXtBY3Rpb25TdGF0dXN9ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1RpbWVBY2NvdW50aW5nOjpEZWZhdWx0QWN0aW9uU3RhdHVzJyk7CiAgICB9CgogICAgIyBkYiBpbnNlcnQKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gdGltZV9hY2NvdW50aW5nX2FjdGlvbiAoYWN0aW9uLCBzdGF0dXMpICcKICAgICAgICAgICAgLiAnVkFMVUVTICg/LCA/KScsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17QWN0aW9ufSwgXCRQYXJhbXtBY3Rpb25TdGF0dXN9LCBdLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gQWN0aW9uU2V0dGluZ3NVcGRhdGUoKQoKdXBkYXRlcyBhbiBhY3Rpb24gKHRhc2spCgogICAgbXkgJFN1Y2Nlc3MgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPkFjdGlvblNldHRpbmdzVXBkYXRlKAogICAgICAgIEFjdGlvbklEICAgICA9PiAxMjMsCiAgICAgICAgQWN0aW9uICAgICAgID0+ICdpbnRlcm5hbCcsCiAgICAgICAgQWN0aW9uU3RhdHVzID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIEFjdGlvblNldHRpbmdzVXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkTmVlZGVkIChxdyhBY3Rpb25JRCBBY3Rpb24pKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkTmVlZGVkISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNxbAogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICdVUERBVEUgdGltZV9hY2NvdW50aW5nX2FjdGlvbiBTRVQgYWN0aW9uID0gPywgc3RhdHVzID0gPycKICAgICAgICAgICAgLiAnIFdIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17QWN0aW9ufSwgXCRQYXJhbXtBY3Rpb25TdGF0dXN9LCBcJFBhcmFte0FjdGlvbklEfQogICAgICAgIF0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBVc2VyTGlzdCgpCgpyZXR1cm5zIGEgaGFzaCB3aXRoIHRoZSB1c2VyIGRhdGEgb2YgYWxsIHVzZXJzCgogICAgbXkgJVVzZXJEYXRhID0gJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Vc2VyTGlzdCgpOwoKPWN1dAoKc3ViIFVzZXJMaXN0IHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBkYiBzZWxlY3QKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PgogICAgICAgICAgICAnU0VMRUNUIHVzZXJfaWQsIGRlc2NyaXB0aW9uLCBzaG93X292ZXJ0aW1lLCBjcmVhdGVfcHJvamVjdCwgY2FsZW5kYXIgRlJPTSB0aW1lX2FjY291bnRpbmdfdXNlcicsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIGRhdGEKICAgIG15ICVEYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkRGF0YXsgJFJvd1swXSB9e1VzZXJJRH0gICAgICAgID0gJFJvd1swXTsKICAgICAgICAkRGF0YXsgJFJvd1swXSB9e0Rlc2NyaXB0aW9ufSAgID0gJFJvd1sxXTsKICAgICAgICAkRGF0YXsgJFJvd1swXSB9e1Nob3dPdmVydGltZX0gID0gJFJvd1syXTsKICAgICAgICAkRGF0YXsgJFJvd1swXSB9e0NyZWF0ZVByb2plY3R9ID0gJFJvd1szXTsKICAgICAgICAkRGF0YXsgJFJvd1swXSB9e0NhbGVuZGFyfSAgICAgID0gJFJvd1s0XTsKICAgIH0KCiAgICByZXR1cm4gJURhdGE7Cn0KCj1pdGVtIFVzZXJHZXQoKQoKcmV0dXJucyBhIGhhc2ggd2l0aCB0aGUgdXNlciBkYXRhIG9mIG9uZSB1c2VyCgogICAgbXkgJVVzZXJEYXRhID0gJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Vc2VyR2V0KAogICAgICAgIFVzZXJJRCA9PiAxNSwKICAgICk7Cgo9Y3V0CgpzdWIgVXNlckdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIGRhdGEKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnVXNlckdldDogTmVlZCBVc2VySUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGRiIHNlbGVjdAogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+CiAgICAgICAgICAgICdTRUxFQ1QgZGVzY3JpcHRpb24sIHNob3dfb3ZlcnRpbWUsIGNyZWF0ZV9wcm9qZWN0LCBjYWxlbmRhciBGUk9NIHRpbWVfYWNjb3VudGluZ191c2VyIFdIRVJFIHVzZXJfaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtVc2VySUR9IF0sCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIGRhdGEKICAgIG15ICVEYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkRGF0YXtVc2VySUR9ICAgICAgICA9ICRQYXJhbXtVc2VySUR9OwogICAgICAgICREYXRhe0Rlc2NyaXB0aW9ufSAgID0gJFJvd1swXTsKICAgICAgICAkRGF0YXtTaG93T3ZlcnRpbWV9ICA9ICRSb3dbMV07CiAgICAgICAgJERhdGF7Q3JlYXRlUHJvamVjdH0gPSAkUm93WzJdOwogICAgICAgICREYXRhe0NhbGVuZGFyfSAgICAgID0gJFJvd1szXTsKICAgIH0KCiAgICByZXR1cm4gJURhdGE7Cn0KCj1pdGVtIFVzZXJTZXR0aW5nc0dldCgpCgpyZXR1cm5zIGEgaGFzaCB3aXRoIHRoZSBjb21wbGV0ZSB1c2VyIHBlcmlvZCBkYXRhIGZvciBhbGwgdXNlcnMKCiAgICBteSAlVXNlckRhdGEgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPlVzZXJTZXR0aW5nc0dldCgpOwoKcmV0dXJuczoKICAgICVVc2VyRGF0YSA9ICgKICAgICAgICAzID0+IHsKICAgICAgICAgICAgMSA9PiB7CiAgICAgICAgICAgICAgICBEYXRlRW5kICAgICA9PiAiMjAxMi0xMi0zMSIsCiAgICAgICAgICAgICAgICBEYXRlU3RhcnQgICA9PiAiMjAxMi0xMC0wMSIsCiAgICAgICAgICAgICAgICBMZWF2ZURheXMgICA9PiAiMjMuMDAiLAogICAgICAgICAgICAgICAgT3ZlcnRpbWUgICAgPT4gIjAuMDAiLAogICAgICAgICAgICAgICAgUGVyaW9kICAgICAgPT4gMSwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDMsCiAgICAgICAgICAgICAgICBVc2VyU3RhdHVzICA9PiAxLAogICAgICAgICAgICAgICAgV2Vla2x5SG91cnMgPT4gIjQwLjAwIiwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgMiA9PiB7CiAgICAgICAgICAgICAgICBEYXRlRW5kICAgICA9PiAiMjAxMy0xMi0zMSIsCiAgICAgICAgICAgICAgICBEYXRlU3RhcnQgICA9PiAiMjAxMy0wMS0wMSIsCiAgICAgICAgICAgICAgICBMZWF2ZURheXMgICA9PiAiMjMuMDAiLAogICAgICAgICAgICAgICAgT3ZlcnRpbWUgICAgPT4gIjAuMDAiLAogICAgICAgICAgICAgICAgUGVyaW9kICAgICAgPT4gMiwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgID0+IDMsCiAgICAgICAgICAgICAgICBVc2VyU3RhdHVzICA9PiAxLAogICAgICAgICAgICAgICAgV2Vla2x5SG91cnMgPT4gIjMyLjAwIiwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIDQgPT4gewogICAgICAgICAgICAxID0+IHsKICAgICAgICAgICAgICAgIERhdGVFbmQgICAgID0+ICIyMDEzLTEyLTMxIiwKICAgICAgICAgICAgICAgIERhdGVTdGFydCAgID0+ICIyMDEyLTAxLTAxIiwKICAgICAgICAgICAgICAgIExlYXZlRGF5cyAgID0+ICIyMy4wMCIsCiAgICAgICAgICAgICAgICBPdmVydGltZSAgICA9PiAiMC4wMCIsCiAgICAgICAgICAgICAgICBQZXJpb2QgICAgICA9PiAxLAogICAgICAgICAgICAgICAgVXNlcklEICAgICAgPT4gNCwKICAgICAgICAgICAgICAgIFVzZXJTdGF0dXMgID0+IDEsCiAgICAgICAgICAgICAgICBXZWVrbHlIb3VycyA9PiAiNDAuMDAiLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICB9OwoKPWN1dAoKc3ViIFVzZXJTZXR0aW5nc0dldCB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgZGIgc2VsZWN0CiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4KICAgICAgICAgICAgJ1NFTEVDVCB1c2VyX2lkLCBwcmVmZXJlbmNlX3BlcmlvZCwgZGF0ZV9zdGFydCwgZGF0ZV9lbmQsIHdlZWtseV9ob3VycywgbGVhdmVfZGF5cywgb3ZlcnRpbWUsIHN0YXR1cwogICAgICAgICAgICAgICAgRlJPTSB0aW1lX2FjY291bnRpbmdfdXNlcl9wZXJpb2QnCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIGRhdGEKICAgIG15ICVEYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkRGF0YXsgJFJvd1swXSB9eyAkUm93WzFdIH17VXNlcklEfSAgICAgID0gJFJvd1swXTsKICAgICAgICAkRGF0YXsgJFJvd1swXSB9eyAkUm93WzFdIH17UGVyaW9kfSAgICAgID0gJFJvd1sxXTsKICAgICAgICAkRGF0YXsgJFJvd1swXSB9eyAkUm93WzFdIH17RGF0ZVN0YXJ0fSAgID0gc3Vic3RyKCAkUm93WzJdLCAwLCAxMCApOwogICAgICAgICREYXRheyAkUm93WzBdIH17ICRSb3dbMV0gfXtEYXRlRW5kfSAgICAgPSBzdWJzdHIoICRSb3dbM10sIDAsIDEwICk7CiAgICAgICAgJERhdGF7ICRSb3dbMF0gfXsgJFJvd1sxXSB9e1dlZWtseUhvdXJzfSA9ICRSb3dbNF07CiAgICAgICAgJERhdGF7ICRSb3dbMF0gfXsgJFJvd1sxXSB9e0xlYXZlRGF5c30gICA9ICRSb3dbNV07CiAgICAgICAgJERhdGF7ICRSb3dbMF0gfXsgJFJvd1sxXSB9e092ZXJ0aW1lfSAgICA9ICRSb3dbNl07CiAgICAgICAgJERhdGF7ICRSb3dbMF0gfXsgJFJvd1sxXSB9e1VzZXJTdGF0dXN9ICA9ICRSb3dbN107CiAgICB9CgogICAgcmV0dXJuICVEYXRhOwp9Cgo9aXRlbSBTaW5nbGVVc2VyU2V0dGluZ3NHZXQoKQoKcmV0dXJucyBhIGhhc2ggd2l0aCB0aGUgcmVxdWVzdGVkIHVzZXIncyBwZXJpb2QgZGF0YQoKICAgIG15ICVVc2VyRGF0YSA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+U2luZ2xlVXNlclNldHRpbmdzR2V0KCBVc2VySUQgPT4gMSApOwoKPWN1dAoKc3ViIFNpbmdsZVVzZXJTZXR0aW5nc0dldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgSUQhJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZGIgc2VsZWN0CiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4KICAgICAgICAgICAgJ1NFTEVDVCB1c2VyX2lkLCBwcmVmZXJlbmNlX3BlcmlvZCwgZGF0ZV9zdGFydCwgZGF0ZV9lbmQsIHdlZWtseV9ob3VycywgbGVhdmVfZGF5cywgb3ZlcnRpbWUsIHN0YXR1cyAnCiAgICAgICAgICAgIC4gJ0ZST00gdGltZV9hY2NvdW50aW5nX3VzZXJfcGVyaW9kIFdIRVJFIHVzZXJfaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtVc2VySUR9IF0sCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIGRhdGEKICAgIG15ICVVc2VyRGF0YTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFVzZXJEYXRheyAkUm93WzFdIH17VXNlcklEfSAgICAgID0gJFJvd1swXTsKICAgICAgICAkVXNlckRhdGF7ICRSb3dbMV0gfXtQZXJpb2R9ICAgICAgPSAkUm93WzFdOwogICAgICAgICRVc2VyRGF0YXsgJFJvd1sxXSB9e0RhdGVTdGFydH0gICA9IHN1YnN0ciggJFJvd1syXSwgMCwgMTAgKTsKICAgICAgICAkVXNlckRhdGF7ICRSb3dbMV0gfXtEYXRlRW5kfSAgICAgPSBzdWJzdHIoICRSb3dbM10sIDAsIDEwICk7CiAgICAgICAgJFVzZXJEYXRheyAkUm93WzFdIH17V2Vla2x5SG91cnN9ID0gJFJvd1s0XTsKICAgICAgICAkVXNlckRhdGF7ICRSb3dbMV0gfXtMZWF2ZURheXN9ICAgPSAkUm93WzVdOwogICAgICAgICRVc2VyRGF0YXsgJFJvd1sxXSB9e092ZXJ0aW1lfSAgICA9ICRSb3dbNl07CiAgICAgICAgJFVzZXJEYXRheyAkUm93WzFdIH17VXNlclN0YXR1c30gID0gJFJvd1s3XTsKICAgIH0KCiAgICByZXR1cm4gJVVzZXJEYXRhOwp9Cgo9aXRlbSBVc2VyTGFzdFBlcmlvZE51bWJlckdldCgpCgpyZXR1cm5zIHRoZSBudW1iZXIgb2YgdGhlIGxhc3QgcmVnaXN0ZXJlZCBwZXJpb2QgZm9yIHRoZSBzcGVjaWZpZWQgdXNlcgoKICAgIG15ICRMYXN0UGVyaW9kTnVtYmVyID0gJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Vc2VyTGFzdFBlcmlvZE51bWJlckdldCggVXNlcklEID0+IDEgKTsKCj1jdXQKCnN1YiBVc2VyTGFzdFBlcmlvZE51bWJlckdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVXNlcklEIScKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGRiIHNlbGVjdAogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgbWF4KHByZWZlcmVuY2VfcGVyaW9kKSAnCiAgICAgICAgICAgIC4gJ0ZST00gdGltZV9hY2NvdW50aW5nX3VzZXJfcGVyaW9kIFdIRVJFIHVzZXJfaWQgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtVc2VySUR9IF0sCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIGRhdGEKICAgIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpOwogICAgbXkgJExhc3RQZXJpb2ROdW1iZXIgPSAkUm93WzBdIHx8IDA7CgogICAgcmV0dXJuICRMYXN0UGVyaW9kTnVtYmVyOwp9Cgo9aXRlbSBVc2VyU2V0dGluZ3NJbnNlcnQoKQoKaW5zZXJ0IG5ldyB1c2VyIGRhdGEgaW4gdGhlIGRiCgogICAgJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Vc2VyU2V0dGluZ3NJbnNlcnQoCiAgICAgICAgVXNlcklEICAgICAgID0+ICcyJywKICAgICAgICBQZXJpb2QgICAgICAgPT4gJzInLAogICAgKTsKCj1jdXQKCnN1YiBVc2VyU2V0dGluZ3NJbnNlcnQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3IChVc2VySUQgUGVyaW9kKSkgewogICAgICAgIGlmICggISRQYXJhbXskTmVlZGVkfSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJE5lZWRlZCIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIGlmIHVzZXIgZXhpc3RzCiAgICBpZiAoICEkU2VsZi0+e1VzZXJPYmplY3R9LT5Vc2VyTG9va3VwKCBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0gKSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIlVzZXJJRCAkUGFyYW17VXNlcklEfSBkb2VzIG5vdCBleGlzdCEiCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgJFBhcmFte1dlZWtseUhvdXJzfSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdUaW1lQWNjb3VudGluZzo6RGVmYXVsdFVzZXJXZWVrbHlIb3VycycpCiAgICAgICAgfHwgJzQwJzsKICAgICRQYXJhbXtMZWF2ZURheXN9ICA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdUaW1lQWNjb3VudGluZzo6RGVmYXVsdFVzZXJMZWF2ZURheXMnKSB8fCAnMjUnOwogICAgJFBhcmFte1VzZXJTdGF0dXN9ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1RpbWVBY2NvdW50aW5nOjpEZWZhdWx0VXNlclN0YXR1cycpICAgIHx8ICcxJzsKICAgICRQYXJhbXtPdmVydGltZX0gICA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdUaW1lQWNjb3VudGluZzo6RGVmYXVsdFVzZXJPdmVydGltZScpICB8fCAnMCc7CiAgICAkUGFyYW17RGF0ZUVuZH0gICAgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnVGltZUFjY291bnRpbmc6OkRlZmF1bHRVc2VyRGF0ZUVuZCcpCiAgICAgICAgfHwgJzIwMTEtMTItMzEnOwogICAgJFBhcmFte0RhdGVTdGFydH0gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnVGltZUFjY291bnRpbmc6OkRlZmF1bHRVc2VyRGF0ZVN0YXJ0JykKICAgICAgICB8fCAnMjAxMS0wMS0wMSc7CiAgICAkUGFyYW17RGVzY3JpcHRpb259ID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1RpbWVBY2NvdW50aW5nOjpEZWZhdWx0VXNlckRlc2NyaXB0aW9uJykKICAgICAgICB8fCAnUHV0IHlvdXIgZGVzY3JpcHRpb24gaGVyZS4nOwoKICAgICRQYXJhbXtEYXRlU3RhcnR9IC49ICcgMDA6MDA6MDAnOwogICAgJFBhcmFte0RhdGVFbmR9ICAgLj0gJyAwMDowMDowMCc7CgogICAgIyBkZWxldGUgY2FjaGUKICAgIGRlbGV0ZSAkU2VsZi0+eydDYWNoZTo6VXNlckN1cnJlbnRQZXJpb2RHZXQnfTsKCiAgICAjIGRiIGluc2VydAogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+CiAgICAgICAgICAgICdJTlNFUlQgSU5UTyB0aW1lX2FjY291bnRpbmdfdXNlcl9wZXJpb2QgKHVzZXJfaWQsIHByZWZlcmVuY2VfcGVyaW9kLCBkYXRlX3N0YXJ0LCBkYXRlX2VuZCwnCiAgICAgICAgICAgIC4gJyB3ZWVrbHlfaG91cnMsIGxlYXZlX2RheXMsIG92ZXJ0aW1lLCBzdGF0dXMpJwogICAgICAgICAgICAuICcgVkFMVUVTICg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/KScsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwgICAgICBcJFBhcmFte1BlcmlvZH0sICAgIFwkUGFyYW17RGF0ZVN0YXJ0fSwgXCRQYXJhbXtEYXRlRW5kfSwKICAgICAgICAgICAgXCRQYXJhbXtXZWVrbHlIb3Vyc30sIFwkUGFyYW17TGVhdmVEYXlzfSwgXCRQYXJhbXtPdmVydGltZX0sICBcJFBhcmFte1VzZXJTdGF0dXN9LAogICAgICAgIF0sCiAgICApOwoKICAgICMgc2VsZWN0IHVzZXJpZAogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCB1c2VyX2lkIEZST00gdGltZV9hY2NvdW50aW5nX3VzZXIgV0hFUkUgdXNlcl9pZCA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtVc2VySUR9LCBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIGRhdGEKICAgIG15ICRVc2VySUQ7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRVc2VySUQgPSAkUm93WzBdOwogICAgfQoKICAgIGlmICggIWRlZmluZWQgJFVzZXJJRCApIHsKCiAgICAgICAgIyBkYiBpbnNlcnQKICAgICAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyB0aW1lX2FjY291bnRpbmdfdXNlciAodXNlcl9pZCwgZGVzY3JpcHRpb24pJwogICAgICAgICAgICAgICAgLiAnIFZBTFVFUyAoPywgPyknLAogICAgICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte0Rlc2NyaXB0aW9ufSwgXSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBVc2VyU2V0dGluZ3NVcGRhdGUoKQoKdXBkYXRlcyB1c2VyIGRhdGEgaW4gdGhlIGRiCgogICAgJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Vc2VyU2V0dGluZ3NVcGRhdGUoCiAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgIERlc2NyaXB0aW9uICAgPT4gJ1NvbWUgVGV4dCcsCiAgICAgICAgQ3JlYXRlUHJvamVjdCA9PiAxIHx8IDAsCiAgICAgICAgU2hvd092ZXJ0aW1lICA9PiAxIHx8IDAsCiAgICAgICAgUGVyaW9kICAgICAgICA9PiB7CiAgICAgICAgICAgIDEgPT4gewogICAgICAgICAgICAgICAgRGF0ZVN0YXJ0ICAgID0+ICcyMDEwLTEyLTEyJywKICAgICAgICAgICAgICAgIERhdGVFbmQgICAgICA9PiAnMjAxMC0xMi0zMScsCiAgICAgICAgICAgICAgICBXZWVrbHlIb3VycyAgPT4gJzM4JywKICAgICAgICAgICAgICAgIExlYXZlRGF5cyAgICA9PiAnMjUnLAogICAgICAgICAgICAgICAgT3ZlcnRpbWUgICAgID0+ICczOCcsCiAgICAgICAgICAgICAgICBVc2VyU3RhdHVzICAgPT4gMSB8fCAwLAogICAgICAgICAgICB9LAogICAgICAgICAgICAyID0+IHsKICAgICAgICAgICAgICAgIERhdGVTdGFydCAgICA9PiAnMjAxMC0xMi0xMicsCiAgICAgICAgICAgICAgICBEYXRlRW5kICAgICAgPT4gJzIwMTAtMTItMzEnLAogICAgICAgICAgICAgICAgV2Vla2x5SG91cnMgID0+ICczOCcsCiAgICAgICAgICAgICAgICBMZWF2ZURheXMgICAgPT4gJzI1JywKICAgICAgICAgICAgICAgIE92ZXJ0aW1lICAgICA9PiAnMzgnLAogICAgICAgICAgICAgICAgVXNlclN0YXR1cyAgID0+IDEgfHwgMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgMyA9PiAuLi4uLi4KICAgICAgICB9CiAgICApOwoKPWN1dAoKc3ViIFVzZXJTZXR0aW5nc1VwZGF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZGVsZXRlIGNhY2hlCiAgICBkZWxldGUgJFNlbGYtPnsnQ2FjaGU6OlVzZXJDdXJyZW50UGVyaW9kR2V0J307CgogICAgbXkgJFVzZXJJRCA9ICRQYXJhbXtVc2VySUR9OwoKICAgIGlmICggIWRlZmluZWQgJFBhcmFte1BlcmlvZH0tPnsxfXtEYXRlU3RhcnR9ICYmICFkZWZpbmVkICRQYXJhbXtQZXJpb2R9LT57MX17RGF0ZUVuZH0gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiVXNlclNldHRpbmdVcGRhdGU6IE5vIGRhdGEgZm9yIHVzZXIgaWQgJFVzZXJJRCEiCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IHZhbHVlcwogICAgJFBhcmFte1Nob3dPdmVydGltZX0gIHx8PSAwOwogICAgJFBhcmFte0NyZWF0ZVByb2plY3R9IHx8PSAwOwogICAgJFBhcmFte0NhbGVuZGFyfSAgICAgIHx8PSAwOwoKICAgICMgZGIgaW5zZXJ0CiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gJ1VQREFURSB0aW1lX2FjY291bnRpbmdfdXNlciAnCiAgICAgICAgICAgIC4gJyBTRVQgZGVzY3JpcHRpb24gPSA/LCBzaG93X292ZXJ0aW1lID0gPywgY3JlYXRlX3Byb2plY3QgPSA/LCBjYWxlbmRhciA9ID8nCiAgICAgICAgICAgIC4gJyBXSEVSRSB1c2VyX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17RGVzY3JpcHRpb259LCBcJFBhcmFte1Nob3dPdmVydGltZX0sCiAgICAgICAgICAgIFwkUGFyYW17Q3JlYXRlUHJvamVjdH0sIFwkUGFyYW17Q2FsZW5kYXJ9LCBcJFBhcmFte1VzZXJJRH0KICAgICAgICBdLAogICAgKTsKCiAgICAjIHVwZGF0ZSBhbGwgcGVyaW9kcwogICAgZm9yIG15ICRQZXJpb2QgKCBzb3J0IGtleXMgJXsgJFBhcmFte1BlcmlvZH0gfSApIHsKCiAgICAgICAgIyBkYiBpbnNlcnQKICAgICAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICAgICAgU1FMID0+ICJVUERBVEUgdGltZV9hY2NvdW50aW5nX3VzZXJfcGVyaW9kICIKICAgICAgICAgICAgICAgIC4gIlNFVCBsZWF2ZV9kYXlzID0gPywgZGF0ZV9zdGFydCA9ID8iCiAgICAgICAgICAgICAgICAuICIsIGRhdGVfZW5kID0gPywgb3ZlcnRpbWUgPSA/IgogICAgICAgICAgICAgICAgLiAiLCB3ZWVrbHlfaG91cnMgPSA/LCBzdGF0dXMgPSA/ICIKICAgICAgICAgICAgICAgIC4gIldIRVJFIHVzZXJfaWQgPSA/IEFORCBwcmVmZXJlbmNlX3BlcmlvZCA9ID8iLAogICAgICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgICAgIFwkUGFyYW17UGVyaW9kfS0+eyRQZXJpb2R9e0xlYXZlRGF5c30sICAgXCRQYXJhbXtQZXJpb2R9LT57JFBlcmlvZH17RGF0ZVN0YXJ0fSwKICAgICAgICAgICAgICAgIFwkUGFyYW17UGVyaW9kfS0+eyRQZXJpb2R9e0RhdGVFbmR9LCAgICAgXCRQYXJhbXtQZXJpb2R9LT57JFBlcmlvZH17T3ZlcnRpbWV9LAogICAgICAgICAgICAgICAgXCRQYXJhbXtQZXJpb2R9LT57JFBlcmlvZH17V2Vla2x5SG91cnN9LCBcJFBhcmFte1BlcmlvZH0tPnskUGVyaW9kfXtVc2VyU3RhdHVzfSwKICAgICAgICAgICAgICAgIFwkVXNlcklELCBcJFBlcmlvZCwKICAgICAgICAgICAgICAgIF0KICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBXb3JraW5nVW5pdHNDb21wbGV0bmVzc0NoZWNrKCkKCnJldHVybnMgYSBoYXNoIHdpdGggdGhlIGluY29tcGxldGUgd29ya2luZyBkYXlzIGFuZAp0aGUgaW5mb3JtYXRpb24gaWYgdGhlIGluY29tcGxldGUgd29ya2luZyBkYXlzIGFyZSBpbiB0aGUgYWxsb3dlZApyYW5nZS4KCiAgICBteSAlV29ya2luZ1VuaXRzQ2hlY2sgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPldvcmtpbmdVbml0c0NvbXBsZXRuZXNzQ2hlY2soCiAgICAgICAgVXNlcklEID0+ICcyJywgICMgT3B0aW9uYWwKICAgICk7Cgo9Y3V0CgpzdWIgV29ya2luZ1VuaXRzQ29tcGxldG5lc3NDaGVjayB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIG15ICVEYXRhICAgICAgICAgICAgICAgID0gKCk7CiAgICBteSAkV29ya2luZ1VuaXRJRCAgICAgICA9IDA7CiAgICBteSAlQ29tcGxldGVXb3JraW5nRGF5cyA9ICgpOwogICAgbXkgKCAkU2VjLCAkTWluLCAkSG91ciwgJERheSwgJE1vbnRoLCAkWWVhciApID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgIFN5c3RlbVRpbWUgPT4gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZSgpLAogICAgKTsKCiAgICBteSAkVXNlcklEID0gJFBhcmFte1VzZXJJRH0gfHwgJFNlbGYtPntVc2VySUR9OwoKICAgICMgVE9ETzogU2VhcmNoIG9ubHkgaW4gdGhlIEN1cnJlbnRVc2VyUGVyaW9kCiAgICAjIFRPRE86IFNlYXJjaCBvbmx5IHdvcmtpbmcgdW5pdHMgd2hlcmUgYWN0aW9uX2lkIGFuZCBwcm9qZWN0X2lkIGlzIHRydWUKCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgID0+ICJTRUxFQ1QgRElTVElOQ1QgdGltZV9zdGFydCBGUk9NIHRpbWVfYWNjb3VudGluZ190YWJsZSBXSEVSRSB1c2VyX2lkID0gPyIsCiAgICAgICAgQmluZCA9PiBbIFwkVXNlcklEIF0sCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIGRhdGEKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgaWYgKCAkUm93WzBdID1+IC9eKFxkKyktKFxkKyktKFxkKykvICkgewogICAgICAgICAgICAkQ29tcGxldGVXb3JraW5nRGF5c3skMX17JDJ9eyQzfSA9IDE7CiAgICAgICAgfQogICAgfQoKICAgIG15ICVVc2VyQ3VycmVudFBlcmlvZCA9ICRTZWxmLT5Vc2VyQ3VycmVudFBlcmlvZEdldCgKICAgICAgICBZZWFyICA9PiAkWWVhciwKICAgICAgICBNb250aCA9PiAkTW9udGgsCiAgICAgICAgRGF5ICAgPT4gJERheSwKICAgICk7CgogICAgbXkgJFdvcmtpbmdEYXlzID0gMDsKICAgIG15ICRZZWFyU3RhcnQgICA9IDE5NzA7CiAgICBteSAkTW9udGhTdGFydCAgPSAxOwogICAgbXkgJERheVN0YXJ0ICAgID0gMTsKICAgIG15ICRZZWFyRW5kICAgICA9ICRZZWFyOwogICAgbXkgJE1vbnRoRW5kICAgID0gJE1vbnRoOwogICAgbXkgJERheUVuZCAgICAgID0gJERheTsKCiAgICBpZiAoICRVc2VyQ3VycmVudFBlcmlvZHskVXNlcklEfXtEYXRlU3RhcnR9ID1+IC9eKFxkKyktKFxkKyktKFxkKykvICkgewogICAgICAgICRZZWFyU3RhcnQgID0gJDE7CiAgICAgICAgJE1vbnRoU3RhcnQgPSAkMjsKICAgICAgICAkRGF5U3RhcnQgICA9ICQzOwogICAgfQoKICAgIG15ICRDYWxlbmRhciA9IHsgJFNlbGYtPlVzZXJHZXQoIFVzZXJJRCA9PiAkVXNlcklEICkgfS0+e0NhbGVuZGFyfTsKCiAgICBmb3IgbXkgJFllYXIgKCAkWWVhclN0YXJ0IC4uICRZZWFyRW5kICkgewoKICAgICAgICBteSAkTW9udGhTdGFydFBvaW50ID0gJFllYXIgPT0gJFllYXJTdGFydCA/ICRNb250aFN0YXJ0IDogMTsKICAgICAgICBteSAkTW9udGhFbmRQb2ludCAgID0gJFllYXIgPT0gJFllYXJFbmQgICA/ICRNb250aEVuZCAgIDogMTI7CgogICAgICAgIGZvciBteSAkTW9udGggKCAkTW9udGhTdGFydFBvaW50IC4uICRNb250aEVuZFBvaW50ICkgewoKICAgICAgICAgICAgbXkgJERheVN0YXJ0UG9pbnQgPSAkWWVhciA9PSAkWWVhclN0YXJ0ICYmICRNb250aCA9PSAkTW9udGhTdGFydCA/ICREYXlTdGFydCA6IDE7CiAgICAgICAgICAgIG15ICREYXlFbmRQb2ludCA9ICRZZWFyID09ICRZZWFyRW5kCiAgICAgICAgICAgICAgICAmJiAkTW9udGggPT0gJE1vbnRoRW5kID8gJERheUVuZCA6IERheXNfaW5fTW9udGgoICRZZWFyLCAkTW9udGggKTsKICAgICAgICAgICAgbXkgJE1vbnRoU3RyaW5nID0gc3ByaW50ZiggIiUwMmQiLCAkTW9udGggKTsKCiAgICAgICAgICAgIGZvciBteSAkRGF5ICggJERheVN0YXJ0UG9pbnQgLi4gJERheUVuZFBvaW50ICkgewoKICAgICAgICAgICAgICAgIG15ICRWYWNhdGlvbkNoZWNrID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+VmFjYXRpb25DaGVjaygKICAgICAgICAgICAgICAgICAgICBZZWFyICAgICA9PiAkWWVhciwKICAgICAgICAgICAgICAgICAgICBNb250aCAgICA9PiAkTW9udGgsCiAgICAgICAgICAgICAgICAgICAgRGF5ICAgICAgPT4gJERheSwKICAgICAgICAgICAgICAgICAgICBDYWxlbmRhciA9PiAkQ2FsZW5kYXIgfHwgJycsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgIG15ICREYXRlID0gc3ByaW50ZiggIiUwNGQtJTAyZC0lMDJkIiwgJFllYXIsICRNb250aCwgJERheSApOwogICAgICAgICAgICAgICAgbXkgJERheVN0YXJ0VGltZSA9ICRTZWxmLT57VGltZU9iamVjdH0tPlRpbWVTdGFtcDJTeXN0ZW1UaW1lKCBTdHJpbmcgPT4gJERhdGUgLiAnIDAwOjAwOjAwJyApOwogICAgICAgICAgICAgICAgbXkgJERheVN0b3BUaW1lICA9ICRTZWxmLT57VGltZU9iamVjdH0tPlRpbWVTdGFtcDJTeXN0ZW1UaW1lKCBTdHJpbmcgPT4gJERhdGUgLiAnIDIzOjU5OjU5JyApOwoKICAgICAgICAgICAgICAgICMgYWRkIHRpbWUgem9uZSB0byBjYWxjdWxhdGlvbgogICAgICAgICAgICAgICAgbXkgJFpvbmUgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCggIlRpbWVab25lOjpDYWxlbmRhciIgLiAkQ2FsZW5kYXIgfHwgJycgKTsKICAgICAgICAgICAgICAgIGlmICgkWm9uZSkgewogICAgICAgICAgICAgICAgICAgIG15ICRab25lU2Vjb25kcyA9ICRab25lICogNjAgKiA2MDsKICAgICAgICAgICAgICAgICAgICAkRGF5U3RhcnRUaW1lID0gJERheVN0YXJ0VGltZSAtICRab25lU2Vjb25kczsKICAgICAgICAgICAgICAgICAgICAkRGF5U3RvcFRpbWUgID0gJERheVN0b3BUaW1lIC0gJFpvbmVTZWNvbmRzOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIG15ICRUaGlzRGF5V29ya2luZ1RpbWUgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5Xb3JraW5nVGltZSgKICAgICAgICAgICAgICAgICAgICBTdGFydFRpbWUgPT4gJERheVN0YXJ0VGltZSwKICAgICAgICAgICAgICAgICAgICBTdG9wVGltZSAgPT4gJERheVN0b3BUaW1lLAogICAgICAgICAgICAgICAgICAgIENhbGVuZGFyICA9PiAkQ2FsZW5kYXIgfHwgJycsCiAgICAgICAgICAgICAgICApIHx8ICcwJzsKCiAgICAgICAgICAgICAgICBteSAkRGF5U3RyaW5nID0gc3ByaW50ZiggIiUwMmQiLCAkRGF5ICk7CgogICAgICAgICAgICAgICAgaWYgKCAkVGhpc0RheVdvcmtpbmdUaW1lICYmICEkVmFjYXRpb25DaGVjayApIHsKICAgICAgICAgICAgICAgICAgICAkV29ya2luZ0RheXMrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICAkVGhpc0RheVdvcmtpbmdUaW1lCiAgICAgICAgICAgICAgICAgICAgJiYgISRWYWNhdGlvbkNoZWNrCiAgICAgICAgICAgICAgICAgICAgJiYgISRDb21wbGV0ZVdvcmtpbmdEYXlzeyRZZWFyfXskTW9udGhTdHJpbmd9eyREYXlTdHJpbmd9CiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICREYXRhe0luY29tcGxldGV9eyRZZWFyfXskTW9udGhTdHJpbmd9eyREYXlTdHJpbmd9ID0gJFdvcmtpbmdEYXlzOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgbXkgJE1heEludGVydmFsbE9mSW5jb21wbGV0ZURheXMgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnVGltZUFjY291bnRpbmc6Ok1heEludGVydmFsT2ZJbmNvbXBsZXRlRGF5cycpIHx8ICc1JzsKICAgIG15ICRNYXhJbnRlcnZhbGxPZkluY29tcGxldGVEYXlzQmVmb3JlV2FybmluZwogICAgICAgID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1RpbWVBY2NvdW50aW5nOjpNYXhJbnRlcnZhbE9mSW5jb21wbGV0ZURheXNCZWZvcmVXYXJuaW5nJykKICAgICAgICB8fCAnMyc7CiAgICBmb3IgbXkgJFllYXIgKCBzb3J0IGtleXMgJXsgJERhdGF7SW5jb21wbGV0ZX0gfSApIHsKCiAgICAgICAgZm9yIG15ICRNb250aCAoIHNvcnQga2V5cyAleyAkRGF0YXtJbmNvbXBsZXRlfXskWWVhcn0gfSApIHsKCiAgICAgICAgICAgIGZvciBteSAkRGF5ICggc29ydCBrZXlzICV7ICREYXRhe0luY29tcGxldGV9eyRZZWFyfXskTW9udGh9IH0gKSB7CgogICAgICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgICAgICREYXRhe0luY29tcGxldGV9eyRZZWFyfXskTW9udGh9eyREYXl9CiAgICAgICAgICAgICAgICAgICAgPCAkV29ya2luZ0RheXMgLSAkTWF4SW50ZXJ2YWxsT2ZJbmNvbXBsZXRlRGF5cwogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkRGF0YXtFbmZvcmNlSW5zZXJ0fSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoCiAgICAgICAgICAgICAgICAgICAgJERhdGF7SW5jb21wbGV0ZX17JFllYXJ9eyRNb250aH17JERheX0KICAgICAgICAgICAgICAgICAgICA8ICRXb3JraW5nRGF5cyAtICRNYXhJbnRlcnZhbGxPZkluY29tcGxldGVEYXlzQmVmb3JlV2FybmluZwogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAkRGF0YXtXYXJuaW5nfSA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICVEYXRhOwp9Cgo9aXRlbSBXb3JraW5nVW5pdHNHZXQoKQoKcmV0dXJucyBhIGhhc2ggd2l0aCB0aGUgd29ya2luZyB1bml0cyBkYXRhCgogICAgbXkgJVdvcmtpbmdVbml0c0RhdGEgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPldvcmtpbmdVbml0c0dldCgKICAgICAgICBZZWFyICAgPT4gJzIwMDUnLAogICAgICAgIE1vbnRoICA9PiAnNycsCiAgICAgICAgRGF5ICAgID0+ICcxMycsCiAgICAgICAgVXNlcklEID0+ICcyJywgICAgIyBPcHRpb25hbAogICAgKTsKCj1jdXQKCnN1YiBXb3JraW5nVW5pdHNHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAkUGFyYW17VXNlcklEfSB8fD0gJFNlbGYtPntVc2VySUR9OwoKICAgIG15ICREYXRlICAgICAgPSBzcHJpbnRmICIlMDRkLSUwMmQtJTAyZCIsICRQYXJhbXtZZWFyfSwgJFBhcmFte01vbnRofSwgJFBhcmFte0RheX07CiAgICBteSAkRGF0ZVN0YXJ0ID0gJERhdGUgLiAiIDAwOjAwOjAwIjsKICAgIG15ICREYXRlU3RvcCAgPSAkRGF0ZSAuICIgMjM6NTk6NTkiOwoKICAgICMgYXNrIHRoZSBkYXRhYmFzZQogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgdXNlcl9pZCwgcHJvamVjdF9pZCwgYWN0aW9uX2lkLCByZW1hcmssIHRpbWVfc3RhcnQsIHRpbWVfZW5kLCBwZXJpb2QgJwogICAgICAgICAgICAuICdGUk9NIHRpbWVfYWNjb3VudGluZ190YWJsZSAnCiAgICAgICAgICAgIC4gJ1dIRVJFIHRpbWVfc3RhcnQgPj0gPyBBTkQgdGltZV9zdGFydCA8PSA/IEFORCB1c2VyX2lkID0gPyAnCiAgICAgICAgICAgIC4gJ09SREVSIGJ5IGlkJywKICAgICAgICBCaW5kID0+IFsgXCREYXRlU3RhcnQsIFwkRGF0ZVN0b3AsIFwkUGFyYW17VXNlcklEfSBdLAogICAgKTsKCiAgICBteSAlRGF0YSA9ICgKICAgICAgICBUb3RhbCA9PiAwLAogICAgICAgIERhdGUgID0+ICREYXRlLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIFJPVzoKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CgogICAgICAgIG5leHQgUk9XIGlmICRSb3dbNF0gIX4gbXteICguKz8pIFxzIChcZCs6XGQrKSA6IChcZCspIH14bXM7CgogICAgICAgICMgY2hlY2sgaWYgaXQgaXMgYSBzcGVjaWFsIHdvcmtpbmcgdW5pdAogICAgICAgIGlmICggJFJvd1sxXSA9PSAtMSApIHsKICAgICAgICAgICAgbXkgJEFjdGlvbklEID0gJFJvd1syXTsKCiAgICAgICAgICAgICREYXRhe1NpY2t9ICAgICA9ICRBY3Rpb25JRCA9PSAtMSA/IDEgOiAwOwogICAgICAgICAgICAkRGF0YXtMZWF2ZURheX0gPSAkQWN0aW9uSUQgPT0gLTIgPyAxIDogMDsKICAgICAgICAgICAgJERhdGF7T3ZlcnRpbWV9ID0gJEFjdGlvbklEID09IC0zID8gMSA6IDA7CgogICAgICAgICAgICBuZXh0IFJPVzsKICAgICAgICB9CgogICAgICAgIG15ICRTdGFydFRpbWUgPSAkMjsKICAgICAgICBteSAkRW5kVGltZSAgID0gJyc7CiAgICAgICAgaWYgKCAkUm93WzVdID1+IG17XiguKz8pXHMoXGQrOlxkKyk6KFxkKyl9eG1zICkgewogICAgICAgICAgICAkRW5kVGltZSA9ICQyOwoKICAgICAgICAgICAgIyByZXBsYWNlIDIzOjU5OjU5IHdpdGggMjQ6MDAKICAgICAgICAgICAgaWYgKCAkRW5kVGltZSBlcSAnMjM6NTknICYmICQzIGVxICc1OScgKSB7CiAgICAgICAgICAgICAgICAkRW5kVGltZSA9ICcyNDowMCc7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG15ICVXb3JraW5nVW5pdCA9ICgKICAgICAgICAgICAgVXNlcklEICAgID0+ICRSb3dbMF0sCiAgICAgICAgICAgIFByb2plY3RJRCA9PiAkUm93WzFdLAogICAgICAgICAgICBBY3Rpb25JRCAgPT4gJFJvd1syXSwKICAgICAgICAgICAgUmVtYXJrICAgID0+ICRSb3dbM10sCiAgICAgICAgICAgIFN0YXJ0VGltZSA9PiAkU3RhcnRUaW1lLAogICAgICAgICAgICBFbmRUaW1lICAgPT4gJEVuZFRpbWUsCiAgICAgICAgICAgIFBlcmlvZCAgICA9PiBkZWZpbmVkKCAkUm93WzZdICkgPyBzcHJpbnRmKCAiJS4yZiIsICRSb3dbNl0gKSA6IDAsCiAgICAgICAgKTsKCiAgICAgICAgIyBvbmx5IGNvdW50IGNvbXBsZXRlIHdvcmtpbmcgdW5pdHMKICAgICAgICBpZiAoICRSb3dbMV0gJiYgJFJvd1syXSApIHsKICAgICAgICAgICAgJERhdGF7VG90YWx9ICs9ICRXb3JraW5nVW5pdHtQZXJpb2R9OwogICAgICAgIH0KCiAgICAgICAgcHVzaCBAeyAkRGF0YXtXb3JraW5nVW5pdHN9IH0sIFwlV29ya2luZ1VuaXQ7CiAgICB9CgogICAgcmV0dXJuICVEYXRhOwp9Cgo9aXRlbSBXb3JraW5nVW5pdHNJbnNlcnQoKQoKaW5zZXJ0IHdvcmtpbmcgdW5pdHMgaW4gdGhlIGRiCgogICAgJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Xb3JraW5nVW5pdHNJbnNlcnQoCiAgICAgICAgWWVhciAgPT4gJzIwMDUnLAogICAgICAgIE1vbnRoID0+ICcwNycsCiAgICAgICAgRGF5ICAgPT4gJzAyJywKICAgICAgICBMZWF2ZURheSA9PiAxLCB8fCAwCiAgICAgICAgU2ljayAgICAgPT4gMSwgfHwgMAogICAgICAgIE92ZXJ0aW1lID0+IDEsIHx8IDAKICAgICAgICBXb3JraW5nVW5pdHMgPT4gWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBQcm9qZWN0SUQgPT4gMSwKICAgICAgICAgICAgICAgIEFjdGlvbklEICA9PiAyMywKICAgICAgICAgICAgICAgIFJlbWFyayAgICA9PiAnU29tZVRleHQnLAogICAgICAgICAgICAgICAgU3RhcnRUaW1lID0+ICc3OjMwJywKICAgICAgICAgICAgICAgIEVuZFRpbWUgICA9PiAnMTE6MDAnLAogICAgICAgICAgICAgICAgUGVyaW9kICAgID0+ICc4LjUnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7IC4uLi4uLiB9LAogICAgICAgIF0KICAgICk7Cgo9Y3V0CgpzdWIgV29ya2luZ1VuaXRzSW5zZXJ0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgZm9yIChxdyhZZWFyIE1vbnRoIERheSkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JF99ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiV29ya2luZ1VuaXRzSW5zZXJ0OiBOZWVkICRfISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkRGF0ZSA9IHNwcmludGYgIiUwNGQtJTAyZC0lMDJkIiwgJFBhcmFte1llYXJ9LCAkUGFyYW17TW9udGh9LCAkUGFyYW17RGF5fTsKCiAgICAjIGFkZCBzcGVjaWFsIHRpbWUgd29ya2luZyB1bml0cwogICAgbXkgJVNwZWNpYWxBY3Rpb24gPSAoCiAgICAgICAgJ1NpY2snICAgICA9PiAnLTEnLAogICAgICAgICdMZWF2ZURheScgPT4gJy0yJywKICAgICAgICAnT3ZlcnRpbWUnID0+ICctMycsCiAgICApOwoKICAgIEVMRU1FTlQ6CiAgICBmb3IgbXkgJEVsZW1lbnQgKHF3KExlYXZlRGF5IFNpY2sgT3ZlcnRpbWUpKSB7CgogICAgICAgIG5leHQgRUxFTUVOVCBpZiAhJFBhcmFteyRFbGVtZW50fTsKCiAgICAgICAgbXkgJVVuaXQgPSAoCiAgICAgICAgICAgIFByb2plY3RJRCA9PiAtMSwKICAgICAgICAgICAgQWN0aW9uSUQgID0+ICRTcGVjaWFsQWN0aW9ueyRFbGVtZW50fSwKICAgICAgICAgICAgUmVtYXJrICAgID0+ICcnLAogICAgICAgICAgICBTdGFydFRpbWUgPT4gJycsCiAgICAgICAgICAgIEVuZFRpbWUgICA9PiAnJywKICAgICAgICAgICAgUGVyaW9kICAgID0+IDAsCiAgICAgICAgKTsKCiAgICAgICAgcHVzaCBAeyAkUGFyYW17V29ya2luZ1VuaXRzfSB9LCBcJVVuaXQ7CiAgICB9CgogICAgIyBpbnNlcnQgbmV3IHdvcmtpbmcgdW5pdHMKICAgIFVOSVRSRUY6CiAgICBmb3IgbXkgJFVuaXRSZWYgKCBAeyAkUGFyYW17V29ya2luZ1VuaXRzfSB9ICkgewoKICAgICAgICBteSAkU3RhcnRUaW1lID0gJERhdGUgLiAnICcgLiAkVW5pdFJlZi0+e1N0YXJ0VGltZX07CiAgICAgICAgbXkgJEVuZFRpbWUgICA9ICREYXRlIC4gJyAnIC4gJFVuaXRSZWYtPntFbmRUaW1lfTsKCiAgICAgICAgIyAnJyBkb2VzIG5vdCB3b3JrIGluIGludGVnZXIgZmllbGQgb2YgcG9zdGdyZXMKICAgICAgICAkVW5pdFJlZi0+e1Byb2plY3RJRH0gfHw9IDA7CiAgICAgICAgJFVuaXRSZWYtPntBY3Rpb25JRH0gIHx8PSAwOwogICAgICAgICRVbml0UmVmLT57UGVyaW9kfSAgICB8fD0gMDsKCiAgICAgICAgIyBidWlsZCBzcWwKICAgICAgICBteSAkU1FMID0gIklOU0VSVCBJTlRPIHRpbWVfYWNjb3VudGluZ190YWJsZSAiCiAgICAgICAgICAgIC4gIih1c2VyX2lkLCBwcm9qZWN0X2lkLCBhY3Rpb25faWQsIHJlbWFyaywiCiAgICAgICAgICAgIC4gIiB0aW1lX3N0YXJ0LCB0aW1lX2VuZCwgcGVyaW9kLCBjcmVhdGVkICkiCiAgICAgICAgICAgIC4gIiBWQUxVRVMgICggPywgPywgPywgPywgPywgPywgPywgY3VycmVudF90aW1lc3RhbXApIjsKICAgICAgICBteSAkQmluZCA9IFsKICAgICAgICAgICAgXCRTZWxmLT57VXNlcklEfSwgXCRVbml0UmVmLT57UHJvamVjdElEfSwgXCRVbml0UmVmLT57QWN0aW9uSUR9LAogICAgICAgICAgICBcJFVuaXRSZWYtPntSZW1hcmt9LCBcJFN0YXJ0VGltZSwgXCRFbmRUaW1lLCBcJFVuaXRSZWYtPntQZXJpb2R9LAogICAgICAgIF07CgogICAgICAgICMgZGIgaW5zZXJ0CiAgICAgICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgICAgIFNRTCAgPT4gJFNRTCwKICAgICAgICAgICAgQmluZCA9PiAkQmluZAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIFdvcmtpbmdVbml0c0RlbGV0ZSgpCgpkZWxldGVzIHdvcmtpbmcgdW5pdHMgaW4gdGhlIGRiCgogICAgJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Xb3JraW5nVW5pdHNEZWxldGUoCiAgICAgICAgWWVhciAgPT4gJzIwMDUnLAogICAgICAgIE1vbnRoID0+ICc3JywKICAgICAgICBEYXkgICA9PiAnMTMnLAogICAgKTsKCj1jdXQKCnN1YiBXb3JraW5nVW5pdHNEZWxldGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBmb3IgKHF3KFllYXIgTW9udGggRGF5KSkgewogICAgICAgIGlmICggISRQYXJhbXskX30gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJXb3JraW5nVW5pdHNJbnNlcnQ6IE5lZWQgJF8hIgogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIG15ICREYXRlICAgICAgPSBzcHJpbnRmICIlMDRkLSUwMmQtJTAyZCIsICRQYXJhbXtZZWFyfSwgJFBhcmFte01vbnRofSwgJFBhcmFte0RheX07CiAgICBteSAkU3RhcnRUaW1lID0gJERhdGUgLiAnIDAwOjAwOjAwJzsKICAgIG15ICRFbmRUaW1lICAgPSAkRGF0ZSAuICcgMjM6NTk6NTknOwoKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAnREVMRVRFIEZST00gdGltZV9hY2NvdW50aW5nX3RhYmxlJwogICAgICAgICAgICAuICcgV0hFUkUgdGltZV9zdGFydCA+PSA/JwogICAgICAgICAgICAuICcgQU5EIHRpbWVfc3RhcnQgPD0gPycKICAgICAgICAgICAgLiAnIEFORCB1c2VyX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkU3RhcnRUaW1lLCBcJEVuZFRpbWUsIFwkU2VsZi0+e1VzZXJJRH0sIF0sCiAgICApOwogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIFByb2plY3RBY3Rpb25SZXBvcnRpbmcoKQoKcmV0dXJucyBhIGhhc2ggd2l0aCB0aGUgaG91cnMgZGVwZW5kZW50IHByb2plY3QgYW5kIGFjdGlvbiBkYXRhCgogICAgbXkgJVByb2plY3REYXRhID0gJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Qcm9qZWN0QWN0aW9uUmVwb3J0aW5nKAogICAgICAgIFllYXIgID0+IDIwMDUsCiAgICAgICAgTW9udGggPT4gNywKICAgICAgICBVc2VySUQgPT4gMTIzLCAjIG9wdGlvbmFsOyBubyBVc2VySUQgbWVhbnMgJ29mIGFsbCB1c2VycycKICAgICk7Cgo9Y3V0CgpzdWIgUHJvamVjdEFjdGlvblJlcG9ydGluZyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgIGZvciBteSAkUGFyYW1ldGVyIChxdyhZZWFyIE1vbnRoKSkgewogICAgICAgICRQYXJhbXskUGFyYW1ldGVyfSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJFBhcmFteyRQYXJhbWV0ZXJ9ICkgfHwgJyc7CiAgICAgICAgaWYgKCAhJFBhcmFteyRQYXJhbWV0ZXJ9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiUHJvamVjdEFjdGlvblJlcG9ydGluZzogTmVlZCAkUGFyYW1ldGVyISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAkSURTZWxlY3QgPSAnJzsKICAgIGlmICggJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJFBhcmFte1VzZXJJRH0gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXtVc2VySUR9ICkgfHwgJyc7CiAgICAgICAgJElEU2VsZWN0ID0gIiBBTkQgdXNlcl9pZCA9ICckUGFyYW17VXNlcklEfSciOwogICAgfQoKICAgICMgaG91cnMgcGVyIG1vbnRoCiAgICBteSAkRGF5c0luTW9udGggPSBEYXlzX2luX01vbnRoKCAkUGFyYW17WWVhcn0sICRQYXJhbXtNb250aH0gKTsKICAgIG15ICREYXRlU3RyaW5nID0gJFBhcmFte1llYXJ9IC4gIi0iIC4gc3ByaW50ZiggIiUwMmQiLCAkUGFyYW17TW9udGh9ICk7CgogICAgbXkgJFNRTFF1ZXJ5VGltZVN0YXJ0ID0gInRpbWVfc3RhcnQgPD0gJyREYXRlU3RyaW5nLSREYXlzSW5Nb250aCAyMzo1OTo1OSckSURTZWxlY3QiOwoKICAgICMgdG90YWwgaG91cnMKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUIHByb2plY3RfaWQsIGFjdGlvbl9pZCwgcGVyaW9kIEZST00gdGltZV9hY2NvdW50aW5nX3RhYmxlIgogICAgICAgICAgICAuICIgV0hFUkUgcHJvamVjdF9pZCAhPSAtMSBBTkQgJFNRTFF1ZXJ5VGltZVN0YXJ0IiwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgZGF0YQogICAgbXkgJURhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewoKICAgICAgICBuZXh0IGlmICEkUm93WzJdOwoKICAgICAgICAkRGF0YXsgJFJvd1swXSB9e0FjdGlvbnN9eyAkUm93WzFdIH17VG90YWx9ICs9ICRSb3dbMl07CiAgICB9CgogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICJTRUxFQ1QgcHJvamVjdF9pZCwgYWN0aW9uX2lkLCBwZXJpb2QgRlJPTSB0aW1lX2FjY291bnRpbmdfdGFibGUiCiAgICAgICAgICAgIC4gIiBXSEVSRSBwcm9qZWN0X2lkICE9IC0xICIKICAgICAgICAgICAgLiAiIEFORCB0aW1lX3N0YXJ0ID49ICckRGF0ZVN0cmluZy0wMSAwMDowMDowMCcgIgogICAgICAgICAgICAuICIgQU5EICRTUUxRdWVyeVRpbWVTdGFydCIsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIGRhdGEKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CgogICAgICAgIG5leHQgaWYgISRSb3dbMl07CgogICAgICAgICREYXRheyAkUm93WzBdIH0tPntBY3Rpb25zfS0+eyAkUm93WzFdIH0tPntQZXJNb250aH0gKz0gJFJvd1syXTsKICAgIH0KCiAgICAjIGFkZCByZWFkYWJsZSBjb21wb25lbnRzCiAgICBteSAlUHJvamVjdCA9ICRTZWxmLT5Qcm9qZWN0U2V0dGluZ3NHZXQoKTsKICAgIG15ICVBY3Rpb24gID0gJFNlbGYtPkFjdGlvblNldHRpbmdzR2V0KCk7CgogICAgZm9yIG15ICRQcm9qZWN0SUQgKCBzb3J0IGtleXMgJURhdGEgKSB7CgogICAgICAgICREYXRheyRQcm9qZWN0SUR9LT57TmFtZX0gICAgICAgID0gJFByb2plY3R7UHJvamVjdH0tPnskUHJvamVjdElEfSB8fCAnJzsKICAgICAgICAkRGF0YXskUHJvamVjdElEfS0+e1N0YXR1c30gICAgICA9ICRQcm9qZWN0e1Byb2plY3RTdGF0dXN9LT57JFByb2plY3RJRH07CiAgICAgICAgJERhdGF7JFByb2plY3RJRH0tPntEZXNjcmlwdGlvbn0gPSAkUHJvamVjdHtQcm9qZWN0RGVzY3JpcHRpb259LT57JFByb2plY3RJRH07CgogICAgICAgIG15ICRBY3Rpb25zUmVmID0gJERhdGF7JFByb2plY3RJRH0tPntBY3Rpb25zfTsKCiAgICAgICAgZm9yIG15ICRBY3Rpb25JRCAoIHNvcnQga2V5cyAleyRBY3Rpb25zUmVmfSApIHsKICAgICAgICAgICAgJERhdGF7JFByb2plY3RJRH0tPntBY3Rpb25zfS0+eyRBY3Rpb25JRH0tPntOYW1lfSA9ICRBY3Rpb257JEFjdGlvbklEfS0+e0FjdGlvbn0gfHwgJyc7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAlRGF0YTsKfQoKPWl0ZW0gUHJvamVjdFRvdGFsSG91cnMoKQoKcmV0dXJucyB0aGUgc3VtIG9mIGFsbCBob3VycyByZWxhdGVkIHRvIGEgcHJvamVjdAoKICAgIG15ICRQcm9qZWN0VG90YWxIb3VycyA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+UHJvamVjdFRvdGFsSG91cnMoCiAgICAgICAgUHJvamVjdElEICA9PiAxNSwKICAgICk7Cgo9Y3V0CgpzdWIgUHJvamVjdFRvdGFsSG91cnMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBwYXJhbQogICAgaWYgKCAhJFBhcmFte1Byb2plY3RJRH0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdQcm9qZWN0QWN0aW9uUmVwb3J0aW5nOiBOZWVkIFByb2plY3RJRCEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBhc2sgdGhlIGRhdGFiYXNlCiAgICByZXR1cm4gaWYgISRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgU1VNKHBlcmlvZCkgRlJPTSB0aW1lX2FjY291bnRpbmdfdGFibGUgV0hFUkUgcHJvamVjdF9pZCA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtQcm9qZWN0SUR9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkVG90YWwgPSAwOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkVG90YWwgPSAkUm93WzBdOwogICAgfQoKICAgIHJldHVybiAkVG90YWw7Cn0KCj1pdGVtIFByb2plY3RIaXN0b3J5KCkKCnJldHVybnMgYW4gYXJyYXkgd2l0aCBhbGwgV29ya2luZ1VuaXRzIHJlbGF0ZWQgdG8gYSBwcm9qZWN0CgogICAgbXkgQFByb2plY3RIaXN0b3J5QXJyYXkgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPlByb2plY3RIaXN0b3J5KAogICAgICAgIFByb2plY3RJRCAgPT4gMTUsCiAgICApOwoKVGhpcyB3b3VsZCByZXR1cm4KCiAgICBAUHJvamVjdEhpc3RvcnlBcnJheSA9ICgKICAgICAgICB7CiAgICAgICAgICAgIElEICAgICAgICA9PiA5OTksCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxNSwKICAgICAgICAgICAgVXNlciAgICAgID0+ICdUb20nLAogICAgICAgICAgICBBY3Rpb25JRCAgPT4gNiwKICAgICAgICAgICAgQWN0aW9uICAgID0+ICdtaXNjJywKICAgICAgICAgICAgUmVtYXJrICAgID0+ICdyZW1hcmsnLAogICAgICAgICAgICBUaW1lU3RhcnQgPT4gJzc6MDAnLAogICAgICAgICAgICBUaW1lRW5kICAgPT4gJzE4OjAwJywKICAgICAgICAgICAgRGF0ZSAgICAgID0+ICcyMDA4LTEwLTMxJywgIyB0aGUgZGF0ZSBvZiB0aGUgd29ya2luZyB1bml0CiAgICAgICAgICAgIFBlcmlvZCAgICA9PiAxMSwKICAgICAgICAgICAgQ3JlYXRlZCAgID0+ICcyMDA4LTExLTAxJywgIyB0aGUgaW5zZXJ0IHRpbWUgb2YgdGhlIHdvcmtpbmcgdW5pdAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBJRCAgICAgICAgPT4gOTk5LAogICAgICAgICAgICBVc2VySUQgICAgPT4gMTYsCiAgICAgICAgICAgIFVzZXIgICAgICA9PiAnTWFuZScsCiAgICAgICAgICAgIEFjdGlvbklEICA9PiA3LAogICAgICAgICAgICBBY3Rpb24gICAgPT4gJ2RldmVsb3BtZW50JywKICAgICAgICAgICAgUmVtYXJrICAgID0+ICdyZW1hcmsnLAogICAgICAgICAgICBUaW1lU3RhcnQgPT4gJzc6MDAnLAogICAgICAgICAgICBUaW1lRW5kICAgPT4gJzE4OjAwJywKICAgICAgICAgICAgUGVyaW9kICAgID0+IDExLAogICAgICAgICAgICBEYXRlICAgICAgPT4gJzIwMDgtMTEtMDMnLAogICAgICAgICAgICBDcmVhdGVkICAgPT4gJzIwMDgtMTEtMDMnLAogICAgICAgIH0KICAgICk7Cgo9Y3V0CgpzdWIgUHJvamVjdEhpc3RvcnkgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBwYXJhbQogICAgaWYgKCAhJFBhcmFte1Byb2plY3RJRH0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdQcm9qZWN0QWN0aW9uUmVwb3J0aW5nOiBOZWVkIFByb2plY3RJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2FsbCBhY3Rpb24gZGF0YSB0byBnZXQgdGhlIHJlYWRhYmxlIG5hbWUgb2YgdGhlIGFjdGlvbgogICAgbXkgJUFjdGlvbkRhdGEgPSAkU2VsZi0+QWN0aW9uU2V0dGluZ3NHZXQoKTsKCiAgICAjIGdldCB1c2VyIGxpc3QKICAgIG15ICVTaG93blVzZXJzID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+VXNlckxpc3QoCiAgICAgICAgVHlwZSAgPT4gJ0xvbmcnLAogICAgICAgIFZhbGlkID0+IDAsCiAgICApOwoKICAgICMgYXNrIHRoZSBkYXRhYmFzZQogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQsIHVzZXJfaWQsIGFjdGlvbl9pZCwgcmVtYXJrLCB0aW1lX3N0YXJ0LCB0aW1lX2VuZCwgcGVyaW9kLCBjcmVhdGVkJwogICAgICAgICAgICAuICcgRlJPTSB0aW1lX2FjY291bnRpbmdfdGFibGUgV0hFUkUgcHJvamVjdF9pZCA9ID8gT1JERVIgQlkgdGltZV9zdGFydCcsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17UHJvamVjdElEfSBdLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15IEBEYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKCiAgICAgICAgbXkgJFVzZXJSZWYgPSB7CiAgICAgICAgICAgIElEICAgICAgICA9PiAkUm93WzBdLAogICAgICAgICAgICBVc2VySUQgICAgPT4gJFJvd1sxXSwKICAgICAgICAgICAgVXNlciAgICAgID0+ICRTaG93blVzZXJzeyAkUm93WzFdIH0sCiAgICAgICAgICAgIEFjdGlvbklEICA9PiAkUm93WzJdLAogICAgICAgICAgICBBY3Rpb24gICAgPT4gJEFjdGlvbkRhdGF7ICRSb3dbMl0gfXtBY3Rpb259LAogICAgICAgICAgICBSZW1hcmsgICAgPT4gJFJvd1szXSB8fCAnJywKICAgICAgICAgICAgVGltZVN0YXJ0ID0+ICRSb3dbNF0sCiAgICAgICAgICAgIFRpbWVFbmQgICA9PiAkUm93WzVdLAogICAgICAgICAgICBEYXRlICAgICAgPT4gJFJvd1s0XSwKICAgICAgICAgICAgUGVyaW9kICAgID0+ICRSb3dbNl0sCiAgICAgICAgICAgIENyZWF0ZWQgICA9PiAkUm93WzddLAogICAgICAgIH07CiAgICAgICAgJFVzZXJSZWYtPntEYXRlfSA9fiBzeyhcZFxkXGRcZC1cZFxkLVxkXGQpIFxzIC4rIH17JDF9eG1zOwoKICAgICAgICBwdXNoIEBEYXRhLCAkVXNlclJlZjsKICAgIH0KCiAgICByZXR1cm4gQERhdGE7Cn0KCj1pdGVtIExhc3RQcm9qZWN0c09mVXNlcigpCgpyZXR1cm5zIGFuIGFycmF5IHdpdGggdGhlIGxhc3QgcHJvamVjdHMgb2YgdGhlIGN1cnJlbnQgdXNlcgoKICAgIG15IEBMYXN0UHJvamVjdHMgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPkxhc3RQcm9qZWN0c09mVXNlcigpOwoKPWN1dAoKc3ViIExhc3RQcm9qZWN0c09mVXNlciB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgZGIgc2VsZWN0CiAgICAjIEkgZG9uJ3QgdXNlIGRpc3RpbmN0IGJlY2F1c2Ugb2YgT1JERVIgQlkgcHJvYmxlbXMgb2YgcG9zdGdyZSBzcWwKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgcHJvamVjdF9pZCBGUk9NIHRpbWVfYWNjb3VudGluZ190YWJsZSAnCiAgICAgICAgICAgIC4gJ1dIRVJFIHVzZXJfaWQgPSA/IEFORCBwcm9qZWN0X2lkIDw+IC0xIE9SREVSIEJZIHRpbWVfc3RhcnQgREVTQycsCiAgICAgICAgQmluZCAgPT4gWyBcJFNlbGYtPntVc2VySUR9IF0sCiAgICAgICAgTGltaXQgPT4gNDAsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJVByb2plY3RzOwogICAgbXkgJENvdW50ZXIgPSAwOwogICAgUk9XOgogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKCiAgICAgICAgbmV4dCBST1cgaWYgJENvdW50ZXIgPiA3OwogICAgICAgIG5leHQgUk9XIGlmICRQcm9qZWN0c3sgJFJvd1swXSB9OwoKICAgICAgICAkUHJvamVjdHN7ICRSb3dbMF0gfSA9IDE7CiAgICAgICAgJENvdW50ZXIrKzsKICAgIH0KCiAgICByZXR1cm4ga2V5cyAlUHJvamVjdHM7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpTeXN0ZW06OlN0YXRzOjpEeW5hbWljOjpUaW1lQWNjb3VudGluZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6VGltZUFjY291bnRpbmc7CnVzZSBEYXRlOjpQY2FsYyBxdyggQWRkX0RlbHRhX0RheXMgQWRkX0RlbHRhX1lNRCApOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAoCiAgICAgICAgcXcoREJPYmplY3QgQ29uZmlnT2JqZWN0IExvZ09iamVjdCBVc2VyT2JqZWN0IFRpbWVPYmplY3QgTWFpbk9iamVjdCBFbmNvZGVPYmplY3QpCiAgICAgICAgKQogICAgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQoKICAgICMgY3JlYXRlIGFkZGl0aW9uYWwgbmVlZGVkIG9iamVjdHMKICAgICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OlRpbWVBY2NvdW50aW5nLT5uZXcoCiAgICAgICAgJXskU2VsZn0sCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIEdldE9iamVjdE5hbWUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICByZXR1cm4gJ1RpbWVBY2NvdW50aW5nJzsKfQoKc3ViIEdldE9iamVjdEF0dHJpYnV0ZXMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHNldCBwcmVkZWZpbmVkIHN0YXJ0IHRpbWUKICAgIG15ICRUaW1lU3RhbXAgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5DdXJyZW50VGltZXN0YW1wKCk7CiAgICBteSAoJERhdGUpID0gc3BsaXQgL1xzKy8sICRUaW1lU3RhbXA7CiAgICBteSAkVG9kYXkgPSBzcHJpbnRmICIlcyAyMzo1OTo1OSIsICREYXRlOwoKICAgICMgZ2V0IHByb2plY3QgbGlzdAogICAgbXkgJVByb2plY3RMaXN0ID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPlByb2plY3RTZXR0aW5nc0dldCgKICAgICAgICBTdGF0dXMgPT4gJ3ZhbGlkJywKICAgICk7CgogICAgIyBnZXQgYWN0aW9uIGxpc3QKICAgIG15ICVBY3Rpb25MaXN0U291cmNlID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPkFjdGlvblNldHRpbmdzR2V0KCk7CiAgICBteSAlQWN0aW9uTGlzdDsKCiAgICBmb3IgbXkgJEFjdGlvbiAoIHNvcnQga2V5cyAlQWN0aW9uTGlzdFNvdXJjZSApIHsKICAgICAgICAkQWN0aW9uTGlzdHskQWN0aW9ufSA9ICRBY3Rpb25MaXN0U291cmNleyRBY3Rpb259LT57QWN0aW9ufTsKICAgIH0KCiAgICAjIGdldCB1c2VyIGxpc3QKICAgIG15ICVVc2VyTGlzdCA9ICRTZWxmLT57VXNlck9iamVjdH0tPlVzZXJMaXN0KAogICAgICAgIFR5cGUgID0+ICdMb25nJywKICAgICAgICBWYWxpZCA9PiAwLAogICAgKTsKCiAgICBteSBAQXR0cmlidXRlcyA9ICgKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJ1Byb2plY3QnLAogICAgICAgICAgICBVc2VBc1h2YWx1ZSAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZUFzVmFsdWVTZXJpZXMgPT4gMCwKICAgICAgICAgICAgVXNlQXNSZXN0cmljdGlvbiA9PiAxLAogICAgICAgICAgICBFbGVtZW50ICAgICAgICAgID0+ICdQcm9qZWN0JywKICAgICAgICAgICAgQmxvY2sgICAgICAgICAgICA9PiAnTXVsdGlTZWxlY3RGaWVsZCcsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uICAgICAgPT4gMCwKICAgICAgICAgICAgVmFsdWVzICAgICAgICAgICA9PiAkUHJvamVjdExpc3R7UHJvamVjdH0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgPT4gJ1VzZXInLAogICAgICAgICAgICBVc2VBc1h2YWx1ZSAgICAgID0+IDEsCiAgICAgICAgICAgIFVzZUFzVmFsdWVTZXJpZXMgPT4gMCwKICAgICAgICAgICAgVXNlQXNSZXN0cmljdGlvbiA9PiAxLAogICAgICAgICAgICBFbGVtZW50ICAgICAgICAgID0+ICdVc2VyJywKICAgICAgICAgICAgQmxvY2sgICAgICAgICAgICA9PiAnTXVsdGlTZWxlY3RGaWVsZCcsCiAgICAgICAgICAgIFRyYW5zbGF0aW9uICAgICAgPT4gMCwKICAgICAgICAgICAgVmFsdWVzICAgICAgICAgICA9PiBcJVVzZXJMaXN0LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICdTb3J0IHNlcXVlbmNlJywKICAgICAgICAgICAgVXNlQXNYdmFsdWUgICAgICA9PiAwLAogICAgICAgICAgICBVc2VBc1ZhbHVlU2VyaWVzID0+IDEsCiAgICAgICAgICAgIFVzZUFzUmVzdHJpY3Rpb24gPT4gMCwKICAgICAgICAgICAgRWxlbWVudCAgICAgICAgICA9PiAnU29ydFNlcXVlbmNlJywKICAgICAgICAgICAgQmxvY2sgICAgICAgICAgICA9PiAnU2VsZWN0RmllbGQnLAogICAgICAgICAgICBUcmFuc2xhdGlvbiAgICAgID0+IDAsCiAgICAgICAgICAgIFZhbHVlcyAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgVXAgICA9PiAnYXNjZW5kaW5nJywKICAgICAgICAgICAgICAgIERvd24gPT4gJ2Rlc2NlbmRpbmcnLAogICAgICAgICAgICB9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICdUYXNrJywKICAgICAgICAgICAgVXNlQXNYdmFsdWUgICAgICA9PiAwLAogICAgICAgICAgICBVc2VBc1ZhbHVlU2VyaWVzID0+IDAsCiAgICAgICAgICAgIFVzZUFzUmVzdHJpY3Rpb24gPT4gMSwKICAgICAgICAgICAgRWxlbWVudCAgICAgICAgICA9PiAnUHJvamVjdEFjdGlvbicsCiAgICAgICAgICAgIEJsb2NrICAgICAgICAgICAgPT4gJ011bHRpU2VsZWN0RmllbGQnLAogICAgICAgICAgICBUcmFuc2xhdGlvbiAgICAgID0+IDAsCiAgICAgICAgICAgIFZhbHVlcyAgICAgICAgICAgPT4gXCVBY3Rpb25MaXN0LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBOYW1lICAgICAgICAgICAgID0+ICdQZXJpb2QnLAogICAgICAgICAgICBVc2VBc1h2YWx1ZSAgICAgID0+IDAsCiAgICAgICAgICAgIFVzZUFzVmFsdWVTZXJpZXMgPT4gMCwKICAgICAgICAgICAgVXNlQXNSZXN0cmljdGlvbiA9PiAxLAogICAgICAgICAgICBFbGVtZW50ICAgICAgICAgID0+ICdQZXJpb2QnLAogICAgICAgICAgICBUaW1lUGVyaW9kRm9ybWF0ID0+ICdEYXRlSW5wdXRGb3JtYXQnLCAgICAjICdEYXRlSW5wdXRGb3JtYXRMb25nJywKICAgICAgICAgICAgQmxvY2sgICAgICAgICAgICA9PiAnVGltZScsCiAgICAgICAgICAgIFZhbHVlcyAgICAgICAgICAgPT4gewogICAgICAgICAgICAgICAgVGltZVN0YXJ0ID0+ICdUaW1lQWNjb3VudGluZ1BlcmlvZFN0YXJ0JywKICAgICAgICAgICAgICAgIFRpbWVTdG9wICA9PiAnVGltZUFjY291bnRpbmdQZXJpb2RTdG9wJywKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgKTsKCiAgICByZXR1cm4gQEF0dHJpYnV0ZXM7Cn0KCnN1YiBHZXRIZWFkZXJMaW5lIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CiAgICBteSBASGVhZGVyTGluZSA9ICgiIik7CgogICAgIyBVc2VycyBhcyBYLXZhbHVlCiAgICBpZiAoICRQYXJhbXtYVmFsdWV9e0VsZW1lbnR9ICYmICRQYXJhbXtYVmFsdWV9e0VsZW1lbnR9IGVxICdVc2VyJyApIHsKCiAgICAgICAgIyB1c2VyIGhhdmUgYmVlbiBzZWxlY3RlZCBhcyB4LXZhbHVlCiAgICAgICAgbXkgQFVzZXJJRHMgPSBAeyAkUGFyYW17WFZhbHVlfXtTZWxlY3RlZFZhbHVlc30gfTsKCiAgICAgICAgIyBpdGVyYXRlIG92ZXIgc2VsZWN0ZWQgdXNlcnMKICAgICAgICBVU0VSSUQ6CiAgICAgICAgZm9yIG15ICRVc2VySUQgKEBVc2VySURzKSB7CiAgICAgICAgICAgIG15ICRVc2VyTmFtZSA9ICRTZWxmLT57VXNlck9iamVjdH0tPlVzZXJOYW1lKAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBwdXNoIEBIZWFkZXJMaW5lLCAkVXNlck5hbWU7CiAgICAgICAgfQogICAgfQoKICAgICMgUHJvamVjdHMgYXMgWC12YWx1ZQogICAgZWxzZSB7CiAgICAgICAgIyBwcm9qZWN0cyBoYXZlIGJlZW4gc2VsZXZ0ZWQgYXMgeC12YWx1ZQogICAgICAgIG15IEBQcm9qZWN0SURzID0gQHsgJFBhcmFte1hWYWx1ZX17U2VsZWN0ZWRWYWx1ZXN9IH07CgogICAgICAgICMgaXRlcmF0ZSBvdmVyIHNlbGVjdGVkIHByb2plY3RzCiAgICAgICAgUFJPSkVDVElEOgogICAgICAgIGZvciBteSAkUHJvamVjdElEIChAUHJvamVjdElEcykgewogICAgICAgICAgICBteSAlUHJvamVjdERhdGEgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+UHJvamVjdEdldCgKICAgICAgICAgICAgICAgIElEID0+ICRQcm9qZWN0SUQsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBwdXNoIEBIZWFkZXJMaW5lLCAkUHJvamVjdERhdGF7UHJvamVjdH07CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiBcQEhlYWRlckxpbmU7Cn0KCnN1YiBHZXRTdGF0VGFibGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKICAgIG15IEBTdGF0QXJyYXk7CiAgICBteSBAVXNlcklEczsKCiAgICAjIFVzZXJzIGFzIFgtdmFsdWUKICAgIGlmICggJFBhcmFte1hWYWx1ZX17RWxlbWVudH0gJiYgJFBhcmFte1hWYWx1ZX17RWxlbWVudH0gZXEgJ1VzZXInICkgewoKICAgICAgICAjIHVzZXIgaGF2ZSBiZWVuIHNlbGVjdGVkIGFzIHgtdmFsdWUKICAgICAgICBAVXNlcklEcyA9IEB7ICRQYXJhbXtYVmFsdWV9e1NlbGVjdGVkVmFsdWVzfSB9OwoKICAgICAgICAjIGdldCBzdGF0IGRhdGEKICAgICAgICBteSAkU3RhdERhdGEgPSAkU2VsZi0+X0dldFN0YXREYXRhKAogICAgICAgICAgICBQYXJhbSAgID0+IFwlUGFyYW0sCiAgICAgICAgICAgIFVzZXJJRHMgPT4gXEBVc2VySURzLAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgc3RhdCBkYXRhCiAgICAgICAgcmV0dXJuIGlmICEkU3RhdERhdGE7CiAgICAgICAgcmV0dXJuIGlmIHJlZiAkU3RhdERhdGEgbmUgJ0FSUkFZJzsKCiAgICAgICAgbXkgQFJhd1N0YXRBcnJheSA9IEB7JFN0YXREYXRhfTsKICAgICAgICByZXR1cm4gaWYgIUBSYXdTdGF0QXJyYXk7CgogICAgICAgICMgZ2V0IGxpc3Qgb2YgbmVlZGVkIGRhdGEKICAgICAgICBteSAlUHJvamVjdERhdGEgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+UHJvamVjdFNldHRpbmdzR2V0KCk7CiAgICAgICAgbXkgJVByb2plY3RMaXN0ID0gJXsgJFByb2plY3REYXRhe1Byb2plY3R9IHx8IHt9IH07CgogICAgICAgIG15ICVBY3Rpb25EYXRhID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPkFjdGlvblNldHRpbmdzR2V0KCk7CiAgICAgICAgbXkgJUFjdGlvbkxpc3QgPSBtYXAgeyAoICRfID0+ICRBY3Rpb25EYXRheyRffS0+e0FjdGlvbn0gKSB9IGtleXMgJUFjdGlvbkRhdGE7CgogICAgICAgIG15IEBTb3J0ZWRQcm9qZWN0SURzID0gc29ydCB7ICRQcm9qZWN0TGlzdHskYX0gY21wICRQcm9qZWN0TGlzdHskYn0gfSBrZXlzICVQcm9qZWN0TGlzdDsKICAgICAgICBteSBAU29ydGVkQWN0aW9uSURzICA9IHNvcnQgeyAkQWN0aW9uTGlzdHskYX0gY21wICRBY3Rpb25MaXN0eyRifSB9IGtleXMgJUFjdGlvbkxpc3Q7CgogICAgICAgICMgcmUtc29ydCBwcm9qZWN0cyBkZXBlbmRpbmcgb24gc2VsZWN0ZWQgc2VxdWVuY2UKICAgICAgICBpZiAoICRQYXJhbXtWYWx1ZVNlcmllc30gJiYgJFBhcmFte1ZhbHVlU2VyaWVzfVswXXtTZWxlY3RlZFZhbHVlc31bMF0gZXEgJ0Rvd24nICkgewogICAgICAgICAgICBAU29ydGVkUHJvamVjdElEcyA9IHJldmVyc2UgQFNvcnRlZFByb2plY3RJRHM7CiAgICAgICAgfQoKICAgICAgICAjIGl0ZXJhdGUgb3ZlciBzb3J0ZWQgcHJvamVjdCBsaXN0CiAgICAgICAgU09SVEVEUFJPSkVDVElEOgogICAgICAgIGZvciBteSAkU29ydGVkUHJvamVjdElEIChAU29ydGVkUHJvamVjdElEcykgewoKICAgICAgICAgICAgIyBjaGVjayBmb3IgdW5zZWxlY3RlZCBwcm9qZWN0cwogICAgICAgICAgICBuZXh0IFNPUlRFRFBST0pFQ1RJRCBpZiAkUGFyYW17UmVzdHJpY3Rpb25zfS0+e1Byb2plY3R9ICYmICFncmVwIHsKICAgICAgICAgICAgICAgICRfID09ICRTb3J0ZWRQcm9qZWN0SUQKICAgICAgICAgICAgfSBAeyAkUGFyYW17UmVzdHJpY3Rpb25zfS0+e1Byb2plY3R9IHx8IFtdIH07CgogICAgICAgICAgICAjIGdldCB0aGUgY3VycmVudCBwcm9qZWN0IGRhdGEgb2YgY3VycmVudCBwcm9qZWN0CiAgICAgICAgICAgIG15IEBQcm9qZWN0U3RhdERhdGEgPSBncmVwIHsgJF8tPntQcm9qZWN0SUR9ID09ICRTb3J0ZWRQcm9qZWN0SUQgfSBAUmF3U3RhdEFycmF5OwoKICAgICAgICAgICAgIyBpdGVyYXRlIG92ZXIgc29ydGVkIGFjdGlvbiBsaXN0CiAgICAgICAgICAgIFNPUlRFREFDVElPTklEOgogICAgICAgICAgICBmb3IgbXkgJFNvcnRlZEFjdGlvbklEIChAU29ydGVkQWN0aW9uSURzKSB7CgogICAgICAgICAgICAgICAgIyBjaGVjayBmb3IgdW5zZWxlY3RlZCBhY3Rpb25zCiAgICAgICAgICAgICAgICBuZXh0IFNPUlRFREFDVElPTklEIGlmICRQYXJhbXtSZXN0cmljdGlvbnN9LT57UHJvamVjdEFjdGlvbn0gJiYgIWdyZXAgewogICAgICAgICAgICAgICAgICAgICRfID09ICRTb3J0ZWRBY3Rpb25JRAogICAgICAgICAgICAgICAgfSBAeyAkUGFyYW17UmVzdHJpY3Rpb25zfS0+e1Byb2plY3RBY3Rpb259IHx8IFtdIH07CgogICAgICAgICAgICAgICAgIyBnZXQgdGhlIGN1cnJlbnQgYWN0aW9uIG91dCBvZiB0aGUgY3VycmVudCBwcm9qZWN0CiAgICAgICAgICAgICAgICBteSBAQWN0aW9uU3RhdERhdGEgPSBncmVwIHsgJF8tPntBY3Rpb25JRH0gPT0gJFNvcnRlZEFjdGlvbklEIH0gQFByb2plY3RTdGF0RGF0YTsKCiAgICAgICAgICAgICAgICBteSBAUm93RGF0YTsKCiAgICAgICAgICAgICAgICAjIGFkZCBkZXNjcmlwdGl2ZSBmaXJzdCBjb2x1bW4KICAgICAgICAgICAgICAgIG15ICRSb3dMYWJlbCA9ICIkUHJvamVjdExpc3R7JFNvcnRlZFByb2plY3RJRH06OiRBY3Rpb25MaXN0eyRTb3J0ZWRBY3Rpb25JRH0iOwogICAgICAgICAgICAgICAgcHVzaCBAUm93RGF0YSwgJFJvd0xhYmVsOwoKICAgICAgICAgICAgICAgICMgaXRlcmF0ZSBvdmVyIHNlbGVjdGVkIHVzZXJzCiAgICAgICAgICAgICAgICBVU0VSSUQ6CiAgICAgICAgICAgICAgICBmb3IgbXkgJFVzZXJJRCAoQFVzZXJJRHMpIHsKCiAgICAgICAgICAgICAgICAgICAgIyBhdCBsZWFzdCBnZXQgJzAnIGZvciB1c2VyIGRhdGEKICAgICAgICAgICAgICAgICAgICBteSAkVXNlclBlcmlvZFN1bSA9IDA7CgogICAgICAgICAgICAgICAgICAgICMgaXRlcmF0ZSBvdmVyIHBlcmlvZCBkYXRhIG9mIHVzZXIKICAgICAgICAgICAgICAgICAgICBmb3IgbXkgJFBlcmlvZERhdGEgKCBncmVwIHsgJF8tPntVc2VySUR9ID09ICRVc2VySUQgfSBAQWN0aW9uU3RhdERhdGEgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRVc2VyUGVyaW9kU3VtICs9ICRQZXJpb2REYXRhLT57UGVyaW9kfTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICMgc2FmZSB1c2VyIGRhdGEgdG8gcm93IGRhdGEKICAgICAgICAgICAgICAgICAgICBwdXNoIEBSb3dEYXRhLCAkVXNlclBlcmlvZFN1bTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHN0b3JlIGN1cnJlbnQgcm93IHRvIGdsb2JhbCBzdGF0IGFycmF5CiAgICAgICAgICAgICAgICBwdXNoIEBTdGF0QXJyYXksIFxAUm93RGF0YTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIFByb2plY3RzIGFzIFgtdmFsdWUKICAgIGVsc2UgewoKICAgICAgICAjIHByb2plY3RzIGhhdmUgYmVlbiBzZWxlY3RlZCBhcyB4LXZhbHVlCiAgICAgICAgbXkgQFByb2plY3RJRHMgPSBAeyAkUGFyYW17WFZhbHVlfXtTZWxlY3RlZFZhbHVlc30gfTsKCiAgICAgICAgIyB3ZSBuZWVkIHRvIGdldCBhbGwgdXNlcnMKICAgICAgICBteSAlVXNlcklEcyA9ICRTZWxmLT57VXNlck9iamVjdH0tPlVzZXJMaXN0KAogICAgICAgICAgICBUeXBlICA9PiAnU2hvcnQnLAogICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICk7CgogICAgICAgIEBVc2VySURzID0ga2V5cyAlVXNlcklEczsKCiAgICAgICAgIyBnZXQgY2FsY3VsYXRlZCBzdGF0cyBkYXRhCiAgICAgICAgbXkgJFN0YXREYXRhID0gJFNlbGYtPl9HZXRTdGF0RGF0YSgKICAgICAgICAgICAgUGFyYW0gICA9PiBcJVBhcmFtLAogICAgICAgICAgICBVc2VySURzID0+IFxAVXNlcklEcywKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIHN0YXQgZGF0YQogICAgICAgIHJldHVybiBpZiAhJFN0YXREYXRhOwogICAgICAgIHJldHVybiBpZiByZWYgJFN0YXREYXRhIG5lICdBUlJBWSc7CgogICAgICAgIG15IEBSYXdTdGF0QXJyYXkgPSBAeyRTdGF0RGF0YX07CiAgICAgICAgcmV0dXJuIGlmICFAUmF3U3RhdEFycmF5OwoKICAgICAgICAjIGdldCBsaXN0IG9mIG5lZWRlZCBkYXRhCiAgICAgICAgbXkgJVVzZXJMaXN0ID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+VXNlckxpc3QoCiAgICAgICAgICAgIFR5cGUgID0+ICdMb25nJywKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICApOwoKICAgICAgICBteSBAU29ydGVkVXNlcklEcyA9IHNvcnQgeyAkVXNlckxpc3R7JGF9IGNtcCAkVXNlckxpc3R7JGJ9IH0ga2V5cyAlVXNlckxpc3Q7CgogICAgICAgICMgcmUtc29ydCB1c2VycyBkZXBlbmRpbmcgb24gc2VsZWN0ZWQgc2VxdWVuY2UKICAgICAgICBpZiAoICRQYXJhbXtWYWx1ZVNlcmllc30gJiYgJFBhcmFte1ZhbHVlU2VyaWVzfVswXXtTZWxlY3RlZFZhbHVlc31bMF0gZXEgJ0Rvd24nICkgewogICAgICAgICAgICBAU29ydGVkVXNlcklEcyA9IHJldmVyc2UgQFNvcnRlZFVzZXJJRHM7CiAgICAgICAgfQoKICAgICAgICAjIGl0ZXJhdGUgb3ZlciBzb3J0ZWQgdXNlciBsaXN0CiAgICAgICAgU09SVEVEVVNFUklEOgogICAgICAgIGZvciBteSAkU29ydGVkVXNlcklEIChAU29ydGVkVXNlcklEcykgewoKICAgICAgICAgICAgIyBjaGVjayBmb3IgdW5zZWxlY3RlZCB1c2VycwogICAgICAgICAgICBuZXh0IFNPUlRFRFVTRVJJRCBpZiAkUGFyYW17UmVzdHJpY3Rpb25zfS0+e1VzZXJ9ICYmICFncmVwIHsKICAgICAgICAgICAgICAgICRfID09ICRTb3J0ZWRVc2VySUQKICAgICAgICAgICAgfSBAeyAkUGFyYW17UmVzdHJpY3Rpb25zfS0+e1VzZXJ9IHx8IFtdIH07CgogICAgICAgICAgICAjIGdldCB0aGUgY3VycmVudCB1c2VyIGRhdGEgb2YgY3VycmVudCB1c2VyCiAgICAgICAgICAgIG15IEBVc2VyU3RhdERhdGEgPSBncmVwIHsgJF8tPntVc2VySUR9ID09ICRTb3J0ZWRVc2VySUQgfSBAUmF3U3RhdEFycmF5OwoKICAgICAgICAgICAgbXkgQFJvd0RhdGE7CgogICAgICAgICAgICAjIGFkZCBkZXNjcmlwdGl2ZSBmaXJzdCBjb2x1bW4KICAgICAgICAgICAgbXkgJFJvd0xhYmVsID0gJFVzZXJMaXN0eyRTb3J0ZWRVc2VySUR9OwogICAgICAgICAgICBwdXNoIEBSb3dEYXRhLCAkUm93TGFiZWw7CgogICAgICAgICAgICAjIGl0ZXJhdGUgb3ZlciBzZWxlY3RlZCBwcm9qZWN0cwogICAgICAgICAgICBQUk9KRUNUSUQ6CiAgICAgICAgICAgIGZvciBteSAkUHJvamVjdElEIChAUHJvamVjdElEcykgewoKICAgICAgICAgICAgICAgICMgYXQgbGVhc3QgZ2V0ICcwJyBmb3IgdXNlciBkYXRhCiAgICAgICAgICAgICAgICBteSAkUHJvamVjdFBlcmlvZFN1bSA9IDA7CgogICAgICAgICAgICAgICAgIyBpdGVyYXRlIG92ZXIgcGVyaW9kIGRhdGEgb2YgdXNlcgogICAgICAgICAgICAgICAgZm9yIG15ICRQZXJpb2REYXRhICggZ3JlcCB7ICRfLT57UHJvamVjdElEfSA9PSAkUHJvamVjdElEIH0gQFVzZXJTdGF0RGF0YSApIHsKICAgICAgICAgICAgICAgICAgICAkUHJvamVjdFBlcmlvZFN1bSArPSAkUGVyaW9kRGF0YS0+e1BlcmlvZH07CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgIyBzYWZlIHVzZXIgZGF0YSB0byByb3cgZGF0YQogICAgICAgICAgICAgICAgcHVzaCBAUm93RGF0YSwgJFByb2plY3RQZXJpb2RTdW07CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgc3RvcmUgY3VycmVudCByb3cgdG8gZ2xvYmFsIHN0YXQgYXJyYXkKICAgICAgICAgICAgcHVzaCBAU3RhdEFycmF5LCBcQFJvd0RhdGE7CiAgICAgICAgfQoKICAgIH0KCiAgICByZXR1cm4gQFN0YXRBcnJheTsKfQoKc3ViIEV4cG9ydFdyYXBwZXIgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHdyYXAgaWRzIHRvIHVzZWQgc3BlbGxpbmcKICAgIGZvciBteSAkVXNlIChxdyhVc2VBc1ZhbHVlU2VyaWVzIFVzZUFzUmVzdHJpY3Rpb24gVXNlQXNYdmFsdWUpKSB7CiAgICAgICAgRUxFTUVOVDoKICAgICAgICBmb3IgbXkgJEVsZW1lbnQgKCBAeyAkUGFyYW17JFVzZX0gfSApIHsKICAgICAgICAgICAgbmV4dCBFTEVNRU5UIGlmICEkRWxlbWVudCB8fCAhJEVsZW1lbnQtPntTZWxlY3RlZFZhbHVlc307CiAgICAgICAgICAgIG15ICRFbGVtZW50TmFtZSA9ICRFbGVtZW50LT57RWxlbWVudH07CiAgICAgICAgICAgIG15ICRWYWx1ZXMgICAgICA9ICRFbGVtZW50LT57U2VsZWN0ZWRWYWx1ZXN9OwoKICAgICAgICAgICAgaWYgKCAkRWxlbWVudE5hbWUgZXEgJ1VzZXInICkgewogICAgICAgICAgICAgICAgSUQ6CiAgICAgICAgICAgICAgICBmb3IgbXkgJElEICggQHskVmFsdWVzfSApIHsKICAgICAgICAgICAgICAgICAgICBuZXh0IElEIGlmICEkSUQ7CgogICAgICAgICAgICAgICAgICAgICRJRC0+e0NvbnRlbnR9ID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+VXNlckxvb2t1cCggVXNlcklEID0+ICRJRC0+e0NvbnRlbnR9ICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkRWxlbWVudE5hbWUgZXEgJ1Byb2plY3QnICkgewogICAgICAgICAgICAgICAgSUQ6CiAgICAgICAgICAgICAgICBmb3IgbXkgJElEICggQHskVmFsdWVzfSApIHsKICAgICAgICAgICAgICAgICAgICBuZXh0IElEIGlmICEkSUQ7CgogICAgICAgICAgICAgICAgICAgIG15ICVUbXBQcm9qZWN0RGF0YSA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5Qcm9qZWN0R2V0KCBJRCA9PiAkSUQtPntDb250ZW50fSApOwogICAgICAgICAgICAgICAgICAgICRJRC0+e0NvbnRlbnR9ID0gJFRtcFByb2plY3REYXRhe1Byb2plY3R9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJEVsZW1lbnROYW1lIGVxICdQcm9qZWN0QWN0aW9uJyApIHsKICAgICAgICAgICAgICAgIElEOgogICAgICAgICAgICAgICAgZm9yIG15ICRJRCAoIEB7JFZhbHVlc30gKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBJRCBpZiAhJElEOwoKICAgICAgICAgICAgICAgICAgICBteSAlVG1wQWN0aW9uRGF0YSA9ICRTZWxmLT57VGltZUFjY291bnRpbmdPYmplY3R9LT5BY3Rpb25HZXQoIElEID0+ICRJRC0+e0NvbnRlbnR9ICk7CiAgICAgICAgICAgICAgICAgICAgJElELT57Q29udGVudH0gPSAkVG1wQWN0aW9uRGF0YXtBY3Rpb259OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIFwlUGFyYW07Cn0KCnN1YiBJbXBvcnRXcmFwcGVyIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyB3cmFwIHVzZWQgc3BlbGxpbmcgdG8gaWRzCiAgICBmb3IgbXkgJFVzZSAocXcoVXNlQXNWYWx1ZVNlcmllcyBVc2VBc1Jlc3RyaWN0aW9uIFVzZUFzWHZhbHVlKSkgewogICAgICAgIEVMRU1FTlQ6CiAgICAgICAgZm9yIG15ICRFbGVtZW50ICggQHsgJFBhcmFteyRVc2V9IH0gKSB7CiAgICAgICAgICAgIG5leHQgRUxFTUVOVCBpZiAhJEVsZW1lbnQgfHwgISRFbGVtZW50LT57U2VsZWN0ZWRWYWx1ZXN9OwoKICAgICAgICAgICAgbXkgJEVsZW1lbnROYW1lID0gJEVsZW1lbnQtPntFbGVtZW50fTsKICAgICAgICAgICAgbXkgJFZhbHVlcyAgICAgID0gJEVsZW1lbnQtPntTZWxlY3RlZFZhbHVlc307CgogICAgICAgICAgICBpZiAoICRFbGVtZW50TmFtZSBlcSAnVXNlcicgKSB7CiAgICAgICAgICAgICAgICBJRDoKICAgICAgICAgICAgICAgIGZvciBteSAkSUQgKCBAeyRWYWx1ZXN9ICkgewogICAgICAgICAgICAgICAgICAgIG5leHQgSUQgaWYgISRJRDsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkU2VsZi0+e1VzZXJPYmplY3R9LT5Vc2VyTG9va3VwKCBVc2VyTG9naW4gPT4gJElELT57Q29udGVudH0gKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJElELT57Q29udGVudH0gPSAkU2VsZi0+e1VzZXJPYmplY3R9LT5Vc2VyTG9va3VwKCBVc2VyTG9naW4gPT4gJElELT57Q29udGVudH0gKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJJbXBvcnQ6IENhbicgZmluZCB0aGUgdXNlciAkSUQtPntDb250ZW50fSEiCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgICAgICRJRCA9IHVuZGVmOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNpZiAoICRFbGVtZW50TmFtZSBlcSAnUHJvamVjdCcgKSB7CiAgICAgICAgICAgICAgICBJRDoKICAgICAgICAgICAgICAgIGZvciBteSAkSUQgKCBAeyRWYWx1ZXN9ICkgewogICAgICAgICAgICAgICAgICAgIG5leHQgSUQgaWYgISRJRDsKCiAgICAgICAgICAgICAgICAgICAgbXkgJVByb2plY3QgPSAkU2VsZi0+e1RpbWVBY2NvdW50aW5nT2JqZWN0fS0+UHJvamVjdEdldCgKICAgICAgICAgICAgICAgICAgICAgICAgUHJvamVjdCA9PiAkSUQtPntDb250ZW50fSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIGlmICggJFByb2plY3R7SUR9ICkgewogICAgICAgICAgICAgICAgICAgICAgICAkSUQtPntDb250ZW50fSA9ICRQcm9qZWN0e0lEfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJJbXBvcnQ6IENhbicgZmluZCBwcm9qZWN0ICRJRC0+e0NvbnRlbnR9ISIKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgJElEID0gdW5kZWY7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJEVsZW1lbnROYW1lIGVxICdQcm9qZWN0QWN0aW9uJyApIHsKICAgICAgICAgICAgICAgIElEOgogICAgICAgICAgICAgICAgZm9yIG15ICRJRCAoIEB7JFZhbHVlc30gKSB7CiAgICAgICAgICAgICAgICAgICAgbmV4dCBJRCBpZiAhJElEOwoKICAgICAgICAgICAgICAgICAgICBteSAlQWN0aW9uID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPkFjdGlvbkdldCgKICAgICAgICAgICAgICAgICAgICAgICAgQWN0aW9uID0+ICRJRC0+e0NvbnRlbnR9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCAkQWN0aW9ue0lEfSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJElELT57Q29udGVudH0gPSAkQWN0aW9ue0lEfTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJJbXBvcnQ6IENhbicgZmluZCBhY3Rpb24gJElELT57Q29udGVudH0hIgogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAkSUQgPSB1bmRlZjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gXCVQYXJhbTsKfQoKc3ViIF9HZXRTdGF0RGF0YSB7CgogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSBAUmV0dXJuOwogICAgbXkgQFVzZXJJRHMgPSBAeyAkUGFyYW17VXNlcklEc30gfHwgW10gfTsKCiAgICBteSAlRGF0ZUluZGV4VG9OYW1lID0gKAogICAgICAgICdTZWNvbmQnID0+IDAsCiAgICAgICAgJ01pbnV0ZScgPT4gMSwKICAgICAgICAnSG91cicgICA9PiAyLAogICAgICAgICdEYXknICAgID0+IDMsCiAgICAgICAgJ01vbnRoJyAgPT4gNCwKICAgICAgICAnWWVhcicgICA9PiA1LAogICAgKTsKCiAgICAjIGxvb3Bpbmcgb3ZlciBhbGwgb3Igc2VsZWN0ZWQgdXNlcnMKICAgIGZvciBteSAkVXNlcklEIChAVXNlcklEcykgewoKICAgICAgICBteSAkU3RhcnREYXRlOwogICAgICAgIG15ICRTdG9wRGF0ZTsKCiAgICAgICAgIyBjaGVjayBpZiB0aW1lIHBlcmlvZCBoYXMgYmVlbiBzZWxlY3RlZAogICAgICAgIGlmICggJFBhcmFte1BhcmFtfXtSZXN0cmljdGlvbnN9e1RpbWVBY2NvdW50aW5nUGVyaW9kU3RhcnR9ICkgewoKICAgICAgICAgICAgIyBnZXQgdW5peCB0aW1lc3RhbXAgb2Ygc3RhcnQgYW5kIGVuZCB2YWx1ZXMKICAgICAgICAgICAgJFN0YXJ0RGF0ZSA9ICRTZWxmLT57VGltZU9iamVjdH0tPlRpbWVTdGFtcDJTeXN0ZW1UaW1lKAogICAgICAgICAgICAgICAgU3RyaW5nID0+ICRQYXJhbXtQYXJhbX17UmVzdHJpY3Rpb25zfXtUaW1lQWNjb3VudGluZ1BlcmlvZFN0YXJ0fSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJFN0b3BEYXRlID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+VGltZVN0YW1wMlN5c3RlbVRpbWUoCiAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJFBhcmFte1BhcmFtfXtSZXN0cmljdGlvbnN9e1RpbWVBY2NvdW50aW5nUGVyaW9kU3RvcH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBJTVBPUlRBTlQ6CiAgICAgICAgICAgICMgSWYgbm8gdGltZSBwZXJpb2QgaGFkIGJlZW4gc2VsZWN0ZWQgcHJldmlvdXMgbW9udGggd2lsbCBiZSB1c2VkIGFzIHBlcmlvZCEKCiAgICAgICAgICAgICMgZ2V0IGN1cnJlbnQgZGF0ZSB2YWx1ZXMKICAgICAgICAgICAgbXkgQEN1cnJlbnREYXRlID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgICAgICAgICAgU3lzdGVtVGltZSA9PiAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lKCksCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGdldCBmaXJzdCBkYXkgb2YgcHJldmlvdXMgbW9udGgKICAgICAgICAgICAgbXkgQE5ld1N0YXJ0RGF0ZSA9IEFkZF9EZWx0YV9ZTUQoCiAgICAgICAgICAgICAgICAkQ3VycmVudERhdGVbICREYXRlSW5kZXhUb05hbWV7J1llYXInfSBdLAogICAgICAgICAgICAgICAgJEN1cnJlbnREYXRlWyAkRGF0ZUluZGV4VG9OYW1leydNb250aCd9IF0sCiAgICAgICAgICAgICAgICAxLAogICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgIC0xLAogICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgZ2V0IGZpcnN0IGRheSBvZiBuZXh0IG1vbnRoIHJlbGF0aXZlIHRvIHByZXZpb3VzIG1vbnRoCiAgICAgICAgICAgIG15IEBOZXdTdG9wRGF0ZSA9IEFkZF9EZWx0YV9ZTUQoCiAgICAgICAgICAgICAgICAkTmV3U3RhcnREYXRlWzBdLAogICAgICAgICAgICAgICAgJE5ld1N0YXJ0RGF0ZVsxXSwKICAgICAgICAgICAgICAgICROZXdTdGFydERhdGVbMl0sCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgKzEsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBnZXQgbGFzdCBvZiBkYXkgcHJldmlvdXMgbW9udGgKICAgICAgICAgICAgQE5ld1N0b3BEYXRlID0gQWRkX0RlbHRhX1lNRCgKICAgICAgICAgICAgICAgICROZXdTdG9wRGF0ZVswXSwKICAgICAgICAgICAgICAgICROZXdTdG9wRGF0ZVsxXSwKICAgICAgICAgICAgICAgICROZXdTdG9wRGF0ZVsyXSwKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgLTEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIGNhbGN1bGF0ZSB1bml4IHRpbWVzdGFtcCBmb3Igc3RhcnQgYW5kIHN0b3AgZGF0ZQogICAgICAgICAgICAkU3RhcnREYXRlID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+RGF0ZTJTeXN0ZW1UaW1lKAogICAgICAgICAgICAgICAgWWVhciAgID0+ICROZXdTdGFydERhdGVbMF0sCiAgICAgICAgICAgICAgICBNb250aCAgPT4gJE5ld1N0YXJ0RGF0ZVsxXSwKICAgICAgICAgICAgICAgIERheSAgICA9PiAkTmV3U3RhcnREYXRlWzJdLAogICAgICAgICAgICAgICAgSG91ciAgID0+IDAsCiAgICAgICAgICAgICAgICBNaW51dGUgPT4gMCwKICAgICAgICAgICAgICAgIFNlY29uZCA9PiAwLAogICAgICAgICAgICApOwogICAgICAgICAgICAkU3RvcERhdGUgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5EYXRlMlN5c3RlbVRpbWUoCiAgICAgICAgICAgICAgICBZZWFyICAgPT4gJE5ld1N0b3BEYXRlWzBdLAogICAgICAgICAgICAgICAgTW9udGggID0+ICROZXdTdG9wRGF0ZVsxXSwKICAgICAgICAgICAgICAgIERheSAgICA9PiAkTmV3U3RvcERhdGVbMl0sCiAgICAgICAgICAgICAgICBIb3VyICAgPT4gMjMsCiAgICAgICAgICAgICAgICBNaW51dGUgPT4gNTksCiAgICAgICAgICAgICAgICBTZWNvbmQgPT4gNTksCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGNhbGN1bGF0ZSBudW1iZXIgb2YgZGF5cyB3aXRoaW4gdGhlIGdpdmVuIHJhbmdlCiAgICAgICAgbXkgJERheXMgPSBpbnQoICggJFN0b3BEYXRlIC0gJFN0YXJ0RGF0ZSApIC8gODY0MDAgKSArIDE7CgogICAgICAgIERBWToKICAgICAgICBmb3IgbXkgJERheSAoIDAgLi4gJERheXMgKSB7CgogICAgICAgICAgICAjIGdldCBkYXkgcmVsYXRpdmUgdG8gc3RhcnQgZGF0ZQogICAgICAgICAgICBteSAkRGF0ZU9mUGVyaW9kID0gJFN0YXJ0RGF0ZSArICREYXkgKiA4NjQwMDsKCiAgICAgICAgICAgICMgZ2V0IG5lZWRlZCBkYXRlIHZhbHVlcyBvdXQgb2YgdGltZXN0YW1wCiAgICAgICAgICAgIG15IEBEYXRlVmFsdWVzID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgICAgICAgICAgU3lzdGVtVGltZSA9PiAkRGF0ZU9mUGVyaW9kLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBnZXQgd29ya2luZyB1bml0IGZvciB1c2VyIGFuZCBkYXkKICAgICAgICAgICAgbXkgJVdvcmtpbmdVbml0ID0gJFNlbGYtPntUaW1lQWNjb3VudGluZ09iamVjdH0tPldvcmtpbmdVbml0c0dldCgKICAgICAgICAgICAgICAgIFllYXIgICA9PiAkRGF0ZVZhbHVlc1sgJERhdGVJbmRleFRvTmFtZXsnWWVhcid9IF0sCiAgICAgICAgICAgICAgICBNb250aCAgPT4gJERhdGVWYWx1ZXNbICREYXRlSW5kZXhUb05hbWV7J01vbnRoJ30gXSwKICAgICAgICAgICAgICAgIERheSAgICA9PiAkRGF0ZVZhbHVlc1sgJERhdGVJbmRleFRvTmFtZXsnRGF5J30gXSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlcklELAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBleHRyYWN0IGRldGFpbGVkIGluZm9ybWF0aW9uCiAgICAgICAgICAgIG15IEBEYXlXb3JraW5nVW5pdHMgPSBAeyAkV29ya2luZ1VuaXR7V29ya2luZ1VuaXRzfSB8fCBbXSB9OwoKICAgICAgICAgICAgIyBjaGVjayBmb3IgcHJvamVjdCByZXN0cmljdGlvbnMKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJFBhcmFte1BhcmFtfXtSZXN0cmljdGlvbnN9LT57UHJvamVjdH0KICAgICAgICAgICAgICAgICYmIHJlZiAkUGFyYW17UGFyYW19e1Jlc3RyaWN0aW9uc30tPntQcm9qZWN0fSBlcSAnQVJSQVknCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAjIGJ1aWxkIG1hdGNoaW5nIGhhc2ggZm9yIHNlbGVjdGVkIHByb2plY3RzCiAgICAgICAgICAgICAgICBteSAlU2VsZWN0ZWRQcm9qZWN0SURzID0gbWFwIHsgKCAkXyA9PiAxICkgfSBAeyAkUGFyYW17UGFyYW19e1Jlc3RyaWN0aW9uc30tPntQcm9qZWN0fSB9OwoKICAgICAgICAgICAgICAgICMgZmlsdGVyIG9ubHkgc2VsZWN0ZWQgcHJvamVjdHMKICAgICAgICAgICAgICAgIG15IEBGaWx0ZXJlZFByb2plY3RXVXMgPSBncmVwIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZWN0ZWRQcm9qZWN0SURzeyAkXy0+e1Byb2plY3RJRH0gfQogICAgICAgICAgICAgICAgfSBARGF5V29ya2luZ1VuaXRzOwoKICAgICAgICAgICAgICAgIEBEYXlXb3JraW5nVW5pdHMgPSBARmlsdGVyZWRQcm9qZWN0V1VzOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGNoZWNrIGZvciB0YXNrIHJlc3RyaWN0aW9ucwogICAgICAgICAgICBpZiAoCiAgICAgICAgICAgICAgICAkUGFyYW17UGFyYW19e1Jlc3RyaWN0aW9uc30tPntQcm9qZWN0QWN0aW9ufQogICAgICAgICAgICAgICAgJiYgcmVmICRQYXJhbXtQYXJhbX17UmVzdHJpY3Rpb25zfS0+e1Byb2plY3RBY3Rpb259IGVxICdBUlJBWScKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICMgYnVpbGQgbWF0Y2hpbmcgaGFzaCBmb3Igc2VsZWN0ZWQgYWN0aW9ucwogICAgICAgICAgICAgICAgbXkgJVNlbGVjdGVkQWN0aW9uSURzID0gbWFwIHsgKCAkXyA9PiAxICkgfSBAeyAkUGFyYW17UGFyYW19e1Jlc3RyaWN0aW9uc30tPntQcm9qZWN0QWN0aW9ufSB9OwoKICAgICAgICAgICAgICAgICMgZmlsdGVyIG9ubHkgc2VsZWN0ZWQgYWN0aW9ucwogICAgICAgICAgICAgICAgbXkgQEZpbHRlcmVkQWN0aW9uV1VzID0gZ3JlcCB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGVjdGVkQWN0aW9uSURzeyAkXy0+e0FjdGlvbklEfSB9CiAgICAgICAgICAgICAgICB9IEBEYXlXb3JraW5nVW5pdHM7CgogICAgICAgICAgICAgICAgQERheVdvcmtpbmdVbml0cyA9IEBGaWx0ZXJlZEFjdGlvbldVczsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBjaGVjayBmb3IgdXNlciByZXN0cmljdGlvbnMKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgJFBhcmFte1BhcmFtfXtSZXN0cmljdGlvbnN9LT57VXNlcn0KICAgICAgICAgICAgICAgICYmIHJlZiAkUGFyYW17UGFyYW19e1Jlc3RyaWN0aW9uc30tPntVc2VyfSBlcSAnQVJSQVknCiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAjIGJ1aWxkIG1hdGNoaW5nIGhhc2ggZm9yIHNlbGVjdGVkIGFjdGlvbnMKICAgICAgICAgICAgICAgIG15ICVTZWxlY3RlZFVzZXJJRHMgPSBtYXAgeyAoICRfID0+IDEgKSB9IEB7ICRQYXJhbXtQYXJhbX17UmVzdHJpY3Rpb25zfS0+e1VzZXJ9IH07CgogICAgICAgICAgICAgICAgIyBmaWx0ZXIgb25seSBzZWxlY3RlZCBhY3Rpb25zCiAgICAgICAgICAgICAgICBteSBARmlsdGVyZWRVc2VyV1VzID0gZ3JlcCB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGVjdGVkVXNlcklEc3sgJF8tPntVc2VySUR9IH0KICAgICAgICAgICAgICAgIH0gQERheVdvcmtpbmdVbml0czsKCiAgICAgICAgICAgICAgICBARGF5V29ya2luZ1VuaXRzID0gQEZpbHRlcmVkVXNlcldVczsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBkbyBub3Qgc3RvcmUgZGF0YSBpZiBubyBkYXRhIGlzIGF2YWlsYWJsZQogICAgICAgICAgICBuZXh0IERBWSBpZiAhQERheVdvcmtpbmdVbml0czsKCiAgICAgICAgICAgICMgYWRkIGRhdGEgdG8gZ2xvYmFsIHJlc3VsdCBzZXQKICAgICAgICAgICAgcHVzaCBAUmV0dXJuLCBARGF5V29ya2luZ1VuaXRzOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gXEBSZXR1cm47Cgp9CgoxOwo=
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMjIG5vZmlsdGVyKFRpZHlBbGw6OlBsdWdpbjo6T1RSUzo6UGVybDo6UGVybENyaXRpYykKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCiMgZGVjbGFyZSBleHRlcm5hbGx5IGRlZmluZWQgdmFyaWFibGVzIHRvIGF2b2lkIGVycm9ycyB1bmRlciAndXNlIHN0cmljdCcKdXNlIHZhcnMgcXcoJFNlbGYpOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpUaW1lQWNjb3VudGluZzsKdXNlIEtlcm5lbDo6U3lzdGVtOjpVc2VyOwoKIyBjcmVhdGUgbG9jYWwgb2JqZWN0Cm15ICRVc2VyT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OlVzZXItPm5ldyggJXskU2VsZn0gKTsKCiMgZGF0YSBmb3IgbmV3IHVzZXIKbXkgJFJhbmRvbU51bWJlciA9IGludCggcmFuZCgxMDAwMCkgKTsKbXkgJVVzZXJEYXRhICAgICA9ICgKICAgIFVzZXJGaXJzdG5hbWUgPT4gJ1VuaXQgVGVzdCcsCiAgICBVc2VyTGFzdG5hbWUgID0+ICdVc2VyJywKICAgIFVzZXJMb2dpbiAgICAgPT4gJ1VuaXRUZXN0JyAuICRSYW5kb21OdW1iZXIsCiAgICBVc2VyUHcgICAgICAgID0+ICdwYXNzJywKICAgIFVzZXJFbWFpbCAgICAgPT4gJ2VtYWlsQG15ZG9tYWluLmNvbScsCiAgICBWYWxpZElEICAgICAgID0+IDEsCiAgICBDaGFuZ2VVc2VySUQgID0+IDEsCik7CgojIGNyZWF0ZSB0ZXN0IHVzZXIKbXkgJFVzZXJJRCA9ICRVc2VyT2JqZWN0LT5Vc2VyQWRkKCVVc2VyRGF0YSk7CgojIGNyZXRlIGxvY2FsIG9iamVjdApteSAkVGltZUFjY291bnRpbmdPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6VGltZUFjY291bnRpbmctPm5ldygKICAgICV7JFNlbGZ9LAogICAgVXNlcklEICAgICA9PiAkVXNlcklELAogICAgVXNlck9iamVjdCA9PiAkVXNlck9iamVjdCwKKTsKCiMgZGF0YSBmb3IgdGhlIG5ldyBhY3Rpb24gKHRhc2spCm15ICVOZXdBY3Rpb25EYXRhID0gKAogICAgQWN0aW9uICAgICAgID0+ICdUZXN0QWN0aW9uJyAuICRSYW5kb21OdW1iZXIsCiAgICBBY3Rpb25TdGF0dXMgPT4gMSwKKTsKCiMgY3JlYXRlIGEgbmV3IGFjdGlvbiAodGFzaykKbXkgJEluc2VydCA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+QWN0aW9uU2V0dGluZ3NJbnNlcnQoJU5ld0FjdGlvbkRhdGEpOwoKIyB2ZXJpZnkgdGhhdCB0aGUgYWN0aW9uIHdhcyBzdWNjZXNzZnVsbHkgaW5zZXJ0ZWQKJFNlbGYtPlRydWUoCiAgICAkSW5zZXJ0LAogICAgJ0luc2VydCB0ZXN0IGFjdGlvbiBzZXR0aW5ncyBpbnRvIGRhdGFiYXNlJywKKTsKCiMgZ2V0IHRoZSBhY3Rpb24gZGF0YSB0aGF0IHdhcyBpbnNlcnRlZCBhYm92ZQpteSAlQWN0aW9uRGF0YSA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+QWN0aW9uR2V0KCBBY3Rpb24gPT4gJE5ld0FjdGlvbkRhdGF7QWN0aW9ufSApOwoKIyB2ZXJpZnkgdGhhdCB0aGUgZGF0YSBzYXZlZCBpbiB0aGUgREIgaXMgdGhlIHNhbWUgdGhhdCB3YXMgaW5zZXJ0ZWQKJFNlbGYtPklzKAogICAgJEFjdGlvbkRhdGF7QWN0aW9uU3RhdHVzfSwKICAgICROZXdBY3Rpb25EYXRhe0FjdGlvblN0YXR1c30sCiAgICAnQ29tcGFyZSBhY3Rpb24gc3RhdHVzIHNhdmVkIGluIERCIHdpdGggdGhlIGluc2VydGVkIG9uZScsCik7CgojIG1vZGlmeSB0aGUgYWN0aW9uIG5hbWUKbXkgJFVwZGF0ZSA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+QWN0aW9uU2V0dGluZ3NVcGRhdGUoCiAgICBBY3Rpb25JRCAgICAgPT4gJEFjdGlvbkRhdGF7SUR9LAogICAgQWN0aW9uICAgICAgID0+ICROZXdBY3Rpb25EYXRhe0FjdGlvbn0gLiAnbW9kaWZpZWQnLAogICAgQWN0aW9uU3RhdHVzID0+IDEsCik7CgojIHZlcmlmeSB0aGF0IHRoZSBhY3Rpb24gd2FzIHVwZGF0ZWQKJFNlbGYtPlRydWUoCiAgICAkVXBkYXRlLAogICAgJ1VwZGF0ZSB0ZXN0IGFjdGlvbiBzZXR0aW5ncycsCik7CgojIGdldCBhbGwgYWN0aW9ucyBkYXRhCm15ICVBbGxBY3Rpb25zID0gJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5BY3Rpb25TZXR0aW5nc0dldCgpOwoKIyB2ZXJpZnkgdGhlIGxhc3QgbW9kaWZpY2F0aW9uCiRTZWxmLT5JcygKICAgICRBbGxBY3Rpb25zeyAkQWN0aW9uRGF0YXtJRH0gfXtBY3Rpb259LAogICAgJE5ld0FjdGlvbkRhdGF7QWN0aW9ufSAuICdtb2RpZmllZCcsCiAgICAnQ29tcGFyZSBhY3Rpb24gbmFtZSBzYXZlZCBpbiBEQiB3aXRoIHRoZSBzcGVjaWZpZWQgaW4gdGhlIHVwZGF0ZScsCik7CgojIGRhdGEgZm9yIHRoZSBuZXcgcHJvamVjdApteSAlTmV3UHJvamVjdERhdGEgPSAoCiAgICBQcm9qZWN0ICAgICAgICAgICAgPT4gJ1Rlc3RQcm9qZWN0JyAuICRSYW5kb21OdW1iZXIsCiAgICBQcm9qZWN0RGVzY3JpcHRpb24gPT4gJ1Rlc3QnLAogICAgUHJvamVjdFN0YXR1cyAgICAgID0+IDEsCik7CgojIGNyZWF0ZSBhIG5ldyBwcm9qZWN0Cm15ICRQcm9qZWN0SUQgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPlByb2plY3RTZXR0aW5nc0luc2VydCglTmV3UHJvamVjdERhdGEpOwoKIyB2ZXJpZnkgdGhhdCB0aGUgYWN0aW9uIHdhcyBzdWNjZXNzZnVsbHkgaW5zZXJ0ZWQKJFNlbGYtPlRydWUoCiAgICAkUHJvamVjdElELAogICAgJ0luc2VydCB0ZXN0IHByb2plY3Qgc2V0dGluZ3MgaW50byBkYXRhYmFzZScsCik7CgojIGdldCB0aGUgYWN0aW9uIGRhdGEgdGhhdCB3YXMgaW5zZXJ0ZWQgYWJvdmUKbXkgJVByb2plY3REYXRhID0gJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Qcm9qZWN0R2V0KCBJRCA9PiAkUHJvamVjdElEICk7CgojIHZlcmlmeSB0aGF0IHRoZSBkYXRhIHNhdmVkIGluIHRoZSBEQiBpcyB0aGUgc2FtZSB0aGF0IHdhcyBpbnNlcnRlZAokU2VsZi0+SXMoCiAgICAkUHJvamVjdERhdGF7UHJvamVjdH0sCiAgICAkTmV3UHJvamVjdERhdGF7UHJvamVjdH0sCiAgICAnQ29tcGFyZSBwcm9qZWN0IG5hbWUgc2F2ZWQgaW4gREIgd2l0aCB0aGUgaW5zZXJ0ZWQgb25lJywKKTsKJFNlbGYtPklzKAogICAgJFByb2plY3REYXRhe1Byb2plY3REZXNjcmlwdGlvbn0sCiAgICAkTmV3UHJvamVjdERhdGF7UHJvamVjdERlc2NyaXB0aW9ufSwKICAgICdDb21wYXJlIHByb2plY3QgZGVzY3JpcHRpb24gc2F2ZWQgaW4gREIgd2l0aCB0aGUgaW5zZXJ0ZWQgb25lJywKKTsKJFNlbGYtPklzKAogICAgJFByb2plY3REYXRhe1Byb2plY3RTdGF0dXN9LAogICAgJE5ld1Byb2plY3REYXRhe1Byb2plY3RTdGF0dXN9LAogICAgJ0NvbXBhcmUgcHJvamVjdCBzdGF0dXMgc2F2ZWQgaW4gREIgd2l0aCB0aGUgaW5zZXJ0ZWQgb25lJywKKTsKCiMgbW9kaWZ5IHRoZSBwcm9qZWN0IG5hbWUKJFVwZGF0ZSA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+UHJvamVjdFNldHRpbmdzVXBkYXRlKAogICAgSUQgICAgICAgICAgICAgICAgID0+ICRQcm9qZWN0SUQsCiAgICBQcm9qZWN0ICAgICAgICAgICAgPT4gJE5ld1Byb2plY3REYXRhe1Byb2plY3R9IC4gJ21vZGlmaWVkJywKICAgIFByb2plY3REZXNjcmlwdGlvbiA9PiAnVGVzdCcsCiAgICBQcm9qZWN0U3RhdHVzICAgICAgPT4gMSwKKTsKCiMgdmVyaWZ5IHRoYXQgdGhlIGFjdGlvbiB3YXMgdXBkYXRlZAokU2VsZi0+VHJ1ZSgKICAgICRVcGRhdGUsCiAgICAnVXBkYXRlIHRlc3QgcHJvamVjdCBzZXR0aW5ncycsCik7CgojIGdldCBhbGwgcHJvamVjdHMgZGF0YQpteSAlQWxsUHJvamVjdHMgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPlByb2plY3RTZXR0aW5nc0dldCggU3RhdHVzID0+ICd2YWxpZCcgKTsKCiMgdmVyaWZ5IHRoZSBsYXN0IG1vZGlmaWNhdGlvbgokU2VsZi0+SXMoCiAgICAkQWxsUHJvamVjdHN7UHJvamVjdH17JFByb2plY3RJRH0sCiAgICAkTmV3UHJvamVjdERhdGF7UHJvamVjdH0gLiAnbW9kaWZpZWQnLAogICAgJ0NvbXBhcmUgcHJvamVjdCBuYW1lIHNhdmVkIGluIERCIHdpdGggdGhlIHNwZWNpZmllZCBpbiB0aGUgdXBkYXRlJywKKTsKCiMgb2J0YWluIHRoZSBsYXN0IHJlZ2lzdGVyZWQgcGVyaW9kIG9mIHRoZSB0ZXN0IHVzZXIKbXkgJExhc3RQZXJpb2ROdW1iZXIgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPlVzZXJMYXN0UGVyaW9kTnVtYmVyR2V0KCBVc2VySUQgPT4gJFVzZXJJRCApICsgMTsKCiMgY3JlYXRlIHJlZ2lzdHJ5IGZvciB0aGUgbmV3IHVzZXIgaW4gVEEKJEluc2VydCA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+VXNlclNldHRpbmdzSW5zZXJ0KAogICAgVXNlcklEID0+ICRVc2VySUQsCiAgICBQZXJpb2QgPT4gJExhc3RQZXJpb2ROdW1iZXIsCik7CgojIHZlcmlmeSB0aGF0IHRoZSB1c2VyIHdhcyBzdWNjZXNzZnVsbHkgaW5zZXJ0ZWQKJFNlbGYtPlRydWUoCiAgICAkSW5zZXJ0LAogICAgJ0luc2VydCB0ZXN0IHVzZXIgc2V0dGluZ3MgaW50byBkYXRhYmFzZScsCik7CgojIGluc2VydCBhbm90aGVyIHBlcmlvZCBlbnRyeSBmb3IgdGhlIHNhbWUgdXNlcgokSW5zZXJ0ID0gJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Vc2VyU2V0dGluZ3NJbnNlcnQoCiAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgIFBlcmlvZCA9PiAkTGFzdFBlcmlvZE51bWJlciArIDEsCik7CgojIHZlcmlmeSB0aGF0IHRoZSB1c2VyIHdhcyBzdWNjZXNzZnVsbHkgaW5zZXJ0ZWQKJFNlbGYtPlRydWUoCiAgICAkSW5zZXJ0LAogICAgJ0luc2VydCB0aW1lIHBlcmlvZCBmb3IgdGVzdCB1c2VyIHNldHRpbmdzIGludG8gZGF0YWJhc2UnLAopOwoKJFJhbmRvbU51bWJlciA9IGludCggcmFuZCgxMDApICk7CgojIHVwZGF0ZSB1c2VyIGRhdGEKJFVwZGF0ZSA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+VXNlclNldHRpbmdzVXBkYXRlKAogICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgRGVzY3JpcHRpb24gICA9PiAnVGVzdCB1c2VyJyAuICRSYW5kb21OdW1iZXIsCiAgICBDcmVhdGVQcm9qZWN0ID0+IDEsCiAgICBTaG93T3ZlcnRpbWUgID0+IDEsCiAgICBQZXJpb2QgICAgICAgID0+IHsKICAgICAgICAxID0+IHsKICAgICAgICAgICAgRGF0ZVN0YXJ0ICAgPT4gJzIwMTEtMDEtMDEnLAogICAgICAgICAgICBEYXRlRW5kICAgICA9PiAnMjAxMS0wMS0zMScsCiAgICAgICAgICAgIFdlZWtseUhvdXJzID0+ICRSYW5kb21OdW1iZXIsCiAgICAgICAgICAgIExlYXZlRGF5cyAgID0+ICcxMCcsCiAgICAgICAgICAgIE92ZXJ0aW1lICAgID0+ICcyMCcsCiAgICAgICAgICAgIFVzZXJTdGF0dXMgID0+IDEsCiAgICAgICAgfSwKICAgICAgICAyID0+IHsKICAgICAgICAgICAgRGF0ZVN0YXJ0ICAgPT4gJzIwMTEtMDItMDEnLAogICAgICAgICAgICBEYXRlRW5kICAgICA9PiAnMjAxMS0xMi0zMScsCiAgICAgICAgICAgIFdlZWtseUhvdXJzID0+ICRSYW5kb21OdW1iZXIgKyAxMCwKICAgICAgICAgICAgTGVhdmVEYXlzICAgPT4gJzUnLAogICAgICAgICAgICBPdmVydGltZSAgICA9PiAnMTAnLAogICAgICAgICAgICBVc2VyU3RhdHVzICA9PiAxLAogICAgICAgIH0sCiAgICB9LAopOwoKIyB2ZXJpZnkgdGhhdCB0aGUgYWN0aW9uIHdhcyB1cGRhdGVkCiRTZWxmLT5UcnVlKAogICAgJFVwZGF0ZSwKICAgICdVcGRhdGUgdGVzdCB1c2VyIHNldHRpbmdzJywKKTsKCiMgZ2V0IHVzZXIgc2V0dGluZ3MKbXkgJVNpbmdsZVVzZXJEYXRhID0gJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5TaW5nbGVVc2VyU2V0dGluZ3NHZXQoIFVzZXJJRCA9PiAkVXNlcklEICk7CgojIHZlcmlmeSB0aGUgbGFzdCBtb2RpZmljYXRpb24KJFNlbGYtPklzKAogICAgaW50ICRTaW5nbGVVc2VyRGF0YXsxfXtXZWVrbHlIb3Vyc30sCiAgICAkUmFuZG9tTnVtYmVyLAogICAgJ0NvbXBhcmUgd2Vla2x5IGhvdXJzIGZvciBwZXJpb2QgMSBzYXZlZCBpbiBEQiB3aXRoIHRoZSBzcGVjaWZpZWQgaW4gdGhlIHVwZGF0ZScsCik7CgokU2VsZi0+SXMoCiAgICBpbnQgJFNpbmdsZVVzZXJEYXRhezJ9e1dlZWtseUhvdXJzfSwKICAgICRSYW5kb21OdW1iZXIgKyAxMCwKICAgICdDb21wYXJlIHdlZWtseSBob3VycyBmb3IgcGVyaW9kIDIgc2F2ZWQgaW4gREIgd2l0aCB0aGUgc3BlY2lmaWVkIGluIHRoZSB1cGRhdGUnLAopOwoKIyBnZXQgdXNlciBkYXRhCiVTaW5nbGVVc2VyRGF0YSA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+VXNlckdldCggVXNlcklEID0+ICRVc2VySUQgKTsKCiMgY29tcGFyZSBkYXRhIHNhdmVkIG9uIHRoZSBEQiB3aXRoIHRoZSBpbnNlcnRlZCBvbmUKJFNlbGYtPklzKAogICAgJFNpbmdsZVVzZXJEYXRhe0Rlc2NyaXB0aW9ufSwKICAgICdUZXN0IHVzZXInIC4gJFJhbmRvbU51bWJlciwKICAgICdDb21wYXJlIGRlc2NyaXB0aW9uIHNhdmVkIG9uIHRoZSBEQiB3aXRoIHRoZSBzcGVjaWZpZWQgaW4gdGhlIGluc2VydGlvbicsCik7CgojIGdldCBhbGwgdXNlcnMgZGF0YQpteSAlQWxsVXNlcnNEYXRhID0gJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5Vc2VyTGlzdCgpOwoKIyB2ZXJpZnkgdGhhdCB0aGUgdGVzdCB1c2VyIGlzIGluIHRoZSBsaXN0CiRTZWxmLT5UcnVlKAogICAgJEFsbFVzZXJzRGF0YXskVXNlcklEfXtEZXNjcmlwdGlvbn0sCiAgICAnVmVyaWZ5IHRoZSBleGlzdGVuY2Ugb2YgdGhlIHRlc3QgdXNlciBpbiB0aGUgbGlzdCcKKTsKCiMgZ2V0IGFsbCBwZXJpb2RzIG9mIGRhdGEgb2YgYWxsIHVzZXJzCm15ICVBbGxVc2Vyc1BlcmlvZERhdGEgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPlVzZXJTZXR0aW5nc0dldCgpOwoKIyB2ZXJpZnkgdGhlIHBlcmlvZCBkYXRhIG9mIHRoZSB0ZXN0IHVzZXIKbXkgJENvcnJlY3RVc2VyRGF0YSA9CiAgICAoCiAgICAkQWxsVXNlcnNQZXJpb2REYXRheyRVc2VySUR9ezF9e1dlZWtseUhvdXJzfSA9PSAkUmFuZG9tTnVtYmVyCiAgICAgICAgJiYgJEFsbFVzZXJzUGVyaW9kRGF0YXskVXNlcklEfXsxfXtMZWF2ZURheXN9ID09IDEwCiAgICAgICAgJiYgJEFsbFVzZXJzUGVyaW9kRGF0YXskVXNlcklEfXsxfXtPdmVydGltZX0gPT0gMjAKICAgICAgICAmJiAkQWxsVXNlcnNQZXJpb2REYXRheyRVc2VySUR9ezF9e1VzZXJTdGF0dXN9CiAgICAgICAgJiYgJEFsbFVzZXJzUGVyaW9kRGF0YXskVXNlcklEfXsyfXtXZWVrbHlIb3Vyc30gPT0gJFJhbmRvbU51bWJlciArIDEwCiAgICAgICAgJiYgJEFsbFVzZXJzUGVyaW9kRGF0YXskVXNlcklEfXsyfXtMZWF2ZURheXN9ID09IDUKICAgICAgICAmJiAkQWxsVXNlcnNQZXJpb2REYXRheyRVc2VySUR9ezJ9e092ZXJ0aW1lfSA9PSAxMAogICAgICAgICYmICRBbGxVc2Vyc1BlcmlvZERhdGF7JFVzZXJJRH17Mn17VXNlclN0YXR1c30KICAgICkgPyAxIDogMDsKCiRTZWxmLT5UcnVlKAogICAgJENvcnJlY3RVc2VyRGF0YSwKICAgICdWZXJpZnkgdGhlIHBlcmlvZCBkYXRhIG9mIHRoZSB0ZXN0IHVzZXIgaW4gdGhlIGxpc3QnCik7CgojIGdldCBjdXJyZW50IHBlcmlvZCBvZiB1c2VyCm15ICVVc2VyQ3VycmVudFBlcmlvZCA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+VXNlckN1cnJlbnRQZXJpb2RHZXQoCiAgICBZZWFyICA9PiAnMjAxMScsCiAgICBNb250aCA9PiAnMDEnLAogICAgRGF5ICAgPT4gJzE1JywKKTsKCiMgY2hlY2sgdGhlIHBlcmlvZAokU2VsZi0+SXMoCiAgICAkVXNlckN1cnJlbnRQZXJpb2R7JFVzZXJJRH0tPntQZXJpb2R9LAogICAgMSwKICAgICdWZXJpZnkgY3VycmVudCBwZXJpb2QnLAopOwoKJFNlbGYtPklzKAogICAgJFVzZXJDdXJyZW50UGVyaW9keyRVc2VySUR9LT57RGF0ZVN0YXJ0fSwKICAgICcyMDExLTAxLTAxJywKICAgICdWZXJpZnkgc3RhcnQgZGF0ZSBvZiBjdXJyZW50IHBlcmlvZCcsCik7CgokU2VsZi0+SXMoCiAgICAkVXNlckN1cnJlbnRQZXJpb2R7JFVzZXJJRH0tPntEYXRlRW5kfSwKICAgICcyMDExLTAxLTMxJywKICAgICdWZXJpZnkgZW5kIGRhdGUgb2YgY3VycmVudCBwZXJpb2QnLAopOwoKIyBoYXNoIHdpdGggdGhlIHdvcmtpbmcgdW5pdHMgZm9yIEphbi4gMTV0aCwgMjAxMQpteSAlV29ya2luZ1VuaXRzID0gKAogICAgWWVhciAgICAgICAgID0+ICcyMDExJywKICAgIE1vbnRoICAgICAgICA9PiAnMDEnLAogICAgRGF5ICAgICAgICAgID0+ICcxNScsCiAgICBMZWF2ZURheSAgICAgPT4gMCwKICAgIFNpY2sgICAgICAgICA9PiAwLAogICAgT3ZlcnRpbWUgICAgID0+IDAsCiAgICBXb3JraW5nVW5pdHMgPT4gWwogICAgICAgIHsKICAgICAgICAgICAgUHJvamVjdElEID0+ICRQcm9qZWN0SUQsCiAgICAgICAgICAgIEFjdGlvbklEICA9PiAkQWN0aW9uRGF0YXtJRH0sCiAgICAgICAgICAgIFJlbWFyayAgICA9PiAnTXkgY29tbWVudCcsCiAgICAgICAgICAgIFN0YXJ0VGltZSA9PiAnNzowMCcsCiAgICAgICAgICAgIEVuZFRpbWUgICA9PiAnMTA6MDAnLAogICAgICAgICAgICBQZXJpb2QgICAgPT4gMy4wLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBQcm9qZWN0SUQgPT4gJFByb2plY3RJRCwKICAgICAgICAgICAgQWN0aW9uSUQgID0+ICRBY3Rpb25EYXRhe0lEfSwKICAgICAgICAgICAgUmVtYXJrICAgID0+ICdNeSBjb21tZW50JywKICAgICAgICAgICAgU3RhcnRUaW1lID0+ICcxMzowMCcsCiAgICAgICAgICAgIEVuZFRpbWUgICA9PiAnMTU6MDAnLAogICAgICAgICAgICBQZXJpb2QgICAgPT4gMi4wLAogICAgICAgIH0sCiAgICBdLAopOwoKIyBpbnNlcnQgd29ya2luZyB1bml0cyBpbiB0aGUgREIKJEluc2VydCA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+V29ya2luZ1VuaXRzSW5zZXJ0KCVXb3JraW5nVW5pdHMpOwoKIyB2ZXJpZnkgdGhhdCB0aGUgd29ya2luZyB1bml0cyB3ZXJlIHN1Y2Nlc3NmdWxseSBpbnNlcnRlZAokU2VsZi0+VHJ1ZSgKICAgICRJbnNlcnQsCiAgICAnSW5zZXJ0IHdvcmtpbmcgdW5pdHMgZm9yIHRlc3QgdXNlciBpbnRvIGRhdGFiYXNlJywKKTsKCiMgZ2V0IGFsbCBkYXlzIHdpdGhvdXQgd29ya2luZyB1bml0cyBlbnRyeQpteSAlV29ya2luZ1VuaXRzQ2hlY2sgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPldvcmtpbmdVbml0c0NvbXBsZXRuZXNzQ2hlY2soCiAgICBVc2VySUQgPT4gJFVzZXJJRCwKKTsKCiMgdmVyaWZ5IHRoYXQgSmFuIDE1dGgsIDIwMTEgaXMgbm90IGluIHRoZSBsaXN0IG9mIGRheXMgd2l0aG91dCBlbnRyeQokU2VsZi0+RmFsc2UoCiAgICBkZWZpbmVkICRXb3JraW5nVW5pdHNDaGVja3tJbmNvbXBsZXRlfXsyMDExfXswMX17MTV9LAogICAgJ1ZlcmlmeSBjb21wbGV0aW9uIG9mIHdvcmtpbmcgdW5pdHMnCik7CgojIGdldCB3b3JraW5nIHVuaXRzIG9mIGFsbCB1c2VycwpteSAlRGF0YSA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+VXNlclJlcG9ydGluZygKICAgIFllYXIgID0+ICcyMDExJywKICAgIE1vbnRoID0+ICcwMScsCiAgICBEYXkgICA9PiAnMTUnLAopOwoKIyB2ZXJpZnkgdGhlIGNvcnJlY3RuZXNzIG9mIHRoZSB3b3JraW5nIHVuaXRzIGZvciB0aGUgdGVzdCB1c2VyCiRTZWxmLT5JcygKICAgICREYXRheyRVc2VySUR9e1dvcmtpbmdIb3Vyc1RvdGFsfSwKICAgIDUsCiAgICAnVmVyaWZ5IG51bWJlciBvZiB3b3JraW5nIGhvdXJzIG9mIHRoZSB0ZXN0IHVzZXInLAopOwoKIyBnZXQgcHJvamVjdHMgaW4gd2hpY2ggdGhlIHRlc3QgdXNlciBoYXMgd29ya2VkIG9uCm15IEBMYXN0UHJvamVjdHMgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPkxhc3RQcm9qZWN0c09mVXNlcigpOwoKbXkgJFRlc3RQcm9qZWN0RXhpc3RlbmNlOwoKZm9yIG15ICRJRCAoQExhc3RQcm9qZWN0cykgewogICAgbmV4dCBpZiAkSUQgIT0gJFByb2plY3RJRDsKICAgICRUZXN0UHJvamVjdEV4aXN0ZW5jZSA9IDE7Cn0KCiMgdmVyaWZ5IHRoYXQgZXhpc3RlbmNlIG9mIHRoZSB0ZXN0IHByb2plY3QgaW50byB0aGUgdXNlcidzIGxpc3QKJFNlbGYtPlRydWUoCiAgICAkVGVzdFByb2plY3RFeGlzdGVuY2UsCiAgICAnVmVyaWZ5IHRoYXQgZXhpc3RlbmNlIG9mIHRoZSB0ZXN0IHByb2plY3QgaW50byB0aGUgdXNlclwncyBsaXN0JywKKTsKCiMgZ2V0IHByb2plY3QgLSBhY3Rpb24gd29ya2luZyBob3VycwpteSAlUHJvamVjdEFjdGlvbldvcmtpbmdIb3VycyA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+UHJvamVjdEFjdGlvblJlcG9ydGluZygKICAgIFllYXIgICA9PiAyMDExLAogICAgTW9udGggID0+IDEsCiAgICBVc2VySUQgPT4gJFVzZXJJRCwKKTsKCiMgdmVyaWZ5IHRvdGFsIHJlcG9ydGVkIGhvdXJzIGZvciB0aGUgdGVzdCBhY3Rpb24gKHRhc2spIGFuZCB0ZXN0IHByb2plY3QKJFNlbGYtPklzKAogICAgJFByb2plY3RBY3Rpb25Xb3JraW5nSG91cnN7JFByb2plY3RJRH17QWN0aW9uc317ICRBY3Rpb25EYXRhe0lEfSB9e1RvdGFsfSwKICAgICc1JywKICAgICdWZXJpZnkgdG90YWwgcmVwb3J0ZWQgaG91cnMgZm9yIHRoZSB0ZXN0IGFjdGlvbiAodGFzaykgYW5kIHRlc3QgcHJvamVjdCcsCik7CgojIGdldCBwcm9qZWN0IHdvcmtpbmcgdW5pdHMKbXkgQFByb2plY3RIaXN0b3J5QXJyYXkgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPlByb2plY3RIaXN0b3J5KCBQcm9qZWN0SUQgPT4gJFByb2plY3RJRCApOwoKbXkgJFRvdGFsSG91cnM7CgojIGdldCBzdW0gb2YgYWxsIHdvcmtpbmcgdW5pdCBmb3IgdGhlIHRlc3QgcHJvamVjdApmb3IgbXkgJFByb2plY3QgKEBQcm9qZWN0SGlzdG9yeUFycmF5KSB7CiAgICAkVG90YWxIb3VycyArPSAkUHJvamVjdC0+e1BlcmlvZH07Cn0KCm15ICRUZXN0UHJvamVjdFRvdGFsSG91cnMgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPlByb2plY3RUb3RhbEhvdXJzKAogICAgUHJvamVjdElEID0+ICRQcm9qZWN0SUQsCik7CgojIHZlcmlmeSB0b3RhbCB3b3JraW5nIHVuaXRzIGZvciB0aGUgdGVzdCBwcm9qZWN0CiRTZWxmLT5JcygKICAgIGludCAkVG90YWxIb3VycywKICAgIGludCAkVGVzdFByb2plY3RUb3RhbEhvdXJzLAogICAgJ1ZlcmlmeSB0b3RhbCBob3VycyBvZiB0ZXN0IHByb2plY3QnLAopOwoKIyBkZWxldGUgd29ya2luZyB1bml0cyBmb3IgSmFuLiAxNXRoLCAyMDExCm15ICREZWxldGUgPSAkVGltZUFjY291bnRpbmdPYmplY3QtPldvcmtpbmdVbml0c0RlbGV0ZSgKICAgIFllYXIgID0+ICcyMDExJywKICAgIE1vbnRoID0+ICcxJywKICAgIERheSAgID0+ICcxNScsCik7CgojIHZlcmlmeSB0aGF0IHRoZSB3b3JraW5nIHVuaXRzIHdlcmUgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQKJFNlbGYtPlRydWUoCiAgICAkRGVsZXRlLAogICAgJ0RlbGV0ZSB3b3JraW5nIHVuaXRzIGZvciB0ZXN0JywKKTsKCiMgZ2V0IHdvcmtpbmcgdW5pdHMgZm9yIEphbi4gMTV0aCwgMjAxMQpteSAlV29ya2luZ1VuaXRzRGF0YSA9ICRUaW1lQWNjb3VudGluZ09iamVjdC0+V29ya2luZ1VuaXRzR2V0KAogICAgWWVhciAgID0+ICcyMDExJywKICAgIE1vbnRoICA9PiAnMScsCiAgICBEYXkgICAgPT4gJzE1JywKICAgIFVzZXJJRCA9PiAkVXNlcklELAopOwoKIyB2ZXJpZnkgaW5leGlzdGVuY2Ugb2YgdGhlIGRlbGV0ZWQgd29ya2luZyB1bml0cwokU2VsZi0+SXMoCiAgICAkV29ya2luZ1VuaXRzRGF0YXtUb3RhbH0sCiAgICAnMCcsCiAgICAnVmVyaWZ5IGluZXhpc3RlbmNlIG9mIHRoZSBkZWxldGVkIHdvcmtpbmcgdW5pdHMnLAopOwoKIyBzZXQgdG8gaW52YWxpZCBhbGwgcmVnaXN0cmllcyB1c2VkIGZvciB0aGUgdGVzdHMKJFRpbWVBY2NvdW50aW5nT2JqZWN0LT5BY3Rpb25TZXR0aW5nc1VwZGF0ZSgKICAgIEFjdGlvbklEICAgICA9PiAkQWN0aW9uRGF0YXtJRH0sCiAgICBBY3Rpb24gICAgICAgPT4gJE5ld0FjdGlvbkRhdGF7QWN0aW9ufSAuICdtb2RpZmllZCcsCiAgICBBY3Rpb25TdGF0dXMgPT4gMCwKKTsKCiRUaW1lQWNjb3VudGluZ09iamVjdC0+UHJvamVjdFNldHRpbmdzVXBkYXRlKAogICAgSUQgICAgICAgICAgICAgICAgID0+ICRQcm9qZWN0SUQsCiAgICBQcm9qZWN0ICAgICAgICAgICAgPT4gJE5ld1Byb2plY3REYXRhe1Byb2plY3R9IC4gJ21vZGlmaWVkJywKICAgIFByb2plY3REZXNjcmlwdGlvbiA9PiAnVGVzdCcsCiAgICBQcm9qZWN0U3RhdHVzICAgICAgPT4gMCwKKTsKCiRVc2VyRGF0YXtWYWxpZElEfSA9IDI7CiRVc2VyRGF0YXtVc2VySUR9ICA9ICRVc2VySUQ7CiRVc2VyT2JqZWN0LT5Vc2VyVXBkYXRlKCVVc2VyRGF0YSk7CiRUaW1lQWNjb3VudGluZ09iamVjdC0+VXNlclNldHRpbmdzVXBkYXRlKAogICAgVXNlcklEICAgICAgICA9PiAkVXNlcklELAogICAgRGVzY3JpcHRpb24gICA9PiAnVGVzdCB1c2VyJywKICAgIENyZWF0ZVByb2plY3QgPT4gMCwKICAgIFNob3dPdmVydGltZSAgPT4gMCwKICAgIFBlcmlvZCAgICAgICAgPT4gewogICAgICAgIDEgPT4gewogICAgICAgICAgICBEYXRlU3RhcnQgICA9PiAnMjAxMS0wMS0wMScsCiAgICAgICAgICAgIERhdGVFbmQgICAgID0+ICcyMDExLTAxLTMxJywKICAgICAgICAgICAgV2Vla2x5SG91cnMgPT4gJzUwJywKICAgICAgICAgICAgTGVhdmVEYXlzICAgPT4gJzEwJywKICAgICAgICAgICAgT3ZlcnRpbWUgICAgPT4gJzIwJywKICAgICAgICAgICAgVXNlclN0YXR1cyAgPT4gMCwKICAgICAgICB9LAogICAgICAgIDIgPT4gewogICAgICAgICAgICBEYXRlU3RhcnQgICA9PiAnMjAxMS0wMi0wMScsCiAgICAgICAgICAgIERhdGVFbmQgICAgID0+ICcyMDExLTAyLTI4JywKICAgICAgICAgICAgV2Vla2x5SG91cnMgPT4gJzMwJywKICAgICAgICAgICAgTGVhdmVEYXlzICAgPT4gJzUnLAogICAgICAgICAgICBPdmVydGltZSAgICA9PiAnMTAnLAogICAgICAgICAgICBVc2VyU3RhdHVzICA9PiAwLAogICAgICAgIH0sCiAgICB9LAopOwoKMTsK
Ly8gLS0KLy8ganF1ZXJ5LWNvbWJvYm94LmpzIC0gc3BlY2lhbCBqcXVlcnkgdWkgY29tYm9ib3gKLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTAgT1RSUyBBRywgaHR0cDovL290cnMub3JnL1xuIjsKLy8gLS0KLy8gJElkOiBqcXVlcnktY29tYm9ib3guanMsdiAxLjQgMjAxMi0wMS0zMSAxMzo1NDozOCBtbiBFeHAgJAovLyAtLQovLyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQovLyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCi8vIC0tCgooZnVuY3Rpb24oJCkgewogICAgJC53aWRnZXQoInVpLmNvbWJvYm94IiwgewogICAgICAgIG9wdGlvbnM6IHsKICAgICAgICAgICAgQ2xhc3M6ICcnLAogICAgICAgICAgICBJRFByZWZpeElucHV0OiAnQ29tYm9fJywKICAgICAgICAgICAgSURQcmVmaXhCdXR0b246ICdDb21ib0J0bl8nLAogICAgICAgICAgICBWYWxpZGF0aW9uVG9vbHRpcDogJycsCiAgICAgICAgICAgIExhbmc6IHsKICAgICAgICAgICAgICAgIFNob3dBbGxJdGVtczogJ1Nob3cgYWxsIGl0ZW1zJwogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBfY3JlYXRlOiBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIFNlbGYgPSB0aGlzLAogICAgICAgICAgICAgICAgJFNlbGVjdCA9IHRoaXMuZWxlbWVudC5oaWRlKCksCiAgICAgICAgICAgICAgICAkU2VsZWN0ZWQgPSAkU2VsZWN0LmNoaWxkcmVuKCI6c2VsZWN0ZWQiKSwKICAgICAgICAgICAgICAgIFZhbHVlID0gJFNlbGVjdGVkLnZhbCgpID8gJFNlbGVjdGVkLnRleHQoKSA6ICIiLAogICAgICAgICAgICAgICAgJElucHV0ID0gdGhpcy5pbnB1dCA9ICQoIjxpbnB1dD4iKQogICAgICAgICAgICAgICAgLmFkZENsYXNzKHRoaXMub3B0aW9ucy5DbGFzcykKICAgICAgICAgICAgICAgIC5hdHRyKCdpZCcsIHRoaXMub3B0aW9ucy5JRFByZWZpeElucHV0ICsgJFNlbGVjdFswXS5pZCkKICAgICAgICAgICAgICAgIC5pbnNlcnRBZnRlcigkU2VsZWN0KQogICAgICAgICAgICAgICAgLmNzcygnd2lkdGgnLCAkU2VsZWN0LndpZHRoKCkpCiAgICAgICAgICAgICAgICAudmFsKFZhbHVlKQogICAgICAgICAgICAgICAgLmF1dG9jb21wbGV0ZSh7CiAgICAgICAgICAgICAgICAgICAgZGVsYXk6IDAsCiAgICAgICAgICAgICAgICAgICAgbWluTGVuZ3RoOiAwLAogICAgICAgICAgICAgICAgICAgIHNvdXJjZTogZnVuY3Rpb24oUmVxdWVzdCwgUmVzcG9uc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE1hdGNoZXIgPSBuZXcgUmVnRXhwKCQudWkuYXV0b2NvbXBsZXRlLmVzY2FwZVJlZ2V4KFJlcXVlc3QudGVybSksICJpIiApOwoKICAgICAgICAgICAgICAgICAgICAgICAgUmVzcG9uc2UoJFNlbGVjdC5jaGlsZHJlbigib3B0aW9uIikubWFwKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIFRleHQgPSAkKHRoaXMpLnRleHQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlICYmICghUmVxdWVzdC50ZXJtIHx8IE1hdGNoZXIudGVzdChUZXh0KSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IFRleHQucmVwbGFjZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBSZWdFeHAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIig/IVteJjtdKzspKD8hPFtePD5dKikoIiArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC51aS5hdXRvY29tcGxldGUuZXNjYXBlUmVnZXgoUmVxdWVzdC50ZXJtKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIikoPyFbXjw+XSo+KSg/IVteJjtdKzspIiwgImdpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwgIjxzdHJvbmc+JDE8L3N0cm9uZz4iICksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBUZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb246IHRoaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBzZWxlY3Q6IGZ1bmN0aW9uKEV2ZW50LCBVSSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoVUkuaXRlbS5vcHRpb24uZGlzYWJsZWQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBVSS5pdGVtLm9wdGlvbi5zZWxlY3RlZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIFNlbGYuX3RyaWdnZXIoInNlbGVjdGVkIiwgRXZlbnQsIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW06IFVJLml0ZW0ub3B0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgb3BlbjogZnVuY3Rpb24oRXZlbnQsIFVJKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICQoJ3VsLnVpLWF1dG9jb21wbGV0ZS51aS1tZW51JykuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgd2lkdGggPSAkKHRoaXMpLndpZHRoKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLndpZHRoKHdpZHRoICsgMzApOwogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGNoYW5nZTogZnVuY3Rpb24oRXZlbnQsIFVJKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghVUkuaXRlbSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIE1hdGNoZXIgPSBuZXcgUmVnRXhwKCAiXiIgKyAkLnVpLmF1dG9jb21wbGV0ZS5lc2NhcGVSZWdleCggJCh0aGlzKS52YWwoKSApICsgIiQiLCAiaSIgKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGVjdC5jaGlsZHJlbigib3B0aW9uIikuZWFjaChmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS50ZXh0KCkubWF0Y2goTWF0Y2hlcikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZCA9IFZhbGlkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFWYWxpZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBpbnZhbGlkIHZhbHVlLCBhcyBpdCBkaWRuJ3QgbWF0Y2ggYW55dGhpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnZhbCgiIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFNlbGVjdC52YWwoIiIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRJbnB1dC5kYXRhKCJhdXRvY29tcGxldGUiKS50ZXJtID0gIiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC5hZGRDbGFzcygidWktd2lkZ2V0IHVpLXdpZGdldC1jb250ZW50IHVpLWNvcm5lci1sZWZ0IikKICAgICAgICAgICAgICAgIC5hZnRlcih0aGlzLm9wdGlvbnMuVmFsaWRhdGlvblRvb2x0aXApOwoKICAgICAgICAgICAgJElucHV0LmRhdGEoImF1dG9jb21wbGV0ZSIpLl9yZW5kZXJJdGVtID0gZnVuY3Rpb24oVUwsIEl0ZW0pIHsKICAgICAgICAgICAgICAgIHJldHVybiAkKCI8bGk+PC9saT4iKQogICAgICAgICAgICAgICAgICAgIC5kYXRhKCJpdGVtLmF1dG9jb21wbGV0ZSIsIEl0ZW0pCiAgICAgICAgICAgICAgICAgICAgLmFwcGVuZCgiPGE+IiArIEl0ZW0ubGFiZWwgKyAiPC9hPiIpCiAgICAgICAgICAgICAgICAgICAgLmFwcGVuZFRvKFVMKTsKICAgICAgICAgICAgfTsKCiAgICAgICAgICAgIHRoaXMuYnV0dG9uID0gJCgiPGJ1dHRvbiB0eXBlPSdidXR0b24nPiZuYnNwOzwvYnV0dG9uPiIpCiAgICAgICAgICAgICAgICAuYXR0cigidGFiSW5kZXgiLCAtMSkKICAgICAgICAgICAgICAgIC5hdHRyKCJ0aXRsZSIsIHRoaXMub3B0aW9ucy5MYW5nLlNob3dBbGxJdGVtcykKICAgICAgICAgICAgICAgIC5hdHRyKCdpZCcsIHRoaXMub3B0aW9ucy5JRFByZWZpeEJ1dHRvbiArICRTZWxlY3RbMF0uaWQpCiAgICAgICAgICAgICAgICAuaW5zZXJ0QWZ0ZXIoJElucHV0KQogICAgICAgICAgICAgICAgLmJ1dHRvbih7CiAgICAgICAgICAgICAgICAgICAgaWNvbnM6IHsKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWFyeTogInVpLWljb24tdHJpYW5nbGUtMS1zIgogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgdGV4dDogZmFsc2UKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoInVpLWNvcm5lci1hbGwiKQogICAgICAgICAgICAgICAgLmFkZENsYXNzKCJ1aS1jb3JuZXItcmlnaHQgdWktYnV0dG9uLWljb24iKQogICAgICAgICAgICAgICAgLmNsaWNrKGZ1bmN0aW9uKEV2ZW50KSB7CiAgICAgICAgICAgICAgICAgICAgLy8gY2xvc2UgaWYgYWxyZWFkeSB2aXNpYmxlCiAgICAgICAgICAgICAgICAgICAgaWYgKCRJbnB1dC5hdXRvY29tcGxldGUoIndpZGdldCIpLmlzKCI6dmlzaWJsZSIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRJbnB1dC5hdXRvY29tcGxldGUoImNsb3NlIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgIC8vIHBhc3MgZW1wdHkgc3RyaW5nIGFzIHZhbHVlIHRvIHNlYXJjaCBmb3IsIGRpc3BsYXlpbmcgYWxsIHJlc3VsdHMKICAgICAgICAgICAgICAgICAgICAkSW5wdXQuYXV0b2NvbXBsZXRlKCJzZWFyY2giLCAiIikuZm9jdXMoKTsKICAgICAgICAgICAgICAgICAgICBFdmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgICAgIEV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0sCgogICAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICB0aGlzLmlucHV0LnJlbW92ZSgpOwogICAgICAgICAgICB0aGlzLmJ1dHRvbi5yZW1vdmUoKTsKICAgICAgICAgICAgdGhpcy5lbGVtZW50LnNob3coKTsKICAgICAgICAgICAgJC5XaWRnZXQucHJvdG90eXBlLmRlc3Ryb3kuY2FsbCh0aGlzKTsKICAgICAgICB9CiAgICB9KTsKfSkoalF1ZXJ5KTs=
LyoKICogalF1ZXJ5IFVJIEJ1dHRvbiAxLjguMTYKICoKICogQ29weXJpZ2h0IDIwMTEsIEFVVEhPUlMudHh0IChodHRwOi8vanF1ZXJ5dWkuY29tL2Fib3V0KQogKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy4KICogaHR0cDovL2pxdWVyeS5vcmcvbGljZW5zZQogKgogKiBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1VJL0J1dHRvbgogKgogKiBEZXBlbmRzOgogKglqcXVlcnkudWkuY29yZS5qcwogKglqcXVlcnkudWkud2lkZ2V0LmpzCiAqLwooZnVuY3Rpb24oYil7dmFyIGgsaSxqLGcsbD1mdW5jdGlvbigpe3ZhciBhPWIodGhpcykuZmluZCgiOnVpLWJ1dHRvbiIpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXthLmJ1dHRvbigicmVmcmVzaCIpfSwxKX0saz1mdW5jdGlvbihhKXt2YXIgYz1hLm5hbWUsZT1hLmZvcm0sZj1iKFtdKTtpZihjKWY9ZT9iKGUpLmZpbmQoIltuYW1lPSciK2MrIiddIik6YigiW25hbWU9JyIrYysiJ10iLGEub3duZXJEb2N1bWVudCkuZmlsdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZm9ybX0pO3JldHVybiBmfTtiLndpZGdldCgidWkuYnV0dG9uIix7b3B0aW9uczp7ZGlzYWJsZWQ6bnVsbCx0ZXh0OnRydWUsbGFiZWw6bnVsbCxpY29uczp7cHJpbWFyeTpudWxsLHNlY29uZGFyeTpudWxsfX0sX2NyZWF0ZTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5jbG9zZXN0KCJmb3JtIikudW5iaW5kKCJyZXNldC5idXR0b24iKS5iaW5kKCJyZXNldC5idXR0b24iLGwpO2lmKHR5cGVvZiB0aGlzLm9wdGlvbnMuZGlzYWJsZWQhPT0KImJvb2xlYW4iKXRoaXMub3B0aW9ucy5kaXNhYmxlZD10aGlzLmVsZW1lbnQucHJvcEF0dHIoImRpc2FibGVkIik7dGhpcy5fZGV0ZXJtaW5lQnV0dG9uVHlwZSgpO3RoaXMuaGFzVGl0bGU9ISF0aGlzLmJ1dHRvbkVsZW1lbnQuYXR0cigidGl0bGUiKTt2YXIgYT10aGlzLGM9dGhpcy5vcHRpb25zLGU9dGhpcy50eXBlPT09ImNoZWNrYm94Inx8dGhpcy50eXBlPT09InJhZGlvIixmPSJ1aS1zdGF0ZS1ob3ZlciIrKCFlPyIgdWktc3RhdGUtYWN0aXZlIjoiIik7aWYoYy5sYWJlbD09PW51bGwpYy5sYWJlbD10aGlzLmJ1dHRvbkVsZW1lbnQuaHRtbCgpO2lmKHRoaXMuZWxlbWVudC5pcygiOmRpc2FibGVkIikpYy5kaXNhYmxlZD10cnVlO3RoaXMuYnV0dG9uRWxlbWVudC5hZGRDbGFzcygidWktYnV0dG9uIHVpLXdpZGdldCB1aS1zdGF0ZS1kZWZhdWx0IHVpLWNvcm5lci1hbGwiKS5hdHRyKCJyb2xlIiwiYnV0dG9uIikuYmluZCgibW91c2VlbnRlci5idXR0b24iLGZ1bmN0aW9uKCl7aWYoIWMuZGlzYWJsZWQpe2IodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWhvdmVyIik7CnRoaXM9PT1oJiZiKHRoaXMpLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKX19KS5iaW5kKCJtb3VzZWxlYXZlLmJ1dHRvbiIsZnVuY3Rpb24oKXtjLmRpc2FibGVkfHxiKHRoaXMpLnJlbW92ZUNsYXNzKGYpfSkuYmluZCgiY2xpY2suYnV0dG9uIixmdW5jdGlvbihkKXtpZihjLmRpc2FibGVkKXtkLnByZXZlbnREZWZhdWx0KCk7ZC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKX19KTt0aGlzLmVsZW1lbnQuYmluZCgiZm9jdXMuYnV0dG9uIixmdW5jdGlvbigpe2EuYnV0dG9uRWxlbWVudC5hZGRDbGFzcygidWktc3RhdGUtZm9jdXMiKX0pLmJpbmQoImJsdXIuYnV0dG9uIixmdW5jdGlvbigpe2EuYnV0dG9uRWxlbWVudC5yZW1vdmVDbGFzcygidWktc3RhdGUtZm9jdXMiKX0pO2lmKGUpe3RoaXMuZWxlbWVudC5iaW5kKCJjaGFuZ2UuYnV0dG9uIixmdW5jdGlvbigpe2d8fGEucmVmcmVzaCgpfSk7dGhpcy5idXR0b25FbGVtZW50LmJpbmQoIm1vdXNlZG93bi5idXR0b24iLGZ1bmN0aW9uKGQpe2lmKCFjLmRpc2FibGVkKXtnPQpmYWxzZTtpPWQucGFnZVg7aj1kLnBhZ2VZfX0pLmJpbmQoIm1vdXNldXAuYnV0dG9uIixmdW5jdGlvbihkKXtpZighYy5kaXNhYmxlZClpZihpIT09ZC5wYWdlWHx8aiE9PWQucGFnZVkpZz10cnVlfSl9aWYodGhpcy50eXBlPT09ImNoZWNrYm94Iil0aGlzLmJ1dHRvbkVsZW1lbnQuYmluZCgiY2xpY2suYnV0dG9uIixmdW5jdGlvbigpe2lmKGMuZGlzYWJsZWR8fGcpcmV0dXJuIGZhbHNlO2IodGhpcykudG9nZ2xlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpO2EuYnV0dG9uRWxlbWVudC5hdHRyKCJhcmlhLXByZXNzZWQiLGEuZWxlbWVudFswXS5jaGVja2VkKX0pO2Vsc2UgaWYodGhpcy50eXBlPT09InJhZGlvIil0aGlzLmJ1dHRvbkVsZW1lbnQuYmluZCgiY2xpY2suYnV0dG9uIixmdW5jdGlvbigpe2lmKGMuZGlzYWJsZWR8fGcpcmV0dXJuIGZhbHNlO2IodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpO2EuYnV0dG9uRWxlbWVudC5hdHRyKCJhcmlhLXByZXNzZWQiLCJ0cnVlIik7CnZhciBkPWEuZWxlbWVudFswXTtrKGQpLm5vdChkKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gYih0aGlzKS5idXR0b24oIndpZGdldCIpWzBdfSkucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpLmF0dHIoImFyaWEtcHJlc3NlZCIsImZhbHNlIil9KTtlbHNle3RoaXMuYnV0dG9uRWxlbWVudC5iaW5kKCJtb3VzZWRvd24uYnV0dG9uIixmdW5jdGlvbigpe2lmKGMuZGlzYWJsZWQpcmV0dXJuIGZhbHNlO2IodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpO2g9dGhpcztiKGRvY3VtZW50KS5vbmUoIm1vdXNldXAiLGZ1bmN0aW9uKCl7aD1udWxsfSl9KS5iaW5kKCJtb3VzZXVwLmJ1dHRvbiIsZnVuY3Rpb24oKXtpZihjLmRpc2FibGVkKXJldHVybiBmYWxzZTtiKHRoaXMpLnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKX0pLmJpbmQoImtleWRvd24uYnV0dG9uIixmdW5jdGlvbihkKXtpZihjLmRpc2FibGVkKXJldHVybiBmYWxzZTtpZihkLmtleUNvZGU9PWIudWkua2V5Q29kZS5TUEFDRXx8CmQua2V5Q29kZT09Yi51aS5rZXlDb2RlLkVOVEVSKWIodGhpcykuYWRkQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpfSkuYmluZCgia2V5dXAuYnV0dG9uIixmdW5jdGlvbigpe2IodGhpcykucmVtb3ZlQ2xhc3MoInVpLXN0YXRlLWFjdGl2ZSIpfSk7dGhpcy5idXR0b25FbGVtZW50LmlzKCJhIikmJnRoaXMuYnV0dG9uRWxlbWVudC5rZXl1cChmdW5jdGlvbihkKXtkLmtleUNvZGU9PT1iLnVpLmtleUNvZGUuU1BBQ0UmJmIodGhpcykuY2xpY2soKX0pfXRoaXMuX3NldE9wdGlvbigiZGlzYWJsZWQiLGMuZGlzYWJsZWQpO3RoaXMuX3Jlc2V0QnV0dG9uKCl9LF9kZXRlcm1pbmVCdXR0b25UeXBlOmZ1bmN0aW9uKCl7dGhpcy50eXBlPXRoaXMuZWxlbWVudC5pcygiOmNoZWNrYm94Iik/ImNoZWNrYm94Ijp0aGlzLmVsZW1lbnQuaXMoIjpyYWRpbyIpPyJyYWRpbyI6dGhpcy5lbGVtZW50LmlzKCJpbnB1dCIpPyJpbnB1dCI6ImJ1dHRvbiI7aWYodGhpcy50eXBlPT09ImNoZWNrYm94Inx8dGhpcy50eXBlPT09CiJyYWRpbyIpe3ZhciBhPXRoaXMuZWxlbWVudC5wYXJlbnRzKCkuZmlsdGVyKCI6bGFzdCIpLGM9ImxhYmVsW2Zvcj0nIit0aGlzLmVsZW1lbnQuYXR0cigiaWQiKSsiJ10iO3RoaXMuYnV0dG9uRWxlbWVudD1hLmZpbmQoYyk7aWYoIXRoaXMuYnV0dG9uRWxlbWVudC5sZW5ndGgpe2E9YS5sZW5ndGg/YS5zaWJsaW5ncygpOnRoaXMuZWxlbWVudC5zaWJsaW5ncygpO3RoaXMuYnV0dG9uRWxlbWVudD1hLmZpbHRlcihjKTtpZighdGhpcy5idXR0b25FbGVtZW50Lmxlbmd0aCl0aGlzLmJ1dHRvbkVsZW1lbnQ9YS5maW5kKGMpfXRoaXMuZWxlbWVudC5hZGRDbGFzcygidWktaGVscGVyLWhpZGRlbi1hY2Nlc3NpYmxlIik7KGE9dGhpcy5lbGVtZW50LmlzKCI6Y2hlY2tlZCIpKSYmdGhpcy5idXR0b25FbGVtZW50LmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKTt0aGlzLmJ1dHRvbkVsZW1lbnQuYXR0cigiYXJpYS1wcmVzc2VkIixhKX1lbHNlIHRoaXMuYnV0dG9uRWxlbWVudD10aGlzLmVsZW1lbnR9LAp3aWRnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5idXR0b25FbGVtZW50fSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1oZWxwZXItaGlkZGVuLWFjY2Vzc2libGUiKTt0aGlzLmJ1dHRvbkVsZW1lbnQucmVtb3ZlQ2xhc3MoInVpLWJ1dHRvbiB1aS13aWRnZXQgdWktc3RhdGUtZGVmYXVsdCB1aS1jb3JuZXItYWxsIHVpLXN0YXRlLWhvdmVyIHVpLXN0YXRlLWFjdGl2ZSAgdWktYnV0dG9uLWljb25zLW9ubHkgdWktYnV0dG9uLWljb24tb25seSB1aS1idXR0b24tdGV4dC1pY29ucyB1aS1idXR0b24tdGV4dC1pY29uLXByaW1hcnkgdWktYnV0dG9uLXRleHQtaWNvbi1zZWNvbmRhcnkgdWktYnV0dG9uLXRleHQtb25seSIpLnJlbW92ZUF0dHIoInJvbGUiKS5yZW1vdmVBdHRyKCJhcmlhLXByZXNzZWQiKS5odG1sKHRoaXMuYnV0dG9uRWxlbWVudC5maW5kKCIudWktYnV0dG9uLXRleHQiKS5odG1sKCkpO3RoaXMuaGFzVGl0bGV8fHRoaXMuYnV0dG9uRWxlbWVudC5yZW1vdmVBdHRyKCJ0aXRsZSIpOwpiLldpZGdldC5wcm90b3R5cGUuZGVzdHJveS5jYWxsKHRoaXMpfSxfc2V0T3B0aW9uOmZ1bmN0aW9uKGEsYyl7Yi5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpO2lmKGE9PT0iZGlzYWJsZWQiKWM/dGhpcy5lbGVtZW50LnByb3BBdHRyKCJkaXNhYmxlZCIsdHJ1ZSk6dGhpcy5lbGVtZW50LnByb3BBdHRyKCJkaXNhYmxlZCIsZmFsc2UpO2Vsc2UgdGhpcy5fcmVzZXRCdXR0b24oKX0scmVmcmVzaDpmdW5jdGlvbigpe3ZhciBhPXRoaXMuZWxlbWVudC5pcygiOmRpc2FibGVkIik7YSE9PXRoaXMub3B0aW9ucy5kaXNhYmxlZCYmdGhpcy5fc2V0T3B0aW9uKCJkaXNhYmxlZCIsYSk7aWYodGhpcy50eXBlPT09InJhZGlvIilrKHRoaXMuZWxlbWVudFswXSkuZWFjaChmdW5jdGlvbigpe2IodGhpcykuaXMoIjpjaGVja2VkIik/Yih0aGlzKS5idXR0b24oIndpZGdldCIpLmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLAoidHJ1ZSIpOmIodGhpcykuYnV0dG9uKCJ3aWRnZXQiKS5yZW1vdmVDbGFzcygidWktc3RhdGUtYWN0aXZlIikuYXR0cigiYXJpYS1wcmVzc2VkIiwiZmFsc2UiKX0pO2Vsc2UgaWYodGhpcy50eXBlPT09ImNoZWNrYm94Iil0aGlzLmVsZW1lbnQuaXMoIjpjaGVja2VkIik/dGhpcy5idXR0b25FbGVtZW50LmFkZENsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLCJ0cnVlIik6dGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1zdGF0ZS1hY3RpdmUiKS5hdHRyKCJhcmlhLXByZXNzZWQiLCJmYWxzZSIpfSxfcmVzZXRCdXR0b246ZnVuY3Rpb24oKXtpZih0aGlzLnR5cGU9PT0iaW5wdXQiKXRoaXMub3B0aW9ucy5sYWJlbCYmdGhpcy5lbGVtZW50LnZhbCh0aGlzLm9wdGlvbnMubGFiZWwpO2Vsc2V7dmFyIGE9dGhpcy5idXR0b25FbGVtZW50LnJlbW92ZUNsYXNzKCJ1aS1idXR0b24taWNvbnMtb25seSB1aS1idXR0b24taWNvbi1vbmx5IHVpLWJ1dHRvbi10ZXh0LWljb25zIHVpLWJ1dHRvbi10ZXh0LWljb24tcHJpbWFyeSB1aS1idXR0b24tdGV4dC1pY29uLXNlY29uZGFyeSB1aS1idXR0b24tdGV4dC1vbmx5IiksCmM9YigiPHNwYW4+PC9zcGFuPiIpLmFkZENsYXNzKCJ1aS1idXR0b24tdGV4dCIpLmh0bWwodGhpcy5vcHRpb25zLmxhYmVsKS5hcHBlbmRUbyhhLmVtcHR5KCkpLnRleHQoKSxlPXRoaXMub3B0aW9ucy5pY29ucyxmPWUucHJpbWFyeSYmZS5zZWNvbmRhcnksZD1bXTtpZihlLnByaW1hcnl8fGUuc2Vjb25kYXJ5KXtpZih0aGlzLm9wdGlvbnMudGV4dClkLnB1c2goInVpLWJ1dHRvbi10ZXh0LWljb24iKyhmPyJzIjplLnByaW1hcnk/Ii1wcmltYXJ5IjoiLXNlY29uZGFyeSIpKTtlLnByaW1hcnkmJmEucHJlcGVuZCgiPHNwYW4gY2xhc3M9J3VpLWJ1dHRvbi1pY29uLXByaW1hcnkgdWktaWNvbiAiK2UucHJpbWFyeSsiJz48L3NwYW4+Iik7ZS5zZWNvbmRhcnkmJmEuYXBwZW5kKCI8c3BhbiBjbGFzcz0ndWktYnV0dG9uLWljb24tc2Vjb25kYXJ5IHVpLWljb24gIitlLnNlY29uZGFyeSsiJz48L3NwYW4+Iik7aWYoIXRoaXMub3B0aW9ucy50ZXh0KXtkLnB1c2goZj8idWktYnV0dG9uLWljb25zLW9ubHkiOgoidWktYnV0dG9uLWljb24tb25seSIpO3RoaXMuaGFzVGl0bGV8fGEuYXR0cigidGl0bGUiLGMpfX1lbHNlIGQucHVzaCgidWktYnV0dG9uLXRleHQtb25seSIpO2EuYWRkQ2xhc3MoZC5qb2luKCIgIikpfX19KTtiLndpZGdldCgidWkuYnV0dG9uc2V0Iix7b3B0aW9uczp7aXRlbXM6IjpidXR0b24sIDpzdWJtaXQsIDpyZXNldCwgOmNoZWNrYm94LCA6cmFkaW8sIGEsIDpkYXRhKGJ1dHRvbikifSxfY3JlYXRlOmZ1bmN0aW9uKCl7dGhpcy5lbGVtZW50LmFkZENsYXNzKCJ1aS1idXR0b25zZXQiKX0sX2luaXQ6ZnVuY3Rpb24oKXt0aGlzLnJlZnJlc2goKX0sX3NldE9wdGlvbjpmdW5jdGlvbihhLGMpe2E9PT0iZGlzYWJsZWQiJiZ0aGlzLmJ1dHRvbnMuYnV0dG9uKCJvcHRpb24iLGEsYyk7Yi5XaWRnZXQucHJvdG90eXBlLl9zZXRPcHRpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxyZWZyZXNoOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5lbGVtZW50LmNzcygiZGlyZWN0aW9uIik9PT0KImx0ciI7dGhpcy5idXR0b25zPXRoaXMuZWxlbWVudC5maW5kKHRoaXMub3B0aW9ucy5pdGVtcykuZmlsdGVyKCI6dWktYnV0dG9uIikuYnV0dG9uKCJyZWZyZXNoIikuZW5kKCkubm90KCI6dWktYnV0dG9uIikuYnV0dG9uKCkuZW5kKCkubWFwKGZ1bmN0aW9uKCl7cmV0dXJuIGIodGhpcykuYnV0dG9uKCJ3aWRnZXQiKVswXX0pLnJlbW92ZUNsYXNzKCJ1aS1jb3JuZXItYWxsIHVpLWNvcm5lci1sZWZ0IHVpLWNvcm5lci1yaWdodCIpLmZpbHRlcigiOmZpcnN0IikuYWRkQ2xhc3MoYT8idWktY29ybmVyLWxlZnQiOiJ1aS1jb3JuZXItcmlnaHQiKS5lbmQoKS5maWx0ZXIoIjpsYXN0IikuYWRkQ2xhc3MoYT8idWktY29ybmVyLXJpZ2h0IjoidWktY29ybmVyLWxlZnQiKS5lbmQoKS5lbmQoKX0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuZWxlbWVudC5yZW1vdmVDbGFzcygidWktYnV0dG9uc2V0Iik7dGhpcy5idXR0b25zLm1hcChmdW5jdGlvbigpe3JldHVybiBiKHRoaXMpLmJ1dHRvbigid2lkZ2V0IilbMF19KS5yZW1vdmVDbGFzcygidWktY29ybmVyLWxlZnQgdWktY29ybmVyLXJpZ2h0IikuZW5kKCkuYnV0dG9uKCJkZXN0cm95Iik7CmIuV2lkZ2V0LnByb3RvdHlwZS5kZXN0cm95LmNhbGwodGhpcyl9fSl9KShqUXVlcnkpOwo7
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTcgT1RSUyBBRywgaHR0cDovL290cnMuY29tL1xuIjsKLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQovLyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgovLyAtLQoKInVzZSBzdHJpY3QiOwoKdmFyIENvcmUgPSBDb3JlIHx8IHt9OwpDb3JlLlVJID0gQ29yZS5VSSB8fCB7fTsKCi8qKgogKiBAbmFtZXNwYWNlCiAqIEBleHBvcnRzIFRhcmdldE5TIGFzIENvcmUuVUkuQ29tYm9Cb3gKICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgdGhlIGZ1bmN0aW9ucyBmb3IgdGhlIGNvbWJvYm94IGVsZW1lbnQuCiAqLwpDb3JlLlVJLkNvbWJvQm94ID0gKGZ1bmN0aW9uIChUYXJnZXROUykgewogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7U3RyaW5nfSBTZWxlY3RvciBUaGUgalF1ZXJ5IHNlbGVjdG9yIGZvciB0aGUgZWxlbWVudHMgdGhhdCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYXMgY29tYm9ib3hlcwogICAgICogQHBhcmFtIHtPYmplY3R9IE9wdGlvbnMgVGhlIGFkZGl0aW9uYWwgb3B0aW9ucyBmb3IgdGhlIGNvbWJvYm94OgogICAgICogICAgICAgICAgICAgICAgICAgICAgQ2xhc3M6IGEgc3RyaW5nIHdpdGggdGhlIGNsYXNzKGVzKSB0byBiZSBhZGRlZCB0byB0aGUgaW5wdXQgZmllbGQgb2YgdGhlIGNvbWJvYm94CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICBMYW5nOiBhbiBvYmplY3Qgd2l0aCBrZXkvdmFsdWUgcGFpcnMgb2YgdHJhbnNsYXRpb25zIGZvciB0aGUgY29tYm9ib3gKICAgICAqIEBkZXNjcmlwdGlvbgogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIGluaXRpYWxpemVzIHRoZSBjb21ib2JveGVzCiAgICAgKiBAcmV0dXJuIG5vdGhpbmcKICAgICAqLwogICAgVGFyZ2V0TlMuSW5pdCA9IGZ1bmN0aW9uIChTZWxlY3RvciwgT3B0aW9ucykgewogICAgICAgIFNlbGVjdG9yID0gU2VsZWN0b3IgfHwgJ3NlbGVjdCc7CiAgICAgICAgJChTZWxlY3RvcikuY29tYm9ib3goT3B0aW9ucyk7CiAgICB9OwoKICAgIHJldHVybiBUYXJnZXROUzsKfShDb3JlLlVJLkNvbWJvQm94IHx8IHt9KSk7Cg==
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTcgT1RSUyBBRywgaHR0cDovL290cnMuY29tL1xuIjsKLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQovLyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgovLyAtLQoKInVzZSBzdHJpY3QiOwoKdmFyIFRpbWVBY2NvdW50aW5nID0gVGltZUFjY291bnRpbmcgfHwge307ClRpbWVBY2NvdW50aW5nLkFnZW50ID0gVGltZUFjY291bnRpbmcuQWdlbnQgfHwge307CgovKioKICogQG5hbWVzcGFjZQogKiBAZXhwb3J0cyBUYXJnZXROUyBhcyBUaW1lQWNjb3VudGluZy5BZ2VudC5Db25maXJtYXRpb25EaWFsb2cKICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucyBmb3IgQ29uZmlybWF0aW9uRGlhbG9nLgogKi8KVGltZUFjY291bnRpbmcuQWdlbnQuQ29uZmlybWF0aW9uRGlhbG9nID0gKGZ1bmN0aW9uIChUYXJnZXROUykgewoKICAgIC8qKgogICAgICogQHZhcmlhYmxlCiAgICAgKiBAcHJpdmF0ZQogICAgICogICAgIFRoaXMgdmFyaWFibGUgc3RvcmVzIHRoZSBwYXJhbWV0ZXJzIHRoYXQgYXJlIHBhc3NlZCBmcm9tIHRoZSBEVEwgYW5kIGNvbnRhaW4gYWxsIHRoZSBkYXRhIHRoYXQgdGhlIGRpYWxvZyBuZWVkcy4KICAgICAqLwogICAgdmFyIERpYWxvZ0RhdGEgPSBbXTsKCiAgICAvKioKICAgICAqIEBmdW5jdGlvbgogICAgICogQHByaXZhdGUKICAgICAqIEByZXR1cm4gbm90aGluZwogICAgICogQGRlc2NyaXB0aW9uIFNob3dzIHdhaXRpbmcgZGlhbG9nIHVudGlsIHNlYXJjaCBzY3JlZW4gaXMgcmVhZHkuCiAgICAgKi8KICAgIGZ1bmN0aW9uIFNob3dXYWl0aW5nRGlhbG9nKFBvc2l0aW9uVG9wKXsKICAgICAgICBDb3JlLlVJLkRpYWxvZy5TaG93Q29udGVudERpYWxvZygnPGRpdiBjbGFzcz0iU3BhY2luZyBDZW50ZXIiPjxzcGFuIGNsYXNzPSJBSkFYTG9hZGVyIiB0aXRsZT0iJyArIENvcmUuQ29uZmlnLkdldCgnTG9hZGluZ01zZycpICsgJyI+PC9zcGFuPjwvZGl2PicsICcnLCBQb3NpdGlvblRvcCwgJ0NlbnRlcicsIHRydWUpOwogICAgfQoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge0V2ZW50T2JqZWN0fSBldmVudCBvYmplY3Qgb2YgdGhlIGNsaWNrZWQgZWxlbWVudC4KICAgICAqIEByZXR1cm4gbm90aGluZwogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIHNob3dzIGEgY29uZmlybWF0aW9uIGRpYWxvZyB3aXRoIDIgYnV0dG9uczogWWVzIGFuZCBObyBvciBhIG1lc3NhZ2UgZGlhbG9nIHdpdGggb25lIGJ1dHRvbjogT2suCiAgICAgKi8KICAgIFRhcmdldE5TLlNob3dDb25maXJtYXRpb25EaWFsb2cgPSBmdW5jdGlvbiAoRXZlbnQpIHsKCiAgICAgICAgdmFyIExvY2FsRGlhbG9nRGF0YSwKICAgICAgICAgICAgUG9zaXRpb25Ub3AsCiAgICAgICAgICAgIERhdGEsCiAgICAgICAgICAgIEJ1dHRvbnM7CgogICAgICAgIC8vIGdldCBnbG9iYWwgc2F2ZWQgRGlhbG9nRGF0YSBmb3IgdGhpcyBmdW5jdGlvbgogICAgICAgIExvY2FsRGlhbG9nRGF0YSA9IERpYWxvZ0RhdGFbJChFdmVudC50YXJnZXQpLmF0dHIoJ2lkJyldOwoKICAgICAgICAvLyBkZWZpbmUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkaWFsb2cKICAgICAgICBQb3NpdGlvblRvcCA9ICQod2luZG93KS5oZWlnaHQoKSAqIDAuMzsKCiAgICAgICAgLy8gc2hvdyB3YWl0aW5nIGRpYWxvZwogICAgICAgIFNob3dXYWl0aW5nRGlhbG9nKFBvc2l0aW9uVG9wKTsKCiAgICAgICAgLy8gYWpheCBjYWxsIHRvIHRoZSBtb2R1bGUgdGhhdCBleGVjdXRlcyB0aGUgYWN0aW9uIHdoZW4gcHJlc3NpbmcgdGhlIGNvbmZpcm1hdGlvbiBidXR0b24KICAgICAgICBEYXRhID0gTG9jYWxEaWFsb2dEYXRhLkRpYWxvZ0NvbnRlbnRRdWVyeVN0cmluZzsKICAgICAgICBDb3JlLkFKQVguRnVuY3Rpb25DYWxsKENvcmUuQ29uZmlnLkdldCgnQmFzZWxpbmsnKSwgRGF0YSwgZnVuY3Rpb24gKFJlc3BvbnNlKSB7CgogICAgICAgICAgICAvLyAnQ29uZmlybWF0aW9uJyBvcGVucyBhIGRpYWxvZyB3aXRoIDIgYnV0dG9uczogWWVzIGFuZCBObwogICAgICAgICAgICBpZiAoUmVzcG9uc2UuRGlhbG9nVHlwZSA9PT0gJ0NvbmZpcm1hdGlvbicpIHsKCiAgICAgICAgICAgICAgICAvLyBkZWZpbmUgeWVzIGFuZCBubyBidXR0b25zCiAgICAgICAgICAgICAgICBCdXR0b25zID0gW3sKICAgICAgICAgICAgICAgICAgICBMYWJlbDogTG9jYWxEaWFsb2dEYXRhLlRyYW5zbGF0ZWRUZXh0LlllcywKICAgICAgICAgICAgICAgICAgICBDbGFzczogIlByaW1hcnkiLAoKICAgICAgICAgICAgICAgICAgICAvLyBkZWZpbmUgdGhlIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIHdoZW4gdGhlICdZZXMnIGJ1dHRvbiBpcyBwcmVzc2VkCiAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb246IGZ1bmN0aW9uKCl7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBkaXNhYmxlIFllcyBhbmQgTm8gYnV0dG9ucyB0byBwcmV2ZW50IG11bHRpcGxlIHN1Ym1pdHMKICAgICAgICAgICAgICAgICAgICAgICAgJCgnZGl2LkRpYWxvZzp2aXNpYmxlIGRpdi5Db250ZW50Rm9vdGVyIGJ1dHRvbicpLmF0dHIoJ2Rpc2FibGVkJywgJ2Rpc2FibGVkJyk7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyByZWRpcmVjdCB0byB0aGUgbW9kdWxlIHRoYXQgZG9lcyB0aGUgY29uZmlybWVkIGFjdGlvbiBhZnRlciBwcmVzc2luZyB0aGUgWWVzIGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbi5ocmVmID0gQ29yZS5Db25maWcuR2V0KCdCYXNlbGluaycpICsgTG9jYWxEaWFsb2dEYXRhLkNvbmZpcm1lZEFjdGlvblF1ZXJ5U3RyaW5nOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgICBMYWJlbDogTG9jYWxEaWFsb2dEYXRhLlRyYW5zbGF0ZWRUZXh0Lk5vLAogICAgICAgICAgICAgICAgICAgIFR5cGU6ICJDbG9zZSIKICAgICAgICAgICAgICAgIH1dOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyAnTWVzc2FnZScgb3BlbnMgYSBkaWFsb2cgd2l0aCAxIGJ1dHRvbjogT2sKICAgICAgICAgICAgZWxzZSBpZiAoUmVzcG9uc2UuRGlhbG9nVHlwZSA9PT0gJ01lc3NhZ2UnKSB7CgogICAgICAgICAgICAgICAgLy8gZGVmaW5lIE9rIGJ1dHRvbgogICAgICAgICAgICAgICAgQnV0dG9ucyA9IFt7CiAgICAgICAgICAgICAgICAgICAgTGFiZWw6IExvY2FsRGlhbG9nRGF0YS5UcmFuc2xhdGVkVGV4dC5PaywKICAgICAgICAgICAgICAgICAgICBDbGFzczogIlByaW1hcnkiLAogICAgICAgICAgICAgICAgICAgIFR5cGU6ICJDbG9zZSIKICAgICAgICAgICAgICAgIH1dOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBzaG93IHRoZSBjb25maXJtYXRpb24gZGlhbG9nIHRvIGNvbmZpcm0gdGhlIGFjdGlvbgogICAgICAgICAgICBDb3JlLlVJLkRpYWxvZy5TaG93Q29udGVudERpYWxvZyhSZXNwb25zZS5IVE1MLCBMb2NhbERpYWxvZ0RhdGEuRGlhbG9nVGl0bGUsIFBvc2l0aW9uVG9wLCAiQ2VudGVyIiwgdHJ1ZSwgQnV0dG9ucyk7CiAgICAgICAgfSwgJ2pzb24nKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9OwoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge0V2ZW50T2JqZWN0fSBldmVudCBvYmplY3Qgb2YgdGhlIGNsaWNrZWQgZWxlbWVudC4KICAgICAqIEByZXR1cm4gbm90aGluZwogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIHNob3dzIGEgY29uZmlybWF0aW9uIGRpYWxvZyB3aXRoIDIgYnV0dG9uczogWWVzIGFuZCBObwogICAgICovCiAgICBUYXJnZXROUy5CaW5kQ29uZmlybWF0aW9uRGlhbG9nID0gZnVuY3Rpb24gKERhdGEpIHsKICAgICAgICBEaWFsb2dEYXRhW0RhdGEuRWxlbWVudElEXSA9IERhdGE7CgogICAgICAgIC8vIGJpbmRpbmcgYSBjbGljayBldmVudCB0byB0aGUgZGVmaW5lZCBlbGVtZW50CiAgICAgICAgJChEaWFsb2dEYXRhW0RhdGEuRWxlbWVudElEXS5FbGVtZW50U2VsZWN0b3IpLmJpbmQoJ2NsaWNrJywgVGltZUFjY291bnRpbmcuQWdlbnQuQ29uZmlybWF0aW9uRGlhbG9nLlNob3dDb25maXJtYXRpb25EaWFsb2cpOwogICAgfTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oVGltZUFjY291bnRpbmcuQWdlbnQuQ29uZmlybWF0aW9uRGlhbG9nIHx8IHt9KSk7Cg==
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTcgT1RSUyBBRywgaHR0cDovL290cnMuY29tL1xuIjsKLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQovLyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgovLyAtLQoKInVzZSBzdHJpY3QiOwoKdmFyIFRpbWVBY2NvdW50aW5nID0gVGltZUFjY291bnRpbmcgfHwge307ClRpbWVBY2NvdW50aW5nLkFnZW50ID0gVGltZUFjY291bnRpbmcuQWdlbnQgfHwge307CgovKioKICogQG5hbWVzcGFjZQogKiBAZXhwb3J0cyBUYXJnZXROUyBhcyBUaW1lQWNjb3VudGluZy5BZ2VudC5EYXRlcGlja2VyCiAqIEBkZXNjcmlwdGlvbgogKiAgICAgIFRoaXMgbmFtZXNwYWNlIGNvbnRhaW5zIHRoZSBzcGVjaWFsIGRhdGVwaWNrZXIgZnVuY3Rpb25kIGZvciBUQS4KICovClRpbWVBY2NvdW50aW5nLkFnZW50LkRhdGVwaWNrZXIgPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CgogICAgdmFyIFZhY2F0aW9uRGF5cywKICAgICAgICBWYWNhdGlvbkRheXNPbmVUaW1lLAogICAgICAgIExvY2FsaXphdGlvbkRhdGEsCiAgICAgICAgRGF0ZXBpY2tlckNvdW50ID0gMDsKCiAgICBpZiAoIUNvcmUuRGVidWcuQ2hlY2tEZXBlbmRlbmN5KCdDb3JlLlVJLkRhdGVwaWNrZXInLCAnJChbXSkuZGF0ZXBpY2tlcicsICdqUXVlcnkgVUkgZGF0ZXBpY2tlcicpKSB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcHJpdmF0ZQogICAgICogQHBhcmFtIEEgYm9vbGVhbiB2YWx1ZQogICAgICogQHBhcmFtIHtqUXVlcnlPYmplY3R9IEVsZW1lbnQgdGhhdCB3aWxsIGJlIGNoZWNrZWQKICAgICAqIEBkZXNjcmlwdGlvbiBSZXZpZXcgaWYgYSBkYXRlIG9iamVjdCBoYXZlIGNvcnJlY3QgdmFsdWVzCiAgICAgKi8KICAgIGZ1bmN0aW9uIENoZWNrRGF0ZShEYXRlT2JqZWN0KSB7CiAgICAgICAgdmFyIERheURlc2NyaXB0aW9uID0gJycsCiAgICAgICAgICAgIERheUNsYXNzID0gJyc7CgogICAgICAgIC8vIEdldCBkZWZpbmVkIGRheXMgZnJvbSBDb25maWcsIGlmIG5vdCBkb25lIGFscmVhZHkKICAgICAgICBpZiAodHlwZW9mIFZhY2F0aW9uRGF5cyA9PT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgVmFjYXRpb25EYXlzID0gQ29yZS5Db25maWcuR2V0KCdEYXRlcGlja2VyLlZhY2F0aW9uRGF5cycpLlRpbWVWYWNhdGlvbkRheXM7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlb2YgVmFjYXRpb25EYXlzT25lVGltZSA9PT0gJ3VuZGVmaW5lZCcpIHsKICAgICAgICAgICAgVmFjYXRpb25EYXlzT25lVGltZSA9IENvcmUuQ29uZmlnLkdldCgnRGF0ZXBpY2tlci5WYWNhdGlvbkRheXMnKS5UaW1lVmFjYXRpb25EYXlzT25lVGltZTsKICAgICAgICB9CgogICAgICAgIC8vIENoZWNrIGlmIGRhdGUgaXMgb25lIG9mIHRoZSB2YWNhdGlvbiBkYXlzCiAgICAgICAgaWYgKHR5cGVvZiBWYWNhdGlvbkRheXNbRGF0ZU9iamVjdC5nZXRNb250aCgpICsgMV0gIT09ICd1bmRlZmluZWQnICYmCiAgICAgICAgICAgIHR5cGVvZiBWYWNhdGlvbkRheXNbRGF0ZU9iamVjdC5nZXRNb250aCgpICsgMV1bRGF0ZU9iamVjdC5nZXREYXRlKCldICE9PSAndW5kZWZpbmVkJykgewogICAgICAgICAgICBEYXlEZXNjcmlwdGlvbiArPSBWYWNhdGlvbkRheXNbRGF0ZU9iamVjdC5nZXRNb250aCgpICsgMV1bRGF0ZU9iamVjdC5nZXREYXRlKCldOwogICAgICAgICAgICBEYXlDbGFzcyA9ICdIaWdobGlnaHQgJzsKICAgICAgICB9CgogICAgICAgIC8vIENoZWNrIGlmIGRhdGUgaXMgb25lIG9mIHRoZSBvbmUgdGltZSB2YWNhdGlvbiBkYXlzCiAgICAgICAgaWYgKHR5cGVvZiBWYWNhdGlvbkRheXNPbmVUaW1lW0RhdGVPYmplY3QuZ2V0RnVsbFllYXIoKV0gIT09ICd1bmRlZmluZWQnICYmCiAgICAgICAgICAgIHR5cGVvZiBWYWNhdGlvbkRheXNPbmVUaW1lW0RhdGVPYmplY3QuZ2V0RnVsbFllYXIoKV1bRGF0ZU9iamVjdC5nZXRNb250aCgpICsgMV0gIT09ICd1bmRlZmluZWQnICYmCiAgICAgICAgICAgIHR5cGVvZiBWYWNhdGlvbkRheXNPbmVUaW1lW0RhdGVPYmplY3QuZ2V0RnVsbFllYXIoKV1bRGF0ZU9iamVjdC5nZXRNb250aCgpICsgMV1bRGF0ZU9iamVjdC5nZXREYXRlKCldICE9PSAndW5kZWZpbmVkJykgewogICAgICAgICAgICBEYXlEZXNjcmlwdGlvbiArPSBWYWNhdGlvbkRheXNPbmVUaW1lW0RhdGVPYmplY3QuZ2V0RnVsbFllYXIoKV1bRGF0ZU9iamVjdC5nZXRNb250aCgpICsgMV1bRGF0ZU9iamVjdC5nZXREYXRlKCldOwogICAgICAgICAgICBEYXlDbGFzcyA9ICdIaWdobGlnaHQgJzsKICAgICAgICB9CgogICAgICAgIGlmIChEYXlDbGFzcy5sZW5ndGgpIHsKICAgICAgICAgICAgcmV0dXJuIFt0cnVlLCBEYXlDbGFzcywgRGF5RGVzY3JpcHRpb25dOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIFt0cnVlLCAnJ107CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAZGVzY3JpcHRpb24KICAgICAqICAgICAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgZGF0ZXBpY2tlciBvbiBzaW5nbGUgZWxlbWVudHMgZm9yIFRBLgogICAgICogICAgICBUaGlzIGZ1bmN0aW9uIGlzIG5vdCB5ZXQgYXZhaWxhYmxlIGluIHRoZSBPVFJTIENvcmUuCiAgICAgKiAgICAgIElmIGl0IHdpbGwgYmUgaW1wbGVtZW50ZWQgaW4gT1RSUyBDb3JlIHdlIGNvdWxkIHJlbW92ZSB0aGlzIGZpbGUgaGVyZS4KICAgICAqIEBwYXJhbSB7T2JqZWN0fSAkRWxlbWVudCBUaGUgalF1ZXJ5IG9iamVjdChzKSBvZiBhIHRleHQgaW5wdXQgZmllbGQgd2hpY2ggc2hvdWxkIGdldCBhIGRhdGVwaWNrZXIuCiAgICAgKiBAcGFyYW0ge09iamVjdH0gRGF0ZXBpY2tlck9wdGlvbnMgT2JqZWN0IHdpdGggdHdvIHBvc3NpYmxlIGtleXM6CiAgICAgKiAgICAgICAgICAgICAgICAgICAgICBEYXRlSW5GdXR1cmU6IHRydWV8ZmFsc2UsCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICBXZWVrRGF5U3RhcnQ6IDAtNyAoc3VuZGF5IC0gc2F0dXJkYXkpCiAgICAgKiBAcmV0dXJuIG5vdGhpbmcKICAgICAqLwogICAgVGFyZ2V0TlMuSW5pdCA9IGZ1bmN0aW9uICgkRWxlbWVudCwgRGF0ZXBpY2tlck9wdGlvbnMpIHsKICAgICAgICBmdW5jdGlvbiBMZWFkaW5nWmVybyhOdW1iZXIpIHsKICAgICAgICAgICAgaWYgKE51bWJlci50b1N0cmluZygpLmxlbmd0aCA9PT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuICcwJyArIE51bWJlcjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHZhciAkRGF0ZXBpY2tlckVsZW1lbnQsCiAgICAgICAgICAgIE9wdGlvbnMsCiAgICAgICAgICAgIEksCiAgICAgICAgICAgIEVycm9yTWVzc2FnZTsKCiAgICAgICAgaWYgKHR5cGVvZiBMb2NhbGl6YXRpb25EYXRhID09PSAndW5kZWZpbmVkJykgewogICAgICAgICAgICBMb2NhbGl6YXRpb25EYXRhID0gQ29yZS5Db25maWcuR2V0KCdEYXRlcGlja2VyLkxvY2FsaXphdGlvbicpOwogICAgICAgICAgICBpZiAodHlwZW9mIExvY2FsaXphdGlvbkRhdGEgPT09ICd1bmRlZmluZWQnKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29yZS5FeGNlcHRpb24uQXBwbGljYXRpb25FcnJvcignRGF0ZXBpY2tlciBsb2NhbGl6YXRpb24gZGF0YSBjb3VsZCBub3QgYmUgZm91bmQhJywgJ0ludGVybmFsRXJyb3InKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gRGVmaW5lIG9wdGlvbnMgaGFzaAogICAgICAgIE9wdGlvbnMgPSB7CiAgICAgICAgICAgICAgICBiZWZvcmVTaG93RGF5OiBmdW5jdGlvbiAoRGF0ZU9iamVjdCkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBDaGVja0RhdGUoRGF0ZU9iamVjdCk7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgc2hvd09uOiAnZm9jdXMnLAogICAgICAgICAgICAgICAgcHJldlRleHQ6IExvY2FsaXphdGlvbkRhdGEuUHJldlRleHQsCiAgICAgICAgICAgICAgICBuZXh0VGV4dDogTG9jYWxpemF0aW9uRGF0YS5OZXh0VGV4dCwKICAgICAgICAgICAgICAgIHNob3dNb250aEFmdGVyWWVhcjogMCwKICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQ6ICd5eS1tbS1kZCcsCiAgICAgICAgICAgICAgICBtb250aE5hbWVzOiBMb2NhbGl6YXRpb25EYXRhLk1vbnRoTmFtZXMsCiAgICAgICAgICAgICAgICBtb250aE5hbWVzU2hvcnQ6IExvY2FsaXphdGlvbkRhdGEuTW9udGhOYW1lc1Nob3J0LAogICAgICAgICAgICAgICAgZGF5TmFtZXM6IExvY2FsaXphdGlvbkRhdGEuRGF5TmFtZXMsCiAgICAgICAgICAgICAgICBkYXlOYW1lc1Nob3J0OiBMb2NhbGl6YXRpb25EYXRhLkRheU5hbWVzU2hvcnQsCiAgICAgICAgICAgICAgICBkYXlOYW1lc01pbjogTG9jYWxpemF0aW9uRGF0YS5EYXlOYW1lc01pbiwKICAgICAgICAgICAgICAgIGlzUlRMOiBMb2NhbGl6YXRpb25EYXRhLklzUlRMCiAgICAgICAgfTsKCiAgICAgICAgT3B0aW9ucy5iZWZvcmVTaG93ID0gZnVuY3Rpb24gKElucHV0LCBJbnN0YW5jZSkgewogICAgICAgICAgICB2YXIgVmFsdWUgPSAkKElucHV0KS5wcmV2QWxsKCdpbnB1dDp0ZXh0JykudmFsKCk7CiAgICAgICAgICAgICQoSW5wdXQpLnZhbCgnJyk7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgICBkZWZhdWx0RGF0ZTogbmV3IERhdGUoVmFsdWUpCiAgICAgICAgICAgIH07CiAgICAgICAgfTsKCiAgICAgICAgT3B0aW9ucy5vblNlbGVjdCA9IGZ1bmN0aW9uIChEYXRlVGV4dCwgSW5zdGFuY2UpIHsKICAgICAgICAgICAgJCh0aGlzKS5wcmV2QWxsKCdpbnB1dDp0ZXh0JykudmFsKERhdGVUZXh0KTsKICAgICAgICB9OwoKICAgICAgICBpZiAoaXNKUXVlcnlPYmplY3QoJEVsZW1lbnQpKSB7CiAgICAgICAgICAgICRFbGVtZW50LmVhY2goZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyICRTaW5nbGVFbGVtZW50ID0gJCh0aGlzKTsKICAgICAgICAgICAgICAgIGlmICgkU2luZ2xlRWxlbWVudC5pcygnaW5wdXQ6dGV4dCcpKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gSW5jcmVtZW50IG51bWJlciBvZiBpbml0aWFsaXplZCBkYXRlcGlja2VycyBvbiB0aGlzIHNpdGUKICAgICAgICAgICAgICAgICAgICBEYXRlcGlja2VyQ291bnQrKzsKCiAgICAgICAgICAgICAgICAgICAgJERhdGVwaWNrZXJFbGVtZW50ID0gJCgnPGlucHV0PicpLmF0dHIoJ3R5cGUnLCAnaGlkZGVuJykuYXR0cignaWQnLCAnRGF0ZXBpY2tlcicgKyBEYXRlcGlja2VyQ291bnQpOwogICAgICAgICAgICAgICAgICAgICRTaW5nbGVFbGVtZW50LmFmdGVyKCREYXRlcGlja2VyRWxlbWVudCk7CgogICAgICAgICAgICAgICAgICAgIE9wdGlvbnMuZmlyc3REYXkgPSBEYXRlcGlja2VyT3B0aW9ucy5XZWVrRGF5U3RhcnQ7CiAgICAgICAgICAgICAgICAgICAgJERhdGVwaWNrZXJFbGVtZW50LmRhdGVwaWNrZXIoT3B0aW9ucyk7CgogICAgICAgICAgICAgICAgICAgIC8vIGFkZCBkYXRlcGlja2VyIGljb24gYW5kIGNsaWNrIGV2ZW50CiAgICAgICAgICAgICAgICAgICAgJERhdGVwaWNrZXJFbGVtZW50LmFmdGVyKCc8YSBocmVmPSIjIiBjbGFzcz0iRGF0ZXBpY2tlckljb24gRGF0ZXBpY2tlck51bWJlcicgKyBEYXRlcGlja2VyQ291bnQgKyAnIiB0aXRsZT0iJyArIExvY2FsaXphdGlvbkRhdGEuSWNvblRleHQgKyAnIj48L2E+JykubmV4dCgnYS5EYXRlcGlja2VySWNvbicpLmNsaWNrKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIENsYXNzZXMgPSAkKHRoaXMpLmF0dHIoJ2NsYXNzJyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRlcGlja2VyTnVtYmVyID0gQ2xhc3Nlcy5yZXBsYWNlKC9eLipEYXRlcGlja2VyTnVtYmVyKFswLTldKykuKi9nLCAiJDEiKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNEYXRlcGlja2VyJyArIERhdGVwaWNrZXJOdW1iZXIpLnRyaWdnZXIoJ2ZvY3VzJyk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAgICAgLy8gZG8gbm90IHNob3cgdGhlIGRhdGVwaWNrZXIgY29udGFpbmVyIGRpdi4KICAgICAgICAgICAgICAgICAgICAkKCcjdWktZGF0ZXBpY2tlci1kaXYnKS5oaWRlKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgIH07CgogICAgcmV0dXJuIFRhcmdldE5TOwp9KFRpbWVBY2NvdW50aW5nLkFnZW50LkRhdGVwaWNrZXIgfHwge30pKTsK
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTcgT1RSUyBBRywgaHR0cDovL290cnMuY29tL1xuIjsKLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQovLyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgovLyAtLQoKInVzZSBzdHJpY3QiOwoKdmFyIFRpbWVBY2NvdW50aW5nID0gVGltZUFjY291bnRpbmcgfHwge307ClRpbWVBY2NvdW50aW5nLkFnZW50ID0gVGltZUFjY291bnRpbmcuQWdlbnQgfHwge307CgovKioKICogQG5hbWVzcGFjZQogKiBAZXhwb3J0cyBUYXJnZXROUyBhcyBUaW1lQWNjb3VudGluZy5BZ2VudC5FZGl0VGltZVJlY29yZHMKICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucyBmb3IgdGhlIGVkaXQgc2NyZWVuLgogKi8KVGltZUFjY291bnRpbmcuQWdlbnQuRWRpdFRpbWVSZWNvcmRzID0gKGZ1bmN0aW9uIChUYXJnZXROUykgewoKICAgIFRhcmdldE5TLkFjdGlvbkxpc3QgPSAiIjsKICAgIFRhcmdldE5TLkFjdGlvbkxpc3RDb25zdHJhaW50cyA9ICIiOwoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge1N0cmluZ30gVGhlIElEIG9mIHRoZSB3b3JraW5nIHVuaXQgd2UgYXJlIGluCiAgICAgKiBAcmV0dXJuIG5vdGhpbmcKICAgICAqICAgICAgRmlsbHMgb3B0aW9ucyBvZiBhY3Rpb24gc2VsZWN0aW9uIGFjY29yZGluZyB0byBzZWxlY3RlZCBwcm9qZWN0CiAgICAgKi8KICAgIFRhcmdldE5TLkZpbGxBY3Rpb25MaXN0ID0gZnVuY3Rpb24gKFdvcmtpbmdVbml0SUQpIHsKICAgICAgICB2YXIgUHJvamVjdE5hbWUgPSAkKCcjUHJvamVjdElEJyArIFdvcmtpbmdVbml0SUQgKyAnIG9wdGlvbjpzZWxlY3RlZCcpLnRleHQoKSwKICAgICAgICAgICAgQWN0aW9uTGlzdCA9IFRhcmdldE5TLkFjdGlvbkxpc3QsCiAgICAgICAgICAgIEFjdGlvbkxpc3RDb25zdHJhaW50cyA9IFRhcmdldE5TLkFjdGlvbkxpc3RDb25zdHJhaW50cywKICAgICAgICAgICAgJEFjdGlvblNlbGVjdGlvbiA9ICQoIiNBY3Rpb25JRCIgKyBXb3JraW5nVW5pdElEKSwKICAgICAgICAgICAgU2VsZWN0ZWRBY3Rpb25JRCA9ICRBY3Rpb25TZWxlY3Rpb24udmFsKCksCiAgICAgICAgICAgIE9wdGlvbkNvdW50ID0gMDsKCiAgICAgICAgLy8gcmVtb3ZlIHByZXZpb3VzIGFjdGlvbnMsIGxlYXZlIGZpcnN0IGVsZW1lbnQgKGVtcHR5IGVsZW1lbnQpCiAgICAgICAgJEFjdGlvblNlbGVjdGlvbi5maW5kKCdvcHRpb24nKS5maWx0ZXIoJzpub3QoOmZpcnN0KScpLnJlbW92ZSgpOwoKCiAgICAgICAgJC5lYWNoKEFjdGlvbkxpc3QsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIEFjdGlvbklEID0gdGhpc1swXSwKICAgICAgICAgICAgICAgIEFjdGlvbk5hbWUgPSB0aGlzWzFdOwoKICAgICAgICAgICAgJC5lYWNoKEFjdGlvbkxpc3RDb25zdHJhaW50cywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdmFyIFByb2plY3ROYW1lUmVnRXhwID0gbmV3IFJlZ0V4cCh0aGlzWzBdKTsKICAgICAgICAgICAgICAgIHZhciBBY3Rpb25OYW1lUmVnRXhwID0gbmV3IFJlZ0V4cCh0aGlzWzFdKTsKCiAgICAgICAgICAgICAgICAvLyBhZGQgYWN0aW9uIHRvIHNlbGVjdGlvbgogICAgICAgICAgICAgICAgaWYgKFByb2plY3ROYW1lUmVnRXhwLnRlc3QoUHJvamVjdE5hbWUpICYmIEFjdGlvbk5hbWVSZWdFeHAudGVzdChBY3Rpb25OYW1lKSkgewogICAgICAgICAgICAgICAgICAgIEFkZFNlbGVjdGlvbk9wdGlvbigkQWN0aW9uU2VsZWN0aW9uLCBBY3Rpb25OYW1lLCBBY3Rpb25JRCwgU2VsZWN0ZWRBY3Rpb25JRCk7CiAgICAgICAgICAgICAgICAgICAgT3B0aW9uQ291bnQrKzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CgogICAgICAgIC8vIGFsbCBhY3Rpb25zIHdpbGwgYmUgYWRkZWQgaWYgbm8gYWN0aW9uIHdhcyBhZGRlZCBhYm92ZSAocG9zc2libGUgbWlzY29uZmlndXJhdGlvbikKICAgICAgICBpZiAoIU9wdGlvbkNvdW50KSB7CiAgICAgICAgICAgIC8vIGlnbm9yZSBmaXJzdCBlbGVtZW50IGJlY2F1c2UgaXQncyB0aGUgZW1wdHkgZWxlbWVudCB3aGljaCBpcyBhbHJlYWR5IHBhcnQgb2YgdGhlIGxpc3QKICAgICAgICAgICAgJC5lYWNoKEFjdGlvbkxpc3QsIGZ1bmN0aW9uIChJbmRleCkgewogICAgICAgICAgICAgICAgdmFyIEFjdGlvbklEID0gdGhpc1swXSwKICAgICAgICAgICAgICAgICAgICBBY3Rpb25OYW1lID0gdGhpc1sxXTsKICAgICAgICAgICAgICAgIGlmIChJbmRleCA+IDApIHsKICAgICAgICAgICAgICAgICAgICBBZGRTZWxlY3Rpb25PcHRpb24oJEFjdGlvblNlbGVjdGlvbiwgQWN0aW9uTmFtZSwgQWN0aW9uSUQsIFNlbGVjdGVkQWN0aW9uSUQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICB9CgogICAgLy8gQWRkcyBvcHRpb24gdG8gYSBzZWxlY3Rpb24KICAgIGZ1bmN0aW9uIEFkZFNlbGVjdGlvbk9wdGlvbigkU2VsZWN0aW9uRWxlbWVudCwgT3B0aW9uVGV4dCwgT3B0aW9uVmFsdWUsIFNlbGVjdGVkT3B0aW9uKSB7CiAgICAgICAgdmFyICRPcHRpb24gPSAkKCc8b3B0aW9uIHZhbHVlPSInICsgT3B0aW9uVmFsdWUgKyAnIj4nICsgT3B0aW9uVGV4dCArICc8L29wdGlvbj4nKTsKCiAgICAgICAgaWYgKE9wdGlvblZhbHVlID09IFNlbGVjdGVkT3B0aW9uKSB7CiAgICAgICAgICAgICRPcHRpb24uYXR0cignc2VsZWN0ZWQnLCAnc2VsZWN0ZWQnKTsKICAgICAgICB9CgogICAgICAgICRTZWxlY3Rpb25FbGVtZW50LmFwcGVuZCgkT3B0aW9uKTsKICAgIH0KCiAgICBmdW5jdGlvbiBJbml0QXV0b0NvbXBsZXRpb24oTGFuZ3VhZ2UpIHsKICAgICAgICAvLyBJbml0aWFsaXplIENvbWJvQm94IG9uIFByb2plY3QgZHJvcGRvd24KICAgICAgICBDb3JlLlVJLkNvbWJvQm94LkluaXQoJy5Qcm9qZWN0U2VsZWN0aW9uJywgewogICAgICAgICAgICBDbGFzczogIlZhbGlkYXRlX1RpbWVBY2NvdW50aW5nX1Byb2plY3QiLAogICAgICAgICAgICBMYW5nOiB7CiAgICAgICAgICAgICAgICBTaG93QWxsSXRlbXM6IExhbmd1YWdlLlNob3dBbGxJdGVtcwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgLy8gSW5pdGlhbGl6ZSBDb21ib0JveCBvbiB0YXNrIGRyb3Bkb3duCiAgICAgICAgQ29yZS5VSS5Db21ib0JveC5Jbml0KCcuQWN0aW9uU2VsZWN0aW9uJywgewogICAgICAgICAgICBDbGFzczogIlZhbGlkYXRlX0RlcGVuZGluZ1JlcXVpcmVkQU5EIiwKICAgICAgICAgICAgTGFuZzogewogICAgICAgICAgICAgICAgU2hvd0FsbEl0ZW1zOiBMYW5ndWFnZS5TaG93QWxsSXRlbXMKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIC8vIEFkZCBzcGVjaWFsIHZhbGlkYXRpb24gY2xhc3MgdG8gQWN0aW9uU2VsZWN0aW9uCiAgICAgICAgJCgnLkFjdGlvblNlbGVjdGlvbicpLm5leHQoJ2lucHV0OnRleHQnKS5lYWNoKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyIElEID0gdGhpcy5pZC5yZXBsYWNlKCdDb21ib19BY3Rpb25JRCcsICcnKTsKICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygnVmFsaWRhdGVfRGVwZW5kaW5nX0NvbWJvX1Byb2plY3RJRCcgKyBJRCk7CiAgICAgICAgfSk7CiAgICAgICAgLy8gUmVtb3ZlIHZhbGlkYXRpb24gY2xhc3NlcyBmcm9tIHVuZGVybHlpbmcgc2VsZWN0CiAgICAgICAgJCgnLlByb2plY3RTZWxlY3Rpb24nKS5yZW1vdmVDbGFzcygnVmFsaWRhdGVfVGltZUFjY291bnRpbmdfUHJvamVjdCcpOwogICAgICAgICQoJy5BY3Rpb25TZWxlY3Rpb24nKS5yZW1vdmVDbGFzcygnVmFsaWRhdGVfRGVwZW5kaW5nUmVxdWlyZWRBTkQnKTsKCiAgICAgICAgLy8gQ29weSBTZXJ2ZXJFcnJvciBjbGFzc2VzIHRvIGFjY29yZGluZyBjb21ib2JveGVzCiAgICAgICAgJCgnLlByb2plY3RTZWxlY3Rpb24uU2VydmVyRXJyb3InKS5uZXh0KCdpbnB1dFtpZF49Q29tYm9fJykuYWRkQ2xhc3MoJ1NlcnZlckVycm9yJyk7CiAgICAgICAgJCgnLkFjdGlvblNlbGVjdGlvbi5TZXJ2ZXJFcnJvcicpLm5leHQoJ2lucHV0W2lkXj1Db21ib18nKS5hZGRDbGFzcygnU2VydmVyRXJyb3InKTsKCiAgICAgICAgQ29yZS5Gb3JtLlZhbGlkYXRlLkluaXQoKTsKICAgIH0KCiAgICBmdW5jdGlvbiBJbml0QWRkUm93KExhbmd1YWdlKSB7CiAgICAgICAgJCgnI01vcmVJbnB1dEZpZWxkcycpLnVuYmluZCgnY2xpY2suTW9yZUlucHV0RmllbGRzJykuYmluZCgnY2xpY2suTW9yZUlucHV0RmllbGRzJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgJExhc3RSb3cgPSAkKCcjSW5zZXJ0V29ya2luZ0hvdXJzIHRib2R5IHRyLldvcmtpbmdIb3VyczpsYXN0JyksCiAgICAgICAgICAgICAgICAkTmV3Um93ID0gJExhc3RSb3cuY2xvbmUoKSwKICAgICAgICAgICAgICAgIE5ld1Jvd0hUTUwgPSAkTmV3Um93Lmh0bWwoKSwKICAgICAgICAgICAgICAgIFJlY29yZE51bWJlciA9IHBhcnNlSW50KCQoJyNSZWNvcmRzTnVtYmVyJykudmFsKCksIDEwKSArIDE7CgogICAgICAgICAgICAvLyBOb3cgdGFrZSB0aGUgbGFzdCByb3cgYW5kIHJlcGxhY2UgYWxsIG51bWJlcnMgd2l0aCB0aGUgbmV3IHJlY29yZCBudW1iZXIKICAgICAgICAgICAgTmV3Um93SFRNTCA9IE5ld1Jvd0hUTUwucmVwbGFjZSgvUHJvamVjdElEWzAtOV0rL2csICdQcm9qZWN0SUQnICsgUmVjb3JkTnVtYmVyKTsKICAgICAgICAgICAgTmV3Um93SFRNTCA9IE5ld1Jvd0hUTUwucmVwbGFjZSgvUHJvamVjdElEXFtbMC05XSsvZywgJ1Byb2plY3RJRFsnICsgUmVjb3JkTnVtYmVyKTsKICAgICAgICAgICAgTmV3Um93SFRNTCA9IE5ld1Jvd0hUTUwucmVwbGFjZSgvRmlsbEFjdGlvbkxpc3RcKFswLTldKy9nLCAnRmlsbEFjdGlvbkxpc3QoJyArIFJlY29yZE51bWJlcik7CiAgICAgICAgICAgIE5ld1Jvd0hUTUwgPSBOZXdSb3dIVE1MLnJlcGxhY2UoL0FjdGlvbklEWzAtOV0rL2csICdBY3Rpb25JRCcgKyBSZWNvcmROdW1iZXIpOwogICAgICAgICAgICBOZXdSb3dIVE1MID0gTmV3Um93SFRNTC5yZXBsYWNlKC9BY3Rpb25JRFxbWzAtOV0rL2csICdBY3Rpb25JRFsnICsgUmVjb3JkTnVtYmVyKTsKICAgICAgICAgICAgTmV3Um93SFRNTCA9IE5ld1Jvd0hUTUwucmVwbGFjZSgvUmVtYXJrWzAtOV0rL2csICdSZW1hcmsnICsgUmVjb3JkTnVtYmVyKTsKICAgICAgICAgICAgTmV3Um93SFRNTCA9IE5ld1Jvd0hUTUwucmVwbGFjZSgvUmVtYXJrXFtbMC05XSsvZywgJ1JlbWFya1snICsgUmVjb3JkTnVtYmVyKTsKICAgICAgICAgICAgTmV3Um93SFRNTCA9IE5ld1Jvd0hUTUwucmVwbGFjZSgvU3RhcnRUaW1lWzAtOV0rL2csICdTdGFydFRpbWUnICsgUmVjb3JkTnVtYmVyKTsKICAgICAgICAgICAgTmV3Um93SFRNTCA9IE5ld1Jvd0hUTUwucmVwbGFjZSgvU3RhcnRUaW1lXFtbMC05XSsvZywgJ1N0YXJ0VGltZVsnICsgUmVjb3JkTnVtYmVyKTsKICAgICAgICAgICAgTmV3Um93SFRNTCA9IE5ld1Jvd0hUTUwucmVwbGFjZSgvRW5kVGltZVswLTldKy9nLCAnRW5kVGltZScgKyBSZWNvcmROdW1iZXIpOwogICAgICAgICAgICBOZXdSb3dIVE1MID0gTmV3Um93SFRNTC5yZXBsYWNlKC9FbmRUaW1lXFtbMC05XSsvZywgJ0VuZFRpbWVbJyArIFJlY29yZE51bWJlcik7CiAgICAgICAgICAgIE5ld1Jvd0hUTUwgPSBOZXdSb3dIVE1MLnJlcGxhY2UoL1BlcmlvZFswLTldKy9nLCAnUGVyaW9kJyArIFJlY29yZE51bWJlcik7CiAgICAgICAgICAgIE5ld1Jvd0hUTUwgPSBOZXdSb3dIVE1MLnJlcGxhY2UoL1BlcmlvZFxbWzAtOV0rL2csICdQZXJpb2RbJyArIFJlY29yZE51bWJlcik7CgogICAgICAgICAgICAvLyBOb3cgd3JpdGUgdGhpcyBIVE1MIGJhY2sgdG8gdGhlIGpxdWVyeSBvYmplY3QKICAgICAgICAgICAgJE5ld1Jvdy5odG1sKE5ld1Jvd0hUTUwpOwoKICAgICAgICAgICAgLy8gSWYgbGFzdCByb3cgY29udGFpbmVkIHZhbHVlcywgdGhlc2UgbXVzdCBiZSByZW1vdmVkCiAgICAgICAgICAgICROZXdSb3cKICAgICAgICAgICAgICAgIC5maW5kKCdpbnB1dDp0ZXh0JykudmFsKCcnKS5lbmQoKQogICAgICAgICAgICAgICAgLmZpbmQoJ3NlbGVjdCBvcHRpb24nKS5yZW1vdmVBdHRyKCdzZWxlY3RlZCcpOwoKICAgICAgICAgICAgLy8gUmVtb3ZlIGF1dG9jb21wbGV0aW9uIGZyb20gdGhpcyByb3cgKHdpbGwgYmUgcmUtaW5pdGlhdGVkIGxhdGVyKQogICAgICAgICAgICAkTmV3Um93CiAgICAgICAgICAgICAgICAuZmluZCgnaW5wdXRbaWRePUNvbWJvX10nKS5yZW1vdmUoKS5lbmQoKQogICAgICAgICAgICAgICAgLmZpbmQoJ2J1dHRvbltpZF49Q29tYm9CdG5fXScpLnJlbW92ZSgpOwoKICAgICAgICAgICAgLy8gTm93IGFkZCB0aGlzIHJvdyB0byB0aGUgdGFibGUKICAgICAgICAgICAgJExhc3RSb3cuYWZ0ZXIoJE5ld1Jvdyk7CgogICAgICAgICAgICAvLyBTYXZlIG5ldyBSZWNvcmROdW1iZXIKICAgICAgICAgICAgJCgnI1JlY29yZHNOdW1iZXInKS52YWwoUmVjb3JkTnVtYmVyKTsKCiAgICAgICAgICAgIC8vIFJlLWluaXRpYXRlIHRoZSAnb2RkL2V2ZW4nIGNvbG91cnMgb2YgdGhlIHRhYmxlCiAgICAgICAgICAgICQoJyNJbnNlcnRXb3JraW5nSG91cnMgdGJvZHkgdHInKQogICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCdFdmVuJykKICAgICAgICAgICAgICAgIC5maWx0ZXIoJzpvZGQnKS5hZGRDbGFzcygnRXZlbicpOwoKICAgICAgICAgICAgLy8gUmUtaW5pdGlhdGUgYXV0b2NvbXBsZXRpb24gY29tYm9ib3gKICAgICAgICAgICAgSW5pdEF1dG9Db21wbGV0aW9uKExhbmd1YWdlKTsKICAgICAgICB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBSZWNhbGN1bGF0ZVRvdGFsSG91cnMoKSB7CiAgICAgICAgdmFyIFRvdGFsID0gMDsKICAgICAgICAkKCcuUGVyaW9kJykuZWFjaChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHZhciBWYWx1ZSA9IHBhcnNlRmxvYXQoJCh0aGlzKS52YWwoKSk7CiAgICAgICAgICAgIGlmICghaXNOYU4oVmFsdWUpKSB7CiAgICAgICAgICAgICAgICBUb3RhbCArPSBWYWx1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgICQoJy5Ub3RhbEhvdXJzJykudGV4dChUb3RhbC50b0ZpeGVkKDIpKTsKICAgIH0KCiAgICBmdW5jdGlvbiBJbml0UGVyaW9kQ2FsY3VsYXRpb24oKSB7CiAgICAgICAgLy8gaW5pdCBjYWxjdWxhdGlvbiBvZiBwZXJpb2QgZmllbGQgYWZ0ZXIgd29ya2luZyBob3VycyB3aGVyZSBhZGRlZC9zdWJzdHJhY3RlZC93aGF0ZXZlci4uLgogICAgICAgICQoJy5QZXJpb2QnKS51bmJpbmQoJ2NoYW5nZS5QZXJpb2RDYWxjdWxhdGlvbicpLmJpbmQoJ2NoYW5nZS5QZXJpb2RDYWxjdWxhdGlvbicsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICB2YXIgRmllbGRWYWx1ZSA9ICQodGhpcykudmFsKCk7CgogICAgICAgICAgIC8vIHJlcGxhY2UgLCB3aXRoIC4KICAgICAgICAgICBGaWVsZFZhbHVlID0gRmllbGRWYWx1ZS5yZXBsYWNlKC8sL2csICIuIik7CgogICAgICAgICAgIC8vIGNoZWNrIGlmIHRoZSBlbnRlcmVkIHZhbHVlIG9ubHkgY29uc2lzdHMgb2YgYWxsb3dlZCB2YWx1ZXMKICAgICAgICAgICAvLyBpZiBub3QsIHdlIGRvIG5vdCBldmFsIGZvciBzZWN1cml0eSByZWFzb25zCiAgICAgICAgICAgaWYgKEZpZWxkVmFsdWUubWF0Y2goL15bMC05XC4rXC0gXSskLykpIHsKICAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRpb24KICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgIEZpZWxkVmFsdWUgPSBldmFsKEZpZWxkVmFsdWUpOwogICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIGNhdGNoIChDYWxjRXJyb3IpIHsKICAgICAgICAgICAgICAgICAgIEZpZWxkVmFsdWUgPSAwOwogICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAvLyBzZXQgbmV3IHZhbHVlCiAgICAgICAgICAgICAgICQodGhpcykudmFsKEZpZWxkVmFsdWUudG9GaXhlZCgyKSk7CgogICAgICAgICAgICAgICAvLyBub3cgU3RhcnRUaW1lIGFuZCBFbmRUaW1lIHdpbGwgbm90IG1hdGNoIHRoZSBwZXJpb2QgYW55bW9yZQogICAgICAgICAgICAgICAvLyBkZWxldGUgdGhlc2UgZW50cmllcwogICAgICAgICAgICAgICAkKHRoaXMpLmNsb3Nlc3QoJ3RyJykuZmluZCgnLlN0YXJ0VGltZSwgLkVuZFRpbWUnKS52YWwoJycpOwoKICAgICAgICAgICB9CiAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICQodGhpcykudmFsKCcnKTsKICAgICAgICAgICB9CgogICAgICAgICAgIC8vIG5vdyByZS1jYWxjdWxhdGUgdGhlIHRvdGFsIGhvdXJzIHN1bQogICAgICAgICAgIFJlY2FsY3VsYXRlVG90YWxIb3VycygpOwogICAgICAgIH0pOwoKICAgICAgICAvLyBpbml0IHBlcmlvZCBjYWxjdWxhdGlvbiBvbiBzdGFydHRpbWUgYW5kIGVuZHRpbWUgZmllbGRzCiAgICAgICAgJCgnLlN0YXJ0VGltZSwgLkVuZFRpbWUnKS51bmJpbmQoJ2NoYW5nZS5QZXJpb2RDYWxjdWxhdGlvbicpLmJpbmQoJ2NoYW5nZS5QZXJpb2RDYWxjdWxhdGlvbicsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgdmFyICRTdGFydFRpbWUsICRFbmRUaW1lLAogICAgICAgICAgICAgICAgU3RhcnRUaW1lSG91ciwgU3RhcnRUaW1lTWludXRlLCBFbmRUaW1lSG91ciwgRW5kVGltZU1pbnV0ZSwKICAgICAgICAgICAgICAgIFN0YXJ0RGF0ZSwgRW5kRGF0ZSwgVG9kYXksCiAgICAgICAgICAgICAgICBQZXJpb2QsIFBlcmlvZEhvdXIsIFBlcmlvZE1pbnV0ZTsKCiAgICAgICAgICAgIGlmICgkKHRoaXMpLmhhc0NsYXNzKCdTdGFydFRpbWUnKSkgewogICAgICAgICAgICAgICAgJFN0YXJ0VGltZSA9ICQodGhpcyk7CiAgICAgICAgICAgICAgICAkRW5kVGltZSA9ICRTdGFydFRpbWUuY2xvc2VzdCgndHInKS5maW5kKCcuRW5kVGltZScpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFN0YXJ0VGltZSA9ICQodGhpcykuY2xvc2VzdCgndHInKS5maW5kKCcuU3RhcnRUaW1lJyk7CiAgICAgICAgICAgICAgICAkRW5kVGltZSA9ICQodGhpcyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIG9ubHkgY2FsY3VsYXRlIGlmIGJvdGggZmllbGRzIGFyZSBmaWxsZWQKICAgICAgICAgICAgaWYgKCRTdGFydFRpbWUudmFsKCkgJiYgJEVuZFRpbWUudmFsKCkpIHsKICAgICAgICAgICAgICAgIC8vIGV4dHJhY3QgaG91cnMgYW5kIG1pbnV0ZXMKICAgICAgICAgICAgICAgIFN0YXJ0VGltZUhvdXIgPSAkU3RhcnRUaW1lLnZhbCgpLnNwbGl0KC86LylbMF0gfHwgMDsKICAgICAgICAgICAgICAgIFN0YXJ0VGltZU1pbnV0ZSA9ICRTdGFydFRpbWUudmFsKCkuc3BsaXQoLzovKVsxXSB8fCAwOwogICAgICAgICAgICAgICAgRW5kVGltZUhvdXIgPSAkRW5kVGltZS52YWwoKS5zcGxpdCgvOi8pWzBdIHx8IDA7CiAgICAgICAgICAgICAgICBFbmRUaW1lTWludXRlID0gJEVuZFRpbWUudmFsKCkuc3BsaXQoLzovKVsxXSB8fCAwOwoKICAgICAgICAgICAgICAgIC8vIGRlZmluZSBkYXRlIG9iamVjdHMKICAgICAgICAgICAgICAgIFRvZGF5ID0gbmV3IERhdGUoKTsKICAgICAgICAgICAgICAgIFN0YXJ0RGF0ZSA9IG5ldyBEYXRlKFRvZGF5LmdldFllYXIoKSwgVG9kYXkuZ2V0TW9udGgoKSwgVG9kYXkuZ2V0RGF0ZSgpLCBTdGFydFRpbWVIb3VyLCBTdGFydFRpbWVNaW51dGUsIDApOwogICAgICAgICAgICAgICAgRW5kRGF0ZSA9IG5ldyBEYXRlKFRvZGF5LmdldFllYXIoKSwgVG9kYXkuZ2V0TW9udGgoKSwgVG9kYXkuZ2V0RGF0ZSgpLCBFbmRUaW1lSG91ciwgRW5kVGltZU1pbnV0ZSwgMCk7CgogICAgICAgICAgICAgICAgLy8gY2FsY3VsYXRlIGRpZmZlcmVuY2VzCiAgICAgICAgICAgICAgICBQZXJpb2QgPSBFbmREYXRlLmdldFRpbWUoKSAtIFN0YXJ0RGF0ZS5nZXRUaW1lKCk7CiAgICAgICAgICAgICAgICBQZXJpb2QgPSBQZXJpb2QgLyAoMTAwMCAqIDYwICogNjApOwoKICAgICAgICAgICAgICAgIC8vIHNldCBuZXcgdmFsdWUKICAgICAgICAgICAgICAgIGlmICghaXNOYU4oUGVyaW9kKSkgewogICAgICAgICAgICAgICAgICAgICRTdGFydFRpbWUuY2xvc2VzdCgndHInKS5maW5kKCcuUGVyaW9kJykudmFsKFBlcmlvZC50b0ZpeGVkKDIpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRTdGFydFRpbWUuY2xvc2VzdCgndHInKS5maW5kKCcuUGVyaW9kJykudmFsKCcnKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBSZWNhbGN1bGF0ZVRvdGFsSG91cnMoKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQoKICAgIC8qKgogICAgICogQGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0ge09iamVjdH0gT3B0aW9ucyB0aGVkaWZmZXJlbnQgcG9zc2libGUgb3B0aW9uczoKICAgICAqICAgICAgICAgICAgICAgICAgUmVtYXJrUmVnRXhwQ29udGVudCAtIHRoZSByZWd1bGFyIGV4cHJlc3Npb24gZm9yIHRoZSByZW1hcmsgdmFsaWRhdGlvbiBjaGVjawogICAgICogICAgICAgICAgICAgICAgICBMYW5ndWFnZSAtIG9iamVjdCB3aXRoIHRleHQgdHJhbnNsYXRpb25zCiAgICAgKiAgICAgICAgICAgICAgICAgIEF1dG9jb21wbGV0aW9uIC0gYm9vbGVhbgogICAgICogQHJldHVybiBub3RoaW5nCiAgICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgYWxsIG5lZWRlZCBKUyBmb3IgdGhlIEVkaXQgc2NyZWVuCiAgICAgKi8KICAgIFRhcmdldE5TLkluaXQgPSBmdW5jdGlvbiAoT3B0aW9ucykgewogICAgICAgIHZhciBPcHRpb25zID0gT3B0aW9ucyB8fCB7fSwKICAgICAgICAgICAgUmVtYXJrUmVnRXhwQ29udGVudCA9IE9wdGlvbnMuUmVtYXJrUmVnRXhwQ29udGVudCwKICAgICAgICAgICAgTGFuZ3VhZ2UgPSBPcHRpb25zLkxhbmd1YWdlOwogICAgICAgIC8vIEFkZCBzb21lIHNwZWNpYWwgdmFsaWRhdGlvbiBtZXRob2RzIGZvciB0aGUgZWRpdCBzY3JlZW4KICAgICAgICAvLyBEZWZpbmUgYWxsIGF2YWlsYWJsZSBlbGVtZW50cyAob25seSB0aGUgcHJlZml4ZXMpIGluIGEgcm93CiAgICAgICAgdmFyIEVsZW1lbnRQcmVmaXhlcyA9IFsnUHJvamVjdElEJywgJ0FjdGlvbklEJywgJ1JlbWFyaycsICdTdGFydFRpbWUnLCAnRW5kVGltZScsICdQZXJpb2QnXTsKCiAgICAgICAgLy8gVmFsaWRhdGVzIHRoZSBwcm9qZWN0OiBpZiBzb21lIG90aGVyIGZpZWxkIGluIHRoaXMgcm93IGlzIGZpbGxlZCwgdGhlIHByb2plY3Qgc2VsZWN0IG11c3QgYmUgZmlsbGVkLCB0b28KICAgICAgICBDb3JlLkZvcm0uVmFsaWRhdGUuQWRkTWV0aG9kKCdWYWxpZGF0ZV9UaW1lQWNjb3VudGluZ19Qcm9qZWN0JywgZnVuY3Rpb24gKFZhbHVlLCBFbGVtZW50KSB7CiAgICAgICAgICAgIHZhciBJRCwKICAgICAgICAgICAgICAgIFJlc3VsdCA9IHRydWU7CgogICAgICAgICAgICAvLyBHZXQgSUQKICAgICAgICAgICAgLy8gT3VyIEVsZW1lbnQgY2FuIGJlIHRoZSBzZWxlY3QgZWxlbWVudCBvciB0aGUgYXV0b2NvbXBsZXRpb24gaW5wdXQgZmllbGQKICAgICAgICAgICAgaWYgKCQoRWxlbWVudCkuaXMoJ3NlbGVjdCcpKSB7CiAgICAgICAgICAgICAgICBJRCA9ICQoRWxlbWVudCkuYXR0cignaWQnKS5yZXBsYWNlKCdQcm9qZWN0SUQnLCAnJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBJRCA9ICQoRWxlbWVudCkucHJldignc2VsZWN0JykuYXR0cignaWQnKS5yZXBsYWNlKCdQcm9qZWN0SUQnLCAnJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghVmFsdWUpIHsKICAgICAgICAgICAgICAgICQuZWFjaChFbGVtZW50UHJlZml4ZXMsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIVJlc3VsdCkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAodGhpcyAhPT0gJ1Byb2plY3RJRCcgJiYgJCgnIycgKyB0aGlzICsgSUQpLnZhbCgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gUmVzdWx0OwogICAgICAgIH0pOwoKICAgICAgICBDb3JlLkZvcm0uVmFsaWRhdGUuQWRkUnVsZSgnVmFsaWRhdGVfVGltZUFjY291bnRpbmdfUHJvamVjdCcsIHsgVmFsaWRhdGVfVGltZUFjY291bnRpbmdfUHJvamVjdDogdHJ1ZSB9KTsKCiAgICAgICAgLy8gVmFsaWRhdGVzIHRoZSByZW1hcmtzOiBkZXBlbmRpbmcgb24gdGhlIHByb2plY3QsIHJlbWFya3MgbXVzdCBiZSBlbnRlcmVkIG9yIG5vdAogICAgICAgIENvcmUuRm9ybS5WYWxpZGF0ZS5BZGRNZXRob2QoJ1ZhbGlkYXRlX1RpbWVBY2NvdW50aW5nX1JlbWFyaycsIGZ1bmN0aW9uIChWYWx1ZSwgRWxlbWVudCkgewogICAgICAgICAgICB2YXIgSUQgPSAkKEVsZW1lbnQpLmF0dHIoJ2lkJykucmVwbGFjZSgnUmVtYXJrJywgJycpLAogICAgICAgICAgICAgICAgUmVtYXJrUmVnRXhwID0gbmV3IFJlZ0V4cCgiXigiICsgUmVtYXJrUmVnRXhwQ29udGVudCArICIpJCIpLAogICAgICAgICAgICAgICAgUmVtYXJrQ2hlY2sgPSBSZW1hcmtSZWdFeHAudGVzdCgkKCcjUHJvamVjdElEJyArIElEKS52YWwoKSk7CgogICAgICAgICAgICBpZiAoJCgnI1Byb2plY3RJRCcgKyBJRCkudmFsKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAhKFJlbWFya0NoZWNrICYmIFZhbHVlLmxlbmd0aCA8IDgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9KTsKCiAgICAgICAgQ29yZS5Gb3JtLlZhbGlkYXRlLkFkZFJ1bGUoJ1ZhbGlkYXRlX1RpbWVBY2NvdW50aW5nX1JlbWFyaycsIHsgVmFsaWRhdGVfVGltZUFjY291bnRpbmdfUmVtYXJrOiB0cnVlIH0pOwoKICAgICAgICAvLyBWYWxpZGF0ZXMgdGhlIHN0YXJ0IHRpbWU6IGlmIGEgcHJvamVjdCBpcyBnaXZlbiBhbmQgbm8gdGltZSBwZXJpb2QgaXMgZ2l2ZW4sIHRoaXMgZmllbGQgaXMgcmVxdWlyZWQKICAgICAgICBDb3JlLkZvcm0uVmFsaWRhdGUuQWRkTWV0aG9kKCdWYWxpZGF0ZV9UaW1lQWNjb3VudGluZ19TdGFydFRpbWUnLCBmdW5jdGlvbiAoVmFsdWUsIEVsZW1lbnQpIHsKICAgICAgICAgICAgdmFyIElEID0gJChFbGVtZW50KS5hdHRyKCdpZCcpLnJlcGxhY2UoJ1N0YXJ0VGltZScsICcnKTsKCiAgICAgICAgICAgIGlmICghVmFsdWUgJiYgJCgnI1Byb2plY3RJRCcgKyBJRCkudmFsKCkgJiYgISQoJyNQZXJpb2QnICsgSUQpLnZhbCgpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0pOwoKICAgICAgICBDb3JlLkZvcm0uVmFsaWRhdGUuQWRkUnVsZSgnVmFsaWRhdGVfVGltZUFjY291bnRpbmdfU3RhcnRUaW1lJywgeyBWYWxpZGF0ZV9UaW1lQWNjb3VudGluZ19TdGFydFRpbWU6IHRydWUgfSk7CgogICAgICAgIC8vIFZhbGlkYXRlcyB0aGUgdGltZSBwZXJpb2Q6IGlmIGEgcHJvamVjdCBpcyBnaXZlbiBhbmQgbm8gc3RhcnQgdGltZSBpcyBnaXZlbiwgdGhpcyBmaWVsZCBpcyByZXF1aXJlZAogICAgICAgIENvcmUuRm9ybS5WYWxpZGF0ZS5BZGRNZXRob2QoJ1ZhbGlkYXRlX1RpbWVBY2NvdW50aW5nX1BlcmlvZCcsIGZ1bmN0aW9uIChWYWx1ZSwgRWxlbWVudCkgewogICAgICAgICAgICB2YXIgSUQgPSAkKEVsZW1lbnQpLmF0dHIoJ2lkJykucmVwbGFjZSgnUGVyaW9kJywgJycpOwoKICAgICAgICAgICAgaWYgKCFWYWx1ZSAmJiAkKCcjUHJvamVjdElEJyArIElEKS52YWwoKSAmJiAhJCgnI1N0YXJ0VGltZScgKyBJRCkudmFsKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSk7CgogICAgICAgIENvcmUuRm9ybS5WYWxpZGF0ZS5BZGRSdWxlKCdWYWxpZGF0ZV9UaW1lQWNjb3VudGluZ19QZXJpb2QnLCB7IFZhbGlkYXRlX1RpbWVBY2NvdW50aW5nX1BlcmlvZDogdHJ1ZSB9KTsKCiAgICAgICAgLy8gRW5hYmxlIGF1dG9jb21wbGV0aW9uLCBpZiBjb25maWd1cmVkCiAgICAgICAgaWYgKE9wdGlvbnMuQXV0b2NvbXBsZXRpb24pIHsKICAgICAgICAgICAgSW5pdEF1dG9Db21wbGV0aW9uKExhbmd1YWdlKTsKICAgICAgICB9CgogICAgICAgIC8vIGluaXRpYXRlICJtb3JlIGlucHV0IGZpZWxkcyIgZnVuY3Rpb25hbGl0eQogICAgICAgIEluaXRBZGRSb3coTGFuZ3VhZ2UpOwoKICAgICAgICAvLyBpbml0aWF0ZSBwZXJpb2QgY2FsY3VsYXRpb24KICAgICAgICBJbml0UGVyaW9kQ2FsY3VsYXRpb24oKTsKICAgIH07CgogICAgLyoqCiAgICAgKiBAZnVuY3Rpb24KICAgICAqIEBwYXJhbSB7T2JqZWN0fSBMYW5ndWFnZSBvYmplY3Qgd2l0aCB0ZXh0IHRyYW5zbGF0aW9ucwogICAgICogQHJldHVybiBub3RoaW5nCiAgICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIGphdmFzY3JpcHQgZm9yIHRoZSBtYXNzIGVudHJ5IGZ1bmN0aW9uYWxpdHkKICAgICAqLwogICAgVGFyZ2V0TlMuTWFzc0VudHJ5SW5pdCA9IGZ1bmN0aW9uKExhbmd1YWdlKSB7CiAgICAgICAgJCgnI0luY29tcGxldGVXb3JraW5nRGF5LUFsbCcpLnVuYmluZCgnY2xpY2suU2VsZWN0QWxsRGF5cycpLmJpbmQoJ2NsaWNrLlNlbGVjdEFsbERheXMnLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICAgICAgdmFyIFN0YXRlID0gJCh0aGlzKS5hdHRyKCdjaGVja2VkJyk7CiAgICAgICAgICAgICQoJ3VsLkluY29tcGxldGVXb3JraW5nRGF5cyBsaSBpbnB1dDpjaGVja2JveCcpLmF0dHIoJ2NoZWNrZWQnLCBTdGF0ZSk7CiAgICAgICAgfSk7CiAgICAgICAgJCgnI01hc3NFbnRyeVN1Ym1pdCcpLnVuYmluZCgnY2xpY2suTWFzc0VudHJ5U3VibWl0JykuYmluZCgnY2xpY2suTWFzc0VudHJ5U3VibWl0JywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICB2YXIgJFdvcmtpbmdEYXlDaGVja2JveGVzID0gJCgndWwuSW5jb21wbGV0ZVdvcmtpbmdEYXlzIGxpIGlucHV0OmNoZWNrYm94OmNoZWNrZWQnKS5maWx0ZXIoJ1tuYW1lIT1JbmNvbXBsZXRlV29ya2luZ0RheS1BbGxdJyk7CgogICAgICAgICAgICBpZiAoISRXb3JraW5nRGF5Q2hlY2tib3hlcy5sZW5ndGgpIHsKICAgICAgICAgICAgICAgIGFsZXJ0KExhbmd1YWdlLk1zZ0Nob29zZU9uZURheSk7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFNob3cgb3ZlcmxheQogICAgICAgICAgICBDb3JlLlVJLkRpYWxvZy5TaG93Q29udGVudERpYWxvZygkKCcjTWFzc0VudHJ5Q29uZmlybURpYWxvZycpLCBMYW5ndWFnZS5NYXNzRW50cnksICcxNTBweCcsICdDZW50ZXInLCB0cnVlLCBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgTGFiZWw6IExhbmd1YWdlLlN1Ym1pdCwKICAgICAgICAgICAgICAgICAgICBGdW5jdGlvbjogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICB2YXIgJFNlbGVjdGVkUmFkaW8gPSAkKCcjTWFzc0VudHJ5Q29uZmlybVJhZGlvIGxpIGlucHV0OnJhZGlvOmNoZWNrZWQnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFic2VuY2VSZWFzb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xsZWN0ZWREYXRlcyA9ICcnOwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEkU2VsZWN0ZWRSYWRpby5sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZXJ0KExhbmd1YWdlLk1zZ0Fic2VuY2VSZWFzb24pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBzZXQgYWJzZW5jZSByZWFzb24KICAgICAgICAgICAgICAgICAgICAgICAgQWJzZW5jZVJlYXNvbiA9ICRTZWxlY3RlZFJhZGlvLmF0dHIoJ25hbWUnKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFic2VuY2VSZWFzb24gPT09ICdMZWF2ZURheScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNNYXNzRW50cnkgaW5wdXRbbmFtZT1MZWF2ZURheV0nKS52YWwoMSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoQWJzZW5jZVJlYXNvbiA9PT0gJ1NpY2snKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjTWFzc0VudHJ5IGlucHV0W25hbWU9U2lja10nKS52YWwoMSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoQWJzZW5jZVJlYXNvbiA9PT0gJ092ZXJ0aW1lJykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI01hc3NFbnRyeSBpbnB1dFtuYW1lPU92ZXJ0aW1lXScpLnZhbCgxKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29sbGVjdCBkYXRlcwogICAgICAgICAgICAgICAgICAgICAgICAkKCd1bC5JbmNvbXBsZXRlV29ya2luZ0RheXMgbGkgaW5wdXQ6Y2hlY2tib3g6Y2hlY2tlZCcpLmVhY2goZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIERhdGUgPSAkKHRoaXMpLmF0dHIoJ25hbWUnKS5yZXBsYWNlKC9JbmNvbXBsZXRlV29ya2luZ0RheS0vLCAiIik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRGF0ZSAhPT0gJ0FsbCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb2xsZWN0ZWREYXRlcyArPSBEYXRlICsgJ3wnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgICAgICAgJCgnI01hc3NFbnRyeSBpbnB1dFtuYW1lPURhdGVzXScpLnZhbChDb2xsZWN0ZWREYXRlcyk7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBTaG93IHdhaXRpbmcgaWNvbgogICAgICAgICAgICAgICAgICAgICAgICAkKCcuRGlhbG9nOnZpc2libGUnKQogICAgICAgICAgICAgICAgICAgICAgICAuZmluZCgnLkNvbnRlbnRGb290ZXInKQogICAgICAgICAgICAgICAgICAgICAgICAuZW1wdHkoKQogICAgICAgICAgICAgICAgICAgICAgICAuZW5kKCkKICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmQoJy5Jbm5lckNvbnRlbnQnKQogICAgICAgICAgICAgICAgICAgICAgICAud2lkdGgoJCgnLkRpYWxvZzp2aXNpYmxlJykuZmluZCgnLklubmVyQ29udGVudCcpLndpZHRoKCkpCiAgICAgICAgICAgICAgICAgICAgICAgIC5lbXB0eSgpCiAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoJzxzcGFuIGNsYXNzPSJBSkFYTG9hZGVyIj48L3NwYW4+Jyk7CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBTdWJtaXQgZm9ybQogICAgICAgICAgICAgICAgICAgICAgICAkKCcjTWFzc0VudHJ5Jykuc3VibWl0KCk7CiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICBDbGFzczogJ1ByaW1hcnknCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIExhYmVsOiBMYW5ndWFnZS5DYW5jZWwsCiAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb246IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgICAgICAgICAgQ29yZS5VSS5EaWFsb2cuQ2xvc2VEaWFsb2coJCgnLkRpYWxvZzp2aXNpYmxlJykpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0pOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHJldHVybiBUYXJnZXROUzsKfShUaW1lQWNjb3VudGluZy5BZ2VudC5FZGl0VGltZVJlY29yZHMgfHwge30pKTsK
PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBYSFRNTCAxLjAgVHJhbnNpdGlvbmFsLy9FTiIKICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIHhtbDpsYW5nPSJlbiIgbGFuZz0iZW4iPgo8aGVhZD4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iLi4vdGhpcmRwYXJ0eS9xdW5pdC9xdW5pdC5jc3MiIHR5cGU9InRleHQvY3NzIi8+CgogICAgPHRpdGxlPlRpbWVBY2NvdW50aW5nIGZvciBPVFJTIDMuMCAmbmRhc2g7IFVuaXRUZXN0IFJlc3VsdHM8L3RpdGxlPgo8L2hlYWQ+Cjxib2R5PgogICAgPGgxIGlkPSJxdW5pdC1oZWFkZXIiPlRpbWVBY2NvdW50aW5nIGZvciBPVFJTIDMuMCAmbmRhc2g7IFVuaXRUZXN0IFJlc3VsdHM8L2gxPgogICAgPGgyIGlkPSJxdW5pdC1iYW5uZXIiPjwvaDI+CiAgICA8aDIgaWQ9InF1bml0LXVzZXJBZ2VudCI+PC9oMj4KICAgIDxvbCBpZD0icXVuaXQtdGVzdHMiPjwvb2w+CgoKICAgIDwhLS0gVW5pdFRlc3QgY29kZSBnb2VzIGhlcmUgLS0+CiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi90aGlyZHBhcnR5L3F1bml0L3F1bml0LmpzIj48L3NjcmlwdD4KICAgIDwhLS0KICAgICAgICBOb3cgYWx3YXlzIGxvYWQgbGlicmFyeSBmaXJzdCBhbmQgdGhlbiB0aGUgVW5pdFRlc3QgZmlsZSBmb3IgaXQuCiAgICAgICAgVGhlIFVuaXRUZXN0IGZpbGUgaXMgcmVzcG9uc2libGUgZm9yIHJ1bm5pbnQgdGhlIHRlc3RzLgogICAgLS0+CiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi90aGlyZHBhcnR5L2pxdWVyeS0xLjQuNC9qcXVlcnkuanMiPjwvc2NyaXB0PgoKICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL0NvcmUuRXhjZXB0aW9uLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL0NvcmUuRGVidWcuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vQ29yZS5EYXRhLmpzIj48L3NjcmlwdD4KCiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi90aGlyZHBhcnR5L2pzb24vanNvbjIuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vQ29yZS5KU09OLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Ii4uL0NvcmUuQ29uZmlnLmpzIj48L3NjcmlwdD4KCiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi90aGlyZHBhcnR5L2pxdWVyeS11aS0xLjguNy9qcXVlcnktdWkuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vdGhpcmRwYXJ0eS9qcXVlcnktdmFsaWRhdGUtMS43L2pxdWVyeS52YWxpZGF0ZS5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9Db3JlLlVJLkRpYWxvZy5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9Db3JlLkZvcm0uRXJyb3JUb29sdGlwcy5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9Db3JlLlVJLkFjY2Vzc2liaWxpdHkuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vQ29yZS5VSS5SaWNoVGV4dEVkaXRvci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi9Db3JlLkZvcm0uVmFsaWRhdGUuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4vVGltZUFjY291bnRpbmcuQWdlbnQuRWRpdFRpbWVSZWNvcmRzLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IlRpbWVBY2NvdW50aW5nLkFnZW50LkVkaXRUaW1lUmVjb3Jkcy5Vbml0VGVzdC5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CiAgICAgICAgVGltZUFjY291bnRpbmcuQWdlbnQuRWRpdFRpbWVSZWNvcmRzLlJ1blVuaXRUZXN0cygpOwogICAgPC9zY3JpcHQ+CjwvYm9keT4KPC9odG1sPgo=
Ly8gLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTcgT1RSUyBBRywgaHR0cDovL290cnMuY29tL1xuIjsKLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQovLyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgovLyAtLQoKInVzZSBzdHJpY3QiOwoKdmFyIFRpbWVBY2NvdW50aW5nID0gVGltZUFjY291bnRpbmcgfHwge307ClRpbWVBY2NvdW50aW5nLkFnZW50ID0gVGltZUFjY291bnRpbmcuQWdlbnQgfHwge307CgpUaW1lQWNjb3VudGluZy5BZ2VudC5FZGl0VGltZVJlY29yZHMgPSAoZnVuY3Rpb24gKE5hbWVzcGFjZSkgewogICAgTmFtZXNwYWNlLlJ1blVuaXRUZXN0cyA9IGZ1bmN0aW9uKCl7CiAgICAgICAgbW9kdWxlKCdUaW1lQWNjb3VudGluZy5BZ2VudC5FZGl0VGltZVJlY29yZHMnKTsKICAgICAgICB0ZXN0KCdjbGllbnQtc2lkZSB0aW1lIHBlcmlvZCBjYWxjdWxhdGlvbnMnLCBmdW5jdGlvbigpewoKICAgICAgICAgICAgZXhwZWN0KDIwKTsKCiAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAqIENyZWF0ZSBhIGZvcm0gY29udGFpbmVyIGZvciB0aGUgdGVzdHMKICAgICAgICAgICAgICovCiAgICAgICAgICAgIHZhciAkVGVzdEZvcm0gPSAkKCc8Zm9ybSBpZD0iVGVzdEZvcm0iPjwvZm9ybT4nKSwKICAgICAgICAgICAgICAgICRUYWJsZTsKICAgICAgICAgICAgJFRlc3RGb3JtLmFwcGVuZCgnPHRhYmxlPjx0cj48dGQ+PC90ZD48L3RyPjx0cj48dGQ+PC90ZD48L3RyPjx0cj48dGQ+PC90ZD48L3RyPjwvdGFibGU+Jyk7CiAgICAgICAgICAgICRUYWJsZSA9ICRUZXN0Rm9ybS5maW5kKCd0cjplcSgwKSB0ZCcpOwogICAgICAgICAgICAkVGFibGUuYXBwZW5kKCc8aW5wdXQgdHlwZT0idGV4dCIgdmFsdWU9IiIgaWQ9IlN0YXJ0VGltZTEiIG5hbWU9IlN0YXJ0VGltZTEiIGNsYXNzPSJTdGFydFRpbWUiIC8+Jyk7CiAgICAgICAgICAgICRUYWJsZS5hcHBlbmQoJzxpbnB1dCB0eXBlPSJ0ZXh0IiB2YWx1ZT0iIiBpZD0iRW5kVGltZTEiIG5hbWU9IkVuZFRpbWUxIiBjbGFzcz0iRW5kVGltZSIgLz4nKTsKICAgICAgICAgICAgJFRhYmxlLmFwcGVuZCgnPGlucHV0IHR5cGU9InRleHQiIHZhbHVlPSIiIGlkPSJQZXJpb2QxIiBuYW1lPSJQZXJpb2QxIiBjbGFzcz0iUGVyaW9kIiAvPicpOwogICAgICAgICAgICAkVGFibGUgPSAkVGVzdEZvcm0uZmluZCgndHI6ZXEoMSkgdGQnKTsKICAgICAgICAgICAgJFRhYmxlLmFwcGVuZCgnPGlucHV0IHR5cGU9InRleHQiIHZhbHVlPSIiIGlkPSJTdGFydFRpbWUyIiBuYW1lPSJTdGFydFRpbWUyIiBjbGFzcz0iU3RhcnRUaW1lIiAvPicpOwogICAgICAgICAgICAkVGFibGUuYXBwZW5kKCc8aW5wdXQgdHlwZT0idGV4dCIgdmFsdWU9IiIgaWQ9IkVuZFRpbWUyIiBuYW1lPSJFbmRUaW1lMiIgY2xhc3M9IkVuZFRpbWUiIC8+Jyk7CiAgICAgICAgICAgICRUYWJsZS5hcHBlbmQoJzxpbnB1dCB0eXBlPSJ0ZXh0IiB2YWx1ZT0iIiBpZD0iUGVyaW9kMiIgbmFtZT0iUGVyaW9kMiIgY2xhc3M9IlBlcmlvZCIgLz4nKTsKICAgICAgICAgICAgJFRhYmxlID0gJFRlc3RGb3JtLmZpbmQoJ3RyOmVxKDIpIHRkJyk7CiAgICAgICAgICAgICRUYWJsZS5hcHBlbmQoJzxpbnB1dCB0eXBlPSJ0ZXh0IiB2YWx1ZT0iIiBpZD0iU3RhcnRUaW1lMyIgbmFtZT0iU3RhcnRUaW1lMyIgY2xhc3M9IlN0YXJ0VGltZSIgLz4nKTsKICAgICAgICAgICAgJFRhYmxlLmFwcGVuZCgnPGlucHV0IHR5cGU9InRleHQiIHZhbHVlPSIiIGlkPSJFbmRUaW1lMyIgbmFtZT0iRW5kVGltZTMiIGNsYXNzPSJFbmRUaW1lIiAvPicpOwogICAgICAgICAgICAkVGFibGUuYXBwZW5kKCc8aW5wdXQgdHlwZT0idGV4dCIgdmFsdWU9IiIgaWQ9IlBlcmlvZDMiIG5hbWU9IlBlcmlvZDMiIGNsYXNzPSJQZXJpb2QiIC8+Jyk7CiAgICAgICAgICAgICRUYWJsZS5hcHBlbmQoJzxzcGFuIGlkPSJUb3RhbEhvdXJzIiBuYW1lPSJUb3RhbEhvdXJzIiBjbGFzcz0iVG90YWxIb3VycyI+PC9zcGFuPicpOwogICAgICAgICAgICAkKCdib2R5JykuYXBwZW5kKCRUZXN0Rm9ybSk7CgogICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBSdW4gdGhlIHRlc3RzCiAgICAgICAgICAgICAqLwoKICAgICAgICAgICAgVGltZUFjY291bnRpbmcuQWdlbnQuRWRpdFRpbWVSZWNvcmRzLkluaXQoKTsKCiAgICAgICAgICAgIC8vIFRlc3Q6IHRpbWUgY2FsY3VsYXRpb24gb24gdGltZSBwZXJpb2QgZmllbGQKICAgICAgICAgICAgJCgnI1BlcmlvZDEnKS52YWwoJzInKTsKICAgICAgICAgICAgJCgnI1BlcmlvZDEnKS50cmlnZ2VyKCdjaGFuZ2UnKTsKICAgICAgICAgICAgZXF1YWxzKCQoJyNQZXJpb2QxJykudmFsKCksICcyLjAwJywgJ05vcm1hbCBudW1iZXIgZW50cnknKTsKCiAgICAgICAgICAgICQoJyNQZXJpb2QxJykudmFsKCdmb29iYXInKTsKICAgICAgICAgICAgJCgnI1BlcmlvZDEnKS50cmlnZ2VyKCdjaGFuZ2UnKTsKICAgICAgICAgICAgZXF1YWxzKCQoJyNQZXJpb2QxJykudmFsKCksICcnLCAnTm90IGEgbnVtYmVyICg9ImZvb2JhciIpJyk7CgogICAgICAgICAgICAkKCcjUGVyaW9kMScpLnZhbCgnMiArIDMnKTsKICAgICAgICAgICAgJCgnI1BlcmlvZDEnKS50cmlnZ2VyKCdjaGFuZ2UnKTsKICAgICAgICAgICAgZXF1YWxzKCQoJyNQZXJpb2QxJykudmFsKCksICc1LjAwJywgJ0Vhc3kgY2FsY3VsYXRpb24nKTsKCiAgICAgICAgICAgICQoJyNQZXJpb2QxJykudmFsKCdhbGVydCgiaHVodSIpOycpOwogICAgICAgICAgICAkKCcjUGVyaW9kMScpLnRyaWdnZXIoJ2NoYW5nZScpOwogICAgICAgICAgICBlcXVhbHMoJCgnI1BlcmlvZDEnKS52YWwoKSwgJycsICdFdmlsIGphdmFzY3JpcHQgY29kZScpOwoKICAgICAgICAgICAgJCgnI1BlcmlvZDEnKS52YWwoJzIuMjMgKyAxLjA5Jyk7CiAgICAgICAgICAgICQoJyNQZXJpb2QxJykudHJpZ2dlcignY2hhbmdlJyk7CiAgICAgICAgICAgIGVxdWFscygkKCcjUGVyaW9kMScpLnZhbCgpLCAnMy4zMicsICdDYWxjdWxhdGlvbiB3aXRoIG5vbi1pbnRlZ2VycycpOwoKICAgICAgICAgICAgJCgnI1BlcmlvZDEnKS52YWwoJzIuMDAwMSArIDEuNScpOwogICAgICAgICAgICAkKCcjUGVyaW9kMScpLnRyaWdnZXIoJ2NoYW5nZScpOwogICAgICAgICAgICBlcXVhbHMoJCgnI1BlcmlvZDEnKS52YWwoKSwgJzMuNTAnLCAnQ2FsY3VsYXRpb24gd2l0aCBhIG51bWJlciB3aXRoIG1vcmUgdGhhbiAyIGRlY2ltYWxzJyk7CgogICAgICAgICAgICAkKCcjUGVyaW9kMScpLnZhbCgnMSwyICsgMSwzJyk7CiAgICAgICAgICAgICQoJyNQZXJpb2QxJykudHJpZ2dlcignY2hhbmdlJyk7CiAgICAgICAgICAgIGVxdWFscygkKCcjUGVyaW9kMScpLnZhbCgpLCAnMi41MCcsICdOdW1iZXJzIHdpdGggLCBpbnN0ZWFkIG9mIC4nKTsKCiAgICAgICAgICAgICQoJyNQZXJpb2QxJykudmFsKCc1LjggLSAxLjInKTsKICAgICAgICAgICAgJCgnI1BlcmlvZDEnKS50cmlnZ2VyKCdjaGFuZ2UnKTsKICAgICAgICAgICAgZXF1YWxzKCQoJyNQZXJpb2QxJykudmFsKCksICc0LjYwJywgJ1N1YnN0cmFjdGlvbicpOwoKICAgICAgICAgICAgJCgnI1BlcmlvZDEnKS52YWwoJycpOwoKICAgICAgICAgICAgLy8gVGVzdDogY2FsY3VsYXRlIHBlcmlvZCBmcm9tIGVudGVyZWQgc3RhcnQgYW5kIGVuZCB0aW1lCiAgICAgICAgICAgICQoJyNTdGFydFRpbWUxJykudmFsKCcxJyk7CiAgICAgICAgICAgICQoJyNTdGFydFRpbWUxJykudHJpZ2dlcignY2hhbmdlJyk7CiAgICAgICAgICAgICQoJyNFbmRUaW1lMScpLnZhbCgnJyk7CiAgICAgICAgICAgICQoJyNFbmRUaW1lMScpLnRyaWdnZXIoJ2NoYW5nZScpOwogICAgICAgICAgICBlcXVhbHMoJCgnI1BlcmlvZDEnKS52YWwoKSwgJycsICdPbmx5IHN0YXJ0IHRpbWUgZW50ZXJlZCcpOwoKICAgICAgICAgICAgJCgnI1N0YXJ0VGltZTEnKS52YWwoJycpOwogICAgICAgICAgICAkKCcjU3RhcnRUaW1lMScpLnRyaWdnZXIoJ2NoYW5nZScpOwogICAgICAgICAgICAkKCcjRW5kVGltZTEnKS52YWwoJzInKTsKICAgICAgICAgICAgJCgnI0VuZFRpbWUxJykudHJpZ2dlcignY2hhbmdlJyk7CiAgICAgICAgICAgIGVxdWFscygkKCcjUGVyaW9kMScpLnZhbCgpLCAnJywgJ09ubHkgZW5kIHRpbWUgZW50ZXJlZCcpOwoKICAgICAgICAgICAgJCgnI1N0YXJ0VGltZTEnKS52YWwoJzEnKTsKICAgICAgICAgICAgJCgnI1N0YXJ0VGltZTEnKS50cmlnZ2VyKCdjaGFuZ2UnKTsKICAgICAgICAgICAgJCgnI0VuZFRpbWUxJykudmFsKCcyJyk7CiAgICAgICAgICAgICQoJyNFbmRUaW1lMScpLnRyaWdnZXIoJ2NoYW5nZScpOwogICAgICAgICAgICBlcXVhbHMoJCgnI1BlcmlvZDEnKS52YWwoKSwgJzEuMDAnLCAnQm90aCB0aW1lcyBlbnRlcmVkJyk7CgogICAgICAgICAgICAkKCcjU3RhcnRUaW1lMScpLnZhbCgnOTowNicpOwogICAgICAgICAgICAkKCcjU3RhcnRUaW1lMScpLnRyaWdnZXIoJ2NoYW5nZScpOwogICAgICAgICAgICAkKCcjRW5kVGltZTEnKS52YWwoJzEwOjAwJyk7CiAgICAgICAgICAgICQoJyNFbmRUaW1lMScpLnRyaWdnZXIoJ2NoYW5nZScpOwogICAgICAgICAgICBlcXVhbHMoJCgnI1BlcmlvZDEnKS52YWwoKSwgJzAuOTAnLCAnRWFzeSBjYWxjdWxhdGlvbiB3aXRoIHR3byB0aW1lcyBvZiB0aGUgZm9ybWF0IEhIOk1NJyk7CgogICAgICAgICAgICAkKCcjU3RhcnRUaW1lMScpLnZhbCgnOTowMCcpOwogICAgICAgICAgICAkKCcjU3RhcnRUaW1lMScpLnRyaWdnZXIoJ2NoYW5nZScpOwogICAgICAgICAgICAkKCcjRW5kVGltZTEnKS52YWwoJzExOjMwJyk7CiAgICAgICAgICAgICQoJyNFbmRUaW1lMScpLnRyaWdnZXIoJ2NoYW5nZScpOwogICAgICAgICAgICBlcXVhbHMoJCgnI1BlcmlvZDEnKS52YWwoKSwgJzIuNTAnLCAnRWFzeSBjYWxjdWxhdGlvbiB3aXRoIHR3byB0aW1lcyBvZiB0aGUgZm9ybWF0IEhIOk1NJyk7CgogICAgICAgICAgICAkKCcjU3RhcnRUaW1lMScpLnZhbCgnOSw1Jyk7CiAgICAgICAgICAgICQoJyNTdGFydFRpbWUxJykudHJpZ2dlcignY2hhbmdlJyk7CiAgICAgICAgICAgICQoJyNFbmRUaW1lMScpLnZhbCgnMTAsNScpOwogICAgICAgICAgICAkKCcjRW5kVGltZTEnKS50cmlnZ2VyKCdjaGFuZ2UnKTsKICAgICAgICAgICAgZXF1YWxzKCQoJyNQZXJpb2QxJykudmFsKCksICcnLCAnU3RhcnRUaW1lIGFuZCBFbmRUaW1lIGZvcm1hdCBhcmUgd3JvbmcnKTsKCiAgICAgICAgICAgICQoJyNTdGFydFRpbWUxJykudmFsKCc5OjUnKTsKICAgICAgICAgICAgJCgnI1N0YXJ0VGltZTEnKS50cmlnZ2VyKCdjaGFuZ2UnKTsKICAgICAgICAgICAgJCgnI0VuZFRpbWUxJykudmFsKCcxMDo1Jyk7CiAgICAgICAgICAgICQoJyNFbmRUaW1lMScpLnRyaWdnZXIoJ2NoYW5nZScpOwogICAgICAgICAgICBlcXVhbHMoJCgnI1BlcmlvZDEnKS52YWwoKSwgJzEuMDAnLCAnU3RhcnRUaW1lIGFuZCBFbmRUaW1lIGZvcm1hdCBhcmUgc2xpZ2h0bHkgd3JvbmcnKTsKCiAgICAgICAgICAgIC8vIFRlc3Q6IENhbGN1bGF0aW9uIG9mIHRvdGFsIGhvdXJzCiAgICAgICAgICAgICQoJyNTdGFydFRpbWUxJykudmFsKCc5OjUnKTsKICAgICAgICAgICAgJCgnI1N0YXJ0VGltZTEnKS50cmlnZ2VyKCdjaGFuZ2UnKTsKICAgICAgICAgICAgJCgnI0VuZFRpbWUxJykudmFsKCcxMDo1Jyk7CiAgICAgICAgICAgICQoJyNFbmRUaW1lMScpLnRyaWdnZXIoJ2NoYW5nZScpOwogICAgICAgICAgICBlcXVhbHMoJCgnI1RvdGFsSG91cnMnKS50ZXh0KCksICcxLjAwJywgJ0Vhc3kgc3RhcnQnKTsKCiAgICAgICAgICAgICQoJyNQZXJpb2QyJykudmFsKCcyLjUnKTsKICAgICAgICAgICAgJCgnI1BlcmlvZDInKS50cmlnZ2VyKCdjaGFuZ2UnKTsKICAgICAgICAgICAgZXF1YWxzKCQoJyNUb3RhbEhvdXJzJykudGV4dCgpLCAnMy41MCcsICdTZWNvbmQgcGVyaW9kIGZpZWxkJyk7CgogICAgICAgICAgICAkKCcjUGVyaW9kMicpLnZhbCgnMS41ICsgOSw1Jyk7CiAgICAgICAgICAgICQoJyNQZXJpb2QyJykudHJpZ2dlcignY2hhbmdlJyk7CiAgICAgICAgICAgIGVxdWFscygkKCcjVG90YWxIb3VycycpLnRleHQoKSwgJzEyLjAwJywgJ1NlY29uZCBwZXJpb2QgZmllbGQgZ2V0cyBhbiBhZGRpdGlvbmFsIGNhbGN1bGF0aW9uIHdpdGggb25lIHdyb25nIGNvbW1hJyk7CgogICAgICAgICAgICAkKCcjUGVyaW9kMycpLnZhbCgnNC4zNScpOwogICAgICAgICAgICAkKCcjUGVyaW9kMycpLnRyaWdnZXIoJ2NoYW5nZScpOwogICAgICAgICAgICBlcXVhbHMoJCgnI1RvdGFsSG91cnMnKS50ZXh0KCksICcxNi4zNScsICdUaGlyZCBmaWVsZCcpOwoKICAgICAgICAgICAgJCgnI1N0YXJ0VGltZTEnKS52YWwoJzE0OjAwJyk7CiAgICAgICAgICAgICQoJyNTdGFydFRpbWUxJykudHJpZ2dlcignY2hhbmdlJyk7CiAgICAgICAgICAgICQoJyNFbmRUaW1lMScpLnZhbCgnb3BlbmVuZCcpOwogICAgICAgICAgICAkKCcjRW5kVGltZTEnKS50cmlnZ2VyKCdjaGFuZ2UnKTsKICAgICAgICAgICAgZXF1YWxzKCQoJyNUb3RhbEhvdXJzJykudGV4dCgpLCAnMTUuMzUnLCAnRmlyc3Qgcm93OiBzdGFydHRpbWUgYW5kIGVuZHRpbWUgZmllbGRzIGhhdmUgd3JvbmcgaW5wdXQnKTsKCgogICAgICAgICAgICAvKgogICAgICAgICAgICAgKiBDbGVhbnVwIGRpdiBjb250YWluZXIgYW5kIGNvbnRlbnRzCiAgICAgICAgICAgICAqLwogICAgICAgICAgICAkKCcjVGVzdEZvcm0nKS5yZW1vdmUoKTsKICAgICAgICB9KTsKICAgIH07CgogICAgcmV0dXJuIE5hbWVzcGFjZTsKfShUaW1lQWNjb3VudGluZy5BZ2VudC5FZGl0VGltZVJlY29yZHMgfHwge30pKTsK
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgVGltZSBBY2NvdW50aW5nIERlZmF1bHQgQ1NTCiAqLwoKQG1lZGlhIHNjcmVlbixwcm9qZWN0aW9uLHR2LGhhbmRoZWxkIHsKCi8qKgogKiBAc3Vic2VjdGlvbiAgbGVmdCBhbmQgcmlnaHQgYXJyb3dzCiAqLwoKLkFycm93IHsKICAgIHRleHQtaW5kZW50OiAtOTk5OXB4OwogICAgZGlzcGxheTogYmxvY2s7CiAgICB3aWR0aDogMTJweDsKICAgIGhlaWdodDogMTJweDsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXRvcDogNXB4OwogICAgbWFyZ2luLXJpZ2h0OiA0cHg7Cn0KCi5BcnJvdy5MZWZ0IHsKICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybCguLi9pbWcvYXJyb3dfbGVmdHJpZ2h0LnBuZyk7Cn0KCi5BcnJvdy5SaWdodCB7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoLi4vaW1nL2Fycm93X2xlZnRyaWdodC5wbmcpOwogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTEycHggMHB4Owp9CgovKioKICogQHN1YnNlY3Rpb24gIHNwZWNpYWwgc2V0dGluZ3M6IHJlcG9ydGluZwogKi8KCmRpdi5Nb250aFNlbGVjdGlvbiB7CiAgICBsaW5lLWhlaWdodDogMjRweDsKICAgIG1hcmdpbi1ib3R0b206IDEwcHg7Cn0KCi8qKgogKiBAc3Vic2VjdGlvbiAgc3BlY2lhbCBvdmVyd3JpdGluZyBzZXR0aW5ncyBmb3IgYXV0b2NvbXBsZXRpb24gYnV0dG9uCiAqLwoKdGFibGUjSW5zZXJ0V29ya2luZ0hvdXJzIHRib2R5IHRkIHsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICBwYWRkaW5nLXRvcDogNXB4Owp9CgoudWktYnV0dG9uLWljb24tb25seSAudWktYnV0dG9uLXRleHQgewogICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgaGVpZ2h0OiAxOHB4ICFpbXBvcnRhbnQ7Cn0KCi51aS1idXR0b24gLnVpLWJ1dHRvbi10ZXh0IHsKICAgIGxpbmUtaGVpZ2h0OiAwICFpbXBvcnRhbnQ7Cn0KCmJ1dHRvbi51aS1idXR0b24taWNvbi1vbmx5IHsKICAgIHdpZHRoOiAyNHB4ICFpbXBvcnRhbnQ7CiAgICB0b3A6IC05cHg7Cn0KCi51aS1hdXRvY29tcGxldGUgLnVpLW1lbnUtaWV0bSB7CiAgICBmb250LWZhbWlseTogIkhlbHZldGljYSBOZXVlIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCi5Ib3Jpem9udGFsU2Nyb2xsIHsKICAgIG92ZXJmbG93LXg6IHNjcm9sbDsKfQoKLyoqCiAqIEBzdWJzZWN0aW9uICBJbmNvbXBsZXRlV29ya2luZ0RheXMgc2VsZWN0CiAqLwojSW5jb21wbGV0ZVdvcmtpbmdEYXlzTGlzdCBvcHRpb25bc2VsZWN0ZWQ9c2VsZWN0ZWRdIHsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwp9CgovKioKICogQHN1YnNlY3Rpb24gIHByb2plY3QgYW5kIGFjdGlvbiBkcm9wZG93bnMKICovCi5Qcm9qZWN0U2VsZWN0aW9uIHsKICAgIHdpZHRoOiAzMDBweDsKfQoKLkFjdGlvblNlbGVjdGlvbiB7CiAgICB3aWR0aDogMzAwcHg7Cn0KCnVsLnVpLWF1dG9jb21wbGV0ZS51aS1tZW51IHsKICAgIG1heC1oZWlnaHQ6IDMwMHB4OwogICAgb3ZlcmZsb3cteTogYXV0bzsKfQoKfSAvKiBlbmQgQG1lZGlhICov
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgVGltZSBBY2NvdW50aW5nIEFkZGl0aW9uYWwgVGFibGUgU2V0dGluZ3MKICovCgpAbWVkaWEgc2NyZWVuLHByb2plY3Rpb24sdHYsaGFuZGhlbGQgewoKLyoqCiAqIEBzdWJzZWN0aW9uICBkYXRhIHRhYmxlIGVsZW1lbnRzIHdpdGhvdXQgaG92ZXIKICovCgouTm9Ib3ZlciB0Ym9keSB0cjpob3ZlciB0ZCB7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIC1tb3otYm94LXNoYWRvdzogbm9uZTsKICAgIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTsKICAgIGJveC1zaGFkb3c6IG5vbmU7Cn0KCi5Ob0hvdmVyIHRyLkV2ZW46aG92ZXIgdGQgewogICAgYmFja2dyb3VuZC1jb2xvcjogI0Y1RjVGNTsKfQoKLk5vSG92ZXIgdHIuR3JhbmRUb3RhbDpob3ZlciB0ZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjQ0ZDRkNGOwp9CgovKioKICogQHN1YnNlY3Rpb24gIHNwZWNpYWwgdGFibGUgaGVpZ2h0CiAqLwoKLkhpZ2hDZWxscyB0Ym9keSB0ZCB7CiAgICBoZWlnaHQ6IDMwcHg7Cn0KCi8qKgogKiBAc3Vic2VjdGlvbiAgZml4ZWQgZGF0YSB0YWJsZSB3aWR0aHMKICovCgouRGF0YVRhYmxlIHRkLkZpeGVkLkRheSB7CiAgICB3aWR0aDogNTBweDsKfQoKLkRhdGFUYWJsZSB0ZC5GaXhlZC5XZWVrZGF5IHsKICAgIHdpZHRoOiA4MHB4Owp9CgovKioKICogQHN1YnNlY3Rpb24gIHRhYmxlIGNvbG91cnMgZm9yIG92ZXJ2aWV3CiAqLwoKLkRhdGFUYWJsZSB0ci5WYWNhdGlvbiB0ZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRUJDQ0NDOwp9CgouRGF0YVRhYmxlIHRyLk5vbldvcmtpbmdEYXkgdGQgewogICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRTBFMDsKfQoKLkRhdGFUYWJsZSB0ci5BY3RpdmUgdGQgewogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMwMDAwMDA7CiAgICBib3JkZXItdG9wOiAxcHggc29saWQgIzAwMDAwMDsKICAgIGNvbG9yOiAjMUExQTFBOwp9CgouRGF0YVRhYmxlIHRyLkFjdGl2ZSB0ZDpmaXJzdC1jaGlsZCB7CiAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICMwMDAwMDA7Cn0KCi5EYXRhVGFibGUgdHIuQWN0aXZlIHRkOmxhc3QtY2hpbGQsCi5EYXRhVGFibGUgdHIuQWN0aXZlIHRkLkxhc3QgewogICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgIzAwMDAwMDsKfQoKLkRhdGFUYWJsZSB0ci5HcmFuZFRvdGFsIHRkIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNDRkNGQ0Y7Cn0KCi8qKgogKiBAc3Vic2VjdGlvbiAgZGF0YSB0YWJsZSB3aXRoIHR3byBoZWFkZXIgcm93cwogKi8KCi5EYXRhVGFibGUgdGhlYWQuVHdvUm93cyB7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lOwp9CgouRGF0YVRhYmxlIHRoZWFkLlR3b1Jvd3MgdHI6Zmlyc3QtY2hpbGQgewogICAgYmFja2dyb3VuZDogI0VFRSB1cmwoIi4uL2ltZy9TbWFsbERhcmtHcmFkaWVudC5wbmciKSByZXBlYXQteDsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IDBweCAwcHg7Cn0KCi5EYXRhVGFibGUgdGhlYWQuVHdvUm93cyB0ciB7CiAgICBiYWNrZ3JvdW5kOiAjRUVFIHVybCgiLi4vaW1nL1NtYWxsRGFya0dyYWRpZW50LnBuZyIpIHJlcGVhdC14OwogICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMHB4IC0xNnB4Owp9CgouRGF0YVRhYmxlIHRoZWFkLlR3b1Jvd3MgdHI6Zmlyc3QtY2hpbGQgdGggewogICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKICAgIHBhZGRpbmctYm90dG9tOiAycHg7Cn0KCi5EYXRhVGFibGUgdGhlYWQuVHdvUm93cyB0cjpsYXN0LWNoaWxkIHRoLAouRGF0YVRhYmxlIHRoZWFkLlR3b1Jvd3MgdHIuTGFzdCB0aCB7CiAgICBib3JkZXItdG9wOiBub25lOwogICAgcGFkZGluZy10b3A6IDNweDsKfQoKdHIuTWFzdGVyQWN0aW9uIHRkLlJvd1NwYW4gewogICAgdmVydGljYWwtYWxpZ246IHRvcDsKfQoKfSAvKiBlbmQgQG1lZGlhICov
iVBORw0KGgoAAAANSUhEUgAAABgAAAANCAYAAACzbK7QAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAOpJREFUeNpi/P//PwMtASMRasRABNAhr1A0MjIKA6nfQPwJn2YmPHKsQJwOxIeAWAGLvDIQHwXiSHJ85gLEx4D4GRSbgYISGYPEkOR3Q/kEfaAGxEuBeBEOV+MC2kC8AYinArE0Ngv4gLgeiPcCsSMFcRoIxIeBuAiIOWAWcAPxWmh4M1Mh4YAMLgHizSCzQRZ8BWJfIO4B4h9UsOAvEM8E4mCQ2bAgAhncB8S2QLyeAsP3A7EzEDcSSr5m0JRBbCo6Bk15JANQGr+Mx4Ib0LhjpSQng1IYK9DQt2g5WQzKfIW3qKB1WQQQYAAqT1loJfuiDwAAAABJRU5ErkJggg==
IyAtLQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE3IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgdmFyOjpwYWNrYWdlc2V0dXA6OlRpbWVBY2NvdW50aW5nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpTeXNDb25maWc7CnVzZSBLZXJuZWw6OlN5c3RlbTo6Q2FjaGVJbnRlcm5hbDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpHcm91cDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYWxpZDsKCnVzZSB2YXJzIHF3KEBJU0EpOwoKPWhlYWQxIE5BTUUKClRpbWVBY2NvdW50aW5nLnBtIC0gY29kZSB0byBleGNlY3V0ZSBkdXJpbmcgcGFja2FnZSBpbnN0YWxsYXRpb24KCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGZ1bmN0aW9ucwoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6Q29uZmlnOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpMb2c7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok1haW47CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OlRpbWU7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkRCOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpYTUw7CiAgICB1c2UgdmFyOjpwYWNrYWdlc2V0dXA6OlRpbWVBY2NvdW50aW5nOwoKICAgIG15ICRDb25maWdPYmplY3QgPSBLZXJuZWw6OkNvbmZpZy0+bmV3KCk7CiAgICBteSAkTG9nT2JqZWN0ICAgID0gS2VybmVsOjpTeXN0ZW06OkxvZy0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgKTsKICAgIG15ICRNYWluT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06Ok1haW4tPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICk7CiAgICBteSAkVGltZU9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpUaW1lLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICApOwogICAgbXkgJERCT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkRCLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICAgICAgTWFpbk9iamVjdCAgID0+ICRNYWluT2JqZWN0LAogICAgKTsKICAgIG15ICRYTUxPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6WE1MLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICAgICAgREJPYmplY3QgICAgID0+ICREQk9iamVjdCwKICAgICAgICBNYWluT2JqZWN0ICAgPT4gJE1haW5PYmplY3QsCiAgICApOwogICAgbXkgJENvZGVPYmplY3QgPSB2YXI6OnBhY2thZ2VzZXR1cDo6VGltZUFjY291bnRpbmctPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICAgICBNYWluT2JqZWN0ICAgPT4gJE1haW5PYmplY3QsCiAgICAgICAgVGltZU9iamVjdCAgID0+ICRUaW1lT2JqZWN0LAogICAgICAgIERCT2JqZWN0ICAgICA9PiAkREJPYmplY3QsCiAgICAgICAgWE1MT2JqZWN0ICAgID0+ICRYTUxPYmplY3QsCiAgICApOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAoCiAgICAgICAgcXcoQ29uZmlnT2JqZWN0IEVuY29kZU9iamVjdCBMb2dPYmplY3QgTWFpbk9iamVjdCBUaW1lT2JqZWN0IERCT2JqZWN0IFhNTE9iamVjdCkKICAgICAgICApCiAgICB7CiAgICAgICAgJFNlbGYtPnskT2JqZWN0fSA9ICRQYXJhbXskT2JqZWN0fSB8fCBkaWUgIkdvdCBubyAkT2JqZWN0ISI7CiAgICB9CgogICAgIyBjcmVhdGUgbmVlZGVkIHN5c2NvbmZpZyBvYmplY3QKICAgICRTZWxmLT57U3lzQ29uZmlnT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpTeXNDb25maWctPm5ldyggJXskU2VsZn0gKTsKCiAgICAjIHJlYnVpbGQgWlpaKiBmaWxlcwogICAgJFNlbGYtPntTeXNDb25maWdPYmplY3R9LT5Xcml0ZURlZmF1bHQoKTsKCiAgICAjIGRlZmluZSB0aGUgWlpaIGZpbGVzCiAgICBteSBAWlpaRmlsZXMgPSAoCiAgICAgICAgJ1paWkFBdXRvLnBtJywKICAgICAgICAnWlpaQXV0by5wbScsCiAgICApOwoKICAgICMgcmVsb2FkIHRoZSBaWlogZmlsZXMgKG1vZF9wZXJsIHdvcmthcm91bmQpCiAgICBmb3IgbXkgJFpaWkZpbGUgKEBaWlpGaWxlcykgewoKICAgICAgICBQUkVGSVg6CiAgICAgICAgZm9yIG15ICRQcmVmaXggKEBJTkMpIHsKICAgICAgICAgICAgbXkgJEZpbGUgPSAkUHJlZml4IC4gJy9LZXJuZWwvQ29uZmlnL0ZpbGVzLycgLiAkWlpaRmlsZTsKICAgICAgICAgICAgbmV4dCBQUkVGSVggaWYgIS1mICRGaWxlOwogICAgICAgICAgICBkbyAkRmlsZTsKICAgICAgICAgICAgbGFzdCBQUkVGSVg7CiAgICAgICAgfQogICAgfQoKICAgICRTZWxmLT57R3JvdXBPYmplY3R9ICAgICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6R3JvdXAtPm5ldyggJXskU2VsZn0gKTsKICAgICRTZWxmLT57VmFsaWRPYmplY3R9ICAgICAgICAgPSBLZXJuZWw6OlN5c3RlbTo6VmFsaWQtPm5ldyggJXskU2VsZn0gKTsKICAgICRTZWxmLT57Q2FjaGVJbnRlcm5hbE9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6Q2FjaGVJbnRlcm5hbC0+bmV3KAogICAgICAgICV7JFNlbGZ9LAogICAgICAgIFR5cGUgPT4gJ0dyb3VwJywKICAgICAgICBUVEwgID0+IDYwICogNjAgKiAzLAogICAgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIENvZGVJbnN0YWxsKCkKCnJ1biB0aGUgY29kZSBpbnN0YWxsIHBhcnQKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVJbnN0YWxsKCk7Cgo9Y3V0CgpzdWIgQ29kZUluc3RhbGwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFkZCB0aGUgZ3JvdXAgdGltZV9hY2NvdW50aW5nCiAgICAkU2VsZi0+X0dyb3VwQWRkKAogICAgICAgIE5hbWUgICAgICAgID0+ICd0aW1lX2FjY291bnRpbmcnLAogICAgICAgIERlc2NyaXB0aW9uID0+ICdHcm91cCBmb3IgYWxsIHRpbWUgYWNjb3VudGluZyB1c2VyLicsCiAgICApOwoKICAgICMgZGVsZXRlIHRoZSBncm91cCBjYWNoZSB0byBhdm9pZCBwZXJtaXNzaW9uIHByb2JsZW1zCiAgICAkU2VsZi0+e0NhY2hlSW50ZXJuYWxPYmplY3R9LT5DbGVhblVwKCBPdGhlclR5cGUgPT4gJ0dyb3VwJyApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDb2RlVW5pbnN0YWxsKCkKCnJ1biB0aGUgY29kZSB1bmluc3RhbGwgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVVuaW5zdGFsbCgpOwoKPWN1dAoKc3ViIENvZGVVbmluc3RhbGwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGRlYWN0aXZhdGUgdGhlIGdyb3VwIHRpbWVfYWNjb3VudGluZwogICAgJFNlbGYtPl9Hcm91cERlYWN0aXZhdGUoCiAgICAgICAgTmFtZSA9PiAndGltZV9hY2NvdW50aW5nJywKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIF9Hcm91cEFkZCgpCgphZGQgYSBncm91cAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X0dyb3VwQWRkKAogICAgICAgIE5hbWUgICAgICAgID0+ICd0aGUtZ3JvdXAtbmFtZScsCiAgICAgICAgRGVzY3JpcHRpb24gPT4gJ1RoZSBncm91cCBkZXNjcmlwdGlvbi4nLAogICAgKTsKCj1jdXQKCnN1YiBfR3JvdXBBZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTmFtZSBEZXNjcmlwdGlvbikpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgdmFsaWQgbGlzdAogICAgbXkgJVZhbGlkTGlzdCA9ICRTZWxmLT57VmFsaWRPYmplY3R9LT5WYWxpZExpc3QoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwogICAgbXkgJVZhbGlkTGlzdFJldmVyc2UgPSByZXZlcnNlICVWYWxpZExpc3Q7CgogICAgIyBnZXQgbGlzdCBvZiBhbGwgZ3JvdXBzCiAgICBteSAlR3JvdXBMaXN0ID0gJFNlbGYtPntHcm91cE9iamVjdH0tPkdyb3VwTGlzdCgpOwoKICAgICMgcmV2ZXJzZSB0aGUgZ3JvdXAgbGlzdCBmb3IgZWFzaWVyIGxvb2t1cAogICAgbXkgJUdyb3VwTGlzdFJldmVyc2UgPSByZXZlcnNlICVHcm91cExpc3Q7CgogICAgIyBjaGVjayBpZiBncm91cCBhbHJlYWR5IGV4aXN0cwogICAgbXkgJEdyb3VwSUQgPSAkR3JvdXBMaXN0UmV2ZXJzZXsgJFBhcmFte05hbWV9IH07CgogICAgIyByZWFjdGl2YXRlIHRoZSBncm91cAogICAgaWYgKCRHcm91cElEKSB7CgogICAgICAgICMgZ2V0IGN1cnJlbnQgZ3JvdXAgZGF0YQogICAgICAgIG15ICVHcm91cERhdGEgPSAkU2VsZi0+e0dyb3VwT2JqZWN0fS0+R3JvdXBHZXQoCiAgICAgICAgICAgIElEICAgICA9PiAkR3JvdXBJRCwKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyByZWFjdGl2YXRlIGdyb3VwCiAgICAgICAgJFNlbGYtPntHcm91cE9iamVjdH0tPkdyb3VwVXBkYXRlKAogICAgICAgICAgICAlR3JvdXBEYXRhLAogICAgICAgICAgICBWYWxpZElEID0+ICRWYWxpZExpc3RSZXZlcnNle3ZhbGlkfSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgICMgYWRkIHRoZSBncm91cAogICAgZWxzZSB7CiAgICAgICAgcmV0dXJuIGlmICEkU2VsZi0+e0dyb3VwT2JqZWN0fS0+R3JvdXBBZGQoCiAgICAgICAgICAgIE5hbWUgICAgPT4gJFBhcmFte05hbWV9LAogICAgICAgICAgICBDb21tZW50ID0+ICRQYXJhbXtEZXNjcmlwdGlvbn0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdFJldmVyc2V7dmFsaWR9LAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGxvb2t1cCB0aGUgbmV3IGdyb3VwIGlkCiAgICBteSAkTmV3R3JvdXBJRCA9ICRTZWxmLT57R3JvdXBPYmplY3R9LT5Hcm91cExvb2t1cCgKICAgICAgICBHcm91cCAgPT4gJFBhcmFte05hbWV9LAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICAjIGFkZCB1c2VyIHJvb3QgdG8gdGhlIGdyb3VwCiAgICAkU2VsZi0+e0dyb3VwT2JqZWN0fS0+R3JvdXBNZW1iZXJBZGQoCiAgICAgICAgR0lEICAgICAgICA9PiAkTmV3R3JvdXBJRCwKICAgICAgICBVSUQgICAgICAgID0+IDEsCiAgICAgICAgUGVybWlzc2lvbiA9PiB7CiAgICAgICAgICAgIHJvICAgICAgICA9PiAxLAogICAgICAgICAgICBtb3ZlX2ludG8gPT4gMSwKICAgICAgICAgICAgY3JlYXRlICAgID0+IDEsCiAgICAgICAgICAgIG93bmVyICAgICA9PiAxLAogICAgICAgICAgICBwcmlvcml0eSAgPT4gMSwKICAgICAgICAgICAgcncgICAgICAgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIF9Hcm91cERlYWN0aXZhdGUoKQoKZGVhY3RpdmF0ZSBhIGdyb3VwCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fR3JvdXBEZWFjdGl2YXRlKAogICAgICAgIE5hbWUgPT4gJ3RoZS1ncm91cC1uYW1lJywKICAgICk7Cgo9Y3V0CgpzdWIgX0dyb3VwRGVhY3RpdmF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17TmFtZX0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIE5hbWUhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGxvb2t1cCBncm91cCBpZAogICAgbXkgJEdyb3VwSUQgPSAkU2VsZi0+e0dyb3VwT2JqZWN0fS0+R3JvdXBMb29rdXAoCiAgICAgICAgR3JvdXAgPT4gJFBhcmFte05hbWV9LAogICAgKTsKCiAgICByZXR1cm4gaWYgISRHcm91cElEOwoKICAgICMgZ2V0IHZhbGlkIGxpc3QKICAgIG15ICVWYWxpZExpc3QgPSAkU2VsZi0+e1ZhbGlkT2JqZWN0fS0+VmFsaWRMaXN0KAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKICAgIG15ICVWYWxpZExpc3RSZXZlcnNlID0gcmV2ZXJzZSAlVmFsaWRMaXN0OwoKICAgICMgZ2V0IGN1cnJlbnQgZ3JvdXAgZGF0YQogICAgbXkgJUdyb3VwRGF0YSA9ICRTZWxmLT57R3JvdXBPYmplY3R9LT5Hcm91cEdldCgKICAgICAgICBJRCAgICAgPT4gJEdyb3VwSUQsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgICMgZGVhY3RpdmF0ZSBncm91cAogICAgJFNlbGYtPntHcm91cE9iamVjdH0tPkdyb3VwVXBkYXRlKAogICAgICAgICVHcm91cERhdGEsCiAgICAgICAgVmFsaWRJRCA9PiAkVmFsaWRMaXN0UmV2ZXJzZXtpbnZhbGlkfSwKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApOwoKICAgIHJldHVybiAxOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=