ITSMCore
3.3.92
OTRS AG
http://otrs.org/
GNU AFFERO GENERAL PUBLIC LICENSE Version 3, November 2007
Build for OTRS::ITSM 4 beta2.
Build for OTRS::ITSM 4 beta1.
The OTRS ITSM Core package.
Das OTRS ITSM Core Paket.
4.0.x
<br/>
<strong>WELCOME</strong>
<br/>
<br/>
You are about to install the OTRS package ITSMCore.<br/>
<br/>
<br/>
<strong>REQUIRED OTRS PACKAGES</strong>
<ul>
<li>GeneralCatalog 3.3.92</li>
</ul>
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>WILLKOMMEN</strong>
<br/>
<br/>
Sie sind im Begriff das OTRS-Paket ITSMCore zu installieren.<br/>
<br/>
<br/>
<strong>BENÖTIGTE OTRS-PAKETE</strong>
<ul>
<li>GeneralCatalog 3.3.92</li>
</ul>
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>BIENVENIDO</strong>
<br/>
<br/>
Usted está apunto de instalar el modulo ITSMCore de OTRS.<br/>
<br/>
<br/>
<strong>PAQUETES REQUERIDOS</strong>
<ul>
<li>GeneralCatalog 3.3.92</li>
</ul>
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>NOTICE</strong>
<br/>
<br/>
In order to grant users access to the service menu, you need to add them as member to the group 'itsm-service'.
<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/>
<strong>HINWEIS</strong>
<br/>
<br/>
Um Benutzern Zugriff auf das Service-Menü zu gewähren, müssen diese Mitglied der neuen Gruppe 'itsm-service' 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/>
<strong>AVISO</strong>
<br/>
<br/>
Para poder permitir el acceso a los usuarios al menu de servicios, usted necesita agregarlos como miembros del grupo 'itsm-service'.<br/>
<br/>
Los elementos del menu que fueron agregados por este packete serán visibles despues de que cierre y abra su sesion de nuevo.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>ATTENTION</strong>
<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 'itsm-service' 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/>
<strong>ACHTUNG</strong>
<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 'itsm-service' wird deaktiviert.
Sie kann jederzeit im Admin-Bereich wieder aktiviert werden.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>ATENCIÓN</strong>
<br/>
<br/>
Si usted desinstala este paquete, todas las tablas de la base de datos creadas durante la instalación serán borradas.
¡Todos los datos de esas tablas serán irrevocablemente perdidos!.
<br/>
<br/>
El grupo 'itsm-service' que fue creado durante la instalación será desactivado.
Usted puede activar este grupo de nuevo en el area de admin.
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>WELCOME</strong>
<br/>
<br/>
You are about to upgrade the OTRS package ITSMCore.<br/>
<br/>
<br/>
<strong>REQUIRED OTRS PACKAGES</strong>
<ul>
<li>GeneralCatalog 3.3.92</li>
</ul>
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>WILLKOMMEN</strong>
<br/>
<br/>
Sie sind im Begriff das OTRS-Paket ITSMCore zu aktualisieren.<br/>
<br/>
<br/>
<strong>BENÖTIGTE OTRS-PAKETE</strong>
<ul>
<li>GeneralCatalog 3.3.92</li>
</ul>
<br/>
<br/>
((enjoy))<br/>
<br/>
<br/>
<strong>BIENVENIDO</strong>
<br/>
<br/>
Usted está apunto de instalar el modulo ITSMCore de OTRS.<br/>
<br/>
<br/>
<strong>PAQUETES REQUERIDOS</strong>
<ul>
<li>GeneralCatalog 3.3.92</li>
</ul>
<br/>
<br/>
((enjoy))<br/>
<br/>
GeneralCatalog
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeInstall();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
# discard internally stored object, so that the next access to object creates them newly
$Kernel::OM->ObjectsDiscard(
Objects => [$CodeModule],
ForcePackageReload => 1,
);
$Kernel::OM->Get($CodeModule)->CodeUpgradeFromLowerThan_3_2_91();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
# discard internally stored object, so that the next access to object creates them newly
$Kernel::OM->ObjectsDiscard(
Objects => [$CodeModule],
ForcePackageReload => 1,
);
$Kernel::OM->Get($CodeModule)->CodeUpgrade();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeUninstall();
# create the package name
my $CodeModule = 'var::packagesetup::' . $Param{Structure}->{Name}->{Content};
$Kernel::OM->Get($CodeModule)->CodeReinstall();
2014-09-18 18:59:57
opms.otrs.com
IyEvdXNyL2Jpbi9wZXJsCiMgLS0KIyBiaW4vb3Rycy5BZGRTZXJ2aWNlLnBsIC0gYWRkIG5ldyBTZXJ2aWNlcwojIENvcHlyaWdodCAoQykgMjAwMS0yMDE0IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IGh0dHBzOi8vZ2l0aHViLmNvbS9PVFJTL290cnMvYmxvYi8wY2QyMmRkMzNjZGQ1MWQ2ZmFjNGM5OTdjMmFlYjY4YThlODk5MTM0L2Jpbi9vdHJzLkFkZFNlcnZpY2UucGwKIyAtLQojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgQUZGRVJPIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKIyBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMKIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSBVU0EKIyBvciBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgRmlsZTo6QmFzZW5hbWU7CnVzZSBGaW5kQmluIHF3KCRSZWFsQmluKTsKdXNlIGxpYiBkaXJuYW1lKCRSZWFsQmluKTsKdXNlIGxpYiBkaXJuYW1lKCRSZWFsQmluKSAuICcvS2VybmVsL2NwYW4tbGliJzsKdXNlIGxpYiBkaXJuYW1lKCRSZWFsQmluKSAuICcvQ3VzdG9tJzsKCnVzZSBHZXRvcHQ6OlN0ZDsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKIyAtLS0KIyBJVFNNCiMgLS0tCnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKIyAtLS0KCm15ICVQYXJhbTsKCiMgY3JlYXRlIGNvbW1vbiBvYmplY3RzCmxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJyA9PiB7CiAgICAgICAgTG9nUHJlZml4ID0+ICdPVFJTLW90cnMuQWRkU2VydmljZScsCiAgICB9LAopOwoKbXkgJE5vT3B0aW9ucyA9ICRBUkdWWzBdID8gMCA6IDE7CgojIGdldCBvcHRpb25zCm15ICVPcHRzOwojIC0tLQojIElUU00KIyAtLS0KI2dldG9wdHMoICdobjpwOmM6JywgXCVPcHRzICk7CmdldG9wdHMoICdobjpwOmM6Qzp0OicsIFwlT3B0cyApOwojIC0tLQoKaWYgKCAkT3B0c3tofSB8fCAkTm9PcHRpb25zICkgewojIC0tLQojIElUU00KIyAtLS0KIyAgICBwcmludCBTVERFUlIgIlVzYWdlOiAkRmluZEJpbjo6U2NyaXB0IC1uIDxOYW1lPiAtcCA8UGFyZW50PiAtYyA8Q29tbWVudD5cbiI7CiAgICBwcmludCBTVERFUlIgIlVzYWdlOiAkRmluZEJpbjo6U2NyaXB0IC1uIDxOYW1lPiAtcCA8UGFyZW50PiAtYyA8Q29tbWVudD4gLUMgPENyaXRpY2FsaXR5PiAtdCA8VHlwZT5cblxuIjsKIyAtLS0KICAgIGV4aXQ7Cn0KCmlmICggISRPcHRze259ICkgewogICAgcHJpbnQgU1RERVJSICJFUlJPUjogTmVlZCAtbiA8TmFtZT5cbiI7CiAgICBleGl0IDE7Cn0KCm15ICRTZXJ2aWNlTmFtZTsKCiMgbG9va3VwIHBhcmVudCBzZXJ2aWNlIGlmIGdpdmVuCmlmICggJE9wdHN7cH0gKSB7CiAgICAkUGFyYW17UGFyZW50SUR9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUxvb2t1cCgKICAgICAgICBOYW1lICAgPT4gJE9wdHN7cH0sCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwogICAgaWYgKCAhJFBhcmFte1BhcmVudElEfSApIHsKICAgICAgICBwcmludCBTVERFUlIgIkVSUk9SOiBDYW4ndCBhZGQgU2VydmljZTogUGFyZW50ICckT3B0c3twfScgZG9lcyBub3QgZXhpc3QhXG4iOwogICAgICAgIGV4aXQgMTsKICAgIH0KICAgICRTZXJ2aWNlTmFtZSA9ICRPcHRze3B9IC4gJzo6JzsKfQoKJFNlcnZpY2VOYW1lIC49ICRPcHRze259OwoKIyBjaGVjayBpZiBzZXJ2aWNlIGFscmVhZHkgZXhpc3RzCm15ICVTZXJ2aWNlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VMaXN0KAogICAgVmFsaWQgID0+IDAsCiAgICBVc2VySUQgPT4gMSwKKTsKbXkgJVJldmVyc2UgPSByZXZlcnNlICVTZXJ2aWNlTGlzdDsKaWYgKCAkUmV2ZXJzZXskU2VydmljZU5hbWV9ICkgewogICAgcHJpbnQgU1RERVJSICJFUlJPUjogQ2FuJ3QgYWRkIFNlcnZpY2U6IFNlcnZpY2UgJyRTZXJ2aWNlTmFtZScgYWxyZWFkeSBleGlzdHMhXG4iOwogICAgZXhpdCAxOwp9CiMgLS0tCiMgSVRTTQojIC0tLQoKIyBnZXQgdGhlIGR5bmFtaWMgZmllbGQgY29uZmlnIGZvciBJVFNNQ3JpdGljYWxpdHkKbXkgJER5bmFtaWNGaWVsZENvbmZpZ0FycmF5UmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgVmFsaWQgICAgICAgPT4gMSwKICAgIE9iamVjdFR5cGUgID0+IFsgJ1RpY2tldCcgXSwKICAgIEZpZWxkRmlsdGVyID0+IHsKICAgICAgICBJVFNNQ3JpdGljYWxpdHkgPT4gMSwKICAgIH0sCik7CgojIGdldCB0aGUgZHluYW1pYyBmaWVsZCB2YWx1ZXMgZm9yIElUU01Dcml0aWNhbGl0eQpteSAlUG9zc2libGVWYWx1ZXM7CkRZTkFNSUNGSUVMRDoKZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyAkRHluYW1pY0ZpZWxkQ29uZmlnQXJyYXlSZWYgfSApIHsKICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAjIGdldCBQb3NzaWJsZVZhbHVlcwogICAgJFBvc3NpYmxlVmFsdWVzeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9ICAkRHluYW1pY0ZpZWxkQ29uZmlnLT57Q29uZmlnfS0+e1Bvc3NpYmxlVmFsdWVzfSB8fCB7fTsKfQoKbXkgJUNyaXRpY2FsaXR5ID0gJXsgJFBvc3NpYmxlVmFsdWVze0lUU01Dcml0aWNhbGl0eX0gfTsKCiRQYXJhbXtDcml0aWNhbGl0eX0gPSAkQ3JpdGljYWxpdHl7ICRPcHRze0N9IHx8ICcnIH07CmlmICggIWRlZmluZWQgJFBhcmFte0NyaXRpY2FsaXR5fSApIHsKICAgIGlmICggISRPcHRze0N9ICkgewogICAgICAgIHByaW50IFNUREVSUiAiRXJyb3I6IENhbid0IGFkZCBTZXJ2aWNlOiBObyBjcml0aWNhbGl0eSBnaXZlbiB2aWEgLUMgb3B0aW9uIVxuIjsKICAgIH0KICAgIGVsc2lmICggIWRlZmluZWQgJFBhcmFte0NyaXRpY2FsaXR5fSApIHsKICAgICAgICBwcmludCBTVERFUlIgIkVycm9yOiBDYW4ndCBhZGQgU2VydmljZTogQ3JpdGljYWxpdHkgJyRPcHRze0N9JyB1bmtub3duIVxuIjsKICAgIH0KICAgIHByaW50ICJcbkF2YWlsYWJsZSBvcHRpb25zIGFyZTpcblxuIjsKICAgIGZvciBteSAkQ3JpdGljYWxpdHkgKCBzb3J0IGtleXMgJUNyaXRpY2FsaXR5ICkgewogICAgICAgIHByaW50ICJcdCckQ3JpdGljYWxpdHknXG4iOwogICAgfQogICAgZXhpdCAxOwp9CgojIGdldCBzZXJ2aWNlIHR5cGUgbGlzdApteSAkU2VydmljZVR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nT2JqZWN0JyktPkl0ZW1MaXN0KAogICAgQ2xhc3MgPT4gJ0lUU006OlNlcnZpY2U6OlR5cGUnLAopOwoKbXkgJVNlcnZpY2VUeXBlID0gcmV2ZXJzZSAleyRTZXJ2aWNlVHlwZUxpc3R9OwokUGFyYW17VHlwZUlEfSA9ICRTZXJ2aWNlVHlwZXsgJE9wdHN7dH0gfHwgJycgfTsKaWYgKCAhZGVmaW5lZCAkUGFyYW17VHlwZUlEfSApIHsKICAgIGlmICggISRPcHRze3R9ICkgewogICAgICAgIHByaW50IFNUREVSUiAiRXJyb3I6IENhbid0IGFkZCBTZXJ2aWNlOiBObyBzZXJ2aWNlIHR5cGUgZ2l2ZW4gdmlhIC10IG9wdGlvbiFcbiI7CiAgICB9CiAgICBlbHNpZiAoICFkZWZpbmVkICRQYXJhbXtUeXBlSUR9ICkgewogICAgICAgIHByaW50IFNUREVSUiAiRXJyb3I6IENhbid0IGFkZCBTZXJ2aWNlOiBTZXJ2aWNlIHR5cGUgJyRPcHRze3R9JyB1bmtub3duIVxuIjsKICAgIH0KICAgIHByaW50ICJcbkF2YWlsYWJsZSBvcHRpb25zIGFyZTpcblxuIjsKICAgIGZvciBteSAkU2VydmljZVR5cGUgKCBzb3J0IGtleXMgJVNlcnZpY2VUeXBlICkgewogICAgICAgIHByaW50ICJcdCckU2VydmljZVR5cGUnXG4iOwogICAgfQogICAgZXhpdCAxOwp9CgojIC0tLQoKIyB1c2VyIGlkIG9mIHRoZSBwZXJzb24gYWRkaW5nIHRoZSByZWNvcmQKJFBhcmFte1VzZXJJRH0gPSAnMSc7CgojIFZhbGlkcmVjb3JkCiRQYXJhbXtWYWxpZElEfSA9ICcxJzsKJFBhcmFte05hbWV9ICAgID0gJE9wdHN7bn0gfHwgJyc7CiRQYXJhbXtDb21tZW50fSA9ICRPcHRze2N9OwoKaWYgKCBteSAkSUQgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlQWRkKCVQYXJhbSkgKSB7CiAgICBwcmludCAiU2VydmljZSAnJFNlcnZpY2VOYW1lJyBhZGRlZC4gSUQgaXMgJyRJRCdcbiI7Cn0KZWxzZSB7CiAgICBwcmludCBTVERFUlIgIkVSUk9SOiBDYW4ndCBhZGQgU2VydmljZVxuIjsKICAgIGV4aXQgMTsKfQoKZXhpdCgwKTsK
H4sIAAAAAAACA+1dXZPaOBZ9z6+gyMtMFVHr05bDdKZ2UjW7WzVT2ZpkXuaFEqCmvTE2ZZvuMA/721eyoRuMjcG2nCYRqWQGuOhK4p6jqyMh/fTzl2UweJBx4kfh7RABOBzIcBbN/XBxO/zz069v+PDnd69+mvvirfq7iMVyoD4RJvrZ7fA+TVdvb24eHx9BsElEGsUg8NcgkTf/E0EgbpTRzfDdq8Fgv4C5SIV+bfuqSNPYn65TOQjFUt4Op2L2eRFH63A+zK22drMoiOLBgwhuh6/vssfwZlvMzUE5J8peiYWcxlJ8ri4aqofnNSl6JeNisctVlPjKJN2sjkwqytH/7tlsrRJlFC7evf4Hep1XafvCc1llFa10ki5FvPDDYz+qb4K8IzDgGGPVGczjHnSpi3Z9crm7ab/ugn7dxf2685PJKorTWPjpsctpFAVShLnXOxEksrmjZCYCFWOn2gUBw4QjBgnjunkuwc393flpGnXUpPzlJwBeCuZF7M9PY/nAoqKUR3+e3k++1HRg8w7Ly98YK//BT/xpIMta4Idp7gC1L37TTfHFbygj9eePt4yIvLTKUWPOJZPs8lFjsfbnMqkJtUObipLut2Y3db1etDu3Y/KXCmN45iIQGxlvi//lefQebL9gNdzEazkciFnqP+ye7fVJNP2vnKXbxn5MRTgX8XzwZvBJfkmHe7nJcODPb4cf4GFvFdunSlP8eNRdq+g5phDg1GMjRIDrIlrsiWMuqXIznRa9xKohIlwEsuAJAZdDb0zUf4mrnlNAOG7oOdXdUhP7BZsqgs9yiAO7Qrrx4dMfHwd08Kv6xuVjFH+uSD5OQLOK66MwLXOsXx/ciaUfbFT9RJgMB0m60TGkEtP8o/+SwYNM/ZnYD/XLa3Av/cV9aR32h20HHjxQO5+HcXlRbDZxd8hZFczl3uk/7RypPGERLmX5VyrD9XI7GJ3ppZSRLgPJQ1alIkyeq0JqsJe/mDPTGVT1i/zbl/Fvfij3CAtuCQu1JSwIMGZo5BDAISMG+QoChBziOKM3EEDmQozI2GWAEhdr715TspzKvydZe5q08tjSxQBqU+YCXGdKAc1McX2pDBDC2Eg1nVKHe6hZW2dRHMp4okMkqY4/eFST0vcucaxydTkpQv44URH6TwsPWdJ5HEfPCSeGlZx5sbOM+6t7ETcrei6S+0CGi1Pt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s/s9hQHlc/r06SlTpuTn5wsh8vLysrOzDx8+7EP8VatW6fV6o9H48ccfHzx40G1rz4sw0PjSSH19fU1NzZ49e4qKijyfFwAEXnd3txAiKoqPXgAAINzQawnoRWZmZn19vfRaWu2SkZFhMBjeeeedc+fOaTQaIcRPfvKTn/zkJ65HHThwQK1WCyEeffRR/+bT17wXL15csWLFqVOnurq6JkyYYDab/TvvlClT9Hr9vn37CgsLKyoq7r///gcffNCHOG+//falS5eUSmVaWtqTTz65du1a161nz571S7bFxcVCiIKCAunBT7L7r//6r88//1zuLBCGLl++fP/99y9YsEDuRDAwUsvwmBg+egGhZDDaR3pzoCxtOgHAZ3y+AXphMBikF27/Tku/OfdFqiv5wGKxeH4Adl/zzps3b/78+eXl5RqN5saNG/7qDOWaz4YNG+bOnTtz5syXX365oqLCL8HvPIjPUwfyQeOTJk16+umnAzYdIkdRUZHf68gIAOm/5DQOB4KTXq+/fv16z3HP7SN9u93emwMHWicaUBvKtra2AQUHgH5RWgIGYO7cuaWlpRs2bGhubj558mRFRcVbb73lW6jY2NjKysonnnjik08+KS4uPn78uA/zGgyG7OzspKSkmpqad99917dMPOczZsyYhx56aNasWZMnTx45cqRvwefPn7958+aXXnqpubn5lVdecdsqNVo6c+bMneTflwFdZ//KzMx87LHHAjYdIgdPUA5R0qolSktAcHJrrymEqKqqmjlzpvhu1aa9vf3pp5/eu3fvyJEj33zzTbdDBvSR5tq1a/Pmzbtw4UJBQcHWrVtVKpWHeW/fvr18+fK9e/fee++977zzzpgxY5w79Lq/VLp6/fXXN23a1NTUtGfPnoKCAuHShlLajYVOAPyFG/4BT7Rarevb0tJSk8mk1WrHjRu3f//+kpISaVz6F7rXdtHOEbdNUkug1NTUsrKy8vJyz/v3Ne/27duXLl2q0WhWr169cOFCZyYe5h1oPkKINWvWHD9+/MUXX/TmivUav6SkpK6uLjU1NS8vb8mSJa55CiFsNpv3n2x6je8ccfvT83kBQCBJq5a4IQ4IFYPdPnLXrl179+69fPmyWq1+/vnn+51Xo9E0NDScOHHigw8+EC5VIdpQAggG3JQLfGvy5MnFxcXTpk2TO5HgsnXr1itXrmzZ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69u3b1dVVY0ZM8Z5lEql2rZtW1NTU1NT065du5w3ykmHWCwWs9lcUVExcuTIfjPvmacUf/fu3Waz+c9//rO05t01zy+//PLs2bNeXple4/d1WXzIH0B4oLQEBIuioqI9e/Y4HI7W1tbt27cbDIampibvD//BD35w9uzZW7du/fnPf1ar1QUFBT7kcOjQIecSbsmxY8f+8Ic/HDp06Pbt2w0NDWvXrn366af/+7//W9r62WefzZgx47PPPpPenjx5csaMGSdPnpTeXrp0ye0zh+vHGs+RpT1Xrlz5q1/9qqurS/oFzHmsN9dq5MiRvf4i99VXXy1atGjLli0Gg8FgMLz66quLFy92Vpc8zyuZPn36gQMHvL6oACKa3W4XlJaAcOe2cgcAIg2lJSBYDBkyJD4+/tatW1FRUenp6QsWLBhQaWn69OnSC41G89JLLznrOwPyl7/8Zdy4ca4jL7300htvvDF+/Pj4+Hi1Wv2jH/1ox44da9askbbec88927dvX7JkSX19vcFgWLJkyfbt24cPH+7NXJ4jS6ZNmzZ16lSFQlFQUGC1Wp3jd3KtVq1a9Zvf/Obee+91nsKLL764atUqb+aVfP/73//rX//q5XQAIpndbpcK1pSWgPDW8yc0AIgoPCEOCBaff/75smXLTp48edddd33ve9+Lj4/funWr6wJpD7q6ujZv3vyHP/zh2rVrCQkJP/zhD337cNPa2pqcnOw6cubMGWcVxikhIcH5+u677/7973+/dOlSh8OxY8cO591w/eo3shCir4bid3Ktjh07tmvXLteRnJwct6VJnhuZp6Sk3Lx505u5AMilq6ursbFRpVINHTpUxjSku+GioqJYywDAZzqdrudPaFqttudNfAAgF0pLQLAYO3bs0aNHXUdmzpx5+PBhb47913/91/T09JMnT6akpFit1qtXrz7wwAM+5JCcnGwymdLS0pwj8fHxX3311T333NPvsX01NuqL95F7upNrJXp7bNyAKnEmkyklJcX7/QEE3u3bt7u6utw6xwUePbwB3DlKSACCHzfEAcGrqqrKyz3ffffdFStWpKWlxcTExMfH+/wr/fe///1z5865jsycOfOPf/yjh0OuXbv25JNPlpeXl5WV/fznP7927ZrnKZzPg+s38oB4f63+8R//8fPPP3cdOX369KOPPur9XNXV1Q8++OAAkgMQ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TU1N7du3b2JiYs1pTz/99AMPPOCtxjowMHDJJZdccsklzNEDAGyoF3olQRCi0Wg2mzVNc35+fnx8vBdGaQEAgBZRLW3G008/LQjCZZdddlrf9cwzz3zrW98yDMO7a1nWc88999xzz7361a/+/d///TUn/+hHP3rooYfqH3F6evo973lPMpnc3AXvvffeQ4cOrTn45S9/uf7uysrKysrKU0899e53vzscDjd6IkeOHBEE4ZWvfGWLS5Zu7lG25Aq//OUvDxw4UNu7p1AoPPXUU7/97W//8A//8JJLLqmd9vDDD99///21u3Nzc3NzcwsLC61kQ+tEUdzhfZS26hE/85nPPPjgg//5n//ZymPt37//1a9+9W233XbmjwsA7UOW5bGxMe+jmqWlpeHhYb8TAQCAdkG1tBle6TA5Odn6t+RyuW9/+9uGYVx44YX79u1LJpPlcvk3v/nN//zP//z85z/fu3fvrl276s9/5JFHrr766le84hW6ri8sLPzgBz9IpVIHDx6sjQY63QsePnx43759F198cSKRqFVCu3fvvuSSS6ampnRdNwxjbm7uJz/5yezs7MGDB9/whjc0ei7z8/OCIKy5fhOtPMqdd97ZZIjQ5nIuLCzcd999ruu+4hWvuOqqq+LxeDabPXjw4GOPPXbgwIHJycmhoSHvtP/6r/8SBOGyyy7bt29fLBbL5XIPPvjgL3/5yxafILpbsVi86667HnzwQe/uhnXVF77whVe/+tW33nprK6PqAKCDBAKBsbGx2dlZb6x0/cddAACgl1EtbUapVBIEQdf1NcdPrUVqRx5++OFqtfp7v/d7b33rW70jgUBg3759sizfd999jz766Jqm5uqrr67Ntpuamrr22mv/5V/+5fjx47UTTveCl1122etf//o18W6++ebabU3T9u7dOzAwcNdddx09erRJZVMsFgVBiEajjU7Ykkc58ys88sgjjuOcc845b3nLW7wjyWTyuuuuKxQKx44de/jhh9/85jcLgvDoo486jvPSl7702muv9U7r7++/9tpri8XiU0891eJzxA7byQFQd9999759+17ykpd4dzd83PPOO+/SSy/9wQ9+8I53vGP70wHAjtI0bXh4eGFhIZ1OK4rS19fndyIAAOA/qqUdcuzYMUEQrrjiijXHL7jggvvuu+/kyZNrjq/ZXm18fFwQhHw+v+kLXnrppaem8obnPPvss9lstjaxThCE1dXVFp5Tq878UTZ3henpaUEQrrrqqjXHr7766mPHjtV6Ou/Gvn371px25ZVXUi1BEIR77rnnhhtuOK1vefvb3/7DH/5w+6ql5557rq+vL5FIbNP1AWwJwzAkSVKUbnutFY1GTdNMpVLLy8uqqrY4tx0AAHSxltbKwRreq6j6osdzZ501X8pkMoIgfOUrX/nkJz/513U+//nPCy+MA6oXj8fr73ob/dq2vekL9vf3rzmyvLz8pS996eGHH15aWqrvawRBsCyrydOPRCLrPv11bfpRzvwKuVxOEITBwcE1x715cLX83mmnjuofGBhoJV5HqFar733ve5PJ5MjIyOc+97na2quO43zqU5/as2dPIpF417veVftrI4riP/3TP+3evVvTtCuvvPJ///d/Nzz/rrvumpyc9OZaHj169G1ve1symezr67v++utXVlZaCWlZ1h133LFr167+/v6///u/9w6ueykvvyiKtSey4SNWq9UPfOADIyMjIyMjH/jAB6rVavOfTL1Dhw5deeWVtbu1cwzDeP/73+9979/93d/Vf8urXvWqRx99tJVnfbqeffbZG2+88YYbbjj1XzSAtmIYxszMzOzsbIv/s+ssiUQiFou5rjs/P1/7jQoAAHoW1dJmjI6OCi8MimmRN4nGcRzHcdw63lfrOyPPhhuvnO4FT92/5sc//nG5XB4fH/+TP/mTj3zkI3fcccedd955++23b/hcTuvpb/pRtvAK+NSnPjU9Pf3kk0/+6le/+u///u/a8X/4h3/46U9/+pOf/OSZZ54xTfOOO+6ofelHP/rRT3/605WVlTe+8Y1/8Rd/seH5P/vZz7wZiIIg3HDDDe9///tnZmZOnDgxPj7+V3/1V62E/Nu//duDBw/+5Cc/efbZZ2dmZryD617K+3te/xd+w0f89Kc//Zvf/ObQoUOHDh164oknPvOZzzT/ydRbWFjw/s6v8ZnPfObo0aNPPPHEoUOH7rvvvvovjY2Nzc3NtfKsWzc9Pf3Hf/zH55133je/+c3bb7+dvZmANifV8TvLthgaGtI0zXGc+fn5U191AACAntJtg7R3xrnnnnvkyJFHHnnkoosuavElY19fXyqVuuWWW7Zqzcszv6A3Eextb3tb/fCHVCq14Teee+65//d///fwww+38vQ3/ShnfoVYLJZOp5eXl6empuqPLy0tCXVrRXmnpVKpiYmJ+tNaHGvTEb7xjW/ce++9Y2NjgiDcddddF1xwgXf8y1/+8ve///09e/YIgvD5z3/+iiuuqA0X+tKXvjQyMiIIwoc//OHPfvazG57/j//4j971BUF4/PHHvRuapn3605+uPVxzX//617/3ve/t3bvXC3lal9rwtH//93+/5557vP/EX/ziF6+77rq//uu/bvKTqddocaV/+7d/++EPf+hNVv3iF7944YUXtvI0N2FmZub222//j//4D8dxLMuamJiIRCI//vGPva/eeeedTf45KIrCXJXuYxjGiRMnPve5z/kdBBtwHKd+fGX3cV03m83atq2qaiwW6+Jn2oT3mQoAAD2OamkzLrroop/+9Kfz8/MHDhzYv39/K+3SOeec89BDDz3wwAPe0tFn7swv6H3GuGYNiNo2WE1cdNFFP/vZzxYWFho9fcMwDhw44G1m1/qjKIpiWVa1WvVm/515zl27dqXT6QceeGBNtfSLX/xCEITdu3d7d3fv3p1Opx988MG3v/3t9ac99NBDGz5Ep5ibm/P6IEEQzjrrrNrx6enp8847r3a3/j+l1ysJghAOh8vl8obn1/+QDx069NGPfvTXv/61N21TluVWQs7MzJx99tlrDrZ4qQ1Pm5ubqz3xs88+e3Z2tnZ83Z9MvdHR0bm5uVOzzc7O1l9zzcOtO9BpE8rl8oc//OFvfetbkiQ5jqMoSrVarR+Wdfjw4S15IHSW48ePe/Uo4Lta/96b1VIoFGItcwAAqJY2Q1GUG2644etf//qhQ4dmZmYuv/zyXbt2xWIxWZYrlcrCwsKTTz655lv27dv3+OOP/+pXvyoWi5dffvnQ0FAkEjEMI51OHz9+/Mknn3zPe95zWhnO/ILDw8Ozs7M/+MEP3vCGN8Tj8Uwm89BDD9VGfzQhy/Lb3vY27+nPzc298pWv3LVrl67rlmWl0+mjR48++uijxWLRq5ZafxRvHNavf/3riy++OBAInHnOK6644vHHHz9y5Mg999zzqle9qq+vb3V19eDBg08//bQsy7UV0C+//PLHHnvsqaeeOnDgwJVXXhmLxXK53EMPPdRNa3iPjY0999xzXiv07LPP1o5PTU3df//9tZZtQ03Or39H8Y53vOOOO+74zne+4/3MWxxYNzk5eezYsZe97GX1Bxtdas0bmA0fcWxs7Nlnn33pS18qCMKxY8e8oUZC459MvUsvvfSBBx44tVoaHx+vXfOZZ56p/9IDDzxw+eWXt/KsN6Rp2je/+c2PfexjH//4x3/84x9blrW6unrgwAFvyTAA8F21Wp2ZmXEcJxKJjI6O9mbBBABAj6Na2qTJycmbb775u9/97sLCwg9/+MNTT4hGo/v376+/e9NNN33rW986cuTIkSNHzjzAmV/wNa95zTe+8Y1jx455m815Lr/88laWH56YmLj55pu/853vzM3N3X333Wu+GggEvF7ptB7lpS996cGDB++///7777/fO+Kthr7pnCMjI2984xsPHDhw+PDh+pEdoiju379/eHi4dtof/MEf/OhHP3r00Ufrr3nppZceOnSoxRE3be7GG2/80Ic+9JWvfEUQhA996EO14+9973vf/e53f/GLX9y7d++RI0c+/elPf/Ob32xynRbPLxaLsVgsEolMT0//5V/+ZYshb7755ltuueWrX/1qf3//Jz/5SW9OXKNLDQwM/Pa3vz3//PNbfMQbb7zx1ltv/ed//mdBEG699dYbb7yx+U+m3pve9KZvf/vbf/qnf7rm+E033fTBD37wa1/7miAIH/jAB+q/9N3vfvemm25q8Ym34qKLLrrnnnuefPLJj33sY/fee+9nP/vZL3zhC1t4fQDYtGAwOD4+Pjs7WywWFxcXa4NeAQBA7+jOpSV3xuTk5C233PLmN7/53HPPjcViiqKoqtrX13f++edfd911t956a+19r2diYuJ973vf6173uomJiVAoJElSKBQaHx9/zWte8773vW8TAc7wgi95yUtuuummyclJRVECgcD4+Pib3/zm+jpsw0e/5ZZb3vSmN51zzjne0w8Gg6Ojo9dcc82tt9768pe//HQf5ZprrrnqqqsSicSaNudMcl522WV/9md/dv7550ciEUmSIpHI+eef/653veuSSy6pP+3KK6985zvfuXv37kAgEAgExsbG3vSmN73uda8TXtibr9Pdfvvtk5OTL3vZy17xile86lWvqq3p7v0Fvv7662Ox2Dvf+c5a4dJIi+d/9atfve2226LR6Gtf+9prrrmmxZAf+chH9u3bd8011+zdu7c2va7RpW677bZ9+/bVPhvf8BFvv/32888//9JLL7300ksvuOCCj3/8481/MvX+6I/+6OGHHz569Oia4x//+MfPOuusCy+88OKLL379619fO37kyJFHH330rW99a4tPvHUXXnihVzAVCoXTWrAMALZVKBQaGRkRRTGfzy8vL/sdBwAA7DSx0Qq1QI975pln/vVf/3VycvLP//zP/c6ylZ544onrrruu0eSvXtbkJ/M3f/M3v/jFL+69995WrnPttddeffXVt91221YHBIC2ls/nFxYWBEFIJpOJRMLvOAAAYOcwIQ5Yh+u6Bw8eFBov7dxxPvjBD370ox+tVqsf+tCHatMVIbT2k6lfNntDLTZQAHqT4zjz8/ORSCQej/udZYtFo1HLslZWVlKplKIosVjM70QAAGCHUC0Bwte+9rVLLrlkfHy8r6/PcZy5ubmf//znx48fDwQCF198sd/ptsbu3bsvu+wywzDe8pa3fOpTn/IxyborvPo4fLJ9fjIAekGhUCiVSqVSSZblaDTqd5wt1t/fb9t2Pp8PhUJ+ZwEAADuHCXHA8+uFryHL8vXXX3/BBRfseBwAQDdbWVnJZDKCIIyOjuq67necrWfbdndsggEAAFpEtQQIJ06cOHz48NzcXC6Xs207Go3u3r37yiuvZH93AMB2WFhYyOfzkiSNj48zwAcAAHQ6qiUAAIAd5bru3NycNy1ucnJy3e0pAQAAOoXkdwAAAIDeIori6OhoMBi0bXtubs5xHL8TAQAAbB7VEgAAwE6TJGlsbExRFMMw5ubmGEUOAAA6F9USAACADxRFGRsbkySpXC4vLS35HWfblctlvyMAAIBtQbUEAADgj2AwODw8LAhCLpfzto3rVktLSzMzM7lczu8gAABg61EtAQAA+EbX9WQyKQjCyspKsVj0O8528Wb8iaLodxAAALD12CEOAADAZwsLC/l8XpKkiYmJYDDod5xtUS44lLKyAAAgAElEQVSXNU3zOwUAANh6jFoCAADw2fDwcCgUchxnbm7Osiy/42wLeiUAALoV1RIAAIDPRFEcGxtTVdWyrPn5eQaVAwCADkK1BAAA4D9ZlkdHR0VRrFQqKysrfscBAABoFdUSAABAWwgGgyMjI4IgZLPZQqHgdxwAAICWUC0BAAC0C13XE4mEIAiLi4uGYfgdZycUCgXbtv1OAQAANk/xOwAAAAB+J5lMVioVWZYVpftfpxWLxYWFBVVVx8fHe+H5AgDQlUTWiQQAAGgrjuNIUk8MLTcMY3Z21rIsWZbHx8eDwaDfiQAAwGmjWgIAAIBvTNOcm5szDMNbyFzTNL8TAQCA00O1BAAAAD/Ztj03N1epVERRHB4ejkajficCAACngWoJAAAAPnNdd3FxMZ/PC4IQj8cHBwf9TgQAAFpFtQQAAIC2kEql0um0IAi6ro+MjIii6HciAACwMaolAAAAtIt8Pr+4uOi6bjAYHBsbY9s4AADaH9USAABAB7Asy7KsUCjkd5BtVyqV5ufnHcdRVXVsbCwQCPidCAAANEO1BAAA0O6q1ers7KwoilNTU7Is+x1n2xmGMTc3Z5qmJEkjIyORSMTvRAAAoCHJ7wAAAADYgKqqsizLsuw4jt9ZdkIgEJicnNQ0zXGcubk5bwEmAADQnhi1BAAA0AEsy5JluddWtl5ZWclkMoIghMPhkZGRXhixBQBAx6FaAgAAQPuqLeytKMrY2FgwGPQ7EQAAeBGqJQAAALS1SqUyPz9vWRZLLwEA0IZYawkAAABtLRQKTU1NhcNhQRBUVfU7DgAAeBFGLQEAAKADuK5brVZDoZDfQQAAwItQLQEAAAAAAGCTmBAHAAAAAACATaJaAgAA6EjVavXEiROFQsHvIAAAoKdRLQEAAHSkQqFQrVaXlpZs2/Y7i8+8ZZj8TgEAQI+iWgIAAOhIiUQiGAzatr20tOR3Fp+lUqmTJ09ms1m/gwAA0IuolgAAADqSKIrDw8OiKBYKhV6eFue6rmmaruuqqup3FgAAehE7xAEAAHSwVCqVTqdlWd61a5csy37H8U2lUgmFQn6nAACgFzFqCQAAoIMlEolAIGDb9vLyst9Z/ESvBACAX6iWAAAAOpgoiiMjI6Io5vP5Xp4WBwAA/EK1BAAA0NmCwWA8HhcEYXl52XEcv+MAAIDeQrUEAADQ8ZLJZCAQsCyrx6fFrWt5eblarfqdAgCArkW1BAAA0PFEURwaGhIEIZfLlUolv+O0kVwul81mT548mU6n2b4GAIDtQLUEAADQDTRN86bFLS0t0aHU6Lre19fnum4qlTpx4gTDlwAA2HIirzwAAAC6g+M409PTlmX19/cPDAz4HaeNFIvFpaUly7JEUYzH48lkUhRFv0MBANAlqJYAAAC6R6FQmJ+fF0VxcnIyGAz6HaeNWJa1tLRULBYFQQiFQsPDw4FAwO9QAAB0A6olAACArjI3N1csFjVNm5iY8DtL28nlct4+eqIo9vf3JxIJhi8BAHCGqJYAAAC6imma09PTruuOjIxEo1G/47Sd+uFLgUBgaGhI0zS/QwEA0MGolgAAALpNKpVKp9OyLO/evVuS2LZlHbXVlwRB0HV9aGhIlmW/QwEA0JGolgAAALqN67rT09Omacbj8cHBQb/jtClv27hMJiMIgiRJyWTS22IPAACcFj7FAgAA6DaiKHqNUj6fdxzH7zhtShTFgYGBiYmJQCDgOM7y8vLs7Kxpmn7nAgCgwzBqCQAAoDtlMplYLMY8rw25rptOpzOZjOu6LO8NAMDpoloCAAAABMMwlpeXS6WSIAiBQGDXrl1+JwIAoDNQLQEAAADPK5VKy8vLsVisv7/f7ywAAHQGqiUAAADgd7yXx0yIAwCgRVRLAAAAAAAA2CR2iAMAAAAAAMAmUS0BAAAALXEcZ3Fx0TRNv4MAANBGqJYAAAB6heM4fkfobJlMJpfLzc3N+R0EAIA2QrUEAADQE3K53PHjx3O5nN9BOpiu65qmJZNJv4MAANBGqJYAAAB6gm3btm1TLZ2JYDA4MTGh67rfQQAAaCPsEAcAANATXNfN5XKxWEwURb+zAACA7kG1BAAAAGwNy7IURfE7BQAAO4oJcQAAAMAWME3z+PHj8/PzhmH4nQUAgJ3DhyoAAADAFiiVSq7rFgqFQqEQi8USiYSqqn6HAgBg2zEhDgAAANga1Wo1lUoVi0VBEERR9AompsgBALob1RIAAACwlSqVSiqVKpVKAgUTAKAHUC0BAAAAW69arabT6UKh4N3VdT2ZTAYCAX9TAQCw5aiWAAAAgO1CwQQA6HpUSwAAAL3IcZx0Ol0ulycnJ/3O0v3K5XI6na6fIhePxymYAADdgWoJAACgFzmOc/z4cdu2h4eHY7GY33F6Qn3BJAhCJBJJJBKhUMjfVAAAnCGqJQAAgB6VTqdTqZSiKLt37xZF0e84vaJcLmcyGW8XOUEQNE3r7++PRCL+pgIAYNPYqAIAAKBHxePxbDZrWdbq6mo8Hvc7Tq/QNE3TNNM0s9ns6upquVx2XZdqCQDQuRi1BAAA0Luy2ezy8rIsy7t375Ykye84Pcc0zUwmEw6HdV33OwsAAJtEtQQAANC7XNednp42TTOZTCYSCb/jAACAzsNnUwAAAL1LFMX+/n5BELLZrOM4fscBAACdh2oJAACgp8VisUAgYNt2JpPxOwvWmp+fn52drVarfgcBAKAhqiUAAICeJopiMpkUGLjUfmzbLhaLpVKJ/fsAAO2MagkAAKDX6boeCAQcx8lms35nwe94y6sPDQ0FAgG/swAA0BDVEgAAAARvDW8GLrUbRVH6+vr8TgEAQDNUSwAAABCi0ai34tLq6qrfWXAaMpmMZVl+pwAA9DSqJQAAAAiCIHhbxWUyGQYudYpisbiysnL8+PH5+flyuex3HABAj6JaAgAAgCAIQjQaVVWVgUsdRJIkTdNc1y0UCjMzM9PT09ls1rZtv3MBAHqL6Lqu3xkAAADQFlZXV5eWlmRZ3rNnD7uSdYpqtbq6uprP573hZqIo6roei8XC4bDf0QAAPYFqCQAAAM9zXff48eOWZQ0ODsbjcb/j4DQ4jpPL5XK5XLVa9Y4oihKLxWKxmKqq/mYDAHQ3qiUAAAD8TjabXV5eVhRl9+7dDFzqRIZheB1TbWZcMBjs6+uLRqOSxGoYAICtR7UEAACA36kNXBoaGmLb+87lum4+n8/lcrXlvSVJisVi0Wg0FAr5mw0A0GWolgAAAPAimUxmZWUlHA6Pj4/7nQVn6tRBTIFAwOuYFEXxNxsAoDtQLQEAAOBFHMcpFou6rjMhrmu4rlssFvP5fLFY9F7/DwwM9Pf3+50LANANqJYAAACAXuE4TqFQyOfzw8PDjFoCAGwJqiUAAAAAAABsEp9UAAAAAPidVCrlum5fX5+qqn5nAQB0AKolAAAAAM9zXTebzTqOEw6HqZYAAK2gWgIAAADwO8PDw6VSKRwO+x0EANAZWGsJAAAAwGmwbVuWZb9TAADaBaOWAAAAAJyG2dlZy7LC4XA0Gg2Hw6Io+p0IAOAnqiUAAAA0YxjG6upqMpmUJMnvLPCfbduGYbium8/n8/m8LMu6rkciETomAOhZTIgDAABAM8ePHzdNc3BwMB6P+50FbcF13WKxWCgUisWi4zjeQUmSIpGIruvhcJgWEgB6CtUSAAAAmslms8ViMZFIaJr2/+3de3Bc5X0/4LO72tWuJN8kHF8pN0NCTLmEQKAEDzWXlDothMu0QDqEW7gMkDRDgOKOZygTQtp0pgkUXEJISFs6bTPFw0zohIBrIIRi7rQGAgEMOAbbsmxZl73v+f1xmv1tZEuW1pJWl+f5Q7P7nve853tkGbQfv+97Gl0LE0sYhtlstre3t7e3t1wuR42xWCyTyUQxU1OTRRIAU59oCQAA2FfZbDaaylQsFquNzc3Nra2tra2t6XS6gbUBMKZESwAAwKgpFAp9fX19fX3ZbLbamEgkoozJcjmAqUe0BAAAjL4wDPv7+6OYqVQqRY2LFy+2shJgihEtAQAAYyjakimax7T//vt7kBzAFCNaAgAAGi9aQJdOp2VPAJOLdc4AAEDjdXZ2btq0qaenp9GFADAyoiUAAKDxkslkIpFoaWlpdCEAjIwFcQAAjEwYhpYsMf6y2WypVGppaUkkEo2uBYD/r6nRBQAAMGnk8/lt27YFQbB48eJG18K0s3Pnzt7e3iAIUqlUS0tLJpPJZDJiJoCGEy0BADBciUQil8uFYZjP55ubmxtdDtNLc3NzsVjM5/OFQqFQKOzcuTMIglQqlfmNpiafbgAawII4AABG4KOPPurp6Zk5c+a8efMaXQvTUblc7u/v7+/vz2azxWKx9lAymYwypnQ6nUqlGlUhwHQjWgIAYASy2eymTZtisdhBBx1kLRKNVSqVsr9RKBRqDyUSiepsJjPsAMaUaAkAgJF5//338/n8fvvtN2fOnEbXAv+nXC7ncrn+/v5cLpfP52s/5sTj8dbW1vnz5zewPIApzGpkAABGZtasWVu3bu3u7hYtMXEkEonW1tbW1tYgCCqVSi6Xi2Yz5XK5SqXiH9QBxo5oCQCAkZkxY0ZnZ2exWOzv729paWl0OTBQPB5vaWmJfjijXedjsdgQ/Xfu3Nnc3JxOp4fuBsAexRtdAAAAk0w8Hp8xY0YQBN3d3Y2uBfYiFoul0+khtlsqlUrbtm3btGmTmU0A9REtAQAwYrNmzQqCoK+vr1QqNboW2CeVSqWtra21tTUeH/TDUalUEjwBDMY23gAA1OODDz7I5XIdHR3t7e2NrgXG1qZNm3K5XDqdjiZANTc3p1KpRhcFMFHYawkAgHrMnDkzl8vt2rVLtMSUVywWwzCM9gWPWuLxeCqVaq5hnyZg2jJrCQCAelQqlXfffbdSqSxatMhm3kx5xWIxl8vlf6NcLtcejcViyWSyNmlKJBKNKhVgnImWAACo09atW7u7u9va2hYsWNDoWmBcFYvFfI3dNx1ramqqTmuKtr0HmKosiAMAoE6zZs3q7u6ONvNuavKLJdNIMplMJpNtbW3R20qlEmVM0cymQqFQKpVKpVJ/f79oCZjy/AYAAECdmpub0+l0Lpfr6emZM2dOo8uBhonH45lMJpPJRG+jpKlQKOTz+WQyOcSJXV1d8Xh8xowZFtABk5doCQCA+kWbeXd3d4uWoGpA0jSErq6uMAxbWlpES8DkJVoCAKB+M2bM6OzsLBaL/f39NvOGEalUKrNnzy4Wi0PMbOrp6env708mk6lUKpVKJZNJj6IDJhrREgAA9YvW8nR3d3d3d4uWYETi8fh+++03dJ/+/v5du3bVtkTbPEUxU/R16DV3AGNNtAQAwD6ZOXNmtJl3uVy2qAdG14wZM5LJZKFQKBaLhUKhUqkUi8VonmC1TywWGxA2pVIpfxmBcSNaAgBgn6TT6XQ6nUqlwjBsdC0w1bS0tNTOByyXy4VCIUqaorCpWCyGYRg11p4Yj8eTyeS8efOam5vHvWpgeon5DQAAAGDyqsZM1clNpVIpOnTggQcOtlwu6h9t4TSOxQJTkGgJAABgSgnDMMqbWltbB+vT1dW1ffv2mTNnzps3bzxrA6YeC+IAAACmlFgsttfpSIlEIp1OD7FcLgzDt99+O5lMNjU1RZuFV1/YyAmoZdYSAAAAAxWLxY0bN+7xUCwWaxrc+JYJNJ5oCQAAgD0olUrF36i+rm7ktEexWCyRSDQ1NaXT6blz545bqUADSZQBAADYg2gWUiaTqW0Mw7BcLheLxXK5HOVNtS/CMCyVSqVSKR6PDzFyZ2dnGIazZs2yiThMAaIlAAAAhqu6Gm6PR6NcqVwux2KxIQbp6ekplUozZswYrEM+n+/r64vH401NTYka+1o9MAZESwAAAIyOYW631N7eXigUksnkYB1yudz27dt3b69mTAMiJ/ETNJC9lgAAGDWVSqWnpyefz3/sYx9rdC3AJJbNZnt6esq/USqVKpXKMM9NJBJz5syZM2fOYB1KpZLtxmEU+esEAMCoCcNw27ZtYRjOnj3bFipA3TKZzB73eIpW29W+qAZP0U5PQRCUy+UhRi6VSu+++24QBIceeuhgffL5fLRdVCSRSAy9dRRMc6IlAABGTSKRmDVrVjKZNCMAGF1D7/EUieKnSqUyxLK4aPbT0FHRzp07d+3aNaAxvpsoctpdMpm0Lo8pIAzDMAwrlUr0tfqi+jX6G5dOpy2IAwAAYBqJPhIPkS51dXX19fVFM6Gij9AjGn/hwoWtra17PJTP53fs2JFMJjs6OgY7vVQqReXFYjGzpdh3fX19YRhmMpnBEs9sNtvV1TUgORr+EtSZM2f61yQAAACmkVgsNvQD7Nrb29vb26tvo4/Z0eK76IN39GIwQ+RBpVKpp6cnnU4PES199NFH2Wy2tqUaM8V+o/q6NoGKXs+cOXOwBCG6i2i+1RC3z6iL4sIhVlaWy+Xe3t7gN7PqonBnmG/L5XJLS8uCBQsGu3pnZ2ehUFi0aFFLS8seO1Qqlf7+/iHqH/ATWPtTl0gkmpubRUsAAAAwqGiZ26is800mk/vtt99Ih6omCMPp3NraOlhy1NPTs3Xr1tbW1oULFw52+qZNm0qlUvDbAVx1wL02dnR0DBbbZbPZXC7X3Nw8WMARBEF3d/cQtza0KFYb7GhfX1+hUMhkMul0eo8dKpVKZ2fngJbaCWvRZLfat7X5TjKZXLRo0WBX37JlS39//7x58warsFQqbd26dbDT92ron43m5uah49R0Or1gwYIBsVFtlrTXAkRLAAAAMB5SqdReH3GwePHi4LfjpAG729S+rh6qdh56RtJepywVi8UoWqpPe3v7YElEf39/V1fX7Nmzh4iW9iVeicfjQ0RLvb29u3bt6ujoGCxaCsNwX4KtoUXfkyFWVsbj8ejbUjsBrXaSWvVQ9MdX2606/mDmz58/dHmJRKKtrW2E9/RbREsAAAAwsdSmCaNl1qxZs2bNGrrP/PnzowSkdpJOdVLMHhtrDZFxpFKptra25ubmIa4+ROq0V0PHK+l0ulKpDJHrxWKxOXPm1LZUg5tqhwFva/+Mhr76ENPEIkNPepr4bOMNAAAAQJ3sNg8AAABAnURLAAAAANTJXksAAIyJQqGwY8eOIAjmzZvX6FoAgLFi1hIAAGNl165dPT09w3xgNgAwGYmWAAAYE6lUqrm5OQzD3t7eRtcCAIwV0RIAAGNlxowZQRD09PQ0uhAAYKyIlgAAGCtRtJTNZovFYqNrAQDGhGgJAICx0tTUlMlkgiCwJg4ApirREgAAYyiauCRaAoCpSrQEAMAYamtri8ViuVzOmjgAmJJESwAAjKFEIhGtibOZNwBMSaIlAADGVltbW2BNHABMUaIlAADGVrQmLp/PWxMHAFOPaAkAgLGVSCTS6XRg4hIATEWiJQAAxlz0nDjbLQHA1CNaAgBgzEXbLVkTBwBTj2gJAIAxV31OnDVxADDFiJYAABgPnhMHAFOSaAkAgPEQbbeUy+WsiQOAqUS0BADAeLAmDgCmJNESAADjxJo4AJh6REsAAIyTKFrK5XKlUqnRtQAAoyMWhmGjawAAYLrYtWtXOp1OpVKNLgQAGB2iJQAAAADqZEEcAAAAAHUSLQEAAABQJ9ESAAAAAHUSLQEAAABQJ9ESAAAAAHUSLQEAAABQJ9ESAAAAAHUSLQEA0ADbtm175513+vv7G10IALBPREsAADRApVIpl8t9fX2NLgQA2CexMAwbXQMAANNOoVAolUqZTCYWizW6FgCgfqIlAAAAAOpkQRwAAAAAdRItAQAAAFAn0RIAAAAAdRItAQAAAFAn0RIAAAAAdRItAQAAAFAn0RIAAI0XhmGjSwAA6tHU6AIAAJjW+vr6tm/f3tzcPG/evEbXAgCMmGgJAIBGisfj+Xy+VCqFYRiLxRpdDgAwMhbEAQDQSOl0Oh6Pl8vlXC7X6FoAgBETLQEA0EixWKy1tTUIgv7+/kbXAgCMmGgJAIAGi6Klvr6+RhcCAIyYaAkAgAZraWmJxWL5fL5YLDa6FgBgZERLAAA0WCKRSKfTgYlLADAJiZYAAGg82y0BwCQlWgIAoPGq0VKlUml0LQDACIiWAABovFQq1dTUFIZhNpttdC0AwAiIlgAAmBDa2toC2y0BwGQjWgIAYEJoaWkJREsAMNmIlgAAmBBaWlpisVipVCoUCo2uBQAYLtESAAATQiwWy2QygYlLADCpiJYAAJgoqs+Ja3QhAMBwiZYAAJgoou2WstlspVJpdC0AwLCIlgAAmChSqVQymQzDMJvNNroWAGBYREsAAEwgnhMHMBG8/vrr11xzzSc+8Ym2trbW1taPf/zjV1999euvvz6gW2wYBuvc2tq6dOnSr33tax999NHuBWSz2W9/+9snnnji7Nmzm5qaOjo6TjrppJUrV77yyiv13VFtMSMqe5iVVE+86KKLdr/6RRddtPvIw9Hb23vAAQfUceJ4ioVh2OgaAADg//T19W3evDmZTB544IGNrgVgmvrWt761cuXKcrk8oD2RSNx+++033nhjtWU4eUc1dhis87x585555pmDDjqo2rJ169bly5dv2LBh6AFHJLp6dO7wyx5+JdGYsVisubn5ww8/nD17dvXQzp07FyxYkM/no/4jqv+666679957o2enTtgAx6wlAAAmkEwmE4vFisVi9Gs0AOPsO9/5zs0331ypVC677LJnn322p6enr69v/fr1l19+eaVSuemmm7773e9WO4e/bYjG3U/ZunXrmjVrDj744C1btvzlX/5lbZ8bb7xxw4YNixYt+sEPfvDBBx/k8/mdO3c+88wzt99++5FHHrnv9zj8skdayfLly3O53IMPPljb+M///M+5XO7UU08daZ3PPPPM3XffXZvlTUxmLQEAMLHs3LkzlUpFGVOjawGYXj744IMlS5YUCoX777//kksuGXD0Bz/4waWXXppKpd5+++3FixfvfnrtzKBhHn366ac/+9nPfuxjH9uyZUu1saOjo6ur65lnnjnhhBP28Y6GU9sQh4ZfSTTIgw8+eOGFF37qU5964YUXqoc+9alPvfTSS//yL/9ywQUXDHah3RUKhWOOOaZYLL766quZTGb4J44/s5YAAJhYZs+e3dLSIlcCGH+rV68uFArnnXfe7rlSEASXXHLJueeeWygUVq9ePVpXPOqoo4Ig6O7urm2Mdtw79NBD93r6HjchGsWdiYZfSeScc85pb29/8cUXX3755ajlpZdeeumll9rb27/whS+M6NK33377a6+9ds8996TT6RGdOP5ESwAAAEAQBMHPfvazIAiuuOKKwTpEhx577LHRuuKLL74YBMGAOVDHHHNMEASXXXbZr371q9G6UH1GWklzc3O0jff3v//9qCV68cUvfrG5uXn4133ttde++c1vfvGLX6xjGd34syAOAAAACIIgaG9v37Fjx/bt29vb2/fYobOzc+7cuR0dHZ2dnbsfHdGCuM7OzqeeeuprX/vaxo0bV61adeutt1Z7PvXUU2eccUYulwuC4OCDDz766KOPOOKIZcuWnXLKKYlEYq9XHH7jXg/VUckrr7xy9NFHz5kzZ/PmzUEQLFiwYOfOna+88sqRRx459PenqlKpfPazn/3lL3/5xhtvzJ07d+gKJwLREgAAABAEQZBMJkulUrFYbGpq2mOHYrGYSqWampqKxeLuR4cTLe3uggsueOCBB5LJZG3jG2+8cfvtt69Zs6anp6fauHjx4r/7u78799xzh3k7w6xt6LKHWUntIMcdd9zzzz//4IMPhmF40UUXHXfccevXr9/rharuvPPO66+//r777rvsssuGU2HDiZYAAACAIBiXWUsDLF68+OGHH47Wne2uXC7/7//+74YNG9avX//II4+89dZbsVjsoYceOuuss4Z7S8OobTjBzV4rqR1k9erVV1999amnnhqG4dq1a1evXn3llVcO80Lvv//+0qVLjznmmCeeeKL6HRMtAQAAAJPA8ccf/9xzzz366KOnn376Hjs8+uijn/vc544//vhnn31296PDXxBXLBbffffdb3zjGz/60Y/mzp37P//zP/PmzRu6tkqlsnLlyjvuuGPA89eGaR+jpb1WUjtId3f3woULs9lsEASZTObDDz+cOXPmMC+0YsWKxx577OWXXz788MPrrnCc2cYbAAAACIIgOO2004Ig+N73vjdYh+hQ1G1fJJPJww477Ic//OHnPve5bdu2rVy5cq+nxOPxm266KQiCDRs27OPV99FeK5k1a9Z5550XhmEYhueff36UKw3TI488UigUPvnJT8ZqRIdG8cl3o0u0BAAAAARBEFx11VXJZPLf//3f//Ef/3H3oz/60Y9+/OMfp1Kpq666alQuF4vFvvvd7zY1NT3wwANvvvnmXvtHj2lra2sblavvi71WUt0mqfpiChMtAQAwEVUqla6urg8//LDRhQBMI7/zO7/zzW9+MwiCiy+++Mtf/vJzzz3X39+fzWaff/75K6+88ktf+lIQBHfcccf+++8/Wlc87LDDLr300lKpVDtxaenSpStXrvzpT3/6wQcf5PP5XC737rvv3n333dHGRmeeeWa15x4n8ozi7J7hVzLAsmXLollLJ5988oiuGO5J7aF9uZ0xYq8lAAAmojAM33nnnUqlsv/++6fT6UaXAzCNfOMb31i1alWlUhnQHo/Hb7vttltuuWWwE4e/11KtzZs3L1myJJfLrV+//tOf/nQw+LPkgiA4/PDD165dO3/+/CHGHH7jMA/VXcnwLzS0Cb7XkmgJAIAJaseOHfF4vK2tLZFINLoWgOllw4YNd9111+OPP/7rX/86DMPFixcvX778uuuuW7p06RBn1RctBUFw8803f+tb3zrttNN+9rOfBUHw2muvrVmz5sknn9ywYcPWrVvDMOzo6Fi6dOnZZ599+eWX11Jm0CwAAAsoSURBVP57w1hHS/tYyfAvNDTREgAAAABTk72WAAAAAKiTaAkAAACAOomWAAAAAKiTaAkAAACAOomWAAAAAKiTaAkAAACAOomWAAAAAKiTaAkAgAktDMOenp5t27Y1uhAAYA9ESwAATHRbt27duXNnPp9vdCEAU18sFou+DiYIgkqlcv/995988snz5s1LpVIHHnjgl770paeffro6wooVK/Y4+IoVK6IRqn76059+/vOfnzt3bjKZnD9//rnnnvvYY4+N8S0yykRLAABMaLFYLJ1OB0GQzWYbXQvAdBHW2P3tdddd9+Mf//hv/uZv3nrrrd7e3kcfffT444//8z//8+rpr7zyyssvvzxgzJdffvmVV16pbVm1atUtt9xy1VVXvfnmm7t27XrooYfK5fLpp58+9vfHaIpFPxYAADBh7dixo7Ozs7W1deHChY2uBWCKi8UGBgW7t7S1tb333nsdHR2DjfD3f//369at+7d/+7fa9vPPP3/58uXXXHNNNNqjjz564403PvPMM5lMprbbX/3VX61atWp0boZxYdYSAAATXfSpI5vN+mdRgIlg4cKFv/jFL4bocPnll7/wwgu//OUvqy1vvPHGiy++ePnll1db7rzzzlWrVg3IlYIgqOZK//AP/7BkyZJUKrVkyZLvfe971Q6xWOzBBx/8zGc+09bWlkgkosaHH374mGOOaW5uPvDAA7///e/v4w0yImYtAQAwCbz99tuVSmX//fePFscBMEaGM2vp8ccfv+iii5YsWbJs2bLDDz982bJlBxxwwID+999//5NPPvnDH/4warz44otPOeWUSy65pDra3LlzX3vttblz5+6xjIceeuj6669/4IEHjjvuuOeee+7iiy++++67/+iP/iga/7DDDrvnnntOOOGElpaWIAiefvrpz3/+83ffffeKFSveeOONCy644K677jrzzDNH8/vC4ERLAABMAps3b+7r6+vo6Ghvb290LQBT2XCipSAI+vv7161b9+yzz27YsOG//uu/Pv3pTz/wwAPz58+v9i+Xy0ceeeRPfvKTAw88cOPGjStWrHj11VcTiUR1tGQymc1mm5qa9ljGSSed9PWvf/3ss8+O3j700EN/+7d/+/Of/zwa/8knnzz55JOrnU8//fQrr7zyvPPOi94+++yz11577XPPPTc63xH2RrQEAMAksHPnzm3btrW0tCxatKjRtQBMZcOMlmrlcrmvfOUrW7ZsWbNmTW3/Bx988Oc///ndd9999dVXL1u27IILLqg9Onfu3Ndff32//fbb45jt7e1vv/32nDlzorc7duw45JBDurq6ohGy2WztJNa5c+d2dnbWnp5IJEql0sjvnnrYawkAgEkgWvJguyWACSidTt9xxx1r164d0P6nf/qn69evf+GFF55//vk/+ZM/GXD0M5/5zJNPPln3FWvf9vb29vT01D7GTq40nkRLAABMAqlUKpFIhGGYzWYbXQvAdHf99deXy+Xals2bN8+YMWNAt3g8fsstt5xxxhm33HJLPD4wf7j22mtvu+223f+rfttttwVBcPjhh9cGT0888cQnP/nJweo59thjX3jhhTpuhFEhWgIAYHKoTlxqdCEA092dd9553HHHrVmzpru7e9euXWvXrr3wwguvu+663Xuec84527dv/8IXvrD7oT/4gz/4wz/8w5NPPvknP/lJd3d3Lpf77//+77PPPjt6QtwNN9xw/fXXr1u3rre3d926dV/5ylduuummweq59dZbb7jhhieffLK3t7evr+/xxx9fsWLFKN4vQ7PXEgAAk8OuXbu2bNmSTqf333//RtcCMGUNZ6+lX/ziF/fdd9/atWt//etfZzKZI4444oorrrjkkksG6z/EaP/5n/955513rl+/vru7u6Oj46STTrrmmmtOPfXUIAhWr1797W9/+7333jvggANuuummK664Yojxn3jiiVtvvXX9+vWVSuWEE05YuXJlNAjjQLQEAMDkUCwWN27cGIvFDj744N0XVgAADeF/yQAATA7JZDKZTNpuCQAmFNESAACTRrTdUn9/f6MLAQD+j2gJAIBJI5PJBHbyBoCJRLQEAMCkEUVL+Xx+wEOvAYBGES0BADBpNDU1pVKpwMQlAJgwREsAAEwm0XZLoiUAmCBESwAATCbRmjg7eQPABCFaAgBgMslkMvF4vKmpKQzDRtcCMMW99957H3zwQfS6t7d348aN0et8Pr99+/Zqt+7u7gGTSWs7b9++/f333x8wcnWEfD6/adOmTZs29fT0jMk9MPZi/pcMAMDkEoZhLBZrdBUAU9zDDz/86quvdnV1HXTQQeedd95Xv/rVo446qrm5+Y//+I//+q//etu2bWvWrAmCoKen55RTTvmLv/iL8847Lzrxww8/rHY+8cQT77333kMPPXTWrFnXXntt1OGtt96qjrBu3brvfOc7xx577PLly3/v936vYXfLPhAtAQAAAHu2a9euq6+++sQTT1y6dOnv//7vn3POOf/xH/8RBMHZZ58dRUurVq1qb29fvHhxNVq66667qp0/8YlPXHjhhUccccRpp5322GOP1Y4cjbBu3bp//dd/Peuss84444x43MqqSckfGwAAALAHYRjeeOONX//617dt2zZ37tzdO6xbt+7jH//4fvvtFwTBO++88/zzz2ez2drOJ5988j333HPffff96le/qnaoHeGwww47//zzN2/e/NWvfnUc7oix0NToAgAAAICJ6IYbbjj//POPPvro9evXb968+YgjjhiwHnnt2rVdXV1vvvlmIpGYNWvWli1bDjnkkEWLFlU7n3nmmYcddlgulzv22GM3b968cePGQw45JHogQ2ThwoULFy4MguCss84a79tjlFgQBwAAAAx077333nPPPSeddNKhhx76Z3/2Z1ddddWCBQuOOuqos88+e9WqVY888siXv/zlm2++OQiCf/qnf0qn09UFcV1dXdXOy5Ytu++++zZv3nz55ZcvW7as2qE6wu/+7u8+9dRTmzdvPuWUUy699NKG3S37QLQEAAAA7EUYhrlcrnbC0TA79/T0tLa2DrGPUnd3d0tLSzKZHLVaGV+iJQAAAADqZBtvAAAAAOokWgIAYLIql8ulUqnRVQDAtCZaAgBgUurq6nrnnXe6uroaXQgATGuiJQAAJqVUKhUEgVlLANBYtvEGAGBSCsOwUqkkEolGFwIA05poCQAAAIA6WRAHAAAAQJ1ESwAAAADUSbQEAAAAQJ1ESwAAAADUSbQEAAAAQJ1ESwAAAADUSbQEAAAAQJ1ESwAATG5bt2595513stlsowsBgOlItAQAwORWLpfL5bJoCQAaQrQEAMDklslkgiAQLQFAQ4iWAACY3KJoKZfLhWHY6FoAYNoRLQEAMLk1NzfH4/FKpZLP5xtdCwBMO6IlAAAmPWviAKBRREsAAEx6oiUAaBTREgAAk146nQ6CIJfLNboQAJh2REsAAEx66XQ6FouVy+VCodDoWgBgehEtAQAw6cVisWjikjVxADDOREsAAEwFtlsCgIYQLQEAMBWIlgCgIURLAABMBdF2S6VSqVQqNboWAJhGREsAAEwF8Xi8ubk5MHEJAMaXaAkAgCnCmjgAGH+iJQAApggPiQOA8SdaAgBgiohmLRUKhXK53OhaAGC6EC0BADBFJBKJVCoVmLgEAONItAQAwNRhuyUAGGeiJQAApo4oWsrlco0uBACmi6ZGFwAAAKMmk8nMmDEjCpgAgHEQC8Ow0TUAAAAAMClZEAcAAABAnURLAAAAANRJtAQAAABAnURLAAAAANRJtAQAAABAnf4fsET7pqelch8AAAAASUVORK5CYII=
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIxLjAiIGluaXQ9IkNvbmZpZyI+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJQcm9kdWN0TmFtZSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIiBDb25maWdMZXZlbD0iMjAwIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5EZWZpbmVzIHRoZSBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiwgc2hvd24gaW4gdGhlIHdlYiBpbnRlcmZhY2UsIHRhYnMgYW5kIHRpdGxlIGJhciBvZiB0aGUgd2ViIGJyb3dzZXIuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxTdHJpbmcgUmVnZXg9IiI+T1RSUzo6SVRTTSA0IEJldGEgMjwvU3RyaW5nPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlZpZXdNb2RlIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRldGVybWluZXMgdGhlIHdheSB0aGUgbGlua2VkIG9iamVjdHMgYXJlIGRpc3BsYXllZCBpbiBlYWNoIHpvb20gbWFzay48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSJDb21wbGV4Ij4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU2ltcGxlIj5TaW1wbGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkNvbXBsZXgiPkNvbXBsZXg8L0l0ZW0+CiAgICAgICAgICAgIDwvT3B0aW9uPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IlBhY2thZ2U6OlJlcG9zaXRvcnlMaXN0IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiIENvbmZpZ0xldmVsPSIyMDAiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkRlZmluZXMgdGhlIGxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcy4gQW5vdGhlciBpbnN0YWxsYXRpb25zIGNhbiBiZSB1c2VkIGFzIHJlcG9zaXRvcnksIGZvciBleGFtcGxlOiBLZXk9Imh0dHA6Ly9leGFtcGxlLmNvbS9vdHJzL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeTtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6UGFja2FnZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJodHRwOi8vZnRwLm90cnMub3JnL3B1Yi9vdHJzL2l0c20vcGFja2FnZXM0LyI+Wy0tT1RSUzo6SVRTTSA0IE1hc3Rlci0tXSBodHRwOi8vZnRwLm90cnMub3JnLzwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KPC9vdHJzX2NvbmZpZz4K
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIxLjAiIGluaXQ9IkNvbmZpZyI+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWRtaW5JVFNNQ0lQQWxsb2NhdGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDb3JlPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXA+YWRtaW48L0dyb3VwPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TWFuYWdlIHByaW9yaXR5IG1hdHJpeC48L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPFRpdGxlPkNyaXRpY2FsaXR5ICZsdDstJmd0OyBJbXBhY3QgJmx0Oy0mZ3Q7IFByaW9yaXR5PC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPkFkbWluPC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPE5hdkJhck1vZHVsZT4KICAgICAgICAgICAgICAgICAgICA8TW9kdWxlPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpOYXZCYXJNb2R1bGVBZG1pbjwvTW9kdWxlPgogICAgICAgICAgICAgICAgICAgIDxOYW1lIFRyYW5zbGF0YWJsZT0iMSI+Q3JpdGljYWxpdHkgJmx0Oy0mZ3Q7IEltcGFjdCAmbHQ7LSZndDsgUHJpb3JpdHk8L05hbWU+CiAgICAgICAgICAgICAgICAgICAgPEJsb2NrPlN5c3RlbTwvQmxvY2s+CiAgICAgICAgICAgICAgICAgICAgPFByaW8+NDMwPC9QcmlvPgogICAgICAgICAgICAgICAgPC9OYXZCYXJNb2R1bGU+CiAgICAgICAgICAgICAgICA8TG9hZGVyPgogICAgICAgICAgICAgICAgICAgIDxDU1M+SVRTTS5UYWJsZS5jc3M8L0NTUz4KICAgICAgICAgICAgICAgIDwvTG9hZGVyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU006OkNvcmU6OkluY2lkZW50TGlua1R5cGVEaXJlY3Rpb24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+U2V0IHRoZSB0eXBlIGFuZCBkaXJlY3Rpb24gb2YgbGlua3MgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBUaGUga2V5IGlzIHRoZSBuYW1lIG9mIHRoZSBsaW5rIHR5cGUgKGFzIGRlZmluZWQgaW4gTGlua09iamVjdDo6VHlwZSksIGFuZCB0aGUgdmFsdWUgaXMgdGhlIGRpcmVjdGlvbiBvZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSB0aGF0IHNob3VsZCBiZSBmb2xsb3dlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBGb3IgZXhhbXBsZSBpZiB0aGUgSW5jaWRlbnRMaW5rVHlwZSBpcyBzZXQgdG8gJ0RlcGVuZHNPbicsIGFuZCB0aGUgRGlyZWN0aW9uIGlzICdTb3VyY2UnLCBvbmx5ICdEZXBlbmRzIG9uJyBsaW5rcyB3aWxsIGJlIGZvbGxvd2VkIChhbmQgbm90IHRoZSBvcHBvc2l0ZSBsaW5rICdSZXF1aXJlZCBmb3InKSB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLiBZb3UgY2FuIGFkZCBtb3JlIGxpbmsgdHlwZXMgYWQgZGlyZWN0aW9ucyBhcyB5b3UgbGlrZSwgZS5nLiAnSW5jbHVkZXMnIHdpdGggdGhlIGRpcmVjdGlvbiAnVGFyZ2V0Jy4gQWxsIGxpbmsgdHlwZXMgZGVmaW5lZCBpbiB0aGUgc3lzY29uZmlnIG9wdGlvbnMgTGlua09iamVjdDo6VHlwZSBhcmUgcG9zc2libGUgYW5kIHRoZSBkaXJlY3Rpb24gY2FuIGJlICdTb3VyY2UnLCAnVGFyZ2V0Jywgb3IgJ0JvdGgnLiBJTVBPUlRBTlQ6IEFGVEVSIFlPVSBNQUtFIENIQU5HRVMgVE8gVEhJUyBTWVNDT05GSUcgT1BUSU9OIFlPVSBORUVEIFRPIFJVTiBUSEUgU0NSSVBUIGJpbi9vdHJzLklUU01Db25maWdJdGVtSW5jaWRlbnRTdGF0ZVJlY2FsY3VsYXRlLnBsIFNPIFRIQVQgQUxMIElOQ0lERU5UIFNUQVRFUyBXSUxMIEJFIFJFQ0FMQ1VMQVRFRCBCQVNFRCBPTiBUSEUgTkVXIFNFVFRJTkdTITwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29yZTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OklUU01Db3JlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlcGVuZHNPbiI+Qm90aDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlR5cGUjIyNBbHRlcm5hdGl2ZVRvIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgJ0FsdGVybmF0aXZlVG8nLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTb3VyY2VOYW1lIj5BbHRlcm5hdGl2ZSB0bzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0TmFtZSI+QWx0ZXJuYXRpdmUgdG88L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpUeXBlIyMjQ29ubmVjdGVkVG8iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSAnQ29ubmVjdGVkVG8nLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJTb3VyY2VOYW1lIj5Db25uZWN0ZWQgdG88L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldE5hbWUiPkNvbm5lY3RlZCB0bzwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlR5cGUjIyNEZXBlbmRzT24iIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSAnRGVwZW5kc09uJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlTmFtZSI+RGVwZW5kcyBvbjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0TmFtZSI+UmVxdWlyZWQgZm9yPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6VHlwZSMjI0luY2x1ZGVzIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgJ0luY2x1ZGVzJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlTmFtZSI+SW5jbHVkZXM8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldE5hbWUiPlBhcnQgb2Y8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpUeXBlIyMjUmVsZXZhbnRUbyIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlICdSZWxldmFudFRvJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iU291cmNlTmFtZSI+UmVsZXZhbnQgdG88L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlRhcmdldE5hbWUiPlJlbGV2YW50IHRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzIwMCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Db25maWdJdGVtJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0cyB1c2luZyB0aGUgJ0FsdGVybmF0aXZlVG8nIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+QWx0ZXJuYXRpdmVUbzwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyMDEiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdHMgdXNpbmcgdGhlICdDb25uZWN0ZWRUbycgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+SVRTTUNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5Db25uZWN0ZWRUbzwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyMDIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdHMgdXNpbmcgdGhlICdEZXBlbmRzT24nIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+RGVwZW5kc09uPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzIwMyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Db25maWdJdGVtJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0cyB1c2luZyB0aGUgJ0luY2x1ZGVzJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+SVRTTUNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPkluY2x1ZGVzPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzIwNCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Db25maWdJdGVtJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0cyB1c2luZyB0aGUgJ1JlbGV2YW50VG8nIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+UmVsZXZhbnRUbzwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyMjAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnVGlja2V0JyBvYmplY3RzIHVzaW5nIHRoZSAnQWx0ZXJuYXRpdmVUbycgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+SVRTTUNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPlRpY2tldDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+QWx0ZXJuYXRpdmVUbzwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyMjEiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnVGlja2V0JyBvYmplY3RzIHVzaW5nIHRoZSAnRGVwZW5kc09uJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+VGlja2V0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5EZXBlbmRzT248L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzMjIyIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ1RpY2tldCcgb2JqZWN0cyB1c2luZyB0aGUgJ1JlbGV2YW50VG8nIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5UaWNrZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPlJlbGV2YW50VG88L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzMjQwIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTUNvbmZpZ0l0ZW0nIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ1NlcnZpY2UnIG9iamVjdHMgdXNpbmcgdGhlICdBbHRlcm5hdGl2ZVRvJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+U2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+QWx0ZXJuYXRpdmVUbzwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyNDEiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnU2VydmljZScgb2JqZWN0cyB1c2luZyB0aGUgJ0RlcGVuZHNPbicgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+SVRTTUNvbmZpZ0l0ZW08L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPlNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPkRlcGVuZHNPbjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyNDIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnU2VydmljZScgb2JqZWN0cyB1c2luZyB0aGUgJ1JlbGV2YW50VG8nIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5TZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5SZWxldmFudFRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzI2MCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Db25maWdJdGVtJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoICdGQVEnIG9iamVjdHMgdXNpbmcgdGhlICdOb3JtYWwnIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5GQVE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPk5vcm1hbDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzMyNjEiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNQ29uZmlnSXRlbScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnRkFRJyBvYmplY3RzIHVzaW5nIHRoZSAnUGFyZW50Q2hpbGQnIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPklUU01Db25maWdJdGVtPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5GQVE8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPlBhcmVudENoaWxkPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzI2MiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Db25maWdJdGVtJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoICdGQVEnIG9iamVjdHMgdXNpbmcgdGhlICdSZWxldmFudFRvJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+RkFRPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5SZWxldmFudFRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzI4MCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ1NlcnZpY2UnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ0ZBUScgb2JqZWN0cyB1c2luZyB0aGUgJ05vcm1hbCcgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+U2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+RkFRPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5Ob3JtYWw8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzMjgxIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnU2VydmljZScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnRkFRJyBvYmplY3RzIHVzaW5nIHRoZSAnUGFyZW50Q2hpbGQnIGxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDEiPlNlcnZpY2U8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik9iamVjdDIiPkZBUTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+UGFyZW50Q2hpbGQ8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzMjgyIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnU2VydmljZScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnRkFRJyBvYmplY3RzIHVzaW5nIHRoZSAnUmVsZXZhbnRUbycgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+U2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+RkFRPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5SZWxldmFudFRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgoKICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3Q6OlBvc3NpYmxlTGluayMjIzM0MDAiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+VGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhICdJVFNNV29ya09yZGVyJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoICdTZXJ2aWNlJyBvYmplY3RzIHVzaW5nIHRoZSAnTm9ybWFsJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNV29ya09yZGVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5TZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5Ob3JtYWw8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzNDAxIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTVdvcmtPcmRlcicgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnU2VydmljZScgb2JqZWN0cyB1c2luZyB0aGUgJ0RlcGVuZHNPbicgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+SVRTTVdvcmtPcmRlcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+U2VydmljZTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+RGVwZW5kc09uPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzQxMCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Xb3JrT3JkZXInIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ0lUU01Db25maWdJdGVtJyBvYmplY3RzIHVzaW5nIHRoZSAnTm9ybWFsJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNV29ya09yZGVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+Tm9ybWFsPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzQxMSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Xb3JrT3JkZXInIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ0lUU01Db25maWdJdGVtJyBvYmplY3RzIHVzaW5nIHRoZSAnRGVwZW5kc09uJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNV29ya09yZGVyPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5JVFNNQ29uZmlnSXRlbTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVHlwZSI+RGVwZW5kc09uPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDo6UG9zc2libGVMaW5rIyMjMzQxMiIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5UaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgJ0lUU01Xb3JrT3JkZXInIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggJ1RpY2tldCcgb2JqZWN0cyB1c2luZyB0aGUgJ05vcm1hbCcgbGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3Q8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MSI+SVRTTVdvcmtPcmRlcjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iT2JqZWN0MiI+VGlja2V0PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUeXBlIj5Ob3JtYWw8L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0OjpQb3NzaWJsZUxpbmsjIyMzNDIwIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlRoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSAnSVRTTUNoYW5nZScgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCAnVGlja2V0JyBvYmplY3RzIHVzaW5nIHRoZSAnTm9ybWFsJyBsaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QxIj5JVFNNQ2hhbmdlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJPYmplY3QyIj5UaWNrZXQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlR5cGUiPk5vcm1hbDwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU006OkZyb250ZW5kOjpUZXh0QXJlYSIgUmVxdWlyZWQ9IjEiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5XaWR0aCBvZiBJVFNNIHRleHRhcmVhcy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvcmU8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSJeWzAtOV17MSwzfSQiPjc4PC9TdHJpbmc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iR2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlcyMjI0luY2lkZW50U3RhdGVzIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPlBhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5HZW5lcmFsQ2F0YWxvZzwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkdlbmVyYWxDYXRhbG9nOjpQcmVmZXJlbmNlczwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpHZW5lcmFsQ2F0YWxvZ1ByZWZlcmVuY2VzR2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQ2xhc3MiPklUU006OkNvcmU6OkluY2lkZW50U3RhdGU8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxhYmVsIj5JbmNpZGVudCBTdGF0ZSBUeXBlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjIj5JbmNpZGVudCBTdGF0ZSBUeXBlLjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iRGF0YSI+CiAgICAgICAgICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0id2FybmluZyI+V2FybmluZzwvSXRlbT4KICAgICAgICAgICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJvcGVyYXRpb25hbCI+T3BlcmF0aW9uYWw8L0l0ZW0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaW5jaWRlbnQiPkluY2lkZW50PC9JdGVtPgogICAgICAgICAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICAgICAgICAgIDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUHJlZktleSI+RnVuY3Rpb25hbGl0eTwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQmxvY2siPk9wdGlvbjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxvYWRlcjo6QWdlbnQ6OkNvbW1vbkNTUyMjIzEwMC1JVFNNIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxpc3Qgb2YgQ1NTIGZpbGVzIHRvIGFsd2F5cyBiZSBsb2FkZWQgZm9yIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6V2ViPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEFycmF5PgogICAgICAgICAgICAgICAgPEl0ZW0+SVRTTS5BZ2VudC5EZWZhdWx0LmNzczwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtPklUU00uQWdlbnQuU2VhcmNoLmNzczwvSXRlbT4KICAgICAgICAgICAgPC9BcnJheT4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMb2FkZXI6OkFnZW50OjpDb21tb25KUyMjIzEwMC1JVFNNIiBSZXF1aXJlZD0iMSIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPkxpc3Qgb2YgSlMgZmlsZXMgdG8gYWx3YXlzIGJlIGxvYWRlZCBmb3IgdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpXZWI8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8QXJyYXk+CiAgICAgICAgICAgICAgICA8SXRlbT5JVFNNLkFnZW50LkN1c3RvbWVyU2VhcmNoLmpzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0+SVRTTS5BZ2VudC5JbmNpZGVudFN0YXRlLmpzPC9JdGVtPgogICAgICAgICAgICA8L0FycmF5PgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KPC9vdHJzX2NvbmZpZz4K
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIxLjAiIGluaXQ9IkNvbmZpZyI+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNU2VydmljZSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvcmU8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cD5pdHNtLXNlcnZpY2U8L0dyb3VwPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+aXRzbS1zZXJ2aWNlPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPklUU00gU2VydmljZSBPdmVydmlldzwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5TZXJ2aWNlPC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPFRpdGxlPlNlcnZpY2U8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24+U2VydmljZS1BcmVhPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8TmFtZT5TZXJ2aWNlczwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8VHlwZT5NZW51PC9UeXBlPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz5JdGVtQXJlYTwvQmxvY2s+CiAgICAgICAgICAgICAgICAgICAgPExpbms+QWN0aW9uPUFnZW50SVRTTVNlcnZpY2U8L0xpbms+CiAgICAgICAgICAgICAgICAgICAgPE5hdkJhcj5TZXJ2aWNlPC9OYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc0tleT48L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8UHJpbz4zMTAwPC9QcmlvPgogICAgICAgICAgICAgICAgPC9OYXZCYXI+CiAgICAgICAgICAgICAgICA8TmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5TZXJ2aWNlIE92ZXJ2aWV3PC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgICAgICA8TmFtZT5TZXJ2aWNlPC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxMaW5rPkFjdGlvbj1BZ2VudElUU01TZXJ2aWNlPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPjwvVHlwZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+PC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8TmF2QmFyPlNlcnZpY2U8L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8QWNjZXNzS2V5PjwvQWNjZXNzS2V5PgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjEwMDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudElUU01TTEEiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvcmU8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxHcm91cFJvPml0c20tc2VydmljZTwvR3JvdXBSbz4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5JVFNNIFNMQSBPdmVydmlldzwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5TZXJ2aWNlPC9OYXZCYXJOYW1lPgogICAgICAgICAgICAgICAgPFRpdGxlPlNMQTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5TTEEgT3ZlcnZpZXc8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgICAgIDxOYW1lPlNMQTwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249QWdlbnRJVFNNU0xBPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxUeXBlPjwvVHlwZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+PC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8TmF2QmFyPlNlcnZpY2U8L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8QWNjZXNzS2V5PjwvQWNjZXNzS2V5PgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjIwMDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpNb2R1bGUjIyNBZ2VudElUU01TZXJ2aWNlWm9vbSIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDb3JlPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXBSbz5pdHNtLXNlcnZpY2U8L0dyb3VwUm8+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24+U2VydmljZSBab29tPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxUaXRsZT5ab29tPC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPlNlcnZpY2U8L05hdkJhck5hbWU+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50SVRTTVNlcnZpY2VQcmludCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29yZTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+aXRzbS1zZXJ2aWNlPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPlNlcnZpY2UgUHJpbnQ8L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPFRpdGxlPlByaW50PC9UaXRsZT4KICAgICAgICAgICAgICAgIDxOYXZCYXJOYW1lPlNlcnZpY2U8L05hdkJhck5hbWU+CiAgICAgICAgICAgIDwvRnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50SVRTTVNMQVpvb20iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDb3JlPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXBSbz5pdHNtLXNlcnZpY2U8L0dyb3VwUm8+CiAgICAgICAgICAgICAgICA8RGVzY3JpcHRpb24+U0xBIFpvb208L0Rlc2NyaXB0aW9uPgogICAgICAgICAgICAgICAgPFRpdGxlPlpvb208L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+U2VydmljZTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWdlbnRJVFNNU0xBUHJpbnQiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+RnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29yZTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlUmVnaXN0cmF0aW9uPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEZyb250ZW5kTW9kdWxlUmVnPgogICAgICAgICAgICAgICAgPEdyb3VwUm8+aXRzbS1zZXJ2aWNlPC9Hcm91cFJvPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPlNMQSBQcmludDwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8VGl0bGU+UHJpbnQ8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+U2VydmljZTwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNU2VydmljZTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUjIyMwMDAtQmFjayIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gVHJhbnNsYXRhYmxlPSIxIj5Nb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2VydmljZSBtZW51LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29yZTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6SVRTTVNlcnZpY2U6Ok1lbnVNb2R1bGU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTVNlcnZpY2VNZW51R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+QmFjazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iVGFyZ2V0Ij5CYWNrPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiI+QmFjazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj48L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkxpbmsiPkFjdGlvbj1BZ2VudElUU01TZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVNlcnZpY2U6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMTAwLVByaW50IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2VydmljZSBtZW51LjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPklUU00gQ29yZTwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6SVRTTVNlcnZpY2U6Ok1lbnVNb2R1bGU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTVNlcnZpY2VNZW51R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+UHJpbnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIiBUcmFuc2xhdGFibGU9IjEiPlByaW50PC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPkFnZW50SVRTTVNlcnZpY2VQcmludDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50SVRTTVNlcnZpY2VQcmludDtTZXJ2aWNlSUQ9WyUgRGF0YS5TZXJ2aWNlSUQgfCBodG1sICVdPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iSVRTTVNlcnZpY2U6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMjAwLUxpbmsiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+TW9kdWxlIHRvIHNob3cgdGhlIGxpbmsgbGluayBpbiBzZXJ2aWNlIG1lbnUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDb3JlPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpJVFNNU2VydmljZTo6TWVudU1vZHVsZTwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJNb2R1bGUiPktlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNU2VydmljZU1lbnVMaW5rPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5MaW5rPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXQiPlBvcFVwPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJEZXNjcmlwdGlvbiI+TGluazwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudElUU01TZXJ2aWNlPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJMaW5rIj5BY3Rpb249QWdlbnRMaW5rT2JqZWN0O1NvdXJjZU9iamVjdD1TZXJ2aWNlO1NvdXJjZUtleT1bJSBEYXRhLlNlcnZpY2VJRCB8IGh0bWwgJV08L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJJVFNNU0xBOjpGcm9udGVuZDo6TWVudU1vZHVsZSMjIzAwMC1CYWNrIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzbGEgbWVudS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNIENvcmU8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6OklUU01TTEE6Ok1lbnVNb2R1bGU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTVNMQU1lbnVHZW5lcmljPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOYW1lIj5CYWNrPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJUYXJnZXQiPkJhY2s8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIj5CYWNrPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJBY3Rpb24iPjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50SVRTTVNMQTwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IklUU01TTEE6OkZyb250ZW5kOjpNZW51TW9kdWxlIyMjMTAwLVByaW50IiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBUcmFuc2xhdGFibGU9IjEiPk1vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2xhIG1lbnUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+SVRTTSBDb3JlPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFnZW50OjpJVFNNU0xBOjpNZW51TW9kdWxlPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6OklUU01TTEFNZW51R2VuZXJpYzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTmFtZSI+UHJpbnQ8L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IkRlc2NyaXB0aW9uIj5QcmludDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iQWN0aW9uIj5BZ2VudElUU01TTEFQcmludDwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTGluayI+QWN0aW9uPUFnZW50SVRTTVNMQVByaW50O1NMQUlEPVslIERhdGEuU0xBSUQgfCBodG1sICVdPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgo8L290cnNfY29uZmlnPgo=
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiID8+CjxvdHJzX2NvbmZpZyB2ZXJzaW9uPSIxLjAiIGluaXQ9IkNvbmZpZyI+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJUaWNrZXQ6OlNlcnZpY2UiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIFRyYW5zbGF0YWJsZT0iMSI+QWxsb3dzIGRlZmluaW5nIHNlcnZpY2VzIGFuZCBTTEFzIGZvciB0aWNrZXRzIChlLiBnLiBlbWFpbCwgZGVza3RvcCwgbmV0d29yaywgLi4uKSwgYW5kIGVzY2FsYXRpb24gYXR0cmlidXRlcyBmb3IgU0xBcyAoaWYgdGlja2V0IHNlcnZpY2UvU0xBIGZlYXR1cmUgaXMgZW5hYmxlZCkuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+VGlja2V0PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6VGlja2V0PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPE9wdGlvbiBTZWxlY3RlZElEPSIxIj4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iMCI+Tm88L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IjEiPlllczwvSXRlbT4KICAgICAgICAgICAgPC9PcHRpb24+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgo8L290cnNfY29uZmlnPgo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9iZ19JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmJnX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAn0JDQu9GC0LXRgNC90LDRgtC40LLQtdC9INC90LAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAn0JTQvtGB0YLRitC/0L3QvtGB0YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICfQntGB0L3QvtCy0L3QsCDRgdC40YHRgtC10LzQsC9CYWNrZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ9Ch0LLRitGA0LfQsNC9INGBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgU3RhdGUnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ9CU0LXQvNC+0L3RgdGC0YDQsNGG0LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAn0JfQsNCy0LjRgdC4INC+0YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ9Cj0YHQu9GD0LPQuCDQt9CwINC60YDQsNC50L3QuCDQv9C+0YLRgNC10LHQuNGC0LXQu9C4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ9CT0YDQtdGI0LrQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICfQmtC70LjQtdC90YLRgdC60LAg0YHQuNGB0YLQtdC80LAvRnJvbnRlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ9Cj0L/RgNCw0LLQu9C10L3QuNC1INC90LAg0JjQoic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ9CY0KIg0J7Qv9C10YDQsNGG0LjQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICfQktC70LjRj9C90LjQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ9CS0LrQu9GO0YfQtdC90LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICfQlNGA0YPQs9C4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICfQp9Cw0YHRgiDQvtGCJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICfQn9GA0L7QtdC60YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ9CS0YDQtdC80LUg0LfQsCDQstGK0LfRgdGC0LDQvdC+0LLRj9Cy0LDQvdC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAn0KHRitC+0YLQstC10YLQtdC9INGBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ9Ce0YLRh9C10YLQvdC+0YHRgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICfQndC10L7QsdGF0L7QtNC40Lwg0LfQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICfQktGA0LXQvNC1INC30LAg0YDQsNC30YDQtdGI0LDQstCw0L3QtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAn0JLRgNC10LzQtSDQt9CwINC+0YLQs9C+0LLQvtGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFpbmluZyd9ID0gJ9Ce0LHRg9GH0LXQvdC40LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAn0KHQtNC10LvQutC4L9GC0YDQsNC90LfQsNC60YbQuNC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ9Ce0YHQvdC+0LLQtdC9INC00L7Qs9C+0LLQvtGAJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FsbG9jYXRpb24nfSA9ICfQvtC/0YDQtdC00LXQu9C10L0nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNJUEFsbG9jYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSA8LT4gSW1wYWN0IDwtPiBQcmlvcml0eSd9ID0gJ9Ca0YDQuNGC0LjRh9C90L7RgdGCPC0+0JLQu9C40Y/QvdC40LU8LT7Qn9GA0LjQvtGC0LjRgtC10YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAn0JzQuNC90LjQvNCw0LvQvdC+INCy0YDQtdC80LUg0LzQtdC20LTRgyDQuNC90YbQuNC00LXQvdGC0LjRgtC1JzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAn0JrRgNC40YLQuNGH0L3QvtGB0YInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUN1c3RvbWVyU2VhcmNoCgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBCgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQS1JbmZvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlCgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUluZm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICfQodCy0YrRgNC30LDQvdC4IFNMQSDQtNC+0LPQvtCy0L7RgNC4JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNsYSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzbGEgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIGxpbmsgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIG9mIGxpbmsgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9jc19JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmNzX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpdm7DrSBrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ0Rvc3R1cG5vc3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICdaw6FrbGFkbsOtIHJvemhyYW7DrS9CYWNrZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ1Nwb2plbiBzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgU3RhdGUnfSA9ICdTb3XDqGFzbsO9IFN0YXYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ1Vrw6F6a2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ1phbGXFuMOtIG5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICdTbHXFuGJ5IGtvbmNvdsO9bSB1xbhpdmF0ZWzDuW0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAnQ2h5YnknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAnWsOha2F6bmlja8OpIHJvemhyYW7DrS9Gcm9udGVuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnw5jDrXplbsOtIElUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnSVQgT3BlcmFjZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdWbGl2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnU3RhdiBJbmNpZGVudHUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICdaYWhybnVqZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ0RhbMK5w60nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ8OIw6FzdCB6JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9qZWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICfDiGFzIE9ibm92eSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ1JlbGV2YW50bsOtIGsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAnUmVwb3J0aW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ1BvxbhhZG92YW7DvSBwcm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnw4hhcyDDmGXCuWVuw60nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ8OIYXMgT2Rwb3bDrGRpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ1NMQSBQw7hlaGxlZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnUMO4ZWhsZWQgU2x1xbhieSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICdQcm9zdG9yIMOaZHLFuGJ5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYWluaW5nJ30gPSAnwqlrb2xlbsOtJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ1RyYW5zYWtjZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICdaw6FrbGFkbsOtIHNtbG91dmEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYWxsb2NhdGlvbid9ID0gJ3DDuGlkw6xsaXQnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNJUEFsbG9jYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSA8LT4gSW1wYWN0IDwtPiBQcmlvcml0eSd9ID0gJ0tyaXRpw6hub3N0PC0+VmxpdjwtPlByaW9yaXRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IDwtPiBJbXBhY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ01pbmltw6FsbsOtIMOoYXMgbWV6aSBpbmNpZGVudHknOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdLcml0acOobm9zdCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ3VzdG9tZXJTZWFyY2gKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEEKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBLUluZm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdQw7hpw7hhemVuw6kgU2x1xbhieSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZQoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2VQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1JbmZvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdTb3XDqGFzbsO9IFN0YXYgSW5jaWRlbnR1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ1DDuGnDuGF6ZW7DqSBTTEEgc21sb3V2eSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzbGEgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBsaW5rIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBvZiBsaW5rIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ1JlbGV2YW50VG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJyc7CgogICAgIwogICAgIyBPQlNPTEVURSBFTlRSSUVTIEZPUiBSRUZFUkVOQ0UsIERPIE5PVCBUUkFOU0xBVEUhCiAgICAjCgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9jdF9JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmN0X0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpdmEgYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdEaXNwb25pYmlsaXRhdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ0JhY2tlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAnQ29ubmVjdGF0IGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBTdGF0ZSd9ID0gJ0VzdGF0IGFjdHVhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnRGVtb3N0cmFjacOzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdEZXDDqG4gZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ1NlcnZlaSB1c3VhcmkgZmluYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAnRXJyb3JzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ0Zyb250ZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdHZXN0acOzIElUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnT3BlcmFjacOzIElUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ0ltcGFjdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdFc3RhdCBkZSBsXCdpbmNpZGVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ0luY2xvdSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ0FsdHJlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnUGFydCBkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAnUHJvamVjdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ1RlbXBzIGRlIHJlY3VwZXJhY2nDsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ1JlbGV2YW50IHBlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdJbmZvcm1lcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICdSZXF1ZXJpdCBwZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnUGVyY2VudGF0Z2UgZGUgcmVzb2x1Y2nDsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnVGVtcHMgZGUgcmVzcG9zdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnVmlzacOzIGdlbmVyYWwgZGUgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICdWaXNpw7MgZ2VuZXJhbCBkZWwgc2VydmVpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ1NlcnZlaS3DgHJlYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFpbmluZyd9ID0gJ0Zvcm1hY2nDsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICdUcmFuc2FjY2lvbnMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnQ29udHJhY3RlIGRlIHN1cG9ydCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhbGxvY2F0aW9uJ30gPSAnYXNzaWduYXInOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNJUEFsbG9jYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSA8LT4gSW1wYWN0IDwtPiBQcmlvcml0eSd9ID0gJ0VzdGF0IGNyw610aWMgPC0+IEltcGFjdGUgPC0+IFByaW9yaXRhdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSA8LT4gSW1wYWN0Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnVGVtcHMgbcOtbmltIGVudHJlIGluY2lkZW50cyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ0VzdGF0IGNyw610aWMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUN1c3RvbWVyU2VhcmNoCgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBCgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQS1JbmZvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICcnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IG9yIGhpZGUgdGhlIGNvbnRlbnQuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdTZXJ2ZWlzIGFzc29jaWF0cyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZQoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2VQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1JbmZvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdFc3RhdCBhY3R1YWwgZGUgbFwnaW5jaWRlbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnU0xBcyBhc3NvY2lhdHMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNsYSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzbGEgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIGxpbmsgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIG9mIGxpbmsgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ1JlbGV2YW50VG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9kYV9JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmRhX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpdiB0aWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAnVGlsZ8OmbmdlbGlnaGVkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAnQmFja2VuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICdGb3JidW5kZXQgdGlsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgU3RhdGUnfSA9ICdOdXbDpnJlbmRlIHRpbHN0YW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICdEZW1vbnN0cmF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdBZmjDpm5nZXIgYWYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ0t1bmRlc2VydmljZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdGZWpsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ0Zyb250ZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdJVCBNYW5hZ2VtZW50JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnSVQgb3BlcmF0aW9uZWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnUMOldmlya25pbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdJbmNpZGVudCB0aWxzdGFuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ0luZGtsdWRlcmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdBbmRyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnRGVsIGFmJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9qZWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICdHZW5ldGFibGVyaW5nc3RpZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ1JlbGV2YW50IGZvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdSZXBvcnRlcmluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICdLcsOmdmVzIGZvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICdMw7hzbmluZ3NyYXRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICdSZWFrdGlvbnN0aWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnU0xBIG92ZXJzaWd0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICdTZXJ2aWNlIG92ZXJzaWd0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ1NlcnZpY2Ugb21yw6VkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFpbmluZyd9ID0gJ1Ryw6ZuaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ1RyYW5zYWt0aW9uZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnVW5kZXJsaWdnZW5kZSBrb250cmFrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhbGxvY2F0aW9uJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdLcml0aWthbGl0ZXQgPC0+IFDDpXZpcmtuaW5nIDwtPiBQcmlvcml0ZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnTWluaW11bXN0aWQgbWVsbGVtIEluY2lkZW50cyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ0tyaXRpa2FsaXRldCc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ3VzdG9tZXJTZWFyY2gKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEEKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBLUluZm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdUaWxrbnl0dGVkZSBzZXJ2aWNlcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZQoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2VQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1JbmZvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdOdXbDpnJlbmRlIEluY2lkZW50IHRpbHN0YW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ1RpbGtueXR0ZWRlIFNMQXMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICcnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNsYSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgbGluayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgb2YgbGluayB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9kZV9JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmRlX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpdiB6dSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdWZXJmw7xnYmFya2VpdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ0JhY2tlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAnVmVyYnVuZGVuIG1pdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IFN0YXRlJ30gPSAnQWt0dWVsbGVyIFN0YXR1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnRGVtb25zdHJhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAnSMOkbmd0IGFiIHZvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnQW53ZW5kZXItU2VydmljZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdGZWhsZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAnRnJvbnRlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ0lUIE1hbmFnZW1lbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdJVCBCZXRyaWViJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ0F1c3dpcmt1bmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdWb3JmYWxsc3N0YXR1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ0JlaW5oYWx0ZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdTb25zdGlnZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ1RlaWwgdm9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9qZWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICdXaWVkZXJoZXJzdGVsbHVuZ3N6ZWl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnUmVsZXZhbnQgZsO8cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdSZXBvcnRpbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAnQmVuw7Z0aWd0IGbDvHInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnTMO2c3VuZ3N6ZWl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICdSZWFrdGlvbnN6ZWl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ1NMQSDDnGJlcnNpY2h0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICdTZXJ2aWNlIMOcYmVyc2ljaHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnU2VydmljZS1CZXJlaWNoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYWluaW5nJ30gPSAnVHJhaW5pbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnNha3Rpb25lbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICdVbmRlcnBpbm5pbmcgQ29udHJhY3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYWxsb2NhdGlvbid9ID0gJ3p1b3JkbmVuJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdLcml0aWthbGl0w6R0IDwtPiBBdXN3aXJrdW5nIDwtPiBQcmlvcml0w6R0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IDwtPiBJbXBhY3QuJ30gPQogICAgICAgICdWZXJ3YWx0dW5nIGRlciBQcmlvcml0w6R0IGF1cyBkZXIgS29tYmluYXRpb24gdm9uIEtyaXRpa2FsaXTDpHQgPC0+IEltcGFjdC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ1ByaW9yaXTDpHQgenVvcmRuZW4nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICdNaW5kZXN0emVpdCB6d2lzY2hlbiBJbmNpZGVudHMnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdLcml0aWthbGl0w6R0JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DdXN0b21lclNlYXJjaAoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQQoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEtSW5mbyd9ID0gJ1NMQS1JbmZvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ1p1bGV0enQgZ2XDpG5kZXJ0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ1p1bGV0enQgZ2XDpG5kZXJ0IHZvbic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnU0xBLUluZm9ybWF0aW9uZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ1p1Z2Vow7ZyaWdlIFNlcnZpY2VzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlCgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUluZm8nfSA9ICdTZXJ2aWNlLUluZm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0FrdHVlbGxlciBWb3JmYWxsc3N0YXR1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICdadWdlaMO2cmlnZSBTTEFzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ1NlcnZpY2UtSW5mb3JtYXRpb25lbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnQWt0dWVsbGVyIFZvcmZhbGxzdGF0dXMnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kbW9kdWwtUmVnaXN0cmF0aW9uIGRlciBBZG1pbklUU01DSVBBbGxvY2F0ZSBLb25maWd1cmF0aW9uIGltIEFkbWluLUJlcmVpY2guJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZG1vZHVsLVJlZ2lzdHJhdGlvbiBkZXMgQWdlbnRJVFNNU0xBLU9iamVrdHMgaW0gQWdlbnQtSW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZG1vZHVsLVJlZ2lzdHJhdGlvbiBkZXMgQWdlbnRJVFNNU0xBUHJpbnQtT2JqZWt0cyBpbSBBZ2VudC1JbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRnJvbnRlbmRtb2R1bC1SZWdpc3RyYXRpb24gZGVzIEFnZW50SVRTTVNMQVpvb20tT2JqZWt0cyBpbSBBZ2VudC1JbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRnJvbnRlbmRtb2R1bC1SZWdpc3RyYXRpb24gZGVzIEFnZW50SVRTTVNlcnZpY2UtT2JqZWt0cyBpbSBBZ2VudC1JbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZG1vZHVsLVJlZ2lzdHJhdGlvbiBkZXMgQWdlbnRJVFNNU2VydmljZVByaW50LU9iamVrdHMgaW0gQWdlbnQtSW50ZXJmYWNlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdGcm9udGVuZG1vZHVsLVJlZ2lzdHJhdGlvbiBkZXMgQWdlbnRJVFNNU2VydmljZVpvb20tT2JqZWt0cyBpbSBBZ2VudC1JbnRlcmZhY2UuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnUHJpb3JpdMOkdHMtTWF0cml4IHZlcndhbHRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJ8OcYmVyIGRpZXNlcyBNb2R1bCB3aXJkIGRlciBadXLDvGNrLUxpbmsgaW4gZGVyIExpbmtsZWlzdGUgZGVyIFNlcnZpY2UtQW5zaWNodCBhbmdlemVpZ3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzbGEgbWVudS4nfSA9ICfDnGJlciBkaWVzZXMgTW9kdWwgd2lyZCBkZXIgWnVyw7xjay1MaW5rIGluIGRlciBMaW5rbGVpc3RlIGRlciBTTEEtQW5zaWNodCBhbmdlemVpZ3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJ8OcYmVyIGRpZXNlcyBNb2R1bCB3aXJkIGRlciBEcnVja2VuLUxpbmsgaW4gZGVyIExpbmtsZWlzdGUgZGVyIFNlcnZpY2UtQW5zaWNodCBhbmdlemVpZ3QuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnw5xiZXIgZGllc2VzIE1vZHVsIHdpcmQgZGVyIERydWNrZW4tTGluayBpbiBkZXIgTGlua2xlaXN0ZSBkZXIgU0xBLUFuc2ljaHQgYW5nZXplaWd0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgbGluayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICfDnGJlciBkaWVzZXMgTW9kdWwgd2lyZCBkZXIgTGluay1MaW5rIGluIGRlciBMaW5rbGVpc3RlIGRlciBTZXJ2aWNlLUFuc2ljaHQgYW5nZXplaWd0Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAnUGFyYW1ldGVyIGZ1ZXIgZGVuIFZvcmZhbGxzc3RhdHVzIGluIGRlciBBbnNpY2h0IGZ1ZXIgZGllIEVpbnN0ZWxsdW5nZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBvZiBsaW5rIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4nfSA9CiAgICAgICAgJ0xlZ3QgZGVuIExpbmt0eXAgZmVzdCwgZGVyIHp1ciBCZXJlY2hudW5nIGRlcyBWb3JmYWxsc3RhdHVzIHZlcndlbmRldCB3aXJkLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0lUU01DaGFuZ2VcJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnTm9ybWFsXCcgbWl0IFwnVGlja2V0XCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ05vcm1hbFwnIG1pdCBcJ0ZBUVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ1BhcmVudENoaWxkXCcgbWl0IFwnRkFRXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdSZWxldmFudFRvXCcgbWl0IFwnRkFRXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnQWx0ZXJuYXRpdmVUb1wnIG1pdCBcJ1NlcnZpY2VcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ0RlcGVuZHNPblwnIG1pdCBcJ1NlcnZpY2VcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdSZWxldmFudFRvXCcgbWl0IFwnU2VydmljZVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnQWx0ZXJuYXRpdmVUb1wnIG1pdCBcJ1RpY2tldFwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdEZXBlbmRzT25cJyBtaXQgXCdUaWNrZXRcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ1JlbGV2YW50VG9cJyBtaXQgXCdUaWNrZXRcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3QgbWl0IGRlbSBMaW5rdHlwIFwnQWx0ZXJuYXRpdmVUb1wnIG1pdCBhbmRlcmVuIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ0Nvbm5lY3RlZFRvXCcgbWl0IGFuZGVyZW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ0RlcGVuZHNPblwnIG1pdCBhbmRlcmVuIFwnSVRTTUNvbmZpZ0l0ZW1cJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5pZXJ0LCBkYXNzIGVpbiBcJ0lUU01Db25maWdJdGVtXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ0luY2x1ZGVzXCcgbWl0IGFuZGVyZW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdSZWxldmFudFRvXCcgbWl0IGFuZGVyZW4gXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTVdvcmtPcmRlclwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdEZXBlbmRzT25cJyBtaXQgXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTVdvcmtPcmRlclwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdOb3JtYWxcJyBtaXQgXCdJVFNNQ29uZmlnSXRlbVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdJVFNNV29ya09yZGVyXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ0RlcGVuZHNPblwnIG1pdCBcJ1NlcnZpY2VcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTVdvcmtPcmRlclwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdOb3JtYWxcJyBtaXQgXCdTZXJ2aWNlXCctT2JqZWt0ZW4gdmVybGlua3Qgd2VyZGVuIGthbm4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnSVRTTVdvcmtPcmRlclwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdOb3JtYWxcJyBtaXQgXCdUaWNrZXRcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdTZXJ2aWNlXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ05vcm1hbFwnIG1pdCBcJ0ZBUVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmllcnQsIGRhc3MgZWluIFwnU2VydmljZVwnLU9iamVrdCBtaXQgZGVtIExpbmt0eXAgXCdQYXJlbnRDaGlsZFwnIG1pdCBcJ0ZBUVwnLU9iamVrdGVuIHZlcmxpbmt0IHdlcmRlbiBrYW5uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluaWVydCwgZGFzcyBlaW4gXCdTZXJ2aWNlXCctT2JqZWt0IG1pdCBkZW0gTGlua3R5cCBcJ1JlbGV2YW50VG9cJyBtaXQgXCdGQVFcJy1PYmpla3RlbiB2ZXJsaW5rdCB3ZXJkZW4ga2Fubi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRGVmaW5pZXJ0IGRlbiBMaW5rdHlwIFwnQWx0ZXJuYXRpdmVUb1wnLiBXaXJkIGFscyBTb3VyY2VOYW1lIHVuZCBUYXJnZXROYW1lIGRlciBnbGVpY2hlIEluaGFsdCBhbmdlZ2ViZW4sIGVudHN0ZWh0IGVpbiB1bmdlcmljaHRldGVyIExpbmt0eXAuIFdpcmQgYWxzIFNvdXJjZU5hbWUgdW5kIFRhcmdldE5hbWUgdmVyc2NoaWVkZW5lciBJbmhhbHQgYW5nZWdlYmVuLCBlbnRzdGVodCBlaW4gZ2VyaWNodGV0ZXIgTGlua3R5cC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkZW4gTGlua3R5cCBcJ0Nvbm5lY3RlZFRvXCcuIFdpcmQgYWxzIFNvdXJjZU5hbWUgdW5kIFRhcmdldE5hbWUgZGVyIGdsZWljaGUgSW5oYWx0IGFuZ2VnZWJlbiwgZW50c3RlaHQgZWluIHVuZ2VyaWNodGV0ZXIgTGlua3R5cC4gV2lyZCBhbHMgU291cmNlTmFtZSB1bmQgVGFyZ2V0TmFtZSB2ZXJzY2hpZWRlbmVyIEluaGFsdCBhbmdlZ2ViZW4sIGVudHN0ZWh0IGVpbiBnZXJpY2h0ZXRlciBMaW5rdHlwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkZW4gTGlua3R5cCBcJ0RlcGVuZHNPblwnLiBXaXJkIGFscyBTb3VyY2VOYW1lIHVuZCBUYXJnZXROYW1lIGRlciBnbGVpY2hlIEluaGFsdCBhbmdlZ2ViZW4sIGVudHN0ZWh0IGVpbiB1bmdlcmljaHRldGVyIExpbmt0eXAuIFdpcmQgYWxzIFNvdXJjZU5hbWUgdW5kIFRhcmdldE5hbWUgdmVyc2NoaWVkZW5lciBJbmhhbHQgYW5nZWdlYmVuLCBlbnRzdGVodCBlaW4gZ2VyaWNodGV0ZXIgTGlua3R5cC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0RlZmluaWVydCBkZW4gTGlua3R5cCBcJ0luY2x1ZGVzXCcuIFdpcmQgYWxzIFNvdXJjZU5hbWUgdW5kIFRhcmdldE5hbWUgZGVyIGdsZWljaGUgSW5oYWx0IGFuZ2VnZWJlbiwgZW50c3RlaHQgZWluIHVuZ2VyaWNodGV0ZXIgTGlua3R5cC4gV2lyZCBhbHMgU291cmNlTmFtZSB1bmQgVGFyZ2V0TmFtZSB2ZXJzY2hpZWRlbmVyIEluaGFsdCBhbmdlZ2ViZW4sIGVudHN0ZWh0IGVpbiBnZXJpY2h0ZXRlciBMaW5rdHlwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdEZWZpbmllcnQgZGVuIExpbmt0eXAgXCdSZWxldmFudFRvXCcuIFdpcmQgYWxzIFNvdXJjZU5hbWUgdW5kIFRhcmdldE5hbWUgZGVyIGdsZWljaGUgSW5oYWx0IGFuZ2VnZWJlbiwgZW50c3RlaHQgZWluIHVuZ2VyaWNodGV0ZXIgTGlua3R5cC4gV2lyZCBhbHMgU291cmNlTmFtZSB1bmQgVGFyZ2V0TmFtZSB2ZXJzY2hpZWRlbmVyIEluaGFsdCBhbmdlZ2ViZW4sIGVudHN0ZWh0IGVpbiBnZXJpY2h0ZXRlciBMaW5rdHlwLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICdBbnphaGwgZGVyIFplaWNoZW4gcHJvIFplaWxlIGluIElUU00tVGV4dEFyZWFzLic7CgogICAgIwogICAgIyBPQlNPTEVURSBFTlRSSUVTIEZPUiBSRUZFUkVOQ0UsIERPIE5PVCBUUkFOU0xBVEUhCiAgICAjCgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9lc19JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmVzX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJhbnRpdmEgYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdEaXNwb25pYmlsaWRhZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ0JhY2tlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAnQ29uZWN0YWRvIGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBBY3R1YWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ0RlbW9zdHJhY2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ0RlcGVuZGUgZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ1NlcnZpY2lvIGRlIFVzdWFyaW8gRmluYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAnRXJyb3Jlcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICdGcm9udGVuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnQWRtaW5pc3RyYWNpw7NuIGRlIFRJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnT3BlcmFjacOzbiBkZSBUSSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdJbXBhY3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnRXN0YWRvIGRlbCBJbmNpZGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICdJbmNsdXllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnT3Rybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnUGFydGUgZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ1Byb3llY3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICdUaWVtcG8gZGUgUmVjdXBlcmFjacOzbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ1JlbGV2YW50ZSBhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ0luZm9ybWVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ1JlcXVlcmlkbyBwYXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ1Rhc2EgZGUgUmVzb2x1Y2nDs24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ1RpZW1wbyBkZSBSZXNwdWVzdGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnRGVzY3JpcGNpw7NuIGRlIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnRGVzY3JpcGNpw7NuIGRlIFNlcnZpY2lvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICdBcmVhLVNlcnZpY2lvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYWluaW5nJ30gPSAnRW50cmVuYW1pZW50byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICdUcmFuc2FjY2lvbmVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhbGxvY2F0aW9uJ30gPSAnQXNpZ25hcic7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IDwtPiBJbXBhY3QgPC0+IFByaW9yaXR5J30gPSAnVXJnZW5jaWEgPC0+IEltcGFjdG8gPC0+IFByaW9yaWRhZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSA8LT4gSW1wYWN0Lid9ID0KICAgICAgICAnQWRtaW5pc3RyYXIgbGEgcHJpb3JpZGFkIHJlc3VsdGFudGUgYWwgY29tYmluYXIgVXJnZW5jaWEgPC0+IEltcGFjdG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICdBc2lnbmFyIHByaW9yaWRhZCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ1RpZW1wbyBNw61uaW1vIGVudHJlIEluY2lkZW50ZXMnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdVcmdlbmNpYSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ3VzdG9tZXJTZWFyY2gKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEEKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBLUluZm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdTZXJ2aWNpb3MgQXNvY2lhZG9zJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlCgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUluZm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBkZSBJbmNpZGVudGUgQWN0dWFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ1NMQXMgQXNvY2lhZG9zJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnRXN0YWRvIGN0dWFsIGRlbCBpbmNpZGVudGUnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJvIGRlbCBtw7NkdWxvIGZyb250ZW5kIHBhcmEgbGEgY29uZmlndXJhY2nDs24gZGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgZW4gZWwgw6FyZWEgZGUgYWRtaW5pc3RyYXIuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RybyBkZWwgbcOzZHVsbyBmcm9udGVuZCBwYXJhIGVsIG9iamV0byBBZ2VudElUU01TTEEgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGVsIG3Ds2R1bG8gZnJvbnRlbmQgcGFyYSBlbCBvYmpldG8gQWdlbnRJVFNNU0xBUHJpbnQgZW4gbGEgaW50ZXJmYXogZGVsIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RybyBkZWwgbcOzZHVsbyBmcm9udGVuZCBwYXJhIGVsIG9iamV0byBBZ2VudElUU01TTEFab29tIGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGVsIG3Ds2R1bG8gZnJvbnRlbmQgcGFyYSBlbCBvYmpldG8gQWdlbnRJVFNNU2VydmljZSBlbiBsYSBpbnRlcmZheiBkZWwgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cm8gZGVsIG3Ds2R1bG8gZnJvbnRlbmQgcGFyYSBlbCBvYmpldG8gQWdlbnRJVFNNU2VydmljZVByaW50IGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJvIGRlbCBtw7NkdWxvIGZyb250ZW5kIHBhcmEgZWwgb2JqZXRvIEFnZW50SVRTTVNlcnZpY2Vab29tIGVuIGxhIGludGVyZmF6IGRlbCBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnQWRtaW5pc3RyYXIgbGEgbWF0csOteiBkZSBwcmlvcmlkYWRlcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNw7NkdWxvIHBhcmEgbW9zdGFyIHVuIHbDrW5jdWxvIHBhcmEgcmVncmVzYXIgZW4gZWwgbWVuw7ogZGUgc2VydmljaW8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzbGEgbWVudS4nfSA9ICdNw7NkdWxvIHBhcmEgbW9zdGFyIHVuIHbDrW5jdWxvIHBhcmEgcmVncmVzYXIgZW4gZWwgbWVuw7ogZGUgU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNw7NkdWxvIHBhcmEgbW9zdGFyIHVuIHbDrW5jdWxvIHBhcmEgaW1wcmltaXIgZW4gZWwgbWVuw7ogZGUgc2VydmljaW8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RhciB1biB2w61uY3VsbyBwYXJhIGltcHJpbWlyIGVuIGVsIG1lbsO6IGRlIFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIGxpbmsgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RhciBlbCB2w61uY3VsbyAiVmluY3VsYXIiIGVuIGVsIG1lbsO6IGRlIHNlcnZpY2lvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAnUGFyw6FtZXRyb3MgcGFyYSBsb3MgZXN0YWRvcyBkZSBsb3MgaW5jaWRlbnRlcyBlbiBsYSB2aXN0YSBkZSBwcmVmZXJlbmNpYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBvZiBsaW5rIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4nfSA9CiAgICAgICAgJ0RlZmluZSBlbCB0aXBvIGRlIHbDrW5jdWxvIHVzYWRvIHBhcmEgY2FsY3VsYXIgZWwgZXN0YWRvIGRlbCBpbmNpZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01DaGFuZ2VcJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvYmpldG9zIFwnVGlja2V0XCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb2JqZXRvcyBcJ0ZBUVwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb2JqZXRvcyBcJ0ZBUVwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnUGFyZW50Q2hpbGRcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG9iamV0b3MgXCdGQVFcJyB1c2FuZG8gZWwgdsOtbmN1bG8gZGUgdGlwbyBcJ1JlbGV2YW50VG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvYmpldG9zIFwnU2VydmljZVwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnQWx0ZXJuYXRpdmVUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb2JqZXRvcyBcJ1NlcnZpY2VcJyB1c2FuZG8gZWwgdsOtbmN1bG8gZGUgdGlwbyBcJ0RlcGVuZHNPblwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG9iamV0b3MgXCdTZXJ2aWNlXCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdSZWxldmFudFRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvYmpldG9zIFwnVGlja2V0XCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdBbHRlcm5hdGl2ZVRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG9iamV0b3MgXCdUaWNrZXRcJyB1c2FuZG8gZWwgdsOtbmN1bG8gZGUgdGlwbyBcJ0FsdGVybmF0aXZlVG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG9iamV0b3MgXCdUaWNrZXRcJyB1c2FuZG8gZWwgdsOtbmN1bG8gZGUgdGlwbyBcJ1JlbGV2YW50VG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb3Ryb3Mgb2JqZXRvcyBcJ0lUU01Db25maWdJdGVtXCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdBbHRlcm5hdGl2ZVRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTUNvbmZpZ0l0ZW1cJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvdHJvcyBvYmpldG9zIFwnSVRTTUNvbmZpZ0l0ZW1cJyB1c2FuZG8gZWwgdsOtbmN1bG8gZGUgdGlwbyBcJ0Nvbm5lY3RlZFRvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb3Ryb3Mgb2JqZXRvcyBcJ0lUU01Db25maWdJdGVtXCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdEZXBlbmRzT25cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRGVmaW5lIHF1ZSB1biBvYmpldG8gXCdJVFNNQ29uZmlnSXRlbVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG90cm9zIG9iamV0b3MgXCdJVFNNQ29uZmlnSXRlbVwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnSW5jbHVkZXNcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Db25maWdJdGVtXCcgcHVlZGUgc2VyIHZpbmN1bGFkbyBjb24gb3Ryb3Mgb2JqZXRvcyBcJ0lUU01Db25maWdJdGVtXCcgdXNhbmRvIGVsIHbDrW5jdWxvIFwnUmVsZXZhbnRUb1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Xb3JrT3JkZXJcJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvYmpldG9zIFwnSVRTTUNvbmZpZ0l0ZW1cJyB1c2FuZG8gZWwgdsOtbmN1bG8gZGUgdGlwbyBcJ0RlcGVuZHNPblwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Xb3JrT3JkZXJcJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvYmpldG9zIFwnSVRTTUNvbmZpZ0l0ZW1cJyB1c2FuZG8gZWwgdsOtbmN1bG8gZGUgdGlwbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluZSBxdWUgdW4gb2JqZXRvIFwnSVRTTVdvcmtPcmRlclwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG9iamV0b3MgXCdTZXJ2aWNlXCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdEZXBlbmRzT25cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Xb3JrT3JkZXJcJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvYmpldG9zIFwnU2VydmljZVwnIHVzYW5kbyBlbCB2w61uY3VsbyBkZSB0aXBvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHVuIG9iamV0byBcJ0lUU01Xb3JrT3JkZXJcJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvYmpldG9zIFwnVGlja2V0XCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluZSBxdWUgdW4gb2JqZXRvIFwnU2VydmljZVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG9iamV0b3MgXCdGQVFcJyB1c2FuZG8gZWwgdsOtbmN1bG8gZGUgdGlwbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdEZWZpbmUgcXVlIHVuIG9iamV0byBcJ1NlcnZpY2VcJyBwdWVkZSBzZXIgdmluY3VsYWRvIGNvbiBvYmpldG9zIFwnRkFRXCcgdXNhbmRvIGVsIHbDrW5jdWxvIGRlIHRpcG8gXCdQYXJlbnRDaGlsZFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0RlZmluZSBxdWUgdW4gb2JqZXRvIFwnU2VydmljZVwnIHB1ZWRlIHNlciB2aW5jdWxhZG8gY29uIG9iamV0b3MgXCdGQVFcJyB1c2FuZG8gZWwgdsOtbmN1bG8gZGUgdGlwbyBcJ1JlbGV2YW50VG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRGVmaW5lIGVsIHRpcG8gZGUgdsOtbmN1bG8gXCdBbHRlcm5hdGl2ZVRvXCcuIFNpIGVsIFNvdXJjZU5hbWUgeSBlbCBUYXJnZXROYW1lIGNvbnRpZW5lbiBlbCBtaXNtbyB2YWxvciwgZWwgcmVzdWx0YWRvIGVzIHVuIHbDrW5jdWxvIG5vIGRpcmVjY2lvbmFkby4gU2kgbG9zIHZhbG9yZXMgc29uIGRpZmVyZW50ZXMsIGVsIHJlc3VsdGFkbyBlcyB1biB2w61uY3VsbyBkaXJlY2Npb25hZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdEZWZpbmUgZWwgdGlwbyBkZSB2w61uY3VsbyBcJ0Nvbm5lY3RlZFRvXCcuIFNpIGVsIFNvdXJjZU5hbWUgeSBlbCBUYXJnZXROYW1lIGNvbnRpZW5lbiBlbCBtaXNtbyB2YWxvciwgZWwgcmVzdWx0YWRvIGVzIHVuIHbDrW5jdWxvIG5vIGRpcmVjY2lvbmFkby4gU2kgbG9zIHZhbG9yZXMgc29uIGRpZmVyZW50ZXMsIGVsIHJlc3VsdGFkbyBlcyB1biB2w61uY3VsbyBkaXJlY2Npb25hZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRGVmaW5lIGVsIHRpcG8gZGUgdsOtbmN1bG8gXCdEZXBlbmRzT25cJy4gU2kgZWwgU291cmNlTmFtZSB5IGVsIFRhcmdldE5hbWUgY29udGllbmVuIGVsIG1pc21vIHZhbG9yLCBlbCByZXN1bHRhZG8gZXMgdW4gdsOtbmN1bG8gbm8gZGlyZWNjaW9uYWRvLiBTaSBsb3MgdmFsb3JlcyBzb24gZGlmZXJlbnRlcywgZWwgcmVzdWx0YWRvIGVzIHVuIHbDrW5jdWxvIGRpcmVjY2lvbmFkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0RlZmluZSBlbCB0aXBvIGRlIHbDrW5jdWxvIFwnSW5jbHVkZXNcJy4gU2kgZWwgU291cmNlTmFtZSB5IGVsIFRhcmdldE5hbWUgY29udGllbmVuIGVsIG1pc21vIHZhbG9yLCBlbCByZXN1bHRhZG8gZXMgdW4gdsOtbmN1bG8gbm8gZGlyZWNjaW9uYWRvLiBTaSBsb3MgdmFsb3JlcyBzb24gZGlmZXJlbnRlcywgZWwgcmVzdWx0YWRvIGVzIHVuIHbDrW5jdWxvIGRpcmVjY2lvbmFkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ1JlbGV2YW50VG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRGVmaW5lIGVsIHRpcG8gZGUgdsOtbmN1bG8gXCdSZWxldmFudFRvXCcuIFNpIGVsIFNvdXJjZU5hbWUgeSBlbCBUYXJnZXROYW1lIGNvbnRpZW5lbiBlbCBtaXNtbyB2YWxvciwgZWwgcmVzdWx0YWRvIGVzIHVuIHbDrW5jdWxvIG5vIGRpcmVjY2lvbmFkby4gU2kgbG9zIHZhbG9yZXMgc29uIGRpZmVyZW50ZXMsIGVsIHJlc3VsdGFkbyBlcyB1biB2w61uY3VsbyBkaXJlY2Npb25hZG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJ0RlZmluZSBlbCBhbmNobyBkZSBsYXMgdGV4dGFyZWFzIGRlbCBJVFNNLic7CgogICAgIwogICAgIyBPQlNPTEVURSBFTlRSSUVTIEZPUiBSRUZFUkVOQ0UsIERPIE5PVCBUUkFOU0xBVEUhCiAgICAjCgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9mYV9JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmZhX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAn2KzYp9uM2q/YstuM2YbbjCDYqNix2KfbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICfZhduM2LLYp9mGINiv2LEg2K/Ys9iq2LHYsyDYqNmI2K/Zhic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ9m+2LTYqiDYtdit2YbZhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICfZhdiq2LXZhCDYp9iz2Kog2KjZhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IFN0YXRlJ30gPSAn2YjYtti524zYqiDYrNin2LHbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAn2YbZhdin24zYtCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAn2YjYp9io2LPYqtmHINin2LPYqiDYqNmHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICfYs9ix2YjbjNizINqp2KfYsdio2LEg2YbZh9in24zbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICfYrti32KfZh9inJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ9is2YTZiCDYtdit2YbZhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAn2YXYr9uM2LHbjNiqIElUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAn2LnZhdmE24zYp9iqIElUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ9in2KvYsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ9mI2LbYuduM2Kog2LHYrtiv2KfYryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ9mF2LTYqtmF2YQg2KfYs9iqINio2LEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICfYqNmC24zZhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAn2KjYrti024wg2KfYsic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAn2b7YsdmI2pjZhyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAn2LLZhdin2YYg2KjZh9io2YjYryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ9mF2LHYqtio2Lcg2KjYpyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICfar9iy2KfYsdi024wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAn2YXZiNix2K8g2YbbjNin2LIg2KfYs9iqINio2LHYp9uMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ9mG2LHYriDYrdmEINmF2LPYptmE2YcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ9iy2YXYp9mGINm+2KfYs9iu2q/ZiNuM24wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAn2K7ZhNin2LXZhyBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ9iu2YTYp9i12Ycg2LPYsdmI24zYsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICfYqNiu2LQg2LPYsdmI24zYsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFpbmluZyd9ID0gJ9ii2YXZiNiy2LTbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICfYqtix2KfaqdmG2LTigIzZh9inJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ9mC2LHYp9ix2K/Yp9ivINii2YXYp9iv2Ycg2obYp9m+JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FsbG9jYXRpb24nfSA9ICfYp9iu2KrYtdin2LUnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNJUEFsbG9jYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSA8LT4gSW1wYWN0IDwtPiBQcmlvcml0eSd9ID0gJ9in2YfZhduM2KogPC0+INin2KvYsSA8LT4g2KfZiNmE2YjbjNiqJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IDwtPiBJbXBhY3QuJ30gPQogICAgICAgICfZhdiv24zYsduM2Kog2KfZhNmI24zYqiDZhtin2LTbjCDYp9iyINiq2LHaqduM2Kgg2KfZh9mF24zYqiA8LT4g2KfYq9ixJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICfYqtiu2LXbjNi1INin2YTZiNuM2KonOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICfYrdiv2KfZgtmEINiy2YXYp9mGINio24zZhiDYr9mIINix2K7Yr9in2K8nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICfYp9mH2YXbjNiqJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DdXN0b21lclNlYXJjaAoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQQoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEtSW5mbyd9ID0gJ9in2LfZhNin2LnYp9iqIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfYotiu2LHbjNmGINiq2LrbjNuM2LEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAn2KLYrtix24zZhiDYqti624zbjNixINiq2YjYs9i3JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICfYp9i32YTYp9i52KfYqiBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ9iz2LHZiNuM2LPigIzZh9in24wg2YXYsdiq2KjYtyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZQoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2VQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1JbmZvJ30gPSAn2KfYt9mE2KfYudin2Kog2LPYsdmI24zYsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAn2YjYtti524zYqiDYrNin2LHbjCDYsdiu2K/Yp9ivJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ1NMQdmH2KfbjCDZhdix2KrYqNi3JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ9in2LfZhNin2LnYp9iqINiz2LHZiNuM2LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJ9mI2LbYuduM2Kog2qnZhtmI2YbbjCDYsdiu2K/Yp9ivJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICfYq9io2Kog2YXYp9qY2YjZhCDYqNix2KfbjCDZvtuM2qnYsdio2YbYr9uMIEFkbWluSVRTTUNJUEFsbG9jYXRlINiv2LEg2KjYrti0INmF2K/bjNix24zYqic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAn2KvYqNiqINmF2KfamNmI2YQg2KjYsdin24wg2b7bjNqp2LHYqNmG2K/bjCDYotio2KzaqdiqIEFnZW50SVRTTVNMQSDYr9ixINmI2KfYs9i3INqp2KfYsdio2LHbjCDaqdin2LHYtNmG2KfYsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfYq9io2Kog2YXYp9qY2YjZhCDYqNix2KfbjCDZvtuM2qnYsdio2YbYr9uMINii2KjYrNqp2KogQWdlbnRJVFNNU0xBUHJpbnQg2K/YsSDZiNin2LPYtyDaqdin2LHYqNix24wg2qnYp9ix2LTZhtin2LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfYq9io2Kog2YXYp9qY2YjZhCDYqNix2KfbjCDZvtuM2qnYsdio2YbYr9uMINii2KjYrNqp2KogQWdlbnRJVFNNU0xBWm9vbSDYr9ixINmI2KfYs9i3INqp2KfYsdio2LHbjCDaqdin2LHYtNmG2KfYsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9ir2KjYqiDZhdin2pjZiNmEINio2LHYp9uMINm+24zaqdix2KjZhtiv24wg2KLYqNis2qnYqiBBZ2VudElUU01TZXJ2aWNlINiv2LEg2YjYp9iz2Lcg2qnYp9ix2KjYsduMINqp2KfYsdi02YbYp9izJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICfYq9io2Kog2YXYp9qY2YjZhCDYqNix2KfbjCDZvtuM2qnYsdio2YbYr9uMINii2KjYrNqp2KogQWdlbnRJVFNNU2VydmljZVByaW50INiv2LEg2YjYp9iz2Lcg2qnYp9ix2KjYsduMINqp2KfYsdi02YbYp9izJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ9ir2KjYqiDZhdin2pjZiNmEINio2LHYp9uMINm+24zaqdix2KjZhtiv24wg2KLYqNis2qnYqiBBZ2VudElUU01TZXJ2aWNlWm9vbSDYr9ixINmI2KfYs9i3INqp2KfYsdio2LHbjCDaqdin2LHYtNmG2KfYsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgcHJpb3JpdHkgbWF0cml4Lid9ID0gJ9mF2K/bjNix24zYqiDZhdin2KrYsduM2LMg2KfZhNmI24zYqic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJ9mF2KfamNmI2YTbjCDYqNix2KfbjCDZhtmF2KfbjNi0INmE24zZhtqpINio2KfYstqv2LTYqiDYr9ixINmF2YbZiNuMINiz2LHZiNuM2LMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNsYSBtZW51Lid9ID0gJ9mF2KfamNmI2YTbjCDYqNix2KfbjCDZhtmF2KfbjNi0INmE24zZhtqpINio2KfYstqv2LTYqiDYr9ixINmF2YbZiNuMIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICfZhdin2pjZiNmE24wg2KjYsdin24wg2YbZhdin24zYtCDZhNuM2YbaqSDahtin2b4g2K/YsSDZhdmG2YjbjCDYs9ix2YjbjNizJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAn2YXYp9qY2YjZhNuMINio2LHYp9uMINmG2YXYp9uM2LQg2YTbjNmG2qkg2obYp9m+INiv2LEg2YXZhtmI24wgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBsaW5rIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAn2b7Yp9ix2KfZhdiq2LHZh9in24zbjCDYqNix2KfbjCDZiNi22LnbjNiq4oCM2YfYp9uMINix2K7Yr9in2K8g2K/YsSDZhtmF2KfbjCDYqtmG2LjbjNmF2KfYqiDYtNiu2LXbjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgb2YgbGluayB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuJ30gPQogICAgICAgICfYqtmG2LjbjNmFINmG2YjYuSDYp9ix2KrYqNin2LfbjCDaqdmHINio2KfbjNivINio2LHYp9uMINmF2K3Yp9iz2KjZhyDZiNi22LnbjNiqINix2K7Yr9in2K8g2KfYs9iq2YHYp9iv2Ycg2LTZiNivLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ1JlbGV2YW50VG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJ9in2YbYr9in2LLZhyDYudix2LYg2qnZhtiq2LHZhOKAjNmH2KfbjCDZiNix2YjYryDZhdiq2YYgSVRTTSc7CgogICAgIwogICAgIyBPQlNPTEVURSBFTlRSSUVTIEZPUiBSRUZFUkVOQ0UsIERPIE5PVCBUUkFOU0xBVEUhCiAgICAjCgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9mcl9JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmZyX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpdmUgw6AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAnRGlzcG9uaWJpbGl0w6knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICdCYWNrZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ0xpw6kgw6AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBTdGF0ZSd9ID0gJ0V0YXQgYWN0dWVsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICdEw6ltb25zdHJhdGlvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAnRMOpcGVuZCBkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnU2VydmljZSB1dGlsaXNhdGV1cic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdFcnJldXJzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ0Zyb250ZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdHZXN0aW9uIElUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnT3DDqXJhdGlvbnMgSVQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnSW1wYWN0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnRXRhdCBkXCdpbmNpZGVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ0luY2x1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ0F1dHJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICdQYXJ0IGRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9qZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ1RlbXBzIGRlIHLDqXBhcmF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnQ29ycmVzcG9uZCDDoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdSYXBwb3J0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ1JlcXVpcyBwb3VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ1RhdXggZGUgcsOpc29sdXRpb24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ1RlbXBzIGRlIHLDqXBvbnNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ0FwZXLDp3UgZGVzIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnQXBlcsOndSBkZXMgc2VydmljZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnWm9uZSBkZSBzZXJ2aWNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYWluaW5nJ30gPSAnRm9ybWF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ1RyYW5zYWN0aW9ucyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICdDb250cmF0IGV4dGVybmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYWxsb2NhdGlvbid9ID0gJ2FsbG91ZSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IDwtPiBJbXBhY3QgPC0+IFByaW9yaXR5J30gPSAnQ3JpdGljaXTDqSA8LT4gSW1wYWN0IDwtPiBQcmlvcml0w6knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnVGVtcHMgbWluaW1hbCBlbnRyZSBsZXMgaW5jaWRlbnRzJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnQ3JpdGljaXTDqSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ3VzdG9tZXJTZWFyY2gKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEEKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBLUluZm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdTZXJ2aWNlcyBhc3NvY2nDqXMnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2UKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtSW5mbyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAnRXRhdCBhY3R1ZWwgZFwnaW5jaWRlbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnU0xBcyBhc3NvY2nDqWVzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNsYSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzbGEgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIGxpbmsgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIG9mIGxpbmsgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9pdF9JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Oml0X0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpdm8gYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdEaXNwb25pYmlsaXTDoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ0JhY2sgRW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ0Nvbm5lc3NvIGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBTdGF0ZSd9ID0gJ1N0YXRvIEF0dHVhbGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ0RpbW9zdHJhemlvbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ0RlcGVuZGUgZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ1NlcnZpemlvIFV0ZW50ZSBGaW5hbGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAnRXJyb3JpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ0Zyb250IEVuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnSVQgTWFuYWdlbWVudCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ0lUIE9wZXJhdGlvbmFsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ0ltcGF0dG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdTdGF0byBkZWxsXCdJbmNpZGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICdJbmNsdWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnQWx0cm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ1BhcnRlIGRpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9nZXR0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAnVGVtcG8gZGkgUmVjdXBlcm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICdSaWxldmFudGUgcGVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ1JhcHBvcnRpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ1JpY2hpZXN0byBwZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnVGFzc28gZGkgUmlzb2x1emlvbmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ1RlbXBvIGRpIFJpc3Bvc3RhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ0Rlc2NyaXppb25lIGRlbGxvIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnRGVzY3JpemlvbmUgZGVsIFNlcnZpemlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ0FyZWEtZGktU2Vydml6aW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhaW5pbmcnfSA9ICdGb3JtYXppb25lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ1RyYW5zYXppb25pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ1VuZGVycGlubmluZyBDb250cmFjdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhbGxvY2F0aW9uJ30gPSAnYXNzZWduYXJlJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdVcmdlbnphIDwtPiBJbXBhdHRvIDwtPiBQcmlvcml0w6AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnTWluaW1vIFRlbXBvIFRyYSBJbmNpZGVudGknOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdVcmdlbnppYSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ3VzdG9tZXJTZWFyY2gKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEEKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBLUluZm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdTZXJ2aXppIEFzc29jaWF0aSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZQoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2VQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1JbmZvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdTdGF0byBBdHR1YWxlIGRlbGxcJ0luY2lkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICdTTEFzIEFzc29jaWF0aSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJyc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzbGEgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHRoZSBsaW5rIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBvZiBsaW5rIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ1JlbGV2YW50VG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJyc7CgogICAgIwogICAgIyBPQlNPTEVURSBFTlRSSUVTIEZPUiBSRUZFUkVOQ0UsIERPIE5PVCBUUkFOU0xBVEUhCiAgICAjCgp9CgoxOwo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9qYV9JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmphX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAn5Luj5pu/77yaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ+WPr+eUqOaApyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydCYWNrIEVuZCd9ID0gJ+ODkOODg+OCr+OCqOODs+ODiSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICfmjqXntprvvJonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBTdGF0ZSd9ID0gJ+eKtuaFiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAn44OH44Oi44Oz44K544OI44Os44O844K344On44OzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICfkvp3lrZjvvJonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ+OCqOODs+ODieODpuODvOOCtuODu+OCteODvOODk+OCuSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICfjgqjjg6njg7wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAn44OV44Ot44Oz44OI44Ko44Oz44OJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdJVOODnuODjeODvOOCuOODoeODs+ODiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ0lU44Kq44Oa44Os44O844K344On44OzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ+W9semfvyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ+OCpOODs+OCt+ODh+ODs+ODiOOBrueKtuaFiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ+WQq+OCgO+8mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ+OBneOBruS7lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAn5LiA6YOo77yaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICfjg5fjg63jgrjjgqfjgq/jg4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ+ODquOCq+ODkOODquODu+OCv+OCpOODoCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ+mWoumAo+mgheebru+8mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICfjg6zjg53jg7zjg4gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAn5b+F6aCI77yaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ+ino+WDj+W6puODrOODvOODiCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAn44Os44K544Od44Oz44K544K/44Kk44OgJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ1NMQeOBruamguimsyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAn44K144O844OT44K544Gu5qaC6KazJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ+OCteODvOODk+OCueODu+OCqOODquOCoic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFpbmluZyd9ID0gJ+ODiOODrOODvOODi+ODs+OCsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICflj5blvJUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAn5pSv5oyB44GZ44KL5aWR57SEJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FsbG9jYXRpb24nfSA9ICfphY3liIYnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNJUEFsbG9jYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSA8LT4gSW1wYWN0IDwtPiBQcmlvcml0eSd9ID0gJ+mHjeimgeW6piA8LT4g5b2x6Z+/5bqmIDwtPiDlhKrlhYjluqYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJ+mHjeimgeW6pjwtPuW9semfv+W6puOCkue1kOOBs+OBpOOBkeOBn+mam+OBruWEquWFiOW6pue1kOaenOOCkueuoeeQhuOBmeOCiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAn5YSq5YWI6aCG5L2N44Gu5Ymy44KK5b2T44GmJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAn44Kk44Oz44K344OH44Oz44OI6ZaT44Gu5pyA5bCP5pmC6ZaTJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAn6YeN6KaB5bqmJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DdXN0b21lclNlYXJjaAoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQQoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEtSW5mbyd9ID0gJ1NMQeaDheWgsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfmnIDntYLlpInmm7TmmYLliLsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAn5pyA57WC5aSJ5pu06ICFJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICdTTEHmg4XloLEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ+mWoumAo+OBmeOCi+OCteODvOODk+OCuSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZQoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2VQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1JbmZvJ30gPSAn44K144O844OT44K55oOF5aCxJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICfjgqTjg7Pjgrfjg4fjg7Pjg4jjga7nirbmhYsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAn6Zai6YCj44GZ44KLU0xBJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ+OCteODvOODk+OCueaDheWgsSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAn44Kk44Oz44K344OH44Oz44OI44Gu54q25oWLJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICflhKrlhYjluqbjga7plqLpgKPmgKfjgpLnrqHnkIYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNsYSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzbGEgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIGxpbmsgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIG9mIGxpbmsgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9tc19JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Om1zX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpZiBrZXBhZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAnVmVyZsO8Z2JhcmtlaXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICdCYWNrZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ0RpaHVuZ2thbiBrZXBhZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBTdGF0ZSd9ID0gJ1N0YXR1cyBzZWRpYSBhZGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ0RlbW9zdHJhc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ0JlcmdhbnR1bmcga2VwYWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICdQZW5nZ3VuYSBBa2hpciBTZXJ2aXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAnS2VzaWxhcGFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ0Zyb250ZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdQZW5ndXJ1c2FuIElUJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnT3BlcmFzaSBJVCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdLZXNhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ1Rlcm1hc3VrJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnU2VsYWluJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICdTZWJhaGFnaWFuIGRhcmlwYWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9qZWsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ01hc2EgU2VtYnVoYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICdCZXJrYWl0YW4ga2VwYWRhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ01lbGFwb3JrYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAnRGlwZXJsdWthbiB1bnR1ayc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICdrYWRhciBSZXNvbHVzaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnTWFzYSBUaW5kYWsgYmFsYXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnTGloYXQgc2VtdWxhIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnTGloYXQgc2VtdWxhIHNlcnZpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICdLYXdhc2FuLVNlcnZpcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFpbmluZyd9ID0gJ0xhdGloYW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnNha3NpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ1VuZGVycGlubmluZyBDb250cmFjdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhbGxvY2F0aW9uJ30gPSAnTWVuZW1wYXRrYW4gc2VtdWxhJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdLcml0aWthbCA8LT4gS2VzYW4gPC0+IEtldXRhbWFhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSA8LT4gSW1wYWN0Lid9ID0KICAgICAgICAnTWVuZ3VydXNrYW4gaGFzaWwga2V1dGFtYWFuIGtyaXRpa2FsIGdhYnVuZ2FuIDwtPiBLZXNhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ0JlcmlrYW4ga2V1dGFtYWFuJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnTWFzYSBtaW5pbWEgYW50YXJhIGluY2lkZW50JzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNlcnZpY2UKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5J30gPSAnS3JpdGlrYWwnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUN1c3RvbWVyU2VhcmNoCgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBCgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQS1JbmZvJ30gPSAnU0xBLUluZm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnZGl1YmFoIGJ1YXQga2FsaSB0ZXJha2hpcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdLYWxpIHRlcmFraGlyIGRpdWJhaCBzZW1hc2EnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ1NMQS1JbmZvcm1hc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ1BlcmtoaWRtYXRhbiBCZXJzZWt1dHUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2UKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtSW5mbyd9ID0gJ0luZm8gUGVya2hpZG1hdGFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdJbnNpZGVuIHN0YXR1cyBzZW1hc2EnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnU0xBIEJlcnNla3V0dSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hc2kgU2VydmlzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICdLZWphZGlhbiBrZWFkYWFuIHNlbWFzYSc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnRnJvbnRlbmQgcGVuZGFmdGFyYW4gbW9kdWwgdW50dWsga29uZmlndXJhc2kgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgZGkga2F3YXNhbiBhZG1pbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kIHBlbmRhZnRhcmFuIG1vZHVsIGJhZ2kgb2JqZWsgQWdlbnRJVFNNU0xBIGRhbGFtIGFudGFyYSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kIHBlbmRhZnRhcmFuIG1vZHVsIHVudHVrIG9iamVrIEFnZW50SVRTTVNMQVByaW50IGRhbGFtIGFudGFyYSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRnJvbnRlbmQgcGVuZGFmdGFyYW4gbW9kdWwgdW50dWsgb2JqZWsgQWdlbnRJVFNNU0xBWm9vbSBkYWxhbSBhbnRhcmEgbXVrYSBlamVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kIHBlbmRhZnRhcmFuIG1vZHVsIGJhZ2kgb2JqZWsgQWdlbnRJVFNNU2VydmljZSBkYWxhbSBhbnRhcmEgbXVrYSBlamVuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnRnJvbnRlbmQgcGVuZGFmdGFyYW4gbW9kdWwgdW50dWsgb2JqZWsgQWdlbnRJVFNNU2VydmljZVByaW50IGRhbGFtIGFudGFyYSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ0Zyb250ZW5kIHBlbmRhZnRhcmFuIG1vZHVsIHVudHVrIG9iamVrIEFnZW50SVRTTVNlcnZpY2Vab29tIGRhbGFtIGFudGFyYSBtdWthIGVqZW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnTWVuZ3VydXMgbWF0cmlrcyBrZXV0YW1hYW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWwgdW50dWsgbWVudW5qdWtrYW4ga2VtYmFsaSBwYXV0YW4gZGFsYW0gbWVudSBwZXJraGlkbWF0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzbGEgbWVudS4nfSA9ICdNb2R1bCB1bnR1ayBtZW51bmp1a2thbiBrZW1iYWxpIHBhdXRhbiBkYWxhbSBtZW51IFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWwgdW50dWsgbWVudW5qdWtrYW4gcGF1dGFuIGNldGFrIGRhbGFtIG1lbnUgcGVya2hpZG1hdGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNsYSBtZW51Lid9ID0gJ01vZHVsIHVudHVrIG1lbnVuanVra2FuIHBhdXRhbiBjZXRhayBkYWxhbSBtZW51IFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIGxpbmsgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWwgdW50dWsgbWVudW5qdWtrYW4gcGF1dGFuIHBhdXRhbiBkYWxhbSBtZW51IHBlcmtoaWRtYXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJ1BhcmFtZXRlciB1bnR1ayBrZWFkYWFuIGluc2lkZW4gbWVtYW5kYW5na2FuIGtldXRhbWFhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIG9mIGxpbmsgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLid9ID0KICAgICAgICAnVGV0YXBrYW4gamVuaXMgbGluayB5YW5nIGJvbGVoIGRpZ3VuYWthbiB1bnR1ayBtZW5naXJhIGtlYWRhYW4gaW5zaWRlbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdVYmFoIElUU01cJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIFwnVGlrZXQgXCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdOb3JtYWxcJyAgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdDb25maWdJdGVtIElUU00gXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ0ZBUVwnIG9iamVrIG1lbmdndW5ha2FuIFwnTm9ybWFsXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ0NvbmZpZ0l0ZW0gSVRTTSBcJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIFwnRkFRXCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdJYnUgQmFwYSBBbmFrIEFuYWtcJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdDb25maWdJdGVtIElUU00gXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ0ZBUVwnIG9iamVrIG1lbmdndW5ha2FuIFwnUmVsZXZhbiBVbnR1a1wnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdDb25maWdJdGVtIElUU00gXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ1BlcmtoaWRtYXRhblwnIG9iamVrIG1lbmdndW5ha2FuIFwnQWx0ZXJuYXRpdmVUb1wnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ0NvbmZpZ0l0ZW0gSVRTTSBcJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIFwnUGVya2hpZG1hdGFuXCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdCZXJnYW50dW5nIFBhZGFcJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnQ29uZmlnSXRlbSBJVFNNXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ1BlcmtoaWRtYXRhblwnIG9iamVrIG1lbmdndW5ha2FuIFwnUmVsZXZhbiBVbnR1a1wnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ0NvbmZpZ0l0ZW0gSVRTTVwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdUaWtldFwnIG9iamVrIG1lbmdndW5ha2FuIFwnQWx0ZXJuYXRpZiBVbnR1a1wnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnQ29uZmlnSXRlbSBJVFNNXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ1Rpa2V0IFwnIG9iamVrIG1lbmdndW5ha2FuIFwnQmVyZ2FudHVuZyBQYWRhXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnQ29uZmlnSXRlbSBJVFNNXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ1Rpa2V0XCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdSZWxldmFuIFVudHVrXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdDb25maWdJdGVtIElUU01cJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIGxhaW4gXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVrIG1lbmdndW5ha2FuIFwnQWx0ZXJuYXRpdmVUb1wnIHBhdXRhbiBqZW5pcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ0NvbmZpZ0l0ZW0gSVRTTVwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gbGFpbiBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdDb25uZWN0ZWRUb1wnIHBhdXRhbiBqZW5pcy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdDb25maWdJdGVtIElUU01cJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIGxhaW4gXCdDb25maWdJdGVtIElUU01cJyBvYmplayBtZW5nZ3VuYWthbiBcJ0JlcmdhbnR1bmcgUGFkYVwnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ0NvbmZpZ0l0ZW0gSVRTTVwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gbGFpbi1sYWluIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplayBtZW5nZ3VuYWthbiBcJ1Rlcm1hc3VrXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdJVFNNIENvbmZpZ0l0ZW1cJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIG9iamVrIFwnQ29uZmlnSXRlbSBJVFNNXCdsYWluIHlhbmcgbWVuZ2d1bmFrYW4gXCdSZWxldmFuIFVudHVrXCcgeWFuZyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdQZXJpbnRhaCBLZXJqYSBJVFNNIFwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdDb25maWdJdGVtIElUU01cJ29iamVrIG1lbmdndW5ha2FuIFwnQmVyZ2FudHVuZyBQYWRhXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIFwnUGVyaW50YWggS2VyamEgSVRTTSBcJyBvYmplayBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIFwnQ29uZmlnSXRlbSBJVFNNXCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdOb3JtYWxcJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ1BlcmludGFoIEtlcmphIElUU00gXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ1BlcmtoaWRtYXRhblwnIG9iamVrIG1lbmdndW5ha2FuIFwnQmVyZ2FudHVuZyBQYWRhXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBiYWhhd2EgXCdQZXJpbnRhaCBLZXJqYSBJVFNNIFwnIG9iamVrIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdQZXJraGlkbWF0YW4gXCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdOb3JtYWwgXCcgamVuaXMgcGF1dGFuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBcJ1BlcmludGFoIEtlcmphIElUU00gXCcgb2JqZWsgYm9sZWggZGlrYWl0a2FuIGRlbmdhbiBcJ1Rpa2V0XCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdOb3JtYWxcJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIG9iamVrIFwnUGVya2hpZG1hdGFuIFwnIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdGQVFcJyBvYmplayBtZW5nZ3VuYWthbiBcJ05vcm1hbFwnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGJhaGF3YSBvYmplayBcJ1BlcmtoaWRtYXRhbiBcJyBib2xlaCBkaWthaXRrYW4gZGVuZ2FuIFwnRkFRXCcgb2JqZWsgbWVuZ2d1bmFrYW4gXCdJYnUgQmFwYSBLYW5hay1rYW5ha1wnIGplbmlzIHBhdXRhbi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gYmFoYXdhIG9iamVrIFwnUGVya2hpZG1hdGFuIFwnIGJvbGVoIGRpa2FpdGthbiBkZW5nYW4gXCdGQVFcJyBvYmplayBtZW5nZ3VuYWthbiBcJ1JlbGV2YW4gVW50dWtcJyBqZW5pcyBwYXV0YW4uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBqZW5pcyBwYXV0YW4gXCdBbHRlcm5hdGl2ZVRvXCcuIEppa2EgbmFtYSBzdW1iZXIgZGFuIG5hbWEgc2FzYXJhbiBtZW5nYW5kdW5naSBuaWxhaSB5YW5nIHNhbWEsIHBhdXRhbiB5YW5nIHRlcmhhc2lsIGFkYWxhaCBidWthbiBzYXR1IGFyYWguIEppa2EgbmlsYWkgYmVyYmV6YSwgcGF1dGFuIHlhbmcgdGVyaGFzaWwgYWRhbGFoIHBhdXRhbiBiZXJhcmFoLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnVGV0YXBhbiBpbmkgbWVudGFrcmlma2FuIGplbmlzIHBhdXRhbiBcJ0Nvbm5lY3RlZFRvXCcuIEppa2EgbmFtYSBzdW1iZXIgZGFuIG5hbWEgc2FzYXJhbiBtZW5nYW5kdW5naSBuaWxhaSB5YW5nIHNhbWEsIHBhdXRhbiB5YW5nIHRlcmhhc2lsIGFkYWxhaCBidWthbiBzYXR1IGFyYWguIEppa2EgbmlsYWkgYmVyYmV6YSwgcGF1dGFuIHlhbmcgdGVyaGFzaWwgYWRhbGFoIHBhdXRhbiBiZXJhcmFoLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBqZW5pcyBwYXV0YW4gXCdCZXJnYW50dW5nIFBhZGFcJy4gSmlrYSBuYW1hIHN1bWJlciBkYW4gbmFtYSBzYXNhcmFuIG1lbmdhbmR1bmdpIG5pbGFpIHlhbmcgc2FtYSwgcGF1dGFuIHlhbmcgdGVyaGFzaWwgYWRhbGFoIGJ1a2FuIHNhdHUgYXJhaC4gSmlrYSBuaWxhaSBiZXJiZXphLCBwYXV0YW4geWFuZyB0ZXJoYXNpbCBhZGFsYWggcGF1dGFuIGJlcmFyYWguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdUZXRhcGFuIGluaSBtZW50YWtyaWZrYW4gamVuaXMgcGF1dGFuIFwnVGVybWFzdWtcJy4gSmlrYSBuYW1hIHN1bWJlciBkYW4gbmFtYSBzYXNhcmFuIG1lbmdhbmR1bmdpIG5pbGFpIHlhbmcgc2FtYSwgcGF1dGFuIHlhbmcgdGVyaGFzaWwgYWRhbGFoIGJ1a2FuIHNhdHUgYXJhaC4gSmlrYSBuaWxhaSBiZXJiZXphLCBwYXV0YW4geWFuZyB0ZXJoYXNpbCBhZGFsYWggcGF1dGFuIGJlcmFyYWguJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ1RldGFwYW4gaW5pIG1lbnRha3JpZmthbiBqZW5pcyBwYXV0YW4gXCdSZWxldmFudFRvXCcuIEppa2EgbmFtYSBzdW1iZXIgZGFuIG5hbWEgc2FzYXJhbiBtZW5nYW5kdW5naSBuaWxhaSB5YW5nIHNhbWEsIHBhdXRhbiB5YW5nIHRlcmhhc2lsIGFkYWxhaCBidWthbiBzYXR1IGFyYWguIEppa2EgbmlsYWkgYmVyYmV6YSwgcGF1dGFuIHlhbmcgdGVyaGFzaWwgYWRhbGFoIHBhdXRhbiBiZXJhcmFoLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICdMZWJhciBrYXdhc2FuIHRla3MgSVRTTS4nOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9uYl9OT19JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Om5iX05PX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpdiB0aWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXZhaWxhYmlsaXR5J30gPSAnVGlsZ2plbmdlbGlnaGV0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAnQmFja2VuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDb25uZWN0ZWQgdG8nfSA9ICdLb2JsZXQgdGlsJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgU3RhdGUnfSA9ICdOw6V2w6ZyZW5kZSB0aWxzdGFuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnRGVtb25zdHJhc2pvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAnQXZoZW5nZXIgYXYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ1NsdXR0YnJ1a2VyLXRqZW5lc3RlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ0ZlaWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAnRnJvbnRlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ0lULWxlZGVsc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdJVC1kcmlmdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdPbWZhbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICdIZW5kZWxzZXN0aWxzdGFuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ0lua2x1ZGVyZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdBbmRyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnRGVsIGF2JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9zamVrdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAnR2plbm9wcHJldG5pbmdzdGlkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnUmVsZXZhbnQgZm9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ1JhcHBvcnRlcmluZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICdQw6VrcmV2ZCBmb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnT3BwcmV0dGluZ3NyYXRpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNwb25zZSBUaW1lJ30gPSAnUmVzcG9uc3RpZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICdTTEEtb3ZlcnNpa3QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ1RqZW5lc3RlLW92ZXJzaWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ1RqZW5lc3Rlb21yw6VkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFpbmluZyd9ID0gJ1RyZW5pbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnNha3Nqb25lcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICdVbmRlcmxpZ2dlbmRlIGtvbnRyYWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FsbG9jYXRpb24nfSA9ICd0aWxkZWxpbmcnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluSVRTTUNJUEFsbG9jYXRlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSA8LT4gSW1wYWN0IDwtPiBQcmlvcml0eSd9ID0gJ0tyaXRpa2FsaXRldCA8LT4gT21mYW5nIDwtPiBQcmlvcml0ZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkgPC0+IEltcGFjdC4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnVGlsZGVsaW5nIGF2IHByaW9yaXRldCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ01pbmltdW1zdGlkIG1lbGxvbSBIZW5kZWxzZXInOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdLcml0aWthbGl0ZXQnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUN1c3RvbWVyU2VhcmNoCgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBCgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQS1JbmZvJ30gPSAnU0xBLWluZm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnU2lzdCBlbmRyZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkIGJ5J30gPSAnU2lzdCBlbmRyZXQgYXYnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFzam9uIG9tIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAnVGlsa255dHRlZGUgdGplbmVzdGVyJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlCgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUluZm8nfSA9ICdUamVuZXN0ZS1pbmZvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdUaWxzdGFuZCBww6UgbsOldsOmcmVuZGUgaGVuZGVsc2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnVGlsa255dHRlZGUgU0xBZXInOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2Vab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYXNqb24gb20gVGplbmVzdGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJ1RpbHN0YW5kIHDDpSBuw6V2w6ZyZW5kZSBoZW5kZWxzZSc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnUmVnaXN0cmVyaW5nIGF2IGZyb250ZW5kLW1vZHVsIGZvciBrb25maWd1cmFzam9uIGF2IEFkbWluSVRTTUNJUEFsbG9jYXRlIGkgYWRtaW4tb21yw6VkZXQuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RyZXJpbmcgYXYgZnJvbnRlbmQtbW9kdWwgZm9yIEFnZW50SVRTTVNMQS1vYmpla3RldCBpIHNha3NiZWhhbmRsZXItZGVsZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cmVyaW5nIGF2IGZyb250ZW5kLW1vZHVsIGZvciBBZ2VudElUU01TTEFQcmludC1vYmpla3RldCBpIHNha3NiZWhhbmRsZXItZGVsZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RyZXJpbmcgYXYgZnJvbnRlbmQtbW9kdWwgZm9yIEFnZW50SVRTTVNMQVpvb20tb2JqZWt0ZXQgaSBzYWtzYmVoYW5kbGVyLWRlbGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cmVyaW5nIGF2IGZyb250ZW5kLW1vZHVsIGZvciBBZ2VudElUU01TZXJ2aWNlLW9iamVrdGV0IGkgc2Frc2JlaGFuZGxlci1kZWxlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnUmVnaXN0cmVyaW5nIGF2IGZyb250ZW5kLW1vZHVsIGZvciBBZ2VudElUU01TZXJ2aWNlUHJpbnQtb2JqZWt0ZXQgaSBzYWtzYmVoYW5kbGVyLWRlbGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJlcmluZyBhdiBmcm9udGVuZC1tb2R1bCBmb3IgQWdlbnRJVFNNU2VydmljZVpvb20tb2JqZWt0ZXQgaSBzYWtzYmVoYW5kbGVyLWRlbGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnQWRtaW5pc3Ryw6lyIHByaW9yaXRldHNtYXRyaXNlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWwgc29tIHZpc2VyIHRpbGJha2UtbGVua2VuIGkgdGplbmVzdGVtZW55ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNsYSBtZW51Lid9ID0gJ01vZHVsIHNvbSB2aXNlciB0aWxiYWtlLWxlbmtlbiBpIFNMQS1tZW55ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWwgc29tIHZpc2VyIHNrcml2LXV0LWxlbmtlbiBpIHRqZW5lc3RlbWVueWVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnTW9kdWwgc29tIHZpc2VyIHNrcml2LXV0LWxlbmtlbiBpIFNMQS1tZW55ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIGxpbmsgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTW9kdWwgc29tIHZpc2VyIGxlbmtlLWxlbmtlbiBpIHRqZW5lc3RlLW1lbnllbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAnUGFyYW1ldHJlIGZvciBoZW5kZWxzZXN0aWxzdGFuZGVyIGkgdmFsZ3Zpc25pbmdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgb2YgbGluayB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuJ30gPQogICAgICAgICdWZWxnIHR5cGUgbGVua2Ugc29tIHNrYWwgYnJ1a2VzIGZvciDDpSByZWduZSB1dCBoZW5kZWxzZXN0aWxzdGFuZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQ29ubmVjdGVkVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdEZXBlbmRzT25cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdJbmNsdWRlc1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ1JlbGV2YW50VG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1dpZHRoIG9mIElUU00gdGV4dGFyZWFzLid9ID0gJ0JyZWRkZSBww6UgSVRTTSBzaW5lIHRla3N0b21yw6VkZXIuJzsKCiAgICAjCiAgICAjIE9CU09MRVRFIEVOVFJJRVMgRk9SIFJFRkVSRU5DRSwgRE8gTk9UIFRSQU5TTEFURSEKICAgICMKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9ubF9JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6Om5sX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpZWYgdm9vcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdCZXNjaGlrYmFhcmhlaWQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICdCYWNrZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ1ZlcmJvbmRlbiBtZXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBTdGF0ZSd9ID0gJ0h1aWRpZ2Ugc3RhdHVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlbW9uc3RyYXRpb24nfSA9ICdEZW1vbnN0cmF0aW9uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdBZmhhbmtlbGlqayB2YW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ0VpbmRnZWJydWlrZXIgc2VydmljZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdGb3V0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAnRnJvbnRlbmQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ0lUIE1hbmFnZW1lbnQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdJVCBPcGVyYXRpb25zJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ0ltcGFjdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ0luY2lkZW50IHN0YXR1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ0JldmF0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J090aGVyJ30gPSAnT3ZlcmlnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICdPbmRlcmRlZWwgdmFuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9qZWN0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICdIZXJzdGVsdGlqZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ1ZhbiBiZWxhbmcgdm9vcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdSYXBwb3J0YWdlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ0Jlbm9kaWdkIHZvb3InOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzb2x1dGlvbiBSYXRlJ30gPSAnT3Bsb3N0aWpkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICdSZXNwb25zaWV0aWpkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ1NMQS1vdmVyemljaHQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ1NlcnZpY2Utb3ZlcnppY2h0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UtQXJlYSd9ID0gJ1NlcnZpY2UtQXJlYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFpbmluZyd9ID0gJ1RyYWluaW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYW5zYWN0aW9ucyd9ID0gJ1RyYW5zYWN0aWVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ1VuZGVycGlubmluZyBDb250cmFjdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhbGxvY2F0aW9uJ30gPSAndG9la2VubmVuJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdVcmdlbnRpZSA8LT4gSW1wYWN0IDwtPiBQcmlvcml0ZWl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IDwtPiBJbXBhY3QuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ1ByaW9yaXRlaXQgdG9la2VubmVuJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAnTWluaW11bXRpamQgdHVzc2VuIGluY2lkZW50ZW4nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdVcmdlbnRpZSc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNQ3VzdG9tZXJTZWFyY2gKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEEKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBLUluZm8nfSA9ICdTTEEgSW5mb3JtYXRpZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICdMYWF0c3QgYWFuZ2VwYXN0IG9wJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ0xhYXRzdCBhYW5nZXBhc3QgZG9vcic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnU0xBIEluZm9ybWF0aWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ0JpamJlaG9yZW5kZSBTZXJ2aWNlcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZQoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2VQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1JbmZvJ30gPSAnU2VydmljZSBJbmZvcm1hdGllJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdIdWlkaWdlIGluY2lkZW50IHN0YXR1cyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICdCaWpiZWhvcmVuZGUgU0xBcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICdTZXJ2aWNlIEluZm9ybWF0aWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJ0h1aWRpZ2UgaW5jaWRlbnQtc3RhdHVzJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICdCZWhlZXIgcHJpb3JpdGVpdGVuLW1hdHJpeCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNsYSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgbGluayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgb2YgbGluayB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICcnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9wbF9JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnBsX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXR5d2EgZGxhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F2YWlsYWJpbGl0eSd9ID0gJ0Rvc3TEmXBub8WbxIcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICdCYWNrZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Nvbm5lY3RlZCB0byd9ID0gJ1BvZMWCxIVjem9uZSBkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IFN0YXRlJ30gPSAnQWt0dWFsbnkgc3Rhbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnRGVtb25zdHJhY2phJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlcGVuZHMgb24nfSA9ICdaYWxlxbxuZSBvZCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAnVXPFgnVnYSB1xbx5dGtvd25pa2Ega2/FhGNvd2Vnbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdCxYLEmWR5JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ0Zyb250ZW5kJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdJVCB6YXJ6xIVkemFuaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdJVCBvcGVyYWN5am5lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ1dwxYJ5dyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ1N0YW4gemRhcnplbmlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAnWmF3aWVyYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ0lubmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ0N6xJnFm8SHJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Byb2plY3QnfSA9ICdQcm9qZWt0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICdDemFzIG9kenlza2FuaWEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICdPZHBvd2llZG5pZSBkbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdSYXBvcnRvd2FuaWUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAnUG90cnplYm5lIGRvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ0N6YXMgcm96d2nEhXphbmlhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICdDemFzIG9kcG93aWVkemknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAnUHJ6ZWdsxIVkIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAnUHJ6ZWdsxIVkIHVzxYJ1Z2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnU2VrY2phIHNlcndpc293YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFpbmluZyd9ID0gJ1RyZW5pbmcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnNha2NqZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydVbmRlcnBpbm5pbmcgQ29udHJhY3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYWxsb2NhdGlvbid9ID0gJ2Fsb2thY2phJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdLcnl0eWN6bm/Fm8SHIDwtPiBXcMWCeXcgPC0+IFByaW9yeXRldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSA8LT4gSW1wYWN0Lid9ID0KICAgICAgICAnWmFyesSFZHphbmllIHdhcnRvxZtjacSFIHByaW9yeXRldHUgZGxhIGtvbWJpbmFjamkgS3J5dHljem5vxZvEhyA8LT4gV3DFgnl3Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcmlvcml0eSBhbGxvY2F0aW9uJ30gPSAnQWxva2FjamEgcHJpb3J5dGV0dSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ01pbmltYWxueSBjemFzIG1pxJlkenkgemRhcnplbmlhbWknOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdLcnl0eWN6bm/Fm8SHJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DdXN0b21lclNlYXJjaAoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQQoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEtSW5mbyd9ID0gJ1NMQS1JbmZvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ09zdGF0bmlhIHptaWFuYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICdPc3RhdG5pbyB6bWllbmlvbmUgcHJ6ZXonOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFjamUgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdQb8WCxIVjem9uZSB1c8WCdWdpJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlCgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUluZm8nfSA9ICdVc8WCdWdhLUluZm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0FrdHVhbG55IHN0YW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnUG/FgsSFY3pvbmUgU0xBJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWFjamUgbyB1c8WCdWR6ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnQWt0dWFsbnkgc3Rhbic7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Vab29tIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnWmFyesSFZHphaiBtYWNpZXJ6xIUgcHJpb3J5dGV0w7N3Lic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNsYSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgbGluayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgb2YgbGluayB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNoYW5nZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0luY2x1ZGVzXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnRGVwZW5kc09uXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdSZWxldmFudFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaWR0aCBvZiBJVFNNIHRleHRhcmVhcy4nfSA9ICdTemVyb2tvxZvEhyBvYnN6YXLDs3cgdGVrc3Rvd3ljaCBJVFNNLic7CgogICAgIwogICAgIyBPQlNPTEVURSBFTlRSSUVTIEZPUiBSRUZFUkVOQ0UsIERPIE5PVCBUUkFOU0xBVEUhCiAgICAjCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBvZiB0aGUgQ0lQIG1hdHJpeC4nfSA9ICdBZG1pbmlzdHJhY2phIG1hY2llcnrEhSBLV1AuJzsKCn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9wdF9CUl9JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnB0X0JSX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpdmEgYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdEaXNwb25pYmlsaWRhZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAnQ29uZWN0YWRvIGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBBdHVhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnRGVtb25zdHJhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ0RlcGVuZGUgZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ1NlcnZpw6dvIGEgVXN1w6FyaW8gRmluYWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAnRXJyb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnQgRW5kJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE1hbmFnZW1lbnQnfSA9ICdHZXJlbmNpYW1lbnRvIGRlIFRJJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0lUIE9wZXJhdGlvbmFsJ30gPSAnT3BlcmHDp8O1ZXMgZGUgVEknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnSW1wYWN0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNpZGVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBkZSBJbmNpZGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICdJbmNsdWknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICdPdXRybyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnUGFydGUgZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJvamVjdCd9ID0gJ1Byb2pldG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVjb3ZlcnkgVGltZSd9ID0gJ1RlbXBvIGRlIFJlY3VwZXJhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICdSZWxldmFudGUgYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXBvcnRpbmcnfSA9ICdSZWxhdMOzcmlvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ1JlcXVpc2l0YWRvIHBvcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICdUYXhhIGRlIFJlc29sdcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc3BvbnNlIFRpbWUnfSA9ICdUZW1wbyBkZSBSZXNwb3N0YSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICdWaXPDo28gR2VyYWwgZGUgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgT3ZlcnZpZXcnfSA9ICdWaXPDo28gR2VyYWwgZGUgU2VydmnDp28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAnw4FyZWEgU2VydmnDp28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhaW5pbmcnfSA9ICdUcmVpbmFtZW50byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICdUcmFuc2HDp8O1ZXMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVW5kZXJwaW5uaW5nIENvbnRyYWN0J30gPSAnQ29udHJhdG8gY29tIFRlcmNlaXJvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhbGxvY2F0aW9uJ30gPSAnYXRyaWJ1acOnw6NvJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICdDcml0aWNhbGlkYWRlIDwtPiBJbXBhY3RvIDwtPiBQcmlvcmlkYWRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IDwtPiBJbXBhY3QuJ30gPQogICAgICAgICdHZXJlbmNpYXIgYSBwcmlvcmlkYWRlIHJlc3VsdGFudGUgZGEgY29tYmluYcOnw6NvIENyaXRpY2FsaWRhZGUgPC0+IEltcGFjdG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICdBdHJpYnVpw6fDo28gZGUgcHJpb3JpZGFkZSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ1RlbXBvIE3DrW5pbW8gZW50cmUgSW5jaWRlbnRlcyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ0NyaXRpY2FsaWRhZGUnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUN1c3RvbWVyU2VhcmNoCgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBCgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQS1JbmZvJ30gPSAnSW5mb3JtYcOnw6NvIGRvIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQnfSA9ICfDmmx0aW1hIGFsdGVyYcOnw6NvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ8OabHRpbWEgYWx0ZXJhw6fDo28gcG9yJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hw6fDo28gZGUgU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU2VydmljZXMnfSA9ICdTZXJ2acOnb3MgQXNzb2NpYWRvcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZQoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNlcnZpY2VQcmludAogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1JbmZvJ30gPSAnSW5mb3JtYcOnw6NvIGRlIHNlcnZpw6dvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgSW5jaWRlbnQgU3RhdGUnfSA9ICdFc3RhZG8gQXR1YWwgZGUgSW5jaWRlbnRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Fzc29jaWF0ZWQgU0xBcyd9ID0gJ1NMQXMgQXNzb2NpYWRvcyc7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcnZpY2UgSW5mb3JtYXRpb24nfSA9ICdJbmZvcm1hw6fDo28gZGUgc2VydmnDp28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBpbmNpZGVudCBzdGF0ZSd9ID0gJ0VzdGFkbyBBdHVhbCBkZSBJbmNpZGVudGUnOwoKICAgICMgU3lzQ29uZmlnCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJvIGRlIG3Ds2R1bG8gZGUgaW50ZXJmYWNlIHBhcmEgYSBjb25maWd1cmHDp8OjbyBBZG1pbklUU01DSVBBbGxvY2F0ZSBuYSDDoXJlYSBhZG1pbmlzdHJhdGl2YS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJvIGRlIG3Ds2R1bG8gZGUgaW50ZXJmYWNlIHBhcmEgbyBvYmpldG8gQWdlbnRJVFNNU0xBIG5hIGludGVyZmFjZSBkZSBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEFQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJvIGRlIG3Ds2R1bG8gZGUgaW50ZXJmYWNlIHBhcmEgbyBvYmpldG8gQWdlbnRJVFNNU0xBUHJpbnQgbmEgaW50ZXJmYWNlIGRlIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RybyBkZSBtw7NkdWxvIGRlIGludGVyZmFjZSBwYXJhIG8gb2JqZXRvIEFnZW50SVRTTVNMQVpvb20gbmEgaW50ZXJmYWNlIGRlIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICdSZWdpc3RybyBkZSBtw7NkdWxvIGRlIGludGVyZmFjZSBwYXJhIG8gb2JqZXRvIEFnZW50SVRTTVNlcnZpY2UgbmEgaW50ZXJmYWNlIGRlIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJvIGRlIG3Ds2R1bG8gZGUgaW50ZXJmYWNlIHBhcmEgbyBvYmpldG8gQWdlbnRJVFNNU2VydmljZVByaW50IG5hIGludGVyZmFjZSBkZSBhdGVuZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJ1JlZ2lzdHJvIGRlIG3Ds2R1bG8gZGUgaW50ZXJmYWNlIHBhcmEgbyBvYmpldG8gQWdlbnRJVFNNU2VydmljZVpvb20gbmEgaW50ZXJmYWNlIGRlIGF0ZW5kZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICdHZXJlbmNpYXIgbWF0cml6IGRlIHByaW9yaWRhZGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgbyBsaW5rIHZvbHRhciBubyBtZW51IHNlcnZpw6dvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgbyBsaW5rIHZvbHRhciBubyBtZW51IFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgbyBsaW5rIGltcHJpbWlyIG5vIG1lbnUgc2VydmnDp28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2xhIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgbyBsaW5rIGltcHJpbWlyIG5vIG1lbnUgU0xBLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgbGluayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICdNw7NkdWxvIHBhcmEgbW9zdHJhciBvIGxpbmsgYXNzb2NpYXIgbm8gbWVudSBzZXJ2acOnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFyYW1ldGVycyBmb3IgdGhlIGluY2lkZW50IHN0YXRlcyBpbiB0aGUgcHJlZmVyZW5jZSB2aWV3Lid9ID0gJ1BhcsOibWV0cm9zIHBhcmEgb3MgZXN0YWRvcyBkZSBpbmNpZGVudGUgbmEgdmlzw6NvIGRlIHByZWZlcsOqbmNpYXMuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NldCB0aGUgdHlwZSBvZiBsaW5rIHRvIGJlIHVzZWQgdG8gY2FsY3VsYXRlIHRoZSBpbmNpZGVudCBzdGF0ZS4nfSA9CiAgICAgICAgJ0RlZmluaXIgbyB0aXBvIGRlIGxpbmsgYSBzZXIgdXRpbGl6YWRvIHBhcmEgY2FsY3VsYXIgbyBlc3RhZG8gZGUgaW5jaWRlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ011ZGFuw6dhSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0NoYW1hZG9cJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0ZBUVwnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdGQVFcJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ1BhaUZpbGhvXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0ZBUVwnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnUmVsZXZhbnRlIGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ1NlcnZpw6dvXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdBbHRlcm5hdGl2YSBhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ1NlcnZpw6dvXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdEZXBlbmRlIGRlXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdTZXJ2acOnb1wnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnUmVsZXZhbnRlIGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnQ2hhbWFkb1wnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnQWx0ZXJuYXRpdmEgYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0NoYW1hZG9cJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ0RlcGVuZGUgZGVcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnQ2hhbWFkb1wnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnUmVsZXZhbnRlIGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG91dHJvcyBvYmpldG9zIFwnSXRlbUNvbmZpZ0lUU01cJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ0FsdGVybmF0aXZhIGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0Nvbm5lY3RlZFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvdXRyb3Mgb2JqZXRvcyBcJ0l0ZW1Db25maWdJVFNNXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdDb25lY3RhZG8gYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvdXRyb3Mgb2JqZXRvcyBcJ0l0ZW1Db25maWdJVFNNXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdEZXBlbmRlIGRlXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb3V0cm9zIG9iamV0b3MgXCdJdGVtQ29uZmlnSVRTTVwnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnSW5jbHVpXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvdXRyb3Mgb2JqZXRvcyBcJ0l0ZW1Db25maWdJVFNNXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdSZWxldmFudGUgYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnT3JkZW1TZXJ2acOnb0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdJdGVtQ29uZmlnSVRTTVwnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnRGVwZW5kZSBkZVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnT3JkZW1TZXJ2acOnb0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdJdGVtQ29uZmlnSVRTTVwnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnRXNzYSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ09yZGVtU2VydmnDp29JVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnU2VydmnDp29cJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ0RlcGVuZGUgZGVcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnT3JkZW1TZXJ2acOnb0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdTZXJ2acOnb1wnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnT3JkZW1TZXJ2acOnb0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdDaGFtYWRvXCcgdXNhbmRvIG8gdGlwbyBkZSBhc3NvY2lhw6fDo28gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdTZXJ2acOnb1wnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0ZBUVwnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ0Vzc2EgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdTZXJ2acOnb1wnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0ZBUVwnIHVzYW5kbyBvIHRpcG8gZGUgYXNzb2NpYcOnw6NvIFwnUGFpRmlsaG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICdFc3NhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnU2VydmnDp29cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdGQVFcJyB1c2FuZG8gbyB0aXBvIGRlIGFzc29jaWHDp8OjbyBcJ1JlbGV2YW50ZSBhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIG8gdGlwbyBkZSBsaW5rIFwnQWx0ZXJuYXRpdmEgYVwnLiBTZSBvIG5vbWUgZGEgZm9udGUgZSBvIG5vbWUgZG8gYWx2byBjb250w6ptIG8gbWVzbW8gdmFsb3IsIGEgYXNzb2NpYcOnw6NvIHJlc3VsdGFudGUgw6kgbsOjby1kaXJlY2lvbmFsLiBTZSBvcyB2YWxvcmVzIHPDo28gZGlmZXJlbnRlcywgYSBhc3NvY2lhw6fDo28gcmVzdWx0YW50ZSDDqSB1bSBsaW5rIGRpcmVjaW9uYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBvIHRpcG8gZGUgbGluayBcJ0NvbmVjdGFkbyBhXCcuIFNlIG8gbm9tZSBkYSBmb250ZSBlIG8gbm9tZSBkbyBhbHZvIGNvbnTDqm0gbyBtZXNtbyB2YWxvciwgYSBhc3NvY2lhw6fDo28gcmVzdWx0YW50ZSDDqSBuw6NvLWRpcmVjaW9uYWwuIFNlIG9zIHZhbG9yZXMgc8OjbyBkaWZlcmVudGVzLCBhIGFzc29jaWHDp8OjbyByZXN1bHRhbnRlIMOpIHVtIGxpbmsgZGlyZWNpb25hbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBvIHRpcG8gZGUgbGluayBcJ0RlcGVuZGUgZGVcJy4gU2UgbyBub21lIGRhIGZvbnRlIGUgbyBub21lIGRvIGFsdm8gY29udMOqbSBvIG1lc21vIHZhbG9yLCBhIGFzc29jaWHDp8OjbyByZXN1bHRhbnRlIMOpIG7Do28tZGlyZWNpb25hbC4gU2Ugb3MgdmFsb3JlcyBzw6NvIGRpZmVyZW50ZXMsIGEgYXNzb2NpYcOnw6NvIHJlc3VsdGFudGUgw6kgdW0gbGluayBkaXJlY2lvbmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgbyB0aXBvIGRlIGxpbmsgXCdJbmNsdWlcJy4gU2UgbyBub21lIGRhIGZvbnRlIGUgbyBub21lIGRvIGFsdm8gY29udMOqbSBvIG1lc21vIHZhbG9yLCBhIGFzc29jaWHDp8OjbyByZXN1bHRhbnRlIMOpIG7Do28tZGlyZWNpb25hbC4gU2Ugb3MgdmFsb3JlcyBzw6NvIGRpZmVyZW50ZXMsIGEgYXNzb2NpYcOnw6NvIHJlc3VsdGFudGUgw6kgdW0gbGluayBkaXJlY2lvbmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBvIHRpcG8gZGUgbGluayBcJ1JlbGV2YW50ZSBhXCcuIFNlIG8gbm9tZSBkYSBmb250ZSBlIG8gbm9tZSBkbyBhbHZvIGNvbnTDqm0gbyBtZXNtbyB2YWxvciwgYSBhc3NvY2lhw6fDo28gcmVzdWx0YW50ZSDDqSBuw6NvLWRpcmVjaW9uYWwuIFNlIG9zIHZhbG9yZXMgc8OjbyBkaWZlcmVudGVzLCBhIGFzc29jaWHDp8OjbyByZXN1bHRhbnRlIMOpIHVtIGxpbmsgZGlyZWNpb25hbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnTsO6bWVybyBkZSBjYXJhY3RlcmVzIHBvciBsaW5oYSBlbSDDoXJlYXMgZGUgdGV4dG8gSVRTTS4nOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9wdF9QVF9JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDEyIEZDQ04gLSBSdWkgRnJhbmNpc2NvIDxydWkuZnJhbmNpc2NvQGZjY24ucHQ+CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnB0X1BUX0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAnQWx0ZXJuYXRpdmEgYSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICdEaXNwb25pYmlsQW50aWd1aWRhZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAnTGlnYWRvIGEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBBdHVhbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZW1vbnN0cmF0aW9uJ30gPSAnRGVtb25zdHJhw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ0RlcGVuZGUgZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRW5kIFVzZXIgU2VydmljZSd9ID0gJ1NlcnZpw6dvIGEgdXRpbGl6YWRvciBmaW5hbCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFcnJvcnMnfSA9ICdFcnJvcyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgTWFuYWdlbWVudCd9ID0gJ0dlc3TDo28gZGUgVEknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdPcGVyYcOnw7VlcyBkZSBUSSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICdJbXBhY3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAnRXN0YWRvIGRlIEluY2lkZW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ0luY2x1aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPdGhlcid9ID0gJ091dHJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcnQgb2YnfSA9ICdQYXJ0ZSBkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAnUHJvamV0byc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWNvdmVyeSBUaW1lJ30gPSAnVGVtcG8gZGUgUmVjdXBlcmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZWxldmFudCB0byd9ID0gJ1JlbGV2YW50ZSBwYXJhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcG9ydGluZyd9ID0gJ1JlbGF0w7NyaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVxdWlyZWQgZm9yJ30gPSAnUmVxdWlzaXRhZG8gcG9yJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ1RheGEgZGUgUmVzb2x1w6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ1RlbXBvIGRlIFJlc3Bvc3RhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBPdmVydmlldyd9ID0gJ1Zpc8OjbyBHZXJhbCBkZSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ1Zpc8OjbyBHZXJhbCBkZSBTZXJ2acOnbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICfDgXJlYSBTZXJ2acOnbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFpbmluZyd9ID0gJ0Zvcm1hw6fDo28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAnVHJhbnNhw6fDtWVzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ0NvbnRyYXRvIGNvbSBUZXJjZWlyb3MnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnYWxsb2NhdGlvbid9ID0gJ2F0cmlidWnDp8Ojbyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IDwtPiBJbXBhY3QgPC0+IFByaW9yaXR5J30gPSAnQ3JpdGljaWRhZGUgPC0+IEltcGFjdG8gPC0+IFByaW9yaWRhZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkgPC0+IEltcGFjdC4nfSA9ICdHZXJpciBhIFByaW9yaWRhZGUgcmVzdWx0YW50ZSBkYSBjb21iaW5hw6fDo28gQ3JpdGljaWRhZGUgPC0+IEltcGFjdG8uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICdBdHJpYnVpw6fDo28gZGUgUHJpb3JpZGFkZSc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TTEEKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyd9ID0gJ1RlbXBvIE3DrW5pbW8gZW50cmUgSW5jaWRlbnRlcyc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ0NyaXRpY2lkYWRlJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01DdXN0b21lclNlYXJjaAoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQQoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEtSW5mbyd9ID0gJ0luZm9ybWHDp8OjbyBkZSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAnw5psdGltYSBhbHRlcmHDp8Ojbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfDmmx0aW1hIGFsdGVyYcOnw6NvIHBvcic7CgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIEluZm9ybWF0aW9uJ30gPSAnSW5mb3JtYcOnw6NvIGRlIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaG93IG9yIGhpZGUgdGhlIGNvbnRlbnQuJ30gPSAnTW9zdHJhciBvdSBvY3VsdGFyIGNvbnRlw7pkby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTZXJ2aWNlcyd9ID0gJ1NlcnZpw6dvcyBBc3NvY2lhZG9zJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlCgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUluZm8nfSA9ICdJbmZvcm1hw6fDo28gZGUgc2VydmnDp28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ0VzdGFkbyBBdHVhbCBkZSBJbmNpZGVudGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNzb2NpYXRlZCBTTEFzJ30gPSAnU0xBcyBBc3NvY2lhZG9zJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ0luZm9ybWHDp8OjbyBkZSBzZXJ2acOnbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAnRXN0YWRvIEF0dWFsIGRlIEluY2lkZW50ZSc7CgogICAgIyBTeXNDb25maWcKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZG1pbklUU01DSVBBbGxvY2F0ZSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLid9ID0gJ1JlZ2lzdG8gZGUgbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBhIGNvbmZpZ3VyYcOnw6NvIEFkbWluSVRTTUNJUEFsbG9jYXRlIG5hIMOhcmVhIGRlIGdlc3TDo28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TTEEgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnUmVnaXN0byBkZSBtw7NkdWxvIGRlIGludGVyZmFjZSBwYXJhIG8gb2JqZXRvIEFnZW50SVRTTVNMQSBwYXJhIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ1JlZ2lzdG8gZGUgbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBvIG9iamV0byBBZ2VudElUU01TTEFQcmludCBwYXJhIGFnZW50ZS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPSAnUmVnaXN0byBkZSBtw7NkdWxvIGRlIGludGVyZmFjZSBwYXJhIG8gb2JqZXRvIEFnZW50SVRTTVNMQVpvb20gcGFyYSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ1JlZ2lzdG8gZGUgbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBvIG9iamV0byBBZ2VudElUU01TZXJ2aWNlIHBhcmEgYWdlbnRlLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVByaW50IG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLid9ID0gJ1JlZ2lzdG8gZGUgbcOzZHVsbyBkZSBpbnRlcmZhY2UgcGFyYSBvIG9iamV0byBBZ2VudElUU01TZXJ2aWNlUHJpbnQgcGFyYSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250ZW5kIG1vZHVsZSByZWdpc3RyYXRpb24gZm9yIHRoZSBBZ2VudElUU01TZXJ2aWNlWm9vbSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9ICdSZWdpc3RvIGRlIG3Ds2R1bG8gZGUgaW50ZXJmYWNlIHBhcmEgbyBvYmpldG8gQWdlbnRJVFNNU2VydmljZVpvb20gcGFyYSBhZ2VudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSBwcmlvcml0eSBtYXRyaXguJ30gPSAnR2VyaXIgYSBtYXRyaXogZGUgUHJpb3JpZGFkZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBiYWNrIGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJ03Ds2R1bG8gcGFyYSBtb3N0cmFyIG8gbGluayB2b2x0YXIgbm8gbWVudSBzZXJ2acOnby4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNsYSBtZW51Lid9ID0gJ03Ds2R1bG8gcGFyYSBtb3N0cmFyIG8gbGluayB2b2x0YXIgbm8gbWVudSBTTEEuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJ03Ds2R1bG8gcGFyYSBtb3N0cmFyIG8gbGluayBpbXByaW1pciBubyBtZW51IHNlcnZpw6dvLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNsYSBtZW51Lid9ID0gJ03Ds2R1bG8gcGFyYSBtb3N0cmFyIG8gbGluayBpbXByaW1pciBubyBtZW51IFNMQS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIGxpbmsgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnTcOzZHVsbyBwYXJhIG1vc3RyYXIgbyBsaW5rIGFzc29jaWFyIG5vIG1lbnUgc2VydmnDp28uJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICdQYXLDom1ldHJvcyBwYXJhIG9zIGVzdGFkb3MgZGUgaW5jaWRlbnRlIG5hcyBwcmVmZXLDqm5jaWFzLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXQgdGhlIHR5cGUgb2YgbGluayB0byBiZSB1c2VkIHRvIGNhbGN1bGF0ZSB0aGUgaW5jaWRlbnQgc3RhdGUuJ30gPSAnRGVmaW5pciBvIHRpcG8gZGUgbGluayBhIHNlciB1dGlsaXphZG8gcGFyYSBjYWxjdWxhciBvIGVzdGFkbyBkZSBpbmNpZGVudGUuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPSAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ011ZGFuw6dhSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ1RpY2tldFwnIGNvbSBsaWdhw6fDo28gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPSAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnRkFRXCcgY29tIGxpZ2HDp8OjbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0gJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0ZBUVwnIGNvbSBsaWdhw6fDo28gXCdQYWlGaWxob1wnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPSAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnRkFRXCcgY29tIGxpZ2HDp8OjbyBcJ1JlbGV2YW50ZSBwYXJhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPSAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnU2VydmnDp29cJyBjb20gbGlnYcOnw6NvIFwnQWx0ZXJuYXRpdmEgYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPSAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnU2VydmnDp29cJyBjb20gbGlnYcOnw6NvIFwnRGVwZW5kZSBkZVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0gJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ1NlcnZpw6dvXCcgY29tIGxpZ2HDp8OjbyBcJ1JlbGV2YW50ZSBwYXJhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9ICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdUaWNrZXRcJyBjb20gbGlnYcOnw6NvIFwnQWx0ZXJuYXRpdmEgYVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9ICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdUaWNrZXRcJyBjb20gbGlnYcOnw6NvIFwnRGVwZW5kZSBkZVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPSAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnVGlja2V0XCcgY29tIGxpZ2HDp8OjbyBcJ1JlbGV2YW50ZSBwYXJhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0gJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdJdGVtQ29uZmlnSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb3V0cm9zIG9iamV0b3MgXCdJdGVtQ29uZmlnSVRTTVwnIGNvbSBsaWdhw6fDo28gXCdBbHRlcm5hdGl2YSBhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9ICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG91dHJvcyBvYmpldG9zIFwnSXRlbUNvbmZpZ0lUU01cJyBjb20gbGlnYcOnw6NvIFwnTGlnYWRvIGFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIG90aGVyIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9ICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG91dHJvcyBvYmpldG9zIFwnSXRlbUNvbmZpZ0lUU01cJyBjb20gbGlnYcOnw6NvIFwnRGVwZW5kZSBkZVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPSAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ0l0ZW1Db25maWdJVFNNXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvdXRyb3Mgb2JqZXRvcyBcJ0l0ZW1Db25maWdJVFNNXCcgY29tIGxpZ2HDp8OjbyBcJ0luY2x1aVwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9ICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnSXRlbUNvbmZpZ0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG91dHJvcyBvYmpldG9zIFwnSXRlbUNvbmZpZ0lUU01cJyBjb20gbGlnYcOnw6NvIFwnUmVsZXZhbnRlIHBhcmFcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0gJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdPcmRlbVNlcnZpw6dvSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0l0ZW1Db25maWdJVFNNXCcgY29tIGxpZ2HDp8OjbyBcJ0RlcGVuZGUgZGVcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0gJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdPcmRlbVNlcnZpw6dvSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ0l0ZW1Db25maWdJVFNNXCcgY29tIGxpZ2HDp8OjbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9ICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnT3JkZW1TZXJ2acOnb0lUU01cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdTZXJ2acOnb1wnIGNvbSBsaWdhw6fDo28gXCdEZXBlbmRlIGRlXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0gJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdPcmRlbVNlcnZpw6dvSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ1NlcnZpw6dvXCcgY29tIGxpZ2HDp8OjbyBcJ05vcm1hbFwnLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0gJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIHF1ZSB1bSBvYmpldG8gXCdPcmRlbVNlcnZpw6dvSVRTTVwnIHBvZGUgc2VyIGFzc29jaWFkbyBjb20gb2JqZXRvcyBcJ1RpY2tldFwnIGNvbSBsaWdhw6fDo28gXCdOb3JtYWxcJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9ICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnU2VydmnDp29cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdGQVFcJyBjb20gbGlnYcOnw6NvIFwnTm9ybWFsXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ1NlcnZpY2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9ICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBxdWUgdW0gb2JqZXRvIFwnU2VydmnDp29cJyBwb2RlIHNlciBhc3NvY2lhZG8gY29tIG9iamV0b3MgXCdGQVFcJyBjb20gbGlnYcOnw6NvIFwnUGFpRmlsaG9cJy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPSAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgcXVlIHVtIG9iamV0byBcJ1NlcnZpw6dvXCcgcG9kZSBzZXIgYXNzb2NpYWRvIGNvbSBvYmpldG9zIFwnRkFRXCcgY29tIGxpZ2HDp8OjbyBcJ1JlbGV2YW50ZSBhXCcuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdBbHRlcm5hdGl2ZVRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9ICdFc3RhIGNvbmZpZ3VyYcOnw6NvIGRlZmluZSBvIHRpcG8gZGUgbGluayBcJ0FsdGVybmF0aXZhIGFcJy4gU2UgbyBub21lIGRhIG9yaWdlbSBlIG8gbm9tZSBkZSBkZXN0aW5vIHPDo28gaWd1YWlzLCBhIGFzc29jaWHDp8OjbyDDqSBuw6NvLWRpcmVjaW9uYWwuIFNlIG9zIHZhbG9yZXMgc8OjbyBkaWZlcmVudGVzLCBhIGFzc29jaWHDp8OjbyDDqSB1bSBsaW5rIGRpcmVjaW9uYWwuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPSAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgbyB0aXBvIGRlIGxpbmsgXCdMaWdhZG8gYVwnLiBTZSBvIG5vbWUgZGEgb3JpZ2VtIGUgbyBub21lIGRlIGRlc3Rpbm8gc8OjbyBpZ3VhaXMsIGEgYXNzb2NpYcOnw6NvIMOpIG7Do28tZGlyZWNpb25hbC4gU2Ugb3MgdmFsb3JlcyBzw6NvIGRpZmVyZW50ZXMsIGEgYXNzb2NpYcOnw6NvIMOpIHVtIGxpbmsgZGlyZWNpb25hbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPSAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgbyB0aXBvIGRlIGxpbmsgXCdEZXBlbmRlIGRlXCcuIFNlIG8gbm9tZSBkYSBvcmlnZW0gZSBvIG5vbWUgZGUgZGVzdGlubyBzw6NvIGlndWFpcywgYSBhc3NvY2lhw6fDo28gw6kgbsOjby1kaXJlY2lvbmFsLiBTZSBvcyB2YWxvcmVzIHPDo28gZGlmZXJlbnRlcywgYSBhc3NvY2lhw6fDo28gw6kgdW0gbGluayBkaXJlY2lvbmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0gJ0VzdGEgY29uZmlndXJhw6fDo28gZGVmaW5lIG8gdGlwbyBkZSBsaW5rIFwnSW5jbHVpXCcuIFNlIG8gbm9tZSBkYSBvcmlnZW0gZSBvIG5vbWUgZGUgZGVzdGlubyBzw6NvIGlndWFpcywgYSBhc3NvY2lhw6fDo28gw6kgbsOjby1kaXJlY2lvbmFsLiBTZSBvcyB2YWxvcmVzIHPDo28gZGlmZXJlbnRlcywgYSBhc3NvY2lhw6fDo28gw6kgdW0gbGluayBkaXJlY2lvbmFsLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPSAnRXN0YSBjb25maWd1cmHDp8OjbyBkZWZpbmUgbyB0aXBvIGRlIGxpbmsgXCdSZWxldmFudGUgYVwnLiBTZSBvIG5vbWUgZGEgb3JpZ2VtIGUgbyBub21lIGRlIGRlc3Rpbm8gc8OjbyBpZ3VhaXMsIGEgYXNzb2NpYcOnw6NvIMOpIG7Do28tZGlyZWNpb25hbC4gU2Ugb3MgdmFsb3JlcyBzw6NvIGRpZmVyZW50ZXMsIGEgYXNzb2NpYcOnw6NvIMOpIHVtIGxpbmsgZGlyZWNpb25hbC4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnTsO6bWVybyBkZSBjYXJhY3RlcmVzIHBvciBsaW5oYSBlbSDDoXJlYXMgZGUgdGV4dG8gSVRTTS4nOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9ydV9JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgQ29weXJpZ2h0IChDKSAyMDEzIFl1cml5IEtvbGVzbmlrb3YgPHlua29sZXNuaWtvdiBhdCBnbWFpbC5jb20+CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OnJ1X0lUU01Db3JlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgIyBUZW1wbGF0ZTogQUFBSVRTTUNvcmUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FsdGVybmF0aXZlIHRvJ30gPSAn0JfQsNC80LXQvdCwINC00LvRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICfQlNC+0YHRgtGD0L/QvdC+0YHRgtGMJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0JhY2sgRW5kJ30gPSAn0KHQtdGA0LLQtdGA0L3QsNGPINGH0LDRgdGC0YwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAn0KHQstGP0LfQsNC9INGBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgU3RhdGUnfSA9ICfQotC10LrRg9GJ0LXQtSDRgdC+0YHRgtC+0Y/QvdC40LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ9CU0LXQvNC+0L3RgdGC0YDQsNGG0LjRjyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAn0JfQsNCy0LjRgdC40YIg0L7Rgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydFbmQgVXNlciBTZXJ2aWNlJ30gPSAn0JrQvtC90LXRh9C90YvQuSDRgdC10YDQstC40YEg0L/QvtC70YzQt9C+0LLQsNGC0LXQu9GPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Vycm9ycyd9ID0gJ9Ce0YjQuNCx0LrQuCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udCBFbmQnfSA9ICfQmNC90YLQtdGA0YTQtdC50YHQvdCw0Y8g0YfQsNGB0YLRjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAn0KPQv9GA0LDQstC70LXQvdC40LUg0JjQoic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBPcGVyYXRpb25hbCd9ID0gJ9Ct0LrRgdC/0LvRg9Cw0YLQsNGG0LjRjyDQmNCiJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ltcGFjdCd9ID0gJ9CS0LvQuNGP0L3QuNC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2lkZW50IFN0YXRlJ30gPSAn0KHQvtGB0YLQvtGP0L3QuNC1INC40L3RhtC40LTQtdC90YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbmNsdWRlcyd9ID0gJ9CS0LrQu9GO0YfQsNC10YInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICfQlNGA0YPQs9C+0LUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ9Cn0LDRgdGC0Ywg0L7Rgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAn0J/Qu9Cw0L3QuNGA0L7QstCw0L3QuNC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICfQktGA0LXQvNGPINCy0L7RgdGB0YLQsNC90L7QstC70LXQvdC40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICfQntGC0L3QvtGB0LjRgtGB0Y8g0LonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAn0KHQvtGB0YLQsNCy0LvQtdC90LjQtSDQvtGC0YfQtdGC0L7Qsic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICfQotGA0LXQsdGD0LXRgtGB0Y8g0LTQu9GPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1Jlc29sdXRpb24gUmF0ZSd9ID0gJ9Ce0YLQvdC+0YHQuNGC0LXQu9GM0L3QsNGPINGB0LrQvtGA0L7RgdGC0Ywg0YDQtdGI0LXQvdC40Y8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ9CS0YDQtdC80Y8g0YDQtdCw0LrRhtC40LgnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU0xBIE92ZXJ2aWV3J30gPSAn0KHQv9C40YHQvtC6IFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlIE92ZXJ2aWV3J30gPSAn0KHQv9C40YHQvtC6INGB0LXRgNCy0LjRgdC+0LInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZS1BcmVhJ30gPSAn0J7QsdC30L7RgCDRgdC10YDQstC40YHQvtCyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RyYWluaW5nJ30gPSAn0J7QsdGD0YfQtdC90LjQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUcmFuc2FjdGlvbnMnfSA9ICfQpNC40L3QsNC90YHQvtCy0YvQtSDQvtC/0LXRgNCw0YbQuNC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ9Ca0L7QvdGC0YDQsNC60YIg0L/QvtC00LTQtdGA0LbQutC4JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FsbG9jYXRpb24nfSA9ICfQndCw0LfQvdCw0YfQtdC90LjQtSDQv9GA0LjQvtGA0LjRgtC10YLQvtCyICc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5JVFNNQ0lQQWxsb2NhdGUKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NyaXRpY2FsaXR5IDwtPiBJbXBhY3QgPC0+IFByaW9yaXR5J30gPSAn0JrRgNC40YLQuNGH0L3QvtGB0YLRjCA8LT4g0JLQu9C40Y/QvdC40LUgPC0+INCf0YDQuNC+0YDQuNGC0LXRgic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYW5hZ2UgdGhlIHByaW9yaXR5IHJlc3VsdCBvZiBjb21iaW5hdGluZyBDcml0aWNhbGl0eSA8LT4gSW1wYWN0Lid9ID0KICAgICAgICAn0JjQt9C80LXQvdC10L3QuNC1INGC0LDQsdC70LjRhtGLINGA0LDRgdGH0LXRgtCwINC/0YDQuNC+0YDQuNGC0LXRgtCwINCyINC30LDQstC40YHQuNC80L7RgdGC0Lgg0L7RgiDQutC+0LzQsdC40L3QsNGG0LjQuCDQmtGA0LjRgtC40YfQvdC+0YHRgtGMIDwtPiDQktC70LjRj9C90LjQtS4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUHJpb3JpdHkgYWxsb2NhdGlvbid9ID0gJ9Cd0LDQt9C90LDRh9C10L3QuNC1INC/0YDQuNC+0YDQuNGC0LXRgtCwJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pblNMQQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWluaW11bSBUaW1lIEJldHdlZW4gSW5jaWRlbnRzJ30gPSAn0JzQuNC90LjQvNCw0LvRjNC90L7QtSDQstGA0LXQvNGPINC80LXQttC00YMg0LjQvdGG0LjQtNC10L3RgtCw0LzQuCc7CgogICAgIyBUZW1wbGF0ZTogQWRtaW5TZXJ2aWNlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSd9ID0gJ9Ca0YDQuNGC0LjRh9C90L7RgdGC0YwnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUN1c3RvbWVyU2VhcmNoCgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBCgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQS1JbmZvJ30gPSAn0JjQvdGE0L7RgNC80LDRhtC40Y8g0L7QsSBTTEEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTGFzdCBjaGFuZ2VkJ30gPSAn0JTQsNGC0LAg0LjQt9C80LXQvdC10L3QuNGPJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCBieSd9ID0gJ9Ca0LXQvCDQuNC30LzQtdC90LXQvdC+JzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TTEFab29tCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgSW5mb3JtYXRpb24nfSA9ICfQmNC90YTQvtGA0LzQsNGG0LjRjyDQvtCxIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAn0KHQstGP0LfQsNC90L3Ri9C1INGB0LXRgNCy0LjRgdGLJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlCgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUluZm8nfSA9ICfQmNC90YTQvtGA0LzQsNGG0LjRjyDQviDQodC10YDQstC40YHQtSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IEluY2lkZW50IFN0YXRlJ30gPSAn0KLQtdC60YPRidC10LUg0YHQvtGB0YLQvtGP0L3QuNC1INC40L3RhtC40LTQtdC90YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICfQodCy0Y/Qt9Cw0L3QvdGL0LUgU0xBJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ9CY0L3RhNC+0YDQvNCw0YbQuNGPINC+INCh0LXRgNCy0LjRgdC1JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgaW5jaWRlbnQgc3RhdGUnfSA9ICfQotC10LrRg9GJ0LXQtSDRgdC+0YHRgtC+0Y/QvdC40LUg0LjQvdGG0LjQtNC10L3RgtCwJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICfQo9C/0YDQsNCy0LvQtdC90LjQtSDQvNCw0YLRgNC40YbQtdC5INC/0YDQuNC+0YDQuNGC0LXRgtC+0LInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICfQn9C+0LrQsNC30LDRgtGMINC60L3QvtC/0LrRgyAi0L3QsNC30LDQtCIg0LIg0LzQtdC90Y4g0KHQtdGA0LLQuNGBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IGJhY2sgbGluayBpbiBzbGEgbWVudS4nfSA9ICfQn9C+0LrQsNC30LDRgtGMINC60L3QvtC/0LrRgyAi0L3QsNC30LDQtCIg0LIg0LzQtdC90Y4gU0xBJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01vZHVsZSB0byBzaG93IHByaW50IGxpbmsgaW4gc2VydmljZSBtZW51Lid9ID0gJ9Cf0L7QutCw0LfQsNGC0Ywg0LrQvdC+0L/QutGDICLQn9C10YfQsNGC0YwiINCyINC80LXQvdGOINCh0LXRgNCy0LjRgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNsYSBtZW51Lid9ID0gJ9Cf0L7QutCw0LfQsNGC0Ywg0LrQvdC+0L/QutGDICLQn9C10YfQsNGC0YwiINCyINC80LXQvdGOIFNMQSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyB0aGUgbGluayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICfQn9C+0LrQsNC30LDRgtGMINC60L3QvtC/0LrRgyDQodCy0Y/Qt9Cw0YLRjC9MaW5rINCyINC80LXQvdGOINCh0LXRgNCy0LjRgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJhbWV0ZXJzIGZvciB0aGUgaW5jaWRlbnQgc3RhdGVzIGluIHRoZSBwcmVmZXJlbmNlIHZpZXcuJ30gPSAn0J/QsNGA0LDQvNC10YLRgNGLINC00LvRjyDRgdC+0YHRgtC+0Y/QvdC40Y8g0LjQvdGG0LjQtNC10L3RgtCwINCyIHByZWZlcmVuY2Ugdmlldy4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIG9mIGxpbmsgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLid9ID0KICAgICAgICAn0KPRgdGC0LDQvdC+0LLQuNGC0Ywg0YLQuNC/INGB0LLRj9C30Lgg0LTQu9GPINC+0L/RgNC10LTQtdC70LXQvdC40Y8g0YHQvtGB0YLQvtGP0L3QuNGPINC40L3RhtC40LTQtdC90YLQsCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ2hhbmdlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01DaGFuZ2VcJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnVGlja2V0XCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnTm9ybWFsXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnRkFRXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnTm9ybWFsXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNQ29uZmlnSXRlbVwnINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdGQVFcJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdQYXJlbnRDaGlsZFwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNQ29uZmlnSXRlbVwnINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdGQVFcJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdSZWxldmFudFRvXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNQ29uZmlnSXRlbVwnINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdTZXJ2aWNlXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnQWx0ZXJuYXRpdmVUb1wnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1NlcnZpY2VcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNQ29uZmlnSXRlbVwnINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdTZXJ2aWNlXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnRGVwZW5kc09uXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNQ29uZmlnSXRlbVwnINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdTZXJ2aWNlXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnUmVsZXZhbnRUb1wnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNQ29uZmlnSXRlbVwnINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdUaWNrZXRcJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdBbHRlcm5hdGl2ZVRvXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnVGlja2V0XCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnRGVwZW5kc09uXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Db25maWdJdGVtXCcg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ1RpY2tldFwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ1JlbGV2YW50VG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNQ29uZmlnSXRlbVwnINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdJVFNNQ29uZmlnSXRlbVwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ0FsdGVybmF0aXZlVG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQ29ubmVjdGVkVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdDb25uZWN0ZWRUb1wnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdEZXBlbmRzT25cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnSW5jbHVkZXNcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdJbmNsdWRlc1wnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Db25maWdJdGVtXCcg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ0lUU01Db25maWdJdGVtXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnUmVsZXZhbnRUb1wnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0RlcGVuZHNPblwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdJVFNNV29ya09yZGVyXCDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnSVRTTUNvbmZpZ0l0ZW1cJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdEZXBlbmRzT25cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTVdvcmtPcmRlclwg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ0lUU01Db25maWdJdGVtXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnTm9ybWFsXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiwg0YfRgtC+IFwnSVRTTVdvcmtPcmRlclwg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ1NlcnZpY2VcINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ0RlcGVuZHNPblwnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Xb3JrT3JkZXJcINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdTZXJ2aWNlXCDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdOb3JtYWxcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ1RpY2tldFwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ0lUU01Xb3JrT3JkZXJcINC+0LHRitC10LrRgiDQvNC+0LbQtdGCINCx0YvRgtGMINGB0LLRj9C30LDQvSDRgSDQvtCx0YrQtdC60YLQsNC80LggXCdUaWNrZXRcJyDQuNGB0L/QvtC70YzQt9GD0Y8g0YLQuNC/INGB0LLRj9C30LggXCdOb3JtYWxcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ1NlcnZpY2VcJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnRkFRXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnTm9ybWFsXCcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1BhcmVudENoaWxkXCcgbGluayB0eXBlLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIsINGH0YLQviBcJ1NlcnZpY2VcJyDQvtCx0YrQtdC60YIg0LzQvtC20LXRgiDQsdGL0YLRjCDRgdCy0Y/Qt9Cw0L0g0YEg0L7QsdGK0LXQutGC0LDQvNC4IFwnRkFRXCcg0LjRgdC/0L7Qu9GM0LfRg9GPINGC0LjQvyDRgdCy0Y/Qt9C4IFwnUGFyZW50Q2hpbGRcJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCLCDRh9GC0L4gXCdTZXJ2aWNlXCcg0L7QsdGK0LXQutGCINC80L7QttC10YIg0LHRi9GC0Ywg0YHQstGP0LfQsNC9INGBINC+0LHRitC10LrRgtCw0LzQuCBcJ0ZBUVwnINC40YHQv9C+0LvRjNC30YPRjyDRgtC40L8g0YHQstGP0LfQuCBcJ1JlbGV2YW50VG9cJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnQWx0ZXJuYXRpdmVUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiDRgtC40L8g0YHQstGP0LfQuCBcJ0FsdGVybmF0aXZlVG9cJy4g0JXRgdC70Lgg0LjRgdGF0L7QtNC90L7QtSDQuNC80Y8g0Lgg0LjQvNGPINGG0LXQu9C4INC40LzQtdGO0YIg0L7QtNC40L3QsNC60L7QstC+0LUg0LfQvdCw0YfQtdC90LjQtSwg0YDQtdC30YPQu9GM0YLQuNGA0YPRjtGJ0LDRjyDRgdCy0Y/Qt9GMIC0g0L3QtdC90LDQv9GA0LDQstC70LXQvdC90LDRjywg0LjQvdCw0YfQtSDRjdGC0L4g0L3QsNC/0YDQsNCy0LvQtdC90L3QsNGPINGB0LLRj9C30YwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0Nvbm5lY3RlZFRvXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJ9Ce0L/RgNC10LTQtdC70Y/QtdGCINGC0LjQvyDRgdCy0Y/Qt9C4IFwnQ29ubmVjdGVkVG9cJy4g0JXRgdC70Lgg0LjRgdGF0L7QtNC90L7QtSDQuNC80Y8g0Lgg0LjQvNGPINGG0LXQu9C4INC40LzQtdGO0YIg0L7QtNC40L3QsNC60L7QstC+0LUg0LfQvdCw0YfQtdC90LjQtSwg0YDQtdC30YPQu9GM0YLQuNGA0YPRjtGJ0LDRjyDRgdCy0Y/Qt9GMIC0g0L3QtdC90LDQv9GA0LDQstC70LXQvdC90LDRjywg0LjQvdCw0YfQtSDRjdGC0L4g0L3QsNC/0YDQsNCy0LvQtdC90L3QsNGPINGB0LLRj9C30YwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiDRgtC40L8g0YHQstGP0LfQuCBcJ0RlcGVuZHNPblwnLiDQldGB0LvQuCDQuNGB0YXQvtC00L3QvtC1INC40LzRjyDQuCDQuNC80Y8g0YbQtdC70Lgg0LjQvNC10Y7RgiDQvtC00LjQvdCw0LrQvtCy0L7QtSDQt9C90LDRh9C10L3QuNC1LCDRgNC10LfRg9C70YzRgtC40YDRg9GO0YnQsNGPINGB0LLRj9C30YwgLSDQvdC10L3QsNC/0YDQsNCy0LvQtdC90L3QsNGPLCDQuNC90LDRh9C1INGN0YLQviDQvdCw0L/RgNCw0LLQu9C10L3QvdCw0Y8g0YHQstGP0LfRjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnSW5jbHVkZXNcJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAn0J7Qv9GA0LXQtNC10LvRj9C10YIg0YLQuNC/INGB0LLRj9C30LggXCdJbmNsdWRlc1wnLiDQldGB0LvQuCDQuNGB0YXQvtC00L3QvtC1INC40LzRjyDQuCDQuNC80Y8g0YbQtdC70Lgg0LjQvNC10Y7RgiDQvtC00LjQvdCw0LrQvtCy0L7QtSDQt9C90LDRh9C10L3QuNC1LCDRgNC10LfRg9C70YzRgtC40YDRg9GO0YnQsNGPINGB0LLRj9C30YwgLSDQvdC10L3QsNC/0YDQsNCy0LvQtdC90L3QsNGPLCDQuNC90LDRh9C1INGN0YLQviDQvdCw0L/RgNCw0LLQu9C10L3QvdCw0Y8g0YHQstGP0LfRjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICfQntC/0YDQtdC00LXQu9GP0LXRgiDRgtC40L8g0YHQstGP0LfQuCBcJ1JlbGV2YW50VG9cJy4g0JXRgdC70Lgg0LjRgdGF0L7QtNC90L7QtSDQuNC80Y8g0Lgg0LjQvNGPINGG0LXQu9C4INC40LzQtdGO0YIg0L7QtNC40L3QsNC60L7QstC+0LUg0LfQvdCw0YfQtdC90LjQtSwg0YDQtdC30YPQu9GM0YLQuNGA0YPRjtGJ0LDRjyDRgdCy0Y/Qt9GMIC0g0L3QtdC90LDQv9GA0LDQstC70LXQvdC90LDRjywg0LjQvdCw0YfQtSDRjdGC0L4g0L3QsNC/0YDQsNCy0LvQtdC90L3QsNGPINGB0LLRj9C30YwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAn0KjQuNGA0LjQvdCwIElUU00g0L/QvtC70Y8g0YLQuNC/0LAgdGV4dGFyZWEnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS96aF9DTl9JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBDb3B5cmlnaHQgKEMpIDIwMTMgTWljaGFlbCBTaGkgPG1pY3NoaSBhdCAxNjMuY29tPgojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjp6aF9DTl9JVFNNQ29yZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUlUU01Db3JlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJ+WPr+S+m+mAieaLqSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICflj6/nlKjmgKcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICflkI7nq68nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAn6L+e5o6lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgU3RhdGUnfSA9ICflvZPliY3nirbmgIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ+a8lOekuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAn5L6d6LWWJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICfmnIDnu4jnlKjmiLfmnI3liqEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAn6ZSZ6K+vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ+WJjeerryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnSVTnrqHnkIYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdJVOi/kOiQpSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICflvbHlk40nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICfmlYXpmpznirbmgIEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICfljIXmi6wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICflhbblroMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ+WxnuS6jic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAn6aG555uuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICfmgaLlpI3ml7bpl7QnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICfnm7jlhbMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAn5oql5ZGKJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ+mcgOimgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICfop6PlhrPnjocnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ+WTjeW6lOaXtumXtCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICdTTEHmpoLov7AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ+acjeWKoeamgui/sCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICfmnI3liqHljLonOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhaW5pbmcnfSA9ICfln7norq0nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAn5Lqk5piTJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ+S+neaNruWQiOWQjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhbGxvY2F0aW9uJ30gPSAn5YiG6YWNJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICfph43opoEgPC0+IOW9seWTjSA8LT4g5LyY5YWI57qnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IDwtPiBJbXBhY3QuJ30gPQogICAgICAgICci6YeN6KaBIDwtPiDlvbHlk40i5LmL6Ze055qE57uE5ZCI5Yaz5a6a5LyY5YWI57qnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICfkvJjlhYjnuqfliIbphY0nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICfmlYXpmpzpl7TmnIDnn63ml7bpl7QnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICfph43opoEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUN1c3RvbWVyU2VhcmNoCgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBCgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQS1JbmZvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ+S4iuasoeS/ruaUueS6jic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfkuIrmrKHkv67mlLnkuronOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ1NMQeS/oeaBryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAn5YWz6IGU55qE5pyN5YqhJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlCgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUluZm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ+W9k+WJjeaVhemanOeKtuaAgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICflhbPogZTnmoRTTEFzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ+acjeWKoeS/oeaBryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAn5b2T5YmN5pWF6Zqc54q25oCBJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICfnrqHnkIbkvJjlhYjnuqfnn6npmLUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNsYSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzbGEgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIGxpbmsgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIG9mIGxpbmsgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnJzsKCiAgICAjIE1pc3NlZCBUcmFuc2xhdGlvbiBJdGVtcwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICfnsbvliKsgPC0+IOW9seWTjSA8LT4g5LyY5YWI57qnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENhdGVnb3J5IDwtPiBJbXBhY3QuJ30gPSAnIuexu+WIqyA8LT4g5b2x5ZONIuS5i+mXtOeahOe7hOWQiOWGs+WumuS8mOWFiOe6pyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBvZiB0aGUgQ0lQIG1hdHJpeC4nfSA9ICfnrqHnkIZDSVDnn6npmLUnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS96aF9UV19JVFNNQ29yZS5wbSAtIHRyYW5zbGF0aW9uIGZpbGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBDb3B5cmlnaHQgKEMpIDIwMTMgTWljaGFlbCBTaGkgPG1pY3NoaSBhdCAxNjMuY29tPgojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjp6aF9UV19JVFNNQ29yZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHV0Zjg7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICMgVGVtcGxhdGU6IEFBQUlUU01Db3JlCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJ+WPr+S+m+mBuOaThyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdmFpbGFiaWxpdHknfSA9ICflj6/nlKjmgKcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQmFjayBFbmQnfSA9ICflvoznq68nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAn6YCj5o6lJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0N1cnJlbnQgU3RhdGUnfSA9ICfnlbbliY3ni4DmhYsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVtb25zdHJhdGlvbid9ID0gJ+a8lOekuic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydEZXBlbmRzIG9uJ30gPSAn5L6d6LO0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0VuZCBVc2VyIFNlcnZpY2UnfSA9ICfmnIDntYLnlKjmiLbmnI3li5knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRXJyb3JzJ30gPSAn6Yyv6KqkJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0Zyb250IEVuZCd9ID0gJ+WJjeerryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJVCBNYW5hZ2VtZW50J30gPSAnSVTnrqHnkIYnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSVQgT3BlcmF0aW9uYWwnfSA9ICdJVOmBi+eHnyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbXBhY3QnfSA9ICflvbHpn78nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jaWRlbnQgU3RhdGUnfSA9ICfmlYXpmpzni4DmhYsnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW5jbHVkZXMnfSA9ICfljIXmi6wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT3RoZXInfSA9ICflhbblroMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUGFydCBvZid9ID0gJ+WxrOaWvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQcm9qZWN0J30gPSAn6aCF55uuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlY292ZXJ5IFRpbWUnfSA9ICfmgaLlvqnmmYLplpMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVsZXZhbnQgdG8nfSA9ICfnm7jpl5wnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVwb3J0aW5nJ30gPSAn5aCx5ZGKJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlcXVpcmVkIGZvcid9ID0gJ+mcgOimgSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXNvbHV0aW9uIFJhdGUnfSA9ICfop6PmsbrnjocnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUmVzcG9uc2UgVGltZSd9ID0gJ+mfv+aHieaZgumWkyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTTEEgT3ZlcnZpZXcnfSA9ICdTTEHmpoLov7AnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBPdmVydmlldyd9ID0gJ+acjeWLmeamgui/sCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUFyZWEnfSA9ICfmnI3li5nljYAnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhaW5pbmcnfSA9ICfln7noqJMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVHJhbnNhY3Rpb25zJ30gPSAn5Lqk5piTJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1VuZGVycGlubmluZyBDb250cmFjdCd9ID0gJ+S+neaTmuWQiOWQjCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydhbGxvY2F0aW9uJ30gPSAn5YiG6YWNJzsKCiAgICAjIFRlbXBsYXRlOiBBZG1pbklUU01DSVBBbGxvY2F0ZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICfph43opoEgPC0+IOW9semfvyA8LT4g5YSq5YWI57SaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENyaXRpY2FsaXR5IDwtPiBJbXBhY3QuJ30gPQogICAgICAgICci6YeN6KaBIDwtPiDlvbHpn78i5LmL6ZaT55qE57WE5ZCI5rG65a6a5YSq5YWI57SaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IGFsbG9jYXRpb24nfSA9ICflhKrlhYjntJrliIbphY0nOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU0xBCiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNaW5pbXVtIFRpbWUgQmV0d2VlbiBJbmNpZGVudHMnfSA9ICfmlYXpmpzplpPmnIDnn63mmYLplpMnOwoKICAgICMgVGVtcGxhdGU6IEFkbWluU2VydmljZQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICfph43opoEnOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTUN1c3RvbWVyU2VhcmNoCgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBCgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU0xBUHJpbnQKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQS1JbmZvJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0xhc3QgY2hhbmdlZCd9ID0gJ+S4iuasoeS/ruaUueaWvCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydMYXN0IGNoYW5nZWQgYnknfSA9ICfkuIrmrKHkv67mlLnkuronOwoKICAgICMgVGVtcGxhdGU6IEFnZW50SVRTTVNMQVpvb20KICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NMQSBJbmZvcm1hdGlvbid9ID0gJ1NMQeS/oeaBryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNlcnZpY2VzJ30gPSAn6Zec6IGv55qE5pyN5YuZJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlCgogICAgIyBUZW1wbGF0ZTogQWdlbnRJVFNNU2VydmljZVByaW50CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXJ2aWNlLUluZm8nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3VycmVudCBJbmNpZGVudCBTdGF0ZSd9ID0gJ+eVtuWJjeaVhemanOeLgOaFiyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc3NvY2lhdGVkIFNMQXMnfSA9ICfpl5zoga/nmoRTTEFzJzsKCiAgICAjIFRlbXBsYXRlOiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VydmljZSBJbmZvcm1hdGlvbid9ID0gJ+acjeWLmeS/oeaBryc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDdXJyZW50IGluY2lkZW50IHN0YXRlJ30gPSAn55W25YmN5pWF6Zqc54uA5oWLJzsKCiAgICAjIFN5c0NvbmZpZwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFkbWluSVRTTUNJUEFsbG9jYXRlIGNvbmZpZ3VyYXRpb24gaW4gdGhlIGFkbWluIGFyZWEuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQSBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU0xBUHJpbnQgb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNMQVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2Ugb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRnJvbnRlbmQgbW9kdWxlIHJlZ2lzdHJhdGlvbiBmb3IgdGhlIEFnZW50SVRTTVNlcnZpY2VQcmludCBvYmplY3QgaW4gdGhlIGFnZW50IGludGVyZmFjZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWdlbnRJVFNNU2VydmljZVpvb20gb2JqZWN0IGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFuYWdlIHByaW9yaXR5IG1hdHJpeC4nfSA9ICfnrqHnkIblhKrlhYjntJrnn6npmaMnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgYmFjayBsaW5rIGluIHNsYSBtZW51Lid9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb2R1bGUgdG8gc2hvdyBwcmludCBsaW5rIGluIHNlcnZpY2UgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgcHJpbnQgbGluayBpbiBzbGEgbWVudS4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTW9kdWxlIHRvIHNob3cgdGhlIGxpbmsgbGluayBpbiBzZXJ2aWNlIG1lbnUuJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1BhcmFtZXRlcnMgZm9yIHRoZSBpbmNpZGVudCBzdGF0ZXMgaW4gdGhlIHByZWZlcmVuY2Ugdmlldy4nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2V0IHRoZSB0eXBlIG9mIGxpbmsgdG8gYmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIGluY2lkZW50IHN0YXRlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01DaGFuZ2VcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnRkFRXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdQYXJlbnRDaGlsZFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnQWx0ZXJuYXRpdmVUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdTZXJ2aWNlXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdUaWNrZXRcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ0FsdGVybmF0aXZlVG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTUNvbmZpZ0l0ZW1cJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdSZWxldmFudFRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdBbHRlcm5hdGl2ZVRvXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdDb25uZWN0ZWRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdJbmNsdWRlc1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggb3RoZXIgXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUmVsZXZhbnRUb1wnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdJVFNNV29ya09yZGVyXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0lUU01Db25maWdJdGVtXCcgb2JqZWN0cyB1c2luZyB0aGUgXCdEZXBlbmRzT25cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnSVRTTVdvcmtPcmRlclwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdJVFNNQ29uZmlnSXRlbVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnRGVwZW5kc09uXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnU2VydmljZVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnTm9ybWFsXCcgbGluayB0eXBlLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoYXQgYSBcJ0lUU01Xb3JrT3JkZXJcJyBvYmplY3QgY2FuIGJlIGxpbmtlZCB3aXRoIFwnVGlja2V0XCcgb2JqZWN0cyB1c2luZyB0aGUgXCdOb3JtYWxcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ05vcm1hbFwnIGxpbmsgdHlwZS4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGF0IGEgXCdTZXJ2aWNlXCcgb2JqZWN0IGNhbiBiZSBsaW5rZWQgd2l0aCBcJ0ZBUVwnIG9iamVjdHMgdXNpbmcgdGhlIFwnUGFyZW50Q2hpbGRcJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhhdCBhIFwnU2VydmljZVwnIG9iamVjdCBjYW4gYmUgbGlua2VkIHdpdGggXCdGQVFcJyBvYmplY3RzIHVzaW5nIHRoZSBcJ1JlbGV2YW50VG9cJyBsaW5rIHR5cGUuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0FsdGVybmF0aXZlVG9cJy4gSWYgdGhlIHNvdXJjZSBuYW1lIGFuZCB0aGUgdGFyZ2V0IG5hbWUgY29udGFpbiB0aGUgc2FtZSB2YWx1ZSwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgbm9uLWRpcmVjdGlvbmFsIG9uZS4gSWYgdGhlIHZhbHVlcyBhcmUgZGlmZmVyZW50LCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBkaXJlY3Rpb25hbCBsaW5rLid9ID0KICAgICAgICAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RoaXMgc2V0dGluZyBkZWZpbmVzIHRoZSBsaW5rIHR5cGUgXCdDb25uZWN0ZWRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0RlcGVuZHNPblwnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVGhpcyBzZXR0aW5nIGRlZmluZXMgdGhlIGxpbmsgdHlwZSBcJ0luY2x1ZGVzXCcuIElmIHRoZSBzb3VyY2UgbmFtZSBhbmQgdGhlIHRhcmdldCBuYW1lIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWUsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIG5vbi1kaXJlY3Rpb25hbCBvbmUuIElmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudCwgdGhlIHJlc3VsdGluZyBsaW5rIGlzIGEgZGlyZWN0aW9uYWwgbGluay4nfSA9CiAgICAgICAgJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUaGlzIHNldHRpbmcgZGVmaW5lcyB0aGUgbGluayB0eXBlIFwnUmVsZXZhbnRUb1wnLiBJZiB0aGUgc291cmNlIG5hbWUgYW5kIHRoZSB0YXJnZXQgbmFtZSBjb250YWluIHRoZSBzYW1lIHZhbHVlLCB0aGUgcmVzdWx0aW5nIGxpbmsgaXMgYSBub24tZGlyZWN0aW9uYWwgb25lLiBJZiB0aGUgdmFsdWVzIGFyZSBkaWZmZXJlbnQsIHRoZSByZXN1bHRpbmcgbGluayBpcyBhIGRpcmVjdGlvbmFsIGxpbmsuJ30gPQogICAgICAgICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2lkdGggb2YgSVRTTSB0ZXh0YXJlYXMuJ30gPSAnJzsKCiAgICAjIE1pc3NlZCBUcmFuc2xhdGlvbiBJdGVtcwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2F0ZWdvcnkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHknfSA9ICfpoZ7liKsgPC0+IOW9semfvyA8LT4g5YSq5YWI57SaJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hbmFnZSB0aGUgcHJpb3JpdHkgcmVzdWx0IG9mIGNvbWJpbmF0aW5nIENhdGVnb3J5IDwtPiBJbXBhY3QuJ30gPSAnIumhnuWIqyA8LT4g5b2x6Z+/IuS5i+mWk+eahOe1hOWQiOaxuuWumuWEquWFiOe0mic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZG1pbiBvZiB0aGUgQ0lQIG1hdHJpeC4nfSA9ICfnrqHnkIZDSVDnn6npmaMnOwoKICAgICMKICAgICMgT0JTT0xFVEUgRU5UUklFUyBGT1IgUkVGRVJFTkNFLCBETyBOT1QgVFJBTlNMQVRFIQogICAgIwoKfQoKMTsK
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtIC0gYWRtaW4gZnJvbnRlbmQgb2YgY3JpdGljYWxpdHksIGltcGFjdCBhbmQgcHJpb3JpdHkKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWRtaW5JVFNNQ0lQQWxsb2NhdGU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZDsKdXNlIEtlcm5lbDo6U3lzdGVtOjpJVFNNQ0lQQWxsb2NhdGU7CnVzZSBLZXJuZWw6OlN5c3RlbTo6UHJpb3JpdHk7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFsaWQ7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFyaWFibGVDaGVjayBxdyg6YWxsKTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKHF3KENvbmZpZ09iamVjdCBQYXJhbU9iamVjdCBMb2dPYmplY3QgTGF5b3V0T2JqZWN0KSkgewogICAgICAgIGlmICggISRTZWxmLT57JE9iamVjdH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiR290IG5vICRPYmplY3QhIiApOwogICAgICAgIH0KICAgIH0KICAgICRTZWxmLT57Q0lQQWxsb2NhdGVPYmplY3R9ICA9IEtlcm5lbDo6U3lzdGVtOjpJVFNNQ0lQQWxsb2NhdGUtPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntEeW5hbWljRmllbGRPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZC0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e1ByaW9yaXR5T2JqZWN0fSAgICAgPSBLZXJuZWw6OlN5c3RlbTo6UHJpb3JpdHktPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntWYWxpZE9iamVjdH0gICAgICAgID0gS2VybmVsOjpTeXN0ZW06OlZhbGlkLT5uZXcoJVBhcmFtKTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIElUU01Dcml0aWNhbGl0eSBhbmQgSVRTTUltcGFjdAogICAgbXkgJER5bmFtaWNGaWVsZENvbmZpZ0FycmF5UmVmID0gJFNlbGYtPntEeW5hbWljRmllbGRPYmplY3R9LT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gWydUaWNrZXQnXSwKICAgICAgICBGaWVsZEZpbHRlciA9PiB7CiAgICAgICAgICAgIElUU01Dcml0aWNhbGl0eSA9PiAxLAogICAgICAgICAgICBJVFNNSW1wYWN0ICAgICAgPT4gMSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZCB2YWx1ZSBmb3IgSVRTTUNyaXRpY2FsaXR5IGFuZCBJVFNNSW1wYWN0CiAgICBteSAlUG9zc2libGVWYWx1ZXM7CiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZENvbmZpZ0FycmF5UmVmfSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICMgZ2V0IFBvc3NpYmxlVmFsdWVzCiAgICAgICAgJFBvc3NpYmxlVmFsdWVzeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfQogICAgICAgICAgICA9ICREeW5hbWljRmllbGRDb25maWctPntDb25maWd9LT57UG9zc2libGVWYWx1ZXN9IHx8IHt9OwogICAgfQoKICAgICMgc2V0IHRoZSBjcml0aWNhbGl0eSBsaXN0CiAgICAkU2VsZi0+e0NyaXRpY2FsaXR5TGlzdH0gPSAkUG9zc2libGVWYWx1ZXN7SVRTTUNyaXRpY2FsaXR5fTsKCiAgICAjIHNldCB0aGUgaW1wYWN0IGxpc3QKICAgICRTZWxmLT57SW1wYWN0TGlzdH0gPSAkUG9zc2libGVWYWx1ZXN7SVRTTUltcGFjdH07CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgdGhlIHByaW9yaXR5IGxpc3QKICAgIG15ICVQcmlvcml0eUxpc3QgPSAkU2VsZi0+e1ByaW9yaXR5T2JqZWN0fS0+UHJpb3JpdHlMaXN0KAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGNyaXRpY2FsaXR5LCBpbXBhY3QgYW5kIHByaW9yaXR5IGFsbG9jYXRpb24KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGlmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdDSVBBbGxvY2F0ZScgKSB7CgogICAgICAgICMgZ2V0IGFsbCBQcmlvcml0eUlEcyBvZiB0aGUgbWF0cml4CiAgICAgICAgbXkgJEFsbG9jYXRlRGF0YTsKICAgICAgICBmb3IgbXkgJEltcGFjdCAoIHNvcnQga2V5cyAleyAkU2VsZi0+e0ltcGFjdExpc3R9IH0gKSB7CgogICAgICAgICAgICBDUklUSUNBTElUWToKICAgICAgICAgICAgZm9yIG15ICRDcml0aWNhbGl0eSAoIHNvcnQga2V5cyAleyAkU2VsZi0+e0NyaXRpY2FsaXR5TGlzdH0gfSApIHsKCiAgICAgICAgICAgICAgICAjIGJ1aWxkIGZpZWxkIG5hbWUgZm9yIHByaW9yaXR5IGlkCiAgICAgICAgICAgICAgICBteSAkRmllbGROYW1lID0gIlByaW9yaXR5SUQiIC4gJEltcGFjdCAuICctJyAuICRDcml0aWNhbGl0eTsKCiAgICAgICAgICAgICAgICAjIGNsZWFuIHVwIGFsbCB3aGl0ZXNwYWNlcyBiZWNhdXNlIHRoZXkgYXJlIG5vdCBhbGxvd2VkIGluIEhUTUwgSUQtQXR0cmlidXRlcwogICAgICAgICAgICAgICAgJEZpZWxkTmFtZSA9fiBzeyBccysgfXt9Z3htczsKCiAgICAgICAgICAgICAgICAjIGdldCBmb3JtIHBhcmFtIGZvciBwcmlvcml0eSBpZAogICAgICAgICAgICAgICAgbXkgJFByaW9yaXR5SUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oCiAgICAgICAgICAgICAgICAgICAgUGFyYW0gPT4gJEZpZWxkTmFtZSwKICAgICAgICAgICAgICAgICkgfHwgJyc7CgogICAgICAgICAgICAgICAgbmV4dCBDUklUSUNBTElUWSBpZiAhJFByaW9yaXR5SUQ7CgogICAgICAgICAgICAgICAgJEFsbG9jYXRlRGF0YS0+eyRJbXBhY3R9LT57JENyaXRpY2FsaXR5fSA9ICRQcmlvcml0eUlEOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIHVwZGF0ZSBhbGxvY2F0aW9ucwogICAgICAgICRTZWxmLT57Q0lQQWxsb2NhdGVPYmplY3R9LT5BbGxvY2F0ZVVwZGF0ZSgKICAgICAgICAgICAgQWxsb2NhdGVEYXRhID0+ICRBbGxvY2F0ZURhdGEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIG92ZXJ2aWV3CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNlIHsKCiAgICAgICAgIyBnZXQgYWxsb2NhdGlvbiBkYXRhCiAgICAgICAgbXkgJEFsbG9jYXRlRGF0YSA9ICRTZWxmLT57Q0lQQWxsb2NhdGVPYmplY3R9LT5BbGxvY2F0ZUxpc3QoCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CgogICAgICAgIG15ICRBbGxvY2F0ZU1hdHJpeDsKICAgICAgICAkQWxsb2NhdGVNYXRyaXgtPlswXS0+WzBdLT57T2JqZWN0VHlwZX0gPQogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnSW1wYWN0JykgLiAnIC8gJwogICAgICAgICAgICAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdDcml0aWNhbGl0eScpOwogICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WzBdLT5bMF0tPntDbGFzc30gPSAnSGVhZGVyQ29sdW1uRGVzY3JpcHRpb24nOwoKICAgICAgICAjIGdlbmVyYXRlIHRhYmxlIGRlc2NyaXB0aW9uIChJbXBhY3QpCiAgICAgICAgbXkgJENvdW50ZXIxID0gMTsKICAgICAgICBmb3IgbXkgJEltcGFjdCAoCiAgICAgICAgICAgIHNvcnQgeyAkU2VsZi0+e0ltcGFjdExpc3R9LT57JGF9IGNtcCAkU2VsZi0+e0ltcGFjdExpc3R9LT57JGJ9IH0KICAgICAgICAgICAga2V5cyAleyAkU2VsZi0+e0ltcGFjdExpc3R9IH0KICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bJENvdW50ZXIxXS0+WzBdLT57T2JqZWN0VHlwZX0gICA9ICdJbXBhY3QnOwogICAgICAgICAgICAkQWxsb2NhdGVNYXRyaXgtPlskQ291bnRlcjFdLT5bMF0tPntJbXBhY3RLZXl9ICAgID0gJEltcGFjdDsKICAgICAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bJENvdW50ZXIxXS0+WzBdLT57T2JqZWN0T3B0aW9ufSA9ICRTZWxmLT57SW1wYWN0TGlzdH0tPnskSW1wYWN0fTsKICAgICAgICAgICAgJENvdW50ZXIxKys7CiAgICAgICAgfQoKICAgICAgICAjIGdlbmVyYXRlIHRhYmxlIGRlc2NyaXB0aW9uIChDcml0aWNhbGl0eSkKICAgICAgICBteSAkQ291bnRlcjIgPSAxOwogICAgICAgIGZvciBteSAkQ3JpdGljYWxpdHkgKAogICAgICAgICAgICBzb3J0IHsgJFNlbGYtPntDcml0aWNhbGl0eUxpc3R9LT57JGF9IGNtcCAkU2VsZi0+e0NyaXRpY2FsaXR5TGlzdH0tPnskYn0gfQogICAgICAgICAgICBrZXlzICV7ICRTZWxmLT57Q3JpdGljYWxpdHlMaXN0fSB9CiAgICAgICAgICAgICkKICAgICAgICB7CiAgICAgICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WzBdLT5bJENvdW50ZXIyXS0+e09iamVjdFR5cGV9ICAgICA9ICdDcml0aWNhbGl0eSc7CiAgICAgICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WzBdLT5bJENvdW50ZXIyXS0+e0NyaXRpY2FsaXR5S2V5fSA9ICRDcml0aWNhbGl0eTsKICAgICAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bMF0tPlskQ291bnRlcjJdLT57T2JqZWN0T3B0aW9ufQogICAgICAgICAgICAgICAgPSAkU2VsZi0+e0NyaXRpY2FsaXR5TGlzdH0tPnskQ3JpdGljYWxpdHl9OwogICAgICAgICAgICAkQ291bnRlcjIrKzsKICAgICAgICB9CgogICAgICAgICMgZ2VuZXJhdGUgY29udGVudAogICAgICAgIGZvciBteSAkUm93ICggMSAuLiAoICRDb3VudGVyMSAtIDEgKSApIHsKICAgICAgICAgICAgZm9yIG15ICRDb2x1bW4gKCAxIC4uICggJENvdW50ZXIyIC0gMSApICkgewoKICAgICAgICAgICAgICAgICMgZXh0cmFjdCBrZXlzCiAgICAgICAgICAgICAgICBteSAkSW1wYWN0S2V5ICAgICAgPSAkQWxsb2NhdGVNYXRyaXgtPlskUm93XS0+WzBdLT57SW1wYWN0S2V5fTsKICAgICAgICAgICAgICAgIG15ICRDcml0aWNhbGl0eUtleSA9ICRBbGxvY2F0ZU1hdHJpeC0+WzBdLT5bJENvbHVtbl0tPntDcml0aWNhbGl0eUtleX07CgogICAgICAgICAgICAgICAgIyBidWlsZCBmaWVsZCBuYW1lIGZvciBwcmlvcml0eSBpZAogICAgICAgICAgICAgICAgbXkgJEZpZWxkTmFtZSA9ICJQcmlvcml0eUlEIiAuICRJbXBhY3RLZXkgLiAnLScgLiAkQ3JpdGljYWxpdHlLZXk7CgogICAgICAgICAgICAgICAgIyBjbGVhbiB1cCBhbGwgd2hpdGVzcGFjZXMgYmVjYXVzZSB0aGV5IGFyZSBub3QgYWxsb3dlZCBpbiBIVE1MIElELUF0dHJpYnV0ZXMKICAgICAgICAgICAgICAgICRGaWVsZE5hbWUgPX4gc3sgXHMrIH17fWd4bXM7CgogICAgICAgICAgICAgICAgIyBjcmVhdGUgb3B0aW9uIHN0cmluZwogICAgICAgICAgICAgICAgbXkgJE9wdGlvblN0cmcgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJEZpZWxkTmFtZSwKICAgICAgICAgICAgICAgICAgICBEYXRhICAgICAgID0+IFwlUHJpb3JpdHlMaXN0LAogICAgICAgICAgICAgICAgICAgIFNlbGVjdGVkSUQgPT4gJEFsbG9jYXRlRGF0YS0+eyRJbXBhY3RLZXl9LT57JENyaXRpY2FsaXR5S2V5fSB8fCAnJywKICAgICAgICAgICAgICAgICAgICBUaXRsZSAgICAgID0+ICdQcmlvcml0eScsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WyRSb3ddLT5bJENvbHVtbl0tPntPcHRpb25TdHJnfSA9ICRPcHRpb25TdHJnOwogICAgICAgICAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bJFJvd10tPlskQ29sdW1uXS0+e0NsYXNzfSAgICAgID0gJ0NvbnRlbnQnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBmb3IgbXkgJFJvdyAoIDAgLi4gJCN7JEFsbG9jYXRlTWF0cml4fSApIHsKCiAgICAgICAgICAgIGlmICggJFJvdyAhPSAwICkgewogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnUm93JyApCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvciBteSAkQ29sdW1uICggMCAuLiAkI3sgJEFsbG9jYXRlTWF0cml4LT5bJFJvd10gfSApIHsKCiAgICAgICAgICAgICAgICAjIGNoZWNrIGlmIHRoZSByb3cgaXMgaGVhZGVyCiAgICAgICAgICAgICAgICBpZiAoICRSb3cgPT0gMCApIHsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCAkQ29sdW1uID09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdIZWFkZXJDb2x1bW5EZXNjcmlwdGlvbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRBbGxvY2F0ZU1hdHJpeC0+WyRSb3ddLT5bJENvbHVtbl0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnSGVhZGVyQ2VsbCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRBbGxvY2F0ZU1hdHJpeC0+WyRSb3ddLT5bJENvbHVtbl0sCiAgICAgICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgdGhlIGNvbHVtbiBpcyBkZXNjcmlwdGlvbgogICAgICAgICAgICAgICAgZWxzaWYgKCAkQ29sdW1uID09IDAgKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnRGVzY3JpcHRpb25DZWxsJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiAkQWxsb2NhdGVNYXRyaXgtPlskUm93XS0+WyRDb2x1bW5dLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdDb250ZW50Q2VsbCcsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJEFsbG9jYXRlTWF0cml4LT5bJFJvd10tPlskQ29sdW1uXSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCBoZWFkZXIgYW5kIG5hdmJhcgogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgZ2VuZXJhdGUgb3V0cHV0CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbklUU01DSVBBbGxvY2F0ZScsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KfQoKMTsK
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FkbWluU2VydmljZS5wbSAtIGFkbWluIGZyb250ZW5kIHRvIG1hbmFnZSBzZXJ2aWNlcwojIENvcHlyaWdodCAoQykgMjAwMS0yMDE0IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IGh0dHBzOi8vZ2l0aHViLmNvbS9PVFJTL290cnMvYmxvYi8wY2QyMmRkMzNjZGQ1MWQ2ZmFjNGM5OTdjMmFlYjY4YThlODk5MTM0L0tlcm5lbC9Nb2R1bGVzL0FkbWluU2VydmljZS5wbQojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFkbWluU2VydmljZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYWxpZDsKIyAtLS0KIyBJVFNNCiMgLS0tCnVzZSBLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkOwp1c2UgS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nOwp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CiMgLS0tCgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgYWxsIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgKHF3KFBhcmFtT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCBDb25maWdPYmplY3QgTG9nT2JqZWN0KSkgewogICAgICAgIGlmICggISRTZWxmLT57JF99ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkXyEiICk7CiAgICAgICAgfQogICAgfQogICAgJFNlbGYtPntTZXJ2aWNlT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlLT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57VmFsaWRPYmplY3R9ICAgPSBLZXJuZWw6OlN5c3RlbTo6VmFsaWQtPm5ldyglUGFyYW0pOwojIC0tLQojIElUU00KIyAtLS0KICAgICRTZWxmLT57RHluYW1pY0ZpZWxkT2JqZWN0fSAgID0gS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZC0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZy0+bmV3KCVQYXJhbSk7CgogICAgIyBnZXQgdGhlIGR5bmFtaWMgZmllbGQgZm9yIElUU01Dcml0aWNhbGl0eQogICAgbXkgJER5bmFtaWNGaWVsZENvbmZpZ0FycmF5UmVmID0gJFNlbGYtPntEeW5hbWljRmllbGRPYmplY3R9LT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gWyAnVGlja2V0JyBdLAogICAgICAgIEZpZWxkRmlsdGVyID0+IHsKICAgICAgICAgICAgSVRTTUNyaXRpY2FsaXR5ID0+IDEsCiAgICAgICAgfSwKICAgICk7CgogICAgIyBnZXQgdGhlIGR5bmFtaWMgZmllbGQgdmFsdWUgZm9yIElUU01Dcml0aWNhbGl0eQogICAgbXkgJVBvc3NpYmxlVmFsdWVzOwogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGRDb25maWcgKCBAeyAkRHluYW1pY0ZpZWxkQ29uZmlnQXJyYXlSZWYgfSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICMgZ2V0IFBvc3NpYmxlVmFsdWVzCiAgICAgICAgJFBvc3NpYmxlVmFsdWVzeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfSA9ICREeW5hbWljRmllbGRDb25maWctPntDb25maWd9LT57UG9zc2libGVWYWx1ZXN9IHx8IHt9OwogICAgfQoKICAgICMgc2V0IHRoZSBjcml0aWNhbGl0eSBsaXN0CiAgICAkU2VsZi0+e0NyaXRpY2FsaXR5TGlzdH0gPSAkUG9zc2libGVWYWx1ZXN7SVRTTUNyaXRpY2FsaXR5fTsKIyAtLS0KCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHNlcnZpY2UgZWRpdAogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCAkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1NlcnZpY2VFZGl0JyApIHsKCiAgICAgICAgIyBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAjIGh0bWwgb3V0cHV0CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+X01hc2tOZXcoCiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBzZXJ2aWNlIHNhdmUKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTZXJ2aWNlU2F2ZScgKSB7CgogICAgICAgICMgY2hhbGxlbmdlIHRva2VuIGNoZWNrIGZvciB3cml0ZSBhY3Rpb24KICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkNoYWxsZW5nZVRva2VuQ2hlY2soKTsKCiAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgbXkgJUdldFBhcmFtOwojIC0tLQojIElUU00KIyAtLS0KIyAgICAgICAgZm9yIChxdyhTZXJ2aWNlSUQgUGFyZW50SUQgTmFtZSBWYWxpZElEIENvbW1lbnQpKSB7CiAgICAgICAgZm9yIChxdyhTZXJ2aWNlSUQgUGFyZW50SUQgTmFtZSBWYWxpZElEIENvbW1lbnQgVHlwZUlEIENyaXRpY2FsaXR5KSkgewojIC0tLQogICAgICAgICAgICAkR2V0UGFyYW17JF99ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAkXyApIHx8ICcnOwogICAgICAgIH0KCiAgICAgICAgbXkgJUVycm9yOwoKICAgICAgICBpZiAoICEkR2V0UGFyYW17TmFtZX0gKSB7CiAgICAgICAgICAgICRFcnJvcnsnTmFtZUludmFsaWQnfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgfQoKICAgICAgICBpZiAoICElRXJyb3IgKSB7CgogICAgICAgICAgICAjIHNhdmUgdG8gZGF0YWJhc2UKICAgICAgICAgICAgaWYgKCAkR2V0UGFyYW17U2VydmljZUlEfSBlcSAnTkVXJyApIHsKICAgICAgICAgICAgICAgICRHZXRQYXJhbXtTZXJ2aWNlSUR9ID0gJFNlbGYtPntTZXJ2aWNlT2JqZWN0fS0+U2VydmljZUFkZCgKICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoICEkR2V0UGFyYW17U2VydmljZUlEfSApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3J7TWVzc2FnZX0gPSAkU2VsZi0+e0xvZ09iamVjdH0tPkdldExvZ0VudHJ5KAogICAgICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICdFcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQgPT4gJ01lc3NhZ2UnLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRTZWxmLT57U2VydmljZU9iamVjdH0tPlNlcnZpY2VVcGRhdGUoCiAgICAgICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgICAgICAgICAgICAgJEVycm9ye01lc3NhZ2V9ID0gJFNlbGYtPntMb2dPYmplY3R9LT5HZXRMb2dFbnRyeSgKICAgICAgICAgICAgICAgICAgICAgICAgVHlwZSA9PiAnRXJyb3InLAogICAgICAgICAgICAgICAgICAgICAgICBXaGF0ID0+ICdNZXNzYWdlJywKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoICElRXJyb3IgKSB7CgogICAgICAgICAgICAgICAgIyB1cGRhdGUgcHJlZmVyZW5jZXMKICAgICAgICAgICAgICAgIG15ICVTZXJ2aWNlRGF0YSA9ICRTZWxmLT57U2VydmljZU9iamVjdH0tPlNlcnZpY2VHZXQoCiAgICAgICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRHZXRQYXJhbXtTZXJ2aWNlSUR9LAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgbXkgJVByZWZlcmVuY2VzID0gKCk7CiAgICAgICAgICAgICAgICBpZiAoICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdTZXJ2aWNlUHJlZmVyZW5jZXMnKSApIHsKICAgICAgICAgICAgICAgICAgICAlUHJlZmVyZW5jZXMgPSAleyAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnU2VydmljZVByZWZlcmVuY2VzJykgfTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZvciBteSAkSXRlbSAoIHNvcnQga2V5cyAlUHJlZmVyZW5jZXMgKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJE1vZHVsZSA9ICRQcmVmZXJlbmNlc3skSXRlbX0tPntNb2R1bGV9CiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6U2VydmljZVByZWZlcmVuY2VzR2VuZXJpYyc7CgogICAgICAgICAgICAgICAgICAgICMgbG9hZCBtb2R1bGUKICAgICAgICAgICAgICAgICAgICBpZiAoICEkU2VsZi0+e01haW5PYmplY3R9LT5SZXF1aXJlKCRNb2R1bGUpICkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBteSAkT2JqZWN0ID0gJE1vZHVsZS0+bmV3KAogICAgICAgICAgICAgICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgICAgICAgICAgICAgQ29uZmlnSXRlbSA9PiAkUHJlZmVyZW5jZXN7JEl0ZW19LAogICAgICAgICAgICAgICAgICAgICAgICBEZWJ1ZyAgICAgID0+ICRTZWxmLT57RGVidWd9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgbXkgJE5vdGU7CiAgICAgICAgICAgICAgICAgICAgbXkgQFBhcmFtcyA9ICRPYmplY3QtPlBhcmFtKCBTZXJ2aWNlRGF0YSA9PiBcJVNlcnZpY2VEYXRhICk7CiAgICAgICAgICAgICAgICAgICAgaWYgKEBQYXJhbXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJUdldFBhcmFtID0gKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBteSAkUGFyYW1JdGVtIChAUGFyYW1zKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteSBAQXJyYXkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRBcnJheSggUGFyYW0gPT4gJFBhcmFtSXRlbS0+e05hbWV9ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkR2V0UGFyYW17ICRQYXJhbUl0ZW0tPntOYW1lfSB9ID0gXEBBcnJheTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoICEkT2JqZWN0LT5SdW4oIEdldFBhcmFtID0+IFwlR2V0UGFyYW0sIFNlcnZpY2VEYXRhID0+IFwlU2VydmljZURhdGEgKSApCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICROb3RlIC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm90aWZ5KCBJbmZvID0+ICRPYmplY3QtPkVycm9yKCkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHJlZGlyZWN0IHRvIG92ZXJ2aWV3CiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgc29tZXRoaW5nIHdlbnQgd3JvbmcKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICRPdXRwdXQgLj0gJEVycm9ye01lc3NhZ2V9CiAgICAgICAgICAgID8gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob3RpZnkoCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdFcnJvcicsCiAgICAgICAgICAgIEluZm8gICAgID0+ICRFcnJvcntNZXNzYWdlfSwKICAgICAgICAgICAgKQogICAgICAgICAgICA6ICcnOwoKICAgICAgICAjIGh0bWwgb3V0cHV0CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+X01hc2tOZXcoCiAgICAgICAgICAgICVFcnJvciwKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CgogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgc2VydmljZSBvdmVydmlldwogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzZSB7CgogICAgICAgICMgb3V0cHV0IGhlYWRlcgogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgY2hlY2sgaWYgc2VydmljZSBpcyBlbmFibGVkIHRvIHVzZSBpdCBoZXJlCiAgICAgICAgaWYgKCAhJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1RpY2tldDo6U2VydmljZScpICkgewogICAgICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm90aWZ5KAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ0Vycm9yJywKICAgICAgICAgICAgICAgIERhdGEgICAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fQogICAgICAgICAgICAgICAgICAgIC0+VHJhbnNsYXRlKCAiUGxlYXNlIGFjdGl2YXRlICVzIGZpcnN0ISIsICJTZXJ2aWNlIiApLAogICAgICAgICAgICAgICAgTGluayA9PgogICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0Jhc2VsaW5rfQogICAgICAgICAgICAgICAgICAgIC4gJ0FjdGlvbj1BZG1pblN5c0NvbmZpZztTdWJhY3Rpb249RWRpdDtTeXNDb25maWdHcm91cD1UaWNrZXQ7U3lzQ29uZmlnU3ViR3JvdXA9Q29yZTo6VGlja2V0I1RpY2tldDo6U2VydmljZScsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCBvdmVydmlldwogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICAgICAgRGF0YSA9PiB7ICVQYXJhbSwgfSwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25MaXN0JyApOwogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkFkZCcgKTsKCiAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcgcmVzdWx0CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdMaXN0JywKICAgICAgICAgICAgRGF0YSA9PiB7ICVQYXJhbSwgfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzZXJ2aWNlIGxpc3QKICAgICAgICBteSAkU2VydmljZUxpc3QgPSAkU2VsZi0+e1NlcnZpY2VPYmplY3R9LT5TZXJ2aWNlTGlzdEdldCgKICAgICAgICAgICAgVmFsaWQgID0+IDAsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBpZiB0aGVyZSBhcmUgYW55IHNlcnZpY2VzIGRlZmluZWQsIHRoZXkgYXJlIHNob3duCiAgICAgICAgaWYgKCBAeyRTZXJ2aWNlTGlzdH0gKSB7CgogICAgICAgICAgICAjIGdldCB2YWxpZCBsaXN0CiAgICAgICAgICAgIG15ICVWYWxpZExpc3QgPSAkU2VsZi0+e1ZhbGlkT2JqZWN0fS0+VmFsaWRMaXN0KCk7CgogICAgICAgICAgICAjIHNvcnQgdGhlIHNlcnZpY2UgbGlzdCBieSBsb25nIHNlcnZpY2UgbmFtZQogICAgICAgICAgICBAeyRTZXJ2aWNlTGlzdH0gPSBzb3J0IHsgJGEtPntOYW1lfSAuICc6OicgY21wICRiLT57TmFtZX0gLiAnOjonIH0gQHskU2VydmljZUxpc3R9OwoKICAgICAgICAgICAgZm9yIG15ICRTZXJ2aWNlRGF0YSAoIEB7JFNlcnZpY2VMaXN0fSApIHsKCiAgICAgICAgICAgICAgICAjIG91dHB1dCByb3cKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdMaXN0Um93JywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJXskU2VydmljZURhdGF9LAogICAgICAgICAgICAgICAgICAgICAgICBWYWxpZCA9PiAkVmFsaWRMaXN0eyAkU2VydmljZURhdGEtPntWYWxpZElEfSB9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgIyBvdGhlcndpc2UgYSBubyBkYXRhIGZvdW5kIG1zZyBpcyBkaXNwbGF5ZWQKICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ05vRGF0YUZvdW5kTXNnJywKICAgICAgICAgICAgICAgIERhdGEgPT4ge30sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdlbmVyYXRlIG91dHB1dAogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5TZXJ2aWNlJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQp9CgpzdWIgX01hc2tOZXcgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlU2VydmljZURhdGE7CgogICAgIyBnZXQgcGFyYW1zCiAgICAkU2VydmljZURhdGF7U2VydmljZUlEfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIlNlcnZpY2VJRCIgKTsKICAgIGlmICggJFNlcnZpY2VEYXRhe1NlcnZpY2VJRH0gbmUgJ05FVycgKSB7CiAgICAgICAgJVNlcnZpY2VEYXRhID0gJFNlbGYtPntTZXJ2aWNlT2JqZWN0fS0+U2VydmljZUdldCgKICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9LAogICAgICAgICAgICBVc2VySUQgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICB9CgogICAgIyBvdXRwdXQgb3ZlcnZpZXcKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgIERhdGEgPT4geyAlUGFyYW0sIH0sCiAgICApOwoKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkxpc3QnICk7CiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25PdmVydmlldycgKTsKCiAgICAjIGdldCBsaXN0IHR5cGUKICAgIG15ICRMaXN0VHlwZSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdUaWNrZXQ6OkZyb250ZW5kOjpMaXN0VHlwZScpOwoKICAgICMgZ2VuZXJhdGUgUGFyZW50T3B0aW9uU3RyZwogICAgbXkgJVNlcnZpY2VMaXN0ID0gJFNlbGYtPntTZXJ2aWNlT2JqZWN0fS0+U2VydmljZUxpc3QoCiAgICAgICAgVmFsaWQgID0+IDAsCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICAkU2VydmljZURhdGF7UGFyZW50T3B0aW9uU3RyZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICAgID0+IFwlU2VydmljZUxpc3QsCiAgICAgICAgTmFtZSAgICAgICAgICAgPT4gJ1BhcmVudElEJywKICAgICAgICBTZWxlY3RlZElEICAgICA9PiAkUGFyYW17UGFyZW50SUR9IHx8ICRTZXJ2aWNlRGF0YXtQYXJlbnRJRH0sCiAgICAgICAgUG9zc2libGVOb25lICAgPT4gMSwKICAgICAgICBUcmVlVmlldyAgICAgICA9PiAoICRMaXN0VHlwZSBlcSAndHJlZScgKSA/IDEgOiAwLAogICAgICAgIERpc2FibGVkQnJhbmNoID0+ICRTZXJ2aWNlRGF0YXtOYW1lfSwKICAgICAgICBUcmFuc2xhdGlvbiAgICA9PiAwLAogICAgKTsKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAjIGdlbmVyYXRlIFR5cGVPcHRpb25TdHJnCiAgICBteSAkVHlwZUxpc3QgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OlNlcnZpY2U6OlR5cGUnLAogICAgKTsKCiAgICAjIGJ1aWxkIHRoZSB0eXBlIGRyb3Bkb3duCiAgICAkU2VydmljZURhdGF7VHlwZU9wdGlvblN0cmd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhID0+ICRUeXBlTGlzdCwKICAgICAgICBOYW1lID0+ICdUeXBlSUQnLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte1R5cGVJRH0gfHwgJFNlcnZpY2VEYXRhe1R5cGVJRH0sCiAgICApOwoKICAgICMgYnVpbGQgdGhlIGNyaXRpY2FsaXR5IGRyb3Bkb3duCiAgICAkU2VydmljZURhdGF7Q3JpdGljYWxpdHlPcHRpb25TdHJnfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICA9PiAkU2VsZi0+e0NyaXRpY2FsaXR5TGlzdH0sCiAgICAgICAgTmFtZSAgICAgICA9PiAnQ3JpdGljYWxpdHknLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte0NyaXRpY2FsaXR5fSB8fCAkU2VydmljZURhdGF7Q3JpdGljYWxpdHl9LAogICAgKTsKIyAtLS0KCiAgICAjIGdldCB2YWxpZCBsaXN0CiAgICBteSAlVmFsaWRMaXN0ICAgICAgICA9ICRTZWxmLT57VmFsaWRPYmplY3R9LT5WYWxpZExpc3QoKTsKICAgIG15ICVWYWxpZExpc3RSZXZlcnNlID0gcmV2ZXJzZSAlVmFsaWRMaXN0OwoKICAgICRTZXJ2aWNlRGF0YXtWYWxpZE9wdGlvblN0cmd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IFwlVmFsaWRMaXN0LAogICAgICAgIE5hbWUgICAgICAgPT4gJ1ZhbGlkSUQnLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFNlcnZpY2VEYXRhe1ZhbGlkSUR9IHx8ICRWYWxpZExpc3RSZXZlcnNle3ZhbGlkfSwKICAgICk7CgogICAgIyBvdXRwdXQgc2VydmljZSBlZGl0CiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ1NlcnZpY2VFZGl0JywKICAgICAgICBEYXRhID0+IHsgJVBhcmFtLCAlU2VydmljZURhdGEsIH0sCiAgICApOwoKICAgICMgc2hvd3MgaGVhZGVyCiAgICBpZiAoICRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9IG5lICdORVcnICkgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0hlYWRlckVkaXQnLAogICAgICAgICAgICBEYXRhID0+IHslU2VydmljZURhdGF9LAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdIZWFkZXJBZGQnICk7CiAgICB9CgogICAgIyBzaG93IGVhY2ggcHJlZmVyZW5jZXMgc2V0dGluZwogICAgbXkgJVByZWZlcmVuY2VzID0gKCk7CiAgICBpZiAoICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdTZXJ2aWNlUHJlZmVyZW5jZXMnKSApIHsKICAgICAgICAlUHJlZmVyZW5jZXMgPSAleyAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnU2VydmljZVByZWZlcmVuY2VzJykgfTsKICAgIH0KICAgIGZvciBteSAkSXRlbSAoIHNvcnQga2V5cyAlUHJlZmVyZW5jZXMgKSB7CiAgICAgICAgbXkgJE1vZHVsZSA9ICRQcmVmZXJlbmNlc3skSXRlbX0tPntNb2R1bGV9CiAgICAgICAgICAgIHx8ICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6U2VydmljZVByZWZlcmVuY2VzR2VuZXJpYyc7CgogICAgICAgICMgbG9hZCBtb2R1bGUKICAgICAgICBpZiAoICEkU2VsZi0+e01haW5PYmplY3R9LT5SZXF1aXJlKCRNb2R1bGUpICkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCk7CiAgICAgICAgfQogICAgICAgIG15ICRPYmplY3QgPSAkTW9kdWxlLT5uZXcoCiAgICAgICAgICAgICV7JFNlbGZ9LAogICAgICAgICAgICBDb25maWdJdGVtID0+ICRQcmVmZXJlbmNlc3skSXRlbX0sCiAgICAgICAgICAgIERlYnVnICAgICAgPT4gJFNlbGYtPntEZWJ1Z30sCiAgICAgICAgKTsKICAgICAgICBteSBAUGFyYW1zID0gJE9iamVjdC0+UGFyYW0oIFNlcnZpY2VEYXRhID0+IFwlU2VydmljZURhdGEgKTsKICAgICAgICBpZiAoQFBhcmFtcykgewogICAgICAgICAgICBmb3IgbXkgJFBhcmFtSXRlbSAoQFBhcmFtcykgewogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdJdGVtJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsgJVBhcmFtLCB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICByZWYoICRQYXJhbUl0ZW0tPntEYXRhfSApIGVxICdIQVNIJwogICAgICAgICAgICAgICAgICAgIHx8IHJlZiggJFByZWZlcmVuY2VzeyRJdGVtfS0+e0RhdGF9ICkgZXEgJ0hBU0gnCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRQYXJhbUl0ZW0tPnsnT3B0aW9uJ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAleyAkUHJlZmVyZW5jZXN7JEl0ZW19IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICV7JFBhcmFtSXRlbX0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAkUGFyYW1JdGVtLT57QmxvY2t9IHx8ICRQcmVmZXJlbmNlc3skSXRlbX0tPntCbG9ja30gfHwgJ09wdGlvbicsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICV7ICRQcmVmZXJlbmNlc3skSXRlbX0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgJXskUGFyYW1JdGVtfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGdlbmVyYXRlIG91dHB1dAogICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KCBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluU2VydmljZScsIERhdGEgPT4gXCVQYXJhbSApOwp9CjE7Cg==
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FkbWluU0xBLnBtIC0gYWRtaW4gZnJvbnRlbmQgdG8gbWFuYWdlIHNsYXMKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyAkb3JpZ2luOiBodHRwczovL2dpdGh1Yi5jb20vT1RSUy9vdHJzL2Jsb2IvMGNkMjJkZDMzY2RkNTFkNmZhYzRjOTk3YzJhZWI2OGE4ZTg5OTEzNC9LZXJuZWwvTW9kdWxlcy9BZG1pblNMQS5wbQojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFkbWluU0xBOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlOwp1c2UgS2VybmVsOjpTeXN0ZW06OlNMQTsKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYWxpZDsKIyAtLS0KIyBJVFNNCiMgLS0tCnVzZSBLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2c7CiMgLS0tCgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgYWxsIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgKHF3KFBhcmFtT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCBDb25maWdPYmplY3QgTG9nT2JqZWN0KSkgewogICAgICAgIGlmICggISRTZWxmLT57JF99ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkXyEiICk7CiAgICAgICAgfQogICAgfQogICAgJFNlbGYtPntTZXJ2aWNlT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlLT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57U0xBT2JqZWN0fSAgICAgPSBLZXJuZWw6OlN5c3RlbTo6U0xBLT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57VmFsaWRPYmplY3R9ICAgPSBLZXJuZWw6OlN5c3RlbTo6VmFsaWQtPm5ldyglUGFyYW0pOwojIC0tLQojIElUU00KIyAtLS0KICAgICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nLT5uZXcoJVBhcmFtKTsKIyAtLS0KCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAlRXJyb3IgPSAoKTsKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIHNsYSBlZGl0CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnU0xBRWRpdCcgKSB7CgogICAgICAgICMgaGVhZGVyCiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBodG1sIG91dHB1dAogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPl9NYXNrTmV3KAogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgc2xhIHNhdmUKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdTTEFTYXZlJyApIHsKCiAgICAgICAgIyBjaGFsbGVuZ2UgdG9rZW4gY2hlY2sgZm9yIHdyaXRlIGFjdGlvbgogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Q2hhbGxlbmdlVG9rZW5DaGVjaygpOwoKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICBteSAlR2V0UGFyYW07CiAgICAgICAgZm9yIG15ICRQYXJhbSAoCiMgLS0tCiMgSVRTTQojIC0tLQojICAgICAgICAgICAgcXcoU0xBSUQgTmFtZSBDYWxlbmRhciBGaXJzdFJlc3BvbnNlVGltZSBGaXJzdFJlc3BvbnNlTm90aWZ5IFNvbHV0aW9uVGltZSBTb2x1dGlvbk5vdGlmeSBVcGRhdGVUaW1lIFVwZGF0ZU5vdGlmeSBWYWxpZElEIENvbW1lbnQpCiAgICAgICAgICAgIHF3KFNMQUlEIE5hbWUgQ2FsZW5kYXIgRmlyc3RSZXNwb25zZVRpbWUgRmlyc3RSZXNwb25zZU5vdGlmeSBTb2x1dGlvblRpbWUgU29sdXRpb25Ob3RpZnkgVXBkYXRlVGltZSBVcGRhdGVOb3RpZnkgVmFsaWRJRCBDb21tZW50IFR5cGVJRCBNaW5UaW1lQmV0d2VlbkluY2lkZW50cykKIyAtLS0KICAgICAgICAgICAgKQogICAgICAgIHsKICAgICAgICAgICAgJEdldFBhcmFteyRQYXJhbX0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICRQYXJhbSApIHx8ICcnOwogICAgICAgIH0KCiAgICAgICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgICAgICAlRXJyb3IgPSAoKTsKICAgICAgICBpZiAoICEkR2V0UGFyYW17TmFtZX0gKSB7CiAgICAgICAgICAgICRFcnJvcnsnTmFtZUludmFsaWQnfSA9ICdTZXJ2ZXJFcnJvcic7CiAgICAgICAgfQoKICAgICAgICAjIGlmIG5vIGVycm9ycyBvY2N1cnJlZAogICAgICAgIGlmICggISVFcnJvciApIHsKCiAgICAgICAgICAgICMgZ2V0IHNlcnZpY2UgaWRzCiAgICAgICAgICAgIG15IEBTZXJ2aWNlSURzID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldEFycmF5KCBQYXJhbSA9PiAnU2VydmljZUlEcycgKTsKICAgICAgICAgICAgJEdldFBhcmFte1NlcnZpY2VJRHN9ID0gXEBTZXJ2aWNlSURzOwoKICAgICAgICAgICAgIyBzYXZlIHRvIGRhdGFiYXNlCiAgICAgICAgICAgIGlmICggISRHZXRQYXJhbXtTTEFJRH0gKSB7CgogICAgICAgICAgICAgICAgIyBhZGQgYSBuZXcgc2xhCiAgICAgICAgICAgICAgICAkR2V0UGFyYW17U0xBSUR9ID0gJFNlbGYtPntTTEFPYmplY3R9LT5TTEFBZGQoCiAgICAgICAgICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCAhJEdldFBhcmFte1NMQUlEfSApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3J7TWVzc2FnZX0gPSAkU2VsZi0+e0xvZ09iamVjdH0tPkdldExvZ0VudHJ5KAogICAgICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICdFcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQgPT4gJ01lc3NhZ2UnLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CgogICAgICAgICAgICAgICAgIyB1cGRhdGUgdGhlIHNsYQogICAgICAgICAgICAgICAgbXkgJFN1Y2Nlc3MgPSAkU2VsZi0+e1NMQU9iamVjdH0tPlNMQVVwZGF0ZSgKICAgICAgICAgICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBpZiAoICEkU3VjY2VzcyApIHsKICAgICAgICAgICAgICAgICAgICAkRXJyb3J7TWVzc2FnZX0gPSAkU2VsZi0+e0xvZ09iamVjdH0tPkdldExvZ0VudHJ5KAogICAgICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICdFcnJvcicsCiAgICAgICAgICAgICAgICAgICAgICAgIFdoYXQgPT4gJ01lc3NhZ2UnLAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICggISVFcnJvciApIHsKCiAgICAgICAgICAgICAgICAjIHVwZGF0ZSBwcmVmZXJlbmNlcwogICAgICAgICAgICAgICAgbXkgJVNMQURhdGEgPSAkU2VsZi0+e1NMQU9iamVjdH0tPlNMQUdldCgKICAgICAgICAgICAgICAgICAgICBTTEFJRCAgPT4gJEdldFBhcmFte1NMQUlEfSwKICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIG15ICVQcmVmZXJlbmNlcyA9ICgpOwogICAgICAgICAgICAgICAgaWYgKCAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnU0xBUHJlZmVyZW5jZXMnKSApIHsKICAgICAgICAgICAgICAgICAgICAlUHJlZmVyZW5jZXMgPSAleyAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnU0xBUHJlZmVyZW5jZXMnKSB9OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZm9yIG15ICRJdGVtICggc29ydCBrZXlzICVQcmVmZXJlbmNlcyApIHsKICAgICAgICAgICAgICAgICAgICBteSAkTW9kdWxlID0gJFByZWZlcmVuY2VzeyRJdGVtfS0+e01vZHVsZX0KICAgICAgICAgICAgICAgICAgICAgICAgfHwgJ0tlcm5lbDo6T3V0cHV0OjpIVE1MOjpTTEFQcmVmZXJlbmNlc0dlbmVyaWMnOwoKICAgICAgICAgICAgICAgICAgICAjIGxvYWQgbW9kdWxlCiAgICAgICAgICAgICAgICAgICAgaWYgKCAhJFNlbGYtPntNYWluT2JqZWN0fS0+UmVxdWlyZSgkTW9kdWxlKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvcigpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgbXkgJE9iamVjdCA9ICRNb2R1bGUtPm5ldygKICAgICAgICAgICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gJFByZWZlcmVuY2VzeyRJdGVtfSwKICAgICAgICAgICAgICAgICAgICAgICAgRGVidWcgICAgICA9PiAkU2VsZi0+e0RlYnVnfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIG15ICROb3RlOwogICAgICAgICAgICAgICAgICAgIG15IEBQYXJhbXMgPSAkT2JqZWN0LT5QYXJhbSggU0xBRGF0YSA9PiBcJVNMQURhdGEgKTsKICAgICAgICAgICAgICAgICAgICBpZiAoQFBhcmFtcykgewogICAgICAgICAgICAgICAgICAgICAgICBteSAlR2V0UGFyYW0gPSAoKTsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yIG15ICRQYXJhbUl0ZW0gKEBQYXJhbXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15IEBBcnJheQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldEFycmF5KCBQYXJhbSA9PiAkUGFyYW1JdGVtLT57TmFtZX0gKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRHZXRQYXJhbXsgJFBhcmFtSXRlbS0+e05hbWV9IH0gPSBcQEFycmF5OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICggISRPYmplY3QtPlJ1biggR2V0UGFyYW0gPT4gXCVHZXRQYXJhbSwgU0xBRGF0YSA9PiBcJVNMQURhdGEgKSApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICROb3RlIC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Tm90aWZ5KCBJbmZvID0+ICRPYmplY3QtPkVycm9yKCkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgfQoKICAgICAgICAjIGhlYWRlcgogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkRXJyb3J7TWVzc2FnZX0KICAgICAgICAgICAgPyAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vdGlmeSgKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ0Vycm9yJywKICAgICAgICAgICAgSW5mbyAgICAgPT4gJEVycm9ye01lc3NhZ2V9LAogICAgICAgICAgICApCiAgICAgICAgICAgIDogJyc7CgogICAgICAgICMgaHRtbCBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT5fTWFza05ldygKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAlR2V0UGFyYW0sCiAgICAgICAgICAgICVFcnJvciwKICAgICAgICApOwoKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBzbGEgb3ZlcnZpZXcKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2UgewoKICAgICAgICAjIG91dHB1dCBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAjIGNoZWNrIGlmIHNlcnZpY2UgaXMgZW5hYmxlZCB0byB1c2UgaXQgaGVyZQogICAgICAgIGlmICggISRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdUaWNrZXQ6OlNlcnZpY2UnKSApIHsKICAgICAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5vdGlmeSgKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdFcnJvcicsCiAgICAgICAgICAgICAgICBEYXRhICAgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0KICAgICAgICAgICAgICAgICAgICAtPlRyYW5zbGF0ZSggIlBsZWFzZSBhY3RpdmF0ZSAlcyBmaXJzdCEiLCAiU2VydmljZSIgKSwKICAgICAgICAgICAgICAgIExpbmsgPT4KICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPntCYXNlbGlua30KICAgICAgICAgICAgICAgICAgICAuICdBY3Rpb249QWRtaW5TeXNDb25maWc7U3ViYWN0aW9uPUVkaXQ7U3lzQ29uZmlnR3JvdXA9VGlja2V0O1N5c0NvbmZpZ1N1Ykdyb3VwPUNvcmU6OlRpY2tldCNUaWNrZXQ6OlNlcnZpY2UnLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ0FjdGlvbkxpc3QnICk7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uQWRkJyApOwoKICAgICAgICAjIG91dHB1dCBvdmVydmlldyByZXN1bHQKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld0xpc3QnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBzZXJ2aWNlIGxpc3QKICAgICAgICBteSAlU2VydmljZUxpc3QgPSAkU2VsZi0+e1NlcnZpY2VPYmplY3R9LT5TZXJ2aWNlTGlzdCgKICAgICAgICAgICAgVmFsaWQgICAgICAgID0+IDAsCiAgICAgICAgICAgIEtlZXBDaGlsZHJlbiA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IHZhbGlkIGxpc3QKICAgICAgICBteSAlVmFsaWRMaXN0ID0gJFNlbGYtPntWYWxpZE9iamVjdH0tPlZhbGlkTGlzdCgpOwoKICAgICAgICAjIGdldCBzbGEgbGlzdAogICAgICAgIG15ICVTTEFMaXN0ID0gJFNlbGYtPntTTEFPYmplY3R9LT5TTEFMaXN0KAogICAgICAgICAgICBWYWxpZCAgPT4gMCwKICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGlmIHRoZXJlIGFyZSBhbnkgU0xBJ3MgZGVmaW5lZCwgdGhleSBhcmUgc2hvd24KICAgICAgICBpZiAoJVNMQUxpc3QpIHsKICAgICAgICAgICAgU0xBSUQ6CiAgICAgICAgICAgIGZvciBteSAkU0xBSUQgKCBzb3J0IHsgbGMgJFNMQUxpc3R7JGF9IGNtcCBsYyAkU0xBTGlzdHskYn0gfSBrZXlzICVTTEFMaXN0ICkgewoKICAgICAgICAgICAgICAgICMgZ2V0IHRoZSBzbGEgZGF0YQogICAgICAgICAgICAgICAgbXkgJVNMQURhdGEgPSAkU2VsZi0+e1NMQU9iamVjdH0tPlNMQUdldCgKICAgICAgICAgICAgICAgICAgICBTTEFJRCAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgYnVpbGQgdGhlIHNlcnZpY2UgbGlzdAogICAgICAgICAgICAgICAgbXkgQFNlcnZpY2VMaXN0OwogICAgICAgICAgICAgICAgZm9yIG15ICRTZXJ2aWNlSUQgKAogICAgICAgICAgICAgICAgICAgIHNvcnQgeyBsYyAkU2VydmljZUxpc3R7JGF9IGNtcCBsYyAkU2VydmljZUxpc3R7JGJ9IH0KICAgICAgICAgICAgICAgICAgICBAeyAkU0xBRGF0YXtTZXJ2aWNlSURzfSB9CiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIHB1c2ggQFNlcnZpY2VMaXN0LCAkU2VydmljZUxpc3R7JFNlcnZpY2VJRH0gfHwgJy0nOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3IGxpc3Qgcm93CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TGlzdFJvdycsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICVTTEFEYXRhLAogICAgICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlID0+ICRTZXJ2aWNlTGlzdFswXSB8fCAnLScsCiAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkID0+ICRWYWxpZExpc3R7ICRTTEFEYXRhe1ZhbGlkSUR9IH0sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgbmV4dCBTTEFJRCBpZiBzY2FsYXIgQFNlcnZpY2VMaXN0IDw9IDE7CgogICAgICAgICAgICAgICAgIyByZW1vdmUgdGhlIGZpcnN0IHNlcnZpY2UgaWQKICAgICAgICAgICAgICAgIHNoaWZ0IEBTZXJ2aWNlTGlzdDsKCiAgICAgICAgICAgICAgICBmb3IgbXkgJFNlcnZpY2VOYW1lIChAU2VydmljZUxpc3QpIHsKCiAgICAgICAgICAgICAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcgbGlzdCByb3cKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld0xpc3RSb3cnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2UgPT4gJFNlcnZpY2VOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICMgb3RoZXJ3aXNlIGEgbm8gZGF0YSBmb3VuZCBtc2cgaXMgZGlzcGxheWVkCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdOb0RhdGFGb3VuZE1zZycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHt9LAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluU0xBJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQp9CgpzdWIgX01hc2tOZXcgewoKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgcGFyYW1zCiAgICBteSAlU0xBRGF0YTsKICAgICRTTEFEYXRhe1NMQUlEfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gJ1NMQUlEJyApIHx8ICcnOwoKICAgIGlmICggJFNMQURhdGF7U0xBSUR9ICkgewoKICAgICAgICAjIGdldCBzbGEgZGF0YQogICAgICAgICVTTEFEYXRhID0gJFNlbGYtPntTTEFPYmplY3R9LT5TTEFHZXQoCiAgICAgICAgICAgIFNMQUlEICA9PiAkU0xBRGF0YXtTTEFJRH0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTTEFEYXRhe1NlcnZpY2VJRH0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICdTZXJ2aWNlSUQnICk7CiAgICB9CgogICAgIyBnZXQgbGlzdCB0eXBlCiAgICBteSAkTGlzdFR5cGUgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnVGlja2V0OjpGcm9udGVuZDo6TGlzdFR5cGUnKTsKCiAgICAjIGdldCBzZXJ2aWNlIGxpc3QKICAgIG15ICVTZXJ2aWNlTGlzdCA9ICRTZWxmLT57U2VydmljZU9iamVjdH0tPlNlcnZpY2VMaXN0KAogICAgICAgIFZhbGlkICAgICAgICA9PiAxLAogICAgICAgIEtlZXBDaGlsZHJlbiA9PiAxLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZ2VuZXJhdGUgU2VydmljZU9wdGlvblN0cmcKICAgICRQYXJhbXtTZXJ2aWNlT3B0aW9uU3RyZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgID0+IFwlU2VydmljZUxpc3QsCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ1NlcnZpY2VJRHMnLAogICAgICAgIFNlbGVjdGVkSUQgID0+ICRTTEFEYXRhe1NlcnZpY2VJRHN9IHx8IFtdLAogICAgICAgIE11bHRpcGxlICAgID0+IDEsCiAgICAgICAgU2l6ZSAgICAgICAgPT4gNSwKICAgICAgICBUcmFuc2xhdGlvbiA9PiAwLAogICAgICAgIFRyZWVWaWV3ICAgID0+ICggJExpc3RUeXBlIGVxICd0cmVlJyApID8gMSA6IDAsCiAgICAgICAgTWF4ICAgICAgICAgPT4gMjAwLAogICAgKTsKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgIyBnZW5lcmF0ZSBUeXBlT3B0aW9uU3RyZwogICAgICAgIG15ICRUeXBlTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OlNMQTo6VHlwZScsCiAgICAgICAgKTsKICAgICAgICAkUGFyYW17VHlwZU9wdGlvblN0cmd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgRGF0YSA9PiAkVHlwZUxpc3QsCiAgICAgICAgICAgIE5hbWUgPT4gJ1R5cGVJRCcsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgPT4gJFNMQURhdGF7VHlwZUlEfSwKICAgICAgICApOwojIC0tLQoKICAgICMgZ2VuZXJhdGUgQ2FsZW5kYXJPcHRpb25TdHJnCiAgICBteSAlQ2FsZW5kYXJMaXN0OwogICAgZm9yIG15ICRDYWxlbmRhck51bWJlciAoICcnLCAxIC4uIDUwICkgewogICAgICAgIGlmICggJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoIlRpbWVWYWNhdGlvbkRheXM6OkNhbGVuZGFyJENhbGVuZGFyTnVtYmVyIikgKSB7CiAgICAgICAgICAgICRDYWxlbmRhckxpc3R7JENhbGVuZGFyTnVtYmVyfSA9ICJDYWxlbmRhciAkQ2FsZW5kYXJOdW1iZXIgLSAiCiAgICAgICAgICAgICAgICAuICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCAiVGltZVpvbmU6OkNhbGVuZGFyIiAuICRDYWxlbmRhck51bWJlciAuICJOYW1lIiApOwogICAgICAgIH0KICAgIH0KICAgICRTTEFEYXRhe0NhbGVuZGFyT3B0aW9uU3RyZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICA9PiBcJUNhbGVuZGFyTGlzdCwKICAgICAgICBOYW1lICAgICAgICAgPT4gJ0NhbGVuZGFyJywKICAgICAgICBTZWxlY3RlZElEICAgPT4gJFBhcmFte0NhbGVuZGFyfSB8fCAkU0xBRGF0YXtDYWxlbmRhcn0sCiAgICAgICAgVHJhbnNsYXRpb24gID0+IDAsCiAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICApOwogICAgbXkgJU5vdGlmeUxldmVsTGlzdCA9ICgKICAgICAgICAxMCA9PiAnMTAlJywKICAgICAgICAyMCA9PiAnMjAlJywKICAgICAgICAzMCA9PiAnMzAlJywKICAgICAgICA0MCA9PiAnNDAlJywKICAgICAgICA1MCA9PiAnNTAlJywKICAgICAgICA2MCA9PiAnNjAlJywKICAgICAgICA3MCA9PiAnNzAlJywKICAgICAgICA4MCA9PiAnODAlJywKICAgICAgICA5MCA9PiAnOTAlJywKICAgICk7CiAgICAkU0xBRGF0YXtGaXJzdFJlc3BvbnNlTm90aWZ5T3B0aW9uU3RyZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICA9PiBcJU5vdGlmeUxldmVsTGlzdCwKICAgICAgICBOYW1lICAgICAgICAgPT4gJ0ZpcnN0UmVzcG9uc2VOb3RpZnknLAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17Rmlyc3RSZXNwb25zZU5vdGlmeX0gfHwgJFNMQURhdGF7Rmlyc3RSZXNwb25zZU5vdGlmeX0sCiAgICAgICAgVHJhbnNsYXRpb24gID0+IDAsCiAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICApOwogICAgJFNMQURhdGF7VXBkYXRlTm90aWZ5T3B0aW9uU3RyZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgIERhdGEgICAgICAgICA9PiBcJU5vdGlmeUxldmVsTGlzdCwKICAgICAgICBOYW1lICAgICAgICAgPT4gJ1VwZGF0ZU5vdGlmeScsCiAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRQYXJhbXtVcGRhdGVOb3RpZnl9IHx8ICRTTEFEYXRhe1VwZGF0ZU5vdGlmeX0sCiAgICAgICAgVHJhbnNsYXRpb24gID0+IDAsCiAgICAgICAgUG9zc2libGVOb25lID0+IDEsCiAgICApOwogICAgJFNMQURhdGF7U29sdXRpb25Ob3RpZnlPcHRpb25TdHJnfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgRGF0YSAgICAgICAgID0+IFwlTm90aWZ5TGV2ZWxMaXN0LAogICAgICAgIE5hbWUgICAgICAgICA9PiAnU29sdXRpb25Ob3RpZnknLAogICAgICAgIFNlbGVjdGVkSUQgICA9PiAkUGFyYW17U29sdXRpb25Ob3RpZnl9IHx8ICRTTEFEYXRhe1NvbHV0aW9uTm90aWZ5fSwKICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICk7CgogICAgIyBnZXQgdmFsaWQgbGlzdAogICAgbXkgJVZhbGlkTGlzdCAgICAgICAgPSAkU2VsZi0+e1ZhbGlkT2JqZWN0fS0+VmFsaWRMaXN0KCk7CiAgICBteSAlVmFsaWRMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJVZhbGlkTGlzdDsKCiAgICAkU0xBRGF0YXtWYWxpZE9wdGlvblN0cmd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICBEYXRhICAgICAgID0+IFwlVmFsaWRMaXN0LAogICAgICAgIE5hbWUgICAgICAgPT4gJ1ZhbGlkSUQnLAogICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte1ZhbGlkSUR9IHx8ICRTTEFEYXRhe1ZhbGlkSUR9IHx8ICRWYWxpZExpc3RSZXZlcnNle3ZhbGlkfSwKICAgICk7CgogICAgIyBvdXRwdXQgc2xhIGVkaXQKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlUGFyYW0KICAgICAgICB9LAogICAgKTsKCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKCBOYW1lID0+ICdBY3Rpb25MaXN0JyApOwogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnQWN0aW9uT3ZlcnZpZXcnICk7CgogICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICBOYW1lID0+ICdTTEFFZGl0JywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAlU0xBRGF0YSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIHNob3dzIGhlYWRlcgogICAgaWYgKCAkU0xBRGF0YXtTTEFJRH0gKSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAnSGVhZGVyRWRpdCcgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soIE5hbWUgPT4gJ0hlYWRlckFkZCcgKTsKICAgIH0KCiAgICAjIHNob3cgZWFjaCBwcmVmZXJlbmNlcyBzZXR0aW5nCiAgICBteSAlUHJlZmVyZW5jZXMgPSAoKTsKICAgIGlmICggJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1NMQVByZWZlcmVuY2VzJykgKSB7CiAgICAgICAgJVByZWZlcmVuY2VzID0gJXsgJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1NMQVByZWZlcmVuY2VzJykgfTsKICAgIH0KICAgIGZvciBteSAkSXRlbSAoIHNvcnQga2V5cyAlUHJlZmVyZW5jZXMgKSB7CiAgICAgICAgbXkgJE1vZHVsZSA9ICRQcmVmZXJlbmNlc3skSXRlbX0tPntNb2R1bGV9CiAgICAgICAgICAgIHx8ICdLZXJuZWw6Ok91dHB1dDo6SFRNTDo6U0xBUHJlZmVyZW5jZXNHZW5lcmljJzsKCiAgICAgICAgIyBsb2FkIG1vZHVsZQogICAgICAgIGlmICggISRTZWxmLT57TWFpbk9iamVjdH0tPlJlcXVpcmUoJE1vZHVsZSkgKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoKTsKICAgICAgICB9CiAgICAgICAgbXkgJE9iamVjdCA9ICRNb2R1bGUtPm5ldygKICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgIENvbmZpZ0l0ZW0gPT4gJFByZWZlcmVuY2VzeyRJdGVtfSwKICAgICAgICAgICAgRGVidWcgICAgICA9PiAkU2VsZi0+e0RlYnVnfSwKICAgICAgICApOwogICAgICAgIG15IEBQYXJhbXMgPSAkT2JqZWN0LT5QYXJhbSggU0xBRGF0YSA9PiBcJVNMQURhdGEgKTsKICAgICAgICBpZiAoQFBhcmFtcykgewogICAgICAgICAgICBmb3IgbXkgJFBhcmFtSXRlbSAoQFBhcmFtcykgewogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdTTEFJdGVtJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsgJVBhcmFtLCB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICgKICAgICAgICAgICAgICAgICAgICByZWYoICRQYXJhbUl0ZW0tPntEYXRhfSApIGVxICdIQVNIJwogICAgICAgICAgICAgICAgICAgIHx8IHJlZiggJFByZWZlcmVuY2VzeyRJdGVtfS0+e0RhdGF9ICkgZXEgJ0hBU0gnCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICRQYXJhbUl0ZW0tPnsnT3B0aW9uJ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICAgICAgICAgICAgICAleyAkUHJlZmVyZW5jZXN7JEl0ZW19IH0sCiAgICAgICAgICAgICAgICAgICAgICAgICV7JFBhcmFtSXRlbX0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAkUGFyYW1JdGVtLT57QmxvY2t9IHx8ICRQcmVmZXJlbmNlc3skSXRlbX0tPntCbG9ja30gfHwgJ09wdGlvbicsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICV7ICRQcmVmZXJlbmNlc3skSXRlbX0gfSwKICAgICAgICAgICAgICAgICAgICAgICAgJXskUGFyYW1JdGVtfSwKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBvdXRwdXQgYmFjawogICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KCBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluU0xBJywgRGF0YSA9PiBcJVBhcmFtICk7Cn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2UucG0gLSB0aGUgT1RSUyBJVFNNIFNlcnZpY2UgbW9kdWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTQgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFnZW50SVRTTVNlcnZpY2U7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlNlcnZpY2U7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0IChxdyhDb25maWdPYmplY3QgUGFyYW1PYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IExvZ09iamVjdCkpIHsKICAgICAgICBpZiAoICEkU2VsZi0+eyRPYmplY3R9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkT2JqZWN0ISIgKTsKICAgICAgICB9CiAgICB9CiAgICAkU2VsZi0+e1NlcnZpY2VPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UtPm5ldyglUGFyYW0pOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgb3V0cHV0IG92ZXJ2aWV3CiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgKTsKCiAgICAjIGdldCBzZXJ2aWNlIGxpc3QKICAgIG15ICRTZXJ2aWNlTGlzdCA9ICRTZWxmLT57U2VydmljZU9iamVjdH0tPlNlcnZpY2VMaXN0R2V0KAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgc2V0IGluY2lkZW50IHNpZ25hbAogICAgbXkgJUluY2lTaWduYWxzID0gKAogICAgICAgIG9wZXJhdGlvbmFsID0+ICdncmVlbmxlZCcsCiAgICAgICAgd2FybmluZyAgICAgPT4gJ3llbGxvd2xlZCcsCiAgICAgICAgaW5jaWRlbnQgICAgPT4gJ3JlZGxlZCcsCiAgICApOwoKICAgIGlmICggQHskU2VydmljZUxpc3R9ICkgewoKICAgICAgICAjIHNvcnQgdGhlIHNlcnZpY2UgbGlzdCBieSBsb25nIHNlcnZpY2UgbmFtZQogICAgICAgIEB7JFNlcnZpY2VMaXN0fSA9IHNvcnQgeyAkYS0+e05hbWV9IC4gJzo6JyBjbXAgJGItPntOYW1lfSAuICc6OicgfSBAeyRTZXJ2aWNlTGlzdH07CgogICAgICAgIGZvciBteSAkU2VydmljZURhdGEgKCBAeyRTZXJ2aWNlTGlzdH0gKSB7CgogICAgICAgICAgICAjIG91dHB1dCBvdmVydmlldyByb3cKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3Um93JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICV7JFNlcnZpY2VEYXRhfSwKICAgICAgICAgICAgICAgICAgICBOYW1lICAgICAgICAgID0+ICRTZXJ2aWNlRGF0YS0+e05hbWV9LAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTaWduYWwgPT4gJEluY2lTaWduYWxzeyAkU2VydmljZURhdGEtPntDdXJJbmNpU3RhdGVUeXBlfSB9LAogICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICAgICAgPT4gJFNlcnZpY2VEYXRhLT57Q3VySW5jaVN0YXRlVHlwZX0sCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIG90aGVyd2lzZSBpdCBkaXNwbGF5cyBhIG5vIGRhdGEgZm91bmQgbWVzc2FnZQogICAgZWxzZSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnTm9EYXRhRm91bmRNc2cnLAogICAgICAgICk7CiAgICB9CgogICAgIyBpbnZlc3RpZ2F0ZSByZWZyZXNoCiAgICBteSAkUmVmcmVzaCA9ICRTZWxmLT57VXNlclJlZnJlc2hUaW1lfSA/IDYwICogJFNlbGYtPntVc2VyUmVmcmVzaFRpbWV9IDogdW5kZWY7CgogICAgIyBvdXRwdXQgaGVhZGVyCiAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoCiAgICAgICAgVGl0bGUgICA9PiAnT3ZlcnZpZXcnLAogICAgICAgIFJlZnJlc2ggPT4gJFJlZnJlc2gsCiAgICApOwogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCiAgICAjIGdlbmVyYXRlIG91dHB1dAogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTVNlcnZpY2UnLAogICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgKTsKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKMTsK
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2VQcmludC5wbSAtIHByaW50IGxheW91dCBmb3IgaXRzbSBzZXJ2aWNlIGFnZW50IGludGVyZmFjZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE0IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01TZXJ2aWNlUHJpbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlBERjsKdXNlIEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlOwp1c2UgS2VybmVsOjpTeXN0ZW06OlNMQTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKHF3KENvbmZpZ09iamVjdCBQYXJhbU9iamVjdCBEQk9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0KSkgewogICAgICAgIGlmICggISRTZWxmLT57JE9iamVjdH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiR290IG5vICRPYmplY3QhIiApOwogICAgICAgIH0KICAgIH0KICAgICRTZWxmLT57UERGT2JqZWN0fSAgICAgPSBLZXJuZWw6OlN5c3RlbTo6UERGLT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57U2VydmljZU9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZS0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e1NMQU9iamVjdH0gICAgID0gS2VybmVsOjpTeXN0ZW06OlNMQS0+bmV3KCVQYXJhbSk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgcGFyYW1zCiAgICBteSAkU2VydmljZUlEID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnU2VydmljZUlEJyApOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkU2VydmljZUlEICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICdObyBTZXJ2aWNlSUQgaXMgZ2l2ZW4hJywKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBzZXJ2aWNlCiAgICBteSAlU2VydmljZSA9ICRTZWxmLT57U2VydmljZU9iamVjdH0tPlNlcnZpY2VHZXQoCiAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgIEluY2lkZW50U3RhdGUgPT4gMSwKICAgICk7CiAgICBpZiAoICEkU2VydmljZXtTZXJ2aWNlSUR9ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICJTZXJ2aWNlSUQgJFNlcnZpY2VJRCBub3QgZm91bmQgaW4gZGF0YWJhc2UhIiwKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBzbGEgbGlzdAogICAgbXkgJVNMQUxpc3QgPSAkU2VsZi0+e1NMQU9iamVjdH0tPlNMQUxpc3QoCiAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNle1NlcnZpY2VJRH0sCiAgICAgICAgVXNlcklEICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBnZXQgdXNlciBkYXRhIChjcmVhdGUgYnkpCiAgICAkU2VydmljZXtDcmVhdGVCeU5hbWV9ID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+VXNlck5hbWUoCiAgICAgICAgVXNlcklEID0+ICRTZXJ2aWNle0NyZWF0ZUJ5fSwKICAgICk7CgogICAgIyBnZXQgdXNlciBkYXRhIChjaGFuZ2UgYnkpCiAgICAkU2VydmljZXtDaGFuZ2VCeU5hbWV9ID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+VXNlck5hbWUoCiAgICAgICAgVXNlcklEID0+ICRTZXJ2aWNle0NoYW5nZUJ5fSwKICAgICk7CgogICAgIyBnZW5lcmF0ZSBwZGYgb3V0cHV0CiAgICBpZiAoICRTZWxmLT57UERGT2JqZWN0fSApIHsKICAgICAgICBteSAlUGFnZTsKCiAgICAgICAgIyBnZXQgbWF4aW11bSBudW1iZXIgb2YgcGFnZXMKICAgICAgICAkUGFnZXtNYXhQYWdlc30gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnUERGOjpNYXhQYWdlcycpOwogICAgICAgIGlmICggISRQYWdle01heFBhZ2VzfSB8fCAkUGFnZXtNYXhQYWdlc30gPCAxIHx8ICRQYWdle01heFBhZ2VzfSA+IDEwMDAgKSB7CiAgICAgICAgICAgICRQYWdle01heFBhZ2VzfSA9IDEwMDsKICAgICAgICB9CiAgICAgICAgJFBhZ2V7TWFyZ2luVG9wfSAgICA9IDMwOwogICAgICAgICRQYWdle01hcmdpblJpZ2h0fSAgPSA0MDsKICAgICAgICAkUGFnZXtNYXJnaW5Cb3R0b219ID0gNDA7CiAgICAgICAgJFBhZ2V7TWFyZ2luTGVmdH0gICA9IDQwOwogICAgICAgICRQYWdle0hlYWRlclJpZ2h0fSAgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnU2VydmljZScpOwogICAgICAgICRQYWdle0hlYWRsaW5lTGVmdH0gPSAkU2VydmljZXtOYW1lU2hvcnR9OwogICAgICAgICRQYWdle0hlYWRsaW5lUmlnaHR9CiAgICAgICAgICAgID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ3ByaW50ZWQgYnknKSAuICcgJwogICAgICAgICAgICAuICRTZWxmLT57VXNlckZ1bGxuYW1lfSAuICcgJwogICAgICAgICAgICAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KCBUZW1wbGF0ZSA9PiAnJEVudnsiVGltZSJ9JyApOwogICAgICAgICRQYWdle0Zvb3RlckxlZnR9ID0gJyc7CiAgICAgICAgJFBhZ2V7UGFnZVRleHR9ICAgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnUGFnZScpOwogICAgICAgICRQYWdle1BhZ2VDb3VudH0gID0gMTsKCiAgICAgICAgIyBjcmVhdGUgbmV3IHBkZiBkb2N1bWVudAogICAgICAgICRTZWxmLT57UERGT2JqZWN0fS0+RG9jdW1lbnROZXcoCiAgICAgICAgICAgIFRpdGxlICA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnUHJvZHVjdCcpIC4gJzogJyAuICRTZXJ2aWNle05hbWVTaG9ydH0sCiAgICAgICAgICAgIEVuY29kZSA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntVc2VyQ2hhcnNldH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjcmVhdGUgZmlyc3QgcGRmIHBhZ2UKICAgICAgICAkU2VsZi0+e1BERk9iamVjdH0tPlBhZ2VOZXcoCiAgICAgICAgICAgICVQYWdlLAogICAgICAgICAgICBGb290ZXJSaWdodCA9PiAkUGFnZXtQYWdlVGV4dH0gLiAnICcgLiAkUGFnZXtQYWdlQ291bnR9LAogICAgICAgICk7CiAgICAgICAgJFBhZ2V7UGFnZUNvdW50fSsrOwoKICAgICAgICAjIG91dHB1dCBnZW5lcmFsIGluZm9zCiAgICAgICAgJFNlbGYtPl9QREZPdXRwdXRHZW5lcmFsSW5mb3MoCiAgICAgICAgICAgIFBhZ2UgICAgPT4gXCVQYWdlLAogICAgICAgICAgICBTZXJ2aWNlID0+IFwlU2VydmljZSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBhc3NvY2lhdGVkIHNsYXMKICAgICAgICBpZiAoJVNMQUxpc3QpIHsKICAgICAgICAgICAgJFNlbGYtPl9QREZPdXRwdXRBc3NvY2lhdGVkU0xBcygKICAgICAgICAgICAgICAgIFBhZ2UgICAgPT4gXCVQYWdlLAogICAgICAgICAgICAgICAgU0xBTGlzdCA9PiBcJVNMQUxpc3QsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCBkZXRhaWxlZCBpbmZvcwogICAgICAgICRTZWxmLT5fUERGT3V0cHV0RGV0YWlsZWRJbmZvcygKICAgICAgICAgICAgUGFnZSAgICA9PiBcJVBhZ2UsCiAgICAgICAgICAgIFNlcnZpY2UgPT4gXCVTZXJ2aWNlLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIGZpbGUgbmFtZQogICAgICAgIG15ICRGaWxlbmFtZSA9ICRTZWxmLT57TWFpbk9iamVjdH0tPkZpbGVuYW1lQ2xlYW5VcCgKICAgICAgICAgICAgRmlsZW5hbWUgPT4gJFNlcnZpY2V7TmFtZVNob3J0fSwKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0F0dGFjaG1lbnQnLAogICAgICAgICk7CiAgICAgICAgbXkgKCAkcywgJG0sICRoLCAkRCwgJE0sICRZICkgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgICAgIFN5c3RlbVRpbWUgPT4gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZSgpLAogICAgICAgICk7CiAgICAgICAgJE0gPSBzcHJpbnRmKCAiJTAyZCIsICRNICk7CiAgICAgICAgJEQgPSBzcHJpbnRmKCAiJTAyZCIsICREICk7CiAgICAgICAgJGggPSBzcHJpbnRmKCAiJTAyZCIsICRoICk7CiAgICAgICAgJG0gPSBzcHJpbnRmKCAiJTAyZCIsICRtICk7CgogICAgICAgICMgcmV0dXJuIHRoZSBwZGYgZG9jdW1lbnQKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5BdHRhY2htZW50KAogICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnc2VydmljZV8nIC4gJEZpbGVuYW1lIC4gIl8kWS0kTS0kRFxfJGgtJG0ucGRmIiwKICAgICAgICAgICAgQ29udGVudFR5cGUgPT4gJ2FwcGxpY2F0aW9uL3BkZicsCiAgICAgICAgICAgIENvbnRlbnQgICAgID0+ICRTZWxmLT57UERGT2JqZWN0fS0+RG9jdW1lbnRPdXRwdXQoKSwKICAgICAgICAgICAgVHlwZSAgICAgICAgPT4gJ2F0dGFjaG1lbnQnLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZW5lcmF0ZSBodG1sIG91dHB1dAogICAgZWxzZSB7CgogICAgICAgICMgb3V0cHV0IGhlYWRlcgogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPlByaW50SGVhZGVyKCBWYWx1ZSA9PiAkU2VydmljZXtOYW1lU2hvcnR9ICk7CgogICAgICAgICMgb3V0cHV0IGFzc29jaWF0ZWQgc2xhcwogICAgICAgIGlmICgga2V5cyAlU0xBTGlzdCApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jayggTmFtZSA9PiAiQXNzb2NpYXRlZFNMQXMiICk7CiAgICAgICAgICAgIGZvciBteSAkU0xBSUQgKCBzb3J0IGtleXMgJVNMQUxpc3QgKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gIkFzc29jaWF0ZWRTTEFzUm93IiwKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAkU0xBTGlzdHskU0xBSUR9LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIGdlbmVyYXRlIG91dHB1dAogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNU2VydmljZVByaW50JywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlU2VydmljZSwKICAgICAgICApOwoKICAgICAgICAjIGFkZCBmb290ZXIKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UHJpbnRGb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9Cn0KCnN1YiBfUERGT3V0cHV0R2VuZXJhbEluZm9zIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFBhZ2UgU2VydmljZSkpIHsKICAgICAgICBpZiAoICFkZWZpbmVkICRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIgogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY3JlYXRlIGxlZnQgdGFibGUKICAgIG15ICRUYWJsZUxlZnQgPSBbCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnU2VydmljZScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkUGFyYW17U2VydmljZX0tPntOYW1lU2hvcnR9LAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnQ3VycmVudCBJbmNpZGVudCBTdGF0ZScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkUGFyYW17U2VydmljZX0tPntDdXJJbmNpU3RhdGV9LAogICAgICAgIH0sCiAgICBdOwoKICAgICMgY3JlYXRlIHJpZ2h0IHRhYmxlCiAgICBteSAkVGFibGVSaWdodCA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdDcmVhdGVkJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICAgICAgVGVtcGxhdGUgPT4gJ1slIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdJywKICAgICAgICAgICAgICAgIERhdGEgICAgID0+IFwleyAkUGFyYW17U2VydmljZX0gfSwKICAgICAgICAgICAgKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0NyZWF0ZWQgYnknKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte1NlcnZpY2V9LT57Q3JlYXRlQnlOYW1lfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0xhc3QgY2hhbmdlZCcpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgICAgIFRlbXBsYXRlID0+ICdbJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXScsCiAgICAgICAgICAgICAgICBEYXRhICAgICA9PiBcJXsgJFBhcmFte1NlcnZpY2V9IH0sCiAgICAgICAgICAgICksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdMYXN0IGNoYW5nZWQgYnknKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte1NlcnZpY2V9LT57Q3JlYXRlQnlOYW1lfSwKICAgICAgICB9LAogICAgXTsKCiAgICBteSAkUm93cyA9IEB7JFRhYmxlTGVmdH07CiAgICBpZiAoIEB7JFRhYmxlUmlnaHR9ID4gJFJvd3MgKSB7CiAgICAgICAgJFJvd3MgPSBAeyRUYWJsZVJpZ2h0fTsKICAgIH0KCiAgICBteSAlVGFibGVQYXJhbTsKICAgIGZvciBteSAkUm93ICggMSAuLiAkUm93cyApIHsKICAgICAgICAkUm93LS07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVMZWZ0LT5bJFJvd10tPntLZXl9OwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVswXXtGb250fSAgICAgICAgICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsxXXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlTGVmdC0+WyRSb3ddLT57VmFsdWV9OwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsyXXtDb250ZW50fSAgICAgICAgID0gJyAnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsyXXtCYWNrZ3JvdW5kQ29sb3J9ID0gJyNGRkZGRkYnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVszXXtDb250ZW50fSAgICAgICAgID0gJFRhYmxlUmlnaHQtPlskUm93XS0+e0tleX07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzNde0ZvbnR9ICAgICAgICAgICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzRde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVSaWdodC0+WyRSb3ddLT57VmFsdWV9OwogICAgfQogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMF17V2lkdGh9ID0gODA7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVsxXXtXaWR0aH0gPSAxNzAuNTsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzJde1dpZHRofSA9IDQ7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVszXXtXaWR0aH0gPSA4MDsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzRde1dpZHRofSA9IDE3MC41OwogICAgJFRhYmxlUGFyYW17VHlwZX0gICAgICAgICAgICAgICAgID0gJ0N1dCc7CiAgICAkVGFibGVQYXJhbXtCb3JkZXJ9ICAgICAgICAgICAgICAgPSAwOwogICAgJFRhYmxlUGFyYW17Rm9udFNpemV9ICAgICAgICAgICAgID0gNjsKICAgICRUYWJsZVBhcmFte0JhY2tncm91bmRDb2xvckV2ZW59ICA9ICcjQUFBQUFBJzsKICAgICRUYWJsZVBhcmFte0JhY2tncm91bmRDb2xvck9kZH0gICA9ICcjREREREREJzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmd9ICAgICAgICAgICAgICA9IDE7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nVG9wfSAgICAgICAgICAgPSAzOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ0JvdHRvbX0gICAgICAgID0gMzsKCiAgICAjIG91dHB1dCB0YWJsZQogICAgUEFHRToKICAgIGZvciAoICRQYXJhbXtQYWdlfS0+e1BhZ2VDb3VudH0gLi4gJFBhcmFte1BhZ2V9LT57TWF4UGFnZXN9ICkgewoKICAgICAgICAjIG91dHB1dCB0YWJsZSAob3IgYSBmcmFnbWVudCBvZiBpdCkKICAgICAgICAlVGFibGVQYXJhbSA9ICRTZWxmLT57UERGT2JqZWN0fS0+VGFibGUoJVRhYmxlUGFyYW0pOwoKICAgICAgICAjIHN0b3Agb3V0cHV0IG9yIG91dHB1dCBuZXh0IHBhZ2UKICAgICAgICBsYXN0IFBBR0UgaWYgJFRhYmxlUGFyYW17U3RhdGV9OwoKICAgICAgICAkU2VsZi0+e1BERk9iamVjdH0tPlBhZ2VOZXcoCiAgICAgICAgICAgICV7ICRQYXJhbXtQYWdlfSB9LAogICAgICAgICAgICBGb290ZXJSaWdodCA9PiAkUGFyYW17UGFnZX0tPntQYWdlVGV4dH0gLiAnICcgLiAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9CiAgICAgICAgKTsKICAgICAgICAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9Kys7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCnN1YiBfUERGT3V0cHV0RGV0YWlsZWRJbmZvcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhQYWdlIFNlcnZpY2UpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICRTZWxmLT57UERGT2JqZWN0fS0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtMTUsCiAgICApOwoKICAgICMgb3V0cHV0IGhlYWRsaW5lCiAgICAkU2VsZi0+e1BERk9iamVjdH0tPlRleHQoCiAgICAgICAgVGV4dCAgICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ1NlcnZpY2UnKSwKICAgICAgICBIZWlnaHQgICA9PiA3LAogICAgICAgIFR5cGUgICAgID0+ICdDdXQnLAogICAgICAgIEZvbnQgICAgID0+ICdQcm9wb3J0aW9uYWxCb2xkSXRhbGljJywKICAgICAgICBGb250U2l6ZSA9PiA3LAogICAgICAgIENvbG9yICAgID0+ICcjNjY2NjY2JywKICAgICk7CgogICAgIyBzZXQgbmV3IHBvc2l0aW9uCiAgICAkU2VsZi0+e1BERk9iamVjdH0tPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTQsCiAgICApOwoKICAgICMgY3JlYXRlIHRhYmxlCiAgICBteSAkVGFibGUgPSBbCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnU2VydmljZScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkUGFyYW17U2VydmljZX0tPntOYW1lfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ1R5cGUnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoICRQYXJhbXtTZXJ2aWNlfS0+e1R5cGV9ICksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdDcml0aWNhbGl0eScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCggJFBhcmFte1NlcnZpY2V9LT57Q3JpdGljYWxpdHl9ICksCiAgICAgICAgfSwKICAgIF07CiAgICBteSAlVGFibGVQYXJhbTsKICAgIG15ICRSb3dzID0gQHskVGFibGV9OwogICAgZm9yIG15ICRSb3cgKCAxIC4uICRSb3dzICkgewogICAgICAgICRSb3ctLTsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMF17Q29udGVudH0gPSAkVGFibGUtPlskUm93XS0+e0tleX07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0ZvbnR9ICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsxXXtDb250ZW50fSA9ICRUYWJsZS0+WyRSb3ddLT57VmFsdWV9OwogICAgfQogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMF17V2lkdGh9ID0gODA7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVsxXXtXaWR0aH0gPSA0MzE7CiAgICAkVGFibGVQYXJhbXtUeXBlfSAgICAgICAgICAgICAgICAgPSAnQ3V0JzsKICAgICRUYWJsZVBhcmFte0JvcmRlcn0gICAgICAgICAgICAgICA9IDA7CiAgICAkVGFibGVQYXJhbXtGb250U2l6ZX0gICAgICAgICAgICAgPSA2OwogICAgJFRhYmxlUGFyYW17QmFja2dyb3VuZENvbG9yfSAgICAgID0gJyNEREREREQnOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ30gICAgICAgICAgICAgID0gMTsKICAgICRUYWJsZVBhcmFte1BhZGRpbmdUb3B9ICAgICAgICAgICA9IDM7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nQm90dG9tfSAgICAgICAgPSAzOwoKICAgICMgb3V0cHV0IHRhYmxlCiAgICBQQUdFOgogICAgZm9yICggJFBhcmFte1BhZ2V9LT57UGFnZUNvdW50fSAuLiAkUGFyYW17UGFnZX0tPntNYXhQYWdlc30gKSB7CgogICAgICAgICMgb3V0cHV0IHRhYmxlIChvciBhIGZyYWdtZW50IG9mIGl0KQogICAgICAgICVUYWJsZVBhcmFtID0gJFNlbGYtPntQREZPYmplY3R9LT5UYWJsZSglVGFibGVQYXJhbSk7CgogICAgICAgICMgc3RvcCBvdXRwdXQgb3Igb3V0cHV0IG5leHQgcGFnZQogICAgICAgIGxhc3QgUEFHRSBpZiAkVGFibGVQYXJhbXtTdGF0ZX07CgogICAgICAgICRTZWxmLT57UERGT2JqZWN0fS0+UGFnZU5ldygKICAgICAgICAgICAgJXsgJFBhcmFte1BhZ2V9IH0sCiAgICAgICAgICAgIEZvb3RlclJpZ2h0ID0+ICRQYXJhbXtQYWdlfS0+e1BhZ2VUZXh0fSAuICcgJyAuICRQYXJhbXtQYWdlfS0+e1BhZ2VDb3VudH0KICAgICAgICApOwogICAgICAgICRQYXJhbXtQYWdlfS0+e1BhZ2VDb3VudH0rKzsKICAgIH0KCiAgICByZXR1cm4gMTsKfQoKc3ViIF9QREZPdXRwdXRBc3NvY2lhdGVkU0xBcyB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhQYWdlIFNMQUxpc3QpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICBteSAlVGFibGVQYXJhbTsKICAgIG15ICRSb3cgPSAwOwoKICAgICMgZ2VuZXJhdGUgdGFibGUgZGF0YQogICAgZm9yIG15ICRTTEFJRCAoIHNvcnQga2V5cyAleyAkUGFyYW17U0xBTGlzdH0gfSApIHsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMF17Q29udGVudH0KICAgICAgICAgICAgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnU0xBJykgLiAnOic7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0ZvbnR9ICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsxXXtDb250ZW50fSA9ICRQYXJhbXtTTEFMaXN0fS0+eyRTTEFJRH07CiAgICAgICAgJFJvdysrOwogICAgfQogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMF17V2lkdGh9ID0gODA7CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVsxXXtXaWR0aH0gPSA0MzE7CgogICAgIyBzZXQgbmV3IHBvc2l0aW9uCiAgICAkU2VsZi0+e1BERk9iamVjdH0tPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTE1LAogICAgKTsKCiAgICAjIG91dHB1dCBoZWFkbGluZQogICAgJFNlbGYtPntQREZPYmplY3R9LT5UZXh0KAogICAgICAgIFRleHQgICAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdBc3NvY2lhdGVkIFNMQXMnKSwKICAgICAgICBIZWlnaHQgICA9PiA3LAogICAgICAgIFR5cGUgICAgID0+ICdDdXQnLAogICAgICAgIEZvbnQgICAgID0+ICdQcm9wb3J0aW9uYWxCb2xkSXRhbGljJywKICAgICAgICBGb250U2l6ZSA9PiA3LAogICAgICAgIENvbG9yICAgID0+ICcjNjY2NjY2JywKICAgICk7CgogICAgIyBzZXQgbmV3IHBvc2l0aW9uCiAgICAkU2VsZi0+e1BERk9iamVjdH0tPlBvc2l0aW9uU2V0KAogICAgICAgIE1vdmUgPT4gJ3JlbGF0aXYnLAogICAgICAgIFkgICAgPT4gLTQsCiAgICApOwoKICAgICMgdGFibGUgcGFyYW1zCiAgICAkVGFibGVQYXJhbXtUeXBlfSAgICAgICAgICAgID0gJ0N1dCc7CiAgICAkVGFibGVQYXJhbXtCb3JkZXJ9ICAgICAgICAgID0gMDsKICAgICRUYWJsZVBhcmFte0ZvbnRTaXplfSAgICAgICAgPSA2OwogICAgJFRhYmxlUGFyYW17QmFja2dyb3VuZENvbG9yfSA9ICcjREREREREJzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmd9ICAgICAgICAgPSAxOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ1RvcH0gICAgICA9IDM7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nQm90dG9tfSAgID0gMzsKCiAgICAjIG91dHB1dCB0YWJsZQogICAgUEFHRToKICAgIGZvciAoICRQYXJhbXtQYWdlfS0+e1BhZ2VDb3VudH0gLi4gJFBhcmFte1BhZ2V9LT57TWF4UGFnZXN9ICkgewoKICAgICAgICAjIG91dHB1dCB0YWJsZSAob3IgYSBmcmFnbWVudCBvZiBpdCkKICAgICAgICAlVGFibGVQYXJhbSA9ICRTZWxmLT57UERGT2JqZWN0fS0+VGFibGUoJVRhYmxlUGFyYW0pOwoKICAgICAgICAjIHN0b3Agb3V0cHV0IG9yIG91dHB1dCBuZXh0IHBhZ2UKICAgICAgICBsYXN0IFBBR0UgaWYgJFRhYmxlUGFyYW17U3RhdGV9OwoKICAgICAgICAkU2VsZi0+e1BERk9iamVjdH0tPlBhZ2VOZXcoCiAgICAgICAgICAgICV7ICRQYXJhbXtQYWdlfSB9LAogICAgICAgICAgICBGb290ZXJSaWdodCA9PiAkUGFyYW17UGFnZX0tPntQYWdlVGV4dH0gLiAnICcgLiAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9CiAgICAgICAgKTsKICAgICAgICAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9Kys7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNlcnZpY2Vab29tLnBtIC0gdGhlIE9UUlMgSVRTTSBTZXJ2aWNlIHpvb20gbW9kdWxlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTQgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFnZW50SVRTTVNlcnZpY2Vab29tOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0Owp1c2UgS2VybmVsOjpTeXN0ZW06OlNlcnZpY2U7CnVzZSBLZXJuZWw6OlN5c3RlbTo6U0xBOwoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7JVBhcmFtfTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAocXcoQ29uZmlnT2JqZWN0IFBhcmFtT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCBMb2dPYmplY3QpKSB7CiAgICAgICAgaWYgKCAhJFNlbGYtPnskT2JqZWN0fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCBNZXNzYWdlID0+ICJHb3Qgbm8gJE9iamVjdCEiICk7CiAgICAgICAgfQogICAgfQogICAgJFNlbGYtPntMaW5rT2JqZWN0fSAgICA9IEtlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0LT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57U2VydmljZU9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZS0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e1NMQU9iamVjdH0gICAgID0gS2VybmVsOjpTeXN0ZW06OlNMQS0+bmV3KCVQYXJhbSk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgcGFyYW1zCiAgICBteSAkU2VydmljZUlEID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAnU2VydmljZUlEJyApOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkU2VydmljZUlEICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICdObyBTZXJ2aWNlSUQgaXMgZ2l2ZW4hJywKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBzZXJ2aWNlCiAgICBteSAlU2VydmljZSA9ICRTZWxmLT57U2VydmljZU9iamVjdH0tPlNlcnZpY2VHZXQoCiAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgIEluY2lkZW50U3RhdGUgPT4gMSwKICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICBpZiAoICEkU2VydmljZXtTZXJ2aWNlSUR9ICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICJTZXJ2aWNlSUQgJFNlcnZpY2VJRCBub3QgZm91bmQgaW4gZGF0YWJhc2UhIiwKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHJ1biBjb25maWcgaXRlbSBtZW51IG1vZHVsZXMKICAgIGlmICggcmVmICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdJVFNNU2VydmljZTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUnKSBlcSAnSEFTSCcgKSB7CiAgICAgICAgbXkgJU1lbnVzICAgPSAleyAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnSVRTTVNlcnZpY2U6OkZyb250ZW5kOjpNZW51TW9kdWxlJykgfTsKICAgICAgICBteSAkQ291bnRlciA9IDA7CiAgICAgICAgZm9yIG15ICRNZW51ICggc29ydCBrZXlzICVNZW51cyApIHsKCiAgICAgICAgICAgICMgbG9hZCBtb2R1bGUKICAgICAgICAgICAgaWYgKCAkU2VsZi0+e01haW5PYmplY3R9LT5SZXF1aXJlKCAkTWVudXN7JE1lbnV9LT57TW9kdWxlfSApICkgewogICAgICAgICAgICAgICAgbXkgJE9iamVjdCA9ICRNZW51c3skTWVudX0tPntNb2R1bGV9LT5uZXcoCiAgICAgICAgICAgICAgICAgICAgJXskU2VsZn0sCiAgICAgICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZWxmLT57U2VydmljZUlEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBzZXQgY2xhc3NlcwogICAgICAgICAgICAgICAgaWYgKCAkTWVudXN7JE1lbnV9LT57VGFyZ2V0fSApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICRNZW51c3skTWVudX0tPntUYXJnZXR9IGVxICdQb3BVcCcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRNZW51c3skTWVudX0tPntNZW51Q2xhc3N9ID0gJ0FzUG9wdXAnOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRNZW51c3skTWVudX0tPntUYXJnZXR9IGVxICdCYWNrJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJE1lbnVzeyRNZW51fS0+e01lbnVDbGFzc30gPSAnSGlzdG9yeUJhY2snOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHJ1biBtb2R1bGUKICAgICAgICAgICAgICAgICRDb3VudGVyID0gJE9iamVjdC0+UnVuKAogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlID0+IFwlU2VydmljZSwKICAgICAgICAgICAgICAgICAgICBDb3VudGVyID0+ICRDb3VudGVyLAogICAgICAgICAgICAgICAgICAgIENvbmZpZyAgPT4gJE1lbnVzeyRNZW51fSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5GYXRhbEVycm9yKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgc2xhIGxpc3QKICAgIG15ICVTTEFMaXN0ID0gJFNlbGYtPntTTEFPYmplY3R9LT5TTEFMaXN0KAogICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlELAogICAgICAgIFVzZXJJRCAgICA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwogICAgaWYgKCVTTEFMaXN0KSB7CgogICAgICAgICMgb3V0cHV0IHJvdwogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1NMQScsCiAgICAgICAgKTsKCiAgICAgICAgZm9yIG15ICRTTEFJRCAoIHNvcnQgeyAkU0xBTGlzdHskYX0gY21wICRTTEFMaXN0eyRifSB9IGtleXMgJVNMQUxpc3QgKSB7CgogICAgICAgICAgICAjIGdldCBzbGEgZGF0YQogICAgICAgICAgICBteSAlU0xBID0gJFNlbGYtPntTTEFPYmplY3R9LT5TTEFHZXQoCiAgICAgICAgICAgICAgICBTTEFJRCAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgb3V0cHV0IHJvdwogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnU0xBUm93JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVTTEEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCBsaW5rZWQgb2JqZWN0cwogICAgbXkgJExpbmtMaXN0V2l0aERhdGEgPSAkU2VsZi0+e0xpbmtPYmplY3R9LT5MaW5rTGlzdFdpdGhEYXRhKAogICAgICAgIE9iamVjdCA9PiAnU2VydmljZScsCiAgICAgICAgS2V5ICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgU3RhdGUgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgIyBnZXQgbGluayB0YWJsZSB2aWV3IG1vZGUKICAgIG15ICRMaW5rVGFibGVWaWV3TW9kZSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdMaW5rT2JqZWN0OjpWaWV3TW9kZScpOwoKICAgICMgY3JlYXRlIHRoZSBsaW5rIHRhYmxlCiAgICBteSAkTGlua1RhYmxlU3RyZyA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TGlua09iamVjdFRhYmxlQ3JlYXRlKAogICAgICAgIExpbmtMaXN0V2l0aERhdGEgPT4gJExpbmtMaXN0V2l0aERhdGEsCiAgICAgICAgVmlld01vZGUgICAgICAgICA9PiAkTGlua1RhYmxlVmlld01vZGUsCiAgICApOwoKICAgICMgb3V0cHV0IHRoZSBsaW5rIHRhYmxlCiAgICBpZiAoJExpbmtUYWJsZVN0cmcpIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdMaW5rVGFibGUnIC4gJExpbmtUYWJsZVZpZXdNb2RlLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIExpbmtUYWJsZVN0cmcgPT4gJExpbmtUYWJsZVN0cmcsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIHNldCBpbmNpZGVudCBzaWduYWwKICAgIG15ICVJbmNpU2lnbmFscyA9ICgKICAgICAgICBvcGVyYXRpb25hbCA9PiAnZ3JlZW5sZWQnLAogICAgICAgIHdhcm5pbmcgICAgID0+ICd5ZWxsb3dsZWQnLAogICAgICAgIGluY2lkZW50ICAgID0+ICdyZWRsZWQnLAogICAgKTsKCiAgICAjIGdldCBjcmVhdGUgdXNlciBkYXRhCiAgICAkU2VydmljZXtDcmVhdGVCeU5hbWV9ID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+VXNlck5hbWUoCiAgICAgICAgVXNlcklEID0+ICRTZXJ2aWNle0NyZWF0ZUJ5fSwKICAgICk7CgogICAgIyBnZXQgY2hhbmdlIHVzZXIgZGF0YQogICAgJFNlcnZpY2V7Q2hhbmdlQnlOYW1lfSA9ICRTZWxmLT57VXNlck9iamVjdH0tPlVzZXJOYW1lKAogICAgICAgIFVzZXJJRCA9PiAkU2VydmljZXtDaGFuZ2VCeX0sCiAgICApOwoKICAgICMgc3RvcmUgbGFzdCBzY3JlZW4KICAgICRTZWxmLT57U2Vzc2lvbk9iamVjdH0tPlVwZGF0ZVNlc3Npb25JRCgKICAgICAgICBTZXNzaW9uSUQgPT4gJFNlbGYtPntTZXNzaW9uSUR9LAogICAgICAgIEtleSAgICAgICA9PiAnTGFzdFNjcmVlblZpZXcnLAogICAgICAgIFZhbHVlICAgICA9PiAkU2VsZi0+e1JlcXVlc3RlZFVSTH0sCiAgICApOwoKICAgICMgb3V0cHV0IGhlYWRlcgogICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwoKICAgICMgZ2VuZXJhdGUgb3V0cHV0CiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNU2VydmljZVpvb20nLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJVNlcnZpY2UsCiAgICAgICAgICAgIEN1ckluY2lTaWduYWwgPT4gJEluY2lTaWduYWxzeyAkU2VydmljZXtDdXJJbmNpU3RhdGVUeXBlfSB9LAogICAgICAgIH0sCiAgICApOwogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwoKICAgIHJldHVybiAkT3V0cHV0Owp9CgoxOwo=
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQS5wbSAtIHRoZSBPVFJTIElUU00gU0xBIG1vZHVsZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE0IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01TTEE7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlNMQTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKHF3KENvbmZpZ09iamVjdCBQYXJhbU9iamVjdCBEQk9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0KSkgewogICAgICAgIGlmICggISRTZWxmLT57JE9iamVjdH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiR290IG5vICRPYmplY3QhIiApOwogICAgICAgIH0KICAgIH0KICAgICRTZWxmLT57U0xBT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpTTEEtPm5ldyglUGFyYW0pOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgb3V0cHV0IG92ZXJ2aWV3CiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICBEYXRhID0+IHslUGFyYW19LAogICAgKTsKCiAgICAjIGdldCBzbGEgbGlzdAogICAgbXkgJVNMQUxpc3QgPSAkU2VsZi0+e1NMQU9iamVjdH0tPlNMQUxpc3QoCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CgogICAgaWYgKCVTTEFMaXN0KSB7CiAgICAgICAgZm9yIG15ICRTTEFJRCAoIHNvcnQgeyAkU0xBTGlzdHskYX0gY21wICRTTEFMaXN0eyRifSB9IGtleXMgJVNMQUxpc3QgKSB7CgogICAgICAgICAgICAjIGdldCBzbGEgZGF0YQogICAgICAgICAgICBteSAlU0xBID0gJFNlbGYtPntTTEFPYmplY3R9LT5TTEFHZXQoCiAgICAgICAgICAgICAgICBTTEFJRCAgPT4gJFNMQUlELAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3IHJvdwogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdSb3cnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJVNMQSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgb3RoZXJ3aXNlIGl0IGRpc3BsYXlzIGEgbm8gZGF0YSBmb3VuZCBtZXNzYWdlCiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdOb0RhdGFGb3VuZE1zZycsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGludmVzdGlnYXRlIHJlZnJlc2gKICAgIG15ICRSZWZyZXNoID0gJFNlbGYtPntVc2VyUmVmcmVzaFRpbWV9ID8gNjAgKiAkU2VsZi0+e1VzZXJSZWZyZXNoVGltZX0gOiB1bmRlZjsKCiAgICAjIG91dHB1dCBoZWFkZXIKICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigKICAgICAgICBUaXRsZSAgID0+ICdPdmVydmlldycsCiAgICAgICAgUmVmcmVzaCA9PiAkUmVmcmVzaCwKICAgICk7CiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwoKICAgICMgZ2VuZXJhdGUgb3V0cHV0CiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRJVFNNU0xBJywKICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICk7CiAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CgogICAgcmV0dXJuICRPdXRwdXQ7Cn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVByaW50LnBtIC0gcHJpbnQgbGF5b3V0IGZvciBpdHNtIHNsYSBhZ2VudCBpbnRlcmZhY2UKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWdlbnRJVFNNU0xBUHJpbnQ7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlBERjsKdXNlIEtlcm5lbDo6U3lzdGVtOjpTTEE7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHslUGFyYW19OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0IChxdyhDb25maWdPYmplY3QgUGFyYW1PYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IExvZ09iamVjdCkpIHsKICAgICAgICBpZiAoICEkU2VsZi0+eyRPYmplY3R9ICkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoIE1lc3NhZ2UgPT4gIkdvdCBubyAkT2JqZWN0ISIgKTsKICAgICAgICB9CiAgICB9CiAgICAkU2VsZi0+e1BERk9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6UERGLT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57U0xBT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpTTEEtPm5ldyglUGFyYW0pOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHBhcmFtcwogICAgbXkgJFNMQUlEID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAiU0xBSUQiICk7CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRTTEFJRCApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAiTm8gU0xBSUQgaXMgZ2l2ZW4hIiwKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBzbGEKICAgIG15ICVTTEEgPSAkU2VsZi0+e1NMQU9iamVjdH0tPlNMQUdldCgKICAgICAgICBTTEFJRCAgPT4gJFNMQUlELAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwogICAgaWYgKCAhJFNMQXtTTEFJRH0gKSB7CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgIE1lc3NhZ2UgPT4gIlNMQUlEICRTTEFJRCBub3QgZm91bmQgaW4gZGF0YWJhc2UhIiwKICAgICAgICAgICAgQ29tbWVudCA9PiAnUGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluLicsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjYWxlbmRhciBuYW1lCiAgICBpZiAoICRTTEF7Q2FsZW5kYXJ9ICkgewogICAgICAgICRTTEF7Q2FsZW5kYXJOYW1lfSA9ICJDYWxlbmRhciAkU0xBe0NhbGVuZGFyfSAtICIKICAgICAgICAgICAgLiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCggIlRpbWVab25lOjpDYWxlbmRhciIgLiAkU0xBe0NhbGVuZGFyfSAuICJOYW1lIiApOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNMQXtDYWxlbmRhck5hbWV9ID0gJ0NhbGVuZGFyIERlZmF1bHQnOwogICAgfQoKICAgICMgZ2V0IHVzZXIgZGF0YSAoY3JlYXRlIGJ5KQogICAgJFNMQXtDcmVhdGVCeU5hbWV9ID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+VXNlck5hbWUoCiAgICAgICAgVXNlcklEID0+ICRTTEF7Q3JlYXRlQnl9LAogICAgKTsKCiAgICAjIGdldCB1c2VyIGRhdGEgKGNoYW5nZSBieSkKICAgICRTTEF7Q2hhbmdlQnlOYW1lfSA9ICRTZWxmLT57VXNlck9iamVjdH0tPlVzZXJOYW1lKAogICAgICAgIFVzZXJJRCA9PiAkU0xBe0NoYW5nZUJ5fSwKICAgICk7CgogICAgIyBnZW5lcmF0ZSBwZGYgb3V0cHV0CiAgICBpZiAoICRTZWxmLT57UERGT2JqZWN0fSApIHsKICAgICAgICBteSAlUGFnZTsKCiAgICAgICAgIyBnZXQgbWF4aW11bSBudW1iZXIgb2YgcGFnZXMKICAgICAgICAkUGFnZXtNYXhQYWdlc30gPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnUERGOjpNYXhQYWdlcycpOwogICAgICAgIGlmICggISRQYWdle01heFBhZ2VzfSB8fCAkUGFnZXtNYXhQYWdlc30gPCAxIHx8ICRQYWdle01heFBhZ2VzfSA+IDEwMDAgKSB7CiAgICAgICAgICAgICRQYWdle01heFBhZ2VzfSA9IDEwMDsKICAgICAgICB9CiAgICAgICAgJFBhZ2V7TWFyZ2luVG9wfSAgICA9IDMwOwogICAgICAgICRQYWdle01hcmdpblJpZ2h0fSAgPSA0MDsKICAgICAgICAkUGFnZXtNYXJnaW5Cb3R0b219ID0gNDA7CiAgICAgICAgJFBhZ2V7TWFyZ2luTGVmdH0gICA9IDQwOwogICAgICAgICRQYWdle0hlYWRlclJpZ2h0fSAgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnU0xBJyk7CiAgICAgICAgJFBhZ2V7SGVhZGxpbmVMZWZ0fSA9ICRTTEF7TmFtZX07CiAgICAgICAgJFBhZ2V7SGVhZGxpbmVSaWdodH0KICAgICAgICAgICAgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgncHJpbnRlZCBieScpIC4gJyAnCiAgICAgICAgICAgIC4gJFNlbGYtPntVc2VyRnVsbG5hbWV9IC4gJyAnCiAgICAgICAgICAgIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoIFRlbXBsYXRlID0+ICckRW52eyJUaW1lIn0nICk7CiAgICAgICAgJFBhZ2V7Rm9vdGVyTGVmdH0gPSAnJzsKICAgICAgICAkUGFnZXtQYWdlVGV4dH0gICA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdQYWdlJyk7CiAgICAgICAgJFBhZ2V7UGFnZUNvdW50fSAgPSAxOwoKICAgICAgICAjIGNyZWF0ZSBuZXcgcGRmIGRvY3VtZW50CiAgICAgICAgJFNlbGYtPntQREZPYmplY3R9LT5Eb2N1bWVudE5ldygKICAgICAgICAgICAgVGl0bGUgID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdQcm9kdWN0JykgLiAnOiAnIC4gJFNMQXtOYW1lfSwKICAgICAgICAgICAgRW5jb2RlID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e1VzZXJDaGFyc2V0fSwKICAgICAgICApOwoKICAgICAgICAjIGNyZWF0ZSBmaXJzdCBwZGYgcGFnZQogICAgICAgICRTZWxmLT57UERGT2JqZWN0fS0+UGFnZU5ldygKICAgICAgICAgICAgJVBhZ2UsCiAgICAgICAgICAgIEZvb3RlclJpZ2h0ID0+ICRQYWdle1BhZ2VUZXh0fSAuICcgJyAuICRQYWdle1BhZ2VDb3VudH0sCiAgICAgICAgKTsKICAgICAgICAkUGFnZXtQYWdlQ291bnR9Kys7CgogICAgICAgICMgb3V0cHV0IGdlbmVyYWwgaW5mb3MKICAgICAgICAkU2VsZi0+X1BERk91dHB1dEdlbmVyYWxJbmZvcygKICAgICAgICAgICAgUGFnZSA9PiBcJVBhZ2UsCiAgICAgICAgICAgIFNMQSAgPT4gXCVTTEEsCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgZGV0YWlsZWQgaW5mb3MKICAgICAgICAkU2VsZi0+X1BERk91dHB1dERldGFpbGVkSW5mb3MoCiAgICAgICAgICAgIFBhZ2UgPT4gXCVQYWdlLAogICAgICAgICAgICBTTEEgID0+IFwlU0xBLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIGZpbGUgbmFtZQogICAgICAgIG15ICRGaWxlbmFtZSA9ICRTZWxmLT57TWFpbk9iamVjdH0tPkZpbGVuYW1lQ2xlYW5VcCgKICAgICAgICAgICAgRmlsZW5hbWUgPT4gJFNMQXtOYW1lfSwKICAgICAgICAgICAgVHlwZSAgICAgPT4gJ0F0dGFjaG1lbnQnLAogICAgICAgICk7CiAgICAgICAgbXkgKCAkcywgJG0sICRoLCAkRCwgJE0sICRZICkgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgICAgIFN5c3RlbVRpbWUgPT4gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZSgpLAogICAgICAgICk7CiAgICAgICAgJE0gPSBzcHJpbnRmKCAiJTAyZCIsICRNICk7CiAgICAgICAgJEQgPSBzcHJpbnRmKCAiJTAyZCIsICREICk7CiAgICAgICAgJGggPSBzcHJpbnRmKCAiJTAyZCIsICRoICk7CiAgICAgICAgJG0gPSBzcHJpbnRmKCAiJTAyZCIsICRtICk7CgogICAgICAgICMgcmV0dXJuIHRoZSBwZGYgZG9jdW1lbnQKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5BdHRhY2htZW50KAogICAgICAgICAgICBGaWxlbmFtZSAgICA9PiAnc2xhXycgLiAkRmlsZW5hbWUgLiAiXyRZLSRNLSREXF8kaC0kbS5wZGYiLAogICAgICAgICAgICBDb250ZW50VHlwZSA9PiAnYXBwbGljYXRpb24vcGRmJywKICAgICAgICAgICAgQ29udGVudCAgICAgPT4gJFNlbGYtPntQREZPYmplY3R9LT5Eb2N1bWVudE91dHB1dCgpLAogICAgICAgICAgICBUeXBlICAgICAgICA9PiAnYXR0YWNobWVudCcsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdlbmVyYXRlIGh0bWwgb3V0cHV0CiAgICBlbHNlIHsKCiAgICAgICAgIyBvdXRwdXQgaGVhZGVyCiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UHJpbnRIZWFkZXIoIFZhbHVlID0+ICRTTEF7TmFtZX0gKTsKCiAgICAgICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTVNMQVByaW50JywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlU0xBLAogICAgICAgICk7CgogICAgICAgICMgYWRkIGZvb3RlcgogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5QcmludEZvb3RlcigpOwoKICAgICAgICAjIHJldHVybiBvdXRwdXQKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KfQoKc3ViIF9QREZPdXRwdXRHZW5lcmFsSW5mb3MgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUGFnZSBTTEEpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNyZWF0ZSBsZWZ0IHRhYmxlCiAgICBteSAkVGFibGVMZWZ0ID0gWwogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ1NMQScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkUGFyYW17U0xBfS0+e05hbWV9LAogICAgICAgIH0sCiAgICBdOwoKICAgICMgY3JlYXRlIHJpZ2h0IHRhYmxlCiAgICBteSAkVGFibGVSaWdodCA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdDcmVhdGVkJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICAgICAgVGVtcGxhdGUgPT4gJ1slIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdJywKICAgICAgICAgICAgICAgIERhdGEgICAgID0+IFwleyAkUGFyYW17U0xBfSB9LAogICAgICAgICAgICApLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnQ3JlYXRlZCBieScpIC4gJzonLAogICAgICAgICAgICBWYWx1ZSA9PiAkUGFyYW17U0xBfS0+e0NoYW5nZUJ5TmFtZX0sCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdMYXN0IGNoYW5nZWQnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgICAgICBUZW1wbGF0ZSA9PiAnWyUgRGF0YS5DaGFuZ2VUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV0nLAogICAgICAgICAgICAgICAgRGF0YSAgICAgPT4gXCV7ICRQYXJhbXtTTEF9IH0sCiAgICAgICAgICAgICksCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdMYXN0IGNoYW5nZWQgYnknKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte1NMQX0tPntDaGFuZ2VCeU5hbWV9LAogICAgICAgIH0sCiAgICBdOwoKICAgIG15ICRSb3dzID0gQHskVGFibGVMZWZ0fTsKICAgIGlmICggQHskVGFibGVSaWdodH0gPiAkUm93cyApIHsKICAgICAgICAkUm93cyA9IEB7JFRhYmxlUmlnaHR9OwogICAgfQoKICAgIG15ICVUYWJsZVBhcmFtOwogICAgZm9yIG15ICRSb3cgKCAxIC4uICRSb3dzICkgewogICAgICAgICRSb3ctLTsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMF17Q29udGVudH0gICAgICAgICA9ICRUYWJsZUxlZnQtPlskUm93XS0+e0tleX07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0ZvbnR9ICAgICAgICAgICAgPSAnUHJvcG9ydGlvbmFsQm9sZCc7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzFde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVMZWZ0LT5bJFJvd10tPntWYWx1ZX07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzJde0NvbnRlbnR9ICAgICAgICAgPSAnICc7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzJde0JhY2tncm91bmRDb2xvcn0gPSAnI0ZGRkZGRic7CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzNde0NvbnRlbnR9ICAgICAgICAgPSAkVGFibGVSaWdodC0+WyRSb3ddLT57S2V5fTsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bM117Rm9udH0gICAgICAgICAgICA9ICdQcm9wb3J0aW9uYWxCb2xkJzsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bNF17Q29udGVudH0gICAgICAgICA9ICRUYWJsZVJpZ2h0LT5bJFJvd10tPntWYWx1ZX07CiAgICB9CiAgICAkVGFibGVQYXJhbXtDb2x1bW5EYXRhfVswXXtXaWR0aH0gPSA1MDsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzFde1dpZHRofSA9IDIwMC41OwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMl17V2lkdGh9ID0gNDsKICAgICRUYWJsZVBhcmFte0NvbHVtbkRhdGF9WzNde1dpZHRofSA9IDgwOwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bNF17V2lkdGh9ID0gMTcwLjU7CiAgICAkVGFibGVQYXJhbXtUeXBlfSAgICAgICAgICAgICAgICAgPSAnQ3V0JzsKICAgICRUYWJsZVBhcmFte0JvcmRlcn0gICAgICAgICAgICAgICA9IDA7CiAgICAkVGFibGVQYXJhbXtGb250U2l6ZX0gICAgICAgICAgICAgPSA2OwogICAgJFRhYmxlUGFyYW17QmFja2dyb3VuZENvbG9yRXZlbn0gID0gJyNBQUFBQUEnOwogICAgJFRhYmxlUGFyYW17QmFja2dyb3VuZENvbG9yT2RkfSAgID0gJyNEREREREQnOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ30gICAgICAgICAgICAgID0gMTsKICAgICRUYWJsZVBhcmFte1BhZGRpbmdUb3B9ICAgICAgICAgICA9IDM7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nQm90dG9tfSAgICAgICAgPSAzOwoKICAgICMgb3V0cHV0IHRhYmxlCiAgICBQQUdFOgogICAgZm9yICggJFBhcmFte1BhZ2V9LT57UGFnZUNvdW50fSAuLiAkUGFyYW17UGFnZX0tPntNYXhQYWdlc30gKSB7CgogICAgICAgICMgb3V0cHV0IHRhYmxlIChvciBhIGZyYWdtZW50IG9mIGl0KQogICAgICAgICVUYWJsZVBhcmFtID0gJFNlbGYtPntQREZPYmplY3R9LT5UYWJsZSglVGFibGVQYXJhbSk7CgogICAgICAgICMgc3RvcCBvdXRwdXQgb3Igb3V0cHV0IG5leHQgcGFnZQogICAgICAgIGxhc3QgUEFHRSBpZiAkVGFibGVQYXJhbXtTdGF0ZX07CgogICAgICAgICRTZWxmLT57UERGT2JqZWN0fS0+UGFnZU5ldygKICAgICAgICAgICAgJXsgJFBhcmFte1BhZ2V9IH0sCiAgICAgICAgICAgIEZvb3RlclJpZ2h0ID0+ICRQYXJhbXtQYWdlfS0+e1BhZ2VUZXh0fSAuICcgJyAuICRQYXJhbXtQYWdlfS0+e1BhZ2VDb3VudH0KICAgICAgICApOwogICAgICAgICRQYXJhbXtQYWdlfS0+e1BhZ2VDb3VudH0rKzsKICAgIH0KICAgIHJldHVybiAxOwp9CgpzdWIgX1BERk91dHB1dERldGFpbGVkSW5mb3MgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoUGFnZSBTTEEpKSB7CiAgICAgICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICRTZWxmLT57UERGT2JqZWN0fS0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtMTUsCiAgICApOwoKICAgICMgb3V0cHV0IGhlYWRsaW5lCiAgICAkU2VsZi0+e1BERk9iamVjdH0tPlRleHQoCiAgICAgICAgVGV4dCAgICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ1NMQScpLAogICAgICAgIEhlaWdodCAgID0+IDcsCiAgICAgICAgVHlwZSAgICAgPT4gJ0N1dCcsCiAgICAgICAgRm9udCAgICAgPT4gJ1Byb3BvcnRpb25hbEJvbGRJdGFsaWMnLAogICAgICAgIEZvbnRTaXplID0+IDcsCiAgICAgICAgQ29sb3IgICAgPT4gJyM2NjY2NjYnLAogICAgKTsKCiAgICAjIHNldCBuZXcgcG9zaXRpb24KICAgICRTZWxmLT57UERGT2JqZWN0fS0+UG9zaXRpb25TZXQoCiAgICAgICAgTW92ZSA9PiAncmVsYXRpdicsCiAgICAgICAgWSAgICA9PiAtNCwKICAgICk7CgogICAgIyBjcmVhdGUgdGFibGUKICAgIG15ICRUYWJsZSA9IFsKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdTTEEnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFBhcmFte1NMQX0tPntOYW1lfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ1R5cGUnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoICRQYXJhbXtTTEF9LT57VHlwZX0gKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ0NhbGVuZGFyJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCAkUGFyYW17U0xBfS0+e0NhbGVuZGFyTmFtZX0gKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdGaXJzdCBSZXNwb25zZSBUaW1lJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCggJFBhcmFte1NMQX0tPntGaXJzdFJlc3BvbnNlVGltZX0gKQogICAgICAgICAgICAgICAgLiAnICcKICAgICAgICAgICAgICAgIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ21pbnV0ZXMnKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ1VwZGF0ZSBUaW1lJykgLiAnOicsCiAgICAgICAgICAgIFZhbHVlID0+ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCAkUGFyYW17U0xBfS0+e1VwZGF0ZVRpbWV9ICkgLiAnICcKICAgICAgICAgICAgICAgIC4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ21pbnV0ZXMnKSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ1NvbHV0aW9uIFRpbWUnKSAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoICRQYXJhbXtTTEF9LT57U29sdXRpb25UaW1lfSApCiAgICAgICAgICAgICAgICAuICcgJwogICAgICAgICAgICAgICAgLiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntMYW5ndWFnZU9iamVjdH0tPkdldCgnbWludXRlcycpLAogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBLZXkgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoJ01pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cycpCiAgICAgICAgICAgICAgICAuICc6JywKICAgICAgICAgICAgVmFsdWUgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57TGFuZ3VhZ2VPYmplY3R9LT5HZXQoCiAgICAgICAgICAgICAgICAkUGFyYW17U0xBfS0+e01pblRpbWVCZXR3ZWVuSW5jaWRlbnRzfSwKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgIC4gJyAnCiAgICAgICAgICAgICAgICAuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+e0xhbmd1YWdlT2JqZWN0fS0+R2V0KCdtaW51dGVzJyksCiAgICAgICAgfSwKICAgIF07CiAgICBteSAlVGFibGVQYXJhbTsKICAgIG15ICRSb3dzID0gQHskVGFibGV9OwogICAgZm9yIG15ICRSb3cgKCAxIC4uICRSb3dzICkgewogICAgICAgICRSb3ctLTsKICAgICAgICAkVGFibGVQYXJhbXtDZWxsRGF0YX1bJFJvd11bMF17Q29udGVudH0gPSAkVGFibGUtPlskUm93XS0+e0tleX07CiAgICAgICAgJFRhYmxlUGFyYW17Q2VsbERhdGF9WyRSb3ddWzBde0ZvbnR9ICAgID0gJ1Byb3BvcnRpb25hbEJvbGQnOwogICAgICAgICRUYWJsZVBhcmFte0NlbGxEYXRhfVskUm93XVsxXXtDb250ZW50fSA9ICRUYWJsZS0+WyRSb3ddLT57VmFsdWV9OwogICAgfQogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMF17V2lkdGh9ID0gMTIwOwogICAgJFRhYmxlUGFyYW17Q29sdW1uRGF0YX1bMV17V2lkdGh9ID0gMzkxOwogICAgJFRhYmxlUGFyYW17VHlwZX0gICAgICAgICAgICAgICAgID0gJ0N1dCc7CiAgICAkVGFibGVQYXJhbXtCb3JkZXJ9ICAgICAgICAgICAgICAgPSAwOwogICAgJFRhYmxlUGFyYW17Rm9udFNpemV9ICAgICAgICAgICAgID0gNjsKICAgICRUYWJsZVBhcmFte0JhY2tncm91bmRDb2xvcn0gICAgICA9ICcjREREREREJzsKICAgICRUYWJsZVBhcmFte1BhZGRpbmd9ICAgICAgICAgICAgICA9IDE7CiAgICAkVGFibGVQYXJhbXtQYWRkaW5nVG9wfSAgICAgICAgICAgPSAzOwogICAgJFRhYmxlUGFyYW17UGFkZGluZ0JvdHRvbX0gICAgICAgID0gMzsKCiAgICAjIG91dHB1dCB0YWJsZQogICAgUEFHRToKICAgIGZvciAoICRQYXJhbXtQYWdlfS0+e1BhZ2VDb3VudH0gLi4gJFBhcmFte1BhZ2V9LT57TWF4UGFnZXN9ICkgewoKICAgICAgICAjIG91dHB1dCB0YWJsZSAob3IgYSBmcmFnbWVudCBvZiBpdCkKICAgICAgICAlVGFibGVQYXJhbSA9ICRTZWxmLT57UERGT2JqZWN0fS0+VGFibGUoJVRhYmxlUGFyYW0pOwoKICAgICAgICAjIHN0b3Agb3V0cHV0IG9yIG91dHB1dCBuZXh0IHBhZ2UKICAgICAgICBsYXN0IFBBR0UgaWYgJFRhYmxlUGFyYW17U3RhdGV9OwoKICAgICAgICAkU2VsZi0+e1BERk9iamVjdH0tPlBhZ2VOZXcoCiAgICAgICAgICAgICV7ICRQYXJhbXtQYWdlfSB9LAogICAgICAgICAgICBGb290ZXJSaWdodCA9PiAkUGFyYW17UGFnZX0tPntQYWdlVGV4dH0gLiAnICcgLiAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9CiAgICAgICAgKTsKICAgICAgICAkUGFyYW17UGFnZX0tPntQYWdlQ291bnR9Kys7CiAgICB9CiAgICByZXR1cm4gMTsKfQoKMTsK
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50SVRTTVNMQVpvb20ucG0gLSB0aGUgT1RSUyBJVFNNIFNMQSB6b29tIG1vZHVsZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE0IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZ2VudElUU01TTEFab29tOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlOwp1c2UgS2VybmVsOjpTeXN0ZW06OlNMQTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKHF3KENvbmZpZ09iamVjdCBQYXJhbU9iamVjdCBEQk9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0KSkgewogICAgICAgIGlmICggISRTZWxmLT57JE9iamVjdH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiR290IG5vICRPYmplY3QhIiApOwogICAgICAgIH0KICAgIH0KICAgICRTZWxmLT57U2VydmljZU9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6U2VydmljZS0+bmV3KCVQYXJhbSk7CiAgICAkU2VsZi0+e1NMQU9iamVjdH0gICAgID0gS2VybmVsOjpTeXN0ZW06OlNMQS0+bmV3KCVQYXJhbSk7CgogICAgcmV0dXJuICRTZWxmOwp9CgpzdWIgUnVuIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgcGFyYW1zCiAgICBteSAkU0xBSUQgPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oIFBhcmFtID0+ICJTTEFJRCIgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFNMQUlEICkgewogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKAogICAgICAgICAgICBNZXNzYWdlID0+ICJObyBTTEFJRCBpcyBnaXZlbiEiLAogICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW4uJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IHNsYQogICAgbXkgJVNMQSA9ICRTZWxmLT57U0xBT2JqZWN0fS0+U0xBR2V0KAogICAgICAgIFNMQUlEICA9PiAkU0xBSUQsCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICk7CiAgICBpZiAoICEkU0xBe1NMQUlEfSApIHsKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigKICAgICAgICAgICAgTWVzc2FnZSA9PiAiU0xBSUQgJFNMQUlEIG5vdCBmb3VuZCBpbiBkYXRhYmFzZSEiLAogICAgICAgICAgICBDb21tZW50ID0+ICdQbGVhc2UgY29udGFjdCB0aGUgYWRtaW4uJywKICAgICAgICApOwogICAgfQoKICAgICMgZ2V0IGNhbGVuZGFyIG5hbWUKICAgIGlmICggJFNMQXtDYWxlbmRhcn0gKSB7CiAgICAgICAgJFNMQXtDYWxlbmRhck5hbWV9ID0gIkNhbGVuZGFyICRTTEF7Q2FsZW5kYXJ9IC0gIgogICAgICAgICAgICAuICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCAiVGltZVpvbmU6OkNhbGVuZGFyIiAuICRTTEF7Q2FsZW5kYXJ9IC4gIk5hbWUiICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU0xBe0NhbGVuZGFyTmFtZX0gPSAnQ2FsZW5kYXIgRGVmYXVsdCc7CiAgICB9CgogICAgIyBydW4gY29uZmlnIGl0ZW0gbWVudSBtb2R1bGVzCiAgICBpZiAoIHJlZiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnSVRTTVNMQTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUnKSBlcSAnSEFTSCcgKSB7CiAgICAgICAgbXkgJU1lbnVzICAgPSAleyAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnSVRTTVNMQTo6RnJvbnRlbmQ6Ok1lbnVNb2R1bGUnKSB9OwogICAgICAgIG15ICRDb3VudGVyID0gMDsKICAgICAgICBmb3IgbXkgJE1lbnUgKCBzb3J0IGtleXMgJU1lbnVzICkgewoKICAgICAgICAgICAgIyBsb2FkIG1vZHVsZQogICAgICAgICAgICBpZiAoICRTZWxmLT57TWFpbk9iamVjdH0tPlJlcXVpcmUoICRNZW51c3skTWVudX0tPntNb2R1bGV9ICkgKSB7CiAgICAgICAgICAgICAgICBteSAkT2JqZWN0ID0gJE1lbnVzeyRNZW51fS0+e01vZHVsZX0tPm5ldygKICAgICAgICAgICAgICAgICAgICAleyRTZWxmfSwKICAgICAgICAgICAgICAgICAgICBTTEFJRCA9PiAkU2VsZi0+e1NMQUlEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBzZXQgY2xhc3NlcwogICAgICAgICAgICAgICAgaWYgKCAkTWVudXN7JE1lbnV9LT57VGFyZ2V0fSApIHsKICAgICAgICAgICAgICAgICAgICBpZiAoICRNZW51c3skTWVudX0tPntUYXJnZXR9IGVxICdQb3BVcCcgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRNZW51c3skTWVudX0tPntNZW51Q2xhc3N9ID0gJ0FzUG9wdXAnOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNpZiAoICRNZW51c3skTWVudX0tPntUYXJnZXR9IGVxICdCYWNrJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJE1lbnVzeyRNZW51fS0+e01lbnVDbGFzc30gPSAnSGlzdG9yeUJhY2snOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAjIHJ1biBtb2R1bGUKICAgICAgICAgICAgICAgICRDb3VudGVyID0gJE9iamVjdC0+UnVuKAogICAgICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICAgICBTTEEgICAgID0+IFwlU0xBLAogICAgICAgICAgICAgICAgICAgIENvdW50ZXIgPT4gJENvdW50ZXIsCiAgICAgICAgICAgICAgICAgICAgQ29uZmlnICA9PiAkTWVudXN7JE1lbnV9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZhdGFsRXJyb3IoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICRTTEF7U2VydmljZUlEc30gJiYgcmVmICRTTEF7U2VydmljZUlEc30gZXEgJ0FSUkFZJyAmJiBAeyAkU0xBe1NlcnZpY2VJRHN9IH0gKSB7CgogICAgICAgICMgb3V0cHV0IHJvdwogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ1NlcnZpY2UnLAogICAgICAgICk7CgogICAgICAgICMgY3JlYXRlIHNlcnZpY2UgbGlzdAogICAgICAgIG15ICVTZXJ2aWNlTGlzdDsKICAgICAgICBmb3IgbXkgJFNlcnZpY2VJRCAoIEB7ICRTTEF7U2VydmljZUlEc30gfSApIHsKCiAgICAgICAgICAgICMgZ2V0IHNlcnZpY2UgZGF0YQogICAgICAgICAgICBteSAlU2VydmljZSA9ICRTZWxmLT57U2VydmljZU9iamVjdH0tPlNlcnZpY2VHZXQoCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBJbmNpZGVudFN0YXRlID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgYWRkIHNlcnZpY2UgdG8gaGFzaAogICAgICAgICAgICAkU2VydmljZUxpc3R7JFNlcnZpY2VJRH0gPSBcJVNlcnZpY2U7CiAgICAgICAgfQoKICAgICAgICAjIHNldCBpbmNpZGVudCBzaWduYWwKICAgICAgICBteSAlSW5jaVNpZ25hbHMgPSAoCiAgICAgICAgICAgIG9wZXJhdGlvbmFsID0+ICdncmVlbmxlZCcsCiAgICAgICAgICAgIHdhcm5pbmcgICAgID0+ICd5ZWxsb3dsZWQnLAogICAgICAgICAgICBpbmNpZGVudCAgICA9PiAncmVkbGVkJywKICAgICAgICApOwoKICAgICAgICBteSAkQ3NzQ2xhc3MgPSAnJzsKICAgICAgICBmb3IgbXkgJFNlcnZpY2VJRCAoCiAgICAgICAgICAgIHNvcnQgeyAkU2VydmljZUxpc3R7JGF9LT57TmFtZX0gY21wICRTZXJ2aWNlTGlzdHskYn0tPntOYW1lfSB9CiAgICAgICAgICAgIGtleXMgJVNlcnZpY2VMaXN0CiAgICAgICAgICAgICkKICAgICAgICB7CgogICAgICAgICAgICAjIHNldCBvdXRwdXQgb2JqZWN0CiAgICAgICAgICAgICRDc3NDbGFzcyA9ICRDc3NDbGFzcyBlcSAnc2VhcmNocGFzc2l2ZScgPyAnc2VhcmNoYWN0aXZlJyA6ICdzZWFyY2hwYXNzaXZlJzsKCiAgICAgICAgICAgICMgb3V0cHV0IHJvdwogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnU2VydmljZVJvdycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAleyAkU2VydmljZUxpc3R7JFNlcnZpY2VJRH0gfSwKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU2lnbmFsID0+ICRJbmNpU2lnbmFsc3sgJFNlcnZpY2VMaXN0eyRTZXJ2aWNlSUR9LT57Q3VySW5jaVN0YXRlVHlwZX0gfSwKICAgICAgICAgICAgICAgICAgICBDc3NDbGFzcyAgICAgID0+ICRDc3NDbGFzcywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgICMgZ2V0IGNyZWF0ZSB1c2VyIGRhdGEKICAgICRTTEF7Q3JlYXRlQnlOYW1lfSA9ICRTZWxmLT57VXNlck9iamVjdH0tPlVzZXJOYW1lKAogICAgICAgIFVzZXJJRCA9PiAkU0xBe0NyZWF0ZUJ5fSwKICAgICk7CgogICAgIyBnZXQgY2hhbmdlIHVzZXIgZGF0YQogICAgJFNMQXtDaGFuZ2VCeU5hbWV9ID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+VXNlck5hbWUoCiAgICAgICAgVXNlcklEID0+ICRTTEF7Q2hhbmdlQnl9LAogICAgKTsKCiAgICAjIG91dHB1dCBoZWFkZXIKICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCiAgICAjIGdlbmVyYXRlIG91dHB1dAogICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50SVRTTVNMQVpvb20nLAogICAgICAgIERhdGEgICAgICAgICA9PiB7CiAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgJVNMQSwKICAgICAgICB9LAogICAgKTsKICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKCiAgICByZXR1cm4gJE91dHB1dDsKfQoKMTsK
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9JVFNNU2VydmljZU1lbnVHZW5lcmljLnBtCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTQgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTVNlcnZpY2VNZW51R2VuZXJpYzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKHF3KENvbmZpZ09iamVjdCBMb2dPYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IFNlcnZpY2VPYmplY3QgVXNlcklEKSkgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17U2VydmljZX0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coIFByaW9yaXR5ID0+ICdlcnJvcicsIE1lc3NhZ2UgPT4gJ05lZWQgU2VydmljZSEnICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGdyb3VwcwogICAgbXkgJEdyb3Vwc1JvCiAgICAgICAgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpLT57ICRQYXJhbXtDb25maWd9LT57QWN0aW9ufSB9LT57R3JvdXBSb30KICAgICAgICB8fCBbXTsKICAgIG15ICRHcm91cHNSdwogICAgICAgID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0Zyb250ZW5kOjpNb2R1bGUnKS0+eyAkUGFyYW17Q29uZmlnfS0+e0FjdGlvbn0gfS0+e0dyb3VwfQogICAgICAgIHx8IFtdOwoKICAgICMgc2V0IGFjY2VzcwogICAgbXkgJEFjY2VzcyA9IDE7CgogICAgIyBjaGVjayBwZXJtaXNzaW9uCiAgICBpZiAoICRQYXJhbXtDb25maWd9LT57QWN0aW9ufSAmJiAoIEB7JEdyb3Vwc1JvfSB8fCBAeyRHcm91cHNSd30gKSApIHsKCiAgICAgICAgIyBzZXQgYWNjZXNzCiAgICAgICAgJEFjY2VzcyA9IDA7CgogICAgICAgICMgZmluZCByZWFkIG9ubHkgZ3JvdXBzCiAgICAgICAgUk9HUk9VUDoKICAgICAgICBmb3IgbXkgJFJvR3JvdXAgKCBAeyRHcm91cHNSb30gKSB7CgogICAgICAgICAgICBuZXh0IFJPR1JPVVAgaWYgISRTZWxmLT57TGF5b3V0T2JqZWN0fS0+eyJVc2VySXNHcm91cFJvWyRSb0dyb3VwXSJ9OwogICAgICAgICAgICBuZXh0IFJPR1JPVVAgaWYgJFNlbGYtPntMYXlvdXRPYmplY3R9LT57IlVzZXJJc0dyb3VwUm9bJFJvR3JvdXBdIn0gbmUgJ1llcyc7CgogICAgICAgICAgICAjIHNldCBhY2Nlc3MKICAgICAgICAgICAgJEFjY2VzcyA9IDE7CiAgICAgICAgICAgIGxhc3QgUk9HUk9VUDsKICAgICAgICB9CgogICAgICAgICMgZmluZCByZWFkIHdyaXRlIGdyb3VwcwogICAgICAgIFJXR1JPVVA6CiAgICAgICAgZm9yIG15ICRSd0dyb3VwICggQHskR3JvdXBzUnd9ICkgewoKICAgICAgICAgICAgbmV4dCBSV0dST1VQIGlmICEkU2VsZi0+e0xheW91dE9iamVjdH0tPnsiVXNlcklzR3JvdXBbJFJ3R3JvdXBdIn07CiAgICAgICAgICAgIG5leHQgUldHUk9VUCBpZiAkU2VsZi0+e0xheW91dE9iamVjdH0tPnsiVXNlcklzR3JvdXBbJFJ3R3JvdXBdIn0gbmUgJ1llcyc7CgogICAgICAgICAgICAjIHNldCBhY2Nlc3MKICAgICAgICAgICAgJEFjY2VzcyA9IDE7CiAgICAgICAgICAgIGxhc3QgUldHUk9VUDsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRQYXJhbXtDb3VudGVyfSBpZiAhJEFjY2VzczsKCiAgICAjIG91dHB1dCBtZW51IGl0ZW0KICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnTWVudUl0ZW0nLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICV7ICRQYXJhbXtTZXJ2aWNlfSB9LAogICAgICAgICAgICAleyAkUGFyYW17Q29uZmlnfSB9LAogICAgICAgIH0sCiAgICApOwogICAgJFBhcmFte0NvdW50ZXJ9Kys7CgogICAgcmV0dXJuICRQYXJhbXtDb3VudGVyfTsKfQoKMTsK
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9JVFNNU2VydmljZU1lbnVMaW5rLnBtCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTQgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6SVRTTVNlcnZpY2VNZW51TGluazsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKAogICAgICAgIHF3KENvbmZpZ09iamVjdCBMb2dPYmplY3QgREJPYmplY3QgTGF5b3V0T2JqZWN0IFNlcnZpY2VPYmplY3QgTGlua09iamVjdCBVc2VySUQpCiAgICAgICAgKQogICAgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17U2VydmljZX0gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coIFByaW9yaXR5ID0+ICdlcnJvcicsIE1lc3NhZ2UgPT4gJ05lZWQgU2VydmljZSEnICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IGdyb3VwcwogICAgbXkgJEdyb3Vwc1J3CiAgICAgICAgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnRnJvbnRlbmQ6Ok1vZHVsZScpLT57ICRQYXJhbXtDb25maWd9LT57QWN0aW9ufSB9LT57R3JvdXB9CiAgICAgICAgfHwgW107CgogICAgIyBzZXQgYWNjZXNzCiAgICBteSAkQWNjZXNzID0gMTsKCiAgICAjIGNoZWNrIHBlcm1pc3Npb24KICAgIGlmICggJFBhcmFte0NvbmZpZ30tPntBY3Rpb259ICYmIEB7JEdyb3Vwc1J3fSApIHsKCiAgICAgICAgIyBzZXQgYWNjZXNzCiAgICAgICAgJEFjY2VzcyA9IDA7CgogICAgICAgICMgZmluZCByZWFkIHdyaXRlIGdyb3VwcwogICAgICAgIFJXR1JPVVA6CiAgICAgICAgZm9yIG15ICRSd0dyb3VwICggQHskR3JvdXBzUnd9ICkgewoKICAgICAgICAgICAgbmV4dCBSV0dST1VQIGlmICEkU2VsZi0+e0xheW91dE9iamVjdH0tPnsiVXNlcklzR3JvdXBbJFJ3R3JvdXBdIn07CiAgICAgICAgICAgIG5leHQgUldHUk9VUCBpZiAkU2VsZi0+e0xheW91dE9iamVjdH0tPnsiVXNlcklzR3JvdXBbJFJ3R3JvdXBdIn0gbmUgJ1llcyc7CgogICAgICAgICAgICAjIHNldCBhY2Nlc3MKICAgICAgICAgICAgJEFjY2VzcyA9IDE7CiAgICAgICAgICAgIGxhc3QgUldHUk9VUDsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRQYXJhbXtDb3VudGVyfSBpZiAhJEFjY2VzczsKCiAgICAjIGNoZWNrIGlmIHNlcnZpY2VzIGNhbiBiZSBsaW5rZWQgd2l0aCBvdGhlciBvYmplY3RzCiAgICBteSAlUG9zc2libGVPYmplY3RzID0gJFNlbGYtPntMaW5rT2JqZWN0fS0+UG9zc2libGVPYmplY3RzTGlzdCgKICAgICAgICBPYmplY3QgPT4gJ1NlcnZpY2UnLAogICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICApOwoKICAgICMgZG9uJ3Qgc2hvdyBsaW5rIG1lbnUgaXRlbSBpZiB0aGVyZSBhcmUgbm8gbGlua2FibGUgb2JqZWN0cwogICAgcmV0dXJuIGlmICElUG9zc2libGVPYmplY3RzOwoKICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnTWVudUl0ZW0nLAogICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICV7ICRQYXJhbXtTZXJ2aWNlfSB9LAogICAgICAgICAgICAleyAkUGFyYW17Q29uZmlnfSB9LAogICAgICAgIH0sCiAgICApOwoKICAgICRQYXJhbXtDb3VudGVyfSsrOwoKICAgIHJldHVybiAkUGFyYW17Q291bnRlcn07Cn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9JVFNNU0xBTWVudUdlbmVyaWMucG0KIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpJVFNNU0xBTWVudUdlbmVyaWM7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgY2hlY2sgbmVlZGVkIG9iamVjdHMKICAgIGZvciBteSAkT2JqZWN0IChxdyhDb25maWdPYmplY3QgTG9nT2JqZWN0IERCT2JqZWN0IExheW91dE9iamVjdCBTTEFPYmplY3QgVXNlcklEKSkgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17U0xBfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZyggUHJpb3JpdHkgPT4gJ2Vycm9yJywgTWVzc2FnZSA9PiAnTmVlZCBTTEEhJyApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBncm91cHMKICAgIG15ICRHcm91cHNSbwogICAgICAgID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0Zyb250ZW5kOjpNb2R1bGUnKS0+eyAkUGFyYW17Q29uZmlnfS0+e0FjdGlvbn0gfS0+e0dyb3VwUm99CiAgICAgICAgfHwgW107CiAgICBteSAkR3JvdXBzUncKICAgICAgICA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdGcm9udGVuZDo6TW9kdWxlJyktPnsgJFBhcmFte0NvbmZpZ30tPntBY3Rpb259IH0tPntHcm91cH0KICAgICAgICB8fCBbXTsKCiAgICAjIHNldCBhY2Nlc3MKICAgIG15ICRBY2Nlc3MgPSAxOwoKICAgICMgY2hlY2sgcGVybWlzc2lvbgogICAgaWYgKCAkUGFyYW17Q29uZmlnfS0+e0FjdGlvbn0gJiYgKCBAeyRHcm91cHNSb30gfHwgQHskR3JvdXBzUnd9ICkgKSB7CgogICAgICAgICMgc2V0IGFjY2VzcwogICAgICAgICRBY2Nlc3MgPSAwOwoKICAgICAgICAjIGZpbmQgcmVhZCBvbmx5IGdyb3VwcwogICAgICAgIFJPR1JPVVA6CiAgICAgICAgZm9yIG15ICRSb0dyb3VwICggQHskR3JvdXBzUm99ICkgewoKICAgICAgICAgICAgbmV4dCBST0dST1VQIGlmICEkU2VsZi0+e0xheW91dE9iamVjdH0tPnsiVXNlcklzR3JvdXBSb1skUm9Hcm91cF0ifTsKICAgICAgICAgICAgbmV4dCBST0dST1VQIGlmICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+eyJVc2VySXNHcm91cFJvWyRSb0dyb3VwXSJ9IG5lICdZZXMnOwoKICAgICAgICAgICAgIyBzZXQgYWNjZXNzCiAgICAgICAgICAgICRBY2Nlc3MgPSAxOwogICAgICAgICAgICBsYXN0IFJPR1JPVVA7CiAgICAgICAgfQoKICAgICAgICAjIGZpbmQgcmVhZCB3cml0ZSBncm91cHMKICAgICAgICBSV0dST1VQOgogICAgICAgIGZvciBteSAkUndHcm91cCAoIEB7JEdyb3Vwc1J3fSApIHsKCiAgICAgICAgICAgIG5leHQgUldHUk9VUCBpZiAhJFNlbGYtPntMYXlvdXRPYmplY3R9LT57IlVzZXJJc0dyb3VwWyRSd0dyb3VwXSJ9OwogICAgICAgICAgICBuZXh0IFJXR1JPVVAgaWYgJFNlbGYtPntMYXlvdXRPYmplY3R9LT57IlVzZXJJc0dyb3VwWyRSd0dyb3VwXSJ9IG5lICdZZXMnOwoKICAgICAgICAgICAgIyBzZXQgYWNjZXNzCiAgICAgICAgICAgICRBY2Nlc3MgPSAxOwogICAgICAgICAgICBsYXN0IFJXR1JPVVA7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkUGFyYW17Q291bnRlcn0gaWYgISRBY2Nlc3M7CgogICAgIyBvdXRwdXQgbWVudSBpdGVtCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ01lbnVJdGVtJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAleyAkUGFyYW17U0xBfSB9LAogICAgICAgICAgICAleyAkUGFyYW17Q29uZmlnfSB9LAogICAgICAgIH0sCiAgICApOwogICAgJFBhcmFte0NvdW50ZXJ9Kys7CgogICAgcmV0dXJuICRQYXJhbXtDb3VudGVyfTsKfQoKMTsK
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9MaW5rT2JqZWN0U2VydmljZS5wbSAtIGxheW91dCBiYWNrZW5kIG1vZHVsZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE0IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxpbmtPYmplY3RTZXJ2aWNlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6T3V0cHV0OjpIVE1MOjpMYXlvdXQ7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6V2ViOjpSZXF1ZXN0JywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGlua09iamVjdFNlcnZpY2UgLSBsYXlvdXQgYmFja2VuZCBtb2R1bGUKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGxheW91dCBmdW5jdGlvbnMgb2YgbGluayBvYmplY3QgKHNlcnZpY2UpCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgICRCYWNrZW5kT2JqZWN0ID0gS2VybmVsOjpPdXRwdXQ6OkhUTUw6OkxpbmtPYmplY3RTZXJ2aWNlLT5uZXcoCiAgICAgICAgVXNlckxhbmd1YWdlID0+ICdlbicsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE5lZWRlZCAocXcoVXNlckxhbmd1YWdlIFVzZXJJRCkpIHsKICAgICAgICAkU2VsZi0+eyROZWVkZWR9ID0gJFBhcmFteyROZWVkZWR9IHx8IGRpZSAiR290IG5vICROZWVkZWQhIjsKICAgIH0KCiAgICAjIFdlIG5lZWQgb3VyIG93biBMYXlvdXRPYmplY3QgaW5zdGFuY2UgdG8gYXZvaWQgYmxvY2tkYXRhIGNvbGxpc2lvbnMKICAgICMgICB3aXRoIHRoZSBtYWluIHBhZ2UuCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0gPSBLZXJuZWw6Ok91dHB1dDo6SFRNTDo6TGF5b3V0LT5uZXcoICV7JFNlbGZ9ICk7CgogICAgIyBkZWZpbmUgbmVlZGVkIHZhcmlhYmxlcwogICAgJFNlbGYtPntPYmplY3REYXRhfSA9IHsKICAgICAgICBPYmplY3QgICA9PiAnU2VydmljZScsCiAgICAgICAgUmVhbG5hbWUgPT4gJ1NlcnZpY2UnLAogICAgfTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIFRhYmxlQ3JlYXRlQ29tcGxleCgpCgpyZXR1cm4gYW4gYXJyYXkgd2l0aCB0aGUgYmxvY2sgZGF0YQoKUmV0dXJuCgogICAgQEJsb2NrRGF0YSA9ICgKICAgICAgICBPYmplY3QgICAgPT4gJ1NlcnZpY2UnLAogICAgICAgIEJsb2NrbmFtZSA9PiAnU2VydmljZScsCiAgICAgICAgSGVhZGxpbmUgID0+IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ29udGVudCA9PiAnJywKICAgICAgICAgICAgICAgIFdpZHRoICAgPT4gMjAsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ1NlcnZpY2UnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdUeXBlJywKICAgICAgICAgICAgICAgIFdpZHRoICAgPT4gMTAwLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdDcml0aWNhbGl0eScsCiAgICAgICAgICAgICAgICBXaWR0aCAgID0+IDEwMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ29udGVudCA9PiAnQ2hhbmdlZCcsCiAgICAgICAgICAgICAgICBXaWR0aCAgID0+IDE1MCwKICAgICAgICAgICAgfSwKICAgICAgICBdLAogICAgICAgIEl0ZW1MaXN0ID0+IFsKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgPT4gJ0luY2lTaWduYWwnLAogICAgICAgICAgICAgICAgICAgIEtleSAgICAgICAgICAgICAgPT4gMTIzLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgICAgICAgICAgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+ICdPcGVyYXRpb25hbCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAnTGluaycsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgID0+ICdTZXJ2aWNlIEJsYScsCiAgICAgICAgICAgICAgICAgICAgTGluayAgICAgID0+ICdBY3Rpb249QWdlbnRJVFNNU2VydmljZVpvb207U2VydmljZUlEPTEyMycsCiAgICAgICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDcwLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdPdGhlcicsCiAgICAgICAgICAgICAgICAgICAgVHJhbnNsYXRlID0+IDEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ0hpZ2gnLAogICAgICAgICAgICAgICAgICAgIFRyYW5zbGF0ZSA9PiAxLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdUaW1lTG9uZycsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnMjAwOC0wMS0wMSAxMjoxMjowMCcsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICBdLAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgICAgICAgICA9PiAnSW5jaVNpZ25hbCcsCiAgICAgICAgICAgICAgICAgICAgS2V5ICAgICAgICAgICAgICA9PiAzMjEsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCAgICAgICAgICA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICAgICAgICAgIEN1ckluY2lTdGF0ZVR5cGUgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdMaW5rJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ICAgPT4gJ1NlcnZpY2UgQmxhJywKICAgICAgICAgICAgICAgICAgICBMaW5rICAgICAgPT4gJ0FjdGlvbj1BZ2VudElUU01TZXJ2aWNlWm9vbTtTZXJ2aWNlSUQ9MzIxJywKICAgICAgICAgICAgICAgICAgICBNYXhMZW5ndGggPT4gNzAsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ090aGVyJywKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGUgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnVGV4dCcsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAnTG93JywKICAgICAgICAgICAgICAgICAgICBUcmFuc2xhdGUgPT4gMSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnVGltZUxvbmcnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJzIwMDctMDItMDIgMjI6MTI6MDAnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICBdLAogICAgKTsKCiAgICBAQmxvY2tEYXRhID0gJExpbmtPYmplY3QtPlRhYmxlQ3JlYXRlQ29tcGxleCgKICAgICAgICBPYmplY3RMaW5rTGlzdFdpdGhEYXRhID0+ICRPYmplY3RMaW5rTGlzdFJlZiwKICAgICk7Cgo9Y3V0CgpzdWIgVGFibGVDcmVhdGVDb21wbGV4IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfSB8fCByZWYgJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9IG5lICdIQVNIJyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgT2JqZWN0TGlua0xpc3RXaXRoRGF0YSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY29udmVydCB0aGUgbGlzdAogICAgbXkgJUxpbmtMaXN0OwogICAgZm9yIG15ICRMaW5rVHlwZSAoIHNvcnQga2V5cyAleyAkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0gfSApIHsKCiAgICAgICAgIyBleHRyYWN0IGxpbmsgdHlwZSBMaXN0CiAgICAgICAgbXkgJExpbmtUeXBlTGlzdCA9ICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfS0+eyRMaW5rVHlwZX07CgogICAgICAgIGZvciBteSAkRGlyZWN0aW9uICggc29ydCBrZXlzICV7JExpbmtUeXBlTGlzdH0gKSB7CgogICAgICAgICAgICAjIGV4dHJhY3QgZGlyZWN0aW9uIGxpc3QKICAgICAgICAgICAgbXkgJERpcmVjdGlvbkxpc3QgPSAkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0tPnskTGlua1R5cGV9LT57JERpcmVjdGlvbn07CgogICAgICAgICAgICBmb3IgbXkgJFNlcnZpY2VJRCAoIHNvcnQga2V5cyAleyREaXJlY3Rpb25MaXN0fSApIHsKCiAgICAgICAgICAgICAgICAkTGlua0xpc3R7JFNlcnZpY2VJRH0tPntEYXRhfSA9ICREaXJlY3Rpb25MaXN0LT57JFNlcnZpY2VJRH07CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgIyBjcmVhdGUgdGhlIGl0ZW0gbGlzdAogICAgbXkgQEl0ZW1MaXN0OwogICAgZm9yIG15ICRTZXJ2aWNlSUQgKAogICAgICAgIHNvcnQgeyBsYyAkTGlua0xpc3R7JGF9e0RhdGF9LT57TmFtZX0gY21wIGxjICRMaW5rTGlzdHskYn17RGF0YX0tPntOYW1lfSB9CiAgICAgICAga2V5cyAlTGlua0xpc3QKICAgICAgICApCiAgICB7CgogICAgICAgICMgZXh0cmFjdCBzZXJ2aWNlIGRhdGEKICAgICAgICBteSAkU2VydmljZSA9ICRMaW5rTGlzdHskU2VydmljZUlEfS0+e0RhdGF9OwoKICAgICAgICBteSBASXRlbUNvbHVtbnMgPSAoCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgPT4gJ0N1ckluY2lTaWduYWwnLAogICAgICAgICAgICAgICAgS2V5ICAgICAgICAgICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICAgICAgQ29udGVudCAgICAgICAgICA9PiAkU2VydmljZS0+e0N1ckluY2lTdGF0ZX0sCiAgICAgICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+ICRTZXJ2aWNlLT57Q3VySW5jaVN0YXRlVHlwZX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgQ29udGVudCA9PiAkU2VydmljZS0+e05hbWV9LAogICAgICAgICAgICAgICAgTGluayAgICA9PiAkU2VsZi0+e0xheW91dE9iamVjdH0tPntCYXNlbGlua30KICAgICAgICAgICAgICAgICAgICAuICdBY3Rpb249QWdlbnRJVFNNU2VydmljZVpvb207U2VydmljZUlEPScKICAgICAgICAgICAgICAgICAgICAuICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBUaXRsZSAgICAgPT4gIlNlcnZpY2U6ICRTZXJ2aWNlLT57TmFtZX0iLAogICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDcwLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBUeXBlICAgICAgPT4gJ1RleHQnLAogICAgICAgICAgICAgICAgQ29udGVudCAgID0+ICRTZXJ2aWNlLT57VHlwZX0sCiAgICAgICAgICAgICAgICBUcmFuc2xhdGUgPT4gMSwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVHlwZSAgICAgID0+ICdUZXh0JywKICAgICAgICAgICAgICAgIENvbnRlbnQgICA9PiAkU2VydmljZS0+e0NyaXRpY2FsaXR5fSwKICAgICAgICAgICAgICAgIFRyYW5zbGF0ZSA9PiAxLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdUaW1lTG9uZycsCiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICRTZXJ2aWNlLT57Q2hhbmdlVGltZX0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgcHVzaCBASXRlbUxpc3QsIFxASXRlbUNvbHVtbnM7CiAgICB9CgogICAgcmV0dXJuIGlmICFASXRlbUxpc3Q7CgogICAgIyBkZWZpbmUgdGhlIGJsb2NrIGRhdGEKICAgIG15ICVCbG9jayA9ICgKICAgICAgICBPYmplY3QgICAgPT4gJFNlbGYtPntPYmplY3REYXRhfS0+e09iamVjdH0sCiAgICAgICAgQmxvY2tuYW1lID0+ICRTZWxmLT57T2JqZWN0RGF0YX0tPntSZWFsbmFtZX0sCiAgICAgICAgSGVhZGxpbmUgID0+IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ29udGVudCA9PiAnSW5jaWRlbnQgU3RhdGUnLAogICAgICAgICAgICAgICAgV2lkdGggICA9PiAyMCwKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgQ29udGVudCA9PiAnU2VydmljZScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ1R5cGUnLAogICAgICAgICAgICAgICAgV2lkdGggICA9PiAxMDAsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ0NyaXRpY2FsaXR5JywKICAgICAgICAgICAgICAgIFdpZHRoICAgPT4gMTAwLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdDaGFuZ2VkJywKICAgICAgICAgICAgICAgIFdpZHRoICAgPT4gMTUwLAogICAgICAgICAgICB9LAogICAgICAgIF0sCiAgICAgICAgSXRlbUxpc3QgPT4gXEBJdGVtTGlzdCwKICAgICk7CgogICAgcmV0dXJuICggXCVCbG9jayApOwp9Cgo9aXRlbSBUYWJsZUNyZWF0ZVNpbXBsZSgpCgpyZXR1cm4gYSBoYXNoIHdpdGggdGhlIGxpbmsgb3V0cHV0IGRhdGEKClJldHVybgoKICAgICVMaW5rT3V0cHV0RGF0YSA9ICgKICAgICAgICBOb3JtYWw6OlNvdXJjZSA9PiB7CiAgICAgICAgICAgIFNlcnZpY2UgPT4gWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgPT4gJ0xpbmsnLAogICAgICAgICAgICAgICAgICAgIENvbnRlbnQgPT4gJ1M6VGhlIHNlcnZpY1suLl0nLAogICAgICAgICAgICAgICAgICAgIFRpdGxlICAgPT4gJ1NlcnZpY2U6IFRoZSBzZXJ2aWNlIG5hbWUnLAogICAgICAgICAgICAgICAgICAgIENzcyAgICAgPT4gJ3N0eWxlPSJ0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaCInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdMaW5rJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdTOk5hbWUgb2Ygc2VydmljWy4uXScsCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgICA9PiAnU2VydmljZTogTmFtZSBvZiBzZXJ2aWNlIDInLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgXSwKICAgICAgICB9LAogICAgICAgIFBhcmVudENoaWxkOjpUYXJnZXQgPT4gewogICAgICAgICAgICBTZXJ2aWNlID0+IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBUeXBlICAgID0+ICdMaW5rJywKICAgICAgICAgICAgICAgICAgICBDb250ZW50ID0+ICdTOlNlcnZpY2UgbmFtWy4uXScsCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgICA9PiAnU2VydmljZTogU2VydmljZSBuYW1lJywKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF0sCiAgICAgICAgfSwKICAgICk7CgogICAgJUxpbmtPdXRwdXREYXRhID0gJExpbmtPYmplY3QtPlRhYmxlQ3JlYXRlU2ltcGxlKAogICAgICAgIE9iamVjdExpbmtMaXN0V2l0aERhdGEgPT4gJE9iamVjdExpbmtMaXN0UmVmLAogICAgKTsKCj1jdXQKCnN1YiBUYWJsZUNyZWF0ZVNpbXBsZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17T2JqZWN0TGlua0xpc3RXaXRoRGF0YX0gfHwgcmVmICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfSBuZSAnSEFTSCcgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIE9iamVjdExpbmtMaXN0V2l0aERhdGEhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAlTGlua091dHB1dERhdGE7CiAgICBmb3IgbXkgJExpbmtUeXBlICggc29ydCBrZXlzICV7ICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfSB9ICkgewoKICAgICAgICAjIGV4dHJhY3QgbGluayB0eXBlIExpc3QKICAgICAgICBteSAkTGlua1R5cGVMaXN0ID0gJFBhcmFte09iamVjdExpbmtMaXN0V2l0aERhdGF9LT57JExpbmtUeXBlfTsKCiAgICAgICAgZm9yIG15ICREaXJlY3Rpb24gKCBzb3J0IGtleXMgJXskTGlua1R5cGVMaXN0fSApIHsKCiAgICAgICAgICAgICMgZXh0cmFjdCBkaXJlY3Rpb24gbGlzdAogICAgICAgICAgICBteSAkRGlyZWN0aW9uTGlzdCA9ICRQYXJhbXtPYmplY3RMaW5rTGlzdFdpdGhEYXRhfS0+eyRMaW5rVHlwZX0tPnskRGlyZWN0aW9ufTsKCiAgICAgICAgICAgIG15IEBJdGVtTGlzdDsKICAgICAgICAgICAgZm9yIG15ICRTZXJ2aWNlSUQgKAogICAgICAgICAgICAgICAgc29ydCB7CiAgICAgICAgICAgICAgICAgICAgbGMgJERpcmVjdGlvbkxpc3QtPnskYX0tPntOYW1lU2hvcnR9IGNtcCBsYyAkRGlyZWN0aW9uTGlzdC0+eyRifS0+e05hbWVTaG9ydH0KICAgICAgICAgICAgICAgIH0ga2V5cyAleyREaXJlY3Rpb25MaXN0fQogICAgICAgICAgICAgICAgKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgIyBleHRyYWN0IHNlcnZpY2UgZGF0YQogICAgICAgICAgICAgICAgbXkgJFNlcnZpY2UgPSAkRGlyZWN0aW9uTGlzdC0+eyRTZXJ2aWNlSUR9OwoKICAgICAgICAgICAgICAgICMgZGVmaW5lIGl0ZW0gZGF0YQogICAgICAgICAgICAgICAgbXkgJUl0ZW0gPSAoCiAgICAgICAgICAgICAgICAgICAgVHlwZSAgICA9PiAnTGluaycsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAiUzokU2VydmljZS0+e05hbWVTaG9ydH0iLAogICAgICAgICAgICAgICAgICAgIFRpdGxlICAgPT4gIlNlcnZpY2U6ICRTZXJ2aWNlLT57TmFtZX0iLAogICAgICAgICAgICAgICAgICAgIExpbmsgPT4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT57QmFzZWxpbmt9CiAgICAgICAgICAgICAgICAgICAgICAgIC4gJ0FjdGlvbj1BZ2VudElUU01TZXJ2aWNlWm9vbTtTZXJ2aWNlSUQ9JwogICAgICAgICAgICAgICAgICAgICAgICAuICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICAgICAgTWF4TGVuZ3RoID0+IDIwLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICBwdXNoIEBJdGVtTGlzdCwgXCVJdGVtOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGFkZCBpdGVtIGxpc3QgdG8gbGluayBvdXRwdXQgZGF0YQogICAgICAgICAgICAkTGlua091dHB1dERhdGF7ICRMaW5rVHlwZSAuICc6OicgLiAkRGlyZWN0aW9uIH0tPntTZXJ2aWNlfSA9IFxASXRlbUxpc3Q7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAlTGlua091dHB1dERhdGE7Cn0KCj1pdGVtIENvbnRlbnRTdHJpbmdDcmVhdGUoKQoKcmV0dXJuIGEgb3V0cHV0IHN0cmluZwoKICAgIG15ICRTdHJpbmcgPSAkTGF5b3V0T2JqZWN0LT5Db250ZW50U3RyaW5nQ3JlYXRlKAogICAgICAgIENvbnRlbnREYXRhID0+ICRIYXNoUmVmLAogICAgKTsKCj1jdXQKCnN1YiBDb250ZW50U3RyaW5nQ3JlYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtDb250ZW50RGF0YX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIENvbnRlbnREYXRhIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBleHRyYWN0IGNvbnRlbnQKICAgIG15ICRDb250ZW50ID0gJFBhcmFte0NvbnRlbnREYXRhfTsKCiAgICByZXR1cm4gaWYgJENvbnRlbnQtPntUeXBlfSBuZSAnQ3VySW5jaVNpZ25hbCc7CgogICAgIyBzZXQgaW5jaWRlbnQgc2lnbmFsCiAgICBteSAlSW5jaVNpZ25hbHMgPSAoCiAgICAgICAgaW5jaWRlbnQgICAgPT4gJ3JlZGxlZCcsCiAgICAgICAgb3BlcmF0aW9uYWwgPT4gJ2dyZWVubGVkJywKICAgICAgICB1bmtub3duICAgICA9PiAnZ3JheWxlZCcsCiAgICAgICAgd2FybmluZyAgICAgPT4gJ3llbGxvd2xlZCcsCiAgICApOwoKICAgICMgaW52ZXN0aWdhdGUgY3VycmVudCBpbmNpZGVudCBzaWduYWwKICAgICRDb250ZW50LT57Q3VySW5jaVN0YXRlVHlwZX0gfHw9ICd1bmtub3duJzsKICAgIG15ICRDdXJJbmNpU2lnbmFsID0gJEluY2lTaWduYWxzeyAkQ29udGVudC0+e0N1ckluY2lTdGF0ZVR5cGV9IH07CiAgICAkQ3VySW5jaVNpZ25hbCB8fD0gJEluY2lTaWduYWxze3Vua25vd259OwoKICAgIG15ICRTdHJpbmcgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICBUZW1wbGF0ZSA9PiAnPGRpdiBjbGFzcz0iRmxhZyBTbWFsbCIgdGl0bGU9IlslIERhdGEuQ3VySW5jaVN0YXRlIHwgaHRtbCAlXSI+ICcKICAgICAgICAgICAgLiAnPHNwYW4gY2xhc3M9IlslIERhdGEuQ3VySW5jaVNpZ25hbCB8IGh0bWwgJV0iPjwvc3Bhbj4gPC9kaXY+JywKCiAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgIEN1ckluY2lTaWduYWwgPT4gJEN1ckluY2lTaWduYWwsCiAgICAgICAgICAgIEN1ckluY2lTdGF0ZSA9PiAkQ29udGVudC0+e0NvbnRlbnR9IHx8ICcnLAogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiAkU3RyaW5nOwp9Cgo9aXRlbSBTZWxlY3RhYmxlT2JqZWN0TGlzdCgpCgpyZXR1cm4gYW4gYXJyYXkgaGFzaCB3aXRoIHNlbGVjdGFibGUgb2JqZWN0cwoKUmV0dXJuCgogICAgQFNlbGVjdGFibGVPYmplY3RMaXN0ID0gKAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICAgPT4gJ1NlcnZpY2UnLAogICAgICAgICAgICBWYWx1ZSA9PiAnU2VydmljZScsCiAgICAgICAgfSwKICAgICk7CgogICAgQFNlbGVjdGFibGVPYmplY3RMaXN0ID0gJExpbmtPYmplY3QtPlNlbGVjdGFibGVPYmplY3RMaXN0KAogICAgICAgIFNlbGVjdGVkID0+ICRJZGVudGlmaWVyLCAgIyAob3B0aW9uYWwpCiAgICApOwoKPWN1dAoKc3ViIFNlbGVjdGFibGVPYmplY3RMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgbXkgJFNlbGVjdGVkOwogICAgaWYgKCAkUGFyYW17U2VsZWN0ZWR9ICYmICRQYXJhbXtTZWxlY3RlZH0gZXEgJFNlbGYtPntPYmplY3REYXRhfS0+e09iamVjdH0gKSB7CiAgICAgICAgJFNlbGVjdGVkID0gMTsKICAgIH0KCiAgICAjIG9iamVjdCBzZWxlY3QgbGlzdAogICAgbXkgQE9iamVjdFNlbGVjdExpc3QgPSAoCiAgICAgICAgewogICAgICAgICAgICBLZXkgICAgICA9PiAkU2VsZi0+e09iamVjdERhdGF9LT57T2JqZWN0fSwKICAgICAgICAgICAgVmFsdWUgICAgPT4gJFNlbGYtPntPYmplY3REYXRhfS0+e1JlYWxuYW1lfSwKICAgICAgICAgICAgU2VsZWN0ZWQgPT4gJFNlbGVjdGVkLAogICAgICAgIH0sCiAgICApOwoKICAgIHJldHVybiBAT2JqZWN0U2VsZWN0TGlzdDsKfQoKPWl0ZW0gU2VhcmNoT3B0aW9uTGlzdCgpCgpyZXR1cm4gYW4gYXJyYXkgaGFzaCB3aXRoIHNlYXJjaCBvcHRpb25zCgpSZXR1cm4KCiAgICBAU2VhcmNoT3B0aW9uTGlzdCA9ICgKICAgICAgICB7CiAgICAgICAgICAgIEtleSAgICAgICA9PiAnTmFtZScsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAnU2VydmljZScsCiAgICAgICAgICAgIElucHV0U3RyZyA9PiAkRm9ybVN0cmluZywKICAgICAgICAgICAgRm9ybURhdGEgID0+ICdTZXJ2aWNlIE5hbWUnLAogICAgICAgIH0sCiAgICApOwoKICAgIEBTZWFyY2hPcHRpb25MaXN0ID0gJExpbmtPYmplY3QtPlNlYXJjaE9wdGlvbkxpc3QoKTsKCj1jdXQKCnN1YiBTZWFyY2hPcHRpb25MaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBzZWFyY2ggb3B0aW9uIGxpc3QKICAgIG15IEBTZWFyY2hPcHRpb25MaXN0ID0gKAogICAgICAgIHsKICAgICAgICAgICAgS2V5ICA9PiAnTmFtZScsCiAgICAgICAgICAgIE5hbWUgPT4gJ1NlcnZpY2UnLAogICAgICAgICAgICBUeXBlID0+ICdUZXh0JywKICAgICAgICB9LAogICAgKTsKCiAgICAjIGFkZCBmb3Jta2V5CiAgICBmb3IgbXkgJFJvdyAoQFNlYXJjaE9wdGlvbkxpc3QpIHsKICAgICAgICAkUm93LT57Rm9ybUtleX0gPSAnU0VBUkNIOjonIC4gJFJvdy0+e0tleX07CiAgICB9CgogICAgIyBhZGQgZm9ybSBkYXRhIGFuZCBpbnB1dCBzdHJpbmcKICAgIFJPVzoKICAgIGZvciBteSAkUm93IChAU2VhcmNoT3B0aW9uTGlzdCkgewoKICAgICAgICAjIGdldCBmb3JtIGRhdGEKICAgICAgICAkUm93LT57Rm9ybURhdGF9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OldlYjo6UmVxdWVzdCcpCiAgICAgICAgICAgIC0+R2V0UGFyYW0oIFBhcmFtID0+ICRSb3ctPntGb3JtS2V5fSApOwoKICAgICAgICAjIHBhcnNlIHRoZSBpbnB1dCB0ZXh0IGJsb2NrCiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnSW5wdXRUZXh0JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBLZXkgPT4gJFJvdy0+e0Zvcm1LZXl9LAogICAgICAgICAgICAgICAgVmFsdWUgPT4gJFJvdy0+e0Zvcm1EYXRhfSB8fCAnJywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGFkZCB0aGUgaW5wdXQgc3RyaW5nCiAgICAgICAgJFJvdy0+e0lucHV0U3RyZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdMaW5rT2JqZWN0JywKICAgICAgICApOwoKICAgICAgICBuZXh0IFJPVzsKICAgIH0KCiAgICByZXR1cm4gQFNlYXJjaE9wdGlvbkxpc3Q7Cn0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIEFBQUlUU01Db3JlLnR0IC0gJFRleHQgdmFyaWFibGUgZmlsZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE0IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCiMgQ29tbW9uClslIFRyYW5zbGF0ZSgiQWx0ZXJuYXRpdmUgdG8iKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJBdmFpbGFiaWxpdHkiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJCYWNrIEVuZCIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIkNvbm5lY3RlZCB0byIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIkN1cnJlbnQgU3RhdGUiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJEZW1vbnN0cmF0aW9uIikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiRGVwZW5kcyBvbiIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIkVuZCBVc2VyIFNlcnZpY2UiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJFcnJvcnMiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJGcm9udCBFbmQiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJJVCBNYW5hZ2VtZW50IikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiSVQgT3BlcmF0aW9uYWwiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJJbXBhY3QiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJJbmNpZGVudCBTdGF0ZSIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIkluY2x1ZGVzIikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiT3RoZXIiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJQYXJ0IG9mIikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiUHJvamVjdCIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIlJlY292ZXJ5IFRpbWUiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJSZWxldmFudCB0byIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIlJlcG9ydGluZyIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIlJlcXVpcmVkIGZvciIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIlJlc29sdXRpb24gUmF0ZSIpIHwgaHRtbCAlXQpbJSBUcmFuc2xhdGUoIlJlc3BvbnNlIFRpbWUiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJTTEEgT3ZlcnZpZXciKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJTZXJ2aWNlIE92ZXJ2aWV3IikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiU2VydmljZS1BcmVhIikgfCBodG1sICVdClslIFRyYW5zbGF0ZSgiVHJhaW5pbmciKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJUcmFuc2FjdGlvbnMiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJVbmRlcnBpbm5pbmcgQ29udHJhY3QiKSB8IGh0bWwgJV0KWyUgVHJhbnNsYXRlKCJhbGxvY2F0aW9uIikgfCBodG1sICVdCg==
IyAtLQojIEFkbWluSVRTTUNJUEFsbG9jYXRlLnR0IC0gcHJvdmlkZXMgSFRNTCBmb3JtIGZvciBBZG1pbklUU01DSVBBbGxvY2F0ZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE0IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIExheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyRmlyc3QiPgogICAgPGgxIGNsYXNzPSJIZWFkZXIiPlslIFRyYW5zbGF0ZSgiQ3JpdGljYWxpdHkgPC0+IEltcGFjdCA8LT4gUHJpb3JpdHkiKSB8IGh0bWwgJV08L2gxPgoKICAgIDxkaXYgY2xhc3M9IlNpZGViYXJDb2x1bW4iPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+PGgyPlslIFRyYW5zbGF0ZSgiTm90ZSIpIHwgaHRtbCAlXTwvaDI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPgogICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTWFuYWdlIHRoZSBwcmlvcml0eSByZXN1bHQgb2YgY29tYmluYXRpbmcgQ3JpdGljYWxpdHkgPC0+IEltcGFjdC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgIDwvcD4KCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJDb250ZW50Q29sdW1uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiUHJpb3JpdHkgYWxsb2NhdGlvbiIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IlslIEVudigiQ0dJSGFuZGxlIikgJV0iIG1ldGhvZD0icG9zdCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iWyUgRW52KCJBY3Rpb24iKSAlXSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IkNJUEFsbG9jYXRlIi8+CiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUgRGF0YVRhYmxlTm9IaWdobGlnaHQiPgogICAgICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+ClslIFJlbmRlckJsb2NrU3RhcnQoIkhlYWRlckNvbHVtbkRlc2NyaXB0aW9uIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZShEYXRhLk9iamVjdFR5cGUpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+ClslIFJlbmRlckJsb2NrRW5kKCJIZWFkZXJDb2x1bW5EZXNjcmlwdGlvbiIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkhlYWRlckNlbGwiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuT2JqZWN0T3B0aW9uKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPgpbJSBSZW5kZXJCbG9ja0VuZCgiSGVhZGVyQ2VsbCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJEZXNjcmlwdGlvbkNlbGwiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuT2JqZWN0T3B0aW9uKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgpbJSBSZW5kZXJCbG9ja0VuZCgiRGVzY3JpcHRpb25DZWxsIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiQ29udGVudENlbGwiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5PcHRpb25TdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KWyUgUmVuZGVyQmxvY2tFbmQoIkNvbnRlbnRDZWxsIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iU3BhY2luZ1RvcCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iUHJpbWFyeSI+WyUgVHJhbnNsYXRlKCJTdWJtaXQiKSB8IGh0bWwgJV08L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+CgoKICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKPC9kaXY+Cg==
IyAtLQojIEFkbWluU2VydmljZS50dCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBmb3IgQWRtaW5TZXJ2aWNlCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTQgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgJG9yaWdpbjogaHR0cHM6Ly9naXRodWIuY29tL09UUlMvb3Rycy9ibG9iLzBjZDIyZGQzM2NkZDUxZDZmYWM0Yzk5N2MyYWViNjhhOGU4OTkxMzQvS2VybmVsL091dHB1dC9IVE1ML1N0YW5kYXJkL0FkbWluU2VydmljZS50dAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXciKSAlXQo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0Ij4KICAgIDxoMT5bJSBUcmFuc2xhdGUoIlNlcnZpY2UgTWFuYWdlbWVudCIpIHwgaHRtbCAlXTwvaDE+CgogICAgPGRpdiBjbGFzcz0iU2lkZWJhckNvbHVtbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uTGlzdCIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJBY3Rpb25zIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25MaXN0Ij4KWyUgUmVuZGVyQmxvY2tTdGFydCgiQWN0aW9uT3ZlcnZpZXciKSAlXQogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV0iIGNsYXNzPSJDYWxsRm9yQWN0aW9uIEZ1bGxzaXplIENlbnRlciI+PHNwYW4+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWxlZnQiPjwvaT5bJSBUcmFuc2xhdGUoIkdvIHRvIG92ZXJ2aWV3IikgfCBodG1sICVdPC9zcGFuPjwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0aW9uT3ZlcnZpZXciKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBY3Rpb25BZGQiKSAlXQogICAgICAgICAgICAgICAgICAgIDxsaT4KICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPVslIEVudigiQWN0aW9uIikgJV07U3ViYWN0aW9uPVNlcnZpY2VFZGl0O1NlcnZpY2VJRD1ORVciIGNsYXNzPSJDYWxsRm9yQWN0aW9uIEZ1bGxzaXplIENlbnRlciI+PHNwYW4+PGkgY2xhc3M9ImZhIGZhLXBsdXMtc3F1YXJlIj48L2k+WyUgVHJhbnNsYXRlKCJBZGQgc2VydmljZSIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbkFkZCIpICVdCiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbkxpc3QiKSAlXQogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdMaXN0IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkxpc3QiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiU2VydmljZSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDb21tZW50IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlZhbGlkaXR5IikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNoYW5nZWQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ3JlYXRlZCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICA8dGJvZHk+ClslIFJlbmRlckJsb2NrU3RhcnQoIk5vRGF0YUZvdW5kTXNnIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTm8gZGF0YSBmb3VuZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJOb0RhdGFGb3VuZE1zZyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk92ZXJ2aWV3TGlzdFJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB0aXRsZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+WyUgRGF0YS5MZXZlbFNwYWNlIHwgaHRtbCAlXTxhIGNsYXNzPSJBc0Jsb2NrIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXTtTdWJhY3Rpb249U2VydmljZUVkaXQ7U2VydmljZUlEPVslIERhdGEuU2VydmljZUlEIHwgdXJpICVdIj5bJSBEYXRhLk5hbWUgfCB0cnVuY2F0ZSg4MCkgfCBodG1sICVdPC9hPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgdGl0bGU9IlslIERhdGEuQ29tbWVudCB8IGh0bWwgJV0iPlslIERhdGEuQ29tbWVudCB8IHRydW5jYXRlKDIwKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIFRyYW5zbGF0ZShEYXRhLlZhbGlkKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIERhdGEuQ2hhbmdlVGltZSB8IExvY2FsaXplKCJUaW1lU2hvcnQiKSAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5DcmVhdGVUaW1lIHwgTG9jYWxpemUoIlRpbWVTaG9ydCIpICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TGlzdFJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdMaXN0IikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIlNlcnZpY2VFZGl0IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiSGVhZGVyQWRkIikgJV0KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkFkZCBTZXJ2aWNlIikgfCBodG1sICVdPC9oMj4KWyUgUmVuZGVyQmxvY2tFbmQoIkhlYWRlckFkZCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIkhlYWRlckVkaXQiKSAlXQogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiRWRpdCBTZXJ2aWNlIikgfCBodG1sICVdIDogWyUgRGF0YS5OYW1lIHwgaHRtbCAlXTwvaDI+ClslIFJlbmRlckJsb2NrRW5kKCJIZWFkZXJFZGl0IikgJV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBjbGFzcz0iVmFsaWRhdGUiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJTZXJ2aWNlU2F2ZSIvPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlNlcnZpY2VJRCIgdmFsdWU9IlslIERhdGEuU2VydmljZUlEIHwgaHRtbCAlXSIvPgoKICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSI+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJOYW1lIj5bJSBUcmFuc2xhdGUoIlNlcnZpY2UiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJOYW1lIiBpZD0iTmFtZSIgdmFsdWU9IlslIERhdGEuTmFtZVNob3J0IHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIFZhbGlkYXRlX1JlcXVpcmVkIFslIERhdGEuTmFtZUludmFsaWQgfCBodG1sICVdIiBtYXhsZW5ndGg9IjIwMCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iTmFtZUVycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSIgPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIiA+PHA+WyUgVHJhbnNsYXRlKCJUaGlzIGZpZWxkIGlzIHJlcXVpcmVkLiIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlBhcmVudElEIj5bJSBUcmFuc2xhdGUoIlN1Yi1zZXJ2aWNlIG9mIikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlBhcmVudE9wdGlvblN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlR5cGVJRCI+WyUgVHJhbnNsYXRlKCJUeXBlIikgfCBodG1sICVdOiA8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlR5cGVPcHRpb25TdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJDcml0aWNhbGl0eSI+WyUgVHJhbnNsYXRlKCJDcml0aWNhbGl0eSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5Dcml0aWNhbGl0eU9wdGlvblN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KIyAtLS0KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlZhbGlkSUQiPlslIFRyYW5zbGF0ZSgiVmFsaWRpdHkiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVmFsaWRPcHRpb25TdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJDb21tZW50Ij5bJSBUcmFuc2xhdGUoIkNvbW1lbnQiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJDb21tZW50IiBpZD0iQ29tbWVudCIgdmFsdWU9IlslIERhdGEuQ29tbWVudCB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyIgbWF4bGVuZ3RoPSIyNTAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIkl0ZW0iKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbnB1dEtleSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKERhdGEuS2V5KSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBpZD0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgdmFsdWU9IlslIERhdGEuU2VsZWN0ZWRJRCB8IGh0bWwgJV0iIGNsYXNzPSJXMjVwYyIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiSW5wdXRLZXkiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbnB1dCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBpZD0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgdmFsdWU9IlslIERhdGEuU2VsZWN0ZWRJRCB8IGh0bWwgJV0iIGNsYXNzPSJXMjVwYyIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPihbJSBUcmFuc2xhdGUoRGF0YS5EZXNjKSB8IGh0bWwgJV0pPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiSW5wdXQiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJUZXh0QXJlYSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBpZD0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgcm93cz0iWyUgRGF0YS5Sb3dzIHwgaHRtbCAlXSIgY29scz0iWyUgRGF0YS5Db2xzIHwgaHRtbCAlXSI+WyUgRGF0YS5TZWxlY3RlZElEIHwgaHRtbCAlXTwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+KFslIFRyYW5zbGF0ZShEYXRhLkRlc2MpIHwgaHRtbCAlXSk8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJUZXh0QXJlYSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk9wdGlvbiIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKERhdGEuS2V5KSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5PcHRpb24gJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj4oWyUgVHJhbnNsYXRlKERhdGEuRGVzYykgfCBodG1sICVdKTwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk9wdGlvbiIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlVwbG9hZCIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKERhdGEuS2V5KSB8IGh0bWwgJV08L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgaWQ9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIHR5cGU9ImZpbGUiIHNpemU9IjMwIiBjbGFzcz0iZml4ZWQiLz48YnIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iIj5bJSBEYXRhLkZpbGVuYW1lIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlVwbG9hZCIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIlBhc3N3b3JkIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoRGF0YS5LZXkpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InBhc3N3b3JkIiBjbGFzcz0iVzI1cGMiIG5hbWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGlkPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiB2YWx1ZT0iIiAvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiUGFzc3dvcmQiKSAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiSXRlbSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSBDYWxsRm9yQWN0aW9uIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlN1Ym1pdCIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTdWJtaXQiKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIm9yIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXSI+WyUgVHJhbnNsYXRlKCJDYW5jZWwiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KCiAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiU2VydmljZUVkaXQiKSAlXQogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXciKSAlXQo=
IyAtLQojIEFkbWluU0xBLnR0IC0gcHJvdmlkZXMgSFRNTCBmb3JtIGZvciBBZG1pblNMQQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE0IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojICRvcmlnaW46IGh0dHBzOi8vZ2l0aHViLmNvbS9PVFJTL290cnMvYmxvYi8wY2QyMmRkMzNjZGQ1MWQ2ZmFjNGM5OTdjMmFlYjY4YThlODk5MTM0L0tlcm5lbC9PdXRwdXQvSFRNTC9TdGFuZGFyZC9BZG1pblNMQS50dAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXciKSAlXQo8ZGl2IGNsYXNzPSJNYWluQm94IEFSSUFSb2xlTWFpbiBMYXlvdXRGaXhlZFNpZGViYXIgU2lkZWJhckZpcnN0Ij4KICAgIDxoMT5bJSBUcmFuc2xhdGUoIlNMQSBNYW5hZ2VtZW50IikgfCBodG1sICVdPC9oMT4KCiAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIj4KClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbkxpc3QiKSAlXQogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJBY3Rpb25zIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJBY3Rpb25MaXN0Ij4KClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbk92ZXJ2aWV3IikgJV0KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdIiBjbGFzcz0iQ2FsbEZvckFjdGlvbiBGdWxsc2l6ZSBDZW50ZXIiPjxzcGFuPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1sZWZ0Ij48L2k+WyUgVHJhbnNsYXRlKCJHbyB0byBvdmVydmlldyIpIHwgaHRtbCAlXTwvc3Bhbj48L2E+CiAgICAgICAgICAgICAgICAgICAgPC9saT4KWyUgUmVuZGVyQmxvY2tFbmQoIkFjdGlvbk92ZXJ2aWV3IikgJV0KClslIFJlbmRlckJsb2NrU3RhcnQoIkFjdGlvbkFkZCIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iQ2FsbEZvckFjdGlvbiBGdWxsc2l6ZSBDZW50ZXIiIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1TTEFFZGl0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPjxpIGNsYXNzPSJmYSBmYS1wbHVzLXNxdWFyZSI+PC9pPlslIFRyYW5zbGF0ZSgiQWRkIFNMQSIpIHwgaHRtbCAlXTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJBY3Rpb25BZGQiKSAlXQoKICAgICAgICAgICAgICAgIDwvdWw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiQWN0aW9uTGlzdCIpICVdCgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdMaXN0IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkxpc3QiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CgogICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPSJEYXRhVGFibGUiPgogICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiU0xBIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlNlcnZpY2UiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ29tbWVudCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJWYWxpZGl0eSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDaGFuZ2VkIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNyZWF0ZWQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJOb0RhdGFGb3VuZE1zZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSI2Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIk5vIGRhdGEgZm91bmQuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiTm9EYXRhRm91bmRNc2ciKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld0xpc3RSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGEgY2xhc3M9IkFzQmxvY2siIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXUFjdGlvbj1bJSBFbnYoIkFjdGlvbiIpICVdO1N1YmFjdGlvbj1TTEFFZGl0O1NMQUlEPVslIERhdGEuU0xBSUQgfCB1cmkgJV0iPlslIERhdGEuTmFtZSB8IGh0bWwgJV08L2E+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBUcmFuc2xhdGUoRGF0YS5TZXJ2aWNlKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHRpdGxlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIj5bJSBEYXRhLkNvbW1lbnQgfCB0cnVuY2F0ZSgyNikgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBUcmFuc2xhdGUoRGF0YS5WYWxpZCkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZVNob3J0IikgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCJUaW1lU2hvcnQiKSAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld0xpc3RSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3TGlzdCIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTTEFFZGl0IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KWyUgUmVuZGVyQmxvY2tTdGFydCgiSGVhZGVyQWRkIikgJV0KICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIkFkZCBTTEEiKSB8IGh0bWwgJV08L2gyPgpbJSBSZW5kZXJCbG9ja0VuZCgiSGVhZGVyQWRkIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiSGVhZGVyRWRpdCIpICVdCiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJFZGl0IFNMQSIpIHwgaHRtbCAlXTwvaDI+ClslIFJlbmRlckJsb2NrRW5kKCJIZWFkZXJFZGl0IikgJV0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgoKICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iWyUgRW52KCJDR0lIYW5kbGUiKSAlXSIgbWV0aG9kPSJwb3N0IiBjbGFzcz0iVmFsaWRhdGUiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IlslIEVudigiQWN0aW9uIikgJV0iLz4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJTTEFTYXZlIi8+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU0xBSUQiIHZhbHVlPSJbJSBEYXRhLlNMQUlEIHwgaHRtbCAlXSIvPgogICAgICAgICAgICAgICAgICAgIDxmaWVsZHNldCBjbGFzcz0iVGFibGVMaWtlIj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Ik5hbWUiPlslIFRyYW5zbGF0ZSgiU0xBIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJOYW1lIiBpZD0iTmFtZSIgdmFsdWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGNsYXNzPSJXNTBwYyBWYWxpZGF0ZV9SZXF1aXJlZCBbJSBEYXRhLk5hbWVJbnZhbGlkIHwgaHRtbCAlXSIgbWF4bGVuZ3RoPSIyMDAiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9Ik5hbWVFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiVGhpcyBmaWVsZCBpcyByZXF1aXJlZC4iKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJOYW1lU2VydmVyRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlRoaXMgZmllbGQgaXMgcmVxdWlyZWQuIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iU2VydmljZUlEcyI+WyUgVHJhbnNsYXRlKCJUeXBlIikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuVHlwZU9wdGlvblN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KIyAtLS0KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlNlcnZpY2VJRHMiPlslIFRyYW5zbGF0ZSgiU2VydmljZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLlNlcnZpY2VPcHRpb25TdHJnICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJDYWxlbmRhciI+WyUgVHJhbnNsYXRlKCJDYWxlbmRhciIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNhbGVuZGFyT3B0aW9uU3RyZyAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iRmlyc3RSZXNwb25zZVRpbWUiPlslIFRyYW5zbGF0ZSgiRXNjYWxhdGlvbiAtIGZpcnN0IHJlc3BvbnNlIHRpbWUiKSB8IGh0bWwgJV0gKFslIFRyYW5zbGF0ZSgibWludXRlcyIpIHwgaHRtbCAlXSk6PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IkZpcnN0UmVzcG9uc2VUaW1lIiBpZD0iRmlyc3RSZXNwb25zZVRpbWUiIHZhbHVlPSJbJSBEYXRhLkZpcnN0UmVzcG9uc2VUaW1lIHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHB4IFZhbGlkYXRlX051bWJlciIgbWF4bGVuZ3RoPSIxMCIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0iRmlyc3RSZXNwb25zZVRpbWVFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiUGxlYXNlIHdyaXRlIG9ubHkgbnVtYmVycyEiKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGxhYmVsIGZvcj0iRmlyc3RSZXNwb25zZU5vdGlmeSI+WyUgVHJhbnNsYXRlKCJOb3RpZnkgYnkiKSB8IGh0bWwgJV08L2xhYmVsPiBbJSBEYXRhLkZpcnN0UmVzcG9uc2VOb3RpZnlPcHRpb25TdHJnICVdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IkZpZWxkRXhwbGFuYXRpb24iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiMCA9IG5vIGVzY2FsYXRpb24iKSB8IGh0bWwgJV0gLSAyNCBbJSBUcmFuc2xhdGUoImhvdXJzIikgfCBodG1sICVdID0gMTQ0MCBbJSBUcmFuc2xhdGUoIm1pbnV0ZXMiKSB8IGh0bWwgJV0gLSBbJSBUcmFuc2xhdGUoIk9ubHkgYnVzaW5lc3MgaG91cnMgYXJlIGNvdW50ZWQuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJVcGRhdGVUaW1lIj5bJSBUcmFuc2xhdGUoIkVzY2FsYXRpb24gLSB1cGRhdGUgdGltZSIpIHwgaHRtbCAlXSAoWyUgVHJhbnNsYXRlKCJtaW51dGVzIikgfCBodG1sICVdKTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iVXBkYXRlVGltZSIgaWQ9IlVwZGF0ZVRpbWUiIHZhbHVlPSJbJSBEYXRhLlVwZGF0ZVRpbWUgfCBodG1sICVdIiBjbGFzcz0iVzUwcHggVmFsaWRhdGVfTnVtYmVyIiBtYXhsZW5ndGg9IjEwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJVcGRhdGVUaW1lRXJyb3IiIGNsYXNzPSJUb29sdGlwRXJyb3JNZXNzYWdlIj48cD5bJSBUcmFuc2xhdGUoIlBsZWFzZSB3cml0ZSBvbmx5IG51bWJlcnMhIikgfCBodG1sICVdPC9wPjwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKDxsYWJlbCBmb3I9IlVwZGF0ZU5vdGlmeSI+WyUgVHJhbnNsYXRlKCJOb3RpZnkgYnkiKSB8IGh0bWwgJV08L2xhYmVsPiBbJSBEYXRhLlVwZGF0ZU5vdGlmeU9wdGlvblN0cmcgJV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCIwID0gbm8gZXNjYWxhdGlvbiIpIHwgaHRtbCAlXSAtIDI0IFslIFRyYW5zbGF0ZSgiaG91cnMiKSB8IGh0bWwgJV0gPSAxNDQwIFslIFRyYW5zbGF0ZSgibWludXRlcyIpIHwgaHRtbCAlXSAtIFslIFRyYW5zbGF0ZSgiT25seSBidXNpbmVzcyBob3VycyBhcmUgY291bnRlZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlNvbHV0aW9uVGltZSI+WyUgVHJhbnNsYXRlKCJFc2NhbGF0aW9uIC0gc29sdXRpb24gdGltZSIpIHwgaHRtbCAlXSAoWyUgVHJhbnNsYXRlKCJtaW51dGVzIikgfCBodG1sICVdKTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iU29sdXRpb25UaW1lIiBpZD0iU29sdXRpb25UaW1lIiB2YWx1ZT0iWyUgRGF0YS5Tb2x1dGlvblRpbWUgfCBodG1sICVdIiBjbGFzcz0iVzUwcHggVmFsaWRhdGVfTnVtYmVyIiBtYXhsZW5ndGg9IjEwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJTb2x1dGlvblRpbWVFcnJvciIgY2xhc3M9IlRvb2x0aXBFcnJvck1lc3NhZ2UiPjxwPlslIFRyYW5zbGF0ZSgiUGxlYXNlIHdyaXRlIG9ubHkgbnVtYmVycyEiKSB8IGh0bWwgJV08L3A+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoPGxhYmVsIGZvcj0iU29sdXRpb25Ob3RpZnkiPlslIFRyYW5zbGF0ZSgiTm90aWZ5IGJ5IikgfCBodG1sICVdPC9sYWJlbD4gWyUgRGF0YS5Tb2x1dGlvbk5vdGlmeU9wdGlvblN0cmcgJV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCIwID0gbm8gZXNjYWxhdGlvbiIpIHwgaHRtbCAlXSAtIDI0IFslIFRyYW5zbGF0ZSgiaG91cnMiKSB8IGh0bWwgJV0gPSAxNDQwIFslIFRyYW5zbGF0ZSgibWludXRlcyIpIHwgaHRtbCAlXSAtIFslIFRyYW5zbGF0ZSgiT25seSBidXNpbmVzcyBob3VycyBhcmUgY291bnRlZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9Ik1pblRpbWVCZXR3ZWVuSW5jaWRlbnRzIj5bJSBUcmFuc2xhdGUoIk1pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyIpIHwgaHRtbCAlXSAoWyUgVHJhbnNsYXRlKCJtaW51dGVzIikgfCBodG1sICVdKTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iTWluVGltZUJldHdlZW5JbmNpZGVudHMiIGlkPSJNaW5UaW1lQmV0d2VlbkluY2lkZW50cyIgdmFsdWU9IlslIERhdGEuTWluVGltZUJldHdlZW5JbmNpZGVudHMgfCBodG1sICVdIiBjbGFzcz0iVzI1cGMgVmFsaWRhdGVfTnVtYmVyIiBtYXhsZW5ndGg9IjE1Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJNaW5UaW1lQmV0d2VlbkluY2lkZW50c0Vycm9yIiBjbGFzcz0iVG9vbHRpcEVycm9yTWVzc2FnZSI+PHA+WyUgVHJhbnNsYXRlKCJQbGVhc2Ugd3JpdGUgb25seSBudW1iZXJzISIpIHwgaHRtbCAlXTwvcD48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KIyAtLS0KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlZhbGlkSUQiPlslIFRyYW5zbGF0ZSgiVmFsaWRpdHkiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5WYWxpZE9wdGlvblN0cmcgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IkNvbW1lbnQiPlslIFRyYW5zbGF0ZSgiQ29tbWVudCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iQ29tbWVudCIgaWQ9IkNvbW1lbnQiIHZhbHVlPSJbJSBEYXRhLkNvbW1lbnQgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiIG1heGxlbmd0aD0iMjUwIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrU3RhcnQoIlNMQUl0ZW0iKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJJbnB1dEtleSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLkxhYmVsKSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKERhdGEuS2V5KSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIGlkPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiB2YWx1ZT0iWyUgRGF0YS5TZWxlY3RlZElEIHwgaHRtbCAlXSIgY2xhc3M9Ilc1MHBjIi8+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJJbnB1dEtleSIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIklucHV0IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTGFiZWwpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGaWVsZCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgaWQ9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIHZhbHVlPSJbJSBEYXRhLlNlbGVjdGVkSUQgfCBodG1sICVdIiBjbGFzcz0iVzUwcGMiLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJGaWVsZEV4cGxhbmF0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoRGF0YS5EZXNjKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIklucHV0IikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiVGV4dEFyZWEiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBpZD0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgcm93cz0iWyUgRGF0YS5Sb3dzIHwgaHRtbCAlXSIgY29scz0iWyUgRGF0YS5Db2xzIHwgaHRtbCAlXSI+WyUgRGF0YS5TZWxlY3RlZElEIHwgaHRtbCAlXTwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuRGVzYykgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgpbJSBSZW5kZXJCbG9ja0VuZCgiVGV4dEFyZWEiKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPcHRpb24iKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdIFslIFRyYW5zbGF0ZShEYXRhLktleSkgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuT3B0aW9uICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iRmllbGRFeHBsYW5hdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuRGVzYykgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJPcHRpb24iKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJVcGxvYWQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdIFslIFRyYW5zbGF0ZShEYXRhLktleSkgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIiBpZD0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgdHlwZT0iZmlsZSIgY2xhc3M9ImZpeGVkIi8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSIiPlslIERhdGEuRmlsZW5hbWUgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiVXBsb2FkIikgJV0KWyUgUmVuZGVyQmxvY2tTdGFydCgiUGFzc3dvcmQiKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJbJSBEYXRhLk5hbWUgfCBodG1sICVdIj5bJSBUcmFuc2xhdGUoRGF0YS5MYWJlbCkgfCBodG1sICVdIFslIFRyYW5zbGF0ZShEYXRhLktleSkgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJwYXNzd29yZCIgbmFtZT0iWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSIgaWQ9IlslIERhdGEuTmFtZSB8IGh0bWwgJV0iIHZhbHVlPSIiIGNsYXNzPSJXNTBwYyIvPgogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiUGFzc3dvcmQiKSAlXQpbJSBSZW5kZXJCbG9ja0VuZCgiU0xBSXRlbSIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIFNwYWNpbmdUb3AiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iUHJpbWFyeSBDYWxsRm9yQWN0aW9uIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJbJSBUcmFuc2xhdGUoIlN1Ym1pdCIpIHwgaHRtbCAlXSI+PHNwYW4+WyUgVHJhbnNsYXRlKCJTdWJtaXQiKSB8IGh0bWwgJV08L3NwYW4+PC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIm9yIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249WyUgRW52KCJBY3Rpb24iKSAlXSI+WyUgVHJhbnNsYXRlKCJDYW5jZWwiKSB8IGh0bWwgJV08L2E+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJTTEFFZGl0IikgJV0KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2Pgo8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3IikgJV0K
IyAtLQojIEFnZW50SVRTTUN1c3RvbWVyU2VhcmNoLnR0IC0gcHJvdmlkZXMgYXV0b2NvbXBsZXRlIGZlYXR1cmUgZm9yIGN1c3RvbWVyIHNlYXJjaAojIENvcHlyaWdodCAoQykgMjAwMS0yMDE0IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KClslIFJlbmRlckJsb2NrU3RhcnQoIkN1c3RvbWVyU2VhcmNoSW5pdCIpICVdClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCi8qZ2xvYmFsIElUU006IHRydWUgKi8KCiAgICAvLyBlc2NhcGUgcG9zc2libGUgY29sb25zICg6KSBpbiBlbGVtZW50IGlkIGJlY2F1c2UgalF1ZXJ5IGNhbiBub3QgaGFuZGxlIGl0IGluIGlkIGF0dHJpYnV0ZSBzZWxlY3RvcnMKICAgIElUU00uQWdlbnQuQ3VzdG9tZXJTZWFyY2guSW5pdCggJCgiIyIgKyBDb3JlLkFwcC5Fc2NhcGVTZWxlY3RvcigiWyUgRGF0YS5JdGVtSUQgfCBodG1sICVdIikgKSApOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0KWyUgUmVuZGVyQmxvY2tFbmQoIkN1c3RvbWVyU2VhcmNoSW5pdCIpICVdCg==
IyAtLQojIEFnZW50SVRTTVNlcnZpY2UudHQgLSBwcm92aWRlcyBIVE1MIGZvcm0gZm9yIEFnZW50SVRTTVNlcnZpY2UKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlldyIpICVdCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQXJpYVJvbGVNYWluIFNwYWNpbmdUb3AiPgogICAgPGRpdiBjbGFzcz0iVzc1cGMgU3BhY2luZ0JvdHRvbSBDZW50ZXJCb3giPgogICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJPdmVydmlldyIpIHwgaHRtbCAlXTogWyUgVHJhbnNsYXRlKCJTZXJ2aWNlIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQgU3BhY2luZ0JvdHRvbSI+CiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlN0YXRlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlNlcnZpY2UiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiVHlwZSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDcml0aWNhbGl0eSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDaGFuZ2VkIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgIDx0Ym9keT4KWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXdSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9Ik1hc3RlckFjdGlvbiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmxhZyBTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJbJSBEYXRhLkN1ckluY2lTaWduYWwgJV0iIHRpdGxlPSJbJSBEYXRhLlN0YXRlICVdIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGV2ZWxTcGFjZSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJNYXN0ZXJBY3Rpb25MaW5rIiBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRJVFNNU2VydmljZVpvb207U2VydmljZUlEPVslIERhdGEuU2VydmljZUlEIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5OYW1lIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgVHJhbnNsYXRlKERhdGEuVHlwZSkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBUcmFuc2xhdGUoRGF0YS5Dcml0aWNhbGl0eSkgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJPdmVydmlld1JvdyIpICVdClslIFJlbmRlckJsb2NrU3RhcnQoIk5vRGF0YUZvdW5kTXNnIikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjUiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiTm8gZGF0YSBmb3VuZC4iKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJOb0RhdGFGb3VuZE1zZyIpICVdCiAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CjwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXciKSAlXQoKWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKICAgICQoJy5NYXN0ZXJBY3Rpb24nKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIHZhciAkTWFzdGVyQWN0aW9uTGluayA9ICQodGhpcykuZmluZCgnLk1hc3RlckFjdGlvbkxpbmsnKTsKICAgICAgICAvLyBvbmx5IGFjdCBpZiB0aGUgbGluayB3YXMgbm90IGNsaWNrZWQgZGlyZWN0bHkKICAgICAgICBpZiAoRXZlbnQudGFyZ2V0ICE9PSAkTWFzdGVyQWN0aW9uTGluay5nZXQoMCkpIHsKICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uID0gJE1hc3RlckFjdGlvbkxpbmsuYXR0cignaHJlZicpOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgfSk7Ci8vXV0+PC9zY3JpcHQ+ClslIEVORCAlXQo=
IyAtLQojIEFnZW50SVRTTVNlcnZpY2VQcmludC50dCAtIHByb3ZpZGVzIEhUTUwgcHJpbnQgdmlldwojIENvcHlyaWdodCAoQykgMjAwMS0yMDE0IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIxIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgogICAgPHRyPgogICAgICAgIDx0ZCBjbGFzcz0ibWFpbmhlYWQiPlslIFRyYW5zbGF0ZSgiU2VydmljZSIpIHwgaHRtbCAlXTwvdGQ+CiAgICA8L3RyPgo8L3RhYmxlPgo8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMSIgY2VsbHBhZGRpbmc9IjEwIiB3aWR0aD0iMTAwJSI+CiAgICA8dHI+CiAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4KICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJTZXJ2aWNlLUluZm8iKSB8IGh0bWwgJV06CiAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIzIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSIgd2lkdGg9IjEwJSI+WyUgVHJhbnNsYXRlKCJTZXJ2aWNlIikgfCBodG1sICVdOjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiIHdpZHRoPSI0MCUiPlslIERhdGEuTmFtZVNob3J0IHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5IiB3aWR0aD0iMjAlIj5bJSBUcmFuc2xhdGUoIkNyZWF0ZWQiKSB8IGh0bWwgJV06PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSIgd2lkdGg9IjMwJSI+WyUgRGF0YS5DcmVhdGVUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV08L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPlslIFRyYW5zbGF0ZSgiQ3VycmVudCBJbmNpZGVudCBTdGF0ZSIpIHwgaHRtbCAlXTo8L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj5bJSBUcmFuc2xhdGUoRGF0YS5DdXJJbmNpU3RhdGUpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij5bJSBUcmFuc2xhdGUoIkNyZWF0ZWQgYnkiKSB8IGh0bWwgJV06PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+WyUgRGF0YS5DcmVhdGVCeU5hbWUgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij48L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj48L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSI+WyUgVHJhbnNsYXRlKCJMYXN0IGNoYW5nZWQiKSB8IGh0bWwgJV06PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+WyUgRGF0YS5DaGFuZ2VUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV08L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij5bJSBUcmFuc2xhdGUoIkxhc3QgY2hhbmdlZCBieSIpIHwgaHRtbCAlXTo8L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj5bJSBEYXRhLkNoYW5nZUJ5TmFtZSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiZuYnNwOzwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiIGNsYXNzPSJjb250ZW50dmFsdWUiPiZuYnNwOzwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvdGQ+CiAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBc3NvY2lhdGVkU0xBcyIpICVdCiAgICA8dHI+CiAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4KICAgICAgICAgICAgWyUgVHJhbnNsYXRlKCJBc3NvY2lhdGVkIFNMQXMiKSB8IGh0bWwgJV06CiAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIzIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJBc3NvY2lhdGVkU0xBc1JvdyIpICVdCiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5IiB3aWR0aD0iMjAlIj5bJSBUcmFuc2xhdGUoIlNMQSIpIHwgaHRtbCAlXTo8L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIiBjbGFzcz0iY29udGVudHZhbHVlIj5bJSBEYXRhLk5hbWUgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+ClslIFJlbmRlckJsb2NrRW5kKCJBc3NvY2lhdGVkU0xBc1JvdyIpICVdCiAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgPC90ZD4KICAgIDwvdHI+CjwvdGFibGU+ClslIFJlbmRlckJsb2NrRW5kKCJBc3NvY2lhdGVkU0xBcyIpICVdCjx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSI2NDAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgYmdjb2xvcj0iIzAwMDAwMCIgY2xhc3M9ImNvbnRhaW5lciI+CiAgICA8dHI+CiAgICAgICAgPHRkPgogICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iNjQwIiBjZWxscGFkZGluZz0iMTAiIGNlbGxzcGFjaW5nPSIxIiBiZ2NvbG9yPSIjZmZmZmZmIj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjMiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyIGJnY29sb3I9IiNmZmZmZmYiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCB2YWxpZ249InRvcCIgd2lkdGg9IjEwMCUiIGNsYXNzPSJzbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjEiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSIgd2lkdGg9IjIwJSI+WyUgVHJhbnNsYXRlKCJTZXJ2aWNlIikgfCBodG1sICVdOjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPlslIERhdGEuTmFtZSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPlslIFRyYW5zbGF0ZSgiVHlwZSIpIHwgaHRtbCAlXTo8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj5bJSBUcmFuc2xhdGUoRGF0YS5UeXBlKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPlslIFRyYW5zbGF0ZSgiQ3JpdGljYWxpdHkiKSB8IGh0bWwgJV06PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+WyUgVHJhbnNsYXRlKERhdGEuQ3JpdGljYWxpdHkpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvdGQ+CiAgICA8L3RyPgo8L3RhYmxlPgo=
IyAtLQojIEFnZW50SVRTTVNlcnZpY2Vab29tLnR0IC0gcHJvdmlkZXMgSFRNTCBmb3JtIGZvciBBZ2VudElUU01TZXJ2aWNlWm9vbQojIENvcHlyaWdodCAoQykgMjAwMS0yMDE0IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCjxkaXYgY2xhc3M9Ik1haW5Cb3ggQVJJQVJvbGVNYWluIj4KICAgIDxkaXYgY2xhc3M9IkNsZWFyTGVmdCI+PC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJIZWFkbGluZSI+CiAgICAgICAgPGRpdiBjbGFzcz0iRmxhZyIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkN1ckluY2lTdGF0ZSkgfCBodG1sICVdIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9IlslIERhdGEuQ3VySW5jaVNpZ25hbCB8IGh0bWwgJV0iPjwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8aDEgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2VydmljZSIpIHwgaHRtbCAlXTogWyUgRGF0YS5OYW1lIHwgaHRtbCAlXSI+CiAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiU2VydmljZSIpIHwgaHRtbCAlXTogWyUgRGF0YS5OYW1lIHwgaHRtbCAlXQogICAgICAgIDwvaDE+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkxheW91dEZpeGVkU2lkZWJhciBTaWRlYmFyTGFzdCI+CiAgICAgICAgPGRpdiBjbGFzcz0iU2lkZWJhckNvbHVtbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIlNlcnZpY2UgSW5mb3JtYXRpb24iKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8ZmllbGRzZXQgY2xhc3M9IlRhYmxlTGlrZSBGaXhlZExhYmVsU21hbGwgVGlnaHQiPgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ3VycmVudCBpbmNpZGVudCBzdGF0ZSIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJGbGFnIFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iWyUgRGF0YS5DdXJJbmNpU2lnbmFsIHwgaHRtbCAlXSI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoRGF0YS5DdXJJbmNpU3RhdGUpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ3JlYXRlZCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPlslIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJDcmVhdGVkIGJ5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNyZWF0ZUJ5TmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJMYXN0IGNoYW5nZWQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ2hhbmdlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiTGFzdCBjaGFuZ2VkIGJ5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNoYW5nZUJ5TmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIkxpbmtUYWJsZVNpbXBsZSIpICVdCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldFNpbXBsZSBEb250UHJpbnQiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJMaW5rZWQgT2JqZWN0cyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIFslIERhdGEuTGlua1RhYmxlU3RyZyAlXQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgpbJSBSZW5kZXJCbG9ja0VuZCgiTGlua1RhYmxlU2ltcGxlIikgJV0KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudENvbHVtbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRyb2xSb3ciPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQWN0aW9uUm93Ij4KICAgICAgICAgICAgICAgIDx1bCBjbGFzcz0iQWN0aW9ucyI+ClslIFJlbmRlckJsb2NrU3RhcnQoIk1lbnVJdGVtIikgJV0KICAgICAgICAgICAgICAgICAgICA8bGk+CiAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IlslIEVudigiQmFzZWxpbmsiKSAlXVslIERhdGEuTGluayB8IEludGVycG9sYXRlICVdIiBjbGFzcz0iWyUgRGF0YS5NZW51Q2xhc3MgfCBodG1sICVdIiB0aXRsZT0iWyUgVHJhbnNsYXRlKERhdGEuRGVzY3JpcHRpb24pIHwgaHRtbCAlXSI+WyUgVHJhbnNsYXRlKERhdGEuTmFtZSkgfCBodG1sICVdPC9hPgogICAgICAgICAgICAgICAgICAgIDwvbGk+ClslIFJlbmRlckJsb2NrRW5kKCJNZW51SXRlbSIpICVdCiAgICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEJveCBTcGFjaW5nVG9wIEV4cGFuZGVkIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkxpZ2h0Um93IEhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0QWN0aW9uIFRvZ2dsZSI+PGEgaHJlZj0iIyIgdGl0bGU9IlslIFRyYW5zbGF0ZSgiU2hvdyBvciBoaWRlIHRoZSBjb250ZW50LiIpIHwgaHRtbCAlXSI+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LXJpZ2h0Ij48L2k+PGkgY2xhc3M9ImZhIGZhLWNhcmV0LWRvd24iPjwvaT48L2E+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiU2VydmljZSIpIHwgaHRtbCAlXTogWyUgRGF0YS5OYW1lIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQgQXV0b0hlaWdodCI+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbFNtYWxsIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlR5cGUiKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZSgiVHlwZSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuVHlwZSkgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJDcml0aWNhbGl0eSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgVHJhbnNsYXRlKERhdGEuQ3JpdGljYWxpdHkpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZmllbGRzZXQ+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTTEEiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgRG9udFByaW50IFNwYWNpbmdUb3AgIFNwYWNpbmdCb3R0b21NZWRpdW0iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iSGVhZGVyIj4KICAgICAgICAgICAgICAgICAgICA8aDI+WyUgVHJhbnNsYXRlKCJBc3NvY2lhdGVkIFNMQXMiKSB8IGh0bWwgJV08L2gyPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250ZW50Ij4KICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJTTEEiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlR5cGUiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNoYW5nZWQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJTTEFSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48YSBjbGFzcz0iQXNCbG9jayIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50SVRTTVNMQVpvb207U0xBSUQ9WyUgRGF0YS5TTEFJRCB8IHVyaSAlXSI+WyUgRGF0YS5OYW1lIHwgaHRtbCAlXTwvYT48L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBUcmFuc2xhdGUoRGF0YS5UeXBlKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiU0xBUm93IikgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPgoKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlNMQSIpICVdCgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJMaW5rVGFibGVDb21wbGV4IikgJV0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICBbJSBEYXRhLkxpbmtUYWJsZVN0cmcgJV0KICAgICAgICAgICAgPC9kaXY+ClslIFJlbmRlckJsb2NrRW5kKCJMaW5rVGFibGVDb21wbGV4IikgJV0KCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgogICAgPC9kaXY+CjwvZGl2PgoKWyUgV1JBUFBFUiBKU09uRG9jdW1lbnRDb21wbGV0ZSAlXQo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ly88IVtDREFUQVsKCiAgICAkKCd1bC5BY3Rpb25zIGEuQXNQb3B1cCcpLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24gKEV2ZW50KSB7CiAgICAgICAgQ29yZS5VSS5Qb3B1cC5PcGVuUG9wdXAoJCh0aGlzKS5hdHRyKCdocmVmJyksICdBY3Rpb24nKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKCiAgICAkKCd1bC5BY3Rpb25zIGEuSGlzdG9yeUJhY2snKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIGhpc3RvcnkuYmFjaygpOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0pOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0K
IyAtLQojIEFnZW50SVRTTVNMQS50dCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBmb3IgQWdlbnRJVFNNU0xBCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTQgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKWyUgUmVuZGVyQmxvY2tTdGFydCgiT3ZlcnZpZXciKSAlXQo8ZGl2IGNsYXNzPSJNYWluQm94IEFyaWFSb2xlTWFpbiBTcGFjaW5nVG9wIj4KICAgIDxkaXYgY2xhc3M9Ilc3NXBjIFNwYWNpbmdCb3R0b20gQ2VudGVyQm94Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJIZWFkZXIiPgogICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiT3ZlcnZpZXciKSB8IGh0bWwgJV06IFslIFRyYW5zbGF0ZSgiU0xBIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQgU3BhY2luZ0JvdHRvbSI+CiAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9IkRhdGFUYWJsZSBTcGFjaW5nVG9wIj4KICAgICAgICAgICAgICAgICAgICA8dGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlNMQSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJUeXBlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIkNoYW5nZWQiKSB8IGh0bWwgJV08L3RoPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5PgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJPdmVydmlld1JvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz0iTWFzdGVyQWN0aW9uIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0iTWFzdGVyQWN0aW9uTGluayIgaHJlZj0iWyUgRW52KCJCYXNlbGluayIpICVdQWN0aW9uPUFnZW50SVRTTVNMQVpvb207U0xBSUQ9WyUgRGF0YS5TTEFJRCB8IHVyaSAlXSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIFRyYW5zbGF0ZShEYXRhLlR5cGUpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+WyUgRGF0YS5DaGFuZ2VUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiT3ZlcnZpZXdSb3ciKSAlXQpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJOb0RhdGFGb3VuZE1zZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBUcmFuc2xhdGUoIk5vIGRhdGEgZm91bmQuIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiTm9EYXRhRm91bmRNc2ciKSAlXQogICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIk92ZXJ2aWV3IikgJV0KClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCiAgICAkKCcuTWFzdGVyQWN0aW9uJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICB2YXIgJE1hc3RlckFjdGlvbkxpbmsgPSAkKHRoaXMpLmZpbmQoJy5NYXN0ZXJBY3Rpb25MaW5rJyk7CiAgICAgICAgLy8gb25seSBhY3QgaWYgdGhlIGxpbmsgd2FzIG5vdCBjbGlja2VkIGRpcmVjdGx5CiAgICAgICAgaWYgKEV2ZW50LnRhcmdldCAhPT0gJE1hc3RlckFjdGlvbkxpbmsuZ2V0KDApKSB7CiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbiA9ICRNYXN0ZXJBY3Rpb25MaW5rLmF0dHIoJ2hyZWYnKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0pOwovL11dPjwvc2NyaXB0PgpbJSBFTkQgJV0K
IyAtLQojIEFnZW50SVRTTVNMQVByaW50LnR0IC0gcHJvdmlkZXMgSFRNTCBwcmludCB2aWV3CiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTQgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjEiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+CiAgICA8dHI+CiAgICAgICAgPHRkIGNsYXNzPSJtYWluaGVhZCI+WyUgVHJhbnNsYXRlKCJTTEEiKSB8IGh0bWwgJV08L3RkPgogICAgPC90cj4KPC90YWJsZT4KPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjEiIGNlbGxwYWRkaW5nPSIxMCIgd2lkdGg9IjEwMCUiPgogICAgPHRyPgogICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSI+CiAgICAgICAgICAgIFslIFRyYW5zbGF0ZSgiU0xBLUluZm8iKSB8IGh0bWwgJV06CiAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIzIiBjZWxscGFkZGluZz0iMCIgd2lkdGg9IjEwMCUiPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSIgd2lkdGg9IjIwJSI+WyUgVHJhbnNsYXRlKCJTTEEiKSB8IGh0bWwgJV06PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSIgd2lkdGg9IjMwJSI+WyUgRGF0YS5OYW1lIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5IiB3aWR0aD0iMjAlIj5bJSBUcmFuc2xhdGUoIkNyZWF0ZWQiKSB8IGh0bWwgJV06PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSIgd2lkdGg9IjMwJSI+WyUgRGF0YS5DcmVhdGVUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV08L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij5bJSBUcmFuc2xhdGUoIkNyZWF0ZWQgYnkiKSB8IGh0bWwgJV06PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+WyUgRGF0YS5DcmVhdGVCeU5hbWUgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij48L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj48L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSI+WyUgVHJhbnNsYXRlKCJMYXN0IGNoYW5nZWQiKSB8IGh0bWwgJV06PC90ZD4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+WyUgRGF0YS5DaGFuZ2VUaW1lIHwgTG9jYWxpemUoIlRpbWVMb25nIikgJV08L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij5bJSBUcmFuc2xhdGUoIkxhc3QgY2hhbmdlZCBieSIpIHwgaHRtbCAlXTo8L3RkPgogICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj5bJSBEYXRhLkNoYW5nZUJ5TmFtZSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiZuYnNwOzwvdGQ+CiAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49IjMiIGNsYXNzPSJjb250ZW50dmFsdWUiPiZuYnNwOzwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvdGQ+CiAgICA8L3RyPgo8L3RhYmxlPgo8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iNjQwIiBjZWxscGFkZGluZz0iMCIgY2VsbHNwYWNpbmc9IjAiIGJnY29sb3I9IiMwMDAwMDAiIGNsYXNzPSJjb250YWluZXIiPgogICAgPHRyPgogICAgICAgIDx0ZD4KICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjY0MCIgY2VsbHBhZGRpbmc9IjEwIiBjZWxsc3BhY2luZz0iMSIgYmdjb2xvcj0iI2ZmZmZmZiI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ciBiZ2NvbG9yPSIjZmZmZmZmIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIxMDAlIiBjbGFzcz0ic21hbGwiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIxIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPlslIFRyYW5zbGF0ZSgiU0xBIikgfCBodG1sICVdOjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPlslIERhdGEuTmFtZSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPlslIFRyYW5zbGF0ZSgiVHlwZSIpIHwgaHRtbCAlXTo8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj5bJSBUcmFuc2xhdGUoRGF0YS5UeXBlKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPlslIFRyYW5zbGF0ZSgiQ2FsZW5kYXIiKSB8IGh0bWwgJV06PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+WyUgVHJhbnNsYXRlKERhdGEuQ2FsZW5kYXJOYW1lKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPlslIFRyYW5zbGF0ZSgiRmlyc3QgUmVzcG9uc2UgVGltZSIpIHwgaHRtbCAlXTo8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj5bJSBEYXRhLkZpcnN0UmVzcG9uc2VUaW1lIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoIm1pbnV0ZXMiKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPlslIFRyYW5zbGF0ZSgiVXBkYXRlIFRpbWUiKSB8IGh0bWwgJV06PC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+WyUgRGF0YS5VcGRhdGVUaW1lIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoIm1pbnV0ZXMiKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPlslIFRyYW5zbGF0ZSgiU29sdXRpb24gVGltZSIpIHwgaHRtbCAlXTo8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj5bJSBEYXRhLlNvbHV0aW9uVGltZSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKCJtaW51dGVzIikgfCBodG1sICVdPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij5bJSBUcmFuc2xhdGUoIk1pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyIpIHwgaHRtbCAlXTo8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj5bJSBEYXRhLk1pblRpbWVCZXR3ZWVuSW5jaWRlbnRzIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoIm1pbnV0ZXMiKSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICA8L3RkPgogICAgPC90cj4KPC90YWJsZT4K
IyAtLQojIEFnZW50SVRTTVNMQVpvb20udHQgLSBwcm92aWRlcyBIVE1MIGZvcm0gZm9yIEFnZW50SVRTTVNMQVpvb20KIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgoKPGRpdiBjbGFzcz0iTWFpbkJveCBBUklBUm9sZU1haW4iPgogICAgPGRpdiBjbGFzcz0iQ2xlYXJMZWZ0Ij48L2Rpdj4KICAgIDxkaXYgY2xhc3M9IkhlYWRsaW5lIj4KICAgICAgICA8aDE+WyUgVHJhbnNsYXRlKCJTTEEiKSB8IGh0bWwgJV06IFslIERhdGEuTmFtZSB8IGh0bWwgJV08L2gxPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iTGF5b3V0Rml4ZWRTaWRlYmFyIFNpZGViYXJMYXN0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJTaWRlYmFyQ29sdW1uIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iV2lkZ2V0U2ltcGxlIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiU0xBIEluZm9ybWF0aW9uIikgfCBodG1sICVdPC9oMj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ29udGVudCI+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbFNtYWxsIFRpZ2h0Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ3JlYXRlZCIpIHwgaHRtbCAlXTo8L2xhYmVsPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iVmFsdWUiPlslIERhdGEuQ3JlYXRlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJDcmVhdGVkIGJ5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNyZWF0ZUJ5TmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJMYXN0IGNoYW5nZWQiKSB8IGh0bWwgJV06PC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9IlZhbHVlIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ2hhbmdlVGltZSB8IExvY2FsaXplKCJUaW1lTG9uZyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiTGFzdCBjaGFuZ2VkIGJ5IikgfCBodG1sICVdOjwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJWYWx1ZSI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbJSBEYXRhLkNyZWF0ZUJ5TmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCgogICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnRDb2x1bW4iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJDb250cm9sUm93Ij4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9IkFjdGlvblJvdyI+CiAgICAgICAgICAgICAgICA8dWwgY2xhc3M9IkFjdGlvbnMiPgpbJSBSZW5kZXJCbG9ja1N0YXJ0KCJNZW51SXRlbSIpICVdCiAgICAgICAgICAgICAgICAgICAgPGxpPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1bJSBEYXRhLkxpbmsgfCBJbnRlcnBvbGF0ZSAlXSIgY2xhc3M9IlslIERhdGEuTWVudUNsYXNzIHwgaHRtbCAlXSIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkRlc2NyaXB0aW9uKSB8IGh0bWwgJV0iPlslIFRyYW5zbGF0ZShEYXRhLk5hbWUpIHwgaHRtbCAlXTwvYT4KICAgICAgICAgICAgICAgICAgICA8L2xpPgpbJSBSZW5kZXJCbG9ja0VuZCgiTWVudUl0ZW0iKSAlXQogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRCb3ggU3BhY2luZ1RvcCBFeHBhbmRlZCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJMaWdodFJvdyBIZWFkZXIiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IldpZGdldEFjdGlvbiBUb2dnbGUiPjxhIGhyZWY9IiMiIHRpdGxlPSJbJSBUcmFuc2xhdGUoIlNob3cgb3IgaGlkZSB0aGUgY29udGVudC4iKSB8IGh0bWwgJV0iPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1yaWdodCI+PC9pPjxpIGNsYXNzPSJmYSBmYS1jYXJldC1kb3duIj48L2k+PC9hPjwvZGl2PgogICAgICAgICAgICAgICAgICAgIDxoMj5bJSBUcmFuc2xhdGUoIlNMQSIpIHwgaHRtbCAlXTogWyUgRGF0YS5OYW1lIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQgQXV0b0hlaWdodCI+CiAgICAgICAgICAgICAgICAgICAgPGZpZWxkc2V0IGNsYXNzPSJUYWJsZUxpa2UgRml4ZWRMYWJlbCI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIlR5cGUiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIFRyYW5zbGF0ZShEYXRhLlR5cGUpIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiQ2FsZW5kYXIiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuQ2FsZW5kYXJOYW1lIHwgaHRtbCAlXQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iQ2xlYXIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlslIFRyYW5zbGF0ZSgiRmlyc3QgUmVzcG9uc2UgVGltZSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5GaXJzdFJlc3BvbnNlVGltZSB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKCJtaW51dGVzIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWw+WyUgVHJhbnNsYXRlKCJVcGRhdGUgVGltZSIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5VcGRhdGVUaW1lIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoIm1pbnV0ZXMiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIlNvbHV0aW9uIFRpbWUiKSB8IGh0bWwgJV06IDwvbGFiZWw+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkZpZWxkIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuU29sdXRpb25UaW1lIHwgaHRtbCAlXSBbJSBUcmFuc2xhdGUoIm1pbnV0ZXMiKSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNsZWFyIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD5bJSBUcmFuc2xhdGUoIk1pbmltdW0gVGltZSBCZXR3ZWVuIEluY2lkZW50cyIpIHwgaHRtbCAlXTogPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmllbGQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgWyUgRGF0YS5NaW5UaW1lQmV0d2VlbkluY2lkZW50cyB8IGh0bWwgJV0gWyUgVHJhbnNsYXRlKCJtaW51dGVzIikgfCBodG1sICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJDbGVhciI+PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9maWVsZHNldD4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KClslIFJlbmRlckJsb2NrU3RhcnQoIlNlcnZpY2UiKSAlXQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJXaWRnZXRTaW1wbGUgU3BhY2luZ1RvcCBTcGFjaW5nQm90dG9tTWVkaXVtIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgPGgyPlslIFRyYW5zbGF0ZSgiQXNzb2NpYXRlZCBTZXJ2aWNlcyIpIHwgaHRtbCAlXTwvaDI+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9IkNvbnRlbnQiPgogICAgICAgICAgICAgICAgICAgIDx0YWJsZSBjbGFzcz0iRGF0YVRhYmxlIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5bJSBUcmFuc2xhdGUoIlN0YXRlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJTZXJ2aWNlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJUeXBlIikgfCBodG1sICVdPC90aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+WyUgVHJhbnNsYXRlKCJDcml0aWNhbGl0eSIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlslIFRyYW5zbGF0ZSgiQ2hhbmdlZCIpIHwgaHRtbCAlXTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+ClslIFJlbmRlckJsb2NrU3RhcnQoIlNlcnZpY2VSb3ciKSAlXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iRmxhZyBTbWFsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iWyUgRGF0YS5DdXJJbmNpU2lnbmFsIHwgaHRtbCAlXSIgdGl0bGU9IlslIFRyYW5zbGF0ZShEYXRhLkN1ckluY2lTdGF0ZSkgfCBodG1sICVdIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJbJSBFbnYoIkJhc2VsaW5rIikgJV1BY3Rpb249QWdlbnRJVFNNU2VydmljZVpvb207U2VydmljZUlEPVslIERhdGEuU2VydmljZUlEIHwgdXJpICVdIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFslIERhdGEuTmFtZSB8IGh0bWwgJV0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIFRyYW5zbGF0ZShEYXRhLlR5cGUpIHwgaHRtbCAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlslIFRyYW5zbGF0ZShEYXRhLkNyaXRpY2FsaXR5KSB8IGh0bWwgJV08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5bJSBEYXRhLkNoYW5nZVRpbWUgfCBMb2NhbGl6ZSgiVGltZUxvbmciKSAlXTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPgpbJSBSZW5kZXJCbG9ja0VuZCgiU2VydmljZVJvdyIpICVdCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+CiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KWyUgUmVuZGVyQmxvY2tFbmQoIlNlcnZpY2UiKSAlXQoKICAgICAgICA8L2Rpdj4KICAgIDwvZGl2Pgo8L2Rpdj4KClslIFdSQVBQRVIgSlNPbkRvY3VtZW50Q29tcGxldGUgJV0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPi8vPCFbQ0RBVEFbCgogICAgJCgndWwuQWN0aW9ucyBhLkFzUG9wdXAnKS5iaW5kKCdjbGljaycsIGZ1bmN0aW9uIChFdmVudCkgewogICAgICAgIENvcmUuVUkuUG9wdXAuT3BlblBvcHVwKCQodGhpcykuYXR0cignaHJlZicpLCAnQWN0aW9uJyk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSk7CgogICAgJCgndWwuQWN0aW9ucyBhLkhpc3RvcnlCYWNrJykuYmluZCgnY2xpY2snLCBmdW5jdGlvbiAoRXZlbnQpIHsKICAgICAgICBoaXN0b3J5LmJhY2soKTsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9KTsKLy9dXT48L3NjcmlwdD4KWyUgRU5EICVdCg==
IyAtLQojIEtlcm5lbC9TeXN0ZW0vTGlua09iamVjdC9TZXJ2aWNlLnBtIC0gdG8gbGluayBzZXJ2aWNlIG9iamVjdHMKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0OjpTZXJ2aWNlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcsCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnLAopOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0OjpTZXJ2aWNlCgo9aGVhZDEgU1lOT1BTSVMKClNlcnZpY2UgYmFja2VuZCBmb3IgdGhlIHNlcnZpY2UgbGluayBvYmplY3QuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRMaW5rT2JqZWN0U2VydmljZU9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0OjpTZXJ2aWNlJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gTGlua0xpc3RXaXRoRGF0YSgpCgpmaWxsIHVwIHRoZSBsaW5rIGxpc3Qgd2l0aCBkYXRhCgogICAgJFN1Y2Nlc3MgPSAkTGlua09iamVjdEJhY2tlbmQtPkxpbmtMaXN0V2l0aERhdGEoCiAgICAgICAgTGlua0xpc3QgPT4gJEhhc2hSZWYsCiAgICAgICAgVXNlcklEICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTGlua0xpc3RXaXRoRGF0YSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhMaW5rTGlzdCBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgbGluayBsaXN0CiAgICBpZiAoIHJlZiAkUGFyYW17TGlua0xpc3R9IG5lICdIQVNIJyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0xpbmtMaXN0IG11c3QgYmUgYSBoYXNoIHJlZmVyZW5jZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGZvciBteSAkTGlua1R5cGUgKCBzb3J0IGtleXMgJXsgJFBhcmFte0xpbmtMaXN0fSB9ICkgewoKICAgICAgICBmb3IgbXkgJERpcmVjdGlvbiAoIHNvcnQga2V5cyAleyAkUGFyYW17TGlua0xpc3R9LT57JExpbmtUeXBlfSB9ICkgewoKICAgICAgICAgICAgU0VSVklDRUlEOgogICAgICAgICAgICBmb3IgbXkgJFNlcnZpY2VJRCAoIHNvcnQga2V5cyAleyAkUGFyYW17TGlua0xpc3R9LT57JExpbmtUeXBlfS0+eyREaXJlY3Rpb259IH0gKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgc2VydmljZSBkYXRhCiAgICAgICAgICAgICAgICBteSAlU2VydmljZURhdGEgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpLT5TZXJ2aWNlR2V0KAogICAgICAgICAgICAgICAgICAgIFNlcnZpY2VJRCAgICAgPT4gJFNlcnZpY2VJRCwKICAgICAgICAgICAgICAgICAgICBJbmNpZGVudFN0YXRlID0+IDEsCiAgICAgICAgICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkUGFyYW17VXNlcklEfSwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyByZW1vdmUgaWQgZnJvbSBoYXNoIGlmIG5vIHNlcnZpY2UgZGF0YSB3YXMgZm91bmQKICAgICAgICAgICAgICAgIGlmICggISVTZXJ2aWNlRGF0YSApIHsKICAgICAgICAgICAgICAgICAgICBkZWxldGUgJFBhcmFte0xpbmtMaXN0fS0+eyRMaW5rVHlwZX0tPnskRGlyZWN0aW9ufS0+eyRTZXJ2aWNlSUR9OwogICAgICAgICAgICAgICAgICAgIG5leHQgU0VSVklDRUlEOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgYWRkIHNlcnZpY2UgZGF0YQogICAgICAgICAgICAgICAgJFBhcmFte0xpbmtMaXN0fS0+eyRMaW5rVHlwZX0tPnskRGlyZWN0aW9ufS0+eyRTZXJ2aWNlSUR9ID0gXCVTZXJ2aWNlRGF0YTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gT2JqZWN0UGVybWlzc2lvbigpCgpjaGVja3MgcmVhZCBwZXJtaXNzaW9uIGZvciBhIGdpdmVuIG9iamVjdCBhbmQgVXNlcklELgoKICAgICRQZXJtaXNzaW9uID0gJExpbmtPYmplY3QtPk9iamVjdFBlcm1pc3Npb24oCiAgICAgICAgT2JqZWN0ICA9PiAnU2VydmljZScsCiAgICAgICAgS2V5ICAgICA9PiAxMjMsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBPYmplY3RQZXJtaXNzaW9uIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE9iamVjdCBLZXkgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIG1vZHVsZSByZWdpc3RyeSBvZiBBZ2VudElUU01TZXJ2aWNlWm9vbQogICAgbXkgJE1vZHVsZVJlZwogICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdGcm9udGVuZDo6TW9kdWxlJyktPntBZ2VudElUU01TZXJ2aWNlWm9vbX07CgogICAgIyBkbyBub3QgZ3JhbnQgYWNjZXNzIGlmIGZyb250ZW5kIG1vZHVsZSBpcyBub3QgcmVnaXN0ZXJlZAogICAgcmV0dXJuIGlmICEkTW9kdWxlUmVnOwoKICAgICMgZ3JhbnQgYWNjZXNzIGlmIG1vZHVsZSBwZXJtaXNzb24gaGFzIG5vIEdyb3VwIG9yIEdyb3VwUm8gZGVmaW5lZAogICAgaWYgKCAhJE1vZHVsZVJlZy0+e0dyb3VwUm99ICYmICEkTW9kdWxlUmVnLT57R3JvdXB9ICkgewogICAgICAgIHJldHVybiAxOwogICAgfQoKICAgIFBFUk1JU1NJT046CiAgICBmb3IgbXkgJFBlcm1pc3Npb24gKHF3KEdyb3VwUm8gR3JvdXApKSB7CgogICAgICAgIG5leHQgUEVSTUlTU0lPTiBpZiAhJE1vZHVsZVJlZy0+eyRQZXJtaXNzaW9ufTsKICAgICAgICBuZXh0IFBFUk1JU1NJT04gaWYgcmVmICRNb2R1bGVSZWctPnskUGVybWlzc2lvbn0gbmUgJ0FSUkFZJzsKCiAgICAgICAgZm9yIG15ICRHcm91cCAoIEB7ICRNb2R1bGVSZWctPnskUGVybWlzc2lvbn0gfSApIHsKCiAgICAgICAgICAgICMgZ2V0IHRoZSBncm91cCBpZAogICAgICAgICAgICBteSAkR3JvdXBJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cExvb2t1cCggR3JvdXAgPT4gJEdyb3VwICk7CgogICAgICAgICAgICBteSAkVHlwZTsKICAgICAgICAgICAgaWYgKCAkUGVybWlzc2lvbiBlcSAnR3JvdXBSbycgKSB7CiAgICAgICAgICAgICAgICAkVHlwZSA9ICdybyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkUGVybWlzc2lvbiBlcSAnR3JvdXAnICkgewogICAgICAgICAgICAgICAgJFR5cGUgPSAncncnOwogICAgICAgICAgICB9CgogICAgICAgICAgICAjIGdldCB1c2VyIGdyb3Vwcywgd2hlcmUgdGhlIHVzZXIgaGFzIHRoZSBhcHByb3ByaWF0ZSBwcml2aWxlZ2UKICAgICAgICAgICAgbXkgJUdyb3VwcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cE1lbWJlckxpc3QoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICAgICBUeXBlICAgPT4gJFR5cGUsCiAgICAgICAgICAgICAgICBSZXN1bHQgPT4gJ0hBU0gnLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgIyBncmFudCBhY2Nlc3MgaWYgYWdlbnQgaXMgYSBtZW1iZXIgaW4gdGhlIGdyb3VwCiAgICAgICAgICAgIHJldHVybiAxIGlmICRHcm91cHN7JEdyb3VwSUR9OwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm47Cn0KCj1pdGVtIE9iamVjdERlc2NyaXB0aW9uR2V0KCkKCnJldHVybiBhIGhhc2ggb2Ygb2JqZWN0IGRlc2NyaXB0aW9ucwoKUmV0dXJuCiAgICAlRGVzY3JpcHRpb24gPSAoCiAgICAgICAgTm9ybWFsID0+ICJTZXJ2aWNlIFNlcnZpY2VOYW1lIiwKICAgICAgICBMb25nICAgPT4gIlNlcnZpY2UgUGFyZW50U2VydmljZTo6U2VydmljZU5hbWUiLAogICAgKTsKCiAgICAlRGVzY3JpcHRpb24gPSAkTGlua09iamVjdC0+T2JqZWN0RGVzY3JpcHRpb25HZXQoCiAgICAgICAgS2V5ICAgICA9PiAxMjMsCiAgICAgICAgVXNlcklEICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBPYmplY3REZXNjcmlwdGlvbkdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhPYmplY3QgS2V5IFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjcmVhdGUgZGVzY3JpcHRpb24KICAgIG15ICVEZXNjcmlwdGlvbiA9ICgKICAgICAgICBOb3JtYWwgPT4gJ1NlcnZpY2UnLAogICAgICAgIExvbmcgICA9PiAnU2VydmljZScsCiAgICApOwoKICAgIHJldHVybiAlRGVzY3JpcHRpb24gaWYgJFBhcmFte01vZGV9ICYmICRQYXJhbXtNb2RlfSBlcSAnVGVtcG9yYXJ5JzsKCiAgICAjIGdldCBzZXJ2aWNlCiAgICBteSAlU2VydmljZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VHZXQoCiAgICAgICAgU2VydmljZUlEICAgICA9PiAkUGFyYW17S2V5fSwKICAgICAgICBJbmNpZGVudFN0YXRlID0+IDAsCiAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gaWYgISVTZXJ2aWNlOwoKICAgICMgY3JlYXRlIGRlc2NyaXB0aW9uCiAgICAlRGVzY3JpcHRpb24gPSAoCiAgICAgICAgTm9ybWFsID0+ICJTZXJ2aWNlICckU2VydmljZXtOYW1lU2hvcnR9JyIsCiAgICAgICAgTG9uZyAgID0+ICJTZXJ2aWNlICckU2VydmljZXtOYW1lfSciLAogICAgKTsKCiAgICByZXR1cm4gJURlc2NyaXB0aW9uOwp9Cgo9aXRlbSBPYmplY3RTZWFyY2goKQoKcmV0dXJuIGEgaGFzaCBsaXN0IG9mIHRoZSBzZWFyY2ggcmVzdWx0cwoKUmV0dXJuCiAgICAkU2VhcmNoTGlzdCA9IHsKICAgICAgICBOT1RMSU5LRUQgPT4gewogICAgICAgICAgICBTb3VyY2UgPT4gewogICAgICAgICAgICAgICAgMTIgID0+ICREYXRhT2ZJdGVtMTIsCiAgICAgICAgICAgICAgICAyMTIgPT4gJERhdGFPZkl0ZW0yMTIsCiAgICAgICAgICAgICAgICAzMzIgPT4gJERhdGFPZkl0ZW0zMzIsCiAgICAgICAgICAgIH0sCiAgICAgICAgfSwKICAgIH07CgogICAgJFNlYXJjaExpc3QgPSAkTGlua09iamVjdEJhY2tlbmQtPk9iamVjdFNlYXJjaCgKICAgICAgICBTZWFyY2hQYXJhbXMgPT4gJEhhc2hSZWYsICAjIChvcHRpb25hbCkKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgT2JqZWN0U2VhcmNoIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBVc2VySUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IHBhcmFtcwogICAgJFBhcmFte1NlYXJjaFBhcmFtc30gfHw9IHt9OwoKICAgICMgYWRkIHdpbGRjYXJkcwogICAgbXkgJVNlYXJjaDsKICAgIGlmICggJFBhcmFte1NlYXJjaFBhcmFtc30tPntOYW1lfSApIHsKICAgICAgICAkU2VhcmNoe05hbWV9ID0gJyonIC4gJFBhcmFte1NlYXJjaFBhcmFtc30tPntOYW1lfSAuICcqJzsKICAgIH0KCiAgICAjIHNlYXJjaCB0aGUgc2VydmljZXMKICAgIG15IEBTZXJ2aWNlSURzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZVNlYXJjaCgKICAgICAgICAleyAkUGFyYW17U2VhcmNoUGFyYW1zfSB9LAogICAgICAgICVTZWFyY2gsCiAgICAgICAgTGltaXQgID0+IDUwLAogICAgICAgIFVzZXJJRCA9PiAkUGFyYW17VXNlcklEfSwKICAgICk7CgogICAgbXkgJVNlYXJjaExpc3Q7CiAgICBTRVJWSUNFSUQ6CiAgICBmb3IgbXkgJFNlcnZpY2VJRCAoQFNlcnZpY2VJRHMpIHsKCiAgICAgICAgIyBnZXQgc2VydmljZSBkYXRhCiAgICAgICAgbXkgJVNlcnZpY2VEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKS0+U2VydmljZUdldCgKICAgICAgICAgICAgU2VydmljZUlEICAgICA9PiAkU2VydmljZUlELAogICAgICAgICAgICBJbmNpZGVudFN0YXRlID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFBhcmFte1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgbmV4dCBTRVJWSUNFSUQgaWYgISVTZXJ2aWNlRGF0YTsKCiAgICAgICAgIyBhZGQgc2VydmljZSBkYXRhCiAgICAgICAgJFNlYXJjaExpc3R7Tk9UTElOS0VEfS0+e1NvdXJjZX0tPnskU2VydmljZUlEfSA9IFwlU2VydmljZURhdGE7CiAgICB9CgogICAgcmV0dXJuIFwlU2VhcmNoTGlzdDsKfQoKPWl0ZW0gTGlua0FkZFByZSgpCgpsaW5rIGFkZCBwcmUgZXZlbnQgbW9kdWxlCgogICAgJFRydWUgPSAkTGlua09iamVjdC0+TGlua0FkZFByZSgKICAgICAgICBLZXkgICAgICAgICAgPT4gMTIzLAogICAgICAgIFNvdXJjZU9iamVjdCA9PiAnU2VydmljZScsCiAgICAgICAgU291cmNlS2V5ICAgID0+IDMyMSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ05vcm1hbCcsCiAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKICAgIG9yCgogICAgJFRydWUgPSAkTGlua09iamVjdC0+TGlua0FkZFByZSgKICAgICAgICBLZXkgICAgICAgICAgPT4gMTIzLAogICAgICAgIFRhcmdldE9iamVjdCA9PiAnU2VydmljZScsCiAgICAgICAgVGFyZ2V0S2V5ICAgID0+IDMyMSwKICAgICAgICBUeXBlICAgICAgICAgPT4gJ05vcm1hbCcsCiAgICAgICAgU3RhdGUgICAgICAgID0+ICdWYWxpZCcsCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIExpbmtBZGRQcmUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IFR5cGUgU3RhdGUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMSBpZiAkUGFyYW17U3RhdGV9IGVxICdUZW1wb3JhcnknOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBMaW5rQWRkUG9zdCgpCgpsaW5rIGFkZCBwcmUgZXZlbnQgbW9kdWxlCgogICAgJFRydWUgPSAkTGlua09iamVjdC0+TGlua0FkZFBvc3QoCiAgICAgICAgS2V5ICAgICAgICAgID0+IDEyMywKICAgICAgICBTb3VyY2VPYmplY3QgPT4gJ1NlcnZpY2UnLAogICAgICAgIFNvdXJjZUtleSAgICA9PiAzMjEsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdOb3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCiAgICBvcgoKICAgICRUcnVlID0gJExpbmtPYmplY3QtPkxpbmtBZGRQb3N0KAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgVGFyZ2V0T2JqZWN0ID0+ICdTZXJ2aWNlJywKICAgICAgICBUYXJnZXRLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTGlua0FkZFBvc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IFR5cGUgU3RhdGUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMSBpZiAkUGFyYW17U3RhdGV9IGVxICdUZW1wb3JhcnknOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBMaW5rRGVsZXRlUHJlKCkKCmxpbmsgZGVsZXRlIHByZSBldmVudCBtb2R1bGUKCiAgICAkVHJ1ZSA9ICRMaW5rT2JqZWN0LT5MaW5rRGVsZXRlUHJlKAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgU291cmNlT2JqZWN0ID0+ICdTZXJ2aWNlJywKICAgICAgICBTb3VyY2VLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7CgogICAgb3IKCiAgICAkVHJ1ZSA9ICRMaW5rT2JqZWN0LT5MaW5rRGVsZXRlUHJlKAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgVGFyZ2V0T2JqZWN0ID0+ICdTZXJ2aWNlJywKICAgICAgICBUYXJnZXRLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTGlua0RlbGV0ZVByZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhLZXkgVHlwZSBTdGF0ZSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAxIGlmICRQYXJhbXtTdGF0ZX0gZXEgJ1RlbXBvcmFyeSc7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIExpbmtEZWxldGVQb3N0KCkKCmxpbmsgZGVsZXRlIHBvc3QgZXZlbnQgbW9kdWxlCgogICAgJFRydWUgPSAkTGlua09iamVjdC0+TGlua0RlbGV0ZVBvc3QoCiAgICAgICAgS2V5ICAgICAgICAgID0+IDEyMywKICAgICAgICBTb3VyY2VPYmplY3QgPT4gJ1NlcnZpY2UnLAogICAgICAgIFNvdXJjZUtleSAgICA9PiAzMjEsCiAgICAgICAgVHlwZSAgICAgICAgID0+ICdOb3JtYWwnLAogICAgICAgIFN0YXRlICAgICAgICA9PiAnVmFsaWQnLAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCiAgICBvcgoKICAgICRUcnVlID0gJExpbmtPYmplY3QtPkxpbmtEZWxldGVQb3N0KAogICAgICAgIEtleSAgICAgICAgICA9PiAxMjMsCiAgICAgICAgVGFyZ2V0T2JqZWN0ID0+ICdTZXJ2aWNlJywKICAgICAgICBUYXJnZXRLZXkgICAgPT4gMzIxLAogICAgICAgIFR5cGUgICAgICAgICA9PiAnTm9ybWFsJywKICAgICAgICBTdGF0ZSAgICAgICAgPT4gJ1ZhbGlkJywKICAgICAgICBVc2VySUQgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgTGlua0RlbGV0ZVBvc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoS2V5IFR5cGUgU3RhdGUgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMSBpZiAkUGFyYW17U3RhdGV9IGVxICdUZW1wb3JhcnknOwoKICAgICMgdXBkYXRlIHRoZSBjdXJyZW50IGluY2lkZW50IHN0YXRlIHR5cGUgZnJvbSBDSXMgb2YgdGhlIHNlcnZpY2UKICAgICMgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgdGhlIGR5bmFtaWMgaW5jaWRlbnQgY2FsY3VsYXRpb24gaXMgcmVzZXQgYWZ0ZXIKICAgICMgdW5saW5raW5nIGEgQ0kgd2hpY2ggaGFzIGJlZW4gaW4gYW4gaW5jaWRlbnQgc3RhdGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlJyktPlNlcnZpY2VQcmVmZXJlbmNlc1NldCgKICAgICAgICBTZXJ2aWNlSUQgPT4gJFBhcmFte0tleX0sCiAgICAgICAgS2V5ICAgICAgID0+ICdDdXJJbmNpU3RhdGVUeXBlRnJvbUNJcycsCiAgICAgICAgVmFsdWUgICAgID0+ICcnLAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAoKMTsK
IyAtLQojIEtlcm5lbC9TeXN0ZW0vSVRTTUNJUEFsbG9jYXRlLnBtIC0gYWxsIGNyaXRpY2FsaXR5LCBpbXBhY3QgYW5kIHByaW9yaXR5IGFsbG9jYXRpb24gZnVuY3Rpb25zCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTQgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNJUEFsbG9jYXRlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpTeXN0ZW06OkRCJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6SVRTTUNJUEFsbG9jYXRlIC0gY3JpdGljYWxpdHksIGltcGFjdCBhbmQgcHJpb3JpdHkgYWxsb2NhdGlvbiBsaWIKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGNyaXRpY2FsaXR5LCBpbXBhY3QgYW5kIHByaW9yaXR5IGFsbG9jYXRpb24gZnVuY3Rpb25zLgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYW4gb2JqZWN0CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwogICAgbG9jYWwgJEtlcm5lbDo6T00gPSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlci0+bmV3KCk7CiAgICBteSAkSVRTTUNJUEFsbG9jYXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DSVBBbGxvY2F0ZScpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIEFsbG9jYXRlTGlzdCgpCgpyZXR1cm4gYSAyZCBoYXNoIHJlZmVyZW5jZSBvZiBhbGxvY2F0aW9ucwoKICAgIG15ICRMaXN0UmVmID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZUxpc3QoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKQzwkTGlzdFJlZj4gaXMgc29tZXRoaW5nIGxpa2UKCiAgICAkTGlzdFJldCA9IHsKICAgICAgICAnMyBub3JtYWwnID0+IHsKICAgICAgICAgICAgJzEgdmVyeSBsb3cnID0+IDEsCiAgICAgICAgICAgICczIG5vcm1hbCcgICA9PiAyLAogICAgICAgICAgICAnNCBoaWdoJyAgICAgPT4gMywKICAgICAgICB9LAogICAgICAgICc1IHZlcnkgaGlnaCcgPT4gewogICAgICAgICAgICAnMiBsb3cnICAgID0+IDMsCiAgICAgICAgICAgICczIG5vcm1hbCcgPT4gNCwKICAgICAgICAgICAgJzQgaGlnaCcgICA9PiA1LAogICAgICAgIH0sCiAgICB9OwoKbWVhbmluZyB0aGF0IHRoZSBDcml0aWNhbGl0eSAnMyBub3JtYWwnIGFuZCB0aGUgSW1wYWN0ICcxIHZlcnkgbG93JyBzdWdnZXN0IHRoZSBQcmlvcml0eUlEICcxJy4KCj1jdXQKCnN1YiBBbGxvY2F0ZUxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFVzZXJJRCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgYXNrIGRhdGFiYXNlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBjcml0aWNhbGl0eSwgaW1wYWN0LCBwcmlvcml0eV9pZCBGUk9NIGNpcF9hbGxvY2F0ZScsCiAgICApOwoKICAgICMgcmVzdWx0IGxpc3QKICAgIG15ICVBbGxvY2F0ZURhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRBbGxvY2F0ZURhdGF7ICRSb3dbMV0gfXsgJFJvd1swXSB9ID0gJFJvd1syXTsKICAgIH0KCiAgICByZXR1cm4gXCVBbGxvY2F0ZURhdGE7Cn0KCj1pdGVtIEFsbG9jYXRlVXBkYXRlKCkKCnVwZGF0ZSB0aGUgYWxsb2NhdGlvbiBvZiBjcml0aWNhbGl0eSwgaW1wYWN0IGFuZCBwcmlvcml0eQoKICAgIG15ICRUcnVlID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZVVwZGF0ZSgKICAgICAgICBBbGxvY2F0ZURhdGEgPT4gJERhdGFSZWYsICAjIDJEIGhhc2ggcmVmZXJlbmNlCiAgICAgICAgVXNlcklEICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIEFsbG9jYXRlVXBkYXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEFsbG9jYXRlRGF0YSBVc2VySUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2hlY2sgaWYgYWxsb2NhdGUgZGF0YSBpcyBhIGhhc2ggcmVmZXJlbmNlCiAgICBpZiAoIHJlZiAkUGFyYW17QWxsb2NhdGVEYXRhfSBuZSAnSEFTSCcgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdBbGxvY2F0ZURhdGEgbXVzdCBiZSBhIDJEIGhhc2ggcmVmZXJlbmNlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayBpZiBhbGxvY2F0ZSBkYXRhIGlzIGEgMkQgaGFzaCByZWZlcmVuY2UKICAgIElNUEFDVDoKICAgIGZvciBteSAkSW1wYWN0ICggc29ydCBrZXlzICV7ICRQYXJhbXtBbGxvY2F0ZURhdGF9IH0gKSB7CgogICAgICAgIG5leHQgSU1QQUNUIGlmIHJlZiAkUGFyYW17QWxsb2NhdGVEYXRhfS0+eyRJbXBhY3R9IGVxICdIQVNIJzsKCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdBbGxvY2F0ZURhdGEgbXVzdCBiZSBhIDJEIGhhc2ggcmVmZXJlbmNlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBkZWxldGUgb2xkIGFsbG9jYXRpb25zCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oIFNRTCA9PiAnREVMRVRFIEZST00gY2lwX2FsbG9jYXRlJyApOwoKICAgICMgaW5zZXJ0IG5ldyBhbGxvY2F0aW9ucwogICAgZm9yIG15ICRJbXBhY3QgKCBzb3J0IGtleXMgJXsgJFBhcmFte0FsbG9jYXRlRGF0YX0gfSApIHsKCiAgICAgICAgZm9yIG15ICRDcml0aWNhbGl0eSAoIHNvcnQga2V5cyAleyAkUGFyYW17QWxsb2NhdGVEYXRhfS0+eyRJbXBhY3R9IH0gKSB7CgogICAgICAgICAgICAjIGV4dHJhY3QgcHJpb3JpdHkKICAgICAgICAgICAgbXkgJFByaW9yaXR5SUQgPSAkUGFyYW17QWxsb2NhdGVEYXRhfS0+eyRJbXBhY3R9LT57JENyaXRpY2FsaXR5fTsKCiAgICAgICAgICAgICMgaW5zZXJ0IG5ldyBhbGxvY2F0aW9uCiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gY2lwX2FsbG9jYXRlICcKICAgICAgICAgICAgICAgICAgICAuICcoY3JpdGljYWxpdHksIGltcGFjdCwgcHJpb3JpdHlfaWQsICcKICAgICAgICAgICAgICAgICAgICAuICdjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5KSBWQUxVRVMgJwogICAgICAgICAgICAgICAgICAgIC4gJyg/LCA/LCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPywgY3VycmVudF90aW1lc3RhbXAsID8pJywKICAgICAgICAgICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICAgICAgICAgIFwkQ3JpdGljYWxpdHksIFwkSW1wYWN0LCBcJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gUHJpb3JpdHlBbGxvY2F0aW9uR2V0KCkKCnJldHVybiB0aGUgcHJpb3JpdHkgaWQgb2YgYSBjcml0aWNhbGl0eSBhbmQgYW4gaW1wYWN0CgogICAgbXkgJFByaW9yaXR5SUQgPSAkQ0lQQWxsb2NhdGVPYmplY3QtPlByaW9yaXR5QWxsb2NhdGlvbkdldCgKICAgICAgICBDcml0aWNhbGl0eSA9PiAnMSB2ZXJ5IGxvdycsCiAgICAgICAgSW1wYWN0ICAgICAgPT4gJzMgbm9ybWFsJywKICAgICk7Cgo9Y3V0CgpzdWIgUHJpb3JpdHlBbGxvY2F0aW9uR2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENyaXRpY2FsaXR5IEltcGFjdCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBnZXQgcHJpb3JpdHkgaWQgZnJvbSBkYgogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgcHJpb3JpdHlfaWQgRlJPTSBjaXBfYWxsb2NhdGUgJwogICAgICAgICAgICAuICdXSEVSRSBjcml0aWNhbGl0eSA9ID8gQU5EIGltcGFjdCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0NyaXRpY2FsaXR5fSwgXCRQYXJhbXtJbXBhY3R9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCByZXN1bHQKICAgIG15ICRQcmlvcml0eUlEOwogICAgd2hpbGUgKCBteSBAUm93ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkUHJpb3JpdHlJRCA9ICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuICRQcmlvcml0eUlEOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBTb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKGh0dHA6Ly9vdHJzLm9yZy8pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
IyAtLQojIEtlcm5lbC9TeXN0ZW0vU2VydmljZS5wbSAtIGFsbCBzZXJ2aWNlIGZ1bmN0aW9uCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTQgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgJG9yaWdpbjogaHR0cHM6Ly9naXRodWIuY29tL09UUlMvb3Rycy9ibG9iLzBjZDIyZGQzM2NkZDUxZDZmYWM0Yzk5N2MyYWViNjhhOGU4OTkxMzQvS2VybmVsL1N5c3RlbS9TZXJ2aWNlLnBtCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIEtlcm5lbDo6U3lzdGVtOjpWYXJpYWJsZUNoZWNrIChxdyg6YWxsKSk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OkNvbmZpZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OkNhY2hlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6Q2hlY2tJdGVtJywKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAojIC0tLQojIElUU00KIyAtLS0KICAgICdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJywKICAgICdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpMaW5rT2JqZWN0JywKIyAtLS0KICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TWFpbicsCiAgICAnS2VybmVsOjpTeXN0ZW06OlZhbGlkJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6U2VydmljZSAtIHNlcnZpY2UgbGliCgo9aGVhZDEgU1lOT1BTSVMKCkFsbCBzZXJ2aWNlIGZ1bmN0aW9ucy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdAoKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlcjsKICAgIGxvY2FsICRLZXJuZWw6Ok9NID0gS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXItPm5ldygpOwogICAgbXkgJFNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAkU2VsZi0+e0RCT2JqZWN0fSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICRTZWxmLT57Q2FjaGVUeXBlfSA9ICdTZXJ2aWNlJzsKICAgICRTZWxmLT57Q2FjaGVUVEx9ICA9IDYwICogNjAgKiAyNCAqIDIwOwojIC0tLQojIElUU00KIyAtLS0KCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZCBmb3IgSVRTTUNyaXRpY2FsaXR5CiAgICBteSAkRHluYW1pY0ZpZWxkQ29uZmlnQXJyYXlSZWYgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgVmFsaWQgICAgICAgPT4gMSwKICAgICAgICBPYmplY3RUeXBlICA9PiBbICdUaWNrZXQnIF0sCiAgICAgICAgRmllbGRGaWx0ZXIgPT4gewogICAgICAgICAgICBJVFNNQ3JpdGljYWxpdHkgPT4gMSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZCB2YWx1ZSBmb3IgSVRTTUNyaXRpY2FsaXR5CiAgICBteSAlUG9zc2libGVWYWx1ZXM7CiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7ICREeW5hbWljRmllbGRDb25maWdBcnJheVJlZiB9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgIyBnZXQgUG9zc2libGVWYWx1ZXMKICAgICAgICAkUG9zc2libGVWYWx1ZXN7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9ID0gJER5bmFtaWNGaWVsZENvbmZpZy0+e0NvbmZpZ30tPntQb3NzaWJsZVZhbHVlc30gfHwge307CiAgICB9CgogICAgIyBzZXQgdGhlIGNyaXRpY2FsaXR5IGxpc3QKICAgICRTZWxmLT57Q3JpdGljYWxpdHlMaXN0fSA9ICRQb3NzaWJsZVZhbHVlc3tJVFNNQ3JpdGljYWxpdHl9OwojIC0tLQoKICAgICMgbG9hZCBnZW5lcmF0b3IgcHJlZmVyZW5jZXMgbW9kdWxlCiAgICBteSAkR2VuZXJhdG9yTW9kdWxlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdTZXJ2aWNlOjpQcmVmZXJlbmNlc01vZHVsZScpCiAgICAgICAgfHwgJ0tlcm5lbDo6U3lzdGVtOjpTZXJ2aWNlOjpQcmVmZXJlbmNlc0RCJzsKICAgIGlmICggJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Ok1haW4nKS0+UmVxdWlyZSgkR2VuZXJhdG9yTW9kdWxlKSApIHsKICAgICAgICAkU2VsZi0+e1ByZWZlcmVuY2VzT2JqZWN0fSA9ICRHZW5lcmF0b3JNb2R1bGUtPm5ldyggJXskU2VsZn0gKTsKICAgIH0KCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIFNlcnZpY2VMaXN0KCkKCnJldHVybiBhIGhhc2ggbGlzdCBvZiBzZXJ2aWNlcwoKICAgIG15ICVTZXJ2aWNlTGlzdCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTGlzdCgKICAgICAgICBWYWxpZCAgPT4gMCwgICAjIChvcHRpb25hbCkgZGVmYXVsdCAxICgwfDEpCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIFNlcnZpY2VMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBVc2VySUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIHZhbGlkIHBhcmFtCiAgICBpZiAoICFkZWZpbmVkICRQYXJhbXtWYWxpZH0gKSB7CiAgICAgICAgJFBhcmFte1ZhbGlkfSA9IDE7CiAgICB9CgogICAgIyByZWFkIGNhY2hlCiAgICBteSAkQ2FjaGVLZXkgPSAnU2VydmljZUxpc3Q6OlZhbGlkOjonIC4gJFBhcmFte1ZhbGlkfTsKCiAgICBpZiAoIGRlZmluZWQgJFBhcmFte0tlZXBDaGlsZHJlbn0gJiYgJFBhcmFte0tlZXBDaGlsZHJlbn0gZXEgJzEnICkgewogICAgICAgICRDYWNoZUtleSAuPSAnOjpLZWVwQ2hpbGRyZW46OicgLiAkUGFyYW17S2VlcENoaWxkcmVufTsKICAgIH0KCiAgICBteSAkQ2FjaGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKICAgIHJldHVybiAleyRDYWNoZX0gaWYgcmVmICRDYWNoZSBlcSAnSEFTSCc7CgogICAgIyBhc2sgZGF0YWJhc2UKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkLCBuYW1lLCB2YWxpZF9pZCBGUk9NIHNlcnZpY2UnLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICVTZXJ2aWNlTGlzdDsKICAgIG15ICVTZXJ2aWNlVmFsaWRMaXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkU2VydmljZUxpc3R7ICRSb3dbMF0gfSAgICAgID0gJFJvd1sxXTsKICAgICAgICAkU2VydmljZVZhbGlkTGlzdHsgJFJvd1swXSB9ID0gJFJvd1syXTsKICAgIH0KCiAgICBpZiAoICEkUGFyYW17VmFsaWR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICAgICAgVmFsdWUgPT4gXCVTZXJ2aWNlTGlzdCwKICAgICAgICApOwogICAgICAgIHJldHVybiAlU2VydmljZUxpc3QgaWYgISRQYXJhbXtWYWxpZH07CiAgICB9CgogICAgIyBnZXQgdmFsaWQgaWRzCiAgICBteSBAVmFsaWRJRHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRJRHNHZXQoKTsKCiAgICAjIGR1cGxpY2F0ZSBzZXJ2aWNlIGxpc3QKICAgIG15ICVTZXJ2aWNlTGlzdFRtcCA9ICVTZXJ2aWNlTGlzdDsKCiAgICAjIGFkZCBzdWZmaXggZm9yIGNvcnJlY3Qgc29ydGluZwogICAgZm9yIG15ICRTZXJ2aWNlSUQgKCBzb3J0IGtleXMgJVNlcnZpY2VMaXN0VG1wICkgewogICAgICAgICRTZXJ2aWNlTGlzdFRtcHskU2VydmljZUlEfSAuPSAnOjonOwogICAgfQoKICAgIG15ICVTZXJ2aWNlSW52YWxpZExpc3Q7CiAgICBTRVJWSUNFSUQ6CiAgICBmb3IgbXkgJFNlcnZpY2VJRCAoIHNvcnQgeyAkU2VydmljZUxpc3RUbXB7JGF9IGNtcCAkU2VydmljZUxpc3RUbXB7JGJ9IH0ga2V5cyAlU2VydmljZUxpc3RUbXAgKQogICAgewoKICAgICAgICBteSAkVmFsaWQgPSBzY2FsYXIgZ3JlcCB7ICRfIGVxICRTZXJ2aWNlVmFsaWRMaXN0eyRTZXJ2aWNlSUR9IH0gQFZhbGlkSURzOwoKICAgICAgICBuZXh0IFNFUlZJQ0VJRCBpZiAkVmFsaWQ7CgogICAgICAgICRTZXJ2aWNlSW52YWxpZExpc3R7ICRTZXJ2aWNlTGlzdHskU2VydmljZUlEfSB9ID0gMTsKICAgICAgICBkZWxldGUgJFNlcnZpY2VMaXN0eyRTZXJ2aWNlSUR9OwogICAgfQoKICAgICMgZGVsZXRlIGludmFsaWQgc2VydmljZXMgYW5kIGNoaWxkcwogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17S2VlcENoaWxkcmVufSB8fCAhJFBhcmFte0tlZXBDaGlsZHJlbn0gKSB7CiAgICAgICAgZm9yIG15ICRTZXJ2aWNlSUQgKCBzb3J0IGtleXMgJVNlcnZpY2VMaXN0ICkgewoKICAgICAgICAgICAgSU5WQUxJRE5BTUU6CiAgICAgICAgICAgIGZvciBteSAkSW52YWxpZE5hbWUgKCBzb3J0IGtleXMgJVNlcnZpY2VJbnZhbGlkTGlzdCApIHsKCiAgICAgICAgICAgICAgICBpZiAoICRTZXJ2aWNlTGlzdHskU2VydmljZUlEfSA9fiBteyBcQSBcUSRJbnZhbGlkTmFtZVxFIDo6IH14bXMgKSB7CiAgICAgICAgICAgICAgICAgICAgZGVsZXRlICRTZXJ2aWNlTGlzdHskU2VydmljZUlEfTsKICAgICAgICAgICAgICAgICAgICBsYXN0IElOVkFMSUROQU1FOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXCVTZXJ2aWNlTGlzdCwKICAgICk7CgogICAgcmV0dXJuICVTZXJ2aWNlTGlzdDsKfQoKPWl0ZW0gU2VydmljZUxpc3RHZXQoKQoKcmV0dXJuIGEgbGlzdCBvZiBzZXJ2aWNlcyB3aXRoIHRoZSBjb21wbGV0ZSBsaXN0IG9mIGF0dHJpYnV0ZXMgZm9yIGVhY2ggc2VydmljZQoKICAgIG15ICRTZXJ2aWNlTGlzdCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTGlzdEdldCgKICAgICAgICBWYWxpZCAgPT4gMCwgICAjIChvcHRpb25hbCkgZGVmYXVsdCAxICgwfDEpCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgIHJldHVybnMKCiAgICAkU2VydmljZUxpc3QgPSBbCiAgICAgICAgewogICAgICAgICAgICBTZXJ2aWNlSUQgID0+IDEsCiAgICAgICAgICAgIFBhcmVudElEICAgPT4gMCwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnTXlTZXJ2aWNlJywKICAgICAgICAgICAgTmFtZVNob3J0ICA9PiAnTXlTZXJ2aWNlJywKICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgID0+ICdTb21lIENvbW1lbnQnCiAgICAgICAgICAgIENyZWF0ZVRpbWUgPT4gJzIwMTEtMDItMDggMTU6MDg6MDAnLAogICAgICAgICAgICBDaGFuZ2VUaW1lID0+ICcyMDExLTA2LTExIDE3OjIyOjAwJywKICAgICAgICAgICAgQ3JlYXRlQnkgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICAgICAgID0+IDE2LAogICAgICAgICAgICBUeXBlICAgICAgICAgICAgID0+ICdCYWNrZW5kJywKICAgICAgICAgICAgQ3JpdGljYWxpdHkgICAgICA9PiAnMyBub3JtYWwnLAogICAgICAgICAgICBDdXJJbmNpU3RhdGVJRCAgID0+IDEsCiAgICAgICAgICAgIEN1ckluY2lTdGF0ZSAgICAgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICAgICAgQ3VySW5jaVN0YXRlVHlwZSA9PiAnb3BlcmF0aW9uYWwnLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICBTZXJ2aWNlSUQgID0+IDIsCiAgICAgICAgICAgIFBhcmVudElEICAgPT4gMSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnTXlTZXJ2aWNlOjpNeVN1YlNlcnZpY2UnLAogICAgICAgICAgICBOYW1lU2hvcnQgID0+ICdNeVN1YlNlcnZpY2UnLAogICAgICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgPT4gJ1NvbWUgQ29tbWVudCcKICAgICAgICAgICAgQ3JlYXRlVGltZSA9PiAnMjAxMS0wMi0wOCAxNTowODowMCcsCiAgICAgICAgICAgIENoYW5nZVRpbWUgPT4gJzIwMTEtMDYtMTEgMTc6MjI6MDAnLAogICAgICAgICAgICBDcmVhdGVCeSAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgICAgICAgPT4gMTYsCiAgICAgICAgICAgIFR5cGUgICAgICAgICAgICAgPT4gJ0JhY2tlbmQnLAogICAgICAgICAgICBDcml0aWNhbGl0eSAgICAgID0+ICczIG5vcm1hbCcsCiAgICAgICAgICAgIEN1ckluY2lTdGF0ZUlEICAgPT4gMSwKICAgICAgICAgICAgQ3VySW5jaVN0YXRlICAgICA9PiAnT3BlcmF0aW9uYWwnLAogICAgICAgICAgICBDdXJJbmNpU3RhdGVUeXBlID0+ICdvcGVyYXRpb25hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICAjIC4uLgogICAgXTsKCj1jdXQKCnN1YiBTZXJ2aWNlTGlzdEdldCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17VXNlcklEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgVXNlcklEIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjaGVjayB2YWxpZCBwYXJhbQogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17VmFsaWR9ICkgewogICAgICAgICRQYXJhbXtWYWxpZH0gPSAxOwogICAgfQoKICAgICMgY2hlY2sgY2FjaGVkIHJlc3VsdHMKICAgIG15ICRDYWNoZUtleSA9ICdDYWNoZTo6U2VydmljZUxpc3RHZXQ6OlZhbGlkOjonIC4gJFBhcmFte1ZhbGlkfTsKICAgIG15ICRDYWNoZSAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwogICAgcmV0dXJuICRDYWNoZSBpZiBkZWZpbmVkICRDYWNoZTsKCiAgICAjIGNyZWF0ZSBTUUwgcXVlcnkKICAgIG15ICRTUUwgPSAnU0VMRUNUIGlkLCBuYW1lLCB2YWxpZF9pZCwgY29tbWVudHMsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkgJwojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAuICIsIHR5cGVfaWQsIGNyaXRpY2FsaXR5ICIKIyAtLS0KICAgICAgICAuICdGUk9NIHNlcnZpY2UnOwoKICAgIGlmICggJFBhcmFte1ZhbGlkfSApIHsKICAgICAgICAkU1FMIC49ICcgV0hFUkUgdmFsaWRfaWQgSU4gKCcgLiBqb2luICcsICcsCiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZElEc0dldCgpIC4gJyknOwogICAgfQoKICAgICRTUUwgLj0gJyBPUkRFUiBCWSBuYW1lJzsKCiAgICAjIGFzayBkYXRhYmFzZQogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICRTUUwsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgQFNlcnZpY2VMaXN0OwogICAgbXkgJVNlcnZpY2VOYW1lMklEOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBteSAlU2VydmljZURhdGE7CiAgICAgICAgJFNlcnZpY2VEYXRhe1NlcnZpY2VJRH0gID0gJFJvd1swXTsKICAgICAgICAkU2VydmljZURhdGF7TmFtZX0gICAgICAgPSAkUm93WzFdOwogICAgICAgICRTZXJ2aWNlRGF0YXtWYWxpZElEfSAgICA9ICRSb3dbMl07CiAgICAgICAgJFNlcnZpY2VEYXRhe0NvbW1lbnR9ICAgID0gJFJvd1szXSB8fCAnJzsKICAgICAgICAkU2VydmljZURhdGF7Q3JlYXRlVGltZX0gPSAkUm93WzRdOwogICAgICAgICRTZXJ2aWNlRGF0YXtDcmVhdGVCeX0gICA9ICRSb3dbNV07CiAgICAgICAgJFNlcnZpY2VEYXRhe0NoYW5nZVRpbWV9ID0gJFJvd1s2XTsKICAgICAgICAkU2VydmljZURhdGF7Q2hhbmdlQnl9ICAgPSAkUm93WzddOwojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAkU2VydmljZURhdGF7VHlwZUlEfSAgICAgID0gJFJvd1s4XTsKICAgICAgICAkU2VydmljZURhdGF7Q3JpdGljYWxpdHl9ID0gJFJvd1s5XSB8fCAnJzsKIyAtLS0KCiAgICAgICAgIyBhZGQgc2VydmljZSBkYXRhIHRvIHNlcnZpY2UgbGlzdAogICAgICAgIHB1c2ggQFNlcnZpY2VMaXN0LCBcJVNlcnZpY2VEYXRhOwoKICAgICAgICAjIGJ1aWxkIHNlcnZpY2UgaWQgbG9va3VwIGhhc2gKICAgICAgICAkU2VydmljZU5hbWUySUR7ICRTZXJ2aWNlRGF0YXtOYW1lfSB9ID0gJFNlcnZpY2VEYXRhe1NlcnZpY2VJRH07CiAgICB9CgogICAgZm9yIG15ICRTZXJ2aWNlRGF0YSAoQFNlcnZpY2VMaXN0KSB7CgogICAgICAgICMgY3JlYXRlIHNob3J0IG5hbWUgYW5kIHBhcmVudGlkCiAgICAgICAgJFNlcnZpY2VEYXRhLT57TmFtZVNob3J0fSA9ICRTZXJ2aWNlRGF0YS0+e05hbWV9OwogICAgICAgIGlmICggJFNlcnZpY2VEYXRhLT57TmFtZX0gPX4gbXsgXEEgKC4qKSA6OiAoLis/KSBceiB9eG1zICkgewogICAgICAgICAgICBteSAkUGFyZW50TmFtZSA9ICQxOwogICAgICAgICAgICAkU2VydmljZURhdGEtPntOYW1lU2hvcnR9ID0gJDI7CiAgICAgICAgICAgICRTZXJ2aWNlRGF0YS0+e1BhcmVudElEfSAgPSAkU2VydmljZU5hbWUySUR7JFBhcmVudE5hbWV9OwogICAgICAgIH0KCiAgICAgICAgIyBnZXQgc2VydmljZSBwcmVmZXJlbmNlcwogICAgICAgIG15ICVQcmVmZXJlbmNlcyA9ICRTZWxmLT5TZXJ2aWNlUHJlZmVyZW5jZXNHZXQoCiAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZURhdGEtPntTZXJ2aWNlSUR9LAogICAgICAgICk7CgogICAgICAgICMgbWVyZ2UgaGFzaAogICAgICAgIGlmICglUHJlZmVyZW5jZXMpIHsKICAgICAgICAgICAgJXskU2VydmljZURhdGF9ID0gKCAleyRTZXJ2aWNlRGF0YX0sICVQcmVmZXJlbmNlcyApOwogICAgICAgIH0KIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgIyBnZXQgY3VycmVudCBpbmNpZGVudCBzdGF0ZSwgY2FsY3VsYXRlZCBmcm9tIHJlbGF0ZWQgY29uZmlnIGl0ZW1zIGFuZCBjaGlsZCBzZXJ2aWNlcwogICAgICAgIG15ICVOZXdTZXJ2aWNlRGF0YSA9ICRTZWxmLT5fU2VydmljZUdldEN1cnJlbnRJbmNpZGVudFN0YXRlKAogICAgICAgICAgICBTZXJ2aWNlRGF0YSA9PiAkU2VydmljZURhdGEsCiAgICAgICAgICAgIFByZWZlcmVuY2VzID0+IFwlUHJlZmVyZW5jZXMsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CiAgICAgICAgJFNlcnZpY2VEYXRhID0gXCVOZXdTZXJ2aWNlRGF0YTsKIyAtLS0KICAgIH0KCiAgICBpZiAoQFNlcnZpY2VMaXN0KSB7CgogICAgICAgICMgc2V0IGNhY2hlCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgICAgICBWYWx1ZSA9PiBcQFNlcnZpY2VMaXN0LAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIFxAU2VydmljZUxpc3Q7Cn0KCj1pdGVtIFNlcnZpY2VHZXQoKQoKcmV0dXJuIGEgc2VydmljZSBhcyBoYXNoCgpSZXR1cm4KICAgICRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9CiAgICAkU2VydmljZURhdGF7UGFyZW50SUR9CiAgICAkU2VydmljZURhdGF7TmFtZX0KICAgICRTZXJ2aWNlRGF0YXtOYW1lU2hvcnR9CiAgICAkU2VydmljZURhdGF7VmFsaWRJRH0KICAgICRTZXJ2aWNlRGF0YXtDb21tZW50fQogICAgJFNlcnZpY2VEYXRhe0NyZWF0ZVRpbWV9CiAgICAkU2VydmljZURhdGF7Q3JlYXRlQnl9CiAgICAkU2VydmljZURhdGF7Q2hhbmdlVGltZX0KICAgICRTZXJ2aWNlRGF0YXtDaGFuZ2VCeX0KIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAkU2VydmljZURhdGF7VHlwZUlEfQogICAgJFNlcnZpY2VEYXRhe1R5cGV9CiAgICAkU2VydmljZURhdGF7Q3JpdGljYWxpdHl9CiAgICAkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlSUR9ICAgICMgT25seSBpZiBJbmNpZGVudFN0YXRlIGlzIDEKICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGV9ICAgICAgIyBPbmx5IGlmIEluY2lkZW50U3RhdGUgaXMgMQogICAgJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZVR5cGV9ICAjIE9ubHkgaWYgSW5jaWRlbnRTdGF0ZSBpcyAxCgogICAgbXkgJVNlcnZpY2VEYXRhID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgU2VydmljZUlEICAgICA9PiAxMjMsCiAgICAgICAgSW5jaWRlbnRTdGF0ZSA9PiAxLCAjIE9wdGlvbmFsLCByZXR1cm5zIEN1ckluY2lTdGF0ZSBldGMuCiAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgKTsKIyAtLS0KCiAgICBteSAlU2VydmljZURhdGEgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgICAgICBTZXJ2aWNlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKCiAgICBteSAlU2VydmljZURhdGEgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgICAgICBOYW1lICAgID0+ICdTZXJ2aWNlOjpTdWJTZXJ2aWNlJywKICAgICAgICBVc2VySUQgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIFNlcnZpY2VHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1VzZXJJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkIFVzZXJJRCEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZWl0aGVyIFNlcnZpY2VJRCBvciBOYW1lIG11c3QgYmUgcGFzc2VkCiAgICBpZiAoICEkUGFyYW17U2VydmljZUlEfSAmJiAhJFBhcmFte05hbWV9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBTZXJ2aWNlSUQgb3IgTmFtZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY2hlY2sgdGhhdCBub3QgYm90aCBTZXJ2aWNlSUQgYW5kIE5hbWUgYXJlIGdpdmVuCiAgICBpZiAoICRQYXJhbXtTZXJ2aWNlSUR9ICYmICRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgZWl0aGVyIFNlcnZpY2VJRCBPUiBOYW1lIC0gbm90IGJvdGghJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGxvb2t1cCB0aGUgU2VydmljZUlECiAgICBpZiAoICRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkUGFyYW17U2VydmljZUlEfSA9ICRTZWxmLT5TZXJ2aWNlTG9va3VwKAogICAgICAgICAgICBOYW1lID0+ICRQYXJhbXtOYW1lfSwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgY2FjaGVkIHJlc3VsdHMKICAgIG15ICRDYWNoZUtleSA9ICdDYWNoZTo6U2VydmljZUdldDo6JyAuICRQYXJhbXtTZXJ2aWNlSUR9OwojIC0tLQojIElUU00KIyAtLS0KICAgICMgYWRkIHRoZSBJbmNpZGVudFN0YXRlIHBhcmFtZXRlciB0byB0aGUgY2FjaGUga2V5CiAgICAkUGFyYW17SW5jaWRlbnRTdGF0ZX0gfHw9IDA7CiAgICAkQ2FjaGVLZXkgLj0gJzo6SW5jaWRlbnRTdGF0ZTo6JyAuICRQYXJhbXtJbmNpZGVudFN0YXRlfTsKIyAtLS0KICAgIG15ICRDYWNoZSAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwogICAgcmV0dXJuICV7JENhY2hlfSBpZiByZWYgJENhY2hlIGVxICdIQVNIJzsKCiAgICAjIGdldCBzZXJ2aWNlIGZyb20gZGIKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PgogICAgICAgICAgICAnU0VMRUNUIGlkLCBuYW1lLCB2YWxpZF9pZCwgY29tbWVudHMsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkgJwojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgLiAiLCB0eXBlX2lkLCBjcml0aWNhbGl0eSAiCiMgLS0tCiAgICAgICAgICAgIC4gJ0ZST00gc2VydmljZSBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtTZXJ2aWNlSUR9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlU2VydmljZURhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9ICA9ICRSb3dbMF07CiAgICAgICAgJFNlcnZpY2VEYXRhe05hbWV9ICAgICAgID0gJFJvd1sxXTsKICAgICAgICAkU2VydmljZURhdGF7VmFsaWRJRH0gICAgPSAkUm93WzJdOwogICAgICAgICRTZXJ2aWNlRGF0YXtDb21tZW50fSAgICA9ICRSb3dbM10gfHwgJyc7CiAgICAgICAgJFNlcnZpY2VEYXRhe0NyZWF0ZVRpbWV9ID0gJFJvd1s0XTsKICAgICAgICAkU2VydmljZURhdGF7Q3JlYXRlQnl9ICAgPSAkUm93WzVdOwogICAgICAgICRTZXJ2aWNlRGF0YXtDaGFuZ2VUaW1lfSA9ICRSb3dbNl07CiAgICAgICAgJFNlcnZpY2VEYXRhe0NoYW5nZUJ5fSAgID0gJFJvd1s3XTsKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgJFNlcnZpY2VEYXRhe1R5cGVJRH0gICAgICA9ICRSb3dbOF07CiAgICAgICAgJFNlcnZpY2VEYXRhe0NyaXRpY2FsaXR5fSA9ICRSb3dbOV0gfHwgJyc7CiMgLS0tCiAgICB9CgogICAgIyBjaGVjayBzZXJ2aWNlCiAgICBpZiAoICEkU2VydmljZURhdGF7U2VydmljZUlEfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5vIHN1Y2ggU2VydmljZUlEICgkUGFyYW17U2VydmljZUlEfSkhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNyZWF0ZSBzaG9ydCBuYW1lIGFuZCBwYXJlbnRpZAogICAgJFNlcnZpY2VEYXRhe05hbWVTaG9ydH0gPSAkU2VydmljZURhdGF7TmFtZX07CiAgICBpZiAoICRTZXJ2aWNlRGF0YXtOYW1lfSA9fiBteyBcQSAoLiopIDo6ICguKz8pIFx6IH14bXMgKSB7CiAgICAgICAgJFNlcnZpY2VEYXRhe05hbWVTaG9ydH0gPSAkMjsKCiAgICAgICAgIyBsb29rdXAgcGFyZW50CiAgICAgICAgbXkgJFNlcnZpY2VJRCA9ICRTZWxmLT5TZXJ2aWNlTG9va3VwKAogICAgICAgICAgICBOYW1lID0+ICQxLAogICAgICAgICk7CiAgICAgICAgJFNlcnZpY2VEYXRhe1BhcmVudElEfSA9ICRTZXJ2aWNlSUQ7CiAgICB9CgogICAgIyBnZXQgc2VydmljZSBwcmVmZXJlbmNlcwogICAgbXkgJVByZWZlcmVuY2VzID0gJFNlbGYtPlNlcnZpY2VQcmVmZXJlbmNlc0dldCgKICAgICAgICBTZXJ2aWNlSUQgPT4gJFBhcmFte1NlcnZpY2VJRH0sCiAgICApOwoKICAgICMgbWVyZ2UgaGFzaAogICAgaWYgKCVQcmVmZXJlbmNlcykgewogICAgICAgICVTZXJ2aWNlRGF0YSA9ICggJVNlcnZpY2VEYXRhLCAlUHJlZmVyZW5jZXMgKTsKICAgIH0KIyAtLS0KIyBJVFNNCiMgLS0tCiAgICBpZiAoICRQYXJhbXtJbmNpZGVudFN0YXRlfSApIHsKICAgICAgICAjIGdldCBjdXJyZW50IGluY2lkZW50IHN0YXRlLCBjYWxjdWxhdGVkIGZyb20gcmVsYXRlZCBjb25maWcgaXRlbXMgYW5kIGNoaWxkIHNlcnZpY2VzCiAgICAgICAgJVNlcnZpY2VEYXRhID0gJFNlbGYtPl9TZXJ2aWNlR2V0Q3VycmVudEluY2lkZW50U3RhdGUoCiAgICAgICAgICAgIFNlcnZpY2VEYXRhID0+IFwlU2VydmljZURhdGEsCiAgICAgICAgICAgIFByZWZlcmVuY2VzID0+IFwlUHJlZmVyZW5jZXMsCiAgICAgICAgICAgIFVzZXJJRCAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICk7CiAgICB9CiMgLS0tCgogICAgIyBzZXQgY2FjaGUKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICBWYWx1ZSA9PiBcJVNlcnZpY2VEYXRhLAogICAgKTsKCiAgICByZXR1cm4gJVNlcnZpY2VEYXRhOwp9Cgo9aXRlbSBTZXJ2aWNlTG9va3VwKCkKCnJldHVybiBhIHNlcnZpY2UgbmFtZSBhbmQgaWQKCiAgICBteSAkU2VydmljZU5hbWUgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxvb2t1cCgKICAgICAgICBTZXJ2aWNlSUQgPT4gMTIzLAogICAgKTsKCiAgICBvcgoKICAgIG15ICRTZXJ2aWNlSUQgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxvb2t1cCgKICAgICAgICBOYW1lID0+ICdTZXJ2aWNlOjpTdWJTZXJ2aWNlJywKICAgICk7Cgo9Y3V0CgpzdWIgU2VydmljZUxvb2t1cCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17U2VydmljZUlEfSAmJiAhJFBhcmFte05hbWV9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBTZXJ2aWNlSUQgb3IgTmFtZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIGlmICggJFBhcmFte1NlcnZpY2VJRH0gKSB7CgogICAgICAgICMgY2hlY2sgY2FjaGUKICAgICAgICBteSAkQ2FjaGVLZXkgPSAnQ2FjaGU6OlNlcnZpY2VMb29rdXA6OklEOjonIC4gJFBhcmFte1NlcnZpY2VJRH07CiAgICAgICAgbXkgJENhY2hlICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkdldCgKICAgICAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgICAgICk7CiAgICAgICAgcmV0dXJuICRDYWNoZSBpZiBkZWZpbmVkICRDYWNoZTsKCiAgICAgICAgIyBsb29rdXAKICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBuYW1lIEZST00gc2VydmljZSBXSEVSRSBpZCA9ID8nLAogICAgICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17U2VydmljZUlEfSBdLAogICAgICAgICAgICBMaW1pdCA9PiAxLAogICAgICAgICk7CgogICAgICAgIG15ICRSZXN1bHQgPSAnJzsKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICAgICAkUmVzdWx0ID0gJFJvd1swXTsKICAgICAgICB9CgogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICAgICAgVFRMICAgPT4gJFNlbGYtPntDYWNoZVRUTH0sCiAgICAgICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICAgICAgVmFsdWUgPT4gJFJlc3VsdCwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJFJlc3VsdDsKICAgIH0KICAgIGVsc2UgewoKICAgICAgICAjIGNoZWNrIGNhY2hlCiAgICAgICAgbXkgJENhY2hlS2V5ID0gJ0NhY2hlOjpTZXJ2aWNlTG9va3VwOjpOYW1lOjonIC4gJFBhcmFte05hbWV9OwogICAgICAgIG15ICRDYWNoZSAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBLZXkgID0+ICRDYWNoZUtleSwKICAgICAgICApOwogICAgICAgIHJldHVybiAkQ2FjaGUgaWYgZGVmaW5lZCAkQ2FjaGU7CgogICAgICAgICMgbG9va3VwCiAgICAgICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgaWQgRlJPTSBzZXJ2aWNlIFdIRVJFIG5hbWUgPSA/JywKICAgICAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte05hbWV9IF0sCiAgICAgICAgICAgIExpbWl0ID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgbXkgJFJlc3VsdCA9ICcnOwogICAgICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgICAgICRSZXN1bHQgPSAkUm93WzBdOwogICAgICAgIH0KCiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgICAgICBWYWx1ZSA9PiAkUmVzdWx0LAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkUmVzdWx0OwogICAgfQp9Cgo9aXRlbSBTZXJ2aWNlQWRkKCkKCmFkZCBhIHNlcnZpY2UKCiAgICBteSAkU2VydmljZUlEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICAgICAgTmFtZSAgICAgPT4gJ1NlcnZpY2UgTmFtZScsCiAgICAgICAgUGFyZW50SUQgPT4gMSwgICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFZhbGlkSUQgID0+IDEsCiAgICAgICAgQ29tbWVudCAgPT4gJ0NvbW1lbnQnLCAgICAjIChvcHRpb25hbCkKICAgICAgICBVc2VySUQgICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICBUeXBlSUQgICAgICA9PiAyLAogICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICApOwoKPWN1dAoKc3ViIFNlcnZpY2VBZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgojIC0tLQojIElUU00KIyAtLS0KIyAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhOYW1lIFZhbGlkSUQgVXNlcklEKSkgewogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTmFtZSBWYWxpZElEIFVzZXJJRCBUeXBlSUQgQ3JpdGljYWxpdHkpKSB7CiMgLS0tCiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgc2V0IGNvbW1lbnQKICAgICRQYXJhbXtDb21tZW50fSB8fD0gJyc7CgogICAgIyBjbGVhbnVwIGdpdmVuIHBhcmFtcwogICAgZm9yIG15ICRBcmd1bWVudCAocXcoTmFtZSBDb21tZW50KSkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nKS0+U3RyaW5nQ2xlYW4oCiAgICAgICAgICAgIFN0cmluZ1JlZiAgICAgICAgID0+IFwkUGFyYW17JEFyZ3VtZW50fSwKICAgICAgICAgICAgUmVtb3ZlQWxsTmV3bGluZXMgPT4gMSwKICAgICAgICAgICAgUmVtb3ZlQWxsVGFicyAgICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgY2hlY2sgc2VydmljZSBuYW1lCiAgICBpZiAoICRQYXJhbXtOYW1lfSA9fiBteyA6OiB9eG1zICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgYWRkIHNlcnZpY2UhIEludmFsaWQgU2VydmljZSBuYW1lICckUGFyYW17TmFtZX0nISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjcmVhdGUgZnVsbCBuYW1lCiAgICAkUGFyYW17RnVsbE5hbWV9ID0gJFBhcmFte05hbWV9OwoKICAgICMgZ2V0IHBhcmVudCBuYW1lCiAgICBpZiAoICRQYXJhbXtQYXJlbnRJRH0gKSB7CiAgICAgICAgbXkgJFBhcmVudE5hbWUgPSAkU2VsZi0+U2VydmljZUxvb2t1cCggU2VydmljZUlEID0+ICRQYXJhbXtQYXJlbnRJRH0sICk7CiAgICAgICAgaWYgKCRQYXJlbnROYW1lKSB7CiAgICAgICAgICAgICRQYXJhbXtGdWxsTmFtZX0gPSAkUGFyZW50TmFtZSAuICc6OicgLiAkUGFyYW17TmFtZX07CiAgICAgICAgfQogICAgfQoKICAgICMgZmluZCBleGlzdGluZyBzZXJ2aWNlCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gc2VydmljZSBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0Z1bGxOYW1lfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwogICAgbXkgJEV4aXN0czsKICAgIHdoaWxlICggJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkRXhpc3RzID0gMTsKICAgIH0KCiAgICAjIGFkZCBzZXJ2aWNlIHRvIGRhdGFiYXNlCiAgICBpZiAoJEV4aXN0cykgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnQ2FuXCd0IGFkZCBzZXJ2aWNlISBTZXJ2aWNlIHdpdGggc2FtZSBuYW1lIGFuZCBwYXJlbnQgYWxyZWFkeSBleGlzdHMuJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPkRvKAojIC0tLQojIElUU00KIyAtLS0KIyAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBzZXJ2aWNlICcKIyAgICAgICAgICAgIC4gJyhuYW1lLCB2YWxpZF9pZCwgY29tbWVudHMsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnkpICcKIyAgICAgICAgICAgIC4gJ1ZBTFVFUyAoPywgPywgPywgY3VycmVudF90aW1lc3RhbXAsID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/KScsCiMgICAgICAgIEJpbmQgPT4gWwojICAgICAgICAgICAgXCRQYXJhbXtGdWxsTmFtZX0sIFwkUGFyYW17VmFsaWRJRH0sIFwkUGFyYW17Q29tbWVudH0sCiMgICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17VXNlcklEfSwKIyAgICAgICAgXSwKICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIHNlcnZpY2UgJwogICAgICAgICAgICAuICcobmFtZSwgdmFsaWRfaWQsIGNvbW1lbnRzLCBjcmVhdGVfdGltZSwgY3JlYXRlX2J5LCBjaGFuZ2VfdGltZSwgY2hhbmdlX2J5LCAnCiAgICAgICAgICAgIC4gJ3R5cGVfaWQsIGNyaXRpY2FsaXR5KSAnCiAgICAgICAgICAgIC4gJ1ZBTFVFUyAoPywgPywgPywgY3VycmVudF90aW1lc3RhbXAsID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/LCA/LCA/KScsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17RnVsbE5hbWV9LCBcJFBhcmFte1ZhbGlkSUR9LCBcJFBhcmFte0NvbW1lbnR9LAogICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17VXNlcklEfSwgXCRQYXJhbXtUeXBlSUR9LCBcJFBhcmFte0NyaXRpY2FsaXR5fSwKICAgICAgICBdLAojIC0tLQogICAgKTsKCiAgICAjIGdldCBzZXJ2aWNlIGlkCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gc2VydmljZSBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0Z1bGxOYW1lfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwogICAgbXkgJFNlcnZpY2VJRDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFNlcnZpY2VJRCA9ICRSb3dbMF07CiAgICB9CgogICAgIyByZXNldCBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICApOwoKICAgIHJldHVybiAkU2VydmljZUlEOwp9Cgo9aXRlbSBTZXJ2aWNlVXBkYXRlKCkKCnVwZGF0ZSBhbiBleGlzdGluZyBzZXJ2aWNlCgogICAgbXkgJFRydWUgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVVwZGF0ZSgKICAgICAgICBTZXJ2aWNlSUQgPT4gMTIzLAogICAgICAgIFBhcmVudElEICA9PiAxLCAgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgTmFtZSAgICAgID0+ICdTZXJ2aWNlIE5hbWUnLAogICAgICAgIFZhbGlkSUQgICA9PiAxLAogICAgICAgIENvbW1lbnQgICA9PiAnQ29tbWVudCcsICAgICMgKG9wdGlvbmFsKQogICAgICAgIFVzZXJJRCAgICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICBUeXBlSUQgICAgICA9PiAyLAogICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICApOwoKPWN1dAoKc3ViIFNlcnZpY2VVcGRhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgojIC0tLQojIElUU00KIyAtLS0KIyAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTZXJ2aWNlSUQgTmFtZSBWYWxpZElEIFVzZXJJRCkpIHsKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFNlcnZpY2VJRCBOYW1lIFZhbGlkSUQgVXNlcklEIFR5cGVJRCBDcml0aWNhbGl0eSkpIHsKIyAtLS0KICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCBjb21tZW50CiAgICAkUGFyYW17Q29tbWVudH0gfHw9ICcnOwoKICAgICMgY2xlYW51cCBnaXZlbiBwYXJhbXMKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE5hbWUgQ29tbWVudCkpIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2hlY2tJdGVtJyktPlN0cmluZ0NsZWFuKAogICAgICAgICAgICBTdHJpbmdSZWYgICAgICAgICA9PiBcJFBhcmFteyRBcmd1bWVudH0sCiAgICAgICAgICAgIFJlbW92ZUFsbE5ld2xpbmVzID0+IDEsCiAgICAgICAgICAgIFJlbW92ZUFsbFRhYnMgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGNoZWNrIHNlcnZpY2UgbmFtZQogICAgaWYgKCAkUGFyYW17TmFtZX0gPX4gbXsgOjogfXhtcyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbid0IHVwZGF0ZSBzZXJ2aWNlISBJbnZhbGlkIFNlcnZpY2UgbmFtZSAnJFBhcmFte05hbWV9JyEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IG9sZCBuYW1lIG9mIHNlcnZpY2UKICAgIG15ICRPbGRTZXJ2aWNlTmFtZSA9ICRTZWxmLT5TZXJ2aWNlTG9va3VwKCBTZXJ2aWNlSUQgPT4gJFBhcmFte1NlcnZpY2VJRH0sICk7CgogICAgaWYgKCAhJE9sZFNlcnZpY2VOYW1lICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgdXBkYXRlIHNlcnZpY2UhIFNlcnZpY2UgJyRQYXJhbXtTZXJ2aWNlSUR9JyBkb2VzIG5vdCBleGlzdC4iLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgY3JlYXRlIGZ1bGwgbmFtZQogICAgJFBhcmFte0Z1bGxOYW1lfSA9ICRQYXJhbXtOYW1lfTsKCiAgICAjIGdldCBwYXJlbnQgbmFtZQogICAgaWYgKCAkUGFyYW17UGFyZW50SUR9ICkgewoKICAgICAgICAjIGxvb2t1cCBzZXJ2aWNlCiAgICAgICAgbXkgJFBhcmVudE5hbWUgPSAkU2VsZi0+U2VydmljZUxvb2t1cCgKICAgICAgICAgICAgU2VydmljZUlEID0+ICRQYXJhbXtQYXJlbnRJRH0sCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCRQYXJlbnROYW1lKSB7CiAgICAgICAgICAgICRQYXJhbXtGdWxsTmFtZX0gPSAkUGFyZW50TmFtZSAuICc6OicgLiAkUGFyYW17TmFtZX07CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrLCBpZiBzZWxlY3RlZCBwYXJlbnQgd2FzIGEgY2hpbGQgb2YgdGhpcyBzZXJ2aWNlCiAgICAgICAgaWYgKCAkUGFyYW17RnVsbE5hbWV9ID1+IG17IFxBICggXFEkT2xkU2VydmljZU5hbWVcRSApIDo6IH14bXMgKSB7CiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdDYW5cJ3QgdXBkYXRlIHNlcnZpY2UhIEludmFsaWQgcGFyZW50IHdhcyBzZWxlY3RlZC4nCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBmaW5kIGV4aXN0cyBzZXJ2aWNlCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gc2VydmljZSBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte0Z1bGxOYW1lfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwogICAgbXkgJEV4aXN0czsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgaWYgKCAkUGFyYW17U2VydmljZUlEfSBuZSAkUm93WzBdICkgewogICAgICAgICAgICAkRXhpc3RzID0gMTsKICAgICAgICB9CiAgICB9CgogICAgIyB1cGRhdGUgc2VydmljZQogICAgaWYgKCRFeGlzdHMpIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0NhblwndCB1cGRhdGUgc2VydmljZSEgU2VydmljZSB3aXRoIHNhbWUgbmFtZSBhbmQgcGFyZW50IGFscmVhZHkgZXhpc3RzLicKICAgICAgICApOwogICAgICAgIHJldHVybjsKCiAgICB9CgogICAgIyB1cGRhdGUgc2VydmljZQogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiMgLS0tCiMgSVRTTQojIC0tLQojICAgICAgICBTUUwgPT4gJ1VQREFURSBzZXJ2aWNlIFNFVCBuYW1lID0gPywgdmFsaWRfaWQgPSA/LCBjb21tZW50cyA9ID8sICcKIyAgICAgICAgICAgIC4gJyBjaGFuZ2VfdGltZSA9IGN1cnJlbnRfdGltZXN0YW1wLCBjaGFuZ2VfYnkgPSA/IFdIRVJFIGlkID0gPycsCiMgICAgICAgIEJpbmQgPT4gWwojICAgICAgICAgICAgXCRQYXJhbXtGdWxsTmFtZX0sIFwkUGFyYW17VmFsaWRJRH0sIFwkUGFyYW17Q29tbWVudH0sCiMgICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17U2VydmljZUlEfSwKIyAgICAgICAgXSwKICAgICAgICBTUUwgPT4gJ1VQREFURSBzZXJ2aWNlIFNFVCBuYW1lID0gPywgdmFsaWRfaWQgPSA/LCBjb21tZW50cyA9ID8sICcKICAgICAgICAgICAgLiAnIGNoYW5nZV90aW1lID0gY3VycmVudF90aW1lc3RhbXAsIGNoYW5nZV9ieSA9ID8sIHR5cGVfaWQgPSA/LCBjcml0aWNhbGl0eSA9ID8nCiAgICAgICAgICAgIC4gJyBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte0Z1bGxOYW1lfSwgXCRQYXJhbXtWYWxpZElEfSwgXCRQYXJhbXtDb21tZW50fSwKICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1R5cGVJRH0sIFwkUGFyYW17Q3JpdGljYWxpdHl9LCBcJFBhcmFte1NlcnZpY2VJRH0sCiAgICAgICAgXSwKIyAtLS0KICAgICk7CgogICAgbXkgJExpa2VTZXJ2aWNlID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkT2xkU2VydmljZU5hbWUsICdMaWtlJyApIC4gJzo6JSc7CgogICAgIyBmaW5kIGFsbCBjaGlsZHMKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgPT4gIlNFTEVDVCBpZCwgbmFtZSBGUk9NIHNlcnZpY2UgV0hFUkUgbmFtZSBMSUtFID8iLAogICAgICAgIEJpbmQgPT4gWyBcJExpa2VTZXJ2aWNlIF0sCiAgICApOwoKICAgIG15IEBDaGlsZHM7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgIG15ICVDaGlsZDsKICAgICAgICAkQ2hpbGR7U2VydmljZUlEfSA9ICRSb3dbMF07CiAgICAgICAgJENoaWxke05hbWV9ICAgICAgPSAkUm93WzFdOwogICAgICAgIHB1c2ggQENoaWxkcywgXCVDaGlsZDsKICAgIH0KCiAgICAjIHVwZGF0ZSBjaGlsZHMKICAgIGZvciBteSAkQ2hpbGQgKEBDaGlsZHMpIHsKICAgICAgICAkQ2hpbGQtPntOYW1lfSA9fiBzeyBcQSAoIFxRJE9sZFNlcnZpY2VOYW1lXEUgKSA6OiB9eyRQYXJhbXtGdWxsTmFtZX06On14bXM7CiAgICAgICAgJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgICAgICBTUUwgPT4gJ1VQREFURSBzZXJ2aWNlIFNFVCBuYW1lID0gPyBXSEVSRSBpZCA9ID8nLAogICAgICAgICAgICBCaW5kID0+IFsgXCRDaGlsZC0+e05hbWV9LCBcJENoaWxkLT57U2VydmljZUlEfSBdLAogICAgICAgICk7CiAgICB9CgogICAgIyByZXNldCBjYWNoZQogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICApOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBTZXJ2aWNlU2VhcmNoKCkKCnJldHVybiBzZXJ2aWNlIGlkcyBhcyBhbiBhcnJheQoKICAgIG15IEBTZXJ2aWNlTGlzdCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlU2VhcmNoKAogICAgICAgIE5hbWUgICA9PiAnU2VydmljZSBOYW1lJywgIyAob3B0aW9uYWwpCiAgICAgICAgTGltaXQgID0+IDEyMiwgICAgICAgICAgICAjIChvcHRpb25hbCkgZGVmYXVsdCAxMDAwCiAgICAgICAgVXNlcklEID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgIFR5cGVJRHMgICAgICAgPT4gMiwKICAgICAgICBDcml0aWNhbGl0aWVzID0+IFsgJzIgbG93JywgJzMgbm9ybWFsJyBdLAojIC0tLQogICAgKTsKCj1jdXQKCnN1YiBTZXJ2aWNlU2VhcmNoIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBVc2VySUQhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNldCBkZWZhdWx0IGxpbWl0CiAgICAkUGFyYW17TGltaXR9IHx8PSAxMDAwOwoKICAgICMgY3JlYXRlIHNxbCBxdWVyeQogICAgbXkgJFNRTAogICAgICAgID0gIlNFTEVDVCBpZCBGUk9NIHNlcnZpY2UgV0hFUkUgdmFsaWRfaWQgSU4gKCAke1woam9pbiAnLCAnLCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRJRHNHZXQoKSl9ICkiOwoKICAgIG15IEBCaW5kOwoKICAgIGlmICggJFBhcmFte05hbWV9ICkgewoKICAgICAgICAjIHF1b3RlCiAgICAgICAgJFBhcmFte05hbWV9ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkUGFyYW17TmFtZX0sICdMaWtlJyApOwoKICAgICAgICAjIHJlcGxhY2UgKiB3aXRoICUgYW5kIGNsZWFuIHRoZSBzdHJpbmcKICAgICAgICAkUGFyYW17TmFtZX0gPX4gc3sgXCorIH17JX14bXNnOwogICAgICAgICRQYXJhbXtOYW1lfSA9fiBzeyAlKyB9eyV9eG1zZzsKICAgICAgICBteSAkTGlrZVN0cmluZyA9ICclJyAuICRQYXJhbXtOYW1lfSAuICclJzsKICAgICAgICBwdXNoIEBCaW5kLCBcJExpa2VTdHJpbmc7CgogICAgICAgICRTUUwgLj0gIiBBTkQgbmFtZSBMSUtFID8iOwogICAgfQojIC0tLQojIElUU00KIyAtLS0KICAgICMgYWRkIHR5cGUgaWRzCiAgICBpZiAoICRQYXJhbXtUeXBlSURzfSAmJiByZWYgJFBhcmFte1R5cGVJRHN9IGVxICdBUlJBWScgJiYgQHsgJFBhcmFte1R5cGVJRHN9IH0gKSB7CgogICAgICAgICMgcXVvdGUgYXMgaW50ZWdlcgogICAgICAgIGZvciBteSAkVHlwZUlEICggQHsgJFBhcmFte1R5cGVJRHN9IH0gKSB7CiAgICAgICAgICAgICRUeXBlSUQgPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRUeXBlSUQsICdJbnRlZ2VyJyApOwogICAgICAgIH0KCiAgICAgICAgJFNRTCAuPSAiIEFORCB0eXBlX2lkIElOICgiIC4gam9pbignLCAnLCBAeyAkUGFyYW17VHlwZUlEc30gfSkgLiAiKSAiOwogICAgfQoKICAgICMgYWRkIGNyaXRpY2FsaXRpZXMKICAgIGlmICgkUGFyYW17Q3JpdGljYWxpdGllc30gJiYgcmVmICRQYXJhbXtDcml0aWNhbGl0aWVzfSBlcSAnQVJSQVknICYmIEB7ICRQYXJhbXtDcml0aWNhbGl0aWVzfSB9ICkgewoKICAgICAgICAjIHF1b3RlIGFuZCB3cmFwIGluIHNpbmdsZSBxdW90ZXMKICAgICAgICBmb3IgbXkgJENyaXRpY2FsaXR5ICggQHsgJFBhcmFte0NyaXRpY2FsaXRpZXN9IH0gKSB7CiAgICAgICAgICAgICRDcml0aWNhbGl0eSA9ICInIiAuICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSggJENyaXRpY2FsaXR5ICkgLiAiJyI7CiAgICAgICAgfQoKICAgICAgICAkU1FMIC49ICJBTkQgY3JpdGljYWxpdHkgSU4gKCIgLiBqb2luKCcsICcsIEB7ICRQYXJhbXtDcml0aWNhbGl0aWVzfSB9KSAuICIpICI7CiAgICB9CiMgLS0tCgogICAgJFNRTCAuPSAnIE9SREVSIEJZIG5hbWUnOwoKICAgICMgc2VhcmNoIHNlcnZpY2UgaW4gZGIKICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCAgPT4gJFNRTCwKICAgICAgICBCaW5kID0+IFxAQmluZCwKICAgICk7CgogICAgbXkgQFNlcnZpY2VMaXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBTZXJ2aWNlTGlzdCwgJFJvd1swXTsKICAgIH0KCiAgICByZXR1cm4gQFNlcnZpY2VMaXN0Owp9Cgo9aXRlbSBDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgpCgpyZXR1cm5zIGEgbGlzdCBvZiBjdXN0b21lcnVzZXIvc2VydmljZSBtZW1iZXJzCgogICAgU2VydmljZUlEOiBzZXJ2aWNlIGlkCiAgICBDdXN0b21lclVzZXJMb2dpbjogY3VzdG9tZXIgdXNlciBsb2dpbgogICAgRGVmYXVsdFNlcnZpY2VzOiBhY3RpdmF0ZSBvciBkZWFjdGl2YXRlIGRlZmF1bHQgc2VydmljZXMKCiAgICBSZXN1bHQ6IEhBU0ggLT4gcmV0dXJucyBhIGhhc2ggb2Yga2V5ID0+IHNlcnZpY2UgaWQsIHZhbHVlID0+IHNlcnZpY2UgbmFtZQogICAgICAgICAgICBOYW1lIC0+IHJldHVybnMgYW4gYXJyYXkgb2YgdXNlciBuYW1lcwogICAgICAgICAgICBJRCAgIC0+IHJldHVybnMgYW4gYXJyYXkgb2YgdXNlciBpZHMKCiAgICBFeGFtcGxlIChnZXQgc2VydmljZXMgb2YgY3VzdG9tZXIgdXNlcik6CgogICAgJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICdUZXN0JywKICAgICAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSEFTSCcsCiAgICAgICAgRGVmYXVsdFNlcnZpY2VzICAgPT4gMCwKICAgICk7CgogICAgRXhhbXBsZSAoZ2V0IGN1c3RvbWVyIHVzZXIgb2Ygc2VydmljZSk6CgogICAgJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgICAgIFNlcnZpY2VJRCA9PiAkSUQsCiAgICAgICAgUmVzdWx0ICAgID0+ICdIQVNIJywKICAgICk7Cgo9Y3V0CgpzdWIgQ3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte1Jlc3VsdH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFJlc3VsdCEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgKG9ubHkgMSBvciAwIGlzIGFsbG93ZWQgdG8gY29ycmVjdGx5IHNldCB0aGUgY2FjaGUga2V5KQogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17RGVmYXVsdFNlcnZpY2VzfSB8fCAkUGFyYW17RGVmYXVsdFNlcnZpY2VzfSApIHsKICAgICAgICAkUGFyYW17RGVmYXVsdFNlcnZpY2VzfSA9IDE7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkUGFyYW17RGVmYXVsdFNlcnZpY2VzfSA9IDA7CiAgICB9CgogICAgIyBnZXQgb3B0aW9ucyBmb3IgZGVmYXVsdCBzZXJ2aWNlcyBmb3IgdW5rbm93biBjdXN0b21lcnMKICAgIG15ICREZWZhdWx0U2VydmljZVVua25vd25DdXN0b21lcgogICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdUaWNrZXQ6OlNlcnZpY2U6OkRlZmF1bHQ6OlVua25vd25DdXN0b21lcicpOwogICAgaWYgKAogICAgICAgICREZWZhdWx0U2VydmljZVVua25vd25DdXN0b21lcgogICAgICAgICYmICRQYXJhbXtEZWZhdWx0U2VydmljZXN9CiAgICAgICAgJiYgISRQYXJhbXtTZXJ2aWNlSUR9CiAgICAgICAgJiYgISRQYXJhbXtDdXN0b21lclVzZXJMb2dpbn0KICAgICAgICApCiAgICB7CiAgICAgICAgJFBhcmFte0N1c3RvbWVyVXNlckxvZ2lufSA9ICc8REVGQVVMVD4nOwogICAgfQoKICAgICMgY2hlY2sgbW9yZSBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtTZXJ2aWNlSUR9ICYmICEkUGFyYW17Q3VzdG9tZXJVc2VyTG9naW59ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCBTZXJ2aWNlSUQgb3IgQ3VzdG9tZXJVc2VyTG9naW4hJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNyZWF0ZSBjYWNoZSBrZXkKICAgIG15ICRDYWNoZUtleSA9ICdDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdDo6JyAuICRQYXJhbXtSZXN1bHR9IC4gJzo6JwogICAgICAgIC4gJ0RlZmF1bHRTZXJ2aWNlczo6JyAuICRQYXJhbXtEZWZhdWx0U2VydmljZXN9IC4gJzo6JzsKICAgIGlmICggJFBhcmFte1NlcnZpY2VJRH0gKSB7CiAgICAgICAgJENhY2hlS2V5IC49ICdTZXJ2aWNlSUQ6OicgLiAkUGFyYW17U2VydmljZUlEfTsKICAgIH0KICAgIGVsc2lmICggJFBhcmFte0N1c3RvbWVyVXNlckxvZ2lufSApIHsKICAgICAgICAkQ2FjaGVLZXkgLj0gJ0N1c3RvbWVyVXNlckxvZ2luOjonIC4gJFBhcmFte0N1c3RvbWVyVXNlckxvZ2lufTsKICAgIH0KCiAgICAjIGNoZWNrIGNhY2hlCiAgICBteSAkQ2FjaGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+R2V0KAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIEtleSAgPT4gJENhY2hlS2V5LAogICAgKTsKICAgIGlmICggJFBhcmFte1Jlc3VsdH0gZXEgJ0hBU0gnICkgewogICAgICAgIHJldHVybiAleyRDYWNoZX0gaWYgcmVmICRDYWNoZSBlcSAnSEFTSCc7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICByZXR1cm4gQHskQ2FjaGV9IGlmIHJlZiAkQ2FjaGUgZXEgJ0FSUkFZJzsKICAgIH0KCiAgICAjIGRiIHF1b3RlCiAgICBmb3IgKCBzb3J0IGtleXMgJVBhcmFtICkgewogICAgICAgICRQYXJhbXskX30gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXskX30gKTsKICAgIH0KICAgIGZvciAocXcoU2VydmljZUlEKSkgewogICAgICAgICRQYXJhbXskX30gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoICRQYXJhbXskX30sICdJbnRlZ2VyJyApOwogICAgfQoKICAgICMgc3FsCiAgICBteSAlRGF0YTsKICAgIG15IEBEYXRhOwogICAgbXkgJFNRTCA9ICdTRUxFQ1Qgc2N1LnNlcnZpY2VfaWQsIHNjdS5jdXN0b21lcl91c2VyX2xvZ2luLCBzLm5hbWUgJwogICAgICAgIC4gJyBGUk9NICcKICAgICAgICAuICcgc2VydmljZV9jdXN0b21lcl91c2VyIHNjdSwgc2VydmljZSBzJwogICAgICAgIC4gJyBXSEVSRSAnCiAgICAgICAgLiAiIHMudmFsaWRfaWQgSU4gKCAke1woam9pbiAnLCAnLCAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VmFsaWQnKS0+VmFsaWRJRHNHZXQoKSl9ICkgQU5EICIKICAgICAgICAuICcgcy5pZCA9IHNjdS5zZXJ2aWNlX2lkIEFORCAnOwoKICAgIGlmICggJFBhcmFte1NlcnZpY2VJRH0gKSB7CiAgICAgICAgJFNRTCAuPSAiIHNjdS5zZXJ2aWNlX2lkID0gJFBhcmFte1NlcnZpY2VJRH0iOwogICAgfQogICAgZWxzaWYgKCAkUGFyYW17Q3VzdG9tZXJVc2VyTG9naW59ICkgewogICAgICAgICRTUUwgLj0gIiBzY3UuY3VzdG9tZXJfdXNlcl9sb2dpbiA9ICckUGFyYW17Q3VzdG9tZXJVc2VyTG9naW59JyI7CiAgICB9CgogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoIFNRTCA9PiAkU1FMICk7CgogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKCiAgICAgICAgbXkgJFZhbHVlID0gJyc7CiAgICAgICAgaWYgKCAkUGFyYW17U2VydmljZUlEfSApIHsKICAgICAgICAgICAgJERhdGF7ICRSb3dbMV0gfSA9ICRSb3dbMF07CiAgICAgICAgICAgICRWYWx1ZSA9ICRSb3dbMF07CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkRGF0YXsgJFJvd1swXSB9ID0gJFJvd1syXTsKICAgICAgICB9CiAgICB9CiAgICBpZiAoCiAgICAgICAgJFBhcmFte0N1c3RvbWVyVXNlckxvZ2lufQogICAgICAgICYmICRQYXJhbXtDdXN0b21lclVzZXJMb2dpbn0gbmUgJzxERUZBVUxUPicKICAgICAgICAmJiAkUGFyYW17RGVmYXVsdFNlcnZpY2VzfQogICAgICAgICYmICFrZXlzKCVEYXRhKQogICAgICAgICkKICAgIHsKICAgICAgICAlRGF0YSA9ICRTZWxmLT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgICAgICAgICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJzxERUZBVUxUPicsCiAgICAgICAgICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdIQVNIJywKICAgICAgICAgICAgRGVmYXVsdFNlcnZpY2VzICAgPT4gMCwKICAgICAgICApOwogICAgfQoKICAgICMgcmV0dXJuIHJlc3VsdAogICAgaWYgKCAkUGFyYW17UmVzdWx0fSBlcSAnSEFTSCcgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPlNldCgKICAgICAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICAgICAgS2V5ICAgPT4gJENhY2hlS2V5LAogICAgICAgICAgICBWYWx1ZSA9PiBcJURhdGEsCiAgICAgICAgKTsKICAgICAgICByZXR1cm4gJURhdGE7CiAgICB9CiAgICBpZiAoICRQYXJhbXtSZXN1bHR9IGVxICdOYW1lJyApIHsKICAgICAgICBARGF0YSA9IHZhbHVlcyAlRGF0YTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIEBEYXRhID0ga2V5cyAlRGF0YTsKICAgIH0KICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5TZXQoCiAgICAgICAgVHlwZSAgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgIFRUTCAgID0+ICRTZWxmLT57Q2FjaGVUVEx9LAogICAgICAgIEtleSAgID0+ICRDYWNoZUtleSwKICAgICAgICBWYWx1ZSA9PiBcQERhdGEsCiAgICApOwogICAgcmV0dXJuIEBEYXRhOwp9Cgo9aXRlbSBDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKCkKCnRvIGFkZCBhIG1lbWJlciB0byBhIHNlcnZpY2UKCmlmICdBY3RpdmUnIGlzIDAsIHRoZSBjdXN0b21lciBpcyByZW1vdmVkIGZyb20gdGhlIHNlcnZpY2UKCiAgICAkU2VydmljZU9iamVjdC0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckFkZCgKICAgICAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAnVGVzdDEnLAogICAgICAgIFNlcnZpY2VJRCAgICAgICAgID0+IDYsCiAgICAgICAgQWN0aXZlICAgICAgICAgICAgPT4gMSwKICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAxMjMsCiAgICApOwoKPWN1dAoKc3ViIEN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ3VzdG9tZXJVc2VyTG9naW4gU2VydmljZUlEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBkZWxldGUgZXhpc3RpbmcgcmVsYXRpb24KICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPkRvKAogICAgICAgIFNRTCA9PiAnREVMRVRFIEZST00gc2VydmljZV9jdXN0b21lcl91c2VyIFdIRVJFIGN1c3RvbWVyX3VzZXJfbG9naW4gPSA/IEFORCBzZXJ2aWNlX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17Q3VzdG9tZXJVc2VyTG9naW59LCBcJFBhcmFte1NlcnZpY2VJRH0gXSwKICAgICk7CgogICAgIyByZXR1cm4gaWYgcmVsYXRpb24gaXMgbm90IGFjdGl2ZQogICAgaWYgKCAhJFBhcmFte0FjdGl2ZX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNhY2hlJyktPkNsZWFuVXAoCiAgICAgICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgaW5zZXJ0IG5ldyByZWxhdGlvbgogICAgbXkgJFN1Y2Nlc3MgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBzZXJ2aWNlX2N1c3RvbWVyX3VzZXIgJwogICAgICAgICAgICAuICcoY3VzdG9tZXJfdXNlcl9sb2dpbiwgc2VydmljZV9pZCwgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSkgJwogICAgICAgICAgICAuICdWQUxVRVMgKD8sID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/KScsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17Q3VzdG9tZXJVc2VyTG9naW59LCBcJFBhcmFte1NlcnZpY2VJRH0sIFwkUGFyYW17VXNlcklEfSBdCiAgICApOwoKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5DbGVhblVwKAogICAgICAgIFR5cGUgPT4gJFNlbGYtPntDYWNoZVR5cGV9LAogICAgKTsKICAgIHJldHVybiAkU3VjY2VzczsKfQoKPWl0ZW0gU2VydmljZVByZWZlcmVuY2VzU2V0KCkKCnNldCBzZXJ2aWNlIHByZWZlcmVuY2VzCgogICAgJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VQcmVmZXJlbmNlc1NldCgKICAgICAgICBTZXJ2aWNlSUQgPT4gMTIzLAogICAgICAgIEtleSAgICAgICA9PiAnVXNlckNvbW1lbnQnLAogICAgICAgIFZhbHVlICAgICA9PiAnc29tZSBjb21tZW50JywKICAgICAgICBVc2VySUQgICAgPT4gMTIzLAogICAgKTsKCj1jdXQKCnN1YiBTZXJ2aWNlUHJlZmVyZW5jZXNTZXQgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICAkU2VsZi0+e1ByZWZlcmVuY2VzT2JqZWN0fS0+U2VydmljZVByZWZlcmVuY2VzU2V0KEBfKTsKCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+Q2xlYW5VcCgKICAgICAgICBUeXBlID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICk7CiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gU2VydmljZVByZWZlcmVuY2VzR2V0KCkKCmdldCBzZXJ2aWNlIHByZWZlcmVuY2VzCgogICAgbXkgJVByZWZlcmVuY2VzID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VQcmVmZXJlbmNlc0dldCgKICAgICAgICBTZXJ2aWNlSUQgPT4gMTIzLAogICAgICAgIFVzZXJJRCAgICA9PiAxMjMsCiAgICApOwoKPWN1dAoKc3ViIFNlcnZpY2VQcmVmZXJlbmNlc0dldCB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgIHJldHVybiAkU2VsZi0+e1ByZWZlcmVuY2VzT2JqZWN0fS0+U2VydmljZVByZWZlcmVuY2VzR2V0KEBfKTsKfQoKPWl0ZW0gU2VydmljZVBhcmVudHNHZXQoKQoKcmV0dXJuIGFuIG9yZGVyZWQgbGlzdCBhbGwgcGFyZW50IHNlcnZpY2UgSURzIGZvciB0aGUgZ2l2ZW4gc2VydmljZSBmcm9tIHRoZSByb290IHBhcmVudCB0byB0aGUKY3VycmVudCBzZXJ2aWNlIHBhcmVudAoKICAgIG15ICRTZXJ2aWNlUGFyZW50c0xpc3QgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVBhcmVudHNHZXQoCiAgICAgICAgU2VydmljZUlEID0+IDEyMywKICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICk7CgogICAgcmV0dXJucwoKICAgICRTZXJ2aWNlUGFyZW50c0xpc3QgPSBbIDEsIDIsIC4uLl07Cgo9Y3V0CgpzdWIgU2VydmljZVBhcmVudHNHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICROZWVkZWQgKHF3KFVzZXJJRCBTZXJ2aWNlSUQpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyROZWVkZWR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAnTmVlZCAkTmVlZGVkIScsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyByZWFkIGNhY2hlCiAgICBteSAkQ2FjaGVLZXkgPSAnU2VydmljZVBhcmVudHNHZXQ6OicgLiAkUGFyYW17U2VydmljZUlEfTsKICAgIG15ICRDYWNoZSAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwogICAgcmV0dXJuICRDYWNoZSBpZiByZWYgJENhY2hlOwoKICAgICMgZ2V0IHRoZSBsaXN0IG9mIHNlcnZpY2VzCiAgICBteSAkU2VydmljZUxpc3QgPSAkU2VsZi0+U2VydmljZUxpc3RHZXQoCiAgICAgICAgVmFsaWQgID0+IDAsCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgICMgZ2V0IGEgc2VydmljZSBsb29rdXAgdGFibGUKICAgIG15ICVTZXJ2aWNlTG9va3VwOwogICAgU0VSVklDRToKICAgIGZvciBteSAkU2VydmljZURhdGEgKCBAeyRTZXJ2aWNlTGlzdH0gKSB7CiAgICAgICAgbmV4dCBTRVJWSUNFIGlmICEkU2VydmljZURhdGE7CiAgICAgICAgbmV4dCBTRVJWSUNFIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkU2VydmljZURhdGEpOwogICAgICAgIG5leHQgU0VSVklDRSBpZiAhJFNlcnZpY2VEYXRhLT57U2VydmljZUlEfTsKCiAgICAgICAgJFNlcnZpY2VMb29rdXB7ICRTZXJ2aWNlRGF0YS0+e1NlcnZpY2VJRH0gfSA9ICRTZXJ2aWNlRGF0YTsKICAgIH0KCiAgICAjIGV4aXQgaWYgU2VydmljZUlEIGlzIGludmFsaWQKICAgIHJldHVybiBpZiAhJFNlcnZpY2VMb29rdXB7ICRQYXJhbXtTZXJ2aWNlSUR9IH07CgogICAgIyB0byBzdG9yZSB0aGUgcmV0dXJuIHN0cnVjdHVyZQogICAgbXkgQFNlcnZpY2VQYXJlbnRzOwoKICAgICMgZ2V0IHRoZSBTZXJ2aWNlUGFyZW50SUQgZnJvbSB0aGUgcmVxdWVzdGVkIHNlcnZpY2UKICAgIG15ICRTZXJ2aWNlUGFyZW50SUQgPSAkU2VydmljZUxvb2t1cHsgJFBhcmFte1NlcnZpY2VJRH0gfS0+e1BhcmVudElEfTsKCiAgICAjIGdldCBhbGwgcGFydGVudHMgZm9yIHRoZSByZXF1ZXN0ZWQgc2VydmljZQogICAgd2hpbGUgKCRTZXJ2aWNlUGFyZW50SUQpIHsKCiAgICAgICAgIyBhZGQgc2VydmljZSBwYXJlbnQgSUQgdG8gdGhlIHJldHVybiBzdHJ1Y3R1cmUKICAgICAgICBwdXNoIEBTZXJ2aWNlUGFyZW50cywgJFNlcnZpY2VQYXJlbnRJRDsKCiAgICAgICAgIyBzZXQgbmV4dCBTZXJ2aWNlUGFyZW50SUQgKHRoZSBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgcGFyZW50KQogICAgICAgICRTZXJ2aWNlUGFyZW50SUQgPSAkU2VydmljZUxvb2t1cHskU2VydmljZVBhcmVudElEfS0+e1BhcmVudElEfSB8fCAwOwoKICAgIH0KCiAgICAjIHJldmVyc2UgdGhlIHJldHVybiBhcnJheSB0byBnZXQgdGhlIGxpc3Qgb3JkZXJlZCBmcm9tIG9sZCB0byB5b3VuZyAoaW4gcGFyZW50IGNvbnRleHQpCiAgICBteSBARGF0YSA9IHJldmVyc2UgQFNlcnZpY2VQYXJlbnRzOwoKICAgICMgc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXEBEYXRhLAogICAgKTsKCiAgICByZXR1cm4gXEBEYXRhOwp9Cgo9aXRlbSBHZXRBbGxDdXN0b21TZXJ2aWNlcygpCgpnZXQgYWxsIGN1c3RvbSBzZXJ2aWNlcyBvZiBvbmUgdXNlcgoKICAgIG15IEBTZXJ2aWNlcyA9ICRTZXJ2aWNlT2JqZWN0LT5HZXRBbGxDdXN0b21TZXJ2aWNlcyggVXNlcklEID0+IDEyMyApOwoKPWN1dAoKc3ViIEdldEFsbEN1c3RvbVNlcnZpY2VzIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKQogICAgICAgICAgICAtPkxvZyggUHJpb3JpdHkgPT4gJ2Vycm9yJywgTWVzc2FnZSA9PiAnTmVlZCBVc2VySUQhJyApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGNoZWNrIGNhY2hlCiAgICBteSAkQ2FjaGVLZXkgPSAnR2V0QWxsQ3VzdG9tU2VydmljZXM6OicgLiAkUGFyYW17VXNlcklEfTsKICAgIG15ICRDYWNoZSAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpDYWNoZScpLT5HZXQoCiAgICAgICAgVHlwZSA9PiAkU2VsZi0+e0NhY2hlVHlwZX0sCiAgICAgICAgS2V5ICA9PiAkQ2FjaGVLZXksCiAgICApOwoKICAgIHJldHVybiBAeyRDYWNoZX0gaWYgJENhY2hlOwoKICAgICMgc2VhcmNoIGFsbCBjdXN0b20gc2VydmljZXMKICAgIHJldHVybiBpZiAhJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICcKICAgICAgICAgICAgU0VMRUNUIHNlcnZpY2VfaWQKICAgICAgICAgICAgRlJPTSBwZXJzb25hbF9zZXJ2aWNlcwogICAgICAgICAgICBXSEVSRSB1c2VyX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17VXNlcklEfSBdLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15IEBTZXJ2aWNlSURzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBTZXJ2aWNlSURzLCAkUm93WzBdOwogICAgfQoKICAgICMgc2V0IGNhY2hlCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q2FjaGUnKS0+U2V0KAogICAgICAgIFR5cGUgID0+ICRTZWxmLT57Q2FjaGVUeXBlfSwKICAgICAgICBUVEwgICA9PiAkU2VsZi0+e0NhY2hlVFRMfSwKICAgICAgICBLZXkgICA9PiAkQ2FjaGVLZXksCiAgICAgICAgVmFsdWUgPT4gXEBTZXJ2aWNlSURzLAogICAgKTsKCiAgICByZXR1cm4gQFNlcnZpY2VJRHM7Cn0KIyAtLS0KIyBJVFNNCiMgLS0tCgo9aXRlbSBfU2VydmljZUdldEN1cnJlbnRJbmNpZGVudFN0YXRlKCkKClJldHVybnMgYSBoYXNoIHdpdGggdGhlIG9yaWdpbmFsIHNlcnZpY2UgZGF0YSwKZW5oYW5jZWQgd2l0aCBhZGRpdGlvbmFsIHNlcnZpY2UgZGF0YSBhYm91dCB0aGUgY3VycmVudCBpbmNpZGVudCBzdGF0ZSwKYmFzZWQgb24gY29uZmlndXJhdGlvbiBpdGVtcyBhbmQgb3RoZXIgc2VydmljZXMuCgogICAgJVNlcnZpY2VEYXRhID0gJFNlcnZpY2VPYmplY3QtPl9TZXJ2aWNlR2V0Q3VycmVudEluY2lkZW50U3RhdGUoCiAgICAgICAgU2VydmljZURhdGEgPT4gXCVTZXJ2aWNlRGF0YSwKICAgICAgICBQcmVmZXJlbmNlcyA9PiBcJVByZWZlcmVuY2VzLAogICAgICAgIFVzZXJJRCAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIF9TZXJ2aWNlR2V0Q3VycmVudEluY2lkZW50U3RhdGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU2VydmljZURhdGEgUHJlZmVyZW5jZXMgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU2VydmljZURhdGEgUHJlZmVyZW5jZXMpKSB7CiAgICAgICAgaWYgKCByZWYgJFBhcmFteyRBcmd1bWVudH0gbmUgJ0hBU0gnICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiJEFyZ3VtZW50IG11c3QgYmUgYSBoYXNoIHJlZmVyZW5jZSEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgbWFrZSBsb2NhbCBjb3BpZXMKICAgIG15ICVTZXJ2aWNlRGF0YSA9ICV7ICRQYXJhbXtTZXJ2aWNlRGF0YX0gfTsKICAgIG15ICVQcmVmZXJlbmNlcyA9ICV7ICRQYXJhbXtQcmVmZXJlbmNlc30gfTsKCiAgICAjIGdldCBzZXJ2aWNlIHR5cGUgbGlzdAogICAgbXkgJFNlcnZpY2VUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6U2VydmljZTo6VHlwZScsCiAgICApOwogICAgJFNlcnZpY2VEYXRhe1R5cGV9ID0gJFNlcnZpY2VUeXBlTGlzdC0+eyAkU2VydmljZURhdGF7VHlwZUlEfSB9IHx8ICcnOwoKICAgICMgc2V0IGRlZmF1bHQgaW5jaWRlbnQgc3RhdGUgdHlwZQogICAgJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZVR5cGV9ID0gJ29wZXJhdGlvbmFsJzsKCiAgICAjIGdldCBJVFNNIG1vZHVsZSBkaXJlY3RvcnkKICAgIG15ICRDb25maWdJdGVtTW9kdWxlID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKS0+R2V0KCdIb21lJykgLiAnL0tlcm5lbC9TeXN0ZW0vSVRTTUNvbmZpZ0l0ZW0ucG0nOwoKICAgICMgY2hlY2sgaWYgSVRTTUNvbmZpZ3VyYXRpb25NYW5hZ2VtZW50IHBhY2thZ2UgaXMgaW5zdGFsbGVkCiAgICBpZiAoIC1lICRDb25maWdJdGVtTW9kdWxlICkgewoKICAgICAgICAjIGNoZWNrIGlmIGEgcHJlZmVyZW5jZSBzZXR0aW5nIGZvciBDdXJJbmNpU3RhdGVUeXBlRnJvbUNJcyBleGlzdHMKICAgICAgICBpZiAoICRQcmVmZXJlbmNlc3tDdXJJbmNpU3RhdGVUeXBlRnJvbUNJc30gKSB7CgogICAgICAgICAgICAjIHNldCBkZWZhdWx0IGluY2lkZW50IHN0YXRlIHR5cGUgZnJvbSBzZXJ2aWNlIHByZWZlcmVuY2VzICdDdXJJbmNpU3RhdGVUeXBlRnJvbUNJcycKICAgICAgICAgICAgJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZVR5cGV9ID0gJFByZWZlcmVuY2Vze0N1ckluY2lTdGF0ZVR5cGVGcm9tQ0lzfTsKICAgICAgICB9CgogICAgICAgICMgc2V0IHRoZSBwcmVmZXJlbmNlcyBzZXR0aW5nIGZvciBDdXJJbmNpU3RhdGVUeXBlRnJvbUNJcwogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBnZXQgaW5jaWRlbnQgbGluayB0eXBlcyBhbmQgZGlyZWN0aW9ucyBmcm9tIGNvbmZpZwogICAgICAgICAgICBteSAkSW5jaWRlbnRMaW5rVHlwZURpcmVjdGlvbiA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnSVRTTTo6Q29yZTo6SW5jaWRlbnRMaW5rVHlwZURpcmVjdGlvbicpOwoKICAgICAgICAgICAgIyB0byBzdG9yZSBhbGwgbGlua2VkIGNvbmZpZyBpdGVtIGlkcyBvZiB0aGlzIHNlcnZpY2UgKGZvciBhbGwgY29uZmlndXJlZCBsaW5rIHR5cGVzKQogICAgICAgICAgICBteSAlQWxsTGlua2VkQ29uZmlnSXRlbUlEczsKCiAgICAgICAgICAgIExJTktUWVBFOgogICAgICAgICAgICBmb3IgbXkgJExpbmtUeXBlICggc29ydCBrZXlzICV7ICRJbmNpZGVudExpbmtUeXBlRGlyZWN0aW9uIH0gKSB7CgogICAgICAgICAgICAgICAgIyBnZXQgdGhlIGRpcmVjdGlvbgogICAgICAgICAgICAgICAgbXkgJExpbmtEaXJlY3Rpb24gPSAkSW5jaWRlbnRMaW5rVHlwZURpcmVjdGlvbi0+eyRMaW5rVHlwZX07CgogICAgICAgICAgICAgICAgIyByZXZlcnNlIHRoZSBsaW5rIGRpcmVjdGlvbiwgYXMgdGhpcyBpcyB0aGUgcGVyc3BlY3RpdmUgZnJvbSB0aGUgc2VydmljZQogICAgICAgICAgICAgICAgIyBubyBuZWVkIHRvIHJldmVyc2UgaWYgZGlyZWN0aW9uIGlzICdCb3RoJwogICAgICAgICAgICAgICAgaWYgKCAkTGlua0RpcmVjdGlvbiBlcSAnU291cmNlJyApIHsKICAgICAgICAgICAgICAgICAgICAkTGlua0RpcmVjdGlvbiA9ICdUYXJnZXQnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZWxzaWYgKCAkTGlua0RpcmVjdGlvbiBlcSAnVGFyZ2V0JyApIHsKICAgICAgICAgICAgICAgICAgICAkTGlua0RpcmVjdGlvbiA9ICdTb3VyY2UnOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgZmluZCBhbGwgbGlua2VkIGNvbmZpZyBpdGVtcyB3aXRoIHRoaXMgbGlua3R5cGUgYW5kIGRpcmVjdGlvbgogICAgICAgICAgICAgICAgbXkgJUxpbmtlZENvbmZpZ0l0ZW1JRHMgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TGlua09iamVjdCcpLT5MaW5rS2V5TGlzdFdpdGhEYXRhKAogICAgICAgICAgICAgICAgICAgIE9iamVjdDEgICA9PiAnU2VydmljZScsCiAgICAgICAgICAgICAgICAgICAgS2V5MSAgICAgID0+ICRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9LAogICAgICAgICAgICAgICAgICAgIE9iamVjdDIgICA9PiAnSVRTTUNvbmZpZ0l0ZW0nLAogICAgICAgICAgICAgICAgICAgIFN0YXRlICAgICA9PiAnVmFsaWQnLAogICAgICAgICAgICAgICAgICAgIFR5cGUgICAgICA9PiAkTGlua1R5cGUsCiAgICAgICAgICAgICAgICAgICAgRGlyZWN0aW9uID0+ICRMaW5rRGlyZWN0aW9uLAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHJlbWVtYmVyIHRoZSBsaW5rZWQgY29uZmlnIGl0ZW1zCiAgICAgICAgICAgICAgICAlQWxsTGlua2VkQ29uZmlnSXRlbUlEcyA9ICggJUFsbExpbmtlZENvbmZpZ0l0ZW1JRHMsICVMaW5rZWRDb25maWdJdGVtSURzKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBpbnZlc3RpZ2F0ZSB0aGUgY3VycmVudCBpbmNpZGVudCBzdGF0ZSBvZiBlYWNoIGNvbmZpZyBpdGVtCiAgICAgICAgICAgIENPTkZJR0lURU1JRDoKICAgICAgICAgICAgZm9yIG15ICRDb25maWdJdGVtSUQgKCBzb3J0IGtleXMgJUFsbExpbmtlZENvbmZpZ0l0ZW1JRHMgKSB7CgogICAgICAgICAgICAgICAgIyBleHRyYWN0IGNvbmZpZyBpdGVtIGRhdGEKICAgICAgICAgICAgICAgIG15ICRDb25maWdJdGVtRGF0YSA9ICRBbGxMaW5rZWRDb25maWdJdGVtSURzeyRDb25maWdJdGVtSUR9OwoKICAgICAgICAgICAgICAgIG5leHQgQ09ORklHSVRFTUlEIGlmICRDb25maWdJdGVtRGF0YS0+e0N1ckRlcGxTdGF0ZVR5cGV9IG5lICdwcm9kdWN0aXZlJzsKICAgICAgICAgICAgICAgIG5leHQgQ09ORklHSVRFTUlEIGlmICRDb25maWdJdGVtRGF0YS0+e0N1ckluY2lTdGF0ZVR5cGV9IGVxICdvcGVyYXRpb25hbCc7CgogICAgICAgICAgICAgICAgIyBjaGVjayBpZiBzZXJ2aWNlIG11c3QgYmUgc2V0IHRvICd3YXJuaW5nJwogICAgICAgICAgICAgICAgaWYgKCAkQ29uZmlnSXRlbURhdGEtPntDdXJJbmNpU3RhdGVUeXBlfSBlcSAnd2FybmluZycgKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZVR5cGV9ID0gJ3dhcm5pbmcnOwogICAgICAgICAgICAgICAgICAgIG5leHQgQ09ORklHSVRFTUlEOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICMgY2hlY2sgaWYgc2VydmljZSBtdXN0IGJlIHNldCB0byAnaW5jaWRlbnQnCiAgICAgICAgICAgICAgICBpZiAoICRDb25maWdJdGVtRGF0YS0+e0N1ckluY2lTdGF0ZVR5cGV9IGVxICdpbmNpZGVudCcgKSB7CiAgICAgICAgICAgICAgICAgICAgJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZVR5cGV9ID0gJ2luY2lkZW50JzsKICAgICAgICAgICAgICAgICAgICBsYXN0IENPTkZJR0lURU1JRDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyB1cGRhdGUgdGhlIGN1cnJlbnQgaW5jaWRlbnQgc3RhdGUgdHlwZSBmcm9tIENJcyBvZiB0aGUgc2VydmljZQogICAgICAgICAgICAkU2VsZi0+U2VydmljZVByZWZlcmVuY2VzU2V0KAogICAgICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlRGF0YXtTZXJ2aWNlSUR9LAogICAgICAgICAgICAgICAgS2V5ICAgICAgID0+ICdDdXJJbmNpU3RhdGVUeXBlRnJvbUNJcycsCiAgICAgICAgICAgICAgICBWYWx1ZSAgICAgPT4gJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZVR5cGV9LAogICAgICAgICAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIHNldCB0aGUgcHJlZmVyZW5jZXMgbG9jYWxseQogICAgICAgICAgICAkUHJlZmVyZW5jZXN7Q3VySW5jaVN0YXRlVHlwZUZyb21DSXN9ID0gJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZVR5cGV9OwogICAgICAgIH0KICAgIH0KCiAgICAjIGludmVzdGlnYXRlIHRoZSBzdGF0ZSBvZiBhbGwgY2hpbGQgc2VydmljZXMKICAgIGlmICggJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZVR5cGV9IGVxICdvcGVyYXRpb25hbCcgKSB7CgogICAgICAgICMgY3JlYXRlIHRoZSB2YWxpZCBzdHJpbmcKICAgICAgICBteSAkVmFsaWRJRFN0cmluZyA9IGpvaW4gcXssIH0sICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZElEc0dldCgpOwoKICAgICAgICAjIHByZXBhcmUgbmFtZQogICAgICAgIG15ICROYW1lID0gJFNlcnZpY2VEYXRhe05hbWV9OwogICAgICAgICROYW1lID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCAkTmFtZSwgJ0xpa2UnICk7CgogICAgICAgICMgZ2V0IGxpc3Qgb2YgYWxsIHZhbGlkIGNoaWxkcwogICAgICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgPT4gIlNFTEVDVCBpZCwgbmFtZSBGUk9NIHNlcnZpY2UgIgogICAgICAgICAgICAgICAgLiAiV0hFUkUgbmFtZSBMSUtFICciIC4gJE5hbWUgLiAiOjolJyAiCiAgICAgICAgICAgICAgICAuICJBTkQgdmFsaWRfaWQgSU4gKCIgLiAkVmFsaWRJRFN0cmluZyAuICIpIiwKICAgICAgICApOwoKICAgICAgICAjIGZpbmQgbGVuZ3RoIG9mIGNoaWxkcyBwcmVmaXgKICAgICAgICBteSAkUHJlZml4TGVuZ3RoID0gbGVuZ3RoICIkU2VydmljZURhdGF7TmFtZX06OiI7CgogICAgICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgICAgIG15IEBDaGlsZElEczsKICAgICAgICBST1c6CiAgICAgICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKCiAgICAgICAgICAgICMgZXh0cmFjdCBjaGlsZCBwYXJ0CiAgICAgICAgICAgIG15ICRDaGlsZFBhcnQgPSBzdWJzdHIgJFJvd1sxXSwgJFByZWZpeExlbmd0aDsKCiAgICAgICAgICAgIG5leHQgUk9XIGlmICRDaGlsZFBhcnQgPX4gbXsgOjogfXhtczsKCiAgICAgICAgICAgIHB1c2ggQENoaWxkSURzLCAkUm93WzBdOwogICAgICAgIH0KCiAgICAgICAgU0VSVklDRUlEOgogICAgICAgIGZvciBteSAkU2VydmljZUlEICggQENoaWxkSURzICkgewoKICAgICAgICAgICAgIyBnZXQgZGF0YSBvZiBjaGlsZCBzZXJ2aWNlCiAgICAgICAgICAgIG15ICVDaGlsZFNlcnZpY2VEYXRhID0gJFNlbGYtPlNlcnZpY2VHZXQoCiAgICAgICAgICAgICAgICBTZXJ2aWNlSUQgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRQYXJhbXtVc2VySUR9LAogICAgICAgICAgICAgICAgSW5jaWRlbnRTdGF0ZSA9PiAxLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgbmV4dCBTRVJWSUNFSUQgaWYgJENoaWxkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlVHlwZX0gZXEgJ29wZXJhdGlvbmFsJzsKCiAgICAgICAgICAgICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSA9ICd3YXJuaW5nJzsKICAgICAgICAgICAgbGFzdCBTRVJWSUNFSUQ7CiAgICAgICAgfQogICAgfQoKICAgICMgZGVmaW5lIGRlZmF1bHQgaW5jaWRlbnQgc3RhdGVzCiAgICBteSAlRGVmYXVsdEluY2lTdGF0ZXMgPSAoCiAgICAgICAgb3BlcmF0aW9uYWwgPT4gJ09wZXJhdGlvbmFsJywKICAgICAgICB3YXJuaW5nICAgICA9PiAnV2FybmluZycsCiAgICAgICAgaW5jaWRlbnQgICAgPT4gJ0luY2lkZW50JywKICAgICk7CgogICAgIyBnZXQgdGhlIGluY2lkZW50IHN0YXRlIGxpc3Qgb2YgdGhpcyB0eXBlCiAgICBteSAkSW5jaVN0YXRlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyAgICAgICAgID0+ICdJVFNNOjpDb3JlOjpJbmNpZGVudFN0YXRlJywKICAgICAgICBQcmVmZXJlbmNlcyAgID0+IHsKICAgICAgICAgICAgRnVuY3Rpb25hbGl0eSA9PiAkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlVHlwZX0sCiAgICAgICAgfSwKICAgICk7CgogICAgbXkgJVJldmVyc2VJbmNpU3RhdGVMaXN0ID0gcmV2ZXJzZSAleyAkSW5jaVN0YXRlTGlzdCB9OwogICAgJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZUlEfQogICAgICAgID0gJFJldmVyc2VJbmNpU3RhdGVMaXN0eyAkRGVmYXVsdEluY2lTdGF0ZXN7ICRTZXJ2aWNlRGF0YXtDdXJJbmNpU3RhdGVUeXBlfSB9IH07CgogICAgIyBmYWxsYmFjayBpZiB0aGUgZGVmYXVsdCBpbmNpZGVudCBzdGF0ZSBpcyBkZWFjdGl2YXRlZAogICAgaWYgKCAhJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZUlEfSApIHsKICAgICAgICBteSBAU29ydGVkSW5jaUxpc3QgPSBzb3J0IGtleXMgJXsgJEluY2lTdGF0ZUxpc3QgfTsKICAgICAgICAkU2VydmljZURhdGF7Q3VySW5jaVN0YXRlSUR9ID0gJFNvcnRlZEluY2lMaXN0WzBdOwogICAgfQoKICAgICMgZ2V0IGluY2lkZW50IHN0YXRlIGZ1bmN0aW9uYWxpdHkKICAgIG15ICRJbmNpU3RhdGUgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUdldCgKICAgICAgICBJdGVtSUQgPT4gJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZUlEfSwKICAgICk7CgogICAgJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZX0gICAgID0gJEluY2lTdGF0ZS0+e05hbWV9OwogICAgJFNlcnZpY2VEYXRhe0N1ckluY2lTdGF0ZVR5cGV9ID0gJEluY2lTdGF0ZS0+e0Z1bmN0aW9uYWxpdHl9OwoKICAgICVTZXJ2aWNlRGF0YSA9ICglU2VydmljZURhdGEsICVQcmVmZXJlbmNlcyk7CgogICAgcmV0dXJuICVTZXJ2aWNlRGF0YTsKfQoKIyAtLS0KCjE7Cgo9YmFjawoKPWhlYWQxIFRFUk1TIEFORCBDT05ESVRJT05TCgpUaGlzIHNvZnR3YXJlIGlzIHBhcnQgb2YgdGhlIE9UUlMgcHJvamVjdCAoTDxodHRwOi8vb3Rycy5vcmcvPikuCgpUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQp0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBMPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dD4uCgo9Y3V0Cg==
IyAtLQojIEtlcm5lbC9TeXN0ZW0vU0xBLnBtIC0gYWxsIHNsYSBmdW5jdGlvbnMKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyAkb3JpZ2luOiBodHRwczovL2dpdGh1Yi5jb20vT1RSUy9vdHJzL2Jsb2IvMGNkMjJkZDMzY2RkNTFkNmZhYzRjOTk3YzJhZWI2OGE4ZTg5OTEzNC9LZXJuZWwvU3lzdGVtL1NMQS5wbQojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6U0xBOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKb3VyIEBPYmplY3REZXBlbmRlbmNpZXMgPSAoCiAgICAnS2VybmVsOjpDb25maWcnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpDaGVja0l0ZW0nLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEQicsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycsCiMgLS0tCiAgICAnS2VybmVsOjpTeXN0ZW06OkxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06OlZhbGlkJywKKTsKCj1oZWFkMSBOQU1FCgpLZXJuZWw6OlN5c3RlbTo6U0xBIC0gc2xhIGxpYgoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgc2xhIGZ1bmN0aW9ucy4KCj1oZWFkMSBQVUJMSUMgSU5URVJGQUNFCgo9b3ZlciA0Cgo9Y3V0Cgo9aXRlbSBuZXcoKQoKY3JlYXRlIGFuIG9iamVjdC4gRG8gbm90IHVzZSBpdCBkaXJlY3RseSwgaW5zdGVhZCB1c2U6CgogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyOwogICAgbG9jYWwgJEtlcm5lbDo6T00gPSBLZXJuZWw6OlN5c3RlbTo6T2JqZWN0TWFuYWdlci0+bmV3KCk7CiAgICBteSAkU0xBT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNMQScpOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGdldCBjb25maWd1cmVkIHByZWZlcmVuY2VzIG9iamVjdAogICAgbXkgJEdlbmVyYXRvck1vZHVsZSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyktPkdldCgnU0xBOjpQcmVmZXJlbmNlc01vZHVsZScpCiAgICAgICAgfHwgJ0tlcm5lbDo6U3lzdGVtOjpTTEE6OlByZWZlcmVuY2VzREInOwoKICAgICMgZ2V0IHByZWZlcmVuY2VzIG9iamVjdAogICAgJFNlbGYtPntQcmVmZXJlbmNlc09iamVjdH0gPSAkS2VybmVsOjpPTS0+R2V0KCRHZW5lcmF0b3JNb2R1bGUpOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gU0xBTGlzdCgpCgpyZXR1cm4gYSBoYXNoIGxpc3Qgb2Ygc2xhcwoKICAgIG15ICVTTEFMaXN0ID0gJFNMQU9iamVjdC0+U0xBTGlzdCgKICAgICAgICBTZXJ2aWNlSUQgPT4gMSwgICMgKG9wdGlvbmFsKQogICAgICAgIFZhbGlkICAgICA9PiAwLCAgIyAob3B0aW9uYWwpIGRlZmF1bHQgMSAoMHwxKQogICAgICAgIFVzZXJJRCAgICA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBTTEFMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtVc2VySUR9ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKQogICAgICAgICAgICAtPkxvZyggUHJpb3JpdHkgPT4gJ2Vycm9yJywgTWVzc2FnZSA9PiAnTmVlZCBVc2VySUQhJyApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNldCB2YWxpZCBwYXJhbQogICAgaWYgKCAhZGVmaW5lZCAkUGFyYW17VmFsaWR9ICkgewogICAgICAgICRQYXJhbXtWYWxpZH0gPSAxOwogICAgfQoKICAgICMgZ2V0IGRhdGFiYXNlIG9iamVjdAogICAgbXkgJERCT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyk7CgogICAgIyBhZGQgU2VydmljZUlECiAgICBteSAlU1FMVGFibGU7CiAgICAkU1FMVGFibGV7c2xhfSA9ICdzbGEgcyc7CiAgICBteSBAU1FMV2hlcmU7CiAgICBpZiAoICRQYXJhbXtTZXJ2aWNlSUR9ICkgewoKICAgICAgICAjIHF1b3RlCiAgICAgICAgJFBhcmFte1NlcnZpY2VJRH0gPSAkREJPYmplY3QtPlF1b3RlKCAkUGFyYW17U2VydmljZUlEfSwgJ0ludGVnZXInICk7CgogICAgICAgICRTUUxUYWJsZXtzZXJ2aWNlfSA9ICdzZXJ2aWNlX3NsYSByJzsKICAgICAgICBwdXNoIEBTUUxXaGVyZSwgInMuaWQgPSByLnNsYV9pZCBBTkQgci5zZXJ2aWNlX2lkID0gJFBhcmFte1NlcnZpY2VJRH0iOwogICAgfQoKICAgICMgYWRkIHZhbGlkIHBhcnQKICAgIGlmICggJFBhcmFte1ZhbGlkfSApIHsKCiAgICAgICAgIyBnZXQgdmFsaWQgb2JqZWN0CiAgICAgICAgbXkgJFZhbGlkT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyk7CgogICAgICAgICMgY3JlYXRlIHRoZSB2YWxpZCBsaXN0CiAgICAgICAgbXkgJFZhbGlkSURzID0gam9pbiAnLCAnLCAkVmFsaWRPYmplY3QtPlZhbGlkSURzR2V0KCk7CgogICAgICAgIHB1c2ggQFNRTFdoZXJlLCAicy52YWxpZF9pZCBJTiAoICRWYWxpZElEcyApIjsKICAgIH0KCiAgICAjIGNyZWF0ZSB0aGUgdGFibGUgYW5kIHdoZXJlIHN0cmluZ3MKICAgIG15ICRUYWJsZVN0cmluZyA9IGpvaW4gcXssIH0sIHZhbHVlcyAlU1FMVGFibGU7CiAgICBteSAkV2hlcmVTdHJpbmcgPSBAU1FMV2hlcmUgPyAnIFdIRVJFICcgLiBqb2luIHF7IEFORCB9LCBAU1FMV2hlcmUgOiAnJzsKCiAgICAjIGFzayBkYXRhYmFzZQogICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAiU0VMRUNUIHMuaWQsIHMubmFtZSBGUk9NICRUYWJsZVN0cmluZyAkV2hlcmVTdHJpbmciLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICVTTEFMaXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFNMQUxpc3R7ICRSb3dbMF0gfSA9ICRSb3dbMV07CiAgICB9CgogICAgcmV0dXJuICVTTEFMaXN0Owp9Cgo9aXRlbSBTTEFHZXQoKQoKUmV0dXJucyBhbiBTTEEgYXMgYSBoYXNoCgogICAgbXkgJVNMQURhdGEgPSAkU0xBT2JqZWN0LT5TTEFHZXQoCiAgICAgICAgU0xBSUQgID0+IDEyMywKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgpSZXR1cm5zOgoKICAgIG15ICVTTEFEYXRhID0gKAogICAgICAgICAgJ1NMQUlEJyAgICAgICAgICAgICAgID0+ICcyJywKICAgICAgICAgICdOYW1lJyAgICAgICAgICAgICAgICA9PiAnRGlhbW9uZCBQYWNpZmljIC0gUzInLAogICAgICAgICAgJ0NhbGVuZGFyJyAgICAgICAgICAgID0+ICcyJywKICAgICAgICAgICdGaXJzdFJlc3BvbnNlVGltZScgICA9PiAnNjAnLCAgIyBpbiBtaW51dGVzIGFjY29yZGluZyB0byBidXNpbmVzcyBob3VycwogICAgICAgICAgJ0ZpcnN0UmVzcG9uc2VOb3RpZnknID0+ICc3MCcsICAjIGluIHBlcmNlbnQKICAgICAgICAgICdVcGRhdGVUaW1lJyAgICAgICAgICA9PiAnMzYwJywgIyBpbiBtaW51dGVzIGFjY29yZGluZyB0byBidXNpbmVzcyBob3VycwogICAgICAgICAgJ1VwZGF0ZU5vdGlmeScgICAgICAgID0+ICc3MCcsICAjIGluIHBlcmNlbnQKICAgICAgICAgICdTb2x1dGlvblRpbWUnICAgICAgICA9PiAnOTYwJywgIyBpbiBtaW51dGVzIGFjY29yZGluZyB0byBidXNpbmVzcyBob3VycwogICAgICAgICAgJ1NvbHV0aW9uTm90aWZ5JyAgICAgID0+ICc4MCcsICAjIGluIHBlcmNlbnQKICAgICAgICAgICdTZXJ2aWNlSURzJyAgICAgICAgICA9PiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnNCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc3JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzgnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICdWYWxpZElEJyAgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAnQ29tbWVudCcgICAgICAgICAgICAgPT4gJ1NvbWUgQ29tbWVudCcsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgJ1R5cGVJRCcgICAgICAgICAgICAgICAgICA9PiAnNScsCiAgICAgICAgICAnVHlwZScgICAgICAgICAgICAgICAgICAgID0+ICdJbmNpZGVudCcsCiAgICAgICAgICAnTWluVGltZUJldHdlZW5JbmNpZGVudHMnID0+ICc0MDAwJywgICMgaW4gbWludXRlcwojIC0tLQogICAgICAgICAgJ0NyZWF0ZUJ5JyAgICAgICAgICAgID0+ICc5MycsCiAgICAgICAgICAnQ3JlYXRlVGltZScgICAgICAgICAgPT4gJzIwMTEtMDYtMTYgMjI6NTQ6NTQnLAogICAgICAgICAgJ0NoYW5nZUJ5JyAgICAgICAgICAgID0+ICc5MycsCiAgICAgICAgICAnQ2hhbmdlVGltZScgICAgICAgICAgPT4gJzIwMTEtMDYtMTYgMjI6NTQ6NTQnLAogICAgKTsKCj1jdXQKCnN1YiBTTEFHZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoU0xBSUQgVXNlcklEKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJykKICAgICAgICAgICAgICAgIC0+TG9nKCBQcmlvcml0eSA9PiAnZXJyb3InLCBNZXNzYWdlID0+ICJOZWVkICRBcmd1bWVudCEiICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBpZiByZXN1bHQgaXMgYWxyZWFkeSBjYWNoZWQKICAgIG15ICRDYWNoZUtleSA9ICdDYWNoZTo6U0xBR2V0OjonIC4gJFBhcmFte1NMQUlEfTsKICAgIGlmICggJFNlbGYtPnskQ2FjaGVLZXl9ICkgewogICAgICAgIHJldHVybiAleyAkU2VsZi0+eyRDYWNoZUtleX0gfTsKICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgICMgZ2V0IHNsYSBmcm9tIGRiCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgaWQsIG5hbWUsIGNhbGVuZGFyX25hbWUsIGZpcnN0X3Jlc3BvbnNlX3RpbWUsIGZpcnN0X3Jlc3BvbnNlX25vdGlmeSwgJwogICAgICAgICAgICAuICd1cGRhdGVfdGltZSwgdXBkYXRlX25vdGlmeSwgc29sdXRpb25fdGltZSwgc29sdXRpb25fbm90aWZ5LCAnCiAgICAgICAgICAgIC4gJ3ZhbGlkX2lkLCBjb21tZW50cywgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSAnCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICAuICcsIHR5cGVfaWQsIG1pbl90aW1lX2JldF9pbmNpZGVudHMgJwojIC0tLQogICAgICAgICAgICAuICdGUk9NIHNsYSBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte1NMQUlEfSwKICAgICAgICBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJVNMQURhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkU0xBRGF0YXtTTEFJRH0gICAgICAgICAgICAgICA9ICRSb3dbMF07CiAgICAgICAgJFNMQURhdGF7TmFtZX0gICAgICAgICAgICAgICAgPSAkUm93WzFdOwogICAgICAgICRTTEFEYXRhe0NhbGVuZGFyfSAgICAgICAgICAgID0gJFJvd1syXSB8fCAnJzsKICAgICAgICAkU0xBRGF0YXtGaXJzdFJlc3BvbnNlVGltZX0gICA9ICRSb3dbM107CiAgICAgICAgJFNMQURhdGF7Rmlyc3RSZXNwb25zZU5vdGlmeX0gPSAkUm93WzRdOwogICAgICAgICRTTEFEYXRhe1VwZGF0ZVRpbWV9ICAgICAgICAgID0gJFJvd1s1XTsKICAgICAgICAkU0xBRGF0YXtVcGRhdGVOb3RpZnl9ICAgICAgICA9ICRSb3dbNl07CiAgICAgICAgJFNMQURhdGF7U29sdXRpb25UaW1lfSAgICAgICAgPSAkUm93WzddOwogICAgICAgICRTTEFEYXRhe1NvbHV0aW9uTm90aWZ5fSAgICAgID0gJFJvd1s4XTsKICAgICAgICAkU0xBRGF0YXtWYWxpZElEfSAgICAgICAgICAgICA9ICRSb3dbOV07CiAgICAgICAgJFNMQURhdGF7Q29tbWVudH0gICAgICAgICAgICAgPSAkUm93WzEwXSB8fCAnJzsKICAgICAgICAkU0xBRGF0YXtDcmVhdGVUaW1lfSAgICAgICAgICA9ICRSb3dbMTFdOwogICAgICAgICRTTEFEYXRhe0NyZWF0ZUJ5fSAgICAgICAgICAgID0gJFJvd1sxMl07CiAgICAgICAgJFNMQURhdGF7Q2hhbmdlVGltZX0gICAgICAgICAgPSAkUm93WzEzXTsKICAgICAgICAkU0xBRGF0YXtDaGFuZ2VCeX0gICAgICAgICAgICA9ICRSb3dbMTRdOwojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAkU0xBRGF0YXtUeXBlSUR9ICAgICAgICAgICAgICAgICAgPSAkUm93WzE1XTsKICAgICAgICAkU0xBRGF0YXtNaW5UaW1lQmV0d2VlbkluY2lkZW50c30gPSAkUm93WzE2XSB8fCAwOwojIC0tLQogICAgfQoKICAgICMgY2hlY2sgc2xhCiAgICBpZiAoICEkU0xBRGF0YXtTTEFJRH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJObyBzdWNoIFNMQUlEICgkUGFyYW17U0xBSUR9KSEiLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQojIC0tLQojIElUU00KIyAtLS0KICAgICMgZ2V0IHNsYSB0eXBlIGxpc3QKICAgIG15ICRTTEFUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6U0xBOjpUeXBlJywKICAgICk7CiAgICAkU0xBRGF0YXtUeXBlfSA9ICRTTEFUeXBlTGlzdC0+eyAkU0xBRGF0YXtUeXBlSUR9IH0gfHwgJyc7CiMgLS0tCgogICAgIyBnZXQgYWxsIHNlcnZpY2UgaWRzCiAgICAkREJPYmplY3QtPlByZXBhcmUoCiAgICAgICAgU1FMICA9PiAnU0VMRUNUIHNlcnZpY2VfaWQgRlJPTSBzZXJ2aWNlX3NsYSBXSEVSRSBzbGFfaWQgPSA/IE9SREVSIEJZIHNlcnZpY2VfaWQgQVNDJywKICAgICAgICBCaW5kID0+IFsgXCRTTEFEYXRhe1NMQUlEfSBdLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15IEBTZXJ2aWNlSURzOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgcHVzaCBAU2VydmljZUlEcywgJFJvd1swXTsKICAgIH0KCiAgICAjIGFkZCB0aGUgaWRzCiAgICAkU0xBRGF0YXtTZXJ2aWNlSURzfSA9IFxAU2VydmljZUlEczsKCiAgICAjIGdldCBzbGEgcHJlZmVyZW5jZXMKICAgIG15ICVQcmVmZXJlbmNlcyA9ICRTZWxmLT5TTEFQcmVmZXJlbmNlc0dldCggU0xBSUQgPT4gJFBhcmFte1NMQUlEfSApOwoKICAgICMgbWVyZ2UgaGFzaAogICAgaWYgKCVQcmVmZXJlbmNlcykgewogICAgICAgICVTTEFEYXRhID0gKCAlU0xBRGF0YSwgJVByZWZlcmVuY2VzICk7CiAgICB9CgogICAgIyBjYWNoZSB0aGUgcmVzdWx0CiAgICAkU2VsZi0+eyRDYWNoZUtleX0gPSBcJVNMQURhdGE7CgogICAgcmV0dXJuICVTTEFEYXRhOwp9Cgo9aXRlbSBTTEFMb29rdXAoKQoKcmV0dXJucyB0aGUgbmFtZSBvciB0aGUgc2xhIGlkCgogICAgbXkgJFNMQU5hbWUgPSAkU0xBT2JqZWN0LT5TTEFMb29rdXAoCiAgICAgICAgU0xBSUQgPT4gMTIzLAogICAgKTsKCiAgICBvcgoKICAgIG15ICRTTEFJRCA9ICRTTEFPYmplY3QtPlNMQUxvb2t1cCgKICAgICAgICBOYW1lID0+ICdTTEEgTmFtZScsCiAgICApOwoKPWN1dAoKc3ViIFNMQUxvb2t1cCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBpZiAoICEkUGFyYW17U0xBSUR9ICYmICEkUGFyYW17TmFtZX0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIFNMQUlEIG9yIE5hbWUhJywKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGdldCBkYXRhYmFzZSBvYmplY3QKICAgIG15ICREQk9iamVjdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpOwoKICAgIGlmICggJFBhcmFte1NMQUlEfSApIHsKCiAgICAgICAgIyBjaGVjayBjYWNoZQogICAgICAgIG15ICRDYWNoZUtleSA9ICdDYWNoZTo6U0xBTG9va3VwOjpJRDo6JyAuICRQYXJhbXtTTEFJRH07CiAgICAgICAgaWYgKCBkZWZpbmVkICRTZWxmLT57JENhY2hlS2V5fSApIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57JENhY2hlS2V5fTsKICAgICAgICB9CgogICAgICAgICMgbG9va3VwCiAgICAgICAgJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgICAgICBTUUwgICA9PiAnU0VMRUNUIG5hbWUgRlJPTSBzbGEgV0hFUkUgaWQgPSA/JywKICAgICAgICAgICAgQmluZCAgPT4gWyBcJFBhcmFte1NMQUlEfSwgXSwKICAgICAgICAgICAgTGltaXQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgICAgICBteSAkTmFtZTsKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgJE5hbWUgPSAkUm93WzBdOwogICAgICAgIH0KCiAgICAgICAgIyBjYWNoZQogICAgICAgICRTZWxmLT57JENhY2hlS2V5fSA9ICROYW1lOwoKICAgICAgICByZXR1cm4gJE5hbWU7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBjaGVjayBjYWNoZQogICAgICAgIG15ICRDYWNoZUtleSA9ICdDYWNoZTo6U0xBTG9va3VwOjpOYW1lOjonIC4gJFBhcmFte05hbWV9OwogICAgICAgIGlmICggZGVmaW5lZCAkU2VsZi0+eyRDYWNoZUtleX0gKSB7CiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+eyRDYWNoZUtleX07CiAgICAgICAgfQoKICAgICAgICAjIGxvb2t1cAogICAgICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBpZCBGUk9NIHNsYSBXSEVSRSBuYW1lID0gPycsCiAgICAgICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtOYW1lfSBdLAogICAgICAgICAgICBMaW1pdCA9PiAxLAogICAgICAgICk7CgogICAgICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgICAgIG15ICRTTEFJRDsKICAgICAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAgICAgJFNMQUlEID0gJFJvd1swXTsKICAgICAgICB9CgogICAgICAgICMgY2FjaGUKICAgICAgICAkU2VsZi0+eyRDYWNoZUtleX0gPSAkU0xBSUQ7CgogICAgICAgIHJldHVybiAkU0xBSUQ7CiAgICB9Cn0KCj1pdGVtIFNMQUFkZCgpCgphZGQgYSBzbGEKCiAgICBteSAkU0xBSUQgPSAkU0xBT2JqZWN0LT5TTEFBZGQoCiAgICAgICAgU2VydmljZUlEcyAgICAgICAgICA9PiBbIDEsIDUsIDcgXSwgICMgKG9wdGlvbmFsKQogICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ1NMQSBOYW1lJywKICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICdDYWxlbmRhcjEnLCAgIyAob3B0aW9uYWwpCiAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAxMjAsICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gNjAsICAgICAgICAgICAjIChvcHRpb25hbCkgbm90aWZ5IGFnZW50IGlmIGZpcnN0IHJlc3BvbnNlIGVzY2FsYXRpb24gaXMgNjAlIHJlYWNoZWQKICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDE4MCwgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiA4MCwgICAgICAgICAgICMgKG9wdGlvbmFsKSBub3RpZnkgYWdlbnQgaWYgdXBkYXRlIGVzY2FsYXRpb24gaXMgODAlIHJlYWNoZWQKICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDU4MCwgICAgICAgICAgIyAob3B0aW9uYWwpCiAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiA4MCwgICAgICAgICAgICMgKG9wdGlvbmFsKSBub3RpZnkgYWdlbnQgaWYgc29sdXRpb24gZXNjYWxhdGlvbiBpcyA4MCUgcmVhY2hlZAogICAgICAgIFZhbGlkSUQgICAgICAgICAgICAgPT4gMSwKICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICdDb21tZW50JywgICAgIyAob3B0aW9uYWwpCiAgICAgICAgVXNlcklEICAgICAgICAgICAgICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICBUeXBlSUQgICAgICAgICAgICAgICAgICA9PiAyLAogICAgICAgIE1pblRpbWVCZXR3ZWVuSW5jaWRlbnRzID0+IDM0NDMsICAgICAjIChvcHRpb25hbCkKIyAtLS0KICAgICk7Cgo9Y3V0CgpzdWIgU0xBQWRkIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKIyAtLS0KIyBJVFNNCiMgLS0tCiMgICAgZm9yIG15ICRBcmd1bWVudCAocXcoTmFtZSBWYWxpZElEIFVzZXJJRCkpIHsKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE5hbWUgVmFsaWRJRCBVc2VySUQgVHlwZUlEKSkgewojIC0tLQogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGNoZWNrIHNlcnZpY2UgaWRzCiAgICBpZiAoIGRlZmluZWQgJFBhcmFte1NlcnZpY2VJRHN9ICYmIHJlZiAkUGFyYW17U2VydmljZUlEc30gbmUgJ0FSUkFZJyApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ1NlcnZpY2VJRHMgbmVlZHMgdG8gYmUgYW4gYXJyYXkgcmVmZXJlbmNlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCB2YWx1ZXMKICAgICRQYXJhbXtTZXJ2aWNlSURzfSAgICAgICAgICB8fD0gW107CiAgICAkUGFyYW17Q2FsZW5kYXJ9ICAgICAgICAgICAgfHw9ICcnOwogICAgJFBhcmFte0NvbW1lbnR9ICAgICAgICAgICAgIHx8PSAnJzsKICAgICRQYXJhbXtGaXJzdFJlc3BvbnNlVGltZX0gICB8fD0gMDsKICAgICRQYXJhbXtGaXJzdFJlc3BvbnNlTm90aWZ5fSB8fD0gMDsKICAgICRQYXJhbXtVcGRhdGVUaW1lfSAgICAgICAgICB8fD0gMDsKICAgICRQYXJhbXtVcGRhdGVOb3RpZnl9ICAgICAgICB8fD0gMDsKICAgICRQYXJhbXtTb2x1dGlvblRpbWV9ICAgICAgICB8fD0gMDsKICAgICRQYXJhbXtTb2x1dGlvbk5vdGlmeX0gICAgICB8fD0gMDsKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAkUGFyYW17TWluVGltZUJldHdlZW5JbmNpZGVudHN9IHx8PSAwOwojIC0tLQoKICAgICMgZ2V0IGNoZWNrIGl0ZW0gb2JqZWN0CiAgICBteSAkQ2hlY2tJdGVtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNoZWNrSXRlbScpOwoKICAgICMgY2xlYW51cCBnaXZlbiBwYXJhbXMKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE5hbWUgQ29tbWVudCkpIHsKICAgICAgICAkQ2hlY2tJdGVtT2JqZWN0LT5TdHJpbmdDbGVhbigKICAgICAgICAgICAgU3RyaW5nUmVmICAgICAgICAgPT4gXCRQYXJhbXskQXJndW1lbnR9LAogICAgICAgICAgICBSZW1vdmVBbGxOZXdsaW5lcyA9PiAxLAogICAgICAgICAgICBSZW1vdmVBbGxUYWJzICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGZpbmQgZXhpdGluZyBzbGEncyB3aXRoIHRoZSBzYW1lIG5hbWUKICAgICREQk9iamVjdC0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gc2xhIFdIRVJFIG5hbWUgPSA/JywKICAgICAgICBCaW5kICA9PiBbIFwkUGFyYW17TmFtZX0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICROb0FkZDsKICAgIHdoaWxlICggJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJE5vQWRkID0gMTsKICAgIH0KCiAgICAjIGFib3J0IGluc2VydCBvZiBuZXcgc2xhLCBpZiBuYW1lIGFscmVhZHkgZXhpc3RzCiAgICBpZiAoJE5vQWRkKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCBhZGQgbmV3IFNMQSEgJyRQYXJhbXtOYW1lfScgYWxyZWFkeSBleGlzdHMuIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGFkZCBzbGEgdG8gZGF0YWJhc2UKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKIyAtLS0KIyBJVFNNCiMgLS0tCiMgICAgICAgIFNRTCA9PiAnSU5TRVJUIElOVE8gc2xhICcKIyAgICAgICAgICAgIC4gJyhuYW1lLCBjYWxlbmRhcl9uYW1lLCBmaXJzdF9yZXNwb25zZV90aW1lLCBmaXJzdF9yZXNwb25zZV9ub3RpZnksICcKIyAgICAgICAgICAgIC4gJ3VwZGF0ZV90aW1lLCB1cGRhdGVfbm90aWZ5LCBzb2x1dGlvbl90aW1lLCBzb2x1dGlvbl9ub3RpZnksICcKIyAgICAgICAgICAgIC4gJ3ZhbGlkX2lkLCBjb21tZW50cywgY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSkgVkFMVUVTICcKIyAgICAgICAgICAgIC4gJyg/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPywgY3VycmVudF90aW1lc3RhbXAsID8pJywKIyAgICAgICAgQmluZCA9PiBbCiMgICAgICAgICAgICBcJFBhcmFte05hbWV9LCAgICAgICAgICAgICAgICBcJFBhcmFte0NhbGVuZGFyfSwgICBcJFBhcmFte0ZpcnN0UmVzcG9uc2VUaW1lfSwKIyAgICAgICAgICAgIFwkUGFyYW17Rmlyc3RSZXNwb25zZU5vdGlmeX0sIFwkUGFyYW17VXBkYXRlVGltZX0sIFwkUGFyYW17VXBkYXRlTm90aWZ5fSwKIyAgICAgICAgICAgIFwkUGFyYW17U29sdXRpb25UaW1lfSwgXCRQYXJhbXtTb2x1dGlvbk5vdGlmeX0sIFwkUGFyYW17VmFsaWRJRH0sIFwkUGFyYW17Q29tbWVudH0sCiMgICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17VXNlcklEfSwKIyAgICAgICAgXSwKICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIHNsYSAnCiAgICAgICAgICAgIC4gJyhuYW1lLCBjYWxlbmRhcl9uYW1lLCBmaXJzdF9yZXNwb25zZV90aW1lLCBmaXJzdF9yZXNwb25zZV9ub3RpZnksICcKICAgICAgICAgICAgLiAndXBkYXRlX3RpbWUsIHVwZGF0ZV9ub3RpZnksIHNvbHV0aW9uX3RpbWUsIHNvbHV0aW9uX25vdGlmeSwgJwogICAgICAgICAgICAuICd2YWxpZF9pZCwgY29tbWVudHMsIGNyZWF0ZV90aW1lLCBjcmVhdGVfYnksIGNoYW5nZV90aW1lLCBjaGFuZ2VfYnksICcKICAgICAgICAgICAgLiAndHlwZV9pZCwgbWluX3RpbWVfYmV0X2luY2lkZW50cykgVkFMVUVTICcKICAgICAgICAgICAgLiAnKD8sID8sID8sID8sID8sID8sID8sID8sID8sID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPywgPywgPyknLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte05hbWV9LCAgICAgICAgICAgICAgICBcJFBhcmFte0NhbGVuZGFyfSwgICBcJFBhcmFte0ZpcnN0UmVzcG9uc2VUaW1lfSwKICAgICAgICAgICAgXCRQYXJhbXtGaXJzdFJlc3BvbnNlTm90aWZ5fSwgXCRQYXJhbXtVcGRhdGVUaW1lfSwgXCRQYXJhbXtVcGRhdGVOb3RpZnl9LAogICAgICAgICAgICBcJFBhcmFte1NvbHV0aW9uVGltZX0sIFwkUGFyYW17U29sdXRpb25Ob3RpZnl9LCBcJFBhcmFte1ZhbGlkSUR9LCBcJFBhcmFte0NvbW1lbnR9LAogICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17VXNlcklEfSwgXCRQYXJhbXtUeXBlSUR9LCBcJFBhcmFte01pblRpbWVCZXR3ZWVuSW5jaWRlbnRzfSwKICAgICAgICBdLAojIC0tLQogICAgKTsKCiAgICAjIGdldCBzbGEgaWQKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgaWQgRlJPTSBzbGEgV0hFUkUgbmFtZSA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtOYW1lfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJFNMQUlEOwogICAgd2hpbGUgKCBteSBAUm93ID0gJERCT2JqZWN0LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFNMQUlEID0gJFJvd1swXTsKICAgIH0KCiAgICAjIGNoZWNrIHNsYSBpZAogICAgaWYgKCAhJFNMQUlEICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgZmluZCBTTEFJRCBmb3IgJyRQYXJhbXtOYW1lfSchIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHJlbW92ZSBhbGwgZXhpc3RpbmcgYWxsb2NhdGlvbnMKICAgICREQk9iamVjdC0+RG8oCiAgICAgICAgU1FMICA9PiAnREVMRVRFIEZST00gc2VydmljZV9zbGEgV0hFUkUgc2xhX2lkID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkU0xBSUQgXSwKICAgICk7CgogICAgIyBhZGQgdGhlIG5ldyBhbGxvY2F0aW9ucwogICAgZm9yIG15ICRTZXJ2aWNlSUQgKCBAeyAkUGFyYW17U2VydmljZUlEc30gfSApIHsKCiAgICAgICAgIyBhZGQgb25lIGFsbG9jYXRpb24KICAgICAgICAkREJPYmplY3QtPkRvKAogICAgICAgICAgICBTUUwgPT4gJ0lOU0VSVCBJTlRPIHNlcnZpY2Vfc2xhIChzZXJ2aWNlX2lkLCBzbGFfaWQpIFZBTFVFUyAoPywgPyknLAogICAgICAgICAgICBCaW5kID0+IFsgXCRTZXJ2aWNlSUQsIFwkU0xBSUQgXSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAkU0xBSUQ7Cn0KCj1pdGVtIFNMQVVwZGF0ZSgpCgp1cGRhdGUgYSBleGlzdGluZyBzbGEKCiAgICBteSAkVHJ1ZSA9ICRTTEFPYmplY3QtPlNMQVVwZGF0ZSgKICAgICAgICBTTEFJRCAgICAgICAgICAgICAgID0+IDIsCiAgICAgICAgU2VydmljZUlEcyAgICAgICAgICA9PiBbIDEsIDIsIDMgXSwgICMgKG9wdGlvbmFsKQogICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJ1NlcnZpY2UgTmFtZScsCiAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAnQ2FsZW5kYXIxJywgICMgKG9wdGlvbmFsKQogICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lICAgPT4gMTIwLCAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDYwLCAgICAgICAgICAgIyAob3B0aW9uYWwpIG5vdGlmeSBhZ2VudCBpZiBmaXJzdCByZXNwb25zZSBlc2NhbGF0aW9uIGlzIDYwJSByZWFjaGVkCiAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiAxODAsICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFVwZGF0ZU5vdGlmeSAgICAgICAgPT4gODAsICAgICAgICAgICAjIChvcHRpb25hbCkgbm90aWZ5IGFnZW50IGlmIHVwZGF0ZSBlc2NhbGF0aW9uIGlzIDgwJSByZWFjaGVkCiAgICAgICAgU29sdXRpb25UaW1lICAgICAgICA9PiA1ODAsICAgICAgICAgICMgKG9wdGlvbmFsKQogICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gODAsICAgICAgICAgICAjIChvcHRpb25hbCkgbm90aWZ5IGFnZW50IGlmIHNvbHV0aW9uIGVzY2FsYXRpb24gaXMgODAlIHJlYWNoZWQKICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgQ29tbWVudCAgICAgICAgICAgICA9PiAnQ29tbWVudCcsICAgICMgKG9wdGlvbmFsKQogICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgVHlwZUlEICAgICAgICAgICAgICAgICAgPT4gMiwKICAgICAgICBNaW5UaW1lQmV0d2VlbkluY2lkZW50cyA9PiAzNDQzLCAgIyAob3B0aW9uYWwpCiMgLS0tCiAgICApOwoKPWN1dAoKc3ViIFNMQVVwZGF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiMgLS0tCiMgSVRTTQojIC0tLQojICAgIGZvciBteSAkQXJndW1lbnQgKHF3KFNMQUlEIE5hbWUgVmFsaWRJRCBVc2VySUQpKSB7CiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhTTEFJRCBOYW1lIFZhbGlkSUQgVXNlcklEIFR5cGVJRCkpIHsKIyAtLS0KICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBzZXJ2aWNlIGlkcwogICAgaWYgKCBkZWZpbmVkICRQYXJhbXtTZXJ2aWNlSURzfSAmJiByZWYgJFBhcmFte1NlcnZpY2VJRHN9IG5lICdBUlJBWScgKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdTZXJ2aWNlSURzIG5lZWQgdG8gYmUgYW4gYXJyYXkgcmVmZXJlbmNlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCB2YWx1ZXMKICAgICRQYXJhbXtTZXJ2aWNlSURzfSAgICAgICAgICB8fD0gW107CiAgICAkUGFyYW17Q2FsZW5kYXJ9ICAgICAgICAgICAgfHw9ICcnOwogICAgJFBhcmFte0NvbW1lbnR9ICAgICAgICAgICAgIHx8PSAnJzsKICAgICRQYXJhbXtGaXJzdFJlc3BvbnNlVGltZX0gICB8fD0gMDsKICAgICRQYXJhbXtGaXJzdFJlc3BvbnNlTm90aWZ5fSB8fD0gMDsKICAgICRQYXJhbXtVcGRhdGVUaW1lfSAgICAgICAgICB8fD0gMDsKICAgICRQYXJhbXtVcGRhdGVOb3RpZnl9ICAgICAgICB8fD0gMDsKICAgICRQYXJhbXtTb2x1dGlvblRpbWV9ICAgICAgICB8fD0gMDsKICAgICRQYXJhbXtTb2x1dGlvbk5vdGlmeX0gICAgICB8fD0gMDsKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAkUGFyYW17TWluVGltZUJldHdlZW5JbmNpZGVudHN9IHx8PSAwOwojIC0tLQoKICAgICMgZ2V0IGNoZWNrIGl0ZW0gb2JqZWN0CiAgICBteSAkQ2hlY2tJdGVtT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkNoZWNrSXRlbScpOwoKICAgICMgY2xlYW51cCBnaXZlbiBwYXJhbXMKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE5hbWUgQ29tbWVudCkpIHsKICAgICAgICAkQ2hlY2tJdGVtT2JqZWN0LT5TdHJpbmdDbGVhbigKICAgICAgICAgICAgU3RyaW5nUmVmICAgICAgICAgPT4gXCRQYXJhbXskQXJndW1lbnR9LAogICAgICAgICAgICBSZW1vdmVBbGxOZXdsaW5lcyA9PiAxLAogICAgICAgICAgICBSZW1vdmVBbGxUYWJzICAgICA9PiAxLAogICAgICAgICk7CiAgICB9CgogICAgIyBnZXQgZGF0YWJhc2Ugb2JqZWN0CiAgICBteSAkREJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKTsKCiAgICAjIGZpbmQgZXhpdGluZyBzbGEncyB3aXRoIHRoZSBzYW1lIG5hbWUKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5QcmVwYXJlKAogICAgICAgIFNRTCAgID0+ICdTRUxFQ1QgaWQgRlJPTSBzbGEgV0hFUkUgbmFtZSA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtOYW1lfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJFVwZGF0ZSA9IDA7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkREJPYmplY3QtPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBpZiAoICRSb3dbMF0gIT0gJFBhcmFte1NMQUlEfSApIHsKICAgICAgICAgICAgJFVwZGF0ZSA9ICRSb3dbMF07CiAgICAgICAgfQogICAgfQoKICAgICMgYWJvcnQgdXBkYXRlIG9mIHNsYSwgaWYgbmFtZSBhbHJlYWR5IGV4aXN0cwogICAgaWYgKCRVcGRhdGUpIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gIkNhbid0IHVwZGF0ZSBTTEEhICckUGFyYW17TmFtZX0nIGFscmVhZHkgZXhpc3RzLiIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyByZXNldCBjYWNoZQogICAgZGVsZXRlICRTZWxmLT57ICdDYWNoZTo6U0xBR2V0OjonIC4gJFBhcmFte1NMQUlEfSB9OwogICAgZGVsZXRlICRTZWxmLT57ICdDYWNoZTo6U0xBTG9va3VwOjpOYW1lOjonIC4gJFBhcmFte05hbWV9IH07CiAgICBkZWxldGUgJFNlbGYtPnsgJ0NhY2hlOjpTTEFMb29rdXA6OklEOjonIC4gJFBhcmFte1NMQUlEfSB9OwoKICAgICMgdXBkYXRlIHNlcnZpY2UKICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKIyAtLS0KIyBJVFNNCiMgLS0tCiMgICAgICAgIFNRTCA9PiAnVVBEQVRFIHNsYSBTRVQgbmFtZSA9ID8sIGNhbGVuZGFyX25hbWUgPSA/LCAnCiMgICAgICAgICAgICAuICdmaXJzdF9yZXNwb25zZV90aW1lID0gPywgZmlyc3RfcmVzcG9uc2Vfbm90aWZ5ID0gPywgJwojICAgICAgICAgICAgLiAndXBkYXRlX3RpbWUgPSA/LCB1cGRhdGVfbm90aWZ5ID0gPywgc29sdXRpb25fdGltZSA9ID8sIHNvbHV0aW9uX25vdGlmeSA9ID8sICcKIyAgICAgICAgICAgIC4gJ3ZhbGlkX2lkID0gPywgY29tbWVudHMgPSA/LCBjaGFuZ2VfdGltZSA9IGN1cnJlbnRfdGltZXN0YW1wLCBjaGFuZ2VfYnkgPSA/ICcKIyAgICAgICAgICAgIC4gJ1dIRVJFIGlkID0gPycsCiMgICAgICAgIEJpbmQgPT4gWwojICAgICAgICAgICAgXCRQYXJhbXtOYW1lfSwgICAgICAgICAgICAgICAgXCRQYXJhbXtDYWxlbmRhcn0sICAgXCRQYXJhbXtGaXJzdFJlc3BvbnNlVGltZX0sCiMgICAgICAgICAgICBcJFBhcmFte0ZpcnN0UmVzcG9uc2VOb3RpZnl9LCBcJFBhcmFte1VwZGF0ZVRpbWV9LCBcJFBhcmFte1VwZGF0ZU5vdGlmeX0sCiMgICAgICAgICAgICBcJFBhcmFte1NvbHV0aW9uVGltZX0sIFwkUGFyYW17U29sdXRpb25Ob3RpZnl9LCBcJFBhcmFte1ZhbGlkSUR9LCBcJFBhcmFte0NvbW1lbnR9LAojICAgICAgICAgICAgXCRQYXJhbXtVc2VySUR9LCBcJFBhcmFte1NMQUlEfSwKIyAgICAgICAgXSwKICAgICAgICBTUUwgPT4gJ1VQREFURSBzbGEgU0VUIG5hbWUgPSA/LCBjYWxlbmRhcl9uYW1lID0gPywgJwogICAgICAgICAgICAuICdmaXJzdF9yZXNwb25zZV90aW1lID0gPywgZmlyc3RfcmVzcG9uc2Vfbm90aWZ5ID0gPywgJwogICAgICAgICAgICAuICd1cGRhdGVfdGltZSA9ID8sIHVwZGF0ZV9ub3RpZnkgPSA/LCBzb2x1dGlvbl90aW1lID0gPywgc29sdXRpb25fbm90aWZ5ID0gPywgJwogICAgICAgICAgICAuICd2YWxpZF9pZCA9ID8sIGNvbW1lbnRzID0gPywgY2hhbmdlX3RpbWUgPSBjdXJyZW50X3RpbWVzdGFtcCwgY2hhbmdlX2J5ID0gPywgJwogICAgICAgICAgICAuICd0eXBlX2lkID0gPywgbWluX3RpbWVfYmV0X2luY2lkZW50cyA9ID8gJwogICAgICAgICAgICAuICdXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte05hbWV9LCAgICAgICAgICAgICAgICBcJFBhcmFte0NhbGVuZGFyfSwgICBcJFBhcmFte0ZpcnN0UmVzcG9uc2VUaW1lfSwKICAgICAgICAgICAgXCRQYXJhbXtGaXJzdFJlc3BvbnNlTm90aWZ5fSwgXCRQYXJhbXtVcGRhdGVUaW1lfSwgXCRQYXJhbXtVcGRhdGVOb3RpZnl9LAogICAgICAgICAgICBcJFBhcmFte1NvbHV0aW9uVGltZX0sIFwkUGFyYW17U29sdXRpb25Ob3RpZnl9LCBcJFBhcmFte1ZhbGlkSUR9LCBcJFBhcmFte0NvbW1lbnR9LAogICAgICAgICAgICBcJFBhcmFte1VzZXJJRH0sIFwkUGFyYW17VHlwZUlEfSwgXCRQYXJhbXtNaW5UaW1lQmV0d2VlbkluY2lkZW50c30sIFwkUGFyYW17U0xBSUR9LAogICAgICAgIF0sCiMgLS0tCiAgICApOwoKICAgICMgcmVtb3ZlIGFsbCBleGlzdGluZyBhbGxvY2F0aW9ucwogICAgcmV0dXJuIGlmICEkREJPYmplY3QtPkRvKAogICAgICAgIFNRTCAgPT4gJ0RFTEVURSBGUk9NIHNlcnZpY2Vfc2xhIFdIRVJFIHNsYV9pZCA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte1NMQUlEfSwgXQogICAgKTsKCiAgICAjIGFkZCB0aGUgbmV3IGFsbG9jYXRpb25zCiAgICBmb3IgbXkgJFNlcnZpY2VJRCAoIEB7ICRQYXJhbXtTZXJ2aWNlSURzfSB9ICkgewoKICAgICAgICAjIGFkZCBvbmUgYWxsb2NhdGlvbgogICAgICAgIHJldHVybiBpZiAhJERCT2JqZWN0LT5EbygKICAgICAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBzZXJ2aWNlX3NsYSAoc2VydmljZV9pZCwgc2xhX2lkKSBWQUxVRVMgKD8sID8pJywKICAgICAgICAgICAgQmluZCA9PiBbIFwkU2VydmljZUlELCBcJFBhcmFte1NMQUlEfSBdLAogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIFNMQVByZWZlcmVuY2VzU2V0KCkKCnNldCBTTEEgcHJlZmVyZW5jZXMKCiAgICAkU0xBT2JqZWN0LT5TTEFQcmVmZXJlbmNlc1NldCgKICAgICAgICBTTEFJRCA9PiAxMjMsCiAgICAgICAgS2V5ICAgICAgID0+ICdVc2VyQ29tbWVudCcsCiAgICAgICAgVmFsdWUgICAgID0+ICdzb21lIGNvbW1lbnQnLAogICAgICAgIFVzZXJJRCAgICA9PiAxMjMsCiAgICApOwoKPWN1dAoKc3ViIFNMQVByZWZlcmVuY2VzU2V0IHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgcmV0dXJuICRTZWxmLT57UHJlZmVyZW5jZXNPYmplY3R9LT5TTEFQcmVmZXJlbmNlc1NldChAXyk7Cn0KCj1pdGVtIFNMQVByZWZlcmVuY2VzR2V0KCkKCmdldCBTTEEgcHJlZmVyZW5jZXMKCiAgICBteSAlUHJlZmVyZW5jZXMgPSAkU0xBT2JqZWN0LT5TTEFQcmVmZXJlbmNlc0dldCgKICAgICAgICBTTEFJRCA9PiAxMjMsCiAgICAgICAgVXNlcklEICAgID0+IDEyMywKICAgICk7Cgo9Y3V0CgpzdWIgU0xBUHJlZmVyZW5jZXNHZXQgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICByZXR1cm4gJFNlbGYtPntQcmVmZXJlbmNlc09iamVjdH0tPlNMQVByZWZlcmVuY2VzR2V0KEBfKTsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgc29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChMPGh0dHA6Ly9vdHJzLm9yZy8+KS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIEw8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0Pi4KCj1jdXQK
IyAtLQojIEN1c3RvbWVyVXNlclNlcnZpY2UudCAtIEN1c3RvbWVyVXNlclNlcnZpY2UgdGVzdHMKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyAkb3JpZ2luOiBodHRwczovL2dpdGh1Yi5jb20vT1RSUy9vdHJzL2Jsb2IvMGNkMjJkZDMzY2RkNTFkNmZhYzRjOTk3YzJhZWI2OGE4ZTg5OTEzNC9zY3JpcHRzL3Rlc3QvQ3VzdG9tZXJVc2VyU2VydmljZS50CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7CgojIGdldCBuZWVkZWQgb2JqZWN0cwpteSAkQ29uZmlnT2JqZWN0ICAgICAgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpDb25maWcnKTsKbXkgJEhlbHBlck9iamVjdCAgICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVbml0VGVzdDo6SGVscGVyJyk7Cm15ICRDdXN0b21lclVzZXJPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6Q3VzdG9tZXJVc2VyJyk7Cm15ICRTZXJ2aWNlT2JqZWN0ICAgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwoKIyBkb24ndCBjaGVjayBlbWFpbCBhZGRyZXNzIHZhbGlkaXR5CiRDb25maWdPYmplY3QtPlNldCgKICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgIFZhbHVlID0+IDAsCik7CgojIHNhdmUgYWxsIG9yaWdpbmFsIGRlZmF1bHQgc2VydmljZXMKbXkgQE9yaWdpbmFsRGVmYXVsdFNlcnZpY2VzID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJzxERUZBVUxUPicsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAogICAgRGVmYXVsdFNlcnZpY2VzICAgPT4gMCwKKTsKCiMgZGVsZXRlIGFsbCBkZWZhdWx0IHNlcnZpY2VzCmZvciBteSAkU2VydmljZUlEIChAT3JpZ2luYWxEZWZhdWx0U2VydmljZXMpIHsKICAgICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICc8REVGQVVMVD4nLAogICAgICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgQWN0aXZlICAgICAgICAgICAgPT4gMCwKICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAogICAgKTsKfQoKIyBhZGQgc2VydmljZTEKbXkgJFNlcnZpY2VSYW5kMSA9ICdTb21lU2VydmljZScgLiBpbnQoIHJhbmQoMTAwMDAwMCkgKTsKbXkgJFNlcnZpY2VJRDEgICA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgTmFtZSAgICA9PiAkU2VydmljZVJhbmQxLAogICAgQ29tbWVudCA9PiAnU29tZSBDb21tZW50JywKICAgIFZhbGlkSUQgPT4gMSwKICAgIFVzZXJJRCAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICBUeXBlSUQgICAgICA9PiAxLAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KKTsKCiRTZWxmLT5UcnVlKAogICAgJFNlcnZpY2VJRDEsCiAgICAnU2VydmljZUFkZDEoKScsCik7CgojIGFkZCBzZXJ2aWNlMgpteSAkU2VydmljZVJhbmQyID0gJ1NvbWVTZXJ2aWNlJyAuIGludCggcmFuZCgxMDAwMDAwKSApOwpteSAkU2VydmljZUlEMiAgID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICBOYW1lICAgID0+ICRTZXJ2aWNlUmFuZDIsCiAgICBDb21tZW50ID0+ICdTb21lIENvbW1lbnQnLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQopOwoKJFNlbGYtPlRydWUoCiAgICAkU2VydmljZUlEMiwKICAgICdTZXJ2aWNlQWRkMigpJywKKTsKCm15ICRDdXN0b21lclVzZXIxID0gJEhlbHBlck9iamVjdC0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpCiAgICB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgY3VzdG9tZXIgdXNlciI7Cm15ICRDdXN0b21lclVzZXIyID0gJEhlbHBlck9iamVjdC0+VGVzdEN1c3RvbWVyVXNlckNyZWF0ZSgpCiAgICB8fCBkaWUgIkRpZCBub3QgZ2V0IHRlc3QgY3VzdG9tZXIgdXNlciI7CgojIGFsbG9jYXRpb24gdGVzdCAxCm15IEBBbGxvY2F0aW9uMSA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIxLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgokU2VsZi0+RmFsc2UoCiAgICBzY2FsYXIgQEFsbG9jYXRpb24xLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0MSgpJywKKTsKCiMgYWxsb2NhdGlvbiB0ZXN0IDIKbXkgQEFsbG9jYXRpb24yID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjEsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAopOwoKJFNlbGYtPkZhbHNlKAogICAgc2NhbGFyIEBBbGxvY2F0aW9uMiwKICAgICdDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdDIoKScsCik7CgojIGFsbG9jYXRpb24gdGVzdCAzCm15IEBBbGxvY2F0aW9uMyA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIyLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgokU2VsZi0+RmFsc2UoCiAgICBzY2FsYXIgQEFsbG9jYXRpb24zLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0MygpJywKKTsKCiMgYWxsb2NhdGlvbiB0ZXN0IDQKbXkgQEFsbG9jYXRpb240ID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjIsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAopOwoKJFNlbGYtPkZhbHNlKAogICAgc2NhbGFyIEBBbGxvY2F0aW9uNCwKICAgICdDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdDQoKScsCik7CgojIHNldCBhbGxvY2F0aW9uIDEKJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAnPERFRkFVTFQ+JywKICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQxLAogICAgQWN0aXZlICAgICAgICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCik7CgojIGFsbG9jYXRpb24gdGVzdCA1Cm15IEBBbGxvY2F0aW9uNSA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIxLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgokU2VsZi0+RmFsc2UoCiAgICBzY2FsYXIgQEFsbG9jYXRpb241LAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0NSgpJywKKTsKCiMgYWxsb2NhdGlvbiB0ZXN0IDYKbXkgQEFsbG9jYXRpb242ID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjEsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAopOwoKbXkgJEFsbG9jYXRpb242Q291bnQgPSBAQWxsb2NhdGlvbjY7Cm15ICRBbGxvY2F0aW9uNk9rICAgID0gMDsKaWYgKCAkQWxsb2NhdGlvbjZDb3VudCBlcSAxICYmICRBbGxvY2F0aW9uNlswXSBlcSAkU2VydmljZUlEMSApIHsKICAgICRBbGxvY2F0aW9uNk9rID0gMTsKfQoKJFNlbGYtPlRydWUoCiAgICAkQWxsb2NhdGlvbjZPaywKICAgICdDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdDYoKScsCik7CgojIGFsbG9jYXRpb24gdGVzdCA3Cm15IEBBbGxvY2F0aW9uNyA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIyLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgokU2VsZi0+RmFsc2UoCiAgICBzY2FsYXIgQEFsbG9jYXRpb243LAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0NygpJywKKTsKCiMgYWxsb2NhdGlvbiB0ZXN0IDgKbXkgQEFsbG9jYXRpb244ID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjIsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAopOwoKbXkgJEFsbG9jYXRpb244Q291bnQgPSBAQWxsb2NhdGlvbjg7Cm15ICRBbGxvY2F0aW9uOE9rICAgID0gMDsKaWYgKCAkQWxsb2NhdGlvbjhDb3VudCBlcSAxICYmICRBbGxvY2F0aW9uOFswXSBlcSAkU2VydmljZUlEMSApIHsKICAgICRBbGxvY2F0aW9uOE9rID0gMTsKfQoKJFNlbGYtPlRydWUoCiAgICAkQWxsb2NhdGlvbjhPaywKICAgICdDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdDgoKScsCik7CgojIHNldCBhbGxvY2F0aW9uIDIKJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkQ3VzdG9tZXJVc2VyMSwKICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQyLAogICAgQWN0aXZlICAgICAgICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCik7CgojIGFsbG9jYXRpb24gdGVzdCA5Cm15IEBBbGxvY2F0aW9uOSA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIxLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgpteSAkQWxsb2NhdGlvbjlDb3VudCA9IEBBbGxvY2F0aW9uOTsKbXkgJEFsbG9jYXRpb245T2sgICAgPSAwOwppZiAoICRBbGxvY2F0aW9uOUNvdW50IGVxIDEgJiYgJEFsbG9jYXRpb245WzBdIGVxICRTZXJ2aWNlSUQyICkgewogICAgJEFsbG9jYXRpb245T2sgPSAxOwp9CgokU2VsZi0+VHJ1ZSgKICAgICRBbGxvY2F0aW9uOU9rLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0OSgpJywKKTsKCiMgYWxsb2NhdGlvbiB0ZXN0IDEwCm15IEBBbGxvY2F0aW9uMTAgPSAkU2VydmljZU9iamVjdC0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckxpc3QoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkQ3VzdG9tZXJVc2VyMSwKICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdJRCcsCik7CgpteSAkQWxsb2NhdGlvbjEwQ291bnQgPSBAQWxsb2NhdGlvbjEwOwpteSAkQWxsb2NhdGlvbjEwT2sgICAgPSAwOwppZiAoICRBbGxvY2F0aW9uMTBDb3VudCBlcSAxICYmICRBbGxvY2F0aW9uMTBbMF0gZXEgJFNlcnZpY2VJRDIgKSB7CiAgICAkQWxsb2NhdGlvbjEwT2sgPSAxOwp9CgokU2VsZi0+VHJ1ZSgKICAgICRBbGxvY2F0aW9uMTBPaywKICAgICdDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdDEwKCknLAopOwoKIyBhbGxvY2F0aW9uIHRlc3QgMTEKbXkgQEFsbG9jYXRpb24xMSA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIyLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgokU2VsZi0+RmFsc2UoCiAgICBzY2FsYXIgQEFsbG9jYXRpb24xMSwKICAgICdDdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdDExKCknLAopOwoKIyBhbGxvY2F0aW9uIHRlc3QgMTIKbXkgQEFsbG9jYXRpb24xMiA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIyLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKKTsKCm15ICRBbGxvY2F0aW9uMTJDb3VudCA9IEBBbGxvY2F0aW9uMTI7Cm15ICRBbGxvY2F0aW9uMTJPayAgICA9IDA7CmlmICggJEFsbG9jYXRpb24xMkNvdW50IGVxIDEgJiYgJEFsbG9jYXRpb24xMlswXSBlcSAkU2VydmljZUlEMSApIHsKICAgICRBbGxvY2F0aW9uMTJPayA9IDE7Cn0KCiRTZWxmLT5UcnVlKAogICAgJEFsbG9jYXRpb24xMk9rLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0MTIoKScsCik7CgojIHNldCBhbGxvY2F0aW9uIDMKJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkQ3VzdG9tZXJVc2VyMiwKICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQxLAogICAgQWN0aXZlICAgICAgICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCik7CiRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjIsCiAgICBTZXJ2aWNlSUQgICAgICAgICA9PiAkU2VydmljZUlEMiwKICAgIEFjdGl2ZSAgICAgICAgICAgID0+IDEsCiAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAopOwoKIyBhbGxvY2F0aW9uIHRlc3QgMTMKbXkgQEFsbG9jYXRpb24xMyA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIxLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgpteSAkQWxsb2NhdGlvbjEzT2sgPSAwOwppZiAoIHNjYWxhciBAQWxsb2NhdGlvbjEzIGVxIDEgJiYgJEFsbG9jYXRpb24xM1swXSBlcSAkU2VydmljZUlEMiApIHsKICAgICRBbGxvY2F0aW9uMTNPayA9IDE7Cn0KCiRTZWxmLT5UcnVlKAogICAgJEFsbG9jYXRpb24xM09rLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0MTMoKScsCik7CgojIGFsbG9jYXRpb24gdGVzdCAxNApteSBAQWxsb2NhdGlvbjE0ID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjEsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAopOwoKbXkgJEFsbG9jYXRpb24xNENvdW50ID0gQEFsbG9jYXRpb24xNDsKbXkgJEFsbG9jYXRpb24xNE9rICAgID0gMDsKaWYgKCAkQWxsb2NhdGlvbjE0Q291bnQgZXEgMSAmJiAkQWxsb2NhdGlvbjE0WzBdIGVxICRTZXJ2aWNlSUQyICkgewogICAgJEFsbG9jYXRpb24xNE9rID0gMTsKfQoKJFNlbGYtPlRydWUoCiAgICAkQWxsb2NhdGlvbjE0T2ssCiAgICAnQ3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckxpc3QxNCgpJywKKTsKCiMgYWxsb2NhdGlvbiB0ZXN0IDE1Cm15IEBBbGxvY2F0aW9uMTUgPSAkU2VydmljZU9iamVjdC0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckxpc3QoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkQ3VzdG9tZXJVc2VyMiwKICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdJRCcsCiAgICBEZWZhdWx0U2VydmljZXMgICA9PiAwLAopOwoKbXkgJEFsbG9jYXRpb24xNUNvdW50ID0gQEFsbG9jYXRpb24xNTsKbXkgJEFsbG9jYXRpb24xNU9rICAgID0gMDsKaWYgKAogICAgJEFsbG9jYXRpb24xNUNvdW50IGVxIDIgJiYgKAogICAgICAgICggJEFsbG9jYXRpb24xNVswXSBlcSAkU2VydmljZUlEMSAmJiAkQWxsb2NhdGlvbjE1WzFdIGVxICRTZXJ2aWNlSUQyICkgfHwKICAgICAgICAoICRBbGxvY2F0aW9uMTVbMF0gZXEgJFNlcnZpY2VJRDIgJiYgJEFsbG9jYXRpb24xNVsxXSBlcSAkU2VydmljZUlEMSApCiAgICApCiAgICApCnsKICAgICRBbGxvY2F0aW9uMTVPayA9IDE7Cn0KCiRTZWxmLT5UcnVlKAogICAgJEFsbG9jYXRpb24xNU9rLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0MTUoKScsCik7CgojIGFsbG9jYXRpb24gdGVzdCAxNgpteSBAQWxsb2NhdGlvbjE2ID0gJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0KAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjIsCiAgICBSZXN1bHQgICAgICAgICAgICA9PiAnSUQnLAopOwoKbXkgJEFsbG9jYXRpb24xNkNvdW50ID0gQEFsbG9jYXRpb24xNjsKbXkgJEFsbG9jYXRpb24xNk9rICAgID0gMDsKaWYgKAogICAgJEFsbG9jYXRpb24xNkNvdW50IGVxIDIgJiYgKAogICAgICAgICggJEFsbG9jYXRpb24xNlswXSBlcSAkU2VydmljZUlEMSAmJiAkQWxsb2NhdGlvbjE2WzFdIGVxICRTZXJ2aWNlSUQyICkgfHwKICAgICAgICAoICRBbGxvY2F0aW9uMTZbMF0gZXEgJFNlcnZpY2VJRDIgJiYgJEFsbG9jYXRpb24xNlsxXSBlcSAkU2VydmljZUlEMSApCiAgICApCiAgICApCnsKICAgICRBbGxvY2F0aW9uMTZPayA9IDE7Cn0KCiRTZWxmLT5UcnVlKAogICAgJEFsbG9jYXRpb24xNk9rLAogICAgJ0N1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJMaXN0MTYoKScsCik7CgojIHJlbmFtZSBjdXN0b21lciB1c2VyMQpteSAlQ3VzdG9tZXIgPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclVzZXJEYXRhR2V0KAogICAgVXNlciA9PiAkQ3VzdG9tZXJVc2VyMSwKKTsKbXkgJE5ld0N1c3RvbWVyVXNlcjEgPSAkSGVscGVyT2JqZWN0LT5HZXRSYW5kb21JRCgpOwpteSAkVXBkYXRlICAgICAgICAgICA9ICRDdXN0b21lclVzZXJPYmplY3QtPkN1c3RvbWVyVXNlclVwZGF0ZSgKICAgICVDdXN0b21lciwKICAgIElEICAgICAgICA9PiAkQ3VzdG9tZXJ7VXNlckxvZ2lufSwKICAgIFVzZXJMb2dpbiA9PiAkTmV3Q3VzdG9tZXJVc2VyMSwKICAgIFVzZXJJRCAgICA9PiAxLAopOwokU2VsZi0+VHJ1ZSgKICAgICRVcGRhdGUsCiAgICAiQ3VzdG9tZXJVc2VyVXBkYXRlIC0gJEN1c3RvbWVye1VzZXJMb2dpbn0gLSAkTmV3Q3VzdG9tZXJVc2VyMSIsCik7CgojIGFsbG9jYXRpb24gdGVzdCBhZnRlciByZW5hbWUKIyBpbnN0YW50aWF0ZSBuZXcgc2VydmljZSBvYmplY3QgYmVjYXVzZSBvZiBjYWNoaW5nIQokS2VybmVsOjpPTS0+T2JqZWN0c0Rpc2NhcmQoIE9iamVjdHMgPT4gWydLZXJuZWw6OlN5c3RlbTo6U2VydmljZSddICk7CiRTZXJ2aWNlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlNlcnZpY2UnKTsKCm15IEBBbGxvY2F0aW9uMTcgPSAkU2VydmljZU9iamVjdC0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckxpc3QoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkQ3VzdG9tZXJ7VXNlckxvZ2lufSwKICAgIFJlc3VsdCAgICAgICAgICAgID0+ICdJRCcsCiAgICBEZWZhdWx0U2VydmljZXMgICA9PiAwLAopOwoKJFNlbGYtPklzKAogICAgc2NhbGFyIEBBbGxvY2F0aW9uMTcsCiAgICAwLAogICAgIk5vIHNlcnZpY2VzIGFsbG9jYXRlZCB0byBvbGQgY3VzdG9tZXIgJEN1c3RvbWVyVXNlcjEgYWZ0ZXIgcmVuYW1lIiwKKTsKbXkgQEFsbG9jYXRpb24xOCA9ICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyTGlzdCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICROZXdDdXN0b21lclVzZXIxLAogICAgUmVzdWx0ICAgICAgICAgICAgPT4gJ0lEJywKICAgIERlZmF1bHRTZXJ2aWNlcyAgID0+IDAsCik7CgokU2VsZi0+SXMoCiAgICBzY2FsYXIgQEFsbG9jYXRpb24xOCwKICAgIDEsCiAgICAiU2VydmljZXMgYWxsb2NhdGVkIHRvIG5ldyBjdXN0b21lciAkTmV3Q3VzdG9tZXJVc2VyMSBhZnRlciByZW5hbWUiLAopOwoKIyByZW5hbWUgY3VzdG9tZXIgdXNlciBhZ2FpbiBzbyByZWNvcmQgY2FuIGJlIGRlbGV0ZWQgd2hlbiB0ZXN0IGZpbmlzaGVzCiRVcGRhdGUgPSAkQ3VzdG9tZXJVc2VyT2JqZWN0LT5DdXN0b21lclVzZXJVcGRhdGUoCiAgICAlQ3VzdG9tZXIsCiAgICBJRCAgICAgICAgPT4gJE5ld0N1c3RvbWVyVXNlcjEsCiAgICBVc2VyTG9naW4gPT4gJEN1c3RvbWVye1VzZXJMb2dpbn0sCiAgICBVc2VySUQgICAgPT4gMSwKKTsKCiMgZGVsZXRlIGFsbCB0ZXN0IGFsbG9jYXRpb25zIHRvIGNsZWFuIHN5c3RlbQokU2VydmljZU9iamVjdC0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckFkZCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICc8REVGQVVMVD4nLAogICAgU2VydmljZUlEICAgICAgICAgPT4gJFNlcnZpY2VJRDEsCiAgICBBY3RpdmUgICAgICAgICAgICA9PiAwLAogICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKKTsKJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAnPERFRkFVTFQ+JywKICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQyLAogICAgQWN0aXZlICAgICAgICAgICAgPT4gMCwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCik7CiRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjEsCiAgICBTZXJ2aWNlSUQgICAgICAgICA9PiAkU2VydmljZUlEMSwKICAgIEFjdGl2ZSAgICAgICAgICAgID0+IDAsCiAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAopOwokU2VydmljZU9iamVjdC0+Q3VzdG9tZXJVc2VyU2VydmljZU1lbWJlckFkZCgKICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICRDdXN0b21lclVzZXIxLAogICAgU2VydmljZUlEICAgICAgICAgPT4gJFNlcnZpY2VJRDIsCiAgICBBY3RpdmUgICAgICAgICAgICA9PiAwLAogICAgVXNlcklEICAgICAgICAgICAgPT4gMSwKKTsKJFNlcnZpY2VPYmplY3QtPkN1c3RvbWVyVXNlclNlcnZpY2VNZW1iZXJBZGQoCiAgICBDdXN0b21lclVzZXJMb2dpbiA9PiAkQ3VzdG9tZXJVc2VyMiwKICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQxLAogICAgQWN0aXZlICAgICAgICAgICAgPT4gMCwKICAgIFVzZXJJRCAgICAgICAgICAgID0+IDEsCik7CiRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgQ3VzdG9tZXJVc2VyTG9naW4gPT4gJEN1c3RvbWVyVXNlcjIsCiAgICBTZXJ2aWNlSUQgICAgICAgICA9PiAkU2VydmljZUlEMiwKICAgIEFjdGl2ZSAgICAgICAgICAgID0+IDAsCiAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAopOwoKIyByZXN0b3JlIGFsbCBvcmlnaW5hbCBkZWZhdWx0IHNlcnZpY2VzCmZvciBteSAkU2VydmljZUlEIChAT3JpZ2luYWxEZWZhdWx0U2VydmljZXMpIHsKICAgICRTZXJ2aWNlT2JqZWN0LT5DdXN0b21lclVzZXJTZXJ2aWNlTWVtYmVyQWRkKAogICAgICAgIEN1c3RvbWVyVXNlckxvZ2luID0+ICc8REVGQVVMVD4nLAogICAgICAgIFNlcnZpY2VJRCAgICAgICAgID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgQWN0aXZlICAgICAgICAgICAgPT4gMSwKICAgICAgICBVc2VySUQgICAgICAgICAgICA9PiAxLAogICAgKTsKfQoKIyBzZXQgc2VydmljZTEgaW52YWxpZApteSAkU2VydmljZVVwZGF0ZTEgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVVwZGF0ZSgKICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlEMSwKICAgIE5hbWUgICAgICA9PiAkU2VydmljZVJhbmQxLAogICAgVmFsaWRJRCAgID0+IDIsCiAgICBVc2VySUQgICAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICBUeXBlSUQgICAgICA9PiAxLAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KKTsKCiRTZWxmLT5UcnVlKAogICAgJFNlcnZpY2VVcGRhdGUxLAogICAgJ1NlcnZpY2VVcGRhdGUxKCknLAopOwoKIyBzZXQgc2VydmljZTIgaW52YWxpZApteSAkU2VydmljZVVwZGF0ZTIgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVVwZGF0ZSgKICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZUlEMiwKICAgIE5hbWUgICAgICA9PiAkU2VydmljZVJhbmQyLAogICAgVmFsaWRJRCAgID0+IDIsCiAgICBVc2VySUQgICAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICBUeXBlSUQgICAgICA9PiAxLAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KKTsKCiRTZWxmLT5UcnVlKAogICAgJFNlcnZpY2VVcGRhdGUyLAogICAgJ1NlcnZpY2VVcGRhdGUyKCknLAopOwoKMTsK
IyAtLQojIElUU01DSVBBbGxvY2F0ZS50IC0gY3JpdGljYWxpdHksIGltcGFjdCBwcmlvcml0eSB0ZXN0cwojIENvcHlyaWdodCAoQykgMjAwMS0yMDE0IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLmNvbS8KIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCiMgLS0KCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHZhcnMgcXcoJFNlbGYpOwoKbXkgJENJUEFsbG9jYXRlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DSVBBbGxvY2F0ZScpOwoKIyBnZXQgY3VycmVudCBhbGxvY2F0aW9uIGxpc3QgKFVzZXJJRCBpcyBuZWVkZWQpCm15ICRBbGxvY2F0ZURhdGExID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZUxpc3QoKTsKCiMgY2hlY2sgdGhlIHJlc3VsdAokU2VsZi0+RmFsc2UoICRBbGxvY2F0ZURhdGExLCAnQWxsb2NhdGVMaXN0KCknICk7CgojIGdldCBjdXJyZW50IGFsbG9jYXRpb24gbGlzdApteSAkQWxsb2NhdGVEYXRhMiA9ICRDSVBBbGxvY2F0ZU9iamVjdC0+QWxsb2NhdGVMaXN0KAogICAgVXNlcklEID0+IDEsCik7CgojIGNoZWNrIHRoZSByZXN1bHQKJFNlbGYtPlRydWUoICRBbGxvY2F0ZURhdGEyLCAnQWxsb2NhdGVMaXN0KCknICk7CgojIGNoZWNrIHRoZSBhbGxvY2F0aW9uIGhhc2gKbXkgJEhhc2hPSyA9IDE7CmlmICggcmVmICRBbGxvY2F0ZURhdGEyIG5lICdIQVNIJyApIHsKICAgICRIYXNoT0sgPSAwOwp9CgojIGNoZWNrIHRoZSBhbGxvY2F0aW9uIDJkIGhhc2gKaWYgKCRIYXNoT0spIHsKCiAgICBJTVBBQ1Q6CiAgICBmb3IgbXkgJEltcGFjdCAoIHNvcnQga2V5cyAleyRBbGxvY2F0ZURhdGEyfSApIHsKCiAgICAgICAgaWYgKCByZWYgJEFsbG9jYXRlRGF0YTItPnskSW1wYWN0fSBuZSAnSEFTSCcgKSB7CiAgICAgICAgICAgICRIYXNoT0sgPSAwOwogICAgICAgICAgICBsYXN0IElNUEFDVDsKICAgICAgICB9CgogICAgICAgIENSSVRJQ0FMSVRZOgogICAgICAgIGZvciBteSAkQ3JpdGljYWxpdHkgKCBzb3J0IGtleXMgJXsgJEFsbG9jYXRlRGF0YTItPnskSW1wYWN0fSB9ICkgewoKICAgICAgICAgICAgaWYgKCAhJENyaXRpY2FsaXR5IHx8ICEkQWxsb2NhdGVEYXRhMi0+eyRJbXBhY3R9LT57JENyaXRpY2FsaXR5fSApIHsKICAgICAgICAgICAgICAgICRIYXNoT0sgPSAwOwogICAgICAgICAgICAgICAgbGFzdCBJTVBBQ1Q7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCiMgY2hlY2sgSGFzaE9LCiRTZWxmLT5UcnVlKCAkSGFzaE9LLCAnQWxsb2NhdGVMaXN0KCknICk7CgojIGNhbGwgUHJpb3JpdHlBbGxvY2F0aW9uR2V0KCkgZm9yIG9uZSBDcml0aWNhbGl0eS9JbXBhY3QgcGFpcgppZiAoJEhhc2hPSykgewoKICAgIG15ICgkSW1wYWN0KSA9IHNvcnQga2V5cyAleyRBbGxvY2F0ZURhdGEyfTsKCiAgICBpZiAoICRBbGxvY2F0ZURhdGEyLT57JEltcGFjdH0gKSB7CiAgICAgICAgbXkgKCRDcml0aWNhbGl0eSkgPSBzb3J0IGtleXMgJXsgJEFsbG9jYXRlRGF0YTItPnskSW1wYWN0fSB9OwoKICAgICAgICBteSAkRXhwZWN0ZWRQcmlvcml0eUlEID0gJEFsbG9jYXRlRGF0YTItPnskSW1wYWN0fS0+eyRDcml0aWNhbGl0eX07CiAgICAgICAgbXkgJFByaW9yaXR5SUQgICAgICAgICA9ICRDSVBBbGxvY2F0ZU9iamVjdC0+UHJpb3JpdHlBbGxvY2F0aW9uR2V0KAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAkQ3JpdGljYWxpdHksCiAgICAgICAgICAgIEltcGFjdCAgICAgID0+ICRJbXBhY3QsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRQcmlvcml0eUlELAogICAgICAgICAgICAkRXhwZWN0ZWRQcmlvcml0eUlELAogICAgICAgICAgICAnUHJpb3JpdHlBbGxvY2F0aW9uR2V0KCknLAogICAgICAgICk7CiAgICB9Cn0KCiMgdXBkYXRlIHRoZSBhbGxvY2F0aW9uIGhhc2ggKG5vdCBhbGwgbmVlZGVkIGFyZ3VtZW50cyBnaXZlbikKbXkgJFN1Y2Nlc3MxID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZVVwZGF0ZSgKICAgIFVzZXJJRCA9PiAxLAopOwoKIyBjaGVjayB0aGUgcmVzdWx0CiRTZWxmLT5GYWxzZSggJFN1Y2Nlc3MxLCAnQWxsb2NhdGVVcGRhdGUoKScgKTsKCiMgdXBkYXRlIHRoZSBhbGxvY2F0aW9uIGhhc2ggKG5vdCBhbGwgbmVlZGVkIGFyZ3VtZW50cyBnaXZlbikKbXkgJFN1Y2Nlc3MyID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZVVwZGF0ZSgKICAgIEFsbG9jYXRlRGF0YSA9PiAkQWxsb2NhdGVEYXRhMiwKKTsKCiMgY2hlY2sgdGhlIHJlc3VsdAokU2VsZi0+RmFsc2UoICRTdWNjZXNzMiwgJ0FsbG9jYXRlVXBkYXRlKCknICk7CgojIHVwZGF0ZSB0aGUgYWxsb2NhdGlvbiBoYXNoIChhbGxvY2F0aW9uIGhhc2gpCm15ICRTdWNjZXNzMyA9ICRDSVBBbGxvY2F0ZU9iamVjdC0+QWxsb2NhdGVVcGRhdGUoCiAgICBBbGxvY2F0ZURhdGEgPT4gewogICAgICAgIFRlc3QgID0+ICdhYWEnLAogICAgICAgIFRlc3QyID0+ICdiYmInLAogICAgfSwKICAgIFVzZXJJRCA9PiAxLAopOwoKIyBjaGVjayB0aGUgcmVzdWx0CiRTZWxmLT5GYWxzZSggJFN1Y2Nlc3MzLCAnQWxsb2NhdGVVcGRhdGUoKScgKTsKCiMgdXBkYXRlIHRoZSBhbGxvY2F0aW9uIGhhc2gKbXkgJFN1Y2Nlc3M0ID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZVVwZGF0ZSgKICAgIEFsbG9jYXRlRGF0YSA9PiAkQWxsb2NhdGVEYXRhMiwKICAgIFVzZXJJRCAgICAgICA9PiAxLAopOwoKIyBjaGVjayB0aGUgcmVzdWx0CiRTZWxmLT5UcnVlKCAkU3VjY2VzczQsICdBbGxvY2F0ZVVwZGF0ZSgpJyApOwoKMTsK
IyAtLQojIFNlcnZpY2UudCAtIFNlcnZpY2UgdGVzdHMKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyAkb3JpZ2luOiBodHRwczovL2dpdGh1Yi5jb20vT1RSUy9vdHJzL2Jsb2IvMGNkMjJkZDMzY2RkNTFkNmZhYzRjOTk3YzJhZWI2OGE4ZTg5OTEzNC9zY3JpcHRzL3Rlc3QvU2VydmljZS50CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgojIGdldCBuZWVkZWQgb2JqZWN0cwpteSAkQ29uZmlnT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7Cm15ICRIZWxwZXJPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKbXkgJFNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwpteSAkVXNlck9iamVjdCAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpVc2VyJyk7CgpteSAkUmFuZG9tSUQgPSAkSGVscGVyT2JqZWN0LT5HZXRSYW5kb21JRCgpOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIG1ha2UgcHJlcGFyYXRpb25zCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgY3JlYXRlIG5lZWRlZCB1c2VycwpteSBAVXNlcklEczsKewoKICAgICMgZGlzYWJsZSBlbWFpbCBjaGVja3MgdG8gY3JlYXRlIG5ldyB1c2VyCiAgICBteSAkQ2hlY2tFbWFpbEFkZHJlc3Nlc09yZyA9ICRDb25maWdPYmplY3QtPkdldCgnQ2hlY2tFbWFpbEFkZHJlc3NlcycpIHx8IDE7CiAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgS2V5ICAgPT4gJ0NoZWNrRW1haWxBZGRyZXNzZXMnLAogICAgICAgIFZhbHVlID0+IDAsCiAgICApOwoKICAgIGZvciBteSAkQ291bnRlciAoIDEgLi4gMiApIHsKCiAgICAgICAgIyBjcmVhdGUgbmV3IHVzZXJzIGZvciB0aGUgdGVzdHMKICAgICAgICBteSAkVXNlcklEID0gJFVzZXJPYmplY3QtPlVzZXJBZGQoCiAgICAgICAgICAgIFVzZXJGaXJzdG5hbWUgPT4gJ1NlcnZpY2UnIC4gJENvdW50ZXIsCiAgICAgICAgICAgIFVzZXJMYXN0bmFtZSAgPT4gJ1VuaXRUZXN0JywKICAgICAgICAgICAgVXNlckxvZ2luICAgICA9PiAnVW5pdFRlc3QtU2VydmljZS0nIC4gJENvdW50ZXIgLiBpbnQgcmFuZCAxXzAwMF8wMDAsCiAgICAgICAgICAgIFVzZXJFbWFpbCAgICAgPT4gJ1VuaXRUZXN0LVNlcnZpY2UtJyAuICRDb3VudGVyIC4gJ0Bsb2NhbGhvc3QnLAogICAgICAgICAgICBWYWxpZElEICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZVVzZXJJRCAgPT4gMSwKICAgICAgICApOwoKICAgICAgICBwdXNoIEBVc2VySURzLCAkVXNlcklEOwogICAgfQoKICAgICMgcmVzdG9yZSBvcmlnaW5hbCBlbWFpbCBjaGVjayBwYXJhbQogICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgICAgICBWYWx1ZSA9PiAkQ2hlY2tFbWFpbEFkZHJlc3Nlc09yZywKICAgICk7Cn0KCiMgY3JlYXRlIG5lZWRlZCByYW5kb20gc2VydmljZSBuYW1lcwpteSBAU2VydmljZU5hbWU7CmZvciBteSAkQ291bnRlciAoIDEgLi4gMTEgKSB7CiAgICBwdXNoIEBTZXJ2aWNlTmFtZSwgJ1VuaXRUZXN0JyAuIGludCByYW5kIDFfMDAwXzAwMDsKfQoKIyBnZXQgb3JpZ2luYWwgc2VydmljZSBsaXN0IGZvciBsYXRlciBjaGVja3MKbXkgJVNlcnZpY2VMaXN0T3JpZ2luYWwgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxpc3QoCiAgICBWYWxpZCAgPT4gMCwKICAgIFVzZXJJRCA9PiAxLAopOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIGRlZmluZSBnZW5lcmFsIHRlc3RzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICRJdGVtRGF0YSA9IFsKCiAgICAjIHRoaXMgc2VydmljZSBpcyBOT1QgY29tcGxldGUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgaXMgTk9UIGNvbXBsZXRlIGFuZCBtdXN0IG5vdCBiZSBhZGRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE5hbWUgICA9PiAkU2VydmljZU5hbWVbMF0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzZXJ2aWNlIGlzIE5PVCBjb21wbGV0ZSBhbmQgbXVzdCBub3QgYmUgYWRkZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIH0sCiAgICB9LAojIC0tLQojIElUU00KIyAtLS0KCiAgICAjIHRoaXMgc2VydmljZSBpcyBOT1QgY29tcGxldGUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMF0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICAgICBUeXBlSUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgaXMgTk9UIGNvbXBsZXRlIGFuZCBtdXN0IG5vdCBiZSBhZGRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICRTZXJ2aWNlTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKICAgICAgICB9LAogICAgfSwKIyAtLS0KCiAgICAjIHRoaXMgc2VydmljZSBtdXN0IGJlIGluc2VydGVkIHN1Y2Vzc2Z1bGx5CiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMF0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIFBhcmVudElEICA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZXJ2aWNlTmFtZVswXSwKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICRTZXJ2aWNlTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICA9PiAnJywKICAgICAgICAgICAgQ3JlYXRlQnkgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBoYXZlIHRoZSBzYW1lIG5hbWUgYXMgb25lIHRlc3QgYmVmb3JlIGFuZCBtdXN0IG5vdCBiZSBhZGRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzBdLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzZXJ2aWNlIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoc2VydmljZSBpcyBOT1QgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2VydmljZSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKHNlcnZpY2UgaXMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICA9PiAkU2VydmljZU5hbWVbMF0gLiAnVVBEQVRFMScsCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHNlcnZpY2Ugb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChzZXJ2aWNlIGlzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZVswXSAuICdVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIH0sCiAgICB9LAojIC0tLQojIElUU00KIyAtLS0KCiAgICAjIHRoZSBzZXJ2aWNlIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoc2VydmljZSBpcyBOT1QgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMF0gLiAnVVBEQVRFMScsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgICAgICBUeXBlSUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2VydmljZSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKHNlcnZpY2UgaXMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgICAgID0+ICRTZXJ2aWNlTmFtZVswXSAuICdVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKICAgICAgICB9LAogICAgfSwKIyAtLS0KCiAgICAjIHRoaXMgc2VydmljZSBtdXN0IGJlIGluc2VydGVkIHN1Y2Vzc2Z1bGx5CiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMV0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCA9PiAnVGVzdENvbW1lbnQyJywKICAgICAgICAgICAgVXNlcklEICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMiwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIFBhcmVudElEICA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZXJ2aWNlTmFtZVsxXSwKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICRTZXJ2aWNlTmFtZVsxXSwKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICA9PiAnVGVzdENvbW1lbnQyJywKICAgICAgICAgICAgQ3JlYXRlQnkgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMiwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzZXJ2aWNlIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoc2VydmljZSB1cGRhdGUgYXJndW1lbnRzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzZXJ2aWNlIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoc2VydmljZSB1cGRhdGUgYXJndW1lbnRzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgPT4gJFNlcnZpY2VOYW1lWzFdIC4gJ1VQREFURTInLAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzZXJ2aWNlIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoc2VydmljZSB1cGRhdGUgYXJndW1lbnRzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZVsxXSAuICdVUERBVEUyJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHNlcnZpY2Ugb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgKHNlcnZpY2UgdXBkYXRlIGFyZ3VtZW50cyBhcmUgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMV0gLiAnVVBEQVRFMicsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCA9PiAnVGVzdENvbW1lbnQyVVBEQVRFMicsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gJFVzZXJJRHNbMF0sCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiA0LAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgID0+ICcnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJFNlcnZpY2VOYW1lWzFdIC4gJ1VQREFURTInLAogICAgICAgICAgICBOYW1lU2hvcnQgPT4gJFNlcnZpY2VOYW1lWzFdIC4gJ1VQREFURTInLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICdUZXN0Q29tbWVudDJVUERBVEUyJywKICAgICAgICAgICAgQ3JlYXRlQnkgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICA9PiAkVXNlcklEc1swXSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDQsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHNlcnZpY2Ugb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgKHNlcnZpY2UgdXBkYXRlIGFyZ3VtZW50cyBhcmUgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMV0gLiAnVVBEQVRFMycsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCA9PiAnVGVzdENvbW1lbnQyVVBEQVRFMycsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gJFVzZXJJRHNbMV0sCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgID0+ICcnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJFNlcnZpY2VOYW1lWzFdIC4gJ1VQREFURTMnLAogICAgICAgICAgICBOYW1lU2hvcnQgPT4gJFNlcnZpY2VOYW1lWzFdIC4gJ1VQREFURTMnLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICdUZXN0Q29tbWVudDJVUERBVEUzJywKICAgICAgICAgICAgQ3JlYXRlQnkgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICA9PiAkVXNlcklEc1sxXSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgaGFzIGFuIGludmFsaWQgbmFtZSBhbmQgbXVzdCBiZSBOT1QgaW5zZXJ0ZWQKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZVsxXSAuICc6OlVQREFURTQnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBoYXMgYW4gaW52YWxpZCBuYW1lIGFuZCBtdXN0IGJlIE5PVCBpbnNlcnRlZAogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzFdIC4gJzo6VGVzdDo6VVBEQVRFNCcsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzZXJ2aWNlIGhhcyBhbiBpbnZhbGlkIG5hbWUgYW5kIG11c3QgYmUgTk9UIGluc2VydGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMl0gLiAnOjpUZXN0JywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgaGFzIGFuIGludmFsaWQgbmFtZSBhbmQgbXVzdCBiZSBOT1QgaW5zZXJ0ZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICc6OlRlc3QnIC4gJFNlcnZpY2VOYW1lWzJdLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBoYXMgYW4gaW52YWxpZCBuYW1lIGFuZCBtdXN0IGJlIE5PVCBpbnNlcnRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzJdIC4gJzo6VGVzdDo6VGVzdCcsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzZXJ2aWNlIGhhcyBhbiBpbnZhbGlkIG5hbWUgYW5kIG11c3QgYmUgTk9UIGluc2VydGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbMl0gLiAnVGVzdDo6JywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgbXVzdCBiZSBpbnNlcnRlZCBzdWNlc3NmdWxseSAoY2hlY2sgc3RyaW5nIGNsZWFuZXIgZnVuY3Rpb24pCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAiIFx0IFxuIFxyICIgLiAkU2VydmljZU5hbWVbM10gLiAiIFx0IFxuIFxyICIsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCA9PiAiIFx0IFxuIFxyIFRlc3QgQ29tbWVudCBcdCBcbiBcciAiLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAyLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgID0+ICcnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJFNlcnZpY2VOYW1lWzNdLAogICAgICAgICAgICBOYW1lU2hvcnQgPT4gJFNlcnZpY2VOYW1lWzNdLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICdUZXN0IENvbW1lbnQnLAogICAgICAgICAgICBDcmVhdGVCeSAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAyLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHNlcnZpY2Ugb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgc3VjZXNzZnVsbHkgKGNoZWNrIHN0cmluZyBjbGVhbmVyIGZ1bmN0aW9uKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gIiBcdCBcbiBcciAiIC4gJFNlcnZpY2VOYW1lWzNdIC4gIiBVUERBVEUxIFx0IFxuIFxyICIsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCA9PiAiIFx0IFxuIFxyIFRlc3QgQ29tbWVudCBcdCBcbiBcciAiLAogICAgICAgICAgICBVc2VySUQgID0+ICRVc2VySURzWzFdLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIFBhcmVudElEICA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZXJ2aWNlTmFtZVszXSAuICcgVVBEQVRFMScsCiAgICAgICAgICAgIE5hbWVTaG9ydCA9PiAkU2VydmljZU5hbWVbM10gLiAnIFVQREFURTEnLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICdUZXN0IENvbW1lbnQnLAogICAgICAgICAgICBDcmVhdGVCeSAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgID0+ICRVc2VySURzWzFdLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBtdXN0IGJlIGluc2VydGVkIHN1Y2Vzc2Z1bGx5ICh1bmljb2RlIGNoZWNrcykKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZVs0XSAuICcgz5Igz6Egxqkgz54gJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBDb21tZW50ID0+ICcg0aAg0aQgVGVzdENvbW1lbnQ1IM+gIM6pICcsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBQYXJlbnRJRCAgPT4gJycsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VydmljZU5hbWVbNF0gLiAnIM+SIM+hIMapIM+eJywKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICRTZXJ2aWNlTmFtZVs0XSAuICcgz5Igz6Egxqkgz54nLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICfRoCDRpCBUZXN0Q29tbWVudDUgz6AgzqknLAogICAgICAgICAgICBDcmVhdGVCeSAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHNlcnZpY2Ugb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgc3VjZXNzZnVsbHkgKHVuaWNvZGUgY2hlY2tzKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzRdIC4gJyDPkiDPoSDGqSDPniBVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAyLAogICAgICAgICAgICBDb21tZW50ID0+ICcg0aAg0aQgVGVzdENvbW1lbnQ1IM+gIM6pIFVQREFURTEnLAogICAgICAgICAgICBVc2VySUQgID0+ICRVc2VySURzWzBdLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIFBhcmVudElEICA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZXJ2aWNlTmFtZVs0XSAuICcgz5Igz6Egxqkgz54gVVBEQVRFMScsCiAgICAgICAgICAgIE5hbWVTaG9ydCA9PiAkU2VydmljZU5hbWVbNF0gLiAnIM+SIM+hIMapIM+eIFVQREFURTEnLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCAgID0+ICfRoCDRpCBUZXN0Q29tbWVudDUgz6AgzqkgVVBEQVRFMScsCiAgICAgICAgICAgIENyZWF0ZUJ5ICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgPT4gJFVzZXJJRHNbMF0sCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzZXJ2aWNlIG11c3QgYmUgaW5zZXJ0ZWQgc3VjZXNzZnVsbHkgKHNwZWNpYWwgY2hhcmFjdGVyIGNoZWNrcykKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICcgW3Rlc3RdJSpcXCAnIC4gJFNlcnZpY2VOYW1lWzhdIC4gJyBbdGVzdF0lKlxcICcsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCA9PiAnIFt0ZXN0XSUqXFwgVGVzdCBDb21tZW50IFt0ZXN0XSUqXFwgJywKICAgICAgICAgICAgVXNlcklEICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIFBhcmVudElEICA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICdbdGVzdF0lKlxcICcgLiAkU2VydmljZU5hbWVbOF0gLiAnIFt0ZXN0XSUqXFwnLAogICAgICAgICAgICBOYW1lU2hvcnQgPT4gJ1t0ZXN0XSUqXFwgJyAuICRTZXJ2aWNlTmFtZVs4XSAuICcgW3Rlc3RdJSpcXCcsCiAgICAgICAgICAgIFZhbGlkSUQgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgPT4gJ1t0ZXN0XSUqXFwgVGVzdCBDb21tZW50IFt0ZXN0XSUqXFwnLAogICAgICAgICAgICBDcmVhdGVCeSAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHNlcnZpY2Ugb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgc3VjZXNzZnVsbHkgKHNwZWNpYWwgY2hhcmFjdGVyIGNoZWNrcykKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICcgW3Rlc3RdJSpcXCAnIC4gJFNlcnZpY2VOYW1lWzhdIC4gJyBVUERBVEUxIFt0ZXN0XSUqXFwgJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAyLAogICAgICAgICAgICBDb21tZW50ID0+ICcgW3Rlc3RdJSpcXCBUZXN0IENvbW1lbnQgVVBEQVRFMSBbdGVzdF0lKlxcICcsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gJFVzZXJJRHNbMV0sCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgID0+ICcnLAogICAgICAgICAgICBOYW1lICAgICAgPT4gJ1t0ZXN0XSUqXFwgJyAuICRTZXJ2aWNlTmFtZVs4XSAuICcgVVBEQVRFMSBbdGVzdF0lKlxcJywKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICdbdGVzdF0lKlxcICcgLiAkU2VydmljZU5hbWVbOF0gLiAnIFVQREFURTEgW3Rlc3RdJSpcXCcsCiAgICAgICAgICAgIFZhbGlkSUQgICA9PiAyLAogICAgICAgICAgICBDb21tZW50ICAgPT4gJ1t0ZXN0XSUqXFwgVGVzdCBDb21tZW50IFVQREFURTEgW3Rlc3RdJSpcXCcsCiAgICAgICAgICAgIENyZWF0ZUJ5ICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgPT4gJFVzZXJJRHNbMV0sCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzZXJ2aWNlIG11c3QgYmUgaW5zZXJ0ZWQgc3VjZXNzZnVsbHkgKHVzZWQgZm9yIHRoZSBmb2xsb3dpbmcgdGVzdHMpCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU2VydmljZU5hbWVbNV0sCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIFBhcmVudElEICA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZXJ2aWNlTmFtZVs1XSwKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICRTZXJ2aWNlTmFtZVs1XSwKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENyZWF0ZUJ5ICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgbXVzdCBiZSBpbnNlcnRlZCBzdWNlc3NmdWxseSAocGFyZW50IHNlcnZpY2UgY2hlY2spCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgPT4gJ0xBU1RBRERJRCcsCiAgICAgICAgICAgIE5hbWUgICAgID0+ICRTZXJ2aWNlTmFtZVs2XSwKICAgICAgICAgICAgVmFsaWRJRCAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBQYXJlbnRJRCAgPT4gJ0xBU1RBRERJRCcsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VydmljZU5hbWVbNV0gLiAnOjonIC4gJFNlcnZpY2VOYW1lWzZdLAogICAgICAgICAgICBOYW1lU2hvcnQgPT4gJFNlcnZpY2VOYW1lWzZdLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMSwKICAgICAgICAgICAgQ3JlYXRlQnkgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2VydmljZSBtdXN0IGJlIGluc2VydGVkIHN1Y2Vzc2Z1bGx5IChwYXJlbnQgc2VydmljZSBjaGVjaykKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBQYXJlbnRJRCA9PiAnTEFTVEFERElEJywKICAgICAgICAgICAgTmFtZSAgICAgPT4gIiBcbiBcdCAiIC4gJFNlcnZpY2VOYW1lWzddIC4gIiBcbiBcdCAiLAogICAgICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIFBhcmVudElEICA9PiAnTEFTVEFERElEJywKICAgICAgICAgICAgTmFtZSAgICAgID0+ICRTZXJ2aWNlTmFtZVs1XSAuICc6OicgLiAkU2VydmljZU5hbWVbNl0gLiAnOjonIC4gJFNlcnZpY2VOYW1lWzddLAogICAgICAgICAgICBOYW1lU2hvcnQgPT4gJFNlcnZpY2VOYW1lWzddLAogICAgICAgICAgICBWYWxpZElEICAgPT4gMSwKICAgICAgICAgICAgQ3JlYXRlQnkgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICAgICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzZXJ2aWNlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKHBhcmVudCBzZXJ2aWNlIGlkIGFuZCBwYXJlbnQgaWQgYXJlIGlkZW50aWNhbCkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBQYXJlbnRJRCA9PiAnTEFTVEFERElEJywKICAgICAgICAgICAgTmFtZSAgICAgPT4gJFNlcnZpY2VOYW1lWzddIC4gJ1VQREFURTEnLAogICAgICAgICAgICBWYWxpZElEICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzZXJ2aWNlIG11c3QgYmUgdXBkYXRlZCBzdWNlc3NmdWxseSAobW92ZSBzZXJ2aWNlIHRvIHRoZSBoaWdoZXJzdCBsZXZlbCkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBQYXJlbnRJRCA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgPT4gJFNlcnZpY2VOYW1lWzddIC4gJyBVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBVcGRhdGVHZXQgPT4gewogICAgICAgICAgICBQYXJlbnRJRCAgPT4gJycsCiAgICAgICAgICAgIE5hbWUgICAgICA9PiAkU2VydmljZU5hbWVbN10gLiAnIFVQREFURTEnLAogICAgICAgICAgICBOYW1lU2hvcnQgPT4gJFNlcnZpY2VOYW1lWzddIC4gJyBVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENyZWF0ZUJ5ICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNlcnZpY2UgbXVzdCBiZSB1cGRhdGVkIHN1Y2Vzc2Z1bGx5IChtb3ZlIHNlcnZpY2UgYmFjayB3aXRoIHRoZSBvbGQgcGFyZW50IHNlcnZpY2UpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgPT4gJ0xBU1RMQVNUQURESUQnLAogICAgICAgICAgICBOYW1lICAgICA9PiAkU2VydmljZU5hbWVbN10gLiAnIFVQREFURSgyKScsCiAgICAgICAgICAgIFZhbGlkSUQgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgUGFyZW50SUQgPT4gJ0xBU1RMQVNUQURESUQnLAogICAgICAgICAgICBOYW1lICAgICA9PiAkU2VydmljZU5hbWVbNV0gLiAnOjonCiAgICAgICAgICAgICAgICAuICRTZXJ2aWNlTmFtZVs2XSAuICc6OicKICAgICAgICAgICAgICAgIC4gJFNlcnZpY2VOYW1lWzddCiAgICAgICAgICAgICAgICAuICcgVVBEQVRFKDIpJywKICAgICAgICAgICAgTmFtZVNob3J0ID0+ICRTZXJ2aWNlTmFtZVs3XSAuICcgVVBEQVRFKDIpJywKICAgICAgICAgICAgVmFsaWRJRCAgID0+IDEsCiAgICAgICAgICAgIENyZWF0ZUJ5ICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICAgICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCl07CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgcnVuIGdlbmVyYWwgdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJFRlc3RDb3VudCA9IDE7Cm15ICRMYXN0QWRkZWRTZXJ2aWNlSUQ7Cm15ICRMYXN0TGFzdEFkZGVkU2VydmljZUlEOwpteSAkQWRkZWRDb3VudGVyID0gMDsKCmZvciBteSAkSXRlbSAoIEB7JEl0ZW1EYXRhfSApIHsKCiAgICBpZiAoICRJdGVtLT57QWRkfSApIHsKCiAgICAgICAgIyBwcmVwYXJlIHBhcmVudCBpZAogICAgICAgIGlmICggJEl0ZW0tPntBZGR9LT57UGFyZW50SUR9ICYmICRJdGVtLT57QWRkfS0+e1BhcmVudElEfSBlcSAnTEFTVEFERElEJyApIHsKICAgICAgICAgICAgJEl0ZW0tPntBZGR9LT57UGFyZW50SUR9ID0gJExhc3RBZGRlZFNlcnZpY2VJRDsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkSXRlbS0+e0FkZH0tPntQYXJlbnRJRH0gJiYgJEl0ZW0tPntBZGR9LT57UGFyZW50SUR9IGVxICdMQVNUTEFTVEFERElEJyApIHsKICAgICAgICAgICAgJEl0ZW0tPntBZGR9LT57UGFyZW50SUR9ID0gJExhc3RMYXN0QWRkZWRTZXJ2aWNlSUQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBkZWxldGUgJEl0ZW0tPntBZGR9LT57UGFyZW50SUR9OwogICAgICAgIH0KCiAgICAgICAgIyBhZGQgbmV3IHNlcnZpY2UKICAgICAgICBteSAkU2VydmljZUlEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICAgICAgICAgICV7ICRJdGVtLT57QWRkfSB9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgaWYgc2VydmljZSB3YXMgYWRkZWQgc3VjY2Vzc2Z1bGx5IG9yIG5vdAogICAgICAgIGlmICggJEl0ZW0tPntBZGRHZXR9ICkgewoKICAgICAgICAgICAgIyBwcmVwYXJlIHBhcmVudCBpZAogICAgICAgICAgICBpZiAoICRJdGVtLT57QWRkR2V0fS0+e1BhcmVudElEfSAmJiAkSXRlbS0+e0FkZEdldH0tPntQYXJlbnRJRH0gZXEgJ0xBU1RBRERJRCcgKSB7CiAgICAgICAgICAgICAgICAkSXRlbS0+e0FkZEdldH0tPntQYXJlbnRJRH0gPSAkTGFzdEFkZGVkU2VydmljZUlEOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2lmICggJEl0ZW0tPntBZGRHZXR9LT57UGFyZW50SUR9ICYmICRJdGVtLT57QWRkR2V0fS0+e1BhcmVudElEfSBlcSAnTEFTVExBU1RBRERJRCcgKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAkSXRlbS0+e0FkZEdldH0tPntQYXJlbnRJRH0gPSAkTGFzdExhc3RBZGRlZFNlcnZpY2VJRDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkU2VydmljZUlELAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU2VydmljZUFkZCgpIC0gU2VydmljZUlEOiAkU2VydmljZUlEIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICgkU2VydmljZUlEKSB7CgogICAgICAgICAgICAgICAgIyBsb29rdXAgc2VydmljZSBuYW1lCiAgICAgICAgICAgICAgICBteSAkU2VydmljZU5hbWUgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxvb2t1cCggU2VydmljZUlEID0+ICRTZXJ2aWNlSUQgKTsKCiAgICAgICAgICAgICAgICAjIGxvb2t1cCB0ZXN0CiAgICAgICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAgICAgJFNlcnZpY2VOYW1lIHx8ICcnLAogICAgICAgICAgICAgICAgICAgICRJdGVtLT57QWRkR2V0fS0+e05hbWV9IHx8ICcnLAogICAgICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VMb29rdXAoKSAtIGxvb2t1cCIsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgcmV2ZXJzZSBsb29rdXAgdGhlIHNlcnZpY2UgaWQKICAgICAgICAgICAgICAgIG15ICRTZXJ2aWNlSUROZXcgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxvb2t1cCggTmFtZSA9PiAkU2VydmljZU5hbWUgfHwgJycgKTsKCiAgICAgICAgICAgICAgICAjIHJldmVyc2UgbG9va3VwIHRlc3QKICAgICAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICAgICAkU2VydmljZUlETmV3IHx8ICcnLAogICAgICAgICAgICAgICAgICAgICRTZXJ2aWNlSUQgICAgfHwgJycsCiAgICAgICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU2VydmljZUxvb2t1cCgpIC0gcmV2ZXJzZSBsb29rdXAiLAogICAgICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICAgICAjIHNldCBsYXN0IHNlcnZpY2UgaWQgdmFyaWFibGUKICAgICAgICAgICAgICAgICRMYXN0TGFzdEFkZGVkU2VydmljZUlEID0gJExhc3RBZGRlZFNlcnZpY2VJRDsKICAgICAgICAgICAgICAgICRMYXN0QWRkZWRTZXJ2aWNlSUQgICAgID0gJFNlcnZpY2VJRDsKCiAgICAgICAgICAgICAgICAjIGluY3JlbWVudCB0aGUgYWRkZWQgY291bnRlcgogICAgICAgICAgICAgICAgJEFkZGVkQ291bnRlcisrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAkU2VydmljZUlELAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU2VydmljZUFkZCgpIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHNlcnZpY2UgZGF0YSB0byBjaGVjayB0aGUgdmFsdWVzIGFmdGVyIGNyZWF0aW9uIG9mIHRoZSBzZXJ2aWNlCiAgICAgICAgbXkgJVNlcnZpY2VHZXQgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgICAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkSXRlbS0+e0FkZH0tPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgc2VydmljZSBkYXRhIGFmdGVyIGNyZWF0aW9uIG9mIHRoZSBzZXJ2aWNlCiAgICAgICAgZm9yIG15ICRTZXJ2aWNlQXR0cmlidXRlICggc29ydCBrZXlzICV7ICRJdGVtLT57QWRkR2V0fSB9ICkgewogICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAkU2VydmljZUdldHskU2VydmljZUF0dHJpYnV0ZX0gfHwgJycsCiAgICAgICAgICAgICAgICAkSXRlbS0+e0FkZEdldH0tPnskU2VydmljZUF0dHJpYnV0ZX0gfHwgJycsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlR2V0KCkgLSAkU2VydmljZUF0dHJpYnV0ZSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIGlmICggJEl0ZW0tPntVcGRhdGV9ICkgewoKICAgICAgICAjIGNoZWNrIGxhc3Qgc2VydmljZSBpZCB2YXJpYWJsZQogICAgICAgIGlmICggISRMYXN0QWRkZWRTZXJ2aWNlSUQgKSB7CiAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBOTyBMQVNUIFNFUlZJQ0UgSUQgR0lWRU4iLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBwcmVwYXJlIHBhcmVudCBpZAogICAgICAgIGlmICggJEl0ZW0tPntVcGRhdGV9LT57UGFyZW50SUR9ICYmICRJdGVtLT57VXBkYXRlfS0+e1BhcmVudElEfSBlcSAnTEFTVEFERElEJyApIHsKICAgICAgICAgICAgJEl0ZW0tPntVcGRhdGV9LT57UGFyZW50SUR9ID0gJExhc3RBZGRlZFNlcnZpY2VJRDsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCAkSXRlbS0+e1VwZGF0ZX0tPntQYXJlbnRJRH0gJiYgJEl0ZW0tPntVcGRhdGV9LT57UGFyZW50SUR9IGVxICdMQVNUTEFTVEFERElEJyApIHsKICAgICAgICAgICAgJEl0ZW0tPntVcGRhdGV9LT57UGFyZW50SUR9ID0gJExhc3RMYXN0QWRkZWRTZXJ2aWNlSUQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBkZWxldGUgJEl0ZW0tPntVcGRhdGV9LT57UGFyZW50SUR9OwogICAgICAgIH0KCiAgICAgICAgIyB1cGRhdGUgdGhlIHNlcnZpY2UKICAgICAgICBteSAkVXBkYXRlU3VjZXNzID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VVcGRhdGUoCiAgICAgICAgICAgICV7ICRJdGVtLT57VXBkYXRlfSB9LAogICAgICAgICAgICBTZXJ2aWNlSUQgPT4gJExhc3RBZGRlZFNlcnZpY2VJRCwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGlmIHNlcnZpY2Ugd2FzIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IG9yIG5vdAogICAgICAgIGlmICggJEl0ZW0tPntVcGRhdGVHZXR9ICkgewogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRVcGRhdGVTdWNlc3MsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlVXBkYXRlKCkgLSBTZXJ2aWNlSUQ6ICRMYXN0QWRkZWRTZXJ2aWNlSUQiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAgICAgJFVwZGF0ZVN1Y2VzcywKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VVcGRhdGUoKSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIHVwZGF0ZSBub24tZXhpc3Rpbmcgc2VydmljZQogICAgICAgIG15ICROb25leGlzdGluZ1NlcnZpY2VJRCA9IDMyNTY3IC0gMTsKICAgICAgICBteSAkVXBkYXRlTm9uU3VjZXNzICAgICAgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVVwZGF0ZSgKICAgICAgICAgICAgJXsgJEl0ZW0tPntVcGRhdGV9IH0sCiAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkTm9uZXhpc3RpbmdTZXJ2aWNlSUQsCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICRVcGRhdGVOb25TdWNlc3MsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VVcGRhdGUoKSBmb3Igbm9uZXhpc3Rpbmcgc2VydmljZSIsCiAgICAgICAgKTsKCiAgICAgICAgIyBwcmVwYXJlIHBhcmVudCBpZAogICAgICAgIGlmICggJEl0ZW0tPntVcGRhdGVHZXR9LT57UGFyZW50SUR9ICYmICRJdGVtLT57VXBkYXRlR2V0fS0+e1BhcmVudElEfSBlcSAnTEFTVEFERElEJyApIHsKICAgICAgICAgICAgJEl0ZW0tPntVcGRhdGVHZXR9LT57UGFyZW50SUR9ID0gJExhc3RBZGRlZFNlcnZpY2VJRDsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKAogICAgICAgICAgICAkSXRlbS0+e1VwZGF0ZUdldH0tPntQYXJlbnRJRH0KICAgICAgICAgICAgJiYgJEl0ZW0tPntVcGRhdGVHZXR9LT57UGFyZW50SUR9IGVxICdMQVNUTEFTVEFERElEJwogICAgICAgICAgICApCiAgICAgICAgewogICAgICAgICAgICAkSXRlbS0+e1VwZGF0ZUdldH0tPntQYXJlbnRJRH0gPSAkTGFzdExhc3RBZGRlZFNlcnZpY2VJRDsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHNlcnZpY2UgZGF0YSB0byBjaGVjayB0aGUgdmFsdWVzIGFmdGVyIHRoZSB1cGRhdGUKICAgICAgICBteSAlU2VydmljZUdldDIgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgICAgICAgICAgU2VydmljZUlEID0+ICRMYXN0QWRkZWRTZXJ2aWNlSUQsCiAgICAgICAgICAgIFVzZXJJRCAgICA9PiAkSXRlbS0+e1VwZGF0ZX0tPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgc2VydmljZSBkYXRhIGFmdGVyIHVwZGF0ZQogICAgICAgIGZvciBteSAkU2VydmljZUF0dHJpYnV0ZSAoIHNvcnQga2V5cyAleyAkSXRlbS0+e1VwZGF0ZUdldH0gfSApIHsKICAgICAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAgICAgJFNlcnZpY2VHZXQyeyRTZXJ2aWNlQXR0cmlidXRlfSB8fCAnJywKICAgICAgICAgICAgICAgICRJdGVtLT57VXBkYXRlR2V0fS0+eyRTZXJ2aWNlQXR0cmlidXRlfSB8fCAnJywKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VHZXQoKSAtICRTZXJ2aWNlQXR0cmlidXRlIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgbG9va3VwIHNlcnZpY2UgbmFtZQogICAgICAgIG15ICRTZXJ2aWNlTmFtZSA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTG9va3VwKCBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VHZXQye1NlcnZpY2VJRH0gKTsKCiAgICAgICAgIyBsb29rdXAgdGVzdAogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlcnZpY2VOYW1lIHx8ICcnLAogICAgICAgICAgICAkU2VydmljZUdldDJ7TmFtZX0gfHwgJycsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VMb29rdXAoKSAtIGxvb2t1cCIsCiAgICAgICAgKTsKCiAgICAgICAgIyByZXZlcnNlIGxvb2t1cCB0aGUgc2VydmljZSBpZAogICAgICAgIG15ICRTZXJ2aWNlSUROZXcgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxvb2t1cCggTmFtZSA9PiAkU2VydmljZU5hbWUgfHwgJycgKTsKCiAgICAgICAgIyByZXZlcnNlIGxvb2t1cCB0ZXN0CiAgICAgICAgJFNlbGYtPklzKAogICAgICAgICAgICAkU2VydmljZUlETmV3IHx8ICcnLAogICAgICAgICAgICAkU2VydmljZUdldDJ7U2VydmljZUlEfSB8fCAnJywKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU2VydmljZUxvb2t1cCgpIC0gcmV2ZXJzZSBsb29rdXAiLAogICAgICAgICk7CiAgICB9CgogICAgJFRlc3RDb3VudCsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgQWRkaXRpb25hbCBTZXJ2aWNlR2V0IHRlc3QgKEJ5IFNlcnZpY2VuYW1lIGFuZCBTZXJ2aWNlSUQpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCnsKCiAgICAjIGdldCBhIHNlcnZpY2UgYnkgdXNpbmcgdGhlIHNlcnZpY2UgbmFtZQogICAgbXkgJVNlcnZpY2VHZXQgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUdldCgKICAgICAgICBOYW1lICAgPT4gJFNlcnZpY2VOYW1lWzBdLAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICAkU2VsZi0+SXMoCiAgICAgICAgJFNlcnZpY2VHZXR7TmFtZX0sCiAgICAgICAgJFNlcnZpY2VOYW1lWzBdLAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNlcnZpY2VHZXQoKSAtIGJ5IHNlcnZpY2UgbmFtZSIsCiAgICApOwoKICAgICMgZ2V0IHRoZSBzYW1lIHNlcnZpY2UgYnkgdXNpbmcgdGhlIHNlcnZpY2UgaWQKICAgICVTZXJ2aWNlR2V0ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlR2V0e1NlcnZpY2VJRH0sCiAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICApOwoKICAgICRTZWxmLT5JcygKICAgICAgICAkU2VydmljZUdldHtOYW1lfSwKICAgICAgICAkU2VydmljZU5hbWVbMF0sCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU2VydmljZUdldCgpIC0gYnkgc2VydmljZSBpZCIsCiAgICApOwoKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFNlcnZpY2VMaXN0IHRlc3QgMSAoY2hlY2sgZ2VuZXJhbCBmdW5jdGlvbmFsaXR5KQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAlU2VydmljZUxpc3QxID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMaXN0KAogICAgVmFsaWQgID0+IDAsCiAgICBVc2VySUQgPT4gMSwKKTsKbXkgJVNlcnZpY2VMaXN0MU9yZyA9ICVTZXJ2aWNlTGlzdE9yaWdpbmFsOwoKU0VSVklDRUlEOgpmb3IgbXkgJFNlcnZpY2VJRCAoIHNvcnQga2V5cyAlU2VydmljZUxpc3QxT3JnICkgewoKICAgIGlmICggJFNlcnZpY2VMaXN0MXskU2VydmljZUlEfSAmJiAkU2VydmljZUxpc3QxT3JneyRTZXJ2aWNlSUR9IGVxICRTZXJ2aWNlTGlzdDF7JFNlcnZpY2VJRH0gKSB7CiAgICAgICAgZGVsZXRlICRTZXJ2aWNlTGlzdDF7JFNlcnZpY2VJRH07CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU2VydmljZUxpc3Qxe0R1bW15fSA9IDE7CiAgICB9Cn0KCm15ICRTZXJ2aWNlTGlzdDFDb3VudCA9IHNjYWxhciBrZXlzICVTZXJ2aWNlTGlzdDE7CgokU2VsZi0+SXMoCiAgICAkU2VydmljZUxpc3QxQ291bnQgfHwgJycsCiAgICAkQWRkZWRDb3VudGVyICAgICAgfHwgJycsCiAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlTGlzdCgpIiwKKTsKCiRUZXN0Q291bnQrKzsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBTZXJ2aWNlTGlzdCB0ZXN0IDIgKGNoZWNrIGNhY2hlKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAlU2VydmljZUxpc3QyID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMaXN0KAogICAgVmFsaWQgID0+IDAsCiAgICBVc2VySUQgPT4gMSwKKTsKCm15ICRTZXJ2aWNlTGlzdDJTZXJ2aWNlSUQgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCgKICAgIE5hbWUgICAgPT4gJFNlcnZpY2VOYW1lWzldLAogICAgVmFsaWRJRCA9PiAxLAogICAgVXNlcklEICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgIFR5cGVJRCAgICAgID0+IDEsCiAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQopOwoKbXkgJVNlcnZpY2VMaXN0MmIgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxpc3QoCiAgICBWYWxpZCAgPT4gMCwKICAgIFVzZXJJRCA9PiAxLAopOwoKU0VSVklDRUlEOgpmb3IgbXkgJFNlcnZpY2VJRCAoIHNvcnQga2V5cyAlU2VydmljZUxpc3QyICkgewoKICAgIGlmICggJFNlcnZpY2VMaXN0MmJ7JFNlcnZpY2VJRH0gJiYgJFNlcnZpY2VMaXN0MnskU2VydmljZUlEfSBlcSAkU2VydmljZUxpc3QyYnskU2VydmljZUlEfSApIHsKICAgICAgICBkZWxldGUgJFNlcnZpY2VMaXN0MmJ7JFNlcnZpY2VJRH07CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU2VydmljZUxpc3QyYntEdW1teX0gPSAxOwogICAgfQp9CgpteSBAU2VydmljZUxpc3QySURzICAgPSBrZXlzICVTZXJ2aWNlTGlzdDJiOwpteSAkU2VydmljZUxpc3QyQ291bnQgPSBzY2FsYXIgQFNlcnZpY2VMaXN0MklEczsKCiRTZWxmLT5JcygKICAgICRTZXJ2aWNlTGlzdDJDb3VudCB8fCAnJywKICAgIDEsCiAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlTGlzdCgpIC0gY2hlY2sgbnVtYmVyIG9mIHNlcnZpY2VzIiwKKTsKCiRTZWxmLT5JcygKICAgICRTZXJ2aWNlTGlzdDJJRHNbMF0gfHwgJycsCiAgICAkU2VydmljZUxpc3QyU2VydmljZUlEIHx8ICcnLAogICAgIlRlc3QgJFRlc3RDb3VudDogU2VydmljZUxpc3QoKSAtIGNoZWNrIGlkIG9mIGxhc3Qgc2VydmljZSIsCik7CgokVGVzdENvdW50Kys7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgU2VydmljZVNlYXJjaCB0ZXN0IDEgKGNoZWNrIGdlbmVyYWwgZnVuY3Rpb25hbGl0eSkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgQFNlcnZpY2VTZWFyY2gxU2VhcmNoID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VTZWFyY2goIFVzZXJJRCA9PiAxICk7CgpteSAlU2VydmljZVNlYXJjaDFMaXN0ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VMaXN0KCBVc2VySUQgPT4gMSApOwoKU0VSVklDRUlEOgpmb3IgbXkgJFNlcnZpY2VJRCAoQFNlcnZpY2VTZWFyY2gxU2VhcmNoKSB7CgogICAgaWYgKCAkU2VydmljZVNlYXJjaDFMaXN0eyRTZXJ2aWNlSUR9ICkgewogICAgICAgIGRlbGV0ZSAkU2VydmljZVNlYXJjaDFMaXN0eyRTZXJ2aWNlSUR9OwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJFNlcnZpY2VTZWFyY2gxTGlzdHtEdW1teX0gPSAxOwogICAgfQp9CgpteSAkU2VydmljZVNlYXJjaDFDb3VudCA9IHNjYWxhciBrZXlzICVTZXJ2aWNlU2VhcmNoMUxpc3Q7CgokU2VsZi0+SXMoCiAgICAkU2VydmljZVNlYXJjaDFDb3VudCwKICAgIDAsCiAgICAiVGVzdCAkVGVzdENvdW50OiBTZXJ2aWNlU2VhcmNoKCkiLAopOwoKJFRlc3RDb3VudCsrOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIG1ha2UgcHJlcGFyYXRpb25zIGZvciBsYXRlciB0ZXN0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGFkZCBzb21lIG5lZWRlZCBzZXJ2aWNlcyBmb3IgbGF0ZXIgdGVzdHMKbXkgQFNlcnZpY2VOYW1lcyA9ICggJFNlcnZpY2VOYW1lWzEwXSAuICdOb3JtYWwnLCAkU2VydmljZU5hbWVbMTBdIC4gJ9SIINO0IM+qIM++JyApOwpteSAlU2VydmljZVNlYXJjaDJTZXJ2aWNlSUQ7CgpteSAkQ291bnRlcjEgPSAwOwpmb3IgbXkgJFNlcnZpY2VOYW1lIChAU2VydmljZU5hbWVzKSB7CgogICAgJFNlcnZpY2VTZWFyY2gyU2VydmljZUlEeyRDb3VudGVyMX0gPSAkU2VydmljZU9iamVjdC0+U2VydmljZUFkZCgKICAgICAgICBOYW1lICAgID0+ICRTZXJ2aWNlTmFtZSwKICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgVXNlcklEICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICBUeXBlSUQgICAgICA9PiAxLAogICAgICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICApOwoKICAgICRDb3VudGVyMSsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgU2VydmljZVNlYXJjaCB0ZXN0IDIgKGdlbmVyYWwgbmFtZSBjaGVja3MpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICRDb3VudGVyMiA9IDA7CmZvciBteSAkU2VydmljZU5hbWUgKEBTZXJ2aWNlTmFtZXMpIHsKCiAgICBteSBAUHJlcGFyZWROYW1lcyA9ICgKICAgICAgICAkU2VydmljZU5hbWUsCiAgICAgICAgJyonIC4gJFNlcnZpY2VOYW1lLAogICAgICAgICRTZXJ2aWNlTmFtZSAuICcqJywKICAgICAgICAnKicgLiAkU2VydmljZU5hbWUgLiAnKicsCiAgICAgICAgJyoqJyAuICRTZXJ2aWNlTmFtZSwKICAgICAgICAkU2VydmljZU5hbWUgLiAnKionLAogICAgICAgICcqKicgLiAkU2VydmljZU5hbWUgLiAnKionLAogICAgKTsKCiAgICBmb3IgbXkgJFByZXBhcmVkTmFtZSAoQFByZXBhcmVkTmFtZXMpIHsKCiAgICAgICAgbXkgQFNlcnZpY2VMaXN0ID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VTZWFyY2goCiAgICAgICAgICAgIE5hbWUgICA9PiAkU2VydmljZU5hbWUsCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAogICAgICAgICk7CgogICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgJFNlcnZpY2VMaXN0WzBdIHx8ICcnLAogICAgICAgICAgICAkU2VydmljZVNlYXJjaDJTZXJ2aWNlSUR7JENvdW50ZXIyfSB8fCAnJywKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU2VydmljZVNlYXJjaCgpIC0gZ2VuZXJhbCBuYW1lIGNoZWNrIiwKICAgICAgICApOwoKICAgICAgICAkVGVzdENvdW50Kys7CiAgICB9CgogICAgJENvdW50ZXIyKys7Cn0KCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBTZXJ2aWNlTGlzdEdldAojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGdldCB0aGUgbGlzdCBvZiBzZXJ2aWNlcwpteSAkU2VydmljZUxpc3QgPSAkU2VydmljZU9iamVjdC0+U2VydmljZUxpc3RHZXQoCiAgICBWYWxpZCAgPT4gMCwKICAgIFVzZXJJRCA9PiAxLAopOwoKIyBjaGVjayBpZiByZXN1bHQgaXMgYW4gYXJyYXkgcmVmCiRTZWxmLT5JcygKICAgIHJlZiAkU2VydmljZUxpc3QsCiAgICAnQVJSQVknLAogICAgIlNlcnZpY2VMaXN0R2V0KCkgLSBJcyBBcnJheSIsCik7CgojIGNoZWNrIGlmIGVhY2ggYXJyYXkgaXRlbSBpcyBhIGhhc2ggcmVmCnsKICAgIG15ICRDb3VudGVyOwogICAgZm9yIG15ICRTZXJ2aWNlRGF0YSAoIEB7JFNlcnZpY2VMaXN0fSApIHsKCiAgICAgICAgJENvdW50ZXIrKzsKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgIHJlZiAkU2VydmljZURhdGEsCiAgICAgICAgICAgICdIQVNIJywKICAgICAgICAgICAgIlNlcnZpY2VMaXN0R2V0WyRDb3VudGVyXSAtIElzIEhhc2giLAogICAgICAgICk7CiAgICB9Cn0KCiMgY2hlY2sgaW50ZWdyaXR5IG9mIGVhY2ggYXJyYXkgZWxlbWVudAp7CiAgICBteSAkQ291bnRlcjsKICAgIGZvciBteSAkU2VydmljZURhdGEgKCBAeyRTZXJ2aWNlTGlzdH0gKSB7CgogICAgICAgIG15ICVTZXJ2aWNlID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZURhdGEtPntTZXJ2aWNlSUR9LAogICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIEluY2lkZW50U3RhdGUgPT4gMSwKIyAtLS0KICAgICAgICApOwogICAgICAgICRDb3VudGVyKys7CiAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAkU2VydmljZURhdGEsCiAgICAgICAgICAgIFwlU2VydmljZSwKICAgICAgICAgICAgIlNlcnZpY2VMaXN0R2V0WyRDb3VudGVyXSAtIENvbXBhcmVkIHRvIFNlcnZpY2VHZXQiLAogICAgICAgICk7CiAgICB9Cn0KCiMgYWRkIHNlcnZpY2VzCm15IEBBZGRlZFBhcmVudFNlcnZpY2VzOwoKbXkgJFNlcnZpY2VHcmFuZEZhdGhlcklEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICBOYW1lICAgICA9PiAnVW5pdFRlc3RTZXJ2aWNlX0dGXycgLiAkUmFuZG9tSUQsCiAgICBQYXJlbnRJRCA9PiAwLAogICAgVmFsaWRJRCAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICBUeXBlSUQgICAgICA9PiAxLAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgIENvbW1lbnQgID0+ICdUZXN0aW5nIHNlcnZpY2UnLAogICAgVXNlcklEICAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFNlcnZpY2VHcmFuZEZhdGhlcklELAogICAgIlNlcnZpY2VBZGQoKSAtIGZvciBTZXJ2aWNlR3JhbmRGYXRoZXIiCik7CgpwdXNoIEBBZGRlZFBhcmVudFNlcnZpY2VzLCAkU2VydmljZUdyYW5kRmF0aGVySUQ7CgpteSAkU2VydmljZUZhdGhlcklEID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VBZGQoCiAgICBOYW1lICAgICA9PiAnVW5pdFRlc3RTZXJ2aWNlX0ZfJyAuICRSYW5kb21JRCwKICAgIFBhcmVudElEID0+ICRTZXJ2aWNlR3JhbmRGYXRoZXJJRCwKICAgIFZhbGlkSUQgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgVHlwZUlEICAgICAgPT4gMSwKICAgIENyaXRpY2FsaXR5ID0+ICczIG5vcm1hbCcsCiMgLS0tCiAgICBDb21tZW50ICA9PiAnVGVzdGluZyBzZXJ2aWNlJywKICAgIFVzZXJJRCAgID0+IDEsCik7CgojIHNhbml0eSBjaGVjawokU2VsZi0+VHJ1ZSgKICAgICRTZXJ2aWNlRmF0aGVySUQsCiAgICAiU2VydmljZUFkZCgpIC0gZm9yIFNlcnZpY2VGYXRoZXIiCik7CgpwdXNoIEBBZGRlZFBhcmVudFNlcnZpY2VzLCAkU2VydmljZUZhdGhlcklEOwoKbXkgJFNlcnZpY2VTb25JRCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgTmFtZSAgICAgPT4gJ1VuaXRUZXN0U2VydmljZV9TXycgLiAkUmFuZG9tSUQsCiAgICBQYXJlbnRJRCA9PiAkU2VydmljZUZhdGhlcklELAogICAgVmFsaWRJRCAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICBUeXBlSUQgICAgICA9PiAxLAogICAgQ3JpdGljYWxpdHkgPT4gJzMgbm9ybWFsJywKIyAtLS0KICAgIENvbW1lbnQgID0+ICdUZXN0aW5nIHNlcnZpY2UnLAogICAgVXNlcklEICAgPT4gMSwKKTsKCiMgc2FuaXR5IGNoZWNrCiRTZWxmLT5UcnVlKAogICAgJFNlcnZpY2VTb25JRCwKICAgICJTZXJ2aWNlQWRkKCkgLSBmb3IgU2VydmljZVNvbiIKKTsKCnB1c2ggQEFkZGVkUGFyZW50U2VydmljZXMsICRTZXJ2aWNlU29uSUQ7CgojIGdldCB0aGUgc2VydmljZSBsaXN0IGFnYWluCm15ICROZXdTZXJ2aWNlTGlzdCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlTGlzdEdldCgKICAgIFZhbGlkICA9PiAwLAogICAgVXNlcklEID0+IDEsCik7CgojIGNvbXBhcmUgdGhlIHNlcnZpY2UgbGlzdHMgKHNob3VsZCBiZSBub3QgZXF1YWwgc2luY2UgbmV3IHNlcnZpY2VzIHdoZXJlIGFkZGVkKQokU2VsZi0+SXNOb3REZWVwbHkoCiAgICAkU2VydmljZUxpc3QsCiAgICAkTmV3U2VydmljZUxpc3QsCiAgICAiU2VydmljZUxpc3RHZXQoKSAtIGNvbXBhcmVkIHdpdGggaXRzZWxmIGFmdGVyIGFkZGluZyBuZXcgc2VydmljZXMiCik7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgU2VydmljZVBhcmVudHNHZXQKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKIyBnZXQgdGhlIHBhcmVudHMgZm9yIGdyYW5kIGZhdGhlcgpteSAkU2VydmljZVBhcmVudHMgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVBhcmVudHNHZXQoCiAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VHcmFuZEZhdGhlcklELAogICAgVXNlcklEICAgID0+IDEsCik7CgokU2VsZi0+SXNEZWVwbHkoCiAgICAkU2VydmljZVBhcmVudHMsCiAgICBbXSwKICAgICJTZXJ2aWNlUGFyZW50c0xpc3RHZXQgLSBmb3IgU2VydmljZUdyYW5kRmF0aGVyIgopOwoKJFNlcnZpY2VQYXJlbnRzID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VQYXJlbnRzR2V0KAogICAgU2VydmljZUlEID0+ICRTZXJ2aWNlR3JhbmRGYXRoZXJJRCwKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKJFNlbGYtPklzRGVlcGx5KAogICAgJFNlcnZpY2VQYXJlbnRzLAogICAgW10sCiAgICAiU2VydmljZVBhcmVudHNMaXN0R2V0IC0gZm9yIFNlcnZpY2VHcmFuZEZhdGhlciAoY2FjaGVkKSIKKTsKCiMgZ2V0IHRoZSBwYXJlbnRzIGZvciBmYXRoZXIKJFNlcnZpY2VQYXJlbnRzID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VQYXJlbnRzR2V0KAogICAgU2VydmljZUlEID0+ICRTZXJ2aWNlRmF0aGVySUQsCiAgICBVc2VySUQgICAgPT4gMSwKKTsKCiRTZWxmLT5Jc0RlZXBseSgKICAgICRTZXJ2aWNlUGFyZW50cywKICAgIFskU2VydmljZUdyYW5kRmF0aGVySURdLAogICAgIlNlcnZpY2VQYXJlbnRzR2V0IC0gZm9yIFNlcnZpY2VGYXRoZXIiCik7CgokU2VydmljZVBhcmVudHMgPSAkU2VydmljZU9iamVjdC0+U2VydmljZVBhcmVudHNHZXQoCiAgICBTZXJ2aWNlSUQgPT4gJFNlcnZpY2VGYXRoZXJJRCwKICAgIFVzZXJJRCAgICA9PiAxLAopOwoKJFNlbGYtPklzRGVlcGx5KAogICAgJFNlcnZpY2VQYXJlbnRzLAogICAgWyRTZXJ2aWNlR3JhbmRGYXRoZXJJRF0sCiAgICAiU2VydmljZVBhcmVudHNHZXQgLSBmb3IgU2VydmljZUZhdGhlciAoY2FjaGVkKSIKKTsKCiMgZ2V0IHRoZSBwYXJlbnRzIGZvciBzb24KJFNlcnZpY2VQYXJlbnRzID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VQYXJlbnRzR2V0KAogICAgU2VydmljZUlEID0+ICRTZXJ2aWNlU29uSUQsCiAgICBVc2VySUQgICAgPT4gMSwKKTsKCiRTZWxmLT5Jc0RlZXBseSgKICAgICRTZXJ2aWNlUGFyZW50cywKICAgIFsgJFNlcnZpY2VHcmFuZEZhdGhlcklELCAkU2VydmljZUZhdGhlcklEIF0sCiAgICAiU2VydmljZVBhcmVudHNHZXQgLSBmb3IgU2VydmljZVNvbiIKKTsKCiRTZXJ2aWNlUGFyZW50cyA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlUGFyZW50c0dldCgKICAgIFNlcnZpY2VJRCA9PiAkU2VydmljZVNvbklELAogICAgVXNlcklEICAgID0+IDEsCik7CgokU2VsZi0+SXNEZWVwbHkoCiAgICAkU2VydmljZVBhcmVudHMsCiAgICBbICRTZXJ2aWNlR3JhbmRGYXRoZXJJRCwgJFNlcnZpY2VGYXRoZXJJRCBdLAogICAgIlNlcnZpY2VQYXJlbnRzR2V0IC0gZm9yIFNlcnZpY2VTb24gKGNhY2hlZCkiCik7CgojIHNldCBuZXcgYWRkZWQgc2VydmljZXMgdG8gaW52YWxpZApmb3IgbXkgJFNlcnZpY2VJRCAoQEFkZGVkUGFyZW50U2VydmljZXMpIHsKICAgIG15ICVTZXJ2aWNlID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VHZXQoCiAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNlSUQsCiAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICApOwoKICAgIG15ICRTdWNjZXNzID0gJFNlcnZpY2VPYmplY3QtPlNlcnZpY2VVcGRhdGUoCiAgICAgICAgU2VydmljZUlEID0+ICRTZXJ2aWNle1NlcnZpY2VJRH0sCiAgICAgICAgTmFtZSAgICAgID0+ICRTZXJ2aWNle05hbWVTaG9ydH0sCiAgICAgICAgQ29tbWVudCAgID0+ICRTZXJ2aWNle0NvbW1lbnR9LAogICAgICAgIFBhcmVudElEICA9PiAkU2VydmljZXtQYXJlbnRJRH0gfHwgMCwKICAgICAgICBWYWxpZElEICAgPT4gMiwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgVHlwZUlEICAgICAgPT4gJFNlcnZpY2V7VHlwZUlEfSwKICAgICAgICBDcml0aWNhbGl0eSA9PiAkU2VydmljZXtDcml0aWNhbGl0eX0sCiMgLS0tCiAgICAgICAgVXNlcklEICAgID0+IDEsCiAgICApOwoKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRTdWNjZXNzLAogICAgICAgICJTZXJ2aWNlVXBkYXRlKCkgLSBJbnZhbGlkYXRlIHNlcnZpY2UgZm9yIFNlcnZpY2VQYXJlbnRzTGlzdEdldCgpIGFkZGVkIHNlcnZpY2UgIgogICAgICAgICAgICAuICIkU2VydmljZXtTZXJ2aWNlSUR9IC0gJFNlcnZpY2V7TmFtZX0iCiAgICApOwp9CgoxOwo=
IyAtLQojIFNMQS50IC0gU0xBIHRlc3RzCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMTQgT1RSUyBBRywgaHR0cDovL290cnMuY29tLwojIC0tCiMgJG9yaWdpbjogaHR0cHM6Ly9naXRodWIuY29tL09UUlMvb3Rycy9ibG9iLzBjZDIyZGQzM2NkZDUxZDZmYWM0Yzk5N2MyYWViNjhhOGU4OTkxMzQvc2NyaXB0cy90ZXN0L1NMQS50CiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CnVzZSB1dGY4OwoKdXNlIHZhcnMgKHF3KCRTZWxmKSk7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgojIGdldCBuZWVkZWQgb2JqZWN0cwpteSAkQ29uZmlnT2JqZWN0ICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6Q29uZmlnJyk7Cm15ICRIZWxwZXJPYmplY3QgID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlVuaXRUZXN0OjpIZWxwZXInKTsKbXkgJFNlcnZpY2VPYmplY3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6U2VydmljZScpOwpteSAkU0xBT2JqZWN0ICAgICA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpTTEEnKTsKbXkgJFVzZXJPYmplY3QgICAgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6VXNlcicpOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIG1ha2UgcHJlcGFyYXRpb25zCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgY3JlYXRlIG5lZWRlZCB1c2VycwpteSBAVXNlcklEczsKewoKICAgICMgZGlzYWJsZSBlbWFpbCBjaGVja3MgdG8gY3JlYXRlIG5ldyB1c2VyCiAgICBteSAkQ2hlY2tFbWFpbEFkZHJlc3Nlc09yZyA9ICRDb25maWdPYmplY3QtPkdldCgnQ2hlY2tFbWFpbEFkZHJlc3NlcycpIHx8IDE7CiAgICAkQ29uZmlnT2JqZWN0LT5TZXQoCiAgICAgICAgS2V5ICAgPT4gJ0NoZWNrRW1haWxBZGRyZXNzZXMnLAogICAgICAgIFZhbHVlID0+IDAsCiAgICApOwoKICAgIGZvciBteSAkQ291bnRlciAoIDEgLi4gMiApIHsKCiAgICAgICAgIyBjcmVhdGUgbmV3IHVzZXJzIGZvciB0aGUgdGVzdHMKICAgICAgICBteSAkVXNlcklEID0gJFVzZXJPYmplY3QtPlVzZXJBZGQoCiAgICAgICAgICAgIFVzZXJGaXJzdG5hbWUgPT4gJ1NMQScgLiAkQ291bnRlciwKICAgICAgICAgICAgVXNlckxhc3RuYW1lICA9PiAnVW5pdFRlc3QnLAogICAgICAgICAgICBVc2VyTG9naW4gICAgID0+ICdVbml0VGVzdC1TTEEtJyAuICRDb3VudGVyIC4gaW50IHJhbmQgMV8wMDBfMDAwLAogICAgICAgICAgICBVc2VyRW1haWwgICAgID0+ICdVbml0VGVzdC1TTEEtJyAuICRDb3VudGVyIC4gJ0Bsb2NhbGhvc3QnLAogICAgICAgICAgICBWYWxpZElEICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZVVzZXJJRCAgPT4gMSwKICAgICAgICApOwoKICAgICAgICBwdXNoIEBVc2VySURzLCAkVXNlcklEOwogICAgfQoKICAgICMgcmVzdG9yZSBvcmlnaW5hbCBlbWFpbCBjaGVjayBwYXJhbQogICAgJENvbmZpZ09iamVjdC0+U2V0KAogICAgICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgICAgICBWYWx1ZSA9PiAkQ2hlY2tFbWFpbEFkZHJlc3Nlc09yZywKICAgICk7Cn0KCiMgY3JlYXRlIG5lZWRlZCByYW5kb20gc2VydmljZSBuYW1lcwpteSBAU0xBTmFtZTsKZm9yIG15ICRDb3VudGVyICggMSAuLiAxMCApIHsKICAgIHB1c2ggQFNMQU5hbWUsICdVbml0VGVzdCcgLiBpbnQgcmFuZCAxXzAwMF8wMDA7Cn0KCiMgY3JlYXRlIHNvbWUgdGVzdCBzZXJ2aWNlcwpteSBAU2VydmljZUlEczsKZm9yIG15ICRDb3VudGVyICggMSAuLiAzICkgewoKICAgICMgYWRkIGEgc2VydmljZQogICAgbXkgJFNlcnZpY2VJRCA9ICRTZXJ2aWNlT2JqZWN0LT5TZXJ2aWNlQWRkKAogICAgICAgIE5hbWUgICAgPT4gJ1VuaXRUZXN0LVNMQScgLiBpbnQgcmFuZCAxXzAwMF8wMDAsCiAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIFVzZXJJRCAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgVHlwZUlEICAgICAgPT4gMSwKICAgICAgICBDcml0aWNhbGl0eSA9PiAnMyBub3JtYWwnLAojIC0tLQogICAgKTsKCiAgICBwdXNoIEBTZXJ2aWNlSURzLCAkU2VydmljZUlEOwp9CgojIGdldCBvcmlnaW5hbCBzbGEgbGlzdCBmb3IgbGF0ZXIgY2hlY2tzCm15ICVTTEFMaXN0T3JpZ2luYWwgPSAkU0xBT2JqZWN0LT5TTEFMaXN0KAogICAgVmFsaWQgID0+IDAsCiAgICBVc2VySUQgPT4gMSwKKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBkZWZpbmUgZ2VuZXJhbCB0ZXN0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkSXRlbURhdGEgPSBbCgogICAgIyB0aGlzIHNsYSBpcyBOT1QgY29tcGxldGUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2xhIGlzIE5PVCBjb21wbGV0ZSBhbmQgbXVzdCBub3QgYmUgYWRkZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgPT4gJFNMQU5hbWVbMF0sCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNsYSBpcyBOT1QgY29tcGxldGUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU0xBTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCiMgLS0tCiMgSVRTTQojIC0tLQogICAgIyB0aGlzIHNsYSBpcyBOT1QgY29tcGxldGUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU0xBTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCiMgLS0tCgogICAgIyBzZXJ2aWNlIGlkcyBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSAoY2hlY2sgcmV0dXJuIGZhbHNlKQogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgPT4gXGRvIHsnRHVtbXknfSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkU0xBTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHNlcnZpY2UgaWRzIG11c3QgYmUgYW4gYXJyYXkgcmVmZXJlbmNlIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkU0xBTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHNlcnZpY2UgaWRzIG11c3QgYmUgYW4gYXJyYXkgcmVmZXJlbmNlIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyA9PiB7fSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkU0xBTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2xhIG11c3QgYmUgaW5zZXJ0ZWQgc3VjZXNzZnVsbHkKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTTEFOYW1lWzBdLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyAgICAgICAgICA9PiBbXSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAkU0xBTmFtZVswXSwKICAgICAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDAsCiAgICAgICAgICAgIFVwZGF0ZVRpbWUgICAgICAgICAgPT4gMCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiAwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gMCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCAgICAgICAgICAgICAgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2xhIGhhdmUgdGhlIHNhbWUgbmFtZSBhcyBvbmUgdGVzdCBiZWZvcmUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU0xBTmFtZVswXSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzbGEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChzbGEgaXMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2xhIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoc2xhIGlzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgPT4gJFNMQU5hbWVbMF0gLiAnVVBEQVRFMScsCiAgICAgICAgICAgIFVzZXJJRCA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2xhIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoc2xhIGlzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTTEFOYW1lWzBdIC4gJ1VQREFURTEnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzbGEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChzZXJ2aWNlIGlkcyBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzID0+IFxkbyB7J0R1bW15J30sCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJFNMQU5hbWVbMF0gLiAnVVBEQVRFMScsCiAgICAgICAgICAgIFZhbGlkSUQgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2xhIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoc2VydmljZSBpZHMgbXVzdCBiZSBhbiBhcnJheSByZWZlcmVuY2UpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyA9PiAnJywKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAkU0xBTmFtZVswXSAuICdVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzbGEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChzZXJ2aWNlIGlkcyBtdXN0IGJlIGFuIGFycmF5IHJlZmVyZW5jZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzID0+IHt9LAogICAgICAgICAgICBOYW1lICAgICAgID0+ICRTTEFOYW1lWzBdIC4gJ1VQREFURTEnLAogICAgICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzbGEgbXVzdCBiZSBpbnNlcnRlZCBzdWNlc3NmdWxseSAoY2hlY2sgdGhlIHJldHVybmVkIHNlcnZpY2UgaWQgYXJyYXkpCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyA9PiBbICRTZXJ2aWNlSURzWzBdIF0sCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJFNMQU5hbWVbMV0sCiAgICAgICAgICAgIFZhbGlkSUQgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDIsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFsgJFNlcnZpY2VJRHNbMF0gXSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAkU0xBTmFtZVsxXSwKICAgICAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDAsCiAgICAgICAgICAgIFVwZGF0ZVRpbWUgICAgICAgICAgPT4gMCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiAwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gMCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAyLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzbGEgbXVzdCBiZSBpbnNlcnRlZCBzdWNlc3NmdWxseSAoY2hlY2sgdGhlIHNvcnRpbmcgb2YgdGhlIHJldHVybmVkIHNlcnZpY2UgaWQgYXJyYXkpCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyA9PiBbICRTZXJ2aWNlSURzWzFdLCAkU2VydmljZUlEc1swXSBdLAogICAgICAgICAgICBOYW1lICAgICAgID0+ICRTTEFOYW1lWzJdLAogICAgICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAyLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyA9PiBbICRTZXJ2aWNlSURzWzBdLCAkU2VydmljZUlEc1sxXSBdLAogICAgICAgICAgICBOYW1lICAgICAgID0+ICRTTEFOYW1lWzJdLAogICAgICAgICAgICBDYWxlbmRhciAgID0+ICcnLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDAsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiAwLAogICAgICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gMCwKICAgICAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiAwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJycsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDIsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2FtZSBuYW1lIGFscmVhZHkgZXhpc3RzIChjaGVjayByZXR1cm4gZmFsc2UpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU0xBTmFtZVsxXSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgc2xhIG11c3QgYmUgaW5zZXJ0ZWQgc3VjZXNzZnVsbHkKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzID0+IFsgJFNlcnZpY2VJRHNbMV0sICRTZXJ2aWNlSURzWzJdLCAkU2VydmljZUlEc1swXSBdLAogICAgICAgICAgICBOYW1lICAgICAgID0+ICRTTEFOYW1lWzNdLAogICAgICAgICAgICBDYWxlbmRhciAgID0+ICcxJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAxMCwKICAgICAgICAgICAgRmlyc3RSZXNwb25zZU5vdGlmeSA9PiAyMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiAzMCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiA0MCwKICAgICAgICAgICAgU29sdXRpb25UaW1lICAgICAgICA9PiA1MCwKICAgICAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiA2MCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICdUZXN0Q29tbWVudDInLAogICAgICAgICAgICBVc2VySUQgICAgICAgICAgICAgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgPT4gWyAkU2VydmljZUlEc1swXSwgJFNlcnZpY2VJRHNbMV0sICRTZXJ2aWNlSURzWzJdIF0sCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJFNMQU5hbWVbM10sCiAgICAgICAgICAgIENhbGVuZGFyICAgPT4gJzEnLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDEwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDIwLAogICAgICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDMwLAogICAgICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDQwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDUwLAogICAgICAgICAgICBTb2x1dGlvbk5vdGlmeSAgICAgID0+IDYwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJ1Rlc3RDb21tZW50MicsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2xhIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoc2xhIHVwZGF0ZSBhcmd1bWVudHMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2xhIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoc2xhIHVwZGF0ZSBhcmd1bWVudHMgTk9UIGNvbXBsZXRlKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICA9PiAkU0xBTmFtZVszXSAuICdVUERBVEUxJywKICAgICAgICAgICAgVXNlcklEID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzbGEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChzbGEgdXBkYXRlIGFyZ3VtZW50cyBOT1QgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU0xBTmFtZVszXSAuICdVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2xhIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSB1cGRhdGVkIChzbGEgdXBkYXRlIGFyZ3VtZW50cyBhcmUgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyAgICAgICAgICA9PiBbXSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAkU0xBTmFtZVszXSAuICdVUERBVEUyJywKICAgICAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAnMScsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lICAgPT4gMjAsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gMzAsCiAgICAgICAgICAgIFVwZGF0ZVRpbWUgICAgICAgICAgPT4gNDAsCiAgICAgICAgICAgIFVwZGF0ZU5vdGlmeSAgICAgICAgPT4gNTAsCiAgICAgICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gNjAsCiAgICAgICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gNzAsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgICAgICAgICAgICA9PiAnVGVzdENvbW1lbnQyVVBEQVRFMicsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMiwKIyAtLS0KICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgICAgICAgICAgPT4gW10sCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJFNMQU5hbWVbM10gLiAnVVBEQVRFMicsCiAgICAgICAgICAgIENhbGVuZGFyICAgICAgICAgICAgPT4gJzEnLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDIwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDMwLAogICAgICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDQwLAogICAgICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDUwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDYwLAogICAgICAgICAgICBTb2x1dGlvbk5vdGlmeSAgICAgID0+IDcwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJ1Rlc3RDb21tZW50MlVQREFURTInLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMiwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzbGEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgKHNsYSB1cGRhdGUgYXJndW1lbnRzIGFyZSBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFsgJFNlcnZpY2VJRHNbMl0gXSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAkU0xBTmFtZVszXSAuICdVUERBVEUzJywKICAgICAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAnMicsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lICAgPT4gMzAsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gNDAsCiAgICAgICAgICAgIFVwZGF0ZVRpbWUgICAgICAgICAgPT4gNTAsCiAgICAgICAgICAgIFVwZGF0ZU5vdGlmeSAgICAgICAgPT4gNjAsCiAgICAgICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gNzAsCiAgICAgICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gODAsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgICAgICAgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCAgICAgICAgICAgICA9PiAnVGVzdENvbW1lbnQyVVBEQVRFMycsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgICAgICAgPT4gJFVzZXJJRHNbMV0sCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgICAgICAgICAgPT4gWyAkU2VydmljZUlEc1syXSBdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICRTTEFOYW1lWzNdIC4gJ1VQREFURTMnLAogICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICcyJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAzMCwKICAgICAgICAgICAgRmlyc3RSZXNwb25zZU5vdGlmeSA9PiA0MCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiA1MCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiA2MCwKICAgICAgICAgICAgU29sdXRpb25UaW1lICAgICAgICA9PiA3MCwKICAgICAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiA4MCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAyLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICdUZXN0Q29tbWVudDJVUERBVEUzJywKICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+ICRVc2VySURzWzFdLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIHNsYSBtdXN0IGJlIGluc2VydGVkIHN1Y2Vzc2Z1bGx5IChjaGVjayBzdHJpbmcgY2xlYW5lciBmdW5jdGlvbikKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzID0+IFsgJFNlcnZpY2VJRHNbMF0gXSwKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAiIFx0IFxuIFxyICIgLiAkU0xBTmFtZVs0XSAuICIgXHQgXG4gXHIgIiwKICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgID0+ICIgXHQgXG4gXHIgVGVzdCBDb21tZW50IFx0IFxuIFxyICIsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAyLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyAgICAgICAgICA9PiBbICRTZXJ2aWNlSURzWzBdIF0sCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgICAgICAgPT4gJFNMQU5hbWVbNF0sCiAgICAgICAgICAgIENhbGVuZGFyICAgICAgICAgICAgPT4gJycsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VUaW1lICAgPT4gMCwKICAgICAgICAgICAgRmlyc3RSZXNwb25zZU5vdGlmeSA9PiAwLAogICAgICAgICAgICBVcGRhdGVUaW1lICAgICAgICAgID0+IDAsCiAgICAgICAgICAgIFVwZGF0ZU5vdGlmeSAgICAgICAgPT4gMCwKICAgICAgICAgICAgU29sdXRpb25UaW1lICAgICAgICA9PiAwLAogICAgICAgICAgICBTb2x1dGlvbk5vdGlmeSAgICAgID0+IDAsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgICAgICAgICAgICA9PiAnVGVzdCBDb21tZW50JywKICAgICAgICAgICAgQ3JlYXRlQnkgICAgICAgICAgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgICAgICAgICAgID0+IDEsCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMiwKIyAtLS0KICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBzbGEgb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgc3VjZXNzZnVsbHkgKGNoZWNrIHN0cmluZyBjbGVhbmVyIGZ1bmN0aW9uKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgPT4gWyAkU2VydmljZUlEc1sxXSBdLAogICAgICAgICAgICBOYW1lICAgICAgID0+ICIgXHQgXG4gXHIgIiAuICRTTEFOYW1lWzRdIC4gIiBVUERBVEUxIFx0IFxuIFxyICIsCiAgICAgICAgICAgIFZhbGlkSUQgICAgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCAgICA9PiAiIFx0IFxuIFxyIFRlc3QgQ29tbWVudCBVUERBVEUxIFx0IFxuIFxyICIsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gJFVzZXJJRHNbMV0sCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMSwKIyAtLS0KICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgICAgICAgICAgPT4gWyAkU2VydmljZUlEc1sxXSBdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICRTTEFOYW1lWzRdIC4gJyBVUERBVEUxJywKICAgICAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDAsCiAgICAgICAgICAgIFVwZGF0ZVRpbWUgICAgICAgICAgPT4gMCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiAwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gMCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAyLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICdUZXN0IENvbW1lbnQgVVBEQVRFMScsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAkVXNlcklEc1sxXSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzbGEgbXVzdCBiZSBpbnNlcnRlZCBzdWNlc3NmdWxseSAodW5pY29kZSBjaGVja3MpCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgTmFtZSAgICA9PiAkU0xBTmFtZVs1XSAuICcgz5Igz6Egxqkgz54gJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgICAgICBDb21tZW50ID0+ICcg0aAg0aQgVGVzdENvbW1lbnQ1IM+gIM6pICcsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAzLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyAgICAgICAgICA9PiBbXSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAkU0xBTmFtZVs1XSAuICcgz5Igz6Egxqkgz54nLAogICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDAsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiAwLAogICAgICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gMCwKICAgICAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiAwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJ9GgINGkIFRlc3RDb21tZW50NSDPoCDOqScsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAxLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDMsCiMgLS0tCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgc2xhIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSB1cGRhdGVkIHN1Y2Vzc2Z1bGx5ICh1bmljb2RlIGNoZWNrcykKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICRTTEFOYW1lWzVdIC4gJyDPkiDPoSDGqSDPniBVUERBVEUxJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAyLAogICAgICAgICAgICBDb21tZW50ID0+ICcg0aAg0aQgVGVzdENvbW1lbnQ1IM+gIM6pIFVQREFURTEnLAogICAgICAgICAgICBVc2VySUQgID0+ICRVc2VySURzWzBdLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDEsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBVcGRhdGVHZXQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFtdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICRTTEFOYW1lWzVdIC4gJyDPkiDPoSDGqSDPniBVUERBVEUxJywKICAgICAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDAsCiAgICAgICAgICAgIFVwZGF0ZVRpbWUgICAgICAgICAgPT4gMCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiAwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gMCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAyLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICfRoCDRpCBUZXN0Q29tbWVudDUgz6AgzqkgVVBEQVRFMScsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgICAgICAgICAgICA9PiAkVXNlcklEc1swXSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBzbGEgbXVzdCBiZSBpbnNlcnRlZCBzdWNlc3NmdWxseSAoc3BlY2lhbCBjaGFyYWN0ZXIgY2hlY2tzKQogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgPT4gW10sCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJyBbdGVzdF0lKlxcICcgLiAkU0xBTmFtZVs2XSAuICcgW3Rlc3RdJSpcXCAnLAogICAgICAgICAgICBWYWxpZElEICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgPT4gJyBbdGVzdF0lKlxcIFRlc3QgQ29tbWVudCBbdGVzdF0lKlxcICcsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgU2VydmljZUlEcyAgICAgICAgICA9PiBbXSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICAgICAgICA9PiAnW3Rlc3RdJSpcXCAnIC4gJFNMQU5hbWVbNl0gLiAnIFt0ZXN0XSUqXFwnLAogICAgICAgICAgICBDYWxlbmRhciAgICAgICAgICAgID0+ICcnLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlVGltZSAgID0+IDAsCiAgICAgICAgICAgIEZpcnN0UmVzcG9uc2VOb3RpZnkgPT4gMCwKICAgICAgICAgICAgVXBkYXRlVGltZSAgICAgICAgICA9PiAwLAogICAgICAgICAgICBVcGRhdGVOb3RpZnkgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uVGltZSAgICAgICAgPT4gMCwKICAgICAgICAgICAgU29sdXRpb25Ob3RpZnkgICAgICA9PiAwLAogICAgICAgICAgICBWYWxpZElEICAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgICAgICAgPT4gJ1t0ZXN0XSUqXFwgVGVzdCBDb21tZW50IFt0ZXN0XSUqXFwnLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gMSwKIyAtLS0KIyBJVFNNCiMgLS0tCiAgICAgICAgICAgIFR5cGVJRCA9PiAxLAojIC0tLQogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIHNsYSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgdXBkYXRlZCBzdWNlc3NmdWxseSAoc3BlY2lhbCBjaGFyYWN0ZXIgY2hlY2tzKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIFNlcnZpY2VJRHMgPT4gW10sCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJyBbdGVzdF0lKlxcICcgLiAkU0xBTmFtZVs2XSAuICcgVVBEQVRFMSBbdGVzdF0lKlxcICcsCiAgICAgICAgICAgIFZhbGlkSUQgICAgPT4gMiwKICAgICAgICAgICAgQ29tbWVudCAgICA9PiAnIFt0ZXN0XSUqXFwgVGVzdCBDb21tZW50IFVQREFURTEgW3Rlc3RdJSpcXCAnLAogICAgICAgICAgICBVc2VySUQgICAgID0+ICRVc2VySURzWzFdLAojIC0tLQojIElUU00KIyAtLS0KICAgICAgICAgICAgVHlwZUlEID0+IDIsCiMgLS0tCiAgICAgICAgfSwKICAgICAgICBVcGRhdGVHZXQgPT4gewogICAgICAgICAgICBTZXJ2aWNlSURzICAgICAgICAgID0+IFtdLAogICAgICAgICAgICBOYW1lICAgICAgICAgICAgICAgID0+ICdbdGVzdF0lKlxcICcgLiAkU0xBTmFtZVs2XSAuICcgVVBEQVRFMSBbdGVzdF0lKlxcJywKICAgICAgICAgICAgQ2FsZW5kYXIgICAgICAgICAgICA9PiAnJywKICAgICAgICAgICAgRmlyc3RSZXNwb25zZVRpbWUgICA9PiAwLAogICAgICAgICAgICBGaXJzdFJlc3BvbnNlTm90aWZ5ID0+IDAsCiAgICAgICAgICAgIFVwZGF0ZVRpbWUgICAgICAgICAgPT4gMCwKICAgICAgICAgICAgVXBkYXRlTm90aWZ5ICAgICAgICA9PiAwLAogICAgICAgICAgICBTb2x1dGlvblRpbWUgICAgICAgID0+IDAsCiAgICAgICAgICAgIFNvbHV0aW9uTm90aWZ5ICAgICAgPT4gMCwKICAgICAgICAgICAgVmFsaWRJRCAgICAgICAgICAgICA9PiAyLAogICAgICAgICAgICBDb21tZW50ICAgICAgICAgICAgID0+ICdbdGVzdF0lKlxcIFRlc3QgQ29tbWVudCBVUERBVEUxIFt0ZXN0XSUqXFwnLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgICAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgICAgICAgPT4gJFVzZXJJRHNbMV0sCiMgLS0tCiMgSVRTTQojIC0tLQogICAgICAgICAgICBUeXBlSUQgPT4gMiwKIyAtLS0KICAgICAgICB9LAogICAgfSwKXTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBydW4gZ2VuZXJhbCB0ZXN0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkVGVzdENvdW50ID0gMTsKbXkgJExhc3RBZGRlZFNMQUlEOwpteSAkQWRkZWRDb3VudGVyID0gMDsKCmZvciBteSAkSXRlbSAoIEB7JEl0ZW1EYXRhfSApIHsKCiAgICBpZiAoICRJdGVtLT57QWRkfSApIHsKCiAgICAgICAgIyBhZGQgbmV3IHNsYQogICAgICAgIG15ICRTTEFJRCA9ICRTTEFPYmplY3QtPlNMQUFkZCggJXsgJEl0ZW0tPntBZGR9IH0gKTsKCiAgICAgICAgIyBjaGVjayBpZiBzbGEgd2FzIGFkZGVkIHN1Y2Nlc3NmdWxseSBvciBub3QKICAgICAgICBpZiAoICRJdGVtLT57QWRkR2V0fSApIHsKCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJFNMQUlELAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU0xBQWRkKCkgLSBTTEFJRDogJFNMQUlEIiwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIGlmICgkU0xBSUQpIHsKCiAgICAgICAgICAgICAgICAjIGxvb2t1cCBzbGEgbmFtZQogICAgICAgICAgICAgICAgbXkgJFNMQU5hbWUgPSAkU0xBT2JqZWN0LT5TTEFMb29rdXAoIFNMQUlEID0+ICRTTEFJRCApOwoKICAgICAgICAgICAgICAgICMgbG9va3VwIHRlc3QKICAgICAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICAgICAkU0xBTmFtZSB8fCAnJywKICAgICAgICAgICAgICAgICAgICAkSXRlbS0+e0FkZEdldH0tPntOYW1lfSB8fCAnJywKICAgICAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFMb29rdXAoKSAtIGxvb2t1cCIsCiAgICAgICAgICAgICAgICApOwoKICAgICAgICAgICAgICAgICMgcmV2ZXJzZSBsb29rdXAgdGhlIHNsYSBpZAogICAgICAgICAgICAgICAgbXkgJFNMQUlETmV3ID0gJFNMQU9iamVjdC0+U0xBTG9va3VwKCBOYW1lID0+ICRTTEFOYW1lIHx8ICcnICk7CgogICAgICAgICAgICAgICAgIyByZXZlcnNlIGxvb2t1cCB0ZXN0CiAgICAgICAgICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICAgICAgICAgJFNMQUlETmV3IHx8ICcnLAogICAgICAgICAgICAgICAgICAgICRTTEFJRCAgICB8fCAnJywKICAgICAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFMb29rdXAoKSAtIHJldmVyc2UgbG9va3VwIiwKICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgIyBzZXQgbGFzdCBzbGEgaWQgdmFyaWFibGUKICAgICAgICAgICAgICAgICRMYXN0QWRkZWRTTEFJRCA9ICRTTEFJRDsKCiAgICAgICAgICAgICAgICAjIGluY3JlbWVudCB0aGUgYWRkZWQgY291bnRlcgogICAgICAgICAgICAgICAgJEFkZGVkQ291bnRlcisrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAkU0xBSUQsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFBZGQoKSIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBzbGEgZGF0YSB0byBjaGVjayB0aGUgdmFsdWVzIGFmdGVyIGNyZWF0aW9uIG9mIHRoZSBzbGEKICAgICAgICBteSAlU0xBR2V0ID0gJFNMQU9iamVjdC0+U0xBR2V0KAogICAgICAgICAgICBTTEFJRCAgPT4gJFNMQUlELAogICAgICAgICAgICBVc2VySUQgPT4gJEl0ZW0tPntBZGR9LT57VXNlcklEfSwKICAgICAgICAgICAgQ2FjaGUgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBzbGEgZGF0YSBhZnRlciBjcmVhdGlvbiBvZiB0aGUgc2xhCiAgICAgICAgZm9yIG15ICRTTEFBdHRyaWJ1dGUgKCBzb3J0IGtleXMgJXsgJEl0ZW0tPntBZGRHZXR9IH0gKSB7CgogICAgICAgICAgICAjIGNoZWNrIGF0dHJpYnV0ZXMKICAgICAgICAgICAgJFNlbGYtPklzRGVlcGx5KAogICAgICAgICAgICAgICAgJFNMQUdldHskU0xBQXR0cmlidXRlfSwKICAgICAgICAgICAgICAgICRJdGVtLT57QWRkR2V0fS0+eyRTTEFBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU0xBR2V0KCkgLSAkU0xBQXR0cmlidXRlIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAkSXRlbS0+e1VwZGF0ZX0gKSB7CgogICAgICAgICMgY2hlY2sgbGFzdCBzbGEgaWQgdmFyYWlibGUKICAgICAgICBpZiAoICEkTGFzdEFkZGVkU0xBSUQgKSB7CiAgICAgICAgICAgICRTZWxmLT5GYWxzZSgKICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBOTyBMQVNUIFNFUlZJQ0UgSUQgR0lWRU4iLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyB1cGRhdGUgdGhlIHNsYQogICAgICAgIG15ICRVcGRhdGVTdWNlc3MgPSAkU0xBT2JqZWN0LT5TTEFVcGRhdGUoCiAgICAgICAgICAgICV7ICRJdGVtLT57VXBkYXRlfSB9LAogICAgICAgICAgICBTTEFJRCA9PiAkTGFzdEFkZGVkU0xBSUQsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBpZiBzbGEgd2FzIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5IG9yIG5vdAogICAgICAgIGlmICggJEl0ZW0tPntVcGRhdGVHZXR9ICkgewogICAgICAgICAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAgICAgICAgICRVcGRhdGVTdWNlc3MsCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFVcGRhdGUoKSAtIFNMQUlEOiAkTGFzdEFkZGVkU0xBSUQiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAgICAgJFVwZGF0ZVN1Y2VzcywKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IFNMQVVwZGF0ZSgpIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IHNsYSBkYXRhIHRvIGNoZWNrIHRoZSB2YWx1ZXMgYWZ0ZXIgdGhlIHVwZGF0ZQogICAgICAgIG15ICVTTEFHZXQyID0gJFNMQU9iamVjdC0+U0xBR2V0KAogICAgICAgICAgICBTTEFJRCAgPT4gJExhc3RBZGRlZFNMQUlELAogICAgICAgICAgICBVc2VySUQgPT4gJEl0ZW0tPntVcGRhdGV9LT57VXNlcklEfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIHNsYSBkYXRhIGFmdGVyIHVwZGF0ZQogICAgICAgIGZvciBteSAkU0xBQXR0cmlidXRlICggc29ydCBrZXlzICV7ICRJdGVtLT57VXBkYXRlR2V0fSB9ICkgewoKICAgICAgICAgICAgIyBjaGVjayBhdHRyaWJ1dGVzCiAgICAgICAgICAgICRTZWxmLT5Jc0RlZXBseSgKICAgICAgICAgICAgICAgICRTTEFHZXQyeyRTTEFBdHRyaWJ1dGV9LAogICAgICAgICAgICAgICAgJEl0ZW0tPntVcGRhdGVHZXR9LT57JFNMQUF0dHJpYnV0ZX0sCiAgICAgICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFHZXQoKSAtICRTTEFBdHRyaWJ1dGUiLAogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgIyBsb29rdXAgc2xhIG5hbWUKICAgICAgICBteSAkU0xBTmFtZSA9ICRTTEFPYmplY3QtPlNMQUxvb2t1cCggU0xBSUQgPT4gJFNMQUdldDJ7U0xBSUR9ICk7CgogICAgICAgICMgbG9va3VwIHRlc3QKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTTEFOYW1lIHx8ICcnLAogICAgICAgICAgICAkU0xBR2V0MntOYW1lfSB8fCAnJywKICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogU0xBTG9va3VwKCkgLSBsb29rdXAiLAogICAgICAgICk7CgogICAgICAgICMgcmV2ZXJzZSBsb29rdXAgdGhlIHNsYSBpZAogICAgICAgIG15ICRTTEFJRE5ldyA9ICRTTEFPYmplY3QtPlNMQUxvb2t1cCggTmFtZSA9PiAkU0xBTmFtZSB8fCAnJyApOwoKICAgICAgICAjIHJldmVyc2UgbG9va3VwIHRlc3QKICAgICAgICAkU2VsZi0+SXMoCiAgICAgICAgICAgICRTTEFJRE5ldyB8fCAnJywKICAgICAgICAgICAgJFNMQUdldDJ7U0xBSUR9IHx8ICcnLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFMb29rdXAoKSAtIHJldmVyc2UgbG9va3VwIiwKICAgICAgICApOwogICAgfQoKICAgICRUZXN0Q291bnQrKzsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIFNMQUxpc3QgdGVzdCAxIChjaGVjayBnZW5lcmFsIGZ1bmN0aW9uYWxpdHkpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICVTTEFMaXN0MSA9ICRTTEFPYmplY3QtPlNMQUxpc3QoCiAgICBWYWxpZCAgPT4gMCwKICAgIFVzZXJJRCA9PiAxLAopOwpteSAlU0xBTGlzdDFPcmcgPSAlU0xBTGlzdE9yaWdpbmFsOwoKU0VSVklDRUlEOgpmb3IgbXkgJFNMQUlEICggc29ydCBrZXlzICVTTEFMaXN0MU9yZyApIHsKCiAgICBpZiAoICRTTEFMaXN0MXskU0xBSUR9ICYmICRTTEFMaXN0MU9yZ3skU0xBSUR9IGVxICRTTEFMaXN0MXskU0xBSUR9ICkgewogICAgICAgIGRlbGV0ZSAkU0xBTGlzdDF7JFNMQUlEfTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRTTEFMaXN0MXtEdW1teX0gPSAxOwogICAgfQp9CgpteSAkU0xBTGlzdDFDb3VudCA9IHNjYWxhciBrZXlzICVTTEFMaXN0MTsKCiRTZWxmLT5JcygKICAgICRTTEFMaXN0MUNvdW50IHx8ICcnLAogICAgJEFkZGVkQ291bnRlciAgfHwgJycsCiAgICAiVGVzdCAkVGVzdENvdW50OiBTTEFMaXN0KCkiLAopOwoKMTsK
Ly8gLS0KLy8gSVRTTS5BZ2VudC5DdXN0b21lclNlYXJjaC5qcyAtIHByb3ZpZGVzIHRoZSBzcGVjaWFsIG1vZHVsZSBmdW5jdGlvbnMgZm9yIHRoZSBjdXN0b21lciBzZWFyY2gKLy8gQ29weXJpZ2h0IChDKSAyMDAxLTIwMTMgT1RSUyBBRywgaHR0cDovL290cnMub3JnL1xuIjsKLy8gLS0KLy8gVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKLy8gdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQovLyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgovLyAtLQoKInVzZSBzdHJpY3QiOwoKdmFyIElUU00gPSBJVFNNIHx8IHt9OwpJVFNNLkFnZW50ID0gSVRTTS5BZ2VudCB8fCB7fTsKCi8qKgogKiBAbmFtZXNwYWNlCiAqIEBleHBvcnRzIFRhcmdldE5TIGFzIElUU00uQWdlbnQuQ3VzdG9tZXJTZWFyY2gKICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucyBmb3IgdGhlIGN1c3RvbWVyIHNlYXJjaC4KICovCklUU00uQWdlbnQuQ3VzdG9tZXJTZWFyY2ggPSAoZnVuY3Rpb24gKFRhcmdldE5TKSB7CiAgICB2YXIgQmFja3VwRGF0YSA9IHsKICAgICAgICBDdXN0b21lckluZm86ICcnLAogICAgICAgIEN1c3RvbWVyRW1haWw6ICcnLAogICAgICAgIEN1c3RvbWVyS2V5OiAnJwogICAgfTsKCiAgICAvKioKICAgICAqIEBmdW5jdGlvbgogICAgICogQHBhcmFtIHtqUXVlcnlPYmplY3R9ICRFbGVtZW50IFRoZSBqUXVlcnkgb2JqZWN0IG9mIHRoZSBpbnB1dCBmaWVsZCB3aXRoIGF1dG9jb21wbGV0ZQogICAgICogQHJldHVybiBub3RoaW5nCiAgICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucwogICAgICovCiAgICBUYXJnZXROUy5Jbml0ID0gZnVuY3Rpb24gKCRFbGVtZW50KSB7CgogICAgICAgIGlmIChpc0pRdWVyeU9iamVjdCgkRWxlbWVudCkpIHsKCiAgICAgICAgICAgIENvcmUuVUkuQXV0b2NvbXBsZXRlLkluaXQoCiAgICAgICAgICAgICAgICAkRWxlbWVudCwKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChSZXF1ZXN0LCBSZXNwb25zZSkgewogICAgICAgICAgICAgICAgICAgIHZhciBVUkwgPSBDb3JlLkNvbmZpZy5HZXQoJ0Jhc2VsaW5rJyksIERhdGEgPSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEFjdGlvbjogJ0FnZW50Q3VzdG9tZXJTZWFyY2gnLAogICAgICAgICAgICAgICAgICAgICAgICBUZXJtOiBSZXF1ZXN0LnRlcm0sCiAgICAgICAgICAgICAgICAgICAgICAgIE1heFJlc3VsdHM6IENvcmUuVUkuQXV0b2NvbXBsZXRlLkdldENvbmZpZygnTWF4UmVzdWx0c0Rpc3BsYXllZCcpCiAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICAgICAgJEVsZW1lbnQuZGF0YSgnQXV0b0NvbXBsZXRlWEhSJywgQ29yZS5BSkFYLkZ1bmN0aW9uQ2FsbChVUkwsIERhdGEsIGZ1bmN0aW9uIChSZXN1bHQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdmFyIERhdGEgPSBbXTsKICAgICAgICAgICAgICAgICAgICAgICAgJC5lYWNoKFJlc3VsdCwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YS5wdXNoKHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5DdXN0b21lclZhbHVlICsgIiAoIiArIHRoaXMuQ3VzdG9tZXJLZXkgKyAiKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuQ3VzdG9tZXJWYWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgICAgICBSZXNwb25zZShEYXRhKTsKICAgICAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgZnVuY3Rpb24gKEV2ZW50LCBVSSkgewoKICAgICAgICAgICAgICAgICAgICB2YXIgQ3VzdG9tZXJLZXkgPSBVSS5pdGVtLmxhYmVsLnJlcGxhY2UoLy4qXCgoLiopXCkkLywgJyQxJyk7CgogICAgICAgICAgICAgICAgICAgICRFbGVtZW50LnZhbChVSS5pdGVtLnZhbHVlKTsKCiAgICAgICAgICAgICAgICAgICAgLy8gc2V0IGhpZGRlbiBmaWVsZCBTZWxlY3RlZEN1c3RvbWVyVXNlcgogICAgICAgICAgICAgICAgICAgIC8vIGVzY2FwZSBwb3NzaWJsZSBjb2xvbnMgKDopIGluIGVsZW1lbnQgaWQgYmVjYXVzZSBqUXVlcnkgY2FuIG5vdCBoYW5kbGUgaXQgaW4gaWQgYXR0cmlidXRlIHNlbGVjdG9ycwogICAgICAgICAgICAgICAgICAgICQoJyMnICsgQ29yZS5BcHAuRXNjYXBlU2VsZWN0b3IoJEVsZW1lbnQuYXR0cignaWQnKSkgKyAnU2VsZWN0ZWQnKS52YWwoQ3VzdG9tZXJLZXkpOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgJ0N1c3RvbWVyU2VhcmNoJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgLy8gT24gdW5sb2FkIHJlbW92ZSBvbGQgc2VsZWN0ZWQgZGF0YS4gSWYgdGhlIHBhZ2UgaXMgcmVsb2FkZWQgKHdpdGggRjUpIHRoaXMgZGF0YSBzdGF5cyBpbiB0aGUgZmllbGQgYW5kIGludm9rZXMgYW4gYWpheCByZXF1ZXN0IG90aGVyd2lzZQogICAgICAgICQod2luZG93KS5iaW5kKCd1bmxvYWQnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIC8vIGVzY2FwZSBwb3NzaWJsZSBjb2xvbnMgKDopIGluIGVsZW1lbnQgaWQgYmVjYXVzZSBqUXVlcnkgY2FuIG5vdCBoYW5kbGUgaXQgaW4gaWQgYXR0cmlidXRlIHNlbGVjdG9ycwogICAgICAgICAgICAkKCcjJyArIENvcmUuQXBwLkVzY2FwZVNlbGVjdG9yKCRFbGVtZW50LmF0dHIoJ2lkJykpICsgJ1NlbGVjdGVkJykudmFsKCcnKTsKICAgICAgICB9KTsKICAgIH07CgogICAgcmV0dXJuIFRhcmdldE5TOwp9KElUU00uQWdlbnQuQ3VzdG9tZXJTZWFyY2ggfHwge30pKTsK
Ly8gLS0KLy8gSVRTTS5BZ2VudC5JbmNpZGVudFN0YXRlLmpzIC0gcHJvdmlkZXMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucyB0byBzaG93IHRoZSBzZXJ2aWNlIGluY2lkZW50IHN0YXRlCi8vIENvcHlyaWdodCAoQykgMjAwMS0yMDExIE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy9cbiI7Ci8vIC0tCi8vIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCi8vIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKLy8gZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9hZ3BsLnR4dC4KLy8gLS0KCiJ1c2Ugc3RyaWN0IjsKCnZhciBJVFNNID0gSVRTTSB8fCB7fTsKSVRTTS5BZ2VudCA9IElUU00uQWdlbnQgfHwge307CgovKioKICogQG5hbWVzcGFjZQogKiBAZXhwb3J0cyBUYXJnZXROUyBhcyBJVFNNLkFnZW50LkluY2lkZW50U3RhdGUKICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucyBmb3IgSW5jaWRlbnRTdGF0ZS4KICovCklUU00uQWdlbnQuSW5jaWRlbnRTdGF0ZSA9IChmdW5jdGlvbiAoVGFyZ2V0TlMpIHsKCiAgICBUYXJnZXROUy5TaG93SW5jaWRlbnRTdGF0ZSA9IGZ1bmN0aW9uIChEYXRhKSB7CgogICAgICAgIERhdGEuU3ViYWN0aW9uID0gJ0dldFNlcnZpY2VJbmNpZGVudFN0YXRlJzsKCiAgICAgICAgQ29yZS5BSkFYLkZ1bmN0aW9uQ2FsbCggQ29yZS5Db25maWcuR2V0KCdCYXNlbGluaycpLCBEYXRhLCBmdW5jdGlvbiAoUmVzcG9uc2UpIHsKCiAgICAgICAgICAgIC8vIGlmIGEgc2VydmljZSB3YXMgc2VsZWN0ZWQgYW5kIGFuIGluY2lkZW50IHN0YXRlIHdhcyBmb3VuZAogICAgICAgICAgICBpZiAoUmVzcG9uc2UuQ3VySW5jaVNpZ25hbCkgewoKICAgICAgICAgICAgICAgIC8vIHNldCBpbmNpZGVudCBzaWduYWwKICAgICAgICAgICAgICAgICQoJyNTZXJ2aWNlSW5jaWRlbnRTdGF0ZVNpZ25hbCcpLmF0dHIoJ2NsYXNzJywgUmVzcG9uc2UuQ3VySW5jaVNpZ25hbCk7CiAgICAgICAgICAgICAgICAkKCcjU2VydmljZUluY2lkZW50U3RhdGVTaWduYWwnKS5hdHRyKCd0aXRsZScsIFJlc3BvbnNlLkN1ckluY2lTdGF0ZSk7CgogICAgICAgICAgICAgICAgLy8gc2V0IGluY2lkZW50IHN0YXRlCiAgICAgICAgICAgICAgICAkKCcjU2VydmljZUluY2lkZW50U3RhdGUnKS5odG1sKFJlc3BvbnNlLkN1ckluY2lTdGF0ZSk7CgogICAgICAgICAgICAgICAgLy8gc2hvdyBzZXJ2aWNlIGluY2lkZW50IHNpZ25hbCBhbmQgc3RhdGUKICAgICAgICAgICAgICAgICQoJyNTZXJ2aWNlSW5jaWRlbnRTdGF0ZUNvbnRhaW5lcicpCiAgICAgICAgICAgICAgICAgICAgLnNob3coKQogICAgICAgICAgICAgICAgICAgIC5wcmV2KCkKICAgICAgICAgICAgICAgICAgICAuc2hvdygpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgLy8gaGlkZSBzZXJ2aWNlIGluY2lkZW50IHNpZ25hbCBhbmQgc3RhdGUKICAgICAgICAgICAgICAgICQoJyNTZXJ2aWNlSW5jaWRlbnRTdGF0ZUNvbnRhaW5lcicpCiAgICAgICAgICAgICAgICAgICAgLmhpZGUoKQogICAgICAgICAgICAgICAgICAgIC5wcmV2KCkKICAgICAgICAgICAgICAgICAgICAuaGlkZSgpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICB9OwoKICAgIHJldHVybiBUYXJnZXROUzsKfShJVFNNLkFnZW50LkluY2lkZW50U3RhdGUgfHwge30pKTsK
Ly8gLS0KLy8gSVRTTS5BZ2VudC5ab29tLmpzIC0gcHJvdmlkZXMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucyBmb3IgVGlja2V0Wm9vbQovLyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxMSBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvXG4iOwovLyAtLQovLyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQovLyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChBR1BMKS4gSWYgeW91Ci8vIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQuCi8vIC0tCgoidXNlIHN0cmljdCI7Cgp2YXIgSVRTTSA9IElUU00gfHwge307CklUU00uQWdlbnQgPSBJVFNNLkFnZW50IHx8IHt9OwoKLyoqCiAqIEBuYW1lc3BhY2UKICogQGV4cG9ydHMgVGFyZ2V0TlMgYXMgQ29yZS5JVFNNLlRpY2tldFpvb20KICogQGRlc2NyaXB0aW9uCiAqICAgICAgVGhpcyBuYW1lc3BhY2UgY29udGFpbnMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucyBmb3IgSVRTTS4KICovCklUU00uQWdlbnQuWm9vbSA9IChmdW5jdGlvbiAoVGFyZ2V0TlMpIHsKCiAgICAvKioKICAgICAqIEBmdW5jdGlvbgogICAgICogQHJldHVybiBub3RoaW5nCiAgICAgKiAgICAgIFRoaXMgZnVuY3Rpb24gaW5pdGlhbGl6ZXMgdGhlIHNwZWNpYWwgbW9kdWxlIGZ1bmN0aW9ucwogICAgICovCiAgICBUYXJnZXROUy5Jbml0ID0gZnVuY3Rpb24gKElUU01UYWJsZUhlaWdodCkgewoKICAgICAgICBDb3JlLlVJLlJlc2l6YWJsZS5Jbml0KCQoJyNJVFNNVGFibGVCb2R5JyksIElUU01UYWJsZUhlaWdodCwgZnVuY3Rpb24gKGV2ZW50LCB1aSwgSGVpZ2h0LCBXaWR0aCkgewoKICAgICAgICAgICAgLy8gcmVtZW1iZXIgbmV3IGhlaWdodCBmb3IgbmV4dCByZWxvYWQKICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dChUYXJnZXROUy5SZXNpemVUaW1lT3V0U2Nyb2xsZXIpOwogICAgICAgICAgICBUYXJnZXROUy5SZXNpemVUaW1lT3V0U2Nyb2xsZXIgPSB3aW5kb3cuc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBDb3JlLkFnZW50LlByZWZlcmVuY2VzVXBkYXRlKCdVc2VyQ29uZmlnSXRlbVpvb21UYWJsZUhlaWdodCcsIEhlaWdodCk7CiAgICAgICAgICAgIH0sIDEwMDApOwogICAgICAgIH0pOwogICAgfTsKCiAgICByZXR1cm4gVGFyZ2V0TlM7Cn0oSVRTTS5BZ2VudC5ab29tIHx8IHt9KSk7Cg==
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgRGVmYXVsdCBTZXR0aW5ncwogKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7CgovKioKICogQHN1YnNlY3Rpb24gIEZsYWcKICovCgpmaWVsZHNldC5UYWJsZUxpa2UgZGl2LlZhbHVlIC5GbGFnIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICBtYXJnaW4tdG9wOiAzcHg7Cn0KCiNTZXJ2aWNlSW5jaWRlbnRTdGF0ZUNvbnRhaW5lciAuRmxhZywKLlNpZGViYXJDb2x1bW4gZmllbGRzZXQuVGFibGVMaWtlIGRpdi5WYWx1ZSAuRmxhZyB7CiAgICBtYXJnaW4tdG9wOiA3cHg7Cn0KCnVsLklUU01GbGFnIHsKICAgIG1hcmdpbi10b3A6IDVweDsKfQoKdWwuSVRTTUZsYWcgZGl2LlZhbHVlIC5GbGFnIHsKICAgIGZsb2F0OiBsZWZ0OwogICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICBtYXJnaW4tdG9wOiAzcHg7Cn0KCi5SVEwgZmllbGRzZXQuVGFibGVMaWtlIGRpdi5WYWx1ZSAuRmxhZyB7CiAgICBmbG9hdDogcmlnaHQ7CiAgICBtYXJnaW4tbGVmdDogNXB4Owp9CgouRmxhZyBzcGFuLmdyYXlsZWQgewogICAgYmFja2dyb3VuZC1jb2xvcjojY2RjZGNkOwp9CgouRmxhZyBzcGFuLmdyZWVubGVkIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICM4YmVmNGQ7Cn0KCi5GbGFnIHNwYW4ueWVsbG93bGVkIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmRkNTA7Cn0KCi5GbGFnIHNwYW4ucmVkbGVkIHsKICAgIGJhY2tncm91bmQtY29sb3I6I2ZmNTA1ZTsKfQoKLkZsYWcgc3Bhbi5wdXJwbGVsZWQgewogICAgYmFja2dyb3VuZC1jb2xvcjojYjIzYWVlOwp9CgouRmxhZyBzcGFuLm9yYW5nZWxlZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiNmZjhjMDA7Cn0KCi5GbGFnIHNwYW4uY3lhbmxlZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiM3OWNkY2Q7Cn0KCi5GbGFnIHNwYW4ud2hpdGVsZWQgewogICAgYmFja2dyb3VuZC1jb2xvcjojZmZmZmZmOwp9CgouRmxhZyBzcGFuLmJsYWNrbGVkIHsKICAgIGJhY2tncm91bmQtY29sb3I6IzAwMDAwMDsKfQoKLyoqCiAqIEBub3RlICAgICBUaGVzZSBjbGFzc2VzIGFyZSB1c2VkIGZvciBhIExhYmVsIGFuZCBhIERpdiB3aXRoIGNsYXNzICdGaWVsZCcsCiAqICAgICAgICAgICB0aGF0IGFyZSBpbnNpZGUgYSBGaWVsZCBEaXYgLgogKi8KCmxhYmVsLlN1YkVsZW1lbnQgewogICAgd2lkdGg6IDQwJSAhaW1wb3J0YW50OwogICAgbWFyZ2luLXJpZ2h0OiAxMHB4Owp9CgpkaXYuU3ViRWxlbWVudCB7CiAgICBtYXJnaW4tbGVmdDogNDAlICFpbXBvcnRhbnQ7Cn0KCmRpdi5TdWJFbGVtZW50IGlucHV0Llc1MHBjIHsKICAgIHdpZHRoOiAzMyU7Cn0KCi8qKgogKiBAc3Vic2VjdGlvbiBOb0RvdWJsZUJvcmRlcnMKICovCgouQ29udGVudC5Ob0RvdWJsZUJvcmRlcnMgewogICAgYm9yZGVyLWxlZnQ6IDAgbm9uZSAjMDAwMDAwOwogICAgYm9yZGVyLXJpZ2h0OiAwIG5vbmUgIzAwMDAwMDsKfQoKLyoqCiAqIEBzdWJzZWN0aW9uICBTdGFuZGFyZCBXaWR0aHMKICovCi5XNXBjIHsKICAgIHdpZHRoOiA1JTsKfQoKLlcxNXBjIHsKICAgIHdpZHRoOiAxNSU7Cn0KCi5XMzBwYyB7CiAgICB3aWR0aDogMzAlOwp9Cgp9LyogZW5kIG1lZGlhICovCgoK
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgSVRTTURldGFpbHMKICovCgpAbWVkaWEgc2NyZWVuLHByb2plY3Rpb24sdHYsaGFuZGhlbGQgewoKLyoqCiAqIEBzdWJzZWN0aW9uICBIZWFkbGluZQogKi8KCi8qKgogKiBAc3Vic2VjdGlvbiAgSVRTTSB0cmVlCiAqLwojSVRTTVRyZWUgewogICAgbWFyZ2luLXRvcDogMjBweDsKfQoKCi8qKgogKiBAc3Vic2VjdGlvbiAgSVRTTSB0YWJsZSBib2R5CiAqLwojSVRTTVRhYmxlQm9keSB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKfQoKI0lUU01UYWJsZUJvZHkgLlNjcm9sbGVyIHsKICAgIGhlaWdodDogMTQwcHg7CiAgICBvdmVyZmxvdy15OiBzY3JvbGw7Cn0KCi8qKgogKiBAc3Vic2VjdGlvbiAgQ29udHJvbFJvdyBJY29ucwogKi8KCgouSVRTTUl0ZW1WaWV3IHsKICAgIGZsb2F0OiByaWdodDsKfQoKLlJUTCAuSVRTTUl0ZW1WaWV3IHsKICAgIGZsb2F0OiBsZWZ0Owp9CgoKLkNvbnRyb2xSb3cgLklUU01JdGVtVmlldy5JY29ucyAuT25lSVRTTUl0ZW0uQWN0aXZlIHNwYW4sCi5Db250cm9sUm93IC5JVFNNSXRlbVZpZXcuSWNvbnMgLk9uZUlUU01JdGVtLkFjdGl2ZTpob3ZlciBzcGFuIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xNnB4IDA7Cn0KCi5Db250cm9sUm93IC5JVFNNSXRlbVZpZXcuSWNvbnMgLkFsbElUU01JdGVtcyBzcGFuLAouQ29udHJvbFJvdyAuSVRTTUl0ZW1WaWV3Lkljb25zIC5BbGxJVFNNSXRlbXM6aG92ZXIgc3BhbiB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIC0xNnB4Owp9CgouQ29udHJvbFJvdyAuSVRTTUl0ZW1WaWV3Lkljb25zIC5BbGxJVFNNSXRlbXMuQWN0aXZlIHNwYW4sCi5Db250cm9sUm93IC5JVFNNSXRlbVZpZXcuSWNvbnMgLkFsbElUU01JdGVtcy5BY3RpdmU6aG92ZXIgc3BhbiB7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMTZweCAtMTZweDsKfQoKLkNvbnRyb2xSb3cgLklUU01GaWx0ZXIuSWNvbnMgLkFjdGl2ZSBzcGFuIHsKICAgIGJhY2tncm91bmQtcG9zaXRpb246IDAgLTE2cHg7Cn0KCi8qKgogKiBAc3Vic2VjdGlvbiAgSXRlbVJvdwogKiBAbm90ZSAgICAgICAgY29udGFpbnMgcmFuZG9tIGl0ZW1zIGFuZCBpcyBwb3NpdGlvbmVkIGluIHRoZSBzaWRlYmFyCiAqLwoKLkl0ZW1Sb3cgewogICAgbWFyZ2luLWxlZnQ6IDQwJTsKfQoKLlJUTCAuSXRlbVJvdyB7CiAgICBtYXJnaW4tbGVmdDogMDsKICAgIG1hcmdpbi1yaWdodDogNDAlOwp9CgouSXRlbVJvdyBsaSB7CiAgICBwYWRkaW5nOiAzcHggMCA1cHggOHB4Owp9CgouUlRMIC5JdGVtUm93IGxpIHsKICAgIHBhZGRpbmc6IDNweCA4cHggNXB4IDA7Cn0KCi5JdGVtUm93IGEgewogICAgbGluZS1oZWlnaHQ6IDE0cHg7CiAgICBjb2xvcjogIzAwMDsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwp9CgouSXRlbVJvdyBhOmhvdmVyIHsKICAgIGNvbG9yOiAjNjY2Owp9Cgp9IC8qIGVuZCBAbWVkaWEgKi8=
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqIEBjc3MtZm9yICAgICBJRTcKICovCgovKioKICogQHBhY2thZ2UgICAgIFNraW4gIkRlZmF1bHQiCiAqIEBzZWN0aW9uICAgICBJVFNNRGV0YWlscwogKi8KCkBtZWRpYSBzY3JlZW4scHJvamVjdGlvbix0dixoYW5kaGVsZCB7CgovKioKICogQHN1YnNlY3Rpb24gIENvbXBhdGliaWxpdHkgSUU3IGZvciBUaWNrZXQgWm9vbQogKi8KI0lUU01UYWJsZUJvZHkgdGFibGUgewogICAgd2lkdGg6IDk4JTsKfQoKCn0gLyogZW5kIEBtZWRpYSAqLw==
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgU2VhcmNoCiAqLwoKQG1lZGlhIHNjcmVlbixwcm9qZWN0aW9uLHR2LGhhbmRoZWxkIHsKCgovKioKICogQHN1YnNlY3Rpb24gIEF1dG9Db21wbGV0ZQogKi8KCi51aS1hdXRvY29tcGxldGUgewogICAgei1pbmRleDogMTAwMDAwICFpbXBvcnRhbnQ7Cn0KCn0K
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgQ1NTIGZvciBwcmludGluZwogKi8KCkBtZWRpYSBwcmludCB7CgoKI0lUU01UYWJsZSB7CiAgICBkaXNwbGF5OiBub25lOwp9Cgp9IC8qIGVuZCBAbWVkaWEgKi8=
LyoqCiAqIEBwcm9qZWN0ICAgICBPVFJTIChodHRwOi8vd3d3Lm90cnMub3JnKSAtIEFnZW50IEZyb250ZW5kCiAqIEBjb3B5cmlnaHQgICBPVFJTIEFHCiAqIEBsaWNlbnNlICAgICBBR1BMIChodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQpCiAqLwoKLyoqCiAqIEBwYWNrYWdlICAgICBTa2luICJEZWZhdWx0IgogKiBAc2VjdGlvbiAgICAgVGFibGVzCiAqLwoKQG1lZGlhIHNjcmVlbixwcm9qZWN0aW9uLHR2LGhhbmRoZWxkIHsKCi8qKgogKiBAc3Vic2VjdGlvbiAgT3ZlcnZpZXcgU21hbGwgVmlldyBUYWJsZQogKi8KCi5UYWJsZVNtYWxsIHRoZWFkLklUU01IZWFkZXIgc3BhbiB7CiAgICBjb2xvcjogIzRBNEE0QTsKfQoKLyoqCiAqIEBzdWJzZWN0aW9uICB0YWJsZSBlbGVtZW50cyB3aXRob3V0IGhpZ2hsaWdodAogKi8KCi5EYXRhVGFibGVOb0hpZ2hsaWdodCB0Ym9keSB0ciB0ZCB7CiAgICBoZWlnaHQ6IDMwcHg7Cn0KCi5EYXRhVGFibGVOb0hpZ2hsaWdodCB0Ym9keSB0ciB0ZCBpbnB1dCwKLkRhdGFUYWJsZU5vSGlnaGxpZ2h0IHRib2R5IHRyIHRkIHNlbGVjdHsKICAgIHdpZHRoOiA4NSU7Cn0KCi5EYXRhVGFibGVOb0hpZ2hsaWdodCB0Ym9keSB0cjpob3ZlciB0ZCB7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgLW1vei1ib3gtc2hhZG93OiBub25lOwogICAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lOwogICAgYm94LXNoYWRvdzogbm9uZTsKfQouRGF0YVRhYmxlTm9IaWdobGlnaHQgdHIuRXZlbjpob3ZlciB0ZCwKLkRhdGFUYWJsZU5vSGlnaGxpZ2h0IHRyLkV2ZW46aG92ZXIuTGFzdCB0ZCB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRjVGNUY1Owp9CgouRGF0YVRhYmxlTm9IaWdobGlnaHQgdGJvZHkgdHIuTGFzdDpob3ZlciB0ZCB7CiAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgLW1vei1ib3gtc2hhZG93OiBub25lOwogICAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lOwogICAgYm94LXNoYWRvdzogbm9uZTsKfQoKfQ==
IyAtLQojIElUU01Db3JlLnBtIC0gY29kZSB0byBleGNlY3V0ZSBkdXJpbmcgcGFja2FnZSBpbnN0YWxsYXRpb24KIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAxNCBPVFJTIEFHLCBodHRwOi8vb3Rycy5jb20vCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEFHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2FncGwudHh0LgojIC0tCgpwYWNrYWdlIHZhcjo6cGFja2FnZXNldHVwOjpJVFNNQ29yZTsgICAgIyMgbm8gY3JpdGljCgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhcmlhYmxlQ2hlY2sgcXcoOmFsbCk7CgpvdXIgQE9iamVjdERlcGVuZGVuY2llcyA9ICgKICAgICdLZXJuZWw6OlN5c3RlbTo6REInLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycsCiAgICAnS2VybmVsOjpTeXN0ZW06Okdyb3VwJywKICAgICdLZXJuZWw6OlN5c3RlbTo6SVRTTUNJUEFsbG9jYXRlJywKICAgICdLZXJuZWw6OlN5c3RlbTo6TG9nJywKICAgICdLZXJuZWw6OlN5c3RlbTo6UHJpb3JpdHknLAogICAgJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcsCik7Cgo9aGVhZDEgTkFNRQoKSVRTTUNvcmUucG0gLSBjb2RlIHRvIGV4Y2VjdXRlIGR1cmluZyBwYWNrYWdlIGluc3RhbGxhdGlvbgoKPWhlYWQxIFNZTk9QU0lTCgpBbGwgZnVuY3Rpb25zCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpTeXN0ZW06Ok9iamVjdE1hbmFnZXI7CiAgICBsb2NhbCAkS2VybmVsOjpPTSA9IEtlcm5lbDo6U3lzdGVtOjpPYmplY3RNYW5hZ2VyLT5uZXcoKTsKICAgIG15ICRDb2RlT2JqZWN0ID0gJEtlcm5lbDo6T00tPkdldCgndmFyOjpwYWNrYWdlc2V0dXA6OklUU01Db3JlJyk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICggJFR5cGUsICVQYXJhbSApID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MoICRTZWxmLCAkVHlwZSApOwoKICAgICMgYWx3YXlzIGRpc2NhcmQgdGhlIGNvbmZpZyBvYmplY3QgYmVmb3JlIHBhY2thZ2UgY29kZSBpcyBleGVjdXRlZCwKICAgICMgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIGNvbmZpZyBvYmplY3Qgd2lsbCBiZSBjcmVhdGVkIG5ld2x5LCBzbyB0aGF0IGl0CiAgICAjIHdpbGwgdXNlIHRoZSByZWNlbnRseSB3cml0dGVuIG5ldyBjb25maWcgZnJvbSB0aGUgcGFja2FnZQogICAgJEtlcm5lbDo6T00tPk9iamVjdHNEaXNjYXJkKAogICAgICAgIE9iamVjdHMgPT4gWyAnS2VybmVsOjpDb25maWcnIF0sCiAgICApOwoKICAgIHJldHVybiAkU2VsZjsKfQoKPWl0ZW0gQ29kZUluc3RhbGwoKQoKcnVuIHRoZSBjb2RlIGluc3RhbGwgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZUluc3RhbGwoKTsKCj1jdXQKCnN1YiBDb2RlSW5zdGFsbCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY3JlYXRlIGR5bmFtaWMgZmllbGRzIGZvciBJVFNNQ29yZQogICAgJFNlbGYtPl9DcmVhdGVJVFNNRHluYW1pY0ZpZWxkcygpOwoKICAgICMgc2V0IGRlZmF1bHQgQ0lQIG1hdHJpeAogICAgJFNlbGYtPl9DSVBEZWZhdWx0TWF0cml4U2V0KCk7CgogICAgIyBhZGQgdGhlIGdyb3VwIGl0c20tc2VydmljZQogICAgJFNlbGYtPl9Hcm91cEFkZCgKICAgICAgICBOYW1lICAgICAgICA9PiAnaXRzbS1zZXJ2aWNlJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnR3JvdXAgZm9yIElUU00gU2VydmljZSBtYXNrIGFjY2VzcyBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLicsCiAgICApOwoKICAgICMgZmlsbHVwIGVtcHR5IHR5cGVfaWQgcm93cyBpbiBzZXJ2aWNlIHRhYmxlCiAgICAkU2VsZi0+X0ZpbGx1cEVtcHR5U2VydmljZVR5cGVJRCgpOwoKICAgICMgZmlsbHVwIGVtcHR5IGNyaXRpY2FsaXR5IHJvd3MgaW4gc2VydmljZSB0YWJsZQogICAgJFNlbGYtPl9GaWxsdXBFbXB0eVNlcnZpY2VDcml0aWNhbGl0eSgpOwoKICAgICMgZmlsbHVwIGVtcHR5IHR5cGVfaWQgcm93cyBpbiBzbGEgdGFibGUKICAgICRTZWxmLT5fRmlsbHVwRW1wdHlTTEFUeXBlSUQoKTsKCiAgICAjIHNldCBwcmVmZXJlbmNlcyBmb3Igc29tZSBHZW5lcmFsQ2F0YWxvZyBlbnRyaWVzCiAgICAjIHRoaXMgaXMgb25seSBuZWNlc3NhcnkgaW4gQ29kZUluc3RhbGwKICAgICMgKEZvciBVcGdyYWRlcyB0aGlzIGlzIGRvbmUgYWxyZWFkeSBpbiB0aGUgR2VuZXJhbENhdGFsb2cgcGFja2FnZSkKICAgICRTZWxmLT5fU2V0UHJlZmVyZW5jZXMoKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gQ29kZVJlaW5zdGFsbCgpCgpydW4gdGhlIGNvZGUgcmVpbnN0YWxsIHBhcnQKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVSZWluc3RhbGwoKTsKCj1jdXQKCnN1YiBDb2RlUmVpbnN0YWxsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBzZXQgZGVmYXVsdCBDSVAgbWF0cml4CiAgICAkU2VsZi0+X0NJUERlZmF1bHRNYXRyaXhTZXQoKTsKCiAgICAjIGFkZCB0aGUgZ3JvdXAgaXRzbS1zZXJ2aWNlCiAgICAkU2VsZi0+X0dyb3VwQWRkKAogICAgICAgIE5hbWUgICAgICAgID0+ICdpdHNtLXNlcnZpY2UnLAogICAgICAgIERlc2NyaXB0aW9uID0+ICdHcm91cCBmb3IgSVRTTSBTZXJ2aWNlIG1hc2sgYWNjZXNzIGluIHRoZSBhZ2VudCBpbnRlcmZhY2UuJywKICAgICk7CgogICAgIyBmaWxsdXAgZW1wdHkgdHlwZV9pZCByb3dzIGluIHNlcnZpY2UgdGFibGUKICAgICRTZWxmLT5fRmlsbHVwRW1wdHlTZXJ2aWNlVHlwZUlEKCk7CgogICAgIyBmaWxsdXAgZW1wdHkgY3JpdGljYWxpdHkgcm93cyBpbiBzZXJ2aWNlIHRhYmxlCiAgICAkU2VsZi0+X0ZpbGx1cEVtcHR5U2VydmljZUNyaXRpY2FsaXR5KCk7CgogICAgIyBmaWxsdXAgZW1wdHkgdHlwZV9pZCByb3dzIGluIHNsYSB0YWJsZQogICAgJFNlbGYtPl9GaWxsdXBFbXB0eVNMQVR5cGVJRCgpOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDb2RlVXBncmFkZUZyb21Mb3dlclRoYW5fM18yXzkxKCkKClRoaXMgZnVuY3Rpb24gaXMgb25seSBleGVjdXRlZCBpZiB0aGUgaW5zdGFsbGVkIG1vZHVsZSB2ZXJzaW9uIGlzIHNtYWxsZXIgdGhhbiAzLjIuOTEgKDMuMy4wIEJldGEgMSkuCgpteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVVcGdyYWRlRnJvbUxvd2VyVGhhbl8zXzJfOTEoKTsKCj1jdXQKCnN1YiBDb2RlVXBncmFkZUZyb21Mb3dlclRoYW5fM18yXzkxIHsgICAgIyMgbm8gY3JpdGljCiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgbWlncmF0ZSB0aGUgdmFsdWVzIGZvciBDcml0aWNhbGl0eSBhbmQgdGhlIEltcGFjdCBmcm9tIEdlbmVyYWxDYXRhbG9nIHRvIER5bmFtaWNGaWVsZHMKICAgICRTZWxmLT5fTWlncmF0ZUNyaXRpY2FsaXR5QW5kSW1wYWN0VG9EeW5hbWljRmllbGRzKCk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIENvZGVVcGdyYWRlKCkKCnJ1biB0aGUgY29kZSB1cGdyYWRlIHBhcnQKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPkNvZGVVcGdyYWRlKCk7Cgo9Y3V0CgpzdWIgQ29kZVVwZ3JhZGUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIHNldCBkZWZhdWx0IENJUCBtYXRyaXgKICAgICRTZWxmLT5fQ0lQRGVmYXVsdE1hdHJpeFNldCgpOwoKICAgICMgZmlsbHVwIGVtcHR5IHR5cGVfaWQgcm93cyBpbiBzZXJ2aWNlIHRhYmxlCiAgICAkU2VsZi0+X0ZpbGx1cEVtcHR5U2VydmljZVR5cGVJRCgpOwoKICAgICMgZmlsbHVwIGVtcHR5IGNyaXRpY2FsaXR5IHJvd3MgaW4gc2VydmljZSB0YWJsZQogICAgJFNlbGYtPl9GaWxsdXBFbXB0eVNlcnZpY2VDcml0aWNhbGl0eSgpOwoKICAgICMgZmlsbHVwIGVtcHR5IHR5cGVfaWQgcm93cyBpbiBzbGEgdGFibGUKICAgICRTZWxmLT5fRmlsbHVwRW1wdHlTTEFUeXBlSUQoKTsKCiAgICAjIG1ha2UgZHluYW1pYyBmaWVsZHMgaW50ZXJuYWwKICAgICRTZWxmLT5fTWFrZUR5bmFtaWNGaWVsZHNJbnRlcm5hbCgpOwoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBDb2RlVW5pbnN0YWxsKCkKCnJ1biB0aGUgY29kZSB1bmluc3RhbGwgcGFydAoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+Q29kZVVuaW5zdGFsbCgpOwoKPWN1dAoKc3ViIENvZGVVbmluc3RhbGwgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGRlYWN0aXZhdGUgdGhlIGdyb3VwIGl0c20tc2VydmljZQogICAgJFNlbGYtPl9Hcm91cERlYWN0aXZhdGUoCiAgICAgICAgTmFtZSA9PiAnaXRzbS1zZXJ2aWNlJywKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIF9HZXRJVFNNRHluYW1pY0ZpZWxkc0RlZmluaXRpb24oKQoKcmV0dXJucyB0aGUgZGVmaW5pdGlvbiBmb3IgSVRTTUNvcmUgcmVsYXRlZCBkeW5hbWljIGZpZWxkcwoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X0dldElUU01EeW5hbWljRmllbGRzRGVmaW5pdGlvbigpOwoKPWN1dAoKc3ViIF9HZXRJVFNNRHluYW1pY0ZpZWxkc0RlZmluaXRpb24gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGRlZmluZSBhbGwgZHluYW1pYyBmaWVsZHMgZm9yIElUU01Db3JlCiAgICBteSBARHluYW1pY0ZpZWxkcyA9ICgKICAgICAgICB7CiAgICAgICAgICAgIE9sZE5hbWUgICAgPT4gJ1RpY2tldEZyZWVUZXh0MTMnLAogICAgICAgICAgICBOYW1lICAgICAgID0+ICdJVFNNQ3JpdGljYWxpdHknLAogICAgICAgICAgICBMYWJlbCAgICAgID0+ICdDcml0aWNhbGl0eScsCiAgICAgICAgICAgIEZpZWxkVHlwZSAgPT4gJ0Ryb3Bkb3duJywKICAgICAgICAgICAgT2JqZWN0VHlwZSA9PiAnVGlja2V0JywKICAgICAgICAgICAgQ29uZmlnICAgICA9PiB7CiAgICAgICAgICAgICAgICBEZWZhdWx0VmFsdWUgICAgICAgPT4gJycsCiAgICAgICAgICAgICAgICBMaW5rICAgICAgICAgICAgICAgPT4gJycsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGFibGVWYWx1ZXMgPT4gMSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgUG9zc2libGVWYWx1ZXMgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAnMSB2ZXJ5IGxvdycgID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgICAgICAnMiBsb3cnICAgICAgID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAgICAgJzMgbm9ybWFsJyAgICA9PiAnMyBub3JtYWwnLAogICAgICAgICAgICAgICAgICAgICc0IGhpZ2gnICAgICAgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICAgICAgJzUgdmVyeSBoaWdoJyA9PiAnNSB2ZXJ5IGhpZ2gnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgT2xkTmFtZSAgICA9PiAnVGlja2V0RnJlZVRleHQxNCcsCiAgICAgICAgICAgIE5hbWUgICAgICAgPT4gJ0lUU01JbXBhY3QnLAogICAgICAgICAgICBMYWJlbCAgICAgID0+ICdJbXBhY3QnLAogICAgICAgICAgICBGaWVsZFR5cGUgID0+ICdEcm9wZG93bicsCiAgICAgICAgICAgIE9iamVjdFR5cGUgPT4gJ1RpY2tldCcsCiAgICAgICAgICAgIENvbmZpZyAgICAgPT4gewogICAgICAgICAgICAgICAgRGVmYXVsdFZhbHVlICAgICAgID0+ICczIG5vcm1hbCcsCiAgICAgICAgICAgICAgICBMaW5rICAgICAgICAgICAgICAgPT4gJycsCiAgICAgICAgICAgICAgICBUcmFuc2xhdGFibGVWYWx1ZXMgPT4gMSwKICAgICAgICAgICAgICAgIFBvc3NpYmxlTm9uZSAgICAgICA9PiAxLAogICAgICAgICAgICAgICAgUG9zc2libGVWYWx1ZXMgICAgID0+IHsKICAgICAgICAgICAgICAgICAgICAnMSB2ZXJ5IGxvdycgID0+ICcxIHZlcnkgbG93JywKICAgICAgICAgICAgICAgICAgICAnMiBsb3cnICAgICAgID0+ICcyIGxvdycsCiAgICAgICAgICAgICAgICAgICAgJzMgbm9ybWFsJyAgICA9PiAnMyBub3JtYWwnLAogICAgICAgICAgICAgICAgICAgICc0IGhpZ2gnICAgICAgPT4gJzQgaGlnaCcsCiAgICAgICAgICAgICAgICAgICAgJzUgdmVyeSBoaWdoJyA9PiAnNSB2ZXJ5IGhpZ2gnLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgfSwKICAgICAgICB9LAogICAgKTsKCiAgICByZXR1cm4gQER5bmFtaWNGaWVsZHM7Cn0KCj1pdGVtIF9DcmVhdGVJVFNNRHluYW1pY0ZpZWxkcygpCgpjcmVhdGVzIGFsbCBkeW5hbWljIGZpZWxkcyB0aGF0IGFyZSBuZWNlc3NhcnkgZm9yIElUU01Db3JlCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fQ3JlYXRlSVRTTUR5bmFtaWNGaWVsZHMoKTsKCj1jdXQKCnN1YiBfQ3JlYXRlSVRTTUR5bmFtaWNGaWVsZHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICBteSAkVmFsaWRJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZExvb2t1cCgKICAgICAgICBWYWxpZCA9PiAndmFsaWQnLAogICAgKTsKCiAgICAjIGdldCBhbGwgY3VycmVudCBkeW5hbWljIGZpZWxkcwogICAgbXkgJER5bmFtaWNGaWVsZExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6RHluYW1pY0ZpZWxkJyktPkR5bmFtaWNGaWVsZExpc3RHZXQoCiAgICAgICAgVmFsaWQgPT4gMCwKICAgICk7CgogICAgIyBnZXQgdGhlIGxpc3Qgb2Ygb3JkZXIgbnVtYmVycyAoaXMgYWxyZWFkeSBzb3J0ZWQpLgogICAgbXkgQER5bmFtaWNmaWVsZE9yZGVyTGlzdDsKICAgIGZvciBteSAkRHluYW1pY2ZpZWxkICggQHskRHluYW1pY0ZpZWxkTGlzdH0gKSB7CiAgICAgICAgcHVzaCBARHluYW1pY2ZpZWxkT3JkZXJMaXN0LCAkRHluYW1pY2ZpZWxkLT57RmllbGRPcmRlcn07CiAgICB9CgogICAgIyBnZXQgdGhlIGxhc3QgZWxlbWVudCBmcm9tIHRoZSBvcmRlciBsaXN0IGFuZCBhZGQgMQogICAgbXkgJE5leHRPcmRlck51bWJlciA9IDE7CiAgICBpZiAoQER5bmFtaWNmaWVsZE9yZGVyTGlzdCkgewogICAgICAgICROZXh0T3JkZXJOdW1iZXIgPSAkRHluYW1pY2ZpZWxkT3JkZXJMaXN0Wy0xXSArIDE7CiAgICB9CgogICAgIyBnZXQgdGhlIGRlZmluaXRpb24gZm9yIGFsbCBkeW5hbWljIGZpZWxkcyBmb3IgSVRTTQogICAgbXkgQER5bmFtaWNGaWVsZHMgPSAkU2VsZi0+X0dldElUU01EeW5hbWljRmllbGRzRGVmaW5pdGlvbigpOwoKICAgICMgY3JlYXRlIGEgZHluYW1pYyBmaWVsZHMgbG9va3VwIHRhYmxlCiAgICBteSAlRHluYW1pY0ZpZWxkTG9va3VwOwogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGQgKCBAeyREeW5hbWljRmllbGRMaXN0fSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiByZWYgJER5bmFtaWNGaWVsZCBuZSAnSEFTSCc7CiAgICAgICAgJER5bmFtaWNGaWVsZExvb2t1cHsgJER5bmFtaWNGaWVsZC0+e05hbWV9IH0gPSAkRHluYW1pY0ZpZWxkOwogICAgfQoKICAgICMgY3JlYXRlIG9yIHVwZGF0ZSBkeW5hbWljIGZpZWxkcwogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGQgKEBEeW5hbWljRmllbGRzKSB7CgogICAgICAgIG15ICRDcmVhdGVEeW5hbWljRmllbGQ7CgogICAgICAgICMgY2hlY2sgaWYgdGhlIGR5bmFtaWMgZmllbGQgYWxyZWFkeSBleGlzdHMKICAgICAgICBpZiAoIHJlZiAkRHluYW1pY0ZpZWxkTG9va3VweyAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfSBuZSAnSEFTSCcgKSB7CiAgICAgICAgICAgICRDcmVhdGVEeW5hbWljRmllbGQgPSAxOwogICAgICAgIH0KCiAgICAgICAgIyBpZiB0aGUgZmllbGQgZXhpc3RzIGNoZWNrIGlmIHRoZSB0eXBlIG1hdGNoIHdpdGggdGhlIG5lZWRlZCB0eXBlCiAgICAgICAgZWxzaWYgKAogICAgICAgICAgICAkRHluYW1pY0ZpZWxkTG9va3VweyAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfS0+e0ZpZWxkVHlwZX0KICAgICAgICAgICAgbmUgJER5bmFtaWNGaWVsZC0+e0ZpZWxkVHlwZX0KICAgICAgICAgICAgKQogICAgICAgIHsKCiAgICAgICAgICAgICMgcmVuYW1lIHRoZSBmaWVsZCBhbmQgY3JlYXRlIGEgbmV3IG9uZQogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkVXBkYXRlKAogICAgICAgICAgICAgICAgJXsgJER5bmFtaWNGaWVsZExvb2t1cHsgJER5bmFtaWNGaWVsZC0+e05hbWV9IH0gfSwKICAgICAgICAgICAgICAgIE5hbWUgICA9PiAkRHluYW1pY0ZpZWxkTG9va3VweyAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfS0+e05hbWV9IC4gJ09sZCcsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICRDcmVhdGVEeW5hbWljRmllbGQgPSAxOwogICAgICAgIH0KCiAgICAgICAgIyBvdGhlcndpc2UgaWYgdGhlIGZpZWxkIGV4aXN0cyBhbmQgdGhlIHR5cGUgbWF0Y2gsIHVwZGF0ZSBpdCB0byB0aGUgSVRTTSBkZWZpbml0aW9uCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIG15ICRTdWNjZXNzID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRVcGRhdGUoCiAgICAgICAgICAgICAgICAleyREeW5hbWljRmllbGR9LAogICAgICAgICAgICAgICAgSUQgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkTG9va3VweyAkRHluYW1pY0ZpZWxkLT57TmFtZX0gfS0+e0lEfSwKICAgICAgICAgICAgICAgIEZpZWxkT3JkZXIgPT4gJER5bmFtaWNGaWVsZExvb2t1cHsgJER5bmFtaWNGaWVsZC0+e05hbWV9IH0tPntGaWVsZE9yZGVyfSwKICAgICAgICAgICAgICAgIFZhbGlkSUQgICAgPT4gJFZhbGlkSUQsCiAgICAgICAgICAgICAgICBSZW9yZGVyICAgID0+IDAsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIGNoZWNrIGlmIG5ldyBmaWVsZCBoYXMgdG8gYmUgY3JlYXRlZAogICAgICAgIGlmICgkQ3JlYXRlRHluYW1pY0ZpZWxkKSB7CgogICAgICAgICAgICAjIGNyZWF0ZSBhIG5ldyBmaWVsZAogICAgICAgICAgICBteSAkRmllbGRJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkQWRkKAogICAgICAgICAgICAgICAgSW50ZXJuYWxGaWVsZCA9PiAxLAogICAgICAgICAgICAgICAgTmFtZSAgICAgICAgICA9PiAkRHluYW1pY0ZpZWxkLT57TmFtZX0sCiAgICAgICAgICAgICAgICBMYWJlbCAgICAgICAgID0+ICREeW5hbWljRmllbGQtPntMYWJlbH0sCiAgICAgICAgICAgICAgICBGaWVsZE9yZGVyICAgID0+ICROZXh0T3JkZXJOdW1iZXIsCiAgICAgICAgICAgICAgICBGaWVsZFR5cGUgICAgID0+ICREeW5hbWljRmllbGQtPntGaWVsZFR5cGV9LAogICAgICAgICAgICAgICAgT2JqZWN0VHlwZSAgICA9PiAkRHluYW1pY0ZpZWxkLT57T2JqZWN0VHlwZX0sCiAgICAgICAgICAgICAgICBDb25maWcgICAgICAgID0+ICREeW5hbWljRmllbGQtPntDb25maWd9LAogICAgICAgICAgICAgICAgVmFsaWRJRCAgICAgICA9PiAkVmFsaWRJRCwKICAgICAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgbmV4dCBEWU5BTUlDRklFTEQgaWYgISRGaWVsZElEOwoKICAgICAgICAgICAgIyBpbmNyZWFzZSB0aGUgb3JkZXIgbnVtYmVyCiAgICAgICAgICAgICROZXh0T3JkZXJOdW1iZXIrKzsKICAgICAgICB9CiAgICB9CgogICAgIyBtYWtlIGR5bmFtaWMgZmllbGRzIGludGVybmFsCiAgICAkU2VsZi0+X01ha2VEeW5hbWljRmllbGRzSW50ZXJuYWwoKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gX01pZ3JhdGVDcml0aWNhbGl0eUFuZEltcGFjdFRvRHluYW1pY0ZpZWxkcygpCgpUaGlzIGZ1bmN0aW9uIG1pZ3JhdGVzIHRoZSB2YWx1ZXMgZm9yIENyaXRpY2FsaXR5IGFuZCB0aGUgSW1wYWN0IGZyb20gR2VuZXJhbENhdGFsb2cgdG8gRHluYW1pY0ZpZWxkcy4KCm15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X01pZ3JhdGVDcml0aWNhbGl0eUFuZEltcGFjdFRvRHluYW1pY0ZpZWxkcygpOwoKPWN1dAoKc3ViIF9NaWdyYXRlQ3JpdGljYWxpdHlBbmRJbXBhY3RUb0R5bmFtaWNGaWVsZHMgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCBjcml0aWNhbGl0eSBsaXN0IChvbmx5IHZhbGlkIGl0ZW1zKQogICAgbXkgJENyaXRpY2FsaXR5TGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29yZTo6Q3JpdGljYWxpdHknLAogICAgICAgIFZhbGlkID0+IDEsCiAgICApOwoKICAgICMgZ2V0IGltcGFjdCBsaXN0IChvbmx5IHZhbGlkIGl0ZW1zKQogICAgbXkgJEltcGFjdExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvcmU6OkltcGFjdCcsCiAgICAgICAgVmFsaWQgPT4gMSwKICAgICk7CgogICAgIyBjb252ZXJ0IGluIGEgaGFzaCByZWZlcmVuY2Ugd2hlcmUga2V5IGlzIHRoZSBzYW1lIGFzIHRoZSB2YWx1ZQogICAgJENyaXRpY2FsaXR5TGlzdCA9IHsgbWFwIHsgJF8gPT4gJF8gfSBzb3J0IHZhbHVlcyAleyRDcml0aWNhbGl0eUxpc3R9IH07CiAgICAkSW1wYWN0TGlzdCAgICAgID0geyBtYXAgeyAkXyA9PiAkXyB9IHNvcnQgdmFsdWVzICV7JEltcGFjdExpc3R9IH07CgogICAgIyBnZXQgdGhlIGRlZmluaXRpb24gZm9yIGFsbCBkeW5hbWljIGZpZWxkcyBmb3IgSVRTTUNvcmUKICAgICMgKHRoaXMgaXMgb25seSBJVFNNQ3JpdGljYWxpdHkgYW5kIElUU01JbXBhY3QpCiAgICBteSBARHluYW1pY0ZpZWxkcyA9ICRTZWxmLT5fR2V0SVRTTUR5bmFtaWNGaWVsZHNEZWZpbml0aW9uKCk7CgogICAgbXkgJFN1Y2Nlc3NDb3VudGVyOwogICAgbXkgJUR5bmFtaWNGaWVsZE5hbWUySUQ7CgogICAgIyByZW5hbWUgdGhlIGR5bmFtaWMgZmllbGRzIGZvciBDcml0aWNhbGl0eSBhbmQgSW1wYWN0IGFuZCBhZGQgcG9zc2libGUgdmFsdWUgY29uZmlndXJhdGlvbgogICAgRFlOQU1JQ0ZJRUxEOgogICAgZm9yIG15ICREeW5hbWljRmllbGROZXcgKEBEeW5hbWljRmllbGRzKSB7CgogICAgICAgICMgcmVwbGFjZSB0aGUgcG9zc2libGUgdmFsdWVzIHdpdGggYWxyZWFkeSBleGlzdGluZyB2YWx1ZXMgZnJvbSBHZW5lcmFsIENhdGFsb2cKICAgICAgICBpZiAoICREeW5hbWljRmllbGROZXctPntOYW1lfSBlcSAnSVRTTUNyaXRpY2FsaXR5JyApIHsKICAgICAgICAgICAgJER5bmFtaWNGaWVsZE5ldy0+e0NvbmZpZ30tPntQb3NzaWJsZVZhbHVlc30gPSAkQ3JpdGljYWxpdHlMaXN0OwogICAgICAgIH0KICAgICAgICBlbHNpZiAoICREeW5hbWljRmllbGROZXctPntOYW1lfSBlcSAnSVRTTUltcGFjdCcgKSB7CiAgICAgICAgICAgICREeW5hbWljRmllbGROZXctPntDb25maWd9LT57UG9zc2libGVWYWx1ZXN9ID0gJEltcGFjdExpc3Q7CiAgICAgICAgfQoKICAgICAgICAjIGdldCBleGlzdGluZyBkeW5hbWljIGZpZWxkIGRhdGEKICAgICAgICBteSAkRHluYW1pY0ZpZWxkT2xkID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRHZXQoCiAgICAgICAgICAgIE5hbWUgPT4gJER5bmFtaWNGaWVsZE5ldy0+e09sZE5hbWV9LAogICAgICAgICk7CgogICAgICAgICMgc3RvcmUgdGhlIGludGVybmFsIGlkIG9mIGVhY2ggZHluYW1pYyBmaWVsZCBpbiBhIGxvb2t1cCBoYXNoCiAgICAgICAgJER5bmFtaWNGaWVsZE5hbWUySUR7ICREeW5hbWljRmllbGROZXctPntOYW1lfSB9ID0gJER5bmFtaWNGaWVsZE9sZC0+e0lEfTsKCiAgICAgICAgIyB1cGRhdGUgdGhlIGR5bmFtaWMgZmllbGQKICAgICAgICBteSAkU3VjY2VzcyA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEeW5hbWljRmllbGQnKS0+RHluYW1pY0ZpZWxkVXBkYXRlKAogICAgICAgICAgICBJRCAgICAgICAgID0+ICREeW5hbWljRmllbGRPbGQtPntJRH0sCiAgICAgICAgICAgIEZpZWxkT3JkZXIgPT4gJER5bmFtaWNGaWVsZE9sZC0+e0ZpZWxkT3JkZXJ9LAogICAgICAgICAgICBOYW1lICAgICAgID0+ICREeW5hbWljRmllbGROZXctPntOYW1lfSwKICAgICAgICAgICAgTGFiZWwgICAgICA9PiAkRHluYW1pY0ZpZWxkTmV3LT57TGFiZWx9LAogICAgICAgICAgICBGaWVsZFR5cGUgID0+ICREeW5hbWljRmllbGROZXctPntGaWVsZFR5cGV9LAogICAgICAgICAgICBPYmplY3RUeXBlID0+ICREeW5hbWljRmllbGROZXctPntPYmplY3RUeXBlfSwKICAgICAgICAgICAgQ29uZmlnICAgICA9PiAkRHluYW1pY0ZpZWxkTmV3LT57Q29uZmlnfSwKICAgICAgICAgICAgVmFsaWRJRCAgICA9PiAxLAogICAgICAgICAgICBSZW9yZGVyICAgID0+IDAsCiAgICAgICAgICAgIFVzZXJJRCAgICAgPT4gMSwKICAgICAgICApOwoKICAgICAgICBpZiAoJFN1Y2Nlc3MpIHsKICAgICAgICAgICAgJFN1Y2Nlc3NDb3VudGVyKys7CiAgICAgICAgfQogICAgfQoKICAgICMgZXJyb3IgaGFuZGxpbmcgaWYgbm90IGFsbCBkeW5hbWljIGZpZWxkcyBjb3VsZCBiZSB1cGRhdGVkIHN1Y2Nlc3NmdWxseQogICAgaWYgKCBzY2FsYXIgQER5bmFtaWNGaWVsZHMgIT0gJFN1Y2Nlc3NDb3VudGVyICkgewoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBtaWdyYXRlIENyaXRpY2FsaXR5IGFuZCBJbXBhY3QgZnJvbSBHZW5lcmFsIENhdGFsb2cgdG8gRHluYW1pYyBGaWVsZHMhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICBteSAlR2VuZXJhbENhdGFsb2dMaXN0OwoKICAgICMgZ2V0IGNyaXRpY2FsaXR5IGxpc3QgKHZhbGlkIGFuZCBpbnZhbGlkIGl0ZW1zKQogICAgJEdlbmVyYWxDYXRhbG9nTGlzdHtJVFNNQ3JpdGljYWxpdHl9ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpDb3JlOjpDcml0aWNhbGl0eScsCiAgICAgICAgVmFsaWQgPT4gMCwKICAgICk7CgogICAgIyBnZXQgaW1wYWN0IGxpc3QgKHZhbGlkIGFuZCBpbnZhbGlkIGl0ZW1zKQogICAgJEdlbmVyYWxDYXRhbG9nTGlzdHtJVFNNSW1wYWN0fSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29yZTo6SW1wYWN0JywKICAgICAgICBWYWxpZCA9PiAwLAogICAgKTsKCiAgICAjIGZpbmQgZXhpc3RpbmcgZHluYW1pYyBmaWVsZCB2YWx1ZXMgZm9yIGNyaXRpY2FsaXR5IGFuZCBpbXBhY3QKICAgICMgd2hpY2ggaGF2ZSBiZWVuIHN0b3JlZCBhcyBpZHMgYW5kIHJlcGxhY2UgdGhlbSB3aXRoIHZhbHVlcwogICAgZm9yIG15ICREeW5hbWljRmllbGROYW1lICggc29ydCBrZXlzICVHZW5lcmFsQ2F0YWxvZ0xpc3QgKSB7CgogICAgICAgIGZvciBteSAkSUQgKCBzb3J0IGtleXMgJXsgJEdlbmVyYWxDYXRhbG9nTGlzdHskRHluYW1pY0ZpZWxkTmFtZX0gfSApIHsKCiAgICAgICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAnVVBEQVRFIGR5bmFtaWNfZmllbGRfdmFsdWUKICAgICAgICAgICAgICAgICAgICBTRVQgdmFsdWVfdGV4dCA9ID8KICAgICAgICAgICAgICAgICAgICBXSEVSRSBmaWVsZF9pZCA9ID8KICAgICAgICAgICAgICAgICAgICBBTkQgdmFsdWVfdGV4dCA9ID8nLAogICAgICAgICAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgICAgICAgICAgXCRHZW5lcmFsQ2F0YWxvZ0xpc3R7JER5bmFtaWNGaWVsZE5hbWV9LT57JElEfSwKICAgICAgICAgICAgICAgICAgICBcJER5bmFtaWNGaWVsZE5hbWUySUR7JER5bmFtaWNGaWVsZE5hbWV9LAogICAgICAgICAgICAgICAgICAgIFwkSUQsCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAjIGRlbGV0ZSB0aGUgZW50cmllcyBmb3IgY3JpdGljYWxpdHkgYW5kIGltcGFjdCBmcm9tIGdlbmVyYWwgY2F0YWxvZwogICAgZm9yIG15ICRDbGFzcyAocXcoSVRTTTo6Q29yZTo6Q3JpdGljYWxpdHkgSVRTTTo6Q29yZTo6SW1wYWN0KSkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICAgICAgU1FMICA9PiAnREVMRVRFIEZST00gZ2VuZXJhbF9jYXRhbG9nIFdIRVJFIGdlbmVyYWxfY2F0YWxvZ19jbGFzcyA9ID8nLAogICAgICAgICAgICBCaW5kID0+IFsgXCRDbGFzcyBdLAogICAgICAgICk7CiAgICB9CgogICAgIyBtaWdyYXRlIHNlcnZpY2UgdGFibGUgZnJvbSBjcml0aWNhbGl0eV9pZCB0byBjcml0aWNhbGl0eQogICAgZm9yIG15ICRDcml0aWNhbGl0eUlEICggc29ydCBrZXlzICV7ICRHZW5lcmFsQ2F0YWxvZ0xpc3R7SVRTTUNyaXRpY2FsaXR5fSB9ICkgewoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAnVVBEQVRFIHNlcnZpY2UKICAgICAgICAgICAgICAgIFNFVCBjcml0aWNhbGl0eSA9ID8KICAgICAgICAgICAgICAgIFdIRVJFIGNyaXRpY2FsaXR5X2lkID0gPycsCiAgICAgICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICAgICAgXCRHZW5lcmFsQ2F0YWxvZ0xpc3R7SVRTTUNyaXRpY2FsaXR5fS0+eyRDcml0aWNhbGl0eUlEfSwKICAgICAgICAgICAgICAgIFwkQ3JpdGljYWxpdHlJRCwKICAgICAgICAgICAgXSwKICAgICAgICApOwogICAgfQoKICAgICMgbWlncmF0ZSBjaXBfYWxsb2NhdGUgdGFibGUgZnJvbSBjcml0aWNhbGl0eV9pZCB0byBjcml0aWNhbGl0eQogICAgZm9yIG15ICRDcml0aWNhbGl0eUlEICggc29ydCBrZXlzICV7ICRHZW5lcmFsQ2F0YWxvZ0xpc3R7SVRTTUNyaXRpY2FsaXR5fSB9ICkgewoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAnVVBEQVRFIGNpcF9hbGxvY2F0ZQogICAgICAgICAgICAgICAgU0VUIGNyaXRpY2FsaXR5ID0gPwogICAgICAgICAgICAgICAgV0hFUkUgY3JpdGljYWxpdHlfaWQgPSA/JywKICAgICAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgICAgICBcJEdlbmVyYWxDYXRhbG9nTGlzdHtJVFNNQ3JpdGljYWxpdHl9LT57JENyaXRpY2FsaXR5SUR9LAogICAgICAgICAgICAgICAgXCRDcml0aWNhbGl0eUlELAogICAgICAgICAgICBdLAogICAgICAgICk7CiAgICB9CgogICAgIyBtaWdyYXRlIGNpcF9hbGxvY2F0ZSB0YWJsZSBmcm9tIGltcGFjdF9pZCB0byBpbXBhY3QKICAgIGZvciBteSAkSW1wYWN0SUQgKCBzb3J0IGtleXMgJXsgJEdlbmVyYWxDYXRhbG9nTGlzdHtJVFNNSW1wYWN0fSB9ICkgewoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgICAgIFNRTCA9PiAnVVBEQVRFIGNpcF9hbGxvY2F0ZQogICAgICAgICAgICAgICAgU0VUIGltcGFjdCA9ID8KICAgICAgICAgICAgICAgIFdIRVJFIGltcGFjdF9pZCA9ID8nLAogICAgICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgICAgIFwkR2VuZXJhbENhdGFsb2dMaXN0e0lUU01JbXBhY3R9LT57JEltcGFjdElEfSwKICAgICAgICAgICAgICAgIFwkSW1wYWN0SUQsCiAgICAgICAgICAgIF0sCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGRyb3AgbWlncmF0ZWQgY29sdW1ucwogICAgbXkgQERyb3AgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+U1FMUHJvY2Vzc29yKAogICAgICAgIERhdGFiYXNlID0+IFsKCiAgICAgICAgICAgICMgZHJvcCBjb2x1bW4gY3JpdGljYWxpdHlfaWQgZnJvbSBzZXJ2aWNlIHRhYmxlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRhZyAgICAgPT4gJ1RhYmxlQWx0ZXInLAogICAgICAgICAgICAgICAgTmFtZSAgICA9PiAnc2VydmljZScsCiAgICAgICAgICAgICAgICBUYWdUeXBlID0+ICdTdGFydCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRhZyAgICAgPT4gJ0NvbHVtbkRyb3AnLAogICAgICAgICAgICAgICAgTmFtZSAgICA9PiAnY3JpdGljYWxpdHlfaWQnLAogICAgICAgICAgICAgICAgVGFnVHlwZSA9PiAnU3RhcnQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBUYWcgICAgID0+ICdUYWJsZUFsdGVyJywKICAgICAgICAgICAgICAgIFRhZ1R5cGUgPT4gJ0VuZCcsCiAgICAgICAgICAgIH0sCgogICAgICAgICAgICAjIGRyb3AgY29sdW1uIGNyaXRpY2FsaXR5X2lkIGZyb20gY2lwX2FsbG9jYXRlIHRhYmxlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRhZyAgICAgPT4gJ1RhYmxlQWx0ZXInLAogICAgICAgICAgICAgICAgTmFtZSAgICA9PiAnY2lwX2FsbG9jYXRlJywKICAgICAgICAgICAgICAgIFRhZ1R5cGUgPT4gJ1N0YXJ0JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVGFnICAgICA9PiAnQ29sdW1uRHJvcCcsCiAgICAgICAgICAgICAgICBOYW1lICAgID0+ICdjcml0aWNhbGl0eV9pZCcsCiAgICAgICAgICAgICAgICBUYWdUeXBlID0+ICdTdGFydCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRhZyAgICAgPT4gJ1RhYmxlQWx0ZXInLAogICAgICAgICAgICAgICAgVGFnVHlwZSA9PiAnRW5kJywKICAgICAgICAgICAgfSwKCiAgICAgICAgICAgICMgZHJvcCBjb2x1bW4gaW1wYWN0X2lkIGZyb20gY2lwX2FsbG9jYXRlIHRhYmxlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFRhZyAgICAgPT4gJ1RhYmxlQWx0ZXInLAogICAgICAgICAgICAgICAgTmFtZSAgICA9PiAnY2lwX2FsbG9jYXRlJywKICAgICAgICAgICAgICAgIFRhZ1R5cGUgPT4gJ1N0YXJ0JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgVGFnICAgICA9PiAnQ29sdW1uRHJvcCcsCiAgICAgICAgICAgICAgICBOYW1lICAgID0+ICdpbXBhY3RfaWQnLAogICAgICAgICAgICAgICAgVGFnVHlwZSA9PiAnU3RhcnQnLAogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBUYWcgICAgID0+ICdUYWJsZUFsdGVyJywKICAgICAgICAgICAgICAgIFRhZ1R5cGUgPT4gJ0VuZCcsCiAgICAgICAgICAgIH0sCiAgICAgICAgXSwKICAgICk7CgogICAgZm9yIG15ICRTUUwgKEBEcm9wKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkRCJyktPkRvKAogICAgICAgICAgICBTUUwgPT4gJFNRTCwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxOwp9Cgo9aXRlbSBfU2V0UHJlZmVyZW5jZXMoKQoKICAgIG15ICRSZXN1bHQgPSAkQ29kZU9iamVjdC0+X1NldFByZWZlcmVuY2VzKCkKCj1jdXQKCnN1YiBfU2V0UHJlZmVyZW5jZXMgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKCiAgICBteSAlTWFwID0gKAogICAgICAgIE9wZXJhdGlvbmFsID0+ICdvcGVyYXRpb25hbCcsCiAgICAgICAgV2FybmluZyAgICAgPT4gJ3dhcm5pbmcnLAogICAgICAgIEluY2lkZW50ICAgID0+ICdpbmNpZGVudCcsCiAgICApOwoKICAgIE5BTUU6CiAgICBmb3IgbXkgJE5hbWUgKCBzb3J0IGtleXMgJU1hcCApIHsKCiAgICAgICAgbXkgJEl0ZW0gPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+SXRlbUdldCgKICAgICAgICAgICAgTmFtZSAgPT4gJE5hbWUsCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDb3JlOjpJbmNpZGVudFN0YXRlJywKICAgICAgICApOwoKICAgICAgICBuZXh0IE5BTUUgaWYgISRJdGVtOwoKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2cnKS0+R2VuZXJhbENhdGFsb2dQcmVmZXJlbmNlc1NldCgKICAgICAgICAgICAgSXRlbUlEID0+ICRJdGVtLT57SXRlbUlEfSwKICAgICAgICAgICAgS2V5ICAgID0+ICdGdW5jdGlvbmFsaXR5JywKICAgICAgICAgICAgVmFsdWUgID0+ICRNYXB7JE5hbWV9LAogICAgICAgICk7CiAgICB9Cn0KCj1pdGVtIF9DSVBEZWZhdWx0TWF0cml4U2V0KCkKCnNldCB0aGUgZGVmYXVsdCBDSVAgbWF0cml4CgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fQ0lQRGVmYXVsdE1hdHJpeFNldCgpOwoKPWN1dAoKc3ViIF9DSVBEZWZhdWx0TWF0cml4U2V0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgY3VycmVudCBhbGxvY2F0aW9uIGxpc3QKICAgIG15ICRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DSVBBbGxvY2F0ZScpLT5BbGxvY2F0ZUxpc3QoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgIHJldHVybiBpZiAhJExpc3Q7CiAgICByZXR1cm4gaWYgcmVmICRMaXN0IG5lICdIQVNIJzsKCiAgICAjIHNldCBubyBtYXRyaXggaWYgYWxyZWFkeSBkZWZpbmVkCiAgICByZXR1cm4gaWYgJXskTGlzdH07CgogICAgIyBkZWZpbmUgdGhlIGFsbG9jYXRpb25zCiAgICBteSAlQWxsb2NhdGlvbjsKICAgICRBbGxvY2F0aW9ueycxIHZlcnkgbG93J30tPnsnMSB2ZXJ5IGxvdyd9ICAgPSAnMSB2ZXJ5IGxvdyc7CiAgICAkQWxsb2NhdGlvbnsnMSB2ZXJ5IGxvdyd9LT57JzIgbG93J30gICAgICAgID0gJzEgdmVyeSBsb3cnOwogICAgJEFsbG9jYXRpb257JzEgdmVyeSBsb3cnfS0+eyczIG5vcm1hbCd9ICAgICA9ICcyIGxvdyc7CiAgICAkQWxsb2NhdGlvbnsnMSB2ZXJ5IGxvdyd9LT57JzQgaGlnaCd9ICAgICAgID0gJzIgbG93JzsKICAgICRBbGxvY2F0aW9ueycxIHZlcnkgbG93J30tPnsnNSB2ZXJ5IGhpZ2gnfSAgPSAnMyBub3JtYWwnOwogICAgJEFsbG9jYXRpb257JzIgbG93J30tPnsnMSB2ZXJ5IGxvdyd9ICAgICAgICA9ICcxIHZlcnkgbG93JzsKICAgICRBbGxvY2F0aW9ueycyIGxvdyd9LT57JzIgbG93J30gICAgICAgICAgICAgPSAnMiBsb3cnOwogICAgJEFsbG9jYXRpb257JzIgbG93J30tPnsnMyBub3JtYWwnfSAgICAgICAgICA9ICcyIGxvdyc7CiAgICAkQWxsb2NhdGlvbnsnMiBsb3cnfS0+eyc0IGhpZ2gnfSAgICAgICAgICAgID0gJzMgbm9ybWFsJzsKICAgICRBbGxvY2F0aW9ueycyIGxvdyd9LT57JzUgdmVyeSBoaWdoJ30gICAgICAgPSAnNCBoaWdoJzsKICAgICRBbGxvY2F0aW9ueyczIG5vcm1hbCd9LT57JzEgdmVyeSBsb3cnfSAgICAgPSAnMiBsb3cnOwogICAgJEFsbG9jYXRpb257JzMgbm9ybWFsJ30tPnsnMiBsb3cnfSAgICAgICAgICA9ICcyIGxvdyc7CiAgICAkQWxsb2NhdGlvbnsnMyBub3JtYWwnfS0+eyczIG5vcm1hbCd9ICAgICAgID0gJzMgbm9ybWFsJzsKICAgICRBbGxvY2F0aW9ueyczIG5vcm1hbCd9LT57JzQgaGlnaCd9ICAgICAgICAgPSAnNCBoaWdoJzsKICAgICRBbGxvY2F0aW9ueyczIG5vcm1hbCd9LT57JzUgdmVyeSBoaWdoJ30gICAgPSAnNCBoaWdoJzsKICAgICRBbGxvY2F0aW9ueyc0IGhpZ2gnfS0+eycxIHZlcnkgbG93J30gICAgICAgPSAnMiBsb3cnOwogICAgJEFsbG9jYXRpb257JzQgaGlnaCd9LT57JzIgbG93J30gICAgICAgICAgICA9ICczIG5vcm1hbCc7CiAgICAkQWxsb2NhdGlvbnsnNCBoaWdoJ30tPnsnMyBub3JtYWwnfSAgICAgICAgID0gJzQgaGlnaCc7CiAgICAkQWxsb2NhdGlvbnsnNCBoaWdoJ30tPnsnNCBoaWdoJ30gICAgICAgICAgID0gJzQgaGlnaCc7CiAgICAkQWxsb2NhdGlvbnsnNCBoaWdoJ30tPnsnNSB2ZXJ5IGhpZ2gnfSAgICAgID0gJzUgdmVyeSBoaWdoJzsKICAgICRBbGxvY2F0aW9ueyc1IHZlcnkgaGlnaCd9LT57JzEgdmVyeSBsb3cnfSAgPSAnMyBub3JtYWwnOwogICAgJEFsbG9jYXRpb257JzUgdmVyeSBoaWdoJ30tPnsnMiBsb3cnfSAgICAgICA9ICc0IGhpZ2gnOwogICAgJEFsbG9jYXRpb257JzUgdmVyeSBoaWdoJ30tPnsnMyBub3JtYWwnfSAgICA9ICc0IGhpZ2gnOwogICAgJEFsbG9jYXRpb257JzUgdmVyeSBoaWdoJ30tPnsnNCBoaWdoJ30gICAgICA9ICc1IHZlcnkgaGlnaCc7CiAgICAkQWxsb2NhdGlvbnsnNSB2ZXJ5IGhpZ2gnfS0+eyc1IHZlcnkgaGlnaCd9ID0gJzUgdmVyeSBoaWdoJzsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIElUU01Dcml0aWNhbGl0eSBhbmQgSVRTTUltcGFjdAogICAgbXkgJER5bmFtaWNGaWVsZENvbmZpZ0FycmF5UmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gWydUaWNrZXQnXSwKICAgICAgICBGaWVsZEZpbHRlciA9PiB7CiAgICAgICAgICAgIElUU01Dcml0aWNhbGl0eSA9PiAxLAogICAgICAgICAgICBJVFNNSW1wYWN0ICAgICAgPT4gMSwKICAgICAgICB9LAogICAgKTsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZCB2YWx1ZSBmb3IgSVRTTUNyaXRpY2FsaXR5IGFuZCBJVFNNSW1wYWN0CiAgICBteSAlUG9zc2libGVWYWx1ZXM7CiAgICBEWU5BTUlDRklFTEQ6CiAgICBmb3IgbXkgJER5bmFtaWNGaWVsZENvbmZpZyAoIEB7JER5bmFtaWNGaWVsZENvbmZpZ0FycmF5UmVmfSApIHsKICAgICAgICBuZXh0IERZTkFNSUNGSUVMRCBpZiAhSXNIYXNoUmVmV2l0aERhdGEoJER5bmFtaWNGaWVsZENvbmZpZyk7CgogICAgICAgICMgZ2V0IFBvc3NpYmxlVmFsdWVzCiAgICAgICAgJFBvc3NpYmxlVmFsdWVzeyAkRHluYW1pY0ZpZWxkQ29uZmlnLT57TmFtZX0gfQogICAgICAgICAgICA9ICREeW5hbWljRmllbGRDb25maWctPntDb25maWd9LT57UG9zc2libGVWYWx1ZXN9IHx8IHt9OwogICAgfQoKICAgICMgZ2V0IHRoZSBjcml0aWNhbGl0eSBsaXN0CiAgICBteSAlQ3JpdGljYWxpdHlMaXN0ID0gJXsgJFBvc3NpYmxlVmFsdWVze0lUU01Dcml0aWNhbGl0eX0gfTsKCiAgICAjIGdldCB0aGUgaW1wYWN0IGxpc3QKICAgIG15ICVJbXBhY3RMaXN0ID0gJXsgJFBvc3NpYmxlVmFsdWVze0lUU01JbXBhY3R9IH07CgogICAgIyBnZXQgcHJpb3JpdHkgbGlzdAogICAgbXkgJVByaW9yaXR5TGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpQcmlvcml0eScpLT5Qcmlvcml0eUxpc3QoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwogICAgbXkgJVByaW9yaXR5TGlzdFJldmVyc2UgPSByZXZlcnNlICVQcmlvcml0eUxpc3Q7CgogICAgIyBjcmVhdGUgdGhlIGFsbG9jYXRpb24gbWF0cml4CiAgICBteSAlQWxsb2NhdGlvbk1hdHJpeDsKICAgIElNUEFDVDoKICAgIGZvciBteSAkSW1wYWN0ICggc29ydCBrZXlzICVBbGxvY2F0aW9uICkgewoKICAgICAgICBuZXh0IElNUEFDVCBpZiAhJEltcGFjdExpc3R7JEltcGFjdH07CgogICAgICAgIENSSVRJQ0FMSVRZOgogICAgICAgIGZvciBteSAkQ3JpdGljYWxpdHkgKCBzb3J0IGtleXMgJXsgJEFsbG9jYXRpb257JEltcGFjdH0gfSApIHsKCiAgICAgICAgICAgIG5leHQgQ1JJVElDQUxJVFkgaWYgISRDcml0aWNhbGl0eUxpc3R7JENyaXRpY2FsaXR5fTsKCiAgICAgICAgICAgICMgZXh0cmFjdCBwcmlvcml0eQogICAgICAgICAgICBteSAkUHJpb3JpdHkgPSAkQWxsb2NhdGlvbnskSW1wYWN0fS0+eyRDcml0aWNhbGl0eX07CgogICAgICAgICAgICBuZXh0IENSSVRJQ0FMSVRZIGlmICEkUHJpb3JpdHlMaXN0UmV2ZXJzZXskUHJpb3JpdHl9OwoKICAgICAgICAgICAgIyBleHRyYWN0IHByaW9yaXR5IGlkCiAgICAgICAgICAgIG15ICRQcmlvcml0eUlEID0gJFByaW9yaXR5TGlzdFJldmVyc2V7JFByaW9yaXR5fTsKCiAgICAgICAgICAgICRBbGxvY2F0aW9uTWF0cml4eyRJbXBhY3R9LT57JENyaXRpY2FsaXR5fSA9ICRQcmlvcml0eUlEOwogICAgICAgIH0KICAgIH0KCiAgICAjIHNhdmUgdGhlIG1hdHJpeAogICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OklUU01DSVBBbGxvY2F0ZScpLT5BbGxvY2F0ZVVwZGF0ZSgKICAgICAgICBBbGxvY2F0ZURhdGEgPT4gXCVBbGxvY2F0aW9uTWF0cml4LAogICAgICAgIFVzZXJJRCAgICAgICA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gX0dyb3VwQWRkKCkKCmFkZCBhIGdyb3VwCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fR3JvdXBBZGQoCiAgICAgICAgTmFtZSAgICAgICAgPT4gJ3RoZS1ncm91cC1uYW1lJywKICAgICAgICBEZXNjcmlwdGlvbiA9PiAnVGhlIGdyb3VwIGRlc2NyaXB0aW9uLicsCiAgICApOwoKPWN1dAoKc3ViIF9Hcm91cEFkZCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhOYW1lIERlc2NyaXB0aW9uKSkgewogICAgICAgIGlmICggISRQYXJhbXskQXJndW1lbnR9ICkgewogICAgICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAiTmVlZCAkQXJndW1lbnQhIiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KCiAgICAjIGdldCB2YWxpZCBsaXN0CiAgICBteSAlVmFsaWRMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OlZhbGlkJyktPlZhbGlkTGlzdCgKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CiAgICBteSAlVmFsaWRMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJVZhbGlkTGlzdDsKCiAgICAjIGdldCBsaXN0IG9mIGFsbCBncm91cHMKICAgIG15ICVHcm91cExpc3QgPSAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBMaXN0KCk7CgogICAgIyByZXZlcnNlIHRoZSBncm91cCBsaXN0IGZvciBlYXNpZXIgbG9va3VwCiAgICBteSAlR3JvdXBMaXN0UmV2ZXJzZSA9IHJldmVyc2UgJUdyb3VwTGlzdDsKCiAgICAjIGNoZWNrIGlmIGdyb3VwIGFscmVhZHkgZXhpc3RzCiAgICBteSAkR3JvdXBJRCA9ICRHcm91cExpc3RSZXZlcnNleyAkUGFyYW17TmFtZX0gfTsKCiAgICAjIHJlYWN0aXZhdGUgdGhlIGdyb3VwCiAgICBpZiAoJEdyb3VwSUQpIHsKCiAgICAgICAgIyBnZXQgY3VycmVudCBncm91cCBkYXRhCiAgICAgICAgbXkgJUdyb3VwRGF0YSA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cEdldCgKICAgICAgICAgICAgSUQgICAgID0+ICRHcm91cElELAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwoKICAgICAgICAjIHJlYWN0aXZhdGUgZ3JvdXAKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBVcGRhdGUoCiAgICAgICAgICAgICVHcm91cERhdGEsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gJFZhbGlkTGlzdFJldmVyc2V7dmFsaWR9LAogICAgICAgICAgICBVc2VySUQgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuIDE7CiAgICB9CgogICAgIyBhZGQgdGhlIGdyb3VwCiAgICBlbHNlIHsKICAgICAgICByZXR1cm4gaWYgISRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cEFkZCgKICAgICAgICAgICAgTmFtZSAgICA9PiAkUGFyYW17TmFtZX0sCiAgICAgICAgICAgIENvbW1lbnQgPT4gJFBhcmFte0Rlc2NyaXB0aW9ufSwKICAgICAgICAgICAgVmFsaWRJRCA9PiAkVmFsaWRMaXN0UmV2ZXJzZXt2YWxpZH0sCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgICMgbG9va3VwIHRoZSBuZXcgZ3JvdXAgaWQKICAgIG15ICROZXdHcm91cElEID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwTG9va3VwKAogICAgICAgIEdyb3VwICA9PiAkUGFyYW17TmFtZX0sCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKICAgICMgYWRkIHVzZXIgcm9vdCB0byB0aGUgZ3JvdXAKICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cE1lbWJlckFkZCgKICAgICAgICBHSUQgICAgICAgID0+ICROZXdHcm91cElELAogICAgICAgIFVJRCAgICAgICAgPT4gMSwKICAgICAgICBQZXJtaXNzaW9uID0+IHsKICAgICAgICAgICAgcm8gICAgICAgID0+IDEsCiAgICAgICAgICAgIG1vdmVfaW50byA9PiAxLAogICAgICAgICAgICBjcmVhdGUgICAgPT4gMSwKICAgICAgICAgICAgb3duZXIgICAgID0+IDEsCiAgICAgICAgICAgIHByaW9yaXR5ICA9PiAxLAogICAgICAgICAgICBydyAgICAgICAgPT4gMSwKICAgICAgICB9LAogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCiAgICByZXR1cm4gMTsKfQoKPWl0ZW0gX0dyb3VwRGVhY3RpdmF0ZSgpCgpkZWFjdGl2YXRlIGEgZ3JvdXAKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9Hcm91cERlYWN0aXZhdGUoCiAgICAgICAgTmFtZSA9PiAndGhlLWdyb3VwLW5hbWUnLAogICAgKTsKCj1jdXQKCnN1YiBfR3JvdXBEZWFjdGl2YXRlIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtOYW1lfSApIHsKICAgICAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6TG9nJyktPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgTmFtZSEnLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgbG9va3VwIGdyb3VwIGlkCiAgICBteSAkR3JvdXBJRCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHcm91cCcpLT5Hcm91cExvb2t1cCgKICAgICAgICBHcm91cCA9PiAkUGFyYW17TmFtZX0sCiAgICApOwoKICAgIHJldHVybiBpZiAhJEdyb3VwSUQ7CgogICAgIyBnZXQgdmFsaWQgbGlzdAogICAgbXkgJVZhbGlkTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpWYWxpZCcpLT5WYWxpZExpc3QoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwogICAgbXkgJVZhbGlkTGlzdFJldmVyc2UgPSByZXZlcnNlICVWYWxpZExpc3Q7CgogICAgIyBnZXQgY3VycmVudCBncm91cCBkYXRhCiAgICBteSAlR3JvdXBEYXRhID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06Okdyb3VwJyktPkdyb3VwR2V0KAogICAgICAgIElEICAgICA9PiAkR3JvdXBJRCwKICAgICAgICBVc2VySUQgPT4gMSwKICAgICk7CgogICAgIyBkZWFjdGl2YXRlIGdyb3VwCiAgICAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6R3JvdXAnKS0+R3JvdXBVcGRhdGUoCiAgICAgICAgJUdyb3VwRGF0YSwKICAgICAgICBWYWxpZElEID0+ICRWYWxpZExpc3RSZXZlcnNle2ludmFsaWR9LAogICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICk7CgogICAgcmV0dXJuIDE7Cn0KCj1pdGVtIF9GaWxsdXBFbXB0eVNlcnZpY2VUeXBlSUQoKQoKZmlsbHVwIGVtcHR5IGVudHJpZXMgaW4gdGhlIHR5cGVfaWQgY29sdW1uIG9mIHRoZSBzZXJ2aWNlIHRhYmxlCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fRmlsbHVwRW1wdHlTZXJ2aWNlVHlwZUlEKCk7Cgo9Y3V0CgpzdWIgX0ZpbGx1cEVtcHR5U2VydmljZVR5cGVJRCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHNlcnZpY2UgdHlwZSBsaXN0CiAgICBteSAkU2VydmljZVR5cGVMaXN0ID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nJyktPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICdJVFNNOjpTZXJ2aWNlOjpUeXBlJywKICAgICk7CgogICAgIyBlcnJvciBoYW5kbGluZwogICAgaWYgKCAhJFNlcnZpY2VUeXBlTGlzdCB8fCByZWYgJFNlcnZpY2VUeXBlTGlzdCBuZSAnSEFTSCcgfHwgISV7JFNlcnZpY2VUeXBlTGlzdH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCBmaW5kIGFueSBpdGVtIGluIGdlbmVyYWwgY2F0YWxvZyBjbGFzcyBJVFNNOjpTZXJ2aWNlOjpUeXBlISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBzb3J0IGlkcwogICAgbXkgQFNlcnZpY2VUeXBlS2V5TGlzdCA9IHNvcnQga2V5cyAleyRTZXJ2aWNlVHlwZUxpc3R9OwoKICAgICMgdXBkYXRlIHR5cGVfaWQKICAgIHJldHVybiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMID0+ICJVUERBVEUgc2VydmljZQogICAgICAgICAgICBTRVQgdHlwZV9pZCA9ID8KICAgICAgICAgICAgV0hFUkUgdHlwZV9pZCA9IDAKICAgICAgICAgICAgT1IgdHlwZV9pZCBJUyBOVUxMIiwKICAgICAgICBCaW5kID0+IFsgXCRTZXJ2aWNlVHlwZUtleUxpc3RbMF0gXSwKICAgICk7Cn0KCj1pdGVtIF9GaWxsdXBFbXB0eVNlcnZpY2VDcml0aWNhbGl0eSgpCgpmaWxsdXAgZW1wdHkgZW50cmllcyBpbiB0aGUgY3JpdGljYWxpdHkgY29sdW1uIG9mIHRoZSBzZXJ2aWNlIHRhYmxlCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fRmlsbHVwRW1wdHlTZXJ2aWNlQ3JpdGljYWxpdHkoKTsKCj1jdXQKCnN1YiBfRmlsbHVwRW1wdHlTZXJ2aWNlQ3JpdGljYWxpdHkgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGdldCB0aGUgZHluYW1pYyBmaWVsZHMgZm9yIElUU01Dcml0aWNhbGl0eQogICAgbXkgJER5bmFtaWNGaWVsZENvbmZpZ0FycmF5UmVmID0gJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkR5bmFtaWNGaWVsZCcpLT5EeW5hbWljRmllbGRMaXN0R2V0KAogICAgICAgIFZhbGlkICAgICAgID0+IDEsCiAgICAgICAgT2JqZWN0VHlwZSAgPT4gWydUaWNrZXQnXSwKICAgICAgICBGaWVsZEZpbHRlciA9PiB7CiAgICAgICAgICAgIElUU01Dcml0aWNhbGl0eSA9PiAxLAogICAgICAgIH0sCiAgICApOwoKICAgICMgZ2V0IHRoZSBkeW5hbWljIGZpZWxkIHZhbHVlIGZvciBJVFNNQ3JpdGljYWxpdHkgYW5kIElUU01JbXBhY3QKICAgIG15ICVQb3NzaWJsZVZhbHVlczsKICAgIERZTkFNSUNGSUVMRDoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkQ29uZmlnICggQHskRHluYW1pY0ZpZWxkQ29uZmlnQXJyYXlSZWZ9ICkgewogICAgICAgIG5leHQgRFlOQU1JQ0ZJRUxEIGlmICFJc0hhc2hSZWZXaXRoRGF0YSgkRHluYW1pY0ZpZWxkQ29uZmlnKTsKCiAgICAgICAgIyBnZXQgUG9zc2libGVWYWx1ZXMKICAgICAgICAkUG9zc2libGVWYWx1ZXN7ICREeW5hbWljRmllbGRDb25maWctPntOYW1lfSB9CiAgICAgICAgICAgID0gJER5bmFtaWNGaWVsZENvbmZpZy0+e0NvbmZpZ30tPntQb3NzaWJsZVZhbHVlc30gfHwge307CiAgICB9CgogICAgIyBnZXQgdGhlIGNyaXRpY2FsaXR5IGxpc3QKICAgIG15IEBDcml0aWNhbGl0eUtleUxpc3QgPSBzb3J0IGtleXMgJXsgJFBvc3NpYmxlVmFsdWVze0lUU01Dcml0aWNhbGl0eX0gfTsKCiAgICAjIGVycm9yIGhhbmRsaW5nCiAgICBpZiAoICFAQ3JpdGljYWxpdHlLZXlMaXN0ICkgewogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpMb2cnKS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAiQ2FuJ3QgZmluZCBhbnkgcG9zc2libGUgdmFsdWVzIGZvciBJVFNNQ3JpdGljYWxpdHkgaW4gZHluYW1pYyBmaWVsZCBjb25maWd1cmF0aW9uISIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyB1cGRhdGUgY3JpdGljYWxpdHkgd2l0aCB0aGUgZmlyc3QgY3JpdGljYWxpdHkgZW50cnkKICAgIHJldHVybiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMID0+ICJVUERBVEUgc2VydmljZQogICAgICAgICAgICBTRVQgY3JpdGljYWxpdHkgPSA/CiAgICAgICAgICAgIFdIRVJFIGNyaXRpY2FsaXR5ID0gJycKICAgICAgICAgICAgT1IgY3JpdGljYWxpdHkgSVMgTlVMTCIsCiAgICAgICAgQmluZCA9PiBbIFwkQ3JpdGljYWxpdHlLZXlMaXN0WzBdIF0sCiAgICApOwp9Cgo9aXRlbSBfRmlsbHVwRW1wdHlTTEFUeXBlSUQoKQoKZmlsbHVwIGVtcHR5IGVudHJpZXMgaW4gdGhlIHR5cGVfaWQgY29sdW1uIG9mIHRoZSBzbGEgdGFibGUKCiAgICBteSAkUmVzdWx0ID0gJENvZGVPYmplY3QtPl9GaWxsdXBFbXB0eVNMQVR5cGVJRCgpOwoKPWN1dAoKc3ViIF9GaWxsdXBFbXB0eVNMQVR5cGVJRCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgZ2V0IHNsYSB0eXBlIGxpc3QKICAgIG15ICRTTEFUeXBlTGlzdCA9ICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZycpLT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6U0xBOjpUeXBlJywKICAgICk7CgogICAgIyBlcnJvciBoYW5kbGluZwogICAgaWYgKCAhJFNMQVR5cGVMaXN0IHx8IHJlZiAkU0xBVHlwZUxpc3QgbmUgJ0hBU0gnIHx8ICEleyRTTEFUeXBlTGlzdH0gKSB7CiAgICAgICAgJEtlcm5lbDo6T00tPkdldCgnS2VybmVsOjpTeXN0ZW06OkxvZycpLT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJDYW4ndCBmaW5kIGFueSBpdGVtIGluIGdlbmVyYWwgY2F0YWxvZyBjbGFzcyBJVFNNOjpTTEE6OlR5cGUhIiwKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIHNvcnQgaWRzCiAgICBteSBAU0xBVHlwZUtleUxpc3QgPSBzb3J0IGtleXMgJXskU0xBVHlwZUxpc3R9OwoKICAgICMgdXBkYXRlIHR5cGVfaWQKICAgIHJldHVybiAkS2VybmVsOjpPTS0+R2V0KCdLZXJuZWw6OlN5c3RlbTo6REInKS0+RG8oCiAgICAgICAgU1FMID0+ICJVUERBVEUgc2xhCiAgICAgICAgICAgIFNFVCB0eXBlX2lkID0gPwogICAgICAgICAgICBXSEVSRSB0eXBlX2lkID0gMAogICAgICAgICAgICBPUiB0eXBlX2lkIElTIE5VTEwiLAogICAgICAgIEJpbmQgPT4gWyBcJFNMQVR5cGVLZXlMaXN0WzBdIF0sCiAgICApOwp9Cgo9aXRlbSBfTWFrZUR5bmFtaWNGaWVsZHNJbnRlcm5hbCgpCgpDb252ZXJ0cyB0aGUgZHluYW1pYyBmaWVsZHMgdG8gaW50ZXJuYWwgZmllbGRzLCB3aGljaCBtZWFucyB0aGF0IHRoZXkgY2FuIG5vdCBiZSBkZWxldGVkIGluIHRoZSBhZG1pbiBpbnRlcmZhY2UuCgogICAgbXkgJFJlc3VsdCA9ICRDb2RlT2JqZWN0LT5fTWFrZUR5bmFtaWNGaWVsZHNJbnRlcm5hbCgpOwoKPWN1dAoKc3ViIF9NYWtlRHluYW1pY0ZpZWxkc0ludGVybmFsIHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBnZXQgdGhlIGRlZmluaXRpb24gZm9yIGFsbCBkeW5hbWljIGZpZWxkcyBmb3IgSVRTTQogICAgbXkgQER5bmFtaWNGaWVsZHMgPSAkU2VsZi0+X0dldElUU01EeW5hbWljRmllbGRzRGVmaW5pdGlvbigpOwoKICAgIGZvciBteSAkRHluYW1pY0ZpZWxkIChARHluYW1pY0ZpZWxkcykgewoKICAgICAgICAjIHNldCBhcyBpbnRlcm5hbCBmaWVsZAogICAgICAgICRLZXJuZWw6Ok9NLT5HZXQoJ0tlcm5lbDo6U3lzdGVtOjpEQicpLT5EbygKICAgICAgICAgICAgU1FMID0+ICdVUERBVEUgZHluYW1pY19maWVsZAogICAgICAgICAgICAgICAgU0VUIGludGVybmFsX2ZpZWxkID0gMQogICAgICAgICAgICAgICAgV0hFUkUgbmFtZSA9ID8nLAogICAgICAgICAgICBCaW5kID0+IFsKICAgICAgICAgICAgICAgIFwkRHluYW1pY0ZpZWxkLT57TmFtZX0sCiAgICAgICAgICAgIF0sCiAgICAgICAgKTsKICAgIH0KICAgIHJldHVybiAxOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBzb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKEw8aHR0cDovL290cnMub3JnLz4pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoQUdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgTDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvYWdwbC50eHQ+LgoKPWN1dAo=
ITSM::Core::IncidentState
Operational
1
current_timestamp
1
current_timestamp
1
ITSM::Core::IncidentState
Warning
1
current_timestamp
1
current_timestamp
1
ITSM::Core::IncidentState
Incident
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
End User Service
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
Front End
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
Back End
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
IT Management
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
Reporting
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
IT Operational
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
Demonstration
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
Project
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
Training
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
Underpinning Contract
1
current_timestamp
1
current_timestamp
1
ITSM::Service::Type
Other
1
current_timestamp
1
current_timestamp
1
ITSM::SLA::Type
Availability
1
current_timestamp
1
current_timestamp
1
ITSM::SLA::Type
Response Time
1
current_timestamp
1
current_timestamp
1
ITSM::SLA::Type
Recovery Time
1
current_timestamp
1
current_timestamp
1
ITSM::SLA::Type
Resolution Rate
1
current_timestamp
1
current_timestamp
1
ITSM::SLA::Type
Transactions
1
current_timestamp
1
current_timestamp
1
ITSM::SLA::Type
Errors
1
current_timestamp
1
current_timestamp
1
ITSM::SLA::Type
Other
1
current_timestamp
1
current_timestamp
1