cGFja2FnZSBjb20uaWJtLmljdS5kZXYudGVzdC5ub3JtYWxpemVyOwoKaW1wb3J0IGphdmEudXRpbC5IYXNodGFibGU7CgovKioKICogSW50ZWdlci1TdHJpbmcgaGFzaCB0YWJsZS4gVXNlcyBKYXZhIEhhc2h0YWJsZSBmb3Igbm93LgogKiBAYXV0aG9yIE1hcmsgRGF2aXMKICovCiAKcHVibGljIGNsYXNzIEludFN0cmluZ0hhc2h0YWJsZSB7CiAgICBzdGF0aWMgZmluYWwgU3RyaW5nIGNvcHlyaWdodCA9ICJDb3B5cmlnaHQgqSAxOTk4LTE5OTkgVW5pY29kZSwgSW5jLiI7CiAgICAKICAgIHB1YmxpYyBJbnRTdHJpbmdIYXNodGFibGUgKFN0cmluZyBkZWZhdWx0VmFsdWUpIHsKICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTsKICAgIH0KICAgIAogICAgcHVibGljIHZvaWQgcHV0KGludCBrZXksIFN0cmluZyB2YWx1ZSkgewogICAgICAgIGlmICh2YWx1ZSA9PSBkZWZhdWx0VmFsdWUpIHsKICAgICAgICAgICAgdGFibGUucmVtb3ZlKG5ldyBJbnRlZ2VyKGtleSkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRhYmxlLnB1dChuZXcgSW50ZWdlcihrZXkpLCB2YWx1ZSk7CiAgICAgICAgfQogICAgfQogICAgCiAgICBwdWJsaWMgU3RyaW5nIGdldChpbnQga2V5KSB7CiAgICAgICAgT2JqZWN0IHZhbHVlID0gdGFibGUuZ2V0KG5ldyBJbnRlZ2VyKGtleSkpOwogICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gZGVmYXVsdFZhbHVlOwogICAgICAgIHJldHVybiAoU3RyaW5nKXZhbHVlOwogICAgfQogICAgCiAgICBwcml2YXRlIFN0cmluZyBkZWZhdWx0VmFsdWU7CiAgICBwcml2YXRlIEhhc2h0YWJsZSB0YWJsZSA9IG5ldyBIYXNodGFibGUoKTsKfQ==