PCVAIFdlYkhhbmRsZXIgTGFuZ3VhZ2U9IkMjIiBDbGFzcz0iSGFuZGxlciIgJT4NCnVzaW5nIFN5c3RlbTsNCnVzaW5nIFN5c3RlbS5JTzsNCnVzaW5nIFN5c3RlbS5SZWZsZWN0aW9uOw0KdXNpbmcgU3lzdGVtLlRleHQ7DQp1c2luZyBTeXN0ZW0uV2ViOw0KdXNpbmcgU3lzdGVtLldlYi5TZXNzaW9uU3RhdGU7DQp1c2luZyBTeXN0ZW0uU2VjdXJpdHkuQ3J5cHRvZ3JhcGh5Ow0KDQpwdWJsaWMgY2xhc3MgSGFuZGxlciA6IElIdHRwSGFuZGxlcixJUmVxdWlyZXNTZXNzaW9uU3RhdGUNCnsNCiAgICBwdWJsaWMgdm9pZCBQcm9jZXNzUmVxdWVzdChIdHRwQ29udGV4dCBjb250ZXh0KQ0KICAgIHsNCiAgICAgICAgdHJ5DQogICAgICAgIHsNCiAgICAgICAgICAgIHN0cmluZyBrZXkgPSAiMTY5ZmZhNzJiM2JiOWNiNSI7DQogICAgICAgICAgICBieXRlW10gayA9IEVuY29kaW5nLkRlZmF1bHQuR2V0Qnl0ZXMoa2V5KTsNCiAgICAgICAgICAgIGNvbnRleHQuU2Vzc2lvbi5BZGQoInNreSIsIGtleSk7DQogICAgICAgICAgICBTdHJlYW1SZWFkZXIgc3IgPSBuZXcgU3RyZWFtUmVhZGVyKGNvbnRleHQuUmVxdWVzdC5JbnB1dFN0cmVhbSk7DQogICAgICAgICAgICBzdHJpbmcgbG luZSA9IHNyLlJlYWRMaW5lKCk7DQogICAgICAgICAgICBpZiAoIXN0cmluZy5Jc051bGxPckVtcHR5KGxpbmUpKQ0KICAgICAgICAgICAgew0KICAgICAgICAgICAgICAgIGJ5dGVbXSBjID0gQ29udmVydC5Gcm9tQmFzZTY0U3RyaW5nKGxpbmUpOw0KICAgICAgICAgICAgICAgIEFzc2VtYmx5IGFzc2VtYmx5ID0gdHlwZW9mKEVudmlyb25tZW50KS5Bc3NlbWJseTsNCiAgICAgICAgICAgICAgICBSaWpuZGFlbE1hbmFnZWQgcm0gPShSaWpuZGFlbE1hbmFnZWQpIGFzc2VtYmx5LkNyZWF0ZUluc3RhbmNlKCJTeXN0ZW0uU2VjdXIiKyJpdHkuQ3J5cHRvIisiZ3JhcGh5LlJpam5kYSIrImVsTWFuYWdlZCIpOw0KI CAgICAgICAgICAgICAgIGJ5dGVbXSBkYXRhPXJtLkNyZWF0ZURlY3J5cHRvcihrLCBrKS5UcmFuc2Zvcm1GaW5hbEJsb2NrKGMsIDAsIGMuTGVuZ3RoKTsNCiAgICAgICAgICAgICAgICBBc3NlbWJseS5Mb2FkKGRhdGEpLkNyZWF0ZUluc3RhbmNlKCJVIikuRXF1YWxzKGNvbnRleHQpOw0KICAgICAgICAgICAgICAgIHNyLkNsb3NlKCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgY2F0Y2gge30NCiAgICB9DQogICAgcHVibGljIGJvb2wgSXNSZXVzYWJsZQ0KICAgIHsNCiAgICAgICAgZ2V0e3JldHVybiBmYWxzZTt9DQogICAgfQ0KfQ==