breeze-client 2.2.0-cjs → 2.2.1-cjs
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/breeze-client.umd.js.map +1 -1
- package/bundles/breeze-client.umd.min.js.map +1 -1
- package/esm2015/src/data-service.js +1 -1
- package/esm2015/src/entity-key.js +1 -1
- package/esm2015/src/entity-manager.js +1 -1
- package/esm2015/src/local-query-comparison-options.js +1 -1
- package/esm2015/src/mapping-context.js +1 -1
- package/esm2015/src/naming-convention.js +1 -1
- package/esm2015/src/query-options.js +1 -1
- package/esm2015/src/save-options.js +1 -1
- package/esm2015/src/validate.js +1 -1
- package/esm2015/src/validation-options.js +1 -1
- package/esm5/src/data-service.js +1 -1
- package/esm5/src/entity-key.js +1 -1
- package/esm5/src/entity-manager.js +1 -1
- package/esm5/src/local-query-comparison-options.js +1 -1
- package/esm5/src/mapping-context.js +1 -1
- package/esm5/src/naming-convention.js +1 -1
- package/esm5/src/query-options.js +1 -1
- package/esm5/src/save-options.js +1 -1
- package/esm5/src/validate.js +1 -1
- package/esm5/src/validation-options.js +1 -1
- package/fesm2015/breeze-client.js.map +1 -1
- package/fesm5/breeze-client.js.map +1 -1
- package/package.json +1 -1
package/esm2015/src/validate.js
CHANGED
|
@@ -988,4 +988,4 @@ export class ValidationError {
|
|
|
988
988
|
}
|
|
989
989
|
}
|
|
990
990
|
export { ɵ0, ɵ1 };
|
|
991
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9icmVlemUtY2xpZW50LyIsInNvdXJjZXMiOlsic3JjL3ZhbGlkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDOUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFJbEMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBSyxDQUFDO0FBQ2hDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFFL0IsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsVUFBVSxDQUFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUM7QUFFcEMsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQztBQUMxQixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDO1dBMEJiLFVBQVUsT0FBMEI7SUFDL0MsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFO1FBQ3BCLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLElBQUksT0FBTyxDQUFDLFlBQVksSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztLQUN6RztTQUFNO1FBQ0wsT0FBTyxPQUFPLENBQUM7S0FDaEI7QUFDSCxDQUFDO0FBUkgsbUVBQW1FO0FBQ25FLElBQUksV0FBVyxHQUFHO0lBQ2hCLFdBQVcsSUFNVjtDQUNGLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekQsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29yZSB9IGZyb20gJy4vY29yZSc7XHJcbmltcG9ydCB7IGFzc2VydFBhcmFtIH0gZnJvbSAnLi9hc3NlcnQtcGFyYW0nO1xyXG5pbXBvcnQgeyBjb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25Qcm9wZXJ0eSwgRGF0YVByb3BlcnR5IH0gZnJvbSAnLi9lbnRpdHktbWV0YWRhdGEnO1xyXG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuL2VudGl0eS1hc3BlY3QnO1xyXG5cclxuZXhwb3J0IGNvbnN0IElOVDE2X01JTiA9IC0zMjc2ODtcclxuZXhwb3J0IGNvbnN0IElOVDE2X01BWCA9IDMyNzY3O1xyXG5cclxuZXhwb3J0IGNvbnN0IElOVDMyX01JTiA9IC0yMTQ3NDgzNjQ4O1xyXG5leHBvcnQgY29uc3QgSU5UMzJfTUFYID0gMjE0NzQ4MzY0NztcclxuXHJcbmV4cG9ydCBjb25zdCBCWVRFX01JTiA9IDA7XHJcbmV4cG9ydCBjb25zdCBCWVRFX01BWCA9IDI1NTtcclxuXHJcbi8qKiBQYXNzZWQgdG8gVmFsaWRhdGlvbkZuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvbkNvbnRleHQge1xyXG4gIGVudGl0eT86IEVudGl0eTtcclxuICBwcm9wZXJ0eT86IERhdGFQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eTtcclxuICBwcm9wZXJ0eU5hbWU/OiBzdHJpbmc7XHJcbiAgdmFsdWU/OiBhbnk7XHJcbn1cclxuXHJcbi8qKiBVc2VkIGJ5IFZhbGlkYXRvciB0byBjb21wb3NlIG1lc3NhZ2VzICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvbk1lc3NhZ2VDb250ZXh0IGV4dGVuZHMgVmFsaWRhdGlvbkNvbnRleHQge1xyXG4gIG5hbWU/OiBzdHJpbmc7XHJcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XHJcbiAgbWVzc2FnZVRlbXBsYXRlPzogc3RyaW5nO1xyXG4gIG1lc3NhZ2U/OiBzdHJpbmcgfCAoKHZjOiBWYWxpZGF0aW9uQ29udGV4dCkgPT4gc3RyaW5nKTtcclxuICBba2V5OnN0cmluZ106IGFueTtcclxufVxyXG5cclxuLyoqIEZ1bmN0aW9uIGNhbGxlZCB0byB2YWxpZGF0ZSBhbiBlbnRpdHkgb3IgcHJvcGVydHkgKi9cclxuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0aW9uRm4ge1xyXG4gICAgKHZhbHVlOiBhbnksIGNvbnRleHQ/OiBWYWxpZGF0aW9uQ29udGV4dCk6IGJvb2xlYW47XHJcbn1cclxuXHJcbi8vIGFkZCBjb21tb24gcHJvcHMgYW5kIG1ldGhvZHMgZm9yIGV2ZXJ5IHZhbGlkYXRvciAnY29udGV4dCcgaGVyZS5cclxubGV0IHJvb3RDb250ZXh0ID0ge1xyXG4gIGRpc3BsYXlOYW1lOiBmdW5jdGlvbiAoY29udGV4dDogVmFsaWRhdGlvbkNvbnRleHQpIHtcclxuICAgIGlmIChjb250ZXh0LnByb3BlcnR5KSB7XHJcbiAgICAgIHJldHVybiBjb250ZXh0LnByb3BlcnR5LnJlc29sdmVQcm9wZXJ0eShcImRpc3BsYXlOYW1lXCIpIHx8IGNvbnRleHQucHJvcGVydHlOYW1lIHx8IGNvbnRleHQucHJvcGVydHkubmFtZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBcIlZhbHVlXCI7XHJcbiAgICB9XHJcbiAgfVxyXG59O1xyXG5cclxuLyoqXHJcbkluc3RhbmNlcyBvZiB0aGUgVmFsaWRhdG9yIGNsYXNzIHByb3ZpZGUgdGhlIGxvZ2ljIHRvIHZhbGlkYXRlIGFub3RoZXIgb2JqZWN0IGFuZCBwcm92aWRlIGEgZGVzY3JpcHRpb24gb2YgYW55IGVycm9yc1xyXG5lbmNvdW50ZXJlZCBkdXJpbmcgdGhlIHZhbGlkYXRpb24gcHJvY2Vzcy4gIFRoZXkgYXJlIHR5cGljYWxseSBhc3NvY2lhdGVkIHdpdGggYSAndmFsaWRhdG9ycycgcHJvcGVydHkgb24gdGhlIGZvbGxvd2luZyB0eXBlczogW1tFbnRpdHlUeXBlXV0sXHJcbltbRGF0YVByb3BlcnR5XV0gb3IgW1tOYXZpZ2F0aW9uUHJvcGVydHldXS5cclxuXHJcbkEgbnVtYmVyIG9mIHByb3BlcnR5IGxldmVsIHZhbGlkYXRvcnMgYXJlIHJlZ2lzdGVyZWQgYXV0b21hdGljYWxseSwgaS5lIGFkZGVkIHRvIGVhY2ggRGF0YVByb3BlcnR5LnZhbGlkYXRvcnMgcHJvcGVydHlcclxuYmFzZWQgb24gW1tEYXRhUHJvcGVydHldXSBtZXRhZGF0YS4gIEZvciBleGFtcGxlLFxyXG5cclxuLSBEYXRhUHJvcGVydHkuZGF0YVR5cGUgLT4gb25lIG9mIHRoZSAnZGF0YVR5cGUnIHZhbGlkYXRvciBtZXRob2RzIHN1Y2ggYXMgVmFsaWRhdG9yLmludDY0LCBWYWxpZGF0b3IuZGF0ZSwgVmFsaWRhdG9yLmJvb2wgZXRjLlxyXG4tIERhdGFQcm9wZXJ0eS5tYXhMZW5ndGggLT4gVmFsaWRhdG9yLm1heExlbmd0aFxyXG4tIERhdGFQcm9wZXJ0eS5pc051bGxhYmxlIC0+IFZhbGlkYXRvci5yZXF1aXJlZCAoaWYgbm90IG51bGxhYmxlKVxyXG5cclxuQGNsYXNzIFZhbGlkYXRvclxyXG4qKi9cclxuXHJcbi8qKlxyXG5WYWxpZGF0b3IgY29uc3RydWN0b3IgLSBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNyZWF0ZSBjcmVhdGUgY3VzdG9tIHZhbGlkYXRpb25zLiAgU2V2ZXJhbFxyXG5iYXNpYyBcIlZhbGlkYXRvclwiIGNvbnN0cnVjdGlvbiBtZXRob2RzIGFyZSBhbHNvIHByb3ZpZGVkIGFzIHN0YXRpYyBtZXRob2RzIHRvIHRoaXMgY2xhc3MuIFRoZXNlIG1ldGhvZHNcclxucHJvdmlkZSBhIHNpbXBsZXIgc3ludGF4IGZvciBjcmVhdGluZyBiYXNpYyB2YWxpZGF0aW9ucy5cclxuXHJcbk1hbnkgb2YgdGhlc2Ugc3RvY2sgdmFsaWRhdG9ycyBhcmUgaW5zcGlyZWQgYnkgYW5kIGltcGxlbWVudGVkIHRvIGNvbmZvcm0gdG8gdGhlIHZhbGlkYXRvcnMgZGVmaW5lZCBhdFxyXG5odHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvc3lzdGVtLmNvbXBvbmVudG1vZGVsLmRhdGFhbm5vdGF0aW9ucy5hc3B4XHJcblxyXG5Tb21ldGltZXMgYSBjdXN0b20gdmFsaWRhdG9yIHdpbGwgYmUgcmVxdWlyZWQuXHJcbkBleGFtcGxlXHJcbk1vc3QgdmFsaWRhdG9ycyB3aWxsIGJlICdwcm9wZXJ0eScgbGV2ZWwgdmFsaWRhdG9ycywgbGlrZSB0aGlzLlxyXG5AZXhhbXBsZVxyXG4gICAgLy8gdiBpcyB0aGlzIGZ1bmN0aW9uIGlzIHRoZSB2YWx1ZSB0byBiZSB2YWxpZGF0ZWQsIGluIHRoaXMgY2FzZSBhIFwiY291bnRyeVwiIHN0cmluZy5cclxuICAgIHZhciB2YWxGbiA9IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgICAgaWYgKHYgPT0gbnVsbCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgcmV0dXJuIChjb3JlLnN0cmluZ1N0YXJ0c1dpdGgodiwgXCJVU1wiKSk7XHJcbiAgICB9O1xyXG4gICAgdmFyIGNvdW50cnlWYWxpZGF0b3IgPSBuZXcgVmFsaWRhdG9yKFwiY291bnRyeUlzVVNcIiwgdmFsRm4sIHtcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJDb3VudHJ5XCIsIFxyXG4gICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogXCInJWRpc3BsYXlOYW1lJScgbXVzdCBzdGFydCB3aXRoICdVUydcIiBcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIE5vdyBwbHVnIGl0IGludG8gQnJlZXplLlxyXG4gICAgLy8gQXNzdW1lIGVtMSBpcyBhIHByZWV4aXN0aW5nIEVudGl0eU1hbmFnZXIuXHJcbiAgICB2YXIgY3VzdFR5cGUgPSBtZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoXCJDdXN0b21lclwiKTtcclxuICAgIHZhciBjb3VudHJ5UHJvcCA9IGN1c3RUeXBlLmdldFByb3BlcnR5KFwiQ291bnRyeVwiKTtcclxuICAgIC8vIE5vdGUgdGhhdCB2YWxpZGF0b3IgaXMgYWRkZWQgdG8gYSAnRGF0YVByb3BlcnR5JyB2YWxpZGF0b3JzIGNvbGxlY3Rpb24uXHJcbiAgICBwcm9wLnZhbGlkYXRvcnMucHVzaChjb3VudHJ5VmFsaWRhdG9yKTtcclxuRW50aXR5IGxldmVsIHZhbGlkYXRvcnMgYXJlIGFsc28gcG9zc2libGVcclxuQGV4YW1wbGVcclxuICAgIGZ1bmN0aW9uIGlzVmFsaWRaaXBDb2RlKHZhbHVlKSB7XHJcbiAgICAgICAgdmFyIHJlID0gL15cXGR7NX0oW1xcLV1cXGR7NH0pPyQvO1xyXG4gICAgICAgIHJldHVybiAocmUudGVzdCh2YWx1ZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHYgaW4gdGhpcyBjYXNlIHdpbGwgYmUgYSBDdXN0b21lciBlbnRpdHlcclxuICAgIHZhciB2YWxGbiA9IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgICAgLy8gVGhpcyB2YWxpZGF0b3Igb25seSB2YWxpZGF0ZXMgVVMgWmlwIENvZGVzLlxyXG4gICAgICAgIGlmICggdi5nZXRQcm9wZXJ0eShcIkNvdW50cnlcIikgPT09IFwiVVNBXCIpIHtcclxuICAgICAgICAgICAgdmFyIHBvc3RhbENvZGUgPSB2LmdldFByb3BlcnR5KFwiUG9zdGFsQ29kZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRaaXBDb2RlKHBvc3RhbENvZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcbiAgICB2YXIgemlwQ29kZVZhbGlkYXRvciA9IG5ldyBWYWxpZGF0b3IoXCJ6aXBDb2RlVmFsaWRhdG9yXCIsIHZhbEZuLFxyXG4gICAgICAgIHsgbWVzc2FnZVRlbXBsYXRlOiBcIkZvciB0aGUgVVMsIHRoaXMgaXMgbm90IGEgdmFsaWQgUG9zdGFsQ29kZVwiIH0pO1xyXG5cclxuICAgIC8vIE5vdyBwbHVnIGl0IGludG8gQnJlZXplLlxyXG4gICAgLy8gQXNzdW1lIGVtMSBpcyBhIHByZWV4aXN0aW5nIEVudGl0eU1hbmFnZXIuXHJcbiAgICB2YXIgY3VzdFR5cGUgPSBlbTEubWV0YWRhdGFTdG9yZS5nZXRFbnRpdHlUeXBlKFwiQ3VzdG9tZXJcIik7XHJcbiAgICAvLyBOb3RlIHRoYXQgdmFsaWRhdG9yIGlzIGFkZGVkIHRvIGFuICdFbnRpdHlUeXBlJyB2YWxpZGF0b3JzIGNvbGxlY3Rpb24uXHJcbiAgICBjdXN0VHlwZS52YWxpZGF0b3JzLnB1c2goemlwQ29kZVZhbGlkYXRvcik7XHJcbldoYXQgaXMgY29tbW9ubHkgbmVlZGVkIGlzIGEgd2F5IG9mIGNyZWF0aW5nIGEgcGFyYW1ldGVyaXplZCBmdW5jdGlvbiB0aGF0IHdpbGwgaXRzZWxmXHJcbnJldHVybiBhIG5ldyBWYWxpZGF0b3IuICBUaGlzIHJlcXVpcmVzIHRoZSB1c2Ugb2YgYSAnY29udGV4dCcgb2JqZWN0LlxyXG5AZXhhbXBsZVxyXG4gICAgLy8gY3JlYXRlIGEgZnVuY3Rpb24gdGhhdCB3aWxsIHRha2UgaW4gYSBjb25maWcgb2JqZWN0XHJcbiAgICAvLyBhbmQgd2lsbCByZXR1cm4gYSB2YWxpZGF0b3JcclxuICAgIHZhciBudW1lcmljUmFuZ2VWYWxpZGF0b3IgPSBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICAgICAgdmFyIHZhbEZuID0gZnVuY3Rpb24odiwgY3R4KSB7XHJcbiAgICAgICAgICAgIGlmICh2ID09IG51bGwpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mKHYpICE9PSBcIm51bWJlclwiKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmIChjdHgubWluICE9IG51bGwgJiYgdiA8IGN0eC5taW4pIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKGN0eC5tYXggIT0gbnVsbCAmJiB2ID4gY3R4Lm1heCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIC8vIFRoZSBsYXN0IHBhcmFtZXRlciBiZWxvdyBpcyB0aGUgJ2NvbnRleHQnIG9iamVjdCB0aGF0IHdpbGwgYmUgcGFzc2VkIGludG8gdGhlICdjdHgnIHBhcmFtZXRlciBhYm92ZVxyXG4gICAgICAgIC8vIHdoZW4gdGhpcyB2YWxpZGF0b3IgZXhlY3V0ZXMuIFNldmVyYWwgb3RoZXIgcHJvcGVydGllcywgc3VjaCBhcyBkaXNwbGF5TmFtZSB3aWxsIGdldCBhZGRlZCB0byB0aGlzIG9iamVjdCBhcyB3ZWxsLlxyXG4gICAgICAgIHJldHVybiBuZXcgVmFsaWRhdG9yKFwibnVtZXJpY1JhbmdlXCIsIHZhbEZuLCB7XHJcbiAgICAgICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogXCInJWRpc3BsYXlOYW1lJScgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIHRoZSB2YWx1ZXMgb2YgJW1pbiUgYW5kICVtYXglXCIsXHJcbiAgICAgICAgICAgIG1pbjogY29udGV4dC5taW4sXHJcbiAgICAgICAgICAgIG1heDogY29udGV4dC5tYXhcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICAvLyBBc3N1bWUgdGhhdCBmcmVpZ2h0UHJvcGVydHkgaXMgYSBEYXRhRW50aXR5UHJvcGVydHkgdGhhdCBkZXNjcmliZXMgbnVtZXJpYyB2YWx1ZXMuXHJcbiAgICAvLyByZWdpc3RlciB0aGUgdmFsaWRhdG9yXHJcbiAgICBmcmVpZ2h0UHJvcGVydHkudmFsaWRhdG9ycy5wdXNoKG51bWVyaWNSYW5nZVZhbGlkYXRvcih7IG1pbjogMTAwLCBtYXg6IDUwMCB9KSk7XHJcblxyXG5CcmVlemUgc3Vic3RpdHV0ZXMgY29udGV4dCB2YWx1ZXMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlIHRva2VucyBpbiB0aGUgbWVzc2FnZVRlbXBsYXRlIHdoZW4gcHJlcGFyaW5nIHRoZSBydW50aW1lIGVycm9yIG1lc3NhZ2U7XHJcbidkaXNwbGF5TmFtZScgaXMgYSBwcmUtZGVmaW5lZCBjb250ZXh0IGZ1bmN0aW9uIHRoYXQgaXMgYWx3YXlzIGF2YWlsYWJsZS5cclxuXHJcblBsZWFzZSBub3RlIHRoYXQgQnJlZXplIHN1YnN0aXR1dGVzIHRoZSBlbXB0eSBzdHJpbmcgZm9yIGZhbHNleSBwYXJhbWV0ZXJzLiBUaGF0IHVzdWFsbHkgd29ya3MgaW4geW91ciBmYXZvci5cclxuU29tZXRpbWVzIGl0IGRvZXNuJ3QgYXMgd2hlbiB0aGUgJ21pbicgdmFsdWUgaXMgemVybyBpbiB3aGljaCBjYXNlIHRoZSBtZXNzYWdlIHRleHQgd291bGQgaGF2ZSBhIGhvbGVcclxud2hlcmUgdGhlICdtaW4nIHZhbHVlIGdvZXMsIHNheWluZzogXCIuLi4gYW4gaW50ZWdlciBiZXR3ZWVuIHRoZSB2YWx1ZXMgb2YgYW5kIC4uLlwiLiBUaGF0IGlzIG5vdCB3aGF0IHlvdSB3YW50LlxyXG5cclxuVG8gYXZvaWQgdGhpcyBlZmZlY3QsIHlvdSBtYXkgY2FuIGJha2UgY2VydGFpbiBvZiB0aGUgY29udGV4dCB2YWx1ZXMgaW50byB0aGUgJ21lc3NhZ2VUZW1wbGF0ZScgaXRzZWxmXHJcbmFzIHNob3duIGluIHRoaXMgcmV2aXNpb24gdG8gdGhlIHBlcnRpbmVudCBwYXJ0IG9mIHRoZSBwcmV2aW91cyBleGFtcGxlOlxyXG5AZXhhbXBsZVxyXG4gICAgLy8gLi4uIGFzIGJlZm9yZVxyXG4gICAgLy8gLi4uIGJ1dCBiYWtlIHRoZSBtaW4vbWF4IHZhbHVlcyBpbnRvIHRoZSBtZXNzYWdlIHRlbXBsYXRlLlxyXG4gICAgdmFyIHRlbXBsYXRlID0gYnJlZXplLmNvcmUuZm9ybWF0U3RyaW5nKFxyXG4gICAgICAgIFwiJyVkaXNwbGF5TmFtZSUnIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiB0aGUgdmFsdWVzIG9mICUxIGFuZCAlMlwiLFxyXG4gICAgICAgIGNvbnRleHQubWluLCBjb250ZXh0Lm1heCk7XHJcbiAgICByZXR1cm4gbmV3IFZhbGlkYXRvcihcIm51bWVyaWNSYW5nZVwiLCB2YWxGbiwge1xyXG4gICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogdGVtcGxhdGUsXHJcbiAgICAgICAgbWluOiBjb250ZXh0Lm1pbixcclxuICAgICAgICBtYXg6IGNvbnRleHQubWF4XHJcbiAgICB9KTtcclxuXHJcbkBtZXRob2QgPGN0b3I+IFZhbGlkYXRvclxyXG5AcGFyYW0gbmFtZSB7U3RyaW5nfSBUaGUgbmFtZSBvZiB0aGlzIHZhbGlkYXRvci5cclxuQHBhcmFtIHZhbGlkYXRvckZuIHtGdW5jdGlvbn0gQSBmdW5jdGlvbiB0byBwZXJmb3JtIHZhbGlkYXRpb24uXHJcblxyXG52YWxpZGF0b3JGbih2YWx1ZSwgY29udGV4dClcclxuQHBhcmFtIHZhbGlkYXRvckZuLnZhbHVlIHtPYmplY3R9IFZhbHVlIHRvIGJlIHZhbGlkYXRlZFxyXG5AcGFyYW0gdmFsaWRhdG9yRm4uY29udGV4dCB7T2JqZWN0fSBUaGUgc2FtZSBjb250ZXh0IG9iamVjdCBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3Igd2l0aCB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgcHJvcGVydGllcyBpZiBub3Rcclxub3RoZXJ3aXNlIHNwZWNpZmllZC5cclxuQHBhcmFtIHZhbGlkYXRvckZuLmNvbnRleHQudmFsdWUge09iamVjdH0gVGhlIHZhbHVlIGJlaW5nIHZhbGlkYXRlZC5cclxuQHBhcmFtIHZhbGlkYXRvckZuLmNvbnRleHQubmFtZSB7U3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgdmFsaWRhdG9yIGJlaW5nIGV4ZWN1dGVkLlxyXG5AcGFyYW0gdmFsaWRhdG9yRm4uY29udGV4dC5kaXNwbGF5TmFtZSB7U3RyaW5nfSBUaGlzIHdpbGwgYmUgZWl0aGVyIHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkncyAnZGlzcGxheU5hbWUnIHByb3BlcnR5IG9yXHJcbnRoZSB2YWx1ZSBvZiBpdHMgJ25hbWUnIHByb3BlcnR5IG9yIHRoZSBzdHJpbmcgJ1ZhbHVlJ1xyXG5AcGFyYW0gdmFsaWRhdG9yRm4uY29udGV4dC5tZXNzYWdlVGVtcGxhdGUge1N0cmluZ30gVGhpcyB3aWxsIGVpdGhlciBiZSB0aGUgdmFsdWUgb2YgVmFsaWRhdG9yLm1lc3NhZ2VUZW1wbGF0ZXNbIHt0aGlzIHZhbGlkYXRvcnMgbmFtZX1dIG9yIG51bGwuIFZhbGlkYXRvci5tZXNzYWdlVGVtcGxhdGVzXHJcbmlzIGFuIG9iamVjdCB0aGF0IGlzIGtleWVkIGJ5IHZhbGlkYXRvciBuYW1lIGFuZCB0aGF0IGNhbiBiZSBhZGRlZCB0byBpbiBvcmRlciB0byAncmVnaXN0ZXInIHlvdXIgb3duIG1lc3NhZ2UgZm9yIGEgZ2l2ZW4gdmFsaWRhdG9yLlxyXG5UaGUgZm9sbG93aW5nIHByb3BlcnR5IGNhbiBhbHNvIGJlIHNwZWNpZmllZCBmb3IgYW55IHZhbGlkYXRvciB0byBmb3JjZSBhIHNwZWNpZmljIGVycm9yTWVzc2FnZSBzdHJpbmdcclxuQHBhcmFtIFt2YWxpZGF0b3JGbi5jb250ZXh0Lm1lc3NhZ2VdIHtTdHJpbmd9IElmIHRoaXMgcHJvcGVydHkgaXMgc2V0IGl0IHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSAnbWVzc2FnZVRlbXBsYXRlJyBwcm9wZXJ0eSB3aGVuIGFuXHJcbmVycm9yIG1lc3NhZ2UgaXMgZ2VuZXJhdGVkLlxyXG5cclxuQHBhcmFtIFtjb250ZXh0XSB7T2JqZWN0fSBBIGZyZWUgZm9ybSBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyB3aWxsIG1hZGUgYXZhaWxhYmxlIGR1cmluZyB0aGUgdmFsaWRhdGlvbiBhbmQgZXJyb3IgbWVzc2FnZSBjcmVhdGlvbiBwcm9jZXNzLlxyXG5UaGlzIG9iamVjdCB3aWxsIGJlIHBhc3NlZCBpbnRvIHRoZSBWYWxpZGF0b3IncyB2YWxpZGF0aW9uIGZ1bmN0aW9uIHdoZW5ldmVyICd2YWxpZGF0ZScgaXMgY2FsbGVkLiBTZWUgYWJvdmUgZm9yIGEgZGVzY3JpcHRpb25cclxub2YgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRoYXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHRoaXMgb2JqZWN0IGlmIG5vdCBvdGhlcndpc2Ugc3BlY2lmaWVkLlxyXG5AZHluYW1pY1xyXG4qKi9cclxuZXhwb3J0IGNsYXNzIFZhbGlkYXRvciB7XHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgXyR0eXBlTmFtZTogc3RyaW5nOyAvLyBvbiBwcm90b1xyXG5cclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgdmFsRm46IFZhbGlkYXRpb25GbjtcclxuICBjb250ZXh0OiBWYWxpZGF0aW9uTWVzc2FnZUNvbnRleHQ7XHJcbiAgY3VycmVudENvbnRleHQ6IFZhbGlkYXRpb25NZXNzYWdlQ29udGV4dDtcclxuICBwcml2YXRlIF9iYXNlQ29udGV4dDogVmFsaWRhdGlvbk1lc3NhZ2VDb250ZXh0O1xyXG5cclxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHZhbEZuOiBWYWxpZGF0aW9uRm4sIGNvbnRleHQ/OiBWYWxpZGF0aW9uTWVzc2FnZUNvbnRleHQpIHtcclxuICAgIC8vIF9iYXNlQ29udGV4dCBpcyB3aGF0IHdpbGwgZ2V0IHNlcmlhbGl6ZWRcclxuICAgIHRoaXMuX2Jhc2VDb250ZXh0ID0gY29udGV4dCB8fCB7fSBhcyBWYWxpZGF0aW9uTWVzc2FnZUNvbnRleHQ7XHJcbiAgICB0aGlzLl9iYXNlQ29udGV4dC5uYW1lID0gbmFtZTtcclxuICAgIGNvbnRleHQgPSBjb3JlLmV4dGVuZChPYmplY3QuY3JlYXRlKHJvb3RDb250ZXh0KSwgdGhpcy5fYmFzZUNvbnRleHQpIGFzIFZhbGlkYXRpb25NZXNzYWdlQ29udGV4dDtcclxuICAgIGNvbnRleHQubWVzc2FnZVRlbXBsYXRlID0gY29udGV4dC5tZXNzYWdlVGVtcGxhdGUgfHwgVmFsaWRhdG9yLm1lc3NhZ2VUZW1wbGF0ZXNbbmFtZV07XHJcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgdGhpcy52YWxGbiA9IHZhbEZuO1xyXG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFRoZSBuYW1lIG9mIHRoaXMgdmFsaWRhdG9yLlxyXG5cclxuICBfX3JlYWRPbmx5X19cclxuICBAcHJvcGVydHkgbmFtZSB7U3RyaW5nfVxyXG4gICoqL1xyXG5cclxuICAvKipcclxuICBUaGUgY29udGV4dCBmb3IgdGhpcyB2YWxpZGF0b3IuXHJcblxyXG4gIFRoaXMgb2JqZWN0IHdpbGwgdHlwaWNhbGx5IGNvbnRhaW4gYXQgYSBtaW5pbXVtIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcy4gXCJuYW1lXCIsIFwiZGlzcGxheU5hbWVcIiwgYW5kIFwibWVzc2FnZVwiIG9yIFwibWVzc2FnZVRlbXBsYXRlXCIuXHJcbiAgX19yZWFkT25seV9fXHJcbiAgQHByb3BlcnR5IGNvbnRleHQge09iamVjdH1cclxuICAqKi9cclxuXHJcblxyXG4gIC8qKlxyXG4gIFJ1biB0aGlzIHZhbGlkYXRvciBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgdmFsdWUuICBUaGlzIG1ldGhvZCB3aWxsIHVzdWFsbHkgYmUgY2FsbGVkIGludGVybmFsbHkgZWl0aGVyXHJcbiAgYXV0b21hdGljYWxseSBieSBhbiBwcm9wZXJ0eSBjaGFuZ2UsIGVudGl0eSBhdHRhY2gsIHF1ZXJ5IG9yIHNhdmUgb3BlcmF0aW9uLCBvciBtYW51YWxseSBhcyBhIHJlc3VsdCBvZlxyXG4gIGEgdmFsaWRhdGVFbnRpdHkgY2FsbCBvbiB0aGUgRW50aXR5QXNwZWN0LiBUaGUgcmVzdWx0aW5nIFZhbGlkYXRpb25SZXN1bHRzIGFyZSBhdmFpbGFibGUgdmlhIHRoZVxyXG4gIEVudGl0eUFzcGVjdC5nZXRWYWxpZGF0aW9uRXJyb3JzIG1ldGhvZC5cclxuXHJcbiAgSG93ZXZlciwgeW91IGNhbiBhbHNvIGNhbGwgYSB2YWxpZGF0b3IgZGlyZWN0bHkgZWl0aGVyIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9yIHNvbWUgb3RoZXIgcmVhc29uIGlmIG5lZWRlZC5cclxuICBAZXhhbXBsZVxyXG4gICAgICAvLyB1c2luZyBvbmUgb2YgdGhlIHByZWRlZmluZWQgdmFsaWRhdG9yc1xyXG4gICAgICB2YXIgdmFsaWRhdG9yID0gVmFsaWRhdG9yLm1heExlbmd0aCh7IG1heExlbmd0aDogNSwgZGlzcGxheU5hbWU6IFwiQ2l0eVwiIH0pO1xyXG4gICAgICAvLyBzaG91bGQgYmUgb2sgYmVjYXVzZSBcImFzZGZcIi5sZW5ndGggPCA1XHJcbiAgICAgIHZhciByZXN1bHQgPSB2YWxpZGF0b3IudmFsaWRhdGUoXCJhc2RmXCIpO1xyXG4gICAgICBvayhyZXN1bHQgPT09IG51bGwpO1xyXG4gICAgICByZXN1bHQgPSB2YWxpZGF0b3IudmFsaWRhdGUoXCJhZGFzZGZhc2RmXCIpO1xyXG4gICAgICAvLyBleHRyYWN0IGFsbCBvZiB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ3Jlc3VsdCdcclxuICAgICAgdmFyIGVyck1zZyA9IHJlc3VsdC5lcnJvck1lc3NhZ2U7XHJcbiAgICAgIHZhciBjb250ZXh0ID0gcmVzdWx0LmNvbnRleHQ7XHJcbiAgICAgIHZhciBzYW1lVmFsaWRhdG9yID0gcmVzdWx0LnZhbGlkYXRvcjtcclxuICBAbWV0aG9kIHZhbGlkYXRlXHJcbiAgQHBhcmFtIHZhbHVlIHtPYmplY3R9IFZhbHVlIHRvIHZhbGlkYXRlXHJcbiAgQHBhcmFtIGFkZGl0aW9uYWxDb250ZXh0IHtPYmplY3R9IEFueSBhZGRpdGlvbmFsIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gdGhhdCB0aGUgVmFsaWRhdG9yXHJcbiAgY2FuIG1ha2UgdXNlIG9mLlxyXG4gIEByZXR1cm4ge1ZhbGlkYXRpb25FcnJvcnxudWxsfSBBIFZhbGlkYXRpb25FcnJvciBpZiB2YWxpZGF0aW9uIGZhaWxzLCBudWxsIG90aGVyd2lzZVxyXG4gICoqL1xyXG4gIHZhbGlkYXRlKHZhbHVlOiBhbnksIGFkZGl0aW9uYWxDb250ZXh0PzogVmFsaWRhdGlvbk1lc3NhZ2VDb250ZXh0KSB7XHJcbiAgICBsZXQgY3VycmVudENvbnRleHQ6IFZhbGlkYXRpb25NZXNzYWdlQ29udGV4dDsgLy8geyB2YWx1ZT86IE9iamVjdCB9O1xyXG4gICAgaWYgKGFkZGl0aW9uYWxDb250ZXh0KSB7XHJcbiAgICAgIGN1cnJlbnRDb250ZXh0ID0gY29yZS5leHRlbmQoT2JqZWN0LmNyZWF0ZSh0aGlzLmNvbnRleHQpLCBhZGRpdGlvbmFsQ29udGV4dCkgYXMgVmFsaWRhdGlvbk1lc3NhZ2VDb250ZXh0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY3VycmVudENvbnRleHQgPSB0aGlzLmNvbnRleHQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLmN1cnJlbnRDb250ZXh0ID0gY3VycmVudENvbnRleHQ7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMudmFsRm4odmFsdWUsIGN1cnJlbnRDb250ZXh0KSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGN1cnJlbnRDb250ZXh0LnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0aW9uRXJyb3IodGhpcywgY3VycmVudENvbnRleHQsIHRoaXMuZ2V0TWVzc2FnZSgpKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICByZXR1cm4gbmV3IFZhbGlkYXRpb25FcnJvcih0aGlzLCBjdXJyZW50Q29udGV4dCwgXCJFeGNlcHRpb24gb2NjdXJlZCB3aGlsZSBleGVjdXRpbmcgdGhpcyB2YWxpZGF0b3I6IFwiICsgdGhpcy5uYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvLyBjb250ZXh0LnZhbHVlIGlzIG5vdCBhdmFpbCB1bmxlc3MgdmFsaWRhdGUgd2FzIGNhbGxlZCBmaXJzdC5cclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyB0aGUgbWVzc2FnZSBnZW5lcmF0ZWQgYnkgdGhlIG1vc3QgcmVjZW50IGV4ZWN1dGlvbiBvZiB0aGlzIFZhbGlkYXRvci5cclxuICBAZXhhbXBsZVxyXG4gICAgICB2YXIgdjAgPSBWYWxpZGF0b3IubWF4TGVuZ3RoKHsgbWF4TGVuZ3RoOiA1LCBkaXNwbGF5TmFtZTogXCJDaXR5XCIgfSk7XHJcbiAgICAgIHYwLnZhbGlkYXRlKFwiYWRhc2RmYXNkZlwiKTtcclxuICAgICAgdmFyIGVyck1lc3NhZ2UgPSB2MC5nZXRNZXNzYWdlKCkpO1xyXG4gIEBtZXRob2QgZ2V0TWVzc2FnZVxyXG4gIEByZXR1cm4ge1N0cmluZ31cclxuICAqKi9cclxuICBnZXRNZXNzYWdlKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGNvbnRleHQgPSB0aGlzLmN1cnJlbnRDb250ZXh0O1xyXG4gICAgICBsZXQgbWVzc2FnZSA9IGNvbnRleHQubWVzc2FnZTtcclxuICAgICAgaWYgKG1lc3NhZ2UpIHtcclxuICAgICAgICBpZiAodHlwZW9mIChtZXNzYWdlKSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICByZXR1cm4gbWVzc2FnZShjb250ZXh0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWVzc2FnZVRlbXBsYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRlbXBsYXRlKGNvbnRleHQubWVzc2FnZVRlbXBsYXRlLCBjb250ZXh0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gXCJpbnZhbGlkIHZhbHVlOiBcIiArICh0aGlzLm5hbWUgfHwgXCJ7dW5uYW1lZCB2YWxpZGF0b3J9XCIpO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHJldHVybiBcIlVuYWJsZSB0byBmb3JtYXQgZXJyb3IgbWVzc2FnZVwiICsgZS50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9KU09OKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Jhc2VDb250ZXh0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgQ3JlYXRlcyBhIHZhbGlkYXRvciBpbnN0YW5jZSBmcm9tIGEgSlNPTiBvYmplY3Qgb3IgYW4gYXJyYXkgb2YgaW5zdGFuY2VzIGZyb20gYW4gYXJyYXkgb2YgSlNPTiBvYmplY3RzLlxyXG4gIEBtZXRob2QgZnJvbUpTT05cclxuICBAc3RhdGljXHJcbiAgQHBhcmFtIGpzb24ge09iamVjdH0gSlNPTiBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSBzZXJpYWxpemVkIHZlcnNpb24gb2YgYSB2YWxpZGF0b3IuXHJcbiAgKiovXHJcbiAgcHVibGljIHN0YXRpYyBmcm9tSlNPTihqc29uOiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoanNvbikpIHtcclxuICAgICAgcmV0dXJuIGpzb24ubWFwKGZ1bmN0aW9uIChqcykge1xyXG4gICAgICAgIHJldHVybiBWYWxpZGF0b3IuZnJvbUpTT04oanMpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmIChqc29uIGluc3RhbmNlb2YgVmFsaWRhdG9yKSB7XHJcbiAgICAgIHJldHVybiBqc29uO1xyXG4gICAgfVxyXG4gICAgbGV0IHZhbGlkYXRvck5hbWUgPSBcIlZhbGlkYXRvci5cIiArIGpzb24ubmFtZTtcclxuICAgIGxldCBmbiA9IGNvbmZpZy5nZXRSZWdpc3RlcmVkRnVuY3Rpb24odmFsaWRhdG9yTmFtZSk7XHJcbiAgICBpZiAoIWZuKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBsb2NhdGUgYSB2YWxpZGF0b3IgbmFtZWQ6XCIgKyBqc29uLm5hbWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZuKGpzb24pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgUmVnaXN0ZXIgYSB2YWxpZGF0b3IgaW5zdGFuY2Ugc28gdGhhdCBhbnkgZGVzZXJpYWxpemVkIG1ldGFkYXRhIGNhbiByZWZlcmVuY2UgaXQuXHJcbiAgQG1ldGhvZCByZWdpc3RlclxyXG4gIEBzdGF0aWNcclxuICBAcGFyYW0gdmFsaWRhdG9yIHtWYWxpZGF0b3J9IFZhbGlkYXRvciB0byByZWdpc3Rlci5cclxuICAqKi9cclxuICBwdWJsaWMgc3RhdGljIHJlZ2lzdGVyKHZhbGlkYXRvcjogVmFsaWRhdG9yKSB7XHJcbiAgICBjb25maWcucmVnaXN0ZXJGdW5jdGlvbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiB2YWxpZGF0b3I7XHJcbiAgICB9LCBcIlZhbGlkYXRvci5cIiArIHZhbGlkYXRvci5uYW1lKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFJlZ2lzdGVyIGEgdmFsaWRhdG9yIGZhY3Rvcnkgc28gdGhhdCBhbnkgZGVzZXJpYWxpemVkIG1ldGFkYXRhIGNhbiByZWZlcmVuY2UgaXQuXHJcbiAgQG1ldGhvZCByZWdpc3RlckZhY3RvcnlcclxuICBAc3RhdGljXHJcbiAgQHBhcmFtIHZhbGlkYXRvckZhY3Rvcnkge0Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgb3B0aW9uYWxseSB0YWtlcyBhIGNvbnRleHQgcHJvcGVydHkgYW5kIHJldHVybnMgYSBWYWxpZGF0b3IgaW5zdGFuY2UuXHJcbiAgQHBhcmFtIG5hbWUge1N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHZhbGlkYXRvci5cclxuICAqKi9cclxuICBwdWJsaWMgc3RhdGljIHJlZ2lzdGVyRmFjdG9yeSh2YWxpZGF0b3JGYWN0b3J5OiAob3B0aW9ucz86IGFueSkgPT4gVmFsaWRhdG9yLCBuYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbmZpZy5yZWdpc3RlckZ1bmN0aW9uKHZhbGlkYXRvckZhY3RvcnksIFwiVmFsaWRhdG9yLlwiICsgbmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBNYXAgb2Ygc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSB0ZW1wbGF0ZXMga2V5ZWQgYnkgdmFsaWRhdG9yIG5hbWUuXHJcbiAgWW91IGNhbiBhZGQgdG8gb3IgbW9kaWZ5IHRoaXMgb2JqZWN0IHRvIGN1c3RvbWl6ZSB0aGUgdGVtcGxhdGUgdXNlZCBmb3IgYW55IHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZS5cclxuICBAZXhhbXBsZVxyXG4gICAgICAvLyB2IGlzIHRoaXMgZnVuY3Rpb24gaXMgdGhlIHZhbHVlIHRvIGJlIHZhbGlkYXRlZCwgaW4gdGhpcyBjYXNlIGEgXCJjb3VudHJ5XCIgc3RyaW5nLlxyXG4gICAgICB2YXIgdmFsRm4gPSBmdW5jdGlvbiAodikge1xyXG4gICAgICAgICAgaWYgKHYgPT0gbnVsbCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICByZXR1cm4gKGNvcmUuc3RyaW5nU3RhcnRzV2l0aCh2LCBcIlVTXCIpKTtcclxuICAgICAgfTtcclxuICAgICAgdmFyIGNvdW50cnlWYWxpZGF0b3IgPSBuZXcgVmFsaWRhdG9yKFwiY291bnRyeUlzVVNcIiwgdmFsRm4sIHsgZGlzcGxheU5hbWU6IFwiQ291bnRyeVwiIH0pO1xyXG4gICAgICBWYWxpZGF0b3IubWVzc2FnZVRlbXBsYXRlcy5jb3VudHJ5SXNVUyA9IFwiJyVkaXNwbGF5TmFtZSUnIG11c3Qgc3RhcnQgd2l0aCAnVVMnXCI7XHJcbiAgICAgIC8vIFRoaXMgd2lsbCBoYXZlIGEgc2ltaWxhciBlZmZlY3QgdG8gdGhpc1xyXG4gICAgICB2YXIgY291bnRyeVZhbGlkYXRvciA9IG5ldyBWYWxpZGF0b3IoXCJjb3VudHJ5SXNVU1wiLCB2YWxGbiwge1xyXG4gICAgICAgICAgZGlzcGxheU5hbWU6IFwiQ291bnRyeVwiLCBcclxuICAgICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogXCInJWRpc3BsYXlOYW1lJScgbXVzdCBzdGFydCB3aXRoICdVUydcIiBcclxuICAgICAgfSk7XHJcbiAgQHByb3BlcnR5IG1lc3NhZ2VUZW1wbGF0ZXMge09iamVjdH1cclxuICBAc3RhdGljXHJcbiAgKiovXHJcbiAgcHVibGljIHN0YXRpYyBtZXNzYWdlVGVtcGxhdGVzID0ge1xyXG4gICAgYm9vbDogXCInJWRpc3BsYXlOYW1lJScgbXVzdCBiZSBhICd0cnVlJyBvciAnZmFsc2UnIHZhbHVlXCIsXHJcbiAgICBjcmVkaXRDYXJkOiBcIlRoZSAlZGlzcGxheU5hbWUlIGlzIG5vdCBhIHZhbGlkIGNyZWRpdCBjYXJkIG51bWJlclwiLFxyXG4gICAgZGF0ZTogXCInJWRpc3BsYXlOYW1lJScgbXVzdCBiZSBhIGRhdGVcIixcclxuICAgIGR1cmF0aW9uOiBcIiclZGlzcGxheU5hbWUlJyBtdXN0IGJlIGEgSVNPODYwMSBkdXJhdGlvbiBzdHJpbmcsIHN1Y2ggYXMgJ1AzSDI0TTYwUydcIixcclxuICAgIGVtYWlsQWRkcmVzczogXCJUaGUgJWRpc3BsYXlOYW1lJSAnJXZhbHVlJScgaXMgbm90IGEgdmFsaWQgZW1haWwgYWRkcmVzc1wiLFxyXG4gICAgZ3VpZDogXCInJWRpc3BsYXlOYW1lJScgbXVzdCBiZSBhIEdVSURcIixcclxuICAgIGludGVnZXI6IFwiJyVkaXNwbGF5TmFtZSUnIG11c3QgYmUgYW4gaW50ZWdlclwiLFxyXG4gICAgaW50ZWdlclJhbmdlOiBcIiclZGlzcGxheU5hbWUlJyBtdXN0IGJlIGFuIGludGVnZXIgYmV0d2VlbiB0aGUgdmFsdWVzIG9mICVtaW5WYWx1ZSUgYW5kICVtYXhWYWx1ZSVcIixcclxuICAgIG1heExlbmd0aDogXCInJWRpc3BsYXlOYW1lJScgbXVzdCBiZSBhIHN0cmluZyB3aXRoICVtYXhMZW5ndGglIGNoYXJhY3RlcnMgb3IgbGVzc1wiLFxyXG4gICAgbnVtYmVyOiBcIiclZGlzcGxheU5hbWUlJyBtdXN0IGJlIGEgbnVtYmVyXCIsXHJcbiAgICBwaG9uZTogXCJUaGUgJWRpc3BsYXlOYW1lJSAnJXZhbHVlJScgaXMgbm90IGEgdmFsaWQgcGhvbmUgbnVtYmVyXCIsXHJcbiAgICByZWd1bGFyRXhwcmVzc2lvbjogXCJUaGUgJWRpc3BsYXlOYW1lJSAnJXZhbHVlJScgZG9lcyBub3QgbWF0Y2ggJyVleHByZXNzaW9uJSdcIixcclxuICAgIHJlcXVpcmVkOiBcIiclZGlzcGxheU5hbWUlJyBpcyByZXF1aXJlZFwiLFxyXG4gICAgc3RyaW5nOiBcIiclZGlzcGxheU5hbWUlJyBtdXN0IGJlIGEgc3RyaW5nXCIsXHJcbiAgICBzdHJpbmdMZW5ndGg6IFwiJyVkaXNwbGF5TmFtZSUnIG11c3QgYmUgYSBzdHJpbmcgd2l0aCBiZXR3ZWVuICVtaW5MZW5ndGglIGFuZCAlbWF4TGVuZ3RoJSBjaGFyYWN0ZXJzXCIsXHJcbiAgICB1cmw6IFwiVGhlICVkaXNwbGF5TmFtZSUgJyV2YWx1ZSUnIGlzIG5vdCBhIHZhbGlkIHVybFwiXHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyBhIHN0YW5kYXJkICdyZXF1aXJlZCB2YWx1ZScgVmFsaWRhdG9yXHJcbiAgQGV4YW1wbGVcclxuICAgICAgLy8gQXNzdW1lIGVtMSBpcyBhIHByZWV4aXN0aW5nIEVudGl0eU1hbmFnZXIuXHJcbiAgICAgIHZhciBjdXN0VHlwZSA9IGVtMS5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoXCJDdXN0b21lclwiKTtcclxuICAgICAgdmFyIHJlZ2lvblByb3BlcnR5IC0gY3VzdFR5cGUuZ2V0UHJvcGVydHkoXCJSZWdpb25cIik7XHJcbiAgICAgIC8vIE1ha2VzIFwiUmVnaW9uXCIgb24gQ3VzdG9tZXIgYSByZXF1aXJlZCBwcm9wZXJ0eS5cclxuICAgICAgcmVnaW9uUHJvcGVydHkudmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvci5yZXF1aXJlZCgpKTtcclxuICAgICAgLy8gb3IgdG8gYWxsb3cgZW1wdHkgc3RyaW5nc1xyXG4gICAgICByZWdpb25Qcm9wZXJ0eS52YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9yLnJlcXVpcmVkKHsgYWxsb3dFbXB0eVN0cmluZ3M6IHRydWUgfSk7KTtcclxuICBAbWV0aG9kIHJlcXVpcmVkXHJcbiAgQHN0YXRpY1xyXG4gIEBwYXJhbSBjb250ZXh0IHtPYmplY3R9XHJcbiAgQHBhcmFtIFtjb250ZXh0LmFsbG93RW1wdHlTdHJpbmdzXSB7Qm9vbGVhbn0gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgb21pdHRlZCBvciBmYWxzZSB0aGVuIGVtcHR5IHN0cmluZ3MgZG8gTk9UIHBhc3MgdmFsaWRhdGlvbi5cclxuICBAcmV0dXJuIHtWYWxpZGF0b3J9IEEgbmV3IFZhbGlkYXRvclxyXG4gICoqL1xyXG4gIHB1YmxpYyBzdGF0aWMgcmVxdWlyZWQgPSBmdW5jdGlvbihjb250ZXh0PzogYW55KSB7XHJcbiAgICBsZXQgdmFsRm4gPSBmdW5jdGlvbiAodjogYW55LCBjdHg6IGFueSkge1xyXG4gICAgICBpZiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICBpZiAoY3R4ICYmIGN0eC5hbGxvd0VtcHR5U3RyaW5ncykgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHYubGVuZ3RoID4gMDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdiAhPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG5ldyBWYWxpZGF0b3IoXCJyZXF1aXJlZFwiLCB2YWxGbiwgY29udGV4dCk7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyBhIHN0YW5kYXJkIG1heGltdW0gc3RyaW5nIGxlbmd0aCBWYWxpZGF0b3I7IHRoZSBtYXhpbXVtIGxlbmd0aCBtdXN0IGJlIHNwZWNpZmllZFxyXG4gIEBleGFtcGxlXHJcbiAgICAgIC8vIEFzc3VtZSBlbTEgaXMgYSBwcmVleGlzdGluZyBFbnRpdHlNYW5hZ2VyLlxyXG4gICAgICB2YXIgY3VzdFR5cGUgPSBlbTEubWV0YWRhdGFTdG9yZS5nZXRFbnRpdHlUeXBlKFwiQ3VzdG9tZXJcIik7XHJcbiAgICAgIHZhciByZWdpb25Qcm9wZXJ0eSAtIGN1c3RUeXBlLmdldFByb3BlcnR5KFwiUmVnaW9uXCIpO1xyXG4gICAgICAvLyBWYWxpZGF0ZXMgdGhhdCB0aGUgdmFsdWUgb2YgdGhlIFJlZ2lvbiBwcm9wZXJ0eSBvbiBDdXN0b21lciB3aWxsIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byA1IGNoYXJhY3RlcnMuXHJcbiAgICAgIHJlZ2lvblByb3BlcnR5LnZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3IubWF4TGVuZ3RoKCB7bWF4TGVuZ3RoOiA1fSkpO1xyXG4gIEBtZXRob2QgbWF4TGVuZ3RoXHJcbiAgQHN0YXRpY1xyXG4gIEBwYXJhbSBjb250ZXh0IHtPYmplY3R9XHJcbiAgQHBhcmFtIGNvbnRleHQubWF4TGVuZ3RoIHtJbnRlZ2VyfVxyXG4gIEByZXR1cm4ge1ZhbGlkYXRvcn0gQSBuZXcgVmFsaWRhdG9yXHJcbiAgKiovXHJcbiAgcHVibGljIHN0YXRpYyBtYXhMZW5ndGggPSBmdW5jdGlvbihjb250ZXh0OiBhbnkpIHtcclxuICAgIGxldCB2YWxGbiA9IGZ1bmN0aW9uICh2OiBhbnksIGN0eDogYW55KSB7XHJcbiAgICAgIGlmICh2ID09IG51bGwpIHJldHVybiB0cnVlO1xyXG4gICAgICBpZiAodHlwZW9mICh2KSAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZhbHNlO1xyXG4gICAgICByZXR1cm4gdi5sZW5ndGggPD0gY3R4Lm1heExlbmd0aDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gbmV3IFZhbGlkYXRvcihcIm1heExlbmd0aFwiLCB2YWxGbiwgY29udGV4dCk7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyBhIHN0YW5kYXJkIHN0cmluZyBsZW5ndGggVmFsaWRhdG9yOyBib3RoIG1pbmltdW0gYW5kIG1heGltdW0gbGVuZ3RocyBtdXN0IGJlIHNwZWNpZmllZC5cclxuICBAZXhhbXBsZVxyXG4gICAgICAvLyBBc3N1bWUgZW0xIGlzIGEgcHJlZXhpc3RpbmcgRW50aXR5TWFuYWdlci5cclxuICAgICAgdmFyIGN1c3RUeXBlID0gZW0xLm1ldGFkYXRhU3RvcmUuZ2V0RW50aXR5VHlwZShcIkN1c3RvbWVyXCIpO1xyXG4gICAgICB2YXIgcmVnaW9uUHJvcGVydHkgLSBjdXN0VHlwZS5nZXRQcm9wZXJ0eShcIlJlZ2lvblwiKTtcclxuICAgICAgLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHZhbHVlIG9mIHRoZSBSZWdpb24gcHJvcGVydHkgb24gQ3VzdG9tZXIgd2lsbCBiZVxyXG4gICAgICAvLyBiZXR3ZWVuIDIgYW5kIDUgY2hhcmFjdGVyc1xyXG4gICAgICByZWdpb25Qcm9wZXJ0eS52YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9yLnN0cmluZ0xlbmd0aCgge21pbkxlbmd0aDogMiwgbWF4TGVuZ3RoOiA1fSk7XHJcbiAgQG1ldGhvZCBzdHJpbmdMZW5ndGhcclxuICBAc3RhdGljXHJcbiAgQHBhcmFtIGNvbnRleHQge09iamVjdH1cclxuICBAcGFyYW0gY29udGV4dC5tYXhMZW5ndGgge0ludGVnZXJ9XHJcbiAgQHBhcmFtIGNvbnRleHQubWluTGVuZ3RoIHtJbnRlZ2VyfVxyXG4gIEByZXR1cm4ge1ZhbGlkYXRvcn0gQSBuZXcgVmFsaWRhdG9yXHJcbiAgKiovXHJcbiAgcHVibGljIHN0YXRpYyBzdHJpbmdMZW5ndGggPSBmdW5jdGlvbiAoY29udGV4dDogYW55KSB7XHJcbiAgICBsZXQgdmFsRm4gPSBmdW5jdGlvbiAodjogYW55LCBjdHg6IGFueSkge1xyXG4gICAgICBpZiAodiA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgaWYgKHR5cGVvZiAodikgIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcclxuICAgICAgaWYgKGN0eC5taW5MZW5ndGggIT0gbnVsbCAmJiB2Lmxlbmd0aCA8IGN0eC5taW5MZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgICAgaWYgKGN0eC5tYXhMZW5ndGggIT0gbnVsbCAmJiB2Lmxlbmd0aCA+IGN0eC5tYXhMZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG5ldyBWYWxpZGF0b3IoXCJzdHJpbmdMZW5ndGhcIiwgdmFsRm4sIGNvbnRleHQpO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gIFJldHVybnMgYSBzdGFuZGFyZCBzdHJpbmcgZGF0YVR5cGUgVmFsaWRhdG9yLlxyXG4gIEBleGFtcGxlXHJcbiAgICAgIC8vIEFzc3VtZSBlbTEgaXMgYSBwcmVleGlzdGluZyBFbnRpdHlNYW5hZ2VyLlxyXG4gICAgICB2YXIgY3VzdFR5cGUgPSBlbTEubWV0YWRhdGFTdG9yZS5nZXRFbnRpdHlUeXBlKFwiQ3VzdG9tZXJcIik7XHJcbiAgICAgIHZhciByZWdpb25Qcm9wZXJ0eSAtIGN1c3RUeXBlLmdldFByb3BlcnR5KFwiUmVnaW9uXCIpO1xyXG4gICAgICAvLyBWYWxpZGF0ZXMgdGhhdCB0aGUgdmFsdWUgb2YgdGhlIFJlZ2lvbiBwcm9wZXJ0eSBvbiBDdXN0b21lciBpcyBhIHN0cmluZy5cclxuICAgICAgcmVnaW9uUHJvcGVydHkudmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvci5zdHJpbmcoKSk7XHJcbiAgQG1ldGhvZCBzdHJpbmdcclxuICBAc3RhdGljXHJcbiAgQHJldHVybiB7VmFsaWRhdG9yfSBBIG5ldyBWYWxpZGF0b3JcclxuICAqKi9cclxuICBwdWJsaWMgc3RhdGljIHN0cmluZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCB2YWxGbiA9IGZ1bmN0aW9uICh2OiBhbnkpIHtcclxuICAgICAgaWYgKHYgPT0gbnVsbCkgcmV0dXJuIHRydWU7XHJcbiAgICAgIHJldHVybiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBuZXcgVmFsaWRhdG9yKFwic3RyaW5nXCIsIHZhbEZuKTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICBSZXR1cm5zIGEgR3VpZCBkYXRhIHR5cGUgVmFsaWRhdG9yLlxyXG4gIEBleGFtcGxlXHJcbiAgICAgIC8vIEFzc3VtZSBlbTEgaXMgYSBwcmVleGlzdGluZyBFbnRpdHlNYW5hZ2VyLlxyXG4gICAgICB2YXIgY3VzdFR5cGUgPSBlbTEubWV0YWRhdGFTdG9yZS5nZXRFbnRpdHlUeXBlKFwiQ3VzdG9tZXJcIik7XHJcbiAgICAgIHZhciBjdXN0b21lcklkUHJvcGVydHkgLSBjdXN0VHlwZS5nZXRQcm9wZXJ0eShcIkN1c3RvbWVySURcIik7XHJcbiAgICAgIC8vIFZhbGlkYXRlcyB0aGF0IHRoZSB2YWx1ZSBvZiB0aGUgQ3VzdG9tZXJJRCBwcm9wZXJ0eSBvbiBDdXN0b21lciBpcyBhIEd1aWQuXHJcbiAgICAgIGN1c3RvbWVySWRQcm9wZXJ0eS52YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9yLmd1aWQoKSk7XHJcbiAgQG1ldGhvZCBndWlkXHJcbiAgQHN0YXRpY1xyXG4gIEByZXR1cm4ge1ZhbGlkYXRvcn0gQSBuZXcgVmFsaWRhdG9yXHJcbiAgKiovXHJcbiAgcHVibGljIHN0YXRpYyBndWlkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IHZhbEZuID0gZnVuY3Rpb24gKHY6IGFueSkge1xyXG4gICAgICBpZiAodiA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgcmV0dXJuIGNvcmUuaXNHdWlkKHYpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBuZXcgVmFsaWRhdG9yKFwiZ3VpZFwiLCB2YWxGbik7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyBhIElTTyA4NjAxIGR1cmF0aW9uIHN0cmluZyAgVmFsaWRhdG9yLlxyXG4gIEBleGFtcGxlXHJcbiAgICAgIC8vIEFzc3VtZSBlbTEgaXMgYSBwcmVleGlzdGluZyBFbnRpdHlNYW5hZ2VyLlxyXG4gICAgICB2YXIgZXZlbnRUeXBlID0gZW0xLm1ldGFkYXRhU3RvcmUuZ2V0RW50aXR5VHlwZShcIkV2ZW50XCIpO1xyXG4gICAgICB2YXIgZWxhcHNlZFRpbWVQcm9wZXJ0eSAtIGV2ZW50VHlwZS5nZXRQcm9wZXJ0eShcIkVsYXBzZWRUaW1lXCIpO1xyXG4gICAgICAvLyBWYWxpZGF0ZXMgdGhhdCB0aGUgdmFsdWUgb2YgdGhlIEVsYXBzZWRUaW1lIHByb3BlcnR5IG9uIEN1c3RvbWVyIGlzIGEgZHVyYXRpb24uXHJcbiAgICAgIGVsYXBzZWRUaW1lUHJvcGVydHkudmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvci5kdXJhdGlvbigpKTtcclxuICBAbWV0aG9kIGR1cmF0aW9uXHJcbiAgQHN0YXRpY1xyXG4gIEByZXR1cm4ge1ZhbGlkYXRvcn0gQSBuZXcgVmFsaWRhdG9yXHJcbiAgKiovXHJcbiAgcHVibGljIHN0YXRpYyBkdXJhdGlvbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCB2YWxGbiA9IGZ1bmN0aW9uICh2OiBhbnkpIHtcclxuICAgICAgaWYgKHYgPT0gbnVsbCkgcmV0dXJuIHRydWU7XHJcbiAgICAgIHJldHVybiBjb3JlLmlzRHVyYXRpb24odik7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG5ldyBWYWxpZGF0b3IoXCJkdXJhdGlvblwiLCB2YWxGbik7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyBhIHN0YW5kYXJkIG51bWVyaWMgZGF0YSB0eXBlIFZhbGlkYXRvci5cclxuICBAZXhhbXBsZVxyXG4gICAgICAvLyBBc3N1bWUgZW0xIGlzIGEgcHJlZXhpc3RpbmcgRW50aXR5TWFuYWdlci5cclxuICAgICAgdmFyIG9yZGVyVHlwZSA9IGVtMS5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoXCJPcmRlclwiKTtcclxuICAgICAgdmFyIGZyZWlnaHRQcm9wZXJ0eSAtIG9yZGVyVHlwZS5nZXRQcm9wZXJ0eShcIkZyZWlnaHRcIik7XHJcbiAgICAgIC8vIFZhbGlkYXRlcyB0aGF0IHRoZSB2YWx1ZSBvZiB0aGUgRnJlaWdodCBwcm9wZXJ0eSBvbiBPcmRlciBpcyBhIG51bWJlci5cclxuICAgICAgZnJlaWdodFByb3BlcnR5LnZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3IubnVtYmVyKCkpO1xyXG4gIEBtZXRob2QgbnVtYmVyXHJcbiAgQHN0YXRpY1xyXG4gIEByZXR1cm4ge1ZhbGlkYXRvcn0gQSBuZXcgVmFsaWRhdG9yXHJcbiAgKiovXHJcblxyXG4gICAgLy8gVE9ETzogbWF5IG5lZWQgdG8gaGF2ZSBzZXBlcmF0ZSBsb2dpYyBmb3Igc2luZ2xlLlxyXG4gIHB1YmxpYyBzdGF0aWMgbnVtYmVyID0gZnVuY3Rpb24oY29udGV4dD86IGFueSkge1xyXG4gICAgbGV0IHZhbEZuID0gZnVuY3Rpb24gKHY6IGFueSwgY3R4OiBhbnkpIHtcclxuICAgICAgaWYgKHYgPT0gbnVsbCkgcmV0dXJuIHRydWU7XHJcbiAgICAgIGlmICh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiAmJiBjdHggJiYgY3R4LmFsbG93U3RyaW5nKSB7XHJcbiAgICAgICAgdiA9IHBhcnNlRmxvYXQodik7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuICh0eXBlb2YgdiA9PT0gXCJudW1iZXJcIiAmJiAhaXNOYU4odikpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBuZXcgVmFsaWRhdG9yKFwibnVtYmVyXCIsIHZhbEZuLCBjb250ZXh0KTtcclxuICB9O1xyXG4gIHB1YmxpYyBzdGF0aWMgZG91YmxlID0gVmFsaWRhdG9yLm51bWJlcjtcclxuICBwdWJsaWMgc3RhdGljIHNpbmdsZSA9IFZhbGlkYXRvci5udW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gIFJldHVybnMgYSBzdGFuZGFyZCBsYXJnZSBpbnRlZ2VyIGRhdGEgdHlwZSAtIDY0IGJpdCAtIFZhbGlkYXRvci5cclxuICBAZXhhbXBsZVxyXG4gICAgICAvLyBBc3N1bWUgZW0xIGlzIGEgcHJlZXhpc3RpbmcgRW50aXR5TWFuYWdlci5cclxuICAgICAgdmFyIG9yZGVyVHlwZSA9IGVtMS5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoXCJPcmRlclwiKTtcclxuICAgICAgdmFyIGZyZWlnaHRQcm9wZXJ0eSAtIG9yZGVyVHlwZS5nZXRQcm9wZXJ0eShcIkZyZWlnaHRcIik7XHJcbiAgICAgIC8vIFZhbGlkYXRlcyB0aGF0IHRoZSB2YWx1ZSBvZiB0aGUgRnJlaWdodCBwcm9wZXJ0eSBvbiBPcmRlciBpcyB3aXRoaW4gdGhlIHJhbmdlIG9mIGEgNjQgYml0IGludGVnZXIuXHJcbiAgICAgIGZyZWlnaHRQcm9wZXJ0eS52YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9yLmludDY0KCkpO1xyXG4gIEBtZXRob2QgaW50NjRcclxuICBAc3RhdGljXHJcbiAgQHJldHVybiB7VmFsaWRhdG9yfSBBIG5ldyBWYWxpZGF0b3JcclxuICAqKi9cclxuICBwdWJsaWMgc3RhdGljIGludGVnZXIgPSBmdW5jdGlvbihjb250ZXh0OiBhbnkpIHtcclxuICAgIGxldCB2YWxGbiA9IGZ1bmN0aW9uICh2OiBhbnksIGN0eDogYW55KSB7XHJcbiAgICAgIGlmICh2ID09IG51bGwpIHJldHVybiB0cnVlO1xyXG4gICAgICBpZiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIgJiYgY3R4ICYmIGN0eC5hbGxvd1N0cmluZykge1xyXG4gICAgICAgIHYgPSBwYXJzZUludCh2LCAxMCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuICh0eXBlb2YgdiA9PT0gXCJudW1iZXJcIikgJiYgKCFpc05hTih2KSkgJiYgTWF0aC5mbG9vcih2KSA9PT0gdjtcclxuICAgIH07XHJcbiAgICByZXR1cm4gbmV3IFZhbGlkYXRvcihcImludGVnZXJcIiwgdmFsRm4sIGNvbnRleHQpO1xyXG4gIH07XHJcbiAgcHVibGljIHN0YXRpYyBpbnQ2NCA9IFZhbGlkYXRvci5pbnRlZ2VyO1xyXG5cclxuICAvKipcclxuICBSZXR1cm5zIGEgc3RhbmRhcmQgMzIgYml0IGludGVnZXIgZGF0YSB0eXBlIFZhbGlkYXRvci5cclxuICBAZXhhbXBsZVxyXG4gICAgICAvLyBBc3N1bWUgZW0xIGlzIGEgcHJlZXhpc3RpbmcgRW50aXR5TWFuYWdlci5cclxuICAgICAgdmFyIG9yZGVyVHlwZSA9IGVtMS5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoXCJPcmRlclwiKTtcclxuICAgICAgdmFyIGZyZWlnaHRQcm9wZXJ0eSAtIG9yZGVyVHlwZS5nZXRQcm9wZXJ0eShcIkZyZWlnaHRcIik7XHJcbiAgICAgIGZyZWlnaHRQcm9wZXJ0eS52YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9yLmludDMyKCkpO1xyXG4gIEBtZXRob2QgaW50MzJcclxuICBAc3RhdGljXHJcbiAgQHJldHVybiB7VmFsaWRhdG9yfSBBIG5ldyBWYWxpZGF0b3JcclxuICAqKi9cclxuICBwdWJsaWMgc3RhdGljIGludDMyID0gZnVuY3Rpb24oY29udGV4dDogYW55KSB7XHJcbiAgICByZXR1cm4gaW50UmFuZ2VWYWxpZGF0b3JDdG9yKFwiaW50MzJcIiwgSU5UMzJfTUlOLCBJTlQzMl9NQVgsIGNvbnRleHQpKCk7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyBhIHN0YW5kYXJkIDE2IGJpdCBpbnRlZ2VyIGRhdGEgdHlwZSBWYWxpZGF0b3IuXHJcbiAgQGV4YW1wbGVcclxuICAgICAgLy8gQXNzdW1lIGVtMSBpcyBhIHByZWV4aXN0aW5nIEVudGl0eU1hbmFnZXIuXHJcbiAgICAgIHZhciBvcmRlclR5cGUgPSBlbTEubWV0YWRhdGFTdG9yZS5nZXRFbnRpdHlUeXBlKFwiT3JkZXJcIik7XHJcbiAgICAgIHZhciBmcmVpZ2h0UHJvcGVydHkgLSBvcmRlclR5cGUuZ2V0UHJvcGVydHkoXCJGcmVpZ2h0XCIpO1xyXG4gICAgICAvLyBWYWxpZGF0ZXMgdGhhdCB0aGUgdmFsdWUgb2YgdGhlIEZyZWlnaHQgcHJvcGVydHkgb24gT3JkZXIgaXMgd2l0aGluIHRoZSByYW5nZSBvZiBhIDE2IGJpdCBpbnRlZ2VyLlxyXG4gICAgICBmcmVpZ2h0UHJvcGVydHkudmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvci5pbnQxNigpKTtcclxuICBAbWV0aG9kIGludDE2XHJcbiAgQHN0YXRpY1xyXG4gIEByZXR1cm4ge1ZhbGlkYXRvcn0gQSBuZXcgVmFsaWRhdG9yXHJcbiAgKiovXHJcbiAgcHVibGljIHN0YXRpYyBpbnQxNiA9IGZ1bmN0aW9uKGNvbnRleHQ6IGFueSkge1xyXG4gICAgcmV0dXJuIGludFJhbmdlVmFsaWRhdG9yQ3RvcihcImludDE2XCIsIElOVDE2X01JTiwgSU5UMTZfTUFYLCBjb250ZXh0KSgpO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gIFJldHVybnMgYSBzdGFuZGFyZCBieXRlIGRhdGEgdHlwZSBWYWxpZGF0b3IuIChUaGlzIGlzIGEgaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDI1NSBpbmNsdXNpdmUgZm9yIGpzIHB1cnBvc2VzKS5cclxuICBAZXhhbXBsZVxyXG4gICAgICAvLyBBc3N1bWUgZW0xIGlzIGEgcHJlZXhpc3RpbmcgRW50aXR5TWFuYWdlci5cclxuICAgICAgdmFyIG9yZGVyVHlwZSA9IGVtMS5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoXCJPcmRlclwiKTtcclxuICAgICAgdmFyIGZyZWlnaHRQcm9wZXJ0eSAtIG9yZGVyVHlwZS5nZXRQcm9wZXJ0eShcIkZyZWlnaHRcIik7XHJcbiAgICAgIC8vIFZhbGlkYXRlcyB0aGF0IHRoZSB2YWx1ZSBvZiB0aGUgRnJlaWdodCBwcm9wZXJ0eSBvbiBPcmRlciBpcyB3aXRoaW4gdGhlIHJhbmdlIG9mIGEgMTYgYml0IGludGVnZXIuXHJcbiAgICAgIC8vIFByb2JhYmx5IG5vdCBhIHZlcnkgZ29vZCB2YWxpZGF0aW9uIHRvIHBsYWNlIG9uIHRoZSBGcmVpZ2h0IHByb3BlcnR5LlxyXG4gICAgICByZWdpb25Qcm9wZXJ0eS52YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9yLmJ5dGUoKSk7XHJcbiAgQG1ldGhvZCBieXRlXHJcbiAgQHN0YXRpY1xyXG4gIEByZXR1cm4ge1ZhbGlkYXRvcn0gQSBuZXcgVmFsaWRhdG9yXHJcbiAgKiovXHJcbiAgcHVibGljIHN0YXRpYyBieXRlID0gZnVuY3Rpb24oY29udGV4dDogYW55KSB7XHJcbiAgICByZXR1cm4gaW50UmFuZ2VWYWxpZGF0b3JDdG9yKFwiYnl0ZVwiLCBCWVRFX01JTiwgQllURV9NQVgsIGNvbnRleHQpKCk7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyBhIHN0YW5kYXJkIGJvb2xlYW4gZGF0YSB0eXBlIFZhbGlkYXRvci5cclxuICBAZXhhbXBsZVxyXG4gICAgICAvLyBBc3N1bWUgZW0xIGlzIGEgcHJlZXhpc3RpbmcgRW50aXR5TWFuYWdlci5cclxuICAgICAgdmFyIHByb2R1Y3RUeXBlID0gZW0xLm1ldGFkYXRhU3RvcmUuZ2V0RW50aXR5VHlwZShcIlByb2R1Y3RcIik7XHJcbiAgICAgIHZhciBkaXNjb250aW51ZWRQcm9wZXJ0eSAtIHByb2R1Y3RUeXBlLmdldFByb3BlcnR5KFwiRGlzY29udGludWVkXCIpO1xyXG4gICAgICAvLyBWYWxpZGF0ZXMgdGhhdCB0aGUgdmFsdWUgb2YgdGhlIERpc2NvbnRpbnVlZCBwcm9wZXJ0eSBvbiBQcm9kdWN0IGlzIGEgYm9vbGVhblxyXG4gICAgICBkaXNjb250aW51ZWRQcm9wZXJ0eS52YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9yLmJvb2woKSk7XHJcbiAgQG1ldGhvZCBib29sXHJcbiAgQHN0YXRpY1xyXG4gIEByZXR1cm4ge1ZhbGlkYXRvcn0gQSBuZXcgVmFsaWRhdG9yXHJcbiAgKiovXHJcbiAgcHVibGljIHN0YXRpYyBib29sID0gZnVuY3Rpb24oKSB7XHJcbiAgICBsZXQgdmFsRm4gPSBmdW5jdGlvbiAodjogYW55KSB7XHJcbiAgICAgIGlmICh2ID09IG51bGwpIHJldHVybiB0cnVlO1xyXG4gICAgICByZXR1cm4gKHYgPT09IHRydWUpIHx8ICh2ID09PSBmYWxzZSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG5ldyBWYWxpZGF0b3IoXCJib29sXCIsIHZhbEZuKTtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgc3RhdGljIG5vbmUgPSBmdW5jdGlvbigpIHtcclxuICAgIGxldCB2YWxGbiA9IGZ1bmN0aW9uICh2OiBhbnkpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG5ldyBWYWxpZGF0b3IoXCJub25lXCIsIHZhbEZuKTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICBSZXR1cm5zIGEgc3RhbmRhcmQgZGF0ZSBkYXRhIHR5cGUgVmFsaWRhdG9yLlxyXG4gIEBleGFtcGxlXHJcbiAgICAgIC8vIEFzc3VtZSBlbTEgaXMgYSBwcmVleGlzdGluZyBFbnRpdHlNYW5hZ2VyLlxyXG4gICAgICB2YXIgb3JkZXJUeXBlID0gZW0xLm1ldGFkYXRhU3RvcmUuZ2V0RW50aXR5VHlwZShcIk9yZGVyXCIpO1xyXG4gICAgICB2YXIgb3JkZXJEYXRlUHJvcGVydHkgLSBvcmRlclR5cGUuZ2V0UHJvcGVydHkoXCJPcmRlckRhdGVcIik7XHJcbiAgICAgIC8vIFZhbGlkYXRlcyB0aGF0IHRoZSB2YWx1ZSBvZiB0aGUgT3JkZXJEYXRlIHByb3BlcnR5IG9uIE9yZGVyIGlzIGEgZGF0ZVxyXG4gICAgICAvLyBQcm9iYWJseSBub3QgYSB2ZXJ5IGdvb2QgdmFsaWRhdGlvbiB0byBwbGFjZSBvbiB0aGUgRnJlaWdodCBwcm9wZXJ0eS5cclxuICAgICAgb3JkZXJEYXRlUHJvcGVydHkudmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvci5kYXRlKCkpO1xyXG4gIEBtZXRob2QgZGF0ZVxyXG4gIEBzdGF0aWNcclxuICBAcmV0dXJuIHtWYWxpZGF0b3J9IEEgbmV3IFZhbGlkYXRvclxyXG4gICoqL1xyXG4gIHB1YmxpYyBzdGF0aWMgZGF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgbGV0IHZhbEZuID0gZnVuY3Rpb24gKHY6IGFueSkge1xyXG4gICAgICBpZiAodiA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgaWYgKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHJldHVybiAhaXNOYU4oRGF0ZS5wYXJzZSh2KSk7XHJcbiAgICAgICAgICAvLyBvbGQgY29kZVxyXG4gICAgICAgICAgLy8gcmV0dXJuIF9faXNEYXRlKG5ldyBEYXRlKHYpKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBjb3JlLmlzRGF0ZSh2KTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBuZXcgVmFsaWRhdG9yKFwiZGF0ZVwiLCB2YWxGbik7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyBhIGNyZWRpdCBjYXJkIG51bWJlciB2YWxpZGF0b3JcclxuICBQZXJmb3JtcyBhIGx1aG4gYWxnb3JpdGhtIGNoZWNrc3VtIHRlc3QgZm9yIHBsYXVzYWJpbGl0eVxyXG4gIGNhdGNoZXMgc2ltcGxlIG1pc3Rha2VzOyBvbmx5IHNlcnZpY2Uga25vd3MgZm9yIHN1cmVcclxuICBAZXhhbXBsZVxyXG4gICAgICAvLyBBc3N1bWUgZW0gaXMgYSBwcmVleGlzdGluZyBFbnRpdHlNYW5hZ2VyLlxyXG4gICAgICB2YXIgcGVyc29uVHlwZSA9IGVtLm1ldGFkYXRhU3RvcmUuZ2V0RW50aXR5VHlwZShcIlBlcnNvblwiKTtcclxuICAgICAgdmFyIGNyZWRpdENhcmRQcm9wZXJ0eSA9IHBlcnNvblR5cGUuZ2V0UHJvcGVydHkoXCJjcmVkaXRDYXJkXCIpO1xyXG4gICAgICAvLyBWYWxpZGF0ZXMgdGhhdCB0aGUgdmFsdWUgb2YgdGhlIFBlcnNvbi5jcmVkaXRDYXJkIHByb3BlcnR5IGlzIGNyZWRpdCBjYXJkLlxyXG4gICAgICBjcmVkaXRDYXJkUHJvcGVydHkudmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvci5jcmVkaXRDYXJkKCkpO1xyXG4gIEBtZXRob2QgY3JlZGl0Q2FyZFxyXG4gIEBzdGF0aWNcclxuICBAcGFyYW0gW2NvbnRleHRdIHtPYmplY3R9IG9wdGlvbmFsIHBhcmFtZXRlcnMgdG8gcGFzcyB0aHJvdWdoIHRvIHZhbGlkYXRpb24gY29uc3RydWN0b3JcclxuICBAcmV0dXJuIHtWYWxpZGF0b3J9IEEgbmV3IFZhbGlkYXRvclxyXG4gICoqL1xyXG4gIHB1YmxpYyBzdGF0aWMgY3JlZGl0Q2FyZCA9IGZ1bmN0aW9uKGNvbnRleHQ/OiBhbnkpIHtcclxuICAgIGZ1bmN0aW9uIHZhbEZuKHY6IGFueSkge1xyXG4gICAgICBpZiAodiA9PSBudWxsIHx8IHYgPT09ICcnKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgaWYgKHR5cGVvZiAodikgIT09ICdzdHJpbmcnKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgIHYgPSB2LnJlcGxhY2UoLyhcXC18XFxzKS9nLCBcIlwiKTsgLy8gcmVtb3ZlIGRhc2hlcyBhbmQgc3BhY2VzXHJcbiAgICAgIGlmICghdiB8fCAvXFxELy50ZXN0KHYpKSByZXR1cm4gZmFsc2U7IC8vIGFsbCBkaWdpdHMsIG5vdCBlbXB0eVxyXG4gICAgICByZXR1cm4gbHVobih2KTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgVmFsaWRhdG9yKCdjcmVkaXRDYXJkJywgdmFsRm4sIGNvbnRleHQpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKipcclxuICBSZXR1cm5zIGEgcmVndWxhciBleHByZXNzaW9uIHZhbGlkYXRvcjsgdGhlIGV4cHJlc3Npb24gbXVzdCBiZSBzcGVjaWZpZWRcclxuICBAZXhhbXBsZVxyXG4gICAgICAvLyBBZGQgdmFsaWRhdG9yIHRvIGEgcHJvcGVydHkuIEFzc3VtZSBlbSBpcyBhIHByZWV4aXN0aW5nIEVudGl0eU1hbmFnZXIuXHJcbiAgICAgIHZhciBjdXN0b21lclR5cGUgPSBlbS5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoXCJDdXN0b21lclwiKTtcclxuICAgICAgdmFyIHJlZ2lvblByb3BlcnR5ID0gY3VzdG9tZXJUeXBlLmdldFByb3BlcnR5KFwiUmVnaW9uXCIpO1xyXG4gICAgICAvLyBWYWxpZGF0ZXMgdGhhdCB0aGUgdmFsdWUgb2YgQ3VzdG9tZXIuUmVnaW9uIGlzIDIgY2hhciB1cHBlcmNhc2UgYWxwaGEuXHJcbiAgICAgIHJlZ2lvblByb3BlcnR5LnZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3IucmVndWxhckV4cHJlc3Npb24oIHtleHByZXNzaW9uOiAnXltBLVpdezJ9JCd9ICk7XHJcbiAgQG1ldGhvZCByZWd1bGFyRXhwcmVzc2lvblxyXG4gIEBzdGF0aWNcclxuICBAcGFyYW0gY29udGV4dCB7T2JqZWN0fVxyXG4gIEBwYXJhbSBjb250ZXh0LmV4cHJlc3Npb24ge1N0cmluZ30gU3RyaW5nIGZvcm0gb2YgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBhcHBseVxyXG4gIEByZXR1cm4ge1ZhbGlkYXRvcn0gQSBuZXcgVmFsaWRhdG9yXHJcbiAgKiovXHJcbiAgcHVibGljIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IGZ1bmN0aW9uKGNvbnRleHQ/OiBhbnkpIHtcclxuICAgIGZ1bmN0aW9uIHZhbEZuKHY6IGFueSwgY3R4OiBhbnkpIHtcclxuICAgICAgLy8gZG8gbm90IGludmFsaWRhdGUgaWYgZW1wdHk7IHVzZSBhIHNlcGFyYXRlIHJlcXVpcmVkIHRlc3RcclxuICAgICAgaWYgKHYgPT0gbnVsbCB8fCB2ID09PSAnJykgcmV0dXJuIHRydWU7XHJcbiAgICAgIGlmICh0eXBlb2YgKHYpICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGxldCByZSA9IG5ldyBSZWdFeHAoY3R4LmV4cHJlc3Npb24pO1xyXG4gICAgICAgIHJldHVybiByZS50ZXN0KHYpO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIG9yIGludmFsaWQgZXhwcmVzc2lvbiBwYXJhbWV0ZXIgdG8gcmVnRXhwIHZhbGlkYXRvcicpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IFZhbGlkYXRvcigncmVndWxhckV4cHJlc3Npb24nLCB2YWxGbiwgY29udGV4dCk7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyB0aGUgZW1haWwgYWRkcmVzcyB2YWxpZGF0b3JcclxuICBAZXhhbXBsZVxyXG4gICAgICAvLyBBc3N1bWUgZW0gaXMgYSBwcmVleGlzdGluZyBFbnRpdHlNYW5hZ2VyLlxyXG4gICAgICB2YXIgcGVyc29uVHlwZSA9IGVtLm1ldGFkYXRhU3RvcmUuZ2V0RW50aXR5VHlwZShcIlBlcnNvblwiKTtcclxuICAgICAgdmFyIGVtYWlsUHJvcGVydHkgPSBwZXJzb25UeXBlLmdldFByb3BlcnR5KFwiZW1haWxcIik7XHJcbiAgICAgIC8vIFZhbGlkYXRlcyB0aGF0IHRoZSB2YWx1ZSBvZiB0aGUgUGVyc29uLmVtYWlsIHByb3BlcnR5IGlzIGFuIGVtYWlsIGFkZHJlc3MuXHJcbiAgICAgIGVtYWlsUHJvcGVydHkudmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvci5lbWFpbEFkZHJlc3MoKSk7XHJcbiAgQG1ldGhvZCBlbWFpbEFkZHJlc3NcclxuICBAc3RhdGljXHJcbiAgQHBhcmFtIFtjb250ZXh0XSB7T2JqZWN0fSBvcHRpb25hbCBwYXJhbWV0ZXJzIHRvIHBhc3MgdGhyb3VnaCB0byB2YWxpZGF0aW9uIGNvbnN0cnVjdG9yXHJcbiAgQHJldHVybiB7VmFsaWRhdG9yfSBBIG5ldyBWYWxpZGF0b3JcclxuICAqKi9cclxuICBwdWJsaWMgc3RhdGljIGVtYWlsQWRkcmVzcyA9IGZ1bmN0aW9uKGNvbnRleHQ/OiBhbnkpIHtcclxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vc3JraXJrbGFuZC9EYXRhQW5ub3RhdGlvbnNFeHRlbnNpb25zL2Jsb2IvbWFzdGVyL0RhdGFBbm5vdGF0aW9uc0V4dGVuc2lvbnMvRW1haWxBdHRyaWJ1dGUuY3NcclxuICAgIGxldCByZUVtYWlsQWRkcmVzcyA9IC9eKCgoW2Etel18XFxkfFshI1xcJCUmJ1xcKlxcK1xcLVxcLz1cXD9cXF5fYHtcXHx9fl18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKyhcXC4oW2Etel18XFxkfFshI1xcJCUmJ1xcKlxcK1xcLVxcLz1cXD9cXF5fYHtcXHx9fl18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKykqKXwoKFxceDIyKSgoKChcXHgyMHxcXHgwOSkqKFxceDBkXFx4MGEpKT8oXFx4MjB8XFx4MDkpKyk/KChbXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHg3Zl18XFx4MjF8W1xceDIzLVxceDViXXxbXFx4NWQtXFx4N2VdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoXFxcXChbXFx4MDEtXFx4MDlcXHgwYlxceDBjXFx4MGQtXFx4N2ZdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSkpKSooKChcXHgyMHxcXHgwOSkqKFxceDBkXFx4MGEpKT8oXFx4MjB8XFx4MDkpKyk/KFxceDIyKSkpQCgoKFthLXpdfFxcZHxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KChbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKihbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKSlcXC4pKygoW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCgoW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKihbYS16XXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkpKVxcLj8kL2k7XHJcbiAgICByZXR1cm4gbWFrZVJlZ0V4cFZhbGlkYXRvcignZW1haWxBZGRyZXNzJywgcmVFbWFpbEFkZHJlc3MsIG51bGwsIGNvbnRleHQpO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gIFJldHVybnMgdGhlIHBob25lIHZhbGlkYXRvclxyXG4gIFByb3ZpZGVzIGJhc2ljIGFzc2VydGlvbnMgb24gdGhlIGZvcm1hdCBhbmQgd2lsbCBoZWxwIHRvIGVsaW1pbmF0ZSBtb3N0IG5vbnNlbnNlIGlucHV0XHJcbiAgTWF0Y2hlczpcclxuICBJbnRlcm5hdGlvbmFsIGRpYWxpbmcgcHJlZml4OiB7e30sICssIDAsIDAwMDB9ICh3aXRoIG9yIHdpdGhvdXQgYSB0cmFpbGluZyBicmVhayBjaGFyYWN0ZXIsIGlmIG5vdCAnKyc6IFstLy4gXSlcclxuICA+ICgoXFwrKXwoMChcXGQrKT9bLS8uXFxzXSkpXHJcbiAgQ291bnRyeSBjb2RlOiB7e30sIDEsIC4uLiwgOTk5fSAod2l0aCBvciB3aXRob3V0IGEgdHJhaWxpbmcgYnJlYWsgY2hhcmFjdGVyOiBbLS8uIF0pXHJcbiAgPiBbMS05XVxcZHssMn1bLS8uXFxzXT9cclxuICBBcmVhIGNvZGU6IHsoMCksIC4uLiwgKDAwMDAwMCksIDAsIC4uLiwgMDAwMDAwfSAod2l0aCBvciB3aXRob3V0IGEgdHJhaWxpbmcgYnJlYWsgY2hhcmFjdGVyOiBbLS8uIF0pXHJcbiAgPiAoKFxcKFxcZHsxLDZ9XFwpfFxcZHsxLDZ9KVstLy5cXHNdPyk/XHJcbiAgTG9jYWw6IHswLCAuLi59KyAod2l0aCBvciB3aXRob3V0IGEgdHJhaWxpbmcgYnJlYWsgY2hhcmFjdGVyOiBbLS8uIF0pXHJcbiAgPiAoXFxkK1stLy5cXHNdPykrXFxkK1xyXG4gIEBleGFtcGxlXHJcbiAgICAgIC8vIEFzc3VtZSBlbSBpcyBhIHByZWV4aXN0aW5nIEVudGl0eU1hbmFnZXIuXHJcbiAgICAgIHZhciBjdXN0b21lclR5cGUgPSBlbS5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoXCJDdXN0b21lclwiKTtcclxuICAgICAgdmFyIHBob25lUHJvcGVydHkgPSBjdXN0b21lclR5cGUuZ2V0UHJvcGVydHkoXCJwaG9uZVwiKTtcclxuICAgICAgLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHZhbHVlIG9mIHRoZSBDdXN0b21lci5waG9uZSBwcm9wZXJ0eSBpcyBwaG9uZS5cclxuICAgICAgcGhvbmVQcm9wZXJ0eS52YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9yLnBob25lKCkpO1xyXG4gIEBtZXRob2QgcGhvbmVcclxuICBAc3RhdGljXHJcbiAgQHBhcmFtIFtjb250ZXh0XSB7T2JqZWN0fSBvcHRpb25hbCBwYXJhbWV0ZXJzIHRvIHBhc3MgdGhyb3VnaCB0byB2YWxpZGF0aW9uIGNvbnN0cnVjdG9yXHJcbiAgQHJldHVybiB7VmFsaWRhdG9yfSBBIG5ldyBWYWxpZGF0b3JcclxuICAqKi9cclxuICBwdWJsaWMgc3RhdGljIHBob25lID0gZnVuY3Rpb24gKGNvbnRleHQ/OiBhbnkpIHtcclxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vc3JraXJrbGFuZC9EYXRhQW5ub3RhdGlvbnNFeHRlbnNpb25zL2Jsb2IvbWFzdGVyL0RhdGFBbm5vdGF0aW9uc0V4dGVuc2lvbnMvRXhwcmVzc2lvbnMuY3NcclxuICAgIGxldCByZVBob25lID0gL14oKFxcK3woMChcXGQrKT9bLS8uXFxzXT8pKVsxLTldXFxkezAsMn1bLS8uXFxzXT8pPygoXFwoXFxkezEsNn1cXCl8XFxkezEsNn0pWy0vLlxcc10/KT8oXFxkK1stLy5cXHNdPykrXFxkKyQvO1xyXG4gICAgcmV0dXJuIG1ha2VSZWdFeHBWYWxpZGF0b3IoJ3Bob25lJywgcmVQaG9uZSwgbnVsbCwgY29udGV4dCk7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyB0aGUgVVJMIChwcm90b2NvbCByZXF1aXJlZCkgdmFsaWRhdG9yXHJcbiAgQGV4YW1wbGVcclxuICAgICAgLy8gQXNzdW1lIGVtIGlzIGEgcHJlZXhpc3RpbmcgRW50aXR5TWFuYWdlci5cclxuICAgICAgdmFyIHBlcnNvblR5cGUgPSBlbS5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoXCJQZXJzb25cIik7XHJcbiAgICAgIHZhciB3ZWJzaXRlUHJvcGVydHkgPSBwZXJzb25UeXBlLmdldFByb3BlcnR5KFwid2Vic2l0ZVwiKTtcclxuICAgICAgLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHZhbHVlIG9mIHRoZSBQZXJzb24ud2Vic2l0ZSBwcm9wZXJ0eSBpcyBhIFVSTC5cclxuICAgICAgd2Vic2l0ZVByb3BlcnR5LnZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3IudXJsKCkpO1xyXG4gIEBtZXRob2QgdXJsXHJcbiAgQHN0YXRpY1xyXG4gIEBwYXJhbSBbY29udGV4dF0ge09iamVjdH0gb3B0aW9uYWwgcGFyYW1ldGVycyB0byBwYXNzIHRocm91Z2ggdG8gdmFsaWRhdGlvbiBjb25zdHJ1Y3RvclxyXG4gIEByZXR1cm4ge1ZhbGlkYXRvcn0gQSBuZXcgVmFsaWRhdG9yXHJcbiAgKiovXHJcbiAgcHVibGljIHN0YXRpYyB1cmwgPSBmdW5jdGlvbiAoY29udGV4dD86IGFueSkge1xyXG4gICAgLy9TZWUgaHR0cHM6Ly9naXRodWIuY29tL3Nya2lya2xhbmQvRGF0YUFubm90YXRpb25zRXh0ZW5zaW9ucy9ibG9iL21hc3Rlci9EYXRhQW5ub3RhdGlvbnNFeHRlbnNpb25zL1VybEF0dHJpYnV0ZS5jc1xyXG4gICAgbGV0IHJlVXJsUHJvdG9jb2xSZXF1aXJlZCA9IC9eKGh0dHBzP3xmdHApOlxcL1xcLygoKChbYS16QS1aXXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZBLUZdezJ9KXxbIVxcJCYnXFwoXFwpXFwqXFwrLDs9XXw6KSpAKT8oKChcXGR8WzEtOV1cXGR8MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC01XSlcXC4oXFxkfFsxLTldXFxkfDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNV0pXFwuKFxcZHxbMS05XVxcZHwxXFxkXFxkfDJbMC00XVxcZHwyNVswLTVdKVxcLihcXGR8WzEtOV1cXGR8MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC01XSkpfChbYS16QS1aXVtcXC1hLXpBLVowLTldKil8KCgoW2EtekEtWl18XFxkfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoKFthLXpBLVpdfFxcZHxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkoW2EtekEtWl18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkqKFthLXpBLVpdfFxcZHxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkpKVxcLikrKChbYS16QS1aXXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KChbYS16QS1aXXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkoW2EtekEtWl18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkqKFthLXpBLVpdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSkpXFwuPykoOlxcZCopPykoXFwvKCgoW2EtekEtWl18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KCVbXFxkYS1mQS1GXXsyfSl8WyFcXCQmJ1xcKFxcKVxcKlxcKyw7PV18OnxAKSsoXFwvKChbYS16QS1aXXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZBLUZdezJ9KXxbIVxcJCYnXFwoXFwpXFwqXFwrLDs9XXw6fEApKikqKT8pPyhcXD8oKChbYS16QS1aXXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZBLUZdezJ9KXxbIVxcJCYnXFwoXFwpXFwqXFwrLDs9XXw6fEApfFtcXHVFMDAwLVxcdUY4RkZdfFxcL3xcXD8pKik/KFxcIygoKFthLXpBLVpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZkEtRl17Mn0pfFshXFwkJidcXChcXClcXCpcXCssOz1dfDp8QCl8XFwvfFxcPykqKT8kLztcclxuICAgIHJldHVybiBtYWtlUmVnRXhwVmFsaWRhdG9yKCd1cmwnLCByZVVybFByb3RvY29sUmVxdWlyZWQsIG51bGwsIGNvbnRleHQpO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gIENyZWF0ZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gdmFsaWRhdG9yIHdpdGggYSBmaXhlZCBleHByZXNzaW9uLlxyXG4gIE1hbnkgb2YgdGhlIHN0b2NrIHZhbGlkYXRvcnMgYXJlIGJ1aWx0IHdpdGggdGhpcyBmYWN0b3J5IG1ldGhvZC5cclxuICBUaGVpciBleHByZXNzaW9ucyBhcmUgb2Z0ZW4gZGVyaXZlZCBmcm9tXHJcbiAgaHR0cHM6Ly9naXRodWIuY29tL3Nya2lya2xhbmQvRGF0YUFubm90YXRpb25zRXh0ZW5zaW9ucy9ibG9iL21hc3Rlci9EYXRhQW5ub3RhdGlvbnNFeHRlbnNpb25zXHJcbiAgWW91IGNhbiB0cnkgbWFueSBvZiB0aGVtIGF0IGh0dHA6Ly9kYXRhYW5ub3RhdGlvbnNleHRlbnNpb25zLm9yZy9cclxuICBAZXhhbXBsZVxyXG4gICAgICAvLyBNYWtlIGEgemlwY29kZSB2YWxpZGF0b3JcclxuICAgICAgZnVuY3Rpb24gemlwVmFsaWRhdG9yID0gVmFsaWRhdG9yLm1ha2VSZWdFeHBWYWxpZGF0b3IoXHJcbiAgICAgIFwiemlwVmFsLFxyXG4gICAgICAvXlxcZHs1fShbXFwtXVxcZHs0fSk/JC8sXHJcbiAgICAgIFwiVGhlICVkaXNwbGF5TmFtZSUgJyV2YWx1ZSUnIGlzIG5vdCBhIHZhbGlkIFUuUy4gemlwY29kZVwiKTtcclxuICAgICAgLy8gUmVnaXN0ZXIgaXQuXHJcbiAgICAgIFZhbGlkYXRvci5yZWdpc3Rlcih6aXBWYWxpZGF0b3IpO1xyXG4gICAgICAvLyBBZGQgaXQgdG8gYSBkYXRhIHByb3BlcnR5LiBBc3N1bWUgZW0gaXMgYSBwcmVleGlzdGluZyBFbnRpdHlNYW5hZ2VyLlxyXG4gICAgICB2YXIgY3VzdFR5cGUgPSBlbS5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoXCJDdXN0b21lclwiKTtcclxuICAgICAgdmFyIHppcFByb3BlcnR5ID0gY3VzdFR5cGUuZ2V0UHJvcGVydHkoXCJQb3N0YWxDb2RlXCIpO1xyXG4gICAgICB6aXBQcm9wZXJ0eS52YWxpZGF0b3JzLnB1c2goemlwVmFsaWRhdG9yKTtcclxuICBAbWV0aG9kIG1ha2VSZWdFeHBWYWxpZGF0b3JcclxuICBAc3RhdGljXHJcbiAgQHBhcmFtIHZhbGlkYXRvck5hbWUge1N0cmluZ30gbmFtZSBvZiB0aGlzIHZhbGlkYXRvclxyXG4gIEBwYXJhbSBleHByZXNzaW9uIHtTdHJpbmcgfCBSZWdFeHB9IHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBhcHBseVxyXG4gIEBwYXJhbSBbZGVmYXVsdE1lc3NhZ2VdIHtTdHJpbmd9IGRlZmF1bHQgbWVzc2FnZSBmb3IgZmFpbGVkIHZhbGlkYXRpb25zXHJcbiAgQHBhcmFtIFtjb250ZXh0XSB7T2JqZWN0fSBvcHRpb25hbCBwYXJhbWV0ZXJzIHRvIHBhc3MgdGhyb3VnaCB0byB2YWxpZGF0aW9uIGNvbnN0cnVjdG9yXHJcbiAgQHJldHVybiB7VmFsaWRhdG9yfSBBIG5ldyBWYWxpZGF0b3JcclxuICAqKi9cclxuICBwdWJsaWMgc3RhdGljIG1ha2VSZWdFeHBWYWxpZGF0b3IgPSBtYWtlUmVnRXhwVmFsaWRhdG9yO1xyXG5cclxufVxyXG5WYWxpZGF0b3IucHJvdG90eXBlLl8kdHlwZU5hbWUgPSBcIlZhbGlkYXRvclwiO1xyXG5cclxuLy8gcmVnaXN0ZXIgYWxsIHZhbGlkYXRvcnNcclxuRXJyb3JbJ3gnXSA9IGNvcmUub2JqZWN0Rm9yRWFjaChWYWxpZGF0b3IsIGZ1bmN0aW9uIChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xyXG4gIGlmICh0eXBlb2YgKHZhbHVlKSAhPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG4gIGlmIChrZXkgPT09IFwiZnJvbUpTT05cIiB8fCBrZXkgPT09IFwicmVnaXN0ZXJcIiB8fFxyXG4gICAgICBrZXkgPT09IFwicmVnaXN0ZXJGYWN0b3J5XCIgfHwga2V5ID09PSBcIm1ha2VSZWdFeHBWYWxpZGF0b3JcIikge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgY29uZmlnLnJlZ2lzdGVyRnVuY3Rpb24odmFsdWUsIFwiVmFsaWRhdG9yLlwiICsga2V5KTtcclxufSk7XHJcblxyXG5mdW5jdGlvbiBmb3JtYXRUZW1wbGF0ZSh0ZW1wbGF0ZTogc3RyaW5nLCB2YXJzOiBPYmplY3QsIG93blByb3BlcnRpZXNPbmx5OiBib29sZWFuID0gZmFsc2UpIHtcclxuICBpZiAoIXZhcnMpIHJldHVybiB0ZW1wbGF0ZTtcclxuICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgvJShbXiVdKyklL2csIGZ1bmN0aW9uIChfLCBrZXkpIHtcclxuICAgIGxldCB2YWxPckZuOiBhbnk7XHJcbiAgICBpZiAob3duUHJvcGVydGllc09ubHkpIHtcclxuICAgICAgdmFsT3JGbiA9IHZhcnMuaGFzT3duUHJvcGVydHkoa2V5KSA/IHZhcnNba2V5XSA6ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdmFsT3JGbiA9IHZhcnNba2V5XTtcclxuICAgIH1cclxuICAgIGlmICh2YWxPckZuICE9IG51bGwpIHtcclxuICAgICAgaWYgKGNvcmUuaXNGdW5jdGlvbih2YWxPckZuKSkge1xyXG4gICAgICAgIHJldHVybiB2YWxPckZuKHZhcnMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB2YWxPckZuO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW50UmFuZ2VWYWxpZGF0b3JDdG9yKHZhbGlkYXRvck5hbWU6IHN0cmluZywgbWluVmFsdWU6IG51bWJlciwgbWF4VmFsdWU6IG51bWJlciwgY29udGV4dDogYW55KSB7XHJcbiAgY29udGV4dCA9IGNvbnRleHQgfHwge307XHJcbiAgaWYgKG1pblZhbHVlICE9PSB1bmRlZmluZWQpIHsgY29udGV4dC5taW4gPSBtaW5WYWx1ZTsgfVxyXG4gIGlmIChtYXhWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7IGNvbnRleHQubWF4ID0gbWF4VmFsdWU7IH1cclxuICBsZXQgdGVtcGxhdGVFeGlzdHMgPSBjb250ZXh0Lm1lc3NhZ2VUZW1wbGF0ZSB8fCBWYWxpZGF0b3IubWVzc2FnZVRlbXBsYXRlc1t2YWxpZGF0b3JOYW1lXTtcclxuICBpZiAoIXRlbXBsYXRlRXhpc3RzKSB7XHJcbiAgICBWYWxpZGF0b3IubWVzc2FnZVRlbXBsYXRlc1t2YWxpZGF0b3JOYW1lXSA9IGNvcmUuZm9ybWF0U3RyaW5nKFwiJyVkaXNwbGF5TmFtZSUnIG11c3QgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIHRoZSB2YWx1ZXMgb2YgJTEgYW5kICUyXCIsXHJcbiAgICAgICAgbWluVmFsdWUsIG1heFZhbHVlKTtcclxuICB9XHJcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCB2YWxGbiA9IGZ1bmN0aW9uICh2OiBhbnksIGN0eDogYW55KSB7XHJcbiAgICAgIGlmICh2ID09IG51bGwpIHJldHVybiB0cnVlO1xyXG4gICAgICBpZiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIgJiYgY3R4ICYmIGN0eC5hbGxvd1N0cmluZykge1xyXG4gICAgICAgIHYgPSBwYXJzZUludCh2LCAwKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoKHR5cGVvZiB2ID09PSBcIm51bWJlclwiKSAmJiAoIWlzTmFOKHYpKSAmJiBNYXRoLmZsb29yKHYpID09PSB2KSB7XHJcbiAgICAgICAgaWYgKG1pblZhbHVlICE9IG51bGwgJiYgdiA8IG1pblZhbHVlKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXhWYWx1ZSAhPSBudWxsICYmIHYgPiBtYXhWYWx1ZSkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gbmV3IFZhbGlkYXRvcih2YWxpZGF0b3JOYW1lLCB2YWxGbiwgY29udGV4dCk7XHJcbiAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VSZWdFeHBWYWxpZGF0b3IodmFsaWRhdG9yTmFtZTogc3RyaW5nLCBleHByZXNzaW9uOiBSZWdFeHAsIGRlZmF1bHRNZXNzYWdlPzogc3RyaW5nIHwgbnVsbCwgY29udGV4dD86IGFueSkge1xyXG4gIGlmIChkZWZhdWx0TWVzc2FnZSkge1xyXG4gICAgVmFsaWRhdG9yLm1lc3NhZ2VUZW1wbGF0ZXNbdmFsaWRhdG9yTmFtZV0gPSBkZWZhdWx0TWVzc2FnZTtcclxuICB9XHJcbiAgbGV0IHJlID0gKHR5cGVvZiAoZXhwcmVzc2lvbikgPT09ICdzdHJpbmcnKSA/IG5ldyBSZWdFeHAoZXhwcmVzc2lvbikgOiBleHByZXNzaW9uO1xyXG4gIGxldCB2YWxGbiA9IGZ1bmN0aW9uICh2OiBhbnkpIHtcclxuICAgIC8vIGRvIG5vdCBpbnZhbGlkYXRlIGlmIGVtcHR5OyB1c2UgYSBzZXBhcmF0ZSByZXF1aXJlZCB0ZXN0XHJcbiAgICBpZiAodiA9PSBudWxsIHx8IHYgPT09ICcnKSByZXR1cm4gdHJ1ZTtcclxuICAgIGlmICh0eXBlb2YgKHYpICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIHJlLnRlc3Qodik7XHJcbiAgfTtcclxuICByZXR1cm4gbmV3IFZhbGlkYXRvcih2YWxpZGF0b3JOYW1lLCB2YWxGbiwgY29udGV4dCk7XHJcbn1cclxuXHJcbi8vIGh0dHA6Ly9yb3NldHRhY29kZS5vcmcvd2lraS9MdWhuX3Rlc3Rfb2ZfY3JlZGl0X2NhcmRfbnVtYmVycyNKYXZhU2NyaXB0XHJcblxyXG4vLyBmdW5jdGlvbiBsdWhuKGE6IHN0cmluZywgYjogbnVtYmVyLCBjOiBudW1iZXIsIGQ6IG51bWJlciwgZTogbnVtYmVyKSB7XHJcbi8vICAgZm9yIChkID0gK2FbYiA9IGEubGVuZ3RoIC0gMV0sIGUgPSAwOyBiLS07ICkge1xyXG4vLyAgICAgYyA9ICthW2JdLCBkICs9ICsrZSAlIDIgPyAyICogYyAlIDEwICsgKGMgPiA0KSA6IGM7XHJcbi8vICAgfVxyXG4vLyAgIHJldHVybiAhKGQgJSAxMCk7XHJcbi8vIH07XHJcblxyXG5sZXQgIGx1aG4gPSAoZnVuY3Rpb24oKSB7XHJcbiAgbGV0IGx1aG5BcnIgPSBbMCwgMiwgNCwgNiwgOCwgMSwgMywgNSwgNywgOV07XHJcbiAgcmV0dXJuIGZ1bmN0aW9uKHN0cjogc3RyaW5nKSBcdHtcclxuICAgIGxldCBjb3VudGVyID0gMDtcclxuICAgIGxldCBpbmNOdW06IG51bWJlcjtcclxuICAgIGxldCBvZGQgPSBmYWxzZTtcclxuICAgIGxldCB0ZW1wID0gU3RyaW5nKHN0cikucmVwbGFjZSgvW15cXGRdL2csIFwiXCIpO1xyXG4gICAgaWYgKCB0ZW1wLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgZm9yIChsZXQgaSA9IHRlbXAubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpICB7XHJcbiAgICAgIGluY051bSA9IHBhcnNlSW50KHRlbXAuY2hhckF0KGkpLCAxMCk7XHJcbiAgICAgIGNvdW50ZXIgKz0gKG9kZCA9ICFvZGQpID8gaW5jTnVtIDogbHVobkFycltpbmNOdW1dO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChjb3VudGVyICUgMTAgPT09IDApO1xyXG4gIH07XHJcbn0pKCk7XHJcblxyXG4vKipcclxuQSBWYWxpZGF0aW9uRXJyb3IgaXMgdXNlZCB0byBkZXNjcmliZSBhIGZhaWxlZCB2YWxpZGF0aW9uLlxyXG5cclxuQGNsYXNzIFZhbGlkYXRpb25FcnJvclxyXG4qKi9cclxuXHJcbi8qKlxyXG5Db25zdHJ1Y3RzIGEgbmV3IFZhbGlkYXRpb25FcnJvclxyXG5AbWV0aG9kIDxjdG9yPiBWYWxpZGF0aW9uRXJyb3JcclxuXHJcbkBwYXJhbSB2YWxpZGF0b3Ige1ZhbGlkYXRvciB8fCBudWxsfSBUaGUgVmFsaWRhdG9yIHVzZWQgdG8gY3JlYXRlIHRoaXMgZXJyb3IsIGlmIGFueS5cclxuQHBhcmFtIGNvbnRleHQgeyBDb250ZXh0T2JqZWN0IHx8IG51bGx9IFRoZSBDb250ZXh0IG9iamVjdCB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFZhbGlkYXRvciB0byBjcmVhdGUgdGhpcyBlcnJvci5cclxuQHBhcmFtIGVycm9yTWVzc2FnZSB7IFN0cmluZ30gVGhlIGFjdHVhbCBlcnJvciBtZXNzYWdlXHJcbkBwYXJhbSBba2V5XSB7U3RyaW5nfSBBbiBvcHRpb25hbCBrZXkgdXNlZCB0byBkZWZpbmUgYSBrZXkgZm9yIHRoaXMgZXJyb3IuIE9uZSB3aWxsIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxseSBpZiBub3QgcHJvdmlkZWQgaGVyZS5cclxuKiovXHJcbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uRXJyb3Ige1xyXG4gIHZhbGlkYXRvcj86IFZhbGlkYXRvcjtcclxuICBrZXk6IHN0cmluZztcclxuICBjb250ZXh0OiBhbnk7XHJcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XHJcbiAgcHJvcGVydHk6IGFueTsgLy8gSVByb3BlcnR5XHJcbiAgcHJvcGVydHlOYW1lOiBzdHJpbmc7XHJcbiAgaXNTZXJ2ZXJFcnJvcjogYm9vbGVhbjtcclxuXHJcbiAgY29uc3RydWN0b3IodmFsaWRhdG9yOiBWYWxpZGF0b3IgfCBudWxsLCBjb250ZXh0OiBWYWxpZGF0aW9uQ29udGV4dCwgZXJyb3JNZXNzYWdlOiBzdHJpbmcsIGtleT86IHN0cmluZykge1xyXG4gICAgLy8gRXJyb3IgaXMgd2l0aCBpc0luc3RhbmNlT2YoVmFsaWRhdG9yKVxyXG4gICAgYXNzZXJ0UGFyYW0odmFsaWRhdG9yLCBcInZhbGlkYXRvclwiKS5pc09wdGlvbmFsKCkuaXNJbnN0YW5jZU9mKFZhbGlkYXRvcikuY2hlY2soKTtcclxuICAgIGFzc2VydFBhcmFtKGVycm9yTWVzc2FnZSwgXCJlcnJvck1lc3NhZ2VcIikuaXNOb25FbXB0eVN0cmluZygpLmNoZWNrKCk7XHJcbiAgICBhc3NlcnRQYXJhbShrZXksIFwia2V5XCIpLmlzT3B0aW9uYWwoKS5pc05vbkVtcHR5U3RyaW5nKCkuY2hlY2soKTtcclxuICAgIHRoaXMudmFsaWRhdG9yID0gdmFsaWRhdG9yIHx8IHVuZGVmaW5lZDtcclxuICAgIGNvbnRleHQgPSBjb250ZXh0IHx8IHt9O1xyXG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcclxuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlO1xyXG5cclxuICAgIHRoaXMucHJvcGVydHkgPSBjb250ZXh0LnByb3BlcnR5O1xyXG4gICAgdGhpcy5wcm9wZXJ0eU5hbWUgPSBjb250ZXh0LnByb3BlcnR5TmFtZSB8fCAoY29udGV4dC5wcm9wZXJ0eSAmJiBjb250ZXh0LnByb3BlcnR5Lm5hbWUpO1xyXG5cclxuICAgIGlmIChrZXkpIHtcclxuICAgICAgdGhpcy5rZXkgPSBrZXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmtleSA9IFZhbGlkYXRpb25FcnJvci5nZXRLZXkodmFsaWRhdG9yIHx8IGVycm9yTWVzc2FnZSwgdGhpcy5wcm9wZXJ0eU5hbWUpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc1NlcnZlckVycm9yID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgVGhlIFZhbGlkYXRvciBhc3NvY2lhdGVkIHdpdGggdGhpcyBWYWxpZGF0aW9uRXJyb3IuXHJcblxyXG4gIF9fcmVhZE9ubHlfX1xyXG4gIEBwcm9wZXJ0eSB2YWxpZGF0b3Ige1ZhbGlkYXRvcn1cclxuICAqKi9cclxuXHJcbiAgLyoqXHJcbiAgQSAnY29udGV4dCcgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIFZhbGlkYXRpb25FcnJvci5cclxuXHJcbiAgX19yZWFkT25seV9fXHJcbiAgQHByb3BlcnR5IGNvbnRleHQge09iamVjdH1cclxuICAqKi9cclxuXHJcbiAgLyoqXHJcbiAgVGhlIERhdGFQcm9wZXJ0eSBvciBOYXZpZ2F0aW9uUHJvcGVydHkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgVmFsaWRhdGlvbkVycm9yLlxyXG5cclxuICBfX3JlYWRPbmx5X19cclxuICBAcHJvcGVydHkgcHJvcGVydHkge0RhdGFQcm9wZXJ0eXxOYXZpZ2F0aW9uUHJvcGVydHl9XHJcbiAgKiovXHJcblxyXG4gIC8qKlxyXG4gIFRoZSBwcm9wZXJ0eSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFZhbGlkYXRpb25FcnJvci4gVGhpcyB3aWxsIGJlIGEgXCJwcm9wZXJ0eSBwYXRoXCIgZm9yIGFueSBwcm9wZXJ0aWVzIG9mIGEgY29tcGxleCBvYmplY3QuXHJcblxyXG4gIF9fcmVhZE9ubHlfX1xyXG4gIEBwcm9wZXJ0eSBwcm9wZXJ0eU5hbWUge1N0cmluZ31cclxuICAqKi9cclxuXHJcbiAgLyoqXHJcbiAgVGhlIGVycm9yIG1lc3NhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBWYWxpZGF0aW9uRXJyb3IuXHJcblxyXG4gIF9fcmVhZE9ubHlfX1xyXG4gIEBwcm9wZXJ0eSBlcnJvck1lc3NhZ2Uge3N0cmluZ31cclxuICAqKi9cclxuXHJcbiAgLyoqXHJcbiAgVGhlIGtleSBieSB3aGljaCB0aGlzIHZhbGlkYXRpb24gZXJyb3IgbWF5IGJlIHJlbW92ZWQgZnJvbSBhIGNvbGxlY3Rpb24gb2YgVmFsaWRhdGlvbkVycm9ycy5cclxuXHJcbiAgX19yZWFkT25seV9fXHJcbiAgQHByb3BlcnR5IGtleSB7c3RyaW5nfVxyXG4gICoqL1xyXG5cclxuICAvKipcclxuICBXaGV0aGVyIHRoaXMgaXMgYSBzZXJ2ZXIgZXJyb3IuXHJcblxyXG4gIF9fcmVhZE9ubHlfX1xyXG4gIEBwcm9wZXJ0eSBpc1NlcnZlckVycm9yIHtib29sfVxyXG4gICoqL1xyXG5cclxuXHJcbiAgLyoqXHJcbiAgQ29tcG9zZXMgYSBWYWxpZGF0aW9uRXJyb3IgJ2tleScgZ2l2ZW4gYSB2YWxpZGF0b3Igb3IgYW4gZXJyb3JOYW1lIGFuZCBhbiBvcHRpb25hbCBwcm9wZXJ0eU5hbWVcclxuICBAbWV0aG9kIGdldEtleVxyXG4gIEBzdGF0aWNcclxuICBAcGFyYW0gdmFsaWRhdG9yIHtWYWxpZGF0b3JPckVycm9yS2V5fSBBIFZhbGlkYXRvciBvciBhbiBcImVycm9yIG5hbWVcIiBpZiBubyB2YWxpZGF0b3IgaXMgYXZhaWxhYmxlLlxyXG4gIEBwYXJhbSBbcHJvcGVydHlOYW1lXSBBIHByb3BlcnR5IG5hbWVcclxuICBAcmV0dXJuIHtTdHJpbmd9IEEgVmFsaWRhdGlvbkVycm9yICdrZXknXHJcbiAgKiovXHJcbiAgcHVibGljIHN0YXRpYyBnZXRLZXkodmFsaWRhdG9yT3JFcnJvck5hbWU6IFZhbGlkYXRvciB8IHN0cmluZywgcHJvcGVydHlOYW1lPzogc3RyaW5nKSB7XHJcbiAgICBsZXQgbmFtZSA9ICh0eXBlb2YgdmFsaWRhdG9yT3JFcnJvck5hbWUgPT09ICdzdHJpbmcnKSA/IHZhbGlkYXRvck9yRXJyb3JOYW1lIDogdmFsaWRhdG9yT3JFcnJvck5hbWUubmFtZTtcclxuICAgIHJldHVybiBuYW1lICsgKHByb3BlcnR5TmFtZSA/IFwiOlwiICsgcHJvcGVydHlOYW1lIDogXCJcIik7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuXHJcbiJdfQ==
|
|
991
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9icmVlemUtY2xpZW50LyIsInNvdXJjZXMiOlsic3JjL3ZhbGlkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDOUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFJbEMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsS0FBSyxDQUFDO0FBQ2hDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUM7QUFFL0IsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsVUFBVSxDQUFDO0FBQ3JDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUM7QUFFcEMsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQztBQUMxQixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDO1dBMEJiLFVBQVUsT0FBMEI7SUFDL0MsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFO1FBQ3BCLE9BQU8sT0FBTyxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLElBQUksT0FBTyxDQUFDLFlBQVksSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQztLQUN6RztTQUFNO1FBQ0wsT0FBTyxPQUFPLENBQUM7S0FDaEI7QUFDSCxDQUFDO0FBUkgsbUVBQW1FO0FBQ25FLElBQUksV0FBVyxHQUFHO0lBQ2hCLFdBQVcsSUFNVjtDQUNGLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7OztHQWFHO0FBRUg7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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QUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekQsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29yZSB9IGZyb20gJy4vY29yZSc7XHJcbmltcG9ydCB7IGFzc2VydFBhcmFtIH0gZnJvbSAnLi9hc3NlcnQtcGFyYW0nO1xyXG5pbXBvcnQgeyBjb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XHJcbmltcG9ydCB7IE5hdmlnYXRpb25Qcm9wZXJ0eSwgRGF0YVByb3BlcnR5IH0gZnJvbSAnLi9lbnRpdHktbWV0YWRhdGEnO1xyXG5pbXBvcnQgeyBFbnRpdHkgfSBmcm9tICcuL2VudGl0eS1hc3BlY3QnO1xyXG5cclxuZXhwb3J0IGNvbnN0IElOVDE2X01JTiA9IC0zMjc2ODtcclxuZXhwb3J0IGNvbnN0IElOVDE2X01BWCA9IDMyNzY3O1xyXG5cclxuZXhwb3J0IGNvbnN0IElOVDMyX01JTiA9IC0yMTQ3NDgzNjQ4O1xyXG5leHBvcnQgY29uc3QgSU5UMzJfTUFYID0gMjE0NzQ4MzY0NztcclxuXHJcbmV4cG9ydCBjb25zdCBCWVRFX01JTiA9IDA7XHJcbmV4cG9ydCBjb25zdCBCWVRFX01BWCA9IDI1NTtcclxuXHJcbi8qKiBQYXNzZWQgdG8gVmFsaWRhdGlvbkZuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvbkNvbnRleHQge1xyXG4gIGVudGl0eT86IEVudGl0eTtcclxuICBwcm9wZXJ0eT86IERhdGFQcm9wZXJ0eSB8IE5hdmlnYXRpb25Qcm9wZXJ0eTtcclxuICBwcm9wZXJ0eU5hbWU/OiBzdHJpbmc7XHJcbiAgdmFsdWU/OiBhbnk7XHJcbn1cclxuXHJcbi8qKiBVc2VkIGJ5IFZhbGlkYXRvciB0byBjb21wb3NlIG1lc3NhZ2VzICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgVmFsaWRhdGlvbk1lc3NhZ2VDb250ZXh0IGV4dGVuZHMgVmFsaWRhdGlvbkNvbnRleHQge1xyXG4gIG5hbWU/OiBzdHJpbmc7XHJcbiAgZGlzcGxheU5hbWU/OiBzdHJpbmc7XHJcbiAgbWVzc2FnZVRlbXBsYXRlPzogc3RyaW5nO1xyXG4gIG1lc3NhZ2U/OiBzdHJpbmcgfCAoKHZjOiBWYWxpZGF0aW9uQ29udGV4dCkgPT4gc3RyaW5nKTtcclxuICBba2V5OnN0cmluZ106IGFueTtcclxufVxyXG5cclxuLyoqIEZ1bmN0aW9uIGNhbGxlZCB0byB2YWxpZGF0ZSBhbiBlbnRpdHkgb3IgcHJvcGVydHkgKi9cclxuZXhwb3J0IGludGVyZmFjZSBWYWxpZGF0aW9uRm4ge1xyXG4gICAgKHZhbHVlOiBhbnksIGNvbnRleHQ/OiBWYWxpZGF0aW9uQ29udGV4dCk6IGJvb2xlYW47XHJcbn1cclxuXHJcbi8vIGFkZCBjb21tb24gcHJvcHMgYW5kIG1ldGhvZHMgZm9yIGV2ZXJ5IHZhbGlkYXRvciAnY29udGV4dCcgaGVyZS5cclxubGV0IHJvb3RDb250ZXh0ID0ge1xyXG4gIGRpc3BsYXlOYW1lOiBmdW5jdGlvbiAoY29udGV4dDogVmFsaWRhdGlvbkNvbnRleHQpIHtcclxuICAgIGlmIChjb250ZXh0LnByb3BlcnR5KSB7XHJcbiAgICAgIHJldHVybiBjb250ZXh0LnByb3BlcnR5LnJlc29sdmVQcm9wZXJ0eShcImRpc3BsYXlOYW1lXCIpIHx8IGNvbnRleHQucHJvcGVydHlOYW1lIHx8IGNvbnRleHQucHJvcGVydHkubmFtZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBcIlZhbHVlXCI7XHJcbiAgICB9XHJcbiAgfVxyXG59O1xyXG5cclxuLyoqXHJcbkluc3RhbmNlcyBvZiB0aGUgVmFsaWRhdG9yIGNsYXNzIHByb3ZpZGUgdGhlIGxvZ2ljIHRvIHZhbGlkYXRlIGFub3RoZXIgb2JqZWN0IGFuZCBwcm92aWRlIGEgZGVzY3JpcHRpb24gb2YgYW55IGVycm9yc1xyXG5lbmNvdW50ZXJlZCBkdXJpbmcgdGhlIHZhbGlkYXRpb24gcHJvY2Vzcy4gIFRoZXkgYXJlIHR5cGljYWxseSBhc3NvY2lhdGVkIHdpdGggYSAndmFsaWRhdG9ycycgcHJvcGVydHkgb24gdGhlIGZvbGxvd2luZyB0eXBlczogW1tFbnRpdHlUeXBlXV0sXHJcbltbRGF0YVByb3BlcnR5XV0gb3IgW1tOYXZpZ2F0aW9uUHJvcGVydHldXS5cclxuXHJcbkEgbnVtYmVyIG9mIHByb3BlcnR5IGxldmVsIHZhbGlkYXRvcnMgYXJlIHJlZ2lzdGVyZWQgYXV0b21hdGljYWxseSwgaS5lIGFkZGVkIHRvIGVhY2ggRGF0YVByb3BlcnR5LnZhbGlkYXRvcnMgcHJvcGVydHlcclxuYmFzZWQgb24gW1tEYXRhUHJvcGVydHldXSBtZXRhZGF0YS4gIEZvciBleGFtcGxlLFxyXG5cclxuLSBEYXRhUHJvcGVydHkuZGF0YVR5cGUgLT4gb25lIG9mIHRoZSAnZGF0YVR5cGUnIHZhbGlkYXRvciBtZXRob2RzIHN1Y2ggYXMgVmFsaWRhdG9yLmludDY0LCBWYWxpZGF0b3IuZGF0ZSwgVmFsaWRhdG9yLmJvb2wgZXRjLlxyXG4tIERhdGFQcm9wZXJ0eS5tYXhMZW5ndGggLT4gVmFsaWRhdG9yLm1heExlbmd0aFxyXG4tIERhdGFQcm9wZXJ0eS5pc051bGxhYmxlIC0+IFZhbGlkYXRvci5yZXF1aXJlZCAoaWYgbm90IG51bGxhYmxlKVxyXG5cclxuQGNsYXNzIFZhbGlkYXRvclxyXG4qKi9cclxuXHJcbi8qKlxyXG5WYWxpZGF0b3IgY29uc3RydWN0b3IgLSBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGNyZWF0ZSBjcmVhdGUgY3VzdG9tIHZhbGlkYXRpb25zLiAgU2V2ZXJhbFxyXG5iYXNpYyBcIlZhbGlkYXRvclwiIGNvbnN0cnVjdGlvbiBtZXRob2RzIGFyZSBhbHNvIHByb3ZpZGVkIGFzIHN0YXRpYyBtZXRob2RzIHRvIHRoaXMgY2xhc3MuIFRoZXNlIG1ldGhvZHNcclxucHJvdmlkZSBhIHNpbXBsZXIgc3ludGF4IGZvciBjcmVhdGluZyBiYXNpYyB2YWxpZGF0aW9ucy5cclxuXHJcbk1hbnkgb2YgdGhlc2Ugc3RvY2sgdmFsaWRhdG9ycyBhcmUgaW5zcGlyZWQgYnkgYW5kIGltcGxlbWVudGVkIHRvIGNvbmZvcm0gdG8gdGhlIHZhbGlkYXRvcnMgZGVmaW5lZCBhdFxyXG5odHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvc3lzdGVtLmNvbXBvbmVudG1vZGVsLmRhdGFhbm5vdGF0aW9ucy5hc3B4XHJcblxyXG5Tb21ldGltZXMgYSBjdXN0b20gdmFsaWRhdG9yIHdpbGwgYmUgcmVxdWlyZWQuXHJcbkBleGFtcGxlXHJcbk1vc3QgdmFsaWRhdG9ycyB3aWxsIGJlICdwcm9wZXJ0eScgbGV2ZWwgdmFsaWRhdG9ycywgbGlrZSB0aGlzLlxyXG5AZXhhbXBsZVxyXG4gICAgLy8gdiBpcyB0aGlzIGZ1bmN0aW9uIGlzIHRoZSB2YWx1ZSB0byBiZSB2YWxpZGF0ZWQsIGluIHRoaXMgY2FzZSBhIFwiY291bnRyeVwiIHN0cmluZy5cclxuICAgIHZhciB2YWxGbiA9IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgICAgaWYgKHYgPT0gbnVsbCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgcmV0dXJuIChjb3JlLnN0cmluZ1N0YXJ0c1dpdGgodiwgXCJVU1wiKSk7XHJcbiAgICB9O1xyXG4gICAgdmFyIGNvdW50cnlWYWxpZGF0b3IgPSBuZXcgVmFsaWRhdG9yKFwiY291bnRyeUlzVVNcIiwgdmFsRm4sIHtcclxuICAgICAgICBkaXNwbGF5TmFtZTogXCJDb3VudHJ5XCIsIFxyXG4gICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogXCInJWRpc3BsYXlOYW1lJScgbXVzdCBzdGFydCB3aXRoICdVUydcIiBcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIE5vdyBwbHVnIGl0IGludG8gQnJlZXplLlxyXG4gICAgLy8gQXNzdW1lIGVtMSBpcyBhIHByZWV4aXN0aW5nIEVudGl0eU1hbmFnZXIuXHJcbiAgICB2YXIgY3VzdFR5cGUgPSBtZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoXCJDdXN0b21lclwiKTtcclxuICAgIHZhciBjb3VudHJ5UHJvcCA9IGN1c3RUeXBlLmdldFByb3BlcnR5KFwiQ291bnRyeVwiKTtcclxuICAgIC8vIE5vdGUgdGhhdCB2YWxpZGF0b3IgaXMgYWRkZWQgdG8gYSAnRGF0YVByb3BlcnR5JyB2YWxpZGF0b3JzIGNvbGxlY3Rpb24uXHJcbiAgICBwcm9wLnZhbGlkYXRvcnMucHVzaChjb3VudHJ5VmFsaWRhdG9yKTtcclxuRW50aXR5IGxldmVsIHZhbGlkYXRvcnMgYXJlIGFsc28gcG9zc2libGVcclxuQGV4YW1wbGVcclxuICAgIGZ1bmN0aW9uIGlzVmFsaWRaaXBDb2RlKHZhbHVlKSB7XHJcbiAgICAgICAgdmFyIHJlID0gL15cXGR7NX0oW1xcLV1cXGR7NH0pPyQvO1xyXG4gICAgICAgIHJldHVybiAocmUudGVzdCh2YWx1ZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHYgaW4gdGhpcyBjYXNlIHdpbGwgYmUgYSBDdXN0b21lciBlbnRpdHlcclxuICAgIHZhciB2YWxGbiA9IGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgICAgLy8gVGhpcyB2YWxpZGF0b3Igb25seSB2YWxpZGF0ZXMgVVMgWmlwIENvZGVzLlxyXG4gICAgICAgIGlmICggdi5nZXRQcm9wZXJ0eShcIkNvdW50cnlcIikgPT09IFwiVVNBXCIpIHtcclxuICAgICAgICAgICAgdmFyIHBvc3RhbENvZGUgPSB2LmdldFByb3BlcnR5KFwiUG9zdGFsQ29kZVwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRaaXBDb2RlKHBvc3RhbENvZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcbiAgICB2YXIgemlwQ29kZVZhbGlkYXRvciA9IG5ldyBWYWxpZGF0b3IoXCJ6aXBDb2RlVmFsaWRhdG9yXCIsIHZhbEZuLFxyXG4gICAgICAgIHsgbWVzc2FnZVRlbXBsYXRlOiBcIkZvciB0aGUgVVMsIHRoaXMgaXMgbm90IGEgdmFsaWQgUG9zdGFsQ29kZVwiIH0pO1xyXG5cclxuICAgIC8vIE5vdyBwbHVnIGl0IGludG8gQnJlZXplLlxyXG4gICAgLy8gQXNzdW1lIGVtMSBpcyBhIHByZWV4aXN0aW5nIEVudGl0eU1hbmFnZXIuXHJcbiAgICB2YXIgY3VzdFR5cGUgPSBlbTEubWV0YWRhdGFTdG9yZS5nZXRFbnRpdHlUeXBlKFwiQ3VzdG9tZXJcIik7XHJcbiAgICAvLyBOb3RlIHRoYXQgdmFsaWRhdG9yIGlzIGFkZGVkIHRvIGFuICdFbnRpdHlUeXBlJyB2YWxpZGF0b3JzIGNvbGxlY3Rpb24uXHJcbiAgICBjdXN0VHlwZS52YWxpZGF0b3JzLnB1c2goemlwQ29kZVZhbGlkYXRvcik7XHJcbldoYXQgaXMgY29tbW9ubHkgbmVlZGVkIGlzIGEgd2F5IG9mIGNyZWF0aW5nIGEgcGFyYW1ldGVyaXplZCBmdW5jdGlvbiB0aGF0IHdpbGwgaXRzZWxmXHJcbnJldHVybiBhIG5ldyBWYWxpZGF0b3IuICBUaGlzIHJlcXVpcmVzIHRoZSB1c2Ugb2YgYSAnY29udGV4dCcgb2JqZWN0LlxyXG5AZXhhbXBsZVxyXG4gICAgLy8gY3JlYXRlIGEgZnVuY3Rpb24gdGhhdCB3aWxsIHRha2UgaW4gYSBjb25maWcgb2JqZWN0XHJcbiAgICAvLyBhbmQgd2lsbCByZXR1cm4gYSB2YWxpZGF0b3JcclxuICAgIHZhciBudW1lcmljUmFuZ2VWYWxpZGF0b3IgPSBmdW5jdGlvbihjb250ZXh0KSB7XHJcbiAgICAgICAgdmFyIHZhbEZuID0gZnVuY3Rpb24odiwgY3R4KSB7XHJcbiAgICAgICAgICAgIGlmICh2ID09IG51bGwpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mKHYpICE9PSBcIm51bWJlclwiKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmIChjdHgubWluICE9IG51bGwgJiYgdiA8IGN0eC5taW4pIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKGN0eC5tYXggIT0gbnVsbCAmJiB2ID4gY3R4Lm1heCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIC8vIFRoZSBsYXN0IHBhcmFtZXRlciBiZWxvdyBpcyB0aGUgJ2NvbnRleHQnIG9iamVjdCB0aGF0IHdpbGwgYmUgcGFzc2VkIGludG8gdGhlICdjdHgnIHBhcmFtZXRlciBhYm92ZVxyXG4gICAgICAgIC8vIHdoZW4gdGhpcyB2YWxpZGF0b3IgZXhlY3V0ZXMuIFNldmVyYWwgb3RoZXIgcHJvcGVydGllcywgc3VjaCBhcyBkaXNwbGF5TmFtZSB3aWxsIGdldCBhZGRlZCB0byB0aGlzIG9iamVjdCBhcyB3ZWxsLlxyXG4gICAgICAgIHJldHVybiBuZXcgVmFsaWRhdG9yKFwibnVtZXJpY1JhbmdlXCIsIHZhbEZuLCB7XHJcbiAgICAgICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogXCInJWRpc3BsYXlOYW1lJScgbXVzdCBiZSBhIG51bWJlciBiZXR3ZWVuIHRoZSB2YWx1ZXMgb2YgJW1pbiUgYW5kICVtYXglXCIsXHJcbiAgICAgICAgICAgIG1pbjogY29udGV4dC5taW4sXHJcbiAgICAgICAgICAgIG1heDogY29udGV4dC5tYXhcclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbiAgICAvLyBBc3N1bWUgdGhhdCBmcmVpZ2h0UHJvcGVydHkgaXMgYSBEYXRhRW50aXR5UHJvcGVydHkgdGhhdCBkZXNjcmliZXMgbnVtZXJpYyB2YWx1ZXMuXHJcbiAgICAvLyByZWdpc3RlciB0aGUgdmFsaWRhdG9yXHJcbiAgICBmcmVpZ2h0UHJvcGVydHkudmFsaWRhdG9ycy5wdXNoKG51bWVyaWNSYW5nZVZhbGlkYXRvcih7IG1pbjogMTAwLCBtYXg6IDUwMCB9KSk7XHJcblxyXG5CcmVlemUgc3Vic3RpdHV0ZXMgY29udGV4dCB2YWx1ZXMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlIHRva2VucyBpbiB0aGUgbWVzc2FnZVRlbXBsYXRlIHdoZW4gcHJlcGFyaW5nIHRoZSBydW50aW1lIGVycm9yIG1lc3NhZ2U7XHJcbidkaXNwbGF5TmFtZScgaXMgYSBwcmUtZGVmaW5lZCBjb250ZXh0IGZ1bmN0aW9uIHRoYXQgaXMgYWx3YXlzIGF2YWlsYWJsZS5cclxuXHJcblBsZWFzZSBub3RlIHRoYXQgQnJlZXplIHN1YnN0aXR1dGVzIHRoZSBlbXB0eSBzdHJpbmcgZm9yIGZhbHNleSBwYXJhbWV0ZXJzLiBUaGF0IHVzdWFsbHkgd29ya3MgaW4geW91ciBmYXZvci5cclxuU29tZXRpbWVzIGl0IGRvZXNuJ3QgYXMgd2hlbiB0aGUgJ21pbicgdmFsdWUgaXMgemVybyBpbiB3aGljaCBjYXNlIHRoZSBtZXNzYWdlIHRleHQgd291bGQgaGF2ZSBhIGhvbGVcclxud2hlcmUgdGhlICdtaW4nIHZhbHVlIGdvZXMsIHNheWluZzogXCIuLi4gYW4gaW50ZWdlciBiZXR3ZWVuIHRoZSB2YWx1ZXMgb2YgYW5kIC4uLlwiLiBUaGF0IGlzIG5vdCB3aGF0IHlvdSB3YW50LlxyXG5cclxuVG8gYXZvaWQgdGhpcyBlZmZlY3QsIHlvdSBtYXkgY2FuIGJha2UgY2VydGFpbiBvZiB0aGUgY29udGV4dCB2YWx1ZXMgaW50byB0aGUgJ21lc3NhZ2VUZW1wbGF0ZScgaXRzZWxmXHJcbmFzIHNob3duIGluIHRoaXMgcmV2aXNpb24gdG8gdGhlIHBlcnRpbmVudCBwYXJ0IG9mIHRoZSBwcmV2aW91cyBleGFtcGxlOlxyXG5AZXhhbXBsZVxyXG4gICAgLy8gLi4uIGFzIGJlZm9yZVxyXG4gICAgLy8gLi4uIGJ1dCBiYWtlIHRoZSBtaW4vbWF4IHZhbHVlcyBpbnRvIHRoZSBtZXNzYWdlIHRlbXBsYXRlLlxyXG4gICAgdmFyIHRlbXBsYXRlID0gYnJlZXplLmNvcmUuZm9ybWF0U3RyaW5nKFxyXG4gICAgICAgIFwiJyVkaXNwbGF5TmFtZSUnIG11c3QgYmUgYSBudW1iZXIgYmV0d2VlbiB0aGUgdmFsdWVzIG9mICUxIGFuZCAlMlwiLFxyXG4gICAgICAgIGNvbnRleHQubWluLCBjb250ZXh0Lm1heCk7XHJcbiAgICByZXR1cm4gbmV3IFZhbGlkYXRvcihcIm51bWVyaWNSYW5nZVwiLCB2YWxGbiwge1xyXG4gICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogdGVtcGxhdGUsXHJcbiAgICAgICAgbWluOiBjb250ZXh0Lm1pbixcclxuICAgICAgICBtYXg6IGNvbnRleHQubWF4XHJcbiAgICB9KTtcclxuXHJcbkBtZXRob2QgPGN0b3I+IFZhbGlkYXRvclxyXG5AcGFyYW0gbmFtZSB7U3RyaW5nfSBUaGUgbmFtZSBvZiB0aGlzIHZhbGlkYXRvci5cclxuQHBhcmFtIHZhbGlkYXRvckZuIHtGdW5jdGlvbn0gQSBmdW5jdGlvbiB0byBwZXJmb3JtIHZhbGlkYXRpb24uXHJcblxyXG52YWxpZGF0b3JGbih2YWx1ZSwgY29udGV4dClcclxuQHBhcmFtIHZhbGlkYXRvckZuLnZhbHVlIHtPYmplY3R9IFZhbHVlIHRvIGJlIHZhbGlkYXRlZFxyXG5AcGFyYW0gdmFsaWRhdG9yRm4uY29udGV4dCB7T2JqZWN0fSBUaGUgc2FtZSBjb250ZXh0IG9iamVjdCBwYXNzZWQgaW50byB0aGUgY29uc3RydWN0b3Igd2l0aCB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgcHJvcGVydGllcyBpZiBub3Rcclxub3RoZXJ3aXNlIHNwZWNpZmllZC5cclxuQHBhcmFtIHZhbGlkYXRvckZuLmNvbnRleHQudmFsdWUge09iamVjdH0gVGhlIHZhbHVlIGJlaW5nIHZhbGlkYXRlZC5cclxuQHBhcmFtIHZhbGlkYXRvckZuLmNvbnRleHQubmFtZSB7U3RyaW5nfSBUaGUgbmFtZSBvZiB0aGUgdmFsaWRhdG9yIGJlaW5nIGV4ZWN1dGVkLlxyXG5AcGFyYW0gdmFsaWRhdG9yRm4uY29udGV4dC5kaXNwbGF5TmFtZSB7U3RyaW5nfSBUaGlzIHdpbGwgYmUgZWl0aGVyIHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkncyAnZGlzcGxheU5hbWUnIHByb3BlcnR5IG9yXHJcbnRoZSB2YWx1ZSBvZiBpdHMgJ25hbWUnIHByb3BlcnR5IG9yIHRoZSBzdHJpbmcgJ1ZhbHVlJ1xyXG5AcGFyYW0gdmFsaWRhdG9yRm4uY29udGV4dC5tZXNzYWdlVGVtcGxhdGUge1N0cmluZ30gVGhpcyB3aWxsIGVpdGhlciBiZSB0aGUgdmFsdWUgb2YgVmFsaWRhdG9yLm1lc3NhZ2VUZW1wbGF0ZXNbIHt0aGlzIHZhbGlkYXRvcnMgbmFtZX1dIG9yIG51bGwuIFZhbGlkYXRvci5tZXNzYWdlVGVtcGxhdGVzXHJcbmlzIGFuIG9iamVjdCB0aGF0IGlzIGtleWVkIGJ5IHZhbGlkYXRvciBuYW1lIGFuZCB0aGF0IGNhbiBiZSBhZGRlZCB0byBpbiBvcmRlciB0byAncmVnaXN0ZXInIHlvdXIgb3duIG1lc3NhZ2UgZm9yIGEgZ2l2ZW4gdmFsaWRhdG9yLlxyXG5UaGUgZm9sbG93aW5nIHByb3BlcnR5IGNhbiBhbHNvIGJlIHNwZWNpZmllZCBmb3IgYW55IHZhbGlkYXRvciB0byBmb3JjZSBhIHNwZWNpZmljIGVycm9yTWVzc2FnZSBzdHJpbmdcclxuQHBhcmFtIFt2YWxpZGF0b3JGbi5jb250ZXh0Lm1lc3NhZ2VdIHtTdHJpbmd9IElmIHRoaXMgcHJvcGVydHkgaXMgc2V0IGl0IHdpbGwgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZSAnbWVzc2FnZVRlbXBsYXRlJyBwcm9wZXJ0eSB3aGVuIGFuXHJcbmVycm9yIG1lc3NhZ2UgaXMgZ2VuZXJhdGVkLlxyXG5cclxuQHBhcmFtIFtjb250ZXh0XSB7T2JqZWN0fSBBIGZyZWUgZm9ybSBvYmplY3Qgd2hvc2UgcHJvcGVydGllcyB3aWxsIG1hZGUgYXZhaWxhYmxlIGR1cmluZyB0aGUgdmFsaWRhdGlvbiBhbmQgZXJyb3IgbWVzc2FnZSBjcmVhdGlvbiBwcm9jZXNzLlxyXG5UaGlzIG9iamVjdCB3aWxsIGJlIHBhc3NlZCBpbnRvIHRoZSBWYWxpZGF0b3IncyB2YWxpZGF0aW9uIGZ1bmN0aW9uIHdoZW5ldmVyICd2YWxpZGF0ZScgaXMgY2FsbGVkLiBTZWUgYWJvdmUgZm9yIGEgZGVzY3JpcHRpb25cclxub2YgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRoYXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IGFkZGVkIHRvIHRoaXMgb2JqZWN0IGlmIG5vdCBvdGhlcndpc2Ugc3BlY2lmaWVkLlxyXG5AZHluYW1pY1xyXG4qKi9cclxuZXhwb3J0IGNsYXNzIFZhbGlkYXRvciB7XHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgZGVjbGFyZSBfJHR5cGVOYW1lOiBzdHJpbmc7IC8vIG9uIHByb3RvXHJcblxyXG4gIGRlY2xhcmUgbmFtZTogc3RyaW5nO1xyXG4gIGRlY2xhcmUgdmFsRm46IFZhbGlkYXRpb25GbjtcclxuICBkZWNsYXJlIGNvbnRleHQ6IFZhbGlkYXRpb25NZXNzYWdlQ29udGV4dDtcclxuICBkZWNsYXJlIGN1cnJlbnRDb250ZXh0OiBWYWxpZGF0aW9uTWVzc2FnZUNvbnRleHQ7XHJcbiAgZGVjbGFyZSBwcml2YXRlIF9iYXNlQ29udGV4dDogVmFsaWRhdGlvbk1lc3NhZ2VDb250ZXh0O1xyXG5cclxuICBjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHZhbEZuOiBWYWxpZGF0aW9uRm4sIGNvbnRleHQ/OiBWYWxpZGF0aW9uTWVzc2FnZUNvbnRleHQpIHtcclxuICAgIC8vIF9iYXNlQ29udGV4dCBpcyB3aGF0IHdpbGwgZ2V0IHNlcmlhbGl6ZWRcclxuICAgIHRoaXMuX2Jhc2VDb250ZXh0ID0gY29udGV4dCB8fCB7fSBhcyBWYWxpZGF0aW9uTWVzc2FnZUNvbnRleHQ7XHJcbiAgICB0aGlzLl9iYXNlQ29udGV4dC5uYW1lID0gbmFtZTtcclxuICAgIGNvbnRleHQgPSBjb3JlLmV4dGVuZChPYmplY3QuY3JlYXRlKHJvb3RDb250ZXh0KSwgdGhpcy5fYmFzZUNvbnRleHQpIGFzIFZhbGlkYXRpb25NZXNzYWdlQ29udGV4dDtcclxuICAgIGNvbnRleHQubWVzc2FnZVRlbXBsYXRlID0gY29udGV4dC5tZXNzYWdlVGVtcGxhdGUgfHwgVmFsaWRhdG9yLm1lc3NhZ2VUZW1wbGF0ZXNbbmFtZV07XHJcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xyXG4gICAgdGhpcy52YWxGbiA9IHZhbEZuO1xyXG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFRoZSBuYW1lIG9mIHRoaXMgdmFsaWRhdG9yLlxyXG5cclxuICBfX3JlYWRPbmx5X19cclxuICBAcHJvcGVydHkgbmFtZSB7U3RyaW5nfVxyXG4gICoqL1xyXG5cclxuICAvKipcclxuICBUaGUgY29udGV4dCBmb3IgdGhpcyB2YWxpZGF0b3IuXHJcblxyXG4gIFRoaXMgb2JqZWN0IHdpbGwgdHlwaWNhbGx5IGNvbnRhaW4gYXQgYSBtaW5pbXVtIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllcy4gXCJuYW1lXCIsIFwiZGlzcGxheU5hbWVcIiwgYW5kIFwibWVzc2FnZVwiIG9yIFwibWVzc2FnZVRlbXBsYXRlXCIuXHJcbiAgX19yZWFkT25seV9fXHJcbiAgQHByb3BlcnR5IGNvbnRleHQge09iamVjdH1cclxuICAqKi9cclxuXHJcblxyXG4gIC8qKlxyXG4gIFJ1biB0aGlzIHZhbGlkYXRvciBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgdmFsdWUuICBUaGlzIG1ldGhvZCB3aWxsIHVzdWFsbHkgYmUgY2FsbGVkIGludGVybmFsbHkgZWl0aGVyXHJcbiAgYXV0b21hdGljYWxseSBieSBhbiBwcm9wZXJ0eSBjaGFuZ2UsIGVudGl0eSBhdHRhY2gsIHF1ZXJ5IG9yIHNhdmUgb3BlcmF0aW9uLCBvciBtYW51YWxseSBhcyBhIHJlc3VsdCBvZlxyXG4gIGEgdmFsaWRhdGVFbnRpdHkgY2FsbCBvbiB0aGUgRW50aXR5QXNwZWN0LiBUaGUgcmVzdWx0aW5nIFZhbGlkYXRpb25SZXN1bHRzIGFyZSBhdmFpbGFibGUgdmlhIHRoZVxyXG4gIEVudGl0eUFzcGVjdC5nZXRWYWxpZGF0aW9uRXJyb3JzIG1ldGhvZC5cclxuXHJcbiAgSG93ZXZlciwgeW91IGNhbiBhbHNvIGNhbGwgYSB2YWxpZGF0b3IgZGlyZWN0bHkgZWl0aGVyIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9yIHNvbWUgb3RoZXIgcmVhc29uIGlmIG5lZWRlZC5cclxuICBAZXhhbXBsZVxyXG4gICAgICAvLyB1c2luZyBvbmUgb2YgdGhlIHByZWRlZmluZWQgdmFsaWRhdG9yc1xyXG4gICAgICB2YXIgdmFsaWRhdG9yID0gVmFsaWRhdG9yLm1heExlbmd0aCh7IG1heExlbmd0aDogNSwgZGlzcGxheU5hbWU6IFwiQ2l0eVwiIH0pO1xyXG4gICAgICAvLyBzaG91bGQgYmUgb2sgYmVjYXVzZSBcImFzZGZcIi5sZW5ndGggPCA1XHJcbiAgICAgIHZhciByZXN1bHQgPSB2YWxpZGF0b3IudmFsaWRhdGUoXCJhc2RmXCIpO1xyXG4gICAgICBvayhyZXN1bHQgPT09IG51bGwpO1xyXG4gICAgICByZXN1bHQgPSB2YWxpZGF0b3IudmFsaWRhdGUoXCJhZGFzZGZhc2RmXCIpO1xyXG4gICAgICAvLyBleHRyYWN0IGFsbCBvZiB0aGUgcHJvcGVydGllcyBvZiB0aGUgJ3Jlc3VsdCdcclxuICAgICAgdmFyIGVyck1zZyA9IHJlc3VsdC5lcnJvck1lc3NhZ2U7XHJcbiAgICAgIHZhciBjb250ZXh0ID0gcmVzdWx0LmNvbnRleHQ7XHJcbiAgICAgIHZhciBzYW1lVmFsaWRhdG9yID0gcmVzdWx0LnZhbGlkYXRvcjtcclxuICBAbWV0aG9kIHZhbGlkYXRlXHJcbiAgQHBhcmFtIHZhbHVlIHtPYmplY3R9IFZhbHVlIHRvIHZhbGlkYXRlXHJcbiAgQHBhcmFtIGFkZGl0aW9uYWxDb250ZXh0IHtPYmplY3R9IEFueSBhZGRpdGlvbmFsIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gdGhhdCB0aGUgVmFsaWRhdG9yXHJcbiAgY2FuIG1ha2UgdXNlIG9mLlxyXG4gIEByZXR1cm4ge1ZhbGlkYXRpb25FcnJvcnxudWxsfSBBIFZhbGlkYXRpb25FcnJvciBpZiB2YWxpZGF0aW9uIGZhaWxzLCBudWxsIG90aGVyd2lzZVxyXG4gICoqL1xyXG4gIHZhbGlkYXRlKHZhbHVlOiBhbnksIGFkZGl0aW9uYWxDb250ZXh0PzogVmFsaWRhdGlvbk1lc3NhZ2VDb250ZXh0KSB7XHJcbiAgICBsZXQgY3VycmVudENvbnRleHQ6IFZhbGlkYXRpb25NZXNzYWdlQ29udGV4dDsgLy8geyB2YWx1ZT86IE9iamVjdCB9O1xyXG4gICAgaWYgKGFkZGl0aW9uYWxDb250ZXh0KSB7XHJcbiAgICAgIGN1cnJlbnRDb250ZXh0ID0gY29yZS5leHRlbmQoT2JqZWN0LmNyZWF0ZSh0aGlzLmNvbnRleHQpLCBhZGRpdGlvbmFsQ29udGV4dCkgYXMgVmFsaWRhdGlvbk1lc3NhZ2VDb250ZXh0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY3VycmVudENvbnRleHQgPSB0aGlzLmNvbnRleHQ7XHJcbiAgICB9XHJcbiAgICB0aGlzLmN1cnJlbnRDb250ZXh0ID0gY3VycmVudENvbnRleHQ7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKHRoaXMudmFsRm4odmFsdWUsIGN1cnJlbnRDb250ZXh0KSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGN1cnJlbnRDb250ZXh0LnZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBWYWxpZGF0aW9uRXJyb3IodGhpcywgY3VycmVudENvbnRleHQsIHRoaXMuZ2V0TWVzc2FnZSgpKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICByZXR1cm4gbmV3IFZhbGlkYXRpb25FcnJvcih0aGlzLCBjdXJyZW50Q29udGV4dCwgXCJFeGNlcHRpb24gb2NjdXJlZCB3aGlsZSBleGVjdXRpbmcgdGhpcyB2YWxpZGF0b3I6IFwiICsgdGhpcy5uYW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvLyBjb250ZXh0LnZhbHVlIGlzIG5vdCBhdmFpbCB1bmxlc3MgdmFsaWRhdGUgd2FzIGNhbGxlZCBmaXJzdC5cclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyB0aGUgbWVzc2FnZSBnZW5lcmF0ZWQgYnkgdGhlIG1vc3QgcmVjZW50IGV4ZWN1dGlvbiBvZiB0aGlzIFZhbGlkYXRvci5cclxuICBAZXhhbXBsZVxyXG4gICAgICB2YXIgdjAgPSBWYWxpZGF0b3IubWF4TGVuZ3RoKHsgbWF4TGVuZ3RoOiA1LCBkaXNwbGF5TmFtZTogXCJDaXR5XCIgfSk7XHJcbiAgICAgIHYwLnZhbGlkYXRlKFwiYWRhc2RmYXNkZlwiKTtcclxuICAgICAgdmFyIGVyck1lc3NhZ2UgPSB2MC5nZXRNZXNzYWdlKCkpO1xyXG4gIEBtZXRob2QgZ2V0TWVzc2FnZVxyXG4gIEByZXR1cm4ge1N0cmluZ31cclxuICAqKi9cclxuICBnZXRNZXNzYWdlKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGNvbnRleHQgPSB0aGlzLmN1cnJlbnRDb250ZXh0O1xyXG4gICAgICBsZXQgbWVzc2FnZSA9IGNvbnRleHQubWVzc2FnZTtcclxuICAgICAgaWYgKG1lc3NhZ2UpIHtcclxuICAgICAgICBpZiAodHlwZW9mIChtZXNzYWdlKSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICByZXR1cm4gbWVzc2FnZShjb250ZXh0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKGNvbnRleHQubWVzc2FnZVRlbXBsYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIGZvcm1hdFRlbXBsYXRlKGNvbnRleHQubWVzc2FnZVRlbXBsYXRlLCBjb250ZXh0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gXCJpbnZhbGlkIHZhbHVlOiBcIiArICh0aGlzLm5hbWUgfHwgXCJ7dW5uYW1lZCB2YWxpZGF0b3J9XCIpO1xyXG4gICAgICB9XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIHJldHVybiBcIlVuYWJsZSB0byBmb3JtYXQgZXJyb3IgbWVzc2FnZVwiICsgZS50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdG9KU09OKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Jhc2VDb250ZXh0O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgQ3JlYXRlcyBhIHZhbGlkYXRvciBpbnN0YW5jZSBmcm9tIGEgSlNPTiBvYmplY3Qgb3IgYW4gYXJyYXkgb2YgaW5zdGFuY2VzIGZyb20gYW4gYXJyYXkgb2YgSlNPTiBvYmplY3RzLlxyXG4gIEBtZXRob2QgZnJvbUpTT05cclxuICBAc3RhdGljXHJcbiAgQHBhcmFtIGpzb24ge09iamVjdH0gSlNPTiBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSBzZXJpYWxpemVkIHZlcnNpb24gb2YgYSB2YWxpZGF0b3IuXHJcbiAgKiovXHJcbiAgcHVibGljIHN0YXRpYyBmcm9tSlNPTihqc29uOiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoanNvbikpIHtcclxuICAgICAgcmV0dXJuIGpzb24ubWFwKGZ1bmN0aW9uIChqcykge1xyXG4gICAgICAgIHJldHVybiBWYWxpZGF0b3IuZnJvbUpTT04oanMpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmIChqc29uIGluc3RhbmNlb2YgVmFsaWRhdG9yKSB7XHJcbiAgICAgIHJldHVybiBqc29uO1xyXG4gICAgfVxyXG4gICAgbGV0IHZhbGlkYXRvck5hbWUgPSBcIlZhbGlkYXRvci5cIiArIGpzb24ubmFtZTtcclxuICAgIGxldCBmbiA9IGNvbmZpZy5nZXRSZWdpc3RlcmVkRnVuY3Rpb24odmFsaWRhdG9yTmFtZSk7XHJcbiAgICBpZiAoIWZuKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBsb2NhdGUgYSB2YWxpZGF0b3IgbmFtZWQ6XCIgKyBqc29uLm5hbWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZuKGpzb24pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgUmVnaXN0ZXIgYSB2YWxpZGF0b3IgaW5zdGFuY2Ugc28gdGhhdCBhbnkgZGVzZXJpYWxpemVkIG1ldGFkYXRhIGNhbiByZWZlcmVuY2UgaXQuXHJcbiAgQG1ldGhvZCByZWdpc3RlclxyXG4gIEBzdGF0aWNcclxuICBAcGFyYW0gdmFsaWRhdG9yIHtWYWxpZGF0b3J9IFZhbGlkYXRvciB0byByZWdpc3Rlci5cclxuICAqKi9cclxuICBwdWJsaWMgc3RhdGljIHJlZ2lzdGVyKHZhbGlkYXRvcjogVmFsaWRhdG9yKSB7XHJcbiAgICBjb25maWcucmVnaXN0ZXJGdW5jdGlvbihmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiB2YWxpZGF0b3I7XHJcbiAgICB9LCBcIlZhbGlkYXRvci5cIiArIHZhbGlkYXRvci5uYW1lKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFJlZ2lzdGVyIGEgdmFsaWRhdG9yIGZhY3Rvcnkgc28gdGhhdCBhbnkgZGVzZXJpYWxpemVkIG1ldGFkYXRhIGNhbiByZWZlcmVuY2UgaXQuXHJcbiAgQG1ldGhvZCByZWdpc3RlckZhY3RvcnlcclxuICBAc3RhdGljXHJcbiAgQHBhcmFtIHZhbGlkYXRvckZhY3Rvcnkge0Z1bmN0aW9ufSBBIGZ1bmN0aW9uIHRoYXQgb3B0aW9uYWxseSB0YWtlcyBhIGNvbnRleHQgcHJvcGVydHkgYW5kIHJldHVybnMgYSBWYWxpZGF0b3IgaW5zdGFuY2UuXHJcbiAgQHBhcmFtIG5hbWUge1N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIHZhbGlkYXRvci5cclxuICAqKi9cclxuICBwdWJsaWMgc3RhdGljIHJlZ2lzdGVyRmFjdG9yeSh2YWxpZGF0b3JGYWN0b3J5OiAob3B0aW9ucz86IGFueSkgPT4gVmFsaWRhdG9yLCBuYW1lOiBzdHJpbmcpIHtcclxuICAgIGNvbmZpZy5yZWdpc3RlckZ1bmN0aW9uKHZhbGlkYXRvckZhY3RvcnksIFwiVmFsaWRhdG9yLlwiICsgbmFtZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBNYXAgb2Ygc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSB0ZW1wbGF0ZXMga2V5ZWQgYnkgdmFsaWRhdG9yIG5hbWUuXHJcbiAgWW91IGNhbiBhZGQgdG8gb3IgbW9kaWZ5IHRoaXMgb2JqZWN0IHRvIGN1c3RvbWl6ZSB0aGUgdGVtcGxhdGUgdXNlZCBmb3IgYW55IHZhbGlkYXRpb24gZXJyb3IgbWVzc2FnZS5cclxuICBAZXhhbXBsZVxyXG4gICAgICAvLyB2IGlzIHRoaXMgZnVuY3Rpb24gaXMgdGhlIHZhbHVlIHRvIGJlIHZhbGlkYXRlZCwgaW4gdGhpcyBjYXNlIGEgXCJjb3VudHJ5XCIgc3RyaW5nLlxyXG4gICAgICB2YXIgdmFsRm4gPSBmdW5jdGlvbiAodikge1xyXG4gICAgICAgICAgaWYgKHYgPT0gbnVsbCkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICByZXR1cm4gKGNvcmUuc3RyaW5nU3RhcnRzV2l0aCh2LCBcIlVTXCIpKTtcclxuICAgICAgfTtcclxuICAgICAgdmFyIGNvdW50cnlWYWxpZGF0b3IgPSBuZXcgVmFsaWRhdG9yKFwiY291bnRyeUlzVVNcIiwgdmFsRm4sIHsgZGlzcGxheU5hbWU6IFwiQ291bnRyeVwiIH0pO1xyXG4gICAgICBWYWxpZGF0b3IubWVzc2FnZVRlbXBsYXRlcy5jb3VudHJ5SXNVUyA9IFwiJyVkaXNwbGF5TmFtZSUnIG11c3Qgc3RhcnQgd2l0aCAnVVMnXCI7XHJcbiAgICAgIC8vIFRoaXMgd2lsbCBoYXZlIGEgc2ltaWxhciBlZmZlY3QgdG8gdGhpc1xyXG4gICAgICB2YXIgY291bnRyeVZhbGlkYXRvciA9IG5ldyBWYWxpZGF0b3IoXCJjb3VudHJ5SXNVU1wiLCB2YWxGbiwge1xyXG4gICAgICAgICAgZGlzcGxheU5hbWU6IFwiQ291bnRyeVwiLCBcclxuICAgICAgICAgIG1lc3NhZ2VUZW1wbGF0ZTogXCInJWRpc3BsYXlOYW1lJScgbXVzdCBzdGFydCB3aXRoICdVUydcIiBcclxuICAgICAgfSk7XHJcbiAgQHByb3BlcnR5IG1lc3NhZ2VUZW1wbGF0ZXMge09iamVjdH1cclxuICBAc3RhdGljXHJcbiAgKiovXHJcbiAgcHVibGljIHN0YXRpYyBtZXNzYWdlVGVtcGxhdGVzID0ge1xyXG4gICAgYm9vbDogXCInJWRpc3BsYXlOYW1lJScgbXVzdCBiZSBhICd0cnVlJyBvciAnZmFsc2UnIHZhbHVlXCIsXHJcbiAgICBjcmVkaXRDYXJkOiBcIlRoZSAlZGlzcGxheU5hbWUlIGlzIG5vdCBhIHZhbGlkIGNyZWRpdCBjYXJkIG51bWJlclwiLFxyXG4gICAgZGF0ZTogXCInJWRpc3BsYXlOYW1lJScgbXVzdCBiZSBhIGRhdGVcIixcclxuICAgIGR1cmF0aW9uOiBcIiclZGlzcGxheU5hbWUlJyBtdXN0IGJlIGEgSVNPODYwMSBkdXJhdGlvbiBzdHJpbmcsIHN1Y2ggYXMgJ1AzSDI0TTYwUydcIixcclxuICAgIGVtYWlsQWRkcmVzczogXCJUaGUgJWRpc3BsYXlOYW1lJSAnJXZhbHVlJScgaXMgbm90IGEgdmFsaWQgZW1haWwgYWRkcmVzc1wiLFxyXG4gICAgZ3VpZDogXCInJWRpc3BsYXlOYW1lJScgbXVzdCBiZSBhIEdVSURcIixcclxuICAgIGludGVnZXI6IFwiJyVkaXNwbGF5TmFtZSUnIG11c3QgYmUgYW4gaW50ZWdlclwiLFxyXG4gICAgaW50ZWdlclJhbmdlOiBcIiclZGlzcGxheU5hbWUlJyBtdXN0IGJlIGFuIGludGVnZXIgYmV0d2VlbiB0aGUgdmFsdWVzIG9mICVtaW5WYWx1ZSUgYW5kICVtYXhWYWx1ZSVcIixcclxuICAgIG1heExlbmd0aDogXCInJWRpc3BsYXlOYW1lJScgbXVzdCBiZSBhIHN0cmluZyB3aXRoICVtYXhMZW5ndGglIGNoYXJhY3RlcnMgb3IgbGVzc1wiLFxyXG4gICAgbnVtYmVyOiBcIiclZGlzcGxheU5hbWUlJyBtdXN0IGJlIGEgbnVtYmVyXCIsXHJcbiAgICBwaG9uZTogXCJUaGUgJWRpc3BsYXlOYW1lJSAnJXZhbHVlJScgaXMgbm90IGEgdmFsaWQgcGhvbmUgbnVtYmVyXCIsXHJcbiAgICByZWd1bGFyRXhwcmVzc2lvbjogXCJUaGUgJWRpc3BsYXlOYW1lJSAnJXZhbHVlJScgZG9lcyBub3QgbWF0Y2ggJyVleHByZXNzaW9uJSdcIixcclxuICAgIHJlcXVpcmVkOiBcIiclZGlzcGxheU5hbWUlJyBpcyByZXF1aXJlZFwiLFxyXG4gICAgc3RyaW5nOiBcIiclZGlzcGxheU5hbWUlJyBtdXN0IGJlIGEgc3RyaW5nXCIsXHJcbiAgICBzdHJpbmdMZW5ndGg6IFwiJyVkaXNwbGF5TmFtZSUnIG11c3QgYmUgYSBzdHJpbmcgd2l0aCBiZXR3ZWVuICVtaW5MZW5ndGglIGFuZCAlbWF4TGVuZ3RoJSBjaGFyYWN0ZXJzXCIsXHJcbiAgICB1cmw6IFwiVGhlICVkaXNwbGF5TmFtZSUgJyV2YWx1ZSUnIGlzIG5vdCBhIHZhbGlkIHVybFwiXHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyBhIHN0YW5kYXJkICdyZXF1aXJlZCB2YWx1ZScgVmFsaWRhdG9yXHJcbiAgQGV4YW1wbGVcclxuICAgICAgLy8gQXNzdW1lIGVtMSBpcyBhIHByZWV4aXN0aW5nIEVudGl0eU1hbmFnZXIuXHJcbiAgICAgIHZhciBjdXN0VHlwZSA9IGVtMS5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoXCJDdXN0b21lclwiKTtcclxuICAgICAgdmFyIHJlZ2lvblByb3BlcnR5IC0gY3VzdFR5cGUuZ2V0UHJvcGVydHkoXCJSZWdpb25cIik7XHJcbiAgICAgIC8vIE1ha2VzIFwiUmVnaW9uXCIgb24gQ3VzdG9tZXIgYSByZXF1aXJlZCBwcm9wZXJ0eS5cclxuICAgICAgcmVnaW9uUHJvcGVydHkudmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvci5yZXF1aXJlZCgpKTtcclxuICAgICAgLy8gb3IgdG8gYWxsb3cgZW1wdHkgc3RyaW5nc1xyXG4gICAgICByZWdpb25Qcm9wZXJ0eS52YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9yLnJlcXVpcmVkKHsgYWxsb3dFbXB0eVN0cmluZ3M6IHRydWUgfSk7KTtcclxuICBAbWV0aG9kIHJlcXVpcmVkXHJcbiAgQHN0YXRpY1xyXG4gIEBwYXJhbSBjb250ZXh0IHtPYmplY3R9XHJcbiAgQHBhcmFtIFtjb250ZXh0LmFsbG93RW1wdHlTdHJpbmdzXSB7Qm9vbGVhbn0gSWYgdGhpcyBwYXJhbWV0ZXIgaXMgb21pdHRlZCBvciBmYWxzZSB0aGVuIGVtcHR5IHN0cmluZ3MgZG8gTk9UIHBhc3MgdmFsaWRhdGlvbi5cclxuICBAcmV0dXJuIHtWYWxpZGF0b3J9IEEgbmV3IFZhbGlkYXRvclxyXG4gICoqL1xyXG4gIHB1YmxpYyBzdGF0aWMgcmVxdWlyZWQgPSBmdW5jdGlvbihjb250ZXh0PzogYW55KSB7XHJcbiAgICBsZXQgdmFsRm4gPSBmdW5jdGlvbiAodjogYW55LCBjdHg6IGFueSkge1xyXG4gICAgICBpZiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICBpZiAoY3R4ICYmIGN0eC5hbGxvd0VtcHR5U3RyaW5ncykgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgcmV0dXJuIHYubGVuZ3RoID4gMDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gdiAhPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG5ldyBWYWxpZGF0b3IoXCJyZXF1aXJlZFwiLCB2YWxGbiwgY29udGV4dCk7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyBhIHN0YW5kYXJkIG1heGltdW0gc3RyaW5nIGxlbmd0aCBWYWxpZGF0b3I7IHRoZSBtYXhpbXVtIGxlbmd0aCBtdXN0IGJlIHNwZWNpZmllZFxyXG4gIEBleGFtcGxlXHJcbiAgICAgIC8vIEFzc3VtZSBlbTEgaXMgYSBwcmVleGlzdGluZyBFbnRpdHlNYW5hZ2VyLlxyXG4gICAgICB2YXIgY3VzdFR5cGUgPSBlbTEubWV0YWRhdGFTdG9yZS5nZXRFbnRpdHlUeXBlKFwiQ3VzdG9tZXJcIik7XHJcbiAgICAgIHZhciByZWdpb25Qcm9wZXJ0eSAtIGN1c3RUeXBlLmdldFByb3BlcnR5KFwiUmVnaW9uXCIpO1xyXG4gICAgICAvLyBWYWxpZGF0ZXMgdGhhdCB0aGUgdmFsdWUgb2YgdGhlIFJlZ2lvbiBwcm9wZXJ0eSBvbiBDdXN0b21lciB3aWxsIGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byA1IGNoYXJhY3RlcnMuXHJcbiAgICAgIHJlZ2lvblByb3BlcnR5LnZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3IubWF4TGVuZ3RoKCB7bWF4TGVuZ3RoOiA1fSkpO1xyXG4gIEBtZXRob2QgbWF4TGVuZ3RoXHJcbiAgQHN0YXRpY1xyXG4gIEBwYXJhbSBjb250ZXh0IHtPYmplY3R9XHJcbiAgQHBhcmFtIGNvbnRleHQubWF4TGVuZ3RoIHtJbnRlZ2VyfVxyXG4gIEByZXR1cm4ge1ZhbGlkYXRvcn0gQSBuZXcgVmFsaWRhdG9yXHJcbiAgKiovXHJcbiAgcHVibGljIHN0YXRpYyBtYXhMZW5ndGggPSBmdW5jdGlvbihjb250ZXh0OiBhbnkpIHtcclxuICAgIGxldCB2YWxGbiA9IGZ1bmN0aW9uICh2OiBhbnksIGN0eDogYW55KSB7XHJcbiAgICAgIGlmICh2ID09IG51bGwpIHJldHVybiB0cnVlO1xyXG4gICAgICBpZiAodHlwZW9mICh2KSAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZhbHNlO1xyXG4gICAgICByZXR1cm4gdi5sZW5ndGggPD0gY3R4Lm1heExlbmd0aDtcclxuICAgIH07XHJcbiAgICByZXR1cm4gbmV3IFZhbGlkYXRvcihcIm1heExlbmd0aFwiLCB2YWxGbiwgY29udGV4dCk7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyBhIHN0YW5kYXJkIHN0cmluZyBsZW5ndGggVmFsaWRhdG9yOyBib3RoIG1pbmltdW0gYW5kIG1heGltdW0gbGVuZ3RocyBtdXN0IGJlIHNwZWNpZmllZC5cclxuICBAZXhhbXBsZVxyXG4gICAgICAvLyBBc3N1bWUgZW0xIGlzIGEgcHJlZXhpc3RpbmcgRW50aXR5TWFuYWdlci5cclxuICAgICAgdmFyIGN1c3RUeXBlID0gZW0xLm1ldGFkYXRhU3RvcmUuZ2V0RW50aXR5VHlwZShcIkN1c3RvbWVyXCIpO1xyXG4gICAgICB2YXIgcmVnaW9uUHJvcGVydHkgLSBjdXN0VHlwZS5nZXRQcm9wZXJ0eShcIlJlZ2lvblwiKTtcclxuICAgICAgLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHZhbHVlIG9mIHRoZSBSZWdpb24gcHJvcGVydHkgb24gQ3VzdG9tZXIgd2lsbCBiZVxyXG4gICAgICAvLyBiZXR3ZWVuIDIgYW5kIDUgY2hhcmFjdGVyc1xyXG4gICAgICByZWdpb25Qcm9wZXJ0eS52YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9yLnN0cmluZ0xlbmd0aCgge21pbkxlbmd0aDogMiwgbWF4TGVuZ3RoOiA1fSk7XHJcbiAgQG1ldGhvZCBzdHJpbmdMZW5ndGhcclxuICBAc3RhdGljXHJcbiAgQHBhcmFtIGNvbnRleHQge09iamVjdH1cclxuICBAcGFyYW0gY29udGV4dC5tYXhMZW5ndGgge0ludGVnZXJ9XHJcbiAgQHBhcmFtIGNvbnRleHQubWluTGVuZ3RoIHtJbnRlZ2VyfVxyXG4gIEByZXR1cm4ge1ZhbGlkYXRvcn0gQSBuZXcgVmFsaWRhdG9yXHJcbiAgKiovXHJcbiAgcHVibGljIHN0YXRpYyBzdHJpbmdMZW5ndGggPSBmdW5jdGlvbiAoY29udGV4dDogYW55KSB7XHJcbiAgICBsZXQgdmFsRm4gPSBmdW5jdGlvbiAodjogYW55LCBjdHg6IGFueSkge1xyXG4gICAgICBpZiAodiA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgaWYgKHR5cGVvZiAodikgIT09IFwic3RyaW5nXCIpIHJldHVybiBmYWxzZTtcclxuICAgICAgaWYgKGN0eC5taW5MZW5ndGggIT0gbnVsbCAmJiB2Lmxlbmd0aCA8IGN0eC5taW5MZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgICAgaWYgKGN0eC5tYXhMZW5ndGggIT0gbnVsbCAmJiB2Lmxlbmd0aCA+IGN0eC5tYXhMZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG5ldyBWYWxpZGF0b3IoXCJzdHJpbmdMZW5ndGhcIiwgdmFsRm4sIGNvbnRleHQpO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gIFJldHVybnMgYSBzdGFuZGFyZCBzdHJpbmcgZGF0YVR5cGUgVmFsaWRhdG9yLlxyXG4gIEBleGFtcGxlXHJcbiAgICAgIC8vIEFzc3VtZSBlbTEgaXMgYSBwcmVleGlzdGluZyBFbnRpdHlNYW5hZ2VyLlxyXG4gICAgICB2YXIgY3VzdFR5cGUgPSBlbTEubWV0YWRhdGFTdG9yZS5nZXRFbnRpdHlUeXBlKFwiQ3VzdG9tZXJcIik7XHJcbiAgICAgIHZhciByZWdpb25Qcm9wZXJ0eSAtIGN1c3RUeXBlLmdldFByb3BlcnR5KFwiUmVnaW9uXCIpO1xyXG4gICAgICAvLyBWYWxpZGF0ZXMgdGhhdCB0aGUgdmFsdWUgb2YgdGhlIFJlZ2lvbiBwcm9wZXJ0eSBvbiBDdXN0b21lciBpcyBhIHN0cmluZy5cclxuICAgICAgcmVnaW9uUHJvcGVydHkudmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvci5zdHJpbmcoKSk7XHJcbiAgQG1ldGhvZCBzdHJpbmdcclxuICBAc3RhdGljXHJcbiAgQHJldHVybiB7VmFsaWRhdG9yfSBBIG5ldyBWYWxpZGF0b3JcclxuICAqKi9cclxuICBwdWJsaWMgc3RhdGljIHN0cmluZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCB2YWxGbiA9IGZ1bmN0aW9uICh2OiBhbnkpIHtcclxuICAgICAgaWYgKHYgPT0gbnVsbCkgcmV0dXJuIHRydWU7XHJcbiAgICAgIHJldHVybiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBuZXcgVmFsaWRhdG9yKFwic3RyaW5nXCIsIHZhbEZuKTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICBSZXR1cm5zIGEgR3VpZCBkYXRhIHR5cGUgVmFsaWRhdG9yLlxyXG4gIEBleGFtcGxlXHJcbiAgICAgIC8vIEFzc3VtZSBlbTEgaXMgYSBwcmVleGlzdGluZyBFbnRpdHlNYW5hZ2VyLlxyXG4gICAgICB2YXIgY3VzdFR5cGUgPSBlbTEubWV0YWRhdGFTdG9yZS5nZXRFbnRpdHlUeXBlKFwiQ3VzdG9tZXJcIik7XHJcbiAgICAgIHZhciBjdXN0b21lcklkUHJvcGVydHkgLSBjdXN0VHlwZS5nZXRQcm9wZXJ0eShcIkN1c3RvbWVySURcIik7XHJcbiAgICAgIC8vIFZhbGlkYXRlcyB0aGF0IHRoZSB2YWx1ZSBvZiB0aGUgQ3VzdG9tZXJJRCBwcm9wZXJ0eSBvbiBDdXN0b21lciBpcyBhIEd1aWQuXHJcbiAgICAgIGN1c3RvbWVySWRQcm9wZXJ0eS52YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9yLmd1aWQoKSk7XHJcbiAgQG1ldGhvZCBndWlkXHJcbiAgQHN0YXRpY1xyXG4gIEByZXR1cm4ge1ZhbGlkYXRvcn0gQSBuZXcgVmFsaWRhdG9yXHJcbiAgKiovXHJcbiAgcHVibGljIHN0YXRpYyBndWlkID0gZnVuY3Rpb24gKCkge1xyXG4gICAgbGV0IHZhbEZuID0gZnVuY3Rpb24gKHY6IGFueSkge1xyXG4gICAgICBpZiAodiA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgcmV0dXJuIGNvcmUuaXNHdWlkKHYpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBuZXcgVmFsaWRhdG9yKFwiZ3VpZFwiLCB2YWxGbik7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyBhIElTTyA4NjAxIGR1cmF0aW9uIHN0cmluZyAgVmFsaWRhdG9yLlxyXG4gIEBleGFtcGxlXHJcbiAgICAgIC8vIEFzc3VtZSBlbTEgaXMgYSBwcmVleGlzdGluZyBFbnRpdHlNYW5hZ2VyLlxyXG4gICAgICB2YXIgZXZlbnRUeXBlID0gZW0xLm1ldGFkYXRhU3RvcmUuZ2V0RW50aXR5VHlwZShcIkV2ZW50XCIpO1xyXG4gICAgICB2YXIgZWxhcHNlZFRpbWVQcm9wZXJ0eSAtIGV2ZW50VHlwZS5nZXRQcm9wZXJ0eShcIkVsYXBzZWRUaW1lXCIpO1xyXG4gICAgICAvLyBWYWxpZGF0ZXMgdGhhdCB0aGUgdmFsdWUgb2YgdGhlIEVsYXBzZWRUaW1lIHByb3BlcnR5IG9uIEN1c3RvbWVyIGlzIGEgZHVyYXRpb24uXHJcbiAgICAgIGVsYXBzZWRUaW1lUHJvcGVydHkudmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvci5kdXJhdGlvbigpKTtcclxuICBAbWV0aG9kIGR1cmF0aW9uXHJcbiAgQHN0YXRpY1xyXG4gIEByZXR1cm4ge1ZhbGlkYXRvcn0gQSBuZXcgVmFsaWRhdG9yXHJcbiAgKiovXHJcbiAgcHVibGljIHN0YXRpYyBkdXJhdGlvbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCB2YWxGbiA9IGZ1bmN0aW9uICh2OiBhbnkpIHtcclxuICAgICAgaWYgKHYgPT0gbnVsbCkgcmV0dXJuIHRydWU7XHJcbiAgICAgIHJldHVybiBjb3JlLmlzRHVyYXRpb24odik7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG5ldyBWYWxpZGF0b3IoXCJkdXJhdGlvblwiLCB2YWxGbik7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyBhIHN0YW5kYXJkIG51bWVyaWMgZGF0YSB0eXBlIFZhbGlkYXRvci5cclxuICBAZXhhbXBsZVxyXG4gICAgICAvLyBBc3N1bWUgZW0xIGlzIGEgcHJlZXhpc3RpbmcgRW50aXR5TWFuYWdlci5cclxuICAgICAgdmFyIG9yZGVyVHlwZSA9IGVtMS5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoXCJPcmRlclwiKTtcclxuICAgICAgdmFyIGZyZWlnaHRQcm9wZXJ0eSAtIG9yZGVyVHlwZS5nZXRQcm9wZXJ0eShcIkZyZWlnaHRcIik7XHJcbiAgICAgIC8vIFZhbGlkYXRlcyB0aGF0IHRoZSB2YWx1ZSBvZiB0aGUgRnJlaWdodCBwcm9wZXJ0eSBvbiBPcmRlciBpcyBhIG51bWJlci5cclxuICAgICAgZnJlaWdodFByb3BlcnR5LnZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3IubnVtYmVyKCkpO1xyXG4gIEBtZXRob2QgbnVtYmVyXHJcbiAgQHN0YXRpY1xyXG4gIEByZXR1cm4ge1ZhbGlkYXRvcn0gQSBuZXcgVmFsaWRhdG9yXHJcbiAgKiovXHJcblxyXG4gICAgLy8gVE9ETzogbWF5IG5lZWQgdG8gaGF2ZSBzZXBlcmF0ZSBsb2dpYyBmb3Igc2luZ2xlLlxyXG4gIHB1YmxpYyBzdGF0aWMgbnVtYmVyID0gZnVuY3Rpb24oY29udGV4dD86IGFueSkge1xyXG4gICAgbGV0IHZhbEZuID0gZnVuY3Rpb24gKHY6IGFueSwgY3R4OiBhbnkpIHtcclxuICAgICAgaWYgKHYgPT0gbnVsbCkgcmV0dXJuIHRydWU7XHJcbiAgICAgIGlmICh0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIiAmJiBjdHggJiYgY3R4LmFsbG93U3RyaW5nKSB7XHJcbiAgICAgICAgdiA9IHBhcnNlRmxvYXQodik7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuICh0eXBlb2YgdiA9PT0gXCJudW1iZXJcIiAmJiAhaXNOYU4odikpO1xyXG4gICAgfTtcclxuICAgIHJldHVybiBuZXcgVmFsaWRhdG9yKFwibnVtYmVyXCIsIHZhbEZuLCBjb250ZXh0KTtcclxuICB9O1xyXG4gIHB1YmxpYyBzdGF0aWMgZG91YmxlID0gVmFsaWRhdG9yLm51bWJlcjtcclxuICBwdWJsaWMgc3RhdGljIHNpbmdsZSA9IFZhbGlkYXRvci5udW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gIFJldHVybnMgYSBzdGFuZGFyZCBsYXJnZSBpbnRlZ2VyIGRhdGEgdHlwZSAtIDY0IGJpdCAtIFZhbGlkYXRvci5cclxuICBAZXhhbXBsZVxyXG4gICAgICAvLyBBc3N1bWUgZW0xIGlzIGEgcHJlZXhpc3RpbmcgRW50aXR5TWFuYWdlci5cclxuICAgICAgdmFyIG9yZGVyVHlwZSA9IGVtMS5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoXCJPcmRlclwiKTtcclxuICAgICAgdmFyIGZyZWlnaHRQcm9wZXJ0eSAtIG9yZGVyVHlwZS5nZXRQcm9wZXJ0eShcIkZyZWlnaHRcIik7XHJcbiAgICAgIC8vIFZhbGlkYXRlcyB0aGF0IHRoZSB2YWx1ZSBvZiB0aGUgRnJlaWdodCBwcm9wZXJ0eSBvbiBPcmRlciBpcyB3aXRoaW4gdGhlIHJhbmdlIG9mIGEgNjQgYml0IGludGVnZXIuXHJcbiAgICAgIGZyZWlnaHRQcm9wZXJ0eS52YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9yLmludDY0KCkpO1xyXG4gIEBtZXRob2QgaW50NjRcclxuICBAc3RhdGljXHJcbiAgQHJldHVybiB7VmFsaWRhdG9yfSBBIG5ldyBWYWxpZGF0b3JcclxuICAqKi9cclxuICBwdWJsaWMgc3RhdGljIGludGVnZXIgPSBmdW5jdGlvbihjb250ZXh0OiBhbnkpIHtcclxuICAgIGxldCB2YWxGbiA9IGZ1bmN0aW9uICh2OiBhbnksIGN0eDogYW55KSB7XHJcbiAgICAgIGlmICh2ID09IG51bGwpIHJldHVybiB0cnVlO1xyXG4gICAgICBpZiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIgJiYgY3R4ICYmIGN0eC5hbGxvd1N0cmluZykge1xyXG4gICAgICAgIHYgPSBwYXJzZUludCh2LCAxMCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuICh0eXBlb2YgdiA9PT0gXCJudW1iZXJcIikgJiYgKCFpc05hTih2KSkgJiYgTWF0aC5mbG9vcih2KSA9PT0gdjtcclxuICAgIH07XHJcbiAgICByZXR1cm4gbmV3IFZhbGlkYXRvcihcImludGVnZXJcIiwgdmFsRm4sIGNvbnRleHQpO1xyXG4gIH07XHJcbiAgcHVibGljIHN0YXRpYyBpbnQ2NCA9IFZhbGlkYXRvci5pbnRlZ2VyO1xyXG5cclxuICAvKipcclxuICBSZXR1cm5zIGEgc3RhbmRhcmQgMzIgYml0IGludGVnZXIgZGF0YSB0eXBlIFZhbGlkYXRvci5cclxuICBAZXhhbXBsZVxyXG4gICAgICAvLyBBc3N1bWUgZW0xIGlzIGEgcHJlZXhpc3RpbmcgRW50aXR5TWFuYWdlci5cclxuICAgICAgdmFyIG9yZGVyVHlwZSA9IGVtMS5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoXCJPcmRlclwiKTtcclxuICAgICAgdmFyIGZyZWlnaHRQcm9wZXJ0eSAtIG9yZGVyVHlwZS5nZXRQcm9wZXJ0eShcIkZyZWlnaHRcIik7XHJcbiAgICAgIGZyZWlnaHRQcm9wZXJ0eS52YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9yLmludDMyKCkpO1xyXG4gIEBtZXRob2QgaW50MzJcclxuICBAc3RhdGljXHJcbiAgQHJldHVybiB7VmFsaWRhdG9yfSBBIG5ldyBWYWxpZGF0b3JcclxuICAqKi9cclxuICBwdWJsaWMgc3RhdGljIGludDMyID0gZnVuY3Rpb24oY29udGV4dDogYW55KSB7XHJcbiAgICByZXR1cm4gaW50UmFuZ2VWYWxpZGF0b3JDdG9yKFwiaW50MzJcIiwgSU5UMzJfTUlOLCBJTlQzMl9NQVgsIGNvbnRleHQpKCk7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyBhIHN0YW5kYXJkIDE2IGJpdCBpbnRlZ2VyIGRhdGEgdHlwZSBWYWxpZGF0b3IuXHJcbiAgQGV4YW1wbGVcclxuICAgICAgLy8gQXNzdW1lIGVtMSBpcyBhIHByZWV4aXN0aW5nIEVudGl0eU1hbmFnZXIuXHJcbiAgICAgIHZhciBvcmRlclR5cGUgPSBlbTEubWV0YWRhdGFTdG9yZS5nZXRFbnRpdHlUeXBlKFwiT3JkZXJcIik7XHJcbiAgICAgIHZhciBmcmVpZ2h0UHJvcGVydHkgLSBvcmRlclR5cGUuZ2V0UHJvcGVydHkoXCJGcmVpZ2h0XCIpO1xyXG4gICAgICAvLyBWYWxpZGF0ZXMgdGhhdCB0aGUgdmFsdWUgb2YgdGhlIEZyZWlnaHQgcHJvcGVydHkgb24gT3JkZXIgaXMgd2l0aGluIHRoZSByYW5nZSBvZiBhIDE2IGJpdCBpbnRlZ2VyLlxyXG4gICAgICBmcmVpZ2h0UHJvcGVydHkudmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvci5pbnQxNigpKTtcclxuICBAbWV0aG9kIGludDE2XHJcbiAgQHN0YXRpY1xyXG4gIEByZXR1cm4ge1ZhbGlkYXRvcn0gQSBuZXcgVmFsaWRhdG9yXHJcbiAgKiovXHJcbiAgcHVibGljIHN0YXRpYyBpbnQxNiA9IGZ1bmN0aW9uKGNvbnRleHQ6IGFueSkge1xyXG4gICAgcmV0dXJuIGludFJhbmdlVmFsaWRhdG9yQ3RvcihcImludDE2XCIsIElOVDE2X01JTiwgSU5UMTZfTUFYLCBjb250ZXh0KSgpO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gIFJldHVybnMgYSBzdGFuZGFyZCBieXRlIGRhdGEgdHlwZSBWYWxpZGF0b3IuIChUaGlzIGlzIGEgaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDI1NSBpbmNsdXNpdmUgZm9yIGpzIHB1cnBvc2VzKS5cclxuICBAZXhhbXBsZVxyXG4gICAgICAvLyBBc3N1bWUgZW0xIGlzIGEgcHJlZXhpc3RpbmcgRW50aXR5TWFuYWdlci5cclxuICAgICAgdmFyIG9yZGVyVHlwZSA9IGVtMS5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoXCJPcmRlclwiKTtcclxuICAgICAgdmFyIGZyZWlnaHRQcm9wZXJ0eSAtIG9yZGVyVHlwZS5nZXRQcm9wZXJ0eShcIkZyZWlnaHRcIik7XHJcbiAgICAgIC8vIFZhbGlkYXRlcyB0aGF0IHRoZSB2YWx1ZSBvZiB0aGUgRnJlaWdodCBwcm9wZXJ0eSBvbiBPcmRlciBpcyB3aXRoaW4gdGhlIHJhbmdlIG9mIGEgMTYgYml0IGludGVnZXIuXHJcbiAgICAgIC8vIFByb2JhYmx5IG5vdCBhIHZlcnkgZ29vZCB2YWxpZGF0aW9uIHRvIHBsYWNlIG9uIHRoZSBGcmVpZ2h0IHByb3BlcnR5LlxyXG4gICAgICByZWdpb25Qcm9wZXJ0eS52YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9yLmJ5dGUoKSk7XHJcbiAgQG1ldGhvZCBieXRlXHJcbiAgQHN0YXRpY1xyXG4gIEByZXR1cm4ge1ZhbGlkYXRvcn0gQSBuZXcgVmFsaWRhdG9yXHJcbiAgKiovXHJcbiAgcHVibGljIHN0YXRpYyBieXRlID0gZnVuY3Rpb24oY29udGV4dDogYW55KSB7XHJcbiAgICByZXR1cm4gaW50UmFuZ2VWYWxpZGF0b3JDdG9yKFwiYnl0ZVwiLCBCWVRFX01JTiwgQllURV9NQVgsIGNvbnRleHQpKCk7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyBhIHN0YW5kYXJkIGJvb2xlYW4gZGF0YSB0eXBlIFZhbGlkYXRvci5cclxuICBAZXhhbXBsZVxyXG4gICAgICAvLyBBc3N1bWUgZW0xIGlzIGEgcHJlZXhpc3RpbmcgRW50aXR5TWFuYWdlci5cclxuICAgICAgdmFyIHByb2R1Y3RUeXBlID0gZW0xLm1ldGFkYXRhU3RvcmUuZ2V0RW50aXR5VHlwZShcIlByb2R1Y3RcIik7XHJcbiAgICAgIHZhciBkaXNjb250aW51ZWRQcm9wZXJ0eSAtIHByb2R1Y3RUeXBlLmdldFByb3BlcnR5KFwiRGlzY29udGludWVkXCIpO1xyXG4gICAgICAvLyBWYWxpZGF0ZXMgdGhhdCB0aGUgdmFsdWUgb2YgdGhlIERpc2NvbnRpbnVlZCBwcm9wZXJ0eSBvbiBQcm9kdWN0IGlzIGEgYm9vbGVhblxyXG4gICAgICBkaXNjb250aW51ZWRQcm9wZXJ0eS52YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9yLmJvb2woKSk7XHJcbiAgQG1ldGhvZCBib29sXHJcbiAgQHN0YXRpY1xyXG4gIEByZXR1cm4ge1ZhbGlkYXRvcn0gQSBuZXcgVmFsaWRhdG9yXHJcbiAgKiovXHJcbiAgcHVibGljIHN0YXRpYyBib29sID0gZnVuY3Rpb24oKSB7XHJcbiAgICBsZXQgdmFsRm4gPSBmdW5jdGlvbiAodjogYW55KSB7XHJcbiAgICAgIGlmICh2ID09IG51bGwpIHJldHVybiB0cnVlO1xyXG4gICAgICByZXR1cm4gKHYgPT09IHRydWUpIHx8ICh2ID09PSBmYWxzZSk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG5ldyBWYWxpZGF0b3IoXCJib29sXCIsIHZhbEZuKTtcclxuICB9O1xyXG5cclxuICBwdWJsaWMgc3RhdGljIG5vbmUgPSBmdW5jdGlvbigpIHtcclxuICAgIGxldCB2YWxGbiA9IGZ1bmN0aW9uICh2OiBhbnkpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIG5ldyBWYWxpZGF0b3IoXCJub25lXCIsIHZhbEZuKTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICBSZXR1cm5zIGEgc3RhbmRhcmQgZGF0ZSBkYXRhIHR5cGUgVmFsaWRhdG9yLlxyXG4gIEBleGFtcGxlXHJcbiAgICAgIC8vIEFzc3VtZSBlbTEgaXMgYSBwcmVleGlzdGluZyBFbnRpdHlNYW5hZ2VyLlxyXG4gICAgICB2YXIgb3JkZXJUeXBlID0gZW0xLm1ldGFkYXRhU3RvcmUuZ2V0RW50aXR5VHlwZShcIk9yZGVyXCIpO1xyXG4gICAgICB2YXIgb3JkZXJEYXRlUHJvcGVydHkgLSBvcmRlclR5cGUuZ2V0UHJvcGVydHkoXCJPcmRlckRhdGVcIik7XHJcbiAgICAgIC8vIFZhbGlkYXRlcyB0aGF0IHRoZSB2YWx1ZSBvZiB0aGUgT3JkZXJEYXRlIHByb3BlcnR5IG9uIE9yZGVyIGlzIGEgZGF0ZVxyXG4gICAgICAvLyBQcm9iYWJseSBub3QgYSB2ZXJ5IGdvb2QgdmFsaWRhdGlvbiB0byBwbGFjZSBvbiB0aGUgRnJlaWdodCBwcm9wZXJ0eS5cclxuICAgICAgb3JkZXJEYXRlUHJvcGVydHkudmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvci5kYXRlKCkpO1xyXG4gIEBtZXRob2QgZGF0ZVxyXG4gIEBzdGF0aWNcclxuICBAcmV0dXJuIHtWYWxpZGF0b3J9IEEgbmV3IFZhbGlkYXRvclxyXG4gICoqL1xyXG4gIHB1YmxpYyBzdGF0aWMgZGF0ZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgbGV0IHZhbEZuID0gZnVuY3Rpb24gKHY6IGFueSkge1xyXG4gICAgICBpZiAodiA9PSBudWxsKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgaWYgKHR5cGVvZiB2ID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIHJldHVybiAhaXNOYU4oRGF0ZS5wYXJzZSh2KSk7XHJcbiAgICAgICAgICAvLyBvbGQgY29kZVxyXG4gICAgICAgICAgLy8gcmV0dXJuIF9faXNEYXRlKG5ldyBEYXRlKHYpKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBjb3JlLmlzRGF0ZSh2KTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJldHVybiBuZXcgVmFsaWRhdG9yKFwiZGF0ZVwiLCB2YWxGbik7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyBhIGNyZWRpdCBjYXJkIG51bWJlciB2YWxpZGF0b3JcclxuICBQZXJmb3JtcyBhIGx1aG4gYWxnb3JpdGhtIGNoZWNrc3VtIHRlc3QgZm9yIHBsYXVzYWJpbGl0eVxyXG4gIGNhdGNoZXMgc2ltcGxlIG1pc3Rha2VzOyBvbmx5IHNlcnZpY2Uga25vd3MgZm9yIHN1cmVcclxuICBAZXhhbXBsZVxyXG4gICAgICAvLyBBc3N1bWUgZW0gaXMgYSBwcmVleGlzdGluZyBFbnRpdHlNYW5hZ2VyLlxyXG4gICAgICB2YXIgcGVyc29uVHlwZSA9IGVtLm1ldGFkYXRhU3RvcmUuZ2V0RW50aXR5VHlwZShcIlBlcnNvblwiKTtcclxuICAgICAgdmFyIGNyZWRpdENhcmRQcm9wZXJ0eSA9IHBlcnNvblR5cGUuZ2V0UHJvcGVydHkoXCJjcmVkaXRDYXJkXCIpO1xyXG4gICAgICAvLyBWYWxpZGF0ZXMgdGhhdCB0aGUgdmFsdWUgb2YgdGhlIFBlcnNvbi5jcmVkaXRDYXJkIHByb3BlcnR5IGlzIGNyZWRpdCBjYXJkLlxyXG4gICAgICBjcmVkaXRDYXJkUHJvcGVydHkudmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvci5jcmVkaXRDYXJkKCkpO1xyXG4gIEBtZXRob2QgY3JlZGl0Q2FyZFxyXG4gIEBzdGF0aWNcclxuICBAcGFyYW0gW2NvbnRleHRdIHtPYmplY3R9IG9wdGlvbmFsIHBhcmFtZXRlcnMgdG8gcGFzcyB0aHJvdWdoIHRvIHZhbGlkYXRpb24gY29uc3RydWN0b3JcclxuICBAcmV0dXJuIHtWYWxpZGF0b3J9IEEgbmV3IFZhbGlkYXRvclxyXG4gICoqL1xyXG4gIHB1YmxpYyBzdGF0aWMgY3JlZGl0Q2FyZCA9IGZ1bmN0aW9uKGNvbnRleHQ/OiBhbnkpIHtcclxuICAgIGZ1bmN0aW9uIHZhbEZuKHY6IGFueSkge1xyXG4gICAgICBpZiAodiA9PSBudWxsIHx8IHYgPT09ICcnKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgaWYgKHR5cGVvZiAodikgIT09ICdzdHJpbmcnKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgIHYgPSB2LnJlcGxhY2UoLyhcXC18XFxzKS9nLCBcIlwiKTsgLy8gcmVtb3ZlIGRhc2hlcyBhbmQgc3BhY2VzXHJcbiAgICAgIGlmICghdiB8fCAvXFxELy50ZXN0KHYpKSByZXR1cm4gZmFsc2U7IC8vIGFsbCBkaWdpdHMsIG5vdCBlbXB0eVxyXG4gICAgICByZXR1cm4gbHVobih2KTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgVmFsaWRhdG9yKCdjcmVkaXRDYXJkJywgdmFsRm4sIGNvbnRleHQpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKipcclxuICBSZXR1cm5zIGEgcmVndWxhciBleHByZXNzaW9uIHZhbGlkYXRvcjsgdGhlIGV4cHJlc3Npb24gbXVzdCBiZSBzcGVjaWZpZWRcclxuICBAZXhhbXBsZVxyXG4gICAgICAvLyBBZGQgdmFsaWRhdG9yIHRvIGEgcHJvcGVydHkuIEFzc3VtZSBlbSBpcyBhIHByZWV4aXN0aW5nIEVudGl0eU1hbmFnZXIuXHJcbiAgICAgIHZhciBjdXN0b21lclR5cGUgPSBlbS5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoXCJDdXN0b21lclwiKTtcclxuICAgICAgdmFyIHJlZ2lvblByb3BlcnR5ID0gY3VzdG9tZXJUeXBlLmdldFByb3BlcnR5KFwiUmVnaW9uXCIpO1xyXG4gICAgICAvLyBWYWxpZGF0ZXMgdGhhdCB0aGUgdmFsdWUgb2YgQ3VzdG9tZXIuUmVnaW9uIGlzIDIgY2hhciB1cHBlcmNhc2UgYWxwaGEuXHJcbiAgICAgIHJlZ2lvblByb3BlcnR5LnZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3IucmVndWxhckV4cHJlc3Npb24oIHtleHByZXNzaW9uOiAnXltBLVpdezJ9JCd9ICk7XHJcbiAgQG1ldGhvZCByZWd1bGFyRXhwcmVzc2lvblxyXG4gIEBzdGF0aWNcclxuICBAcGFyYW0gY29udGV4dCB7T2JqZWN0fVxyXG4gIEBwYXJhbSBjb250ZXh0LmV4cHJlc3Npb24ge1N0cmluZ30gU3RyaW5nIGZvcm0gb2YgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBhcHBseVxyXG4gIEByZXR1cm4ge1ZhbGlkYXRvcn0gQSBuZXcgVmFsaWRhdG9yXHJcbiAgKiovXHJcbiAgcHVibGljIHN0YXRpYyByZWd1bGFyRXhwcmVzc2lvbiA9IGZ1bmN0aW9uKGNvbnRleHQ/OiBhbnkpIHtcclxuICAgIGZ1bmN0aW9uIHZhbEZuKHY6IGFueSwgY3R4OiBhbnkpIHtcclxuICAgICAgLy8gZG8gbm90IGludmFsaWRhdGUgaWYgZW1wdHk7IHVzZSBhIHNlcGFyYXRlIHJlcXVpcmVkIHRlc3RcclxuICAgICAgaWYgKHYgPT0gbnVsbCB8fCB2ID09PSAnJykgcmV0dXJuIHRydWU7XHJcbiAgICAgIGlmICh0eXBlb2YgKHYpICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGxldCByZSA9IG5ldyBSZWdFeHAoY3R4LmV4cHJlc3Npb24pO1xyXG4gICAgICAgIHJldHVybiByZS50ZXN0KHYpO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIG9yIGludmFsaWQgZXhwcmVzc2lvbiBwYXJhbWV0ZXIgdG8gcmVnRXhwIHZhbGlkYXRvcicpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IFZhbGlkYXRvcigncmVndWxhckV4cHJlc3Npb24nLCB2YWxGbiwgY29udGV4dCk7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyB0aGUgZW1haWwgYWRkcmVzcyB2YWxpZGF0b3JcclxuICBAZXhhbXBsZVxyXG4gICAgICAvLyBBc3N1bWUgZW0gaXMgYSBwcmVleGlzdGluZyBFbnRpdHlNYW5hZ2VyLlxyXG4gICAgICB2YXIgcGVyc29uVHlwZSA9IGVtLm1ldGFkYXRhU3RvcmUuZ2V0RW50aXR5VHlwZShcIlBlcnNvblwiKTtcclxuICAgICAgdmFyIGVtYWlsUHJvcGVydHkgPSBwZXJzb25UeXBlLmdldFByb3BlcnR5KFwiZW1haWxcIik7XHJcbiAgICAgIC8vIFZhbGlkYXRlcyB0aGF0IHRoZSB2YWx1ZSBvZiB0aGUgUGVyc29uLmVtYWlsIHByb3BlcnR5IGlzIGFuIGVtYWlsIGFkZHJlc3MuXHJcbiAgICAgIGVtYWlsUHJvcGVydHkudmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvci5lbWFpbEFkZHJlc3MoKSk7XHJcbiAgQG1ldGhvZCBlbWFpbEFkZHJlc3NcclxuICBAc3RhdGljXHJcbiAgQHBhcmFtIFtjb250ZXh0XSB7T2JqZWN0fSBvcHRpb25hbCBwYXJhbWV0ZXJzIHRvIHBhc3MgdGhyb3VnaCB0byB2YWxpZGF0aW9uIGNvbnN0cnVjdG9yXHJcbiAgQHJldHVybiB7VmFsaWRhdG9yfSBBIG5ldyBWYWxpZGF0b3JcclxuICAqKi9cclxuICBwdWJsaWMgc3RhdGljIGVtYWlsQWRkcmVzcyA9IGZ1bmN0aW9uKGNvbnRleHQ/OiBhbnkpIHtcclxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vc3JraXJrbGFuZC9EYXRhQW5ub3RhdGlvbnNFeHRlbnNpb25zL2Jsb2IvbWFzdGVyL0RhdGFBbm5vdGF0aW9uc0V4dGVuc2lvbnMvRW1haWxBdHRyaWJ1dGUuY3NcclxuICAgIGxldCByZUVtYWlsQWRkcmVzcyA9IC9eKCgoW2Etel18XFxkfFshI1xcJCUmJ1xcKlxcK1xcLVxcLz1cXD9cXF5fYHtcXHx9fl18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKyhcXC4oW2Etel18XFxkfFshI1xcJCUmJ1xcKlxcK1xcLVxcLz1cXD9cXF5fYHtcXHx9fl18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKykqKXwoKFxceDIyKSgoKChcXHgyMHxcXHgwOSkqKFxceDBkXFx4MGEpKT8oXFx4MjB8XFx4MDkpKyk/KChbXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHg3Zl18XFx4MjF8W1xceDIzLVxceDViXXxbXFx4NWQtXFx4N2VdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoXFxcXChbXFx4MDEtXFx4MDlcXHgwYlxceDBjXFx4MGQtXFx4N2ZdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSkpKSooKChcXHgyMHxcXHgwOSkqKFxceDBkXFx4MGEpKT8oXFx4MjB8XFx4MDkpKyk/KFxceDIyKSkpQCgoKFthLXpdfFxcZHxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KChbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKihbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKSlcXC4pKygoW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCgoW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKihbYS16XXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkpKVxcLj8kL2k7XHJcbiAgICByZXR1cm4gbWFrZVJlZ0V4cFZhbGlkYXRvcignZW1haWxBZGRyZXNzJywgcmVFbWFpbEFkZHJlc3MsIG51bGwsIGNvbnRleHQpO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gIFJldHVybnMgdGhlIHBob25lIHZhbGlkYXRvclxyXG4gIFByb3ZpZGVzIGJhc2ljIGFzc2VydGlvbnMgb24gdGhlIGZvcm1hdCBhbmQgd2lsbCBoZWxwIHRvIGVsaW1pbmF0ZSBtb3N0IG5vbnNlbnNlIGlucHV0XHJcbiAgTWF0Y2hlczpcclxuICBJbnRlcm5hdGlvbmFsIGRpYWxpbmcgcHJlZml4OiB7e30sICssIDAsIDAwMDB9ICh3aXRoIG9yIHdpdGhvdXQgYSB0cmFpbGluZyBicmVhayBjaGFyYWN0ZXIsIGlmIG5vdCAnKyc6IFstLy4gXSlcclxuICA+ICgoXFwrKXwoMChcXGQrKT9bLS8uXFxzXSkpXHJcbiAgQ291bnRyeSBjb2RlOiB7e30sIDEsIC4uLiwgOTk5fSAod2l0aCBvciB3aXRob3V0IGEgdHJhaWxpbmcgYnJlYWsgY2hhcmFjdGVyOiBbLS8uIF0pXHJcbiAgPiBbMS05XVxcZHssMn1bLS8uXFxzXT9cclxuICBBcmVhIGNvZGU6IHsoMCksIC4uLiwgKDAwMDAwMCksIDAsIC4uLiwgMDAwMDAwfSAod2l0aCBvciB3aXRob3V0IGEgdHJhaWxpbmcgYnJlYWsgY2hhcmFjdGVyOiBbLS8uIF0pXHJcbiAgPiAoKFxcKFxcZHsxLDZ9XFwpfFxcZHsxLDZ9KVstLy5cXHNdPyk/XHJcbiAgTG9jYWw6IHswLCAuLi59KyAod2l0aCBvciB3aXRob3V0IGEgdHJhaWxpbmcgYnJlYWsgY2hhcmFjdGVyOiBbLS8uIF0pXHJcbiAgPiAoXFxkK1stLy5cXHNdPykrXFxkK1xyXG4gIEBleGFtcGxlXHJcbiAgICAgIC8vIEFzc3VtZSBlbSBpcyBhIHByZWV4aXN0aW5nIEVudGl0eU1hbmFnZXIuXHJcbiAgICAgIHZhciBjdXN0b21lclR5cGUgPSBlbS5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoXCJDdXN0b21lclwiKTtcclxuICAgICAgdmFyIHBob25lUHJvcGVydHkgPSBjdXN0b21lclR5cGUuZ2V0UHJvcGVydHkoXCJwaG9uZVwiKTtcclxuICAgICAgLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHZhbHVlIG9mIHRoZSBDdXN0b21lci5waG9uZSBwcm9wZXJ0eSBpcyBwaG9uZS5cclxuICAgICAgcGhvbmVQcm9wZXJ0eS52YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9yLnBob25lKCkpO1xyXG4gIEBtZXRob2QgcGhvbmVcclxuICBAc3RhdGljXHJcbiAgQHBhcmFtIFtjb250ZXh0XSB7T2JqZWN0fSBvcHRpb25hbCBwYXJhbWV0ZXJzIHRvIHBhc3MgdGhyb3VnaCB0byB2YWxpZGF0aW9uIGNvbnN0cnVjdG9yXHJcbiAgQHJldHVybiB7VmFsaWRhdG9yfSBBIG5ldyBWYWxpZGF0b3JcclxuICAqKi9cclxuICBwdWJsaWMgc3RhdGljIHBob25lID0gZnVuY3Rpb24gKGNvbnRleHQ/OiBhbnkpIHtcclxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vc3JraXJrbGFuZC9EYXRhQW5ub3RhdGlvbnNFeHRlbnNpb25zL2Jsb2IvbWFzdGVyL0RhdGFBbm5vdGF0aW9uc0V4dGVuc2lvbnMvRXhwcmVzc2lvbnMuY3NcclxuICAgIGxldCByZVBob25lID0gL14oKFxcK3woMChcXGQrKT9bLS8uXFxzXT8pKVsxLTldXFxkezAsMn1bLS8uXFxzXT8pPygoXFwoXFxkezEsNn1cXCl8XFxkezEsNn0pWy0vLlxcc10/KT8oXFxkK1stLy5cXHNdPykrXFxkKyQvO1xyXG4gICAgcmV0dXJuIG1ha2VSZWdFeHBWYWxpZGF0b3IoJ3Bob25lJywgcmVQaG9uZSwgbnVsbCwgY29udGV4dCk7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyB0aGUgVVJMIChwcm90b2NvbCByZXF1aXJlZCkgdmFsaWRhdG9yXHJcbiAgQGV4YW1wbGVcclxuICAgICAgLy8gQXNzdW1lIGVtIGlzIGEgcHJlZXhpc3RpbmcgRW50aXR5TWFuYWdlci5cclxuICAgICAgdmFyIHBlcnNvblR5cGUgPSBlbS5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoXCJQZXJzb25cIik7XHJcbiAgICAgIHZhciB3ZWJzaXRlUHJvcGVydHkgPSBwZXJzb25UeXBlLmdldFByb3BlcnR5KFwid2Vic2l0ZVwiKTtcclxuICAgICAgLy8gVmFsaWRhdGVzIHRoYXQgdGhlIHZhbHVlIG9mIHRoZSBQZXJzb24ud2Vic2l0ZSBwcm9wZXJ0eSBpcyBhIFVSTC5cclxuICAgICAgd2Vic2l0ZVByb3BlcnR5LnZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3IudXJsKCkpO1xyXG4gIEBtZXRob2QgdXJsXHJcbiAgQHN0YXRpY1xyXG4gIEBwYXJhbSBbY29udGV4dF0ge09iamVjdH0gb3B0aW9uYWwgcGFyYW1ldGVycyB0byBwYXNzIHRocm91Z2ggdG8gdmFsaWRhdGlvbiBjb25zdHJ1Y3RvclxyXG4gIEByZXR1cm4ge1ZhbGlkYXRvcn0gQSBuZXcgVmFsaWRhdG9yXHJcbiAgKiovXHJcbiAgcHVibGljIHN0YXRpYyB1cmwgPSBmdW5jdGlvbiAoY29udGV4dD86IGFueSkge1xyXG4gICAgLy9TZWUgaHR0cHM6Ly9naXRodWIuY29tL3Nya2lya2xhbmQvRGF0YUFubm90YXRpb25zRXh0ZW5zaW9ucy9ibG9iL21hc3Rlci9EYXRhQW5ub3RhdGlvbnNFeHRlbnNpb25zL1VybEF0dHJpYnV0ZS5jc1xyXG4gICAgbGV0IHJlVXJsUHJvdG9jb2xSZXF1aXJlZCA9IC9eKGh0dHBzP3xmdHApOlxcL1xcLygoKChbYS16QS1aXXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZBLUZdezJ9KXxbIVxcJCYnXFwoXFwpXFwqXFwrLDs9XXw6KSpAKT8oKChcXGR8WzEtOV1cXGR8MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC01XSlcXC4oXFxkfFsxLTldXFxkfDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNV0pXFwuKFxcZHxbMS05XVxcZHwxXFxkXFxkfDJbMC00XVxcZHwyNVswLTVdKVxcLihcXGR8WzEtOV1cXGR8MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC01XSkpfChbYS16QS1aXVtcXC1hLXpBLVowLTldKil8KCgoW2EtekEtWl18XFxkfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoKFthLXpBLVpdfFxcZHxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkoW2EtekEtWl18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkqKFthLXpBLVpdfFxcZHxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkpKVxcLikrKChbYS16QS1aXXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KChbYS16QS1aXXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkoW2EtekEtWl18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkqKFthLXpBLVpdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSkpXFwuPykoOlxcZCopPykoXFwvKCgoW2EtekEtWl18XFxkfC18XFwufF98fnxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KCVbXFxkYS1mQS1GXXsyfSl8WyFcXCQmJ1xcKFxcKVxcKlxcKyw7PV18OnxAKSsoXFwvKChbYS16QS1aXXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZBLUZdezJ9KXxbIVxcJCYnXFwoXFwpXFwqXFwrLDs9XXw6fEApKikqKT8pPyhcXD8oKChbYS16QS1aXXxcXGR8LXxcXC58X3x+fFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoJVtcXGRhLWZBLUZdezJ9KXxbIVxcJCYnXFwoXFwpXFwqXFwrLDs9XXw6fEApfFtcXHVFMDAwLVxcdUY4RkZdfFxcL3xcXD8pKik/KFxcIygoKFthLXpBLVpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCglW1xcZGEtZkEtRl17Mn0pfFshXFwkJidcXChcXClcXCpcXCssOz1dfDp8QCl8XFwvfFxcPykqKT8kLztcclxuICAgIHJldHVybiBtYWtlUmVnRXhwVmFsaWRhdG9yKCd1cmwnLCByZVVybFByb3RvY29sUmVxdWlyZWQsIG51bGwsIGNvbnRleHQpO1xyXG4gIH07XHJcblxyXG4gIC8qKlxyXG4gIENyZWF0ZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gdmFsaWRhdG9yIHdpdGggYSBmaXhlZCBleHByZXNzaW9uLlxyXG4gIE1hbnkgb2YgdGhlIHN0b2NrIHZhbGlkYXRvcnMgYXJlIGJ1aWx0IHdpdGggdGhpcyBmYWN0b3J5IG1ldGhvZC5cclxuICBUaGVpciBleHByZXNzaW9ucyBhcmUgb2Z0ZW4gZGVyaXZlZCBmcm9tXHJcbiAgaHR0cHM6Ly9naXRodWIuY29tL3Nya2lya2xhbmQvRGF0YUFubm90YXRpb25zRXh0ZW5zaW9ucy9ibG9iL21hc3Rlci9EYXRhQW5ub3RhdGlvbnNFeHRlbnNpb25zXHJcbiAgWW91IGNhbiB0cnkgbWFueSBvZiB0aGVtIGF0IGh0dHA6Ly9kYXRhYW5ub3RhdGlvbnNleHRlbnNpb25zLm9yZy9cclxuICBAZXhhbXBsZVxyXG4gICAgICAvLyBNYWtlIGEgemlwY29kZSB2YWxpZGF0b3JcclxuICAgICAgZnVuY3Rpb24gemlwVmFsaWRhdG9yID0gVmFsaWRhdG9yLm1ha2VSZWdFeHBWYWxpZGF0b3IoXHJcbiAgICAgIFwiemlwVmFsLFxyXG4gICAgICAvXlxcZHs1fShbXFwtXVxcZHs0fSk/JC8sXHJcbiAgICAgIFwiVGhlICVkaXNwbGF5TmFtZSUgJyV2YWx1ZSUnIGlzIG5vdCBhIHZhbGlkIFUuUy4gemlwY29kZVwiKTtcclxuICAgICAgLy8gUmVnaXN0ZXIgaXQuXHJcbiAgICAgIFZhbGlkYXRvci5yZWdpc3Rlcih6aXBWYWxpZGF0b3IpO1xyXG4gICAgICAvLyBBZGQgaXQgdG8gYSBkYXRhIHByb3BlcnR5LiBBc3N1bWUgZW0gaXMgYSBwcmVleGlzdGluZyBFbnRpdHlNYW5hZ2VyLlxyXG4gICAgICB2YXIgY3VzdFR5cGUgPSBlbS5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoXCJDdXN0b21lclwiKTtcclxuICAgICAgdmFyIHppcFByb3BlcnR5ID0gY3VzdFR5cGUuZ2V0UHJvcGVydHkoXCJQb3N0YWxDb2RlXCIpO1xyXG4gICAgICB6aXBQcm9wZXJ0eS52YWxpZGF0b3JzLnB1c2goemlwVmFsaWRhdG9yKTtcclxuICBAbWV0aG9kIG1ha2VSZWdFeHBWYWxpZGF0b3JcclxuICBAc3RhdGljXHJcbiAgQHBhcmFtIHZhbGlkYXRvck5hbWUge1N0cmluZ30gbmFtZSBvZiB0aGlzIHZhbGlkYXRvclxyXG4gIEBwYXJhbSBleHByZXNzaW9uIHtTdHJpbmcgfCBSZWdFeHB9IHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBhcHBseVxyXG4gIEBwYXJhbSBbZGVmYXVsdE1lc3NhZ2VdIHtTdHJpbmd9IGRlZmF1bHQgbWVzc2FnZSBmb3IgZmFpbGVkIHZhbGlkYXRpb25zXHJcbiAgQHBhcmFtIFtjb250ZXh0XSB7T2JqZWN0fSBvcHRpb25hbCBwYXJhbWV0ZXJzIHRvIHBhc3MgdGhyb3VnaCB0byB2YWxpZGF0aW9uIGNvbnN0cnVjdG9yXHJcbiAgQHJldHVybiB7VmFsaWRhdG9yfSBBIG5ldyBWYWxpZGF0b3JcclxuICAqKi9cclxuICBwdWJsaWMgc3RhdGljIG1ha2VSZWdFeHBWYWxpZGF0b3IgPSBtYWtlUmVnRXhwVmFsaWRhdG9yO1xyXG5cclxufVxyXG5WYWxpZGF0b3IucHJvdG90eXBlLl8kdHlwZU5hbWUgPSBcIlZhbGlkYXRvclwiO1xyXG5cclxuLy8gcmVnaXN0ZXIgYWxsIHZhbGlkYXRvcnNcclxuRXJyb3JbJ3gnXSA9IGNvcmUub2JqZWN0Rm9yRWFjaChWYWxpZGF0b3IsIGZ1bmN0aW9uIChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkge1xyXG4gIGlmICh0eXBlb2YgKHZhbHVlKSAhPT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG4gIGlmIChrZXkgPT09IFwiZnJvbUpTT05cIiB8fCBrZXkgPT09IFwicmVnaXN0ZXJcIiB8fFxyXG4gICAgICBrZXkgPT09IFwicmVnaXN0ZXJGYWN0b3J5XCIgfHwga2V5ID09PSBcIm1ha2VSZWdFeHBWYWxpZGF0b3JcIikge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgY29uZmlnLnJlZ2lzdGVyRnVuY3Rpb24odmFsdWUsIFwiVmFsaWRhdG9yLlwiICsga2V5KTtcclxufSk7XHJcblxyXG5mdW5jdGlvbiBmb3JtYXRUZW1wbGF0ZSh0ZW1wbGF0ZTogc3RyaW5nLCB2YXJzOiBPYmplY3QsIG93blByb3BlcnRpZXNPbmx5OiBib29sZWFuID0gZmFsc2UpIHtcclxuICBpZiAoIXZhcnMpIHJldHVybiB0ZW1wbGF0ZTtcclxuICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgvJShbXiVdKyklL2csIGZ1bmN0aW9uIChfLCBrZXkpIHtcclxuICAgIGxldCB2YWxPckZuOiBhbnk7XHJcbiAgICBpZiAob3duUHJvcGVydGllc09ubHkpIHtcclxuICAgICAgdmFsT3JGbiA9IHZhcnMuaGFzT3duUHJvcGVydHkoa2V5KSA/IHZhcnNba2V5XSA6ICcnO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdmFsT3JGbiA9IHZhcnNba2V5XTtcclxuICAgIH1cclxuICAgIGlmICh2YWxPckZuICE9IG51bGwpIHtcclxuICAgICAgaWYgKGNvcmUuaXNGdW5jdGlvbih2YWxPckZuKSkge1xyXG4gICAgICAgIHJldHVybiB2YWxPckZuKHZhcnMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiB2YWxPckZuO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gaW50UmFuZ2VWYWxpZGF0b3JDdG9yKHZhbGlkYXRvck5hbWU6IHN0cmluZywgbWluVmFsdWU6IG51bWJlciwgbWF4VmFsdWU6IG51bWJlciwgY29udGV4dDogYW55KSB7XHJcbiAgY29udGV4dCA9IGNvbnRleHQgfHwge307XHJcbiAgaWYgKG1pblZhbHVlICE9PSB1bmRlZmluZWQpIHsgY29udGV4dC5taW4gPSBtaW5WYWx1ZTsgfVxyXG4gIGlmIChtYXhWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7IGNvbnRleHQubWF4ID0gbWF4VmFsdWU7IH1cclxuICBsZXQgdGVtcGxhdGVFeGlzdHMgPSBjb250ZXh0Lm1lc3NhZ2VUZW1wbGF0ZSB8fCBWYWxpZGF0b3IubWVzc2FnZVRlbXBsYXRlc1t2YWxpZGF0b3JOYW1lXTtcclxuICBpZiAoIXRlbXBsYXRlRXhpc3RzKSB7XHJcbiAgICBWYWxpZGF0b3IubWVzc2FnZVRlbXBsYXRlc1t2YWxpZGF0b3JOYW1lXSA9IGNvcmUuZm9ybWF0U3RyaW5nKFwiJyVkaXNwbGF5TmFtZSUnIG11c3QgYmUgYW4gaW50ZWdlciBiZXR3ZWVuIHRoZSB2YWx1ZXMgb2YgJTEgYW5kICUyXCIsXHJcbiAgICAgICAgbWluVmFsdWUsIG1heFZhbHVlKTtcclxuICB9XHJcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcclxuICAgIGxldCB2YWxGbiA9IGZ1bmN0aW9uICh2OiBhbnksIGN0eDogYW55KSB7XHJcbiAgICAgIGlmICh2ID09IG51bGwpIHJldHVybiB0cnVlO1xyXG4gICAgICBpZiAodHlwZW9mIHYgPT09IFwic3RyaW5nXCIgJiYgY3R4ICYmIGN0eC5hbGxvd1N0cmluZykge1xyXG4gICAgICAgIHYgPSBwYXJzZUludCh2LCAwKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoKHR5cGVvZiB2ID09PSBcIm51bWJlclwiKSAmJiAoIWlzTmFOKHYpKSAmJiBNYXRoLmZsb29yKHYpID09PSB2KSB7XHJcbiAgICAgICAgaWYgKG1pblZhbHVlICE9IG51bGwgJiYgdiA8IG1pblZhbHVlKSB7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXhWYWx1ZSAhPSBudWxsICYmIHYgPiBtYXhWYWx1ZSkge1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICByZXR1cm4gbmV3IFZhbGlkYXRvcih2YWxpZGF0b3JOYW1lLCB2YWxGbiwgY29udGV4dCk7XHJcbiAgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1ha2VSZWdFeHBWYWxpZGF0b3IodmFsaWRhdG9yTmFtZTogc3RyaW5nLCBleHByZXNzaW9uOiBSZWdFeHAsIGRlZmF1bHRNZXNzYWdlPzogc3RyaW5nIHwgbnVsbCwgY29udGV4dD86IGFueSkge1xyXG4gIGlmIChkZWZhdWx0TWVzc2FnZSkge1xyXG4gICAgVmFsaWRhdG9yLm1lc3NhZ2VUZW1wbGF0ZXNbdmFsaWRhdG9yTmFtZV0gPSBkZWZhdWx0TWVzc2FnZTtcclxuICB9XHJcbiAgbGV0IHJlID0gKHR5cGVvZiAoZXhwcmVzc2lvbikgPT09ICdzdHJpbmcnKSA/IG5ldyBSZWdFeHAoZXhwcmVzc2lvbikgOiBleHByZXNzaW9uO1xyXG4gIGxldCB2YWxGbiA9IGZ1bmN0aW9uICh2OiBhbnkpIHtcclxuICAgIC8vIGRvIG5vdCBpbnZhbGlkYXRlIGlmIGVtcHR5OyB1c2UgYSBzZXBhcmF0ZSByZXF1aXJlZCB0ZXN0XHJcbiAgICBpZiAodiA9PSBudWxsIHx8IHYgPT09ICcnKSByZXR1cm4gdHJ1ZTtcclxuICAgIGlmICh0eXBlb2YgKHYpICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIHJlLnRlc3Qodik7XHJcbiAgfTtcclxuICByZXR1cm4gbmV3IFZhbGlkYXRvcih2YWxpZGF0b3JOYW1lLCB2YWxGbiwgY29udGV4dCk7XHJcbn1cclxuXHJcbi8vIGh0dHA6Ly9yb3NldHRhY29kZS5vcmcvd2lraS9MdWhuX3Rlc3Rfb2ZfY3JlZGl0X2NhcmRfbnVtYmVycyNKYXZhU2NyaXB0XHJcblxyXG4vLyBmdW5jdGlvbiBsdWhuKGE6IHN0cmluZywgYjogbnVtYmVyLCBjOiBudW1iZXIsIGQ6IG51bWJlciwgZTogbnVtYmVyKSB7XHJcbi8vICAgZm9yIChkID0gK2FbYiA9IGEubGVuZ3RoIC0gMV0sIGUgPSAwOyBiLS07ICkge1xyXG4vLyAgICAgYyA9ICthW2JdLCBkICs9ICsrZSAlIDIgPyAyICogYyAlIDEwICsgKGMgPiA0KSA6IGM7XHJcbi8vICAgfVxyXG4vLyAgIHJldHVybiAhKGQgJSAxMCk7XHJcbi8vIH07XHJcblxyXG5sZXQgIGx1aG4gPSAoZnVuY3Rpb24oKSB7XHJcbiAgbGV0IGx1aG5BcnIgPSBbMCwgMiwgNCwgNiwgOCwgMSwgMywgNSwgNywgOV07XHJcbiAgcmV0dXJuIGZ1bmN0aW9uKHN0cjogc3RyaW5nKSBcdHtcclxuICAgIGxldCBjb3VudGVyID0gMDtcclxuICAgIGxldCBpbmNOdW06IG51bWJlcjtcclxuICAgIGxldCBvZGQgPSBmYWxzZTtcclxuICAgIGxldCB0ZW1wID0gU3RyaW5nKHN0cikucmVwbGFjZSgvW15cXGRdL2csIFwiXCIpO1xyXG4gICAgaWYgKCB0ZW1wLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgZm9yIChsZXQgaSA9IHRlbXAubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpICB7XHJcbiAgICAgIGluY051bSA9IHBhcnNlSW50KHRlbXAuY2hhckF0KGkpLCAxMCk7XHJcbiAgICAgIGNvdW50ZXIgKz0gKG9kZCA9ICFvZGQpID8gaW5jTnVtIDogbHVobkFycltpbmNOdW1dO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChjb3VudGVyICUgMTAgPT09IDApO1xyXG4gIH07XHJcbn0pKCk7XHJcblxyXG4vKipcclxuQSBWYWxpZGF0aW9uRXJyb3IgaXMgdXNlZCB0byBkZXNjcmliZSBhIGZhaWxlZCB2YWxpZGF0aW9uLlxyXG5cclxuQGNsYXNzIFZhbGlkYXRpb25FcnJvclxyXG4qKi9cclxuXHJcbi8qKlxyXG5Db25zdHJ1Y3RzIGEgbmV3IFZhbGlkYXRpb25FcnJvclxyXG5AbWV0aG9kIDxjdG9yPiBWYWxpZGF0aW9uRXJyb3JcclxuXHJcbkBwYXJhbSB2YWxpZGF0b3Ige1ZhbGlkYXRvciB8fCBudWxsfSBUaGUgVmFsaWRhdG9yIHVzZWQgdG8gY3JlYXRlIHRoaXMgZXJyb3IsIGlmIGFueS5cclxuQHBhcmFtIGNvbnRleHQgeyBDb250ZXh0T2JqZWN0IHx8IG51bGx9IFRoZSBDb250ZXh0IG9iamVjdCB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFZhbGlkYXRvciB0byBjcmVhdGUgdGhpcyBlcnJvci5cclxuQHBhcmFtIGVycm9yTWVzc2FnZSB7IFN0cmluZ30gVGhlIGFjdHVhbCBlcnJvciBtZXNzYWdlXHJcbkBwYXJhbSBba2V5XSB7U3RyaW5nfSBBbiBvcHRpb25hbCBrZXkgdXNlZCB0byBkZWZpbmUgYSBrZXkgZm9yIHRoaXMgZXJyb3IuIE9uZSB3aWxsIGJlIGNyZWF0ZWQgYXV0b21hdGljYWxseSBpZiBub3QgcHJvdmlkZWQgaGVyZS5cclxuKiovXHJcbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uRXJyb3Ige1xyXG4gIHZhbGlkYXRvcj86IFZhbGlkYXRvcjtcclxuICBrZXk6IHN0cmluZztcclxuICBjb250ZXh0OiBhbnk7XHJcbiAgZXJyb3JNZXNzYWdlOiBzdHJpbmc7XHJcbiAgcHJvcGVydHk6IGFueTsgLy8gSVByb3BlcnR5XHJcbiAgcHJvcGVydHlOYW1lOiBzdHJpbmc7XHJcbiAgaXNTZXJ2ZXJFcnJvcjogYm9vbGVhbjtcclxuXHJcbiAgY29uc3RydWN0b3IodmFsaWRhdG9yOiBWYWxpZGF0b3IgfCBudWxsLCBjb250ZXh0OiBWYWxpZGF0aW9uQ29udGV4dCwgZXJyb3JNZXNzYWdlOiBzdHJpbmcsIGtleT86IHN0cmluZykge1xyXG4gICAgLy8gRXJyb3IgaXMgd2l0aCBpc0luc3RhbmNlT2YoVmFsaWRhdG9yKVxyXG4gICAgYXNzZXJ0UGFyYW0odmFsaWRhdG9yLCBcInZhbGlkYXRvclwiKS5pc09wdGlvbmFsKCkuaXNJbnN0YW5jZU9mKFZhbGlkYXRvcikuY2hlY2soKTtcclxuICAgIGFzc2VydFBhcmFtKGVycm9yTWVzc2FnZSwgXCJlcnJvck1lc3NhZ2VcIikuaXNOb25FbXB0eVN0cmluZygpLmNoZWNrKCk7XHJcbiAgICBhc3NlcnRQYXJhbShrZXksIFwia2V5XCIpLmlzT3B0aW9uYWwoKS5pc05vbkVtcHR5U3RyaW5nKCkuY2hlY2soKTtcclxuICAgIHRoaXMudmFsaWRhdG9yID0gdmFsaWRhdG9yIHx8IHVuZGVmaW5lZDtcclxuICAgIGNvbnRleHQgPSBjb250ZXh0IHx8IHt9O1xyXG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcclxuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gZXJyb3JNZXNzYWdlO1xyXG5cclxuICAgIHRoaXMucHJvcGVydHkgPSBjb250ZXh0LnByb3BlcnR5O1xyXG4gICAgdGhpcy5wcm9wZXJ0eU5hbWUgPSBjb250ZXh0LnByb3BlcnR5TmFtZSB8fCAoY29udGV4dC5wcm9wZXJ0eSAmJiBjb250ZXh0LnByb3BlcnR5Lm5hbWUpO1xyXG5cclxuICAgIGlmIChrZXkpIHtcclxuICAgICAgdGhpcy5rZXkgPSBrZXk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmtleSA9IFZhbGlkYXRpb25FcnJvci5nZXRLZXkodmFsaWRhdG9yIHx8IGVycm9yTWVzc2FnZSwgdGhpcy5wcm9wZXJ0eU5hbWUpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc1NlcnZlckVycm9yID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgVGhlIFZhbGlkYXRvciBhc3NvY2lhdGVkIHdpdGggdGhpcyBWYWxpZGF0aW9uRXJyb3IuXHJcblxyXG4gIF9fcmVhZE9ubHlfX1xyXG4gIEBwcm9wZXJ0eSB2YWxpZGF0b3Ige1ZhbGlkYXRvcn1cclxuICAqKi9cclxuXHJcbiAgLyoqXHJcbiAgQSAnY29udGV4dCcgb2JqZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIFZhbGlkYXRpb25FcnJvci5cclxuXHJcbiAgX19yZWFkT25seV9fXHJcbiAgQHByb3BlcnR5IGNvbnRleHQge09iamVjdH1cclxuICAqKi9cclxuXHJcbiAgLyoqXHJcbiAgVGhlIERhdGFQcm9wZXJ0eSBvciBOYXZpZ2F0aW9uUHJvcGVydHkgYXNzb2NpYXRlZCB3aXRoIHRoaXMgVmFsaWRhdGlvbkVycm9yLlxyXG5cclxuICBfX3JlYWRPbmx5X19cclxuICBAcHJvcGVydHkgcHJvcGVydHkge0RhdGFQcm9wZXJ0eXxOYXZpZ2F0aW9uUHJvcGVydHl9XHJcbiAgKiovXHJcblxyXG4gIC8qKlxyXG4gIFRoZSBwcm9wZXJ0eSBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFZhbGlkYXRpb25FcnJvci4gVGhpcyB3aWxsIGJlIGEgXCJwcm9wZXJ0eSBwYXRoXCIgZm9yIGFueSBwcm9wZXJ0aWVzIG9mIGEgY29tcGxleCBvYmplY3QuXHJcblxyXG4gIF9fcmVhZE9ubHlfX1xyXG4gIEBwcm9wZXJ0eSBwcm9wZXJ0eU5hbWUge1N0cmluZ31cclxuICAqKi9cclxuXHJcbiAgLyoqXHJcbiAgVGhlIGVycm9yIG1lc3NhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBWYWxpZGF0aW9uRXJyb3IuXHJcblxyXG4gIF9fcmVhZE9ubHlfX1xyXG4gIEBwcm9wZXJ0eSBlcnJvck1lc3NhZ2Uge3N0cmluZ31cclxuICAqKi9cclxuXHJcbiAgLyoqXHJcbiAgVGhlIGtleSBieSB3aGljaCB0aGlzIHZhbGlkYXRpb24gZXJyb3IgbWF5IGJlIHJlbW92ZWQgZnJvbSBhIGNvbGxlY3Rpb24gb2YgVmFsaWRhdGlvbkVycm9ycy5cclxuXHJcbiAgX19yZWFkT25seV9fXHJcbiAgQHByb3BlcnR5IGtleSB7c3RyaW5nfVxyXG4gICoqL1xyXG5cclxuICAvKipcclxuICBXaGV0aGVyIHRoaXMgaXMgYSBzZXJ2ZXIgZXJyb3IuXHJcblxyXG4gIF9fcmVhZE9ubHlfX1xyXG4gIEBwcm9wZXJ0eSBpc1NlcnZlckVycm9yIHtib29sfVxyXG4gICoqL1xyXG5cclxuXHJcbiAgLyoqXHJcbiAgQ29tcG9zZXMgYSBWYWxpZGF0aW9uRXJyb3IgJ2tleScgZ2l2ZW4gYSB2YWxpZGF0b3Igb3IgYW4gZXJyb3JOYW1lIGFuZCBhbiBvcHRpb25hbCBwcm9wZXJ0eU5hbWVcclxuICBAbWV0aG9kIGdldEtleVxyXG4gIEBzdGF0aWNcclxuICBAcGFyYW0gdmFsaWRhdG9yIHtWYWxpZGF0b3JPckVycm9yS2V5fSBBIFZhbGlkYXRvciBvciBhbiBcImVycm9yIG5hbWVcIiBpZiBubyB2YWxpZGF0b3IgaXMgYXZhaWxhYmxlLlxyXG4gIEBwYXJhbSBbcHJvcGVydHlOYW1lXSBBIHByb3BlcnR5IG5hbWVcclxuICBAcmV0dXJuIHtTdHJpbmd9IEEgVmFsaWRhdGlvbkVycm9yICdrZXknXHJcbiAgKiovXHJcbiAgcHVibGljIHN0YXRpYyBnZXRLZXkodmFsaWRhdG9yT3JFcnJvck5hbWU6IFZhbGlkYXRvciB8IHN0cmluZywgcHJvcGVydHlOYW1lPzogc3RyaW5nKSB7XHJcbiAgICBsZXQgbmFtZSA9ICh0eXBlb2YgdmFsaWRhdG9yT3JFcnJvck5hbWUgPT09ICdzdHJpbmcnKSA/IHZhbGlkYXRvck9yRXJyb3JOYW1lIDogdmFsaWRhdG9yT3JFcnJvck5hbWUubmFtZTtcclxuICAgIHJldHVybiBuYW1lICsgKHByb3BlcnR5TmFtZSA/IFwiOlwiICsgcHJvcGVydHlOYW1lIDogXCJcIik7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuXHJcbiJdfQ==
|
|
@@ -61,4 +61,4 @@ function updateWithConfig(options, config) {
|
|
|
61
61
|
}
|
|
62
62
|
return options;
|
|
63
63
|
}
|
|
64
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC8iLCJzb3VyY2VzIjpbInNyYy92YWxpZGF0aW9uLW9wdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBRyxNQUFNLFFBQVEsQ0FBQztBQUMvQixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFrQjlDOzs7RUFHRTtBQUNGLE1BQU0sT0FBTyxpQkFBaUI7SUFrQjVCOzs7Ozs7T0FNRztJQUNILFlBQVksTUFBZ0M7UUFDMUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFHRDs7Ozs7O09BTUc7SUFDSCxLQUFLLENBQUMsTUFBK0I7UUFDbkMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLElBQUksQ0FBQztRQUN6QixJQUFJLE1BQU0sR0FBRyxJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqQyxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztJQUNwRCxDQUFDOztBQUVEOztHQUVHO0FBQ0ksaUNBQWUsR0FBRyxJQUFJLGlCQUFpQixDQUFDO0lBQzdDLGdCQUFnQixFQUFFLElBQUk7SUFDdEIsY0FBYyxFQUFFLElBQUk7SUFDcEIsZUFBZSxFQUFFLEtBQUs7SUFDdEIsd0JBQXdCLEVBQUUsSUFBSTtDQUMvQixDQUFDLENBQUM7QUFFTCxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLG1CQUFtQixDQUFDO0FBRTdELFNBQVMsZ0JBQWdCLENBQUMsT0FBMEIsRUFBRSxNQUErQjtJQUNuRixJQUFJLE1BQU0sRUFBRTtRQUNWLFlBQVksQ0FBQyxNQUFNLENBQUM7YUFDZixVQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxVQUFVLEVBQUU7YUFDdkQsVUFBVSxDQUFDLGdCQUFnQixDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsVUFBVSxFQUFFO2FBQ3JELFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLFVBQVUsRUFBRTthQUN0RCxVQUFVLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxVQUFVLEVBQUU7YUFDL0QsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0tBQ3hCO0lBQ0QsT0FBTyxPQUFPLENBQUM7QUFDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvcmUgIH0gZnJvbSAnLi9jb3JlJztcclxuaW1wb3J0IHsgYXNzZXJ0Q29uZmlnIH0gZnJvbSAnLi9hc3NlcnQtcGFyYW0nO1xyXG5cclxuLyoqIENvbmZpZ3VyYXRpb24gaW5mbyB0byBiZSBwYXNzZWQgdG8gdGhlIFtbVmFsaWRhdGlvbk9wdGlvbnNdXSBjb25zdHJ1Y3RvciAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFZhbGlkYXRpb25PcHRpb25zQ29uZmlnIHtcclxuICAvKiogV2hldGhlciBlbnRpdHkgYW5kIHByb3BlcnR5IGxldmVsIHZhbGlkYXRpb24gc2hvdWxkIG9jY3VyIHdoZW4gZW50aXRpZXMgYXJlIGF0dGFjaGVkIHRvIHRoZSBFbnRpdHlNYW5hZ2VyIFxyXG4gIG90aGVyIHRoYW4gdmlhIGEgcXVlcnkuIChkZWZhdWx0ID0gdHJ1ZSkgKi9cclxuICB2YWxpZGF0ZU9uQXR0YWNoPzogYm9vbGVhbjtcclxuICAvKiogIFdoZXRoZXIgZW50aXR5IGFuZCBwcm9wZXJ0eSBsZXZlbCB2YWxpZGF0aW9uIHNob3VsZCBvY2N1ciBiZWZvcmUgZW50aXRpZXMgYXJlIHNhdmVkLiBcclxuICBBIGZhaWxlZCB2YWxpZGF0aW9uIHdpbGwgZm9yY2UgdGhlIHNhdmUgdG8gZmFpbCBlYXJseS4gKGRlZmF1bHQgPSB0cnVlKSAgKi9cclxuICB2YWxpZGF0ZU9uU2F2ZT86IGJvb2xlYW47XHJcbiAgLyoqIFdoZXRoZXIgZW50aXR5IGFuZCBwcm9wZXJ0eSBsZXZlbCB2YWxpZGF0aW9uIHNob3VsZCBvY2N1ciBhZnRlciBlbnRpdGllcyBhcmUgcXVlcmllZCBmcm9tIGEgcmVtb3RlIHNlcnZlci5cclxuICAoZGVmYXVsdCA9IGZhbHNlKSAgKiovXHJcbiAgdmFsaWRhdGVPblF1ZXJ5PzogYm9vbGVhbjtcclxuICAvKiogV2hldGhlciBwcm9wZXJ0eSBsZXZlbCB2YWxpZGF0aW9uIHNob3VsZCBvY2N1ciBhZnRlciBlbnRpdGllcyBhcmUgbW9kaWZpZWQuXHJcbiAgKGRlZmF1bHQgPSB0cnVlKSAgKiovXHJcbiAgdmFsaWRhdGVPblByb3BlcnR5Q2hhbmdlPzogYm9vbGVhbjtcclxufVxyXG5cclxuLyoqXHJcbkEgVmFsaWRhdGlvbk9wdGlvbnMgaW5zdGFuY2UgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHZhbGlkYXRpb24gd2lsbCBiZSBleGVjdXRlZC5cclxuXHJcbiovXHJcbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uT3B0aW9ucyBpbXBsZW1lbnRzIFZhbGlkYXRpb25PcHRpb25zQ29uZmlnIHtcclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBkZWNsYXJlIF8kdHlwZU5hbWU6IHN0cmluZzsgLy8gb24gcHJvdG9cclxuICAvKiogV2hldGhlciBlbnRpdHkgYW5kIHByb3BlcnR5IGxldmVsIHZhbGlkYXRpb24gc2hvdWxkIG9jY3VyIHdoZW4gZW50aXRpZXMgYXJlIGF0dGFjaGVkIHRvIHRoZSBFbnRpdHlNYW5hZ2VyIFxyXG4gIG90aGVyIHRoYW4gdmlhIGEgcXVlcnkuIChkZWZhdWx0ID0gdHJ1ZSkgX19SZWFkIE9ubHlfXyAqL1xyXG4gIGRlY2xhcmUgdmFsaWRhdGVPbkF0dGFjaDogYm9vbGVhbjtcclxuICAvKiogV2hldGhlciBlbnRpdHkgYW5kIHByb3BlcnR5IGxldmVsIHZhbGlkYXRpb24gc2hvdWxkIG9jY3VyIGJlZm9yZSBlbnRpdGllcyBhcmUgc2F2ZWQuIFxyXG4gIEEgZmFpbGVkIHZhbGlkYXRpb24gd2lsbCBmb3JjZSB0aGUgc2F2ZSB0byBmYWlsIGVhcmx5LiAoZGVmYXVsdCA9IHRydWUpIF9fUmVhZCBPbmx5X18gKi9cclxuICBkZWNsYXJlIHZhbGlkYXRlT25TYXZlOiBib29sZWFuO1xyXG4gIC8qKiBXaGV0aGVyIGVudGl0eSBhbmQgcHJvcGVydHkgbGV2ZWwgdmFsaWRhdGlvbiBzaG91bGQgb2NjdXIgYWZ0ZXIgZW50aXRpZXMgYXJlIHF1ZXJpZWQgZnJvbSBhIHJlbW90ZSBzZXJ2ZXIuXHJcbiAgKGRlZmF1bHQgPSBmYWxzZSkgX19SZWFkIE9ubHlfXyAgKiovXHJcbiAgZGVjbGFyZSB2YWxpZGF0ZU9uUXVlcnk6IGJvb2xlYW47XHJcbiAgLyoqIFdoZXRoZXIgcHJvcGVydHkgbGV2ZWwgdmFsaWRhdGlvbiBzaG91bGQgb2NjdXIgYWZ0ZXIgZW50aXRpZXMgYXJlIG1vZGlmaWVkLlxyXG4gIChkZWZhdWx0ID0gdHJ1ZSkgX19SZWFkIE9ubHlfXyAqKi9cclxuICBkZWNsYXJlIHZhbGlkYXRlT25Qcm9wZXJ0eUNoYW5nZTogYm9vbGVhbjtcclxuXHJcblxyXG5cclxuICAvKiogXHJcbiAgVmFsaWRhdGlvbk9wdGlvbnMgY29uc3RydWN0b3JcclxuICA+ICAgICB2YXIgbmV3Vm8gPSBuZXcgVmFsaWRhdGlvbk9wdGlvbnMoIHsgdmFsaWRhdGVPblNhdmU6IGZhbHNlLCB2YWxpZGF0ZU9uQXR0YWNoOiBmYWxzZSB9KTtcclxuICA+ICAgICAvLyBhc3N1bWUgZW0xIGlzIGEgcHJlZXhpc3RpbmcgRW50aXR5TWFuYWdlclxyXG4gID4gICAgIGVtMS5zZXRQcm9wZXJ0aWVzKCB7IHZhbGlkYXRpb25PcHRpb25zOiBuZXdWbyB9KTtcclxuICBAcGFyYW0gY29uZmlnIC0gQSBjb25maWd1cmF0aW9uIG9iamVjdC5cclxuICAqKi9cclxuICBjb25zdHJ1Y3Rvcihjb25maWc/OiBWYWxpZGF0aW9uT3B0aW9uc0NvbmZpZykge1xyXG4gICAgdXBkYXRlV2l0aENvbmZpZyh0aGlzLCBjb25maWcpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gIFJldHVybnMgYSBjb3B5IG9mIHRoaXMgVmFsaWRhdGlvbk9wdGlvbnMgd2l0aCBjaGFuZ2VzIHRvIHRoZSBzcGVjaWZpZWQgY29uZmlnIHByb3BlcnRpZXMuXHJcbiAgPiAgICAgdmFyIHZhbGlkYXRpb25PcHRpb25zID0gbmV3IFZhbGlkYXRpb25PcHRpb25zKCk7XHJcbiAgPiAgICAgdmFyIG5ld09wdGlvbnMgPSB2YWxpZGF0aW9uT3B0aW9ucy51c2luZyggeyB2YWxpZGF0ZU9uUXVlcnk6IHRydWUsIHZhbGlkYXRlT25TYXZlOiBmYWxzZX0gKTtcclxuICBAcGFyYW0gY29uZmlnIC0gQSBjb25maWd1cmF0aW9uIG9iamVjdFxyXG4gIEByZXR1cm4gQSBuZXcgVmFsaWRhdGlvbk9wdGlvbnMgaW5zdGFuY2UuXHJcbiAgKiovXHJcbiAgdXNpbmcoY29uZmlnOiBWYWxpZGF0aW9uT3B0aW9uc0NvbmZpZykge1xyXG4gICAgaWYgKCFjb25maWcpIHJldHVybiB0aGlzO1xyXG4gICAgbGV0IHJlc3VsdCA9IG5ldyBWYWxpZGF0aW9uT3B0aW9ucyh0aGlzKTtcclxuICAgIHVwZGF0ZVdpdGhDb25maWcocmVzdWx0LCBjb25maWcpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFNldHMgdGhlICdkZWZhdWx0SW5zdGFuY2UnIGJ5IGNyZWF0aW5nIGEgY29weSBvZiB0aGUgY3VycmVudCAnZGVmYXVsdEluc3RhbmNlJyBhbmQgdGhlbiBhcHBseWluZyBhbGwgb2YgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UuXHJcbiAgVGhlIGN1cnJlbnQgaW5zdGFuY2UgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLlxyXG4gID4gICAgIHZhciB2YWxpZGF0aW9uT3B0aW9ucyA9IG5ldyBWYWxpZGF0aW9uT3B0aW9ucygpXHJcbiAgPiAgICAgdmFyIG5ld09wdGlvbnMgPSB2YWxpZGF0aW9uT3B0aW9ucy51c2luZyggeyB2YWxpZGF0ZU9uUXVlcnk6IHRydWUsIHZhbGlkYXRlT25TYXZlOiBmYWxzZX0gKTtcclxuICA+ICAgICB2YXIgbmV3T3B0aW9ucy5zZXRBc0RlZmF1bHQoKTtcclxuICAqKi9cclxuICBzZXRBc0RlZmF1bHQoKSB7XHJcbiAgICByZXR1cm4gY29yZS5zZXRBc0RlZmF1bHQodGhpcywgVmFsaWRhdGlvbk9wdGlvbnMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgVGhlIGRlZmF1bHQgaW5zdGFuY2UgZm9yIHVzZSB3aGVuZXZlciBWYWxpZGF0aW9uT3B0aW9ucyBhcmUgbm90IHNwZWNpZmllZC5cclxuICAqKi9cclxuICBzdGF0aWMgZGVmYXVsdEluc3RhbmNlID0gbmV3IFZhbGlkYXRpb25PcHRpb25zKHtcclxuICAgIHZhbGlkYXRlT25BdHRhY2g6IHRydWUsXHJcbiAgICB2YWxpZGF0ZU9uU2F2ZTogdHJ1ZSxcclxuICAgIHZhbGlkYXRlT25RdWVyeTogZmFsc2UsXHJcbiAgICB2YWxpZGF0ZU9uUHJvcGVydHlDaGFuZ2U6IHRydWVcclxuICB9KTtcclxufVxyXG5WYWxpZGF0aW9uT3B0aW9ucy5wcm90b3R5cGUuXyR0eXBlTmFtZSA9IFwiVmFsaWRhdGlvbk9wdGlvbnNcIjtcclxuXHJcbmZ1bmN0aW9uIHVwZGF0ZVdpdGhDb25maWcob3B0aW9uczogVmFsaWRhdGlvbk9wdGlvbnMsIGNvbmZpZzogVmFsaWRhdGlvbk9wdGlvbnNDb25maWcpIHtcclxuICBpZiAoY29uZmlnKSB7XHJcbiAgICBhc3NlcnRDb25maWcoY29uZmlnKVxyXG4gICAgICAgIC53aGVyZVBhcmFtKFwidmFsaWRhdGVPbkF0dGFjaFwiKS5pc0Jvb2xlYW4oKS5pc09wdGlvbmFsKClcclxuICAgICAgICAud2hlcmVQYXJhbShcInZhbGlkYXRlT25TYXZlXCIpLmlzQm9vbGVhbigpLmlzT3B0aW9uYWwoKVxyXG4gICAgICAgIC53aGVyZVBhcmFtKFwidmFsaWRhdGVPblF1ZXJ5XCIpLmlzQm9vbGVhbigpLmlzT3B0aW9uYWwoKVxyXG4gICAgICAgIC53aGVyZVBhcmFtKFwidmFsaWRhdGVPblByb3BlcnR5Q2hhbmdlXCIpLmlzQm9vbGVhbigpLmlzT3B0aW9uYWwoKVxyXG4gICAgICAgIC5hcHBseUFsbChvcHRpb25zKTtcclxuICB9XHJcbiAgcmV0dXJuIG9wdGlvbnM7XHJcbn1cclxuIl19
|
package/esm5/src/data-service.js
CHANGED
|
@@ -204,4 +204,4 @@ function extractKeyMappingsDefault(data) {
|
|
|
204
204
|
function extractDeletedKeysDefault(data) {
|
|
205
205
|
return data.deletedKeys || data.DeletedKeys || [];
|
|
206
206
|
}
|
|
207
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC8iLCJzb3VyY2VzIjpbInNyYy9kYXRhLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQWlCOUI7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNIO0lBb0JFOzs7Ozs7Ozs7Ozs7Ozs7T0FlRztJQUNILHFCQUFZLE1BQTBCO1FBQ3BDLGdCQUFnQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBR0Q7OztPQUdHO0lBQ0gsMkJBQUssR0FBTCxVQUFNLE1BQXlCO1FBQzdCLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDekIsSUFBSSxNQUFNLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLG1CQUFPLEdBQWQsVUFBZSxZQUEyQjtRQUN4QyxpQkFBaUI7UUFDakIsb0NBQW9DO1FBQ25DLFlBQW9CLENBQUMsSUFBSSxDQUFDO1lBQ3pCLGlCQUFpQixFQUFFLElBQUk7WUFDdkIsUUFBUSxFQUFFLEtBQUs7U0FDaEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxFQUFFLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFDeEQsQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU5RyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRTtZ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LE9BQU8sSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztBQUNwRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5VHlwZSwgTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSAnLi9lbnRpdHktbWV0YWRhdGEnO1xyXG5pbXBvcnQgeyBEYXRhU2VydmljZUFkYXB0ZXIsIFVyaUJ1aWxkZXJBZGFwdGVyIH0gZnJvbSAnLi9pbnRlcmZhY2UtcmVnaXN0cnknO1xyXG5pbXBvcnQgeyBLZXlNYXBwaW5nIH0gZnJvbSAnLi9lbnRpdHktbWFuYWdlcic7XHJcbmltcG9ydCB7IE1hcHBpbmdDb250ZXh0IH0gZnJvbSAnLi9tYXBwaW5nLWNvbnRleHQnO1xyXG5pbXBvcnQgeyBhc3NlcnRDb25maWcgfSBmcm9tICcuL2Fzc2VydC1wYXJhbSc7XHJcbmltcG9ydCB7IGNvbmZpZyB9IGZyb20gJy4vY29uZmlnJztcclxuaW1wb3J0IHsgY29yZSB9IGZyb20gJy4vY29yZSc7XHJcblxyXG4vKiogQ29uZmlndXJhdGlvbiBpbmZvIHRvIGJlIHBhc3NlZCB0byB0aGUgW1tEYXRhU2VydmljZV1dIGNvbnN0cnVjdG9yICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVNlcnZpY2VDb25maWcge1xyXG4gIC8qKiBUaGUgc2VydmljZU5hbWUgZm9yIHRoaXMgRGF0YVNlcnZpY2UuICAqKi9cclxuICBzZXJ2aWNlTmFtZT86IHN0cmluZztcclxuICAvKiogVGhlIGFkYXB0ZXIgbmFtZSBmb3IgdGhlIFtbSURhdGFTZXJ2aWNlQWRhcHRlcl1dIHRvIGJlIHVzZWQgd2l0aCB0aGlzIHNlcnZpY2UuICAqKi9cclxuICBhZGFwdGVyTmFtZT86IHN0cmluZztcclxuICAvKiogVGhlIGFkYXB0ZXIgbmFtZSBmb3IgdGhlIFtbSVVyaUJ1aWxkZXJBZGFwdGVyXV0gdG8gYmUgdXNlZCB3aXRoIHRoaXMgc2VydmljZS4gICoqL1xyXG4gIHVyaUJ1aWxkZXJOYW1lPzogc3RyaW5nO1xyXG4gIC8qKiBXaGV0aGVyIHRoZSBzZXJ2ZXIgY2FuIHByb3ZpZGUgbWV0YWRhdGEgZm9yIHRoaXMgc2VydmljZS4gICoqL1xyXG4gIGhhc1NlcnZlck1ldGFkYXRhPzogYm9vbGVhbjtcclxuICAvKiogVGhlIFtbSnNvblJlc3VsdHNBZGFwdGVyXV0gdXNlZCB0byBwcm9jZXNzIHRoZSByZXN1bHRzIG9mIGFueSBxdWVyeSBhZ2FpbnN0IHRoaXMgRGF0YVNlcnZpY2UuICAqKi9cclxuICBqc29uUmVzdWx0c0FkYXB0ZXI/OiBKc29uUmVzdWx0c0FkYXB0ZXI7XHJcbiAgLyoqIFdoZXRoZXIgdG8gdXNlIEpTT05QIHdoZW4gcGVyZm9ybWluZyBhICdHRVQnIHJlcXVlc3QgYWdhaW5zdCB0aGlzIHNlcnZpY2UuICAqKi9cclxuICB1c2VKc29ucD86IGJvb2xlYW47XHJcbn1cclxuLyoqXHJcbkEgRGF0YVNlcnZpY2UgaW5zdGFuY2UgaXMgdXNlZCB0byBlbmNhcHN1bGF0ZSB0aGUgZGV0YWlscyBvZiBhIHNpbmdsZSAnc2VydmljZSc7IHRoaXMgaW5jbHVkZXMgYSBzZXJ2aWNlTmFtZSwgYSBkYXRhU2VydmljZSBhZGFwdGVySW5zdGFuY2UsXHJcbmFuZCB3aGV0aGVyIHRoZSBzZXJ2aWNlIGhhcyBzZXJ2ZXIgc2lkZSBtZXRhZGF0YS5cclxuXHJcbllvdSBjYW4gY29uc3RydWN0IGFuIEVudGl0eU1hbmFnZXIgd2l0aCBlaXRoZXIgYSBzZXJ2aWNlTmFtZSBvciBhIERhdGFTZXJ2aWNlIGluc3RhbmNlLCBpZiB5b3UgdXNlIGEgc2VydmljZU5hbWUgdGhlbiBhIERhdGFTZXJ2aWNlXHJcbmlzIGNvbnN0cnVjdGVkIGZvciB5b3UuICAoSXQgY2FuIGFsc28gYmUgc2V0IHZpYSB0aGUgRW50aXR5TWFuYWdlci5zZXRQcm9wZXJ0aWVzIG1ldGhvZCkuXHJcblxyXG5UaGUgc2FtZSBhcHBsaWVzIHRvIHRoZSBNZXRhZGF0YVN0b3JlLmZldGNoTWV0YWRhdGEgbWV0aG9kLCBpLmUuIGl0IHRha2VzIGVpdGhlciBhIHNlcnZpY2VOYW1lIG9yIGEgRGF0YVNlcnZpY2UgaW5zdGFuY2UuXHJcblxyXG5FYWNoIG1ldGFkYXRhU3RvcmUgY29udGFpbnMgYSBsaXN0IG9mIERhdGFTZXJ2aWNlcywgZWFjaCBhY2Nlc3NpYmxlIHZpYSBpdHMg4oCYc2VydmljZU5hbWXigJkuXHJcbiggc2VlIE1ldGFkYXRhU3RvcmUuZ2V0RGF0YVNlcnZpY2UgYW5kIE1ldGFkYXRhU3RvcmUuYWRkRGF0YVNlcnZpY2UpLiAgVGhlIOKAmGFkZERhdGFTZXJ2aWNl4oCZIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWxseVxyXG5hbnl0aW1lIGEgTWV0YWRhdGFTdG9yZS5mZXRjaE1ldGFkYXRhIGNhbGwgb2NjdXJzIHdpdGggYSBuZXcgZGF0YVNlcnZpY2UgKCBvciBzZXJ2aWNlIG5hbWUpLlxyXG5cclxuKiovXHJcbmV4cG9ydCBjbGFzcyBEYXRhU2VydmljZSB7XHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgXyR0eXBlTmFtZTogc3RyaW5nOyAvLyBhY3R1YWxseSBwdXQgb24gcHJvdG90eXBlLlxyXG4gIC8qKiBUaGUgc2VydmljZU5hbWUgZm9yIHRoaXMgRGF0YVNlcnZpY2UuIF9fUmVhZCBPbmx5X18gKiovXHJcbiAgc2VydmljZU5hbWU6IHN0cmluZztcclxuICAvKiogVGhlIGFkYXB0ZXIgbmFtZSBmb3IgdGhlIFtbSURhdGFTZXJ2aWNlQWRhcHRlcl1dIHRvIGJlIHVzZWQgd2l0aCB0aGlzIHNlcnZpY2UuIF9fUmVhZCBPbmx5X18gICoqL1xyXG4gIGFkYXB0ZXJOYW1lOiBzdHJpbmc7XHJcbiAgLyoqICBUaGUgW1tJRGF0YVNlcnZpY2VBZGFwdGVyXV0gaW1wbGVtZW50YXRpb24gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgRW50aXR5TWFuYWdlci4gX19SZWFkIE9ubHlfXyAgKiovXHJcbiAgYWRhcHRlckluc3RhbmNlPzogRGF0YVNlcnZpY2VBZGFwdGVyO1xyXG4gIC8qKiBUaGUgYWRhcHRlciBuYW1lIGZvciB0aGUgW1tJVXJpQnVpbGRlckFkYXB0ZXJdXSB0byBiZSB1c2VkIHdpdGggdGhpcyBzZXJ2aWNlLiBfX1JlYWQgT25seV9fICAqKi9cclxuICB1cmlCdWlsZGVyTmFtZTogc3RyaW5nO1xyXG4gIC8qKiAgVGhlIFtbSVVyaUJ1aWxkZXJBZGFwdGVyXV0gaW1wbGVtZW50YXRpb24gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgRW50aXR5TWFuYWdlci4gX19SZWFkIE9ubHlfXyAgKiovXHJcbiAgdXJpQnVpbGRlcj86IFVyaUJ1aWxkZXJBZGFwdGVyO1xyXG4gIC8qKiBXaGV0aGVyIHRoZSBzZXJ2ZXIgY2FuIHByb3ZpZGUgbWV0YWRhdGEgZm9yIHRoaXMgc2VydmljZS4gX19SZWFkIE9ubHlfXyAgICoqL1xyXG4gIGhhc1NlcnZlck1ldGFkYXRhOiBib29sZWFuO1xyXG4gIC8qKiBUaGUgW1tKc29uUmVzdWx0c0FkYXB0ZXJdXSB1c2VkIHRvIHByb2Nlc3MgdGhlIHJlc3VsdHMgb2YgYW55IHF1ZXJ5IGFnYWluc3QgdGhpcyBEYXRhU2VydmljZS4gX19SZWFkIE9ubHlfXyAqKi9cclxuICBqc29uUmVzdWx0c0FkYXB0ZXI6IEpzb25SZXN1bHRzQWRhcHRlcjtcclxuICAvKiogV2hldGhlciB0byB1c2UgSlNPTlAgd2hlbiBwZXJmb3JtaW5nIGEgJ0dFVCcgcmVxdWVzdCBhZ2FpbnN0IHRoaXMgc2VydmljZS4gX19SZWFkIE9ubHlfXyAgKiovXHJcbiAgdXNlSnNvbnA6IGJvb2xlYW47XHJcblxyXG4gIC8qKiAgIERhdGFTZXJ2aWNlIGNvbnN0cnVjdG9yXHJcbiAgPiAgICAgdmFyIGRhdGFTZXJ2aWNlID0gbmV3IERhdGFTZXJ2aWNlKHtcclxuICA+ICAgICAgICAgc2VydmljZU5hbWU6IGFsdFNlcnZpY2VOYW1lLFxyXG4gID4gICAgICAgICBoYXNTZXJ2ZXJNZXRhZGF0YTogZmFsc2VcclxuICA+ICAgICB9KTtcclxuXHJcbiAgPiAgICAgdmFyIG1ldGFkYXRhU3RvcmUgPSBuZXcgTWV0YWRhdGFTdG9yZSh7XHJcbiAgPiAgICAgICAgIG5hbWluZ0NvbnZlbnRpb246IE5hbWluZ0NvbnZlbnRpb24uY2FtZWxDYXNlXHJcbiAgPiAgICAgfSk7XHJcblxyXG4gID4gICAgIHJldHVybiBuZXcgRW50aXR5TWFuYWdlcih7XHJcbiAgPiAgICAgICAgIGRhdGFTZXJ2aWNlOiBkYXRhU2VydmljZSxcclxuICA+ICAgICAgICAgbWV0YWRhdGFTdG9yZTogbWV0YWRhdGFTdG9yZVxyXG4gID4gICAgIH0pO1xyXG4gIEBwYXJhbSBjb25maWcgLSBBIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gICoqL1xyXG4gIGNvbnN0cnVjdG9yKGNvbmZpZz86IERhdGFTZXJ2aWNlQ29uZmlnKSB7XHJcbiAgICB1cGRhdGVXaXRoQ29uZmlnKHRoaXMsIGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyBhIGNvcHkgb2YgdGhpcyBEYXRhU2VydmljZSB3aXRoIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcyBhcHBsaWVkLlxyXG4gIEBwYXJhbSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgdG8gYXBwbHkgdG8gY3JlYXRlIGEgbmV3IERhdGFTZXJ2aWNlLlxyXG4gICoqL1xyXG4gIHVzaW5nKGNvbmZpZzogRGF0YVNlcnZpY2VDb25maWcpIHtcclxuICAgIGlmICghY29uZmlnKSByZXR1cm4gdGhpcztcclxuICAgIGxldCByZXN1bHQgPSBuZXcgRGF0YVNlcnZpY2UodGhpcyk7XHJcbiAgICByZXR1cm4gdXBkYXRlV2l0aENvbmZpZyhyZXN1bHQsIGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcmVzb2x2ZShkYXRhU2VydmljZXM6IERhdGFTZXJ2aWNlW10pIHtcclxuICAgIC8vIGZpbmFsIGRlZmF1bHRzXHJcbiAgICAvLyBEZWxpYmVyYXRlIHVzZSBvZiAnYXMgYW55JyBiZWxvdy5cclxuICAgIChkYXRhU2VydmljZXMgYXMgYW55KS5wdXNoKHtcclxuICAgICAgaGFzU2VydmVyTWV0YWRhdGE6IHRydWUsXHJcbiAgICAgIHVzZUpzb25wOiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgICBsZXQgZHMgPSBuZXcgRGF0YVNlcnZpY2UoY29yZS5yZXNvbHZlUHJvcGVydGllcyhkYXRhU2VydmljZXMsXHJcbiAgICAgICAgW1wic2VydmljZU5hbWVcIiwgXCJhZGFwdGVyTmFtZVwiLCBcInVyaUJ1aWxkZXJOYW1lXCIsIFwiaGFzU2VydmVyTWV0YWRhdGFcIiwgXCJqc29uUmVzdWx0c0FkYXB0ZXJcIiwgXCJ1c2VKc29ucFwiXSkpO1xyXG5cclxuICAgIGlmICghZHMuc2VydmljZU5hbWUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIHJlc29sdmUgYSAnc2VydmljZU5hbWUnIGZvciB0aGlzIGRhdGFTZXJ2aWNlXCIpO1xyXG4gICAgfVxyXG4gICAgZHMuYWRhcHRlckluc3RhbmNlID0gZHMuYWRhcHRlckluc3RhbmNlIHx8IGNvbmZpZy5nZXRBZGFwdGVySW5zdGFuY2U8RGF0YVNlcnZpY2VBZGFwdGVyPihcImRhdGFTZXJ2aWNlXCIsIGRzLmFkYXB0ZXJOYW1lKTtcclxuICAgIGRzLmpzb25SZXN1bHRzQWRhcHRlciA9IGRzLmpzb25SZXN1bHRzQWRhcHRlciB8fCBkcy5hZGFwdGVySW5zdGFuY2UhLmpzb25SZXN1bHRzQWRhcHRlcjtcclxuICAgIGRzLnVyaUJ1aWxkZXIgPSBkcy51cmlCdWlsZGVyIHx8IGNvbmZpZy5nZXRBZGFwdGVySW5zdGFuY2U8VXJpQnVpbGRlckFkYXB0ZXI+KFwidXJpQnVpbGRlclwiLCBkcy51cmlCdWlsZGVyTmFtZSk7XHJcbiAgICByZXR1cm4gZHM7XHJcbiAgfVxyXG5cclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBzdGF0aWMgX25vcm1hbGl6ZVNlcnZpY2VOYW1lKHNlcnZpY2VOYW1lOiBzdHJpbmcpIHtcclxuICAgIHNlcnZpY2VOYW1lID0gc2VydmljZU5hbWUudHJpbSgpO1xyXG4gICAgaWYgKHNlcnZpY2VOYW1lLnN1YnN0cigtMSkgIT09IFwiL1wiKSB7XHJcbiAgICAgIHJldHVybiBzZXJ2aWNlTmFtZSArICcvJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBzZXJ2aWNlTmFtZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiAgKi9cclxuICB0b0pTT04oKSB7XHJcbiAgICAvLyBkb24ndCB1c2UgZGVmYXVsdCB2YWx1ZSBoZXJlIC0gYmVjYXVzZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2ggdW5kZWZpbmVkIHByb3BzIGZvciBpbmhlcml0ZW5jZSBwdXJwb3Nlcy5cclxuICAgIHJldHVybiBjb3JlLnRvSnNvbih0aGlzLCB7XHJcbiAgICAgIHNlcnZpY2VOYW1lOiBudWxsLFxyXG4gICAgICBhZGFwdGVyTmFtZTogbnVsbCxcclxuICAgICAgdXJpQnVpbGRlck5hbWU6IG51bGwsXHJcbiAgICAgIGhhc1NlcnZlck1ldGFkYXRhOiBudWxsLFxyXG4gICAgICBqc29uUmVzdWx0c0FkYXB0ZXI6IGZ1bmN0aW9uICh2OiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gdiAmJiB2Lm5hbWU7XHJcbiAgICAgIH0sXHJcbiAgICAgIHVzZUpzb25wOiBudWxsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uOiBhbnkpIHtcclxuICAgIGpzb24uanNvblJlc3VsdHNBZGFwdGVyID0gY29uZmlnLl9mZXRjaE9iamVjdChKc29uUmVzdWx0c0FkYXB0ZXIsIGpzb24uanNvblJlc3VsdHNBZGFwdGVyKTtcclxuICAgIHJldHVybiBuZXcgRGF0YVNlcnZpY2UoanNvbik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgUmV0dXJucyBhIHVybCBmb3IgdGhpcyBkYXRhU2VydmljZSB3aXRoIHRoZSBzcGVjaWZpZWQgc3VmZml4LiBUaGlzIG1ldGhvZCBoYW5kbGVzIGRhdGFTZXJ2aWNlIG5hbWVzIGVpdGhlclxyXG4gICB3aXRoIG9yIHdpdGhvdXQgdHJhaWxpbmcgJy8ncy4gIElmIHRoZSBzdWZmaXggc3RhcnRzIHdpdGggXCJodHRwXCIgdGhlbiBpdCB3aWxsIGJlIHJldHVybmVkIGFzLWlzLlxyXG4gICBAbWV0aG9kIHF1YWxpZnlVcmxcclxuICAgQHBhcmFtIHN1ZmZpeCB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHVybC5cclxuICAgQHJldHVybiB7YSBVcmwgc3RyaW5nfVxyXG4gICAqKi9cclxuICBxdWFsaWZ5VXJsKHN1ZmZpeDogc3RyaW5nKSB7XHJcbiAgICBpZiAoc3VmZml4ICYmIHN1ZmZpeC5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xyXG4gICAgICByZXR1cm4gc3VmZml4O1xyXG4gICAgfVxyXG4gICAgbGV0IHVybCA9IHRoaXMuc2VydmljZU5hbWU7XHJcbiAgICAvLyByZW1vdmUgYW55IHRyYWlsaW5nIFwiL1wiXHJcbiAgICBpZiAoY29yZS5zdHJpbmdFbmRzV2l0aCh1cmwsIFwiL1wiKSkge1xyXG4gICAgICB1cmwgPSB1cmwuc3Vic3RyKDAsIHVybC5sZW5ndGggLSAxKTtcclxuICAgIH1cclxuICAgIC8vIGVuc3VyZSB0aGF0IGl0IGVuZHMgd2l0aCBcIi9cIiArIHN1ZmZpeFxyXG4gICAgc3VmZml4ID0gXCIvXCIgKyBzdWZmaXg7XHJcbiAgICBpZiAoIWNvcmUuc3RyaW5nRW5kc1dpdGgodXJsLCBzdWZmaXgpKSB7XHJcbiAgICAgIHVybCA9IHVybCArIHN1ZmZpeDtcclxuICAgIH1cclxuICAgIHJldHVybiB1cmw7XHJcbiAgfVxyXG5cclxufVxyXG5EYXRhU2VydmljZS5wcm90b3R5cGUuXyR0eXBlTmFtZSA9IFwiRGF0YVNlcnZpY2VcIjtcclxuXHJcbmZ1bmN0aW9uIHVwZGF0ZVdpdGhDb25maWcob2JqOiBEYXRhU2VydmljZSwgZHNDb25maWc/OiBEYXRhU2VydmljZUNvbmZpZykge1xyXG4gIGlmIChkc0NvbmZpZykge1xyXG4gICAgYXNzZXJ0Q29uZmlnKGRzQ29uZmlnKVxyXG4gICAgICAgIC53aGVyZVBhcmFtKFwic2VydmljZU5hbWVcIikuaXNPcHRpb25hbCgpXHJcbiAgICAgICAgLndoZXJlUGFyYW0oXCJhZGFwdGVyTmFtZVwiKS5pc1N0cmluZygpLmlzT3B0aW9uYWwoKVxyXG4gICAgICAgIC53aGVyZVBhcmFtKFwidXJpQnVpbGRlck5hbWVcIikuaXNTdHJpbmcoKS5pc09wdGlvbmFsKClcclxuICAgICAgICAud2hlcmVQYXJhbShcImhhc1NlcnZlck1ldGFkYXRhXCIpLmlzQm9vbGVhbigpLmlzT3B0aW9uYWwoKVxyXG4gICAgICAgIC53aGVyZVBhcmFtKFwianNvblJlc3VsdHNBZGFwdGVyXCIpLmlzSW5zdGFuY2VPZihKc29uUmVzdWx0c0FkYXB0ZXIpLmlzT3B0aW9uYWwoKVxyXG4gICAgICAgIC53aGVyZVBhcmFtKFwidXNlSnNvbnBcIikuaXNCb29sZWFuKCkuaXNPcHRpb25hbCgpXHJcbiAgICAgICAgLmFwcGx5QWxsKG9iaik7XHJcbiAgICBvYmouc2VydmljZU5hbWUgPSBvYmouc2VydmljZU5hbWUgJiYgRGF0YVNlcnZpY2UuX25vcm1hbGl6ZVNlcnZpY2VOYW1lKG9iai5zZXJ2aWNlTmFtZSk7XHJcbiAgICBvYmouYWRhcHRlckluc3RhbmNlID0gb2JqLmFkYXB0ZXJOYW1lID8gIGNvbmZpZy5nZXRBZGFwdGVySW5zdGFuY2U8RGF0YVNlcnZpY2VBZGFwdGVyPihcImRhdGFTZXJ2aWNlXCIsIG9iai5hZGFwdGVyTmFtZSkgOiB1bmRlZmluZWQ7XHJcbiAgICBvYmoudXJpQnVpbGRlciA9IG9iai51cmlCdWlsZGVyTmFtZSA/IGNvbmZpZy5nZXRBZGFwdGVySW5zdGFuY2U8VXJpQnVpbGRlckFkYXB0ZXI+KFwidXJpQnVpbGRlclwiLCBvYmoudXJpQnVpbGRlck5hbWUpIDogdW5kZWZpbmVkO1xyXG4gIH1cclxuICByZXR1cm4gb2JqO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVNZXRhIHtcclxuICBlbnRpdHlUeXBlPzogRW50aXR5VHlwZTtcclxuICBub2RlSWQ/OiBzdHJpbmc7XHJcbiAgbm9kZVJlZklkPzogc3RyaW5nO1xyXG4gIGlnbm9yZT86IGJvb2xlYW47XHJcbiAgcGFzc1RocnU/OiBib29sZWFuO1xyXG4gIGV4dHJhTWV0YWRhdGE/OiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTm9kZUNvbnRleHQge1xyXG4gIG5vZGVUeXBlOiBzdHJpbmc7XHJcbiAgcHJvcGVydHlOYW1lPzogc3RyaW5nO1xyXG4gIG5hdmlnYXRpb25Qcm9wZXJ0eT86IE5hdmlnYXRpb25Qcm9wZXJ0eTtcclxufVxyXG5cclxuLyoqIENvbmZpZ3VyYXRpb24gaW5mbyB0byBiZSBwYXNzZWQgdG8gdGhlIFtbSnNvblJlc3VsdHNBZGFwdGVyXV0gY29uc3RydWN0b3IgKi9cclxuZXhwb3J0IGludGVyZmFjZSBKc29uUmVzdWx0c0FkYXB0ZXJDb25maWcge1xyXG4gIC8qKiBUaGUgbmFtZSBvZiB0aGlzIGFkYXB0ZXIuICBUaGlzIG5hbWUgaXMgdXNlZCB0byB1bmlxdWVseSBpZGVudGlmeSBhbmQgbG9jYXRlIHRoaXMgaW5zdGFuY2Ugd2hlbiBhbiAnZXhwb3J0ZWQnIEpzb25SZXN1bHRzQWRhcHRlciBpcyBsYXRlciBpbXBvcnRlZC4gKi9cclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgLyoqIEEgRnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgb25jZSBwZXIgcXVlcnkgb3BlcmF0aW9uIHRvIGV4dHJhY3QgdGhlICdwYXlsb2FkJyBmcm9tIGFueSBqc29uIHJlY2VpdmVkIG92ZXIgdGhlIHdpcmUuIFxyXG4gIFRoaXMgbWV0aG9kIGhhcyBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2hpY2ggdG8gc2ltcGx5IHJldHVybiB0aGUgXCJyZXN1bHRzXCIgcHJvcGVydHkgZnJvbSBhbnkganNvbiByZXR1cm5lZCBhcyBhIHJlc3VsdCBvZiBleGVjdXRpbmcgdGhlIHF1ZXJ5LiBcclxuICAqL1xyXG4gIGV4dHJhY3RSZXN1bHRzPzogRnVuY3Rpb247XHJcbiAgLyoqIEEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgb25jZSBwZXIgc2F2ZSBvcGVyYXRpb24gdG8gZXh0cmFjdCB0aGUgZW50aXRpZXMgZnJvbSBhbnkganNvbiByZWNlaXZlZCBvdmVyIHRoZSB3aXJlLiAgTXVzdCByZXR1cm4gYW4gYXJyYXkuXHJcbiAgVGhpcyBtZXRob2QgaGFzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aGljaCBzaW1wbHkgcmV0dXJucyB0aGUgXCJlbnRpdGllc1wiIHByb3BlcnR5IGZyb20gYW55IGpzb24gcmV0dXJuZWQgYXMgYSByZXN1bHQgb2YgZXhlY3V0aW5nIHRoZSBzYXZlLiAqL1xyXG4gIGV4dHJhY3RTYXZlUmVzdWx0cz86IEZ1bmN0aW9uO1xyXG4gIC8qKiBBIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIG9uY2UgcGVyIHNhdmUgb3BlcmF0aW9uIHRvIGV4dHJhY3QgdGhlIGtleSBtYXBwaW5ncyBmcm9tIGFueSBqc29uIHJlY2VpdmVkIG92ZXIgdGhlIHdpcmUuICBNdXN0IHJldHVybiBhbiBhcnJheS5cclxuICBUaGlzIG1ldGhvZCBoYXMgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdoaWNoIHNpbXBseSByZXR1cm5zIHRoZSBcImtleU1hcHBpbmdzXCIgcHJvcGVydHkgZnJvbSBhbnkganNvbiByZXR1cm5lZCBhcyBhIHJlc3VsdCBvZiBleGVjdXRpbmcgdGhlIHNhdmUuICovXHJcbiAgZXh0cmFjdEtleU1hcHBpbmdzPzogKGRhdGE6IHt9KSA9PiBLZXlNYXBwaW5nW107XHJcbiAgLyoqIEEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgb25jZSBwZXIgc2F2ZSBvcGVyYXRpb24gdG8gZXh0cmFjdCBhbnkgZGVsZXRlZCBrZXlzIGZyb20gYW55IGpzb24gcmVjZWl2ZWQgb3ZlciB0aGUgd2lyZS4gIE11c3QgcmV0dXJuIGFuIGFycmF5LlxyXG4gIFRoaXMgbWV0aG9kIGhhcyBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2hpY2ggc2ltcGx5IHJldHVybnMgYW4gZW1wdHkgYXJyYXkuICovXHJcbiAgZXh0cmFjdERlbGV0ZWRLZXlzPzogKGRhdGE6IHt9KSA9PiBhbnlbXTsgLy8gVE9ETzogcmVmaW5lXHJcbiAgLyoqIEEgdmlzaXRvciBtZXRob2QgdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIG5vZGUgb2YgdGhlIHJldHVybmVkIHBheWxvYWQuICovXHJcbiAgdmlzaXROb2RlPzogKHY6IGFueSwgbWM/OiBNYXBwaW5nQ29udGV4dCwgbm9kZUNvbnRleHQ/OiBOb2RlQ29udGV4dCkgPT4gTm9kZU1ldGE7XHJcblxyXG59XHJcblxyXG4vKipcclxuQSBKc29uUmVzdWx0c0FkYXB0ZXIgaW5zdGFuY2UgaXMgdXNlZCB0byBwcm92aWRlIGN1c3RvbSBleHRyYWN0aW9uIGFuZCBwYXJzaW5nIGxvZ2ljIG9uIHRoZSBqc29uIHJlc3VsdHMgcmV0dXJuZWQgYnkgYW55IHdlYiBzZXJ2aWNlLlxyXG5UaGlzIGZhY2lsaXR5IG1ha2VzIGl0IHBvc3NpYmxlIGZvciBicmVlemUgdG8gdGFsayB0byB2aXJ0dWFsbHkgYW55IHdlYiBzZXJ2aWNlIGFuZCByZXR1cm4gb2JqZWN0cyB0aGF0IHdpbGwgYmUgZmlyc3QgY2xhc3MgJ2JyZWV6ZScgY2l0aXplbnMuXHJcbioqL1xyXG5leHBvcnQgY2xhc3MgSnNvblJlc3VsdHNBZGFwdGVyIHtcclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBfJHR5cGVOYW1lOiBzdHJpbmc7IC8vIGFjdHVhbGx5IHB1dCBvbiBwcm90b3R5cGUuXHJcbiAgLyoqIFRoZSBuYW1lIG9mIHRoaXMgYWRhcHRlci4gIFRoaXMgbmFtZSBpcyB1c2VkIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IGFuZCBsb2NhdGUgdGhpcyBpbnN0YW5jZSB3aGVuIGFuICdleHBvcnRlZCcgSnNvblJlc3VsdHNBZGFwdGVyIGlzIGxhdGVyIGltcG9ydGVkLiAqL1xyXG4gIG5hbWU6IHN0cmluZztcclxuICAvKiogQSBGdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBvbmNlIHBlciBxdWVyeSBvcGVyYXRpb24gdG8gZXh0cmFjdCB0aGUgJ3BheWxvYWQnIGZyb20gYW55IGpzb24gcmVjZWl2ZWQgb3ZlciB0aGUgd2lyZS4gXHJcbiAgVGhpcyBtZXRob2QgaGFzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aGljaCBzaW1wbHkgcmV0dXJucyB0aGUgXCJyZXN1bHRzXCIgcHJvcGVydHkgZnJvbSBhbnkganNvbiByZXR1cm5lZCBhcyBhIHJlc3VsdCBvZiBleGVjdXRpbmcgdGhlIHF1ZXJ5LiAqL1xyXG4gIGV4dHJhY3RSZXN1bHRzOiBGdW5jdGlvbjsgLy8gVE9ETyAtIHJlZmluZVxyXG4gIC8qKiBBIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIG9uY2UgcGVyIHNhdmUgb3BlcmF0aW9uIHRvIGV4dHJhY3QgdGhlIGVudGl0aWVzIGZyb20gYW55IGpzb24gcmVjZWl2ZWQgb3ZlciB0aGUgd2lyZS4gIE11c3QgcmV0dXJuIGFuIGFycmF5LlxyXG4gIFRoaXMgbWV0aG9kIGhhcyBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2hpY2ggc2ltcGx5IHJldHVybnMgdGhlIFwiZW50aXRpZXNcIiBwcm9wZXJ0eSBmcm9tIGFueSBqc29uIHJldHVybmVkIGFzIGEgcmVzdWx0IG9mIGV4ZWN1dGluZyB0aGUgc2F2ZS4gKi9cclxuICBleHRyYWN0U2F2ZVJlc3VsdHM6IEZ1bmN0aW9uO1xyXG4gICAgLyoqIEEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgb25jZSBwZXIgc2F2ZSBvcGVyYXRpb24gdG8gZXh0cmFjdCB0aGUga2V5IG1hcHBpbmdzIGZyb20gYW55IGpzb24gcmVjZWl2ZWQgb3ZlciB0aGUgd2lyZS4gIE11c3QgcmV0dXJuIGFuIGFycmF5LlxyXG4gIFRoaXMgbWV0aG9kIGhhcyBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2hpY2ggc2ltcGx5IHJldHVybnMgdGhlIFwia2V5TWFwcGluZ3NcIiBwcm9wZXJ0eSBmcm9tIGFueSBqc29uIHJldHVybmVkIGFzIGEgcmVzdWx0IG9mIGV4ZWN1dGluZyB0aGUgc2F2ZS4gKi9cclxuICBleHRyYWN0S2V5TWFwcGluZ3M6ICAoZGF0YToge30pID0+IEtleU1hcHBpbmdbXTtcclxuICAvKiogQSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBvbmNlIHBlciBzYXZlIG9wZXJhdGlvbiB0byBleHRyYWN0IGFueSBkZWxldGVkIGtleXMgZnJvbSBhbnkganNvbiByZWNlaXZlZCBvdmVyIHRoZSB3aXJlLiAgTXVzdCByZXR1cm4gYW4gYXJyYXkuXHJcbiAgVGhpcyBtZXRob2QgaGFzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aGljaCBpcyB0byBzaW1wbHkgcmV0dXJucyB0aGUgXCJkZWxldGVkS2V5c1wiIHByb3BlcnR5IGZyb20gYW55IGpzb24gcmV0dXJuZWQgYXMgYSByZXN1bHQgb2YgZXhlY3V0aW5nIHRoZSBzYXZlLiAqL1xyXG4gIGV4dHJhY3REZWxldGVkS2V5cz86IChkYXRhOiB7fSkgPT4gYW55W107IC8vIFRPRE86IHJlZmluZVxyXG4gIC8qKiBBIHZpc2l0b3IgbWV0aG9kIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBub2RlIG9mIHRoZSByZXR1cm5lZCBwYXlsb2FkLiAqL1xyXG4gIHZpc2l0Tm9kZTogRnVuY3Rpb247XHJcblxyXG4gIC8qKlxyXG4gIEpzb25SZXN1bHRzQWRhcHRlciBjb25zdHJ1Y3RvclxyXG5cclxuICBAZXhhbXBsZVxyXG4gICAgICAvL1xyXG4gICAgICB2YXIganNvblJlc3VsdHNBZGFwdGVyID0gbmV3IEpzb25SZXN1bHRzQWRhcHRlcih7XHJcbiAgICAgICAgICBuYW1lOiBcInRlc3QxZVwiLFxyXG4gICAgICAgICAgZXh0cmFjdFJlc3VsdHM6IGZ1bmN0aW9uKGpzb24pIHtcclxuICAgICAgICAgICAgICByZXR1cm4ganNvbi5yZXN1bHRzO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHZpc2l0Tm9kZTogZnVuY3Rpb24obm9kZSwgbWFwcGluZ0NvbnRleHQsIG5vZGVDb250ZXh0KSB7XHJcbiAgICAgICAgICAgICAgdmFyIGVudGl0eVR5cGUgPSBub3JtYWxpemVUeXBlTmFtZShub2RlLiR0eXBlKTtcclxuICAgICAgICAgICAgICB2YXIgcHJvcGVydHlOYW1lID0gbm9kZUNvbnRleHQucHJvcGVydHlOYW1lO1xyXG4gICAgICAgICAgICAgIHZhciBpZ25vcmUgPSBwcm9wZXJ0eU5hbWUgJiYgcHJvcGVydHlOYW1lLnN1YnN0cigwLCAxKSA9PT0gXCIkXCI7XHJcblxyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU6IGVudGl0eVR5cGUsXHJcbiAgICAgICAgICAgICAgICAgIG5vZGVJZDogbm9kZS4kaWQsXHJcbiAgICAgICAgICAgICAgICAgIG5vZGVSZWZJZDogbm9kZS4kcmVmLFxyXG4gICAgICAgICAgICAgICAgICBpZ25vcmU6IGlnbm9yZSxcclxuICAgICAgICAgICAgICAgICAgcGFzc1RocnU6IGZhbHNlIC8vIGRlZmF1bHRcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHZhciBkYXRhU2VydmljZSA9IG5ldyBEYXRhU2VydmljZSgge1xyXG4gICAgICAgICAgICAgIHNlcnZpY2VOYW1lOiBcImJyZWV6ZS9mb29cIixcclxuICAgICAgICAgICAgICBqc29uUmVzdWx0c0FkYXB0ZXI6IGpzb25SZXN1bHRzQWRhcHRlclxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHZhciBlbnRpdHlNYW5hZ2VyID0gbmV3IEVudGl0eU1hbmFnZXIoIHtcclxuICAgICAgICAgIGRhdGFTZXJ2aWNlOiBkYXRhU2VydmljZVxyXG4gICAgICB9KTtcclxuXHJcbiAgQHBhcmFtIGNvbmZpZyAtIEEgY29uZmlndXJhdGlvbiBvYmplY3QuXHJcblxyXG4gICoqL1xyXG4gIGNvbnN0cnVjdG9yKGpzQ29uZmlnOiBKc29uUmVzdWx0c0FkYXB0ZXJDb25maWcpIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9PSAxKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBKc29uUmVzdWx0c0FkYXB0ZXIgY3RvciBzaG91bGQgYmUgY2FsbGVkIHdpdGggYSBzaW5nbGUgYXJndW1lbnQgdGhhdCBpcyBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3NlcnRDb25maWcoanNDb25maWcpXHJcbiAgICAgICAgLndoZXJlUGFyYW0oXCJuYW1lXCIpLmlzTm9uRW1wdHlTdHJpbmcoKVxyXG4gICAgICAgIC53aGVyZVBhcmFtKFwiZXh0cmFjdFJlc3VsdHNcIikuaXNGdW5jdGlvbigpLmlzT3B0aW9uYWwoKS53aXRoRGVmYXVsdChleHRyYWN0UmVzdWx0c0RlZmF1bHQpXHJcbiAgICAgICAgLndoZXJlUGFyYW0oXCJleHRyYWN0U2F2ZVJlc3VsdHNcIikuaXNGdW5jdGlvbigpLmlzT3B0aW9uYWwoKS53aXRoRGVmYXVsdChleHRyYWN0U2F2ZVJlc3VsdHNEZWZhdWx0KVxyXG4gICAgICAgIC53aGVyZVBhcmFtKFwiZXh0cmFjdEtleU1hcHBpbmdzXCIpLmlzRnVuY3Rpb24oKS5pc09wdGlvbmFsKCkud2l0aERlZmF1bHQoZXh0cmFjdEtleU1hcHBpbmdzRGVmYXVsdClcclxuICAgICAgICAud2hlcmVQYXJhbShcImV4dHJhY3REZWxldGVkS2V5c1wiKS5pc0Z1bmN0aW9uKCkuaXNPcHRpb25hbCgpLndpdGhEZWZhdWx0KGV4dHJhY3REZWxldGVkS2V5c0RlZmF1bHQpXHJcbiAgICAgICAgLndoZXJlUGFyYW0oXCJ2aXNpdE5vZGVcIikuaXNGdW5jdGlvbigpXHJcbiAgICAgICAgLmFwcGx5QWxsKHRoaXMpO1xyXG4gICAgY29uZmlnLl9zdG9yZU9iamVjdCh0aGlzLCBcIkpzb25SZXN1bHRzQWRhcHRlclwiLCB0aGlzLm5hbWUpO1xyXG4gIH1cclxuXHJcbn1cclxuSnNvblJlc3VsdHNBZGFwdGVyLnByb3RvdHlwZS5fJHR5cGVOYW1lID0gXCJKc29uUmVzdWx0c0FkYXB0ZXJcIjtcclxuXHJcbmZ1bmN0aW9uIGV4dHJhY3RSZXN1bHRzRGVmYXVsdChkYXRhOiBhbnkpIHtcclxuICByZXR1cm4gZGF0YS5yZXN1bHRzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBleHRyYWN0U2F2ZVJlc3VsdHNEZWZhdWx0KGRhdGE6IGFueSkge1xyXG4gIHJldHVybiBkYXRhLmVudGl0aWVzIHx8IGRhdGEuRW50aXRpZXMgfHwgW107XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGV4dHJhY3RLZXlNYXBwaW5nc0RlZmF1bHQoZGF0YTogYW55KSB7XHJcbiAgcmV0dXJuIGRhdGEua2V5TWFwcGluZ3MgfHwgZGF0YS5LZXlNYXBwaW5ncyB8fCBbXTtcclxufVxyXG5cclxuZnVuY3Rpb24gZXh0cmFjdERlbGV0ZWRLZXlzRGVmYXVsdChkYXRhOiBhbnkpIHtcclxuICByZXR1cm4gZGF0YS5kZWxldGVkS2V5cyB8fCBkYXRhLkRlbGV0ZWRLZXlzIHx8IFtdO1xyXG59XHJcblxyXG4iXX0=
|
|
207
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vYnJlZXplLWNsaWVudC8iLCJzb3VyY2VzIjpbInNyYy9kYXRhLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQWlCOUI7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNIO0lBb0JFOzs7Ozs7Ozs7Ozs7Ozs7T0FlRztJQUNILHFCQUFZLE1BQTBCO1FBQ3BDLGdCQUFnQixDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBR0Q7OztPQUdHO0lBQ0gsMkJBQUssR0FBTCxVQUFNLE1BQXlCO1FBQzdCLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDekIsSUFBSSxNQUFNLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkMsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVNLG1CQUFPLEdBQWQsVUFBZSxZQUEyQjtRQUN4QyxpQkFBaUI7UUFDakIsb0NBQW9DO1FBQ25DLFlBQW9CLENBQUMsSUFBSSxDQUFDO1lBQ3pCLGlCQUFpQixFQUFFLElBQUk7WUFDdkIsUUFBUSxFQUFFLEtBQUs7U0FDaEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxFQUFFLEdBQUcsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksRUFDeEQsQ0FBQyxhQUFhLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU5RyxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRTtZ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LE9BQU8sSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztBQUNwRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5VHlwZSwgTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSAnLi9lbnRpdHktbWV0YWRhdGEnO1xyXG5pbXBvcnQgeyBEYXRhU2VydmljZUFkYXB0ZXIsIFVyaUJ1aWxkZXJBZGFwdGVyIH0gZnJvbSAnLi9pbnRlcmZhY2UtcmVnaXN0cnknO1xyXG5pbXBvcnQgeyBLZXlNYXBwaW5nIH0gZnJvbSAnLi9lbnRpdHktbWFuYWdlcic7XHJcbmltcG9ydCB7IE1hcHBpbmdDb250ZXh0IH0gZnJvbSAnLi9tYXBwaW5nLWNvbnRleHQnO1xyXG5pbXBvcnQgeyBhc3NlcnRDb25maWcgfSBmcm9tICcuL2Fzc2VydC1wYXJhbSc7XHJcbmltcG9ydCB7IGNvbmZpZyB9IGZyb20gJy4vY29uZmlnJztcclxuaW1wb3J0IHsgY29yZSB9IGZyb20gJy4vY29yZSc7XHJcblxyXG4vKiogQ29uZmlndXJhdGlvbiBpbmZvIHRvIGJlIHBhc3NlZCB0byB0aGUgW1tEYXRhU2VydmljZV1dIGNvbnN0cnVjdG9yICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgRGF0YVNlcnZpY2VDb25maWcge1xyXG4gIC8qKiBUaGUgc2VydmljZU5hbWUgZm9yIHRoaXMgRGF0YVNlcnZpY2UuICAqKi9cclxuICBzZXJ2aWNlTmFtZT86IHN0cmluZztcclxuICAvKiogVGhlIGFkYXB0ZXIgbmFtZSBmb3IgdGhlIFtbSURhdGFTZXJ2aWNlQWRhcHRlcl1dIHRvIGJlIHVzZWQgd2l0aCB0aGlzIHNlcnZpY2UuICAqKi9cclxuICBhZGFwdGVyTmFtZT86IHN0cmluZztcclxuICAvKiogVGhlIGFkYXB0ZXIgbmFtZSBmb3IgdGhlIFtbSVVyaUJ1aWxkZXJBZGFwdGVyXV0gdG8gYmUgdXNlZCB3aXRoIHRoaXMgc2VydmljZS4gICoqL1xyXG4gIHVyaUJ1aWxkZXJOYW1lPzogc3RyaW5nO1xyXG4gIC8qKiBXaGV0aGVyIHRoZSBzZXJ2ZXIgY2FuIHByb3ZpZGUgbWV0YWRhdGEgZm9yIHRoaXMgc2VydmljZS4gICoqL1xyXG4gIGhhc1NlcnZlck1ldGFkYXRhPzogYm9vbGVhbjtcclxuICAvKiogVGhlIFtbSnNvblJlc3VsdHNBZGFwdGVyXV0gdXNlZCB0byBwcm9jZXNzIHRoZSByZXN1bHRzIG9mIGFueSBxdWVyeSBhZ2FpbnN0IHRoaXMgRGF0YVNlcnZpY2UuICAqKi9cclxuICBqc29uUmVzdWx0c0FkYXB0ZXI/OiBKc29uUmVzdWx0c0FkYXB0ZXI7XHJcbiAgLyoqIFdoZXRoZXIgdG8gdXNlIEpTT05QIHdoZW4gcGVyZm9ybWluZyBhICdHRVQnIHJlcXVlc3QgYWdhaW5zdCB0aGlzIHNlcnZpY2UuICAqKi9cclxuICB1c2VKc29ucD86IGJvb2xlYW47XHJcbn1cclxuLyoqXHJcbkEgRGF0YVNlcnZpY2UgaW5zdGFuY2UgaXMgdXNlZCB0byBlbmNhcHN1bGF0ZSB0aGUgZGV0YWlscyBvZiBhIHNpbmdsZSAnc2VydmljZSc7IHRoaXMgaW5jbHVkZXMgYSBzZXJ2aWNlTmFtZSwgYSBkYXRhU2VydmljZSBhZGFwdGVySW5zdGFuY2UsXHJcbmFuZCB3aGV0aGVyIHRoZSBzZXJ2aWNlIGhhcyBzZXJ2ZXIgc2lkZSBtZXRhZGF0YS5cclxuXHJcbllvdSBjYW4gY29uc3RydWN0IGFuIEVudGl0eU1hbmFnZXIgd2l0aCBlaXRoZXIgYSBzZXJ2aWNlTmFtZSBvciBhIERhdGFTZXJ2aWNlIGluc3RhbmNlLCBpZiB5b3UgdXNlIGEgc2VydmljZU5hbWUgdGhlbiBhIERhdGFTZXJ2aWNlXHJcbmlzIGNvbnN0cnVjdGVkIGZvciB5b3UuICAoSXQgY2FuIGFsc28gYmUgc2V0IHZpYSB0aGUgRW50aXR5TWFuYWdlci5zZXRQcm9wZXJ0aWVzIG1ldGhvZCkuXHJcblxyXG5UaGUgc2FtZSBhcHBsaWVzIHRvIHRoZSBNZXRhZGF0YVN0b3JlLmZldGNoTWV0YWRhdGEgbWV0aG9kLCBpLmUuIGl0IHRha2VzIGVpdGhlciBhIHNlcnZpY2VOYW1lIG9yIGEgRGF0YVNlcnZpY2UgaW5zdGFuY2UuXHJcblxyXG5FYWNoIG1ldGFkYXRhU3RvcmUgY29udGFpbnMgYSBsaXN0IG9mIERhdGFTZXJ2aWNlcywgZWFjaCBhY2Nlc3NpYmxlIHZpYSBpdHMg4oCYc2VydmljZU5hbWXigJkuXHJcbiggc2VlIE1ldGFkYXRhU3RvcmUuZ2V0RGF0YVNlcnZpY2UgYW5kIE1ldGFkYXRhU3RvcmUuYWRkRGF0YVNlcnZpY2UpLiAgVGhlIOKAmGFkZERhdGFTZXJ2aWNl4oCZIG1ldGhvZCBpcyBjYWxsZWQgaW50ZXJuYWxseVxyXG5hbnl0aW1lIGEgTWV0YWRhdGFTdG9yZS5mZXRjaE1ldGFkYXRhIGNhbGwgb2NjdXJzIHdpdGggYSBuZXcgZGF0YVNlcnZpY2UgKCBvciBzZXJ2aWNlIG5hbWUpLlxyXG5cclxuKiovXHJcbmV4cG9ydCBjbGFzcyBEYXRhU2VydmljZSB7XHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgZGVjbGFyZSBfJHR5cGVOYW1lOiBzdHJpbmc7IC8vIGFjdHVhbGx5IHB1dCBvbiBwcm90b3R5cGUuXHJcbiAgLyoqIFRoZSBzZXJ2aWNlTmFtZSBmb3IgdGhpcyBEYXRhU2VydmljZS4gX19SZWFkIE9ubHlfXyAqKi9cclxuICBkZWNsYXJlIHNlcnZpY2VOYW1lOiBzdHJpbmc7XHJcbiAgLyoqIFRoZSBhZGFwdGVyIG5hbWUgZm9yIHRoZSBbW0lEYXRhU2VydmljZUFkYXB0ZXJdXSB0byBiZSB1c2VkIHdpdGggdGhpcyBzZXJ2aWNlLiBfX1JlYWQgT25seV9fICAqKi9cclxuICBkZWNsYXJlIGFkYXB0ZXJOYW1lOiBzdHJpbmc7XHJcbiAgLyoqICBUaGUgW1tJRGF0YVNlcnZpY2VBZGFwdGVyXV0gaW1wbGVtZW50YXRpb24gaW5zdGFuY2UgYXNzb2NpYXRlZCB3aXRoIHRoaXMgRW50aXR5TWFuYWdlci4gX19SZWFkIE9ubHlfXyAgKiovXHJcbiAgZGVjbGFyZSBhZGFwdGVySW5zdGFuY2U/OiBEYXRhU2VydmljZUFkYXB0ZXI7XHJcbiAgLyoqIFRoZSBhZGFwdGVyIG5hbWUgZm9yIHRoZSBbW0lVcmlCdWlsZGVyQWRhcHRlcl1dIHRvIGJlIHVzZWQgd2l0aCB0aGlzIHNlcnZpY2UuIF9fUmVhZCBPbmx5X18gICoqL1xyXG4gIGRlY2xhcmUgdXJpQnVpbGRlck5hbWU6IHN0cmluZztcclxuICAvKiogIFRoZSBbW0lVcmlCdWlsZGVyQWRhcHRlcl1dIGltcGxlbWVudGF0aW9uIGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIEVudGl0eU1hbmFnZXIuIF9fUmVhZCBPbmx5X18gICoqL1xyXG4gIGRlY2xhcmUgdXJpQnVpbGRlcj86IFVyaUJ1aWxkZXJBZGFwdGVyO1xyXG4gIC8qKiBXaGV0aGVyIHRoZSBzZXJ2ZXIgY2FuIHByb3ZpZGUgbWV0YWRhdGEgZm9yIHRoaXMgc2VydmljZS4gX19SZWFkIE9ubHlfXyAgICoqL1xyXG4gIGRlY2xhcmUgaGFzU2VydmVyTWV0YWRhdGE6IGJvb2xlYW47XHJcbiAgLyoqIFRoZSBbW0pzb25SZXN1bHRzQWRhcHRlcl1dIHVzZWQgdG8gcHJvY2VzcyB0aGUgcmVzdWx0cyBvZiBhbnkgcXVlcnkgYWdhaW5zdCB0aGlzIERhdGFTZXJ2aWNlLiBfX1JlYWQgT25seV9fICoqL1xyXG4gIGRlY2xhcmUganNvblJlc3VsdHNBZGFwdGVyOiBKc29uUmVzdWx0c0FkYXB0ZXI7XHJcbiAgLyoqIFdoZXRoZXIgdG8gdXNlIEpTT05QIHdoZW4gcGVyZm9ybWluZyBhICdHRVQnIHJlcXVlc3QgYWdhaW5zdCB0aGlzIHNlcnZpY2UuIF9fUmVhZCBPbmx5X18gICoqL1xyXG4gIGRlY2xhcmUgdXNlSnNvbnA6IGJvb2xlYW47XHJcblxyXG4gIC8qKiAgIERhdGFTZXJ2aWNlIGNvbnN0cnVjdG9yXHJcbiAgPiAgICAgdmFyIGRhdGFTZXJ2aWNlID0gbmV3IERhdGFTZXJ2aWNlKHtcclxuICA+ICAgICAgICAgc2VydmljZU5hbWU6IGFsdFNlcnZpY2VOYW1lLFxyXG4gID4gICAgICAgICBoYXNTZXJ2ZXJNZXRhZGF0YTogZmFsc2VcclxuICA+ICAgICB9KTtcclxuXHJcbiAgPiAgICAgdmFyIG1ldGFkYXRhU3RvcmUgPSBuZXcgTWV0YWRhdGFTdG9yZSh7XHJcbiAgPiAgICAgICAgIG5hbWluZ0NvbnZlbnRpb246IE5hbWluZ0NvbnZlbnRpb24uY2FtZWxDYXNlXHJcbiAgPiAgICAgfSk7XHJcblxyXG4gID4gICAgIHJldHVybiBuZXcgRW50aXR5TWFuYWdlcih7XHJcbiAgPiAgICAgICAgIGRhdGFTZXJ2aWNlOiBkYXRhU2VydmljZSxcclxuICA+ICAgICAgICAgbWV0YWRhdGFTdG9yZTogbWV0YWRhdGFTdG9yZVxyXG4gID4gICAgIH0pO1xyXG4gIEBwYXJhbSBjb25maWcgLSBBIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlxyXG4gICoqL1xyXG4gIGNvbnN0cnVjdG9yKGNvbmZpZz86IERhdGFTZXJ2aWNlQ29uZmlnKSB7XHJcbiAgICB1cGRhdGVXaXRoQ29uZmlnKHRoaXMsIGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLyoqXHJcbiAgUmV0dXJucyBhIGNvcHkgb2YgdGhpcyBEYXRhU2VydmljZSB3aXRoIHRoZSBzcGVjaWZpZWQgcHJvcGVydGllcyBhcHBsaWVkLlxyXG4gIEBwYXJhbSBjb25maWcgLSBUaGUgY29uZmlndXJhdGlvbiBvYmplY3QgdG8gYXBwbHkgdG8gY3JlYXRlIGEgbmV3IERhdGFTZXJ2aWNlLlxyXG4gICoqL1xyXG4gIHVzaW5nKGNvbmZpZzogRGF0YVNlcnZpY2VDb25maWcpIHtcclxuICAgIGlmICghY29uZmlnKSByZXR1cm4gdGhpcztcclxuICAgIGxldCByZXN1bHQgPSBuZXcgRGF0YVNlcnZpY2UodGhpcyk7XHJcbiAgICByZXR1cm4gdXBkYXRlV2l0aENvbmZpZyhyZXN1bHQsIGNvbmZpZyk7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgcmVzb2x2ZShkYXRhU2VydmljZXM6IERhdGFTZXJ2aWNlW10pIHtcclxuICAgIC8vIGZpbmFsIGRlZmF1bHRzXHJcbiAgICAvLyBEZWxpYmVyYXRlIHVzZSBvZiAnYXMgYW55JyBiZWxvdy5cclxuICAgIChkYXRhU2VydmljZXMgYXMgYW55KS5wdXNoKHtcclxuICAgICAgaGFzU2VydmVyTWV0YWRhdGE6IHRydWUsXHJcbiAgICAgIHVzZUpzb25wOiBmYWxzZVxyXG4gICAgfSk7XHJcbiAgICBsZXQgZHMgPSBuZXcgRGF0YVNlcnZpY2UoY29yZS5yZXNvbHZlUHJvcGVydGllcyhkYXRhU2VydmljZXMsXHJcbiAgICAgICAgW1wic2VydmljZU5hbWVcIiwgXCJhZGFwdGVyTmFtZVwiLCBcInVyaUJ1aWxkZXJOYW1lXCIsIFwiaGFzU2VydmVyTWV0YWRhdGFcIiwgXCJqc29uUmVzdWx0c0FkYXB0ZXJcIiwgXCJ1c2VKc29ucFwiXSkpO1xyXG5cclxuICAgIGlmICghZHMuc2VydmljZU5hbWUpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIHJlc29sdmUgYSAnc2VydmljZU5hbWUnIGZvciB0aGlzIGRhdGFTZXJ2aWNlXCIpO1xyXG4gICAgfVxyXG4gICAgZHMuYWRhcHRlckluc3RhbmNlID0gZHMuYWRhcHRlckluc3RhbmNlIHx8IGNvbmZpZy5nZXRBZGFwdGVySW5zdGFuY2U8RGF0YVNlcnZpY2VBZGFwdGVyPihcImRhdGFTZXJ2aWNlXCIsIGRzLmFkYXB0ZXJOYW1lKTtcclxuICAgIGRzLmpzb25SZXN1bHRzQWRhcHRlciA9IGRzLmpzb25SZXN1bHRzQWRhcHRlciB8fCBkcy5hZGFwdGVySW5zdGFuY2UhLmpzb25SZXN1bHRzQWRhcHRlcjtcclxuICAgIGRzLnVyaUJ1aWxkZXIgPSBkcy51cmlCdWlsZGVyIHx8IGNvbmZpZy5nZXRBZGFwdGVySW5zdGFuY2U8VXJpQnVpbGRlckFkYXB0ZXI+KFwidXJpQnVpbGRlclwiLCBkcy51cmlCdWlsZGVyTmFtZSk7XHJcbiAgICByZXR1cm4gZHM7XHJcbiAgfVxyXG5cclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBzdGF0aWMgX25vcm1hbGl6ZVNlcnZpY2VOYW1lKHNlcnZpY2VOYW1lOiBzdHJpbmcpIHtcclxuICAgIHNlcnZpY2VOYW1lID0gc2VydmljZU5hbWUudHJpbSgpO1xyXG4gICAgaWYgKHNlcnZpY2VOYW1lLnN1YnN0cigtMSkgIT09IFwiL1wiKSB7XHJcbiAgICAgIHJldHVybiBzZXJ2aWNlTmFtZSArICcvJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBzZXJ2aWNlTmFtZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiAgKi9cclxuICB0b0pTT04oKSB7XHJcbiAgICAvLyBkb24ndCB1c2UgZGVmYXVsdCB2YWx1ZSBoZXJlIC0gYmVjYXVzZSB3ZSB3YW50IHRvIGJlIGFibGUgdG8gZGlzdGluZ3Vpc2ggdW5kZWZpbmVkIHByb3BzIGZvciBpbmhlcml0ZW5jZSBwdXJwb3Nlcy5cclxuICAgIHJldHVybiBjb3JlLnRvSnNvbih0aGlzLCB7XHJcbiAgICAgIHNlcnZpY2VOYW1lOiBudWxsLFxyXG4gICAgICBhZGFwdGVyTmFtZTogbnVsbCxcclxuICAgICAgdXJpQnVpbGRlck5hbWU6IG51bGwsXHJcbiAgICAgIGhhc1NlcnZlck1ldGFkYXRhOiBudWxsLFxyXG4gICAgICBqc29uUmVzdWx0c0FkYXB0ZXI6IGZ1bmN0aW9uICh2OiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gdiAmJiB2Lm5hbWU7XHJcbiAgICAgIH0sXHJcbiAgICAgIHVzZUpzb25wOiBudWxsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uOiBhbnkpIHtcclxuICAgIGpzb24uanNvblJlc3VsdHNBZGFwdGVyID0gY29uZmlnLl9mZXRjaE9iamVjdChKc29uUmVzdWx0c0FkYXB0ZXIsIGpzb24uanNvblJlc3VsdHNBZGFwdGVyKTtcclxuICAgIHJldHVybiBuZXcgRGF0YVNlcnZpY2UoanNvbik7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgUmV0dXJucyBhIHVybCBmb3IgdGhpcyBkYXRhU2VydmljZSB3aXRoIHRoZSBzcGVjaWZpZWQgc3VmZml4LiBUaGlzIG1ldGhvZCBoYW5kbGVzIGRhdGFTZXJ2aWNlIG5hbWVzIGVpdGhlclxyXG4gICB3aXRoIG9yIHdpdGhvdXQgdHJhaWxpbmcgJy8ncy4gIElmIHRoZSBzdWZmaXggc3RhcnRzIHdpdGggXCJodHRwXCIgdGhlbiBpdCB3aWxsIGJlIHJldHVybmVkIGFzLWlzLlxyXG4gICBAbWV0aG9kIHF1YWxpZnlVcmxcclxuICAgQHBhcmFtIHN1ZmZpeCB7U3RyaW5nfSBUaGUgcmVzdWx0aW5nIHVybC5cclxuICAgQHJldHVybiB7YSBVcmwgc3RyaW5nfVxyXG4gICAqKi9cclxuICBxdWFsaWZ5VXJsKHN1ZmZpeDogc3RyaW5nKSB7XHJcbiAgICBpZiAoc3VmZml4ICYmIHN1ZmZpeC5zdGFydHNXaXRoKFwiaHR0cFwiKSkge1xyXG4gICAgICByZXR1cm4gc3VmZml4O1xyXG4gICAgfVxyXG4gICAgbGV0IHVybCA9IHRoaXMuc2VydmljZU5hbWU7XHJcbiAgICAvLyByZW1vdmUgYW55IHRyYWlsaW5nIFwiL1wiXHJcbiAgICBpZiAoY29yZS5zdHJpbmdFbmRzV2l0aCh1cmwsIFwiL1wiKSkge1xyXG4gICAgICB1cmwgPSB1cmwuc3Vic3RyKDAsIHVybC5sZW5ndGggLSAxKTtcclxuICAgIH1cclxuICAgIC8vIGVuc3VyZSB0aGF0IGl0IGVuZHMgd2l0aCBcIi9cIiArIHN1ZmZpeFxyXG4gICAgc3VmZml4ID0gXCIvXCIgKyBzdWZmaXg7XHJcbiAgICBpZiAoIWNvcmUuc3RyaW5nRW5kc1dpdGgodXJsLCBzdWZmaXgpKSB7XHJcbiAgICAgIHVybCA9IHVybCArIHN1ZmZpeDtcclxuICAgIH1cclxuICAgIHJldHVybiB1cmw7XHJcbiAgfVxyXG5cclxufVxyXG5EYXRhU2VydmljZS5wcm90b3R5cGUuXyR0eXBlTmFtZSA9IFwiRGF0YVNlcnZpY2VcIjtcclxuXHJcbmZ1bmN0aW9uIHVwZGF0ZVdpdGhDb25maWcob2JqOiBEYXRhU2VydmljZSwgZHNDb25maWc/OiBEYXRhU2VydmljZUNvbmZpZykge1xyXG4gIGlmIChkc0NvbmZpZykge1xyXG4gICAgYXNzZXJ0Q29uZmlnKGRzQ29uZmlnKVxyXG4gICAgICAgIC53aGVyZVBhcmFtKFwic2VydmljZU5hbWVcIikuaXNPcHRpb25hbCgpXHJcbiAgICAgICAgLndoZXJlUGFyYW0oXCJhZGFwdGVyTmFtZVwiKS5pc1N0cmluZygpLmlzT3B0aW9uYWwoKVxyXG4gICAgICAgIC53aGVyZVBhcmFtKFwidXJpQnVpbGRlck5hbWVcIikuaXNTdHJpbmcoKS5pc09wdGlvbmFsKClcclxuICAgICAgICAud2hlcmVQYXJhbShcImhhc1NlcnZlck1ldGFkYXRhXCIpLmlzQm9vbGVhbigpLmlzT3B0aW9uYWwoKVxyXG4gICAgICAgIC53aGVyZVBhcmFtKFwianNvblJlc3VsdHNBZGFwdGVyXCIpLmlzSW5zdGFuY2VPZihKc29uUmVzdWx0c0FkYXB0ZXIpLmlzT3B0aW9uYWwoKVxyXG4gICAgICAgIC53aGVyZVBhcmFtKFwidXNlSnNvbnBcIikuaXNCb29sZWFuKCkuaXNPcHRpb25hbCgpXHJcbiAgICAgICAgLmFwcGx5QWxsKG9iaik7XHJcbiAgICBvYmouc2VydmljZU5hbWUgPSBvYmouc2VydmljZU5hbWUgJiYgRGF0YVNlcnZpY2UuX25vcm1hbGl6ZVNlcnZpY2VOYW1lKG9iai5zZXJ2aWNlTmFtZSk7XHJcbiAgICBvYmouYWRhcHRlckluc3RhbmNlID0gb2JqLmFkYXB0ZXJOYW1lID8gIGNvbmZpZy5nZXRBZGFwdGVySW5zdGFuY2U8RGF0YVNlcnZpY2VBZGFwdGVyPihcImRhdGFTZXJ2aWNlXCIsIG9iai5hZGFwdGVyTmFtZSkgOiB1bmRlZmluZWQ7XHJcbiAgICBvYmoudXJpQnVpbGRlciA9IG9iai51cmlCdWlsZGVyTmFtZSA/IGNvbmZpZy5nZXRBZGFwdGVySW5zdGFuY2U8VXJpQnVpbGRlckFkYXB0ZXI+KFwidXJpQnVpbGRlclwiLCBvYmoudXJpQnVpbGRlck5hbWUpIDogdW5kZWZpbmVkO1xyXG4gIH1cclxuICByZXR1cm4gb2JqO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVNZXRhIHtcclxuICBlbnRpdHlUeXBlPzogRW50aXR5VHlwZTtcclxuICBub2RlSWQ/OiBzdHJpbmc7XHJcbiAgbm9kZVJlZklkPzogc3RyaW5nO1xyXG4gIGlnbm9yZT86IGJvb2xlYW47XHJcbiAgcGFzc1RocnU/OiBib29sZWFuO1xyXG4gIGV4dHJhTWV0YWRhdGE/OiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTm9kZUNvbnRleHQge1xyXG4gIG5vZGVUeXBlOiBzdHJpbmc7XHJcbiAgcHJvcGVydHlOYW1lPzogc3RyaW5nO1xyXG4gIG5hdmlnYXRpb25Qcm9wZXJ0eT86IE5hdmlnYXRpb25Qcm9wZXJ0eTtcclxufVxyXG5cclxuLyoqIENvbmZpZ3VyYXRpb24gaW5mbyB0byBiZSBwYXNzZWQgdG8gdGhlIFtbSnNvblJlc3VsdHNBZGFwdGVyXV0gY29uc3RydWN0b3IgKi9cclxuZXhwb3J0IGludGVyZmFjZSBKc29uUmVzdWx0c0FkYXB0ZXJDb25maWcge1xyXG4gIC8qKiBUaGUgbmFtZSBvZiB0aGlzIGFkYXB0ZXIuICBUaGlzIG5hbWUgaXMgdXNlZCB0byB1bmlxdWVseSBpZGVudGlmeSBhbmQgbG9jYXRlIHRoaXMgaW5zdGFuY2Ugd2hlbiBhbiAnZXhwb3J0ZWQnIEpzb25SZXN1bHRzQWRhcHRlciBpcyBsYXRlciBpbXBvcnRlZC4gKi9cclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgLyoqIEEgRnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgb25jZSBwZXIgcXVlcnkgb3BlcmF0aW9uIHRvIGV4dHJhY3QgdGhlICdwYXlsb2FkJyBmcm9tIGFueSBqc29uIHJlY2VpdmVkIG92ZXIgdGhlIHdpcmUuIFxyXG4gIFRoaXMgbWV0aG9kIGhhcyBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2hpY2ggdG8gc2ltcGx5IHJldHVybiB0aGUgXCJyZXN1bHRzXCIgcHJvcGVydHkgZnJvbSBhbnkganNvbiByZXR1cm5lZCBhcyBhIHJlc3VsdCBvZiBleGVjdXRpbmcgdGhlIHF1ZXJ5LiBcclxuICAqL1xyXG4gIGV4dHJhY3RSZXN1bHRzPzogRnVuY3Rpb247XHJcbiAgLyoqIEEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgb25jZSBwZXIgc2F2ZSBvcGVyYXRpb24gdG8gZXh0cmFjdCB0aGUgZW50aXRpZXMgZnJvbSBhbnkganNvbiByZWNlaXZlZCBvdmVyIHRoZSB3aXJlLiAgTXVzdCByZXR1cm4gYW4gYXJyYXkuXHJcbiAgVGhpcyBtZXRob2QgaGFzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aGljaCBzaW1wbHkgcmV0dXJucyB0aGUgXCJlbnRpdGllc1wiIHByb3BlcnR5IGZyb20gYW55IGpzb24gcmV0dXJuZWQgYXMgYSByZXN1bHQgb2YgZXhlY3V0aW5nIHRoZSBzYXZlLiAqL1xyXG4gIGV4dHJhY3RTYXZlUmVzdWx0cz86IEZ1bmN0aW9uO1xyXG4gIC8qKiBBIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIG9uY2UgcGVyIHNhdmUgb3BlcmF0aW9uIHRvIGV4dHJhY3QgdGhlIGtleSBtYXBwaW5ncyBmcm9tIGFueSBqc29uIHJlY2VpdmVkIG92ZXIgdGhlIHdpcmUuICBNdXN0IHJldHVybiBhbiBhcnJheS5cclxuICBUaGlzIG1ldGhvZCBoYXMgYSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHdoaWNoIHNpbXBseSByZXR1cm5zIHRoZSBcImtleU1hcHBpbmdzXCIgcHJvcGVydHkgZnJvbSBhbnkganNvbiByZXR1cm5lZCBhcyBhIHJlc3VsdCBvZiBleGVjdXRpbmcgdGhlIHNhdmUuICovXHJcbiAgZXh0cmFjdEtleU1hcHBpbmdzPzogKGRhdGE6IHt9KSA9PiBLZXlNYXBwaW5nW107XHJcbiAgLyoqIEEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgb25jZSBwZXIgc2F2ZSBvcGVyYXRpb24gdG8gZXh0cmFjdCBhbnkgZGVsZXRlZCBrZXlzIGZyb20gYW55IGpzb24gcmVjZWl2ZWQgb3ZlciB0aGUgd2lyZS4gIE11c3QgcmV0dXJuIGFuIGFycmF5LlxyXG4gIFRoaXMgbWV0aG9kIGhhcyBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2hpY2ggc2ltcGx5IHJldHVybnMgYW4gZW1wdHkgYXJyYXkuICovXHJcbiAgZXh0cmFjdERlbGV0ZWRLZXlzPzogKGRhdGE6IHt9KSA9PiBhbnlbXTsgLy8gVE9ETzogcmVmaW5lXHJcbiAgLyoqIEEgdmlzaXRvciBtZXRob2QgdGhhdCB3aWxsIGJlIGNhbGxlZCBvbiBlYWNoIG5vZGUgb2YgdGhlIHJldHVybmVkIHBheWxvYWQuICovXHJcbiAgdmlzaXROb2RlPzogKHY6IGFueSwgbWM/OiBNYXBwaW5nQ29udGV4dCwgbm9kZUNvbnRleHQ/OiBOb2RlQ29udGV4dCkgPT4gTm9kZU1ldGE7XHJcblxyXG59XHJcblxyXG4vKipcclxuQSBKc29uUmVzdWx0c0FkYXB0ZXIgaW5zdGFuY2UgaXMgdXNlZCB0byBwcm92aWRlIGN1c3RvbSBleHRyYWN0aW9uIGFuZCBwYXJzaW5nIGxvZ2ljIG9uIHRoZSBqc29uIHJlc3VsdHMgcmV0dXJuZWQgYnkgYW55IHdlYiBzZXJ2aWNlLlxyXG5UaGlzIGZhY2lsaXR5IG1ha2VzIGl0IHBvc3NpYmxlIGZvciBicmVlemUgdG8gdGFsayB0byB2aXJ0dWFsbHkgYW55IHdlYiBzZXJ2aWNlIGFuZCByZXR1cm4gb2JqZWN0cyB0aGF0IHdpbGwgYmUgZmlyc3QgY2xhc3MgJ2JyZWV6ZScgY2l0aXplbnMuXHJcbioqL1xyXG5leHBvcnQgY2xhc3MgSnNvblJlc3VsdHNBZGFwdGVyIHtcclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBfJHR5cGVOYW1lOiBzdHJpbmc7IC8vIGFjdHVhbGx5IHB1dCBvbiBwcm90b3R5cGUuXHJcbiAgLyoqIFRoZSBuYW1lIG9mIHRoaXMgYWRhcHRlci4gIFRoaXMgbmFtZSBpcyB1c2VkIHRvIHVuaXF1ZWx5IGlkZW50aWZ5IGFuZCBsb2NhdGUgdGhpcyBpbnN0YW5jZSB3aGVuIGFuICdleHBvcnRlZCcgSnNvblJlc3VsdHNBZGFwdGVyIGlzIGxhdGVyIGltcG9ydGVkLiAqL1xyXG4gIG5hbWU6IHN0cmluZztcclxuICAvKiogQSBGdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBvbmNlIHBlciBxdWVyeSBvcGVyYXRpb24gdG8gZXh0cmFjdCB0aGUgJ3BheWxvYWQnIGZyb20gYW55IGpzb24gcmVjZWl2ZWQgb3ZlciB0aGUgd2lyZS4gXHJcbiAgVGhpcyBtZXRob2QgaGFzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aGljaCBzaW1wbHkgcmV0dXJucyB0aGUgXCJyZXN1bHRzXCIgcHJvcGVydHkgZnJvbSBhbnkganNvbiByZXR1cm5lZCBhcyBhIHJlc3VsdCBvZiBleGVjdXRpbmcgdGhlIHF1ZXJ5LiAqL1xyXG4gIGV4dHJhY3RSZXN1bHRzOiBGdW5jdGlvbjsgLy8gVE9ETyAtIHJlZmluZVxyXG4gIC8qKiBBIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIG9uY2UgcGVyIHNhdmUgb3BlcmF0aW9uIHRvIGV4dHJhY3QgdGhlIGVudGl0aWVzIGZyb20gYW55IGpzb24gcmVjZWl2ZWQgb3ZlciB0aGUgd2lyZS4gIE11c3QgcmV0dXJuIGFuIGFycmF5LlxyXG4gIFRoaXMgbWV0aG9kIGhhcyBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2hpY2ggc2ltcGx5IHJldHVybnMgdGhlIFwiZW50aXRpZXNcIiBwcm9wZXJ0eSBmcm9tIGFueSBqc29uIHJldHVybmVkIGFzIGEgcmVzdWx0IG9mIGV4ZWN1dGluZyB0aGUgc2F2ZS4gKi9cclxuICBleHRyYWN0U2F2ZVJlc3VsdHM6IEZ1bmN0aW9uO1xyXG4gICAgLyoqIEEgZnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgb25jZSBwZXIgc2F2ZSBvcGVyYXRpb24gdG8gZXh0cmFjdCB0aGUga2V5IG1hcHBpbmdzIGZyb20gYW55IGpzb24gcmVjZWl2ZWQgb3ZlciB0aGUgd2lyZS4gIE11c3QgcmV0dXJuIGFuIGFycmF5LlxyXG4gIFRoaXMgbWV0aG9kIGhhcyBhIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2hpY2ggc2ltcGx5IHJldHVybnMgdGhlIFwia2V5TWFwcGluZ3NcIiBwcm9wZXJ0eSBmcm9tIGFueSBqc29uIHJldHVybmVkIGFzIGEgcmVzdWx0IG9mIGV4ZWN1dGluZyB0aGUgc2F2ZS4gKi9cclxuICBleHRyYWN0S2V5TWFwcGluZ3M6ICAoZGF0YToge30pID0+IEtleU1hcHBpbmdbXTtcclxuICAvKiogQSBmdW5jdGlvbiB0aGF0IGlzIGNhbGxlZCBvbmNlIHBlciBzYXZlIG9wZXJhdGlvbiB0byBleHRyYWN0IGFueSBkZWxldGVkIGtleXMgZnJvbSBhbnkganNvbiByZWNlaXZlZCBvdmVyIHRoZSB3aXJlLiAgTXVzdCByZXR1cm4gYW4gYXJyYXkuXHJcbiAgVGhpcyBtZXRob2QgaGFzIGEgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiB3aGljaCBpcyB0byBzaW1wbHkgcmV0dXJucyB0aGUgXCJkZWxldGVkS2V5c1wiIHByb3BlcnR5IGZyb20gYW55IGpzb24gcmV0dXJuZWQgYXMgYSByZXN1bHQgb2YgZXhlY3V0aW5nIHRoZSBzYXZlLiAqL1xyXG4gIGV4dHJhY3REZWxldGVkS2V5cz86IChkYXRhOiB7fSkgPT4gYW55W107IC8vIFRPRE86IHJlZmluZVxyXG4gIC8qKiBBIHZpc2l0b3IgbWV0aG9kIHRoYXQgd2lsbCBiZSBjYWxsZWQgb24gZWFjaCBub2RlIG9mIHRoZSByZXR1cm5lZCBwYXlsb2FkLiAqL1xyXG4gIHZpc2l0Tm9kZTogRnVuY3Rpb247XHJcblxyXG4gIC8qKlxyXG4gIEpzb25SZXN1bHRzQWRhcHRlciBjb25zdHJ1Y3RvclxyXG5cclxuICBAZXhhbXBsZVxyXG4gICAgICAvL1xyXG4gICAgICB2YXIganNvblJlc3VsdHNBZGFwdGVyID0gbmV3IEpzb25SZXN1bHRzQWRhcHRlcih7XHJcbiAgICAgICAgICBuYW1lOiBcInRlc3QxZVwiLFxyXG4gICAgICAgICAgZXh0cmFjdFJlc3VsdHM6IGZ1bmN0aW9uKGpzb24pIHtcclxuICAgICAgICAgICAgICByZXR1cm4ganNvbi5yZXN1bHRzO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHZpc2l0Tm9kZTogZnVuY3Rpb24obm9kZSwgbWFwcGluZ0NvbnRleHQsIG5vZGVDb250ZXh0KSB7XHJcbiAgICAgICAgICAgICAgdmFyIGVudGl0eVR5cGUgPSBub3JtYWxpemVUeXBlTmFtZShub2RlLiR0eXBlKTtcclxuICAgICAgICAgICAgICB2YXIgcHJvcGVydHlOYW1lID0gbm9kZUNvbnRleHQucHJvcGVydHlOYW1lO1xyXG4gICAgICAgICAgICAgIHZhciBpZ25vcmUgPSBwcm9wZXJ0eU5hbWUgJiYgcHJvcGVydHlOYW1lLnN1YnN0cigwLCAxKSA9PT0gXCIkXCI7XHJcblxyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgIGVudGl0eVR5cGU6IGVudGl0eVR5cGUsXHJcbiAgICAgICAgICAgICAgICAgIG5vZGVJZDogbm9kZS4kaWQsXHJcbiAgICAgICAgICAgICAgICAgIG5vZGVSZWZJZDogbm9kZS4kcmVmLFxyXG4gICAgICAgICAgICAgICAgICBpZ25vcmU6IGlnbm9yZSxcclxuICAgICAgICAgICAgICAgICAgcGFzc1RocnU6IGZhbHNlIC8vIGRlZmF1bHRcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHZhciBkYXRhU2VydmljZSA9IG5ldyBEYXRhU2VydmljZSgge1xyXG4gICAgICAgICAgICAgIHNlcnZpY2VOYW1lOiBcImJyZWV6ZS9mb29cIixcclxuICAgICAgICAgICAgICBqc29uUmVzdWx0c0FkYXB0ZXI6IGpzb25SZXN1bHRzQWRhcHRlclxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHZhciBlbnRpdHlNYW5hZ2VyID0gbmV3IEVudGl0eU1hbmFnZXIoIHtcclxuICAgICAgICAgIGRhdGFTZXJ2aWNlOiBkYXRhU2VydmljZVxyXG4gICAgICB9KTtcclxuXHJcbiAgQHBhcmFtIGNvbmZpZyAtIEEgY29uZmlndXJhdGlvbiBvYmplY3QuXHJcblxyXG4gICoqL1xyXG4gIGNvbnN0cnVjdG9yKGpzQ29uZmlnOiBKc29uUmVzdWx0c0FkYXB0ZXJDb25maWcpIHtcclxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9PSAxKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBKc29uUmVzdWx0c0FkYXB0ZXIgY3RvciBzaG91bGQgYmUgY2FsbGVkIHdpdGggYSBzaW5nbGUgYXJndW1lbnQgdGhhdCBpcyBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0LlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3NlcnRDb25maWcoanNDb25maWcpXHJcbiAgICAgICAgLndoZXJlUGFyYW0oXCJuYW1lXCIpLmlzTm9uRW1wdHlTdHJpbmcoKVxyXG4gICAgICAgIC53aGVyZVBhcmFtKFwiZXh0cmFjdFJlc3VsdHNcIikuaXNGdW5jdGlvbigpLmlzT3B0aW9uYWwoKS53aXRoRGVmYXVsdChleHRyYWN0UmVzdWx0c0RlZmF1bHQpXHJcbiAgICAgICAgLndoZXJlUGFyYW0oXCJleHRyYWN0U2F2ZVJlc3VsdHNcIikuaXNGdW5jdGlvbigpLmlzT3B0aW9uYWwoKS53aXRoRGVmYXVsdChleHRyYWN0U2F2ZVJlc3VsdHNEZWZhdWx0KVxyXG4gICAgICAgIC53aGVyZVBhcmFtKFwiZXh0cmFjdEtleU1hcHBpbmdzXCIpLmlzRnVuY3Rpb24oKS5pc09wdGlvbmFsKCkud2l0aERlZmF1bHQoZXh0cmFjdEtleU1hcHBpbmdzRGVmYXVsdClcclxuICAgICAgICAud2hlcmVQYXJhbShcImV4dHJhY3REZWxldGVkS2V5c1wiKS5pc0Z1bmN0aW9uKCkuaXNPcHRpb25hbCgpLndpdGhEZWZhdWx0KGV4dHJhY3REZWxldGVkS2V5c0RlZmF1bHQpXHJcbiAgICAgICAgLndoZXJlUGFyYW0oXCJ2aXNpdE5vZGVcIikuaXNGdW5jdGlvbigpXHJcbiAgICAgICAgLmFwcGx5QWxsKHRoaXMpO1xyXG4gICAgY29uZmlnLl9zdG9yZU9iamVjdCh0aGlzLCBcIkpzb25SZXN1bHRzQWRhcHRlclwiLCB0aGlzLm5hbWUpO1xyXG4gIH1cclxuXHJcbn1cclxuSnNvblJlc3VsdHNBZGFwdGVyLnByb3RvdHlwZS5fJHR5cGVOYW1lID0gXCJKc29uUmVzdWx0c0FkYXB0ZXJcIjtcclxuXHJcbmZ1bmN0aW9uIGV4dHJhY3RSZXN1bHRzRGVmYXVsdChkYXRhOiBhbnkpIHtcclxuICByZXR1cm4gZGF0YS5yZXN1bHRzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBleHRyYWN0U2F2ZVJlc3VsdHNEZWZhdWx0KGRhdGE6IGFueSkge1xyXG4gIHJldHVybiBkYXRhLmVudGl0aWVzIHx8IGRhdGEuRW50aXRpZXMgfHwgW107XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGV4dHJhY3RLZXlNYXBwaW5nc0RlZmF1bHQoZGF0YTogYW55KSB7XHJcbiAgcmV0dXJuIGRhdGEua2V5TWFwcGluZ3MgfHwgZGF0YS5LZXlNYXBwaW5ncyB8fCBbXTtcclxufVxyXG5cclxuZnVuY3Rpb24gZXh0cmFjdERlbGV0ZWRLZXlzRGVmYXVsdChkYXRhOiBhbnkpIHtcclxuICByZXR1cm4gZGF0YS5kZWxldGVkS2V5cyB8fCBkYXRhLkRlbGV0ZWRLZXlzIHx8IFtdO1xyXG59XHJcblxyXG4iXX0=
|
package/esm5/src/entity-key.js
CHANGED
|
@@ -115,4 +115,4 @@ var EntityKey = /** @class */ (function () {
|
|
|
115
115
|
}());
|
|
116
116
|
export { EntityKey };
|
|
117
117
|
EntityKey.prototype._$typeName = "EntityKey";
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWtleS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvIiwic291cmNlcyI6WyJzcmMvZW50aXR5LWtleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzlCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFpQixNQUFNLG1CQUFtQixDQUFDO0FBQzlELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdkM7Ozs7R0FJRztBQUNIO0lBZUU7Ozs7Ozs7Ozs7Ozs7Ozs7O01BaUJFO0lBQ0YsbUJBQVksVUFBc0IsRUFBRSxTQUFjO1FBQ2hELFdBQVcsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZFLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQy9DLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtnQkFDM0MsT0FBTyxFQUFFLENBQUMsVUFBVSxLQUFLLEtBQUssQ0FBQztZQUNqQyxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDN0IsU0FBUyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDekI7UUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixVQUFVLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQzlDLHdDQUF3QztZQUN4QyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLElBQUksRUFBRTtnQkFDakMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNyRztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRTFELENBQUM7SUFHRCwwQkFBTSxHQUFOO1FBQ0UsT0FBTztZQUNMLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUk7WUFDaEMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1NBQ3BCLENBQUM7SUFDSixDQUFDO0lBRU0sa0JBQVEsR0FBZixVQUFnQixJQUFTLEVBQUUsYUFBNEI7UUFDckQsSUFBSSxFQUFFLEdBQUcsYUFBYSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFlLENBQUM7UUFDL0UsT0FBTyxJQUFJLFNBQVMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCwwQkFBTSxHQUFOLFVBQU8sU0FBb0I7UUFDekIsSUFBSSxDQUFDLENBQUMsU0FBUyxZQUFZLFNBQVMsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3BELE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FBQyxVQUFVLENBQUM7WUFDL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7O01BRUU7SUFDRiw0QkFBUSxHQUFSLFVBQVMsYUFBMEI7UUFDakMsT0FBTyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFFLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNJLGdCQUFNLEdBQWIsVUFBYyxFQUFhLEVBQUUsRUFBYTtRQUN4QyxJQUFJLENBQUMsQ0FBQyxFQUFFLFlBQVksU0FBUyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDN0MsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsd0RBQXdEO0lBQ3hELDRCQUFRLEdBQVI7UUFDRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELGFBQWE7SUFDYixvREFBb0Q7SUFDN0MseUJBQWUsR0FBdEIsVUFBdUIsU0FBZ0I7UUFDckMsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUExSEQsd0JBQXdCO0lBQ2pCLDhCQUFvQixHQUFHLEtBQUssQ0FBQztJQTJIdEMsZ0JBQUM7Q0FBQSxBQS9IRCxJQStIQztTQS9IWSxTQUFTO0FBZ0l0QixTQUFTLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb3JlIH0gZnJvbSAnLi9jb3JlJztcclxuaW1wb3J0IHsgYXNzZXJ0UGFyYW0gfSBmcm9tICcuL2Fzc2VydC1wYXJhbSc7XHJcbmltcG9ydCB7IEVudGl0eVR5cGUsIE1ldGFkYXRhU3RvcmUgfSBmcm9tICcuL2VudGl0eS1tZXRhZGF0YSc7XHJcbmltcG9ydCB7IERhdGFUeXBlIH0gZnJvbSAnLi9kYXRhLXR5cGUnO1xyXG5cclxuLyoqXHJcbkFuIEVudGl0eUtleSBpcyBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSB1bmlxdWUgaWRlbnRpdHkgb2YgYW4gZW50aXR5LiAgRW50aXR5S2V5J3MgYXJlIGltbXV0YWJsZS5cclxuXHJcblxyXG4qKi9cclxuZXhwb3J0IGNsYXNzIEVudGl0eUtleSB7XHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgXyR0eXBlTmFtZTogc3RyaW5nOyAvLyBhY3R1YWxseSBwbGFjZWQgb24gcHJvdG90eXBlXHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgc3RhdGljIEVOVElUWV9LRVlfREVMSU1JVEVSID0gXCI6OjpcIjtcclxuICAvKiogIFRoZSAnRW50aXR5VHlwZScgdGhhdCB0aGlzIGlzIGEga2V5IGZvci4gX19SZWFkIE9ubHlfXyAqL1xyXG4gIGVudGl0eVR5cGU6IEVudGl0eVR5cGU7XHJcbiAgLyoqICBBbiBhcnJheSBvZiB0aGUgdmFsdWVzIGZvciB0aGlzIGtleS4gVGhpcyB3aWxsIHVzdWFsbHkgb25seSBoYXZlIGEgc2luZ2xlIGVsZW1lbnQsIFxyXG4gIHVubGVzcyB0aGUgZW50aXR5IHR5cGUgaGFzIGEgbXVsdGlwYXJ0IGtleS4gX19SZWFkIE9ubHlfXyAqL1xyXG4gIHZhbHVlczogYW55W107XHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgX2tleUluR3JvdXA6IHN0cmluZztcclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBfc3VidHlwZXM6IEVudGl0eVR5cGVbXTtcclxuXHJcbiAgLyoqXHJcbiAgQ29uc3RydWN0cyBhIG5ldyBFbnRpdHlLZXkuICBFYWNoIGVudGl0eSB3aXRoaW4gYW4gRW50aXR5TWFuYWdlciB3aWxsIGhhdmUgYSB1bmlxdWUgRW50aXR5S2V5LlxyXG4gID4gICAgIC8vIGFzc3VtZSBlbTEgaXMgYW4gRW50aXR5TWFuYWdlciBjb250YWluaW5nIGEgbnVtYmVyIG9mIGV4aXN0aW5nIGVudGl0aWVzLlxyXG4gID4gICAgIHZhciBlbXBUeXBlID0gZW0xLm1ldGFkYXRhU3RvcmUuZ2V0RW50aXR5VHlwZShcIkVtcGxveWVlXCIpO1xyXG4gID4gICAgIHZhciBlbnRpdHlLZXkgPSBuZXcgRW50aXR5S2V5KGVtcFR5cGUsIDEpO1xyXG5cclxuICBFbnRpdHlLZXkncyBtYXkgYWxzbyBiZSBmb3VuZCBieSBjYWxsaW5nIEVudGl0eUFzcGVjdC5nZXRLZXkoKVxyXG4gID4gICAgIC8vIGFzc3VtZSBlbXBsb3llZTEgaXMgYW4gZXhpc3RpbmcgRW1wbG95ZWUgZW50aXR5XHJcbiAgPiAgICAgdmFyIGVtcEtleSA9IGVtcGxveWVlMS5lbnRpdHlBc3BlY3QuZ2V0S2V5KCk7XHJcblxyXG4gIE11bHRpcGFydCBrZXlzIGFyZSBjcmVhdGVkIGJ5IHBhc3NpbmcgYW4gYXJyYXkgYXMgdGhlICdrZXlWYWx1ZXMnIHBhcmFtZXRlclxyXG4gID4gICAgIHZhciBlbXBUZXJyVHlwZSA9IGVtMS5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoXCJFbXBsb3llZVRlcnJpdG9yeVwiKTtcclxuICA+ICAgICB2YXIgZW1wVGVycktleSA9IG5ldyBFbnRpdHlLZXkoZW1wVGVyclR5cGUsIFsgMSwgNzddKTtcclxuICA+ICAgICAvLyBUaGUgb3JkZXIgb2YgdGhlIHByb3BlcnRpZXMgaW4gdGhlICdrZXlWYWx1ZXMnIGFycmF5IG11c3QgYmUgdGhlIHNhbWUgYXMgdGhhdFxyXG4gID4gICAgIC8vIHJldHVybmVkIGJ5IGVtcFRlcnJUeXBlLmtleVByb3BlcnRpZXNcclxuICBAcGFyYW0gZW50aXR5VHlwZSAtIFRoZSBbW0VudGl0eVR5cGVdXSBvZiB0aGUgZW50aXR5LlxyXG4gIEBwYXJhbSBrZXlWYWx1ZXMgLSBBIHNpbmdsZSB2YWx1ZSBvciBhbiBhcnJheSBvZiB2YWx1ZXMuIFxyXG4gICovXHJcbiAgY29uc3RydWN0b3IoZW50aXR5VHlwZTogRW50aXR5VHlwZSwga2V5VmFsdWVzOiBhbnkpIHtcclxuICAgIGFzc2VydFBhcmFtKGVudGl0eVR5cGUsIFwiZW50aXR5VHlwZVwiKS5pc0luc3RhbmNlT2YoRW50aXR5VHlwZSkuY2hlY2soKTtcclxuICAgIGxldCBzdWJ0eXBlcyA9IGVudGl0eVR5cGUuZ2V0U2VsZkFuZFN1YnR5cGVzKCk7XHJcbiAgICBpZiAoc3VidHlwZXMubGVuZ3RoID4gMSkge1xyXG4gICAgICB0aGlzLl9zdWJ0eXBlcyA9IHN1YnR5cGVzLmZpbHRlcihmdW5jdGlvbiAoc3QpIHtcclxuICAgICAgICByZXR1cm4gc3QuaXNBYnN0cmFjdCA9PT0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghQXJyYXkuaXNBcnJheShrZXlWYWx1ZXMpKSB7XHJcbiAgICAgIGtleVZhbHVlcyA9IFtrZXlWYWx1ZXNdO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZW50aXR5VHlwZSA9IGVudGl0eVR5cGU7XHJcbiAgICBlbnRpdHlUeXBlLmtleVByb3BlcnRpZXMuZm9yRWFjaChmdW5jdGlvbiAoa3AsIGkpIHtcclxuICAgICAgLy8gaW5zdXJlIHRoYXQgZ3VpZCBrZXlzIGFyZSBjb21wYXJhYmxlLlxyXG4gICAgICBpZiAoa3AuZGF0YVR5cGUgPT09IERhdGFUeXBlLkd1aWQpIHtcclxuICAgICAgICBrZXlWYWx1ZXNbaV0gPSBrZXlWYWx1ZXNbaV0gJiYga2V5VmFsdWVzW2ldLnRvTG93ZXJDYXNlID8ga2V5VmFsdWVzW2ldLnRvTG93ZXJDYXNlKCkgOiBrZXlWYWx1ZXNbaV07XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMudmFsdWVzID0ga2V5VmFsdWVzO1xyXG4gICAgdGhpcy5fa2V5SW5Hcm91cCA9IEVudGl0eUtleS5jcmVhdGVLZXlTdHJpbmcoa2V5VmFsdWVzKTtcclxuXHJcbiAgfVxyXG5cclxuXHJcbiAgdG9KU09OKCkge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZW50aXR5VHlwZTogdGhpcy5lbnRpdHlUeXBlLm5hbWUsXHJcbiAgICAgIHZhbHVlczogdGhpcy52YWx1ZXNcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbUpTT04oanNvbjogYW55LCBtZXRhZGF0YVN0b3JlOiBNZXRhZGF0YVN0b3JlKSB7XHJcbiAgICBsZXQgZXQgPSBtZXRhZGF0YVN0b3JlLl9nZXRTdHJ1Y3R1cmFsVHlwZShqc29uLmVudGl0eVR5cGUsIHRydWUpIGFzIEVudGl0eVR5cGU7XHJcbiAgICByZXR1cm4gbmV3IEVudGl0eUtleShldCwganNvbi52YWx1ZXMpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgVXNlZCB0byBjb21wYXJlIEVudGl0eUtleXMgYXJlIGRldGVybWluZSBpZiB0aGV5IHJlZmVyIHRvIHRoZSBzYW1lIEVudGl0eS5cclxuICBUaGVyZSBpcyBhbHNvIGFuIHN0YXRpYyB2ZXJzaW9uIG9mICdlcXVhbHMnIHdpdGggdGhlIHNhbWUgZnVuY3Rpb25hbGl0eS5cclxuICBcclxuICA+ICAgICAgLy8gYXNzdW1lIGVtMSBpcyBhbiBFbnRpdHlNYW5hZ2VyIGNvbnRhaW5pbmcgYSBudW1iZXIgb2YgZXhpc3RpbmcgZW50aXRpZXMuXHJcbiAgPiAgICAgIHZhciBlbXBUeXBlID0gZW0xLm1ldGFkYXRhU3RvcmUuZ2V0RW50aXR5VHlwZShcIkVtcGxveWVlXCIpO1xyXG4gID4gICAgICB2YXIgZW1wS2V5MSA9IG5ldyBFbnRpdHlLZXkoZW1wVHlwZSwgMSk7XHJcbiAgPiAgICAgIC8vIGFzc3VtZSBlbXBsb3llZTEgaXMgYW4gZXhpc3RpbmcgRW1wbG95ZWUgZW50aXR5XHJcbiAgPiAgICAgIHZhciBlbXBLZXkyID0gZW1wbG95ZWUxLmVudGl0eUFzcGVjdC5nZXRLZXkoKTtcclxuICA+ICAgICAgaWYgKGVtcEtleTEuZXF1YWxzKGVtcEtleTIpKSB7XHJcbiAgPiAgICAgICAgICAvLyBkbyBzb21ldGhpbmcgIC4uLlxyXG4gID4gICAgICB9XHJcbiAgKiovXHJcbiAgZXF1YWxzKGVudGl0eUtleTogRW50aXR5S2V5KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIShlbnRpdHlLZXkgaW5zdGFuY2VvZiBFbnRpdHlLZXkpKSByZXR1cm4gZmFsc2U7XHJcbiAgICByZXR1cm4gKHRoaXMuZW50aXR5VHlwZSA9PT0gZW50aXR5S2V5LmVudGl0eVR5cGUpICYmXHJcbiAgICAgIGNvcmUuYXJyYXlFcXVhbHModGhpcy52YWx1ZXMsIGVudGl0eUtleS52YWx1ZXMpO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICBSZXR1cm5zIGEgaHVtYW4gcmVhZGFibGUgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBFbnRpdHlLZXkuXHJcbiAgKi9cclxuICB0b1N0cmluZyhhbHRFbnRpdHlUeXBlPzogRW50aXR5VHlwZSkge1xyXG4gICAgcmV0dXJuIChhbHRFbnRpdHlUeXBlIHx8IHRoaXMuZW50aXR5VHlwZSkubmFtZSArICctJyArIHRoaXMuX2tleUluR3JvdXA7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBVc2VkIHRvIGNvbXBhcmUgRW50aXR5S2V5cyBhcmUgZGV0ZXJtaW5lIGlmIHRoZXkgcmVmZXIgdG8gdGhlIHNhbWUgRW50aXR5LlxyXG4gIFRoZXJlIGlzIGFsc28gYW4gaW5zdGFuY2UgdmVyc2lvbiBvZiAnZXF1YWxzJyB3aXRoIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkuXHJcbiAgPiAgICAgIC8vIGFzc3VtZSBlbTEgaXMgYW4gRW50aXR5TWFuYWdlciBjb250YWluaW5nIGEgbnVtYmVyIG9mIGV4aXN0aW5nIGVudGl0aWVzLlxyXG4gID4gICAgICB2YXIgZW1wVHlwZSA9IGVtMS5tZXRhZGF0YVN0b3JlLmdldEVudGl0eVR5cGUoXCJFbXBsb3llZVwiKTtcclxuICA+ICAgICAgdmFyIGVtcEtleTEgPSBuZXcgRW50aXR5S2V5KGVtcFR5cGUsIDEpO1xyXG4gID4gICAgICAvLyBhc3N1bWUgZW1wbG95ZWUxIGlzIGFuIGV4aXN0aW5nIEVtcGxveWVlIGVudGl0eVxyXG4gID4gICAgICB2YXIgZW1wS2V5MiA9IGVtcGxveWVlMS5lbnRpdHlBc3BlY3QuZ2V0S2V5KCk7XHJcbiAgPiAgICAgIGlmIChFbnRpdHlLZXkuZXF1YWxzKGVtcEtleTEsIGVtcEtleTIpKSB7XHJcbiAgPiAgICAgICAgICAvLyBkbyBzb21ldGhpbmcgIC4uLlxyXG4gID4gICAgICB9XHJcbiAgKiovXHJcbiAgc3RhdGljIGVxdWFscyhrMTogRW50aXR5S2V5LCBrMjogRW50aXR5S2V5KSB7XHJcbiAgICBpZiAoIShrMSBpbnN0YW5jZW9mIEVudGl0eUtleSkpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiBrMS5lcXVhbHMoazIpO1xyXG4gIH1cclxuXHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgLy8gVE9ETzogd2UgbWF5IHdhbnQgdG8gY29tcGFyZSB0byBkZWZhdWx0IHZhbHVlcyBsYXRlci5cclxuICBfaXNFbXB0eSgpIHtcclxuICAgIHJldHVybiB0aGlzLnZhbHVlcy5qb2luKFwiXCIpLmxlbmd0aCA9PT0gMDtcclxuICB9XHJcblxyXG4gIC8qKiBoaWRkZW4gKi9cclxuICAvLyBUT0RPOiB0aGluayBhYm91dCBnaXZpbmcgXyBwcmVmaXggb3IgZG9jdW1lbnRpbmcuXHJcbiAgc3RhdGljIGNyZWF0ZUtleVN0cmluZyhrZXlWYWx1ZXM6IGFueVtdKSB7XHJcbiAgICByZXR1cm4ga2V5VmFsdWVzLmpvaW4oRW50aXR5S2V5LkVOVElUWV9LRVlfREVMSU1JVEVSKTtcclxuICB9XHJcblxyXG59XHJcbkVudGl0eUtleS5wcm90b3R5cGUuXyR0eXBlTmFtZSA9IFwiRW50aXR5S2V5XCI7XHJcblxyXG5cclxuIl19
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWtleS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2JyZWV6ZS1jbGllbnQvIiwic291cmNlcyI6WyJzcmMvZW50aXR5LWtleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQzlCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsVUFBVSxFQUFpQixNQUFNLG1CQUFtQixDQUFDO0FBQzlELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFdkM7Ozs7R0FJRztBQUNIO0lBZUU7Ozs7Ozs7Ozs7Ozs7Ozs7O01BaUJFO0lBQ0YsbUJBQVksVUFBc0IsRUFBRSxTQUFjO1FBQ2hELFdBQVcsQ0FBQyxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3ZFLElBQUksUUFBUSxHQUFHLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQy9DLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDdkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTtnQkFDM0MsT0FBTyxFQUFFLENBQUMsVUFBVSxLQUFLLEtBQUssQ0FBQztZQUNqQyxDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDN0IsU0FBUyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDekI7UUFFRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixVQUFVLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQzlDLHdDQUF3QztZQUN4QyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLElBQUksRUFBRTtnQkFDakMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNyRztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE1BQU0sR0FBRyxTQUFTLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRTFELENBQUM7SUFHRCwwQkFBTSxHQUFOO1FBQ0UsT0FBTztZQUNMLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUk7WUFDaEMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1NBQ3BCLENBQUM7SUFDSixDQUFDO0lBRU0sa0JBQVEsR0FBZixVQUFnQixJQUFTLEVBQUUsYUFBNEI7UUFDckQsSUFBSSxFQUFFLEdBQUcsYUFBYSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFlLENBQUM7UUFDL0UsT0FBTyxJQUFJLFNBQVMsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7O09BWUc7SUFDSCwwQkFBTSxHQUFOLFVBQU8sU0FBb0I7UUFDekIsSUFBSSxDQUFDLENBQUMsU0FBUyxZQUFZLFNBQVMsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBQ3BELE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLFNBQVMsQ0FBQyxVQUFVLENBQUM7WUFDL0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQ7O01BRUU7SUFDRiw0QkFBUSxHQUFSLFVBQVMsYUFBMEI7UUFDakMsT0FBTyxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFFLENBQUM7SUFFRDs7Ozs7Ozs7Ozs7T0FXRztJQUNJLGdCQUFNLEdBQWIsVUFBYyxFQUFhLEVBQUUsRUFBYTtRQUN4QyxJQUFJLENBQUMsQ0FBQyxFQUFFLFlBQVksU0FBUyxDQUFDO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDN0MsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFRCx3QkFBd0I7SUFDeEIsd0RBQXdEO0lBQ3hELDRCQUFRLEdBQVI7UUFDRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVELGFBQWE7SUFDYixvREFBb0Q7SUFDN0MseUJBQWUsR0FBdEIsVUFBdUIsU0FBZ0I7UUFDckMsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUExSEQsd0JBQXdCO0lBQ2pCLDhCQUFvQixHQUFHLEtBQUssQ0FBQztJQTJIdEMsZ0JBQUM7Q0FBQSxBQS9IRCxJQStIQztTQS9IWSxTQUFTO0FBZ0l0QixTQUFTLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjb3JlIH0gZnJvbSAnLi9jb3JlJztcclxuaW1wb3J0IHsgYXNzZXJ0UGFyYW0gfSBmcm9tICcuL2Fzc2VydC1wYXJhbSc7XHJcbmltcG9ydCB7IEVudGl0eVR5cGUsIE1ldGFkYXRhU3RvcmUgfSBmcm9tICcuL2VudGl0eS1tZXRhZGF0YSc7XHJcbmltcG9ydCB7IERhdGFUeXBlIH0gZnJvbSAnLi9kYXRhLXR5cGUnO1xyXG5cclxuLyoqXHJcbkFuIEVudGl0eUtleSBpcyBhbiBvYmplY3QgdGhhdCByZXByZXNlbnRzIHRoZSB1bmlxdWUgaWRlbnRpdHkgb2YgYW4gZW50aXR5LiAgRW50aXR5S2V5J3MgYXJlIGltbXV0YWJsZS5cclxuXHJcblxyXG4qKi9cclxuZXhwb3J0IGNsYXNzIEVudGl0eUtleSB7XHJcbiAgLyoqIEBoaWRkZW4gQGludGVybmFsICovXHJcbiAgZGVjbGFyZSBfJHR5cGVOYW1lOiBzdHJpbmc7IC8vIGFjdHVhbGx5IHBsYWNlZCBvbiBwcm90b3R5cGVcclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBzdGF0aWMgRU5USVRZX0tFWV9ERUxJTUlURVIgPSBcIjo6OlwiO1xyXG4gIC8qKiAgVGhlICdFbnRpdHlUeXBlJyB0aGF0IHRoaXMgaXMgYSBrZXkgZm9yLiBfX1JlYWQgT25seV9fICovXHJcbiAgZW50aXR5VHlwZTogRW50aXR5VHlwZTtcclxuICAvKiogIEFuIGFycmF5IG9mIHRoZSB2YWx1ZXMgZm9yIHRoaXMga2V5LiBUaGlzIHdpbGwgdXN1YWxseSBvbmx5IGhhdmUgYSBzaW5nbGUgZWxlbWVudCwgXHJcbiAgdW5sZXNzIHRoZSBlbnRpdHkgdHlwZSBoYXMgYSBtdWx0aXBhcnQga2V5LiBfX1JlYWQgT25seV9fICovXHJcbiAgdmFsdWVzOiBhbnlbXTtcclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICBfa2V5SW5Hcm91cDogc3RyaW5nO1xyXG4gIC8qKiBAaGlkZGVuIEBpbnRlcm5hbCAqL1xyXG4gIF9zdWJ0eXBlczogRW50aXR5VHlwZVtdO1xyXG5cclxuICAvKipcclxuICBDb25zdHJ1Y3RzIGEgbmV3IEVudGl0eUtleS4gIEVhY2ggZW50aXR5IHdpdGhpbiBhbiBFbnRpdHlNYW5hZ2VyIHdpbGwgaGF2ZSBhIHVuaXF1ZSBFbnRpdHlLZXkuXHJcbiAgPiAgICAgLy8gYXNzdW1lIGVtMSBpcyBhbiBFbnRpdHlNYW5hZ2VyIGNvbnRhaW5pbmcgYSBudW1iZXIgb2YgZXhpc3RpbmcgZW50aXRpZXMuXHJcbiAgPiAgICAgdmFyIGVtcFR5cGUgPSBlbTEubWV0YWRhdGFTdG9yZS5nZXRFbnRpdHlUeXBlKFwiRW1wbG95ZWVcIik7XHJcbiAgPiAgICAgdmFyIGVudGl0eUtleSA9IG5ldyBFbnRpdHlLZXkoZW1wVHlwZSwgMSk7XHJcblxyXG4gIEVudGl0eUtleSdzIG1heSBhbHNvIGJlIGZvdW5kIGJ5IGNhbGxpbmcgRW50aXR5QXNwZWN0LmdldEtleSgpXHJcbiAgPiAgICAgLy8gYXNzdW1lIGVtcGxveWVlMSBpcyBhbiBleGlzdGluZyBFbXBsb3llZSBlbnRpdHlcclxuICA+ICAgICB2YXIgZW1wS2V5ID0gZW1wbG95ZWUxLmVudGl0eUFzcGVjdC5nZXRLZXkoKTtcclxuXHJcbiAgTXVsdGlwYXJ0IGtleXMgYXJlIGNyZWF0ZWQgYnkgcGFzc2luZyBhbiBhcnJheSBhcyB0aGUgJ2tleVZhbHVlcycgcGFyYW1ldGVyXHJcbiAgPiAgICAgdmFyIGVtcFRlcnJUeXBlID0gZW0xLm1ldGFkYXRhU3RvcmUuZ2V0RW50aXR5VHlwZShcIkVtcGxveWVlVGVycml0b3J5XCIpO1xyXG4gID4gICAgIHZhciBlbXBUZXJyS2V5ID0gbmV3IEVudGl0eUtleShlbXBUZXJyVHlwZSwgWyAxLCA3N10pO1xyXG4gID4gICAgIC8vIFRoZSBvcmRlciBvZiB0aGUgcHJvcGVydGllcyBpbiB0aGUgJ2tleVZhbHVlcycgYXJyYXkgbXVzdCBiZSB0aGUgc2FtZSBhcyB0aGF0XHJcbiAgPiAgICAgLy8gcmV0dXJuZWQgYnkgZW1wVGVyclR5cGUua2V5UHJvcGVydGllc1xyXG4gIEBwYXJhbSBlbnRpdHlUeXBlIC0gVGhlIFtbRW50aXR5VHlwZV1dIG9mIHRoZSBlbnRpdHkuXHJcbiAgQHBhcmFtIGtleVZhbHVlcyAtIEEgc2luZ2xlIHZhbHVlIG9yIGFuIGFycmF5IG9mIHZhbHVlcy4gXHJcbiAgKi9cclxuICBjb25zdHJ1Y3RvcihlbnRpdHlUeXBlOiBFbnRpdHlUeXBlLCBrZXlWYWx1ZXM6IGFueSkge1xyXG4gICAgYXNzZXJ0UGFyYW0oZW50aXR5VHlwZSwgXCJlbnRpdHlUeXBlXCIpLmlzSW5zdGFuY2VPZihFbnRpdHlUeXBlKS5jaGVjaygpO1xyXG4gICAgbGV0IHN1YnR5cGVzID0gZW50aXR5VHlwZS5nZXRTZWxmQW5kU3VidHlwZXMoKTtcclxuICAgIGlmIChzdWJ0eXBlcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgIHRoaXMuX3N1YnR5cGVzID0gc3VidHlwZXMuZmlsdGVyKGZ1bmN0aW9uIChzdCkge1xyXG4gICAgICAgIHJldHVybiBzdC5pc0Fic3RyYWN0ID09PSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGtleVZhbHVlcykpIHtcclxuICAgICAga2V5VmFsdWVzID0gW2tleVZhbHVlc107XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5lbnRpdHlUeXBlID0gZW50aXR5VHlwZTtcclxuICAgIGVudGl0eVR5cGUua2V5UHJvcGVydGllcy5mb3JFYWNoKGZ1bmN0aW9uIChrcCwgaSkge1xyXG4gICAgICAvLyBpbnN1cmUgdGhhdCBndWlkIGtleXMgYXJlIGNvbXBhcmFibGUuXHJcbiAgICAgIGlmIChrcC5kYXRhVHlwZSA9PT0gRGF0YVR5cGUuR3VpZCkge1xyXG4gICAgICAgIGtleVZhbHVlc1tpXSA9IGtleVZhbHVlc1tpXSAmJiBrZXlWYWx1ZXNbaV0udG9Mb3dlckNhc2UgPyBrZXlWYWx1ZXNbaV0udG9Mb3dlckNhc2UoKSA6IGtleVZhbHVlc1tpXTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy52YWx1ZXMgPSBrZXlWYWx1ZXM7XHJcbiAgICB0aGlzLl9rZXlJbkdyb3VwID0gRW50aXR5S2V5LmNyZWF0ZUtleVN0cmluZyhrZXlWYWx1ZXMpO1xyXG5cclxuICB9XHJcblxyXG5cclxuICB0b0pTT04oKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBlbnRpdHlUeXBlOiB0aGlzLmVudGl0eVR5cGUubmFtZSxcclxuICAgICAgdmFsdWVzOiB0aGlzLnZhbHVlc1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uOiBhbnksIG1ldGFkYXRhU3RvcmU6IE1ldGFkYXRhU3RvcmUpIHtcclxuICAgIGxldCBldCA9IG1ldGFkYXRhU3RvcmUuX2dldFN0cnVjdHVyYWxUeXBlKGpzb24uZW50aXR5VHlwZSwgdHJ1ZSkgYXMgRW50aXR5VHlwZTtcclxuICAgIHJldHVybiBuZXcgRW50aXR5S2V5KGV0LCBqc29uLnZhbHVlcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICBVc2VkIHRvIGNvbXBhcmUgRW50aXR5S2V5cyBhcmUgZGV0ZXJtaW5lIGlmIHRoZXkgcmVmZXIgdG8gdGhlIHNhbWUgRW50aXR5LlxyXG4gIFRoZXJlIGlzIGFsc28gYW4gc3RhdGljIHZlcnNpb24gb2YgJ2VxdWFscycgd2l0aCB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5LlxyXG4gIFxyXG4gID4gICAgICAvLyBhc3N1bWUgZW0xIGlzIGFuIEVudGl0eU1hbmFnZXIgY29udGFpbmluZyBhIG51bWJlciBvZiBleGlzdGluZyBlbnRpdGllcy5cclxuICA+ICAgICAgdmFyIGVtcFR5cGUgPSBlbTEubWV0YWRhdGFTdG9yZS5nZXRFbnRpdHlUeXBlKFwiRW1wbG95ZWVcIik7XHJcbiAgPiAgICAgIHZhciBlbXBLZXkxID0gbmV3IEVudGl0eUtleShlbXBUeXBlLCAxKTtcclxuICA+ICAgICAgLy8gYXNzdW1lIGVtcGxveWVlMSBpcyBhbiBleGlzdGluZyBFbXBsb3llZSBlbnRpdHlcclxuICA+ICAgICAgdmFyIGVtcEtleTIgPSBlbXBsb3llZTEuZW50aXR5QXNwZWN0LmdldEtleSgpO1xyXG4gID4gICAgICBpZiAoZW1wS2V5MS5lcXVhbHMoZW1wS2V5MikpIHtcclxuICA+ICAgICAgICAgIC8vIGRvIHNvbWV0aGluZyAgLi4uXHJcbiAgPiAgICAgIH1cclxuICAqKi9cclxuICBlcXVhbHMoZW50aXR5S2V5OiBFbnRpdHlLZXkpOiBib29sZWFuIHtcclxuICAgIGlmICghKGVudGl0eUtleSBpbnN0YW5jZW9mIEVudGl0eUtleSkpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiAodGhpcy5lbnRpdHlUeXBlID09PSBlbnRpdHlLZXkuZW50aXR5VHlwZSkgJiZcclxuICAgICAgY29yZS5hcnJheUVxdWFscyh0aGlzLnZhbHVlcywgZW50aXR5S2V5LnZhbHVlcyk7XHJcbiAgfVxyXG5cclxuICAvKlxyXG4gIFJldHVybnMgYSBodW1hbiByZWFkYWJsZSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIEVudGl0eUtleS5cclxuICAqL1xyXG4gIHRvU3RyaW5nKGFsdEVudGl0eVR5cGU/OiBFbnRpdHlUeXBlKSB7XHJcbiAgICByZXR1cm4gKGFsdEVudGl0eVR5cGUgfHwgdGhpcy5lbnRpdHlUeXBlKS5uYW1lICsgJy0nICsgdGhpcy5fa2V5SW5Hcm91cDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gIFVzZWQgdG8gY29tcGFyZSBFbnRpdHlLZXlzIGFyZSBkZXRlcm1pbmUgaWYgdGhleSByZWZlciB0byB0aGUgc2FtZSBFbnRpdHkuXHJcbiAgVGhlcmUgaXMgYWxzbyBhbiBpbnN0YW5jZSB2ZXJzaW9uIG9mICdlcXVhbHMnIHdpdGggdGhlIHNhbWUgZnVuY3Rpb25hbGl0eS5cclxuICA+ICAgICAgLy8gYXNzdW1lIGVtMSBpcyBhbiBFbnRpdHlNYW5hZ2VyIGNvbnRhaW5pbmcgYSBudW1iZXIgb2YgZXhpc3RpbmcgZW50aXRpZXMuXHJcbiAgPiAgICAgIHZhciBlbXBUeXBlID0gZW0xLm1ldGFkYXRhU3RvcmUuZ2V0RW50aXR5VHlwZShcIkVtcGxveWVlXCIpO1xyXG4gID4gICAgICB2YXIgZW1wS2V5MSA9IG5ldyBFbnRpdHlLZXkoZW1wVHlwZSwgMSk7XHJcbiAgPiAgICAgIC8vIGFzc3VtZSBlbXBsb3llZTEgaXMgYW4gZXhpc3RpbmcgRW1wbG95ZWUgZW50aXR5XHJcbiAgPiAgICAgIHZhciBlbXBLZXkyID0gZW1wbG95ZWUxLmVudGl0eUFzcGVjdC5nZXRLZXkoKTtcclxuICA+ICAgICAgaWYgKEVudGl0eUtleS5lcXVhbHMoZW1wS2V5MSwgZW1wS2V5MikpIHtcclxuICA+ICAgICAgICAgIC8vIGRvIHNvbWV0aGluZyAgLi4uXHJcbiAgPiAgICAgIH1cclxuICAqKi9cclxuICBzdGF0aWMgZXF1YWxzKGsxOiBFbnRpdHlLZXksIGsyOiBFbnRpdHlLZXkpIHtcclxuICAgIGlmICghKGsxIGluc3RhbmNlb2YgRW50aXR5S2V5KSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgcmV0dXJuIGsxLmVxdWFscyhrMik7XHJcbiAgfVxyXG5cclxuICAvKiogQGhpZGRlbiBAaW50ZXJuYWwgKi9cclxuICAvLyBUT0RPOiB3ZSBtYXkgd2FudCB0byBjb21wYXJlIHRvIGRlZmF1bHQgdmFsdWVzIGxhdGVyLlxyXG4gIF9pc0VtcHR5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMudmFsdWVzLmpvaW4oXCJcIikubGVuZ3RoID09PSAwO1xyXG4gIH1cclxuXHJcbiAgLyoqIGhpZGRlbiAqL1xyXG4gIC8vIFRPRE86IHRoaW5rIGFib3V0IGdpdmluZyBfIHByZWZpeCBvciBkb2N1bWVudGluZy5cclxuICBzdGF0aWMgY3JlYXRlS2V5U3RyaW5nKGtleVZhbHVlczogYW55W10pIHtcclxuICAgIHJldHVybiBrZXlWYWx1ZXMuam9pbihFbnRpdHlLZXkuRU5USVRZX0tFWV9ERUxJTUlURVIpO1xyXG4gIH1cclxuXHJcbn1cclxuRW50aXR5S2V5LnByb3RvdHlwZS5fJHR5cGVOYW1lID0gXCJFbnRpdHlLZXlcIjtcclxuXHJcblxyXG4iXX0=
|