@ditojs/admin 2.2.14 → 2.2.15

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.
@@ -5990,10 +5990,8 @@ const bl = L.component("DitoForm", {
5990
5990
  },
5991
5991
  watch: {
5992
5992
  $route(e, t) {
5993
- if (this.providesData) {
5994
- const { param: s } = this.meta;
5995
- s && e.params[s] !== t.params[s] && this.loadData(!0);
5996
- }
5993
+ const { param: s } = this.meta;
5994
+ s && this.providesData && t.params[s] !== "create" && e.params[s] !== t.params[s] && this.loadData(!0);
5997
5995
  },
5998
5996
  sourceData: "clearClonedData",
5999
5997
  // Needed for the 'create' redirect in `inheritedData()` to work:
@@ -9879,4 +9877,4 @@ function nc(e, t) {
9879
9877
  export {
9880
9878
  Nc as default
9881
9879
  };
9882
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcFN0YXRlLmpzIiwiLi4vc3JjL3V0aWxzL2RhdGEuanMiLCIuLi9zcmMvRGl0b0NvbnRleHQuanMiLCIuLi9zcmMvbWl4aW5zL0VtaXR0ZXJNaXhpbi5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fY3JlZGl0Y2FyZC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fZGVjaW1hbHMuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2VtYWlsLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19ob3N0bmFtZS5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fZG9tYWluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19pbnRlZ2VyLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19tYXguanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX21pbi5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcGFzc3dvcmQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3JhbmdlLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19yZXF1aXJlZC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fdXJsLmpzIiwiLi4vc3JjL21peGlucy9WYWxpZGF0aW9uTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvYWNjZXNzb3IuanMiLCIuLi9zcmMvbWl4aW5zL1R5cGVNaXhpbi5qcyIsIi4uL3NyYy91dGlscy91aWQuanMiLCIuLi9zcmMvdXRpbHMvU2NoZW1hR3JhcGguanMiLCIuLi9zcmMvdXRpbHMvdHlwZS5qcyIsIi4uL3NyYy91dGlscy9zY2hlbWEuanMiLCIuLi9zcmMvdXRpbHMvcmVzb3VyY2UuanMiLCIuLi9zcmMvbWl4aW5zL0RpdG9NaXhpbi5qcyIsIi4uL3NyYy91dGlscy9vcHRpb25zLmpzIiwiLi4vc3JjL0RpdG9Db21wb25lbnQuanMiLCIuLi9zcmMvRGl0b1VzZXIuanMiLCIuLi9zcmMvbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzIiwiLi4vc3JjL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUm91dGVNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WaWV3LnZ1ZSIsIi4uLy4uL3VpL3NyYy91dGlscy9kYXRlLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvQ2FsZW5kYXIudnVlIiwiLi4vLi4vdWkvc3JjL3V0aWxzL2V2ZW50LmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvVHJpZ2dlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9JbnB1dEZpZWxkLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVQaWNrZXIudnVlIiwiLi4vLi4vdWkvc3JjL3V0aWxzL3Njcm9sbC5qcyIsIi4uLy4uL3VpL3NyYy91dGlscy9zZWxlY3Rpb24uanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9UaW1lUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVUaW1lUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0ljb24udnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvUGFnaW5hdGlvbi52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9Td2l0Y2hCdXR0b24udnVlIiwiLi4vLi4vdWkvc3JjL3RyYW5zaXRpb25zL1RyYW5zaXRpb25IZWlnaHQudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZUZvY3VzVHJhcC9jb21wb25lbnQubWpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RpYWxvZy52dWUiLCIuLi9zcmMvbWl4aW5zL0RvbU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NpZGViYXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NwaW5uZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0hlYWRlci52dWUiLCIuLi9zcmMvbWl4aW5zL1B1bGxkb3duTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQWNjb3VudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWxlbWVudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTGFiZWwudnVlIiwiLi4vc3JjL21peGlucy9JdGVtTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWFJbmxpbmVkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lLnZ1ZSIsIi4uL3NyYy91dGlscy9tYXRoLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NvbnRhaW5lci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFicy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWwudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVscy52dWUiLCIuLi9zcmMvdXRpbHMvdnVlLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0J1dHRvbnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VkaXRCdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DcmVhdGVCdXR0b24udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NsaXBib2FyZC52dWUiLCIuLi9zcmMvbWl4aW5zL0xvYWRpbmdNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy91dGlscy9wYXRoLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm0udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm1OZXN0ZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Vycm9ycy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NvcGVzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYWdpbmF0aW9uLnZ1ZSIsIi4uL3NyYy9taXhpbnMvU29ydGFibGVNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmVlSXRlbS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVIZWFkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUNlbGwudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZVNvcnRhYmxlL2NvbXBvbmVudC5tanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRHJhZ2dhYmxlLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WTm9kZS52dWUiLCIuLi9zcmMvRGl0b1R5cGVDb21wb25lbnQuanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVCdXR0b24udnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ2hlY2tib3gudnVlIiwiLi4vc3JjL21peGlucy9EYXRhTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL09wdGlvbnNNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNoZWNrYm94ZXMudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29kZS52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDb2xvci52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDb21wb25lbnQudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29tcHV0ZWQudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlRGF0ZS52dWUiLCIuLi9zcmMvdXRpbHMvcm91dGUuanMiLCIuLi9zcmMvbWl4aW5zL1NvdXJjZU1peGluLmpzIiwiLi4vc3JjL3V0aWxzL2ZpbHRlci5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUxpc3QudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTGFiZWwudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTWFya3VwLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZU11bHRpc2VsZWN0LnZ1ZSIsIi4uL3NyYy9taXhpbnMvTnVtYmVyTWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVOdW1iZXIudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlT2JqZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVBhbmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVByb2dyZXNzLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVJhZGlvLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVNlY3Rpb24udnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlU2VsZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVNsaWRlci52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVTd2l0Y2gudnVlIiwiLi4vc3JjL21peGlucy9UZXh0TWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVUZXh0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVRleHRhcmVhLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVRyZWVMaXN0LnZ1ZSIsIi4uL3NyYy91dGlscy91bml0cy5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVVwbG9hZC52dWUiLCIuLi9zcmMvZGlyZWN0aXZlcy9yZXNpemUuanMiLCIuLi9zcmMvdXRpbHMvZGVwcmVjYXRlLmpzIiwiLi4vc3JjL3ZlcmJzLmpzIiwiLi4vc3JjL0RpdG9BZG1pbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWFjdGl2ZSB9IGZyb20gJ3Z1ZSdcblxuZXhwb3J0IGRlZmF1bHQgcmVhY3RpdmUoe1xuICB0aXRsZTogJycsXG4gIHJvdXRlQ29tcG9uZW50czogW10sXG4gIHVzZXI6IG51bGwsXG4gIGxvYWRDYWNoZToge30sIC8vIFNlZSBUeXBlTWl4aW4ubG9hZCgpXG4gIGFjdGl2ZUxhYmVsOiBudWxsLFxuICBjbGlwYm9hcmREYXRhOiBudWxsXG59KVxuIiwiaW1wb3J0IHtcbiAgaXNJbnRlZ2VyLFxuICBwYXJzZURhdGFQYXRoLFxuICBnZXRWYWx1ZUF0RGF0YVBhdGgsXG4gIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgdG9rZW4pIHtcbiAgcmV0dXJuIGRhdGFQYXRoXG4gICAgPyBgJHtkYXRhUGF0aH0vJHt0b2tlbn1gXG4gICAgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcGF0aD8ucG9wKClcbiAgcmV0dXJuIHBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbmVzdGVkID8gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkgOiBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIGlmIChwYXRoKSB7XG4gICAgLy8gUmVtb3ZlIHRoZSBwYXJlbnQgdG9rZW4uIElmIGl0J3MgYSBudW1iZXIsIHRoZW4gd2UncmUgZGVhbGluZyB3aXRoIGFuXG4gICAgLy8gYXJyYXkgYW5kIG5lZWQgdG8gcmVtb3ZlIG1vcmUgdG9rZW5zIHVudGlsIHdlIG1lZXQgdGhlIGFjdHVhbCBwYXJlbnQ6XG4gICAgbGV0IHRva2VuXG4gICAgZG8ge1xuICAgICAgdG9rZW4gPSBwYXRoLnBvcCgpXG4gICAgfSB3aGlsZSAodG9rZW4gIT0gbnVsbCAmJiBpc0ludGVnZXIoK3Rva2VuKSlcbiAgICAvLyBJZiB0aGUgcmVtb3ZlZCB0b2tlbiBpcyB2YWxpZCwgd2UgY2FuIGdldCB0aGUgcGFyZW50IGRhdGE6XG4gICAgaWYgKHRva2VuICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBwYXRoXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbShyb290SXRlbSwgZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICByZXR1cm4gcGF0aCA/IGdldFZhbHVlQXREYXRhUGF0aChyb290SXRlbSwgcGF0aCkgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcmV0dXJuIHBhdGhbcGF0aC5sZW5ndGggLSAxXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoTmFtZShkYXRhUGF0aCkge1xuICBjb25zdCB0b2tlbiA9IGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKVxuICByZXR1cm4gdG9rZW4gPT0gbnVsbCB8fCBpc0ludGVnZXIoK3Rva2VuKSA/IG51bGwgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoSW5kZXgoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgY29uc3QgaW5kZXggPSB0b2tlbiA9PSBudWxsID8gbnVsbCA6ICt0b2tlblxuICByZXR1cm4gaXNJbnRlZ2VyKGluZGV4KSA/IGluZGV4IDogbnVsbFxufVxuXG5sZXQgdGVtcG9yYXJ5SWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gc2V0VGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFRlbXBvcmFyeSBpZHMgYXJlIG1hcmtlZCB3aXRoIGEgJ0AnIGF0IHRoZSBiZWdpbm5pbmcuXG4gIGRhdGFbaWRLZXldID0gYEAkeysrdGVtcG9yYXJ5SWR9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wb3JhcnlJZChpZCkge1xuICByZXR1cm4gL15ALy50ZXN0KGlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWZlcmVuY2UoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFJldHVybnMgdHJ1ZSBpZiB2YWx1ZSBpcyBhbiBvYmplY3QgdGhhdCBob2xkcyBub3RoaW5nIG1vcmUgdGhhbiBhbiBpZC5cbiAgcmV0dXJuIGRhdGE/LltpZEtleV0gIT0gbnVsbCAmJiBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPT09IDFcbn1cbiIsImltcG9ydCB7IHRvUmF3IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQge1xuICBnZXRJdGVtRGF0YVBhdGgsXG4gIGdldFBhcmVudEl0ZW1EYXRhUGF0aCxcbiAgZ2V0UGFyZW50SXRlbSxcbiAgZ2V0SXRlbSxcbiAgZ2V0TGFzdERhdGFQYXRoTmFtZSxcbiAgZ2V0TGFzdERhdGFQYXRoSW5kZXhcbn0gZnJvbSAnLi91dGlscy9kYXRhLmpzJ1xuXG5jb25zdCB7IGhhc093blByb3BlcnR5IH0gPSBPYmplY3QucHJvdG90eXBlXG5cbi8vIGBEaXRvQ29udGV4dGAgaW5zdGFuY2VzIGFyZSBhIHRoaW4gd3JhcHBlciBhcm91bmQgcmF3IGBjb250ZXh0YCBvYmplY3RzLFxuLy8gd2hpY2ggdGhlbXNlbHZlcyBhY3R1YWxseSBpbmhlcml0IGZyb20gdGhlIGxpbmtlZCBgY29tcG9uZW50YCBpbnN0YW5jZSwgc29cbi8vIHRoYXQgdGhleSBvbmx5IG5lZWQgdG8gcHJvdmlkZSB0aGUgdmFsdWVzIHRoYXQgc2hvdWxkIGJlIGRpZmZlcmVudCB0aGFuXG4vLyBpbiB0aGUgdW5kZXJseWluZyBjb21wb25lbnQuIEluIG9yZGVyIHRvIG5vdCBleHBvc2UgYWxsIGZpZWxkcyBmcm9tIHRoZVxuLy8gY29tcG9uZW50LCB0aGUgd3JhcHBlciBpcyBpbnRyb2R1Y2VkOlxuLy8gVXNlIFdlYWtNYXAgZm9yIHRoZSByYXcgYGNvbnRleHRgIG9iamVjdHMsIHNvIHdlIGRvbid0IGhhdmUgdG8gcG9sbHV0ZSB0aGVcbi8vIGFjdHVhbCBgRGl0b0NvbnRleHRgIGluc3RhbmNlIHdpdGggaXQuXG5jb25zdCBjb250ZXh0cyA9IG5ldyBXZWFrTWFwKClcblxuZnVuY3Rpb24gZ2V0KGNvbnRleHQsIGtleSwgZGVmYXVsdFZhbHVlKSB7XG4gIGNvbnN0IG9iamVjdCA9IGNvbnRleHRzLmdldCh0b1Jhdyhjb250ZXh0KSlcbiAgY29uc3QgdmFsdWUgPSBvYmplY3Rba2V5XVxuICAvLyBJZiBgb2JqZWN0YCBleHBsaWNpdGx5IHNldHMgdGhlIGtleSB0byBgdW5kZWZpbmVkYCwgcmV0dXJuIGl0LlxuICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KVxuICAgID8gdmFsdWVcbiAgICA6IGlzRnVuY3Rpb24oZGVmYXVsdFZhbHVlKVxuICAgICAgPyBkZWZhdWx0VmFsdWUoKVxuICAgICAgOiBkZWZhdWx0VmFsdWVcbn1cblxuZnVuY3Rpb24gc2V0KGNvbnRleHQsIGtleSwgdmFsdWUpIHtcbiAgY29udGV4dHMuZ2V0KHRvUmF3KGNvbnRleHQpKVtrZXldID0gdmFsdWVcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b0NvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb21wb25lbnQsIGNvbnRleHQpIHtcbiAgICAvLyBVc2UgdGhlIHByb3ZpZGVkIHBhcmFtcyBvYmplY3QgLyBmdW5jdGlvbiwgb3IgY3JlYXRlIGEgbmV3IG9uZTpcbiAgICBjb250ZXh0ID0gY29udGV4dFxuICAgICAgPyBpc0Z1bmN0aW9uKGNvbnRleHQpXG4gICAgICAgID8gY29udGV4dCgpXG4gICAgICAgIDogeyAuLi5jb250ZXh0IH1cbiAgICAgIDoge31cbiAgICAvLyBJZiBub3QgZXhwbGljaXRseSBzZXQgKHRvIGZhbHNlKSwgZGVmYXVsdCB0byB0cnVlIHNvIHdlIGRvbid0IGZhbGwgYmFja1xuICAgIC8vIHRvIGBjb21wb25lbnRgIGZvciBpdHMgdmFsdWUuXG4gICAgY29udGV4dC5uZXN0ZWQgPz89IHRydWVcbiAgICBjb250ZXh0LmNvbXBvbmVudCA9IGNvbXBvbmVudFxuICAgIC8vIEhhdmUgYG9iamVjdGAgaW5oZXJpdCBmcm9tIHRoZSBgY29tcG9uZW50YCBpbnN0YW5jZSwgc28gaXQgY2FuIG92ZXJyaWRlXG4gICAgLy8gaXRzIHZhbHVlcyBhbmQgc3RpbGwgcmV0cmlldmUgZnJvbSBpdCwgYW5kIGFzc29jaWF0ZSBpdCB3aXRoIGB0aGlzYFxuICAgIC8vIHRocm91Z2ggYGNvbnRleHRzYCBtYXA6XG4gICAgY29uc3Qgb2JqZWN0ID0gT2JqZWN0LnNldFByb3RvdHlwZU9mKGNvbnRleHQsIGNvbXBvbmVudClcbiAgICAvLyBObyBuZWVkIGZvciBgdG9SYXcodGhpcylgIGhlcmUgYXMgaXQncyBhbHdheXMgcmF3IGluc2lkZSB0aGUgY29uc3RydWN0b3IuXG4gICAgY29udGV4dHMuc2V0KHRoaXMsIG9iamVjdClcbiAgfVxuXG4gIHN0YXRpYyBnZXQoY29tcG9uZW50LCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQgaW5zdGFuY2VvZiBEaXRvQ29udGV4dFxuICAgICAgPyBjb250ZXh0XG4gICAgICA6IG5ldyBEaXRvQ29udGV4dChjb21wb25lbnQsIGNvbnRleHQpXG4gIH1cblxuICAvLyBgbmVzdGVkYCBpcyBgdHJ1ZWAgd2hlbiB0aGUgZGF0YS1wYXRoIHBvaW50cyBhIHZhbHVlIGluc2lkZSBhbiBpdGVtLCBhbmRcbiAgLy8gYGZhbHNlYCB3aGVuIGl0IHBvaW50cyB0byB0aGUgaXRlbSBpdHNlbGYuXG4gIGdldCBuZXN0ZWQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmVzdGVkJywgdHJ1ZSlcbiAgfVxuXG4gIGdldCBzY2hlbWEoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc2NoZW1hJywgbnVsbClcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2YWx1ZScsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCBkYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkYXRhUGF0aCcsICcnKVxuICB9XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmFtZScsICgpID0+IGdldExhc3REYXRhUGF0aE5hbWUodGhpcy5kYXRhUGF0aCkpXG4gIH1cblxuICBnZXQgaW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnaW5kZXgnLCAoKSA9PiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLmRhdGFQYXRoKSlcbiAgfVxuXG4gIGdldCBpdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBwYXJlbnRJdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldFBhcmVudEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBpdGVtSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMuaXRlbURhdGFQYXRoKVxuICB9XG5cbiAgZ2V0IHBhcmVudEl0ZW1JbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5wYXJlbnRJdGVtRGF0YVBhdGgpXG4gIH1cblxuICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgLy8gdGVybSBgaXRlbWAgaXMgdXNlZCBmb3IgdGhlIGRhdGEgdGhhdCByZWxhdGVzIHRvIGVkaXRpbmcgb2JqZWN0czpcbiAgLy8gSWYgYGRhdGFgIGlzbid0IHByb3ZpZGVkLCB3ZSBjYW4gZGV0ZXJtaW5lIGl0IGZyb20gcm9vdERhdGEgJiBkYXRhUGF0aDpcbiAgZ2V0IGl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGF0YScsICgpID0+XG4gICAgICBnZXRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgIClcbiAgfVxuXG4gIC8vIE5PVEU6IGBwYXJlbnRJdGVtYCBpc24ndCB0aGUgY2xvc2VzdCBkYXRhIHBhcmVudCB0byBgaXRlbWAsIGl0J3MgdGhlXG4gIC8vIGNsb3Nlc3QgcGFyZW50IHRoYXQgaXNuJ3QgYW4gYXJyYXksIGUuZy4gZm9yIHJlbGF0aW9ucyBvciBuZXN0ZWQgSlNPTiBkYXRhLlxuICAvLyBUaGlzIGlzIHdoeSB0aGUgdGVybSBgaXRlbWAgd2FzIGNob3NlbiBvdmVyIGBkYXRhYCwgZS5nLiBWUyB0aGUgdXNlIG9mXG4gIC8vIGBwYXJlbnREYXRhYCBpbiBzZXJ2ZXItc2lkZWQgdmFsaWRhdGlvbiwgd2hpY2ggaXMgdGhlIGNsb3Nlc3QgcGFyZW50LiBJZlxuICAvLyBuZWVkZWQsIHdlIGNvdWxkIGV4cG9zZSB0aGlzIGRhdGEgaGVyZSB0b28sIGFzIHdlIGNhbiBkbyBhbGwgc29ydHMgb2YgZGF0YVxuICAvLyBwcm9jZXNzaW5nIHdpdGggYHJvb3REYXRhYCBhbmQgYGRhdGFQYXRoYC5cbiAgZ2V0IHBhcmVudEl0ZW0oKSB7XG4gICAgY29uc3QgaXRlbSA9IChcbiAgICAgIGdldFBhcmVudEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpIHx8XG4gICAgICBudWxsXG4gICAgKVxuICAgIHJldHVybiBpdGVtICE9PSB0aGlzLml0ZW0gPyBpdGVtIDogbnVsbFxuICB9XG5cbiAgZ2V0IHJvb3RJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jvb3REYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBwcm9jZXNzZWRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Byb2Nlc3NlZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGNsaXBib2FyZEl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnY2xpcGJvYXJkRGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgdXNlcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd1c2VyJywgbnVsbClcbiAgfVxuXG4gIGdldCBhcGkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnYXBpJywgbnVsbClcbiAgfVxuXG4gIGdldCB2aWV3cygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2aWV3cycsIG51bGwpXG4gIH1cblxuICBnZXQgaXRlbUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2l0ZW1MYWJlbCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1MYWJlbCcsIG51bGwpXG4gIH1cblxuICAvLyBOT1RFOiBMaWtlICdvcHRpb25zJywgdGhlIGFzc29jaWF0ZWQgY29tcG9uZW50IGRvZXNuJ3QgYWx3YXlzIGV4aXN0LCBlLmcuXG4gIC8vIGluIG5lc3RlZCBmb3JtcyBkdXJpbmcgYHByb2Nlc3NEYXRhKClgLiBCdXQgYHNjaGVtYWAgaXMgZ3VhcmFudGVlZCB0b1xuICAvLyBhbHdheXMgYmUgYXZhaWxhYmxlLlxuICBnZXQgY29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICAvLyBUT0RPOiBBZGQgYGNvbXBvbmVudFNjaGVtYWAgZ2V0dGVyIGZvciB0aGUgc2NoZW1hIG9mIHRoZSBjdXJyZW50IGNvbXBvbmVudCxcbiAgLy8gZXZlbiB3aGVuIHRoZSBjb21wb25lbnQgaXNuJ3QgYWN0dWFsbHkgaW5zdGFudGlhdGVkLiBDb25zaWRlciBhZGRpbmdcbiAgLy8gYHNvdXJjZVNjaGVtYWAgYXMgd2VsbD9cblxuICAvLyBUT0RPOiBGaXggdW5jbGVhciBuYW1pbmc6IFdoaWNoIHNjaGVtYSBpcyB0aGlzLCB0aGF0IG9mIHRoZSBjb21wb25lbnQgb3Igb2ZcbiAgLy8gaXRzIHBhcmVudD8gSXNuJ3QgZXhwb3NpbmcgYGZvcm1Db21wb25lbnRgIGFuZCBgdmlld0NvbXBvbmVudGAgZW5vdWdoLCBvbmNlXG4gIC8vIHdlIG9mZmVyIGFjY2VzcyB0byB0aGVpciBjb21wb25lbnRzIHRoZXJlIHRocm91Z2ggYGdldENvbXBvbmVudCgpYCAmIGNvLiBvblxuICAvLyBgRGl0b01peGluYCBwZXJoYXBzPyAgQWxzbywgdGhlcmUgY291bGQgYmUgYSBgdGFiQ29tcG9uZW50YCBnZXR0ZXIgZm9yXG4gIC8vIHNjaGVtYXMgaW4gdGFicz9cbiAgZ2V0IHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdzY2hlbWFDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGZvcm1Db21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZm9ybUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgdmlld0NvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2aWV3Q29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGlhbG9nQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBwYW5lbENvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdwYW5lbENvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncmVzb3VyY2VDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdzb3VyY2VDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgLy8gV2hlbiB1c2VkIGluIE9wdGlvbnNNaXhpbiBmb3IgYHNjaGVtYS5vcHRpb25zLnZhbHVlKClgLFxuICAvLyBgc2NoZW1hLm9wdGlvbnMubGFiZWwoKWAgYW5kICBgc2NoZW1hLnNlYXJjaC5maWx0ZXIoKWAgY2FsbGJhY2tzOlxuICBnZXQgb3B0aW9uKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ29wdGlvbicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ29wdGlvbnMnLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUT0RPOiBSZW5hbWUgdGhpcyB0byBgc2VhcmNoVGVybWAgb3IgYHNlYXJjaFF1ZXJ5YCwgdG8gcGVyaGFwcyBmcmVlIGBxdWVyeWBcbiAgLy8gZm9yIHRoZSBhY3R1YWwgYHJlc291cmNlQ29tcG9uZW50LnF1ZXJ5YCBvYmplY3Q/XG4gIGdldCBxdWVyeSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdxdWVyeScsIHVuZGVmaW5lZClcbiAgfVxuXG4gIC8vIFRoZSBlcnJvciBmaWVsZCBpcyBvbmx5IHBvcHVsYXRlZCBpbiB0aGUgY29udGV4dCBvZiBidXR0b25zIHRoYXQgc2VuZFxuICAvLyByZXF1ZXN0cywgc2VlIGBSZXNvdXJjZU1peGluLmVtaXRCdXR0b25FdmVudCgpYDpcbiAgZ2V0IGVycm9yKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Vycm9yJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgZ2V0IHdhc05vdGlmaWVkKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3dhc05vdGlmaWVkJywgZmFsc2UpXG4gIH1cblxuICAvLyBIZWxwZXIgTWV0aG9kc1xuXG4gIGdldCByZXF1ZXN0KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHRoaXMuY29tcG9uZW50LnJlcXVlc3Qob3B0aW9ucylcbiAgfVxuXG4gIGdldCBmb3JtYXQoKSB7XG4gICAgcmV0dXJuICh2YWx1ZSwgb3B0aW9ucykgPT4gdGhpcy5jb21wb25lbnQuZm9ybWF0KHZhbHVlLCBvcHRpb25zKVxuICB9XG5cbiAgZ2V0IG5hdmlnYXRlKCkge1xuICAgIHJldHVybiBsb2NhdGlvbiA9PiB0aGlzLmNvbXBvbmVudC5uYXZpZ2F0ZShsb2NhdGlvbilcbiAgfVxuXG4gIGdldCBkb3dubG9hZCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5kb3dubG9hZChvcHRpb25zKVxuICB9XG5cbiAgZ2V0IGdldFJlc291cmNlVXJsKCkge1xuICAgIHJldHVybiByZXNvdXJjZSA9PiB0aGlzLmNvbXBvbmVudC5nZXRSZXNvdXJjZVVybChyZXNvdXJjZSlcbiAgfVxuXG4gIGdldCBub3RpZnkoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4ge1xuICAgICAgdGhpcy5jb21wb25lbnQubm90aWZ5KG9wdGlvbnMpXG4gICAgICBzZXQodGhpcywgJ3dhc05vdGlmaWVkJywgdHJ1ZSlcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzQXJyYXksIGlzUGxhaW5PYmplY3QgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBsaXN0ZW5lcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIEFzeW5jIG9uKCkgYW5kICRvZmYoKSBtZXRob2RzIHRoYXQga2VlcCB0cmFjayBvZiB0aGUgZXZlbnRzIGFkZGVkIC9cbiAgICAvLyByZW1vdmVkLCBhbmQgcHJvdmlkZSBhIGhhc0xpc3RlbmVycygpIG1ldGhvZCB0aGF0IGNoZWNrcyBpZiB0aGUgY29tcG9uZW50XG4gICAgLy8gaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudC5cblxuICAgIC8vIEFsc28gYWRkcyBwcm9wZXIgaGFuZGxpbmcgb2YgYXN5bmMgZXZlbnRzLCBpbmNsdWRpbmcgYSBhc3luYyBlbWl0KCkgdGhhdFxuICAgIC8vIGRlYWxzIHdpdGggcHJvcGVyIGV2ZW50IHF1ZXVlaW5nLlxuICAgIG9uKGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGV2LCBjYWxsYmFjaylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBldmVudCkge1xuICAgICAgICAgIHRoaXMub24oa2V5LCBldmVudFtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSAodGhpcy5saXN0ZW5lcnMgfHw9IE9iamVjdC5jcmVhdGUobnVsbCkpXG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSAobGlzdGVuZXJzW2V2ZW50XSB8fD0ge1xuICAgICAgICAgIGNhbGxiYWNrczogW10sXG4gICAgICAgICAgcXVldWU6IFtdXG4gICAgICAgIH0pXG4gICAgICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgb25jZShldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IG9uID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgdGhpcy5vZmYoZXZlbnQsIG9uKVxuICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncylcbiAgICAgIH1cbiAgICAgIG9uLmNhbGxiYWNrID0gY2FsbGJhY2sgLy8gTmVlZGVkIGZvciBgb2ZmKClgLCBzZWUgYmVsb3cuXG4gICAgICByZXR1cm4gdGhpcy5vbihldmVudCwgb24pXG4gICAgfSxcblxuICAgIG9mZihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAvLyBSZW1vdmUgYWxsIGV2ZW50c1xuICAgICAgICBkZWxldGUgdGhpcy5saXN0ZW5lcnNcbiAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBldiBvZiBldmVudCkge1xuICAgICAgICAgIHRoaXMub2ZmKGV2LCBjYWxsYmFjaylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBldmVudCkge1xuICAgICAgICAgIHRoaXMub2ZmKGtleSwgZXZlbnRba2V5XSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVtb3ZlIHNwZWNpZmljIGV2ZW50XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5saXN0ZW5lcnM/LltldmVudF1cbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGFsbCBoYW5kbGVycyBmb3IgdGhpcyBldmVudFxuICAgICAgICAgICAgZGVsZXRlIHRoaXMubGlzdGVuZXJzW2V2ZW50XVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYSBzcGVjaWZpYyBoYW5kbGVyOiBmaW5kIHRoZSBpbmRleCBpbiBjYWxsYmFja3NcbiAgICAgICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBlbnRyeVxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjYWxsYmFja3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAvLyBNYXRjaCBgY2IuY2FsbGJhY2tgIGFsc28sIGFzIHVzZWQgYnkgYG9uY2UoKWAsIHNlZSAgYWJvdmU6XG4gICAgICAgICAgICAgIGNiID0+IGNiID09PSBjYWxsYmFjayB8fCBjYi5jYWxsYmFjayA9PT0gY2FsbGJhY2tcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2tzLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGVtaXQoZXZlbnQsIC4uLmFyZ3MpIHtcbiAgICAgIC8vIE9ubHkgcXVldWUgZXZlbnQgaWYgdGhlcmUgYWN0dWFsbHkgYXJlIGxpc3RlbmVycyBmb3IgaXQuXG4gICAgICBjb25zdCBlbnRyeSA9IHRoaXMubGlzdGVuZXJzPy5bZXZlbnRdXG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgY29uc3QgeyBxdWV1ZSwgY2FsbGJhY2tzIH0gPSBlbnRyeVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV4dCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIC8vIEVtaXQgdGhlIG5leHQgZXZlbnQgaW4gdGhlIHF1ZXVlIHdpdGggaXRzIHBhcmFtcy5cbiAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBpdCBvbmx5IGdldHMgcmVtb3ZlZCBvbmNlIGBuZXh0KClgIGlzIGNhbGxlZC5cbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gcXVldWUuc2hpZnQoKVxuICAgICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAgIGxldCByZXN1bHRcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiBjYWxsYmFja3MpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY2FsbGJhY2suYXBwbHkodGhpcywgZW50cnkuYXJncylcbiAgICAgICAgICAgICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXNcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYEVycm9yIGR1cmluZyBldmVudCBoYW5kbGVyIGZvciAnJHtldmVudH0nOmAsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIFJlc29sdmUgdGhlIHByb21pc2UgdGhhdCB3YXMgYWRkZWQgdG8gdGhlIHF1ZXVlIGZvciB0aGUgZXZlbnRcbiAgICAgICAgICAgICAgLy8gdGhhdCB3YXMganVzdCBjb21wbGV0ZWQgYnkgdGhlIHdyYXBwZXIgdGhhdCBjYWxsZWQgYG5leHQoKWBcbiAgICAgICAgICAgICAgZW50cnkucmVzb2x2ZShyZXN1bHQpXG4gICAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBxdWV1ZS5wdXNoKHsgYXJncywgcmVzb2x2ZSB9KVxuICAgICAgICAgIC8vIEZvciBuZXcgcXVldWVzICg9IG9ubHkgb25lIGVudHJ5KSBlbWl0IHRoZSBmaXJzdCBldmVudCBpbW1lZGlhdGVseSxcbiAgICAgICAgICAvLyB0byBnZXQgdGhlIHF1ZXVlIHJ1bm5pbmcuXG4gICAgICAgICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgbmV4dCgpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBDaGVja3MgaWYgdGhlIGNvbXBvbmVudCBoYXMgbGlzdGVuZXJzIGZvciBhIGdpdmVuIGV2ZW50IHR5cGU6XG4gICAgaGFzTGlzdGVuZXJzKGV2ZW50KSB7XG4gICAgICBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBldiBvZiBldmVudCkge1xuICAgICAgICAgIGlmICghdGhpcy5oYXNMaXN0ZW5lcnMoZXYpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV2ZW50Lmxlbmd0aCA+IDBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMubGlzdGVuZXJzPy5bZXZlbnRdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlbGVnYXRlKGV2ZW50LCB0YXJnZXQpIHtcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBldiBvZiBldmVudCkge1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZShldiwgdGFyZ2V0KVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9uKGV2ZW50LCAoLi4uYXJncykgPT4gdGFyZ2V0LmVtaXQoZXZlbnQsIC4uLmFyZ3MpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNDcmVkaXRDYXJkIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGNyZWRpdGNhcmQgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0NyZWRpdENhcmQodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgaW52YWxpZCdcbn1cbiIsImV4cG9ydCBjb25zdCBkZWNpbWFscyA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgZGVjaW1hbHMpID0+IHtcbiAgICBjb25zdCBtYXRjaCA9IGRlY2ltYWxzID09PSAnKicgPyAnKycgOiBgezEsJHtkZWNpbWFsc319YFxuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeWy0rXT9cXFxcZCooXFxcXC5cXFxcZCR7bWF0Y2h9KT8kYCkudGVzdCh2YWx1ZSlcbiAgfSxcblxuICBtZXNzYWdlOiAodmFsdWUsIGRlY2ltYWxzKSA9PlxuICAgIGBtdXN0IGJlIG51bWVyaWMgYW5kIG1heSBjb250YWluICR7XG4gICAgICAhZGVjaW1hbHMgfHwgZGVjaW1hbHMgPT09ICcqJyA/ICcnIDogZGVjaW1hbHNcbiAgICB9IGRlY2ltYWwgcG9pbnRzYFxufVxuIiwiaW1wb3J0IHsgaXNFbWFpbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBlbWFpbCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzRW1haWwodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSBhIHZhbGlkIGVtYWlsJ1xufVxuIiwiaW1wb3J0IHsgaXNIb3N0bmFtZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBob3N0bmFtZSA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzSG9zdG5hbWUodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgaG9zdCBuYW1lJ1xufVxuIiwiaW1wb3J0IHsgaXNEb21haW4gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZG9tYWluID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNEb21haW4odmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgZG9tYWluJ1xufVxuIiwiaW1wb3J0IHsgaXNJbnRlZ2VyIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGludGVnZXIgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0ludGVnZXIodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSB3aG9sZSBudW1iZXInXG59XG4iLCJleHBvcnQgY29uc3QgbWF4ID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtYXgpID0+IHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgbWF4KSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWF4fSBvciBsZXNzYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgbWluID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtaW4pID0+IHZhbHVlID49IG1pbixcbiAgbWVzc2FnZSh2YWx1ZSwgbWluKSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWlufSBvciBtb3JlYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcGFzc3dvcmQgPSB7XG4gIC8vIEFsbG93IGFueSB2YWx1ZS4gRm9yIG5vdyB0aGlzIGlzIG9ubHkgdXNlZCBhcyBhIG1hcmtlciwgdG8gYWxsb3cgdGhlXG4gIC8vIHJlcXVpcmVkIHZhbGlkYXRpb24gdG8gaGFuZGxlIHVuY2hhbmdlZCBwYXNzd29yZHMgc2VwYXJhdGVseS5cbiAgdmFsaWRhdGU6ICgpID0+IHRydWVcbn1cbiIsImV4cG9ydCBjb25zdCByYW5nZSA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgW21pbiwgbWF4XSkgPT4gdmFsdWUgPj0gbWluICYmIHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgW21pbiwgbWF4XSkge1xuICAgIHJldHVybiBgbXVzdCBiZSBiZXR3ZWVuICR7bWlufSBhbmQgJHttYXh9YFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcmVxdWlyZWQgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIHNldHRpbmdzLCB7IHBhc3N3b3JkIH0pID0+IChcbiAgICAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHx8XG4gICAgLy8gUGFzc3dvcmQgZmllbGRzIHVzZSBgdW5kZWZpbmVkYCBhcyBvcHBvc2VkIHRvIGBudWxsYCB3aGVuIHRoZXkncmUgc2V0XG4gICAgLy8gYnV0IHVuY2hhbmdlZCwgYWxsb3cgdGhpcyB0byBwYXNzIHRocm91Z2g6XG4gICAgKHBhc3N3b3JkICYmIHZhbHVlID09PSB1bmRlZmluZWQpXG4gICksXG4gIG1lc3NhZ2U6ICdpcyByZXF1aXJlZCcsXG4gIG51bGxpc2g6IHRydWVcbn1cbiIsImltcG9ydCB7IGlzVXJsIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IHVybCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzVXJsKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIHZhbGlkIFVSTCdcbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgdmFsaWRhdGlvbnMgZnJvbSAnLi4vdmFsaWRhdGlvbnMvaW5kZXguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ2Vycm9ycyddLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVG91Y2hlZDogZmFsc2UsXG4gICAgICBpc0RpcnR5OiBmYWxzZSxcbiAgICAgIGlzVmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgZXJyb3JzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLmlzVG91Y2hlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHZhbGlkYXRlKG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd2YWxpZGF0ZScsIHRoaXMuZGF0YVBhdGgsIHZhbHVlLCB0aGlzLnZhbGlkYXRpb25zKVxuICAgICAgZm9yIChjb25zdCBbcnVsZSwgc2V0dGluZ10gb2YgT2JqZWN0LmVudHJpZXModGhpcy52YWxpZGF0aW9ucykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uYW1lc3BhY2VcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gdmFsaWRhdGlvbnNbcnVsZV1cbiAgICAgICAgaWYgKHZhbGlkYXRvciAmJiAodmFsaWRhdG9yLm51bGxpc2ggfHwgdmFsdWUgIT0gbnVsbCkpIHtcbiAgICAgICAgICBjb25zdCB7IHZhbGlkYXRlLCBtZXNzYWdlIH0gPSB2YWxpZGF0b3JcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlKHZhbHVlLCBzZXR0aW5nLCB0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNGdW5jdGlvbihtZXNzYWdlKVxuICAgICAgICAgICAgICAgID8gbWVzc2FnZSh2YWx1ZSwgc2V0dGluZywgdGhpcylcbiAgICAgICAgICAgICAgICA6IG1lc3NhZ2VcbiAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvciwgdHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IHRydWVcbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gaXNWYWxpZFxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoZmFsc2UpXG4gICAgfSxcblxuICAgIG1hcmtUb3VjaGVkKCkge1xuICAgICAgdGhpcy5pc1RvdWNoZWQgPSB0cnVlXG4gICAgfSxcblxuICAgIG1hcmtEaXJ0eSgpIHtcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWVcbiAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2VcbiAgICAgIC8vIENsZWFyIGN1cnJlbnRseSBkaXNwbGF5ZWQgZXJyb3JzIG9uIG5ldyBpbnB1dC5cbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBhZGRFcnJvcihlcnJvciwgYWRkTGFiZWwgPSBmYWxzZSkge1xuICAgICAgdGhpcy5lcnJvcnMgfHw9IFtdXG4gICAgICBpZiAoYWRkTGFiZWwpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmxhYmVsIHx8IHRoaXMucGxhY2Vob2xkZXIgfHwgdGhpcy5uYW1lXG4gICAgICAgIGVycm9yID0gYFRoZSAke2xhYmVsfSBmaWVsZCAke2Vycm9yfS5gXG4gICAgICB9XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgdGhpcy4kZW1pdCgnZXJyb3JzJywgdGhpcy5lcnJvcnMpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIC8vIENvbnZlcnQgZnJvbSBBSlYgZXJyb3JzIG9iamVjdHMgdG8gYW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHRoaXMuZXJyb3JzID0gW11cbiAgICAgIGZvciAoY29uc3QgeyBtZXNzYWdlIH0gb2YgZXJyb3JzKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IobWVzc2FnZSwgdHJ1ZSlcbiAgICAgIH1cbiAgICAgIGlmIChmb2N1cykge1xuICAgICAgICB0aGlzLmZvY3VzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcblxuICAgIGdldEVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLmVycm9ycyA/IFsuLi50aGlzLmVycm9yc10gOiBudWxsXG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgdGhpcy5lcnJvcnMgPSBudWxsXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzRnVuY3Rpb24sXG4gIGlzU3RyaW5nLFxuICBwYXJzZURhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hQWNjZXNzb3IoXG4gIGtleU9yRGF0YVBhdGgsXG4gIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBnZXQsIHNldCwgY2FsbGJhY2sgPSB0cnVlIH0gPSB7fVxuKSB7XG4gIC8vIGBrZXlPckRhdGFQYXRoYCBjYW4gYmUgYSBzaW1wbGUgcHJvcGVydHkga2V5LFxuICAvLyBvciBhIGRhdGEtcGF0aCBpbnRvIHN1Yi1wcm9wZXJ0aWVzLCBib3RoIGluIGFycmF5IG9yIHN0cmluZyBmb3JtYXQuXG4gIGlmIChpc1N0cmluZyhrZXlPckRhdGFQYXRoKSAmJiBrZXlPckRhdGFQYXRoLmluY2x1ZGVzKCcuJykpIHtcbiAgICBrZXlPckRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChrZXlPckRhdGFQYXRoKVxuICB9XG4gIC8vIFVzZSB0aGUgbm9ybWFsaXplZCBkYXRhIHBhdGggZm9yIHRoZSBoYW5kbGluZyBvdmVycmlkZXNcbiAgY29uc3QgbmFtZSA9IG5vcm1hbGl6ZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgLy8gT25seSBkZXRlcm1pbmUgc2NoZW1hIHZhbHVlIGlmIHdlIGhhdmUgbm8gZ2V0dGVyLCBvciB0aGUgZ2V0dGVyXG4gICAgICAvLyB3YW50cyB0byByZWNlaXZlIHRoZSB2YWx1ZSBhbmQgcHJvY2VzcyBpdCBmdXJ0aGVyOlxuICAgICAgY29uc3QgdmFsdWUgPVxuICAgICAgICAhZ2V0IHx8IGdldC5sZW5ndGggPiAwXG4gICAgICAgICAgPyAvLyBOT1RFOiBCZWNhdXNlIGBzY2hlbWFgIG9iamVjdHMgYXJlIHJldHJpZXZlZCBmcm9tIGBtZXRhYCwgdGhleVxuICAgICAgICAgICAgLy8gZG9uJ3Qgc2VlbSB0byBiZSByZWFjdGl2ZS4gVG8gYWxsb3cgY2hhbmdlZCBpbiBgc2NoZW1hYCB2YWx1ZXMsXG4gICAgICAgICAgICAvLyBgc2V0KClgIHN0b3JlcyBjaGFuZ2VkIHZhbHVlcyBpbiB0aGUgc2VwYXJhdGUgYG92ZXJyaWRlc2Agb2JqZWN0LlxuICAgICAgICAgICAgdGhpcy5vdmVycmlkZXMgJiYgbmFtZSBpbiB0aGlzLm92ZXJyaWRlc1xuICAgICAgICAgICAgPyB0aGlzLm92ZXJyaWRlc1tuYW1lXVxuICAgICAgICAgICAgOiB0aGlzLmdldFNjaGVtYVZhbHVlKGtleU9yRGF0YVBhdGgsIHtcbiAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGRlZixcbiAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICByZXR1cm4gZ2V0ID8gZ2V0LmNhbGwodGhpcywgdmFsdWUpIDogdmFsdWVcbiAgICB9LFxuXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICBpZiAoc2V0KSB7XG4gICAgICAgIHNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vdmVycmlkZXMgfHw9IHt9XG4gICAgICAgIHRoaXMub3ZlcnJpZGVzW25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0b3JlQWNjZXNzb3IobmFtZSwgeyBkZWZhdWx0OiBkZWYsIGdldCwgc2V0IH0gPSB7fSkge1xuICByZXR1cm4ge1xuICAgIGdldCgpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zOlxuICAgICAgICB2YWx1ZSA9IGlzRnVuY3Rpb24oZGVmKSA/IGRlZi5jYWxsKHRoaXMpIDogZGVmXG4gICAgICAgIC8vIFRyaWdnZXIgc2V0dGVyIGJ5IHNldHRpbmcgdmFsdWUgYW5kIGFjY2Vzc29yIHRvIGRlZmF1bHQ6XG4gICAgICAgIHRoaXNbbmFtZV0gPSB2YWx1ZVxuICAgICAgICAvLyBOb3cgYWNjZXNzIHN0b3JlIGFnYWluLCBmb3IgcmVhY3Rpdml0eSB0cmFja2luZ1xuICAgICAgICB0aGlzLmdldFN0b3JlKG5hbWUpXG4gICAgICB9XG4gICAgICAvLyBBbGxvdyB0aGUgcHJvdmlkZWQgZ2V0dGVyIHRvIGZ1cnRoZXIgY2hhbmdlIG9yIHByb2Nlc3MgdGhlIHZhbHVlXG4gICAgICAvLyByZXRyaWV2ZWQgZnJvbSB0aGUgc3RvcmU6XG4gICAgICByZXR1cm4gZ2V0ID8gZ2V0LmNhbGwodGhpcywgdmFsdWUpIDogdmFsdWVcbiAgICB9LFxuXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICAvLyBBbGxvdyB0aGUgcHJvdmlkZWQgc2V0dGVyIHRvIHJldHVybiBhIG5ldyB2YWx1ZSB0byBzZXQsIG9yIGRvIHRoZVxuICAgICAgLy8gc2V0dGluZyBpdHNlbGYsIGFuZCB0aGVuIHJldHVybiBgdW5kZWZpbmVkYDpcbiAgICAgIGlmICghc2V0IHx8ICh2YWx1ZSA9IHNldC5jYWxsKHRoaXMsIHZhbHVlKSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnNldFN0b3JlKG5hbWUsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFZhbGlkYXRpb25NaXhpbiBmcm9tICcuL1ZhbGlkYXRpb25NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBjb21wdXRlVmFsdWUgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRJdGVtLCBnZXRQYXJlbnRJdGVtIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGFzQXJyYXksIGNhbWVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbVmFsaWRhdGlvbk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gTk9URTogV2hpbGUgYGRhdGFQYXRoYCBwb2ludHMgdG8gdGhlIGFjdHVhbCBgdmFsdWVgLCBgZGF0YWAgcmVwcmVzZW50c1xuICAgIC8vIHRoZSBgaXRlbWAgaW4gd2hpY2ggdGhlIGB2YWx1ZWAgaXMgY29udGFpbmVkLCB1bmRlciB0aGUga2V5IGBuYW1lYC5cbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHdpZHRoOiB7IHR5cGU6IFtOdW1iZXIsIFN0cmluZ10sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJzZWRWYWx1ZTogdW5kZWZpbmVkLFxuICAgICAgY2hhbmdlZFZhbHVlOiB1bmRlZmluZWQsXG4gICAgICBmb2N1c2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubmFtZVxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLnR5cGVcbiAgICB9LFxuXG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IHRoaXMubmVzdGVkIH0pXG4gICAgfSxcblxuICAgIHZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZVZhbHVlKFxuICAgICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgICB0aGlzLm5hbWUsXG4gICAgICAgICAgdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICB7IGNvbXBvbmVudDogdGhpcyB9XG4gICAgICAgIClcbiAgICAgICAgY29uc3QgeyBmb3JtYXQgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIC8vIGBzY2hlbWEuZm9ybWF0YCBpcyBvbmx5IGV2ZXIgY2FsbGVkIGluIHRoZSBsaWZlLWN5Y2xlXG4gICAgICAgIC8vIG9mIHRoZSBjb21wb25lbnQgYW5kIHRodXMgaXQncyBvayB0byBiaW5kIGl0IHRvIGB0aGlzYFxuICAgICAgICByZXR1cm4gZm9ybWF0XG4gICAgICAgICAgPyBmb3JtYXQuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyBwYXJzZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgLy8gYHNjaGVtYS5wYXJzZWAgaXMgb25seSBldmVyIGNhbGxlZCBpbiB0aGUgbGlmZS1jeWNsZVxuICAgICAgICAvLyBvZiB0aGUgY29tcG9uZW50IGFuZCB0aHVzIGl0J3Mgb2sgdG8gYmluZCBpdCB0byBgdGhpc2BcbiAgICAgICAgdGhpcy5wYXJzZWRWYWx1ZSA9IHBhcnNlXG4gICAgICAgICAgPyBwYXJzZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHZhbHVlIH0pKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1tdXRhdGluZy1wcm9wc1xuICAgICAgICB0aGlzLmRhdGFbdGhpcy5uYW1lXSA9IHRoaXMucGFyc2VkVmFsdWVcbiAgICAgICAgdGhpcy5jaGFuZ2VkVmFsdWUgPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFyZW50RGF0YSgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBnZXRQYXJlbnRJdGVtKHRoaXMucm9vdERhdGEsIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgICAgcmV0dXJuIGRhdGEgIT09IHRoaXMuZGF0YSA/IGRhdGEgOiBudWxsXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZERhdGEoKSB7XG4gICAgICAvLyBXZSBjYW4gb25seSBnZXQgdGhlIHByb2Nlc3NlZCBkYXRhIHRocm91Z2ggdGhlIHNjaGVtYUNvbXBvbmVudCwgYnV0XG4gICAgICAvLyB0aGF0J3Mgbm90IG5lY2Vzc2FyaWx5IHRoZSBpdGVtIHJlcHJlc2VudGVkIGJ5IHRoaXMgY29tcG9uZW50LlxuICAgICAgLy8gU29sdXRpb246IEZpbmQgdGhlIHJlbGF0aXZlIHBhdGggYW5kIHRoZSBwcm9jZXNzZWQgc3ViLWl0ZW0gZnJvbSB0aGVyZTpcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50IH0gPSB0aGlzXG4gICAgICByZXR1cm4gZ2V0SXRlbShcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50LnByb2Nlc3NlZERhdGEsXG4gICAgICAgIC8vIEdldCB0aGUgZGF0YVBhdGggcmVsYXRpdmUgdG8gdGhlIHNjaGVtYUNvbXBvbmVudCdzIGRhdGE6XG4gICAgICAgIHRoaXMuZGF0YVBhdGguc2xpY2Uoc2NoZW1hQ29tcG9uZW50LmRhdGFQYXRoLmxlbmd0aCksXG4gICAgICAgIHRoaXMubmVzdGVkXG4gICAgICApXG4gICAgfSxcblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUgc2ltaWxhciB0byBgRGl0b0NvbnRleHRgXG4gICAgLy8gcHJvcGVydGllcywgc28gdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZXNlIG9uIGB0aGlzYCBhcyB3ZWxsOlxuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIHBhcmVudEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJlbnREYXRhXG4gICAgfSxcblxuICAgIHJvb3RJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdERhdGFcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NlZERhdGFcbiAgICB9LFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJG9wdGlvbnMuZGVmYXVsdFZpc2libGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgZXhjbHVkZWRgIGZvciBjb25zaXN0ZW50IG5hbWluZz9cbiAgICBleGNsdWRlOiBnZXRTY2hlbWFBY2Nlc3NvcignZXhjbHVkZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcmVxdWlyZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXF1aXJlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogTW92ZSB0aGVzZSB0byBhIHN1Yi1jbGFzcyBjb21wb25lbnQgdXNlZCBmb3IgYWxsIGlucHV0IGNvbXBvbmVudHM/XG4gICAgcmVhZG9ubHk6IGdldFNjaGVtYUFjY2Vzc29yKCdyZWFkb25seScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgYXV0b2ZvY3VzOiBnZXRTY2hlbWFBY2Nlc3NvcignYXV0b2ZvY3VzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICAvLyBUbyBiZSB1c2VkIGZvciBzZWxlY3RzIGFuZCBpbnB1dHMgb25seT9cbiAgICBjbGVhcmFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjbGVhcmFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHBsYWNlaG9sZGVyOiBnZXRTY2hlbWFBY2Nlc3NvcigncGxhY2Vob2xkZXInLCB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9KSxcblxuICAgIGF1dG9jb21wbGV0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2F1dG9jb21wbGV0ZScsIHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0pLFxuXG4gICAgZXZlbnRzKCkge1xuICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy5nZXRFdmVudHMoKVxuICAgICAgLy8gUmVnaXN0ZXIgY2FsbGJhY2tzIGZvciBhbGwgcHJvdmlkZXMgbm9uLXJlY29nbml6ZWQgZXZlbnRzLFxuICAgICAgLy8gYXNzdW1pbmcgdGhleSBhcmUgbmF0aXZlIGV2ZW50cy5cbiAgICAgIC8vIFRPRE86IE1vdmUgdG8gdnVlMy1zdHlsZSBgb25bQS1aXWAgZXZlbnQgaGFuZGxlcnMgbmFtaW5nIHRoYXQgYXJlbid0XG4gICAgICAvLyBuYW1lc3BhY2VkIGluIGBzY2hlbWEuZXZlbnRzYCBvbmNlIHRoZSB0cmFuc2l0aW9uIGlzIGNvbXBsZXRlLlxuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBPYmplY3Qua2V5cyh0aGlzLnNjaGVtYS5ldmVudHMgfHwge30pKSB7XG4gICAgICAgIGV2ZW50c1tgb24ke2NhbWVsaXplKGV2ZW50LCB0cnVlKX1gXSA/Pz0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZW1pdEV2ZW50KGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZXZlbnRzXG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IG5hdGl2ZUZpZWxkLCB0ZXh0RmllbGQgfSA9IHRoaXMuJG9wdGlvbnNcblxuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgLi4udGhpcy5ldmVudHMsXG4gICAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG5cbiAgICAgIGlmIChuYXRpdmVGaWVsZCkge1xuICAgICAgICBhdHRyaWJ1dGVzLm5hbWUgPSB0aGlzLm5hbWVcbiAgICAgICAgaWYgKHRoaXMubGFiZWwpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLnRpdGxlID0gdGhpcy5sYWJlbFxuICAgICAgICB9XG4gICAgICAgIGF0dHJpYnV0ZXMucmVhZG9ubHkgPSB0aGlzLnJlYWRvbmx5XG4gICAgICAgIGF0dHJpYnV0ZXMuYXV0b2ZvY3VzID0gdGhpcy5hdXRvZm9jdXNcbiAgICAgICAgaWYgKHRleHRGaWVsZCkge1xuICAgICAgICAgIGF0dHJpYnV0ZXMucGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyXG4gICAgICAgICAgYXR0cmlidXRlcy5hdXRvY29tcGxldGUgPSB0aGlzLmF1dG9jb21wbGV0ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzXG4gICAgfSxcblxuICAgIHZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSB7IC4uLnRoaXMuZ2V0VmFsaWRhdGlvbnMoKSB9XG4gICAgICBpZiAodGhpcy5yZXF1aXJlZCkge1xuICAgICAgICB2YWxpZGF0aW9ucy5yZXF1aXJlZCA9IHRydWVcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBvdmVycmlkZSBkZWZhdWx0IHJ1bGVzIGFuZCBhZGQgYW55IG5ldyBvbmVzOlxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEucnVsZXMgfHwge30pKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGVsZXRlIHZhbGlkYXRpb25zW2tleV1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9uc1trZXldID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25zXG4gICAgfSxcblxuICAgIHNob3dDbGVhckJ1dHRvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsZWFyYWJsZSAmJiB0aGlzLnZhbHVlICE9IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIHRoaXMuc2V0dXBTY2hlbWFGaWVsZHMoKVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gUHJldmVudCB1bm5lc3RlZCB0eXBlIGNvbXBvbmVudHMgZnJvbSBvdmVycmlkaW5nIHBhcmVudCBkYXRhIHBhdGhzXG4gICAgICBpZiAodGhpcy5uZXN0ZWQpIHtcbiAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0RXZlbnRzKCkge1xuICAgICAgY29uc3QgeyBvbkZvY3VzLCBvbkJsdXIsIG9uSW5wdXQsIG9uQ2hhbmdlIH0gPSB0aGlzXG4gICAgICByZXR1cm4geyBvbkZvY3VzLCBvbkJsdXIsIG9uSW5wdXQsIG9uQ2hhbmdlIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICBjb25zdCBbZWxlbWVudF0gPSBhc0FycmF5KHRoaXMuJHJlZnMuZWxlbWVudClcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICBlbGVtZW50LmZvY3VzKClcbiAgICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBkaXNhYmxlZCwgYGZvY3VzKClgIHdpbGwgbGlrZWx5IG5vdCBoYXZlIHRoZVxuICAgICAgICAgIC8vIGRlc2lyZWQgZWZmZWN0LiBVc2UgYHNjcm9sbEludG9WaWV3KClgIGlmIGF2YWlsYWJsZTpcbiAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgOyhlbGVtZW50LiRlbCB8fCBlbGVtZW50KS5zY3JvbGxJbnRvVmlldz8uKClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgLy8gQWxzbyBmb2N1cyB0aGlzIGNvbXBvbmVudCdzIHNjaGVtYSBhbmQgcGFuZWwgaW4gY2FzZSBpdCdzIGEgdGFiLlxuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuZm9jdXMoKVxuICAgICAgdGhpcy50YWJDb21wb25lbnQ/LmZvY3VzKClcbiAgICAgIHRoaXMuZm9jdXNFbGVtZW50KClcbiAgICB9LFxuXG4gICAgY2xlYXIoKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbnVsbFxuICAgICAgdGhpcy5jaGFuZ2VkVmFsdWUgPSB1bmRlZmluZWRcbiAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgIH0sXG5cbiAgICBvbkZvY3VzKCkge1xuICAgICAgdGhpcy5mb2N1c2VkID0gdHJ1ZVxuICAgICAgdGhpcy5tYXJrVG91Y2hlZCgpXG4gICAgICB0aGlzLmVtaXRFdmVudCgnZm9jdXMnKVxuICAgIH0sXG5cbiAgICBvbkJsdXIoKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZVxuICAgICAgdGhpcy52YWxpZGF0ZSgpXG4gICAgICB0aGlzLmVtaXRFdmVudCgnYmx1cicpXG4gICAgfSxcblxuICAgIG9uSW5wdXQoKSB7XG4gICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICB0aGlzLmVtaXRFdmVudCgnaW5wdXQnKVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIGNvbnN0IHZhbHVlID1cbiAgICAgICAgdGhpcy5wYXJzZWRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5wYXJzZWRWYWx1ZSA6IHRoaXMudmFsdWVcblxuICAgICAgaWYgKHRoaXMuJG9wdGlvbnMubmF0aXZlRmllbGQpIHtcbiAgICAgICAgLy8gRm9yIHNvbWUgb2RkIHJlYXNvbiwgdGhlIG5hdGl2ZSBjaGFuZ2UgZXZlbnQgbm93IHNvbWV0aW1lcyBmaXJlc1xuICAgICAgICAvLyB0d2ljZSBvbiBWdWUzLiBGaWx0ZXIgb3V0IHNlY29uZCBjYWxsLlxuICAgICAgICAvLyBUT0RPOiBJbnZlc3RpZ2F0ZSB3aHkgdGhpcyBoYXBwZW5zLCBhbmQgaWYgaXQncyBhIGJ1ZyBpbiBWdWUzLlxuICAgICAgICBpZiAodmFsdWUgPT09IHRoaXMuY2hhbmdlZFZhbHVlKSByZXR1cm5cbiAgICAgICAgdGhpcy5jaGFuZ2VkVmFsdWUgPSB2YWx1ZVxuICAgICAgfVxuXG4gICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICB0aGlzLmVtaXRFdmVudCgnY2hhbmdlJywge1xuICAgICAgICAvLyBQcmV2ZW50IGVuZGxlc3MgcGFyc2UgcmVjdXJzaW9uOlxuICAgICAgICBjb250ZXh0OiB7IHZhbHVlIH0sXG4gICAgICAgIC8vIFBhc3MgYHNjaGVtYUNvbXBvbmVudGAgYXMgcGFyZW50LCBzbyBjaGFuZ2UgZXZlbnRzIGNhbiBwcm9wYWdhdGUgdXAuXG4gICAgICAgIHBhcmVudDogdGhpcy5zY2hlbWFDb21wb25lbnRcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG4iLCJjb25zdCB1aWRNYXAgPSBuZXcgV2Vha01hcCgpXG5cbi8vIEdlbmVyYXRlZCBhbmQgcmVtZW1iZXJzIHVuaXF1ZSBpZHMgcGVyIHBhc3NlZCBvYmplY3QgdXNpbmcgYSB3ZWFrIG1hcC5cbmxldCB1aWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gZ2V0VWlkKG9iamVjdCwgaXRlbUlkKSB7XG4gIGxldCBpZCA9IHVpZE1hcC5nZXQob2JqZWN0KVxuICBpZiAoIWlkKSB7XG4gICAgaWQgPSBpdGVtSWQgfHwgYEAkeysrdWlkfWBcbiAgICB1aWRNYXAuc2V0KG9iamVjdCwgaWQpXG4gIH1cbiAgcmV0dXJuIGlkXG59XG4iLCJpbXBvcnQgeyBpc1RlbXBvcmFyeUlkIH0gZnJvbSAnLi9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNJbnRlZ2VyLFxuICBhc0FycmF5LFxuICBwYXJzZURhdGFQYXRoLFxuICBnZXRWYWx1ZUF0RGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IG5hbm9pZCB9IGZyb20gJ25hbm9pZCdcblxuLy8gU2NoZW1hR3JhcGggaXMgYSBjbGFzcyB0byBjb2xsZWN0IHNjaGVtYSBncmFwaCBtZXRhIGluZm9ybWF0aW9uIGluIG9yZGVyIHRvXG4vLyBwcm9jZXNzIHNvdXJjZXMgYW5kIHJlbGF0aW9ucyBmb3IgdGhlIGdpdmVuIHRhcmdldHMgJ3NlcnZlcicgYW5kICdjbGlwYm9hcmQnLFxuLy8gYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgdGFibGU6XG4vL1xuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcbi8vIHwgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlcnZlciAgICB8IGNsaXBib2FyZCB8XG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogZmFsc2UgICAgICAgICAgIHwga2VlcCBpZCAgIHwga2VlcCBpZCAgIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IHRydWUgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlZiwgI3JlZiB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiB0cnVlLCB0ZW1wb3JhcnkgfCByZWYsICNyZWYgfCByZWYsICNyZWYgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogZmFsc2UgICAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVtb3ZlIGlkIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IGZhbHNlLCB0ZW1wb3JhcnkgICB8IHJlZiwgI2lkICB8IHJlbW92ZSBpZCB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiB0cnVlICAgICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZWYsICNpZCAgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogdHJ1ZSwgdGVtcG9yYXJ5ICAgIHwgcmVmLCAjaWQgIHwgcmVmLCAjaWQgIHxcbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG5cbmV4cG9ydCBjbGFzcyBTY2hlbWFHcmFwaCB7XG4gIGdyYXBoID0ge31cbiAgcmVmZXJlbmNlcyA9IHt9XG5cbiAgc2V0KGRhdGFQYXRoLCBzZXR0aW5ncywgZGVmYXVsdHMpIHtcbiAgICBkYXRhUGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgbGV0IHN1YkdyYXBoID0gdGhpcy5ncmFwaFxuICAgIGZvciAoY29uc3QgcGFydCBvZiBkYXRhUGF0aCkge1xuICAgICAgY29uc3Qga2V5ID0gaXNJbnRlZ2VyKCtwYXJ0KSA/ICcqJyA6IHBhcnRcbiAgICAgIHN1YkdyYXBoID0gc3ViR3JhcGhba2V5XSA/Pz0ge31cbiAgICB9XG4gICAgc3ViR3JhcGguJHNldHRpbmdzID0ge1xuICAgICAgLi4uZGVmYXVsdHMsIC8vIFNlZSBgYWRkU291cmNlKGRhdGFQYXRoKWBcbiAgICAgIC4uLnN1YkdyYXBoLiRzZXR0aW5ncyxcbiAgICAgIC4uLnNldHRpbmdzXG4gICAgfVxuICB9XG5cbiAgYWRkU291cmNlKGRhdGFQYXRoLCBzY2hlbWEpIHtcbiAgICAvLyBPbmx5IHNldCBgcmVsYXRlZDogZmFsc2VgIHRocm91Z2ggdGhlIGRlZmF1bHRzLCBhcyBgc2V0U291cmNlUmVsYXRlZCgpYFxuICAgIC8vIG1heSBiZSBjYWxsZWQgYmVmb3JlIGBhZGRTb3VyY2UoKWAsIGRlcGVuZGluZyBvbiB0aGUgZ3JhcGggc3RydWN0dXJlLlxuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7IHR5cGU6ICdzb3VyY2UnLCBzY2hlbWEgfSwgeyByZWxhdGVkOiBmYWxzZSB9KVxuICB9XG5cbiAgc2V0U291cmNlUmVsYXRlZChkYXRhUGF0aCkge1xuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7XG4gICAgICByZWxhdGVkOiB0cnVlLFxuICAgICAgcmVmZXJlbmNlOiB0aGlzLmdldFJlZmVyZW5jZVByZWZpeChkYXRhUGF0aClcbiAgICB9KVxuICB9XG5cbiAgYWRkUmVsYXRpb24oZGF0YVBhdGgsIHJlbGF0ZWREYXRhUGF0aCwgc2NoZW1hKSB7XG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHtcbiAgICAgIHR5cGU6ICdyZWxhdGlvbicsXG4gICAgICBzY2hlbWEsXG4gICAgICBpbnRlcm5hbDogISFyZWxhdGVkRGF0YVBhdGgsXG4gICAgICByZWZlcmVuY2U6IHRoaXMuZ2V0UmVmZXJlbmNlUHJlZml4KHJlbGF0ZWREYXRhUGF0aClcbiAgICB9KVxuICB9XG5cbiAgZ2V0UmVmZXJlbmNlUHJlZml4KGRhdGFQYXRoKSB7XG4gICAgcmV0dXJuIGRhdGFQYXRoXG4gICAgICA/ICh0aGlzLnJlZmVyZW5jZXNbZGF0YVBhdGhdID8/PSBuYW5vaWQoNikpXG4gICAgICA6IG51bGxcbiAgfVxuXG4gIGZsYXR0ZW4oKSB7XG4gICAgY29uc3QgZmxhdHRlbiA9IGdyYXBoID0+IHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBbXVxuICAgICAgZm9yIChjb25zdCBba2V5LCB7ICRzZXR0aW5ncywgLi4uc3ViR3JhcGggfV0gb2YgT2JqZWN0LmVudHJpZXMoZ3JhcGgpKSB7XG4gICAgICAgIGlmICgkc2V0dGluZ3MpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2tleSwgJHNldHRpbmdzXSlcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFtzdWJLZXksIHNldHRpbmdzXSBvZiBmbGF0dGVuKHN1YkdyYXBoKSkge1xuICAgICAgICAgIGVudHJpZXMucHVzaChbYCR7a2V5fS8ke3N1YktleX1gLCBzZXR0aW5nc10pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbnRyaWVzXG4gICAgfVxuXG4gICAgcmV0dXJuIGZsYXR0ZW4odGhpcy5ncmFwaClcbiAgfVxuXG4gIHByb2Nlc3Moc291cmNlU2NoZW1hLCBkYXRhLCB7IHRhcmdldCB9KSB7XG4gICAgY29uc3QgY2xpcGJvYXJkID0gdGFyZ2V0ID09PSAnY2xpcGJvYXJkJ1xuICAgIGlmIChjbGlwYm9hcmQpIHtcbiAgICAgIGRlbGV0ZSBkYXRhW3NvdXJjZVNjaGVtYS5pZEtleSB8fCAnaWQnXVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgc2V0dGluZ3NdIG9mIHRoaXMuZmxhdHRlbigpKSB7XG4gICAgICBjb25zdCB7IHR5cGUsIHNjaGVtYSwgaW50ZXJuYWwsIHJlbGF0ZWQsIHJlZmVyZW5jZSB9ID0gc2V0dGluZ3NcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHR5cGUgPT09ICdzb3VyY2UnXG4gICAgICBjb25zdCByZWxhdGlvbiA9IHR5cGUgPT09ICdyZWxhdGlvbidcbiAgICAgIGlmIChzb3VyY2UgfHwgcmVsYXRpb24gJiYgaW50ZXJuYWwpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gZ2V0VmFsdWVBdERhdGFQYXRoKGRhdGEsIGRhdGFQYXRoLCAoKSA9PiBudWxsKVxuICAgICAgICBjb25zdCByZW1vdmVJZCA9IGNsaXBib2FyZCAmJiBzb3VyY2UgJiYgIXJlbGF0ZWRcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlSWQgPSAoXG4gICAgICAgICAgY2xpcGJvYXJkICYmIChcbiAgICAgICAgICAgIHJlbGF0aW9uICYmIGludGVybmFsIHx8XG4gICAgICAgICAgICBzb3VyY2UgJiYgcmVsYXRlZFxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGFzQXJyYXkodmFsdWVzKS5mbGF0KCkpIHtcbiAgICAgICAgICBjb25zdCBpZEtleSA9IChcbiAgICAgICAgICAgIHNvdXJjZSAmJiBzY2hlbWEuaWRLZXkgfHxcbiAgICAgICAgICAgIHJlbGF0aW9uICYmIHNjaGVtYS5yZWxhdGVCeSB8fFxuICAgICAgICAgICAgJ2lkJ1xuICAgICAgICAgIClcbiAgICAgICAgICBsZXQgaWQgPSB2YWx1ZT8uW2lkS2V5XVxuICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAocmVtb3ZlSWQpIHtcbiAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2lkS2V5XVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlZmVyZW5jZUlkIHx8IGlzVGVtcG9yYXJ5SWQoaWQpKSB7XG4gICAgICAgICAgICAgIGlmIChpc1RlbXBvcmFyeUlkKGlkKSkge1xuICAgICAgICAgICAgICAgIGlkID0gaWQuc2xpY2UoMSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCByZWZLZXkgPSBjbGlwYm9hcmRcbiAgICAgICAgICAgICAgICA/IC8vIENsaXBib2FyZCBqdXN0IG5lZWRzIHRlbXBvcmFyeSBpZHMgdW5kZXIgdGhlIGFjdHVhbCBgaWRLZXlgXG4gICAgICAgICAgICAgICAgICBpZEtleVxuICAgICAgICAgICAgICAgIDogLy8gU2VydmVyIHdhbnRzIE9iamVjdGlvbi1zdHlsZSAnI2lkJyAvICcjcmVmJyBwYWlycy5cbiAgICAgICAgICAgICAgICAgIHNvdXJjZVxuICAgICAgICAgICAgICAgICAgPyAnI2lkJ1xuICAgICAgICAgICAgICAgICAgOiAnI3JlZidcbiAgICAgICAgICAgICAgY29uc3QgcmV2VmFsdWUgPSBjbGlwYm9hcmRcbiAgICAgICAgICAgICAgICA/IGBAJHtpZH1gXG4gICAgICAgICAgICAgICAgOiAvLyBLZWVwIHRoZSBpZHMgdW5pcXVlIGluIHJlZmVyZW5jZSBncm91cHMsIHNpbmNlIHRoZXlcbiAgICAgICAgICAgICAgICAgIC8vIHJlZmVyZW5jZSBhY3Jvc3MgdGhlIGZ1bGwgZ3JhcGguXG4gICAgICAgICAgICAgICAgICByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAgID8gYCR7cmVmZXJlbmNlfS0ke2lkfWBcbiAgICAgICAgICAgICAgICAgIDogaWQgLy8gQSB0ZW1wb3JhcnkgaWQgd2l0aG91dCBhIHJlbGF0ZWQsIGp1c3QgcHJlc2VydmUgaXQuXG4gICAgICAgICAgICAgIHZhbHVlW3JlZktleV0gPSByZXZWYWx1ZVxuICAgICAgICAgICAgICBpZiAocmVmS2V5ICE9PSBpZEtleSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtpZEtleV1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBpc0FycmF5LFxuICBpc09iamVjdCxcbiAgaXNTdHJpbmcsXG4gIGlzQm9vbGVhbixcbiAgaXNOdW1iZXIsXG4gIGlzRnVuY3Rpb24sXG4gIGlzRGF0ZSxcbiAgaXNSZWdFeHAsXG4gIGFzQXJyYXlcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuY29uc3QgdHlwZUNoZWNrZXJzID0ge1xuICBCb29sZWFuOiBpc0Jvb2xlYW4sXG4gIE51bWJlcjogaXNOdW1iZXIsXG4gIFN0cmluZzogaXNTdHJpbmcsXG4gIERhdGU6IGlzRGF0ZSxcbiAgQXJyYXk6IGlzQXJyYXksXG4gIE9iamVjdDogaXNPYmplY3QsXG4gIFJlZ0V4cDogaXNSZWdFeHAsXG4gIEZ1bmN0aW9uOiBpc0Z1bmN0aW9uXG59XG5cbi8vIERlY2xhcmUgdGhlc2Ugc2VwYXJhdGVseSBmcm9tIHRoZSBgdHlwZUNvbnZlcnRlcnNgIG9iamVjdCwgdG8gcHJldmVudFxuLy8gQmFiZWwgaXNzdWVzIHdpdGggYE9iamVjdGAgb3ZlcnJpZGluZyB0aGUgZ2xvYmFsIGBPYmplY3RgOlxuY29uc3QgdG9Cb29sZWFuID0gdmFsdWUgPT4gISF2YWx1ZVxuY29uc3QgdG9OdW1iZXIgPSB2YWx1ZSA9PiArdmFsdWVcbmNvbnN0IHRvU3RyaW5nID0gdmFsdWUgPT4gU3RyaW5nKHZhbHVlKVxuXG5jb25zdCB0b0RhdGUgPSB2YWx1ZSA9PlxuICBpc0RhdGUodmFsdWUpXG4gICAgPyB2YWx1ZVxuICAgIDogbmV3IERhdGUodmFsdWUpXG5cbmNvbnN0IHRvQXJyYXkgPSB2YWx1ZSA9PlxuICBpc0FycmF5KHZhbHVlKVxuICAgID8gdmFsdWVcbiAgICA6IGlzU3RyaW5nKHZhbHVlKVxuICAgICAgPyB2YWx1ZS5zcGxpdCgnLCcpXG4gICAgICA6IGFzQXJyYXkodmFsdWUpXG5cbmNvbnN0IHRvT2JqZWN0ID0gdmFsdWUgPT5cbiAgaXNPYmplY3QodmFsdWUpXG4gICAgPyB2YWx1ZVxuICAgIDogLy8gSWYgYSBPYmplY3QgaXMgZXhwZWN0ZWQgYnV0IGEgQm9vbGVhbiBwcm92aWRlLCBjb252ZXJ0IHRvIGFuIGVtcHR5XG4gICAgICAvLyBvYmplY3QuIFVzZWQgYnkgYGNyZWF0YWJsZWAgJiBjbywgdGhhdCBjYW4gYmUgYm90aC5cbiAgICAgIHZhbHVlID09PSB0cnVlXG4gICAgICA/IHt9XG4gICAgICA6IG51bGxcblxuY29uc3QgdG9SZWdFeHAgPSB2YWx1ZSA9PlxuICBpc1JlZ0V4cCh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiBuZXcgUmVnRXhwKHZhbHVlKVxuXG5jb25zdCB0eXBlQ29udmVydGVycyA9IHtcbiAgQm9vbGVhbjogdG9Cb29sZWFuLFxuICBOdW1iZXI6IHRvTnVtYmVyLFxuICBTdHJpbmc6IHRvU3RyaW5nLFxuICBEYXRlOiB0b0RhdGUsXG4gIEFycmF5OiB0b0FycmF5LFxuICBPYmplY3Q6IHRvT2JqZWN0LFxuICBSZWdFeHA6IHRvUmVnRXhwXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpIHtcbiAgLy8gU2VlIGlmIGFueSBvZiB0aGUgZXhwZWN0IHR5cGVzIG1hdGNoLCByZXR1cm4gaW1tZWRpYXRlbHkgaWYgdGhleSBkbzpcbiAgaWYgKHR5cGVzICYmIHZhbHVlICE9IG51bGwpIHtcbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgIGlmICh0eXBlQ2hlY2tlcnNbdHlwZS5uYW1lXT8uKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUeXBlKHR5cGUsIHZhbHVlKSB7XG4gIGNvbnN0IGNvbnZlcnRlciA9IHR5cGUgJiYgdHlwZUNvbnZlcnRlcnNbdHlwZS5uYW1lIHx8IHR5cGVdXG4gIHJldHVybiBjb252ZXJ0ZXIgPyBjb252ZXJ0ZXIodmFsdWUpIDogdmFsdWVcbn1cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBEaXRvTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RpdG9NaXhpbi5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCB7IGdldFVpZCB9IGZyb20gJy4vdWlkLmpzJ1xuaW1wb3J0IHsgU2NoZW1hR3JhcGggfSBmcm9tICcuL1NjaGVtYUdyYXBoLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGgsIGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQgeyBpc01hdGNoaW5nVHlwZSwgY29udmVydFR5cGUgfSBmcm9tICcuL3R5cGUuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNTdHJpbmcsXG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb24sXG4gIGlzUHJvbWlzZSxcbiAgaXNNb2R1bGUsXG4gIGFzQXJyYXksXG4gIGNsb25lLFxuICBtZXJnZSxcbiAgY2FtZWxpemUsXG4gIG1hcENvbmN1cnJlbnRseSxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBtYXJrUmF3IH0gZnJvbSAndnVlJ1xuXG5jb25zdCB0eXBlQ29tcG9uZW50cyA9IHt9XG5jb25zdCB1bmtub3duVHlwZVJlcG9ydGVkID0ge31cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpIHtcbiAgdHlwZUNvbXBvbmVudHNbdHlwZV0gPSBjb21wb25lbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb21wb25lbnQodHlwZSwgYWxsb3dOdWxsID0gZmFsc2UpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gdHlwZUNvbXBvbmVudHNbdHlwZV0gfHwgbnVsbFxuICBpZiAoIWNvbXBvbmVudCAmJiAhYWxsb3dOdWxsICYmICF1bmtub3duVHlwZVJlcG9ydGVkW3R5cGVdKSB7XG4gICAgLy8gUmVwb3J0IGVhY2ggbWlzc2luZyB0eXBlIG9ubHkgb25jZSwgdG8gYXZvaWQgZmxvb2RpbmcgdGhlIGNvbnNvbGU6XG4gICAgdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSA9IHRydWVcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gRGl0byBjb21wb25lbnQgdHlwZTogJyR7dHlwZX0nYClcbiAgfVxuICByZXR1cm4gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyhzY2hlbWFzLCBjYWxsYmFjaykge1xuICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBzY2hlbWFzKSB7XG4gICAgaWYgKGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpKSB7XG4gICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhzY2hlbWEuY29tcG9uZW50LCBzY2hlbWEubmFtZSwgMClcbiAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1NjaGVtYShzY2hlbWEpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYS5jb21wb25lbnRzIHx8IHt9KSkge1xuICAgICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhjb21wb25lbnQsIG5hbWUsIDEpXG4gICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gc2NoZW1hXG4gICAgPyBpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyhbc2NoZW1hLCAuLi5nZXRUYWJTY2hlbWFzKHNjaGVtYSldLCBjYWxsYmFjaylcbiAgICA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZE5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiAoXG4gICAgaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoXG4gICAgICBzY2hlbWEsXG4gICAgICBjb21wb25lbnQgPT4gKGNhbGxiYWNrKGNvbXBvbmVudCkgPyBjb21wb25lbnQgOiB1bmRlZmluZWQpXG4gICAgKSA/PyBudWxsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVOZXN0ZWRTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gKFxuICAgIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKFxuICAgICAgc2NoZW1hLFxuICAgICAgY29tcG9uZW50ID0+IChjYWxsYmFjayhjb21wb25lbnQpID8gdHJ1ZSA6IHVuZGVmaW5lZClcbiAgICApID8/IGZhbHNlXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5TmVzdGVkU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIChcbiAgICBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhcbiAgICAgIHNjaGVtYSxcbiAgICAgIGNvbXBvbmVudCA9PiAoY2FsbGJhY2soY29tcG9uZW50KSA/IHVuZGVmaW5lZCA6IGZhbHNlKVxuICAgICkgPz8gdHJ1ZVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNOZXN0ZWRTY2hlbWFDb21wb25lbnRzKHNjaGVtYSkge1xuICByZXR1cm4gc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsICgpID0+IHRydWUpID8/IGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NjaGVtYShzY2hlbWEpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYSkgJiYgaXNTdHJpbmcoc2NoZW1hLnR5cGUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Zvcm0oc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAnZm9ybSdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmlldyhzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICd2aWV3J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUYWIoc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAndGFiJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYW5lbChzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICdwYW5lbCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShzY2hlbWEpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdW53cmFwTW9kdWxlID0gZmFsc2UpIHtcbiAgaWYgKGlzRnVuY3Rpb24oc2NoZW1hKSkge1xuICAgIHNjaGVtYSA9IHNjaGVtYSgpXG4gIH1cbiAgaWYgKGlzUHJvbWlzZShzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0gYXdhaXQgc2NoZW1hXG4gIH1cbiAgaWYgKGlzTW9kdWxlKHNjaGVtYSkpIHtcbiAgICAvLyBDb3B5IHRvIGNvbnZlcnQgZnJvbSBtb2R1bGUgdG8gb2JqZWN0OlxuICAgIHNjaGVtYSA9IHsgLi4uc2NoZW1hIH1cbiAgICAvLyBVbndyYXAgZGVmYXVsdCBvciBuYW1lZCBzY2hlbWFcbiAgICBpZiAoIXNjaGVtYS5uYW1lICYmICh1bndyYXBNb2R1bGUgfHwgc2NoZW1hLmRlZmF1bHQpKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hKVxuICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBrZXlzWzBdXG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVtuYW1lXVxuICAgICAgICBpZiAobmFtZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYXMoXG4gIHVucmVzb2x2ZWRTY2hlbWFzLFxuICByZXNvbHZlSXRlbSA9IHJlc29sdmVTY2hlbWFcbikge1xuICBsZXQgc2NoZW1hcyA9IGlzRnVuY3Rpb24odW5yZXNvbHZlZFNjaGVtYXMpXG4gICAgPyB1bnJlc29sdmVkU2NoZW1hcygpXG4gICAgOiB1bnJlc29sdmVkU2NoZW1hc1xuICBzY2hlbWFzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWFzLCBmYWxzZSlcbiAgaWYgKGlzQXJyYXkoc2NoZW1hcykpIHtcbiAgICAvLyBUcmFuc2xhdGUgYW4gYXJyYXkgb2YgZHluYW1pYyBpbXBvcnQsIGVhY2ggaW1wb3J0aW5nIG9uZSBuYW1lZCBzY2hlbWFcbiAgICAvLyBtb2R1bGUgdG8gYW4gb2JqZWN0IHdpdGggbmFtZWQgZW50cmllcy5cbiAgICBzY2hlbWFzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgYXdhaXQgbWFwQ29uY3VycmVudGx5KFxuICAgICAgICBzY2hlbWFzLFxuICAgICAgICBhc3luYyBpdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBbc2NoZW1hLm5hbWUsIHNjaGVtYV1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIClcbiAgfSBlbHNlIGlmIChpc09iamVjdChzY2hlbWFzKSkge1xuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBhd2FpdCBtYXBDb25jdXJyZW50bHkoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLFxuICAgICAgICBhc3luYyAoW2tleSwgaXRlbV0pID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBba2V5LCBzY2hlbWFdXG4gICAgICAgIH1cbiAgICAgIClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHNjaGVtYXNcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKSB7XG4gIC8vIFJlc29sdmVzIGFzeW5jIHNjaGVtYSBjb21wb25lbnRzIGFuZCBhZGRzIERpdG9NaXhpbiBhbmQgVHlwZU1peGluIHRvIHRoZW0uXG4gIGxldCB7IGNvbXBvbmVudCB9ID0gc2NoZW1hXG4gIGlmIChjb21wb25lbnQpIHtcbiAgICBjb21wb25lbnQgPSBhd2FpdCByZXNvbHZlU2NoZW1hKGNvbXBvbmVudCwgdHJ1ZSlcbiAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAvLyBQcmV2ZW50IHdhcm5pbmc6IFwiVnVlIHJlY2VpdmVkIGEgQ29tcG9uZW50IHdoaWNoIHdhcyBtYWRlIGEgcmVhY3RpdmVcbiAgICAgIC8vIG9iamVjdC4gVGhpcyBjYW4gbGVhZCB0byB1bm5lY2Vzc2FyeSBwZXJmb3JtYW5jZSBvdmVyaGVhZCwgYW5kIHNob3VsZFxuICAgICAgLy8gYmUgYXZvaWRlZCBieSBtYXJraW5nIHRoZSBjb21wb25lbnQgd2l0aCBgbWFya1Jhd2BcIjpcbiAgICAgIHNjaGVtYS5jb21wb25lbnQgPSBtYXJrUmF3KHtcbiAgICAgICAgLi4uY29tcG9uZW50LFxuICAgICAgICBtaXhpbnM6IFtEaXRvTWl4aW4sIFR5cGVNaXhpbiwgLi4uKGNvbXBvbmVudC5taXhpbnMgfHwgW10pXVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFDb21wb25lbnRzKHNjaGVtYXMpIHtcbiAgLy8gYHNjaGVtYXNgIGFyZSBvZiB0aGUgc2FtZSBwb3NzaWJsZSBmb3JtcyBhcyBwYXNzZWQgdG8gYGdldE5hbWVkU2NoZW1hcygpYFxuICBhd2FpdCBtYXBDb25jdXJyZW50bHkoT2JqZWN0LnZhbHVlcyhzY2hlbWFzIHx8IHt9KSwgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudClcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKFxuICBhcGksXG4gIHNjaGVtYSxcbiAgcm91dGVzID0gbnVsbCxcbiAgbGV2ZWwgPSAwXG4pIHtcbiAgY29uc3QgcHJvbWlzZXMgPSBbXVxuICBjb25zdCBwcm9jZXNzID0gKGNvbXBvbmVudCwgbmFtZSwgcmVsYXRpdmVMZXZlbCkgPT4ge1xuICAgIHByb21pc2VzLnB1c2goXG4gICAgICBwcm9jZXNzU2NoZW1hQ29tcG9uZW50KFxuICAgICAgICBhcGksXG4gICAgICAgIGNvbXBvbmVudCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcm91dGVzLFxuICAgICAgICBsZXZlbCArIHJlbGF0aXZlTGV2ZWxcbiAgICAgIClcbiAgICApXG4gIH1cblxuICBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEsIHByb2Nlc3MpXG4gIGl0ZXJhdGVTY2hlbWFDb21wb25lbnRzKGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpLCBwcm9jZXNzKVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudChcbiAgYXBpLFxuICBzY2hlbWEsXG4gIG5hbWUsXG4gIHJvdXRlcyA9IG51bGwsXG4gIGxldmVsID0gMFxuKSB7XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcblxuICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgLy8gQWxzbyBwcm9jZXNzIG5lc3RlZCBwYW5lbCBzY2hlbWFzLlxuICAgIG1hcENvbmN1cnJlbnRseShcbiAgICAgIGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpLFxuICAgICAgcGFuZWwgPT4gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBwYW5lbCwgcm91dGVzLCBsZXZlbClcbiAgICApLFxuICAgIC8vIERlbGVnYXRlIHNjaGVtYSBwcm9jZXNzaW5nIHRvIHRoZSBhY3R1YWwgdHlwZSBjb21wb25lbnRzLlxuICAgIGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LnByb2Nlc3NTY2hlbWE/LihcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYSxcbiAgICAgIG5hbWUsXG4gICAgICByb3V0ZXMsXG4gICAgICBsZXZlbFxuICAgIClcbiAgXSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NWaWV3KGNvbXBvbmVudCwgYXBpLCBzY2hlbWEsIG5hbWUpIHtcbiAgaWYgKCFpc1ZpZXcoc2NoZW1hKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2aWV3IHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSlcbiAgcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKVxuICBhd2FpdCBwcm9jZXNzTmVzdGVkU2NoZW1hcyhhcGksIHNjaGVtYSlcbiAgY29uc3QgY2hpbGRyZW4gPSBbXVxuICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgY2hpbGRyZW4sIDApXG4gIHJldHVybiB7XG4gICAgcGF0aDogYC8ke3NjaGVtYS5wYXRofWAsXG4gICAgY2hpbGRyZW4sXG4gICAgY29tcG9uZW50LFxuICAgIG1ldGE6IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKSB7XG4gIGxldCBkZWZhdWx0cyA9IGFwaS5kZWZhdWx0c1tzY2hlbWEudHlwZV1cbiAgaWYgKGRlZmF1bHRzKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZGVmYXVsdHMpKSB7XG4gICAgICBkZWZhdWx0cyA9IGRlZmF1bHRzKHNjaGVtYSlcbiAgICB9XG4gICAgaWYgKGlzT2JqZWN0KGRlZmF1bHRzKSkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGVmYXVsdHMpKSB7XG4gICAgICAgIGlmIChzY2hlbWFba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2NoZW1hW2tleV0gPSB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjaGVtYVtrZXldID0gbWVyZ2UodmFsdWUsIHNjaGVtYVtrZXldKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpIHtcbiAgLy8gUHJvY2VzcyBkZWZhdWx0cyBmb3IgbmVzdGVkIHNjaGVtYXMuIE5vdGUgdGhhdCB0aGlzIGlzIGFsc28gZG9uZSB3aGVuXG4gIC8vIGNhbGxpbmcgYHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKClgLCBidXQgdGhhdCBmdW5jdGlvbiBpcyBhc3luYywgYW5kIHdlXG4gIC8vIG5lZWQgYSBzeW5jIHZlcnNpb24gdGhhdCBvbmx5IGhhbmRsZXMgdGhlIGRlZmF1bHRzIGZvciBmaWx0ZXJzLCBzZWVcbiAgLy8gYGdldEZpbHRlcnNQYW5lbCgpYC5cbiAgaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLCBjb21wb25lbnQgPT4ge1xuICAgIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIGNvbXBvbmVudClcbiAgICBjb25zdCBmb3JtcyA9IGdldEZvcm1TY2hlbWFzKGNvbXBvbmVudClcbiAgICBmb3IgKGNvbnN0IGZvcm0gb2YgT2JqZWN0LnZhbHVlcyhmb3JtcykpIHtcbiAgICAgIHByb2Nlc3NOZXN0ZWRTY2hlbWFEZWZhdWx0cyhhcGksIGZvcm0pXG4gICAgfVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKSB7XG4gIC8vIFVzZWQgZm9yIHZpZXcgYW5kIHNvdXJjZSBzY2hlbWFzLCBzZWUgU291cmNlTWl4aW4uXG4gIHNjaGVtYS5uYW1lID0gbmFtZVxuICBzY2hlbWEucGF0aCB8fD0gYXBpLm5vcm1hbGl6ZVBhdGgobmFtZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGb3JtcyhhcGksIHNjaGVtYSwgbGV2ZWwpIHtcbiAgLy8gRmlyc3QgcmVzb2x2ZSB0aGUgZm9ybXMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGJhY2sgb24gdGhlIHNjaGVtYS5cbiAgbGV0IHsgZm9ybSwgZm9ybXMsIGNvbXBvbmVudHMgfSA9IHNjaGVtYVxuICBpZiAoZm9ybXMpIHtcbiAgICBmb3JtcyA9IHNjaGVtYS5mb3JtcyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKGZvcm1zLCBmb3JtID0+XG4gICAgICBwcm9jZXNzRm9ybShhcGksIGZvcm0pXG4gICAgKVxuICB9IGVsc2UgaWYgKGZvcm0pIHtcbiAgICBmb3JtID0gc2NoZW1hLmZvcm0gPSBhd2FpdCBwcm9jZXNzRm9ybShhcGksIGZvcm0pXG4gIH0gZWxzZSBpZiAoaXNPYmplY3QoY29tcG9uZW50cykpIHtcbiAgICAvLyBOT1RFOiBQcm9jZXNzaW5nIGZvcm1zIGluIGNvbXB1dGVkIGNvbXBvbmVudHMgaXMgbm90IHN1cHBvcnRlZCwgc2luY2UgaXRcbiAgICAvLyBvbmx5IGNhbiBiZSBjb21wdXRlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGFjdHVhbCBkYXRhLlxuICAgIGZvcm0gPSB7XG4gICAgICB0eXBlOiAnZm9ybScsXG4gICAgICBjb21wb25lbnRzXG4gICAgfVxuICB9XG5cbiAgZm9ybXMgfHw9IHsgZGVmYXVsdDogZm9ybSB9IC8vIE9ubHkgdXNlZCBmb3IgcHJvY2VzcyBsb29wIGJlbG93LlxuICBjb25zdCBjaGlsZHJlbiA9IFtdXG4gIGZvciAoY29uc3QgZm9ybSBvZiBPYmplY3QudmFsdWVzKGZvcm1zKSkge1xuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgZm9ybSwgY2hpbGRyZW4sIGxldmVsKVxuICB9XG4gIHJldHVybiBjaGlsZHJlblxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0Zvcm0oYXBpLCBzY2hlbWEpIHtcbiAgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHRydWUpXG4gIGlmICghaXNGb3JtKHNjaGVtYSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZm9ybSBzY2hlbWE6ICcke2dldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKX0nYClcbiAgfVxuICBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpXG4gIGF3YWl0IHByb2Nlc3NOZXN0ZWRTY2hlbWFzKGFwaSwgc2NoZW1hKVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzVGFiKGFwaSwgc2NoZW1hKSB7XG4gIHNjaGVtYSA9IGF3YWl0IHJlc29sdmVTY2hlbWEoc2NoZW1hLCB0cnVlKVxuICBpZiAoIWlzVGFiKHNjaGVtYSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGFiIHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1BhbmVsKGFwaSwgc2NoZW1hKSB7XG4gIHNjaGVtYSA9IGF3YWl0IHJlc29sdmVTY2hlbWEoc2NoZW1hLCB0cnVlKVxuICBpZiAoIWlzUGFuZWwoc2NoZW1hKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYW5lbCBzY2hlbWE6ICcke2dldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKX0nYClcbiAgfVxuICBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpXG4gIHJldHVybiBzY2hlbWFcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NOZXN0ZWRTY2hlbWFzKGFwaSwgc2NoZW1hKSB7XG4gIGNvbnN0IHsgdGFicywgcGFuZWxzIH0gPSBzY2hlbWFcbiAgaWYgKHRhYnMpIHtcbiAgICBzY2hlbWEudGFicyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKFxuICAgICAgdGFicyxcbiAgICAgIHRhYiA9PiBwcm9jZXNzVGFiKGFwaSwgdGFiKVxuICAgIClcbiAgfVxuICBpZiAocGFuZWxzKSB7XG4gICAgc2NoZW1hLnBhbmVscyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKFxuICAgICAgcGFuZWxzLFxuICAgICAgcGFuZWwgPT4gcHJvY2Vzc1BhbmVsKGFwaSwgcGFuZWwpXG4gICAgKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNGb3JtU2NoZW1hKHNjaGVtYSkge1xuICAvLyBTdXBwb3J0IGJvdGggc2luZ2xlIGZvcm0gYW5kIG11bHRpcGxlIGZvcm1zIG5vdGF0aW9uLCBhcyB3ZWxsIGFzIGlubGluZWRcbiAgLy8gY29tcG9uZW50cy5cbiAgcmV0dXJuIChcbiAgICBpc1NjaGVtYShzY2hlbWEpICYmXG4gICAgaXNPYmplY3Qoc2NoZW1hLmZvcm0gfHwgc2NoZW1hLmZvcm1zIHx8IHNjaGVtYS5jb21wb25lbnRzKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNNdWx0aXBsZUZvcm1TY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gKFxuICAgIGlzU2NoZW1hKHNjaGVtYSkgJiZcbiAgICBPYmplY3Qua2V5cyhzY2hlbWE/LmZvcm1zIHx8IHt9KS5sZW5ndGggPiAxXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpIHtcbiAgcmV0dXJuIChcbiAgICBpc1ZpZXcoc2NoZW1hKSAmJlxuICAgIGlzT2JqZWN0KHNjaGVtYS5jb21wb25lbnQpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdGb3JtU2NoZW1hKHNjaGVtYSwgY29udGV4dCkge1xuICBjb25zdCB7IHZpZXcgfSA9IHNjaGVtYVxuICBjb25zdCB2aWV3U2NoZW1hID0gdmlldyAmJiBjb250ZXh0LnZpZXdzW3ZpZXddXG4gIHJldHVybiB2aWV3U2NoZW1hXG4gICAgPyAvLyBOT1RFOiBWaWV3cyBjYW4gaGF2ZSB0YWJzLCBpbiB3aGljaCBjYXNlIHRoZSB2aWV3IGNvbXBvbmVudCBpcyBuZXN0ZWRcbiAgICAgIC8vIGluIG9uZSBvZiB0aGUgdGFicywgZ28gZmluZCBpdC5cbiAgICAgIGZpbmROZXN0ZWRTY2hlbWFDb21wb25lbnQodmlld1NjaGVtYSwgaGFzRm9ybVNjaGVtYSkgfHwgbnVsbFxuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpIHtcbiAgcmV0dXJuIGdldFZpZXdGb3JtU2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgICA/IGNvbnRleHQudmlld3Nbc2NoZW1hLnZpZXddXG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3RWRpdFBhdGgoc2NoZW1hLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZpZXcgPSBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgcmV0dXJuIHZpZXdcbiAgICA/IGlzU2luZ2xlQ29tcG9uZW50Vmlldyh2aWV3KVxuICAgICAgPyBgLyR7dmlldy5wYXRofWBcbiAgICAgIDogYC8ke3ZpZXcucGF0aH0vJHt2aWV3LnBhdGh9YFxuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0LCBtb2RpZnlGb3JtKSB7XG4gIGNvbnN0IHZpZXdTY2hlbWEgPSBjb250ZXh0ICYmIGdldFZpZXdGb3JtU2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgaWYgKHZpZXdTY2hlbWEpIHtcbiAgICBzY2hlbWEgPSB2aWV3U2NoZW1hXG4gIH0gZWxzZSBpZiAoc2NoZW1hLnZpZXcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdmlldzogJyR7c2NoZW1hLnZpZXd9J2ApXG4gIH1cblxuICBsZXQgeyBmb3JtLCBmb3JtcywgY29tcG9uZW50cywgY29tcGFjdCB9ID0gc2NoZW1hXG4gIGlmICghZm9ybSAmJiAhZm9ybXMpIHtcbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgLy8gQ29udmVydCBpbmxpbmVkIGNvbXBvbmVudHMgdG8gZm9ybXMsIHN1cHBvcnRpbmcgYGNvbXBhY3RgIHNldHRpbmcuXG4gICAgICBmb3JtID0geyBjb21wb25lbnRzLCBjb21wYWN0IH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gYGZvcm1zYCwgYGZvcm1gIG9yIGBjb21wb25lbnRzYCwgcmV0dXJuIGFuZCBlbXB0eSBgZm9ybXNgIG9iamVjdC5cbiAgICAgIHJldHVybiB7fVxuICAgIH1cbiAgfVxuICBmb3JtcyB8fD0geyBkZWZhdWx0OiBmb3JtIH1cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhmb3JtcykubWFwKChbdHlwZSwgZm9ybV0pID0+IHtcbiAgICAgIC8vIFN1cHBvcnQgYHNjaGVtYS5jb21wb25lbnRzYCBjYWxsYmFja3MgdG8gY3JlYXRlIGNvbXBvbmVudHMgb24gdGhlIGZseS5cbiAgICAgIGlmIChjb250ZXh0ICYmIGlzRnVuY3Rpb24oZm9ybS5jb21wb25lbnRzKSkge1xuICAgICAgICBmb3JtID0ge1xuICAgICAgICAgIC4uLmZvcm0sXG4gICAgICAgICAgY29tcG9uZW50czogZm9ybS5jb21wb25lbnRzKGNvbnRleHQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBbdHlwZSwgbW9kaWZ5Rm9ybT8uKGZvcm0pID8/IGZvcm1dXG4gICAgfSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZm9ybXMsIGl0ZW0pIHtcbiAgcmV0dXJuIGZvcm1zW2l0ZW0/LnR5cGVdIHx8IGZvcm1zLmRlZmF1bHQgfHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KSB7XG4gIHJldHVybiBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3JtcyhnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQpLCBpdGVtKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb21wYWN0KHNjaGVtYSkge1xuICByZXR1cm4gISFzY2hlbWEuY29tcGFjdFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJbmxpbmVkKHNjaGVtYSkge1xuICByZXR1cm4gISEoc2NoZW1hLmlubGluZWQgfHwgc2NoZW1hLmNvbXBvbmVudHMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05lc3RlZChzY2hlbWEpIHtcbiAgcmV0dXJuICEhKHNjaGVtYS5uZXN0ZWQgfHwgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZGVmYXVsdE5lc3RlZCA9PT0gdHJ1ZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9taXRQYWRkaW5nKHNjaGVtYSkge1xuICByZXR1cm4gISFnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5vbWl0UGFkZGluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24ga2VlcEFsaWduZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmtlZXBBbGlnbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFWYWx1ZShcbiAga2V5T3JEYXRhUGF0aCxcbiAgeyB0eXBlLCBzY2hlbWEsIGNhbGxiYWNrID0gdHJ1ZSwgZGVmYXVsdDogZGVmLCBjb250ZXh0IH0gPSB7fVxuKSB7XG4gIGNvbnN0IHR5cGVzID0gdHlwZSAmJiBhc0FycmF5KHR5cGUpXG4gIC8vIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBkYXRhLXBhdGhzIGluIGBrZXlPckRhdGFQYXRoYCBjYW4gb25seSBiZVxuICAvLyBwcm92aWRlZCBpbiBpbiBhcnJheSBmb3JtYXQgaGVyZTpcbiAgbGV0IHZhbHVlID0gc2NoZW1hXG4gICAgPyBpc0FycmF5KGtleU9yRGF0YVBhdGgpXG4gICAgICA/IGdldFZhbHVlQXREYXRhUGF0aChzY2hlbWEsIGtleU9yRGF0YVBhdGgsICgpID0+IHVuZGVmaW5lZClcbiAgICAgIDogc2NoZW1hW2tleU9yRGF0YVBhdGhdXG4gICAgOiB1bmRlZmluZWRcblxuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBkZWYgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKGRlZikgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCBkZWYpKSB7XG4gICAgICAvLyBTdXBwb3J0IGBkZWZhdWx0KClgIGZ1bmN0aW9ucyBmb3IgYW55IHR5cGUgZXhjZXB0IGBGdW5jdGlvbmA6XG4gICAgICBkZWYgPSBkZWYoY29udGV4dClcbiAgICB9XG4gICAgcmV0dXJuIGRlZlxuICB9XG5cbiAgaWYgKGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuICAvLyBBbnkgc2NoZW1hIHZhbHVlIGhhbmRsZWQgdGhyb3VnaCBgZ2V0U2NoZW1hVmFsdWUoKWAgY2FuIHByb3ZpZGVcbiAgLy8gYSBmdW5jdGlvbiB0aGF0J3MgcmVzb2x2ZWQgd2hlbiB0aGUgdmFsdWUgaXMgZXZhbHVhdGVkOlxuICBpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICB2YWx1ZSA9IHZhbHVlKGNvbnRleHQpXG4gIH1cbiAgLy8gTm93IGZpbmFsbHkgc2VlIGlmIHdlIGNhbiBjb252ZXJ0IHRvIHRoZSBleHBlY3QgdHlwZXMuXG4gIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpKSB7XG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBjb25zdCBjb252ZXJ0ZWQgPSBjb252ZXJ0VHlwZSh0eXBlLCB2YWx1ZSlcbiAgICAgIGlmIChjb252ZXJ0ZWQgIT09IHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBjb252ZXJ0ZWRcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRSZW5kZXJTY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gIHJldHVybiAoXG4gICAgZ2V0U2NoZW1hVmFsdWUoJ2lmJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIHNjaGVtYSxcbiAgICAgIGNvbnRleHQsXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSkgJiYgKFxuICAgICAgIWhhc05lc3RlZFNjaGVtYUNvbXBvbmVudHMoc2NoZW1hKSB8fFxuICAgICAgc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNvbXBvbmVudCA9PlxuICAgICAgICBzaG91bGRSZW5kZXJTY2hlbWEoY29tcG9uZW50LCBjb250ZXh0KVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSkge1xuICAvLyBTdXBwb3J0IGRlZmF1bHQgdmFsdWVzIGJvdGggb24gc2NoZW1hIGFuZCBvbiBjb21wb25lbnQgbGV2ZWwuXG4gIC8vIE5PVEU6IEF0IHRoZSB0aW1lIG9mIGNyZWF0aW9uLCBjb21wb25lbnRzIG1heSBub3QgYmUgaW5zdGFudGlhdGVkLCAoZS5nLiBpZlxuICAvLyBlbnRyaWVzIGFyZSBjcmVhdGVkIHRocm91Z2ggbmVzdGVkIGZvcm1zLCB0aGUgcGFyZW50IGZvcm0gaXNuJ3QgbW91bnRlZCkgc29cbiAgLy8gd2UgY2FuJ3QgdXNlIGBkYXRhUGF0aGAgdG8gZ2V0IHRvIGNvbXBvbmVudHMsIGFuZCB0aGUgYGRlZmF1bHRWYWx1ZWAgZnJvbVxuICAvLyB0aGVyZS4gVGhhdCdzIHdoeSBgZGVmYXVsdFZhbHVlYCBpcyBkZWZpbmVkIHN0YXRpY2FsbHkgaW4gdGhlIGNvbXBvbmVudHM6XG4gIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHNjaGVtYS5kZWZhdWx0XG4gIGNvbnN0IHZhbHVlID1cbiAgICBkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgPyBkZWZhdWx0VmFsdWVcbiAgICAgIDogZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZGVmYXVsdFZhbHVlXG4gIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlKVxuICAgID8gdmFsdWUoc2NoZW1hKVxuICAgIDogY2xvbmUodmFsdWUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSB7XG4gIGNvbnN0IHR5cGVPcHRpb25zID0gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKVxuICByZXR1cm4gISEoXG4gICAgdHlwZU9wdGlvbnM/LmV4Y2x1ZGVWYWx1ZSB8fCB0eXBlT3B0aW9ucz8uaWdub3JlTWlzc2luZ1ZhbHVlPy4oc2NoZW1hKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0VmFsdWVzKHNjaGVtYSwgZGF0YSA9IHt9LCBjb21wb25lbnQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHsgY29tcG9uZW50LCByb290RGF0YTogZGF0YSB9XG5cbiAgY29uc3QgcHJvY2Vzc0JlZm9yZSA9IChzY2hlbWEsIGRhdGEsIG5hbWUpID0+IHtcbiAgICBpZiAoIShuYW1lIGluIGRhdGEpICYmICFpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSkge1xuICAgICAgZGF0YVtuYW1lXSA9IGdldERlZmF1bHRWYWx1ZShzY2hlbWEpXG4gICAgfVxuICB9XG5cbiAgLy8gU2V0cyB1cCBhIGRhdGEgb2JqZWN0IHRoYXQgaGFzIGtleXMgd2l0aCBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsXG4gIC8vIGZvcm0gZmllbGRzLCBzbyB0aGV5IGNhbiBiZSBjb3JyZWN0bHkgd2F0Y2hlZCBmb3IgY2hhbmdlcy5cbiAgcmV0dXJuIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgIHNjaGVtYSxcbiAgICBkYXRhLFxuICAgIG51bGwsXG4gICAgbnVsbCxcbiAgICBwcm9jZXNzQmVmb3JlLFxuICAgIG51bGwsXG4gICAgb3B0aW9uc1xuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlVmFsdWUoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQgPSBudWxsLFxuICByb290RGF0YSA9IGNvbXBvbmVudD8ucm9vdERhdGFcbn0gPSB7fSkge1xuICBjb25zdCB7IGNvbXB1dGUgfSA9IHNjaGVtYVxuICBpZiAoY29tcHV0ZSkge1xuICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZShcbiAgICAgIERpdG9Db250ZXh0LmdldChjb21wb25lbnQsIHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICAvLyBPdmVycmlkZSB2YWx1ZSB0byBwcmV2ZW50IGVuZGxlc3MgcmVjdXJzaW9uIHRocm91Z2ggY2FsbGluZyB0aGVcbiAgICAgICAgLy8gZ2V0dGVyIGZvciBgdGhpcy52YWx1ZWAgaW4gYERpdG9Db250ZXh0YDpcbiAgICAgICAgdmFsdWU6IGRhdGFbbmFtZV0sXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICByb290RGF0YVxuICAgICAgfSlcbiAgICApXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEFjY2VzcyBgZGF0YVtuYW1lXWAgZGlyZWN0bHkgdG8gdXBkYXRlIHRoZSB2YWx1ZSB3aXRob3V0IGNhbGxpbmdcbiAgICAgIC8vIHBhcnNlKCk6XG4gICAgICBkYXRhW25hbWVdID0gdmFsdWVcbiAgICB9XG4gIH1cbiAgLy8gSWYgdGhlIHZhbHVlIGlzIHN0aWxsIG1pc3NpbmcgYWZ0ZXIgY29tcHV0ZSwgc2V0IHRoZSBkZWZhdWx0IGZvciBpdDpcbiAgaWYgKCEobmFtZSBpbiBkYXRhKSAmJiAhaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkpIHtcbiAgICBkYXRhW25hbWVdID0gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSlcbiAgfVxuICAvLyBOb3cgYWNjZXNzIHRoZSB2YWx1ZS4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHJlYWN0aXZpdHkgYW5kIG5lZWRzIHRvXG4gIC8vIGhhcHBlbiBhZnRlciBhbGwgcHJpb3IgbWFuaXB1bGF0aW9uIG9mIGBkYXRhW25hbWVdYCwgc2VlIGFib3ZlOlxuICByZXR1cm4gZGF0YVtuYW1lXVxufVxuXG5mdW5jdGlvbiBjbG9uZUl0ZW0oc291cmNlU2NoZW1hLCBpdGVtLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnNjaGVtYU9ubHkpIHtcbiAgICBjb25zdCBjb3B5ID0ge31cbiAgICBjb25zdCB7IGlkS2V5ID0gJ2lkJywgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgIGNvbnN0IGlkID0gaXRlbVtpZEtleV1cbiAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29weVtpZEtleV0gPSBpZFxuICAgIH1cbiAgICAvLyBDb3B5IG92ZXIgdHlwZSBpbiBjYXNlIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICBpZiAoaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyhzb3VyY2VTY2hlbWEpKSB7XG4gICAgICBjb3B5LnR5cGUgPSBpdGVtLnR5cGVcbiAgICB9XG4gICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICBjb3B5W29yZGVyS2V5XSA9IGl0ZW1bb3JkZXJLZXldXG4gICAgfVxuICAgIHJldHVybiBjb3B5XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgLi4uaXRlbSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NEYXRhKHNjaGVtYSwgc291cmNlU2NoZW1hLCBkYXRhLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQsXG4gIHNjaGVtYU9ubHksIC8vIHdoZXRoZXIgdG8gb25seSBpbmNsdWRlIGRhdGEgY292ZXJlZCBieSB0aGUgc2NoZW1hLCBvciBhbGwgZGF0YVxuICB0YXJnZXRcbn0gPSB7fSkge1xuICBjb25zdCBvcHRpb25zID0geyBjb21wb25lbnQsIHNjaGVtYU9ubHksIHRhcmdldCwgcm9vdERhdGE6IGRhdGEgfVxuICBjb25zdCBwcm9jZXNzZWREYXRhID0gY2xvbmVJdGVtKHNvdXJjZVNjaGVtYSwgZGF0YSwgb3B0aW9ucylcbiAgY29uc3QgZ3JhcGggPSBuZXcgU2NoZW1hR3JhcGgoKVxuXG4gIGNvbnN0IHByb2Nlc3NCZWZvcmUgPSAoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YSkgPT4ge1xuICAgIGxldCB2YWx1ZSA9IGNvbXB1dGVWYWx1ZShzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBvcHRpb25zKVxuICAgIC8vIFRoZSBzY2hlbWEgZXhwZWN0cyB0aGUgYHdyYXBQcmltaXRpdmVzYCB0cmFuc2Zvcm1hdGlvbnMgdG8gYmUgcHJlc2VudCBvblxuICAgIC8vIHRoZSBkYXRhIHRoYXQgaXQgaXMgYXBwbGllZCBvbiwgc28gd2FycCBiZWZvcmUgYW5kIHVud3JhcCBhZnRlci5cbiAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMsIG9yZGVyS2V5LCBpZEtleSA9ICdpZCcgfSA9IHNjaGVtYVxuICAgICAgaWYgKHdyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUubWFwKGVudHJ5ID0+ICh7XG4gICAgICAgICAgW3dyYXBQcmltaXRpdmVzXTogZW50cnlcbiAgICAgICAgfSkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBbHdheXMgc2hhbGxvdy1jbG9uZSBhcnJheSB2YWx1ZXM6XG4gICAgICAgIHZhbHVlID0gWy4uLnZhbHVlXVxuICAgICAgfVxuICAgICAgaWYgKG9yZGVyS2V5ICYmIHRhcmdldCA9PT0gJ2NsaXBib2FyZCcpIHtcbiAgICAgICAgLy8gU29ydCB0aGUgZGF0YSBiYWNrIGludG8gdGhlIG5hdHVyYWwgc2VxdWVuY2UgYXMgZGVmaW5lZCBieSB0aGVpciBpZHMsXG4gICAgICAgIC8vIHNvIGNvcHktcGFzdGluZyBiZXR3ZWVuIHNlcnZlcnMgKGUuZy4gbmVzdGVkIGZvbnQtY3V0cyBvbiBMaW5ldG8pXG4gICAgICAgIC8vIG5hdHVyYWxseSBnZXRzIG1hcHBlZCB0byB0aGUgc2FtZSBlbnRyaWVzIGluIHRoZSBncmFwaC5cbiAgICAgICAgdmFsdWUuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkMSA9IGE/LltpZEtleV1cbiAgICAgICAgICBjb25zdCBpZDIgPSBiPy5baWRLZXldXG4gICAgICAgICAgcmV0dXJuIGlkMSA9PSBudWxsIHx8IGlzVGVtcG9yYXJ5SWQoaWQxKVxuICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICA6IGlkMiA9PSBudWxsIHx8IGlzVGVtcG9yYXJ5SWQoaWQyKVxuICAgICAgICAgICAgICA/IC0xXG4gICAgICAgICAgICAgIDogaWQxIC0gaWQyXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICB9XG5cbiAgY29uc3QgcHJvY2Vzc0FmdGVyID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBleGNsdWRlLCBwcm9jZXNzIH0gPSBzY2hlbWFcbiAgICBsZXQgdmFsdWUgPSBwcm9jZXNzZWREYXRhW25hbWVdXG5cbiAgICBjb25zdCB0eXBlT3B0aW9ucyA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSlcblxuICAgIC8vIE5PVEU6IFdlIGRvbid0IGNhY2hlIHRoaXMgY29udGV4dCwgc2luY2UgYHZhbHVlYCBpcyBjaGFuZ2luZy5cbiAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT5cbiAgICAgIERpdG9Db250ZXh0LmdldChjb21wb25lbnQsIHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhLFxuICAgICAgICAvLyBQYXNzIHRoZSBhbHJlYWR5IHByb2Nlc3NlZCBkYXRhIHRvIGBwcm9jZXNzKClgLCBzbyBpdCBjYW4gYmUgbW9kaWZpZWRcbiAgICAgICAgLy8gdGhyb3VnaCBgcHJvY2Vzc2VkSXRlbWAgZnJvbSB0aGVyZS5cbiAgICAgICAgcHJvY2Vzc2VkRGF0YVxuICAgICAgfSlcblxuICAgIC8vIEZpcnN0IHVud3JhcCB0aGUgd3JhcHBlZCBwcmltaXRpdmVzIGFnYWluLCB0byBicmluZyB0aGUgZGF0YSBiYWNrIGludG9cbiAgICAvLyBpdHMgbmF0aXZlIGZvcm0uIFNlIGBwcm9jZXNzQmVmb3JlKClgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgaWYgKHdyYXBQcmltaXRpdmVzICYmIGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLm1hcChvYmplY3QgPT4gb2JqZWN0W3dyYXBQcmltaXRpdmVzXSlcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgdGhlIHVzZXIncyBgcHJvY2VzcygpYCBjYWxsYmFjayBmaXJzdCwgaWYgb25lIGlzIHByb3ZpZGVkLCBzbyB0aGF0XG4gICAgLy8gaXQgY2FuIG1vZGlmeSBkYXRhIGluIGBwcm9jZXNzZWREYXRhYCBldmVuIGlmIGl0IHByb3ZpZGVzIGBleGNsdWRlOiB0cnVlYFxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICB2YWx1ZSA9IHByb2Nlc3MoZ2V0Q29udGV4dCgpKVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHR5cGVPcHRpb25zPy5leGNsdWRlVmFsdWUgfHxcbiAgICAgIC8vIFN1cHBvcnQgZnVuY3Rpb25zIG5leHQgdG8gYm9vbGVhbnMgZm9yIGBzY2hlbWEuZXhjbHVkZWA6XG4gICAgICBleGNsdWRlID09PSB0cnVlIHx8XG4gICAgICBpc0Z1bmN0aW9uKGV4Y2x1ZGUpICYmIGV4Y2x1ZGUoZ2V0Q29udGV4dCgpKVxuICAgICkge1xuICAgICAgZGVsZXRlIHByb2Nlc3NlZERhdGFbbmFtZV1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRWFjaCBjb21wb25lbnQgdHlwZSBjYW4gcHJvdmlkZSBpdHMgb3duIHN0YXRpYyBgcHJvY2Vzc1ZhbHVlKClgIG1ldGhvZFxuICAgICAgLy8gdG8gY29udmVydCB0aGUgZGF0YSBmb3Igc3RvcmFnZS5cbiAgICAgIGNvbnN0IHByb2Nlc3NWYWx1ZSA9IHR5cGVPcHRpb25zPy5wcm9jZXNzVmFsdWVcbiAgICAgIGlmIChwcm9jZXNzVmFsdWUpIHtcbiAgICAgICAgdmFsdWUgPSBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKVxuICAgICAgfVxuICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgc2NoZW1hLFxuICAgIGRhdGEsXG4gICAgZGF0YVBhdGgsXG4gICAgcHJvY2Vzc2VkRGF0YSxcbiAgICBwcm9jZXNzQmVmb3JlLFxuICAgIHByb2Nlc3NBZnRlcixcbiAgICBvcHRpb25zXG4gIClcblxuICByZXR1cm4gZ3JhcGgucHJvY2Vzcyhzb3VyY2VTY2hlbWEsIHByb2Nlc3NlZERhdGEsIG9wdGlvbnMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgc2NoZW1hLFxuICBkYXRhLFxuICBkYXRhUGF0aCxcbiAgcHJvY2Vzc2VkRGF0YSxcbiAgcHJvY2Vzc0JlZm9yZSxcbiAgcHJvY2Vzc0FmdGVyLFxuICBvcHRpb25zXG4pIHtcbiAgY29uc3QgcHJvY2Vzc0NvbXBvbmVudHMgPSBjb21wb25lbnRzID0+IHtcbiAgICBjb25zdCBnZXREYXRhUGF0aCA9IChkYXRhUGF0aCwgdG9rZW4pID0+XG4gICAgICBkYXRhUGF0aCAhPSBudWxsXG4gICAgICAgID8gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHRva2VuKVxuICAgICAgICA6IG51bGxcblxuICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBjb21wb25lbnRTY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKGNvbXBvbmVudHMpKSB7XG4gICAgICAgIGlmICghaXNOZXN0ZWQoY29tcG9uZW50U2NoZW1hKSkge1xuICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHByb2Nlc3MgZGF0YSBvbiB1bm5lc3RlZCBjb21wb25lbnRzLlxuICAgICAgICAgIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgICAgICAgICAgY29tcG9uZW50U2NoZW1hLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YSxcbiAgICAgICAgICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgICAgICAgICBwcm9jZXNzQWZ0ZXIsXG4gICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudERhdGFQYXRoID0gZ2V0RGF0YVBhdGgoZGF0YVBhdGgsIG5hbWUpXG5cbiAgICAgICAgICBjb25zdCBwcm9jZXNzSXRlbSA9IChpdGVtLCBpbmRleCA9IG51bGwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFQYXRoID1cbiAgICAgICAgICAgICAgaW5kZXggIT09IG51bGxcbiAgICAgICAgICAgICAgICA/IGdldERhdGFQYXRoKGNvbXBvbmVudERhdGFQYXRoLCBpbmRleClcbiAgICAgICAgICAgICAgICA6IGNvbXBvbmVudERhdGFQYXRoXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gRGl0b0NvbnRleHQuZ2V0KG9wdGlvbnMuY29tcG9uZW50LCB7XG4gICAgICAgICAgICAgIHNjaGVtYTogY29tcG9uZW50U2NoZW1hLFxuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICByb290RGF0YTogb3B0aW9ucy5yb290RGF0YVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGNvbnN0IGdldEZvcm1zID0gKFxuICAgICAgICAgICAgICBnZXRUeXBlT3B0aW9ucyhjb21wb25lbnRTY2hlbWEpPy5nZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3NpbmcgfHxcbiAgICAgICAgICAgICAgZ2V0Rm9ybVNjaGVtYXNcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IGZvcm1zID0gZ2V0Rm9ybXMoY29tcG9uZW50U2NoZW1hLCBjb250ZXh0KVxuICAgICAgICAgICAgY29uc3QgZm9ybSA9IGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGZvcm1zLCBpdGVtKVxuICAgICAgICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgICAgICAgY29uc3QgcHJvY2Vzc2VkSXRlbSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IGNsb25lSXRlbShjb21wb25lbnRTY2hlbWEsIGl0ZW0sIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgICAgICBmb3JtLFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEl0ZW1zIHdpdGhvdXQgZm9ybXMgc3RpbGwgZ2V0IGZ1bGx5IChidXQgc2hhbGxvd2x5KSBjbG9uZWQuXG4gICAgICAgICAgICAgIC8vIFRPRE86IEZpbmQgb3V0IG9mIHRoaXMgaXMgYWN0dWFsbHkgbmVlZGVkIC8gdXNlZCBhdCBhbGw/XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHByb2Nlc3NCZWZvcmU/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgY29tcG9uZW50RGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgKVxuICAgICAgICAgIGxldCB2YWx1ZSA9IHByb2Nlc3NlZERhdGEgPyBwcm9jZXNzZWREYXRhW25hbWVdIDogZGF0YVtuYW1lXVxuICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIGhhc0Zvcm1TY2hlbWEoY29tcG9uZW50U2NoZW1hKSkge1xuICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcHJvY2VzcyBkYXRhIG9uIG5lc3RlZCBmb3JtIGl0ZW1zLlxuICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgIC8vIE9wdGltaXphdGlvbjogTm8gbmVlZCB0byBjb2xsZWN0IHZhbHVlcyBpZiB3ZSdyZSBub3QgY2xvbmluZyFcbiAgICAgICAgICAgICAgdmFsdWUgPSBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgICAgICAgPyB2YWx1ZS5tYXAocHJvY2Vzc0l0ZW0pXG4gICAgICAgICAgICAgICAgOiB2YWx1ZS5mb3JFYWNoKHByb2Nlc3NJdGVtKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBwcm9jZXNzSXRlbSh2YWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9jZXNzZWREYXRhKSB7XG4gICAgICAgICAgICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwcm9jZXNzQWZ0ZXI/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgY29tcG9uZW50RGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc0NvbXBvbmVudHMoc2NoZW1hLmNvbXBvbmVudHMpXG4gIGZvciAoY29uc3QgdGFiIG9mIGdldFRhYlNjaGVtYXMoc2NoZW1hKSkge1xuICAgIHByb2Nlc3NDb21wb25lbnRzKHRhYi5jb21wb25lbnRzKVxuICB9XG4gIGZvciAoY29uc3QgcGFuZWwgb2YgZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYSkpIHtcbiAgICBwcm9jZXNzQ29tcG9uZW50cyhwYW5lbC5jb21wb25lbnRzKVxuICB9XG5cbiAgcmV0dXJuIHByb2Nlc3NlZERhdGEgfHwgZGF0YVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZWRTY2hlbWFzKHNjaGVtYXMsIGRlZmF1bHRzKSB7XG4gIGNvbnN0IHRvT2JqZWN0ID0gKGFycmF5LCB0b1NjaGVtYSkgPT4ge1xuICAgIHJldHVybiBhcnJheS5sZW5ndGggPiAwXG4gICAgICA/IGFycmF5LnJlZHVjZSgob2JqZWN0LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHRvU2NoZW1hKHZhbHVlKVxuICAgICAgICAgIGlmIChzY2hlbWEpIHtcbiAgICAgICAgICAgIG9iamVjdFtzY2hlbWEubmFtZV0gPVxuICAgICAgICAgICAgICBzY2hlbWEgJiYgZGVmYXVsdHNcbiAgICAgICAgICAgICAgICA/IHsgLi4uZGVmYXVsdHMsIC4uLnNjaGVtYSB9XG4gICAgICAgICAgICAgICAgOiBzY2hlbWFcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG9iamVjdFxuICAgICAgICB9LCB7fSlcbiAgICAgIDogbnVsbFxuICB9XG5cbiAgcmV0dXJuIGlzQXJyYXkoc2NoZW1hcylcbiAgICA/IHRvT2JqZWN0KHNjaGVtYXMsIHZhbHVlID0+XG4gICAgICAgIGlzT2JqZWN0KHZhbHVlKVxuICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgbmFtZTogY2FtZWxpemUodmFsdWUsIGZhbHNlKVxuICAgICAgICAgICAgfVxuICAgICAgKVxuICAgIDogaXNPYmplY3Qoc2NoZW1hcylcbiAgICAgID8gdG9PYmplY3QoXG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoc2NoZW1hcyksXG4gICAgICAgICAgKFtuYW1lLCB2YWx1ZV0pID0+XG4gICAgICAgICAgICBpc09iamVjdCh2YWx1ZSlcbiAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgLi4udmFsdWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDogaXNTdHJpbmcodmFsdWUpXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiB2YWx1ZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICApXG4gICAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1dHRvblNjaGVtYXMoYnV0dG9ucykge1xuICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKFxuICAgIGJ1dHRvbnMsXG4gICAgeyB0eXBlOiAnYnV0dG9uJyB9IC8vIERlZmF1bHRzXG4gIClcbn1cblxuZnVuY3Rpb24gZ2V0VHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYU9yVHlwZSkgPyBzY2hlbWFPclR5cGUudHlwZSA6IHNjaGVtYU9yVHlwZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRUeXBlQ29tcG9uZW50KGdldFR5cGUoc2NoZW1hT3JUeXBlKSwgdHJ1ZSkgPz8gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIChcbiAgICBnZXRUeXBlT3B0aW9ucyhzY2hlbWFPclR5cGUpPy5nZXRTb3VyY2VUeXBlPy4oZ2V0VHlwZShzY2hlbWFPclR5cGUpKSA/P1xuICAgIG51bGxcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFuZWxFbnRyeShzY2hlbWEsIGRhdGFQYXRoID0gbnVsbCwgdGFiQ29tcG9uZW50ID0gbnVsbCkge1xuICByZXR1cm4gc2NoZW1hXG4gICAgPyB7XG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gbmFtZSwgYXBwZW5kIGl0IHRvIHRoZSBkYXRhUGF0aC5cbiAgICAgICAgLy8gVGhpcyBpcyB1c2VkIGUuZy4gZm9yICRmaWx0ZXJzIHBhbmVscy5cbiAgICAgICAgZGF0YVBhdGg6XG4gICAgICAgICAgZGF0YVBhdGggIT0gbnVsbCAmJiBzY2hlbWEubmFtZVxuICAgICAgICAgICAgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgc2NoZW1hLm5hbWUpXG4gICAgICAgICAgICA6IGRhdGFQYXRoLFxuICAgICAgICB0YWJDb21wb25lbnRcbiAgICAgIH1cbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhbmVsRW50cmllcyhcbiAgcGFuZWxTY2hlbWFzLFxuICBkYXRhUGF0aCA9IG51bGwsXG4gIHRhYkNvbXBvbmVudCA9IG51bGwsXG4gIHBhbmVsRW50cmllcyA9IFtdXG4pIHtcbiAgaWYgKHBhbmVsU2NoZW1hcykge1xuICAgIGZvciAoY29uc3QgW2tleSwgc2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhwYW5lbFNjaGVtYXMpKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IGdldFBhbmVsRW50cnkoXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgZGF0YVBhdGggIT0gbnVsbCA/IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBrZXkpIDogbnVsbCxcbiAgICAgICAgdGFiQ29tcG9uZW50XG4gICAgICApXG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgcGFuZWxFbnRyaWVzLnB1c2goZW50cnkpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBwYW5lbEVudHJpZXNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYlNjaGVtYXMoc2NoZW1hKSB7XG4gIHJldHVybiBzY2hlbWE/LnRhYnMgPyBPYmplY3QudmFsdWVzKHNjaGVtYS50YWJzKSA6IFtdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hKSB7XG4gIHJldHVybiBzY2hlbWE/LnBhbmVscyA/IE9iamVjdC52YWx1ZXMoc2NoZW1hLnBhbmVscykgOiBbXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsUGFuZWxFbnRyaWVzKFxuICBhcGksXG4gIHNjaGVtYSxcbiAgZGF0YVBhdGggPSBudWxsLFxuICBzY2hlbWFDb21wb25lbnQgPSBudWxsLFxuICB0YWJDb21wb25lbnQgPSBudWxsXG4pIHtcbiAgY29uc3QgcGFuZWxTY2hlbWEgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5nZXRQYW5lbFNjaGVtYT8uKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgZGF0YVBhdGgsXG4gICAgc2NoZW1hQ29tcG9uZW50XG4gIClcbiAgY29uc3QgcGFuZWxFbnRyaWVzID0gcGFuZWxTY2hlbWFcbiAgICA/IFtnZXRQYW5lbEVudHJ5KHBhbmVsU2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50KV1cbiAgICA6IFtdXG4gIC8vIEFsbG93IGVhY2ggY29tcG9uZW50IHRvIHByb3ZpZGUgaXRzIG93biBzZXQgb2YgcGFuZWxzLCBpblxuICAvLyBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBvbmUgKGUuZy4gZ2V0RmlsdGVyc1BhbmVsKCksICRmaWx0ZXJzKTpcbiAgZ2V0UGFuZWxFbnRyaWVzKHNjaGVtYT8ucGFuZWxzLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50LCBwYW5lbEVudHJpZXMpXG4gIHJldHVybiBwYW5lbEVudHJpZXNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0U291cmNlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpID09PSAnb2JqZWN0J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMaXN0U291cmNlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpID09PSAnbGlzdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pIHtcbiAgY29uc3QgaWQgPSBpdGVtW3NvdXJjZVNjaGVtYS5pZEtleSB8fCAnaWQnXVxuICByZXR1cm4gaWQgIT0gbnVsbCA/IFN0cmluZyhpZCkgOiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1VaWQoc291cmNlU2NoZW1hLCBpdGVtKSB7XG4gIC8vIFRyeSB0byB1c2UgdGhlIGl0ZW0gaWQgYXMgdGhlIHVpZCwgZmFsbGluZyBiYWNrIG9uIGF1dG8tZ2VuZXJhdGVkIGlkcywgYnV0XG4gIC8vIGVpdGhlciB3YXksIHBhc3MgdGhyb3VnaCBgZ2V0VWlkKClgIHNvIHRoYXQgdGhlIGlkcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZVxuICAvLyBpdGVtIHRocm91Z2ggYSB3ZWFrIG1hcCwgYXMgdGhlIGlkcyBjYW4gYmUgZmlsdGVyZWQgb3V0IGluIGBwcm9jZXNzRGF0YSgpYFxuICAvLyB3aGlsZSB0aGUgY29tcG9uZW50cyB0aGF0IHVzZSB0aGUgdWlkcyBhcyBrZXkgYXJlIHN0aWxsIHZpc2libGUuXG4gIHJldHVybiBnZXRVaWQoaXRlbSwgZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSkpXG59XG4iLCJpbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIHBpY2tCeSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNSZXNvdXJjZShzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0UmVzb3VyY2Uoc2NoZW1hLnJlc291cmNlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzb3VyY2UocmVzb3VyY2UsIGRlZmF1bHRzID0ge30pIHtcbiAgY29uc3QgeyBwYXJlbnQsIC4uLmRlZnMgfSA9IGRlZmF1bHRzXG4gIHJlc291cmNlID0gaXNPYmplY3QocmVzb3VyY2UpXG4gICAgPyB7IC4uLmRlZnMsIC4uLnJlc291cmNlIH1cbiAgICA6IGlzU3RyaW5nKHJlc291cmNlKVxuICAgICAgPyB7IC4uLmRlZnMsIHBhdGg6IHJlc291cmNlIH1cbiAgICAgIDogbnVsbFxuICAvLyBPbmx5IHNldCBwYXJlbnQgaWYgcGF0aCBkb2Vzbid0IHN0YXJ0IHdpdGggJy8nLCBzbyByZWxhdGl2ZSBVUkxzIGFyZVxuICAvLyBkZWFsdCB3aXRoIGNvcnJlY3RseS5cbiAgaWYgKFxuICAgIHJlc291cmNlICYmXG4gICAgcGFyZW50ICE9PSB1bmRlZmluZWQgJiZcbiAgICByZXNvdXJjZS5wYXJlbnQgPT09IHVuZGVmaW5lZCAmJlxuICAgICFyZXNvdXJjZS5wYXRoPy5zdGFydHNXaXRoKCcvJylcbiAgKSB7XG4gICAgcmVzb3VyY2UucGFyZW50ID0gcGFyZW50XG4gICAgaWYgKCFyZXNvdXJjZS5wYXRoKSB7XG4gICAgICByZXNvdXJjZS5wYXRoID0gJy4nXG4gICAgfVxuICB9XG4gIHJldHVybiByZXNvdXJjZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVtYmVyUmVzb3VyY2UoaWQsIHJlc291cmNlKSB7XG4gIHJldHVybiBpZCAhPSBudWxsICYmIHJlc291cmNlPy50eXBlID09PSAnY29sbGVjdGlvbidcbiAgICA/IHtcbiAgICAgICAgdHlwZTogJ21lbWJlcicsXG4gICAgICAgIC4uLnBpY2tCeShcbiAgICAgICAgICByZXNvdXJjZSxcbiAgICAgICAgICAodmFsdWUsIGtleSkgPT4gWydtZXRob2QnLCAncGF0aCcsICdwYXJlbnQnXS5pbmNsdWRlcyhrZXkpXG4gICAgICAgICksXG4gICAgICAgIGlkOiBgJHtpZH1gXG4gICAgICB9XG4gICAgOiBudWxsXG59XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNTdHJpbmcsXG4gIGlzRnVuY3Rpb24sXG4gIGVxdWFscyxcbiAgbGFiZWxpemUsXG4gIGh5cGhlbmF0ZSxcbiAgZm9ybWF0XG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgYXBwU3RhdGUgZnJvbSAnLi4vYXBwU3RhdGUuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRW1pdHRlck1peGluIGZyb20gJy4vRW1pdHRlck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hVmFsdWUsIHNob3VsZFJlbmRlclNjaGVtYSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgY29tcHV0ZWQsIHJlYWN0aXZlIH0gZnJvbSAndnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtFbWl0dGVyTWl4aW5dLFxuXG4gIGluamVjdDogW1xuICAgICdhcGknLFxuICAgICckdmVyYnMnLFxuICAgICckdmlld3MnLFxuICAgICckaXNQb3B1bGF0ZWQnLFxuICAgICckcGFyZW50Q29tcG9uZW50JyxcbiAgICAnJHNjaGVtYUNvbXBvbmVudCcsXG4gICAgJyRyb3V0ZUNvbXBvbmVudCcsXG4gICAgJyRkYXRhQ29tcG9uZW50JyxcbiAgICAnJHNvdXJjZUNvbXBvbmVudCcsXG4gICAgJyRyZXNvdXJjZUNvbXBvbmVudCcsXG4gICAgJyRkaWFsb2dDb21wb25lbnQnLFxuICAgICckcGFuZWxDb21wb25lbnQnLFxuICAgICckdGFiQ29tcG9uZW50J1xuICBdLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvdmlkZXNEYXRhXG4gICAgICA/IHtcbiAgICAgICAgICAkcGFyZW50Q29tcG9uZW50OiAoKSA9PiB0aGlzLFxuICAgICAgICAgICRkYXRhQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgICRwYXJlbnRDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICAgICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwcFN0YXRlLFxuICAgICAgb3ZlcnJpZGVzOiBudWxsIC8vIFNlZSBhY2Nlc3Nvci5qc1xuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIC8vIE5PVEU6IFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiBSZXNvdXJjZU1peGluLCB1c2VkIGJ5IGxpc3RzLlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIHNvdXJjZVNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGE/LnNjaGVtYVxuICAgIH0sXG5cbiAgICB1c2VyKCkge1xuICAgICAgcmV0dXJuIGFwcFN0YXRlLnVzZXJcbiAgICB9LFxuXG4gICAgLy8gJHZlcmJzLCAkdmVyYnMgYW5kICRpc1BvcHVsYXRlZCBhcmUgZGVmaW5lZCBhcyBmdW5jdGlvbnMsIHRvIHByZXNlcnZlXG4gICAgLy8gcmVhY3RpdmVuZXNzIGFjcm9zcyBwcm92aWRlL2luamVjdC5cbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUvaXNzdWVzLzcwMTcjaXNzdWVjb21tZW50LTQ4MDkwNjY5MVxuICAgIHZlcmJzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHZlcmJzKClcbiAgICB9LFxuXG4gICAgdmlld3MoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdmlld3MoKVxuICAgIH0sXG5cbiAgICBpc1BvcHVsYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRpc1BvcHVsYXRlZCgpXG4gICAgfSxcblxuICAgIGxvY2FsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwaS5sb2NhbGVcbiAgICB9LFxuXG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IGZhbHNlIH0pXG4gICAgfSxcblxuICAgIHJvb3RDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm9vdC4kcmVmcy5yb290XG4gICAgfSxcblxuICAgIC8vIFVzZSBjb21wdXRlZCBwcm9wZXJ0aWVzIGFzIGxpbmtzIHRvIGluamVjdHMsIHNvIERpdG9TY2hlbWEgY2FuXG4gICAgLy8gb3ZlcnJpZGUgdGhlIHByb3BlcnR5IGFuZCByZXR1cm4gYHRoaXNgIGluc3RlYWQgb2YgdGhlIHBhcmVudC5cbiAgICBwYXJlbnRDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFyZW50Q29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHNjaGVtYUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgZm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzRm9ybSA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgdmlld0NvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzVmlldyA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzLCBpbmNsdWRpbmdcbiAgICAvLyB0aGlzIGN1cnJlbnQgY29tcG9uZW50LCB0aGF0IGlzIGxpbmtlZCB0byBhIHJlc291cmNlIChhbmQgdGh1cyBsb2FkcyBpdHNcbiAgICAvLyBvd24gZGF0YSBhbmQgZG9lc24ndCBob2xkIG5lc3RlZCBkYXRhKS5cbiAgICBkYXRhQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvdmlkZXNEYXRhID8gdGhpcyA6IHRoaXMuJGRhdGFDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc291cmNlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kZGlhbG9nQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFuZWxDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdGFiQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFyZW50U2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50Py5wYXJlbnRDb21wb25lbnQuc2NoZW1hQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhcmVudFJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVDb21wb25lbnQ/LnBhcmVudENvbXBvbmVudC5yb3V0ZUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYXJlbnRGb3JtQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybUNvbXBvbmVudD8ucGFyZW50Q29tcG9uZW50LmZvcm1Db21wb25lbnRcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZGF0YSBvZiB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzXG4gICAgLy8gdGhhdCBsb2FkcyBpdHMgb3duIGRhdGEgZnJvbSBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZS5cbiAgICByb290RGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFDb21wb25lbnQ/LmRhdGFcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlQ3JlYXRlKCkge1xuICAgIGNvbnN0IHVpZCA9IG5leHRVaWQrK1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnJHVpZCcsIHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHVpZFxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGxhYmVsaXplLFxuXG4gICAgLy8gVGhlIHN0YXRlIG9mIGNvbXBvbmVudHMgaXMgb25seSBhdmFpbGFibGUgZHVyaW5nIHRoZSBsaWZlLWN5Y2xlIG9mIGFcbiAgICAvLyBjb21wb25lbnQuIFNvbWUgaW5mb3JtYXRpb24gd2UgbmVlZCBhdmFpbGFibGUgbG9uZ2VyIHRoYW4gdGhhdCwgZS5nLlxuICAgIC8vIGBxdWVyeWAgJiBgdG90YWxgIG9uIFR5cGVMaXN0LCBzbyB0aGF0IHdoZW4gdGhlIHVzZXIgbmF2aWdhdGVzIGJhY2sgZnJvbVxuICAgIC8vIGVkaXRpbmcgYW4gaXRlbSBpbiB0aGUgbGlzdCwgdGhlIHN0YXRlIG9mIHRoZSBsaXN0IGlzIHN0aWxsIHRoZSBzYW1lLlxuICAgIC8vIFdlIGNhbid0IHN0b3JlIHRoaXMgaW4gYGRhdGFgLCBhcyB0aGlzIGlzIGFscmVhZHkgdGhlIHB1cmUgZGF0YSBmcm9tIHRoZVxuICAgIC8vIEFQSSBzZXJ2ZXIuIFRoYXQncyB3aGF0IHRoZSBgc3RvcmVgIGlzIGZvcjogTWVtb3J5IHRoYXQncyBhdmFpbGFibGUgYXNcbiAgICAvLyBsb25nIGFzIHRoZSBjdXJyZW50IGVkaXRpbmcgcGF0aCBpcyBzdGlsbCB2YWxpZC4gRm9yIHR5cGUgY29tcG9uZW50cyxcbiAgICAvLyB0aGlzIG1lbW9yeSBpcyBwcm92aWRlZCBieSB0aGUgcGFyZW50LCBzZWUgUm91dGVNaXhpbiBhbmQgRGl0b1BhbmUuXG4gICAgZ2V0U3RvcmUoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5zdG9yZVtrZXldXG4gICAgfSxcblxuICAgIHNldFN0b3JlKGtleSwgdmFsdWUpIHtcbiAgICAgIHRoaXMuc3RvcmVba2V5XSA9IHZhbHVlXG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRTdG9yZShrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFN0b3JlKGtleSkgfHwgdGhpcy5zZXRTdG9yZShrZXksIHJlYWN0aXZlKHt9KSlcbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hVmFsdWUoXG4gICAgICBrZXlPckRhdGFQYXRoLFxuICAgICAgeyB0eXBlLCBzY2hlbWEgPSB0aGlzLnNjaGVtYSwgY2FsbGJhY2sgPSB0cnVlLCBkZWZhdWx0OiBkZWYgfSA9IHt9XG4gICAgKSB7XG4gICAgICByZXR1cm4gZ2V0U2NoZW1hVmFsdWUoa2V5T3JEYXRhUGF0aCwge1xuICAgICAgICB0eXBlLFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgICBjb250ZXh0OiB0aGlzLmNvbnRleHQsXG4gICAgICAgIGRlZmF1bHQ6IGlzRnVuY3Rpb24oZGVmKSA/ICgpID0+IGRlZi5jYWxsKHRoaXMpIDogZGVmXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRMYWJlbChzY2hlbWEsIG5hbWUpIHtcbiAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdsYWJlbCcsIHsgdHlwZTogU3RyaW5nLCBzY2hlbWEgfSkgfHxcbiAgICAgICAgICBsYWJlbGl6ZShuYW1lIHx8IHNjaGVtYS5uYW1lKVxuICAgICAgICA6IGxhYmVsaXplKG5hbWUpIHx8ICcnXG4gICAgfSxcblxuICAgIGdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2xhc3M6IGBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YCxcbiAgICAgICAgdGl0bGU6IGxhYmVsaXplKHZlcmIpXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSAqTGluaygpIHRvICpSb3V0ZSgpLlxuICAgIGdldFF1ZXJ5TGluayhxdWVyeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcXVlcnksXG4gICAgICAgIC8vIFByZXNlcnZlIGhhc2ggZm9yIHRhYnM6XG4gICAgICAgIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2hcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdWxkUmVuZGVyU2NoZW1hKHNjaGVtYSA9IG51bGwpIHtcbiAgICAgIHJldHVybiBzaG91bGRSZW5kZXJTY2hlbWEoc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIHNob3VsZFNob3coc2NoZW1hID0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3Zpc2libGUnLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgIHNjaGVtYVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2hvdWxkRGlzYWJsZShzY2hlbWEgPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZGlzYWJsZWQnLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICBzY2hlbWFcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlUGF0aChyZXNvdXJjZSkge1xuICAgICAgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZShyZXNvdXJjZSlcbiAgICAgIC8vIFJlc291cmNlcyB3aXRob3V0IGEgcGFyZW50IGluaGVyaXQgdGhlIG9uZSBmcm9tIGBkYXRhQ29tcG9uZW50YFxuICAgICAgLy8gYXV0b21hdGljYWxseS5cbiAgICAgIGlmIChyZXNvdXJjZS5wYXJlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXNvdXJjZS5wYXJlbnQgPSB0aGlzLmRhdGFDb21wb25lbnQ/LnJlc291cmNlXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hcGkucmVzb3VyY2VzLmFueShnZXRSZXNvdXJjZShyZXNvdXJjZSkpXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlVXJsKHJlc291cmNlKSB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFJlc291cmNlUGF0aChyZXNvdXJjZSlcbiAgICAgIHJldHVybiB1cmwgPyB0aGlzLmFwaS5nZXRBcGlVcmwoeyB1cmwsIHF1ZXJ5OiByZXNvdXJjZS5xdWVyeSB9KSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFJlcXVlc3QoeyBtZXRob2QsIHVybCwgcmVzb3VyY2UsIHF1ZXJ5LCBkYXRhLCBpbnRlcm5hbCB9KSB7XG4gICAgICB1cmwgfHw9IHRoaXMuZ2V0UmVzb3VyY2VQYXRoKHJlc291cmNlKVxuICAgICAgbWV0aG9kIHx8PSByZXNvdXJjZT8ubWV0aG9kXG4gICAgICBjb25zdCBjaGVja1VzZXIgPSAhaW50ZXJuYWwgJiYgdGhpcy5hcGkuaXNBcGlVcmwodXJsKVxuICAgICAgaWYgKGNoZWNrVXNlcikge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZW5zdXJlVXNlcigpXG4gICAgICB9XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYXBpLnJlcXVlc3QoeyBtZXRob2QsIHVybCwgZGF0YSwgcXVlcnkgfSlcbiAgICAgIC8vIERldGVjdCBjaGFuZ2Ugb2YgdGhlIG93biB1c2VyLCBhbmQgZmV0Y2ggaXQgYWdhaW4gaWYgaXQgd2FzIGNoYW5nZWQuXG4gICAgICBpZiAoXG4gICAgICAgIGNoZWNrVXNlciAmJlxuICAgICAgICBtZXRob2QgPT09ICdwYXRjaCcgJiZcbiAgICAgICAgZXF1YWxzKHJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLnVzZXIuaWQsIHRoaXMuYXBpLnVzZXJzKSlcbiAgICAgICkge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZmV0Y2hVc2VyKClcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNwb25zZVxuICAgIH0sXG5cbiAgICBzaG93RGlhbG9nKHsgY29tcG9uZW50cywgYnV0dG9ucywgZGF0YSwgc2V0dGluZ3MgfSkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdENvbXBvbmVudC5zaG93RGlhbG9nKHtcbiAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgYnV0dG9ucyxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgc2V0dGluZ3NcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHJlcXVlc3QoeyBjYWNoZSwgLi4ub3B0aW9ucyB9KSB7XG4gICAgICAvLyBBbGxvdyBjYWNoaW5nIG9mIGxvYWRlZCBkYXRhIG9uIHR3byBsZXZlbHM6XG4gICAgICAvLyAtICdnbG9iYWwnOiBjYWNoZSBnbG9iYWxseSwgZm9yIHRoZSBlbnRpcmUgYWRtaW4gc2Vzc2lvblxuICAgICAgLy8gLSAnbG9jYWwnOiBjYWNoZSBsb2NhbGx5IHdpdGhpbiB0aGUgY2xvc2VzdCByb3V0ZSBjb21wb25lbnQgdGhhdCBpc1xuICAgICAgLy8gICAgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UgYW5kIGxvYWRzIGl0cyBvd24gZGF0YS5cbiAgICAgIGNvbnN0IGNhY2hlUGFyZW50ID0gKFxuICAgICAgICBjYWNoZSAmJlxuICAgICAgICB7XG4gICAgICAgICAgZ2xvYmFsOiB0aGlzLmFwcFN0YXRlLFxuICAgICAgICAgIGxvY2FsOiB0aGlzLmRhdGFDb21wb25lbnRcbiAgICAgICAgfVtjYWNoZV1cbiAgICAgIClcbiAgICAgIGNvbnN0IGxvYWRDYWNoZSA9IGNhY2hlUGFyZW50Py5sb2FkQ2FjaGVcbiAgICAgIC8vIEJ1aWxkIGEgY2FjaGUga2V5IGZyb20gdGhlIGNvbmZpZzpcbiAgICAgIGNvbnN0IGNhY2hlS2V5ID0gKFxuICAgICAgICBsb2FkQ2FjaGUgJiZcbiAgICAgICAgYCR7XG4gICAgICAgICAgb3B0aW9ucy5tZXRob2QgfHwgJ2dldCdcbiAgICAgICAgfSAke1xuICAgICAgICAgIG9wdGlvbnMudXJsXG4gICAgICAgIH0gJHtcbiAgICAgICAgICAvLyBUT0RPOiBgcmVxdWVzdC5wYXJhbXNgIHdhcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBgcXVlcnlgIG9uXG4gICAgICAgICAgLy8gMjAyMi0xMS0wMSwgcmVtb3ZlIG9uY2Ugbm90IGluIHVzZSBhbnl3aGVyZSBhbnkgbW9yZS5cbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShvcHRpb25zLnF1ZXJ5IHx8IG9wdGlvbnMucGFyYW1zIHx8ICcnKVxuICAgICAgICB9ICR7XG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5kYXRhIHx8ICcnKVxuICAgICAgICB9YFxuICAgICAgKVxuICAgICAgaWYgKGxvYWRDYWNoZSAmJiAoY2FjaGVLZXkgaW4gbG9hZENhY2hlKSkge1xuICAgICAgICByZXR1cm4gbG9hZENhY2hlW2NhY2hlS2V5XVxuICAgICAgfVxuICAgICAgLy8gTk9URTogTm8gYXdhaXQgaGVyZSwgcmVzIGlzIGEgcHJvbWlzZSB0aGF0IHdlIGNhbiBlYXNpbHkgY2FjaGUuXG4gICAgICAvLyBUaGF0J3MgZmluZSBiZWNhdXNlIHByb21pc2VzIGNhbiBiZSByZXNvbHZlZCBvdmVyIGFuZCBvdmVyIGFnYWluLlxuICAgICAgY29uc3QgcmVzID0gdGhpcy5zZW5kUmVxdWVzdChvcHRpb25zKVxuICAgICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5kYXRhKVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIC8vIENvbnZlcnQgYXhpb3MgZXJyb3JzIHRvIG5vcm1hbCBlcnJvcnNcbiAgICAgICAgICBjb25zdCBkYXRhID0gZXJyb3IucmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICB0aHJvdyBkYXRhXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKGRhdGEubWVzc2FnZSksIGRhdGEpXG4gICAgICAgICAgICA6IGVycm9yXG4gICAgICAgIH0pXG4gICAgICBpZiAobG9hZENhY2hlKSB7XG4gICAgICAgIGxvYWRDYWNoZVtjYWNoZUtleV0gPSByZXNcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9LFxuXG4gICAgZm9ybWF0KHZhbHVlLCB7XG4gICAgICBsb2NhbGUgPSB0aGlzLmFwaS5sb2NhbGUsXG4gICAgICBkZWZhdWx0cyA9IHRoaXMuYXBpLmZvcm1hdHMsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gZm9ybWF0KHZhbHVlLCB7XG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgZGVmYXVsdHMsXG4gICAgICAgIC4uLm9wdGlvbnNcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIG5hdmlnYXRlKGxvY2F0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGVyLnB1c2gobG9jYXRpb24pXG4gICAgfSxcblxuICAgIGRvd25sb2FkKG9wdGlvbnMgPSB7fSkge1xuICAgICAgaWYgKGlzU3RyaW5nKG9wdGlvbnMpKSB7XG4gICAgICAgIG9wdGlvbnMgPSB7IHVybDogb3B0aW9ucyB9XG4gICAgICB9XG4gICAgICAvLyBTZWU6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80OTkxNzA2Ni8xMTYzNzA4XG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG4gICAgICBhLmhyZWYgPSB0aGlzLmFwaS5nZXRBcGlVcmwob3B0aW9ucylcbiAgICAgIGEuZG93bmxvYWQgPSBvcHRpb25zLmZpbGVuYW1lID8/IG51bGxcbiAgICAgIGNvbnN0IHsgYm9keSB9ID0gZG9jdW1lbnRcbiAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSlcbiAgICAgIGEuY2xpY2soKVxuICAgICAgYm9keS5yZW1vdmVDaGlsZChhKVxuICAgIH0sXG5cbiAgICBub3RpZnkob3B0aW9ucykge1xuICAgICAgdGhpcy5yb290Q29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgIH0sXG5cbiAgICBjbG9zZU5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICB0aGlzLnJvb3RDb21wb25lbnQuY2xvc2VOb3RpZmljYXRpb25zKClcbiAgICB9LFxuXG4gICAgc2V0dXBTY2hlbWFGaWVsZHMoKSB7XG4gICAgICB0aGlzLnNldHVwTWV0aG9kcygpXG4gICAgICB0aGlzLnNldHVwQ29tcHV0ZWQoKVxuICAgICAgdGhpcy5zZXR1cEV2ZW50cygpXG4gICAgfSxcblxuICAgIHNldHVwTWV0aG9kcygpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLm1ldGhvZHMgfHwge30pKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICAgIHRoaXNba2V5XSA9IHZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBtZXRob2QgZGVmaW5pdGlvbjogJHtrZXl9OiAke3ZhbHVlfWApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0dXBDb21wdXRlZCgpIHtcbiAgICAgIGNvbnN0IGdldENvbXB1dGVkQWNjZXNzb3IgPSAoeyBnZXQsIHNldCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGdldHRlciA9IGNvbXB1dGVkKCgpID0+IGdldC5jYWxsKHRoaXMpKVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGdldDogKCkgPT4gZ2V0dGVyLnZhbHVlLFxuICAgICAgICAgIHNldDogc2V0ID8gdmFsdWUgPT4gc2V0LmNhbGwodGhpcywgdmFsdWUpIDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBba2V5LCBpdGVtXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5jb21wdXRlZCB8fCB7fSkpIHtcbiAgICAgICAgY29uc3QgYWNjZXNzb3IgPSBpc0Z1bmN0aW9uKGl0ZW0pXG4gICAgICAgICAgPyBnZXRDb21wdXRlZEFjY2Vzc29yKHsgZ2V0OiBpdGVtIH0pXG4gICAgICAgICAgOiBpc09iamVjdChpdGVtKSAmJiBpc0Z1bmN0aW9uKGl0ZW0uZ2V0KVxuICAgICAgICAgICAgPyBnZXRDb21wdXRlZEFjY2Vzc29yKGl0ZW0pXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgaWYgKGFjY2Vzc29yKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGtleSwgYWNjZXNzb3IpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBJbnZhbGlkIGNvbXB1dGVkIHByb3BlcnR5IGRlZmluaXRpb246ICR7a2V5fTogJHtpdGVtfWBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0dXBFdmVudHMoKSB7XG4gICAgICBjb25zdCB7IHdhdGNoLCBldmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAod2F0Y2gpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBpc0Z1bmN0aW9uKHdhdGNoKSA/IHdhdGNoLmNhbGwodGhpcykgOiB3YXRjaFxuICAgICAgICBpZiAoaXNPYmplY3QoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgLy8gSW5zdGFsbCB0aGUgd2F0Y2ggaGFuZGxlcnMgaW4gdGhlIG5leHQgdGljaywgc28gYWxsIGNvbXBvbmVudHMgYXJlXG4gICAgICAgICAgLy8gaW5pdGlhbGl6ZWQgYW5kIHdlIGNhbiBjaGVjayBhZ2FpbnN0IHRoZWlyIG5hbWVzLlxuICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgY2FsbGJhY2tdIG9mIE9iamVjdC5lbnRyaWVzKGhhbmRsZXJzKSkge1xuICAgICAgICAgICAgICAvLyBFeHBhbmQgcHJvcGVydHkgbmFtZXMgdG8gJ2RhdGEucHJvcGVydHknOlxuICAgICAgICAgICAgICBjb25zdCBleHByID0gdGhpcy5zY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlOYW1lKGtleSlcbiAgICAgICAgICAgICAgICA/IGBkYXRhLiR7a2V5fWBcbiAgICAgICAgICAgICAgICA6IGtleVxuICAgICAgICAgICAgICB0aGlzLiR3YXRjaChleHByLCBjYWxsYmFjaylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFkZEV2ZW50ID0gKGtleSwgZXZlbnQsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICAgIHRoaXMub24oaHlwaGVuYXRlKGV2ZW50KSwgY2FsbGJhY2spXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBldmVudCBkZWZpbml0aW9uOiAke2tleX06ICR7Y2FsbGJhY2t9YClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV2ZW50cykpIHtcbiAgICAgICAgICBhZGRFdmVudChrZXksIGtleSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEFsc28gc2NhbiBzY2hlbWEgZm9yIGBvbltBLVpdYC1zdHlsZSBjYWxsYmFja3MgYW5kIGFkZCB0aGVtXG4gICAgICAvLyBUT0RPOiBEZXByZWNhdGUgb25lIGZvcm1hdCBvciB0aGUgb3RoZXIsIGluIGZhdm91ciBvZiBvbmx5IG9uZSB3YXkgb2ZcbiAgICAgIC8vIGRvaW5nIHRoaW5ncy4gRGVjaWRlIHdoaWNoIG9uZSB0byByZW1vdmUuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYSkpIHtcbiAgICAgICAgaWYgKC9eb25bQS1aXS8udGVzdChrZXkpKSB7XG4gICAgICAgICAgYWRkRXZlbnQoa2V5LCBrZXkuc2xpY2UoMiksIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGVtaXRFdmVudChldmVudCwge1xuICAgICAgY29udGV4dCA9IG51bGwsXG4gICAgICBwYXJlbnQgPSBudWxsXG4gICAgfSA9IHt9KSB7XG4gICAgICBjb25zdCBoYXNMaXN0ZW5lcnMgPSB0aGlzLmhhc0xpc3RlbmVycyhldmVudClcbiAgICAgIGNvbnN0IHBhcmVudEhhc0xpc3RlbmVycyA9IHBhcmVudD8uaGFzTGlzdGVuZXJzKGV2ZW50KVxuICAgICAgaWYgKGhhc0xpc3RlbmVycyB8fCBwYXJlbnRIYXNMaXN0ZW5lcnMpIHtcbiAgICAgICAgLy8gVGhlIGVmZmVjdHMgb2Ygc29tZSBldmVudHMgbmVlZCBzb21lIHRpbWUgdG8gcHJvcGFnYXRlIHRocm91Z2ggVnVlLlxuICAgICAgICAvLyBVc2UgJG5leHRUaWNrKCkgdG8gbWFrZSBzdXJlIG91ciBoYW5kbGVycyBzZWUgdGhlc2UgY2hhbmdlcy5cbiAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGBwcm9jZXNzZWRJdGVtYCBpcyBvbmx5IGNvcnJlY3QgYWZ0ZXIgY29tcG9uZW50cyB0aGF0XG4gICAgICAgIC8vIGFyZSBuZXdseSByZW5kZXJlZCBkdWUgdG8gZGF0YSBjaGFuZ2VzIGhhdmUgcmVnaXN0ZXJlZCB0aGVtc2VsdmVzLlxuICAgICAgICBpZiAoWydsb2FkJywgJ2NoYW5nZSddLmluY2x1ZGVzKGV2ZW50KSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuJG5leHRUaWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdldENvbnRleHQgPSAoKSA9PiAoY29udGV4dCA9IERpdG9Db250ZXh0LmdldCh0aGlzLCBjb250ZXh0KSlcbiAgICAgICAgY29uc3QgcmVzID0gaGFzTGlzdGVuZXJzXG4gICAgICAgICAgPyBhd2FpdCB0aGlzLmVtaXQoZXZlbnQsIGdldENvbnRleHQoKSlcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAvLyBEb24ndCBidWJibGUgdG8gcGFyZW50IGlmIGhhbmRsZWQgZXZlbnQgcmV0dXJuZWQgYGZhbHNlYFxuICAgICAgICBpZiAocGFyZW50SGFzTGlzdGVuZXJzICYmIHJlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBwYXJlbnQuZW1pdChldmVudCwgZ2V0Q29udGV4dCgpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZW1pdFNjaGVtYUV2ZW50KGV2ZW50LCBwYXJhbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudC5lbWl0RXZlbnQoZXZlbnQsIHBhcmFtcylcbiAgICB9XG4gIH1cbn1cblxubGV0IG5leHRVaWQgPSAwXG4iLCIvLyBBIG1pbmktcmVwbGljYXRpb24gb2YgdnVlJ3MgaW50ZXJuYWwgYHJlc29sdmVNZXJnZWRPcHRpb25zKClgIGJ1dCBvbmx5XG4vLyBoYW5kbGluZyBvdXIgb3duIGFkZGVkIG9wdGlvbnMgcHJvcGVydGllcyBhbmQgbWVyZ2luZyB0aGVtIGVhcmx5IGluc3RlYWRcbi8vIG9mIGxhemlseS5cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVNZXJnZWRPcHRpb25zKG9wdGlvbnMpIHtcbiAgY29uc3QgeyBtaXhpbnMgfSA9IG9wdGlvbnNcbiAgcmV0dXJuIG1peGlucyB8fCBvcHRpb25zLmV4dGVuZHNcbiAgICA/IG1lcmdlT3B0aW9ucyhcbiAgICAgICAgeyAuLi5vcHRpb25zIH0sXG4gICAgICAgIG9wdGlvbnNcbiAgICAgIClcbiAgICA6IG9wdGlvbnNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlT3B0aW9ucyh0bywgZnJvbSkge1xuICBpZiAoZnJvbS5leHRlbmRzKSB7XG4gICAgbWVyZ2VPcHRpb25zKHRvLCBmcm9tLmV4dGVuZHMpXG4gIH1cbiAgaWYgKGZyb20ubWl4aW5zKSB7XG4gICAgZm9yIChjb25zdCBtaXhpbiBvZiBmcm9tLm1peGlucykge1xuICAgICAgbWVyZ2VPcHRpb25zKHRvLCBtaXhpbilcbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBrZXkgb2YgZGl0b09wdGlvbktleXMpIHtcbiAgICBpZiAoa2V5IGluIGZyb20pIHtcbiAgICAgIHRvW2tleV0gPSBmcm9tW2tleV1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRvXG59XG5cbmNvbnN0IGRpdG9PcHRpb25LZXlzID0gW1xuICAnZGVmYXVsdFZhbHVlJyxcbiAgJ2RlZmF1bHROZXN0ZWQnLFxuICAnZGVmYXVsdFZpc2libGUnLFxuICAnZ2VuZXJhdGVMYWJlbCcsXG4gICdleGNsdWRlVmFsdWUnLFxuICAnaWdub3JlTWlzc2luZ1ZhbHVlJyxcbiAgJ2tlZXBBbGlnbmVkJyxcbiAgJ29taXRQYWRkaW5nJyxcbiAgJ3Byb2Nlc3NWYWx1ZScsXG4gICdwcm9jZXNzU2NoZW1hJyxcbiAgJ2dldFBhbmVsU2NoZW1hJyxcbiAgJ2dldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZycsXG4gIC8vIFZ1ZSAzIC8gVnVlLXJvdXRlciA0IGZvcmdldHMgdGhlc2UuXG4gIC8vIFRPRE86IENyZWF0ZSBidWctcmVwb3J0P1xuICAnYmVmb3JlUm91dGVVcGRhdGUnLFxuICAnYmVmb3JlUm91dGVMZWF2ZSdcbl1cbiIsImltcG9ydCBEaXRvTWl4aW4gZnJvbSAnLi9taXhpbnMvRGl0b01peGluLmpzJ1xuaW1wb3J0IHsgZ2V0VHlwZUNvbXBvbmVudCB9IGZyb20gJy4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgcmVzb2x2ZU1lcmdlZE9wdGlvbnMgfSBmcm9tICcuL3V0aWxzL29wdGlvbnMuanMnXG5pbXBvcnQgeyBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuY29uc3QgY29tcG9uZW50cyA9IHt9XG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0RpdG9NaXhpbl0sXG4gIC8vIE1ha2Ugc3VyZSB0aGF0IHJlZ2lzdGVyZWQgY29tcG9uZW50cyBhcmUgcHJlc2VudCBpbiBhbGwgRGl0b0NvbXBvbmVudC5cbiAgY29tcG9uZW50cyxcblxuICBjb21wb25lbnQobmFtZSwgZGVmaW5pdGlvbikge1xuICAgIGlmIChkZWZpbml0aW9uKSB7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChkZWZpbml0aW9uKSkge1xuICAgICAgICBkZWZpbml0aW9uID0gcmVzb2x2ZU1lcmdlZE9wdGlvbnMoe1xuICAgICAgICAgIGV4dGVuZHM6IHRoaXMsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICAuLi5kZWZpbml0aW9uXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBjb21wb25lbnRzW25hbWVdID0gZGVmaW5pdGlvblxuICAgIH1cbiAgICBpZiAoIShuYW1lIGluIGNvbXBvbmVudHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBvbmVudCBcIiR7bmFtZX1cIiBub3QgcmVnaXN0ZXJlZGApXG4gICAgfVxuICAgIHJldHVybiBjb21wb25lbnRzW25hbWVdXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFR5cGVDb21wb25lbnRcbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b1VzZXIge1xuICBoYXNSb2xlKC4uLnJvbGVzKSB7XG4gICAgaWYgKHRoaXMucm9sZXMpIHtcbiAgICAgIGZvciAoY29uc3Qgcm9sZSBvZiByb2xlcykge1xuICAgICAgICBpZiAodGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NoZW1hQ29tcG9uZW50czogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtYWluU2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50c1swXVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGBEaXRvU2NoZW1hLmNyZWF0ZWQoKS91bm1vdW50ZWQoKWAgb24gaXRzXG4gICAgLy8gYCRzY2hlbWFQYXJlbnRDb21wb25lbnRgLCBpZiB0aGUgcGFyZW50IHVzZXMgdGhlIGBTY2hlbWFQYXJlbnRNaXhpbmA6XG4gICAgX3JlZ2lzdGVyU2NoZW1hQ29tcG9uZW50KHNjaGVtYUNvbXBvbmVudCwgYWRkKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudHMgfSA9IHRoaXNcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50cy5wdXNoKHNjaGVtYUNvbXBvbmVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudHMuc3BsaWNlKHNjaGVtYUNvbXBvbmVudHMuaW5kZXhPZihzY2hlbWFDb21wb25lbnQpLCAxKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFNjaGVtYVBhcmVudE1peGluIGZyb20gJy4vU2NoZW1hUGFyZW50TWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1NjaGVtYVBhcmVudE1peGluXSxcblxuICBjb21wdXRlZDoge1xuICAgIGVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMucmVkdWNlKFxuICAgICAgICAocmVzdWx0LCB7IGVycm9ycyB9KSA9PlxuICAgICAgICAgIGVycm9ycyAmJiByZXN1bHQgPyByZXN1bHQuY29uY2F0KGVycm9ycykgOiBlcnJvcnMsXG4gICAgICAgIG51bGxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNUb3VjaGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5zb21lKGl0ID0+IGl0LmlzVG91Y2hlZClcbiAgICB9LFxuXG4gICAgaXNEaXJ0eSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuc29tZShpdCA9PiBpdC5pc0RpcnR5KVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHZhbGlkYXRlQWxsKG1hdGNoLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LnZhbGlkYXRlQWxsKG1hdGNoLCBub3RpZnkpKVxuICAgIH0sXG5cbiAgICB2ZXJpZnlBbGwobWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQudmVyaWZ5QWxsKG1hdGNoKSlcbiAgICB9LFxuXG4gICAgcmVzZXRWYWxpZGF0aW9uKCkge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnRzLmZvckVhY2goaXQgPT4gaXQucmVzZXRWYWxpZGF0aW9uKCkpXG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnRzLmZvckVhY2goaXQgPT4gaXQuY2xlYXJFcnJvcnMoKSlcbiAgICB9LFxuXG4gICAgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cykge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnRzLmZvckVhY2goXG4gICAgICAgIGl0ID0+IGl0LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpXG4gICAgICApXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgVmFsaWRhdG9yTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0Q29tbW9uUHJlZml4IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbVmFsaWRhdG9yTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRyb3V0ZUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICByZWxvYWQ6IGZhbHNlLFxuICAgICAgLy8gRWFjaCByb3V0ZS1jb21wb25lbnQgZGVmaW5lcyBhIHN0b3JlIHRoYXQgZ2V0cyBwYXNzZWQgb24gdG8gaXRzXG4gICAgICAvLyBjaGlsZCBjb21wb25lbnRzLCBzbyB0aGV5IGNhbiBzdG9yZSB2YWx1ZXMgaW4gdGhlbSB0aGF0IGxpdmUgYmV5b25kXG4gICAgICAvLyB0aGVpciBsaWZlLWN5Y2xlLiBTZWU6IERpdG9QYW5lLCBTb3VyY2VNaXhpblxuICAgICAgc3RvcmU6IHt9LFxuICAgICAgbG9hZENhY2hlOiB7fSAvLyBTZWUgVHlwZU1peGluLmxvYWQoKVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgLy8gT3ZlcnJpZGUgRGl0b01peGluJ3Mgcm91dGVDb21wb25lbnQoKSB3aGljaCB1c2VzIHRoZSBpbmplY3RlZCB2YWx1ZS5cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHJvdXRlTGV2ZWwoKSB7XG4gICAgICBsZXQgbGV2ZWwgPSAwXG4gICAgICBsZXQgcm91dGVDb21wb25lbnQgPSB0aGlzXG4gICAgICB3aGlsZSAoKHJvdXRlQ29tcG9uZW50ID0gcm91dGVDb21wb25lbnQucGFyZW50Q29tcG9uZW50LnJvdXRlQ29tcG9uZW50KSkge1xuICAgICAgICBsZXZlbCsrXG4gICAgICB9XG4gICAgICByZXR1cm4gbGV2ZWxcbiAgICB9LFxuXG4gICAgcm91dGVSZWNvcmQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUubWF0Y2hlZFt0aGlzLnJvdXRlTGV2ZWxdXG4gICAgfSxcblxuICAgIGlzTGFzdFJvdXRlKCkge1xuICAgICAgLy8gUmV0dXJucyB0cnVlIHdoZW4gdGhpcyByb3V0ZXIgY29tcG9uZW50IGlzIHRoZSBsYXN0IG9uZSBpbiB0aGUgcm91dGUuXG4gICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZCA9PT0gbWF0Y2hlZFttYXRjaGVkLmxlbmd0aCAtIDFdXG4gICAgfSxcblxuICAgIGlzTGFzdFVubmVzdGVkUm91dGUoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyByb3V0ZSBjb21wb25lbnQgaXMgdGhlIGxhc3Qgb25lIGluIHRoZSByb3V0ZSB0aGF0XG4gICAgICAvLyBuZWVkcyBpdHMgb3duIHJvdXRlci12aWV3ICg9IGlzIG5vdCBuZXN0ZWQpLlxuICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgZm9yIChsZXQgaSA9IG1hdGNoZWQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gbWF0Y2hlZFtpXVxuICAgICAgICBpZiAoIXJlY29yZC5tZXRhLm5lc3RlZCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkID09PSByZWNvcmRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGlzTmVzdGVkUm91dGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhLm5lc3RlZFxuICAgIH0sXG5cbiAgICBpc1ZpZXcoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgbWV0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkPy5tZXRhXG4gICAgfSxcblxuICAgIHBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSb3V0ZVBhdGgodGhpcy5yb3V0ZVJlY29yZC5wYXRoKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iKCkge1xuICAgICAgY29uc3QgeyBicmVhZGNydW1iIH0gPSB0aGlzLnNjaGVtYSB8fCB7fVxuICAgICAgcmV0dXJuIGJyZWFkY3J1bWIgfHwgYCR7dGhpcy5icmVhZGNydW1iUHJlZml4fSAke3RoaXMubGFiZWx9YFxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfSxcblxuICAgIHBhcmFtKCkge1xuICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdnVlLXJvdXRlciBub3QgYmVpbmcgYWJsZSB0byBtYXAgbXVsdGlwbGUgdXJsIHBhcmFtZXRlcnNcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgbmFtZSB0byBtdWx0aXBsZSBjb21wb25lbnRzLCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhcmFtc1t0aGlzLm1ldGE/LnBhcmFtXSB8fCBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZSwgc2VlIERpdG9Gb3JtXG4gICAgaXNNdXRhdGluZygpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVSb3V0ZVVwZGF0ZSh0bywgZnJvbSwgbmV4dCkge1xuICAgIHRoaXM/LmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGJlZm9yZVJvdXRlTGVhdmUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzPy5iZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dClcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIEtlZXAgYSBzaGFyZWQgc3RhY2sgb2Ygcm9vdCBjb21wb25lbnRzIGZvciBEaXRvVHJhaWwgdG8gdXNlIHRvIHJlbmRlclxuICAgIC8vIGxhYmVscy4gQ2FuJ3QgcmVseSBvbiAkcm91dGUubWF0Y2hlZFtpXS5pbnN0YW5jZXMuZGVmYXVsdCB1bmZvcnR1bmF0ZWx5LFxuICAgIC8vIGFzIGluc3RhbmNlcyBhcmVuJ3QgaW1tZWRpYXRlbHkgcmVhZHksIGFuZCBpbnN0YW5jZXMgaXMgbm90IHJlYWN0aXZlLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLnB1c2godGhpcylcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICByb3V0ZUNvbXBvbmVudHMuc3BsaWNlKHJvdXRlQ29tcG9uZW50cy5pbmRleE9mKHRoaXMpLCAxKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBiZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dCkge1xuICAgICAgbGV0IG9rID0gdHJ1ZVxuICAgICAgY29uc3QgaXNDbG9zaW5nID0gKFxuICAgICAgICAvLyBPbmx5IGhhbmRsZSB0aGlzIHJvdXRlIGNoYW5nZSBpZiB0aGUgZm9ybSBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlXG4gICAgICAgIC8vIGBmcm9tYCByb3V0ZSwgYnV0IGluY2x1ZGUgcGFyZW50IGZvcm1zIG9mIGNsb3NpbmcgbmVzdGVkIGZvcm1zIGFzIGFzXG4gICAgICAgIC8vIHdlbGwsIGJ5IG1hdGNoaW5nIHRoZSB0aGUgc3RhcnQgb2YgZnJvbS90byBwYXRoIGFnYWluc3QgYHRoaXMucGF0aGA6XG4gICAgICAgIGZyb20ucGF0aC5zdGFydHNXaXRoKHRoaXMucGF0aCkgJiZcbiAgICAgICAgIXRvLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgIC8vIEV4Y2x1ZGUgaGFzaCBjaGFuZ2VzIG9ubHkgKD0gdGFiIGNoYW5nZXMpOlxuICAgICAgICBmcm9tLnBhdGggIT09IHRvLnBhdGggJiYgKFxuICAgICAgICAgIHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHx8XG4gICAgICAgICAgLy8gRGVjaWRlIGlmIHdlJ3JlIG1vdmluZyB0b3dhcmRzIGEgbmV3IG5lc3RlZCBmb3JtLCBvciBjbG9zaW5nIC9cbiAgICAgICAgICAvLyByZXBsYWNpbmcgYW4gYWxyZWFkeSBvcGVuIG9uZSBieSBjb21wYXJpbmcgcGF0aCBsZW5ndGhzLlxuICAgICAgICAgIC8vIFRoZSBjYXNlIG9mIGA9YCBtYXRjaGVzIHRoZSByZXBsYWNpbmcgb2YgYW4gYWxyZWFkeSBvcGVuIG9uZS5cbiAgICAgICAgICB0by5wYXRoLmxlbmd0aCA8PSBmcm9tLnBhdGgubGVuZ3RoXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIGlmIChpc0Nsb3NpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNdXRhdGluZykge1xuICAgICAgICAgIC8vIEZvciBhY3RpdmUgZGlyZWN0bHkgbXV0YXRpbmcgKG5lc3RlZCkgZm9ybXMgdGhhdCB3ZXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgICAgICAvLyB5ZXQsIHZhbGlkYXRlIHRoZW0gb25jZS4gSWYgdGhlIHVzZXIgdGhlbiBzdGlsbCB3YW50cyB0byBsZWF2ZVxuICAgICAgICAgIC8vIHRoZW0sIHRoZXkgY2FuIGNsaWNrIGNsb3NlIC8gbmF2aWdhdGUgYXdheSBhZ2Fpbi5cbiAgICAgICAgICBvayA9IChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgfHxcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBbGwoKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGUgZm9ybSBkb2Vzbid0IGRpcmVjdGx5IG11dGF0ZSBkYXRhLiBJZiBpdCBpcyBkaXJ0eSwgYXNrIGlmIHVzZXJcbiAgICAgICAgICAvLyB3YW50cyB0byBwZXJzaXN0IGRhdGEgZmlyc3QuXG4gICAgICAgICAgaWYgKHRoaXMuaXNEaXJ0eSkge1xuICAgICAgICAgICAgb2sgPSB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICAgICAgYFlvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gRG8geW91IHJlYWxseSB3YW50IHRvICR7XG4gICAgICAgICAgICAgICAgdGhpcy52ZXJicy5jYW5jZWxcbiAgICAgICAgICAgICAgfT9gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0KG9rKVxuICAgIH0sXG5cbiAgICBnZXRSb3V0ZVBhdGgodGVtcGxhdGVQYXRoKSB7XG4gICAgICAvLyBNYXBzIHRoZSByb3V0ZSdzIGFjdHVhbCBwYXRoIHRvIHRoZSBtYXRjaGVkIHJvdXRlcyBieSBjb3VudGluZyBpdHNcbiAgICAgIC8vIHBhcnRzIHNlcGFyYXRlZCBieSAnLycsIHNwbGl0dGluZyB0aGUgcGF0aCBpbnRvIHRoZSBtYXBwZWQgcGFydHNcbiAgICAgIC8vIGNvbnRhaW5pbmcgYWN0dWFsIHBhcmFtZXRlcnMuXG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucGF0aFxuICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAuc2xpY2UoMCwgdGVtcGxhdGVQYXRoLnNwbGl0KCcvJykubGVuZ3RoKVxuICAgICAgICAuam9pbignLycpXG4gICAgfSxcblxuICAgIGdldENoaWxkUGF0aChwYXRoKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBpc0Z1bGxSb3V0ZUNoYW5nZSh0bywgZnJvbSkge1xuICAgICAgLy8gVGhlIHJvdXRlIHBhdGggaXMgdGhlIHBhdGggdXAgdG8gdGhlIGZpcnN0IC8gKGV4Y2x1ZGluZyB0aGUgaW5pdGlhbCAvKTpcbiAgICAgIGNvbnN0IHJvb3RQYXRoID0gdGhpcy5wYXRoLm1hdGNoKC9eKFxcL1teL10qKS8pWzFdXG4gICAgICByZXR1cm4gIWdldENvbW1vblByZWZpeCh0by5wYXRoLCBmcm9tLnBhdGgpLnN0YXJ0c1dpdGgocm9vdFBhdGgpXG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudGVtcGxhdGUoXG4gIHYtaWY9XCJ1c2VyXCJcbilcbiAgLy8tIE9ubHkgcmVuZGVyIERpdG9WaWV3IHdoZW4gaXQgaXMgYWN0aXZlLCBvdGhlcndpc2UgYSBub3JtYWwgcm91dGVyLXZpZXdcbiAgLy8tIGluc3RlYWQsIHRvIG5lc3QgZnVydGhlciByb3V0ZSBjb21wb25lbnRzLlxuICAvLy0gTk9URTogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgaGFuZGxpbmcgaW4gRGl0b0Zvcm0sIHdoZXJlIGB2LXNob3dgIGlzXG4gIC8vLSB1c2VkIHRvIGFsd2F5cyByZW5kZXIgZm9ybXMgZXZlbiB3aGVuIG90aGVyIG5lc3RlZCBmb3JtcyBhcmUgcHJlc2VudC5cbiAgUm91dGVyVmlldyhcbiAgICB2LWlmPVwiIWlzTGFzdFJvdXRlXCJcbiAgICA6a2V5PVwibmFtZVwiXG4gIClcbiAgLmRpdG8tdmlldy5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gICAgdi1lbHNlLWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKHZpZXdTY2hlbWEpXCJcbiAgICA6ZGF0YS1yZXNvdXJjZT1cInNvdXJjZVNjaGVtYS5wYXRoXCJcbiAgKVxuICAgIERpdG9TY2hlbWEoXG4gICAgICA6c2NoZW1hPVwidmlld1NjaGVtYVwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUobmFtZSlcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIHNjcm9sbGFibGVcbiAgICAgIGhlYWRlckluTWVudVxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJvdXRlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1JvdXRlTWl4aW4uanMnXG5pbXBvcnQge1xuICBpc1NpbmdsZUNvbXBvbmVudFZpZXcsXG4gIHNvbWVOZXN0ZWRTY2hlbWFDb21wb25lbnRcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgaGFzUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVmlldycsIHtcbiAgbWl4aW5zOiBbUm91dGVNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICAvLyBSZWRpcmVjdCAkc291cmNlQ29tcG9uZW50IGFuZCAkcmVzb3VyY2VDb21wb25lbnQgdG8gdGhlIG1haW4gY29tcG9uZW50OlxuICAgIHJldHVybiB7XG4gICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzLm1haW5Db21wb25lbnQ/LnNvdXJjZUNvbXBvbmVudCB8fCBudWxsLFxuICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzLm1haW5Db21wb25lbnQ/LnJlc291cmNlQ29tcG9uZW50IHx8IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gVXBkYXRlZCBmcm9tIExvYWRpbmdNaXhpbiB0aHJvdWdoIGBzZXRMb2FkaW5nKGlzTG9hZGluZylgOlxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIC8vIE5PVEU6IERhdGEgaXMgc2hhcmVkIGFjcm9zcyBhbGwgdmlld3MgYmVjYXVzZSB0aGUgcm91dGVyIHJlY3ljbGVzIHRoZVxuICAgICAgLy8gRGl0b1ZpZXcgY29tcG9uZW50LlxuICAgICAgZGF0YToge31cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhLnNjaGVtYVxuICAgIH0sXG5cbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLm5hbWVcbiAgICB9LFxuXG4gICAgaXNWaWV3KCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9LFxuXG4gICAgaXNTaW5nbGVDb21wb25lbnRWaWV3KCkge1xuICAgICAgcmV0dXJuIGlzU2luZ2xlQ29tcG9uZW50Vmlldyh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgbWFpbkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlEYXRhUGF0aCh0aGlzLm5hbWUpXG4gICAgfSxcblxuICAgIHZpZXdTY2hlbWEoKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudCwgLi4uc2NoZW1hIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgLy8gVHJhbnNsYXRlIHNpbmdsZS1jb21wb25lbnQgc2NoZW1hcyBpbnRvIG11bHRpLWNvbXBvbmVudCBzY2hlbWFzLFxuICAgICAgLy8gc28gdGhleSBjYW4gYmUgcmVuZGVyZWQgZGlyZWN0bHkgdGhyb3VnaCBEaXRvU2NoZW1hIGFsc286XG4gICAgICByZXR1cm4gdGhpcy5pc1NpbmdsZUNvbXBvbmVudFZpZXdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5zY2hlbWEsXG4gICAgICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgICAgIFtzY2hlbWEubmFtZV06IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBzY2hlbWEubmFtZSxcbiAgICAgICAgICAgICAgICBsYWJlbDogZmFsc2UsXG4gICAgICAgICAgICAgICAgLi4uY29tcG9uZW50XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDogc2NoZW1hXG4gICAgfSxcblxuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIHJldHVybiBzb21lTmVzdGVkU2NoZW1hQ29tcG9uZW50KHRoaXMudmlld1NjaGVtYSwgaGFzUmVzb3VyY2UpXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlKHRvLCBmcm9tKSB7XG4gICAgICAvLyBTZWUgaWYgdGhlIHJvdXRlIGNoYW5nZXMgY29tcGxldGVseSwgYW5kIGNsZWFyIHRoZSBkYXRhIGlmIGl0IGRvZXMuXG4gICAgICBpZiAodGhpcy5pc0Z1bGxSb3V0ZUNoYW5nZSh0bywgZnJvbSkpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZVxuICAgICAgICB0aGlzLmRhdGEgPSB7fVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgfSxcblxuICAgIGdldENoaWxkUGF0aChwYXRoKSB7XG4gICAgICAvLyBMaXN0cyBpbnNpZGUgc2luZ2xlLWNvbXBvbmVudCB2aWV3cyB1c2UgdGhlIHZpZXcncyBwYXRoIGZvciBzdWItcGF0aHM6XG4gICAgICByZXR1cm4gdGhpcy5pc1NpbmdsZUNvbXBvbmVudFZpZXdcbiAgICAgICAgPyB0aGlzLnBhdGhcbiAgICAgICAgOiBgJHt0aGlzLnBhdGh9LyR7cGF0aH1gXG4gICAgfSxcblxuICAgIHNldExvYWRpbmcoaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9ICEhaXNMb2FkaW5nXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBpc0RhdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gY29weURhdGUoZGF0ZSwge1xuICB5ZWFyID0gZGF0ZT8uZ2V0RnVsbFllYXIoKSA/PyAwLFxuICBtb250aCA9IGRhdGU/LmdldE1vbnRoKCkgPz8gMCxcbiAgZGF5ID0gZGF0ZT8uZ2V0RGF0ZSgpID8/IDAsXG4gIGhvdXIgPSBkYXRlPy5nZXRIb3VycygpID8/IDAsXG4gIG1pbnV0ZSA9IGRhdGU/LmdldE1pbnV0ZXMoKSA/PyAwLFxuICBzZWNvbmQgPSBkYXRlPy5nZXRTZWNvbmRzKCkgPz8gMCxcbiAgbWlsbGlzZWNvbmQgPSBkYXRlPy5nZXRNaWxsaXNlY29uZHMoKSA/PyAwXG59ID0ge30pIHtcbiAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnREYXRlKGRhdGUpIHtcbiAgcmV0dXJuIGlzRGF0ZShkYXRlKSA/IGRhdGUgOiBkYXRlID8gbmV3IERhdGUoZGF0ZSkgOiBudWxsXG59XG4iLCI8IS0tIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvIC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNhbGVuZGFyXG4gIC5kaXRvLWNhbGVuZGFyLXBvcHVwXG4gICAgLmRpdG8tY2FsZW5kYXItaW5uZXJcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwiY3VycmVudE1vZGUgPT09ICdkYXknXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgneWVhcicpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiAxIH0pIH19XG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LW1vbnRoKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCdtb250aCcpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyBtb250aDogMSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci13ZWVrZGF5c1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ3ZWVrZGF5IGluIHdlZWtkYXlOYW1lc1wiXG4gICAgICAgICAgICApIHt7IHdlZWtkYXkuc2hvcnQgfX1cbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1kYXRlc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJkYXRlIGluIGRhdGVSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImRhdGUuc3RhdGUgJiYgYGRpdG8tY2FsZW5kYXItaXRlbS0ke2RhdGUuc3RhdGV9YFwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdERhdGUoZGF0ZS5kYXRlLCBkYXRlLnN0YXRlLCB0cnVlKVwiXG4gICAgICAgICAgICApIHt7IGRhdGUudGV4dCB9fVxuICAgICAgICAuZGl0by1jYWxlbmRhci1mb290ZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXRvZGF5KFxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICA6dGl0bGU9XCJkYXRlVG9TdHJpbmcobmV3IERhdGUoKSwgeyB5ZWFyOiAxLCBtb250aDogMSwgZGF5OiAxIH0pXCJcbiAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdERhdGUobmV3IERhdGUoKSlcIlxuICAgICAgICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ21vbnRoJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogMSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItbW9udGhzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cIihtb250aCwgaW5kZXgpIGluIG1vbnRoTmFtZXNcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRNb250aENsYXNzKGluZGV4KVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdE1vbnRoKGluZGV4KVwiXG4gICAgICAgICAgICApIHt7IG1vbnRoLnNob3J0IH19XG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwiY3VycmVudE1vZGUgPT09ICd5ZWFyJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW4ge3sgZGVjYWRlVG9TdHJpbmcoY3VycmVudFZhbHVlKSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci15ZWFyc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ5ZWFyIGluIHllYXJSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldFllYXJDbGFzcyh5ZWFyKVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdFllYXIoeWVhcilcIlxuICAgICAgICAgICAgKSB7eyB5ZWFyIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY29weURhdGUgfSBmcm9tICcuLi91dGlscy9kYXRlLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZGlzYWJsZWREYXRlOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIG1vZGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZGF5JyB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICBjb25zdCB7IHdlZWtkYXlOYW1lcywgbW9udGhOYW1lcyB9ID0gZ2V0TG9jYWxlTmFtZXModGhpcy5sb2NhbGUpXG4gICAgcmV0dXJuIHtcbiAgICAgIHdlZWtkYXlOYW1lcyxcbiAgICAgIG1vbnRoTmFtZXMsXG4gICAgICBkYXRlUmFuZ2U6IFtdLFxuICAgICAgeWVhclJhbmdlOiBbXSxcbiAgICAgIGN1cnJlbnRWYWx1ZTogKFxuICAgICAgICB0aGlzLm1vZGVsVmFsdWUgfHxcbiAgICAgICAgLy8gSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQsIHVzZSBjdXJyZW50IGRhdGUgYnV0IGNsZWFyIHRpbWUgZmllbGRzOlxuICAgICAgICBjb3B5RGF0ZShuZXcgRGF0ZSgpLCB7IGhvdXI6IDAsIG1pbnV0ZTogMCwgc2Vjb25kOiAwLCBtaWxsaXNlY29uZDogMCB9KVxuICAgICAgKSxcbiAgICAgIGN1cnJlbnRNb2RlOiB0aGlzLm1vZGVcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvIHx8IG5ldyBEYXRlKClcbiAgICAgICAgdGhpcy51cGRhdGVEYXRlUmFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRGF0ZVJhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGlzYWJsZWREYXRlOiAndXBkYXRlRGF0ZVJhbmdlJyxcblxuICAgIG1vZGUobW9kZSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9kZSA9IG1vZGVcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLnVwZGF0ZURhdGVSYW5nZSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldE1vbnRoQ2xhc3MobW9udGgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlJzogKFxuICAgICAgICAgIHRoaXMubW9kZWxWYWx1ZSAmJlxuICAgICAgICAgIG1vbnRoID09PSB0aGlzLm1vZGVsVmFsdWUuZ2V0TW9udGgoKSAmJlxuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgPT09IHRoaXMubW9kZWxWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICAgICksXG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudCc6IG1vbnRoID09PSB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRNb250aCgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFllYXJDbGFzcyh5ZWFyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWFjdGl2ZSc6IChcbiAgICAgICAgICB0aGlzLm1vZGVsVmFsdWUgJiYgeWVhciA9PT0gdGhpcy5tb2RlbFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgKSxcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50JzogeWVhciA9PT0gdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXREYXRlKG92ZXJyaWRlcykge1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBjb3B5RGF0ZSh0aGlzLmN1cnJlbnRWYWx1ZSwgb3ZlcnJpZGVzKVxuICAgIH0sXG5cbiAgICBzdGVwRGVjYWRlKHN0ZXApIHtcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBzdGVwICogMTBcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNldE1vZGUobW9kZSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9kZSA9IG1vZGVcbiAgICB9LFxuXG4gICAgc3RlcE1vbnRoKHN0ZXApIHtcbiAgICAgIGNvbnN0IHsgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBjb25zdCB7IHllYXIsIG1vbnRoIH0gPSB0aGlzLmdldFllYXJNb250aChcbiAgICAgICAgY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgIGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpICsgc3RlcFxuICAgICAgKVxuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgbW9udGgsXG4gICAgICAgIGRheTogTWF0aC5taW4oXG4gICAgICAgICAgdGhpcy5nZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aCksXG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUuZ2V0RGF0ZSgpXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHN0ZXBZZWFyKHN0ZXApIHtcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBzdGVwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzZWxlY3REYXRlKGRhdGUsIHN0YXRlLCBjb3B5ID0gZmFsc2UpIHtcbiAgICAgIGlmIChzdGF0ZSAhPT0gJ2Rpc2FibGVkJykge1xuICAgICAgICBpZiAoY29weSkge1xuICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgICAgICB5ZWFyOiBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgICBtb250aDogZGF0ZS5nZXRNb250aCgpLFxuICAgICAgICAgICAgZGF5OiBkYXRlLmdldERhdGUoKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBkYXRlXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB0aGlzLmN1cnJlbnRWYWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2VsZWN0TW9udGgobW9udGgpIHtcbiAgICAgIHRoaXMuc2V0TW9kZSgnZGF5JylcbiAgICAgIC8vIFNldCBkYXkgdG8gMSB0byBhdm9pZCBzZWxlY3RpbmcgYSBkYXRlIHRoYXQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGVcbiAgICAgIC8vIG5ldyBtb250aCwgZS5nLiBGZWIgMzEgLT4gTWFyIDMuXG4gICAgICB0aGlzLnNldERhdGUoeyBtb250aCwgZGF5OiAxIH0pXG4gICAgfSxcblxuICAgIHNlbGVjdFllYXIoeWVhcikge1xuICAgICAgdGhpcy5zZXRNb2RlKCdtb250aCcpXG4gICAgICB0aGlzLnNldERhdGUoeyB5ZWFyIH0pXG4gICAgfSxcblxuICAgIGdldFllYXJNb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgaWYgKG1vbnRoID4gMTEpIHtcbiAgICAgICAgeWVhcisrXG4gICAgICAgIG1vbnRoID0gMFxuICAgICAgfSBlbHNlIGlmIChtb250aCA8IDApIHtcbiAgICAgICAgeWVhci0tXG4gICAgICAgIG1vbnRoID0gMTFcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHllYXIsIG1vbnRoIH1cbiAgICB9LFxuXG4gICAgZGF0ZVRvU3RyaW5nKGRhdGUsIHsgeWVhciwgbW9udGgsIGRheSB9KSB7XG4gICAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZyh0aGlzLmxvY2FsZSwge1xuICAgICAgICB5ZWFyOiB5ZWFyICYmICdudW1lcmljJyxcbiAgICAgICAgbW9udGg6IG1vbnRoICYmICdsb25nJyxcbiAgICAgICAgZGF5OiBkYXkgJiYgJ251bWVyaWMnXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBkZWNhZGVUb1N0cmluZyhkYXRlKSB7XG4gICAgICBjb25zdCB5ZWFyID0gdGhpcy5nZXRGaXJzdFllYXJPZkRlY2FkZShkYXRlLmdldEZ1bGxZZWFyKCkpXG4gICAgICByZXR1cm4gYCR7eWVhcn0g4oCTICR7eWVhciArIDl9YFxuICAgIH0sXG5cbiAgICBnZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgMCkuZ2V0RGF0ZSgpXG4gICAgfSxcblxuICAgIGdldEZpcnN0WWVhck9mRGVjYWRlKHllYXIpIHtcbiAgICAgIGNvbnN0IHllYXJTdHIgPSB5ZWFyLnRvU3RyaW5nKClcbiAgICAgIHJldHVybiArYCR7eWVhclN0ci5zbGljZSgwLCAtMSl9MGBcbiAgICB9LFxuXG4gICAgbmF2aWdhdGUoeyBob3IsIHZlciwgZW50ZXIgfSkge1xuICAgICAgY29uc3QgeyBjdXJyZW50TW9kZSwgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBpZiAoaG9yIHx8IHZlcikge1xuICAgICAgICBzd2l0Y2ggKGN1cnJlbnRNb2RlKSB7XG4gICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgICAgICAgIGRheTogY3VycmVudFZhbHVlLmdldERhdGUoKSArIGhvciArIHZlciAqIDdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgICAgICAgIG1vbnRoOiBjdXJyZW50VmFsdWUuZ2V0TW9udGgoKSArIGhvciArIHZlciAqIDZcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgICAgICAgeWVhcjogY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBob3IgKyB2ZXIgKiA1XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBlbHNlIGlmIChlbnRlcikge1xuICAgICAgICBzd2l0Y2ggKGN1cnJlbnRNb2RlKSB7XG4gICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RGF0ZShjdXJyZW50VmFsdWUpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgIHRoaXMuc2V0TW9kZSgnZGF5JylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICB0aGlzLnNldE1vZGUoJ21vbnRoJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlRGF0ZVJhbmdlKCkge1xuICAgICAgdGhpcy5kYXRlUmFuZ2UgPSBbXVxuICAgICAgdGhpcy55ZWFyUmFuZ2UgPSBbXVxuXG4gICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgY29uc3QgeWVhciA9IGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICBjb25zdCBtb250aCA9IGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpXG4gICAgICBjb25zdCBzdGFydFllYXIgPSB0aGlzLmdldEZpcnN0WWVhck9mRGVjYWRlKHllYXIpXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICAgICAgdGhpcy55ZWFyUmFuZ2UucHVzaChzdGFydFllYXIgKyBpKVxuICAgICAgfVxuICAgICAgY29uc3QgY3Vyck1vbnRoRmlyc3REYXkgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSlcbiAgICAgIGxldCBmaXJzdERheVdlZWsgPSBjdXJyTW9udGhGaXJzdERheS5nZXREYXkoKSArIDFcbiAgICAgIGlmIChmaXJzdERheVdlZWsgPT09IDApIHtcbiAgICAgICAgZmlyc3REYXlXZWVrID0gN1xuICAgICAgfVxuICAgICAgY29uc3QgbnVtRGF5cyA9IHRoaXMuZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpXG4gICAgICBpZiAoZmlyc3REYXlXZWVrID4gMSkge1xuICAgICAgICBjb25zdCBwcmV2TW9udGggPSB0aGlzLmdldFllYXJNb250aCh5ZWFyLCBtb250aCAtIDEpXG4gICAgICAgIGNvbnN0IHByZXZNb250aE51bURheXMgPSB0aGlzLmdldERheXNJbk1vbnRoKFxuICAgICAgICAgIHByZXZNb250aC55ZWFyLFxuICAgICAgICAgIHByZXZNb250aC5tb250aFxuICAgICAgICApXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZmlyc3REYXlXZWVrOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXkgPSBwcmV2TW9udGhOdW1EYXlzIC0gZmlyc3REYXlXZWVrICsgaSArIDFcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUocHJldk1vbnRoLnllYXIsIHByZXZNb250aC5tb250aCwgZGF5KVxuICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgICAgdGV4dDogZGF5LFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIHN0YXRlOiB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCcgOiAnZ3JheSdcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKVxuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbnVtRGF5czsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgaSlcbiAgICAgICAgY29uc3QgaXNEYXkgPSBkYXRlID0+IChcbiAgICAgICAgICBkYXRlICYmXG4gICAgICAgICAgZGF0ZS5nZXREYXRlKCkgPT09IGkgJiZcbiAgICAgICAgICBkYXRlLmdldEZ1bGxZZWFyKCkgPT09IHllYXIgJiZcbiAgICAgICAgICBkYXRlLmdldE1vbnRoKCkgPT09IG1vbnRoXG4gICAgICAgIClcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBpc0RheSh0aGlzLm1vZGVsVmFsdWUpXG4gICAgICAgICAgPyAnYWN0aXZlJ1xuICAgICAgICAgIDogaXNEYXkodG9kYXkpXG4gICAgICAgICAgICA/ICd0b2RheSdcbiAgICAgICAgICAgIDogdGhpcy5kaXNhYmxlZERhdGUoZGF0ZSlcbiAgICAgICAgICAgICAgPyAnZGlzYWJsZWQnXG4gICAgICAgICAgICAgIDogaXNEYXkoY3VycmVudFZhbHVlKVxuICAgICAgICAgICAgICAgID8gJ2N1cnJlbnQnXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgZGF0ZSxcbiAgICAgICAgICBzdGF0ZVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXh0TW9udGhOZWVkID0gNDIgLSB0aGlzLmRhdGVSYW5nZS5sZW5ndGhcbiAgICAgIGlmIChuZXh0TW9udGhOZWVkID4gMCkge1xuICAgICAgICBjb25zdCBuZXh0TW9udGggPSB0aGlzLmdldFllYXJNb250aCh5ZWFyLCBtb250aCArIDEpXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG5leHRNb250aE5lZWQ7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShuZXh0TW9udGgueWVhciwgbmV4dE1vbnRoLm1vbnRoLCBpKVxuICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5kaXNhYmxlZERhdGUoZGF0ZSkgPyAnZGlzYWJsZWQnIDogJ2dyYXknXG4gICAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBsb2NhbGVOYW1lcyA9IHt9XG5cbi8vIENhbGxpbmcgYHRvTG9jYWxlU3RyaW5nKClgIHRoaXMgbXVjaCBhcHBlYXJzIHRvIGJlIGV4cGVuc2l2ZSwgc28gY2FjaGUgaXQ6XG5mdW5jdGlvbiBnZXRMb2NhbGVOYW1lcyhsb2NhbGUpIHtcbiAgbGV0IG5hbWVzID0gbG9jYWxlTmFtZXNbbG9jYWxlXVxuICBpZiAoIW5hbWVzKSB7XG4gICAgY29uc3Qgd2Vla2RheU5hbWVzID0gW11cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDAsIDAsIGkpXG4gICAgICB3ZWVrZGF5TmFtZXMucHVzaCh7XG4gICAgICAgIGxvbmc6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IHdlZWtkYXk6ICdsb25nJyB9KSxcbiAgICAgICAgc2hvcnQ6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IHdlZWtkYXk6ICdzaG9ydCcgfSlcbiAgICAgIH0pXG4gICAgfVxuICAgIGNvbnN0IG1vbnRoTmFtZXMgPSBbXVxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IDEyOyBpKyspIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgwLCBpLCAwKVxuICAgICAgbW9udGhOYW1lcy5wdXNoKHtcbiAgICAgICAgbG9uZzogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgbW9udGg6ICdsb25nJyB9KSxcbiAgICAgICAgc2hvcnQ6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IG1vbnRoOiAnc2hvcnQnIH0pXG4gICAgICB9KVxuICAgIH1cbiAgICBuYW1lcyA9IGxvY2FsZU5hbWVzW2xvY2FsZV0gPSB7XG4gICAgICB3ZWVrZGF5TmFtZXMsXG4gICAgICBtb250aE5hbWVzXG4gICAgfVxuICB9XG4gIHJldHVybiBuYW1lc1xufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY2FsZW5kYXIge1xuICBtaW4td2lkdGg6IDI0MHB4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4uZGl0by1jYWxlbmRhci1wb3B1cCB7XG4gIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3c7XG4gIHotaW5kZXg6IDEwMDA7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWJvZHkge1xuICBwYWRkaW5nOiAwIDAuNWVtO1xuXG4gIHNwYW4ge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogY2FsYygxMDAlIC8gNyk7XG4gICAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICAgIGxpbmUtaGVpZ2h0OiBjYWxjKCN7JGlucHV0LWhlaWdodH0gLSAycHgpO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tdG9kYXkge1xuICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlO1xuICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICB9XG5cbiAgLmRpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUge1xuICAgICYsXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZGlzYWJsZWQge1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZGlzYWJsZWQsXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZ3JheSB7XG4gICAgY29sb3I6ICM5OTk5OTk7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItbW9udGhzLFxuLmRpdG8tY2FsZW5kYXIteWVhcnMge1xuICBzcGFuIHtcbiAgICB3aWR0aDogY2FsYygxMDAlIC8gNCk7XG4gICAgbWFyZ2luOiAwLjVlbSAwO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW4ge1xuICB3aWR0aDogY2FsYygxMDAlIC8gNSk7XG59XG5cbi5kaXRvLWNhbGVuZGFyIGEsXG4uZGl0by1jYWxlbmRhci1kYXRlcyBzcGFuLFxuLmRpdG8tY2FsZW5kYXItbW9udGhzIHNwYW4sXG4uZGl0by1jYWxlbmRhci15ZWFycyBzcGFuIHtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uZGl0by1jYWxlbmRhci1oZWFkZXIgc3BhbiB7XG4gIGN1cnNvcjogZGVmYXVsdDtcblxuICBhIHtcbiAgICBwYWRkaW5nOiAwIDAuMmVtO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLWRhdGVzIHNwYW46aG92ZXIsXG4uZGl0by1jYWxlbmRhci1tb250aHMgc3Bhbjpob3Zlcixcbi5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW46aG92ZXIsXG4uZGl0by1jYWxlbmRhcjpub3QoOmhvdmVyKSAuZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnQge1xuICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0O1xufVxuXG4uZGl0by1jYWxlbmRhci13ZWVrZGF5cyBzcGFuIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xufVxuXG4uZGl0by1jYWxlbmRhci1oZWFkZXIsXG4uZGl0by1jYWxlbmRhci1mb290ZXIge1xuICBAZXh0ZW5kICVpbnB1dC1oZWlnaHQ7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWZvb3RlciB7XG4gIGJvcmRlci10b3A6ICRib3JkZXItc3R5bGU7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWhlYWRlciB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBib3JkZXItYm90dG9tOiAkYm9yZGVyLXN0eWxlO1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gID4gc3BhbiB7XG4gICAgbWFyZ2luOiBhdXRvO1xuICAgIHBhZGRpbmc6IDAgMC41ZW07XG4gIH1cblxuICBhIHtcbiAgICBmb250LXdlaWdodDogYm9sZDtcblxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldixcbi5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IDUlO1xuICBtaW4td2lkdGg6IDJlbTtcbiAgbWF4LXdpZHRoOiAzZW07XG5cbiAgJjo6YWZ0ZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGZvbnQtc2l6ZTogMS4yNWVtO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldiB7XG4gICY6OmFmdGVyIHtcbiAgICBjb250ZW50OiAn4oC5JztcbiAgfVxuXG4gICYuZGl0by1jYWxlbmRhci1zdGVwLXllYXI6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnwqsnO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dCB7XG4gICY6OmFmdGVyIHtcbiAgICBjb250ZW50OiAn4oC6JztcbiAgfVxuXG4gICYuZGl0by1jYWxlbmRhci1zdGVwLXllYXI6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnwrsnO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXNlbGVjdC10b2RheSB7XG4gICY6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnTm93JztcbiAgfVxufVxuPC9zdHlsZT5cbiIsImV4cG9ydCBmdW5jdGlvbiBhZGRFdmVudHModGFyZ2V0LCBldmVudHMpIHtcbiAgZm9yIChjb25zdCB0eXBlIGluIGV2ZW50cykge1xuICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50c1t0eXBlXSwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIHtcbiAgICByZW1vdmUoKSB7XG4gICAgICBmb3IgKGNvbnN0IHR5cGUgaW4gZXZlbnRzKSB7XG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50c1t0eXBlXSwgZmFsc2UpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXkoZXZlbnQpIHtcbiAgcmV0dXJuIHtcbiAgICAzNzogJ2xlZnQnLFxuICAgIDM4OiAndXAnLFxuICAgIDM5OiAncmlnaHQnLFxuICAgIDQwOiAnZG93bicsXG4gICAgMTM6ICdlbnRlcidcbiAgfVtldmVudC5rZXlDb2RlXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0S2V5TmF2aWdhdGlvbihldmVudCkge1xuICBjb25zdCBrZXkgPSBnZXRLZXkoZXZlbnQpXG4gIHJldHVybiB7XG4gICAgaG9yOiB7IGxlZnQ6IC0xLCByaWdodDogMSB9W2tleV0gfHwgMCxcbiAgICB2ZXI6IHsgdXA6IC0xLCBkb3duOiAxIH1ba2V5XSB8fCAwLFxuICAgIGVudGVyOiBrZXkgPT09ICdlbnRlcidcbiAgfVxufVxuIiwiPCEtLSBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpLyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10cmlnZ2VyLWNvbnRhaW5lclxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtaWY9XCJhbHdheXNTaG93XCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdjbGljaydcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgQGNsaWNrPVwib25DbGlja1wiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2hvdmVyJ1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgICBAbW91c2VlbnRlcj1cIm9uSG92ZXIodHJ1ZSlcIlxuICAgIEBtb3VzZWxlYXZlPVwib25Ib3ZlcihmYWxzZSlcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdmb2N1cycgfHwgdHJpZ2dlciA9PT0gJ2Fsd2F5cydcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIFRyYW5zaXRpb24oOm5hbWU9XCJ0cmFuc2l0aW9uXCIpXG4gICAgLmRpdG8tcG9wdXAoXG4gICAgICB2LWlmPVwidHJpZ2dlciA9PT0gJ2hvdmVyJ1wiXG4gICAgICB2LXNob3c9XCJzaG93UG9wdXBcIlxuICAgICAgcmVmPVwicG9wdXBcIlxuICAgICAgOmNsYXNzPVwicG9wdXBDbGFzc1wiXG4gICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICAgIEBtb3VzZWVudGVyPVwib25Ib3Zlcih0cnVlKVwiXG4gICAgICBAbW91c2VsZWF2ZT1cIm9uSG92ZXIoZmFsc2UpXCJcbiAgICApXG4gICAgICBzbG90KFxuICAgICAgICB2LWlmPVwic2hvd1BvcHVwXCJcbiAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgIClcbiAgICAuZGl0by1wb3B1cChcbiAgICAgIHYtZWxzZVxuICAgICAgdi1zaG93PVwic2hvd1BvcHVwXCJcbiAgICAgIHJlZj1cInBvcHVwXCJcbiAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgOnN0eWxlPVwicG9wdXBTdHlsZVwiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cInNob3dQb3B1cFwiXG4gICAgICAgIG5hbWU9XCJwb3B1cFwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNTdHJpbmcsIGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBhZGRFdmVudHMgfSBmcm9tICcuLi91dGlscy9ldmVudC5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWyd1cGRhdGU6c2hvdyddLFxuXG4gIHByb3BzOiB7XG4gICAgdHJpZ2dlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdjbGljaycgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20nIH0sXG4gICAgc2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdGFyZ2V0OiB7IHR5cGU6IFtTdHJpbmcsIEhUTUxFbGVtZW50XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGN1c3RvbUNsYXNzOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHpJbmRleDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfSxcbiAgICBrZWVwSW5WaWV3OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBoaWRlV2hlbkNsaWNrT3V0c2lkZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgYWx3YXlzU2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvdmVyOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaGlkZURlbGF5OiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBwb3B1cFBsYWNlbWVudDogdGhpcy5wbGFjZW1lbnRcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0cmlnZ2VyQ2xhc3MoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by10cmlnZ2VyLWRpc2FibGVkJzogdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwb3B1cENsYXNzKCkge1xuICAgICAgY29uc3QgY2xhc3NlcyA9IHtcbiAgICAgICAgW2BkaXRvLXBvcHVwLSR7aHlwaGVuYXRlKHRoaXMucGxhY2VtZW50KX1gXTogdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY3VzdG9tQ2xhc3MpIHtcbiAgICAgICAgY2xhc3Nlc1t0aGlzLmN1c3RvbUNsYXNzXSA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGFzc2VzXG4gICAgfSxcblxuICAgIHBvcHVwU3R5bGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy56SW5kZXggPyBgei1pbmRleDogJHt0aGlzLnpJbmRleH1gIDogJydcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvdyB8fCB0aGlzLmFsd2F5c1Nob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgdG8pXG4gICAgICAgIGlmICh0bykge1xuICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHRoaXMudXBkYXRlUG9zaXRpb24oKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIGNvbnN0IHsgdHJpZ2dlciwgcG9wdXAgfSA9IHRoaXMuJHJlZnNcbiAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnZm9jdXMnKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSB0cmlnZ2VyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0LCB0ZXh0YXJlYScpXG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIHRoaXMuZm9jdXNFdmVudHMgPSBhZGRFdmVudHModGFyZ2V0LCB7XG4gICAgICAgICAgZm9jdXM6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgYmx1cjogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5oaWRlV2hlbkNsaWNrT3V0c2lkZSAmJiAhdGhpcy5hbHdheXNTaG93KSB7XG4gICAgICAvLyBVc2UgJ21vdXNldXAnIGluc3RlYWQgb2YgJ2NsaWNrJywgc2luY2UgY2xpY2sgYXBwZWFycyB0byBoYXBwZW4gYWZ0ZXJcbiAgICAgIC8vIHRoZSBET00gaW5zaWRlIG9mIHBvcHVwcyBjb3VsZCBjaGFuZ2UgaW4gYSB3YXkgc28gdGhhdCB0aGUgY2hlY2tcbiAgICAgIC8vIGBwb3B1cC5jb250YWlucyhldmVudC50YXJnZXQpYCB3b3VsZCBmYWlsOlxuICAgICAgdGhpcy5jbG9zZUV2ZW50cyA9IGFkZEV2ZW50cyh3aW5kb3csIHtcbiAgICAgICAgbW91c2V1cDogZXZlbnQgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwICYmXG4gICAgICAgICAgICAhcG9wdXAuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgICAgICAgIXRyaWdnZXIuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFsd2F5c1Nob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuc2hvd1BvcHVwID0gdGhpcy5zaG93XG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuZm9jdXNFdmVudHM/LnJlbW92ZSgpXG4gICAgdGhpcy5jbG9zZUV2ZW50cz8ucmVtb3ZlKClcbiAgICB0aGlzLm1vdXNlTGVhdmVUaW1lciA9IG51bGxcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdXBkYXRlUG9zaXRpb24oKSB7XG4gICAgICBjb25zdCB7IHRyaWdnZXIsIHBvcHVwIH0gPSB0aGlzLiRyZWZzXG4gICAgICBpZiAodGhpcy5zaG93ICYmIHBvcHVwLm9mZnNldFdpZHRoID09PSAwKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVQb3NpdGlvbigpLCAwKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFyZ2V0ID0gaXNTdHJpbmcodGhpcy50YXJnZXQpXG4gICAgICAgID8gdGhpcy4kcmVmc1t0aGlzLnRhcmdldF1cbiAgICAgICAgOiB0aGlzLnRhcmdldFxuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAvLyBBY3R1YWxseSByZXNpemUgdGhlIHBvcHVwJ3MgZmlyc3QgY2hpbGQsIHNvIHRoZXkgY2FuIHNldCBzaXplIGxpbWl0cy5cbiAgICAgICAgY29uc3QgZWwgPSB0YXJnZXQgPT09IHBvcHVwID8gdHJpZ2dlciA6IHBvcHVwLmZpcnN0RWxlbWVudENoaWxkXG4gICAgICAgIGlmIChlbCkge1xuICAgICAgICAgIGVsLnN0eWxlLndpZHRoID0gZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLndpZHRoXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgYm91bmRzID0gKHRhcmdldCB8fCB0cmlnZ2VyKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgY29uc3QgdHJpZ2dlckxlZnQgPSBib3VuZHMubGVmdCArIHdpbmRvdy5zY3JvbGxYXG4gICAgICBjb25zdCB0cmlnZ2VyVG9wID0gYm91bmRzLnRvcCArIHdpbmRvdy5zY3JvbGxZXG4gICAgICBjb25zdCB0cmlnZ2VyV2lkdGggPSBib3VuZHMud2lkdGhcbiAgICAgIGNvbnN0IHRyaWdnZXJIZWlnaHQgPSBib3VuZHMuaGVpZ2h0XG4gICAgICBjb25zdCBwb3B1cFdpZHRoID0gcG9wdXAub2Zmc2V0V2lkdGhcbiAgICAgIGNvbnN0IHBvcHVwSGVpZ2h0ID0gcG9wdXAub2Zmc2V0SGVpZ2h0XG5cbiAgICAgIGxldCBbcGFydDEsIHBhcnQyXSA9IHRoaXMucG9wdXBQbGFjZW1lbnQuc3BsaXQoJy0nKSB8fCBbXVxuICAgICAgaWYgKHRoaXMua2VlcEluVmlldykge1xuICAgICAgICBjb25zdCB3aW5XaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoXG4gICAgICAgIGNvbnN0IHdpbkhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgICAgICBpZiAocGFydDEgPT09ICd0b3AnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJUb3AgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDEgPSAnYm90dG9tJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICBpZiAod2luSGVpZ2h0IC0gdHJpZ2dlclRvcCAtIHRyaWdnZXJIZWlnaHQgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDEgPSAndG9wJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJMZWZ0IDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDEgPSAncmlnaHQnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgaWYgKHdpbldpZHRoIC0gdHJpZ2dlckxlZnQgLSB0cmlnZ2VyV2lkdGggPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdsZWZ0J1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJ0MiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICBpZiAod2luSGVpZ2h0IC0gdHJpZ2dlclRvcCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdib3R0b20nXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAnYm90dG9tJykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyVG9wICsgdHJpZ2dlckhlaWdodCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICd0b3AnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAnbGVmdCcpIHtcbiAgICAgICAgICBpZiAod2luV2lkdGggLSB0cmlnZ2VyTGVmdCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ3JpZ2h0J1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyTGVmdCArIHRyaWdnZXJXaWR0aCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ2xlZnQnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCBsZWZ0ID0gMFxuICAgICAgbGV0IHRvcCA9IDBcbiAgICAgIHN3aXRjaCAocGFydDEpIHtcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICB0b3AgLT0gcG9wdXBIZWlnaHRcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICBsZWZ0IC09IHBvcHVwV2lkdGhcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgbGVmdCArPSB0cmlnZ2VyV2lkdGhcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgIHRvcCArPSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAocGFydDIpIHtcbiAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgIGxlZnQgLT0gcG9wdXBXaWR0aCAtIHRyaWdnZXJXaWR0aFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgdG9wIC09IHBvcHVwSGVpZ2h0IC0gdHJpZ2dlckhlaWdodFxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb3Zlcikge1xuICAgICAgICBpZiAocGFydDEgPT09ICd0b3AnKSB7XG4gICAgICAgICAgdG9wICs9IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICB0b3AgLT0gdHJpZ2dlckhlaWdodFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldCAhPT0gdHJpZ2dlcikge1xuICAgICAgICBjb25zdCB0cmlnZ2VyQm91bmRzID0gdHJpZ2dlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICBsZWZ0ICs9IHRyaWdnZXJMZWZ0IC0gdHJpZ2dlckJvdW5kcy5sZWZ0XG4gICAgICAgIHRvcCArPSB0cmlnZ2VyVG9wIC0gdHJpZ2dlckJvdW5kcy50b3BcbiAgICAgIH1cbiAgICAgIHBvcHVwLnN0eWxlLmxlZnQgPSBgJHtsZWZ0fXB4YFxuICAgICAgcG9wdXAuc3R5bGUudG9wID0gYCR7dG9wfXB4YFxuICAgIH0sXG5cbiAgICBvbkNsaWNrKCkge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuc2hvd1BvcHVwID0gIXRoaXMuc2hvd1BvcHVwXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uSG92ZXIoZW50ZXIpIHtcbiAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5tb3VzZUxlYXZlVGltZXIpXG4gICAgICAgIGlmIChlbnRlcikge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLmhpZGVEZWxheSkge1xuICAgICAgICAgICAgdGhpcy5tb3VzZUxlYXZlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgICAgfSwgdGhpcy5oaWRlRGVsYXkpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5AaW1wb3J0ICcuLi9zdHlsZXMvdHJhbnNpdGlvbnMvaW5kZXguc2Nzcyc7XG5cbi5kaXRvLXRyaWdnZXItY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uZGl0by10cmlnZ2VyLWRpc2FibGVkIHtcbiAgY29sb3I6ICRjb2xvci1kaXNhYmxlZDtcbiAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICBjdXJzb3I6IGRlZmF1bHQ7XG5cbiAgKiB7XG4gICAgY3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnQ7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgICAmOmZvY3VzIHtcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLXBvcHVwIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6IDEwMDA7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWlucHV0XG4gIHNsb3QobmFtZT1cImJlZm9yZVwiKVxuICBpbnB1dChcbiAgICA6aWQ9XCJpZFwiXG4gICAgcmVmPVwiaW5wdXRcIlxuICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgIDp0eXBlPVwidHlwZVwiXG4gICAgOm5hbWU9XCJuYW1lXCJcbiAgICA6dGl0bGU9XCJ0aXRsZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpyZWFkb25seT1cInJlYWRvbmx5XCJcbiAgICA6YXV0b2ZvY3VzPVwiYXV0b2ZvY3VzXCJcbiAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgOmF1dG9jb21wbGV0ZT1cImF1dG9jb21wbGV0ZVwiXG4gICAgOmFyaWEtbGFiZWw9XCJ0aXRsZVwiXG4gICAgdi1iaW5kPVwiJGF0dHJzXCJcbiAgKVxuICBzbG90KG5hbWU9XCJhZnRlclwiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnXSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogW1N0cmluZywgTnVtYmVyXSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHR5cGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAndGV4dCcgfSxcbiAgICBpZDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBuYW1lOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRpdGxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgcmVhZG9ubHk6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhdXRvZm9jdXM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBhdXRvY29tcGxldGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnb2ZmJyB9XG4gICAgLypcbiAgICBjbGVhcmFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICAgIHN1ZmZpeEljb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgcHJlZml4SWNvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICAgICovXG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLm1vZGVsVmFsdWUsXG4gICAgICBob3ZlcmluZzogZmFsc2UsXG4gICAgICBmb2N1c2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNpemUoKSB7XG4gICAgICAvLyBEZXRlcm1pbmUgc2l6ZSBiYXNlZCBvbiBtaW4gJiBtYXggc2V0dGluZ3MsIGlmIHRoZXkncmUgcHJvdmlkZWQuXG4gICAgICBjb25zdCB7IHNpemUsIG1pbiwgbWF4IH0gPSB0aGlzLiRhdHRyc1xuICAgICAgY29uc3QgZ2V0TGVuZ3RoID0gdmFsdWUgPT4gKHZhbHVlICE9IG51bGwgPyBgJHt2YWx1ZX1gLmxlbmd0aCA6IDApXG4gICAgICByZXR1cm4gc2l6ZSB8fCBnZXRMZW5ndGgobWluKSB8fCBnZXRMZW5ndGgobWF4KSB8fCB1bmRlZmluZWRcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0b1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUoY3VycmVudFZhbHVlKSB7XG4gICAgICBpZiAoY3VycmVudFZhbHVlICE9PSB0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCBjdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWlucHV0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgaW5wdXQge1xuICAgIC8vIEluaGVyaXQgYWxsIHN0eWxpbmcgZnJvbSAuZGl0by1pbnB1dFxuICAgIGFsbDogaW5oZXJpdDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyOiAwO1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPCEtLSBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpLyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5UcmlnZ2VyLmRpdG8tZGF0ZS1waWNrZXIoXG4gIHJlZj1cInRyaWdnZXJcIlxuICB2LW1vZGVsOnNob3c9XCJzaG93UG9wdXBcIlxuICB0cmlnZ2VyPVwiY2xpY2tcIlxuICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbilcbiAgdGVtcGxhdGUoI3RyaWdnZXIpXG4gICAgSW5wdXRGaWVsZC5kaXRvLWRhdGUtcGlja2VyLWlucHV0KFxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRUZXh0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIHJlYWRvbmx5XG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIlxuICAgICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQgfVwiXG4gICAgICBAZm9jdXM9XCJpbnB1dEZvY3VzZWQgPSB0cnVlXCJcbiAgICAgIEBibHVyPVwiaW5wdXRGb2N1c2VkID0gZmFsc2VcIlxuICAgICAgQGtleWRvd249XCJvbktleURvd25cIlxuICAgIClcbiAgLy8gaWNvbih0eXBlPVwiY2FsZW5kYXJcIiA6Y29sb3I9XCJpY29uQ29sb3JcIilcbiAgdGVtcGxhdGUoI3BvcHVwKVxuICAgIENhbGVuZGFyLmRpdG8tZGF0ZS1waWNrZXItcG9wdXAoXG4gICAgICByZWY9XCJjYWxlbmRhclwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHYtYmluZD1cInsgbG9jYWxlLCBkaXNhYmxlZERhdGUgfVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGZvcm1hdCwgZGVmYXVsdEZvcm1hdHMgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IFRyaWdnZXIgZnJvbSAnLi9UcmlnZ2VyLnZ1ZSdcbmltcG9ydCBDYWxlbmRhciBmcm9tICcuL0NhbGVuZGFyLnZ1ZSdcbmltcG9ydCBJbnB1dEZpZWxkIGZyb20gJy4vSW5wdXRGaWVsZC52dWUnXG5pbXBvcnQgeyBnZXRLZXlOYXZpZ2F0aW9uIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnQuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBDYWxlbmRhciwgSW5wdXRGaWVsZCB9LFxuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZScsICd1cGRhdGU6c2hvdycsICdmb2N1cycsICdibHVyJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20tbGVmdCcgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZGF0ZUZvcm1hdDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+IGRlZmF1bHRGb3JtYXRzLmRhdGUgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiAndHJpZ2dlcicgfSxcbiAgICBkaXNhYmxlZERhdGU6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMubW9kZWxWYWx1ZSxcbiAgICAgIHNob3dQb3B1cDogdGhpcy5zaG93LFxuICAgICAgaW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGNoYW5nZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0Rm9jdXNlZCB8fCB0aGlzLnNob3dQb3B1cFxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGZvcm1hdCh0aGlzLmN1cnJlbnRWYWx1ZSwge1xuICAgICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgICAgZGF0ZTogdGhpcy5kYXRlRm9ybWF0LFxuICAgICAgICAgIHRpbWU6IGZhbHNlXG4gICAgICAgIH0pIHx8ICcnXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0b1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUoY3VycmVudFZhbHVlKSB7XG4gICAgICBpZiAoK2N1cnJlbnRWYWx1ZSAhPT0gK3RoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSB0cnVlXG4gICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCBjdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93XG4gICAgfSxcblxuICAgIHNob3dQb3B1cCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6c2hvdycsIHRvKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQodG8gPyAnZm9jdXMnIDogJ2JsdXInKVxuICAgICAgICBpZiAoIXRvICYmIHRoaXMuY2hhbmdlZCkge1xuICAgICAgICAgIC8vIFRPRE86IFRoaXMgc2VlbXMgdG8gY29udHJhZGljdCB0aGUgYGN1cnJlbnRWYWx1ZSgpYCB3YXRjaGVyIGFib3ZlLlxuICAgICAgICAgIC8vICAgICAgIElzIHRoaXMgbmVlZGVkIGF0IGFsbD9cbiAgICAgICAgICB0aGlzLmNoYW5nZWQgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgdGhpcy5jdXJyZW50VmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgaWYgKHRoaXMuJHJlZnMuY2FsZW5kYXI/Lm5hdmlnYXRlKGdldEtleU5hdmlnYXRpb24oZXZlbnQpKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZGF0ZS1waWNrZXIge1xuICBtaW4td2lkdGg6IDEwZW07XG5cbiAgLmRpdG8taW5wdXQge1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG5cbi5kaXRvLWRhdGUtcGlja2VyLXBvcHVwIHtcbiAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luO1xufVxuPC9zdHlsZT5cbiIsImV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUbyhlbGVtZW50LCB0bywgZHVyYXRpb24pIHtcbiAgY29uc3QgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gKFxuICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gc2V0VGltZW91dChhcmd1bWVudHNbMF0sIDEwKVxuICAgIH1cbiAgKVxuICBpZiAoZHVyYXRpb24gPD0gMCkge1xuICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gdG9cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBkaWZmZXJlbmNlID0gdG8gLSBlbGVtZW50LnNjcm9sbFRvcFxuICAgIGNvbnN0IHBlclRpY2sgPSBkaWZmZXJlbmNlIC8gZHVyYXRpb24gKiAxMFxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBlbGVtZW50LnNjcm9sbFRvcCA9IGVsZW1lbnQuc2Nyb2xsVG9wICsgcGVyVGlja1xuICAgICAgaWYgKGVsZW1lbnQuc2Nyb2xsVG9wID09PSB0bykgcmV0dXJuXG4gICAgICBzY3JvbGxUbyhlbGVtZW50LCB0bywgZHVyYXRpb24gLSAxMClcbiAgICB9KVxuICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gc2V0U2VsZWN0aW9uKGZpZWxkLCBzdGFydCwgZW5kKSB7XG4gIGlmIChmaWVsZC5jcmVhdGVUZXh0UmFuZ2UpIHtcbiAgICBjb25zdCByYW5nZSA9IGZpZWxkLmNyZWF0ZVRleHRSYW5nZSgpXG4gICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSlcbiAgICByYW5nZS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIHN0YXJ0KVxuICAgIHJhbmdlLm1vdmVFbmQoJ2NoYXJhY3RlcicsIGVuZClcbiAgICByYW5nZS5zZWxlY3QoKVxuICAgIGZpZWxkLmZvY3VzKClcbiAgfSBlbHNlIGlmIChmaWVsZC5zZXRTZWxlY3Rpb25SYW5nZSkge1xuICAgIGZpZWxkLmZvY3VzKClcbiAgICBmaWVsZC5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKVxuICB9IGVsc2UgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gZmllbGQpIHtcbiAgICBmaWVsZC5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0XG4gICAgZmllbGQuc2VsZWN0aW9uRW5kID0gZW5kXG4gICAgZmllbGQuZm9jdXMoKVxuICB9XG59XG4iLCI8IS0tIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvIC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblRyaWdnZXIuZGl0by10aW1lLXBpY2tlcihcbiAgcmVmPVwidHJpZ2dlclwiXG4gIHYtbW9kZWw6c2hvdz1cInNob3dQb3B1cFwiXG4gIHRyaWdnZXI9XCJjbGlja1wiXG4gIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2VtZW50LCBkaXNhYmxlZCwgdGFyZ2V0IH1cIlxuKVxuICB0ZW1wbGF0ZSgjdHJpZ2dlcilcbiAgICBJbnB1dEZpZWxkLmRpdG8tdGltZS1waWNrZXItaW5wdXQoXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFRleHRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgcmVhZG9ubHlcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gICAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCB9XCJcbiAgICAgIEBmb2N1cz1cImlucHV0Rm9jdXNlZCA9IHRydWVcIlxuICAgICAgQGJsdXI9XCJpbnB1dEZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgKVxuICAgIC8vLSBpY29uKHR5cGU9XCJ0aW1lXCJcbiAgICAvLy0gOmNvbG9yPVwiZGlzYWJsZWQgPyAnI2JmYmZiZicgOiAodGV4dCA/ICcjNjY2JyA6ICcjYmZiZmJmJylcIlxuICAgIC8vLSApXG4gIHRlbXBsYXRlKCNwb3B1cClcbiAgICAuZGl0by10aW1lLXBpY2tlci1wb3B1cFxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1ob3VyKFxuICAgICAgICAgIHJlZj1cImhvdXJcIlxuICAgICAgICAgIEBtb3VzZW92ZXI9XCJzZWxlY3Rpb24gPSAwXCJcbiAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiAyNFwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgbGkoXG4gICAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRIb3VyKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBob3VyID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cImhvdXIgPSBpbmRleCAtIDFcIlxuICAgICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItbWludXRlKFxuICAgICAgICAgIHJlZj1cIm1pbnV0ZVwiXG4gICAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDFcIlxuICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBsaShcbiAgICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZE1pbnV0ZShpbmRleCAtIDEpXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogbWludXRlID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cIm1pbnV0ZSA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1zZWNvbmQoXG4gICAgICAgICAgcmVmPVwic2Vjb25kXCJcbiAgICAgICAgICBAbW91c2VvdmVyPVwic2VsZWN0aW9uID0gMlwiXG4gICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gNjBcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGxpKFxuICAgICAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkU2Vjb25kKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBzZWNvbmQgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2Vjb25kID0gaW5kZXggLSAxXCJcbiAgICAgICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFRyaWdnZXIgZnJvbSAnLi9UcmlnZ2VyLnZ1ZSdcbmltcG9ydCBJbnB1dEZpZWxkIGZyb20gJy4vSW5wdXRGaWVsZC52dWUnXG5pbXBvcnQgeyBjb3B5RGF0ZSB9IGZyb20gJy4uL3V0aWxzL2RhdGUuanMnXG5pbXBvcnQgeyBzY3JvbGxUbyB9IGZyb20gJy4uL3V0aWxzL3Njcm9sbC5qcydcbmltcG9ydCB7IHNldFNlbGVjdGlvbiB9IGZyb20gJy4uL3V0aWxzL3NlbGVjdGlvbi5qcydcbmltcG9ydCB7IGdldEtleU5hdmlnYXRpb24gfSBmcm9tICcuLi91dGlscy9ldmVudC5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIElucHV0RmllbGQgfSxcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAndXBkYXRlOnNob3cnLCAnY2hhbmdlJywgJ2ZvY3VzJywgJ2JsdXInXSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbS1sZWZ0JyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRhcmdldDogeyB0eXBlOiBbU3RyaW5nLCBIVE1MRWxlbWVudF0sIGRlZmF1bHQ6ICd0cmlnZ2VyJyB9LFxuICAgIGRpc2FibGVkSG91cjogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBkaXNhYmxlZE1pbnV0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBkaXNhYmxlZFNlY29uZDogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgc2VsZWN0aW9uOiAwLFxuICAgICAgY2hhbmdlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb2N1c2VkIHx8IHRoaXMuc2hvd1BvcHVwXG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFZhbHVlXG4gICAgICAgID8gYCR7XG4gICAgICAgICAgICB0aGlzLmxlZnRQYWQodGhpcy5ob3VyKVxuICAgICAgICAgIH06JHtcbiAgICAgICAgICAgIHRoaXMubGVmdFBhZCh0aGlzLm1pbnV0ZSlcbiAgICAgICAgICB9OiR7XG4gICAgICAgICAgICB0aGlzLmxlZnRQYWQodGhpcy5zZWNvbmQpXG4gICAgICAgICAgfWBcbiAgICAgICAgOiAnJ1xuICAgIH0sXG5cbiAgICBjdXJyZW50RGF0ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlIHx8XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBEYXRlKCkgb2JqZWN0IHdpdGggdGhlIHRpbWUgc2V0IHRvIDAsIHRvIGJlIHVzZWQgd2hlblxuICAgICAgICAvLyBmaXJzdCBzZXR0aW5nIGFueSBvZiB0aGUgdGltZXMsIGZvciBtZWFuaW5nZnVsIGRhdGVzIGluIGNhc2UgdGhlXG4gICAgICAgIC8vIG9iamVjdCBpcyBzaGFyZWQgd2l0aCBhIERhdGVQaWNrZXIsIGUuZy4gdGhyb3VnaCBEYXRlVGltZVBpY2tlci5cbiAgICAgICAgY29weURhdGUobmV3IERhdGUoKSwgeyBob3VyOiAwLCBtaW51dGU6IDAsIHNlY29uZDogMCwgbWlsbGlzZWNvbmQ6IDAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaG91cjoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRIb3VycygpXG4gICAgICB9LFxuXG4gICAgICBzZXQoaG91cikge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBob3VyIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1pbnV0ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRNaW51dGVzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChtaW51dGUpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgbWludXRlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlY29uZDoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRTZWNvbmRzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChzZWNvbmQpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgc2Vjb25kIH0pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0b1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUoZGF0ZSkge1xuICAgICAgaWYgKCtkYXRlICE9PSArdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWVcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCBkYXRlKVxuICAgICAgICB0aGlzLnNjcm9sbEFsbCgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0OiAndXBkYXRlU2VsZWN0aW9uJyxcblxuICAgIHNlbGVjdGlvbjogJ3VwZGF0ZVNlbGVjdGlvbicsXG5cbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAodG8sIGZyb20pIHtcbiAgICAgIGlmICh0bykge1xuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbigpXG4gICAgICAgIHRoaXMuc2Nyb2xsQWxsKDApXG4gICAgICB9XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgdG8pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCh0byA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICAgIGlmICghdG8gJiYgdGhpcy5jaGFuZ2VkKSB7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB0aGlzLmN1cnJlbnRWYWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbGVmdFBhZCh2YWx1ZSkge1xuICAgICAgcmV0dXJuICgnMCcgKyB2YWx1ZSkuc2xpY2UoLTIpXG4gICAgfSxcblxuICAgIHNldFRpbWUob3ZlcnJpZGVzKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGNvcHlEYXRlKHRoaXMuY3VycmVudERhdGUsIHtcbiAgICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgICAgICBtaWxsaXNlY29uZDogMFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdXBkYXRlU2VsZWN0aW9uKGZvcmNlID0gZmFsc2UpIHtcbiAgICAgIGlmICh0aGlzLnNob3dQb3B1cCB8fCBmb3JjZSkge1xuICAgICAgICBjb25zdCBzdGFydCA9IDMgKiB0aGlzLnNlbGVjdGlvblxuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiBzZXRTZWxlY3Rpb24odGhpcy4kcmVmcy5pbnB1dCwgc3RhcnQsIHN0YXJ0ICsgMikpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNjcm9sbEFsbChkdXJhdGlvbiA9IDEwMCkge1xuICAgICAgY29uc3Qgc2Nyb2xsID0gKHJlZiwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy4kcmVmc1tyZWZdXG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAvLyBGaXJzdCBhbmQgbGFzdCBvbmUgYWRkIDMgdGltZXMgdGhlIG1hcmdpblxuICAgICAgICAgIGNvbnN0IGxpbmVIZWlnaHQgPSB0YXJnZXQuc2Nyb2xsSGVpZ2h0IC8gKHRhcmdldC5jaGlsZHJlbi5sZW5ndGggKyA2KVxuICAgICAgICAgIHNjcm9sbFRvKHRhcmdldCwgTWF0aC5yb3VuZCh2YWx1ZSAqIGxpbmVIZWlnaHQpLCBkdXJhdGlvbilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICBzY3JvbGwoJ2hvdXInLCB0aGlzLmhvdXIpXG4gICAgICAgIHNjcm9sbCgnbWludXRlJywgdGhpcy5taW51dGUpXG4gICAgICAgIHNjcm9sbCgnc2Vjb25kJywgdGhpcy5zZWNvbmQpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gWydob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnXVt0aGlzLnNlbGVjdGlvbl1cbiAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICBjb25zdCB7IGhvciwgdmVyLCBlbnRlciB9ID0gZ2V0S2V5TmF2aWdhdGlvbihldmVudClcbiAgICAgICAgaWYgKGhvcikge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zZWxlY3Rpb24gKyBob3JcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IHZhbHVlIDwgMCA/IDIgOiB2YWx1ZSA+IDIgPyAwIDogdmFsdWVcbiAgICAgICAgfSBlbHNlIGlmICh2ZXIpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNbc2VsZWN0ZWRdICsgdmVyXG4gICAgICAgICAgY29uc3QgeyBsZW5ndGggfSA9IHRoaXMuJHJlZnNbc2VsZWN0ZWRdLmNoaWxkcmVuXG4gICAgICAgICAgdGhpc1tzZWxlY3RlZF0gPVxuICAgICAgICAgICAgdmFsdWUgPCAwXG4gICAgICAgICAgICAgID8gdmFsdWUgKyBsZW5ndGhcbiAgICAgICAgICAgICAgOiB2YWx1ZSA+PSBsZW5ndGhcbiAgICAgICAgICAgICAgICA/IHZhbHVlIC0gbGVuZ3RoXG4gICAgICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICB9XG4gICAgICAgIGlmIChlbnRlcikge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG9yIHx8IHZlciB8fCBlbnRlcikge1xuICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKHRydWUpXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdGltZS1waWNrZXIge1xuICAuZGl0by1pbnB1dCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLmRpdG8tdGltZS1waWNrZXItcG9wdXAge1xuICBtYXgtd2lkdGg6IDE2MHB4O1xuICBtYXJnaW46ICRwb3B1cC1tYXJnaW47XG59XG5cbiR0aW1lLXBpY2tlci1saW5lLWhlaWdodDogMjRweDtcblxuLmRpdG8tdGltZS1waWNrZXIge1xuICAuZGl0by1pbnB1dCB7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICAuZGl0by1pY29uLXRpbWUge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogN3B4O1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgIH1cbiAgfVxufVxuXG4uZGl0by10aW1lLXBpY2tlci1wb3B1cCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3c7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5kaXRvLXRpbWUtcGlja2VyLXBvcHVwIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgYm9yZGVyLXdpZHRoOiAwIDFweCAwO1xuICBtYXJnaW4tbGVmdDogLTFweDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgd2lkdGg6IGNhbGMoMTAwJSAvIDMgKyAxcHgpO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICY6bGFzdC1jaGlsZCB7XG4gICAgYm9yZGVyLXJpZ2h0OiAwO1xuICB9XG5cbiAgdWwge1xuICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luOiAwO1xuICAgIC8vIEhpZGUgc2Nyb2xsYmFyOlxuICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAgIHBhZGRpbmc6IDAgMTdweCAwIDA7XG4gICAgaGVpZ2h0OiA3ICogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0O1xuXG4gICAgJiA+IGxpIHtcbiAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6ICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDMgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDMgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0O1xuICAgICAgfVxuXG4gICAgICAmLnNlbGVjdGVkLFxuICAgICAgJi5zZWxlY3RlZDpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIH1cblxuICAgICAgJi5kaXNhYmxlZCB7XG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgY29sb3I6ICRjb2xvci1kaXNhYmxlZDtcbiAgICAgIH1cblxuICAgICAgJi5kaXNhYmxlZDpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1kYXRlLXRpbWUtcGlja2VyKHJlZj1cInBpY2tlclwiKVxuICAuZGl0by1waWNrZXJzKDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBmb2N1c2VkIH1cIilcbiAgICBEYXRlUGlja2VyKFxuICAgICAgcmVmPVwiZGF0ZVwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHYtbW9kZWw6c2hvdz1cInNob3dEYXRlXCJcbiAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZWhvbGRlciwgbG9jYWxlLCBkYXRlRm9ybWF0LCBkaXNhYmxlZCB9XCJcbiAgICAgIEBmb2N1cz1cImRhdGVGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICBAYmx1cj1cImRhdGVGb2N1c2VkID0gZmFsc2VcIlxuICAgIClcbiAgICBUaW1lUGlja2VyKFxuICAgICAgcmVmPVwidGltZVwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHYtbW9kZWw6c2hvdz1cInNob3dUaW1lXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwiXCJcbiAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiXG4gICAgICA6dGFyZ2V0PVwiJHJlZnMucGlja2VyXCJcbiAgICAgIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgZGlzYWJsZWQgfVwiXG4gICAgICBAZm9jdXM9XCJ0aW1lRm9jdXNlZCA9IHRydWVcIlxuICAgICAgQGJsdXI9XCJ0aW1lRm9jdXNlZCA9IGZhbHNlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZGVmYXVsdEZvcm1hdHMgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERhdGVQaWNrZXIgZnJvbSAnLi9EYXRlUGlja2VyLnZ1ZSdcbmltcG9ydCBUaW1lUGlja2VyIGZyb20gJy4vVGltZVBpY2tlci52dWUnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBEYXRlUGlja2VyLCBUaW1lUGlja2VyIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ2NoYW5nZScsICdmb2N1cycsICdibHVyJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGVGb3JtYXQ6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiBkZWZhdWx0Rm9ybWF0cy5kYXRlIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMubW9kZWxWYWx1ZSxcbiAgICAgIHNob3dEYXRlOiBmYWxzZSxcbiAgICAgIHNob3dUaW1lOiBmYWxzZSxcbiAgICAgIGRhdGVGb2N1c2VkOiBmYWxzZSxcbiAgICAgIHRpbWVGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGNoYW5nZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGVGb2N1c2VkIHx8IHRoaXMudGltZUZvY3VzZWRcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShkYXRlKSB7XG4gICAgICBpZiAoK2RhdGUgIT09ICt0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZVxuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIGRhdGUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCh0byA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICAgIGlmICghdG8gJiYgdGhpcy5jaGFuZ2VkKSB7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB0aGlzLmN1cnJlbnRWYWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmRhdGUuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy4kcmVmcy5kYXRlLmJsdXIoKVxuICAgICAgdGhpcy4kcmVmcy50aW1lLmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZGF0ZS10aW1lLXBpY2tlciB7XG4gIC5kaXRvLXBpY2tlcnMge1xuICAgIEBleHRlbmQgJWlucHV0O1xuXG4gICAgcGFkZGluZzogMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuXG4gICAgLmRpdG8taW5wdXQge1xuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgIGJvcmRlcjogMDtcbiAgICB9XG4gIH1cblxuICAuZGl0by1kYXRlLXBpY2tlciB7XG4gICAgd2lkdGg6IDYwJTtcbiAgICBtaW4td2lkdGg6IDYuOWVtO1xuXG4gICAgLmRpdG8taW5wdXQge1xuICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICB9XG4gIH1cblxuICAuZGl0by10aW1lLXBpY2tlciB7XG4gICAgd2lkdGg6IDQwJTtcbiAgICBtaW4td2lkdGg6IDUuNGVtO1xuXG4gICAgLmRpdG8taW5wdXQge1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmkuZGl0by1pY29uKDpjbGFzcz1cImBkaXRvLWljb24tJHtuYW1lfWBcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgbmFtZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi8vIGB5YXJuIGJ1aWxkOmljb25zYCBjb252ZXJ0cyB0aGUgaWNvbiBTVkcgZmlsZXMgdG8gc2lsZW50IGNsYXNzZXMgaW5zaWRlXG4vLyBgc3JjL3N0eWxlcy9taXhpbnMvX2ljb25zLnNjc3NgLCBtYWtpbmcgdGhlbSBhdmFpbGFibGUgdG8gYWxsIG90aGVyIHNhc3Ncbi8vIGNvZGUgdGhyb3VnaCBgX2ltcG9ydHNgLlxuLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byB1c2UgdGhlbSBhcyBub3JtYWwgQ1NTIGNsYXNzZXMsIGNvbnZlcnQgdGhlbSBoZXJlOlxuQGVhY2ggJG5hbWUgaW4gJGljb25zIHtcbiAgLmRpdG8taWNvbi0jeyRuYW1lfSB7XG4gICAgQGV4dGVuZCAlaWNvbi0jeyRuYW1lfTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjwhLS0gZXNsaW50LWRpc2FibGUgdnVlL25vLXRlbXBsYXRlLXNoYWRvdyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1wYWdpbmF0aW9uXG4gIC5kaXRvLXBhZ2luYXRpb24tdG90YWwoXG4gICAgdi1pZj1cInNob3dUb3RhbFwiXG4gIClcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtaWY9XCJ0b3RhbCA+IDBcIlxuICAgICkge3sgZmlyc3QgfX0g4oCTIHt7IGxhc3QgfX1cbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtZWxzZVxuICAgICkgMFxuICAgIHwgLyB7eyB0b3RhbCB9fVxuICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHYtZm9yPVwicGFnZSBpbiBwYWdlUmFuZ2VcIlxuICAgICAgOmNsYXNzPVwiZ2V0UGFnZUNsYXNzKHBhZ2UpXCJcbiAgICAgIDpkaXNhYmxlZD1cInBhZ2UuZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrPVwib25DbGlja1BhZ2UocGFnZSlcIlxuICAgIClcbiAgICAgIHNwYW4oXG4gICAgICAgIHYtaWY9XCJwYWdlLnRleHRcIlxuICAgICAgKSB7eyBwYWdlLnRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTpwYWdlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfSxcbiAgICBwYWdlOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMSB9LFxuICAgIHBhZ2VTaXplOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMTAgfSxcbiAgICBzaG93VG90YWw6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZVJhbmdlOiBbXSxcbiAgICAgIHNob3dQcmV2OiB0cnVlLFxuICAgICAgc2hvd05leHQ6IHRydWUsXG4gICAgICBudW1QYWdlczogMCxcbiAgICAgIGN1cnJlbnRQYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSxcbiAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLnBhZ2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmaXJzdCgpIHtcbiAgICAgIHJldHVybiAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5jdXJyZW50UGFnZVNpemUgKyAxXG4gICAgfSxcblxuICAgIGxhc3QoKSB7XG4gICAgICByZXR1cm4gTWF0aC5taW4odGhpcy5maXJzdCArIHRoaXMuY3VycmVudFBhZ2VTaXplIC0gMSwgdGhpcy50b3RhbClcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB0b3RhbDogJ3VwZGF0ZVBhZ2VSYW5nZScsXG4gICAgc2hvd1ByZXY6ICd1cGRhdGVQYWdlUmFuZ2UnLFxuICAgIHNob3dOZXh0OiAndXBkYXRlUGFnZVJhbmdlJyxcblxuICAgIHBhZ2UocGFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2VcbiAgICB9LFxuXG4gICAgcGFnZVNpemUocGFnZVNpemUpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2VTaXplID0gcGFnZVNpemVcbiAgICB9LFxuXG4gICAgY3VycmVudFBhZ2VTaXplKGN1cnJlbnRQYWdlU2l6ZSkge1xuICAgICAgdGhpcy5udW1QYWdlcyA9IE1hdGguY2VpbCh0aGlzLnRvdGFsIC8gY3VycmVudFBhZ2VTaXplKVxuICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPiB0aGlzLm51bVBhZ2VzKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLm51bVBhZ2VzXG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVBhZ2VSYW5nZSgpXG4gICAgfSxcblxuICAgIGN1cnJlbnRQYWdlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgdGhpcy51cGRhdGVQYWdlUmFuZ2UoKVxuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6cGFnZScsIHRvKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VcbiAgICB0aGlzLmN1cnJlbnRQYWdlU2l6ZSA9IHRoaXMucGFnZVNpemVcbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMudXBkYXRlUGFnZVJhbmdlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25DbGlja1BhZ2UocGFnZSkge1xuICAgICAgaWYgKHBhZ2UuaW5kZXggJiYgIXBhZ2UuZGlzYWJsZWQgJiYgcGFnZS5pbmRleCAhPT0gdGhpcy5jdXJyZW50UGFnZSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZS5pbmRleFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRQYWdlQ2xhc3MocGFnZSkge1xuICAgICAgY29uc3QgY2xhc3NlcyA9IHtcbiAgICAgICAgJ2RpdG8tc2VsZWN0ZWQnOiBwYWdlLmFjdGl2ZVxuICAgICAgfVxuICAgICAgaWYgKHBhZ2UudHlwZSkge1xuICAgICAgICBjbGFzc2VzW2BkaXRvLWJ1dHRvbi0ke3BhZ2UudHlwZX1gXSA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGFzc2VzXG4gICAgfSxcblxuICAgIHVwZGF0ZVBhZ2VSYW5nZSgpIHtcbiAgICAgIGNvbnN0IHsgc2hvd1ByZXYsIHNob3dOZXh0LCB0b3RhbCwgY3VycmVudFBhZ2VTaXplLCBjdXJyZW50UGFnZSB9ID0gdGhpc1xuICAgICAgY29uc3Qgc2hvd0xlbmd0aCA9IHNob3dQcmV2ICsgc2hvd05leHQgKyAxXG4gICAgICBjb25zdCBudW1QYWdlcyA9ICh0aGlzLm51bVBhZ2VzID0gTWF0aC5jZWlsKHRvdGFsIC8gY3VycmVudFBhZ2VTaXplKSlcblxuICAgICAgbGV0IHN0YXJ0ID0gMVxuICAgICAgbGV0IGVuZCA9IDFcbiAgICAgIGlmIChudW1QYWdlcyA8PSBzaG93TGVuZ3RoKSB7XG4gICAgICAgIGVuZCA9IG51bVBhZ2VzXG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQYWdlIDw9IHNob3dQcmV2ICsgMSkge1xuICAgICAgICBlbmQgPSBzaG93TGVuZ3RoXG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQYWdlID49IG51bVBhZ2VzIC0gc2hvd05leHQpIHtcbiAgICAgICAgZW5kID0gbnVtUGFnZXNcbiAgICAgICAgc3RhcnQgPSBudW1QYWdlcyAtIHNob3dMZW5ndGggKyAxXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydCA9IGN1cnJlbnRQYWdlIC0gc2hvd1ByZXZcbiAgICAgICAgZW5kID0gY3VycmVudFBhZ2UgKyBzaG93TmV4dFxuICAgICAgfVxuXG4gICAgICBjb25zdCBwYWdlUmFuZ2UgPSBbXVxuICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICBpbmRleDogY3VycmVudFBhZ2UgLSAxLFxuICAgICAgICB0eXBlOiAncHJldicsXG4gICAgICAgIGRpc2FibGVkOiBjdXJyZW50UGFnZSA8PSAxXG4gICAgICB9KVxuICAgICAgaWYgKHN0YXJ0ID49IDIpIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goeyBpbmRleDogMSwgdGV4dDogMSB9KVxuICAgICAgfVxuICAgICAgaWYgKHN0YXJ0ID4gMikge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE1hdGgubWF4KDEsIGN1cnJlbnRQYWdlIC0gMTApLFxuICAgICAgICAgIHR5cGU6ICdlbGxpcHNpcy1wcmV2J1xuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgIGFjdGl2ZTogaSA9PT0gY3VycmVudFBhZ2VcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPCBudW1QYWdlcyAtIDEpIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICAgIGluZGV4OiBNYXRoLm1pbihudW1QYWdlcywgY3VycmVudFBhZ2UgKyAxMCksXG4gICAgICAgICAgdHlwZTogJ2VsbGlwc2lzLW5leHQnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoZW5kIDw9IG51bVBhZ2VzIC0gMSkge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7IGluZGV4OiBudW1QYWdlcywgdGV4dDogbnVtUGFnZXMgfSlcbiAgICAgIH1cbiAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgaW5kZXg6IGN1cnJlbnRQYWdlICsgMSxcbiAgICAgICAgdHlwZTogJ25leHQnLFxuICAgICAgICBkaXNhYmxlZDogY3VycmVudFBhZ2UgPj0gbnVtUGFnZXNcbiAgICAgIH0pXG5cbiAgICAgIHRoaXMucGFnZVJhbmdlID0gcGFnZVJhbmdlXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYWdpbmF0aW9uIHtcbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1wYWdpbmF0aW9uLXRvdGFsIHtcbiAgICBAaW5jbHVkZSBlbGxpcHNpcztcblxuICAgIG1hcmdpbjogMCAwLjVlbTtcbiAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbiB7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZSwgY29sb3IgMHMsIGJhY2tncm91bmQgMHMsIGJvcmRlciAwcztcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgIHBhZGRpbmc6IDAgMC41ZW07XG5cbiAgICAmLXByZXYsXG4gICAgJi1uZXh0IHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIEBleHRlbmQgJWljb24tYXJyb3c7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi1wcmV2OjpiZWZvcmUge1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xuICAgIH1cblxuICAgICYtZWxsaXBzaXMtcHJldixcbiAgICAmLWVsbGlwc2lzLW5leHQge1xuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgQGV4dGVuZCAlaWNvbi1lbGxpcHNpcztcbiAgICAgIH1cblxuICAgICAgJjpob3Zlcjo6YmVmb3JlIHtcbiAgICAgICAgQGV4dGVuZCAlaWNvbi1jaGV2cm9ucztcbiAgICAgIH1cblxuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgIGJvcmRlcjogMDtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBjb2xvcjogJGNvbG9yLXRleHQ7XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIH1cblxuICAgICAgJjphY3RpdmUge1xuICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgICYtZWxsaXBzaXMtcHJldjo6YmVmb3JlIHtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc3dpdGNoKFxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbilcbiAgLmRpdG8tc3dpdGNoLXBhbmVcbiAgICBpbnB1dChcbiAgICAgIDppZD1cImlkXCJcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtYmluZD1cIiRhdHRyc1wiXG4gICAgICB2LW1vZGVsPVwiY2hlY2tlZFwiXG4gICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgOm5hbWU9XCJuYW1lXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvblxuICAgIHNwYW4uZGl0by1zd2l0Y2gtbGFiZWwoXG4gICAgICB2LWlmPVwibGFiZWxzXCJcbiAgICApXG4gICAgICBzbG90KFxuICAgICAgICB2LWlmPVwiY2hlY2tlZFwiXG4gICAgICAgIG5hbWU9XCJjaGVja2VkXCJcbiAgICAgICkge3sgbGFiZWxzLmNoZWNrZWQgfHwgJ29uJyB9fVxuICAgICAgc2xvdChcbiAgICAgICAgdi1lbHNlXG4gICAgICAgIG5hbWU9XCJ1bmNoZWNrZWRcIlxuICAgICAgKSB7eyBsYWJlbHMudW5jaGVja2VkIHx8ICdvZmYnIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZScsICdjaGFuZ2UnXSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBpZDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBuYW1lOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbGFiZWxzOiB7IHR5cGU6IFtPYmplY3QsIEJvb2xlYW5dLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2hlY2tlZDogdGhpcy5tb2RlbFZhbHVlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY2xhc3NlcygpIHtcbiAgICAgIGNvbnN0IHsgY2hlY2tlZCwgZGlzYWJsZWQgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWNoZWNrZWQnOiBjaGVja2VkLFxuICAgICAgICAnZGl0by1kaXNhYmxlZCc6IGRpc2FibGVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIGNvbnN0IHsgbGFiZWxzOiB7IGNoZWNrZWQsIHVuY2hlY2tlZCB9ID0ge30gfSA9IHRoaXNcbiAgICAgIC8vIENhbGN1bGF0ZSBgLS1zd2l0Y2gtd2lkdGhgIGluIGByZW1gLCBiYXNlZCBvbiBsYWJlbCBsZW5ndGguXG4gICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1heCgwLCBjaGVja2VkPy5sZW5ndGgsIHVuY2hlY2tlZD8ubGVuZ3RoKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJy0tc3dpdGNoLXdpZHRoJzogbGVuZ3RoID8gYCR7bGVuZ3RoICogMS41fXJlbWAgOiBudWxsXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZShtb2RlbFZhbHVlKSB7XG4gICAgICB0aGlzLmNoZWNrZWQgPSBtb2RlbFZhbHVlXG4gICAgfSxcblxuICAgIGNoZWNrZWQoY2hlY2tlZCkge1xuICAgICAgaWYgKGNoZWNrZWQgIT09IHRoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIGNoZWNrZWQpXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIGNoZWNrZWQpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc3dpdGNoIHtcbiAgLy8gVXNlIHdob2xlIG11bHRpcGxlcyBvZiBgcmVtYCBmb3Igc2l6ZXMgYW5kIGBweGAgbWFyZ2lucy9wYWRkaW5nIGFsb25nXG4gIC8vIHdpdGggYGNhbGMoKWAgdG8gZW5kIHVwIHdpdGggZXZlbiBwaXhlbCBzaXplcy5cbiAgLS1zd2l0Y2gtd2lkdGg6IDRlbTtcbiAgLS1zd2l0Y2gtaGVpZ2h0OiAyZW07XG4gIC0tc3dpdGNoLW1hcmdpbjogMnB4O1xuICAtLXN3aXRjaC1wYWRkaW5nOiAzcHg7XG4gIC0tc3dpdGNoLXNwZWVkOiAzMDBtcztcbiAgLS1sYWJlbC1tYXJnaW46IDAuNWVtO1xuICAtLXdpZHRoOiBjYWxjKHZhcigtLXN3aXRjaC13aWR0aCkgLSAyICogdmFyKC0tc3dpdGNoLW1hcmdpbikpO1xuICAtLWhlaWdodDogY2FsYyh2YXIoLS1zd2l0Y2gtaGVpZ2h0KSAtIDIgKiB2YXIoLS1zd2l0Y2gtbWFyZ2luKSk7XG4gIC0tb2Zmc2V0OiBjYWxjKHZhcigtLXdpZHRoKSAtIHZhcigtLWhlaWdodCkpO1xuXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IHZhcigtLXN3aXRjaC1oZWlnaHQpO1xuICAvLyBUbyBtYWtlIGlubGluZSBsYWJlbHMgYXBwZWFyIG9uIGNvbnNpc3RlbnQgYmFzZWxpbmU6XG4gIHZlcnRpY2FsLWFsaWduOiBib3R0b207XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gIC5kaXRvLXN3aXRjaC1wYW5lIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgd2lkdGg6IHZhcigtLXdpZHRoKTtcbiAgICBoZWlnaHQ6IHZhcigtLWhlaWdodCk7XG4gIH1cblxuICAuZGl0by1zd2l0Y2gtcGFuZSxcbiAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICB0b3A6IDUwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIH1cblxuICBpbnB1dCB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGJvcmRlci1yYWRpdXM6IDFlbTtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHQ7XG4gICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuM3MsIGJhY2tncm91bmQtY29sb3IgMC4zcztcbiAgfVxuXG4gIC5kaXRvLXN3aXRjaC1idXR0b24ge1xuICAgIC0tc2l6ZTogY2FsYyh2YXIoLS1oZWlnaHQpIC0gMiAqIHZhcigtLXN3aXRjaC1wYWRkaW5nKSk7XG5cbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiB2YXIoLS1zd2l0Y2gtcGFkZGluZyk7XG4gICAgbGVmdDogdmFyKC0tc3dpdGNoLXBhZGRpbmcpO1xuICAgIHdpZHRoOiB2YXIoLS1zaXplKTtcbiAgICBoZWlnaHQ6IHZhcigtLXNpemUpO1xuICAgIGJvcmRlci1yYWRpdXM6IGNhbGModmFyKC0tc2l6ZSkgLyAyKTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gdmFyKC0tc3dpdGNoLXNwZWVkKTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gIH1cblxuICAuZGl0by1zd2l0Y2gtYnV0dG9uLFxuICAuZGl0by1zd2l0Y2gtbGFiZWwge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG5cbiAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IHZhcigtLWxhYmVsLW1hcmdpbik7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICB9XG5cbiAgJi5kaXRvLWNoZWNrZWQge1xuICAgIGlucHV0IHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuXG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvbiB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgodmFyKC0tb2Zmc2V0KSk7XG4gICAgfVxuXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICAgIGxlZnQ6IHZhcigtLWxhYmVsLW1hcmdpbik7XG4gICAgICByaWdodDogdW5zZXQ7XG4gICAgfVxuICB9XG5cbiAgJi5kaXRvLWRpc2FibGVkIHtcbiAgICBAZXh0ZW5kICVidXR0b24tZGlzYWJsZWQ7XG4gIH1cblxuICAmOmZvY3VzLXdpdGhpbjpub3QoOmhvdmVyKSB7XG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvbiB7XG4gICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgeyBoIGFzIGNyZWF0ZUVsZW1lbnQsIFRyYW5zaXRpb24gfSBmcm9tICd2dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5mdW5jdGlvbiBUcmFuc2l0aW9uSGVpZ2h0KHsgZW5hYmxlZCB9LCB7IHNsb3RzIH0pIHtcbiAgcmV0dXJuIGVuYWJsZWRcbiAgICA/IGNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgcHJvcHMsIHNsb3RzKVxuICAgIDogc2xvdHMuZGVmYXVsdCgpXG59XG5cblRyYW5zaXRpb25IZWlnaHQucHJvcHMgPSB7XG4gIGVuYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb25IZWlnaHRcblxuY29uc3Qgc2V0U3R5bGUgPSAoZWxlbWVudCwgc3R5bGUpID0+IE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpXG5cbi8vIEZvcmNlIHJlcGFpbnQgdG8gbWFrZSBzdXJlIHRoZSBhbmltYXRpb24gaXMgdHJpZ2dlcmVkIGNvcnJlY3RseS5cbmNvbnN0IGZvcmNlUmVwYWludCA9IGVsZW1lbnQgPT4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5oZWlnaHRcblxuY29uc3QgcHJvcHMgPSB7XG4gIG5hbWU6ICdoZWlnaHQnLFxuXG4gIG9uQWZ0ZXJFbnRlcihlbGVtZW50KSB7XG4gICAgLy8gQSB0aW1lb3V0IGJlZm9yZSBzZXR0aW5nIHN0eWxlIGlzIG9ubHkgcmVhbGx5IG5lZWRlZCBhZnRlciBjYWxscyB0b1xuICAgIC8vIGBmb3JjZVJlcGFpbnQoKWAsIGJ1dCB1c2luZyBvbmUgaGVyZSB0b28gcHJlc2VydmVzIGV4ZWN1dGlvbiBzZXF1ZW5jZSBzb1xuICAgIC8vIHRoYXQgdGhlIGNhbGwgZnJvbSBgZW50ZXIoKWAgY2FuIG5ldmVyIG91dHJ1biB0aGUgb25lIGZyb20gYGFmdGVyRW50ZXIoKWBcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiAnYXV0bycgfSkpXG4gIH0sXG5cbiAgb25FbnRlcihlbGVtZW50KSB7XG4gICAgY29uc3QgeyB3aWR0aCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICAgIHNldFN0eWxlKGVsZW1lbnQsIHtcbiAgICAgIHdpZHRoLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICAgIGhlaWdodDogJ2F1dG8nXG4gICAgfSlcbiAgICBjb25zdCB7IGhlaWdodCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICAgIHNldFN0eWxlKGVsZW1lbnQsIHtcbiAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgcG9zaXRpb246IG51bGwsXG4gICAgICB2aXNpYmlsaXR5OiBudWxsLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0IH0pKVxuICB9LFxuXG4gIG9uTGVhdmUoZWxlbWVudCkge1xuICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiAwIH0pKVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4kZHVyYXRpb246IDAuMTVzO1xuXG4uaGVpZ2h0LWVudGVyLWFjdGl2ZSxcbi5oZWlnaHQtbGVhdmUtYWN0aXZlIHtcbiAgdHJhbnNpdGlvbjogaGVpZ2h0ICRkdXJhdGlvbiAkZWFzZS1vdXQtcXVhcnQ7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5oZWlnaHQtZW50ZXItYWN0aXZlIHtcbiAgYW5pbWF0aW9uOiBzbGlkZS1lbnRlciAkZHVyYXRpb24gJGVhc2Utb3V0LXF1YXJ0O1xufVxuXG4uaGVpZ2h0LWxlYXZlLWFjdGl2ZSB7XG4gIGFuaW1hdGlvbjogc2xpZGUtbGVhdmUgJGR1cmF0aW9uICRlYXNlLW91dC1xdWFydDtcbn1cblxuLmhlaWdodC1lbnRlci1mcm9tLFxuLmhlaWdodC1sZWF2ZS10byB7XG4gIGhlaWdodDogMDtcbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBkZWZpbmVDb21wb25lbnQsIHJlZiwgd2F0Y2gsIG9uU2NvcGVEaXNwb3NlLCBoIH0gZnJvbSAndnVlLWRlbWknO1xuaW1wb3J0IHsgY3JlYXRlRm9jdXNUcmFwIH0gZnJvbSAnZm9jdXMtdHJhcCc7XG5pbXBvcnQgeyB1bnJlZkVsZW1lbnQgfSBmcm9tICdAdnVldXNlL2NvcmUnO1xuXG5jb25zdCBVc2VGb2N1c1RyYXAgPSAvKiBAX19QVVJFX18gKi8gLyogI19fUFVSRV9fICovIGRlZmluZUNvbXBvbmVudCh7XG4gIG5hbWU6IFwiVXNlRm9jdXNUcmFwXCIsXG4gIHByb3BzOiBbXCJhc1wiLCBcIm9wdGlvbnNcIl0sXG4gIHNldHVwKHByb3BzLCB7IHNsb3RzIH0pIHtcbiAgICBsZXQgdHJhcDtcbiAgICBjb25zdCB0YXJnZXQgPSByZWYoKTtcbiAgICBjb25zdCBhY3RpdmF0ZSA9ICgpID0+IHRyYXAgJiYgdHJhcC5hY3RpdmF0ZSgpO1xuICAgIGNvbnN0IGRlYWN0aXZhdGUgPSAoKSA9PiB0cmFwICYmIHRyYXAuZGVhY3RpdmF0ZSgpO1xuICAgIHdhdGNoKFxuICAgICAgKCkgPT4gdW5yZWZFbGVtZW50KHRhcmdldCksXG4gICAgICAoZWwpID0+IHtcbiAgICAgICAgaWYgKCFlbClcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRyYXAgPSBjcmVhdGVGb2N1c1RyYXAoZWwsIHByb3BzLm9wdGlvbnMgfHwge30pO1xuICAgICAgICBhY3RpdmF0ZSgpO1xuICAgICAgfSxcbiAgICAgIHsgZmx1c2g6IFwicG9zdFwiIH1cbiAgICApO1xuICAgIG9uU2NvcGVEaXNwb3NlKCgpID0+IGRlYWN0aXZhdGUoKSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChzbG90cy5kZWZhdWx0KVxuICAgICAgICByZXR1cm4gaChwcm9wcy5hcyB8fCBcImRpdlwiLCB7IHJlZjogdGFyZ2V0IH0sIHNsb3RzLmRlZmF1bHQoKSk7XG4gICAgfTtcbiAgfVxufSk7XG5cbmV4cG9ydCB7IFVzZUZvY3VzVHJhcCB9O1xuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWRpYWxvZyhcbiAgcmVmPVwiZGlhbG9nXCJcbiAgcm9sZT1cImRpYWxvZ1wiXG4gIGFyaWEtZXhwYW5kZWQ9XCJ0cnVlXCJcbiAgYXJpYS1tb2RhbD1cInRydWVcIlxuICA6c3R5bGU9XCJ7ICctLXdpZHRoJzogYCR7c2V0dGluZ3Mud2lkdGh9cHhgIH1cIlxuICBAbW91c2V1cD1cIm9uTW91c2VVcFwiXG4pXG4gIFVzZUZvY3VzVHJhcC5kaXRvLWRpYWxvZ19fZm9jdXMtdHJhcChcbiAgICA6b3B0aW9ucz1cInsgaW1tZWRpYXRlOiB0cnVlLCBmYWxsYmFja0ZvY3VzOiAoKSA9PiAkcmVmcy5kaWFsb2cgfVwiXG4gIClcbiAgICBmb3JtLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgICAgIEBzdWJtaXQucHJldmVudD1cInN1Ym1pdFwiXG4gICAgKVxuICAgICAgRGl0b1NjaGVtYShcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgICAgIHNjcm9sbGFibGVcbiAgICAgICAgZ2VuZXJhdGVMYWJlbHNcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoI2J1dHRvbnMpXG4gICAgICAgICAgRGl0b0J1dHRvbnMuZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNsb25lIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cyB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBVc2VGb2N1c1RyYXAgfSBmcm9tICdAdnVldXNlL2ludGVncmF0aW9ucy91c2VGb2N1c1RyYXAvY29tcG9uZW50J1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9EaWFsb2cnLCB7XG4gIGNvbXBvbmVudHM6IHsgVXNlRm9jdXNUcmFwIH0sXG4gIGVtaXRzOiBbJ3JlbW92ZSddLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRkaWFsb2dDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBjb21wb25lbnRzOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwcm9taXNlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHNldHRpbmdzOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiAoKSA9PiAoe1xuICAgICAgICB3aWR0aDogNDgwLFxuICAgICAgICBjbGlja1RvQ2xvc2U6IGZhbHNlXG4gICAgICB9KVxuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIC8vIE1ha2Ugc3VyZSBkaWFsb2cgZGF0YSBjb250YWlucyBhbGwgdGhlIGV4cGVjdGVkIGtleXNcbiAgICBjb25zdCBkaWFsb2dEYXRhID0gY2xvbmUodGhpcy5kYXRhKVxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgaWYgKCEoa2V5IGluIGRpYWxvZ0RhdGEpKSB7XG4gICAgICAgIGRpYWxvZ0RhdGFba2V5XSA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpbmRvd0V2ZW50czogbnVsbCxcbiAgICAgIGRpYWxvZ0RhdGFcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnZGlhbG9nJyxcbiAgICAgICAgY29tcG9uZW50czogdGhpcy5jb21wb25lbnRzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhnZXRCdXR0b25TY2hlbWFzKHRoaXMuYnV0dG9ucykpLm1hcChcbiAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBidXR0b24gc2NoZW1hcyB0byBhZGQgZGVmYXVsdCBjbGljayBldmVudHNcbiAgICAgICAgICAvLyBmb3IgYm90aCAnc3VibWl0JyBhbmQgJ2NhbmNlbCcgYnV0dG9uczpcbiAgICAgICAgICAoW2tleSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2NhbmNlbCcgJiYgIXNjaGVtYS5ldmVudHMpIHtcbiAgICAgICAgICAgICAgc2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW2tleSwgc2NoZW1hXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuYnV0dG9uU2NoZW1hcykubGVuZ3RoID4gMFxuICAgIH0sXG5cbiAgICBoYXNDYW5jZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmJ1dHRvblNjaGVtYXMuY2FuY2VsXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy53aW5kb3dFdmVudHMgPSBhZGRFdmVudHMod2luZG93LCB7XG4gICAgICBrZXl1cDogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoKHRoaXMuaGFzQ2FuY2VsIHx8ICF0aGlzLmhhc0J1dHRvbnMpICYmIGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgICAgdGhpcy5jYW5jZWwoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy53aW5kb3dFdmVudHMucmVtb3ZlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVtb3ZlKCkge1xuICAgICAgdGhpcy4kZW1pdCgncmVtb3ZlJylcbiAgICB9LFxuXG4gICAgcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlc29sdmUodmFsdWUpXG4gICAgICB0aGlzLnJlbW92ZSgpXG4gICAgfSxcblxuICAgIHJlamVjdCh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlamVjdCh2YWx1ZSlcbiAgICAgIHRoaXMucmVtb3ZlKClcbiAgICB9LFxuXG4gICAgc3VibWl0KCkge1xuICAgICAgdGhpcy5yZXNvbHZlKHRoaXMuZGlhbG9nRGF0YSlcbiAgICB9LFxuXG4gICAgY2FuY2VsKCkge1xuICAgICAgdGhpcy5yZXNvbHZlKG51bGwpXG4gICAgfSxcblxuICAgIGNsb3NlKCkge1xuICAgICAgdGhpcy5jYW5jZWwoKVxuICAgIH0sXG5cbiAgICBvbk1vdXNlVXAoKSB7XG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5jbGlja1RvQ2xvc2UpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZGlhbG9nIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBkaXNwbGF5OiBmbGV4O1xuICBpbnNldDogMDtcbiAgei1pbmRleDogMjAwMDtcbiAgcGFkZGluZzogJGNvbnRlbnQtcGFkZGluZztcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC8vIFByZXZlbnQgc2Nyb2xsaW5nIG9mIHRoZSBwYWdlIGJlaGluZCB0aGUgZGlhbG9nOlxuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG5cbiAgJl9fZm9jdXMtdHJhcCB7XG4gICAgbWF4LWhlaWdodDogMTAwJTtcbiAgfVxuXG4gIC8vIFRPRE86IGAmX19pbm5lcmBcbiAgZm9ybSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBtYXgtd2lkdGg6IHZhcigtLXdpZHRoLCA0ODBweCk7XG4gICAgbWF4LWhlaWdodDogMTAwJTtcbiAgICBib3gtc2hhZG93OiAwIDIwcHggNjBweCAtMnB4IHJnYmEoMjcsIDMzLCA1OCwgMC40KTtcbiAgfVxufVxuXG4uZGl0by1kaWFsb2ctZW50ZXItYWN0aXZlLFxuLmRpdG8tZGlhbG9nLWxlYXZlLWFjdGl2ZSB7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXM7XG5cbiAgZm9ybSB7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMjVzO1xuICB9XG59XG5cbi5kaXRvLWRpYWxvZy1lbnRlci1mcm9tLFxuLmRpdG8tZGlhbG9nLWxlYXZlLXRvIHtcbiAgb3BhY2l0eTogMDtcblxuICBmb3JtIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwcHgpO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRvbUhhbmRsZXJzOiBbXVxuICAgIH1cbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgZm9yIChjb25zdCB7IHJlbW92ZSB9IG9mIHRoaXMuZG9tSGFuZGxlcnMpIHtcbiAgICAgIHJlbW92ZSgpXG4gICAgfVxuICAgIHRoaXMuZG9tSGFuZGxlcnMgPSBbXVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBkb21PbihlbGVtZW50LCB0eXBlLCBoYW5kbGVyKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhZGRFdmVudHMoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGlzT2JqZWN0KHR5cGUpID8gdHlwZSA6IHsgW3R5cGVdOiBoYW5kbGVyIH1cbiAgICAgIClcbiAgICAgIHRoaXMuZG9tSGFuZGxlcnMucHVzaChyZXN1bHQpXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tcm9vdFxuICBWdWVOb3RpZmljYXRpb25zLmRpdG8tbm90aWZpY2F0aW9ucyhcbiAgICByZWY9XCJub3RpZmljYXRpb25zXCJcbiAgICBwb3NpdGlvbj1cInRvcCByaWdodFwiXG4gICAgY2xhc3Nlcz1cImRpdG8tbm90aWZpY2F0aW9uXCJcbiAgKVxuICBUcmFuc2l0aW9uR3JvdXAobmFtZT1cImRpdG8tZGlhbG9nXCIpXG4gICAgRGl0b0RpYWxvZyhcbiAgICAgIHYtZm9yPVwiKGRpYWxvZywga2V5KSBpbiBkaWFsb2dzXCJcbiAgICAgIDprZXk9XCJrZXlcIlxuICAgICAgOmNvbXBvbmVudHM9XCJkaWFsb2cuY29tcG9uZW50c1wiXG4gICAgICA6YnV0dG9ucz1cImRpYWxvZy5idXR0b25zXCJcbiAgICAgIDpwcm9taXNlPVwiZGlhbG9nLnByb21pc2VcIlxuICAgICAgOmRhdGE9XCJkaWFsb2cuZGF0YVwiXG4gICAgICA6c2V0dGluZ3M9XCJkaWFsb2cuc2V0dGluZ3NcIlxuICAgICAgQHJlbW92ZT1cInJlbW92ZURpYWxvZyhrZXkpXCJcbiAgICApXG4gIERpdG9NZW51XG4gIG1haW4uZGl0by1wYWdlLmRpdG8tc2Nyb2xsLXBhcmVudFxuICAgIERpdG9IZWFkZXIoXG4gICAgICA6c3Bpbm5lcj1cIm9wdGlvbnMuc3Bpbm5lclwiXG4gICAgICA6aXNMb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICApXG4gICAgICBEaXRvQWNjb3VudChcbiAgICAgICAgdi1pZj1cInVzZXJcIlxuICAgICAgKVxuICAgICAgYS5kaXRvLWxvZ2luKFxuICAgICAgICB2LWVsc2UtaWY9XCJhbGxvd0xvZ2luXCJcbiAgICAgICAgQGNsaWNrPVwicm9vdENvbXBvbmVudC5sb2dpbigpXCJcbiAgICAgIClcbiAgICAgICAgc3BhbiBMb2dpblxuICAgIFJvdXRlclZpZXdcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBkZWxlZ2F0ZSBhcyB0aXBweURlbGVnYXRlIH0gZnJvbSAndGlwcHkuanMnXG5pbXBvcnQgeyBhc0FycmF5LCBtYXBDb25jdXJyZW50bHksIHN0cmlwVGFncyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Vc2VyIGZyb20gJy4uL0RpdG9Vc2VyLmpzJ1xuaW1wb3J0IERpdG9WaWV3IGZyb20gJy4uL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlJ1xuaW1wb3J0IERpdG9EaWFsb2cgZnJvbSAnLi9EaXRvRGlhbG9nLnZ1ZSdcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQge1xuICBwcm9jZXNzVmlldyxcbiAgcmVzb2x2ZVNjaGVtYXMsXG4gIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUm9vdCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IERpdG9EaWFsb2cgfSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdmlld3M6ICgpID0+IHRoaXMucmVzb2x2ZWRWaWV3c1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHVucmVzb2x2ZWRWaWV3czogeyB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbiwgUHJvbWlzZV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgb3B0aW9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc29sdmVkVmlld3M6IHt9LFxuICAgICAgcmVtb3ZlUm91dGVzOiBudWxsLFxuICAgICAgZGlhbG9nczoge30sXG4gICAgICBhbGxvd0xvZ2luOiBmYWxzZSxcbiAgICAgIGxvYWRpbmdDb3VudDogMFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy5ub3RpZmljYXRpb25zXG4gICAgfSxcblxuICAgIGlzTG9hZGluZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRpbmdDb3VudCA+IDBcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLmFwcFN0YXRlLnRpdGxlID0gZG9jdW1lbnQudGl0bGUgfHwgJ0RpdG8uanMgQWRtaW4nXG4gICAgLy8gV2l0aCBob3QtcmVsb2FkaW5nLCBpdCBsb29rcyBsaWtlIGRlc3Ryb3llZCBob29rcyBhcmVuJ3QgYWx3YXlzIGNhbGxlZFxuICAgIC8vIGZvciByb3V0ZSBjb21wb25lbnRzIHNvIHJlc2V0IHRoZSBhcnJheSBvZiByZWdpc3RlcmVkIGNvbXBvbmVudHMgaW5zdGVhZC5cbiAgICB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cyA9IFtdXG4gIH0sXG5cbiAgYXN5bmMgbW91bnRlZCgpIHtcbiAgICB0aXBweURlbGVnYXRlKHRoaXMuJGVsLCB7XG4gICAgICB0YXJnZXQ6ICdbZGF0YS10aXBweS1jb250ZW50XSdcbiAgICB9KVxuICAgIC8vIENsZWFyIHRoZSBsYWJlbCBtYXJrZWQgYXMgYWN0aXZlIG9uIGFsbCBtb3VzZSBhbmQga2V5Ym9hcmQgZXZlbnRzLCBleGNlcHRcbiAgICAvLyB0aGUgb25lcyB0aGF0IERpdG9MYWJlbCBpdHNlbGYgaW50ZXJjZXB0cy5cbiAgICB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICBjbGljazogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5jbG9zZXN0KCcuZGl0by1sYWJlbCcpKSB7XG4gICAgICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAga2V5dXA6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdUYWInKSB7XG4gICAgICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuYWxsb3dMb2dpbiA9IGZhbHNlXG4gICAgICBpZiAoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLmxvZ2luKClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgIH1cbiAgICB0aGlzLmFsbG93TG9naW4gPSB0cnVlXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG5vdGlmeSh7IHR5cGUgPSAnaW5mbycsIHRpdGxlLCB0ZXh0IH0gPSB7fSkge1xuICAgICAgdGl0bGUgfHw9IChcbiAgICAgICAge1xuICAgICAgICAgIHdhcm5pbmc6ICdXYXJuaW5nJyxcbiAgICAgICAgICBlcnJvcjogJ0Vycm9yJyxcbiAgICAgICAgICBpbmZvOiAnSW5mb3JtYXRpb24nLFxuICAgICAgICAgIHN1Y2Nlc3M6ICdTdWNjZXNzJ1xuICAgICAgICB9W3R5cGVdIHx8XG4gICAgICAgICdOb3RpZmljYXRpb24nXG4gICAgICApXG4gICAgICB0ZXh0ID0gYDxwPiR7XG4gICAgICAgIGFzQXJyYXkodGV4dCkuam9pbignPC9wPiA8cD4nKVxuICAgICAgfTwvcD5gLnJlcGxhY2UoL1xcbnxcXHJcXG58XFxyL2csICc8YnI+JylcbiAgICAgIGNvbnN0IGxvZyA9IChcbiAgICAgICAge1xuICAgICAgICAgIHdhcm5pbmc6ICd3YXJuJyxcbiAgICAgICAgICBlcnJvcjogJ2Vycm9yJyxcbiAgICAgICAgICBpbmZvOiAnbG9nJyxcbiAgICAgICAgICBzdWNjZXNzOiAnbG9nJ1xuICAgICAgICB9W3R5cGVdIHx8XG4gICAgICAgICdlcnJvcidcbiAgICAgIClcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlW2xvZ10oc3RyaXBUYWdzKHRleHQpKVxuICAgICAgY29uc3QgeyBub3RpZmljYXRpb25zID0gdHJ1ZSB9ID0gdGhpcy5hcGlcbiAgICAgIGlmIChub3RpZmljYXRpb25zKSB7XG4gICAgICAgIC8vIENhbGN1bGF0ZSBkaXNwbGF5LWR1cmF0aW9uIGZvciB0aGUgbm90aWZpY2F0aW9uIGJhc2VkIG9uIGl0cyBjb250ZW50XG4gICAgICAgIC8vIGFuZCB0aGUgc2V0dGluZyBvZiB0aGUgYGR1cmF0aW9uRmFjdG9yYCBjb25maWd1cmF0aW9uLiBJdCBkZWZpbmVzIHRoZVxuICAgICAgICAvLyBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIG11bHRpcGxpZWQgd2l0aCB0aGUgYW1vdW50IG9mIGNoYXJhY3RlcnNcbiAgICAgICAgLy8gZGlzcGxheWVkIGluIHRoZSBub3RpZmljYXRpb24sIHBsdXMgNDAgKDQwICsgdGl0bGUgKyBtZXNzYWdlKTpcbiAgICAgICAgY29uc3QgeyBkdXJhdGlvbkZhY3RvciA9IDIwIH0gPSBub3RpZmljYXRpb25zXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gKDQwICsgdGV4dC5sZW5ndGggKyB0aXRsZS5sZW5ndGgpICogZHVyYXRpb25GYWN0b3JcbiAgICAgICAgdGhpcy4kbm90aWZ5KHsgdHlwZSwgdGl0bGUsIHRleHQsIGR1cmF0aW9uIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsb3NlTm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5kZXN0cm95QWxsKClcbiAgICB9LFxuXG4gICAgcmVnaXN0ZXJMb2FkaW5nKGlzTG9hZGluZykge1xuICAgICAgdGhpcy5sb2FkaW5nQ291bnQgKz0gaXNMb2FkaW5nID8gMSA6IC0xXG4gICAgfSxcblxuICAgIHNob3dEaWFsb2coeyBjb21wb25lbnRzLCBidXR0b25zLCBkYXRhLCBzZXR0aW5ncyB9KSB7XG4gICAgICAvLyBTaG93cyBhIGRpdG8tZGlhbG9nIGNvbXBvbmVudCBhbmQgd3JhcHMgaXQgaW4gYSBwcm9taXNlIHNvIHRoYXQgdGhlXG4gICAgICAvLyBidXR0b25zIGluIHRoZSBkaWFsb2cgY2FuIHVzZSBgZGlhbG9nLnJlc29sdmUoKWAgYW5kIGBkaWFsb2cucmVqZWN0KClgXG4gICAgICAvLyB0byBjbG9zZSB0aGUgbW9kYWwgZGlhbG9nIGFuZCByZXNvbHZlIC8gcmVqZWN0IHRoZSBwcm9taXNlIGF0IG9uY2UuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hc3luYy1wcm9taXNlLWV4ZWN1dG9yXG4gICAgICAgIGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAvLyBQcm9jZXNzIGNvbXBvbmVudHMgdG8gcmVzb2x2ZSBhc3luYyBzY2hlbWFzLlxuICAgICAgICAgIGNvbnN0IHJvdXRlcyA9IFtdXG4gICAgICAgICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoXG4gICAgICAgICAgICB0aGlzLmFwaSxcbiAgICAgICAgICAgIHsgdHlwZTogJ2RpYWxvZycsIGNvbXBvbmVudHMgfSxcbiAgICAgICAgICAgIHJvdXRlcyxcbiAgICAgICAgICAgIDBcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKHJvdXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICdEaWFsb2dzIGRvIG5vdCBzdXBwb3J0IGNvbXBvbmVudHMgdGhhdCBwcm9kdWNlIHJvdXRlcydcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qga2V5ID0gYGRpYWxvZy0keysrZGlhbG9nSWR9YFxuICAgICAgICAgIHRoaXMuZGlhbG9nc1trZXldID0ge1xuICAgICAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgICAgIGJ1dHRvbnMsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgc2V0dGluZ3MsXG4gICAgICAgICAgICBwcm9taXNlOiB7IHJlc29sdmUsIHJlamVjdCB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgfSxcblxuICAgIHJlbW92ZURpYWxvZyhrZXkpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmRpYWxvZ3Nba2V5XVxuICAgIH0sXG5cbiAgICBhc3luYyBsb2dpbigpIHtcbiAgICAgIHRoaXMuYWxsb3dMb2dpbiA9IHRydWVcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYWRkaXRpb25hbENvbXBvbmVudHMsXG4gICAgICAgIHJlZGlyZWN0QWZ0ZXJMb2dpblxuICAgICAgfSA9IHRoaXMub3B0aW9ucy5sb2dpbiB8fCB7fVxuICAgICAgY29uc3QgbG9naW5EYXRhID0gYXdhaXQgdGhpcy5zaG93RGlhbG9nKHtcbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIHVzZXJuYW1lOiB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBhdXRvZm9jdXM6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBhc3N3b3JkOiB7XG4gICAgICAgICAgICB0eXBlOiAncGFzc3dvcmQnXG4gICAgICAgICAgfSxcbiAgICAgICAgICAuLi5hZGRpdGlvbmFsQ29tcG9uZW50c1xuICAgICAgICB9LFxuICAgICAgICBidXR0b25zOiB7XG4gICAgICAgICAgY2FuY2VsOiB7XG4gICAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICAgIHRleHQ6ICdDYW5jZWwnXG4gICAgICAgICAgICAvLyBOT1RFOiBUaGUgY2xpY2sgZXZlbnQgaXMgYWRkZWQgaW4gRGl0b0RpYWxvZy5idXR0b25TY2hlbWFzKClcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgbG9naW46IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgICAgICAgdGV4dDogJ0xvZ2luJ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGlmIChsb2dpbkRhdGEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLmxvZ2luLFxuICAgICAgICAgICAgZGF0YTogbG9naW5EYXRhLFxuICAgICAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmIChyZWRpcmVjdEFmdGVyTG9naW4pIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLnJlcGxhY2UocmVkaXJlY3RBZnRlckxvZ2luKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFVzZXIocmVzcG9uc2UuZGF0YS51c2VyKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXNvbHZlVmlld3MoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBlcnIucmVzcG9uc2U/LmRhdGE/LmVycm9yXG4gICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24gRXJyb3InLFxuICAgICAgICAgICAgdGV4dDogZXJyb3IgfHwgZXJyXG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLnJlc3BvbnNlKVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvZ2luKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZUhvbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSgnLycpXG4gICAgfSxcblxuICAgIGFzeW5jIGxvZ291dCgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLmxvZ291dCxcbiAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5zZXRVc2VyKG51bGwpXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVXNlcigpIHtcbiAgICAgIGxldCB1c2VyID0gbnVsbFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMuc2Vzc2lvbixcbiAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICB1c2VyID0gcmVzcG9uc2UuZGF0YS51c2VyIHx8IG51bGxcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICB0aXRsZTogJ0F1dGhlbnRpY2F0aW9uIEVycm9yJyxcbiAgICAgICAgICB0ZXh0OiBlcnJcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0VXNlcih1c2VyKVxuICAgICAgcmV0dXJuIHVzZXJcbiAgICB9LFxuXG4gICAgc2V0VXNlcih1c2VyKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLnVzZXIgPSAoXG4gICAgICAgIHVzZXIgJiZcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHVzZXIsIERpdG9Vc2VyLnByb3RvdHlwZSlcbiAgICAgIClcbiAgICAgIC8vIENsZWFyIHJlc29sdmVkIHZpZXdzIHdoZW4gdXNlciBpcyBsb2dnZWQgb3V0LlxuICAgICAgaWYgKCF1c2VyKSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IHt9XG4gICAgICAgIHRoaXMubmF2aWdhdGVIb21lKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZW5zdXJlVXNlcigpIHtcbiAgICAgIGlmICghKGF3YWl0IHRoaXMuZmV0Y2hVc2VyKCkpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyByZXNvbHZlVmlld3MoKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnJlc29sdmVkVmlld3MgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyh0aGlzLnVucmVzb2x2ZWRWaWV3cylcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghZXJyb3IucmVxdWVzdCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgICAgLy8gQ29sbGVjdCBhbGwgcm91dGVzIGZyb20gdGhlIHJvb3Qgc2NoZW1hIGNvbXBvbmVudHNcbiAgICAgIGNvbnN0IHJvdXRlcyA9IGF3YWl0IG1hcENvbmN1cnJlbnRseShcbiAgICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5yZXNvbHZlZFZpZXdzKSxcbiAgICAgICAgKFtuYW1lLCBzY2hlbWFdKSA9PiBwcm9jZXNzVmlldyhEaXRvVmlldywgdGhpcy5hcGksIHNjaGVtYSwgbmFtZSlcbiAgICAgIClcbiAgICAgIC8vIE5vdyB0aGF0IHRoZSByb3V0ZXMgYXJlIGxvYWRlZCwgcmVwbGFjZSBhbGwgZXhpc3Rpbmcgcm91dGVzIHdpdGggdGhlXG4gICAgICAvLyBuZXcgcm91dGVzLCBhbmQgcmVzdG9yZSB0aGUgY3VycmVudCBwYXRoLlxuICAgICAgY29uc3QgeyBmdWxsUGF0aCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIHRoaXMucmVtb3ZlUm91dGVzPy4oKVxuICAgICAgdGhpcy5yZW1vdmVSb3V0ZXMgPSBhZGRSb3V0ZXModGhpcy4kcm91dGVyLCBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAncm9vdCcsXG4gICAgICAgICAgcGF0aDogJy8nLFxuICAgICAgICAgIGNvbXBvbmVudHM6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIC4uLnJvdXRlc1xuICAgICAgXSlcbiAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKGZ1bGxQYXRoKVxuICAgIH1cbiAgfVxufSlcblxubGV0IGRpYWxvZ0lkID0gMFxuXG5mdW5jdGlvbiBhZGRSb3V0ZXMocm91dGVyLCByb3V0ZXMpIHtcbiAgY29uc3QgcmVtb3ZlcnMgPSBbXVxuICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlcykge1xuICAgIGNvbnN0IHJlbW92ZVJvdXRlID0gcm91dGVyLmFkZFJvdXRlKHJvdXRlKVxuICAgIHJlbW92ZXJzLnB1c2gocmVtb3ZlUm91dGUpXG4gIH1cblxuICByZXR1cm4gKCkgPT4ge1xuICAgIGZvciAoY29uc3QgcmVtb3ZlIG9mIHJlbW92ZXJzKSB7XG4gICAgICByZW1vdmUoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL3N0eWxlJztcblxuLmRpdG8tYXBwLFxuLmRpdG8tcm9vdCB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG5cbi5kaXRvLXJvb3Qge1xuICAuZGl0by1wYWdlIHtcbiAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbm5hdi5kaXRvLXNpZGViYXIuZGl0by1zY3JvbGwtcGFyZW50XG4gIGgxIHt7IGFwcFN0YXRlLnRpdGxlIH19XG4gIHVsLmRpdG8tc2Nyb2xsXG4gICAgbGkoXG4gICAgICB2LWZvcj1cInZpZXcgaW4gdmlld3NcIlxuICAgIClcbiAgICAgIFJvdXRlckxpbmsoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEodmlldylcIlxuICAgICAgICB2LXNsb3Q9XCJ7IGlzQWN0aXZlLCBocmVmLCByb3V0ZSB9XCJcbiAgICAgICAgY3VzdG9tXG4gICAgICAgIDp0bz1cImAvJHt2aWV3LnBhdGh9YFwiXG4gICAgICApXG4gICAgICAgIGEuZGl0by1saW5rKFxuICAgICAgICAgIDpocmVmPVwiaHJlZlwiXG4gICAgICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCJcbiAgICAgICAgICBAY2xpY2sucHJldmVudD1cIm9uQ2xpY2tMaW5rKHJvdXRlKVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWwodmlldykgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9NZW51Jywge1xuICBtZXRob2RzOiB7XG4gICAgb25DbGlja0xpbmsocm91dGUpIHtcbiAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgLi4ucm91dGUsIGZvcmNlOiB0cnVlIH0pXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2lkZWJhciB7XG4gIGZsZXg6IGluaXRpYWw7XG4gIGZvbnQtc2l6ZTogJG1lbnUtZm9udC1zaXplO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICB1bCB7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXI7XG4gICAgYm9yZGVyLXJpZ2h0OiAkYm9yZGVyLXN0eWxlO1xuICB9XG5cbiAgYSxcbiAgaDEge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5cbiAgaDEge1xuICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmc7XG4gICAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrZXI7XG4gICAgYm9yZGVyLXJpZ2h0OiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1kYXJrZXN0O1xuICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gIH1cblxuICAuZGl0by1saW5rIHtcbiAgICBwYWRkaW5nOiAkbWVudS1wYWRkaW5nO1xuICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodDtcblxuICAgICYuZGl0by1hY3RpdmUge1xuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLWxpbmsge1xuICAmOmZvY3VzOm5vdCg6YWN0aXZlLCAuZGl0by1hY3RpdmUpIHtcbiAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXNwaW5uZXIoXG4gIHYtc2hvdz1cImxvYWRpbmdcIlxuKVxuICAvLy0gVE9ETzogQ29udmVydCB0byBCRU1cbiAgLnYtcHVsc2Uudi1wdWxzZTEoOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSwgc3Bpbm5lckRlbGF5MV1cIilcbiAgLnYtcHVsc2Uudi1wdWxzZTIoOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSwgc3Bpbm5lckRlbGF5Ml1cIilcbiAgLnYtcHVsc2Uudi1wdWxzZTMoOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSwgc3Bpbm5lckRlbGF5M11cIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgbG9hZGluZzoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGNvbG9yOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnIzVkYzU5NidcbiAgICB9LFxuICAgIHNpemU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcxNXB4J1xuICAgIH0sXG4gICAgbWFyZ2luOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMnB4J1xuICAgIH0sXG4gICAgcmFkaXVzOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMTAwJSdcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICAvLyBUT0RPOiBDb252ZXJ0IHRvIHVzaW5nIG9ubHkgY2xhc3Nlc1xuICAgIHJldHVybiB7XG4gICAgICBzcGlubmVyU3R5bGU6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLmNvbG9yLFxuICAgICAgICB3aWR0aDogdGhpcy5zaXplLFxuICAgICAgICBoZWlnaHQ6IHRoaXMuc2l6ZSxcbiAgICAgICAgbWFyZ2luOiB0aGlzLm1hcmdpbixcbiAgICAgICAgYm9yZGVyUmFkaXVzOiB0aGlzLnJhZGl1cyxcbiAgICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICAgIGFuaW1hdGlvbk5hbWU6ICd2LXB1bHNlU3RyZXRjaERlbGF5JyxcbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246ICcwLjc1cycsXG4gICAgICAgIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAnaW5maW5pdGUnLFxuICAgICAgICBhbmltYXRpb25UaW1pbmdGdW5jdGlvbjogJ2N1YmljLWJlemllciguMiwuNjgsLjE4LDEuMDgpJyxcbiAgICAgICAgYW5pbWF0aW9uRmlsbE1vZGU6ICdib3RoJ1xuICAgICAgfSxcbiAgICAgIHNwaW5uZXJEZWxheTE6IHtcbiAgICAgICAgYW5pbWF0aW9uRGVsYXk6ICcwLjEycydcbiAgICAgIH0sXG4gICAgICBzcGlubmVyRGVsYXkyOiB7XG4gICAgICAgIGFuaW1hdGlvbkRlbGF5OiAnMC4yNHMnXG4gICAgICB9LFxuICAgICAgc3Bpbm5lckRlbGF5Mzoge1xuICAgICAgICBhbmltYXRpb25EZWxheTogJzAuMzZzJ1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGtleWZyYW1lcyB2LXB1bHNlU3RyZXRjaERlbGF5IHtcbiAgMCUsXG4gIDgwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG5cbiAgNDUlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgb3BhY2l0eTogMC43O1xuICB9XG59XG5cbkBrZXlmcmFtZXMgdi1wdWxzZVN0cmV0Y2hEZWxheSB7XG4gIDAlLFxuICA4MCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIDQ1JSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5uYXYuZGl0by1oZWFkZXJcbiAgLmRpdG8tdHJhaWxcbiAgICB1bFxuICAgICAgbGkoXG4gICAgICAgIHYtZm9yPVwiKGNvbXBvbmVudCwgaW5kZXgpIGluIHRyYWlsXCJcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1pZj1cImluZGV4ID09PSB0cmFpbC5sZW5ndGggLSAxXCJcbiAgICAgICAgKVxuICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgIHwge3sgY29tcG9uZW50LmJyZWFkY3J1bWIgfX1cbiAgICAgICAgUm91dGVyTGluay5kaXRvLWJyZWFkY3J1bWIoXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgOnRvPVwiY29tcG9uZW50LnBhdGhcIlxuICAgICAgICApXG4gICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgIERpdG9TcGlubmVyKFxuICAgICAgdi1pZj1cImlzTG9hZGluZ1wiXG4gICAgKVxuICAvLy0gVGVsZXBvcnQgdGFyZ2V0IGZvciBgLmRpdG8tc2NoZW1hLWhlYWRlcmA6XG4gIC5kaXRvLW1lbnVcbiAgc2xvdFxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b1NwaW5uZXIgZnJvbSAnLi9EaXRvU3Bpbm5lci52dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0hlYWRlcicsIHtcbiAgY29tcG9uZW50czogeyBEaXRvU3Bpbm5lciB9LFxuXG4gIHByb3BzOiB7XG4gICAgc3Bpbm5lcjoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgaXNMb2FkaW5nOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0cmFpbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cy5maWx0ZXIoXG4gICAgICAgIGNvbXBvbmVudCA9PiAhIWNvbXBvbmVudC5yb3V0ZVJlY29yZFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNpemUgPSAnOHB4JyxcbiAgICAgIGNvbG9yID0gJyM5OTknXG4gICAgfSA9IHRoaXMuc3Bpbm5lciB8fCB7fVxuICAgIC8vIFRPRE86IFRoaXMgaXMgYSBoYWNrIHRvIHNldCB0aGUgZGVmYXVsdCBwcm9wcyBmb3IgdGhlIERpdG9TcGlubmVyLlxuICAgIC8vIFBhc3MgdGhlbSBvbiB0aHJvdWdoIHRoZSB0ZW1wbGF0ZSBpbnN0ZWFkIVxuICAgIGNvbnN0IHsgcHJvcHMgfSA9IERpdG9TcGlubmVyXG4gICAgcHJvcHMuc2l6ZS5kZWZhdWx0ID0gc2l6ZVxuICAgIHByb3BzLmNvbG9yLmRlZmF1bHQgPSBjb2xvclxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1kaXJ0eSc6IGNvbXBvbmVudC5pc0RpcnR5XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8taGVhZGVyIHtcbiAgYmFja2dyb3VuZDogJGNvbG9yLWJsYWNrO1xuICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZTtcbiAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0O1xuICB6LWluZGV4OiAkbWVudS16LWluZGV4O1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICBzcGFuIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgcGFkZGluZzogJG1lbnUtcGFkZGluZztcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICB9XG5cbiAgLmRpdG8tdHJhaWwge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBoZWlnaHQ6IDNlbTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoICsgJGNvbnRlbnQtcGFkZGluZztcblxuICAgIHVsIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgfVxuXG4gICAgYSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDAuNGVtO1xuXG4gICAgICAkYW5nbGU6IDMzZGVnO1xuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgY29sb3I6ICM5OTk5OTk7XG4gICAgICB9XG5cbiAgICAgICY6OmJlZm9yZSxcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgd2lkdGg6IDFweDtcbiAgICAgICAgaGVpZ2h0OiAxLjJlbTtcbiAgICAgICAgcmlnaHQ6IC0xcHg7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrO1xuICAgICAgfVxuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoJGFuZ2xlKTtcbiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wO1xuICAgICAgfVxuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGJvdHRvbTogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtJGFuZ2xlKTtcbiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXNwaW5uZXIge1xuICAgIG1hcmdpbi10b3A6ICRtZW51LXBhZGRpbmctdmVyO1xuICB9XG5cbiAgLmRpdG8tZGlydHkge1xuICAgICY6OmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgd2lkdGg6IDhweDtcbiAgICAgIGhlaWdodDogOHB4O1xuICAgICAgbWFyZ2luOiAycHg7XG4gICAgICBtYXJnaW4tbGVmdDogMC41ZW07XG4gICAgICBib3JkZXItcmFkaXVzOiAxMDAlO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWFjY291bnQsXG4gIC5kaXRvLWxvZ2luIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuXG4gIC5kaXRvLWFjY291bnQge1xuICAgIGxlZnQ6ICRjb250ZW50LXdpZHRoICsgJGNvbnRlbnQtcGFkZGluZyAqIDI7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi9Eb21NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1bGxkb3duOiB7XG4gICAgICAgIG9wZW46IGZhbHNlLFxuICAgICAgICBzdGFydFRpbWU6IDAsXG4gICAgICAgIGNoZWNrVGltZTogdHJ1ZSxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgbW91c2Vkb3duOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgbW91c2V1cDogKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMub25QdWxsZG93bk1vdXNlVXAobnVsbCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlcnM6IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uUHVsbGRvd25Nb3VzZURvd24odmFsdWUpIHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4odHJ1ZSlcbiAgICAgICAgdGhpcy5jaGVja1RpbWUgPSB0cnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNoZWNrVGltZSA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUHVsbGRvd25Nb3VzZVVwKHZhbHVlKSB7XG4gICAgICBjb25zdCB7IHN0YXJ0VGltZSB9ID0gdGhpcy5wdWxsZG93blxuICAgICAgaWYgKCF0aGlzLmNoZWNrVGltZSB8fCBzdGFydFRpbWUgJiYgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPiAyNTApKSB7XG4gICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICB0aGlzLm9uUHVsbGRvd25TZWxlY3QodmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93blNlbGVjdCgvKiB2YWx1ZSAqLykge1xuICAgICAgLy8gTk9URTogVG8gYmUgb3ZlcnJpZGRlbi5cbiAgICB9LFxuXG4gICAgc2V0UHVsbGRvd25PcGVuKG9wZW4pIHtcbiAgICAgIHRoaXMucHVsbGRvd24ub3BlbiA9IG9wZW5cbiAgICAgIHRoaXMucHVsbGRvd24uc3RhcnRUaW1lID0gb3BlbiA/IERhdGUubm93KCkgOiAwXG4gICAgICBpZiAob3Blbikge1xuICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzID0gdGhpcy5kb21Pbihkb2N1bWVudCwgdGhpcy5wdWxsZG93bi5ldmVudHMpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tYWNjb3VudFxuICBhKFxuICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gIClcbiAgICBzcGFuIHt7IHVzZXIudXNlcm5hbWUgfX1cbiAgdWwuZGl0by1wdWxsZG93big6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIilcbiAgICBsaShcbiAgICAgIHYtZm9yPVwiKGxhYmVsLCB2YWx1ZSkgb2YgaXRlbXNcIlxuICAgIClcbiAgICAgIGEoXG4gICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odmFsdWUpXCJcbiAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh2YWx1ZSlcIlxuICAgICAgKSB7eyBsYWJlbCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUHVsbGRvd25NaXhpbiBmcm9tICcuLi9taXhpbnMvUHVsbGRvd25NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQWNjb3VudCcsIHtcbiAgbWl4aW5zOiBbUHVsbGRvd25NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHtcbiAgICAgICAgc2V0dGluZ3M6ICdTZXR0aW5ncycsXG4gICAgICAgIGxvZ291dDogJ0xvZ291dCdcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uUHVsbGRvd25TZWxlY3QodmFsdWUpIHtcbiAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgICAgY2FzZSAnbG9nb3V0JzpcbiAgICAgICAgICB0aGlzLnJvb3RDb21wb25lbnQubG9nb3V0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdzZXR0aW5ncyc6XG4gICAgICAgICAgY29uc29sZS5pbmZvKCdUT0RPOiBJbXBsZW1lbnQgU2V0dGluZ3MnKVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tYWNjb3VudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAuZGl0by1wdWxsZG93biB7XG4gICAgdG9wOiAkcHVsbGRvd24tcGFkZGluZy12ZXI7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuY29tcG9uZW50KFxuICB2LWlmPVwiY29udGVudFwiXG4gIDppcz1cIm9wdGlvbnMudGFnIHx8IHRhZ1wiXG4gIDpjbGFzcz1cImNsYXNzZXNcIlxuICA6c3R5bGU9XCJzdHlsZXNcIlxuKSB7eyBvcHRpb25zLnRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRWxlbWVudCcsIHtcbiAgcHJvcHM6IHtcbiAgICB0YWc6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc3BhbicgfSxcbiAgICBjb250ZW50OiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IHsgY29udGVudCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KGNvbnRlbnQpID8gY29udGVudCA6IHsgdGV4dDogY29udGVudCB9XG4gICAgfSxcblxuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLiRhdHRycy5jbGFzcyxcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy5vcHRpb25zLmNsYXNzKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdHlsZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLiRhdHRycy5zdHlsZSxcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy5vcHRpb25zLnN0eWxlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuZnVuY3Rpb24gYXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLnJlZHVjZSgob2JqZWN0LCBlbnRyeSkgPT4ge1xuICAgIGlmIChpc1N0cmluZyhlbnRyeSkpIHtcbiAgICAgIG9iamVjdFtlbnRyeV0gPSB0cnVlXG4gICAgfSBlbHNlIGlmIChpc09iamVjdChlbnRyeSkpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqZWN0LCBlbnRyeSlcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdFxuICB9LCB7fSlcbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmNvbXBvbmVudC5kaXRvLWxhYmVsKFxuICB2LWlmPVwidGV4dCB8fCBjb2xsYXBzaWJsZVwiXG4gIDppcz1cInRhZ1wiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIlxuKVxuICAuZGl0by1jaGV2cm9uKFxuICAgIHYtaWY9XCJjb2xsYXBzaWJsZVwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1vcGVuZWQnOiAhY29sbGFwc2VkIH1cIlxuICApXG4gIC5kaXRvLWxhYmVsX19pbm5lclxuICAgIERpdG9FbGVtZW50LmRpdG8tbGFiZWwtcHJlZml4KFxuICAgICAgdi1mb3I9XCIocHJlZml4LCBpbmRleCkgb2YgcHJlZml4ZXNcIlxuICAgICAgOmtleT1cImBwcmVmaXgtJHtpbmRleH1gXCJcbiAgICAgIHRhZz1cInNwYW5cIlxuICAgICAgOmNvbnRlbnQ9XCJwcmVmaXhcIlxuICAgIClcbiAgICBsYWJlbChcbiAgICAgIDpmb3I9XCJkYXRhUGF0aFwiXG4gICAgICB2LWh0bWw9XCJ0ZXh0XCJcbiAgICApXG4gICAgRGl0b0VsZW1lbnQuZGl0by1sYWJlbC1zdWZmaXgoXG4gICAgICB2LWZvcj1cIihzdWZmaXgsIGluZGV4KSBvZiBzdWZmaXhlc1wiXG4gICAgICA6a2V5PVwiYHN1ZmZpeC0ke2luZGV4fWBcIlxuICAgICAgdGFnPVwic3BhblwiXG4gICAgICA6Y29udGVudD1cInN1ZmZpeFwiXG4gICAgKVxuICAgIC5kaXRvLWluZm8oXG4gICAgICB2LWlmPVwiaW5mb1wiXG4gICAgICA6ZGF0YS10aXBweS1jb250ZW50PVwiaW5mb1wiXG4gICAgICBkYXRhLXRpcHB5LXRoZW1lPVwiaW5mb1wiXG4gICAgKVxuICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9MYWJlbCcsIHtcbiAgZW1pdHM6IFsnZXhwYW5kJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBsYWJlbDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBpbmZvOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0YWcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xsYXBzaWJsZSA/ICdhJyA6ICdkaXYnXG4gICAgfSxcblxuICAgIHRleHQoKSB7XG4gICAgICBjb25zdCB7IGxhYmVsIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNPYmplY3QobGFiZWwpID8gbGFiZWw/LnRleHQgOiBsYWJlbFxuICAgIH0sXG5cbiAgICBwcmVmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnByZWZpeClcbiAgICB9LFxuXG4gICAgc3VmZml4ZXMoKSB7XG4gICAgICByZXR1cm4gYXNBcnJheSh0aGlzLmxhYmVsPy5zdWZmaXgpXG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xsYXBzaWJsZSA/IHsgb25DbGljazogdGhpcy5vbkNsaWNrIH0gOiB7fVxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID09PSB0aGlzXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkNsaWNrKCkge1xuICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IHRoaXNcbiAgICAgIHRoaXMuJGVtaXQoJ2V4cGFuZCcsIHRoaXMuY29sbGFwc2VkKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWxhYmVsIHtcbiAgJHNlbGY6ICY7XG5cbiAgLS1sYWJlbC1wYWRkaW5nOiAwO1xuICAvLyBGb3IgYnV0dG9ucyBhbmQgY2hldnJvbiB0byBhbGlnbiByaWdodDpcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAvLyBWZXJ0aWNhbGx5IGNlbnRlciBhbGwgaXRlbXMgaW4gdGhlIGxhYmVsLCBlLmcuIGNoZXZyb24sIGVkaXQtYnV0dG9ucy5cbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogdmFyKC0tbGFiZWwtcGFkZGluZyk7XG4gIG1hcmdpbjogMCAwICRmb3JtLXNwYWNpbmctaGFsZiAwO1xuXG4gICZfX2lubmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIC8vIFN0cmV0Y2ggdG8gZnVsbCBhdmFpbGFibGUgd2lkdGggc28gdGhhdCBidXR0b25zIGFwcGVhciByaWdodC1hbGlnbmVkOlxuICAgIGZsZXg6IDEgMSBhdXRvO1xuICB9XG5cbiAgbGFiZWwge1xuICAgIGN1cnNvcjogaW5oZXJpdDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG5cbiAgbGFiZWwsXG4gIC5kaXRvLWxhYmVsLXByZWZpeCxcbiAgLmRpdG8tbGFiZWwtc3VmZml4IHtcbiAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcbiAgICBAaW5jbHVkZSBlbGxpcHNpcztcblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6ICdcXGEwJzsgLy8gJm5ic3A7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tYnV0dG9ucyB7XG4gICAgLy8gTW92ZSB0aGUgbGFiZWwgcGFkZGluZyBpbnNpZGUgLmRpdG8tYnV0dG9ucywgc28gdGhhdCBpdCBjYXB0dXJlcyBhbGxcbiAgICAvLyBuZWFyIG1vdXNlIGV2ZW50czpcbiAgICBtYXJnaW46IGNhbGMoLTEgKiB2YXIoLS1sYWJlbC1wYWRkaW5nKSk7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgcGFkZGluZzogdmFyKC0tbGFiZWwtcGFkZGluZyk7XG4gIH1cblxuICAmLmRpdG8td2lkdGgtZmlsbCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgLy8gSW4gb3JkZXIgZm9yIGVsbGlwc2lzIHRvIHdvcmsgb24gbGFiZWxzIHdpdGhvdXQgYWZmZWN0aW5nIG90aGVyIGxheW91dCxcbiAgICAvLyB3ZSBuZWVkIHRvIHBvc2l0aW9uIGl0IGFic29sdXRlbHkgaW5zaWRlIGl0cyBjb250YWluZXIuXG4gICAgI3skc2VsZn1fX2lubmVyIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGluc2V0OiAwO1xuICAgIH1cblxuICAgICY6OmFmdGVyIHtcbiAgICAgIC8vIFNpbmNlIDxsYWJlbD4gdXNlcyBgcG9zaXRpb246IGFic29sdXRlYCwgc2V0IGNvbnRlbnQgdG8gYSB6ZXJvLXdpZHRoXG4gICAgICAvLyBzcGFjZSBvbiBpdHMgcGFyZW50IHRvIGVuZm9yY2UgdGhlIHJpZ2h0IHRleHQgaGVpZ2h0IGluIHRoZSBjb250YWluZXJcbiAgICAgIGNvbnRlbnQ6ICdcXDIwMGInOyAvLyB6ZXJvLXdpZHRoIHNwYWNlO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWluZm8ge1xuICAgIG1hcmdpbi1sZWZ0OiAwLjM1ZW07XG4gIH1cbn1cblxuYS5kaXRvLWxhYmVsIHtcbiAgJjpob3ZlciB7XG4gICAgLmRpdG8tY2hldnJvbiB7XG4gICAgICBjb2xvcjogJGNvbG9yLWRhcmtlcjtcbiAgICB9XG4gIH1cblxuICAmOmZvY3VzOm5vdCg6YWN0aXZlLCAuZGl0by1hY3RpdmUpIHtcbiAgICAuZGl0by1jaGV2cm9uIHtcbiAgICAgIC13ZWJraXQtdGV4dC1zdHJva2U6ICRib3JkZXItd2lkdGggJGNvbG9yLWFjdGl2ZTtcbiAgICB9XG4gICAgLy8gRGlzcGxheSBsYWJlbHMgaW4gY29tcGFjdCBzY2hlbWEgYXMgaW5saW5lLWJsb2NrcywgdG8gYWxsb3cgY29tcGFjdFxuICAgIC8vIGxheW91dHMgd2l0aCBgd2lkdGg6ICdhdXRvJ2AgZWxlbWVudHM6XG4gICAgLy8gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gY29udHJvbCB0aGlzIGJlaGF2aW9yLlxuICB9XG59XG5cbi5kaXRvLXNjaGVtYS1jb21wYWN0IHtcbiAgPiAuZGl0by1zY2hlbWEtY29udGVudCB7XG4gICAgPiAuZGl0by1wYW5lIHtcbiAgICAgID4gLmRpdG8tY29udGFpbmVyIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7XG4gIGdldEl0ZW1Gb3JtU2NoZW1hLFxuICBnZXRJdGVtSWQsXG4gIGdldEl0ZW1VaWQsXG4gIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtZXRob2RzOiB7XG4gICAgZ2V0SXRlbUZvcm1TY2hlbWEsXG5cbiAgICBnZXRJdGVtVWlkLFxuXG4gICAgZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXggPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudCAmJiBpbmRleCAhPT0gbnVsbFxuICAgICAgICA/IFN0cmluZyhpbmRleClcbiAgICAgICAgOiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKVxuICAgIH0sXG5cbiAgICBnZXRJdGVtRGF0YVBhdGgoc291cmNlU2NoZW1hLCBpbmRleCkge1xuICAgICAgbGV0IHsgZGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGlmIChzb3VyY2VTY2hlbWEgIT09IHRoaXMuc2NoZW1hKSB7XG4gICAgICAgIGRhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNvdXJjZVNjaGVtYS5uYW1lKVxuICAgICAgfVxuICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgaW5kZXgpXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgZmluZEl0ZW1JZEluZGV4KHNvdXJjZVNjaGVtYSwgZGF0YSwgaXRlbUlkKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgPyAvLyBGb3IgdHJhbnNpZW50IGRhdGEsIHRoZSBpbmRleCBpcyB1c2VkIGFzIHRoZSBpZFxuICAgICAgICAgIGl0ZW1JZFxuICAgICAgICA6IGRhdGE/LmZpbmRJbmRleChcbiAgICAgICAgICAgIChpdGVtLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICB0aGlzLmdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4KSA9PT0gaXRlbUlkXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgcmV0dXJuIGluZGV4ICE9PSAtMSA/IGluZGV4IDogbnVsbFxuICAgIH0sXG5cbiAgICBnZXRJdGVtTGFiZWwoc291cmNlU2NoZW1hLCBpdGVtLCB7XG4gICAgICBpbmRleCA9IG51bGwsXG4gICAgICBleHRlbmRlZCA9IGZhbHNlLFxuICAgICAgYXNPYmplY3QgPSBmYWxzZVxuICAgIH0gPSB7fSkge1xuICAgICAgY29uc3QgeyBpdGVtTGFiZWwgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgaWYgKCFpdGVtIHx8ICFleHRlbmRlZCAmJiBpdGVtTGFiZWwgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIGxldCBkYXRhUGF0aFxuICAgICAgY29uc3QgZ2V0RGF0YVBhdGggPSAoKSA9PlxuICAgICAgICAoZGF0YVBhdGggfHw9IHRoaXMuZ2V0SXRlbURhdGFQYXRoKHNvdXJjZVNjaGVtYSwgaW5kZXgpKVxuXG4gICAgICBsZXQgZm9ybUxhYmVsXG4gICAgICBjb25zdCBnZXRGb3JtTGFiZWwgPSAoKSA9PlxuICAgICAgICAoZm9ybUxhYmVsIHx8PSB0aGlzLmdldExhYmVsKFxuICAgICAgICAgIGdldEl0ZW1Gb3JtU2NoZW1hKHNvdXJjZVNjaGVtYSwgaXRlbSwgdGhpcy5jb250ZXh0KVxuICAgICAgICApKVxuXG4gICAgICBsZXQgdGV4dFxuICAgICAgbGV0IHByZWZpeFxuICAgICAgbGV0IHN1ZmZpeFxuICAgICAgaWYgKGlzRnVuY3Rpb24oaXRlbUxhYmVsKSkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1MYWJlbC5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgIG5lc3RlZDogZmFsc2UsXG4gICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgICAgICBpbmRleCxcblxuICAgICAgICAgICAgZ2V0IGRhdGFQYXRoKCkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0RGF0YVBhdGgoKVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZ2V0IGZvcm1MYWJlbCgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEZvcm1MYWJlbCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICBpZiAoaXNPYmplY3QobGFiZWwpKSB7XG4gICAgICAgICAgOyh7IHRleHQsIHByZWZpeCwgc3VmZml4IH0gPSBsYWJlbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0ID0gbGFiZWxcbiAgICAgICAgfVxuICAgICAgICAvLyBJdCdzIHVwIHRvIGBpdGVtTGFiZWwoKWAgZW50aXJlbHkgdG8gcHJvZHVjZSB0aGUgbGFiZWw6XG4gICAgICAgIGV4dGVuZGVkID0gZmFsc2VcbiAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmcoaXRlbUxhYmVsKSAmJiAhKGl0ZW1MYWJlbCBpbiBpdGVtKSkge1xuICAgICAgICAvLyBgaXRlbUxhYmVsYCBjYW4gYmUgYm90aCBhIGtleSwgb3Igc2ltcGx5IGEgbGFiZWwuXG4gICAgICAgIHRleHQgPSBpdGVtTGFiZWxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExvb2sgdXAgdGhlIG5hbWUgb24gdGhlIGl0ZW0sIGJ5IHRoZXNlIHJ1bGVzOlxuICAgICAgICAvLyAxLiBJZiBgaXRlbUxhYmVsYCBpcyBhIHN0cmluZywgdXNlIGl0IGFzIHRoZSBwcm9wZXJ0eSBrZXlcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgY29sdW1ucywgdXNlIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3RcbiAgICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBzZWUgaWYgdGhlIGl0ZW0gaGFzIGEgcHJvcGVydHkgbmFtZWQgJ25hbWUnXG4gICAgICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gc291cmNlU2NoZW1hXG4gICAgICAgIGNvbnN0IGtleSA9IChcbiAgICAgICAgICBpc1N0cmluZyhpdGVtTGFiZWwpICYmIGl0ZW1MYWJlbCB8fFxuICAgICAgICAgIGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGNvbHVtbnMgJiYgT2JqZWN0LmtleXMoY29sdW1ucylbMF0gfHxcbiAgICAgICAgICAnbmFtZSdcbiAgICAgICAgKVxuICAgICAgICB0ZXh0ID0gaXRlbVtrZXldXG4gICAgICB9XG4gICAgICBjb25zdCBoYWRMYWJlbCA9ICEhdGV4dFxuICAgICAgLy8gSWYgbm8gbGFiZWwgd2FzIGZvdW5kIHNvIGZhciwgdHJ5IHRvIHByb2R1Y2Ugb25lIGZyb20gdGhlIGluZGV4LlxuICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xuICAgICAgICAvLyBBbHdheXMgdXNlIGV4dGVuZGVkIHN0eWxlIHdoZW4gYXV0by1nZW5lcmF0aW5nIGxhYmVscyBmcm9tIGluZGV4L2lkOlxuICAgICAgICBleHRlbmRlZCA9IHRydWVcbiAgICAgICAgdGV4dCA9XG4gICAgICAgICAgaXNMaXN0U291cmNlKHNvdXJjZVNjaGVtYSkgJiYgaW5kZXggIT09IG51bGxcbiAgICAgICAgICAgID8gKHRleHQgPSBgJHtpbmRleCArIDF9YClcbiAgICAgICAgICAgIDogJydcbiAgICAgIH1cbiAgICAgIGlmIChleHRlbmRlZCkge1xuICAgICAgICBjb25zdCBmb3JtTGFiZWwgPSBnZXRGb3JtTGFiZWwoKVxuICAgICAgICBpZiAoZm9ybUxhYmVsKSB7XG4gICAgICAgICAgLy8gSWYgYSBsYWJlbCB3YXMgcHJvdmlkZWQsIHB1dCBpbiBxdW90ZXMgd2hlbiBwcmVmaXhlZCB3aXRoIHRoZVxuICAgICAgICAgIC8vIGZvcm0gbGFiZWwgZm9yIHRoZSBleHRlbmRlZCBzdHlsZTpcbiAgICAgICAgICB0ZXh0ID0gYCR7Zm9ybUxhYmVsfSAke2hhZExhYmVsID8gYCcke3RleHR9J2AgOiB0ZXh0fWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFzT2JqZWN0ID8geyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9IDogdGV4dFxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnNsb3QobmFtZT1cImJlZm9yZVwiKVxuLmRpdG8tc2NoZW1hKFxuICB2LWJpbmQ9XCIkYXR0cnNcIlxuKVxuICAuZGl0by1zY2hlbWEtY29udGVudCg6Y2xhc3M9XCJ7ICdkaXRvLXNjcm9sbCc6IHNjcm9sbGFibGUgfVwiKVxuICAgIFRlbGVwb3J0KFxuICAgICAgdG89XCIuZGl0by1tZW51XCJcbiAgICAgIDpkaXNhYmxlZD1cIiFoZWFkZXJJbk1lbnVcIlxuICAgIClcbiAgICAgIC5kaXRvLXNjaGVtYS1oZWFkZXIoXG4gICAgICAgIHYtaWY9XCJoYXNMYWJlbCB8fCBoYXNUYWJzIHx8IGNsaXBib2FyZFwiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLWhlYWRlci0tbWVudSc6IGhlYWRlckluTWVudSB9XCJcbiAgICAgIClcbiAgICAgICAgRGl0b0xhYmVsKFxuICAgICAgICAgIHYtaWY9XCJoYXNMYWJlbFwiXG4gICAgICAgICAgOmxhYmVsPVwibGFiZWxcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgICAgOmNvbGxhcHNlZD1cIiFvcGVuZWRcIlxuICAgICAgICAgIEBleHBhbmQ9XCJvbkV4cGFuZFwiXG4gICAgICAgIClcbiAgICAgICAgICAvLy0gUGFzcyBlZGl0LWJ1dHRvbnMgdGhyb3VnaCB0byBkaXRvLWxhYmVsJ3Mgb3duIGVkaXQtYnV0dG9ucyBzbG90OlxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1pZj1cImlubGluZWRcIlxuICAgICAgICAgICAgI2VkaXQtYnV0dG9uc1xuICAgICAgICAgIClcbiAgICAgICAgICAgIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuICAgICAgICBEaXRvVGFicyhcbiAgICAgICAgICB2LWlmPVwidGFic1wiXG4gICAgICAgICAgOnRhYnM9XCJ0YWJzXCJcbiAgICAgICAgICA6c2VsZWN0ZWRUYWI9XCJzZWxlY3RlZFRhYlwiXG4gICAgICAgIClcbiAgICAgICAgRGl0b0NsaXBib2FyZChcbiAgICAgICAgICA6Y2xpcGJvYXJkPVwiY2xpcGJvYXJkXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1pZj1cImhhc1RhYnNcIlxuICAgIClcbiAgICAgIERpdG9QYW5lLmRpdG8tcGFuZS10YWIoXG4gICAgICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwgdGFiKSBpbiB0YWJzXCJcbiAgICAgICAgcmVmPVwidGFic1wiXG4gICAgICAgIDprZXk9XCJ0YWJcIlxuICAgICAgICA6dmlzaWJsZT1cInNlbGVjdGVkVGFiID09PSB0YWJcIlxuICAgICAgICA6dGFiPVwidGFiXCJcbiAgICAgICAgOnNjaGVtYT1cInRhYlNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc01haW5QYW5lXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICApXG4gICAgVHJhbnNpdGlvbkhlaWdodCg6ZW5hYmxlZD1cImlubGluZWRcIilcbiAgICAgIERpdG9QYW5lLmRpdG8tcGFuZS1tYWluKFxuICAgICAgICB2LWlmPVwiaGFzTWFpblBhbmUgJiYgb3BlbmVkXCJcbiAgICAgICAgcmVmPVwiY29tcG9uZW50c1wiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNUYWJzXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICApXG4gICAgc2xvdChcbiAgICAgIHYtaWY9XCIhaW5saW5lZCAmJiBpc1BvcHVsYXRlZFwiXG4gICAgICBuYW1lPVwiYnV0dG9uc1wiXG4gICAgKVxuICB0ZW1wbGF0ZShcbiAgICB2LWlmPVwiaW5saW5lZFwiXG4gIClcbiAgICBzbG90KFxuICAgICAgdi1pZj1cIiFoYXNMYWJlbFwiXG4gICAgICBuYW1lPVwiZWRpdC1idXR0b25zXCJcbiAgICApXG4gIHRlbXBsYXRlKFxuICAgIHYtZWxzZS1pZj1cImlzUG9wdWxhdGVkXCJcbiAgKVxuICAgIERpdG9QYW5lbHMoXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNjcm9sbCc6IHNjcm9sbGFibGUgfVwiXG4gICAgICA6cGFuZWxzPVwicGFuZWxFbnRyaWVzXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbnNsb3QobmFtZT1cImFmdGVyXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb24sXG4gIGlzUmVnRXhwLFxuICBwYXJzZURhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aCxcbiAgbGFiZWxpemVcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IFRyYW5zaXRpb25IZWlnaHQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgSXRlbU1peGluIGZyb20gJy4uL21peGlucy9JdGVtTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCwgZ2V0UGFyZW50SXRlbSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQge1xuICBnZXROYW1lZFNjaGVtYXMsXG4gIGdldFBhbmVsRW50cmllcyxcbiAgc2V0RGVmYXVsdFZhbHVlcyxcbiAgcHJvY2Vzc0RhdGFcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U3RvcmVBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9TY2hlbWEnLCB7XG4gIG1peGluczogW0l0ZW1NaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVHJhbnNpdGlvbkhlaWdodCB9LFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJyRzY2hlbWFQYXJlbnRDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGlubGluZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgc2Nyb2xsYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGhhc093bkRhdGE6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBoZWFkZXJJbk1lbnU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IHRoaXMuc2NoZW1hXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBwcm92aWRlIG1vcmUgZGF0YSB0aHJvdWdoIGBzY2hlbWEuZGF0YWAsIHZ1ZS1zdHlsZTpcbiAgICAgIC4uLihcbiAgICAgICAgZGF0YSAmJiBpc0Z1bmN0aW9uKGRhdGEpXG4gICAgICAgICAgPyBkYXRhKHRoaXMuY29udGV4dClcbiAgICAgICAgICA6IGRhdGFcbiAgICAgICksXG4gICAgICBjdXJyZW50VGFiOiBudWxsLFxuICAgICAgY29tcG9uZW50c1JlZ2lzdHJ5OiB7fSxcbiAgICAgIHBhbmVzUmVnaXN0cnk6IHt9LFxuICAgICAgcGFuZWxzUmVnaXN0cnk6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gT3ZlcnJpZGUgRGl0b01peGluJ3Mgc2NoZW1hQ29tcG9uZW50KCkgd2hpY2ggdXNlcyB0aGUgaW5qZWN0ZWQgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBEb24ndCByZXR1cm4gdGhlIGFjdHVhbCBwYXJlbnQgc2NoZW1hIGlzIHRoaXMgc2NoZW1hIGhhbmRsZXMgaXRzIG93blxuICAgICAgLy8gZGF0YS4gVGhpcyBwcmV2ZW50cyBkZWxlZ2F0aW5nIGV2ZW50cyB0byB0aGUgcGFyZW50LCBhbmQgcmVnaXN0ZXJpbmdcbiAgICAgIC8vIGNvbXBvbmVudHMgd2l0aCB0aGUgcGFyZW50IHRoYXQgd291bGQgY2F1c2UgaXQgdG8gc2V0IGlzRGlydHkgZmxhZ3MuXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gbnVsbCA6IHRoaXMucGFyZW50Q29tcG9uZW50LnNjaGVtYUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYW5lbEVudHJpZXMoKSB7XG4gICAgICBjb25zdCBwYW5lbEVudHJpZXMgPSBnZXRQYW5lbEVudHJpZXModGhpcy5zY2hlbWEucGFuZWxzLCAnJylcbiAgICAgIGZvciAoY29uc3QgcGFuZSBvZiB0aGlzLnBhbmVzKSB7XG4gICAgICAgIHBhbmVsRW50cmllcy5wdXNoKC4uLnBhbmUucGFuZWxFbnRyaWVzKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHBhbmVsRW50cmllc1xuICAgIH0sXG5cbiAgICB0YWJzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS50YWJzKVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZFRhYigpIHtcbiAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRUYWIgfHwgdGhpcy5kZWZhdWx0VGFiPy5uYW1lIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZGVmYXVsdFRhYigpIHtcbiAgICAgIGxldCBmaXJzdCA9IG51bGxcbiAgICAgIGlmICh0aGlzLnRhYnMpIHtcbiAgICAgICAgZm9yIChjb25zdCB0YWIgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnRhYnMpKSB7XG4gICAgICAgICAgY29uc3QgeyBkZWZhdWx0VGFiIH0gPSB0YWJcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc0Z1bmN0aW9uKGRlZmF1bHRUYWIpXG4gICAgICAgICAgICAgID8gZGVmYXVsdFRhYih0aGlzLmNvbnRleHQpXG4gICAgICAgICAgICAgIDogZGVmYXVsdFRhYlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRhYlxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgICBmaXJzdCA9IHRhYlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZpcnN0XG4gICAgfSxcblxuICAgIGNsaXBib2FyZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYT8uY2xpcGJvYXJkXG4gICAgfSxcblxuICAgIHBhcmVudERhdGEoKSB7XG4gICAgICBjb25zdCBkYXRhID0gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCBmYWxzZSlcbiAgICAgIHJldHVybiBkYXRhICE9PSB0aGlzLmRhdGEgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWREYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RhdGEoeyB0YXJnZXQ6ICdzZXJ2ZXInLCBzY2hlbWFPbmx5OiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGNsaXBib2FyZERhdGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAkc2NoZW1hOiB0aGlzLnNjaGVtYS5uYW1lLFxuICAgICAgICAuLi50aGlzLnByb2Nlc3NEYXRhKHsgdGFyZ2V0OiAnY2xpcGJvYXJkJywgc2NoZW1hT25seTogdHJ1ZSB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzLlxuICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgYXM6XG4gICAgLy8gcmV0dXJuIGdldEl0ZW0odGhpcy5yb290RGF0YSwgdGhpcy5kYXRhUGF0aCwgZmFsc2UpXG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcGFyZW50SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcmVudERhdGFcbiAgICB9LFxuXG4gICAgcm9vdEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290RGF0YVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkRGF0YVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xpcGJvYXJkRGF0YVxuICAgIH0sXG5cbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgdGhpcy5nZXRJdGVtRm9ybVNjaGVtYSh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB0aGlzLmNvbnRleHQpXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0LmlzRGlydHkpXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaXNUb3VjaGVkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlcnlDb21wb25lbnQoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVyeUNvbXBvbmVudChpdCA9PiBpdC5pc1ZhbGlkYXRlZClcbiAgICB9LFxuXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMubGFiZWwgfHwgdGhpcy5jb2xsYXBzaWJsZVxuICAgIH0sXG5cbiAgICBoYXNUYWJzKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlubGluZWQgJiYgISF0aGlzLnRhYnNcbiAgICB9LFxuXG4gICAgaGFzTWFpblBhbmUoKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gISFjb21wb25lbnRzICYmIE9iamVjdC5rZXlzKGNvbXBvbmVudHMpLmxlbmd0aCA+IDBcbiAgICB9LFxuXG4gICAgb3BlbmVkOiBnZXRTdG9yZUFjY2Vzc29yKCdvcGVuZWQnLCB7XG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuY29sbGFwc2VkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICckcm91dGUuaGFzaCc6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXIoaGFzaCkge1xuICAgICAgICBpZiAodGhpcy5oYXNUYWJzKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VGFiID0gaGFzaD8uc2xpY2UoMSkgfHwgbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgICdzZWxlY3RlZFRhYicoc2VsZWN0ZWRUYWIpIHtcbiAgICAgIGlmICh0aGlzLmhhc1RhYnMpIHtcbiAgICAgICAgbGV0IHRhYiA9IG51bGxcbiAgICAgICAgaWYgKHNlbGVjdGVkVGFiICE9PSB0aGlzLmN1cnJlbnRUYWIpIHtcbiAgICAgICAgICAvLyBBbnkgdGFiIGNoYW5nZSBuZWVkcyB0byBiZSByZWZsZWN0ZWQgaW4gdGhlIHJvdXRlciBhbHNvLlxuICAgICAgICAgIHRhYiA9IHNlbGVjdGVkVGFiXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuc2hvdWxkUmVuZGVyU2NoZW1hKHRoaXMudGFic1tzZWxlY3RlZFRhYl0pKSB7XG4gICAgICAgICAgdGFiID0gdGhpcy5kZWZhdWx0VGFiPy5uYW1lXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhYikge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgaGFzaDogYCMke3RhYn1gIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIHRoaXMuc2V0dXBTY2hlbWFGaWVsZHMoKVxuICAgIC8vIERlbGVnYXRlIGNoYW5nZSBldmVudHMgdGhyb3VnaCB0byBwYXJlbnQgc2NoZW1hOlxuICAgIHRoaXMuZGVsZWdhdGUoJ2NoYW5nZScsIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50KVxuICAgIHRoaXMuZW1pdEV2ZW50KCdpbml0aWFsaXplJykgLy8gTm90IGAnY3JlYXRlJ2AsIHNpbmNlIHRoYXQncyBmb3IgZGF0YS5cbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5lbWl0RXZlbnQoJ2Rlc3Ryb3knKVxuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aChcbiAgICAgICAgdGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCxcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIG1hdGNoXG4gICAgICApXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudEJ5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50c0J5TmFtZShkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlOYW1lKHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50QnlOYW1lKG5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllcyh0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudChkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldFBhbmVsc0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldFBhbmVsQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBhbmVsc0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzKHRoaXMucGFuZWxzQnlEYXRhUGF0aCwgZGF0YVBhdGhPck5hbWUsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRQYW5lbChkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgc29tZUNvbXBvbmVudChjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuaXNQb3B1bGF0ZWQgJiYgdGhpcy5jb21wb25lbnRzLnNvbWUoY2FsbGJhY2spXG4gICAgfSxcblxuICAgIGV2ZXJ5Q29tcG9uZW50KGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1BvcHVsYXRlZCAmJiB0aGlzLmNvbXBvbmVudHMuZXZlcnkoY2FsbGJhY2spXG4gICAgfSxcblxuICAgIG9uRXhwYW5kKGV4cGFuZCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2V4cGFuZCcsIHtcbiAgICAgICAgLy8gVE9ETzogQWN0dWFsbHkgZXhwb3NlIHRoaXMgb24gRGl0b0NvbnRleHQ/XG4gICAgICAgIGNvbnRleHQ6IHsgZXhwYW5kIH1cbiAgICAgIH0pXG4gICAgICAvLyBQcmV2ZW50IGNsb3NpbmcgdGhlIHNjaGVtYSB3aXRoIGludmFsaWQgZGF0YSwgc2luY2UgdGhlIGluLWNvbXBvbmVudFxuICAgICAgLy8gdmFsaWRhdGlvbiB3aWxsIG5vdCBiZSBleGVjdXRlZCBvbmNlIGl0J3MgY2xvc2VkLlxuXG4gICAgICAvLyBUT0RPOiBNb3ZlIHZhbGlkYXRpb24gb3V0IG9mIGNvbXBvbmVudHMsIHRvIHNjaGVtYSwganVzdCBsaWtlXG4gICAgICAvLyBwcm9jZXNzaW5nLCBhbmQgdXNlIGBzaG93VmFsaWRhdGlvbkVycm9ycygpYCBmb3IgdGhlIHJlc3VsdGluZyBlcnJvcnMsXG4gICAgICAvLyB0aGVuIHJlbW92ZSB0aGlzIHJlcXVpcmVtZW50LCBzaW5jZSB3ZSBjYW4gdmFsaWRhdGUgY2xvc2VkIGZvcm1zIGFuZFxuICAgICAgLy8gc2NoZW1hcyB0aGVuLlxuICAgICAgaWYgKCF0aGlzLm9wZW5lZCB8fCBleHBhbmQgfHwgdGhpcy52YWxpZGF0ZUFsbCgpKSB7XG4gICAgICAgIHRoaXMub3BlbmVkID0gZXhwYW5kXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2NoYW5nZScpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgICBjb21wb25lbnQucmVzZXRWYWxpZGF0aW9uKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgICAgY29tcG9uZW50LmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudD8uZm9jdXMoKVxuICAgICAgdGhpcy5vcGVuZWQgPSB0cnVlXG4gICAgfSxcblxuICAgIHZhbGlkYXRlQWxsKG1hdGNoLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudHNCeURhdGFQYXRoIH0gPSB0aGlzXG4gICAgICBsZXQgZGF0YVBhdGhzXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgY2hlY2sgPSBpc0Z1bmN0aW9uKG1hdGNoKVxuICAgICAgICAgID8gbWF0Y2hcbiAgICAgICAgICA6IGlzUmVnRXhwKG1hdGNoKVxuICAgICAgICAgICAgPyBmaWVsZCA9PiBtYXRjaC50ZXN0KGZpZWxkKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIGRhdGFQYXRocyA9IGNoZWNrXG4gICAgICAgICAgPyBPYmplY3Qua2V5cyhjb21wb25lbnRzQnlEYXRhUGF0aCkuZmlsdGVyKGNoZWNrKVxuICAgICAgICAgIDogaXNBcnJheShtYXRjaClcbiAgICAgICAgICAgID8gbWF0Y2hcbiAgICAgICAgICAgIDogW21hdGNoXVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgbGV0IGZpcnN0ID0gdHJ1ZVxuICAgICAgZGF0YVBhdGhzIHx8PSBPYmplY3Qua2V5cyhjb21wb25lbnRzQnlEYXRhUGF0aClcbiAgICAgIGZvciAoY29uc3QgZGF0YVBhdGggb2YgZGF0YVBhdGhzKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgaWYgKCFjb21wb25lbnQudmFsaWRhdGUobm90aWZ5KSkge1xuICAgICAgICAgICAgLy8gRm9jdXMgZmlyc3QgZXJyb3IgZmllbGRcbiAgICAgICAgICAgIGlmIChub3RpZnkgJiYgZmlyc3QpIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50LmZvY3VzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSAmJiAhaXNWYWxpZCkge1xuICAgICAgICB0aGlzLm5vdGlmeUVycm9ycygpXG4gICAgICB9XG4gICAgICByZXR1cm4gaXNWYWxpZFxuICAgIH0sXG5cbiAgICB2ZXJpZnlBbGwobWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQWxsKG1hdGNoLCBmYWxzZSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cykge1xuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgICBsZXQgZmlyc3QgPSB0cnVlXG4gICAgICBjb25zdCB1bm1hdGNoZWQgPSBbXVxuICAgICAgZm9yIChjb25zdCBbZGF0YVBhdGgsIGVycnNdIG9mIE9iamVjdC5lbnRyaWVzKGVycm9ycykpIHtcbiAgICAgICAgLy8gSWYgdGhlIHNjaGVtYSBpcyBhIGRhdGEtcm9vdCwgcHJlZml4IGl0cyBvd24gZGF0YVBhdGggdG8gYWxsIGVycm9ycyxcbiAgICAgICAgLy8gc2luY2UgdGhlIGRhdGEgdGhhdCBpdCBzZW5kcyBhbmQgdmFsaWRhdGVzIHdpbGwgYmUgdW5wcmVmaXhlZC5cbiAgICAgICAgY29uc3QgZnVsbERhdGFQYXRoID0gdGhpcy5oYXNPd25EYXRhXG4gICAgICAgICAgPyBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBkYXRhUGF0aClcbiAgICAgICAgICA6IGRhdGFQYXRoXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMsIHRoaXMuZGF0YVBhdGgsIHRoaXMuaGFzT3duRGF0YSwgZnVsbERhdGFQYXRoKVxuICAgICAgICAvLyBDb252ZXJ0IGZyb20gSmF2YVNjcmlwdCBwcm9wZXJ0eSBhY2Nlc3Mgbm90YXRpb24sIHRvIG91ciBvd24gZm9ybVxuICAgICAgICAvLyBvZiByZWxhdGl2ZSBKU09OIHBvaW50ZXJzIGFzIGRhdGEtcGF0aHM6XG4gICAgICAgIGNvbnN0IGRhdGFQYXRoUGFydHMgPSBwYXJzZURhdGFQYXRoKGZ1bGxEYXRhUGF0aClcbiAgICAgICAgbGV0IGZvdW5kID0gZmFsc2VcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGhQYXJ0cylcbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgIGlmIChjb21wb25lbnQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJycywgZmlyc3QgJiYgZm9jdXMpKSB7XG4gICAgICAgICAgICBmb3VuZCA9IHRydWVcbiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgIC8vIENvdWxkbid0IGZpbmQgYSBjb21wb25lbnQgaW4gYW4gYWN0aXZlIGZvcm0gZm9yIHRoZSBnaXZlbiBkYXRhUGF0aC5cbiAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgYSBjb21wb25lbnQgc2VydmluZyBhIHBhcnQgb2YgdGhlIGRhdGFQYXRoLFxuICAgICAgICAgIC8vIGFuZCB0YWtlIGl0IGZyb20gdGhlcmU6XG4gICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBkYXRhUGF0aFBhcnRzLnBvcCgpXG4gICAgICAgICAgd2hpbGUgKGRhdGFQYXRoUGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGhQYXJ0cylcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbXBvbmVudC5uYXZpZ2F0ZVRvQ29tcG9uZW50Py4oXG4gICAgICAgICAgICAgICAgICBmdWxsRGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgICBzdWJDb21wb25lbnRzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZvdW5kID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2Ygc3ViQ29tcG9uZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycnMgPSBlcnJvcnNbY29tcG9uZW50LmRhdGFQYXRoXVxuICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJzLCBmaXJzdCAmJiBmb2N1cylcbiAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmRcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIEZvdW5kIGEgbmVzdGVkIGZvcm0gdG8gZGlzcGxheSBhdCBsZWFzdCBwYXJ0cyBmbyB0aGUgZXJyb3JzLlxuICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IHNob3cgYWxsIGVycm9ycyBhdCBvbmNlLCBzbyB3ZSdyZSBkb25lLiBEb24ndCBjYWxsXG4gICAgICAgICAgICAgICAgLy8gYG5vdGlmeUVycm9ycygpYCB5ZXQsIGFzIHdlIGNhbiBvbmx5IGRpc3BsYXkgaXQgb25jZVxuICAgICAgICAgICAgICAgIC8vIGBzaG93VmFsaWRhdGlvbkVycm9ycygpYCB3YXMgY2FsbGVkIGZyb20gYERpdG9Gb3JtLm1vdW50ZWQoKWBcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU3RpbGwgaGVyZSwgc28ga2VlcCByZW1vdmluZyB0aGUgbGFzdCBwYXJ0IHVudGlsIHdlIGZpbmQgYSBtYXRjaC5cbiAgICAgICAgICAgIGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gV2hlbiB0aGUgZXJyb3IgY2FuJ3QgYmUgbWF0Y2hlZCwgYWRkIGl0IHRvIGEgbGlzdCBvZiB1bm1hdGNoZWRcbiAgICAgICAgICAvLyBlcnJvcnMgd2l0aCBkZWNlbnQgbWVzc2FnZSwgdG8gcmVwb3J0IGF0IHRoZSBlbmQuXG4gICAgICAgICAgY29uc3QgZmllbGQgPSBsYWJlbGl6ZShwcm9wZXJ0eSlcbiAgICAgICAgICBmb3IgKGNvbnN0IGVyciBvZiBlcnJzKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVmaXggPSBmaWVsZFxuICAgICAgICAgICAgICA/IGBUaGUgZmllbGQgJHtmaWVsZH1gXG4gICAgICAgICAgICAgIDogYFRoZSAke3RoaXMuZm9ybUxhYmVsfWBcbiAgICAgICAgICAgIHVubWF0Y2hlZC5wdXNoKGAke3ByZWZpeH0gJHtlcnIubWVzc2FnZX1gKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICB9XG4gICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgIHRoaXMubm90aWZ5RXJyb3JzKHVubWF0Y2hlZC5qb2luKCdcXG4nKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbm90aWZ5RXJyb3JzKG1lc3NhZ2UpIHtcbiAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgdGl0bGU6ICdWYWxpZGF0aW9uIEVycm9ycycsXG4gICAgICAgIHRleHQ6IG1lc3NhZ2UgfHwgJ1BsZWFzZSBjb3JyZWN0IHRoZSBoaWdobGlnaHRlZCBlcnJvcnMuJ1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgcmVzZXREYXRhKCkge1xuICAgICAgLy8gV2UgY2FuJ3Qgc2V0IGB0aGlzLmRhdGEgPSAuLi5gIGJlY2F1c2UgaXQncyBhIHByb3BlcnR5LCBidXQgd2UgY2FuIHNldFxuICAgICAgLy8gYWxsIGtub3duIHByb3BlcnRpZXMgb24gaXQgdG8gdGhlIHZhbHVlcyByZXR1cm5lZCBieVxuICAgICAgLy8gYHNldERlZmF1bHRWYWx1ZXMoKWAsIGFzIHRoZXkgYXJlIGFsbCByZWFjdGl2ZSBhbHJlYWR5IGZyb20gdGhlIHN0YXJ0czpcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5kYXRhLCBzZXREZWZhdWx0VmFsdWVzKHRoaXMuc2NoZW1hLCB7fSwgdGhpcykpXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gZGF0YSkge1xuICAgICAgICBpZiAobmFtZSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLW11dGF0aW5nLXByb3BzXG4gICAgICAgICAgdGhpcy5kYXRhW25hbWVdID0gZGF0YVtuYW1lXVxuICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lKSkge1xuICAgICAgICAgICAgY29tcG9uZW50Lm1hcmtEaXJ0eSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGZpbHRlckRhdGEoZGF0YSkge1xuICAgICAgLy8gRmlsdGVycyBvdXQgYXJyYXlzIGFuZCBvYmplY3RzIHRoYXQgYXJlIGJhY2sgYnkgZGF0YSByZXNvdXJjZXNcbiAgICAgIC8vIHRoZW1zZWx2ZXMsIGFzIHRob3NlIGFyZSBhbHJlYWR5IHRha2luZyBjYXJlIG9mIHRocm91Z2ggdGhlaXIgb3duIEFQSVxuICAgICAgLy8gcmVzb3VyY2UgZW5kLXBvaW50cyBhbmQgc2hvdWxkbid0IGJlIHNldC5cbiAgICAgIGNvbnN0IGNvcHkgPSB7fVxuICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSB8fCBpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpXG4gICAgICAgICAgaWYgKGNvbXBvbmVudHMuc29tZShjb21wb25lbnQgPT4gY29tcG9uZW50LnByb3ZpZGVzRGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvcHlbbmFtZV0gPSB2YWx1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNvcHlcbiAgICB9LFxuXG4gICAgcHJvY2Vzc0RhdGEoeyB0YXJnZXQgPSAnY2xpcGJvYXJkJywgc2NoZW1hT25seSA9IHRydWUgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gcHJvY2Vzc0RhdGEoXG4gICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICB0aGlzLmRhdGFQYXRoLFxuICAgICAgICB7XG4gICAgICAgICAgLy8gTmVlZGVkIGZvciBEaXRvQ29udGV4dCBoYW5kbGluZyBpbnNpZGUgYHByb2Nlc3NEYXRhYCBhbmRcbiAgICAgICAgICAvLyBgcHJvY2Vzc1NjaGVtYURhdGEoKWA6XG4gICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgIHNjaGVtYU9ubHksXG4gICAgICAgICAgdGFyZ2V0XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gYCRzY2hlbWFQYXJlbnRDb21wb25lbnQoKWAgaXMgb25seSBzZXQgaWYgb25lIG9mIHRoZSBhbmNlc3RvcnMgdXNlc1xuICAgICAgLy8gdGhlIGBTY2hlbWFQYXJlbnRNaXhpbmA6XG4gICAgICB0aGlzLiRzY2hlbWFQYXJlbnRDb21wb25lbnQoKT8uX3JlZ2lzdGVyU2NoZW1hQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudCwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5LCBjb21wb25lbnQsIGFkZClcbiAgICAgIC8vIE9ubHkgcmVnaXN0ZXIgd2l0aCB0aGUgcGFyZW50IGlmIHNjaGVtYSBzaGFyZXMgZGF0YSB3aXRoIGl0LlxuICAgICAgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQ/Ll9yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyUGFuZShwYW5lLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lc1JlZ2lzdHJ5LCBwYW5lLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlclBhbmVsKHBhbmVsLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lbHNSZWdpc3RyeSwgcGFuZWwsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyRW50cnkocmVnaXN0cnksIGVudHJ5LCBhZGQpIHtcbiAgICAgIGNvbnN0IHVpZCA9IGVudHJ5LiR1aWRcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgcmVnaXN0cnlbdWlkXSA9IGVudHJ5XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgcmVnaXN0cnlbdWlkXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBfbGlzdEVudHJpZXNCeURhdGFQYXRoKHJlZ2lzdHJ5KSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZWdpc3RyeSkucmVkdWNlKChlbnRyaWVzQnlEYXRhUGF0aCwgZW50cnkpID0+IHtcbiAgICAgICAgLy8gTXVsdGlwbGUgZW50cmllcyBjYW4gYmUgbGlua2VkIHRvIHRoZSBzYW1lIGRhdGEtcGF0aCwgZS5nLiB3aGVuXG4gICAgICAgIC8vIHRoZXJlIGFyZSB0YWJzLiBMaW5rIGVhY2ggZGF0YS1wYXRoIHRvIGFuIGFycmF5IG9mIGVudHJpZXMuXG4gICAgICAgIGNvbnN0IHsgZGF0YVBhdGggfSA9IGVudHJ5XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSAoZW50cmllc0J5RGF0YVBhdGhbZGF0YVBhdGhdIHx8PSBbXSlcbiAgICAgICAgZW50cmllcy5wdXNoKGVudHJ5KVxuICAgICAgICByZXR1cm4gZW50cmllc0J5RGF0YVBhdGhcbiAgICAgIH0sIHt9KVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllcyhlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGgpLnN0YXJ0c1dpdGgodGhpcy5kYXRhUGF0aClcbiAgICAgICAgPyB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aChlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgICAgICA6IHRoaXMuX2dldEVudHJpZXNCeU5hbWUoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXNCeURhdGFQYXRoKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJFbnRyaWVzKFxuICAgICAgICBlbnRyaWVzQnlEYXRhUGF0aFtub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aCldIHx8IFtdLFxuICAgICAgICBtYXRjaFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllc0J5TmFtZShlbnRyaWVzQnlEYXRhUGF0aCwgbmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJFbnRyaWVzKFxuICAgICAgICBlbnRyaWVzQnlEYXRhUGF0aFthcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKV0gfHwgW10sXG4gICAgICAgIG1hdGNoXG4gICAgICApXG4gICAgfSxcblxuICAgIF9maWx0ZXJFbnRyaWVzKGVudHJpZXMsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gbWF0Y2ggPyBlbnRyaWVzLmZpbHRlcihtYXRjaCkgOiBlbnRyaWVzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2NoZW1hIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLy8gVG8gZGlzcGxheSBzY2hlbWEgbmV4dCB0byBwYW5lbHM6XG4gIGRpc3BsYXk6IGZsZXg7XG4gIG1pbi1oZWlnaHQ6IDEwMCU7XG5cbiAgPiAuZGl0by1zY2hlbWEtY29udGVudCB7XG4gICAgZmxleDogMSAxIDEwMCU7XG4gICAgLy8gU28gdGhhdCBzY2hlbWEgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50O1xuXG4gICAgPiAqOm9ubHktY2hpbGQge1xuICAgICAgZ3JpZC1yb3ctZW5kOiBub25lO1xuICAgIH1cblxuICAgICYuZGl0by1zY3JvbGw6aGFzKC5kaXRvLXBhbmU6bGFzdC1jaGlsZCk6OmFmdGVyIHtcbiAgICAgIC8vIEVhdCB1cCBuZWdhdGl2ZSBtYXJnaW4gb2YgdGhlIGxhc3QgY2hpbGQgdG8gcHJldmVudCBvdmVyc2Nyb2xsLlxuICAgICAgY29udGVudDogJyc7XG4gICAgfVxuXG4gICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aCArIDIgKiAkY29udGVudC1wYWRkaW5nO1xuICB9XG5cbiAgPiAuZGl0by1idXR0b25zLFxuICA+IC5kaXRvLXBhbmVscyB7XG4gICAgZmxleDogMSAxIDAlO1xuICB9XG5cbiAgPiAuZGl0by1idXR0b25zIHtcbiAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZztcbiAgfVxuXG4gID4gLmRpdG8tcGFuZWxzIHtcbiAgICBwYWRkaW5nOiAkY29udGVudC1wYWRkaW5nICRjb250ZW50LXBhZGRpbmcgJGNvbnRlbnQtcGFkZGluZyAwO1xuICB9XG5cbiAgLy8gRGlzcGxheSBhIHJ1bGVyIGJldHdlZW4gdGFiYmVkIGNvbXBvbmVudHMgYW5kIHRvd2FyZHMgdGhlIC5kaXRvLWJ1dHRvbnNcbiAgLmRpdG8tcGFuZS10YWIgKyAuZGl0by1wYW5lLW1haW4ge1xuICAgICY6OmJlZm9yZSB7XG4gICAgICAvLyBVc2UgYSBwc2V1ZG8gZWxlbWVudCB0byBkaXNwbGF5IGEgcnVsZXIgd2l0aCBwcm9wZXIgbWFyZ2luc1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYm9yZGVyLWJvdHRvbTogJGJvcmRlci1zdHlsZTtcbiAgICAgIC8vIEFkZCByZW1vdmVkICRmb3JtLXNwYWNpbmcgYWdhaW4gdG8gdGhlIHJ1bGVyXG4gICAgICBtYXJnaW46ICRjb250ZW50LXBhZGRpbmcgJGZvcm0tc3BhY2luZy1oYWxmICRmb3JtLXNwYWNpbmctaGFsZjtcbiAgICB9XG4gIH1cblxuICAuZGl0by1wYW5lLW1haW4gKyAuZGl0by1idXR0b25zLW1haW4ge1xuICAgIC8vIE5lZWRlZCBmb3JtcyB3aXRoIHN0aWNreSBtYWluIGJ1dHRvbnMuXG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxufVxuXG4uZGl0by1zY2hlbWEtaGVhZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gIC5kaXRvLXRhYnMsXG4gIC5kaXRvLWNsaXBib2FyZCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDtcbiAgfVxuXG4gIC5kaXRvLWNsaXBib2FyZCB7XG4gICAgJjpvbmx5LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgIH1cblxuICAgIC5kaXRvLWJ1dHRvbiB7XG4gICAgICBtYXJnaW46IDAgMCAkdGFiLW1hcmdpbiAkdGFiLW1hcmdpbjtcbiAgICB9XG4gIH1cblxuICAmLS1tZW51IHtcbiAgICAvLyBBbGlnbiB0aGUgdGFicyBvbiB0b3Agb2YgdG8gdGhlIGhlYWRlciBtZW51LlxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBoZWlnaHQ6ICRtZW51LWhlaWdodDtcbiAgICBwYWRkaW5nOiAwICRtZW51LXBhZGRpbmctaG9yO1xuICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGg7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgei1pbmRleDogJG1lbnUtei1pbmRleDtcbiAgICAvLyBUdXJuIG9mZiBwb2ludGVyIGV2ZW50cyBzbyB0aGF0IERpdG9UcmFpbCBrZWVwcyByZWNlaXZpbmcgZXZlbnRzLi4uXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgLy8gLi4uYnV0IGFsbG93IGludGVyYWN0aW9uIHdpdGggdGhlIHRhYnMgYW5kIGJ1dHRvbnMgKGUuZy4gY2xpcGJvYXJkKVxuICAgIC8vIGxheWVyZWQgb24gdG9wIG9mIERpdG9UcmFpbC5cbiAgICAuZGl0by10YWJzLFxuICAgIC5kaXRvLWJ1dHRvbnMge1xuICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHQ7XG4gICAgICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZTtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuRGl0b1NjaGVtYS5kaXRvLXNjaGVtYS1pbmxpbmVkKFxuICA6Y2xhc3M9XCJ7ICdkaXRvLXNjaGVtYS1jb21wYWN0JzogaXNDb21wYWN0IH1cIlxuICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICA6ZGF0YT1cImRhdGFcIlxuICA6bWV0YT1cIm1ldGFcIlxuICA6c3RvcmU9XCJzdG9yZVwiXG4gIDpsYWJlbD1cImlzQ29tcGFjdCA/IG51bGwgOiBsYWJlbFwiXG4gIDppbmxpbmVkPVwidHJ1ZVwiXG4gIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgOmdlbmVyYXRlTGFiZWxzPVwiIWlzQ29tcGFjdFwiXG4pXG4gIC8vLSBSZW5kZXIgZGl0by1lZGl0LWJ1dHRvbnMgZm9yIGlubGluZWQgc2NoZW1hcyBzZXBhcmF0ZWx5IGZyb20gYWxsXG4gIC8vLSBvdGhlcnMgaW4gYFR5cGVMaXN0YCBhcyBhIHNjb3BlLCBmb3IgYmV0dGVyIGhhbmRsaW5nIG9mIGxheW91dC5cbiAgdGVtcGxhdGUoI2VkaXQtYnV0dG9ucylcbiAgICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgICB2LWlmPVwiZGVsZXRhYmxlIHx8IGRyYWdnYWJsZSB8fCBlZGl0YWJsZVwiXG4gICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgOmVkaXRQYXRoPVwiZWRpdFBhdGhcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIEBkZWxldGU9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNDb21wYWN0IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvU2NoZW1hSW5saW5lZCcsIHtcbiAgZW1pdHM6IFsnZGVsZXRlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRlbGV0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpc0NvbXBhY3QoKSB7XG4gICAgICByZXR1cm4gaXNDb21wYWN0KHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0NvbXBhY3QgJiYgISF0aGlzLmxhYmVsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2NoZW1hLWlubGluZWQge1xuICA+IC5kaXRvLXNjaGVtYS1jb250ZW50IHtcbiAgICA+IC5kaXRvLXNjaGVtYS1oZWFkZXIge1xuICAgICAgLy8gQ2hhbmdlIHNwYWNpbmcgc28gLmRpdG8tbGFiZWwgY292ZXJzIHRoZSBmdWxsIC5kaXRvLXNjaGVtYS1oZWFkZXIuXG4gICAgICBtYXJnaW46IC0kZm9ybS1zcGFjaW5nO1xuXG4gICAgICAuZGl0by1sYWJlbCB7XG4gICAgICAgIC8vIEFkZCByZW1vdmVkICRmb3JtLXNwYWNpbmcgYWdhaW5cbiAgICAgICAgLS1sYWJlbC1wYWRkaW5nOiAjeyRmb3JtLXNwYWNpbmd9O1xuXG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAgICAgICAvLyBCZWNhdXNlIHRhYmxlcyBoYXZlIGEgZnVubnkgd2F5IG9mIGFsbG93aW5nIHRvbyBtdWNoIHdpZHRoIGdyb3d0aDpcbiAgICAgICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aDtcbiAgICAgICAgLy8gUHJldmVudCBjb2xsYXBzaW5nIHRvIG1pbi1oZWlnaHQgd2hlbiBhbG9uZSBpblxuICAgICAgICAvLyAuZGl0by1zY2hlbWEtY29udGVudCwgZHVlIHRvIGdyaWQtdGVtcGxhdGUtcm93czogbWluLWNvbnRlbnRcbiAgICAgICAgbWluLWhlaWdodDogMmVtO1xuICAgICAgfVxuICAgIH1cblxuICAgID4gLmRpdG8tcGFuZSB7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjwhLS0gZXNsaW50LWRpc2FibGUgdnVlL25vLXRlbXBsYXRlLXNoYWRvdyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1wYW5lKFxuICB2LWlmPVwiaXNQb3B1bGF0ZWQgJiYgY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPiAwXCJcbiAgdi1zaG93PVwidmlzaWJsZVwiXG4gIDpjbGFzcz1ge1xuICAgICdkaXRvLXBhbmUtLXNpbmdsZSc6IGlzU2luZ2xlQ29tcG9uZW50XG4gIH1gXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPWB7XG4gICAgICBzY2hlbWEsXG4gICAgICBkYXRhUGF0aCxcbiAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgbmVzdGVkLFxuICAgICAgc3RvcmVcbiAgICB9LCBpbmRleCBpbiBjb21wb25lbnRTY2hlbWFzYFxuICApXG4gICAgLmRpdG8tYnJlYWsoXG4gICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYmVmb3JlJ1wiXG4gICAgKVxuICAgIERpdG9Db250YWluZXIoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKHNjaGVtYSlcIlxuICAgICAgOmtleT1cIm5lc3RlZERhdGFQYXRoXCJcbiAgICAgIHYtcmVzaXplPVwiZXZlbnQgPT4gb25SZXNpemUoaW5kZXgsIGV2ZW50KVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOnNpbmdsZT1cImlzU2luZ2xlQ29tcG9uZW50XCJcbiAgICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgOmZpcnN0SW5Sb3c9XCJzY2hlbWEuYnJlYWsgPT09ICdiZWZvcmUnIHx8IGlzRmlyc3RJblJvdyhpbmRleClcIlxuICAgICAgOmxhc3RJblJvdz1cInNjaGVtYS5icmVhayA9PT0gJ2FmdGVyJyB8fCBpc0xhc3RJblJvdyhpbmRleClcIlxuICAgIClcbiAgICAuZGl0by1icmVhayhcbiAgICAgIHYtaWY9XCJzY2hlbWEuYnJlYWsgPT09ICdhZnRlcidcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZ2V0QWxsUGFuZWxFbnRyaWVzLCBpc05lc3RlZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFuZScsIHtcbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gdGhpcy50YWJDb21wb25lbnRcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0YWI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdmlzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcG9zaXRpb25zOiBbXVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRhYiA/IHRoaXMgOiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRTY2hlbWFzKCkge1xuICAgICAgLy8gQ29tcHV0ZSBhIGNvbXBvbmVudHMgbGlzdCB3aGljaCBoYXMgdGhlIGRhdGFQYXRoIGJha2VkIGludG8gaXRzIGtleXNcbiAgICAgIC8vIGFuZCBhZGRzIHRoZSBrZXkgYXMgdGhlIG5hbWUgdG8gZWFjaCBjb21wb25lbnQsIHVzZWQgZm9yIGxhYmVscywgZXRjLlxuICAgICAgLy8gTk9URTogc2NoZW1hIGNhbiBiZSBudWxsIHdoaWxlIG11bHRpLWZvcm0gbGlzdHMgbG9hZCB0aGVpciBkYXRhLFxuICAgICAgLy8gYmVjYXVzZSBvbmx5IHRoZSBhdmFpbGFibGUgZGF0YSB3aWxsIGRldGVybWluZSB0aGUgdHlwZSBvZiBmb3JtLlxuICAgICAgLy8gV2hlbiBlZGl0aW5nIHByaW1pdGl2ZSB2YWx1ZXMgdGhyb3VnaCBhIGZvcm0sIGRvIG5vdCBhcHBlbmQgJ25hbWUnIHRvXG4gICAgICAvLyB0aGUgY29tcG9uZW50J3MgZGF0YVBhdGggc28gaXQgY2FuIGJlIG1hcHBlZCB0byBmcm9tIHZhbGlkYXRpb24gZXJyb3JzLlxuICAgICAgLy8gTk9URTogTm90IGFsbCBzY2hlbWFzIC8gY29tcG9uZW50cyBoYXZlIGEgc291cmNlU2NoZW1hLCBlLmcuIGRpYWxvZ3MuXG4gICAgICBjb25zdCB3cmFwUHJpbWl0aXZlcyA9IHRoaXMuc291cmNlU2NoZW1hPy53cmFwUHJpbWl0aXZlc1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hPy5jb21wb25lbnRzIHx8IHt9KS5tYXAoXG4gICAgICAgIChbbmFtZSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgIC8vIEFsd2F5cyBhZGQgbmFtZSB0byBjb21wb25lbnQgc2NoZW1hLlxuICAgICAgICAgIHNjaGVtYS5uYW1lID0gbmFtZVxuICAgICAgICAgIC8vIFNoYXJlIGRhdGFQYXRoIGFuZCBzdG9yZSB3aXRoIHBhcmVudCBpZiBub3QgbmVzdGVkOlxuICAgICAgICAgIGNvbnN0IG5lc3RlZCA9IGlzTmVzdGVkKHNjaGVtYSlcbiAgICAgICAgICBjb25zdCBuZXN0ZWREYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgIGRhdGFQYXRoOlxuICAgICAgICAgICAgICBuZXN0ZWQgJiYgIXdyYXBQcmltaXRpdmVzXG4gICAgICAgICAgICAgICAgPyBuZXN0ZWREYXRhUGF0aFxuICAgICAgICAgICAgICAgIDogdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgICAgc3RvcmU6IG5lc3RlZCA/IHRoaXMuZ2V0Q2hpbGRTdG9yZShuYW1lKSA6IHRoaXMuc3RvcmVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgcGFuZWxFbnRyaWVzKCkge1xuICAgICAgLy8gR2F0aGVyIGFsbCBwYW5lbCBzY2hlbWFzIGZyb20gYWxsIGNvbXBvbmVudCBzY2hlbWFzLCBieSBmaW5kaW5nIHRob3NlXG4gICAgICAvLyB0aGF0IHdhbnQgdG8gcHJvdmlkZSBhIHBhbmVsLiBTZWUgYGdldEFsbFBhbmVsRW50cmllcygpYCBmb3IgZGV0YWlscy5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFNjaGVtYXMuZmxhdE1hcChcbiAgICAgICAgKHsgc2NoZW1hLCBuZXN0ZWREYXRhUGF0aDogZGF0YVBhdGggfSkgPT5cbiAgICAgICAgICBnZXRBbGxQYW5lbEVudHJpZXMoXG4gICAgICAgICAgICB0aGlzLmFwaSxcbiAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQsXG4gICAgICAgICAgICB0aGlzLnRhYkNvbXBvbmVudFxuICAgICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNTaW5nbGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaW5nbGUgJiYgdGhpcy5jb21wb25lbnRTY2hlbWFzLmxlbmd0aCA9PT0gMVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJQYW5lKHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICBpZiAodGhpcy50YWIpIHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBoYXNoOiBgIyR7dGhpcy50YWJ9YCB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblJlc2l6ZShpbmRleCwgeyB0YXJnZXQgfSkge1xuICAgICAgY29uc3QgeyB5LCB3aWR0aCwgaGVpZ2h0IH0gPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIHRoaXMucG9zaXRpb25zW2luZGV4XSA9IHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwID8geSA6IG51bGxcbiAgICB9LFxuXG4gICAgaXNGaXJzdEluUm93KGluZGV4KSB7XG4gICAgICBjb25zdCB7IHBvc2l0aW9ucyB9ID0gdGhpc1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgcG9zaXRpb25zW2luZGV4XSAhPT0gbnVsbCAmJiAoXG4gICAgICAgICAgaW5kZXggPT09IDAgfHxcbiAgICAgICAgICAoZmluZE5leHRQb3NpdGlvbihwb3NpdGlvbnMsIGluZGV4LCAtMSwgSW5maW5pdHkpIDwgcG9zaXRpb25zW2luZGV4XSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0xhc3RJblJvdyhpbmRleCkge1xuICAgICAgY29uc3QgeyBwb3NpdGlvbnMgfSA9IHRoaXNcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHBvc2l0aW9uc1tpbmRleF0gIT09IG51bGwgJiYgKFxuICAgICAgICAgIGluZGV4ID09PSBwb3NpdGlvbnMubGVuZ3RoIC0gMSB8fFxuICAgICAgICAgIGZpbmROZXh0UG9zaXRpb24ocG9zaXRpb25zLCBpbmRleCwgKzEsIDApID4gcG9zaXRpb25zW2luZGV4XVxuICAgICAgICApXG4gICAgICApXG4gICAgfVxuICB9XG59KVxuXG5mdW5jdGlvbiBmaW5kTmV4dFBvc2l0aW9uKHBvc2l0aW9ucywgaW5kZXgsIHN0ZXAsIGZhbGxiYWNrKSB7XG4gIGZvciAobGV0IGkgPSBpbmRleCArIHN0ZXA7IGkgPj0gMCAmJiBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSArPSBzdGVwKSB7XG4gICAgY29uc3QgcG9zaXRpb24gPSBwb3NpdGlvbnNbaV1cbiAgICBpZiAocG9zaXRpb24pIHJldHVybiBwb3NpdGlvblxuICB9XG4gIHJldHVybiBmYWxsYmFja1xufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tcGFuZSB7XG4gICRtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoICsgMiAqICRjb250ZW50LXBhZGRpbmc7XG5cbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gIHBhZGRpbmc6ICRjb250ZW50LXBhZGRpbmc7XG4gIC8vIFJlbW92ZSB0aGUgcGFkZGluZyBhZGRlZCBieSBgLmRpdG8tY29udGFpbmVyYCBpbnNpZGUgYC5kaXRvLXBhbmVgOlxuICBtYXJnaW46ICgtJGZvcm0tc3BhY2luZykgKC0kZm9ybS1zcGFjaW5nLWhhbGYpO1xuICAvLyBBZGQgcmVtb3ZlZCBob3Jpem9udGFsIG1hcmdpbiBhZ2FpbiB0byBtYXgtd2lkdGg6XG4gIG1heC13aWR0aDogJG1heC13aWR0aCArIDIgKiAkZm9ybS1zcGFjaW5nLWhhbGY7XG4gIC8vIFVzZSBgZmxleDogMCVgIGZvciBhbGwgYC5kaXRvLXBhbmVgIGV4Y2VwdCBgLmRpdG8tcGFuZS1tYWluYCxcbiAgLy8gc28gdGhhdCB0aGUgYC5kaXRvLWJ1dHRvbnMtbWFpbmAgY2FuIGJlIG1vdmVkIGFsbCB0aGUgd2F5IHRvIHRoZSBib3R0b20uXG4gIGZsZXg6IDAlO1xuXG4gICYtLXNpbmdsZSB7XG4gICAgLy8gQ2xlYXIgc2V0dGluZ3MgZnJvbSBhYm92ZS5cbiAgICBtYXJnaW46IDA7XG4gICAgbWF4LXdpZHRoOiAkbWF4LXdpZHRoO1xuICB9XG5cbiAgJi5kaXRvLXBhbmUtbWFpbiB7XG4gICAgZmxleDogMTAwJTtcbiAgfVxuXG4gIC5kaXRvLXNjaGVtYS1oZWFkZXIgKyAmIHtcbiAgICAvLyBDbGVhciB0b3AtbWFyZ2luIGlmIHRoZSBjb21wb25lbnRzIGFyZSBwcmVjZWRlZCBieSBhIHNjaGVtYSBoZWFkZXIuXG4gICAgbWFyZ2luLXRvcDogMDtcbiAgfVxuXG4gIC5kaXRvLWNvbnRhaW5lci0tb21pdC1wYWRkaW5nID4gJiB7XG4gICAgLy8gQ2xlYXIgbWFyZ2lucyBzZXQgYWJvdmUgYWdhaW4gaWYgcGFyZW50IGlzIG9taXR0aW5nIHBhZGRpbmcuXG4gICAgbWFyZ2luOiAwO1xuICAgIG1heC13aWR0aDogdW5zZXQ7XG4gIH1cblxuICAuZGl0by1icmVhayB7XG4gICAgZmxleDogMTAwJTtcbiAgICBoZWlnaHQ6IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZyYWN0aW9uKHZhbHVlKSB7XG4gIGNvbnN0IG1hdGNoID0gKFxuICAgIGlzU3RyaW5nKHZhbHVlKSAmJlxuICAgIHZhbHVlLm1hdGNoKC9eXFxzKihbKy1dP1xcZCspXFxzKlxcL1xccyooWystXT9cXGQrKVxccyokLylcbiAgKVxuICBpZiAobWF0Y2gpIHtcbiAgICBjb25zdCBbLCBkaXZpZGVuZCwgZGl2aXNvcl0gPSBtYXRjaFxuICAgIHJldHVybiBwYXJzZUZsb2F0KGRpdmlkZW5kKSAvIHBhcnNlRmxvYXQoZGl2aXNvcilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSlcbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNvbnRhaW5lcihcbiAgdi1zaG93PVwiY29tcG9uZW50VmlzaWJsZVwiXG4gIDpjbGFzcz1cImNvbnRhaW5lckNsYXNzXCJcbiAgOnN0eWxlPVwiY29udGFpbmVyU3R5bGVcIlxuKVxuICBEaXRvTGFiZWwoXG4gICAgdi1pZj1cImhhc0xhYmVsXCJcbiAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc1wiXG4gICAgOmxhYmVsPVwibGFiZWxcIlxuICAgIDpkYXRhUGF0aD1cImxhYmVsRGF0YVBhdGhcIlxuICAgIDppbmZvPVwiaW5mb1wiXG4gIClcbiAgY29tcG9uZW50LmRpdG8tY29tcG9uZW50KFxuICAgIDppcz1cInR5cGVDb21wb25lbnRcIlxuICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6d2lkdGg9XCJ3aWR0aFwiXG4gICAgOmxhYmVsPVwibGFiZWxcIlxuICAgIDpzaW5nbGU9XCJzaW5nbGVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImNvbXBvbmVudERpc2FibGVkXCJcbiAgICBAZXJyb3JzPVwib25FcnJvcnNcIlxuICApXG4gIERpdG9FcnJvcnMoOmVycm9ycz1cImVycm9yc1wiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzU3RyaW5nLCBpc051bWJlciB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldFR5cGVDb21wb25lbnQsIGtlZXBBbGlnbmVkLCBvbWl0UGFkZGluZyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHBhcnNlRnJhY3Rpb24gfSBmcm9tICcuLi91dGlscy9tYXRoLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Db250YWluZXInLCB7XG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGZpcnN0SW5Sb3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYXN0SW5Sb3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yczogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiB0aGlzLm5lc3RlZCB9KVxuICAgIH0sXG5cbiAgICB0eXBlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIGdldFR5cGVDb21wb25lbnQodGhpcy5zY2hlbWEudHlwZSlcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICBjb25zdCB7IGxhYmVsIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgbGFiZWwgIT09IGZhbHNlICYmIChcbiAgICAgICAgICAhIWxhYmVsIHx8XG4gICAgICAgICAgdGhpcy5nZW5lcmF0ZUxhYmVscyAmJiB0aGlzLnR5cGVDb21wb25lbnQ/LmdlbmVyYXRlTGFiZWxcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc0xhYmVsID8gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYSkgOiBudWxsXG4gICAgfSxcblxuICAgIGxhYmVsRGF0YVBhdGgoKSB7XG4gICAgICAvLyBVbm5lc3RlZCB0eXBlcyBkb24ndCBoYXZlIGEgZGF0YVBhdGggZm9yIHRoZW1zZWx2ZXMsIGRvbid0IHVzZSBpdDpcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMuZGF0YVBhdGggOiBudWxsXG4gICAgfSxcblxuICAgIGluZm86IGdldFNjaGVtYUFjY2Vzc29yKCdpbmZvJywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgd2lkdGg6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlQ29tcG9uZW50Py5kZWZhdWx0V2lkdGhcbiAgICAgIH0sXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgLy8gVXNlIDEwMCUgPT0gMS4wIGFzIGRlZmF1bHQgd2lkdGggd2hlbiBub3RoaW5nIGlzIHNldDpcbiAgICAgICAgcmV0dXJuIHdpZHRoID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IDEuMFxuICAgICAgICAgIDogaXNTdHJpbmcod2lkdGgpXG4gICAgICAgICAgICA/IHdpZHRoLm1hdGNoKC9eXFxzKls8Pl0/XFxzKiguKikkLylbMV0gLy8gUmVtb3ZlIHdpZHRoIG9wZXJhdG9yXG4gICAgICAgICAgICA6IHdpZHRoXG4gICAgICB9XG4gICAgfSksXG5cbiAgICB3aWR0aE9wZXJhdG9yOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKHdpZHRoKVxuICAgICAgICAgID8gd2lkdGgubWF0Y2goL15cXHMqKFs8Pl0/KS8pWzFdIHx8IG51bGxcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudFZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVDb21wb25lbnQ/LmRlZmF1bHRWaXNpYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnREaXNhYmxlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Rpc2FibGVkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybiBkaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb250YWluZXJDbGFzcygpIHtcbiAgICAgIGNvbnN0IHsgY2xhc3M6IGNvbnRhaW5lckNsYXNzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgY29uc3QgcHJlZml4ID0gJ2RpdG8tY29udGFpbmVyJ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Ake3ByZWZpeH0tLXNpbmdsZWBdOiB0aGlzLnNpbmdsZSxcbiAgICAgICAgW2Ake3ByZWZpeH0tLWhhcy1sYWJlbGBdOiB0aGlzLmhhc0xhYmVsLFxuICAgICAgICBbYCR7cHJlZml4fS0tYWxpZ25lZGBdOiBrZWVwQWxpZ25lZCh0aGlzLnNjaGVtYSksXG4gICAgICAgIFtgJHtwcmVmaXh9LS1vbWl0LXBhZGRpbmdgXTogb21pdFBhZGRpbmcodGhpcy5zY2hlbWEpLFxuICAgICAgICBbYCR7cHJlZml4fS0tZmlyc3QtaW4tcm93YF06IHRoaXMuZmlyc3RJblJvdyxcbiAgICAgICAgW2Ake3ByZWZpeH0tLWxhc3QtaW4tcm93YF06IHRoaXMubGFzdEluUm93LFxuICAgICAgICBbYCR7cHJlZml4fS0tYWxvbmUtaW4tcm93YF06IHRoaXMuZmlyc3RJblJvdyAmJiB0aGlzLmxhc3RJblJvdyxcbiAgICAgICAgLi4uKFxuICAgICAgICAgIGlzU3RyaW5nKGNvbnRhaW5lckNsYXNzKVxuICAgICAgICAgICAgPyB7IFtjb250YWluZXJDbGFzc106IHRydWUgfVxuICAgICAgICAgICAgOiBjb250YWluZXJDbGFzc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbXBvbmVudEJhc2lzKCkge1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLndpZHRoXG4gICAgICAvLyAnYXV0bycgPSBubyBmaXR0aW5nOlxuICAgICAgY29uc3QgYmFzaXMgPSBbbnVsbCwgJ2F1dG8nLCAnZmlsbCddLmluY2x1ZGVzKHdpZHRoKVxuICAgICAgICA/ICdhdXRvJ1xuICAgICAgICA6IC8lJC8udGVzdCh3aWR0aClcbiAgICAgICAgICA/IHBhcnNlRmxvYXQod2lkdGgpIC8vIHBlcmNlbnRhZ2VcbiAgICAgICAgICA6IC9bYS16XS8udGVzdCh3aWR0aClcbiAgICAgICAgICAgID8gd2lkdGggLy8gbmF0aXZlIHVuaXRzXG4gICAgICAgICAgICA6IHBhcnNlRnJhY3Rpb24od2lkdGgpICogMTAwIC8vIGZyYWN0aW9uXG4gICAgICByZXR1cm4gaXNOdW1iZXIoYmFzaXMpID8gYCR7YmFzaXN9JWAgOiBiYXNpc1xuICAgIH0sXG5cbiAgICBjb250YWluZXJTdHlsZSgpIHtcbiAgICAgIC8vIEludGVycHJldCAnPjUwJScgYXMgJzUwJSwgZmxleC1ncm93OiAxYFxuICAgICAgY29uc3QgZ3JvdyA9IChcbiAgICAgICAgdGhpcy53aWR0aE9wZXJhdG9yID09PSAnPicgfHxcbiAgICAgICAgdGhpcy53aWR0aCA9PT0gJ2ZpbGwnXG4gICAgICApXG4gICAgICAvLyBJbnRlcnByZXQgJzw1MCUnIGFzICc1MCUsIGZsZXgtc2hyaW5rOiAxYFxuICAgICAgY29uc3Qgc2hyaW5rID0gdGhpcy53aWR0aE9wZXJhdG9yID09PSAnPCdcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZsZXg6IGAke2dyb3cgPyAxIDogMH0gJHtzaHJpbmsgPyAxIDogMH0gJHt0aGlzLmNvbXBvbmVudEJhc2lzfWBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcG9uZW50Q2xhc3MoKSB7XG4gICAgICBjb25zdCBiYXNpc0lzQXV0byA9IHRoaXMuY29tcG9uZW50QmFzaXMgPT09ICdhdXRvJ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLy8gVE9ETzogQkVNP1xuICAgICAgICAnZGl0by1zaW5nbGUnOiB0aGlzLnNpbmdsZSxcbiAgICAgICAgJ2RpdG8tZGlzYWJsZWQnOiB0aGlzLmNvbXBvbmVudERpc2FibGVkLFxuICAgICAgICAnZGl0by13aWR0aC1maWxsJzogIWJhc2lzSXNBdXRvIHx8IHRoaXMud2lkdGggPT09ICdmaWxsJyxcbiAgICAgICAgJ2RpdG8taGFzLWVycm9ycyc6ICEhdGhpcy5lcnJvcnNcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRXJyb3JzKGVycm9ycykge1xuICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jb250YWluZXIge1xuICAkc2VsZjogJjtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWZsb3c6IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIC8vIE5lZWRlZCBmb3IgYmV0dGVyIHZlcnRpY2FsIGFsaWdubWVudDpcbiAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLy8gVG8gcHJldmVudCBsaXN0IHRhYmxlcyBmcm9tIGJsb3dpbmcgb3V0IG9mIHRoZWlyIGZsZXggYm94IGNvbnRhaW5lcnMuXG4gIG1heC13aWR0aDogMTAwJTtcbiAgLy8gQ2Fubm90IHVzZSBtYXJnaW4gaGVyZSBhcyBpdCBuZWVkcyB0byBiZSBwYXJ0IG9mIGJveC1zaXppbmcgZm9yXG4gIC8vIHBlcmNlbnRhZ2VzIGluIGZsZXgtYmFzaXMgdG8gd29yay5cbiAgcGFkZGluZzogJGZvcm0tc3BhY2luZyAkZm9ybS1zcGFjaW5nLWhhbGY7XG5cbiAgJjplbXB0eSB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuXG4gICYtLXNpbmdsZSB7XG4gICAgaGVpZ2h0OiAxMDAlOyAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IGF0IHRoZSBib3R0b207XG4gICAgLy8gSnVzdCBsaWtlIG9uIERpdG9QYW5lLCBjbGVhciBzZXR0aW5ncyBmcm9tIGFib3ZlLlxuICAgIHBhZGRpbmc6IDA7XG4gIH1cblxuICAmLS1hbGlnbmVkIHtcbiAgICAvLyBGb3IgY29tcG9uZW50cyB3aXRoIGxhYmVscywgYWxpZ24gdGhlIGxhYmVsIGF0IHRoZSB0b3AgYW5kIHRoZSBjb21wb25lbnRcbiAgICAvLyBhdCB0aGUgYm90dG9tLlxuICAgIC0tanVzdGlmeTogc3BhY2UtYmV0d2VlbjtcblxuICAgICY6aGFzKD4gOm9ubHktY2hpbGQpIHtcbiAgICAgIC8vIEJ1dCBpZiB0aGVyZSBpcyBubyBsYWJlbCwgc3RpbGwgYWxpZ24gdGhlIGNvbXBvbmVudCB0byB0aGUgYm90dG9tLlxuICAgICAgLS1qdXN0aWZ5OiBmbGV4LWVuZDtcbiAgICB9XG5cbiAgICAmOm5vdCgjeyRzZWxmfS0tb25seS1pbi1yb3cpIHtcbiAgICAgIC8vIE5vdyBvbmx5IGFwcGx5IGFsaWdubWVudCBpZiB0aGVyZSBhcmUgbmVpZ2hib3VyaW5nIGNvbXBvbmVudHMgbm8gdGhlXG4gICAgICAvLyBzYW1lIHJvdyB0aGF0IGFsc28gYWxpZ24uXG4gICAgICAvLyBMb29rIGFoZWFkOlxuICAgICAgJjpub3QoI3skc2VsZn0tLWxhc3QtaW4tcm93KSArICN7Jn06bm90KCN7JHNlbGZ9LS1maXJzdC1pbi1yb3cpLFxuICAgICAgLy8gTG9vayBiZWhpbmQ6XG4gICAgICAmOm5vdCgjeyRzZWxmfS0tbGFzdC1pbi1yb3cpOmhhcygrICN7Jn06bm90KCN7JHNlbGZ9LS1maXJzdC1pbi1yb3cpKSB7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogdmFyKC0tanVzdGlmeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJi0tb21pdC1wYWRkaW5nIHtcbiAgICBwYWRkaW5nOiAwO1xuXG4gICAgPiAuZGl0by1sYWJlbCB7XG4gICAgICBtYXJnaW46ICRmb3JtLXNwYWNpbmcgJGZvcm0tc3BhY2luZy1oYWxmIDA7XG4gICAgfVxuICB9XG59XG5cbi8vIE5PVEU6IFRoaXMgaXMgbm90IG5lc3RlZCBpbnNpZGUgYC5kaXRvLWNvbnRhaW5lcmAgc28gdGhhdCBvdGhlclxuLy8gdHlwZSBjb21wb25lbnRzIGNhbiBvdmVycmlkZSBgLmRpdG8td2lkdGgtZmlsbGAgY2xhc3MgKGZpbHRlciBwcmVjZWRlbmNlKS5cbi5kaXRvLWNvbXBvbmVudCB7XG4gICYuZGl0by13aWR0aC1maWxsIHtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgICYuZGl0by1jaGVja2JveCxcbiAgICAmLmRpdG8tcmFkaW8tYnV0dG9uIHtcbiAgICAgIC8vIFdlYktpdCBkb2Vzbid0IGxpa2UgY2hhbmdlZCB3aWR0aCBvbiBjaGVja2JveGVzIGFuZCByYWRpb3MsIG92ZXJyaWRlOlxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXRhYnNcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9XCIodGFiU2NoZW1hLCBrZXkpIGluIHRhYnNcIlxuICApXG4gICAgUm91dGVyTGluay5kaXRvLWxpbmsoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKHRhYlNjaGVtYSlcIlxuICAgICAgOmtleT1cImtleVwiXG4gICAgICA6dG89XCJ7IGhhc2g6IGAjJHtrZXl9YCB9XCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogc2VsZWN0ZWRUYWIgPT09IGtleSB9XCJcbiAgICApIHt7IGdldExhYmVsKHRhYlNjaGVtYSwga2V5KSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1RhYnMnLCB7XG4gIHByb3BzOiB7XG4gICAgdGFiczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzZWxlY3RlZFRhYjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuJHRhYi1jb2xvci1iYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlc3Q7XG4kdGFiLWNvbG9yLWluYWN0aXZlOiAkY29sb3ItbGlnaHQ7XG4kdGFiLWNvbG9yLWFjdGl2ZTogJGNvbG9yLWxpZ2h0ZXN0O1xuJHRhYi1jb2xvci1ob3ZlcjogJGNvbG9yLXdoaXRlO1xuXG4uZGl0by10YWJzIHtcbiAgLy8gU2VlOiBodHRwczovL2NvZGVwZW4uaW8vdGhvbGV4L3Blbi9odmVCeC9cbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG5cbiAgYSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgICBiYWNrZ3JvdW5kOiAkdGFiLWNvbG9yLWluYWN0aXZlO1xuICAgIHBhZGRpbmc6ICR0YWItcGFkZGluZy12ZXIgJHRhYi1wYWRkaW5nLWhvcjtcbiAgICBtYXJnaW4tbGVmdDogJHRhYi1tYXJnaW47XG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJHRhYi1yYWRpdXM7XG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICR0YWItcmFkaXVzO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAkdGFiLWNvbG9yLWhvdmVyO1xuICAgIH1cblxuICAgICY6YWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQ6ICR0YWItY29sb3ItYWN0aXZlO1xuICAgIH1cblxuICAgICYuZGl0by1hY3RpdmUge1xuICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1iYWNrZ3JvdW5kO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gT25seSBzaG93IHBhbmVscyBpbiB0YWJzIHdoZW4gdGhlIHRhYnMgYXJlIGFsc28gdmlzaWJsZS5cbmNvbXBvbmVudC5kaXRvLXBhbmVsKFxuICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKHBhbmVsU2NoZW1hKVwiXG4gIHYtc2hvdz1cInZpc2libGUgJiYgKCFwYW5lbFRhYkNvbXBvbmVudCB8fCBwYW5lbFRhYkNvbXBvbmVudC52aXNpYmxlKVwiXG4gIDppcz1cInBhbmVsVGFnXCJcbiAgQHN1Ym1pdC5wcmV2ZW50XG4pXG4gIERpdG9TY2hlbWEuZGl0by1wYW5lbF9fc2NoZW1hKFxuICAgIDpzY2hlbWE9XCJwYW5lbFNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6aGFzT3duRGF0YT1cImhhc093bkRhdGFcIlxuICAgIGdlbmVyYXRlTGFiZWxzXG4gIClcbiAgICB0ZW1wbGF0ZSgjYmVmb3JlKVxuICAgICAgaDIuZGl0by1wYW5lbF9faGVhZGVyKDpjbGFzcz1cInsgJ2RpdG8tcGFuZWxfX2hlYWRlci0tc3RpY2t5Jzogc3RpY2t5IH1cIilcbiAgICAgICAgc3BhbiB7eyBnZXRMYWJlbChzY2hlbWEpIH19XG4gICAgICAgIERpdG9CdXR0b25zLmRpdG8tYnV0dG9ucy1zbWFsbChcbiAgICAgICAgICA6YnV0dG9ucz1cInBhbmVsQnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgKVxuICAgIHRlbXBsYXRlKCNidXR0b25zKVxuICAgICAgRGl0b0J1dHRvbnMoXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBWYWxpZGF0b3JNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFuZWwnLCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcGFuZWxDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiB0aGlzLnBhbmVsVGFiQ29tcG9uZW50XG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFuZWxUYWJDb21wb25lbnQ6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvd25EYXRhOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYW5lbFRhYkNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEuYnV0dG9ucylcbiAgICB9LFxuXG4gICAgcGFuZWxCdXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEucGFuZWxCdXR0b25zKVxuICAgIH0sXG5cbiAgICB0YXJnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEudGFyZ2V0IHx8IHRoaXMuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgaGFzT3duRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMub3duRGF0YVxuICAgIH0sXG5cbiAgICBwYW5lbERhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5vd25EYXRhIHx8IHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBwYW5lbFNjaGVtYSgpIHtcbiAgICAgIGlmICh0aGlzLmhhc093bkRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmUgYGRhdGFgIGZyb20gdGhlIHNjaGVtYSwgc28gdGhhdCBEaXRvU2NoZW1hIGlzbid0IHVzaW5nIGl0IHRvXG4gICAgICAgIC8vIHByb2R1Y2UgaXRzIG93biBkYXRhLiBTZWUgJGZpbHRlcnMgcGFuZWwgZm9yIG1vcmUgZGV0YWlscyBvbiBkYXRhLlxuICAgICAgICBjb25zdCB7IGRhdGEsIC4uLnNjaGVtYSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgcmV0dXJuIHNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwYW5lbFRhZygpIHtcbiAgICAgIC8vIFBhbmVscyB0aGF0IHByb3ZpZGUgdGhlaXIgb3duIGRhdGEgbmVlZCB0aGVpciBvd24gZm9ybS5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyAnZm9ybScgOiAnZGl2J1xuICAgIH0sXG5cbiAgICBwYW5lbERhdGFQYXRoKCkge1xuICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gZGF0YSwgdGhlbiBpdCBuZWVkcyB0byBwcmVmaXggYWxsXG4gICAgICAvLyBjb21wb25lbnRzIHdpdGggaXRzIGRhdGEtcGF0aCwgYnV0IGlmIGl0IHNoYXJlcyBkYXRhIHdpdGggdGhlIHNjaGVtYVxuICAgICAgLy8gY29tcG9uZW50LCB0aGVuIGl0IHNob3VsZCBzaGFyZSB0aGUgZGF0YS1wYXRoIG5hbWUgc3BhY2UgdG9vLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/IHRoaXMuZGF0YVBhdGggOiB0aGlzLnNjaGVtYUNvbXBvbmVudC5kYXRhUGF0aFxuICAgIH0sXG5cbiAgICB2aXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSksXG5cbiAgICBzdGlja3k6IGdldFNjaGVtYUFjY2Vzc29yKCdzdGlja3knLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICAvLyBOT1RFOiBUaGlzIGlzIG5vdCB0aGUgc2FtZSBhcyBgc2NoZW1hLmRhdGFgIGhhbmRsaW5nIGluIERpdG9TY2hlbWEsXG4gICAgLy8gd2hlcmUgdGhlIGRhdGEgaXMgYWRkZWQgdG8gdGhlIGFjdHVhbCBjb21wb25lbnQuXG4gICAgY29uc3QgeyBkYXRhIH0gPSB0aGlzLnNjaGVtYVxuICAgIGlmIChkYXRhKSB7XG4gICAgICB0aGlzLm93bkRhdGEgPSBpc0Z1bmN0aW9uKGRhdGEpXG4gICAgICAgID8gZGF0YSh0aGlzLmNvbnRleHQpXG4gICAgICAgIDogZGF0YVxuICAgIH1cbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIFJlZ2lzdGVyIHRoZSBwYW5lbHMgc28gdGhhdCBvdGhlciBjb21wb25lbnRzIGNhbiBmaW5kIHRoZW0gYnkgdGhlaXJcbiAgICAgIC8vIGRhdGEtcGF0aCwgZS5nLiBpbiBUeXBlTGlzdC5vbkZpbHRlckVycm9ycygpXG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJQYW5lbCh0aGlzLCBhZGQpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tcGFuZWwge1xuICAmOm5vdCg6bGFzdC1jaGlsZCkge1xuICAgIG1hcmdpbi1ib3R0b206ICRjb250ZW50LXBhZGRpbmc7XG4gIH1cblxuICAmX19oZWFkZXIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuICAgIGJhY2tncm91bmQ6ICRidXR0b24tY29sb3I7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcblxuICAgICYtLXN0aWNreSB7XG4gICAgICAkbWFyZ2luOiAkaW5wdXQtaGVpZ2h0LWZhY3RvciAqICRsaW5lLWhlaWdodCAqICRmb250LXNpemUtc21hbGwgK1xuICAgICAgICAkZm9ybS1zcGFjaW5nO1xuXG4gICAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgICAgdG9wOiAwO1xuICAgICAgbWFyZ2luLWJvdHRvbTogJG1hcmdpbjtcbiAgICAgIHotaW5kZXg6IDE7XG5cbiAgICAgICYgKyAqIHtcbiAgICAgICAgbWFyZ2luLXRvcDogLSRtYXJnaW47XG4gICAgICB9XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgaGVpZ2h0OiAkY29udGVudC1wYWRkaW5nO1xuICAgICAgICB0b3A6IC0kY29udGVudC1wYWRkaW5nO1xuICAgICAgICBtYXJnaW46IC0kYm9yZGVyLXdpZHRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5kaXRvLWJ1dHRvbnMge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgcmlnaHQ6ICRpbnB1dC1wYWRkaW5nLXZlcjtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgIH1cbiAgfVxuXG4gICZfX3NjaGVtYSB7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsO1xuICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICAgIGJvcmRlci10b3A6IDA7XG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuXG4gICAgPiAuZGl0by1zY2hlbWEtY29udGVudCB7XG4gICAgICA+IC5kaXRvLXBhbmUge1xuICAgICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGYgJGZvcm0tc3BhY2luZztcbiAgICAgIH1cblxuICAgICAgLmRpdG8tY29udGFpbmVyIHtcbiAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmO1xuICAgICAgfVxuXG4gICAgICAuZGl0by1vYmplY3Qge1xuICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICB9XG5cbiAgICAgID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgICAgIC0tYnV0dG9uLW1hcmdpbjogI3skZm9ybS1zcGFjaW5nfTtcblxuICAgICAgICBwYWRkaW5nOiAwICRmb3JtLXNwYWNpbmcgJGZvcm0tc3BhY2luZztcblxuICAgICAgICAuZGl0by1jb250YWluZXIge1xuICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZGl0by1sYWJlbCB7XG4gICAgICBtYXJnaW46IDA7XG5cbiAgICAgIGxhYmVsIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZGl0by1wYW5lIHtcbiAgICAgIG1hcmdpbjogMCAoLSRmb3JtLXNwYWNpbmctaGFsZik7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXBhbmVscyhcbiAgdi1pZj1cInBhbmVscy5sZW5ndGggPiAwXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9XCJ7IHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCB9IGluIHBhbmVsc1wiXG4gIClcbiAgICBEaXRvUGFuZWwoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKHNjaGVtYSlcIlxuICAgICAgOmtleT1cImdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKHNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJzY2hlbWEuZGlzYWJsZWQgIT0gbnVsbCA/IHNjaGVtYS5kaXNhYmxlZCA6IGRpc2FibGVkXCJcbiAgICAgIDpwYW5lbFRhYkNvbXBvbmVudD1cInRhYkNvbXBvbmVudFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1BhbmVscycsIHtcbiAgcHJvcHM6IHtcbiAgICBwYW5lbHM6IHsgdHlwZTogQXJyYXksIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRQYW5lbEtleShkYXRhUGF0aCwgdGFiQ29tcG9uZW50KSB7XG4gICAgICAvLyBBbGxvdyBzZXBhcmF0ZSB0YWJzIHRvIHVzZSBwYW5lbHMgb2YgdGhlIHNhbWUgbmFtZSwgYnlcbiAgICAgIC8vIHByZWZpeGluZyB0aGVpciBrZXkgd2l0aCB0aGUgdGFiIG5hbWUuXG4gICAgICByZXR1cm4gdGFiQ29tcG9uZW50ID8gYCR7dGFiQ29tcG9uZW50LnRhYn1fJHtkYXRhUGF0aH1gIDogZGF0YVBhdGhcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYW5lbHMge1xuICBtYXgtd2lkdGg6ICRjb250ZW50LXNpZGViYXItd2lkdGg7XG4gIG1pbi13aWR0aDogY2FsYygkY29udGVudC1zaWRlYmFyLXdpZHRoIC8gMik7XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgdXNlU2xvdHMsIENvbW1lbnQgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBpc1N0cmluZywgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNWTm9kZUNvbnRlbnQodm5vZGUpIHtcbiAgcmV0dXJuIHZub2RlICYmIGFzQXJyYXkodm5vZGUpLnNvbWUodm5vZGUgPT4gdm5vZGUudHlwZSAhPT0gQ29tbWVudClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1Nsb3RDb250ZW50KHNsb3QsIHByb3BzID0ge30pIHtcbiAgc2xvdCA9IGlzU3RyaW5nKHNsb3QpID8gdXNlU2xvdHMoKVtzbG90XSA6IHNsb3RcbiAgcmV0dXJuIGhhc1ZOb2RlQ29udGVudChzbG90Py4ocHJvcHMpKVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWJ1dHRvbnMoXG4gIHYtaWY9XCJidXR0b25TY2hlbWFzIHx8IGhhc1Nsb3RDb250ZW50KCRzbG90cy5kZWZhdWx0KVwiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwiKGJ1dHRvblNjaGVtYSwgYnV0dG9uRGF0YVBhdGgpIGluIGJ1dHRvblNjaGVtYXNcIlxuICApXG4gICAgRGl0b0NvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoYnV0dG9uU2NoZW1hKVwiXG4gICAgICA6a2V5PVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOnNjaGVtYT1cImJ1dHRvblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoYnV0dG9uU2NoZW1hLm5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwidm5vZGUgb2YgJHNsb3RzLmRlZmF1bHQ/LigpXCJcbiAgKVxuICAgIC8vLSBSZW5kZXIgZWFjaCBub2RlIGluIHRoZSBkZWZhdWx0IHNsb3QgdGhyb3VnaCBgZGl0by12bm9kZWAsXG4gICAgLy8tIHNvIGl0IGNhbiBiZSB3cmFwcGVkIGluIGEgYC5kaXRvLWNvbnRhaW5lcmAgY2xhc3MuXG4gICAgLmRpdG8tY29udGFpbmVyKFxuICAgICAgdi1pZj1cImhhc1ZOb2RlQ29udGVudCh2bm9kZSlcIlxuICAgIClcbiAgICAgIERpdG9Wbm9kZSg6dm5vZGU9XCJ2bm9kZVwiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBoYXNTbG90Q29udGVudCwgaGFzVk5vZGVDb250ZW50IH0gZnJvbSAnLi4vdXRpbHMvdnVlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9CdXR0b25zJywge1xuICBwcm92aWRlOiB7XG4gICAgJHRhYkNvbXBvbmVudDogKCkgPT4gbnVsbFxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICAvLyBDb21wdXRlIGEgYnV0dG9ucyBsaXN0IHdoaWNoIGhhcyB0aGUgZGF0YVBhdGggYmFrZWQgaW50byBpdHMga2V5cy5cbiAgICAgIGNvbnN0IHsgZGF0YVBhdGgsIGJ1dHRvbnMgfSA9IHRoaXNcbiAgICAgIHJldHVybiBidXR0b25zXG4gICAgICAgID8gT2JqZWN0LnZhbHVlcyhidXR0b25zKS5yZWR1Y2UoKHNjaGVtYXMsIGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgc2NoZW1hc1thcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgYnV0dG9uLm5hbWUpXSA9IGJ1dHRvblxuICAgICAgICAgICAgcmV0dXJuIHNjaGVtYXNcbiAgICAgICAgICB9LCB7fSlcbiAgICAgICAgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYXNTbG90Q29udGVudCxcbiAgICBoYXNWTm9kZUNvbnRlbnRcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLWJ1dHRvbnMge1xuICA+IC5kaXRvLWNvbnRhaW5lciB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gU2V0IGBAY2xpY2suc3RvcGAgdG8gcHJldmVudCBjbGljayBldmVudHMgZnJvbSBidWJibGluZyB0byBkaXRvLWxhYmVsLlxuRGl0b0J1dHRvbnMuZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICA6YnV0dG9ucz1cImJ1dHRvbnNcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gIDpkYXRhPVwiZGF0YVwiXG4gIDptZXRhPVwibWV0YVwiXG4gIDpzdG9yZT1cInN0b3JlXCJcbiAgQGNsaWNrLnN0b3BcbilcbiAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgYS5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNEcmFnZ2FibGVcIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICApXG4gIFJvdXRlckxpbmsuZGl0by1idXR0b24oXG4gICAgdi1pZj1cImlzRWRpdGFibGVcIlxuICAgIDp0bz1cInsgcGF0aDogZWRpdFBhdGggfVwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gIClcbiAgRGl0b0NyZWF0ZUJ1dHRvbihcbiAgICB2LWlmPVwiaXNDcmVhdGFibGVcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpwYXRoPVwiY3JlYXRlUGF0aFwiXG4gICAgOnZlcmI9XCJ2ZXJicy5jcmVhdGVcIlxuICAgIDp0ZXh0PVwiY3JlYXRlQnV0dG9uVGV4dFwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0RlbGV0YWJsZVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICBAY2xpY2s9XCIkZW1pdCgnZGVsZXRlJylcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9FZGl0QnV0dG9ucycsIHtcbiAgZW1pdHM6IFsnZGVsZXRlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNyZWF0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRlbGV0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGNyZWF0ZVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9ybUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEuZm9ybSlcbiAgICB9LFxuXG4gICAgaXNEcmFnZ2FibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2RyYWdnYWJsZScpXG4gICAgfSxcblxuICAgIGlzRWRpdGFibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2VkaXRhYmxlJykgJiYgISF0aGlzLmVkaXRQYXRoXG4gICAgfSxcblxuICAgIGlzQ3JlYXRhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdjcmVhdGFibGUnKSAmJiAhIXRoaXMuY3JlYXRlUGF0aFxuICAgIH0sXG5cbiAgICBpc0RlbGV0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignZGVsZXRhYmxlJylcbiAgICB9LFxuXG4gICAgY3JlYXRlQnV0dG9uVGV4dCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBvdmVycmlkZSBjcmVhdGUgYnV0dG9uIHRocm91Z2ggY3JlYXRhYmxlIG9iamVjdDpcbiAgICAgICAgdGhpcy5zY2hlbWEuY3JlYXRhYmxlPy5sYWJlbCB8fCAoXG4gICAgICAgICAgLy8gQXV0by1nZW5lcmF0ZSBjcmVhdGUgYnV0dG9uIGxhYmVscyBmcm9tIGZyb20gbGFiZWxzIGZvciBsaXN0XG4gICAgICAgICAgLy8gc291cmNlcyB3aXRoIG9ubHkgb25lIGZvcm06XG4gICAgICAgICAgdGhpcy5mb3JtTGFiZWwgJiZcbiAgICAgICAgICBgJHtjYXBpdGFsaXplKHRoaXMudmVyYnMuY3JlYXRlKX0gJHt0aGlzLmZvcm1MYWJlbH1gXG4gICAgICAgICkgfHxcbiAgICAgICAgbnVsbFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFzT3B0aW9uKG5hbWUpIHtcbiAgICAgIC8vIFRoZSBvcHRpb25zIG9mIHRoZSBvdXRlciBjb21wb25lbnQgYXJlIHBhc3NlZCB0byB0aGUgYnV0dG9ucyBjb21wb25lbnRcbiAgICAgIC8vIHRocm91Z2ggcHJvcGVydGllcyBgdGhpc1tuYW1lXWAsIGJ1dCBjYW4gYmUgZGlzYWJsZWQgb24gYSBwZXItZm9ybVxuICAgICAgLy8gYmFzaXMgYnkgc2V0dGluZyBgc2NoZW1hW25hbWVdYCB0byBgZmFsc2VgLlxuICAgICAgcmV0dXJuICEhKHRoaXNbbmFtZV0gJiYgdGhpcy5zY2hlbWFbbmFtZV0gIT09IGZhbHNlKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLWVkaXQtYnV0dG9ucyB7XG4gIC8vIE92ZXJyaWRlIGN1cnNvciBmcm9tIGNvbGxhcHNpYmxlIGRpdG8tbGFiZWw6XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgZmxleDogbm9uZTtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY3JlYXRlLWJ1dHRvblxuICB0ZW1wbGF0ZShcbiAgICB2LWlmPVwic2hvd1B1bGxkb3duXCJcbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gICAgKSB7eyB0ZXh0IH19XG4gICAgdWwuZGl0by1wdWxsZG93big6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIilcbiAgICAgIGxpKFxuICAgICAgICB2LWZvcj1cIihmb3JtLCB0eXBlKSBpbiBmb3Jtc1wiXG4gICAgICApXG4gICAgICAgIGEoXG4gICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYShmb3JtKVwiXG4gICAgICAgICAgdi1zaG93PVwic2hvdWxkU2hvdyhmb3JtKVwiXG4gICAgICAgICAgOmNsYXNzPVwiZ2V0Rm9ybUNsYXNzKGZvcm0sIHR5cGUpXCJcbiAgICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKHR5cGUpXCJcbiAgICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHR5cGUpXCJcbiAgICAgICAgKSB7eyBnZXRMYWJlbChmb3JtKSB9fVxuICBidXR0b24uZGl0by1idXR0b24oXG4gICAgdi1lbHNlXG4gICAgOnR5cGU9XCJpc0lubGluZWQgPyAnYnV0dG9uJyA6ICdzdWJtaXQnXCJcbiAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICBAY2xpY2s9XCJjcmVhdGVJdGVtKGZvcm1zLmRlZmF1bHQpXCJcbiAgKSB7eyB0ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0Rm9ybVNjaGVtYXMsIGlzSW5saW5lZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQ3JlYXRlQnV0dG9uJywge1xuICBtaXhpbnM6IFtQdWxsZG93bk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdmVyYjogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGV4dDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9ybXMoKSB7XG4gICAgICByZXR1cm4gZ2V0Rm9ybVNjaGVtYXModGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dClcbiAgICB9LFxuXG4gICAgaXNJbmxpbmVkKCkge1xuICAgICAgcmV0dXJuIGlzSW5saW5lZCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgc2hvd1B1bGxkb3duKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZm9ybXMpLmxlbmd0aCA+IDEgfHwgIXRoaXMuZm9ybXMuZGVmYXVsdFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgY3JlYXRlSXRlbShmb3JtLCB0eXBlID0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMuc2hvdWxkUmVuZGVyU2NoZW1hKGZvcm0pICYmICF0aGlzLnNob3VsZERpc2FibGUoZm9ybSkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbmxpbmVkKSB7XG4gICAgICAgICAgdGhpcy5zb3VyY2VDb21wb25lbnQuY3JlYXRlSXRlbShmb3JtLCB0eXBlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgICAgIHBhdGg6IGAke3RoaXMucGF0aH0vY3JlYXRlYCxcbiAgICAgICAgICAgIHF1ZXJ5OiB7IHR5cGUgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGFsbG93ZWQgdG8gY3JlYXRlIGl0ZW0gZm9yIGdpdmVuIGZvcm0nKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRGb3JtQ2xhc3MoZm9ybSwgdHlwZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2BkaXRvLXR5cGUtJHt0eXBlfWBdOiB0cnVlLFxuICAgICAgICAnZGl0by1kaXNhYmxlZCc6IHRoaXMuc2hvdWxkRGlzYWJsZShmb3JtKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KHR5cGUpIHtcbiAgICAgIHRoaXMuY3JlYXRlSXRlbSh0aGlzLmZvcm1zW3R5cGVdLCB0eXBlKVxuICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tY3JlYXRlLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAuZGl0by1wdWxsZG93biB7XG4gICAgcmlnaHQ6IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY2xpcGJvYXJkLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQoXG4gIHYtaWY9XCJjbGlwYm9hcmRcIlxuKVxuICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tY29weShcbiAgICByZWY9XCJjb3B5RGF0YVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdGl0bGU9XCJDb3B5IERhdGFcIlxuICAgIDpkaXNhYmxlZD1cIiFjb3B5RW5hYmxlZFwiXG4gICAgQGNsaWNrPVwib25Db3B5XCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tcGFzdGUoXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdGl0bGU9XCJQYXN0ZSBEYXRhXCJcbiAgICA6ZGlzYWJsZWQ9XCIhcGFzdGVFbmFibGVkXCJcbiAgICBAY2xpY2s9XCJvblBhc3RlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzT2JqZWN0LCBjbG9uZSwgZGVpbmRlbnQgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0NsaXBib2FyZCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgY2xpcGJvYXJkOiB7IHR5cGU6IFtCb29sZWFuLCBPYmplY3RdLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29weUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgcGFzdGVFbmFibGVkOiBmYWxzZSxcbiAgICAgIGZpeENsaXBib2FyZDogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsaXBib2FyZE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3QodGhpcy5jbGlwYm9hcmQpID8gdGhpcy5jbGlwYm9hcmQgOiB7fVxuICAgIH0sXG5cbiAgICBjb3B5RGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgY29weSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gY29weVxuICAgICAgICA/IGNsaXBib2FyZERhdGEgPT5cbiAgICAgICAgICAgIGNvcHkuY2FsbChcbiAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgICAgICBjbGlwYm9hcmREYXRhXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgIDogY2xpcGJvYXJkRGF0YSA9PiBjbG9uZShjbGlwYm9hcmREYXRhKVxuICAgIH0sXG5cbiAgICBwYXN0ZURhdGEoKSB7XG4gICAgICBjb25zdCB7IHBhc3RlIH0gPSB0aGlzLmNsaXBib2FyZE9wdGlvbnNcbiAgICAgIHJldHVybiBwYXN0ZVxuICAgICAgICA/IGNsaXBib2FyZERhdGEgPT5cbiAgICAgICAgICAgIHBhc3RlLmNhbGwoXG4gICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICAgICAgY2xpcGJvYXJkRGF0YVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xpcGJvYXJkRGF0YVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIC8vIENoZWNrIGNsaXBib2FyZCBjb250ZW50IHdoZW5ldmVyIHNvbWV0aGluZyBnZXRzIGNvcGllZCBvciB0aGUgd2luZG93IGdldHNcbiAgICAvLyAocmUpYWN0aXZhdGVkLCBhcyB0aG9zZSBhcmUgdGhlIG1vbWVudHMgd2hlbiB0aGUgY2xpcGJvYXJkIGNhbiBjaGFuZ2U6XG4gICAgdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgY29weTogdGhpcy5jaGVja0NsaXBib2FyZFxuICAgIH0pXG4gICAgdGhpcy5kb21Pbih3aW5kb3csIHtcbiAgICAgIGZvY3VzOiB0aGlzLmNoZWNrQ2xpcGJvYXJkXG4gICAgfSlcbiAgICB0aGlzLiR3YXRjaCgnZGF0YScsIHtcbiAgICAgIC8vIENoZWNrIHJpZ2h0IGF3YXkgYWxzbyBpbiBjYXNlIHRoZXJlJ3MgYWxyZWFkeSBkYXRhIChlLmcuIGNyZWF0ZSBmb3JtKS5cbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6ICh0bywgZnJvbSkgPT4ge1xuICAgICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgICB0aGlzLmNoZWNrQ2xpcGJvYXJkKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGFzeW5jIGdldENsaXBib2FyZERhdGEocmVwb3J0KSB7XG4gICAgICAvLyBVc2UgdGhlIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgIGxldCB7IGNsaXBib2FyZERhdGEgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy5yZWFkVGV4dD8uKClcbiAgICAgICAgaWYgKHRoaXMuZml4Q2xpcGJvYXJkICYmIGpzb24pIHtcbiAgICAgICAgICAvLyBUaGlzIGFwcGVhcnMgdG8gYmUgbmVlZGVkIG9uIFNhZmFyaSB0byBwcmV2ZW50IGEgc3RyYW5nZSBcIlBhc3RlXCJcbiAgICAgICAgICAvLyBidXR0b24gZnJvbSBhcHBlYXJpbmcgd2hlbiB0aGUgY2xpcGJvYXJkIGlzIGFjY2Vzc2VkICh3aHk/ISkuXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICB0aGlzLmZpeENsaXBib2FyZCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb24pIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhID0gSlNPTi5wYXJzZShqc29uKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHJlcG9ydCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgICAgaWYgKGVyci5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICBhbGVydChkZWluZGVudGBcbiAgICAgICAgICAgICAgVGhlIGRhdGEgaW4gdGhlIGNsaXBib2FyZCBhcHBlYXJzIHRvIGJlIG1hbGZvcm1lZDpcbiAgICAgICAgICAgICAgJHtlcnIubWVzc2FnZX1cbiAgICAgICAgICAgIGApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB7ICRzY2hlbWEsIC4uLmRhdGEgfSA9IGNsaXBib2FyZERhdGEgfHwge31cbiAgICAgIHJldHVybiAkc2NoZW1hID09PSB0aGlzLnNjaGVtYUNvbXBvbmVudD8uc2NoZW1hLm5hbWUgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBhc3luYyBjaGVja0NsaXBib2FyZCgpIHtcbiAgICAgIHRoaXMuY29weUVuYWJsZWQgPSAhIXRoaXMuZGF0YVxuICAgICAgLy8gU2VlIGlmIHRoZSBjbGlwYm9hcmQgY29udGVudCBpcyB2YWxpZCBKU09OIGRhdGEgdGhhdCBpcyBjb21wYXRpYmxlXG4gICAgICAvLyB3aXRoIHRoZSBjdXJyZW50IHRhcmdldCBzY2hlbWEsIGFuZCBvbmx5IHRoZW4gYWN0aXZhdGUgdGhlIHBhc3Rpbmc6XG4gICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9ICEhKGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YShmYWxzZSkpIC8vIGRvbid0IHJlcG9ydFxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNvcHkoKSB7XG4gICAgICBsZXQgZGF0YSA9IHRoaXMuc2NoZW1hQ29tcG9uZW50Py5jbGlwYm9hcmREYXRhXG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gZGF0YSAmJiB0aGlzLmNvcHlEYXRhKGRhdGEpXG4gICAgICAgIC8vIEtlZXAgYW4gaW50ZXJuYWwgY2xpcGJvYXJkIGFzIGZhbGxiYWNrLlxuICAgICAgICB0aGlzLmFwcFN0YXRlLmNsaXBib2FyZERhdGEgPSBkYXRhXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGFjdGl2YXRlIHRoZSBwYXN0ZSBidXR0b24sIGRlcGVuZGluZyBvbiBicm93c2VyczpcbiAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrQ2xpcGJvYXJkKClcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyci5uYW1lLCBlcnIubWVzc2FnZSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgYWxlcnQoZXJyb3IubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25QYXN0ZSgpIHtcbiAgICAgIGxldCBkYXRhID0gYXdhaXQgdGhpcy5nZXRDbGlwYm9hcmREYXRhKHRydWUpIC8vIHJlcG9ydFxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGRhdGEgJiYgdGhpcy5wYXN0ZURhdGEoZGF0YSlcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5zZXREYXRhKGRhdGEpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGFsZXJ0KGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCIvLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZywgeyB1cGRhdGVSb290ID0gZmFsc2UsIHVwZGF0ZVZpZXcgPSBmYWxzZSB9ID0ge30pIHtcbiAgICAgIGlmICghdGhpcy5pc0xvYWRpbmcgXiAhaXNMb2FkaW5nKSB7XG4gICAgICAgIC8vIEJvb2xlYW4geG9yXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gISFpc0xvYWRpbmdcbiAgICAgICAgaWYgKHVwZGF0ZVJvb3QpIHtcbiAgICAgICAgICB0aGlzLnJvb3RDb21wb25lbnQucmVnaXN0ZXJMb2FkaW5nKGlzTG9hZGluZylcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlVmlldykge1xuICAgICAgICAgIHRoaXMudmlld0NvbXBvbmVudC5zZXRMb2FkaW5nKHRoaXMuaXNMb2FkaW5nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgSXRlbU1peGluIGZyb20gJy4vSXRlbU1peGluLmpzJ1xuaW1wb3J0IExvYWRpbmdNaXhpbiBmcm9tICcuL0xvYWRpbmdNaXhpbi5qcydcbmltcG9ydCB7IHNldERlZmF1bHRWYWx1ZXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0l0ZW1NaXhpbiwgTG9hZGluZ01peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAvLyBQYXNzIGxvY2FsIHZlcmJzIG92ZXJyaWRlcyBvbiB0byBjaGlsZHJlbiwgc2VlIHZlcmJzKCkgY29tcHV0ZWQgcHJvcC5cbiAgICAgICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyxcbiAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdGhpcy5oYXNEYXRhXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYWRlZERhdGE6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgLy8gUmV0dXJucyB0aGUgcmVzb3VyY2Ugb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVzb3VyY2UgZm9yIHRoZVxuICAgICAgLy8gYXNzb2NpYXRlZCBzb3VyY2Ugc2NoZW1hLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICAvLyBUaGlzIGNvbXBvbmVudCBpcyBhIGRhdGEtc291cmNlIGlmIGl0IGhhcyBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZTpcbiAgICAgIHJldHVybiAhIXRoaXMucmVzb3VyY2VcbiAgICB9LFxuXG4gICAgbGlua3NUb1ZpZXcoKSB7XG4gICAgICAvLyBSZXR1cm5zIGBmYWxzZWBoZXJlLCBidXQgaXMgb3ZlcnJpZGRlbiB0byByZXR1cm4gYHRydWVgIGluXG4gICAgICAvLyBgU291cmNlTWl4aW5gIGZvciBjb21wb25lbnQgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGVpciBvd24gZGF0YSwgYnV0XG4gICAgICAvLyBlZGl0IHRoZWlyIGl0ZW1zIHRocm91Z2ggYSBsaW5rZWQgdmlldy4gIEluIHRoaXMgY2FzZSwgcmVhbCBpZHMgbmVlZCB0b1xuICAgICAgLy8gYmUgdXNlZC5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIC8vIENoZWNrIHRoZSBmb3JtIHRoYXQgdGhpcyBjb21wb25lbnQgYmVsb25ncyB0byBhcyB3ZWxsLCBzaW5jZSBpdCBtYXkgYmVcbiAgICAgIC8vIGluIGNyZWF0aW9uIG1vZGUsIHdoaWNoIG1ha2VzIGl0IHRyYW5zaWVudC5cbiAgICAgIC8vIE5PVEU6IFRoaXMgZG9lcyBub3QgbG9vcCBlbmRsZXNzbHkgYmVjYXVzZSBEaXRvRm9ybSByZWRlZmluZXNcbiAgICAgIC8vIGBpc1RyYW5zaWVudCgpYCB0byBvbmx5IHJldHVybiBgIXRoaXMucHJvdmlkZXNEYXRhYC5cbiAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1Db21wb25lbnRcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLnByb3ZpZGVzRGF0YSAmJlxuICAgICAgICAhdGhpcy5saW5rc1RvVmlldyB8fFxuICAgICAgICBmb3JtICYmIChcbiAgICAgICAgICBmb3JtLmlzVHJhbnNpZW50IHx8XG4gICAgICAgICAgZm9ybS5pc0NyZWF0aW5nXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdHJhbnNpZW50Tm90ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiYgKFxuICAgICAgICAgICc8Yj5Ob3RlPC9iPjogdGhlIHBhcmVudCBzdGlsbCBuZWVkcyB0byBiZSBzYXZlZCAnICtcbiAgICAgICAgICAnaW4gb3JkZXIgdG8gcGVyc2lzdCB0aGlzIGNoYW5nZS4nXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgc2hvdWxkTG9hZCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgICF0aGlzLmlzTG9hZGluZ1xuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBoYXNEYXRhKCkge1xuICAgICAgLy8gQmFzZSBkZWZpbml0aW9uLCB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluXG4gICAgICByZXR1cm4gISF0aGlzLmxvYWRlZERhdGFcbiAgICB9LFxuXG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBUaGUgYWN0dWFsIGNvZGUgaXMgdGhlIGBnZXRWZXJicygpYCBtZXRob2QsIGZvciBlYXNpZXIgb3ZlcnJpZGluZyBvZlxuICAgICAgLy8gdGhpcyBjb21wdXRlZCBwcm9wZXJ0eSBpbiBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSBSZXNvdXJjZU1peGluLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VmVyYnMoKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0aW9uUmFuZ2UoKSB7XG4gICAgICAvLyBPbmx5IGFwcGx5IHBhZ2luYXRpb24gdG8gbGlzdHMuXG4gICAgICBjb25zdCB7IHBhZ2luYXRlOiBhbW91bnQgfSA9IHRoaXMuc291cmNlU2NoZW1hXG4gICAgICBpZiAodGhpcy5pc0xpc3RTb3VyY2UgJiYgYW1vdW50KSB7XG4gICAgICAgIGNvbnN0IHsgcGFnZSA9IDAgfSA9IHRoaXMucXVlcnkgfHwge31cbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwYWdlICogYW1vdW50XG4gICAgICAgIHJldHVybiBbc3RhcnQsIHN0YXJ0ICsgYW1vdW50IC0gMV1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIHF1ZXJ5UGFyYW1zKCkge1xuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnBhZ2luYXRpb25SYW5nZVxuICAgICAgY29uc3QgeyBwYWdlLCAuLi5xdWVyeSB9ID0gdGhpcy5xdWVyeSB8fCB7fVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucXVlcnksIC8vIFF1ZXJ5IG1heSBvdmVycmlkZSBzY29wZS5cbiAgICAgICAgLi4uKHJhbmdlICYmIHtcbiAgICAgICAgICAvLyBQYXNzIHBhZ2luYXRpb24gYXMgcmFuZ2UsIHNvIHRoYXQgd2UgYXV0b21hdGljYWxseSBnZXQgT2JqZWN0aW9uJ3NcbiAgICAgICAgICAvLyByZXN1bHRzIGNvdW50aW5nOlxuICAgICAgICAgIHJhbmdlOiByYW5nZS5qb2luKCcsJylcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICAvLyBXaGVuIGNyZWF0aW5nIG5lc3RlZCBkYXRhLCB3ZSBzdGlsbCBuZWVkIHRvIGNhbGwgc2V0dXBEYXRhKClcbiAgICBpZiAodGhpcy5wcm92aWRlc0RhdGEgfHwgdGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICB0aGlzLnNldHVwRGF0YSgpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRSZXNvdXJjZSgpIHtcbiAgICAgIC8vIFRoaXMgaXMgZGVmaW5lZCBhcyBhIG1ldGhvZCBzbyB0aGUgY29tcHV0ZWQgYHJlc291cmNlYCBnZXR0ZXIgY2FuXG4gICAgICAvLyBiZSBvdmVycmlkZGVuIGFuZCBgc3VwZXJgIGZ1bmN0aW9uYWxpdHkgY2FuIHN0aWxsIGJlIGFjY2Vzc2VkLlxuICAgICAgcmV0dXJuIGdldFJlc291cmNlKHRoaXMuc291cmNlU2NoZW1hPy5yZXNvdXJjZSwge1xuICAgICAgICB0eXBlOiAnY29sbGVjdGlvbicsXG4gICAgICAgIHBhcmVudDogdGhpcy5wYXJlbnRGb3JtQ29tcG9uZW50Py5yZXNvdXJjZSA/PyBudWxsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRWZXJicygpIHtcbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy4kdmVyYnMoKVxuICAgICAgcmV0dXJuIHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgICAgIC8vIE92ZXJyaWRlIGRlZmF1bHQgdmVyYnMgd2l0aCB0aGVpciB0cmFuc2llbnQgdmVyc2lvbnM6XG4gICAgICAgICAgICBjcmVhdGU6ICdhZGQnLFxuICAgICAgICAgICAgY3JlYXRlZDogJ2FkZGVkJyxcbiAgICAgICAgICAgIHNhdmU6ICdhcHBseScsXG4gICAgICAgICAgICBzYXZlZDogJ2FwcGxpZWQnLFxuICAgICAgICAgICAgZGVsZXRlOiAncmVtb3ZlJyxcbiAgICAgICAgICAgIGRlbGV0ZWQ6ICdyZW1vdmVkJ1xuICAgICAgICAgIH1cbiAgICAgICAgOiB2ZXJic1xuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5sb2FkZWREYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICAvLyBBY3R1YWwgY29kZSBpcyBpbiBzZXBhcmF0ZSBmdW5jdGlvbiBzbyBpdCdzIGVhc2VyIHRvIG92ZXJyaWRlXG4gICAgICAvLyBgc2V0dXBEYXRhKClgIGFuZCBhbmQgY2FsbCBgZW5zdXJlRGF0YSgpYCBmcm9tIHRoZSBvdmVycmlkZXMsXG4gICAgICAvLyBzZWUgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluLlxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgZW5zdXJlRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZExvYWQpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRGF0YSkge1xuICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2FkRGF0YSh0cnVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbG9hZERhdGEoKSB7XG4gICAgICB0aGlzLmxvYWREYXRhKGZhbHNlKVxuICAgIH0sXG5cbiAgICBsb2FkRGF0YShjbGVhcikge1xuICAgICAgaWYgKCF0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIGlmIChjbGVhcikge1xuICAgICAgICAgIHRoaXMuY2xlYXJEYXRhKClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlcXVlc3REYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIHJldHVybiBzZXREZWZhdWx0VmFsdWVzKHNjaGVtYSwgdHlwZSA/IHsgdHlwZSB9IDoge30sIHRoaXMpXG4gICAgfSxcblxuICAgIHJlcXVlc3REYXRhKCkge1xuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLnF1ZXJ5UGFyYW1zXG4gICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoeyBtZXRob2Q6ICdnZXQnLCBxdWVyeSB9LCAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGRhdGE/LnR5cGUgPT09ICdGaWx0ZXJWYWxpZGF0aW9uJyAmJlxuICAgICAgICAgICAgICB0aGlzLm9uRmlsdGVyRXJyb3JzPy4oZGF0YS5lcnJvcnMpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1VuYXV0aG9yaXplZEVycm9yKHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICAvLyBUT0RPOiBDYW4gd2UgcmVhbGx5IHN3YWxsb3cgdGhlc2UgZXJyb3JzP1xuICAgICAgICAgICAgICAvLyBJcyBjYWxsaW5nIGBlbnN1cmVVc2VyKClgIGluIGBvbkJlZm9yZVJlcXVlc3QoKWAgZW5vdWdoP1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldERhdGEocmVzcG9uc2UuZGF0YSlcbiAgICAgICAgICB0aGlzLmVtaXRTY2hlbWFFdmVudCgnbG9hZCcpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGlvbkVycm9yKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAwXG4gICAgfSxcblxuICAgIGlzVW5hdXRob3JpemVkRXJyb3IocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzID09PSA0MDFcbiAgICB9LFxuXG4gICAgYXN5bmMgaGFuZGxlUmVxdWVzdChcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBkYXRhXG4gICAgICB9LFxuICAgICAgY2FsbGJhY2tcbiAgICApIHtcbiAgICAgIGNvbnN0IGxvYWRpbmdPcHRpb25zID0ge1xuICAgICAgICB1cGRhdGVSb290OiB0cnVlLCAvLyBEaXNwbGF5IHNwaW5uZXIgaW4gaGVhZGVyIHdoZW4gbG9hZGluZyBpbiByZXNvdXJjZXNcbiAgICAgICAgdXBkYXRlVmlldzogdGhpcy5pc0luVmlldyAvLyBOb3RpZnkgdmlldyBvZiBsb2FkaW5nIGZvciB2aWV3IGNvbXBvbmVudHNcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEsIHF1ZXJ5IH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAvLyBQYXNzIGJvdGggcmVxdWVzdCBhbmQgcmVzcG9uc2UgdG8gdGhlIGNhbGxiYWNrLCBzbyB0aGV5IGNhbiBiZVxuICAgICAgICAvLyBleHBvc2VkIHRvIGZ1cnRoZXIgY2FsbGJhY2tzIHRocm91Z2ggRGl0b0NvbnRleHQuXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgY2FsbGJhY2sgcmV0dXJucyB0cnVlLCBlcnJvcnMgd2VyZSBhbHJlYWR5IGhhbmRsZWQuXG4gICAgICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IGVycm9yXG4gICAgICAgIGlmICghY2FsbGJhY2soZXJyb3IsIHJlc3BvbnNlKSkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZT8uZGF0YVxuICAgICAgICAgIGNvbnN0IHRpdGxlID0gaXNTdHJpbmcoZGF0YT8udHlwZSlcbiAgICAgICAgICAgID8gbGFiZWxpemUoZGF0YS50eXBlKVxuICAgICAgICAgICAgOiAnRXJyb3InXG4gICAgICAgICAgY29uc3QgdGV4dCA9IGRhdGE/Lm1lc3NhZ2UgPz8gZXJyb3JcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7IHR5cGU6ICdlcnJvcicsIHRpdGxlLCB0ZXh0IH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgfSxcblxuICAgIGdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKSB7XG4gICAgICAvLyBDb252ZW50aW9uOiBvbmx5IHBvc3QsIHB1dCBhbmQgcGF0Y2ggcmVxdWVzdHMgcGFzcyB0aGUgZGF0YSBhcyBwYXlsb2FkLlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluY2x1ZGVzKG1ldGhvZCkgJiYgKFxuICAgICAgICAgIC8vIFRPRE86IFVzZSBgaGFuZGxlRGF0YVNjaGVtYSgpYCBhc3luY2hyb25vdXNseSBoZXJlIGluc3RlYWQsIHRvXG4gICAgICAgICAgLy8gb2ZmZXIgdGhlIHNhbWUgYW1vdW50IG9mIHBvc3NpYmlsaXRpZXMgZm9yIGRhdGEgbG9hZGluZy5cbiAgICAgICAgICBidXR0b24uZ2V0U2NoZW1hVmFsdWUoWydyZXNvdXJjZScsICdkYXRhJ10pIHx8XG4gICAgICAgICAgYnV0dG9uLnByb2Nlc3NlZEl0ZW1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IGdldFJlc291cmNlKGJ1dHRvbi5zY2hlbWEucmVzb3VyY2UsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLnJlc291cmNlXG4gICAgICB9KVxuICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IHsgbWV0aG9kIH0gPSByZXNvdXJjZVxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgc2V0RGF0YSA9IGZhbHNlLFxuICAgICAgb25TdWNjZXNzLFxuICAgICAgb25FcnJvcixcbiAgICAgIG5vdGlmeVN1Y2Nlc3MgPSAoKSA9PlxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBTdWNjZXNzZnVsJyxcbiAgICAgICAgICB0ZXh0OiAnUmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5IHNlbnQuJ1xuICAgICAgICB9KSxcbiAgICAgIG5vdGlmeUVycm9yID0gZXJyb3IgPT5cbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICBgVW5hYmxlIHRvIHNlbmQgcmVxdWVzdCR7ZXJyb3IgPyAnOicgOiAnJ31gLFxuICAgICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdChcbiAgICAgICAgICB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEgfSxcbiAgICAgICAgICBhc3luYyAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBEaXRvIHZhbGlkYXRpb24gZXJyb3I6XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpICYmIGRhdGEuZXJyb3JzXG4gICAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGlzT2JqZWN0KGRhdGEpID8gZGF0YSA6IGVyclxuICAgICAgICAgICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdlcnJvcicsIHtcbiAgICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdW5kZXJseWluZyBkYXRhIGJlZm9yZSBjYWxsaW5nIGBub3RpZnkoKWAgb3JcbiAgICAgICAgICAgICAgLy8gYHRoaXMuaXRlbUxhYmVsYCwgc28gaWQgaXMgc2V0IGFmdGVyIGNyZWF0aW5nIG5ldyBpdGVtcy5cbiAgICAgICAgICAgICAgaWYgKHNldERhdGEgJiYgZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YShkYXRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgZXZlbnQsIHsgbm90aWZ5LCBlcnJvciB9KSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIGNvbnRleHQgb3V0c2lkZSBvZiBgZW1pdEV2ZW50KClgLCBzbyB0aGF0XG4gICAgICAvLyBgY29udGV4dC53YXNOb3RpZmllZGAgY2FuIGJlIGNoZWNrZWQgYWZ0ZXIuXG4gICAgICBjb25zdCBjb250ZXh0ID0gbmV3IERpdG9Db250ZXh0KGJ1dHRvbiwge1xuICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgIGl0ZW1MYWJlbDogdGhpcy5pdGVtTGFiZWwsXG4gICAgICAgIGVycm9yXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYnV0dG9uLmVtaXRFdmVudChldmVudCwgeyBjb250ZXh0IH0pXG4gICAgICBpZiAoXG4gICAgICAgIG5vdGlmeSAmJlxuICAgICAgICAvLyBQcmV2ZW50IGRlZmF1bHQgaWYgYW55dGhpbmcgd2FzIHJldHVybmVkIGZyb20gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIC8vIERvIG5vdCBkaXNwbGF5IGRlZmF1bHQgbm90aWZpY2F0aW9uIGlmIHRoZSBldmVudCBoYW5kbGVyIGFscmVhZHlcbiAgICAgICAgLy8gZGlzcGxheWVkIGEgbm90aWZpY2F0aW9uLlxuICAgICAgICAhY29udGV4dC53YXNOb3RpZmllZFxuICAgICAgKSB7XG4gICAgICAgIG5vdGlmeShlcnJvcilcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGF0aChwYXRoKSB7XG4gIC8vIEZvciBwYXRocyBzdGFyaW5nIHdpdGggYC9gLCB3ZSBjYW4gdXNlIHRoZSBuYXRpdmUgYFVSTCgpYCBjbGFzcyB0byByZXNvbHZlXG4gIC8vIHRoZSBwYXRoLCB3aGljaCB3aWxsIGFsc28gaGFuZGxlIGAuLmAgYW5kIGAuYCBzZWdtZW50czpcbiAgcmV0dXJuIG5ldyBVUkwoYGZpbGU6JHtwYXRofWApLnBhdGhuYW1lXG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tZm9ybS1uZXN0ZWQnOiBpc05lc3RlZFJvdXRlIH1cIlxuICA6ZGF0YS1yZXNvdXJjZT1cInNvdXJjZVNjaGVtYS5wYXRoXCJcbilcbiAgLy8tIE5PVEU6IE5lc3RlZCBmb3JtIGNvbXBvbmVudHMgYXJlIGtlcHQgYWxpdmUgYnkgdXNpbmcgYHYtc2hvd2AgaW5zdGVhZCBvZlxuICAvLy0gYHYtaWZgIGhlcmUsIHNvIGV2ZW50IGhhbmRsaW5nIGFuZCBvdGhlciB0aGluZ3Mgc3RpbGwgd29yayB3aXRoIG5lc3RlZFxuICAvLy0gZWRpdGluZy4gT25seSByZW5kZXIgYSByb3V0ZXItdmlldyBoZXJlIGlmIHRoaXMgaXNuJ3QgdGhlIGxhc3QgZGF0YSByb3V0ZVxuICAvLy0gYW5kIG5vdCBhIG5lc3RlZCBmb3JtIHJvdXRlLCB3aGljaCB3aWxsIGFwcGVhciBlbHNld2hlcmUgaW4gaXRzIG93biB2aWV3LlxuICBSb3V0ZXJWaWV3KFxuICAgIHYtaWY9XCIhKGlzTGFzdFVubmVzdGVkUm91dGUgfHwgaXNOZXN0ZWRSb3V0ZSlcIlxuICAgIHYtc2hvdz1cIiFpc0FjdGl2ZVwiXG4gIClcbiAgLy8tIFVzZSBhIDxkaXY+IGZvciBpbmxpbmVkIGZvcm1zLCBhcyB3ZSBzaG91bGRuJ3QgbmVzdCBhY3R1YWwgPGZvcm0+IHRhZ3MuXG4gIGNvbXBvbmVudC5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gICAgdi1zaG93PVwiaXNBY3RpdmVcIlxuICAgIDppcz1cImlzTmVzdGVkUm91dGUgPyAnZGl2JyA6ICdmb3JtJ1wiXG4gICAgQHN1Ym1pdC5wcmV2ZW50XG4gIClcbiAgICBEaXRvU2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICBzY3JvbGxhYmxlXG4gICAgICBoZWFkZXJJbk1lbnVcbiAgICAgIGdlbmVyYXRlTGFiZWxzXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI2J1dHRvbnMpXG4gICAgICAgIERpdG9CdXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZC5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgICApXG4gICAgLy8tIFByZXZlbnQgaW1wbGljaXQgc3VibWlzc2lvbiBvZiB0aGUgZm9ybSwgZm9yIGV4YW1wbGUgd2hlbiB0eXBpbmcgZW50ZXJcbiAgICAvLy0gaW4gYW4gaW5wdXQgZmllbGQuXG4gICAgLy8tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTUwNzgwNlxuICAgIGJ1dHRvbihcbiAgICAgIHYtc2hvdz1cImZhbHNlXCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgZGlzYWJsZWRcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY2xvbmUsIGNhcGl0YWxpemUsIHBhcnNlRGF0YVBhdGgsIG1lcmdlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUm91dGVNaXhpbiBmcm9tICcuLi9taXhpbnMvUm91dGVNaXhpbi5qcydcbmltcG9ydCBSZXNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9SZXNvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzLCBpc09iamVjdFNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHJlc29sdmVQYXRoIH0gZnJvbSAnLi4vdXRpbHMvcGF0aC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRm9ybScsIHtcbiAgbWl4aW5zOiBbUm91dGVNaXhpbiwgUmVzb3VyY2VNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3JlYXRlZERhdGE6IG51bGwsXG4gICAgICBjbG9uZWREYXRhOiB1bmRlZmluZWQsXG4gICAgICBzb3VyY2VLZXk6IG51bGwsXG4gICAgICBpc0Zvcm06IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2ZXJicygpIHtcbiAgICAgIC8vIEFkZCBzdWJtaXQgLyBzdWJtaXR0ZWQgdG8gdGhlIHZlcmJzIHJldHVybmVkIGJ5IFJlc291cmNlTWl4aW5cbiAgICAgIC8vIE5PVEU6IFRoZXNlIGdldCBwYXNzZWQgb24gdG8gY2hpbGRyZW4gdGhyb3VnaDpcbiAgICAgIC8vIGBwcm92aWRlKCkgLi4uIHsgJHZlcmJzOiAoKSA9PiB0aGlzLnZlcmJzIH1gIGluIFJlc291cmNlTWl4aW5cbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy5nZXRWZXJicygpXG4gICAgICBjb25zdCB7IGlzQ3JlYXRpbmcsIHByb3ZpZGVzRGF0YSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udmVyYnMsXG4gICAgICAgIHN1Ym1pdDogaXNDcmVhdGluZyA/IHZlcmJzLmNyZWF0ZSA6IHZlcmJzLnNhdmUsXG4gICAgICAgIHN1Ym1pdHRlZDogaXNDcmVhdGluZyA/IHZlcmJzLmNyZWF0ZWQgOiB2ZXJicy5zYXZlZCxcbiAgICAgICAgY2FuY2VsOiBwcm92aWRlc0RhdGEgPyB2ZXJicy5jYW5jZWwgOiB2ZXJicy5jbG9zZSxcbiAgICAgICAgY2FuY2VsbGVkOiBwcm92aWRlc0RhdGEgPyB2ZXJicy5jYW5jZWxsZWQgOiB2ZXJicy5jbG9zZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5nZXRJdGVtRm9ybVNjaGVtYShcbiAgICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBkYXRhIHlldCwgcHJvdmlkZSBhbiBlbXB0eSBvYmplY3Qgd2l0aCBqdXN0IHRoZVxuICAgICAgICAgIC8vIHJpZ2h0IHR5cGUgc2V0LCBzbyB0aGUgZm9ybSBjYW4gYWx3YXlzIGJlIGRldGVybWluZWQuXG4gICAgICAgICAgdGhpcy5kYXRhIHx8IHsgdHlwZTogdGhpcy50eXBlIH0sXG4gICAgICAgICAgdGhpcy5jb250ZXh0XG4gICAgICAgICkgfHwge31cbiAgICAgICkgLy8gQWx3YXlzIHJldHVybiBhIHNjaGVtYSBvYmplY3Qgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgaXQuXG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyhcbiAgICAgICAgbWVyZ2UoXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2FuY2VsOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5jYW5jZWwoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzdWJtaXQ6ICF0aGlzLmlzTXV0YXRpbmcgJiYge1xuICAgICAgICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgICAgICAgLy8gU3VibWl0IGJ1dHRvbnMgY2xvc2UgdGhlIGZvcm0gYnkgZGVmYXVsdDpcbiAgICAgICAgICAgICAgY2xvc2VGb3JtOiB0cnVlLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKHsgY29tcG9uZW50OiBidXR0b24gfSkgPT4gYnV0dG9uLnN1Ym1pdCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMuc2NoZW1hLmJ1dHRvbnNcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGFzdFJvdXRlIHx8IHRoaXMuaXNMYXN0VW5uZXN0ZWRSb3V0ZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5wcm92aWRlc0RhdGFcbiAgICB9LFxuXG4gICAgaXNDcmVhdGluZygpIHtcbiAgICAgIC8vIHRoaXMucGFyYW0gaXMgaW5oZXJpdGVkIGZyb20gUm91dGVNaXhpblxuICAgICAgcmV0dXJuIHRoaXMucGFyYW0gPT09ICdjcmVhdGUnXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNNdXRhdGluZyAmJiAhIXRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uaXNEaXJ0eVxuICAgIH0sXG5cbiAgICBpc011dGF0aW5nKCkge1xuICAgICAgLy8gV2hlbiBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgdGhlIGZvcm0gZWRpdHMgdGhlIGluaGVyaXRlZCBkYXRhXG4gICAgICAvLyBkaXJlY3RseSBpbnN0ZWFkIG9mIG1ha2luZyBhIGNvcHkgZm9yIHBlcnNpc3RlbmNlIHVwb24gc3VibWlzc2lvbi5cbiAgICAgIC8vIFNlZSBgaW5oZXJpdGVkRGF0YSgpYCBjb21wdXRlZCBwcm9wZXJ0eSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuICEhdGhpcy5zb3VyY2VTY2hlbWEubXV0YXRlXG4gICAgfSxcblxuICAgIHNlbGVjdGVkVGFiKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uc2VsZWN0ZWRUYWIgfHwgbnVsbFxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgLy8gVGhlIHR5cGUgb2YgZm9ybSB0byBjcmVhdGUsIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5xdWVyeS50eXBlXG4gICAgfSxcblxuICAgIGl0ZW1JZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogdGhpcy5wYXJhbSA/PyBudWxsXG4gICAgfSxcblxuICAgIG1ldGhvZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmcgPyAncG9zdCcgOiAncGF0Y2gnXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLmdldFJlc291cmNlKClcbiAgICAgIHJldHVybiBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLml0ZW1JZCwgcmVzb3VyY2UpIHx8IHJlc291cmNlXG4gICAgfSxcblxuICAgIGJyZWFkY3J1bWJQcmVmaXgoKSB7XG4gICAgICByZXR1cm4gY2FwaXRhbGl6ZSh0aGlzLmlzQ3JlYXRpbmcgPyB0aGlzLnZlcmJzLmNyZWF0ZSA6IHRoaXMudmVyYnMuZWRpdClcbiAgICB9LFxuXG4gICAgZGF0YSgpIHtcbiAgICAgIC8vIFJldHVybiBkaWZmZXJlbnQgZGF0YSBcImNvbnRhaW5lcnNcIiBiYXNlZCBvbiBkaWZmZXJlbnQgc2NlbmFyaW9zOlxuICAgICAgLy8gMS4gY3JlYXRlZERhdGEsIGlmIHdlJ3JlIGluIGEgZm9ybSBmb3IgYSBuZXdseSBjcmVhdGVkIG9iamVjdC5cbiAgICAgIC8vIDIuIGxvYWRlZERhdGEsIGlmIHRoZSBmb3JtIGl0c2VsZiBpcyB0aGUgcm9vdCBvZiB0aGUgZGF0YSAoZS5nLiB3aGVuXG4gICAgICAvLyAgICBkaXJlY3RseSBsb2FkaW5nIGFuIGVkaXRpbmcgcm9vdCkuXG4gICAgICAvLyAzLiBUaGUgZGF0YSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50LCB3aGljaCBpdHNlbGYgbWF5IGJlIGVpdGhlciBhXG4gICAgICAvLyAgICB2aWV3IHRoYXQgbG9hZGVkIHRoZSBkYXRhLCBvciBhIGZvcm0gdGhhdCBlaXRoZXIgbG9hZGVkIHRoZSBkYXRhLCBvclxuICAgICAgLy8gICAgYWxzbyBpbmhlcml0ZWQgaXQgZnJvbSBpdHMgcGFyZW50LiBOb3RlIHRoYXQgd2UgdXNlIGEgY2xvbmUgb2YgaXQsXG4gICAgICAvLyAgICBzbywgZGF0YSBjaGFuZ2VzIGFyZW4ndCBhcHBsaWVkIHVudGlsIHNldFNvdXJjZURhdGEoKSBpcyBjYWxsZWQuXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVkRGF0YSB8fCB0aGlzLmxvYWRlZERhdGEgfHwgdGhpcy5pbmhlcml0ZWREYXRhIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXREYXRhUGF0aEZyb20odGhpcy5kYXRhQ29tcG9uZW50KVxuICAgIH0sXG5cbiAgICBzb3VyY2VEYXRhKCkge1xuICAgICAgLy8gUG9zc2libGUgcGFyZW50cyBhcmUgRGl0b0Zvcm0gZm9yIGZvcm1zLCBvciBEaXRvVmlldyBmb3Igcm9vdCBsaXN0cy5cbiAgICAgIC8vIEJvdGggaGF2ZSBhIGRhdGEgcHJvcGVydHkgd2hpY2ggYWJzdHJhY3RzIGF3YXkgbG9hZGluZyBhbmQgaW5oZXJpdGluZ1xuICAgICAgLy8gb2YgZGF0YS5cbiAgICAgIC8vIEZvcm1zIHRoYXQgYXJlIGFib3V0IHRvIGJlIGRlc3Ryb3llZCBkdWUgdG8gbmF2aWdhdGlvbiBsb29zZSB0aGVpclxuICAgICAgLy8gcm91dGUtcmVjb3JkLCBidXQgbWlnaHQgc3RpbGwgdHJpZ2dlciB0aGlzIGdldHRlci4gRmlsdGVyIHRob3NlIG91dC5cbiAgICAgIGxldCBkYXRhID0gdGhpcy5yb3V0ZVJlY29yZCA/IHRoaXMucGFyZW50Um91dGVDb21wb25lbnQuZGF0YSA6IG51bGxcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIC8vIEhhbmRsZSBuZXN0ZWQgZGF0YSBieSBzcGxpdHRpbmcgdGhlIGRhdGFQYXRoLCBpdGVyYXRlIHRocm91Z2ggdGhlXG4gICAgICAgIC8vIGFjdHVhbCBkYXRhIGFuZCBsb29rIG5lc3QgY2hpbGQtZGF0YSB1cC5cbiAgICAgICAgY29uc3QgZGF0YVBhcnRzID0gcGFyc2VEYXRhUGF0aChcbiAgICAgICAgICB0aGlzLmdldERhdGFQYXRoRnJvbSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50KVxuICAgICAgICApXG4gICAgICAgIC8vIENvbXBhcmUgZGF0YVBhcnRzIGFnYWluc3QgbWF0Y2hlZCByb3V0ZVBhdGggcGFydHMsIHRvIGlkZW50aWZ5IHRob3NlXG4gICAgICAgIC8vIHBhcnRzIHRoYXQgbmVlZCB0byBiZSB0cmVhdGVkIGxpa2UgaWRzIGFuZCBtYXBwZWQgdG8gaW5kaWNlcyBpbiBkYXRhLlxuICAgICAgICBjb25zdCBwYXRoUGFydHMgPSB0aGlzLnJvdXRlUmVjb3JkLnBhdGguc3BsaXQoJy8nKVxuICAgICAgICBjb25zdCByb3V0ZVBhcnRzID0gcGF0aFBhcnRzLnNsaWNlKHBhdGhQYXJ0cy5sZW5ndGggLSBkYXRhUGFydHMubGVuZ3RoKVxuICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBudWxsXG4gICAgICAgIGNvbnN0IGxhc3REYXRhUGFydCA9IGRhdGFQYXJ0c1tkYXRhUGFydHMubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKSAmJiBsYXN0RGF0YVBhcnQgPT09ICdjcmVhdGUnKSB7XG4gICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBvYmplY3Qgc291cmNlIGFuZCBhcmUgY3JlYXRpbmcsIHRoZSBkYXRhUGF0aCBuZWVkcyB0b1xuICAgICAgICAgIC8vIGJlIHNob3J0ZW5lZCBieSB0aGUgJ2NyZWF0ZScgZW50cnkuIFRoaXMgaXNuJ3QgbmVlZGVkIGZvciBsaXN0XG4gICAgICAgICAgLy8gc291cmNlcywgYXMgdGhlcmUgdGhlIHBhcmFtZXRlciBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlIGl0ZW0gaWQuXG4gICAgICAgICAgZGF0YVBhcnRzLmxlbmd0aC0tXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBkYXRhUGFydHMubGVuZ3RoOyBpIDwgbCAmJiBkYXRhOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXRhUGFydCA9IGRhdGFQYXJ0c1tpXVxuICAgICAgICAgIC8vIElmIHRoaXMgaXMgYW4gOmlkIHBhcnQsIGZpbmQgdGhlIGluZGV4IG9mIHRoZSBpdGVtIHdpdGggZ2l2ZW4gaWQuXG4gICAgICAgICAgY29uc3Qga2V5ID0gL146aWQvLnRlc3Qocm91dGVQYXJ0c1tpXSlcbiAgICAgICAgICAgID8gZGF0YVBhcnQgPT09ICdjcmVhdGUnXG4gICAgICAgICAgICAgID8gbnVsbCAvLyBUaGVyZSdzIG5vIGluZGV4IGZvciBlbnRyaWVzIGFib3V0IHRvIGJlIGNyZWF0ZWRcbiAgICAgICAgICAgICAgOiB0aGlzLmZpbmRJdGVtSWRJbmRleCh0aGlzLnNvdXJjZVNjaGVtYSwgZGF0YSwgZGF0YVBhcnQpXG4gICAgICAgICAgICA6IGRhdGFQYXJ0XG4gICAgICAgICAgLy8gU2tpcCB0aGUgZmluYWwgbG9va3VwIGJ1dCByZW1lbWJlciBgc291cmNlS2V5YCwgYXMgd2Ugd2FudCB0aGVcbiAgICAgICAgICAvLyBwYXJlbnQgZGF0YSBzbyB3ZSBjYW4gcmVwbGFjZSB0aGUgZW50cnkgYXQgYHNvdXJjZUtleWAgb24gaXQuXG4gICAgICAgICAgaWYgKGkgPT09IGwgLSAxKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRoaXMuc291cmNlS2V5ID0ga2V5XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhW2tleV1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhXG4gICAgfSxcblxuICAgIGluaGVyaXRlZERhdGEoKSB7XG4gICAgICAvLyBEYXRhIGluaGVyaXRlZCBmcm9tIHBhcmVudCwgYW5kIGNsb25lZCB0byBwcm90ZWN0IGFnYWluc3QgcmVhY3RpdmVcbiAgICAgIC8vIGNoYW5nZXMgdW50aWwgY2hhbmdlcyBhcmUgYXBwbGllZCB0aHJvdWdoIHNldFNvdXJjZURhdGEoKSwgdW5sZXNzXG4gICAgICAvLyBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgaW4gd2hpY2ggY2FzZSBkYXRhIGlzIG11dGF0ZWQgZGlyZWN0bHkuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgdGhpcy5jbG9uZWREYXRhID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdGhpcy5zb3VyY2VEYXRhICYmXG4gICAgICAgIHRoaXMuc291cmNlS2V5ICE9PSBudWxsXG4gICAgICApIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnNvdXJjZURhdGFbdGhpcy5zb3VyY2VLZXldXG4gICAgICAgIGlmICghdGhpcy5pc011dGF0aW5nKSB7XG4gICAgICAgICAgLy8gVXNlIGEgdHJpY2sgdG8gc3RvcmUgY2xvbmVkIGluaGVyaXRlZCBkYXRhIGluIGNsb25lZERhdGEsIHRvIG1ha2VcbiAgICAgICAgICAvLyBpdCByZWFjdGl2ZSBhbmQgcHJldmVudCBpdCBmcm9tIGJlaW5nIGNsb25lZCBtdWx0aXBsZSB0aW1lcy5cbiAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9IGRhdGEgPSBjbG9uZShkYXRhKVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhID09PSBudWxsICYmXG4gICAgICAgICAgIXRoaXMuaXNDcmVhdGluZyAmJlxuICAgICAgICAgIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIG9mIGFuIG9iamVjdCBzb3VyY2UgaXMgbnVsbCwgcmVkaXJlY3QgdG8gaXRzIGNyZWF0ZSByb3V0ZS5cbiAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgcGF0aDogYCR7dGhpcy5wYXRofS9jcmVhdGVgIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNsb25lZERhdGFcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uaGFzRGF0YSgpXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBpdGVtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zb3VyY2VTY2hlbWEsIHRoaXMuZGF0YSwgeyBleHRlbmRlZDogdHJ1ZSB9KVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZSh0bywgZnJvbSkge1xuICAgICAgLy8gUmVsb2FkIGZvcm0gZGF0YSB3aGVuIG5hdmlnYXRpbmcgdG8gYSBkaWZmZXJlbnQgZW50aXR5IGluIHNhbWUgZm9ybS5cbiAgICAgIGlmICh0aGlzLnByb3ZpZGVzRGF0YSkge1xuICAgICAgICBjb25zdCB7IHBhcmFtIH0gPSB0aGlzLm1ldGFcbiAgICAgICAgaWYgKHBhcmFtICYmIHRvLnBhcmFtc1twYXJhbV0gIT09IGZyb20ucGFyYW1zW3BhcmFtXSkge1xuICAgICAgICAgIHRoaXMubG9hZERhdGEodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzb3VyY2VEYXRhOiAnY2xlYXJDbG9uZWREYXRhJyxcbiAgICAvLyBOZWVkZWQgZm9yIHRoZSAnY3JlYXRlJyByZWRpcmVjdCBpbiBgaW5oZXJpdGVkRGF0YSgpYCB0byB3b3JrOlxuICAgIGNyZWF0ZTogJ3NldHVwRGF0YSdcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZW1pdFNjaGVtYUV2ZW50KGV2ZW50LCBwYXJhbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfSxcblxuICAgIGdldERhdGFQYXRoRnJvbShyb3V0ZSkge1xuICAgICAgLy8gR2V0IHRoZSBkYXRhIHBhdGggYnkgZGVub3JtYWxpemVQYXRoIHRoZSByZWxhdGl2ZSByb3V0ZSBwYXRoXG4gICAgICByZXR1cm4gdGhpcy5hcGkuZGVub3JtYWxpemVQYXRoKFxuICAgICAgICB0aGlzLnBhdGhcbiAgICAgICAgICAvLyBEaXRvVmlld3MgaGF2ZSBuZXN0ZWQgcm91dGVzLCBzbyBkb24ndCByZW1vdmUgdGhlaXIgcGF0aC5cbiAgICAgICAgICAuc2xpY2UoKHJvdXRlLmlzVmlldyA/IDAgOiByb3V0ZS5wYXRoLmxlbmd0aCkgKyAxKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXR1cERhdGEoKVxuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVkRGF0YSB8fD0gdGhpcy5jcmVhdGVEYXRhKHRoaXMuc2NoZW1hLCB0aGlzLnR5cGUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXRTb3VyY2VEYXRhKGRhdGEpIHtcbiAgICAgIGlmICh0aGlzLnNvdXJjZURhdGEgJiYgdGhpcy5zb3VyY2VLZXkgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgeyBtYWluU2NoZW1hQ29tcG9uZW50IH0gPSB0aGlzXG4gICAgICAgIHRoaXMuc291cmNlRGF0YVt0aGlzLnNvdXJjZUtleV0gPSBtYWluU2NoZW1hQ29tcG9uZW50LmZpbHRlckRhdGEoZGF0YSlcbiAgICAgICAgbWFpblNjaGVtYUNvbXBvbmVudC5vbkNoYW5nZSgpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYWRkU291cmNlRGF0YShkYXRhKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpXG4gICAgICAgID8gdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICAgIDogISF0aGlzLnNvdXJjZURhdGE/LnB1c2goZGF0YSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uY2xlYXJEYXRhKClcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLnNldERhdGEobnVsbClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0RGF0YSgpXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAvLyBzZXREYXRhKCkgaXMgY2FsbGVkIGFmdGVyIHN1Ym1pdCB3aGVuIGRhdGEgaGFzIGNoYW5nZWQuXG4gICAgICBpZiAodGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICAvLyBGb3IgY29tcG9uZW50cyB3aXRoIHRyYW5zaWVudCBkYXRhLCBtb2RpZnkgdGhpcy5zb3VyY2VEYXRhLlxuICAgICAgICB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3JlYXRlZERhdGEgPSBudWxsXG4gICAgICAgIHRoaXMubG9hZGVkRGF0YSA9IGRhdGFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJDbG9uZWREYXRhKHRvLCBmcm9tKSB7XG4gICAgICAvLyBPbmx5IGNsZWFyIGlmIHRoZSB3YXRjaGVkIHNvdXJjZURhdGEgaXRzZWxmIGNoYW5nZXMgaW4gdGhlIGZvcm0uXG4gICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgdGhpcy5jbG9uZWREYXRhID0gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsb3NlKClcbiAgICB9LFxuXG4gICAgYXN5bmMgY2xvc2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50LnBhdGgpXG4gICAgfSxcblxuICAgIGdldFN1Ym1pdFZlcmIocHJlc2VudCA9IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBwcmVzZW50XG4gICAgICAgICAgPyAnY3JlYXRlJ1xuICAgICAgICAgIDogJ2NyZWF0ZWQnXG4gICAgICAgIDogcHJlc2VudFxuICAgICAgICAgID8gJ3N1Ym1pdCdcbiAgICAgICAgICA6ICdzdWJtaXR0ZWQnXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdChidXR0b24sIHsgdmFsaWRhdGUgPSB0cnVlLCBjbG9zZUZvcm0gPSBmYWxzZSB9ID0ge30pIHtcbiAgICAgIGlmICh2YWxpZGF0ZSAmJiAhdGhpcy52YWxpZGF0ZUFsbCgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBnZXRWZXJiID0gcHJlc2VudCA9PiB0aGlzLnZlcmJzW3RoaXMuZ2V0U3VibWl0VmVyYihwcmVzZW50KV1cblxuICAgICAgLy8gQWxsb3cgYnV0dG9ucyB0byBvdmVycmlkZSBib3RoIG1ldGhvZCBhbmQgcmVzb3VyY2UgcGF0aCB0byBzdWJtaXQgdG86XG4gICAgICBjb25zdCBidXR0b25SZXNvdXJjZSA9IGdldFJlc291cmNlKGJ1dHRvbi5zY2hlbWEucmVzb3VyY2UsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLnJlc291cmNlXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzb3VyY2UgPSBidXR0b25SZXNvdXJjZSB8fCB0aGlzLnJlc291cmNlXG4gICAgICBjb25zdCBtZXRob2QgPSByZXNvdXJjZT8ubWV0aG9kIHx8IHRoaXMubWV0aG9kXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgIGxldCBzdWNjZXNzXG4gICAgICBpZiAoIWJ1dHRvblJlc291cmNlICYmIHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuc3VibWl0VHJhbnNpZW50KGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQodGhpcy5nZXRTdWJtaXRWZXJiKCkpLFxuICAgICAgICAgIG9uRXJyb3I6IGVycm9yID0+XG4gICAgICAgICAgICB0aGlzLmVtaXRTY2hlbWFFdmVudCgnZXJyb3InLCB7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IHsgZXJyb3IgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgbm90aWZ5U3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIoZmFsc2UpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICAgICAgICAgID8gYEl0ZW0gJHtjYXBpdGFsaXplKHZlcmIpfWBcbiAgICAgICAgICAgICAgICA6IGBDaGFuZ2UgJHtjYXBpdGFsaXplKHZlcmIpfWAsXG4gICAgICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgICAgICAgICAgID8gYCR7dGhpcy5pdGVtTGFiZWx9IHdhcyAke3ZlcmJ9LmBcbiAgICAgICAgICAgICAgICAgIDogYENoYW5nZXMgdG8gJHt0aGlzLml0ZW1MYWJlbH0gd2VyZSAke3ZlcmJ9LmAsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2llbnROb3RlXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBub3RpZnlFcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIodHJ1ZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICAgICAgdGV4dDogYFVuYWJsZSB0byAke3ZlcmJ9ICR7dGhpcy5pdGVtTGFiZWx9LmBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhLCB7XG4gICAgICAgICAgc2V0RGF0YTogdHJ1ZSxcbiAgICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KHRoaXMuZ2V0U3VibWl0VmVyYigpKSxcbiAgICAgICAgICBvbkVycm9yOiBlcnJvciA9PlxuICAgICAgICAgICAgdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2Vycm9yJywge1xuICAgICAgICAgICAgICBjb250ZXh0OiB7IGVycm9yIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vdGlmeVN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgIHRpdGxlOiBgU3VjY2Vzc2Z1bGx5ICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLml0ZW1MYWJlbH0gd2FzICR7dmVyYn0uYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vdGlmeUVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYih0cnVlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgYFVuYWJsZSB0byAke3ZlcmJ9ICR7dGhpcy5pdGVtTGFiZWx9JHtlcnJvciA/ICc6JyA6ICcnfWAsXG4gICAgICAgICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICB0aGlzLnJlc2V0VmFsaWRhdGlvbigpXG4gICAgICAgIGlmIChjbG9zZUZvcm0gfHwgYnV0dG9uLmNsb3NlRm9ybSkge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgICAgIC8vIFJlZGlyZWN0IHRvIHRoZSBmb3JtIGVkaXRpbmcgdGhlIG5ld2x5IGNyZWF0ZWQgaXRlbTpcbiAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCB0aGlzLmRhdGEpXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2UoeyBwYXRoOiByZXNvbHZlUGF0aChgJHt0aGlzLnBhdGh9Ly4uLyR7aWR9YCkgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3NcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0VHJhbnNpZW50KGJ1dHRvbiwgX3Jlc291cmNlLCBfbWV0aG9kLCBkYXRhLCB7XG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBvbkVycm9yLFxuICAgICAgbm90aWZ5U3VjY2VzcyxcbiAgICAgIG5vdGlmeUVycm9yXG4gICAgfSkge1xuICAgICAgLy8gSGFuZGxlIHRoZSBkZWZhdWx0IFwic3VibWl0dGluZ1wiIG9mIHRyYW5zaWVudCwgbmVzdGVkIGRhdGE6XG4gICAgICBjb25zdCBzdWNjZXNzID0gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gdGhpcy5hZGRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICAgIDogdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICBvblN1Y2Nlc3M/LigpXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ3N1Y2Nlc3MnLCB7XG4gICAgICAgICAgbm90aWZ5OiBub3RpZnlTdWNjZXNzXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBlcnJvciA9ICdDb3VsZCBub3Qgc3VibWl0IHRyYW5zaWVudCBpdGVtJ1xuICAgICAgICBvbkVycm9yPy4oZXJyb3IpXG4gICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ2Vycm9yJywge1xuICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgZXJyb3JcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWNjZXNzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvRm9ybSBmcm9tICcuL0RpdG9Gb3JtLnZ1ZSdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRm9ybU5lc3RlZCcsIHtcbiAgZXh0ZW5kczogRGl0b0Zvcm1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1mb3JtLW5lc3RlZCB7XG4gICYsXG4gIC5kaXRvLXNjcm9sbCB7XG4gICAgLy8gTm8gc2Nyb2xsaW5nIGluc2lkZSBuZXN0ZWQgZm9ybXMsIGFuZCBwcmV2ZW50IG9wZW4gLm11bHRpc2VsZWN0IGZyb21cbiAgICAvLyBiZWluZyBjcm9wcGVkLlxuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWVycm9ycyhcbiAgdi1pZj1cImVycm9yc1wiXG4pXG4gIHVsXG4gICAgbGkoXG4gICAgICB2LWZvcj1cImVycm9yIG9mIGVycm9yc1wiXG4gICAgKVxuICAgICAgfCB7eyBlcnJvciB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0Vycm9ycycsIHtcbiAgcHJvcHM6IHtcbiAgICBlcnJvcnM6IHsgdHlwZTogQXJyYXksIGRlZmF1bHQ6IG51bGwgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZXJyb3JzIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAxO1xuXG4gIHVsIHtcbiAgICBtYXJnaW4tdG9wOiAxcHg7XG4gICAgY29sb3I6ICRjb2xvci1lcnJvcjtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zY29wZXNcbiAgUm91dGVyTGluayhcbiAgICB2LWZvcj1cIihzY29wZSwga2V5KSBpbiBzY29wZXNcIlxuICAgIDprZXk9XCJrZXlcIlxuICAgIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgOnRvPVwiZ2V0U2NvcGVMaW5rKHNjb3BlKVwiXG4gICAgY3VzdG9tXG4gIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2VsZWN0ZWQnOiBzY29wZS5uYW1lID09PSBxdWVyeS5zY29wZSB9XCJcbiAgICAgIDp0aXRsZT1cInNjb3BlLmhpbnQgfHwgZ2V0TGFiZWwoc2NvcGUpXCJcbiAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICApIHt7IGdldExhYmVsKHNjb3BlKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1Njb3BlcycsIHtcbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NvcGVzOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRTY29wZUxpbmsoc2NvcGUpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0geyAuLi50aGlzLnF1ZXJ5LCBzY29wZTogc2NvcGUubmFtZSB9XG4gICAgICBpZiAocXVlcnkucGFnZSkge1xuICAgICAgICBxdWVyeS5wYWdlID0gMFxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlMaW5rKHF1ZXJ5KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNjb3BlcyB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgLmRpdG8tYnV0dG9uIHtcbiAgICBAaW5jbHVkZSBlbGxpcHNpcztcblxuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgLy8gQSBiaXQgbW9yZSB0aGFuIHRoZSB3aWR0aCBvZiBlbGxpcHNpcywgdG8gcHJldmVudCByZXBsYWNpbmcgc2hvcnQgd29yZHNcbiAgICAvLyB3aXRoIGVsbGlwc2lzLlxuICAgIG1pbi13aWR0aDogM2VtO1xuICAgIGZsZXg6IDAgMSBhdXRvO1xuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAxZW07XG4gICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAxZW07XG4gICAgICBwYWRkaW5nLWxlZnQ6IDFlbTtcbiAgICB9XG5cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDFlbTtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAxZW07XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAxZW07XG4gICAgfVxuXG4gICAgJiArIC5kaXRvLWJ1dHRvbiB7XG4gICAgICBtYXJnaW4tbGVmdDogLTFweDtcbiAgICB9IC8vIERvbid0IGNvdmVyIHRoZSBmb2N1c2VkIGJvcmRlciBvZiBidXR0b25zOlxuICAgICY6Zm9jdXMge1xuICAgICAgei1pbmRleDogMTtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuUGFnaW5hdGlvbihcbiAgdi1tb2RlbDpwYWdlPVwicGFnZVwiXG4gIDpwYWdlU2l6ZT1cImxpbWl0XCJcbiAgOnRvdGFsPVwidG90YWxcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IFBhZ2luYXRpb24gfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1BhZ2luYXRpb24nLCB7XG4gIGNvbXBvbmVudHM6IHsgUGFnaW5hdGlvbiB9LFxuXG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGxpbWl0OiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHBhZ2U6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuICgrdGhpcy5xdWVyeS5wYWdlIHx8IDApICsgMVxuICAgICAgfSxcblxuICAgICAgc2V0KHBhZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMucGFnZSAhPT0gcGFnZSkge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKFxuICAgICAgICAgICAgdGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICAgICAgICBwYWdlOiBwYWdlIC0gMVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi9JdGVtTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0l0ZW1NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZHJhZ2dpbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRTb3J0YWJsZU9wdGlvbnMoZm9yY2VGYWxsYmFjayA9IGZhbHNlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbmltYXRpb246IDE1MCxcbiAgICAgICAgaGFuZGxlOiAnLmRpdG8tYnV0dG9uLWRyYWcnLFxuICAgICAgICBkcmFnQ2xhc3M6ICdkaXRvLXNvcnRhYmxlLWFjdGl2ZScsXG4gICAgICAgIGNob3NlbkNsYXNzOiAnZGl0by1zb3J0YWJsZS1jaG9zZW4nLFxuICAgICAgICBnaG9zdENsYXNzOiAnZGl0by1zb3J0YWJsZS1naG9zdCcsXG4gICAgICAgIGZhbGxiYWNrQ2xhc3M6ICdkaXRvLXNvcnRhYmxlLWZhbGxiYWNrJyxcbiAgICAgICAgZm9yY2VGYWxsYmFjayxcbiAgICAgICAgb25TdGFydDogdGhpcy5vblN0YXJ0RHJhZyxcbiAgICAgICAgb25FbmQ6IHRoaXMub25FbmREcmFnXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uU3RhcnREcmFnKCkge1xuICAgICAgdGhpcy5kcmFnZ2luZyA9IHRydWVcbiAgICB9LFxuXG4gICAgb25FbmREcmFnKHsgb2xkSW5kZXgsIG5ld0luZGV4IH0pIHtcbiAgICAgIHRoaXMuZHJhZ2dpbmcgPSBmYWxzZVxuICAgICAgaWYgKG9sZEluZGV4ICE9PSBuZXdJbmRleCkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0LCBwYWdpbmF0aW9uUmFuZ2UpIHtcbiAgICAgIGNvbnN0IHsgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICAgIC8vIFJlb3JkZXIgdGhlIGNoYW5nZWQgZW50cmllcyBieSB0aGVpciBvcmRlciBrZXksIHRha2luZyBwYWdpbmF0aW9uXG4gICAgICAgIC8vIG9mZnNldHMgaW50byBhY2NvdW50OlxuICAgICAgICBjb25zdCBvZmZzZXQgPSBwYWdpbmF0aW9uUmFuZ2U/LlswXSB8fCAwXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxpc3RbaV1bb3JkZXJLZXldID0gaSArIG9mZnNldFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXRyZWUtaXRlbShcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9YHtcbiAgICAnZGl0by1kcmFnZ2luZyc6IGRyYWdnaW5nLFxuICAgICdkaXRvLWFjdGl2ZSc6IGFjdGl2ZVxuICB9YFxuICA6c3R5bGU9XCJsZXZlbCA+IDAgJiYgeyAnLS1sZXZlbCc6IGxldmVsIH1cIlxuKVxuICAuZGl0by10cmVlLWhlYWRlcihcbiAgICB2LWlmPVwibGFiZWxcIlxuICApXG4gICAgLmRpdG8tdHJlZS1icmFuY2goXG4gICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICBAY2xpY2suc3RvcD1cIm9wZW5lZCA9ICFvcGVuZWRcIlxuICAgIClcbiAgICAgIC5kaXRvLWNoZXZyb24oXG4gICAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgICAgOmNsYXNzPVwieyAnZGl0by1vcGVuZWQnOiBvcGVuZWQgfVwiXG4gICAgICApXG4gICAgICAuZGl0by10cmVlLWxhYmVsKFxuICAgICAgICB2LWh0bWw9XCJsYWJlbFwiXG4gICAgICApXG4gICAgICAuZGl0by10cmVlLWluZm8oXG4gICAgICAgIHYtaWY9XCJkZXRhaWxzXCJcbiAgICAgICkge3sgZGV0YWlscyB9fVxuICAgIC5kaXRvLXRyZWUtbGVhZihcbiAgICAgIHYtZWxzZVxuICAgIClcbiAgICAgIC5kaXRvLXRyZWUtbGFiZWwoXG4gICAgICAgIHYtaHRtbD1cImxhYmVsXCJcbiAgICAgIClcbiAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1zbWFsbChcbiAgICAgIHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgKVxuICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgIGEuZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImVkaXRhYmxlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICAgICAgICBAY2xpY2s9XCJvbkVkaXRcIlxuICAgICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICAgIEBjbGljaz1cIm9uRGVsZXRlXCJcbiAgICAgIClcbiAgdGFibGUuZGl0by1wcm9wZXJ0aWVzKFxuICAgIHYtaWY9XCJwcm9wZXJ0aWVzXCJcbiAgICB2LXNob3c9XCJvcGVuZWRcIlxuICApXG4gICAgdHIoXG4gICAgICB2LWZvcj1cInByb3BlcnR5IGluIHByb3BlcnRpZXNcIlxuICAgIClcbiAgICAgIHRkXG4gICAgICAgIERpdG9MYWJlbChcbiAgICAgICAgICB2LWlmPVwicHJvcGVydHkubGFiZWwgIT09IGZhbHNlXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgICAgOmxhYmVsPVwiZ2V0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgKVxuICAgICAgRGl0b1RhYmxlQ2VsbChcbiAgICAgICAgOmNlbGw9XCJwcm9wZXJ0eVwiXG4gICAgICAgIDpzY2hlbWE9XCJwcm9wZXJ0eVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG4gIERpdG9EcmFnZ2FibGUoXG4gICAgdi1pZj1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICB2LXNob3c9XCJvcGVuZWRcIlxuICAgIDptb2RlbFZhbHVlPVwidXBkYXRlT3JkZXIoY2hpbGRyZW5TY2hlbWEsIGNoaWxkcmVuTGlzdClcIlxuICAgIDpvcHRpb25zPVwiZ2V0U29ydGFibGVPcHRpb25zKHRydWUpXCJcbiAgICA6ZHJhZ2dhYmxlPVwiY2hpbGRyZW5EcmFnZ2FibGVcIlxuICAgIEB1cGRhdGU6bW9kZWxWYWx1ZT1cInZhbHVlID0+IChjaGlsZHJlbkxpc3QgPSB2YWx1ZSlcIlxuICApXG4gICAgRGl0b1RyZWVJdGVtKFxuICAgICAgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIGNoaWxkcmVuSXRlbXNcIlxuICAgICAgOmtleT1cImdldEl0ZW1VaWQoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSlcIlxuICAgICAgOnNjaGVtYT1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImdldEl0ZW1EYXRhUGF0aChjaGlsZHJlblNjaGVtYSwgaW5kZXgpXCJcbiAgICAgIDpkYXRhPVwiaXRlbS5kYXRhXCJcbiAgICAgIDpwYXRoPVwiaXRlbS5wYXRoXCJcbiAgICAgIDpvcGVuPVwiaXRlbS5vcGVuXCJcbiAgICAgIDphY3RpdmU9XCJpdGVtLmFjdGl2ZVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiY2hpbGRyZW5EcmFnZ2FibGVcIlxuICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEsIHsgaW5kZXggfSlcIlxuICAgICAgOmxldmVsPVwibGV2ZWwgKyAxXCJcbiAgICApXG4gICAgLy8tIFRPRE86IENvbnZlcnQgZGl0by10cmVlLWl0ZW0gdG8gdXNlIGRpdG8tbGFiZWwgaW50ZXJuYWxseSwgYW5kIHRoZW5cbiAgICAvLy0gcGFzcyBgYXNPYmplY3Q6IHRydWVgIGluIHRoZSBgZ2V0SXRlbUxhYmVsKClgIGNhbGwgYWJvdmUuXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBTb3J0YWJsZU1peGluIGZyb20gJy4uL21peGlucy9Tb3J0YWJsZU1peGluLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE5hbWVkU2NoZW1hcywgaGFzRm9ybVNjaGVtYSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVHJlZUl0ZW0nLCB7XG4gIG1peGluczogW1NvcnRhYmxlTWl4aW5dLFxuICBpbmplY3Q6IFsnY29udGFpbmVyJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtBcnJheSwgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIG9wZW46IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY3RpdmU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsZXZlbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZW5lZDogdGhpcy5vcGVuIHx8IHRoaXMuc2NoZW1hLm9wZW5cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtZXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLm1ldGFcbiAgICB9LFxuXG4gICAgc3RvcmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuc3RvcmVcbiAgICB9LFxuXG4gICAgZGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuZGlzYWJsZWRcbiAgICB9LFxuXG4gICAgbmVzdGVkTWV0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMubWV0YSxcbiAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9wZXJ0aWVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzKVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTaG91bGQgdGhpcyBiZSBuYW1lZCBgc291cmNlU2NoZW1hYCBpbnN0ZWFkPyBVc2UgU291cmNlTWl4aW4/XG4gICAgY2hpbGRyZW5TY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEuY2hpbGRyZW5cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5MaXN0KCkge1xuICAgICAgY29uc3QgbmFtZSA9IHRoaXMuY2hpbGRyZW5TY2hlbWE/Lm5hbWVcbiAgICAgIHJldHVybiBuYW1lICYmIHRoaXMuZGF0YVtuYW1lXVxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkRyYWdnYWJsZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuY2hpbGRyZW5MaXN0Py5sZW5ndGggPiAxICYmXG4gICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2RyYWdnYWJsZScsIHtcbiAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgIHNjaGVtYTogdGhpcy5jaGlsZHJlblNjaGVtYVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBudW1DaGlsZHJlbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuTGlzdD8ubGVuZ3RoIHx8IDBcbiAgICB9LFxuXG4gICAgbnVtUHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXM/Lmxlbmd0aCB8fCAwXG4gICAgfSxcblxuICAgIG51bUVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5udW1Qcm9wZXJ0aWVzICsgdGhpcy5udW1DaGlsZHJlblxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkl0ZW1zKCkge1xuICAgICAgY29uc3QgeyBjaGlsZHJlblNjaGVtYSwgY2hpbGRyZW5MaXN0IH0gPSB0aGlzXG4gICAgICBpZiAoY2hpbGRyZW5TY2hlbWEgJiYgY2hpbGRyZW5MaXN0KSB7XG4gICAgICAgIGNvbnN0IHsgZWRpdFBhdGggfSA9IHRoaXMuY29udGFpbmVyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuT3BlbiA9ICF0aGlzLnBhdGggJiYgY2hpbGRyZW5TY2hlbWEub3BlblxuICAgICAgICAvLyBCdWlsZCBhIGNoaWxkcmVuIGxpc3Qgd2l0aCBjaGlsZCBtZXRhIGluZm9ybWF0aW9uIGZvciB0aGUgdGVtcGxhdGUuXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU9yZGVyKFxuICAgICAgICAgIGNoaWxkcmVuU2NoZW1hLFxuICAgICAgICAgIGNoaWxkcmVuTGlzdC5tYXAoKGRhdGEsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gKFxuICAgICAgICAgICAgICBjaGlsZHJlblNjaGVtYS5wYXRoICYmXG4gICAgICAgICAgICAgIGAke3RoaXMucGF0aH0vJHtjaGlsZHJlblNjaGVtYS5wYXRofS8ke2luZGV4fWBcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9wZW4gPSAoXG4gICAgICAgICAgICAgIGNoaWxkcmVuT3BlbiB8fFxuICAgICAgICAgICAgICAvLyBPbmx5IGNvdW50IGFzIFwiaW4gZWRpdCBwYXRoXCIgd2hlbiBpdCdzIG5vdCB0aGUgZnVsbCBlZGl0IHBhdGguXG4gICAgICAgICAgICAgIGVkaXRQYXRoLnN0YXJ0c1dpdGgocGF0aCkgJiYgcGF0aC5sZW5ndGggPCBlZGl0UGF0aC5sZW5ndGhcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IGVkaXRQYXRoID09PSBwYXRoXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgICBvcGVuLFxuICAgICAgICAgICAgICBhY3RpdmVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gW11cbiAgICB9LFxuXG4gICAgZGV0YWlscygpIHtcbiAgICAgIGNvbnN0IHsgbnVtQ2hpbGRyZW4gfSA9IHRoaXNcbiAgICAgIHJldHVybiAoXG4gICAgICAgIG51bUNoaWxkcmVuICYmXG4gICAgICAgIGAke251bUNoaWxkcmVufSAke1xuICAgICAgICAgIG51bUNoaWxkcmVuID09PSAxID8gJ2l0ZW0nIDogJ2l0ZW1zJ1xuICAgICAgICB9YFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNFZGl0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmRyYWdnYWJsZSB8fCB0aGlzLmVkaXRhYmxlIHx8IHRoaXMuZGVsZXRhYmxlXG4gICAgfSxcblxuICAgIC8vIFRPRE86IFN1cHBvcnQgY3JlYXRhYmxlIVxuICAgIC8vIFRPRE86IEFkZCBzdXBwb3J0IGZvciBjcmVhdGFibGUsIGVkaXRhYmxlIGFuZCBkZWxldGFibGUgb3ZlcnJpZGVzIG9uIHRoZVxuICAgIC8vIGFzc29jaWF0ZWQgZm9ybXMsIGp1c3QgbGlrZSBpbiBgVHlwZUxpc3RgIGFuZCBgVHlwZU9iamVjdGAsIHRocm91Z2hcbiAgICAvLyBgRGl0b0VkaXRCdXR0b25zYC4gSXQgd291bGQgYmUgYmVzdCB0byB1c2UgYERpdG9FZGl0QnV0dG9uc2AgaGVyZSB0b28uXG4gICAgY3JlYXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY3JlYXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGNyZWF0YWJsZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VkaXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBlZGl0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSkge1xuICAgICAgcmV0dXJuIGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIHByb3BlcnR5Lm5hbWUpXG4gICAgfSxcblxuICAgIG9uRWRpdCgpIHtcbiAgICAgIC8vIEFsbCB3ZSBnb3QgdG8gZG8gaXMgcHVzaCB0aGUgcmlnaHQgZWRpdCBwYXRoIHRvIHRoZSByb3V0ZXIsIHRoZSByZXN0XG4gICAgICAvLyBpcyBoYW5kbGVkIGJ5IG91ciByb3V0ZXMsIGFsbG93aW5nIHJlbG9hZHMgYXMgd2VsbC5cbiAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgcGF0aDogYCR7dGhpcy5jb250YWluZXIucGF0aH0ke3RoaXMucGF0aH1gLFxuICAgICAgICAvLyBQcmVzZXJ2ZSBjdXJyZW50IHF1ZXJ5XG4gICAgICAgIHF1ZXJ5OiB0aGlzLiRyb3V0ZS5xdWVyeVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25EZWxldGUoKSB7XG4gICAgICAvLyBUT0RPOiBJbXBsZW1lbnQhXG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5jb250YWluZXIub25DaGFuZ2UoKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRyZWUtaXRlbSB7XG4gIC0tY2hldnJvbi1pbmRlbnQ6ICN7JGNoZXZyb24taW5kZW50fTtcblxuICA+IC5kaXRvLXRyZWUtaGVhZGVyIHtcbiAgICA+IC5kaXRvLXRyZWUtYnJhbmNoLFxuICAgID4gLmRpdG8tdHJlZS1sZWFmIHtcbiAgICAgIC8vIFVzZSBgLS1sZXZlbGAgQ1NTIHZhcmlhYmxlIHRvIGNhbGN1bGF0ZWQgdGhlIGFjY3VtdWxhdGVkIGluZGVudFxuICAgICAgLy8gcGFkZGluZyBkaXJlY3RseSBpbnN0ZWFkIG9mIGhhdmluZyBpdCBhY2N1bXVsYXRlIGluIG5lc3RlZCBDU1MuXG4gICAgICAvLyBUaGlzIHdheSwgd2UgY2FuIGtlZXAgdGhlIC5kaXRvLWFjdGl2ZSBhcmVhIGNvdmVyIHRoZSBmdWxsIHdpZHRoOlxuICAgICAgcGFkZGluZy1sZWZ0OiBjYWxjKHZhcigtLWNoZXZyb24taW5kZW50KSAqICh2YXIoLS1sZXZlbCwgMSkgLSAxKSk7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tdHJlZS1icmFuY2gge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuXG4gIC5kaXRvLXRyZWUtaGVhZGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgfVxuXG4gIC5kaXRvLXRyZWUtYnJhbmNoLFxuICAuZGl0by10cmVlLWxlYWYge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleDogYXV0bztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luOiAxcHggMDtcbiAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcbiAgfVxuXG4gIC5kaXRvLXRyZWUtbGFiZWwsXG4gIC5kaXRvLXRyZWUtaW5mbyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxuXG4gIC5kaXRvLXRyZWUtaW5mbyB7XG4gICAgcGFkZGluZy1sZWZ0OiAwLjM1ZW07XG4gICAgY29sb3I6IHJnYmEoJGNvbG9yLWJsYWNrLCAwLjIpO1xuICB9XG5cbiAgLmRpdG8tYnV0dG9ucyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG1hcmdpbjogMXB4IDAgMXB4IDFlbTtcbiAgfVxuXG4gIC5kaXRvLXRyZWUtaGVhZGVyOmhvdmVyIHtcbiAgICA+IC5kaXRvLWJ1dHRvbnMge1xuICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICB9IC8vIEhpZGUgYnV0dG9ucyBkdXJpbmcgZHJhZ2dpbmdcbiAgfVxuXG4gICYuZGl0by1kcmFnZ2luZyB7XG4gICAgLmRpdG8tdHJlZS1oZWFkZXIge1xuICAgICAgPiAuZGl0by1idXR0b25zIHtcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICYuZGl0by1hY3RpdmUge1xuICAgID4gLmRpdG8tdHJlZS1oZWFkZXIge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIHBhZGRpbmc6IDAgJGlucHV0LXBhZGRpbmctaG9yO1xuICAgICAgbWFyZ2luOiAwICgtJGlucHV0LXBhZGRpbmctaG9yKTtcblxuICAgICAgPiAuZGl0by10cmVlLWJyYW5jaCB7XG4gICAgICAgID4gLmRpdG8tY2hldnJvbjo6YmVmb3JlIHtcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgID4gKiA+IC5kaXRvLXRyZWUtbGFiZWwge1xuICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXByb3BlcnRpZXMge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi1sZWZ0OiAkY2hldnJvbi1pbmRlbnQ7XG5cbiAgICA+IHRyIHtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbiAgICB9XG5cbiAgICAuZGl0by1sYWJlbCB7XG4gICAgICBtYXJnaW46IDA7XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgY29udGVudDogJzogJztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudGhlYWQuZGl0by10YWJsZS1oZWFkXG4gIHRyXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWZvcj1cImNvbHVtbiBpbiBjb2x1bW5zXCJcbiAgICApXG4gICAgICB0aChcbiAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYShjb2x1bW4pXCJcbiAgICAgICAgOmNsYXNzPVwiZ2V0Q29sdW1uQ2xhc3MoY29sdW1uKVwiXG4gICAgICApXG4gICAgICAgIFJvdXRlckxpbmsoXG4gICAgICAgICAgdi1pZj1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgICAgdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICAgICAgICA6dG89XCJnZXRTb3J0TGluayhjb2x1bW4pXCJcbiAgICAgICAgICBjdXN0b21cbiAgICAgICAgKVxuICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgOmNsYXNzPVwiZ2V0U29ydENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5kaXRvLW9yZGVyLWFycm93c1xuICAgICAgICAgICAgc3BhbiB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgICAgIHNwYW4oXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICkge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgIHRoKFxuICAgICAgdi1pZj1cImhhc0VkaXRCdXR0b25zXCJcbiAgICApXG4gICAgICAvLy0gRW1wdHkgPHNwYW4+IGlzIG5lZWRlZCBmb3Igc3R5bGluZywgc2VlIF90YWJsZS5zY3NzXG4gICAgICBzcGFuXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1RhYmxlSGVhZCcsIHtcbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgY29sdW1uczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgaGFzRWRpdEJ1dHRvbnM6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc29ydCgpIHtcbiAgICAgIGNvbnN0IG9yZGVyID0gKHRoaXMucXVlcnkub3JkZXIgfHwgJycpLnNwbGl0KC9cXHMrLylcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IG9yZGVyWzBdLFxuICAgICAgICBvcmRlcjogb3JkZXJbMV1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbHVtbkNsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIGBkaXRvLWNvbHVtbi0ke2h5cGhlbmF0ZShjb2x1bW4ubmFtZSl9YFxuICAgIH0sXG5cbiAgICBnZXRTb3J0Q2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb3J0Lm5hbWUgPT09IGNvbHVtbi5uYW1lXG4gICAgICAgID8gYGRpdG8tc2VsZWN0ZWQgZGl0by1vcmRlci0ke3RoaXMuc29ydC5vcmRlcn1gXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG5cbiAgICBnZXRTb3J0TGluayhjb2x1bW4pIHtcbiAgICAgIC8vIFRvZ2dsZSBvcmRlciBpZiB0aGUgc2FtZSBjb2x1bW4gaXMgY2xpY2tlZCBhZ2Fpbi5cbiAgICAgIGNvbnN0IG9yZGVyID1cbiAgICAgICAgdGhpcy5zb3J0Lm5hbWUgPT09IGNvbHVtbi5uYW1lICYmIHRoaXMuc29ydC5vcmRlciA9PT0gJ2FzYydcbiAgICAgICAgICA/ICdkZXNjJ1xuICAgICAgICAgIDogJ2FzYydcbiAgICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5TGluayh7XG4gICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgIG9yZGVyOiBgJHtjb2x1bW4ubmFtZX0gJHtvcmRlcn1gXG4gICAgICB9KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRhYmxlLWhlYWQge1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICB0ciB7XG4gICAgdGgge1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAgICAgLmRpdG8tYnV0dG9uIHtcbiAgICAgICAgLy8gQ29udmVudGlvbjogTmVzdGVkIHNwYW5zIGhhbmRsZSBwYWRkaW5nLCBzZWUgYmVsb3dcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHRleHQtYWxpZ246IGluaGVyaXQ7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICB9XG5cbiAgICAgIHNwYW4ge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIC8vIENvbnZlbnRpb246IE5lc3RlZCBzcGFucyBoYW5kbGUgcGFkZGluZ1xuICAgICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcblxuICAgICAgICAmOmVtcHR5OjphZnRlciB7XG4gICAgICAgICAgLy8gUHJldmVudCBlbXB0eSA8dGg+IGZyb20gY29sbGFwc2luZ1xuICAgICAgICAgIGNvbnRlbnQ6ICdcXDIwMGInOyAvLyB6ZXJvLXdpZHRoIHNwYWNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgID4gc3BhbiB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG50ZChcbiAgOmNsYXNzPVwiY2VsbC5jbGFzc1wiXG4gIDpzdHlsZT1cImNlbGwuc3R5bGVcIlxuKVxuICAvLy0gVE9ETzogSW1wbGVtZW50IGlubGluZWQgY29tcG9uZW50cyBpbiBjZWxsIG1vZGUhXG4gIGNvbXBvbmVudChcbiAgICB2LWlmPVwiY2VsbC5jb21wb25lbnRcIlxuICAgIDppcz1cImNlbGwuY29tcG9uZW50XCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIClcbiAgc3BhbihcbiAgICB2LWVsc2VcbiAgICB2LWh0bWw9XCJyZW5kZXJDZWxsKGRhdGEpXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBlc2NhcGVIdG1sIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVGFibGVDZWxsJywge1xuICBwcm9wczoge1xuICAgIGNlbGw6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVuZGVyQ2VsbChpdGVtKSB7XG4gICAgICBjb25zdCB7IG5hbWUsIHJlbmRlciB9ID0gdGhpcy5jZWxsXG4gICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1bbmFtZV1cbiAgICAgIHJldHVybiByZW5kZXJcbiAgICAgICAgPyByZW5kZXIuY2FsbChcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgICAgZGF0YVBhdGg6IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgOiBlc2NhcGVIdG1sKHZhbHVlKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgbmV4dFRpY2ssIGRlZmluZUNvbXBvbmVudCwgcmVmLCByZWFjdGl2ZSwgaCB9IGZyb20gJ3Z1ZS1kZW1pJztcbmltcG9ydCB7IHRyeU9uTW91bnRlZCwgdHJ5T25TY29wZURpc3Bvc2UsIHVucmVmRWxlbWVudCwgZGVmYXVsdERvY3VtZW50LCB0b1ZhbHVlLCB1c2VWTW9kZWwgfSBmcm9tICdAdnVldXNlL2NvcmUnO1xuaW1wb3J0IFNvcnRhYmxlIGZyb20gJ3NvcnRhYmxlanMnO1xuXG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyhiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bS5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG52YXIgX19vYmpSZXN0ID0gKHNvdXJjZSwgZXhjbHVkZSkgPT4ge1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIGZvciAodmFyIHByb3AgaW4gc291cmNlKVxuICAgIGlmIChfX2hhc093blByb3AuY2FsbChzb3VyY2UsIHByb3ApICYmIGV4Y2x1ZGUuaW5kZXhPZihwcm9wKSA8IDApXG4gICAgICB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gIGlmIChzb3VyY2UgIT0gbnVsbCAmJiBfX2dldE93blByb3BTeW1ib2xzKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyhzb3VyY2UpKSB7XG4gICAgICBpZiAoZXhjbHVkZS5pbmRleE9mKHByb3ApIDwgMCAmJiBfX3Byb3BJc0VudW0uY2FsbChzb3VyY2UsIHByb3ApKVxuICAgICAgICB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gICAgfVxuICByZXR1cm4gdGFyZ2V0O1xufTtcbmZ1bmN0aW9uIHVzZVNvcnRhYmxlKGVsLCBsaXN0LCBvcHRpb25zID0ge30pIHtcbiAgbGV0IHNvcnRhYmxlO1xuICBjb25zdCBfYSA9IG9wdGlvbnMsIHsgZG9jdW1lbnQgPSBkZWZhdWx0RG9jdW1lbnQgfSA9IF9hLCByZXNldE9wdGlvbnMgPSBfX29ialJlc3QoX2EsIFtcImRvY3VtZW50XCJdKTtcbiAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgb25VcGRhdGU6IChlKSA9PiB7XG4gICAgICBtb3ZlQXJyYXlFbGVtZW50KGxpc3QsIGUub2xkSW5kZXgsIGUubmV3SW5kZXgpO1xuICAgIH1cbiAgfTtcbiAgY29uc3Qgc3RhcnQgPSAoKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gdHlwZW9mIGVsID09PSBcInN0cmluZ1wiID8gZG9jdW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWwpIDogdW5yZWZFbGVtZW50KGVsKTtcbiAgICBpZiAoIXRhcmdldClcbiAgICAgIHJldHVybjtcbiAgICBzb3J0YWJsZSA9IG5ldyBTb3J0YWJsZSh0YXJnZXQsIF9fc3ByZWFkVmFsdWVzKF9fc3ByZWFkVmFsdWVzKHt9LCBkZWZhdWx0T3B0aW9ucyksIHJlc2V0T3B0aW9ucykpO1xuICB9O1xuICBjb25zdCBzdG9wID0gKCkgPT4gc29ydGFibGUgPT0gbnVsbCA/IHZvaWQgMCA6IHNvcnRhYmxlLmRlc3Ryb3koKTtcbiAgdHJ5T25Nb3VudGVkKHN0YXJ0KTtcbiAgdHJ5T25TY29wZURpc3Bvc2Uoc3RvcCk7XG4gIHJldHVybiB7IHN0b3AsIHN0YXJ0IH07XG59XG5mdW5jdGlvbiBtb3ZlQXJyYXlFbGVtZW50KGxpc3QsIGZyb20sIHRvKSB7XG4gIGNvbnN0IGFycmF5ID0gdG9WYWx1ZShsaXN0KTtcbiAgaWYgKHRvID49IDAgJiYgdG8gPCBhcnJheS5sZW5ndGgpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXkuc3BsaWNlKGZyb20sIDEpWzBdO1xuICAgIG5leHRUaWNrKCgpID0+IGFycmF5LnNwbGljZSh0bywgMCwgZWxlbWVudCkpO1xuICB9XG59XG5cbmNvbnN0IFVzZVNvcnRhYmxlID0gLyogQF9fUFVSRV9fICovIC8qICNfX1BVUkVfXyAqLyBkZWZpbmVDb21wb25lbnQoe1xuICBuYW1lOiBcIlVzZVNvcnRhYmxlXCIsXG4gIG1vZGVsOiB7XG4gICAgLy8gQ29tcGF0aWJsZSB3aXRoIHZ1ZTJcbiAgICBwcm9wOiBcIm1vZGVsVmFsdWVcIixcbiAgICBldmVudDogXCJ1cGRhdGU6bW9kZWxWYWx1ZVwiXG4gIH0sXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZToge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgdGFnOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBcImRpdlwiXG4gICAgfSxcbiAgICBvcHRpb25zOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH1cbiAgfSxcbiAgc2V0dXAocHJvcHMsIHsgc2xvdHMgfSkge1xuICAgIGNvbnN0IGxpc3QgPSB1c2VWTW9kZWwocHJvcHMsIFwibW9kZWxWYWx1ZVwiKTtcbiAgICBjb25zdCB0YXJnZXQgPSByZWYoKTtcbiAgICBjb25zdCBkYXRhID0gcmVhY3RpdmUodXNlU29ydGFibGUodGFyZ2V0LCBsaXN0LCBwcm9wcy5vcHRpb25zKSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChzbG90cy5kZWZhdWx0KVxuICAgICAgICByZXR1cm4gaChwcm9wcy50YWcsIHsgcmVmOiB0YXJnZXQgfSwgc2xvdHMuZGVmYXVsdChkYXRhKSk7XG4gICAgfTtcbiAgfVxufSk7XG5cbmV4cG9ydCB7IFVzZVNvcnRhYmxlIH07XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuVXNlU29ydGFibGUoXG4gIHYtaWY9XCJkcmFnZ2FibGVcIlxuICA6dGFnPVwidGFnXCJcbiAgOm1vZGVsVmFsdWU9XCJtb2RlbFZhbHVlXCJcbiAgOm9wdGlvbnM9XCJvcHRpb25zXCJcbiAgQHVwZGF0ZTptb2RlbFZhbHVlPVwiJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgJGV2ZW50KVwiXG4pXG4gIHNsb3RcbmNvbXBvbmVudChcbiAgdi1lbHNlXG4gIDppcz1cInRhZ1wiXG4pXG4gIHNsb3RcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50J1xuaW1wb3J0IHsgVXNlU29ydGFibGUgfSBmcm9tICdAdnVldXNlL2ludGVncmF0aW9ucy91c2VTb3J0YWJsZS9jb21wb25lbnQnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0RyYWdnYWJsZScsIHtcbiAgY29tcG9uZW50czogeyBVc2VTb3J0YWJsZSB9LFxuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZSddLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZToge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgdGFnOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnZGl2J1xuICAgIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIGRyYWdnYWJsZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZnVuY3Rpb24gRGl0b1ZOb2RlKHsgdm5vZGUgfSkge1xuICByZXR1cm4gdm5vZGVcbn1cblxuRGl0b1ZOb2RlLnByb3BzID0ge1xuICB2bm9kZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Wbm9kZScsIERpdG9WTm9kZSlcbjwvc2NyaXB0PlxuIiwiLy8gRGl0b1R5cGVDb21wb25lbnQgaXMgdGhlIGFic3RyYWN0IGJhc2UgY29tcG9uZW50IGZvciBhbGwgb3RoZXIgdHlwZVxuLy8gY29tcG9uZW50cyBpbnNpZGUgdGhlIHR5cGVzLyBmb2xkZXIuIFRoZXJlJ3MgYWxzbyBhIHNlcGFyYXRlIGNvbmNyZXRlXG4vLyBgRGl0b1R5cGVDb21wb25lbnQudnVlYCBjb21wb25lbnQsIHVzZSB0byByZW5kZXIgYHsgdHlwZTogJ2NvbXBvbmVudCcgfWBcbmltcG9ydCB7IGFzQXJyYXksIGNhbWVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IHsgcmVnaXN0ZXJUeXBlQ29tcG9uZW50LCBnZXRUeXBlQ29tcG9uZW50IH0gZnJvbSAnLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGV4dGVuZHM6IERpdG9Db21wb25lbnQsXG4gIG1peGluczogW1R5cGVNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IGZhbHNlLFxuICB0ZXh0RmllbGQ6IGZhbHNlLFxuICAvLyBTZXQgcmVhc29uYWJsZSBkZWZhdWx0cyBmb3IgYWxsIG9mIHRoZXNlIHRoYXQgYXJlIHVzZWQgYnkgbW9zdCB0eXBlXG4gIC8vIGNvbXBvbmVudHMuIFRoZXNlIG9ubHkgbmVlZCBkZWZpbmluZyBpbiBzdWItY2xhc3NlcyB3aGVuIHRoZXkgZGlmZmVyLlxuICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gIGRlZmF1bHROZXN0ZWQ6IHRydWUsXG4gIGRlZmF1bHRWaXNpYmxlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiB0cnVlLFxuICBleGNsdWRlVmFsdWU6IGZhbHNlLFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IG51bGwsXG4gIGtlZXBBbGlnbmVkOiB0cnVlLFxuICBvbWl0UGFkZGluZzogZmFsc2UsXG5cbiAgY29tcG9uZW50OiBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCxcblxuICBnZXQ6IGdldFR5cGVDb21wb25lbnQsXG5cbiAgcmVnaXN0ZXIodHlwZXMsIGRlZmluaXRpb24gPSB7fSkge1xuICAgIHR5cGVzID0gYXNBcnJheSh0eXBlcylcbiAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLmNvbXBvbmVudChcbiAgICAgIGBEaXRvVHlwZSR7Y2FtZWxpemUodHlwZXNbMF0sIHRydWUpfWAsXG4gICAgICBkZWZpbml0aW9uXG4gICAgKVxuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgcmVnaXN0ZXJUeXBlQ29tcG9uZW50KHR5cGUsIGNvbXBvbmVudClcbiAgICB9XG4gICAgcmV0dXJuIGNvbXBvbmVudFxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuYnV0dG9uLmRpdG8tYnV0dG9uKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6dHlwZT1cInR5cGVcIlxuICA6dGl0bGU9XCJ0aXRsZVwiXG4gIDpjbGFzcz1cImJ1dHRvbkNsYXNzXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtaWY9XCJpbmZvIHx8IHdpZHRoID09PSAnZmlsbCdcIlxuICApXG4gICAgLmRpdG8tYnV0dG9uX190ZXh0XG4gICAgICBzcGFuIHt7IHRleHQgfX1cbiAgICAuZGl0by1pbmZvKFxuICAgICAgdi1pZj1cIiFsYWJlbCAmJiBpbmZvXCJcbiAgICAgIDpkYXRhLXRpcHB5LWNvbnRlbnQ9XCJpbmZvXCJcbiAgICAgIGRhdGEtdGlwcHktdGhlbWU9XCJpbmZvXCJcbiAgICApXG4gIHRlbXBsYXRlKFxuICAgIHYtZWxzZVxuICApIHt7IHRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgaGFzUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsnYnV0dG9uJywgJ3N1Ym1pdCddLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gICAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICAgIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuICAgIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIHZlcmIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZlcmJzW3RoaXMubmFtZV1cbiAgICAgIH0sXG5cbiAgICAgIGJ1dHRvbkNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52ZXJiID8gYGRpdG8tYnV0dG9uLSR7dGhpcy52ZXJifWAgOiBudWxsXG4gICAgICB9LFxuXG4gICAgICB0ZXh0OiBnZXRTY2hlbWFBY2Nlc3NvcigndGV4dCcsIHtcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgICB9KSxcblxuICAgICAgdGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQgfHwgbGFiZWxpemUodGhpcy52ZXJiKVxuICAgICAgfSxcblxuICAgICAgaW5mbzogZ2V0U2NoZW1hQWNjZXNzb3IoJ2luZm8nLCB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgfSksXG5cbiAgICAgIGNsb3NlRm9ybTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Nsb3NlRm9ybScsIHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgIC8vIEBvdmVycmlkZVxuICAgICAgZ2V0RXZlbnRzKCkge1xuICAgICAgICBjb25zdCB7IG9uRm9jdXMsIG9uQmx1ciwgb25DbGljayB9ID0gdGhpc1xuICAgICAgICByZXR1cm4geyBvbkZvY3VzLCBvbkJsdXIsIG9uQ2xpY2sgfVxuICAgICAgfSxcblxuICAgICAgYXN5bmMgc3VibWl0KG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VDb21wb25lbnQ/LnN1Ym1pdCh0aGlzLCBvcHRpb25zKVxuICAgICAgfSxcblxuICAgICAgYXN5bmMgb25DbGljaygpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5lbWl0RXZlbnQoJ2NsaWNrJywge1xuICAgICAgICAgIHBhcmVudDogdGhpcy5zY2hlbWFDb21wb25lbnRcbiAgICAgICAgfSlcbiAgICAgICAgLy8gSGF2ZSBidXR0b25zIHRoYXQgZGVmaW5lIHJlc291cmNlcyBjYWxsIGB0aGlzLnN1Ym1pdCgpYCBieSBkZWZhdWx0OlxuICAgICAgICBpZiAoXG4gICAgICAgICAgcmVzID09PSB1bmRlZmluZWQgJiYgLy8gTWVhbmluZzogZG9uJ3QgcHJldmVudCBkZWZhdWx0LlxuICAgICAgICAgIGhhc1Jlc291cmNlKHRoaXMuc2NoZW1hKVxuICAgICAgICApIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnN1Ym1pdCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWJ1dHRvbiB7XG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgJl9fdGV4dCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1pbi13aWR0aDogbWluLWNvbnRlbnQ7XG4gICAgaGVpZ2h0OiBjYWxjKDFlbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSk7XG5cbiAgICBzcGFuIHtcbiAgICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuXG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICBpbnNldDogMDtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuaW5wdXQuZGl0by1jaGVja2JveChcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgdHlwZT1cImNoZWNrYm94XCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NoZWNrYm94Jywge1xuICBuYXRpdmVGaWVsZDogdHJ1ZVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNoZWNrYm94IHtcbiAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzcztcbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNGdW5jdGlvbixcbiAgaXNQcm9taXNlLFxuICBub3JtYWxpemVEYXRhUGF0aCxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyByZWFjdGl2ZSB9IGZyb20gJ3Z1ZSdcbmltcG9ydCBMb2FkaW5nTWl4aW4gZnJvbSAnLi9Mb2FkaW5nTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0xvYWRpbmdNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIGFzeW5jRGF0YUVudHJpZXM6IHt9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYW5kbGVEYXRhU2NoZW1hKHNjaGVtYSwgbmFtZSwge1xuICAgICAgcmVzb2x2ZUNvdW50ZXIgPSAxLFxuICAgICAgLi4ubG9hZGluZ09wdGlvbnNcbiAgICB9ID0ge30pIHtcbiAgICAgIGlmICghaXNPYmplY3Qoc2NoZW1hKSkge1xuICAgICAgICBzY2hlbWEgPSB7IGRhdGE6IHNjaGVtYSB9XG4gICAgICB9XG4gICAgICBsZXQgeyBkYXRhID0gdW5kZWZpbmVkLCBkYXRhUGF0aCA9IG51bGwgfSA9IHNjaGVtYVxuICAgICAgLy8gU2VlIGlmIHRoZXJlIGlzIGFzeW5jIGRhdGEgbG9hZGluZyBhbHJlYWR5IGluIHByb2Nlc3MuXG4gICAgICBjb25zdCBhc3luY0VudHJ5ID0gKHRoaXMuYXN5bmNEYXRhRW50cmllc1tuYW1lXSB8fD0gcmVhY3RpdmUoe1xuICAgICAgICBkZXBlbmRlbmN5RnVuY3Rpb246IG51bGwsXG4gICAgICAgIHJlc29sdmVDb3VudGVyOiAwLFxuICAgICAgICByZXNvbHZlZERhdGE6IG51bGwsXG4gICAgICAgIHJlc29sdmluZzogZmFsc2VcbiAgICAgIH0pKVxuICAgICAgLy8gSWYgdGhlIGRhdGEgY2FsbGJhY2sgcHJvdmlkZWQgYSBkZXBlbmRlbmN5IGZ1bmN0aW9uIHdoZW4gaXQgd2FzIGNhbGxlZCxcbiAgICAgIC8vIGNhbCBpdCBpbiBldmVyeSBjYWxsIG9mIGBoYW5kbGVEYXRhU2NoZW1hKClgIHRvIGZvcmNlIFZ1ZSB0byBrZWVwIHRyYWNrXG4gICAgICAvLyBvZiB0aGUgYXN5bmMgZGVwZW5kZW5jaWVzLlxuICAgICAgYXN5bmNFbnRyeS5kZXBlbmRlbmN5RnVuY3Rpb24/Lih0aGlzLmNvbnRleHQpXG5cbiAgICAgIGlmIChhc3luY0VudHJ5LnJlc29sdmVDb3VudGVyID4gMCkge1xuICAgICAgICAvLyBJZiB0aGUgZGF0YSB3YXMgcmVzb2x2ZWQgYWxyZWFkeSwgcmV0dXJuIGl0IGFuZCBjbGVhciB0aGUgdmFsdWUgb25jZVxuICAgICAgICAvLyBgcmVzb2x2ZUNvdW50ZXJgIHJlYWNoZXMgemVyby4gQ291bnRpbmcgaXMgbmVlZGVkIGJlY2F1c2UgZGVwZW5kaW5nXG4gICAgICAgIC8vIG9uIHRoZSB1c2Ugb2YgZGF0YSBhbmQgcmVhY3Rpdml0eSwgbXVsdGlwbGUgY2FsbHMgdG8gdGhlIGNvbXB1dGVkXG4gICAgICAgIC8vIGdldHRlciBhcmUgdHJpZ2dlcmVkIHdoZW4gdGhlIGRhdGEgaXMgY2hhbmdpbmcuIENsZWFyaW5nIHRoZSByZXNvbHZlZFxuICAgICAgICAvLyBkYXRhIHdvcmtzIGJlY2F1c2UgVnVlIGNhY2hlcyB0aGUgcmVzdWx0IG9mIGNvbXB1dGVkIGdldHRlcnMgYW5kIG9ubHlcbiAgICAgICAgLy8gcmVldmFsdWF0ZXMgaWYgb25lIG9mIHRoZSBkZXBlbmRlbmNpZXMgY2hhbmdlZC4gVGhpcyBpcyB0byBlbnN1cmVcbiAgICAgICAgLy8gdGhhdCBhIGNhY2hlZCB2YWx1ZSBoZXJlIGRvZXNuJ3QgYmxvY2sgLyBvdmVycmlkZSByZWV2YWx1YXRpb246XG4gICAgICAgIGNvbnN0IHsgcmVzb2x2ZWREYXRhIH0gPSBhc3luY0VudHJ5XG4gICAgICAgIGlmICgtLWFzeW5jRW50cnkucmVzb2x2ZUNvdW50ZXIgPT09IDApIHtcbiAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkRGF0YSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzb2x2ZWREYXRhXG4gICAgICB9XG4gICAgICAvLyBBdm9pZCBjYWxsaW5nIHRoZSBkYXRhIGZ1bmN0aW9uIHR3aWNlOlxuICAgICAgaWYgKGFzeW5jRW50cnkucmVzb2x2aW5nKSB7XG4gICAgICAgIGRhdGEgPSBudWxsXG4gICAgICB9IGVsc2UgaWYgKGRhdGEpIHtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGF0YSkpIHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBkYXRhKHRoaXMuY29udGV4dClcbiAgICAgICAgICAvLyBJZiB0aGUgcmVzdWx0IG9mIHRoZSBkYXRhIGZ1bmN0aW9uIGlzIGFub3RoZXIgZnVuY3Rpb24sIHRoZW4gdGhlXG4gICAgICAgICAgLy8gZmlyc3QgZGF0YSBmdW5jdGlvbiBpcyB0aGVyZSB0byB0cmFjayBkZXBlbmRlbmNpZXMgYW5kIHRoZSByZWFsXG4gICAgICAgICAgLy8gZGF0YSBsb2FkaW5nIGhhcHBlbnMgaW4gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQuIEtlZXAgdHJhY2tcbiAgICAgICAgICAvLyBpdCBpbiBgZGVwZW5kZW5jeUZ1bmN0aW9uYCBzbyBpdCBjYW4gYmUgY2FsbGVkIG9uIGVhY2ggY2FsbCBvZlxuICAgICAgICAgIC8vIGBoYW5kbGVEYXRhU2NoZW1hKClgIHRvIGtlZXAgdGhlIGRlcGVuZGVuY2llcyBpbnRhY3QsIGFuZCBjYWxsXG4gICAgICAgICAgLy8gdGhlIGZ1bmN0aW9uIHRoYXQgaXQgcmV0dXJuZWQgb25jZSB0byBnZXQgdGhlIGFjdHVhbCBkYXRhOlxuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uID0gZGF0YVxuICAgICAgICAgICAgZGF0YSA9IHJlc3VsdCh0aGlzLmNvbnRleHQpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUHJvbWlzZShkYXRhKSkge1xuICAgICAgICAgIC8vIElmIHRoZSBkYXRhIGlzIGFzeW5jaHJvbm91cywgaXQgY2FuJ3QgYmUgcmV0dXJuZWQgc3RyYWlnaHQgYXdheS5cbiAgICAgICAgICAvLyBCdXQgd2UgY2FuIGNoZWF0IHVzaW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYW5kIGByZXNvbHZlZERhdGFgLFxuICAgICAgICAgIC8vIHdoaWNoIGlzIGdvaW5nIHRvIHJlY2VpdmUgdGhlIGxvYWRlZCBkYXRhIGFzeW5jaHJvbm91c2x5LFxuICAgICAgICAgIC8vIHRyaWdnZXJpbmcgYSByZWNvbXB1dGUgb2YgdGhlIGNvbXB1dGVkIHByb3BlcnR5IHRoYXQgY2FsbHNcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYC5cbiAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IHRydWVcbiAgICAgICAgICB0aGlzLnJlc29sdmVEYXRhKGRhdGEsIGxvYWRpbmdPcHRpb25zKS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA9IHJlc29sdmVDb3VudGVyXG4gICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkRGF0YSA9IGRhdGFcbiAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2aW5nID0gZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIC8vIENsZWFyIGRhdGEgdW50aWwgcHJvbWlzZSBpcyByZXNvbHZlZCBhbmQgYHJlc29sdmVkRGF0YWAgaXMgc2V0XG4gICAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhUGF0aCkge1xuICAgICAgICBkYXRhID0gZ2V0VmFsdWVBdERhdGFQYXRoKFxuICAgICAgICAgIHRoaXMucm9vdERhdGEsXG4gICAgICAgICAgbm9ybWFsaXplRGF0YVBhdGgoYCR7dGhpcy5kYXRhUGF0aH0vJHtkYXRhUGF0aH1gKVxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0sXG5cbiAgICBhc3luYyByZXNvbHZlRGF0YShsb2FkLCBsb2FkaW5nT3B0aW9ucyA9IHt9KSB7XG4gICAgICAvLyBVc2UgYSB0aW1lb3V0IHRvIGFsbG93IGFscmVhZHkgcmVzb2x2ZWQgcHJvbWlzZXMgdG8gcmV0dXJuIGRhdGEgd2l0aG91dFxuICAgICAgLy8gc2hvd2luZyBhIGxvYWRpbmcgaW5kaWNhdG9yLlxuICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucyksIDApXG4gICAgICBsZXQgZGF0YSA9IG51bGxcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCAoaXNGdW5jdGlvbihsb2FkKSA/IGxvYWQoKSA6IGxvYWQpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpXG4gICAgICB9XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpXG4gICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi9EYXRhTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgc2V0VGVtcG9yYXJ5SWQsIGlzUmVmZXJlbmNlIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc0FycmF5LFxuICBpc1N0cmluZyxcbiAgaXNGdW5jdGlvbixcbiAgbm9ybWFsaXplRGF0YVBhdGgsXG4gIGxhYmVsaXplLFxuICBkZWJvdW5jZUFzeW5jXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0RhdGFNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGFzT3B0aW9uczogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnRWYWx1ZSA9IHZhbHVlID0+XG4gICAgICAgICAgdGhpcy5yZWxhdGVcbiAgICAgICAgICAgID8gdGhpcy5oYXNPcHRpb24odmFsdWUpXG4gICAgICAgICAgICAgID8gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXNBcnJheSh0aGlzLnZhbHVlKVxuICAgICAgICAgID8gdGhpcy52YWx1ZS5tYXAoY29udmVydFZhbHVlKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUgIT09IG51bGwpXG4gICAgICAgICAgOiBjb252ZXJ0VmFsdWUodGhpcy52YWx1ZSlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIC8vIFdoZW4gcmVsYXRpbmcgYW5kIGFzIHNvb24gYXMgdGhlIG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4uLlxuICAgICAgICAgIHRoaXMucmVsYXRlICYmXG4gICAgICAgICAgdGhpcy5oYXNPcHRpb25zICYmIChcbiAgICAgICAgICAgIC8vIC4uLmlmIHRoZSB2YWx1ZSBpcyBmb3JjZWQgdG8gbnVsbCBiZWNhdXNlIGEgZGlzYXBwZWFyZWQgb3B0aW9uLi4uXG4gICAgICAgICAgICB2YWx1ZSA9PT0gbnVsbCAmJiB0aGlzLnZhbHVlICE9PSBudWxsIHx8XG4gICAgICAgICAgICAvLyAuLi5vciBpZiB0aGUgdmFsdWUgaXMgYSByZWZlcmVuY2UsIHJlcGxhY2UgaXQgd2l0aCBpdHMgb3B0aW9uXG4gICAgICAgICAgICAvLyB2YWx1ZSwgc28gdGhhdCBpdCdsbCBob2xkIGFjdHVhbCBkYXRhLCBub3QganVzdCBhIHJlZmVyZW5jZSBpZC5cbiAgICAgICAgICAgIGlzUmVmZXJlbmNlKHRoaXMudmFsdWUpXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgY29udmVydCA9IHZhbHVlID0+XG4gICAgICAgICAgdGhpcy5yZWxhdGVcbiAgICAgICAgICAgID8gdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSlcbiAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgdGhpcy52YWx1ZSA9IGlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgPyB2YWx1ZS5tYXAoY29udmVydClcbiAgICAgICAgICA6IGNvbnZlcnQodmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlbGVjdGVkT3B0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodGhpcy5zZWxlY3RlZFZhbHVlKVxuICAgIH0sXG5cbiAgICBvcHRpb25zKCkge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuaGFuZGxlRGF0YVNjaGVtYSh0aGlzLnNjaGVtYS5vcHRpb25zLCAnb3B0aW9ucycsIHtcbiAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDFcbiAgICAgIH0pID8/IFtdXG4gICAgICBpZiAoIWlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG9wdGlvbnMgZGF0YSwgc2hvdWxkIGJlIGFycmF5OiAke2RhdGF9YClcbiAgICAgIH1cbiAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgIHRoaXMuaGFzT3B0aW9ucyA9IGRhdGEubGVuZ3RoID4gMFxuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc09wdGlvbnMoZGF0YSlcbiAgICB9LFxuXG4gICAgYWN0aXZlT3B0aW9ucygpIHtcbiAgICAgIC8vIFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiBgVHlwZU11bHRpc2VsZWN0YCB0byByZXR1cm4gdGhlIGBzZWFyY2hlZE9wdGlvbnNgXG4gICAgICAvLyB3aGVuIGEgc2VhcmNoIGZpbHRlciB3YXMgYXBwbGllZC5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNcbiAgICB9LFxuXG4gICAgcmVsYXRlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVsYXRlJywge1xuICAgICAgLy8gVE9ETzogQ29udmVydCB0byBgcmVsYXRlQnk6ICdpZCdgXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAvLyBXZSBjYW5ub3QgdXNlIHNjaGVtYSBhY2Nlc3NvciBjYWxsYmFjayBtYWdpYyBmb3IgYHJlbGF0ZWAgYXMgd2UgbmVlZFxuICAgICAgLy8gdGhpcyBvdXRzaWRlIG9mIHRoZSBjb21wb25lbnQncyBsaWZlLXNwYW4sIHNlZSBgcHJvY2Vzc0RhdGEoKWAgYmVsb3cuXG4gICAgICBjYWxsYmFjazogZmFsc2VcbiAgICB9KSxcblxuICAgIGdyb3VwQnk6IGdldFNjaGVtYUFjY2Vzc29yKCdncm91cEJ5Jywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBvcHRpb25zLmxhYmVsS2V5YCAvIGBvcHRpb25MYWJlbEtleWA/XG4gICAgb3B0aW9uTGFiZWw6IGdldFNjaGVtYUFjY2Vzc29yKCdvcHRpb25zLmxhYmVsJywge1xuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldChsYWJlbCkge1xuICAgICAgICAvLyBJZiBubyBgbGFiZWxgIHdhcyBwcm92aWRlZCBidXQgdGhlIG9wdGlvbnMgYXJlIG9iamVjdHMsIGFzc3VtZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgb2YgJ2xhYmVsJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBsYWJlbCB8fFxuICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uS2V5KCdsYWJlbCcpIHx8XG4gICAgICAgICAgbnVsbFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYG9wdGlvbnMudmFsdWVLZXlgIC8gYG9wdGlvblZhbHVlS2V5YD9cbiAgICBvcHRpb25WYWx1ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ29wdGlvbnMudmFsdWUnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBGdW5jdGlvbl0sXG4gICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgZ2V0KHZhbHVlKSB7XG4gICAgICAgIC8vIElmIG5vIGBsYWJlbGAgd2FzIHByb3ZpZGVkIGJ1dCB0aGUgb3B0aW9ucyBhcmUgb2JqZWN0cywgYXNzdW1lIGFcbiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBvZiAndmFsdWUnOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHZhbHVlIHx8XG4gICAgICAgICAgdGhpcy5yZWxhdGUgJiYgJ2lkJyB8fFxuICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uS2V5KCd2YWx1ZScpIHx8XG4gICAgICAgICAgbnVsbFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBDb25zaWRlciBtb3Zpbmcgc2VhcmNoIHRvIGBvcHRpb25zLnNlYXJjaGA/XG4gICAgc2VhcmNoRmlsdGVyOiBnZXRTY2hlbWFBY2Nlc3Nvcignc2VhcmNoJywge1xuICAgICAgdHlwZTogW09iamVjdCwgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldChzZWFyY2gpIHtcbiAgICAgICAgaWYgKHNlYXJjaCkge1xuICAgICAgICAgIGNvbnN0IHsgZmlsdGVyLCBkZWJvdW5jZSB9ID0gaXNGdW5jdGlvbihzZWFyY2gpXG4gICAgICAgICAgICA/IHsgZmlsdGVyOiBzZWFyY2ggfVxuICAgICAgICAgICAgOiBzZWFyY2hcbiAgICAgICAgICByZXR1cm4gZGVib3VuY2UgPyBkZWJvdW5jZUFzeW5jKGZpbHRlciwgZGVib3VuY2UpIDogZmlsdGVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGdyb3VwQnlMYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnbGFiZWwnIDogbnVsbFxuICAgIH0sXG5cbiAgICBncm91cEJ5T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwQnkgPyAnb3B0aW9ucycgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRPcHRpb25LZXkoa2V5KSB7XG4gICAgICBjb25zdCBbb3B0aW9uXSA9IHRoaXMuYWN0aXZlT3B0aW9uc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KG9wdGlvbikgJiYga2V5IGluIG9wdGlvbiA/IGtleSA6IG51bGxcbiAgICB9LFxuXG4gICAgcHJvY2Vzc09wdGlvbnMob3B0aW9ucykge1xuICAgICAgaWYgKG9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlbGF0ZSkge1xuICAgICAgICAgIC8vIElmIGlkcyBhcmUgbWlzc2luZyBhbmQgd2Ugd2FudCB0byByZWxhdGUsIHNldCB0ZW1wb3JhcnkgaWRzLlxuICAgICAgICAgIC8vIE5PVEU6IFdlIG5lZWQgdG8gbW9kaWZ5IHRoZSBhY3R1YWwgZGF0YSwgbWFraW5nIGEgY29weSB3b24ndCB3b3JrXG4gICAgICAgICAgLy8gYXMgaXQgd29uJ3QgcHJvcGFnYXRlLlxuICAgICAgICAgIC8vIE5PVEU6IFRoaXMgb25seSBtYWtlcyBzZW5zZSBpZiB0aGUgZGF0YSBpcyBmcm9tIHRoZSBncmFwaCB0aGF0XG4gICAgICAgICAgLy8gd2UncmUgY3VycmVudGx5IGVkaXRpbmcuXG4gICAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKCEoJ2lkJyBpbiBvcHRpb24pKSB7XG4gICAgICAgICAgICAgIHNldFRlbXBvcmFyeUlkKG9wdGlvbiwgJ2lkJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZ3JvdXBCeSkge1xuICAgICAgICAgIGNvbnN0IGdyb3VwZWQgPSB7fVxuICAgICAgICAgIG9wdGlvbnMgPSBvcHRpb25zLnJlZHVjZShcbiAgICAgICAgICAgIChyZXN1bHRzLCBvcHRpb24pID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSBvcHRpb25bdGhpcy5ncm91cEJ5XVxuICAgICAgICAgICAgICBsZXQgZW50cnkgPSBncm91cGVkW2dyb3VwXVxuICAgICAgICAgICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgICAgICAgICAgZW50cnkgPSBncm91cGVkW2dyb3VwXSA9IHtcbiAgICAgICAgICAgICAgICAgIFt0aGlzLmdyb3VwQnlMYWJlbF06IGdyb3VwLFxuICAgICAgICAgICAgICAgICAgW3RoaXMuZ3JvdXBCeU9wdGlvbnNdOiBbXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXN1bHRzLnB1c2goZW50cnkpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZW50cnkub3B0aW9ucy5wdXNoKG9wdGlvbilcbiAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHNcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBbXVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG9wdGlvbnNcbiAgICB9LFxuXG4gICAgaGFzT3B0aW9uKG9wdGlvbikge1xuICAgICAgcmV0dXJuICEhdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpXG4gICAgfSxcblxuICAgIGdldE9wdGlvbkZvclZhbHVlKHZhbHVlKSB7XG4gICAgICBjb25zdCBmaW5kT3B0aW9uID0gKG9wdGlvbnMsIHZhbHVlLCBncm91cEJ5KSA9PiB7XG4gICAgICAgIC8vIFNlYXJjaCBmb3IgdGhlIG9wdGlvbiBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgYW5kIHJldHVybiB0aGVcbiAgICAgICAgLy8gd2hvbGUgb2JqZWN0LlxuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgaWYgKGdyb3VwQnkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvdW5kID0gZmluZE9wdGlvbihvcHRpb24ub3B0aW9ucywgdmFsdWUsIG51bGwpXG4gICAgICAgICAgICBpZiAoZm91bmQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZvdW5kXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvblZhbHVlXG4gICAgICAgID8gZmluZE9wdGlvbih0aGlzLmFjdGl2ZU9wdGlvbnMsIHZhbHVlLCB0aGlzLmdyb3VwQnkpXG4gICAgICAgIDogdmFsdWVcbiAgICB9LFxuXG4gICAgZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSB7XG4gICAgICBjb25zdCB7IG9wdGlvblZhbHVlIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNTdHJpbmcob3B0aW9uVmFsdWUpXG4gICAgICAgID8gb3B0aW9uPy5bb3B0aW9uVmFsdWVdXG4gICAgICAgIDogaXNGdW5jdGlvbihvcHRpb25WYWx1ZSlcbiAgICAgICAgICA/IG9wdGlvblZhbHVlLmNhbGwodGhpcywgbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgb3B0aW9uIH0pKVxuICAgICAgICAgIDogb3B0aW9uXG4gICAgfSxcblxuICAgIGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikge1xuICAgICAgY29uc3QgeyBvcHRpb25MYWJlbCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzU3RyaW5nKG9wdGlvbkxhYmVsKVxuICAgICAgICA/IG9wdGlvbj8uW29wdGlvbkxhYmVsXVxuICAgICAgICA6IGlzRnVuY3Rpb24ob3B0aW9uTGFiZWwpXG4gICAgICAgICAgPyBvcHRpb25MYWJlbC5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IGxhYmVsaXplKGAke29wdGlvbn1gKVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKSB7XG4gICAgaWYgKHNjaGVtYS5yZWxhdGUpIHtcbiAgICAgIC8vIEZvciBpbnRlcm5hbGx5IHJlbGF0aW5nIGRhdGEgKGBzY2hlbWEub3B0aW9ucy5kYXRhUGF0aGApLCB3ZSBuZWVkIHRvXG4gICAgICAvLyBwcm9jZXNzIGJvdGggdGhlIG9wdGlvbnMgKGZvciAnI3JlZicpIGFuZCB0aGUgdmFsdWUgKCcjaWQnKS5cbiAgICAgIC8vIFNlZSBgRGF0YU1peGluLmhhbmRsZURhdGFTY2hlbWEoKWA6XG4gICAgICBjb25zdCBwYXRoID0gc2NoZW1hLm9wdGlvbnM/LmRhdGFQYXRoXG4gICAgICBjb25zdCByZWxhdGVkRGF0YVBhdGggPSBwYXRoXG4gICAgICAgID8gbm9ybWFsaXplRGF0YVBhdGgoYCR7ZGF0YVBhdGh9LyR7cGF0aH1gKVxuICAgICAgICA6IG51bGxcbiAgICAgIGdyYXBoLmFkZFJlbGF0aW9uKGRhdGFQYXRoLCByZWxhdGVkRGF0YVBhdGgsIHNjaGVtYSlcbiAgICAgIGlmIChyZWxhdGVkRGF0YVBhdGgpIHtcbiAgICAgICAgZ3JhcGguc2V0U291cmNlUmVsYXRlZChyZWxhdGVkRGF0YVBhdGgpXG4gICAgICB9XG4gICAgICAvLyBDb252ZXJ0IHJlbGF0aW5nIG9iamVjdHMgdG8gYSBzaGFsbG93IGNvcHkgd2l0aCBvbmx5IHRoZSBpZCBsZWZ0LlxuICAgICAgLy8gVE9ETzogQ29udmVydCB0byB1c2luZyBgcmVsYXRlQnlgOlxuICAgICAgY29uc3QgcHJvY2Vzc1JlbGF0ZSA9IHZhbHVlID0+ICh2YWx1ZSA/IHsgaWQ6IHZhbHVlLmlkIH0gOiB2YWx1ZSlcbiAgICAgIC8vIFNlbGVjdGVkIG9wdGlvbnMgY2FuIGJlIGJvdGggb2JqZWN0cyAmIGFycmF5cywgZS5nLiAnY2hlY2tib3hlcyc6XG4gICAgICB2YWx1ZSA9IGlzQXJyYXkodmFsdWUpXG4gICAgICAgID8gdmFsdWUubWFwKHByb2Nlc3NSZWxhdGUpXG4gICAgICAgIDogcHJvY2Vzc1JlbGF0ZSh2YWx1ZSlcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG51bC5kaXRvLWNoZWNrYm94ZXMoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuKVxuICBsaShcbiAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgKVxuICAgIGxhYmVsXG4gICAgICBpbnB1dC5kaXRvLWNoZWNrYm94KFxuICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjaGVja2JveGVzJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICBkZWZhdWx0VmFsdWU6IFtdLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUpXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IG9wdGlvbiB8fCBbXVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNoZWNrYm94ZXMge1xuICBsYWJlbCB7XG4gICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzcztcbiAgfVxuXG4gIC5kaXRvLWNoZWNrYm94IHtcbiAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY29kZShcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJjb2RlXCJcbiAgOnN0eWxlPVwic3R5bGVcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgQ29kZUZsYXNrIGZyb20gJ2NvZGVmbGFzaydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb2RlJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG4gIGtlZXBBbGlnbmVkOiBmYWxzZSxcblxuICBjb21wdXRlZDoge1xuICAgIGxpbmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxpbmVzIHx8IDNcbiAgICB9LFxuXG4gICAgc3R5bGUoKSB7XG4gICAgICByZXR1cm4gYGhlaWdodDogY2FsYygke3RoaXMubGluZXN9ZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpYFxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIGNvbnN0IGZsYXNrID0gbmV3IENvZGVGbGFzayh0aGlzLiRyZWZzLmNvZGUsIHtcbiAgICAgIGxhbmd1YWdlOiB0aGlzLnNjaGVtYS5sYW5ndWFnZSB8fCAnamF2YXNjcmlwdCcsXG4gICAgICB0YWJTaXplOiB0aGlzLnNjaGVtYS5pbmRlbnRTaXplIHx8IDIsXG4gICAgICBsaW5lTnVtYmVyczogZmFsc2VcbiAgICB9KVxuXG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZVxuICAgIGxldCBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVVwZGF0ZSA9IGZhbHNlXG5cbiAgICBjb25zdCBvbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5mb2N1c2VkICYmIGNoYW5nZWQpIHtcbiAgICAgICAgY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9uRm9jdXMgPSAoKSA9PiB0aGlzLm9uRm9jdXMoKVxuXG4gICAgY29uc3Qgb25CbHVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5vbkJsdXIoKVxuICAgICAgb25DaGFuZ2UoKVxuICAgIH1cblxuICAgIHRoaXMuZG9tT24odGhpcy4kcmVmcy5jb2RlLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyksIHtcbiAgICAgIGZvY3VzOiBvbkZvY3VzLFxuICAgICAgYmx1cjogb25CbHVyXG4gICAgfSlcblxuICAgIGNvbnN0IHNldENvZGUgPSBjb2RlID0+IHtcbiAgICAgIGlmIChjb2RlICE9PSBmbGFzay5jb2RlKSB7XG4gICAgICAgIGlnbm9yZVVwZGF0ZSA9IHRydWVcbiAgICAgICAgZmxhc2sudXBkYXRlQ29kZShjb2RlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gdHJ1ZVxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgICAgY2hhbmdlZCA9IHRydWVcbiAgICAgICAgb25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZsYXNrLm9uVXBkYXRlKHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVVcGRhdGUpIHtcbiAgICAgICAgaWdub3JlVXBkYXRlID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFZhbHVlKHZhbHVlKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLiR3YXRjaCgndmFsdWUnLCB2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlV2F0Y2gpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0Q29kZSh2YWx1ZSB8fCAnJylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgc2V0Q29kZSh0aGlzLnZhbHVlIHx8ICcnKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpPy5mb2N1cygpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY29kZSB7XG4gIEBleHRlbmQgJWlucHV0O1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgLy8gRm9yIHByb3BlciBzaXppbmcgb2YgY29udGVudCBhbG9uZyB3aXRoIDpzdHlsZT1cInN0eWxlXCIgc2V0dGluZyBhYm92ZSxcbiAgLy8gZm9yIHByb3BlciBsaW5lLWhlaWdodCBjYWxjdWxhdGlvbi5cbiAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG5cbiAgLmNvZGVmbGFzayB7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAvLyBJZ25vcmUgdGhlIHBhcmVudCBwYWRkaW5nIGRlZmluZWQgYWJvdmUgd2hpY2ggaXMgb25seSBuZWVkZWQgdG8gc2V0XG4gICAgLy8gdGhlIGRlc2lyZWQgaGVpZ2h0IHdpdGggOnN0eWxlPVwic3R5bGVcIi5cbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgfVxuXG4gIC5jb2RlZmxhc2tfX3RleHRhcmVhLFxuICAuY29kZWZsYXNrX19wcmUge1xuICAgIC8vIFVzZSBzYW1lIHBhZGRpbmcgYXMgLmRpdG8tY29kZVxuICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuICB9XG5cbiAgLmNvZGVmbGFza19fdGV4dGFyZWEsXG4gIC5jb2RlZmxhc2tfX2NvZGUsXG4gIC5jb2RlZmxhc2tfX2xpbmVzIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm87XG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUpO1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7XG4gIH1cblxuICAuY29kZWZsYXNrX19saW5lcyB7XG4gICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuVHJpZ2dlci5kaXRvLWNvbG9yKFxuICB2LW1vZGVsOnNob3c9XCJzaG93UG9wdXBcIlxuICB0cmlnZ2VyPVwiY2xpY2tcIlxuKVxuICB0ZW1wbGF0ZSgjdHJpZ2dlcilcbiAgICAuZGl0by1pbnB1dCg6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIilcbiAgICAgIGlucHV0KFxuICAgICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB2LW1vZGVsPVwiaGV4VmFsdWVcIlxuICAgICAgICB0eXBlPVwiaW5wdXRcIlxuICAgICAgICBzaXplPVwiOFwiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgKVxuICAgICAgLmRpdG8tY29sb3ItcHJldmlldy5kaXRvLWluaGVyaXQtZm9jdXMoXG4gICAgICAgIHYtaWY9XCJ2YWx1ZVwiXG4gICAgICApXG4gICAgICAgIGRpdig6c3R5bGU9XCJ7IGJhY2tncm91bmQ6IGAjJHtoZXhWYWx1ZSB8fCAnMDAwMDAwMDAnfWAgfVwiKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgICAgKVxuICB0ZW1wbGF0ZSgjcG9wdXApXG4gICAgU2tldGNoUGlja2VyLmRpdG8tY29sb3ItcGlja2VyKFxuICAgICAgdi1tb2RlbD1cImNvbG9yVmFsdWVcIlxuICAgICAgOmRpc2FibGVBbHBoYT1cIiFhbHBoYVwiXG4gICAgICA6ZGlzYWJsZUZpZWxkcz1cIiFpbnB1dHNcIlxuICAgICAgOnByZXNldENvbG9ycz1cInByZXNldHNcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgdGlueWNvbG9yIGZyb20gJ3Rpbnljb2xvcjInXG5pbXBvcnQgeyBTa2V0Y2ggYXMgU2tldGNoUGlja2VyIH0gZnJvbSAnQGxrNzcvdnVlMy1jb2xvcidcbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IFRyaWdnZXIgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29sb3InLCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgU2tldGNoUGlja2VyIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd1BvcHVwOiBmYWxzZSxcbiAgICAgIGNvbnZlcnRlZEhleFZhbHVlOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY29sb3JWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSB8fCB7fVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMuY29sb3JGb3JtYXRcbiAgICAgICAgY29uc3Qga2V5ID0gKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIE5PVEU6IHZ1ZTMtY29sb3IgY2FsbHMgaXQgJ2hleCcsIHdoaWxlIHRpbnljb2xvciBjYWxscyBpdCAnaGV4NidcbiAgICAgICAgICAgIGhleDogdmFsdWU/LmEgPCAxID8gJ2hleDgnIDogJ2hleCcsXG4gICAgICAgICAgICByZ2I6ICdyZ2JhJ1xuICAgICAgICAgIH1bZm9ybWF0XSB8fFxuICAgICAgICAgIGZvcm1hdFxuICAgICAgICApXG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aW55Y29sb3IodmFsdWUpLnRvU3RyaW5nKGZvcm1hdClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaGV4VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IG51bGxcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5mb2N1c2VkKSB7XG4gICAgICAgICAgY29uc3QgY29sb3IgPSB0aW55Y29sb3IodGhpcy52YWx1ZSlcbiAgICAgICAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSBjb2xvclxuICAgICAgICAgICAgICAudG9TdHJpbmcoY29sb3IuZ2V0QWxwaGEoKSA8IDEgPyAnaGV4OCcgOiAnaGV4NicpXG4gICAgICAgICAgICAgIC5zbGljZSgxKVxuICAgICAgICAgICAgICAudG9VcHBlckNhc2UoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSB2YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBgZm9ybWF0YCBjbGFzaGVzIHdpdGggVHlwZU1peGluLmZvcm1hdCgpYCwgd2hpY2ggc2hhbGwgYmUgcmVuYW1lZFxuICAgIC8vIHNvb24gdG8gYGZvcm1hdFZhbHVlKClgLiBSZW5hbWUgYGNvbG9yRm9ybWF0YCBiYWNrIHRvIGBmb3JtYXRgIGFmdGVyLlxuICAgIGNvbG9yRm9ybWF0OiBnZXRTY2hlbWFBY2Nlc3NvcignZm9ybWF0Jywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2hleCdcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0FscGhhYD9cbiAgICBhbHBoYTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2FscGhhJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYHNob3dJbnB1dHNgP1xuICAgIGlucHV0czogZ2V0U2NoZW1hQWNjZXNzb3IoJ2lucHV0cycsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSksXG5cbiAgICBwcmVzZXRzOiBnZXRTY2hlbWFBY2Nlc3NvcigncHJlc2V0cycsIHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZGVmYXVsdDogW1xuICAgICAgICAnI2ZmZmZmZicsXG4gICAgICAgICcjYzNjM2MzJyxcbiAgICAgICAgJyM3ZjdmN2YnLFxuICAgICAgICAnIzAwMDAwMCcsXG4gICAgICAgICcjODgwMDE1JyxcbiAgICAgICAgJyNlZDFjMjQnLFxuICAgICAgICAnI2ZmN2YyNycsXG4gICAgICAgICcjZmZmMjAwJyxcblxuICAgICAgICAnIzIyYjE0YycsXG4gICAgICAgICcjMDBhMmU4JyxcbiAgICAgICAgJyMzZjQ4Y2MnLFxuICAgICAgICAnI2EzNDlhNCcsXG4gICAgICAgICcjYjk3YTU3JyxcbiAgICAgICAgJyNmZmFlYzknLFxuICAgICAgICAnI2ZmYzkwZScsXG4gICAgICAgICcjMDAwMDAwMDAnXG4gICAgICBdXG4gICAgfSlcbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGZvY3VzZWQoZm9jdXNlZCkge1xuICAgICAgaWYgKCFmb2N1c2VkICYmIHRoaXMuY29udmVydGVkSGV4VmFsdWUpIHtcbiAgICAgICAgY29uc3QgY29sb3IgPSB0aW55Y29sb3IoYCMke3RoaXMuY29udmVydGVkSGV4VmFsdWV9YClcbiAgICAgICAgaWYgKGNvbG9yPy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gY29sb3IudG9TdHJpbmcodGhpcy5jb2xvckZvcm1hdClcbiAgICAgICAgICAvLyBUT0RPOiBFbWl0ICdpbnB1dCcgaGVyZSBpbnN0ZWFkLCBhbmQgJ2NoYW5nZScgaW4gYmx1ciwgbGlrZSBvdGhlcnMuXG4gICAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4kY29sb3Itc3dhdGNoLXdpZHRoOiAkcGF0dGVybi10cmFuc3BhcmVuY3ktc2l6ZTtcbiRjb2xvci1zd2F0Y2gtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtICRib3JkZXItd2lkdGg7XG5cbi5kaXRvLWNvbG9yIHtcbiAgLmRpdG8taW5wdXQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgIGlucHV0IHtcbiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgICAgcGFkZGluZy1yaWdodDogJGNvbG9yLXN3YXRjaC13aWR0aDtcbiAgICB9XG4gIH1cblxuICAuZGl0by1idXR0b24tY2xlYXIge1xuICAgIG1hcmdpbi1yaWdodDogJGNvbG9yLXN3YXRjaC13aWR0aDtcbiAgfVxuXG4gIC5kaXRvLWNvbG9yLXBpY2tlciB7XG4gICAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luO1xuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3c7XG4gIH1cblxuICAuZGl0by1jb2xvci1wcmV2aWV3IHtcbiAgICBiYWNrZ3JvdW5kOiAkcGF0dGVybi10cmFuc3BhcmVuY3k7XG4gICAgYm9yZGVyLWxlZnQ6ICRib3JkZXItc3R5bGU7XG5cbiAgICAmLFxuICAgIGRpdiB7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB3aWR0aDogJGNvbG9yLXN3YXRjaC13aWR0aDtcbiAgICAgIHRvcDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgYm90dG9tOiAwO1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRjb2xvci1zd2F0Y2gtcmFkaXVzO1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRjb2xvci1zd2F0Y2gtcmFkaXVzO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5jb21wb25lbnQoXG4gIDppcz1cInNjaGVtYS5jb21wb25lbnRcIlxuICB2LWJpbmQ9XCIkcHJvcHNcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbi8vIFRoaXMgaXMgdGhlIGdlbmVyYWwgcHVycG9zZSAnY29tcG9uZW50JyB0eXBlLCB3aGljaCBjYW4gcmVzb2x2ZSB0byBhbnkgY3VzdG9tXG4vLyBjb21wb25lbnQgdGhyb3VnaCBgc2NoZW1hLmNvbXBvbmVudGAsIHNlZSBgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudCgpYC4gVGhpc1xuLy8gY2FuIGJlIHVzZWQgdG8gbmVzdCBhcmJpdHJhcnkgdnVlIGNvbXBvbmVudHMgaW4gc2NoZW1hOlxuLy8ge1xuLy8gICB0eXBlOiAnY29tcG9uZW50Jyxcbi8vICAgY29tcG9uZW50OiBpbXBvcnQoJy4vY29tcG9uZW50Jylcbi8vIH1cblxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjb21wb25lbnQnLCB7XG4gIC8vIE92ZXJyaWRlIHRoZSBzdGFuZGFyZCBgZGVmYXVsdFZhbHVlOiBudWxsYCB0byBub3Qgc2V0IGFueSBkYXRhIGZvciBjdXN0b21cbiAgLy8gY29tcG9uZW50cywgdW5sZXNzIHRoZXkgcHJvdmlkZSBhIGRlZmF1bHQgdmFsdWUuXG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBrZWVwQWxpZ25lZDogZmFsc2UsXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+ICEoJ2RlZmF1bHQnIGluIHNjaGVtYSksXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShhcGksIHNjaGVtYSkge1xuICAgIGF3YWl0IHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLy8tIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIHRyaWdnZXIgZXZhbHVhdGlvbiBvZiBgdmFsdWVgIHRoYXQgZG9zZSBub3Rcbi8vLSBpbnZvbHZlIGFjdHVhbGx5IHJlbmRlcmluZyBpdCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IHZpc2libGUuXG5pbnB1dC5kaXRvLXRleHQuZGl0by1pbnB1dChcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgOm5hbWU9XCJuYW1lXCJcbiAgdHlwZT1cInRleHRcIlxuICA6dmFsdWU9XCJ2YWx1ZVwiXG4gIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgOnJlYWRvbmx5PVwidHJ1ZVwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IERhdGFNaXhpbiBmcm9tICcuLi9taXhpbnMvRGF0YU1peGluLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgWydjb21wdXRlZCcsICdkYXRhJywgJ2hpZGRlbiddLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgbWl4aW5zOiBbRGF0YU1peGluXSxcblxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICAgIGRlZmF1bHRWaXNpYmxlOiBmYWxzZSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICB2YWx1ZToge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHRoaXNcbiAgICAgICAgICBpZiAoc2NoZW1hLmRhdGEgfHwgc2NoZW1hLmRhdGFQYXRoKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaGFuZGxlRGF0YVNjaGVtYShzY2hlbWEsICdzY2hlbWEnLCB7XG4gICAgICAgICAgICAgIC8vIE1vZGlmeWluZyBgdGhpcy5kYXRhYCBiZWxvdyB0cmlnZ2VycyBhbm90aGVyIGNhbGwgb2YgdGhlXG4gICAgICAgICAgICAgIC8vIGB2YWx1ZWAgZ2V0dGVyLCBzbyB1c2UgYSB2YWx1ZSBvZiAyIGZvciBgcmVzb2x2ZUNvdW50ZXJgIHRvXG4gICAgICAgICAgICAgIC8vIHJldHVybiB0aGUgcmVzb2x2ZWQgZGF0YSB0d2ljZS5cbiAgICAgICAgICAgICAgcmVzb2x2ZUNvdW50ZXI6IDJcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRoaXMuZGF0YVt0aGlzLm5hbWVdID0gdmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFR5cGVNaXhpbi5jb21wdXRlZC52YWx1ZS5nZXQuY2FsbCh0aGlzKVxuICAgICAgICB9LFxuXG4gICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgIFR5cGVNaXhpbi5jb21wdXRlZC52YWx1ZS5zZXQuY2FsbCh0aGlzLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZGF0ZVxuICBjb21wb25lbnQoXG4gICAgOmlzPVwiZ2V0Q29tcG9uZW50KHR5cGUpXCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgdi1tb2RlbD1cImRhdGVWYWx1ZVwiXG4gICAgOmxvY2FsZT1cImxvY2FsZVwiXG4gICAgOmRhdGVGb3JtYXQ9XCJ7IC4uLmFwaS5mb3JtYXRzLmRhdGUsIC4uLmRhdGVGb3JtYXQgfVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCB7IGlzRGF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbJ2RhdGUnLCAnZGF0ZXRpbWUnLCAndGltZSddLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgY29tcG9uZW50czogeyBEYXRlUGlja2VyLCBUaW1lUGlja2VyLCBEYXRlVGltZVBpY2tlciB9LFxuICAgIC8vIFRPRE86IFRoaXMgaXMgb25seSBoZXJlIHNvIHdlIGdldCBwbGFjZWhvbGRlciBhZGRlZC4gQ29tZSB1cCB3aXRoIGFcbiAgICAvLyBiZXR0ZXIgd2F5IHRvIHN1cHBvcnQgYXR0cmlidXRlcyBwZXIgY29tcG9uZW50IChhIGxpc3Qgb2YgYWN0dWFsbHlcbiAgICAvLyBzdXBwb3J0ZWQgYXR0cmlidXRlcylcbiAgICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgZGF0ZVZhbHVlOiB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzXG4gICAgICAgICAgcmV0dXJuIHZhbHVlID8gbmV3IERhdGUodmFsdWUpIDogdmFsdWVcbiAgICAgICAgfSxcblxuICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgZGF0ZUZvcm1hdDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RhdGVGb3JtYXQnLCB7XG4gICAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgZ2V0Q29tcG9uZW50KHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRlOiAnZGF0ZS1waWNrZXInLFxuICAgICAgICAgIHRpbWU6ICd0aW1lLXBpY2tlcicsXG4gICAgICAgICAgZGF0ZXRpbWU6ICdkYXRlLXRpbWUtcGlja2VyJ1xuICAgICAgICB9W3R5cGVdXG4gICAgICB9XG4gICAgfSxcblxuICAgIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNEYXRlKHZhbHVlKSA/IHZhbHVlLnRvSVNPU3RyaW5nKCkgOiB2YWx1ZVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFF1ZXJ5KHF1ZXJ5KSB7XG4gIGNvbnN0IGVudHJpZXMgPSBxdWVyeVxuICAgID8gaXNBcnJheShxdWVyeSlcbiAgICAgID8gcXVlcnlcbiAgICAgIDogT2JqZWN0LmVudHJpZXMocXVlcnkpXG4gICAgOiBbXVxuICByZXR1cm4gKFxuICAgIG5ldyBVUkxTZWFyY2hQYXJhbXMoXG4gICAgICAvLyBFeHBhbmQgYXJyYXkgdmFsdWVzIGludG8gbXVsdGlwbGUgZW50cmllcyB1bmRlciB0aGUgc2FtZSBrZXksIHNvXG4gICAgICAvLyBgZm9ybWF0UXVlcnkoeyBmb286IFsxLCAyXSwgYmFyOiAzIH0pYCA9PiAnZm9vPTEmZm9vPTImYmFyPTMnLlxuICAgICAgZW50cmllcy5yZWR1Y2UoXG4gICAgICAgIChlbnRyaWVzLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiBhc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksIHZhbF0pXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBlbnRyaWVzXG4gICAgICAgIH0sXG4gICAgICAgIFtdXG4gICAgICApXG4gICAgKVxuICAgICAgLnRvU3RyaW5nKClcbiAgICAgIC8vIGRlY29kZSBhbGwgdGhlc2UgZW5jb2RlZCBjaGFyYWN0ZXJzIHRvIGhhdmUgdGhlIHNhbWUgYmVoYXZpb3IgYXNcbiAgICAgIC8vIHZ1ZS1yb3V0ZXIncyBvd24gcXVlcnkgZW5jb2RpbmcuXG4gICAgICAucmVwbGFjZUFsbCgvJSg/OjIxfDI0fDI4fDI5fDJDfDJGfDNBfDNCfDNEfDNGfDQwKS9nLCBkZWNvZGVVUklDb21wb25lbnQpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VSb3V0ZSh7IHBhdGgsIHF1ZXJ5LCBoYXNoIH0pIHtcbiAgLy8gUHJlc2VydmUgYGhpc3Rvcnkuc3RhdGVgLCBzZWU6XG4gIC8vIGh0dHBzOi8vcm91dGVyLnZ1ZWpzLm9yZy9ndWlkZS9taWdyYXRpb24vI3VzYWdlLW9mLWhpc3Rvcnktc3RhdGVcbiAgaGlzdG9yeS5yZXBsYWNlU3RhdGUoXG4gICAgaGlzdG9yeS5zdGF0ZSxcbiAgICBudWxsLFxuICAgIGAke1xuICAgICAgbG9jYXRpb24ub3JpZ2luXG4gICAgfSR7XG4gICAgICBwYXRoID8/IGxvY2F0aW9uLnBhdGhuYW1lXG4gICAgfT8ke1xuICAgICAgcXVlcnkgPyBmb3JtYXRRdWVyeShxdWVyeSkgOiBsb2NhdGlvbi5zZWFyY2guc2xpY2UoMSlcbiAgICB9JHtcbiAgICAgIGhhc2ggPz8gbG9jYXRpb24uaGFzaFxuICAgIH1gXG4gIClcbn1cbiIsImltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUmVzb3VyY2VNaXhpbiBmcm9tICcuL1Jlc291cmNlTWl4aW4uanMnXG5pbXBvcnQgU2NoZW1hUGFyZW50TWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IsIGdldFN0b3JlQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyByZXBsYWNlUm91dGUgfSBmcm9tICcuLi91dGlscy9yb3V0ZS5qcydcbmltcG9ydCB7XG4gIHByb2Nlc3NSb3V0ZVNjaGVtYSxcbiAgcHJvY2Vzc0Zvcm1zLFxuICBnZXROYW1lZFNjaGVtYXMsXG4gIGdldEJ1dHRvblNjaGVtYXMsXG4gIGhhc0Zvcm1TY2hlbWEsXG4gIGdldEZvcm1TY2hlbWFzLFxuICBnZXRWaWV3U2NoZW1hLFxuICBpc0NvbXBhY3QsXG4gIGlzSW5saW5lZCxcbiAgaXNPYmplY3RTb3VyY2UsXG4gIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNTdHJpbmcsXG4gIGlzQXJyYXksXG4gIGlzTnVtYmVyLFxuICBlcXVhbHMsXG4gIHBhcnNlRGF0YVBhdGgsXG4gIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1Jlc291cmNlTWl4aW4sIFNjaGVtYVBhcmVudE1peGluXSxcblxuICBkZWZhdWx0VmFsdWUoc2NoZW1hKSB7XG4gICAgcmV0dXJuIGlzTGlzdFNvdXJjZShzY2hlbWEpID8gW10gOiBudWxsXG4gIH0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB3cmFwcGVkUHJpbWl0aXZlczogbnVsbCxcbiAgICAgIHVud3JhcHBpbmdQcmltaXRpdmVzOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGlzT2JqZWN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgaXNMaXN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzTGlzdFNvdXJjZSh0aGlzLnR5cGUpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmhhc0RhdGEoKVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZhbHVlXG4gICAgfSxcblxuICAgIGlzUmVhZHkoKSB7XG4gICAgICAvLyBMaXN0cyB0aGF0IGhhdmUgbm8gZGF0YSBhbmQgbm8gYXNzb2NpYXRlZCByZXNvdXJjZSBzaG91bGQgc3RpbGwgcmVuZGVyLFxuICAgICAgLy8gYXMgdGhleSBtYXkgYmUgZ2V0dGluZyB0aGVpciBkYXRhIGVsc2V3aGVyZSwgZS5nLiBgY29tcHV0ZSgpYC5cbiAgICAgIHJldHVybiB0aGlzLmhhc0RhdGEgfHwgIXRoaXMucHJvdmlkZXNEYXRhXG4gICAgfSxcblxuICAgIGlzSW5WaWV3KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52aWV3Q29tcG9uZW50XG4gICAgfSxcblxuICAgIHdyYXBQcmltaXRpdmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLndyYXBQcmltaXRpdmVzXG4gICAgfSxcblxuICAgIGxpc3REYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy52YWx1ZVxuICAgICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICAgIC8vIENvbnZlcnQgdG8gbGlzdCBhcnJheS5cbiAgICAgICAgICBkYXRhID0gZGF0YSAhPSBudWxsID8gW2RhdGFdIDogW11cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIGdldHMgaW5oZXJpdGVkIGZyb20gcGFyZW50LCB1bndyYXBwaW5nIGlzIG5vdCBoYXBwZW5pbmdcbiAgICAgICAgICAvLyBhdCB0aGUgcm9vdCBpbiBgc2V0RGF0YSgpYCwgYnV0IGhlcmUgaW5zdGVhZC5cbiAgICAgICAgICBkYXRhID0gdGhpcy51bndyYXBMaXN0RGF0YShkYXRhKSB8fCBkYXRhXG4gICAgICAgIH1cbiAgICAgICAgZGF0YSB8fD0gW11cbiAgICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcyB9ID0gdGhpc1xuICAgICAgICBpZiAod3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgICBpZiAodGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcykge1xuICAgICAgICAgICAgLy8gV2UncmUgZG9uZSB1bndyYXBwaW5nIG9uY2UgYGxpc3REYXRhYCBpcyByZWV2YWx1YXRlZCwgc28gc2V0XG4gICAgICAgICAgICAvLyB0aGlzIHRvIGBmYWxzZWAgYWdhaW4uIFNlZSBgd3JhcHBlZFByaW1pdGl2ZXNgIHdhdGNoZXIgYWJvdmUuXG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDb252ZXJ0IGRhdGEgdG8gYSBsaXN0IG9mIHdyYXBwZWQgcHJpbWl0aXZlcywgYW5kIHJldHVybiBpdC5cbiAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgdGhpcy53cmFwcGVkUHJpbWl0aXZlcyA9IGRhdGEubWFwKHZhbHVlID0+ICh7XG4gICAgICAgICAgICAgIFt3cmFwUHJpbWl0aXZlc106IHZhbHVlXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMud3JhcHBlZFByaW1pdGl2ZXNcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgfSxcblxuICAgICAgc2V0KGRhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMud3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgICB0aGlzLndyYXBwZWRQcmltaXRpdmVzID0gZGF0YVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmlzT2JqZWN0U291cmNlXG4gICAgICAgICAgICA/IGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgID8gZGF0YVswXVxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIDogZGF0YVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG9iamVjdERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgLy8gQWx3YXlzIGdvIHRocm91Z2ggYGxpc3REYXRhYCBpbnRlcm5hbGx5LCB3aGljaCBkb2VzIGFsbCB0aGVcbiAgICAgICAgLy8gcHJvY2Vzc2luZyBvZiBgd3JhcFByaW1pdGl2ZXNgLCBldGMuXG4gICAgICAgIHJldHVybiB0aGlzLmxpc3REYXRhWzBdIHx8IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIHRoaXMubGlzdERhdGEgPSBkYXRhID8gW2RhdGFdIDogW11cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgLy8gVGhlIHNvdXJjZVNjaGVtYSBvZiBhIGxpc3QgaXMgdGhlIGxpc3QncyBzY2hlbWEgaXRzZWxmLlxuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hXG4gICAgfSxcblxuICAgIHBhdGgoKSB7XG4gICAgICAvLyBUaGlzIGlzIHVzZWQgaW4gVHlwZUxpc3QgZm9yIERpdG9Gb3JtQ2hvb3Nlci5cbiAgICAgIHJldHVybiB0aGlzLnJvdXRlQ29tcG9uZW50LmdldENoaWxkUGF0aCh0aGlzLnNjaGVtYS5wYXRoKVxuICAgIH0sXG5cbiAgICBkZWZhdWx0UXVlcnkoKSB7XG4gICAgICBjb25zdCB7IGRlZmF1bHRPcmRlcjogb3JkZXIgfSA9IHRoaXNcbiAgICAgIHJldHVybiBvcmRlciA/IHsgb3JkZXIgfSA6IHt9XG4gICAgfSxcblxuICAgIHF1ZXJ5OiBnZXRTdG9yZUFjY2Vzc29yKCdxdWVyeScsIHtcbiAgICAgIGdldChxdWVyeSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnRoaXMuZGVmYXVsdFF1ZXJ5LFxuICAgICAgICAgIC4uLnF1ZXJ5XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIHNldChxdWVyeSkge1xuICAgICAgICAvLyBBbHdheXMga2VlcCB0aGUgZGlzcGxheWVkIHF1ZXJ5IHBhcmFtZXRlcnMgaW4gc3luYyB3aXRoIHRoZSBzdG9yZWRcbiAgICAgICAgLy8gb25lcy4gVXNlIHNjb3BlIGFuZCBwYWdlIGZyb20gdGhlIGxpc3Qgc2NoZW1hIGFzIGRlZmF1bHRzLCBidXQgYWxsb3dcbiAgICAgICAgLy8gdGhlIHJvdXRlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gb3ZlcnJpZGUgdGhlbS5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHNjb3BlID0gdGhpcy5kZWZhdWx0U2NvcGU/Lm5hbWUsXG4gICAgICAgICAgcGFnZSA9IHRoaXMuc2NoZW1hLnBhZ2VcbiAgICAgICAgfSA9IHRoaXMucXVlcnlcbiAgICAgICAgLy8gUHJlc2VydmUgLyBtZXJnZSBjdXJyZW50bHkgc3RvcmVkIHZhbHVlcy5cbiAgICAgICAgcXVlcnkgPSB7XG4gICAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgICAuLi4oc2NvcGUgIT0gbnVsbCAmJiB7IHNjb3BlIH0pLFxuICAgICAgICAgIC4uLihwYWdlICE9IG51bGwgJiYgeyBwYWdlIH0pLFxuICAgICAgICAgIC4uLnF1ZXJ5XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlcXVhbHMocXVlcnksIHRoaXMuJHJvdXRlLnF1ZXJ5KSkge1xuICAgICAgICAgIC8vIENoYW5nZSB0aGUgcm91dGUgcXVlcnkgcGFyYW1ldGVycywgYnV0IGRvbid0IHRyaWdnZXIgYSByb3V0ZVxuICAgICAgICAgIC8vIGNoYW5nZSwgYXMgdGhhdCB3b3VsZCBjYXVzZSB0aGUgbGlzdCB0byByZWxvYWQuXG4gICAgICAgICAgcmVwbGFjZVJvdXRlKHsgcXVlcnkgfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcXVlcnkgLy8gTGV0IGdldFN0b3JlQWNjZXNzb3IoKSBkbyB0aGUgYWN0dWFsIHNldHRpbmdcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHRvdGFsOiBnZXRTdG9yZUFjY2Vzc29yKCd0b3RhbCcpLFxuXG4gICAgY29sdW1ucygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEuY29sdW1ucylcbiAgICB9LFxuXG4gICAgc2NvcGVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5zY29wZXMpXG4gICAgfSxcblxuICAgIGRlZmF1bHRTY29wZSgpIHtcbiAgICAgIGxldCBmaXJzdCA9IG51bGxcbiAgICAgIGlmICh0aGlzLnNjb3Blcykge1xuICAgICAgICBmb3IgKGNvbnN0IHNjb3BlIG9mIE9iamVjdC52YWx1ZXModGhpcy5zY29wZXMpKSB7XG4gICAgICAgICAgaWYgKHNjb3BlLmRlZmF1bHRTY29wZSkge1xuICAgICAgICAgICAgcmV0dXJuIHNjb3BlXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgICAgIGZpcnN0ID0gc2NvcGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmaXJzdFxuICAgIH0sXG5cbiAgICBkZWZhdWx0T3JkZXIoKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5zKSB7XG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIE9iamVjdC52YWx1ZXModGhpcy5jb2x1bW5zKSkge1xuICAgICAgICAgIGNvbnN0IHsgZGVmYXVsdFNvcnQgfSA9IGNvbHVtblxuICAgICAgICAgIGlmIChkZWZhdWx0U29ydCkge1xuICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gaXNTdHJpbmcoZGVmYXVsdFNvcnQpID8gZGVmYXVsdFNvcnQgOiAnYXNjJ1xuICAgICAgICAgICAgcmV0dXJuIGAke2NvbHVtbi5uYW1lfSAke2RpcmVjdGlvbn1gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICBuZXN0ZWRNZXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5tZXRhLFxuICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZ2V0Rm9ybVNjaGVtYXModGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dCkpXG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgdGhlIGxpbmtlZCB2aWV3IHNjaGVtYSBpZiB0aGlzIHNvdXJjZSBlZGl0cyBpdCBpdHMgaXRlbXMgdGhyb3VnaFxuICAgIC8vIGEgbGlua2VkIHZpZXcuXG4gICAgdmlldygpIHtcbiAgICAgIHJldHVybiBnZXRWaWV3U2NoZW1hKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGxpbmtzVG9WaWV3KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52aWV3XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5idXR0b25zKVxuICAgIH0sXG5cbiAgICBpc0NvbXBhY3QoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3Jtcy5ldmVyeShpc0NvbXBhY3QpXG4gICAgfSxcblxuICAgIGlzSW5saW5lZCgpIHtcbiAgICAgIHJldHVybiBpc0lubGluZWQodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIHBhZ2luYXRlOiBnZXRTY2hlbWFBY2Nlc3NvcigncGFnaW5hdGUnLCB7XG4gICAgICB0eXBlOiBOdW1iZXJcbiAgICB9KSxcblxuICAgIHJlbmRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbmRlcicsIHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgY3JlYXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY3JlYXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGNyZWF0YWJsZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICAgICAgPyB0aGlzLmlzT2JqZWN0U291cmNlXG4gICAgICAgICAgICA/ICF0aGlzLnZhbHVlXG4gICAgICAgICAgICA6IHRydWVcbiAgICAgICAgICA6IGZhbHNlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VkaXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBlZGl0YWJsZSAmJiAhdGhpcy5pc0lubGluZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZHJhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZHJhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRyYWdnYWJsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2UgJiYgdGhpcy5saXN0RGF0YS5sZW5ndGggPiAxICYmIGRyYWdnYWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29sbGFwc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBudWxsLCAvLyBzbyB0aGF0IGA/P2AgYmVsb3cgY2FuIGRvIGl0cyB0aGluZzpcbiAgICAgIGdldChjb2xsYXBzaWJsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0lubGluZWQgJiYgISEoY29sbGFwc2libGUgPz8gdGhpcy5jb2xsYXBzZWQgIT09IG51bGwpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb2xsYXBzZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAkcm91dGUodG8sIGZyb20pIHtcbiAgICAgIGlmICh0aGlzLnByb3ZpZGVzRGF0YSAmJiBmcm9tLnBhdGggPT09IHRvLnBhdGggJiYgZnJvbS5oYXNoID09PSB0by5oYXNoKSB7XG4gICAgICAgIC8vIFBhdGhzIGFuZCBoYXNoZXMgcmVtYWluIHRoZSBzYW1lLCBzbyBvbmx5IHF1ZXJpZXMgaGF2ZSBjaGFuZ2VkLlxuICAgICAgICAvLyBVcGRhdGUgZmlsdGVyIGFuZCByZWxvYWQgZGF0YSB3aXRob3V0IGNsZWFyaW5nLlxuICAgICAgICB0aGlzLnF1ZXJ5ID0gdG8ucXVlcnlcbiAgICAgICAgdGhpcy5sb2FkRGF0YShmYWxzZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgd3JhcHBlZFByaW1pdGl2ZXM6IHtcbiAgICAgIGRlZXA6IHRydWUsXG4gICAgICBoYW5kbGVyKHRvLCBmcm9tKSB7XG4gICAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMgfSA9IHRoaXNcbiAgICAgICAgLy8gU2tpcCB0aGUgaW5pdGlhbCBzZXR0aW5nIG9mIHdyYXBwZWRQcmltaXRpdmVzIGFycmF5XG4gICAgICAgIGlmICh3cmFwUHJpbWl0aXZlcyAmJiBmcm9tICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gV2hlbmV2ZXIgdGhlIHdyYXBwZWRQcmltaXRpdmVzIGNoYW5nZSwgbWFwIHRoZWlyIHZhbHVlcyBiYWNrIHRvXG4gICAgICAgICAgLy8gdGhlIGFycmF5IG9mIHByaW1pdGl2ZXMsIGluIGEgcHJpbWl0aXZlIHdheSA6KVxuICAgICAgICAgIC8vIEJ1dCBzZXQgYHVud3JhcHBpbmdQcmltaXRpdmVzID0gdHJ1ZWAsIHNvIHRoZSBgbGlzdERhdGFgIGNvbXB1dGVkXG4gICAgICAgICAgLy8gcHJvcGVydHkga25vd3MgYWJvdXQgaXQsIHdoaWNoIHNldHMgaXQgdG8gYGZhbHNlYCBhZ2Fpbi5cbiAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzID0gdHJ1ZVxuICAgICAgICAgIHRoaXMudmFsdWUgPSB0by5tYXAob2JqZWN0ID0+IG9iamVjdFt3cmFwUHJpbWl0aXZlc10pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIHRoaXMucXVlcnkgPSB0aGlzLiRyb3V0ZS5xdWVyeVxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uY2xlYXJEYXRhKClcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLnRvdGFsID0gMFxuICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0RGF0YSgpXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAvLyBXaGVuIG5ldyBkYXRhIGlzIGxvYWRlZCwgd2UgY2FuIHN0b3JlIGl0IHJpZ2h0IGJhY2sgaW4gdGhlIGRhdGEgb2YgdGhlXG4gICAgICAvLyB2aWV3IG9yIGZvcm0gdGhhdCBjcmVhdGVkIHRoaXMgbGlzdCBjb21wb25lbnQuXG4gICAgICAvLyBTdXBwb3J0IHR3byBmb3JtYXRzIGZvciBsaXN0IGRhdGE6XG4gICAgICAvLyAtIEFycmF5OiBgWy4uLl1gXG4gICAgICAvLyAtIE9iamVjdDogYHsgcmVzdWx0czogWy4uLl0sIHRvdGFsIH1gLCBzZWUgYHVud3JhcExpc3REYXRhKClgXG4gICAgICBpZiAoXG4gICAgICAgICFkYXRhIHx8XG4gICAgICAgIHRoaXMuaXNMaXN0U291cmNlICYmIGlzQXJyYXkoZGF0YSkgfHxcbiAgICAgICAgdGhpcy5pc09iamVjdFNvdXJjZSAmJiBpc09iamVjdChkYXRhKVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhXG4gICAgICB9IGVsc2UgaWYgKHRoaXMudW53cmFwTGlzdERhdGEoZGF0YSkpIHtcbiAgICAgICAgLy8gVGhlIGZvcm1hdCBkaWRuJ3QgbWF0Y2gsIHNlZSBpZiB3ZSByZWNlaXZlZCBhIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIG9iamVjdCwgaW4gd2hpY2ggY2FzZSBgdGhpcy52YWx1ZWAgd2FzIGFscmVhZHkgc2V0IGJ5XG4gICAgICAgIC8vIGB1bndyYXBMaXN0RGF0YSgpYCBhbmQgd2UncmUgZG9uZSBub3cuXG4gICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGRhdGEpICYmIHRoaXMuaXNJblZpZXcpIHtcbiAgICAgICAgLy8gVGhlIGNvbnRyb2xsZXIgaXMgc2VuZGluZyBkYXRhIGZvciBhIGZ1bGwgbXVsdGktY29tcG9uZW50IHZpZXcsXG4gICAgICAgIC8vIGluY2x1ZGluZyB0aGUgbmVzdGVkIGxpc3QgZGF0YS5cbiAgICAgICAgdGhpcy52aWV3Q29tcG9uZW50LnNldERhdGEoZGF0YSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdW53cmFwTGlzdERhdGEoZGF0YSkge1xuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJlxuICAgICAgICBpc09iamVjdChkYXRhKSAmJlxuICAgICAgICBpc051bWJlcihkYXRhLnRvdGFsKSAmJlxuICAgICAgICBpc0FycmF5KGRhdGEucmVzdWx0cylcbiAgICAgICkge1xuICAgICAgICAvLyBJZiBAZGl0b2pzL3NlcnZlciBzZW5kcyBkYXRhIGluIHRoZSBmb3JtIG9mIGB7IHJlc3VsdHMsIHRvdGFsIH1gXG4gICAgICAgIC8vIHJlcGxhY2UgdGhlIHZhbHVlIHdpdGggcmVzdWx0LCBidXQgcmVtZW1iZXIgdGhlIHRvdGFsIGluIHRoZSBzdG9yZS5cbiAgICAgICAgdGhpcy50b3RhbCA9IGRhdGEudG90YWxcbiAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGEucmVzdWx0c1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVJdGVtKHNjaGVtYSwgdHlwZSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXMuY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpXG4gICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICB0aGlzLm9iamVjdERhdGEgPSBpdGVtXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxpc3REYXRhLnB1c2goaXRlbSlcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHRoaXMub3BlblNjaGVtYUNvbXBvbmVudCgtMSkpXG4gICAgICB9XG4gICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIHJldHVybiBpdGVtXG4gICAgfSxcblxuICAgIHJlbW92ZUl0ZW0oaXRlbSkge1xuICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5vYmplY3REYXRhID0gbnVsbFxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHsgbGlzdERhdGEgfSA9IHRoaXNcbiAgICAgICAgY29uc3QgaW5kZXggPSBsaXN0RGF0YSAmJiBsaXN0RGF0YS5pbmRleE9mKGl0ZW0pXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgbGlzdERhdGEuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IGxhYmVsID0gKFxuICAgICAgICBpdGVtICYmXG4gICAgICAgIHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc2NoZW1hLCBpdGVtLCB7XG4gICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgZXh0ZW5kZWQ6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIClcblxuICAgICAgY29uc3Qgbm90aWZ5ID0gKCkgPT5cbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6IHRoaXMuaXNUcmFuc2llbnQgPyAnaW5mbycgOiAnc3VjY2VzcycsXG4gICAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgYCR7bGFiZWx9IHdhcyAke3RoaXMudmVyYnMuZGVsZXRlZH0uYCxcbiAgICAgICAgICAgIHRoaXMudHJhbnNpZW50Tm90ZVxuICAgICAgICAgIF1cbiAgICAgICAgfSlcblxuICAgICAgaWYgKFxuICAgICAgICBpdGVtICYmXG4gICAgICAgIHdpbmRvdy5jb25maXJtKFxuICAgICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLmRlbGV0ZX0gJHtsYWJlbH0/YFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSlcbiAgICAgICAgICBub3RpZnkoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGl0ZW1JZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCBpdGVtKVxuICAgICAgICAgIGNvbnN0IHJlc291cmNlID0gZ2V0TWVtYmVyUmVzb3VyY2UoaXRlbUlkLCB0aGlzLnJlc291cmNlKVxuICAgICAgICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KHsgbWV0aG9kOiAnZGVsZXRlJywgcmVzb3VyY2UgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSlcbiAgICAgICAgICAgICAgICBub3RpZnkoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRTY2hlbWFDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50cyB9ID0gdGhpc1xuICAgICAgY29uc3QgeyBsZW5ndGggfSA9IHNjaGVtYUNvbXBvbmVudHNcbiAgICAgIHJldHVybiBzY2hlbWFDb21wb25lbnRzWygoaW5kZXggJSBsZW5ndGgpICsgbGVuZ3RoKSAlIGxlbmd0aF1cbiAgICB9LFxuXG4gICAgb3BlblNjaGVtYUNvbXBvbmVudChpbmRleCkge1xuICAgICAgY29uc3Qgc2NoZW1hQ29tcG9uZW50ID0gdGhpcy5nZXRTY2hlbWFDb21wb25lbnQoaW5kZXgpXG4gICAgICBpZiAoc2NoZW1hQ29tcG9uZW50KSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG5hdmlnYXRlVG9Db21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpIHtcbiAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZGF0YVBhdGguc3RhcnRzV2l0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgICAgID8gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICAgID8gcGFyc2VEYXRhUGF0aChkYXRhUGF0aC5zbGljZSh0aGlzLmRhdGFQYXRoLmxlbmd0aCArIDEpKVswXSA/PyBudWxsXG4gICAgICAgICAgICA6IDBcbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgaWYgKGluZGV4ICE9PSBudWxsICYmIGlzTnVtYmVyKCtpbmRleCkpIHtcbiAgICAgICAgICBjb25zdCBzY2hlbWFDb21wb25lbnQgPSB0aGlzLmdldFNjaGVtYUNvbXBvbmVudCgraW5kZXgpXG4gICAgICAgICAgaWYgKHNjaGVtYUNvbXBvbmVudCkge1xuICAgICAgICAgICAgY29uc3QgeyBvcGVuZWQgfSA9IHNjaGVtYUNvbXBvbmVudFxuICAgICAgICAgICAgaWYgKCFvcGVuZWQpIHtcbiAgICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IHRydWVcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy4kbmV4dFRpY2soKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgICAgIGlmIChjb21wb25lbnRzLmxlbmd0aCA+IDAgJiYgKG9uQ29tcGxldGU/Lihjb21wb25lbnRzKSA/PyB0cnVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IG9wZW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVUb1JvdXRlQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKVxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZVRvUm91dGVDb21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxPbkNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgICAgIC8vIFJldHJpZXZlIHRoZSBsYXN0IHJvdXRlIGNvbXBvbmVudCwgd2hpY2ggd2lsbCBiZSB0aGUgY29tcG9uZW50IHRoYXRcbiAgICAgICAgICAvLyB3ZSBqdXN0IG5hdmlnYXRlZCB0bywgYW5kIHBhc3MgaXQgb24gdG8gYG9uQ29tcGxldGUoKWBcbiAgICAgICAgICBjb25zdCB7IHJvdXRlQ29tcG9uZW50cyB9ID0gdGhpcy5hcHBTdGF0ZVxuICAgICAgICAgIGNvbnN0IHJvdXRlQ29tcG9uZW50ID0gcm91dGVDb21wb25lbnRzW3JvdXRlQ29tcG9uZW50cy5sZW5ndGggLSAxXVxuICAgICAgICAgIHJlc29sdmUob25Db21wbGV0ZT8uKFtyb3V0ZUNvbXBvbmVudF0pID8/IHRydWUpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhUGF0aFBhcnRzID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBmaW5kIGEgcm91dGUgdGhhdCBjYW4gc2VydmUgcGFydCBvZiB0aGUgZ2l2ZW4gZGF0YVBhdGgsXG4gICAgICAgIC8vIGFuZCB0YWtlIGl0IGZyb20gdGhlcmU6XG4gICAgICAgIHdoaWxlIChkYXRhUGF0aFBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgoXG4gICAgICAgICAgICB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKG5vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoUGFydHMpKVxuICAgICAgICAgIClcbiAgICAgICAgICAvLyBTZWUgaWYgdGhlcmUgYWN0dWFsbHkgaXMgYSByb3V0ZSBmb3IgdGhpcyBzdWItY29tcG9uZW50OlxuICAgICAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVyLm1hdGNoKHBhdGgpXG4gICAgICAgICAgaWYgKG1hdGNoZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy4kcm91dGUucGF0aCA9PT0gcGF0aCkge1xuICAgICAgICAgICAgICAvLyBXZSdyZSBhbHJlYWR5IHRoZXJlLCBzbyBqdXN0IGNhbGwgYG9uQ29tcGxldGUoKWA6XG4gICAgICAgICAgICAgIGNhbGxPbkNvbXBsZXRlKClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIE5hdmlnYXRlIHRvIHRoZSBjb21wb25lbnQncyBwYXRoLCB0aGVuIGNhbGwgYG9uQ29tcGxldGUoKWBfOlxuICAgICAgICAgICAgICB0aGlzLiRyb3V0ZXJcbiAgICAgICAgICAgICAgICAucHVzaCh7IHBhdGggfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2gocmVqZWN0KVxuICAgICAgICAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSBsYXN0IHJvdXRlIGNvbXBvbmVudCB0byBiZSBtb3VudGVkIGluIHRoZSBuZXh0XG4gICAgICAgICAgICAgICAgLy8gdGljayBiZWZvcmUgY2FsbGluZyBgb25Db21wbGV0ZSgpYFxuICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuJG5leHRUaWNrKGNhbGxPbkNvbXBsZXRlKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIEtlZXAgcmVtb3ZpbmcgdGhlIGxhc3QgcGFydCB1bnRpbCB3ZSBmaW5kIGEgbWF0Y2guXG4gICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICB9KVxuICAgIH1cbiAgfSwgLy8gZW5kIG9mIGBtZXRob2RzYFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLFxuICAgIHNjaGVtYSxcbiAgICBuYW1lLFxuICAgIHJvdXRlcyxcbiAgICBsZXZlbCxcbiAgICBuZXN0ZWQgPSBmYWxzZSxcbiAgICBmbGF0dGVuID0gZmFsc2UsXG4gICAgcHJvY2VzcyA9IG51bGxcbiAgKSB7XG4gICAgcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKVxuICAgIGNvbnN0IGlubGluZWQgPSBpc0lubGluZWQoc2NoZW1hKVxuICAgIGlmIChpbmxpbmVkICYmIHNjaGVtYS5yZXNvdXJjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnTGlzdHMgd2l0aCBuZXN0ZWQgZm9ybXMgY2Fubm90IGxvYWQgZGF0YSBmcm9tIHRoZWlyIG93biByZXNvdXJjZXMnXG4gICAgICApXG4gICAgfVxuICAgIC8vIFVzZSBkaWZmZXJlbnRseSBuYW1lZCB1cmwgcGFyYW1ldGVycyBvbiBlYWNoIG5lc3RlZCBsZXZlbCBmb3IgaWQgYXNcbiAgICAvLyBvdGhlcndpc2UgdGhleSB3b3VsZCBjbGFzaCBhbmQgb3ZlcnJpZGUgZWFjaCBvdGhlciBpbnNpZGUgJHJvdXRlLnBhcmFtc1xuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzEzNDVcbiAgICBjb25zdCBwYXJhbSA9IGBpZCR7bGV2ZWwgKyAxfWBcbiAgICBjb25zdCBtZXRhID0ge1xuICAgICAgYXBpLFxuICAgICAgc2NoZW1hXG4gICAgfVxuICAgIGNvbnN0IGZvcm1NZXRhID0ge1xuICAgICAgLi4ubWV0YSxcbiAgICAgIC8vIFdoZW4gY2hpbGRyZW4gYXJlIGZsYXR0ZW5lZCAoZS5nLiB0cmVlLWxpc3RzKSwgaW5jbHVkZSB0aGUgYGZsYXR0ZW5gXG4gICAgICAvLyBzZXR0aW5nIGFsc28sIGZvciBmbGF0dGVuaW5nIGJlbG93LlxuICAgICAgZmxhdHRlbixcbiAgICAgIG5lc3RlZCxcbiAgICAgIHBhcmFtXG4gICAgfVxuICAgIGNvbnN0IGNoaWxkUm91dGVzID0gYXdhaXQgcHJvY2Vzc0Zvcm1zKGFwaSwgc2NoZW1hLCBsZXZlbClcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgYXdhaXQgcHJvY2VzcyhjaGlsZFJvdXRlcywgbGV2ZWwgKyAxKVxuICAgIH1cbiAgICAvLyBJbmxpbmVkIGZvcm1zIGRvbid0IG5lZWQgdG8gYWN0dWFsbHkgYWRkIHJvdXRlcy5cbiAgICBpZiAoaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmICFpbmxpbmVkKSB7XG4gICAgICBjb25zdCBnZXRQYXRoV2l0aFBhcmFtID0gKHBhdGgsIHBhcmFtKSA9PlxuICAgICAgICBwYXJhbVxuICAgICAgICAgID8gcGF0aFxuICAgICAgICAgICAgPyBgJHtwYXRofS86JHtwYXJhbX1gXG4gICAgICAgICAgICA6IGA6JHtwYXJhbX1gXG4gICAgICAgICAgOiBwYXRoXG5cbiAgICAgIC8vIExpc3RzIGluIHNpbmdsZS1jb21wb25lbnQtdmlld3MgKGxldmVsID09PSAwKSB1c2UgdGhlaXIgdmlldydzIHBhdGgsXG4gICAgICAvLyB3aGlsZSBhbGwgb3RoZXJzIG5lZWQgdGhlaXIgcGF0aCBwcmVmaXhlZCB3aXRoIHRoZSBwYXJlbnQncyBwYXRoOlxuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IGxldmVsID09PSAwID8gJycgOiBzY2hlbWEucGF0aFxuICAgICAgY29uc3QgZm9ybVJvdXRlID0ge1xuICAgICAgICAvLyBPYmplY3Qgc291cmNlcyBkb24ndCBuZWVkIGlkIHBhcmFtcyBpbiB0aGVpciBmb3JtIHBhdGhzLCBhcyB0aGV5XG4gICAgICAgIC8vIGRpcmVjdGx5IGVkaXQgb25lIG9iamVjdC5cbiAgICAgICAgcGF0aDogZ2V0UGF0aFdpdGhQYXJhbShzb3VyY2VQYXRoLCBpc0xpc3RTb3VyY2Uoc2NoZW1hKSAmJiBwYXJhbSksXG4gICAgICAgIGNvbXBvbmVudDogRGl0b0NvbXBvbmVudC5jb21wb25lbnQoXG4gICAgICAgICAgbmVzdGVkID8gJ0RpdG9Gb3JtTmVzdGVkJyA6ICdEaXRvRm9ybSdcbiAgICAgICAgKSxcbiAgICAgICAgbWV0YTogZm9ybU1ldGFcbiAgICAgIH1cbiAgICAgIGlmIChpc09iamVjdFNvdXJjZShzY2hlbWEpKSB7XG4gICAgICAgIC8vIEFsc28gYWRkIGEgcGFyYW0gcm91dGUsIHNpbXBseSB0byBoYW5kbGUgJy9jcmVhdGUnIGxpbmtzIHRoZSBzYW1lXG4gICAgICAgIC8vIHdheSB0aGF0IGxpc3RzIGRvLCB3aGVyZSBpdCBvdmVybGFwcyB3aXRoIDppZCBmb3IgaXRlbSBpZHMuXG4gICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICAuLi5mb3JtUm91dGUsXG4gICAgICAgICAgcGF0aDogZ2V0UGF0aFdpdGhQYXJhbShzb3VyY2VQYXRoLCBwYXJhbSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzb3VyY2VQYXRoKSB7XG4gICAgICAgIC8vIEp1c3QgcmVkaXJlY3QgYmFjayB0byB0aGUgcGFyZW50IHdoZW4gYSBuZXN0ZWQgc291cmNlIHJvdXRlIGlzIGhpdC5cbiAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgIHBhdGg6IHNvdXJjZVBhdGgsXG4gICAgICAgICAgcmVkaXJlY3Q6ICcuJyxcbiAgICAgICAgICBtZXRhXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICAvLyBQYXJ0aXRpb24gY2hpbGRSb3V0ZXMgaW50byB0aG9zZSB0aGF0IG5lZWQgZmxhdHRlbmluZyAoZS5nLiB0cmVlLWxpc3RzKVxuICAgICAgLy8gYW5kIHRob3NlIHRoYXQgZG9uJ3QsIGFuZCBwcm9jZXNzIGVhY2ggZ3JvdXAgc2VwYXJhdGVseSBhZnRlci5cbiAgICAgIGNvbnN0IFtmbGF0Um91dGVzLCBzdWJSb3V0ZXNdID0gY2hpbGRSb3V0ZXMucmVkdWNlKFxuICAgICAgICAocmVzLCByb3V0ZSkgPT4ge1xuICAgICAgICAgIHJlc1tyb3V0ZS5tZXRhLmZsYXR0ZW4gPyAwIDogMV0ucHVzaChyb3V0ZSlcbiAgICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgIH0sXG4gICAgICAgIFtbXSwgW11dXG4gICAgICApXG4gICAgICBpZiAoc3ViUm91dGVzLmxlbmd0aCkge1xuICAgICAgICBmb3JtUm91dGUuY2hpbGRyZW4gPSBzdWJSb3V0ZXNcbiAgICAgIH1cbiAgICAgIHJvdXRlcy5wdXNoKGZvcm1Sb3V0ZSlcbiAgICAgIC8vIEFkZCB0aGUgcHJlZml4ZWQgZm9ybVJvdXRlcyB3aXRoIHRoZWlyIGNoaWxkcmVuIGZvciBuZXN0ZWQgbGlzdHMuXG4gICAgICBpZiAoZmxhdFJvdXRlcy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZFJvdXRlIG9mIGZsYXRSb3V0ZXMpIHtcbiAgICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgICAuLi4oY2hpbGRSb3V0ZS5yZWRpcmVjdCA/IGNoaWxkUm91dGUgOiBmb3JtUm91dGUpLFxuICAgICAgICAgICAgcGF0aDogYCR7Zm9ybVJvdXRlLnBhdGh9LyR7Y2hpbGRSb3V0ZS5wYXRofWAsXG4gICAgICAgICAgICBtZXRhOiB7XG4gICAgICAgICAgICAgIC4uLmNoaWxkUm91dGUubWV0YSxcbiAgICAgICAgICAgICAgZmxhdHRlblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaCkge1xuICAgIGdyYXBoLmFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5LCBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBnZXROYW1lZFNjaGVtYXMsIHByb2Nlc3NOZXN0ZWRTY2hlbWFEZWZhdWx0cyB9IGZyb20gJy4vc2NoZW1hJ1xuXG5leHBvcnQgY29uc3QgZmlsdGVyQ29tcG9uZW50cyA9IHtcbiAgJ3RleHQnKGZpbHRlcikge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBbXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnY29udGFpbnMnLFxuICAgICAgICB2YWx1ZTogJ2NvbnRhaW5zJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlcXVhbHMnLFxuICAgICAgICB2YWx1ZTogJ2VxdWFscydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnc3RhcnRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ3N0YXJ0cy13aXRoJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlbmRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ2VuZHMtd2l0aCdcbiAgICAgIH1cbiAgICBdXG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZXJhdG9yOiBmaWx0ZXIub3BlcmF0b3JzXG4gICAgICAgID8ge1xuICAgICAgICAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICAgICAgICB3aWR0aDogJzIvNScsXG4gICAgICAgICAgICBvcHRpb25zOiBpc0FycmF5KGZpbHRlci5vcGVyYXRvcnMpXG4gICAgICAgICAgICAgID8gb3B0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICBvcHRpb24gPT4gZmlsdGVyLm9wZXJhdG9ycy5pbmNsdWRlcyhvcHRpb24udmFsdWUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IG9wdGlvbnMsXG4gICAgICAgICAgICBjbGVhcmFibGU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIDogbnVsbCxcbiAgICAgIHRleHQ6IHtcbiAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICB3aWR0aDogZmlsdGVyLm9wZXJhdG9ycyA/ICczLzUnIDogJ2ZpbGwnLFxuICAgICAgICBjbGVhcmFibGU6IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgJ2RhdGUtcmFuZ2UnKCkge1xuICAgIC8vIFVzZSBzaG9ydGVyIGRhdGUgZm9ybWF0IGluIGRhdGUtcmFuZ2UgZmlsdGVyczpcbiAgICBjb25zdCBkYXRlRm9ybWF0ID0ge1xuICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICBtb250aDogJzItZGlnaXQnLFxuICAgICAgeWVhcjogJ251bWVyaWMnXG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBmcm9tOiB7XG4gICAgICAgIHR5cGU6ICdkYXRldGltZScsXG4gICAgICAgIHdpZHRoOiAnMS8yJyxcbiAgICAgICAgZGF0ZUZvcm1hdCxcbiAgICAgICAgY2xlYXJhYmxlOiB0cnVlXG4gICAgICB9LFxuICAgICAgdG86IHtcbiAgICAgICAgdHlwZTogJ2RhdGV0aW1lJyxcbiAgICAgICAgd2lkdGg6ICcxLzInLFxuICAgICAgICBkYXRlRm9ybWF0LFxuICAgICAgICBjbGVhcmFibGU6IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZpbHRlcnNQYW5lbChhcGksIGZpbHRlcnMsIGRhdGFQYXRoLCBwcm94eSkge1xuICBjb25zdCB7IHN0aWNreSwgLi4uZmlsdGVyU2NoZW1hcyB9ID0gZmlsdGVyc1xuICBjb25zdCBwYW5lbCA9IHtcbiAgICB0eXBlOiAncGFuZWwnLFxuICAgIGxhYmVsOiAnRmlsdGVycycsXG4gICAgbmFtZTogJyRmaWx0ZXJzJyxcbiAgICB0YXJnZXQ6IGRhdGFQYXRoLFxuICAgIC8vIE92ZXJyaWRlIHRoZSBkZWZhdWx0IHZhbHVlXG4gICAgZGlzYWJsZWQ6IGZhbHNlLFxuICAgIHN0aWNreSxcblxuICAgIC8vIE5PVEU6IE9uIHBhbmVscywgdGhlIGRhdGEoKSBjYWxsYmFjayBkb2VzIHNvbWV0aGluZyBlbHNlIHRoYW4gb24gbm9ybWFsXG4gICAgLy8gc2NoZW1hOiBJdCBwcm9kdWNlcyB0aGUgYGRhdGFgIHByb3BlcnR5IHRvIGJlIHBhc3NlZCB0byB0aGUgcGFuZWwnc1xuICAgIC8vIHNjaGVtYSwgbm90IHRoZSBkYXRhIHRvIGJlIHVzZWQgZm9yIHRoZSBwYW5lbCBjb21wb25lbnQgZGlyZWN0bHkuXG4gICAgZGF0YSgpIHtcbiAgICAgIHJldHVybiBwYXJzZUZpbHRlcnNEYXRhKFxuICAgICAgICBwYW5lbCxcbiAgICAgICAgcHJveHkucXVlcnlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgY29tcG9uZW50czogY3JlYXRlRmlsdGVyc0NvbXBvbmVudHMoZmlsdGVyU2NoZW1hcyksXG4gICAgYnV0dG9uczogY3JlYXRlRmlsdGVyc0J1dHRvbnMoZmFsc2UpLFxuICAgIHBhbmVsQnV0dG9uczogY3JlYXRlRmlsdGVyc0J1dHRvbnModHJ1ZSksXG5cbiAgICBldmVudHM6IHtcbiAgICAgIGNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgZmlsdGVycygpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdEZpbHRlcnNEYXRhKHRoaXMuc2NoZW1hLCB0aGlzLmRhdGEpXG4gICAgICB9LFxuXG4gICAgICBoYXNGaWx0ZXJzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJzLmxlbmd0aCA+IDBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgYXBwbHlGaWx0ZXJzKCkge1xuICAgICAgICBwcm94eS5xdWVyeSA9IHtcbiAgICAgICAgICAuLi5wcm94eS5xdWVyeSxcbiAgICAgICAgICBmaWx0ZXI6IHRoaXMuZmlsdGVycyxcbiAgICAgICAgICAvLyBDbGVhciBwYWdpbmF0aW9uIHdoZW4gYXBwbHlpbmcgb3IgY2xlYXJpbmcgZmlsdGVyczpcbiAgICAgICAgICBwYWdlOiB1bmRlZmluZWRcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgY2xlYXJGaWx0ZXJzKCkge1xuICAgICAgICB0aGlzLnJlc2V0RGF0YSgpXG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHJvY2Vzc05lc3RlZFNjaGVtYURlZmF1bHRzKGFwaSwgcGFuZWwpXG4gIHJldHVybiBwYW5lbFxufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWx0ZXJzQnV0dG9ucyhzbWFsbCkge1xuICByZXR1cm4ge1xuICAgIGNsZWFyOiB7XG4gICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgIHRleHQ6IHNtYWxsID8gbnVsbCA6ICdDbGVhcicsXG4gICAgICBkaXNhYmxlZDogKHsgc2NoZW1hQ29tcG9uZW50IH0pID0+ICFzY2hlbWFDb21wb25lbnQuaGFzRmlsdGVycyxcbiAgICAgIGV2ZW50czoge1xuICAgICAgICBjbGljayh7IHNjaGVtYUNvbXBvbmVudCB9KSB7XG4gICAgICAgICAgLy8gU2luY2UgcGFuZWwgYnV0dG9ucyBhcmUgb3V0c2lkZSBvZiB0aGUgc2NoZW1hLCB3ZSBuZWVkIHRvIHVzZSB0aGVcbiAgICAgICAgICAvLyBzY2hlbWEgY29tcG9uZW50IHJlY2VpdmVkIGZyb20gdGhlIGluaXRpYWxpemUgZXZlbnQgYmVsb3c6XG4gICAgICAgICAgc2NoZW1hQ29tcG9uZW50LmNsZWFyRmlsdGVycygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3VibWl0OiB7XG4gICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgIHRleHQ6IHNtYWxsID8gbnVsbCA6ICdGaWx0ZXInLFxuICAgICAgdmlzaWJsZTogIXNtYWxsLFxuICAgICAgZXZlbnRzOiB7XG4gICAgICAgIGNsaWNrKHsgc2NoZW1hQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICBzY2hlbWFDb21wb25lbnQuYXBwbHlGaWx0ZXJzKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWx0ZXJzQ29tcG9uZW50cyhmaWx0ZXJzKSB7XG4gIGNvbnN0IGNvbXBzID0ge31cbiAgZm9yIChjb25zdCBmaWx0ZXIgb2YgT2JqZWN0LnZhbHVlcyhnZXROYW1lZFNjaGVtYXMoZmlsdGVycykgfHwge30pKSB7XG4gICAgLy8gU3VwcG9ydCBib3RoIGN1c3RvbSBmb3JtcyBhbmQgZGVmYXVsdCBmaWx0ZXIgY29tcG9uZW50cywgdGhyb3VnaCB0aGVcbiAgICAvLyBgZmlsdGVyQ29tcG9uZW50c2AgcmVnaXN0cnkuIEV2ZW4gZm9yIGRlZmF1bHQgZmlsdGVycywgc3RpbGwgdXNlIHRoZVxuICAgIC8vIHByb3BlcnRpZXMgaW4gYGZpbHRlcmAgYXMgdGhlIGJhc2UgZm9yIGBmb3JtYCwgc28gdGhpbmdzIGxpa2UgYGxhYmVsYFxuICAgIC8vIGNhbiBiZSBjaGFuZ2VkIG9uIHRoZSByZXN1bHRpbmcgZm9ybS5cbiAgICBjb25zdCB7IGZpbHRlcjogdHlwZSwgd2lkdGgsIC4uLmZvcm0gfSA9IGZpbHRlclxuICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0eXBlXG4gICAgICA/IGZpbHRlckNvbXBvbmVudHNbdHlwZV0/LihmaWx0ZXIpXG4gICAgICA6IGZpbHRlci5jb21wb25lbnRzXG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIGZvcm0udHlwZSA9ICdmb3JtJ1xuICAgICAgZm9ybS5jb21wb25lbnRzID0ge31cbiAgICAgIC8vIENvbnZlcnQgbGFiZWxzIHRvIHBsYWNlaG9sZGVyczpcbiAgICAgIGZvciAoY29uc3QgW2tleSwgY29tcG9uZW50XSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgY29uc3QgbGFiZWwgPSBjb21wb25lbnQubGFiZWwgfHwgbGFiZWxpemUoY29tcG9uZW50Lm5hbWUgfHwga2V5KVxuICAgICAgICAgIGZvcm0uY29tcG9uZW50c1trZXldID0ge1xuICAgICAgICAgICAgLi4uY29tcG9uZW50LFxuICAgICAgICAgICAgbGFiZWw6IGZhbHNlLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGxhYmVsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb21wc1tmaWx0ZXIubmFtZV0gPSB7XG4gICAgICAgIGxhYmVsOiBmb3JtLmxhYmVsLFxuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGRlZmF1bHQ6ICgpID0+ICh7fSksXG4gICAgICAgIGZvcm0sXG4gICAgICAgIGlubGluZWQ6IHRydWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBmaWx0ZXIgJyR7ZmlsdGVyLm5hbWV9JzogVW5rbm93biBmaWx0ZXIgdHlwZSAnJHt0eXBlfScuYFxuICAgICAgKVxuICAgIH1cbiAgfVxuICByZXR1cm4gY29tcHNcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gc2NoZW1hLmNvbXBvbmVudHNbbmFtZV1cbiAgcmV0dXJuIGNvbXBvbmVudD8uZm9ybT8uY29tcG9uZW50c1xufVxuXG5mdW5jdGlvbiBmb3JtYXRGaWx0ZXJzRGF0YShzY2hlbWEsIGRhdGEpIHtcbiAgY29uc3QgZmlsdGVycyA9IFtdXG4gIGZvciAoY29uc3QgbmFtZSBpbiBkYXRhKSB7XG4gICAgY29uc3QgZW50cnkgPSBkYXRhW25hbWVdXG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICAvLyBNYXAgY29tcG9uZW50cyBzZXF1ZW5jZSB0byBhcmd1bWVudHM6XG4gICAgICBjb25zdCBhcmdzID0gT2JqZWN0LmtleXMoZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIG5hbWUpKS5tYXAoXG4gICAgICAgIGtleSA9PiBlbnRyeVtrZXldID8/IG51bGxcbiAgICAgIClcbiAgICAgIC8vIE9ubHkgYXBwbHkgZmlsdGVyIGlmIHRoZXJlIGFyZSBzb21lIGFyZ3VtZW50cyB0aGF0IGFyZW4ndCBudWxsOlxuICAgICAgaWYgKGFyZ3Muc29tZSh2YWx1ZSA9PiB2YWx1ZSAhPT0gbnVsbCkpIHtcbiAgICAgICAgZmlsdGVycy5wdXNoKGAke25hbWV9OiR7YXJncy5tYXAoSlNPTi5zdHJpbmdpZnkpLmpvaW4oJywnKX1gKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsdGVyc1xufVxuXG5mdW5jdGlvbiBwYXJzZUZpbHRlcnNEYXRhKHNjaGVtYSwgcXVlcnkpIHtcbiAgY29uc3QgZmlsdGVycyA9IHt9XG4gIC8vIFNhbWUgYXMgQGRpdG9qcy9zZXJ2ZXIncyBRdWVyeVBhcmFtZXRlcnMuZmlsdGVyOiBUcmFuc2xhdGUgdGhlIHN0cmluZyBkYXRhXG4gIC8vIGZyb20gJHJvdXRlLnF1ZXJ5IGJhY2sgdG8gcGFyYW0gbGlzdHMgcGVyIGZpbHRlcjpcbiAgaWYgKHF1ZXJ5KSB7XG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgYXNBcnJheShxdWVyeS5maWx0ZXIpKSB7XG4gICAgICBjb25zdCBbLCBuYW1lLCBqc29uXSA9IGZpbHRlci5tYXRjaCgvXihcXHcrKTooLiopJC8pXG4gICAgICB0cnkge1xuICAgICAgICBmaWx0ZXJzW25hbWVdID0gYXNBcnJheShKU09OLnBhcnNlKGBbJHtqc29ufV1gKSlcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7fVxuICAgIH1cbiAgfVxuICBjb25zdCBmaWx0ZXJzRGF0YSA9IHt9XG4gIGZvciAoY29uc3QgbmFtZSBpbiBzY2hlbWEuY29tcG9uZW50cykge1xuICAgIGNvbnN0IGRhdGEgPSB7fVxuICAgIC8vIElmIHdlIGhhdmUgcmV0cmlldmVkIHBhcmFtcyBmcm9tIHRoZSBxdWVyeSwgZmV0Y2ggdGhlIGFzc29jaWF0ZWRcbiAgICAvLyBmb3JtIGNvbXBvbmVudHMgc28gd2UgY2FuIG1hcCB0aGUgdmFsdWVzIGJhY2sgdG8gb2JqZWN0IGtleXM6XG4gICAgY29uc3QgYXJncyA9IGZpbHRlcnNbbmFtZV1cbiAgICBpZiAoYXJncykge1xuICAgICAgY29uc3QgY29tcG9uZW50cyA9IGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBuYW1lKVxuICAgICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgICAgbGV0IGluZGV4ID0gMFxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgZGF0YVtrZXldID0gYXJnc1tpbmRleCsrXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZpbHRlcnNEYXRhW25hbWVdID0gZGF0YVxuICB9XG4gIHJldHVybiBmaWx0ZXJzRGF0YVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWxpc3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuKVxuICAuZGl0by1uYXZpZ2F0aW9uKFxuICAgIHYtaWY9XCJzY29wZXMgfHwgaGFzUGFnaW5hdGlvblwiXG4gIClcbiAgICBEaXRvU2NvcGVzKFxuICAgICAgdi1pZj1cInNjb3Blc1wiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgICApXG4gICAgLy8tIFdoZW4gdGhlcmUncyBvbmx5IHBhZ2luYXRpb24gd2l0aG91dCBzY29wZXMsIHdlIG5lZWQgYSBnb29kIG9sJyBzcGFjZXJcbiAgICAvLy0gZGl2LCBmb3IgdGhlIGxheW91dCBub3QgdG8gYnJlYWsuLi5cbiAgICAuZGl0by1zcGFjZXIoXG4gICAgICB2LWVsc2UtaWY9XCJoYXNQYWdpbmF0aW9uXCJcbiAgICApXG4gICAgRGl0b1BhZ2luYXRpb24oXG4gICAgICB2LWlmPVwiaGFzUGFnaW5hdGlvblwiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6bGltaXQ9XCJwYWdpbmF0ZVwiXG4gICAgICA6dG90YWw9XCJ0b3RhbCB8fCAwXCJcbiAgICApXG4gIHRhYmxlLmRpdG8tdGFibGUoXG4gICAgOmNsYXNzPWB7XG4gICAgICAnZGl0by10YWJsZS1zZXBhcmF0b3JzJzogaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtbGFyZ2VyLXBhZGRpbmcnOiBoYXNFZGl0QnV0dG9ucyAmJiAhaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtYWx0ZXJuYXRlLWNvbG9ycyc6ICFpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1ldmVuLWNvdW50JzogaGFzRXZlbkNvdW50XG4gICAgfWBcbiAgKVxuICAgIERpdG9UYWJsZUhlYWQoXG4gICAgICB2LWlmPVwiY29sdW1uc1wiXG4gICAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgICA6Y29sdW1ucz1cImNvbHVtbnNcIlxuICAgICAgOmhhc0VkaXRCdXR0b25zPVwiaGFzRWRpdEJ1dHRvbnNcIlxuICAgIClcbiAgICBEaXRvRHJhZ2dhYmxlKFxuICAgICAgdGFnPVwidGJvZHlcIlxuICAgICAgOm1vZGVsVmFsdWU9XCJ1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3REYXRhLCBwYWdpbmF0aW9uUmFuZ2UpXCJcbiAgICAgIDpvcHRpb25zPVwiZ2V0U29ydGFibGVPcHRpb25zKGZhbHNlKVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIEB1cGRhdGU6bW9kZWxWYWx1ZT1cInZhbHVlID0+IChsaXN0RGF0YSA9IHZhbHVlKVwiXG4gICAgKVxuICAgICAgdHIoXG4gICAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBsaXN0RGF0YVwiXG4gICAgICAgIDppZD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKHNjaGVtYSwgaXRlbSlcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWlmPVwiY29sdW1uc1wiXG4gICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtZm9yPVwiY29sdW1uIGluIGNvbHVtbnNcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIERpdG9UYWJsZUNlbGwoXG4gICAgICAgICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoY29sdW1uKVwiXG4gICAgICAgICAgICAgIDprZXk9XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldENlbGxDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgOmNlbGw9XCJjb2x1bW5cIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgKVxuICAgICAgICAgIHRkXG4gICAgICAgICAgICBEaXRvU2NoZW1hSW5saW5lZChcbiAgICAgICAgICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICAgICAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXgsIGFzT2JqZWN0OiB0cnVlIH0pXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29tcG9uZW50KFxuICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgOmlzPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dChpdGVtLCBpbmRleCkpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4IH0pXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyhcbiAgICAgICAgICB2LWlmPVwiaGFzQ2VsbEVkaXRCdXR0b25zXCJcbiAgICAgICAgKVxuICAgICAgICAgIERpdG9FZGl0QnV0dG9ucyhcbiAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShpbmRleClcIlxuICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICApXG4gICAgLy8tIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBpbnNpZGUgdGFibGUgd2hlbiBub3QgaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gICAgdGZvb3QoXG4gICAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgIXNpbmdsZVwiXG4gICAgKVxuICAgICAgdHJcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyg6Y29sc3Bhbj1cIm51bUNvbHVtbnNcIilcbiAgICAgICAgICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgICAgICAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICAgICAgICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgKVxuICAvLy0gUmVuZGVyIGNyZWF0ZSBidXR0b25zIG91dHNpZGUgdGFibGUgd2hlbiBpbiBhIHNpbmdsZSBjb21wb25lbnQgdmlldzpcbiAgRGl0b0VkaXRCdXR0b25zLmRpdG8tYnV0dG9ucy1tYWluLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgc2luZ2xlXCJcbiAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwibGlzdERhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCBTb3J0YWJsZU1peGluIGZyb20gJy4uL21peGlucy9Tb3J0YWJsZU1peGluLmpzJ1xuaW1wb3J0IHtcbiAgZ2V0Vmlld0VkaXRQYXRoLFxuICByZXNvbHZlU2NoZW1hQ29tcG9uZW50LFxuICByZXNvbHZlU2NoZW1hQ29tcG9uZW50c1xufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBjcmVhdGVGaWx0ZXJzUGFuZWwgfSBmcm9tICcuLi91dGlscy9maWx0ZXIuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBwaWNrQnksIGVxdWFscywgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdsaXN0Jywge1xuICBtaXhpbnM6IFtTb3VyY2VNaXhpbiwgU29ydGFibGVNaXhpbl0sXG4gIGtlZXBBbGlnbmVkOiBmYWxzZSxcblxuICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICAvLyBObyBuZWVkIGZvciB0cmFuc2Zvcm1hdGlvbiBoZXJlLiBTZWUgVHlwZVRyZWVMaXN0IGZvciBkZXRhaWxzLlxuICAgIHJldHVybiB0eXBlXG4gIH0sXG5cbiAgZ2V0UGFuZWxTY2hlbWEoYXBpLCBzY2hlbWEsIGRhdGFQYXRoLCBzY2hlbWFDb21wb25lbnQpIHtcbiAgICBjb25zdCB7IGZpbHRlcnMgfSA9IHNjaGVtYVxuICAgIC8vIFNlZSBpZiB0aGlzIGxpc3QgY29tcG9uZW50IHdhbnRzIHRvIGRpc3BsYXkgYSBmaWx0ZXIgcGFuZWwsIGFuZCBpZiBzbyxcbiAgICAvLyBjcmVhdGUgdGhlIHBhbmVsIHNjaGVtYSBmb3IgaXQgdGhyb3VnaCBgZ2V0RmlsdGVyc1BhbmVsKClgLlxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICAvLyBBdCB0aGUgdGltZSBvZiB0aGUgY3JlYXRpb24gb2YgdGhlIHBhbmVsIHNjaGVtYSwgdGhlIHNjaGVtYUNvbXBvbmVudCBpc1xuICAgICAgLy8gbm90IGZpbGxlZCB5ZXQsIHNvIHdlIGNhbid0IGdldCB0aGUgdGFyZ2V0IGNvbXBvbmVudCAoZGF0YVBhdGgpIHJpZ2h0XG4gICAgICAvLyBhd2F5LiBVc2UgYSBwcm94eSBhbmQgYSBnZXR0ZXIgaW5zdGVhZCwgdG8gZ2V0IGFyb3VuZCB0aGlzOlxuICAgICAgY29uc3QgZ2V0TGlzdENvbXBvbmVudCA9ICgpID0+XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeURhdGFQYXRoKFxuICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgIGNvbXBvbmVudCA9PiBjb21wb25lbnQudHlwZSA9PT0gJ2xpc3QnXG4gICAgICAgIClcblxuICAgICAgcmV0dXJuIGNyZWF0ZUZpbHRlcnNQYW5lbChhcGksIGZpbHRlcnMsIGRhdGFQYXRoLCB7XG4gICAgICAgIC8vIENyZWF0ZSBhIHNpbXBsZSBwcm94eSB0byBnZXQgLyBzZXQgdGhlIHF1ZXJ5LCBzZWUgZ2V0RmlsdGVyc1BhbmVsKClcbiAgICAgICAgZ2V0IHF1ZXJ5KCkge1xuICAgICAgICAgIHJldHVybiBnZXRMaXN0Q29tcG9uZW50KCk/LnF1ZXJ5XG4gICAgICAgIH0sXG4gICAgICAgIHNldCBxdWVyeShxdWVyeSkge1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGdldExpc3RDb21wb25lbnQoKVxuICAgICAgICAgIGlmIChjb21wb25lbnQpIHtcbiAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgdW5kZWZpbmVkIHZhbHVlcyBmb3IgY29tcGFyaW5nIHdpdGggZXF1YWxzKClcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IG9iaiA9PiBwaWNrQnkob2JqLCB2YWx1ZSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgaWYgKCFlcXVhbHMoZmlsdGVyKHF1ZXJ5KSwgZmlsdGVyKGNvbXBvbmVudC5xdWVyeSkpKSB7XG4gICAgICAgICAgICAgIGNvbXBvbmVudC5xdWVyeSA9IHF1ZXJ5XG4gICAgICAgICAgICAgIGNvbXBvbmVudC5sb2FkRGF0YShmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaGFzUGFnaW5hdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhZ2luYXRlICYmIHRoaXMudG90YWwgPiB0aGlzLnBhZ2luYXRlXG4gICAgfSxcblxuICAgIGhhc0xpc3RCdXR0b25zKCkge1xuICAgICAgcmV0dXJuICEhKHRoaXMuYnV0dG9uU2NoZW1hcyB8fCB0aGlzLmNyZWF0YWJsZSlcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICBjb25zdCB7IGxpc3REYXRhIH0gPSB0aGlzXG4gICAgICByZXR1cm4gKFxuICAgICAgICBsaXN0RGF0YS5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICB0aGlzLmVkaXRhYmxlIHx8XG4gICAgICAgICAgdGhpcy5kZWxldGFibGUgfHxcbiAgICAgICAgICB0aGlzLmRyYWdnYWJsZVxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGhhc0NlbGxFZGl0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0lubGluZWQgJiYgdGhpcy5oYXNFZGl0QnV0dG9uc1xuICAgIH0sXG5cbiAgICBoYXNFdmVuQ291bnQoKSB7XG4gICAgICByZXR1cm4gISh0aGlzLmxpc3REYXRhLmxlbmd0aCAlIDIpXG4gICAgfSxcblxuICAgIG51bUNvbHVtbnMoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAodGhpcy5jb2x1bW5zID8gT2JqZWN0LmtleXModGhpcy5jb2x1bW5zKS5sZW5ndGggOiAxKSArXG4gICAgICAgICh0aGlzLmhhc0NlbGxFZGl0QnV0dG9ucyA/IDEgOiAwKVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0RGF0YVBhdGgoaW5kZXgpIHtcbiAgICAgIHJldHVybiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBpbmRleClcbiAgICB9LFxuXG4gICAgZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpIHtcbiAgICAgIGlmICh0aGlzLmVkaXRhYmxlKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBnZXRWaWV3RWRpdFBhdGgodGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dCkgfHwgdGhpcy5wYXRoXG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRJdGVtSWQodGhpcy5zY2hlbWEsIGl0ZW0sIGluZGV4KVxuICAgICAgICByZXR1cm4gYCR7cGF0aH0vJHtpZH1gXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICBnZXRDZWxsQ2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gYGRpdG8tY2VsbC0ke2h5cGhlbmF0ZShjb2x1bW4ubmFtZSl9YFxuICAgIH0sXG5cbiAgICBnZXRDb250ZXh0KGl0ZW0sIGluZGV4KSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgIGluZGV4LFxuICAgICAgICBkYXRhUGF0aDogdGhpcy5nZXREYXRhUGF0aChpbmRleClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRmlsdGVyRXJyb3JzKGVycm9ycykge1xuICAgICAgY29uc3QgZmlsdGVyc0RhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgJyRmaWx0ZXJzJylcbiAgICAgIGNvbnN0IHBhbmVsID0gdGhpcy5zY2hlbWFDb21wb25lbnQuZ2V0UGFuZWxCeURhdGFQYXRoKGZpbHRlcnNEYXRhUGF0aClcbiAgICAgIGlmIChwYW5lbCkge1xuICAgICAgICBwYW5lbC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIHRydWUpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLFxuICAgIHNjaGVtYSxcbiAgICBuYW1lLFxuICAgIHJvdXRlcyxcbiAgICBsZXZlbCxcbiAgICBuZXN0ZWQgPSBmYWxzZSxcbiAgICBmbGF0dGVuID0gZmFsc2UsXG4gICAgcHJvY2VzcyA9IG51bGxcbiAgKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudChzY2hlbWEpLFxuICAgICAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLmNvbHVtbnMpLFxuICAgICAgU291cmNlTWl4aW4ucHJvY2Vzc1NjaGVtYShcbiAgICAgICAgYXBpLFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHJvdXRlcyxcbiAgICAgICAgbGV2ZWwsXG4gICAgICAgIG5lc3RlZCxcbiAgICAgICAgZmxhdHRlbixcbiAgICAgICAgcHJvY2Vzc1xuICAgICAgKVxuICAgIF0pXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1saXN0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIC5kaXRvLW5hdmlnYXRpb24ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIHBhZGRpbmctYm90dG9tOiAkY29udGVudC1wYWRkaW5nLWhhbGY7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgICAmOmVtcHR5IHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuXG4gICAgLmRpdG8tc2NvcGVzLFxuICAgIC5kaXRvLXBhZ2luYXRpb24ge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXg6IDAgMSBhdXRvO1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgIH1cbiAgfVxuXG4gICYuZGl0by1zaW5nbGUge1xuICAgIC8vIFNvIHRoYXQgbGlzdCBidXR0b25zIGNhbiBiZSBzdGlja3kgdG8gdGhlIGJvdHRvbTpcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtcm93czogbWluLWNvbnRlbnQ7XG4gICAgaGVpZ2h0OiAxMDAlO1xuXG4gICAgLy8gTWFrZSBzaW5nbGUgbGlzdCBoZWFkZXIsIG5hdmlnYXRpb24gYW5kIGJ1dHRvbnMgc3RpY2t5IHRvIHRoZSB0b3AgYW5kXG4gICAgLy8gYm90dG9tOlxuICAgIC5kaXRvLW5hdmlnYXRpb24ge1xuICAgICAgcG9zaXRpb246IHN0aWNreTtcbiAgICAgIHRvcDogMDtcbiAgICAgIG1hcmdpbi10b3A6IC0kY29udGVudC1wYWRkaW5nO1xuICAgICAgcGFkZGluZy10b3A6ICRjb250ZW50LXBhZGRpbmc7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgICAgei1pbmRleDogMTtcblxuICAgICAgKyAuZGl0by10YWJsZSB7XG4gICAgICAgIC5kaXRvLXRhYmxlLWhlYWQge1xuICAgICAgICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgICAgICAgdG9wOiBjYWxjKCRpbnB1dC1oZWlnaHQgKyAkY29udGVudC1wYWRkaW5nICsgJGNvbnRlbnQtcGFkZGluZy1oYWxmKTtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuRGl0b0xhYmVsLmRpdG8tbGFiZWwtY29tcG9uZW50KFxuICA6bGFiZWw9XCJ2YWx1ZVwiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbGFiZWwnLCB7XG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG4gIGtlZXBBbGlnbmVkOiBmYWxzZVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLWxhYmVsLWNvbXBvbmVudCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGhlaWdodDogMmVtO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1tYXJrdXAoOmlkPVwiZGF0YVBhdGhcIilcbiAgLmRpdG8tbWFya3VwLXRvb2xiYXIoOmVkaXRvcj1cImVkaXRvclwiKVxuICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXRvb2xiYXIoXG4gICAgICB2LWlmPVwiZ3JvdXBlZEJ1dHRvbnMubGVuZ3RoID4gMFwiXG4gICAgKVxuICAgICAgLmRpdG8tYnV0dG9uLWdyb3VwKFxuICAgICAgICB2LWZvcj1cImJ1dHRvbnMgaW4gZ3JvdXBlZEJ1dHRvbnNcIlxuICAgICAgKVxuICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgdi1mb3I9XCJ7IG5hbWUsIGljb24sIGlzQWN0aXZlLCBvbkNsaWNrIH0gaW4gYnV0dG9uc1wiXG4gICAgICAgICAgOmtleT1cIm5hbWVcIlxuICAgICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiXG4gICAgICAgICAgQGNsaWNrPVwib25DbGlja1wiXG4gICAgICAgIClcbiAgICAgICAgICBJY29uKDpuYW1lPVwiaWNvblwiKVxuICBFZGl0b3JDb250ZW50LmRpdG8tbWFya3VwLWVkaXRvcihcbiAgICByZWY9XCJlZGl0b3JcIlxuICAgIDplZGl0b3I9XCJlZGl0b3JcIlxuICAgIDpzdHlsZT1cInN0eWxlc1wiXG4gIClcbiAgLmRpdG8tcmVzaXplKFxuICAgIHYtaWY9XCJyZXNpemFibGVcIlxuICAgIEBtb3VzZWRvd24uc3RvcC5wcmV2ZW50PVwib25EcmFnUmVzaXplXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRWRpdG9yLCBFZGl0b3JDb250ZW50LCBNYXJrLCBnZXRNYXJrQXR0cmlidXRlcyB9IGZyb20gJ0B0aXB0YXAvdnVlLTMnXG4vLyBpbXBvcnQgeyB0b2dnbGVNYXJrIH0gZnJvbSAndGlwdGFwLWNvbW1hbmRzJ1xuLy8gRXNzZW50aWFsczpcbmltcG9ydCB7IERvY3VtZW50IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tZG9jdW1lbnQnXG5pbXBvcnQgeyBUZXh0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGV4dCdcbi8vIE1hcmtzOlxuaW1wb3J0IHsgQm9sZCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWJvbGQnXG5pbXBvcnQgeyBDb2RlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tY29kZSdcbmltcG9ydCB7IEl0YWxpYyB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWl0YWxpYydcbmltcG9ydCB7IExpbmsgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1saW5rJ1xuaW1wb3J0IHsgU3RyaWtlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tc3RyaWtlJ1xuaW1wb3J0IHsgVW5kZXJsaW5lIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdW5kZXJsaW5lJ1xuLy8gTm9kZXM6XG5pbXBvcnQgeyBCbG9ja3F1b3RlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tYmxvY2txdW90ZSdcbmltcG9ydCB7IENvZGVCbG9jayB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWNvZGUtYmxvY2snXG5pbXBvcnQgeyBIYXJkQnJlYWsgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1oYXJkLWJyZWFrJ1xuaW1wb3J0IHsgSGVhZGluZyB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhlYWRpbmcnXG5pbXBvcnQgeyBQYXJhZ3JhcGggfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1wYXJhZ3JhcGgnXG5pbXBvcnQgeyBIb3Jpem9udGFsUnVsZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhvcml6b250YWwtcnVsZSdcbmltcG9ydCB7IE9yZGVyZWRMaXN0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tb3JkZXJlZC1saXN0J1xuaW1wb3J0IHsgQnVsbGV0TGlzdCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWJ1bGxldC1saXN0J1xuaW1wb3J0IHsgTGlzdEl0ZW0gfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1saXN0LWl0ZW0nXG4vLyBUT0RPOlxuLy8gaW1wb3J0IHsgSW1hZ2UgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1pbWFnZSdcbi8vIGltcG9ydCB7IE1lbnRpb24gfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1tZW50aW9uJ1xuLy8gaW1wb3J0IHsgQ29kZUJsb2NrSGlnaGxpZ2h0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tY29kZS1ibG9jay1oaWdobGlnaHQnXG4vLyBpbXBvcnQgeyBUYWJsZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlJ1xuLy8gaW1wb3J0IHsgVGFibGVDZWxsIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUtY2VsbCdcbi8vIGltcG9ydCB7IFRhYmxlSGVhZGVyIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUtaGVhZGVyJ1xuLy8gaW1wb3J0IHsgVGFibGVOb2RlcyB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLW5vZGVzJ1xuLy8gaW1wb3J0IHsgVGFibGVSb3cgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1yb3cnXG4vLyBpbXBvcnQgeyBUYXNrTGlzdCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhc2stbGlzdCdcbi8vIGltcG9ydCB7IFRhc2tJdGVtIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFzay1pdGVtJ1xuLy8gVG9vbHM6XG5pbXBvcnQgeyBIaXN0b3J5IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taGlzdG9yeSdcblxuaW1wb3J0IHsgSWNvbiB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IHtcbiAgaXNBcnJheSxcbiAgaXNPYmplY3QsXG4gIHVuZGVyc2NvcmUsXG4gIGh5cGhlbmF0ZSxcbiAgZGVib3VuY2UsXG4gIGNhbWVsaXplXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbWFya3VwJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG4gIGNvbXBvbmVudHM6IHtcbiAgICBFZGl0b3JDb250ZW50LFxuICAgIEljb25cbiAgfSxcblxuICBrZWVwQWxpZ25lZDogZmFsc2UsXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZWRpdG9yOiBudWxsLFxuICAgICAgaGVpZ2h0OiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgMTBcbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaGVpZ2h0OiB0aGlzLmhlaWdodCB8fCBgY2FsYygke3RoaXMubGluZXN9ZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpYFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtYXJrQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ21hcmtzJywge1xuICAgICAgICBib2xkOiB0cnVlLFxuICAgICAgICBpdGFsaWM6IHRydWUsXG4gICAgICAgIHVuZGVybGluZTogdHJ1ZSxcbiAgICAgICAgc3RyaWtlOiB0cnVlLFxuICAgICAgICBzbWFsbDogdHJ1ZSxcbiAgICAgICAgY29kZTogdHJ1ZSxcbiAgICAgICAgbGluazoge1xuICAgICAgICAgIG9uQ2xpY2s6IGVkaXRvciA9PiB0aGlzLm9uQ2xpY2tMaW5rKGVkaXRvcilcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYmFzaWNOb2RlQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ25vZGVzJywge1xuICAgICAgICBwYXJhZ3JhcGg6IHtcbiAgICAgICAgICAvLyBEbyBub3Qgc2hvdyB0aGUgcGFyYWdyYXBoIGNvbW1hbmQgYXMgYWN0aXZlIGlmIGFueSBvZiB0aGUgYmxvY2tcbiAgICAgICAgICAvLyBjb21tYW5kcyBhcmUgYWxzbyBhY3RpdmU6XG4gICAgICAgICAgaWdub3JlQWN0aXZlOiAoKSA9PlxuICAgICAgICAgICAgdGhpcy5vdGhlck5vZGVCdXR0b25zLnNvbWUoYnV0dG9uID0+IGJ1dHRvbi5pc0FjdGl2ZSlcbiAgICAgICAgfSxcbiAgICAgICAgaGVhZGluZzoge1xuICAgICAgICAgIGF0dHJpYnV0ZTogJ2xldmVsJyxcbiAgICAgICAgICB2YWx1ZXM6IFsxLCAyLCAzLCA0LCA1LCA2XVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvdGhlck5vZGVCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbm9kZXMnLCB7XG4gICAgICAgIGJ1bGxldExpc3Q6IHRydWUsXG4gICAgICAgIG9yZGVyZWRMaXN0OiB0cnVlLFxuICAgICAgICBibG9ja3F1b3RlOiB0cnVlLFxuICAgICAgICBjb2RlQmxvY2s6IHRydWVcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHRvb2xCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygndG9vbHMnLCB7XG4gICAgICAgIHVuZG86IHRydWUsXG4gICAgICAgIHJlZG86IHRydWVcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdyb3VwZWRCdXR0b25zKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYXJrQnV0dG9ucyxcbiAgICAgICAgYmFzaWNOb2RlQnV0dG9ucyxcbiAgICAgICAgb3RoZXJOb2RlQnV0dG9ucyxcbiAgICAgICAgdG9vbEJ1dHRvbnNcbiAgICAgIH0gPSB0aGlzXG4gICAgICByZXR1cm4gW1xuICAgICAgICBtYXJrQnV0dG9ucyxcbiAgICAgICAgYmFzaWNOb2RlQnV0dG9ucyxcbiAgICAgICAgb3RoZXJOb2RlQnV0dG9ucyxcbiAgICAgICAgdG9vbEJ1dHRvbnNcbiAgICAgIF0uZmlsdGVyKGJ1dHRvbnMgPT4gYnV0dG9ucy5sZW5ndGggPiAwKVxuICAgIH0sXG5cbiAgICBwYXJzZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcmVzZXJ2ZVdoaXRlc3BhY2U6IHtcbiAgICAgICAgICAnY29sbGFwc2UnOiBmYWxzZSxcbiAgICAgICAgICAncHJlc2VydmUnOiB0cnVlLFxuICAgICAgICAgICdwcmVzZXJ2ZS1hbGwnOiAnZnVsbCdcbiAgICAgICAgfVt0aGlzLndoaXRlc3BhY2VdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVkaXRvck9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlZGl0YWJsZTogIXRoaXMucmVhZHlvbmx5LFxuICAgICAgICBhdXRvRm9jdXM6IHRoaXMuYXV0b2ZvY3VzLFxuICAgICAgICBkaXNhYmxlSW5wdXRSdWxlczogIXRoaXMuZW5hYmxlUnVsZXMuaW5wdXQsXG4gICAgICAgIGRpc2FibGVQYXN0ZVJ1bGVzOiAhdGhpcy5lbmFibGVSdWxlcy5wYXN0ZSxcbiAgICAgICAgcGFyc2VPcHRpb25zOiB0aGlzLnBhcnNlT3B0aW9uc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICByZXNpemFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXNpemFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHdoaXRlc3BhY2U6IGdldFNjaGVtYUFjY2Vzc29yKCd3aGl0ZXNwYWNlJywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2NvbGxhcHNlJ1xuICAgICAgLy8gUG9zc2libGUgdmFsdWVzIGFyZTogJ2NvbGxhcHNlJywgJ3ByZXNlcnZlJywgJ3ByZXNlcnZlLWFsbCdcbiAgICB9KSxcblxuICAgIGVuYWJsZVJ1bGVzOiBnZXRTY2hlbWFBY2Nlc3NvcignZW5hYmxlUnVsZXMnLCB7XG4gICAgICB0eXBlOiBbT2JqZWN0LCBCb29sZWFuXSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVuYWJsZVJ1bGVzKSB7XG4gICAgICAgIHJldHVybiBpc09iamVjdChlbmFibGVSdWxlcylcbiAgICAgICAgICA/IGVuYWJsZVJ1bGVzXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIGlucHV0OiAhIWVuYWJsZVJ1bGVzLFxuICAgICAgICAgICAgICBwYXN0ZTogISFlbmFibGVSdWxlc1xuICAgICAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICByZWFkeW9ubHk6ICd1cGRhdGVFZGl0b3JPcHRpb25zJyxcbiAgICBhdXRvZm9jdXM6ICd1cGRhdGVFZGl0b3JPcHRpb25zJyxcbiAgICBlbmFibGVSdWxlczogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnXG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVdhdGNoID0gZmFsc2VcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvY3VzZWQgJiYgY2hhbmdlZCkge1xuICAgICAgICBjaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb25Gb2N1cyA9ICgpID0+IHRoaXMub25Gb2N1cygpXG5cbiAgICBjb25zdCBvbkJsdXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uQmx1cigpXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfVxuXG4gICAgY29uc3Qgc2V0VmFsdWVEZWJvdW5jZWQgPSBkZWJvdW5jZShlZGl0b3IgPT4ge1xuICAgICAgaWdub3JlV2F0Y2ggPSB0cnVlXG4gICAgICB0aGlzLnZhbHVlID0gZWRpdG9yLmdldEhUTUwoKVxuICAgICAgY2hhbmdlZCA9IHRydWVcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9LCAxMDApXG5cbiAgICBjb25zdCBvblVwZGF0ZSA9ICh7IGVkaXRvciB9KSA9PiB7XG4gICAgICBzZXRWYWx1ZURlYm91bmNlZChlZGl0b3IpXG4gICAgICB0aGlzLm9uSW5wdXQoKVxuICAgIH1cblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVkaXRvci5zZXRDb250ZW50KHZhbHVlLCBmYWxzZSwgdGhpcy5wYXJzZU9wdGlvbnMpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvcih7XG4gICAgICAuLi50aGlzLmVkaXRvck9wdGlvbnMsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25CbHVyLFxuICAgICAgb25VcGRhdGUsXG4gICAgICBleHRlbnNpb25zOiB0aGlzLmdldEV4dGVuc2lvbnMoKSxcbiAgICAgIGNvbnRlbnQ6IHRoaXMudmFsdWUgfHwgJydcbiAgICB9KVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLmVkaXRvci5kZXN0cm95KClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25EcmFnUmVzaXplKGV2ZW50KSB7XG4gICAgICBjb25zdCBnZXRQb2ludCA9ICh7IGNsaWVudFg6IHgsIGNsaWVudFk6IHkgfSkgPT4gKHsgeCwgeSB9KVxuXG4gICAgICBsZXQgcHJldlkgPSBnZXRQb2ludChldmVudCkueVxuICAgICAgbGV0IGhlaWdodCA9IHBhcnNlRmxvYXQoZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLiRyZWZzLmVkaXRvci4kZWwpLmhlaWdodClcblxuICAgICAgY29uc3QgbW91c2Vtb3ZlID0gZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCB7IHkgfSA9IGdldFBvaW50KGV2ZW50KVxuICAgICAgICBoZWlnaHQgKz0geSAtIHByZXZZXG4gICAgICAgIHByZXZZID0geVxuICAgICAgICB0aGlzLmhlaWdodCA9IGAke01hdGgubWF4KGhlaWdodCwgMCl9cHhgXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgICBtb3VzZW1vdmUsXG5cbiAgICAgICAgbW91c2V1cChldmVudCkge1xuICAgICAgICAgIG1vdXNlbW92ZShldmVudClcbiAgICAgICAgICBoYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICB1cGRhdGVFZGl0b3JPcHRpb25zKCkge1xuICAgICAgdGhpcy5lZGl0b3Iuc2V0T3B0aW9ucyh0aGlzLmVkaXRvck9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIG9uQ2xpY2tMaW5rKGVkaXRvcikge1xuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGF3YWl0IHRoaXMucm9vdENvbXBvbmVudC5zaG93RGlhbG9nKHtcbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIGhyZWY6IHtcbiAgICAgICAgICAgIHR5cGU6ICd1cmwnLFxuICAgICAgICAgICAgbGFiZWw6ICdMaW5rJyxcbiAgICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGxhYmVsOiAnVGl0bGUnXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBidXR0b25zOiB7XG4gICAgICAgICAgY2FuY2VsOiB7fSxcbiAgICAgICAgICBhcHBseTogeyB0eXBlOiAnc3VibWl0JyB9LFxuICAgICAgICAgIHJlbW92ZToge1xuICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgIGNsaWNrKHsgZGlhbG9nQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb21wb25lbnQucmVzb2x2ZShudWxsKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXRhOiBnZXRNYXJrQXR0cmlidXRlcyh0aGlzLmVkaXRvci5zdGF0ZSwgJ2xpbmsnKVxuICAgICAgfSlcbiAgICAgIGlmIChhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGxldCB7IGhyZWYsIHRpdGxlIH0gPSBhdHRyaWJ1dGVzXG4gICAgICAgIGlmIChocmVmKSB7XG4gICAgICAgICAgLy8gU2VlIGlmIGBocmVmYCBjYW4gYmUgcGFyc2VkIGFzIGEgVVJMLCBhbmQgaWYgbm90LFxuICAgICAgICAgIC8vIHByZWZpeCBpdCB3aXRoIGEgZGVmYXVsdCBwcm90b2NvbC5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ld1xuICAgICAgICAgICAgbmV3IFVSTChocmVmKVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgaHJlZiA9IGBodHRwczovLyR7aHJlZn1gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVkaXRvci5jb21tYW5kcy5zZXRMaW5rKHsgaHJlZiwgdGl0bGUgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVkaXRvci5jb21tYW5kcy51bnNldExpbmsoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRFeHRlbnNpb25zKCkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBtYXJrcyA9IHt9LFxuICAgICAgICBub2RlcyA9IHt9LFxuICAgICAgICB0b29scyA9IHt9XG4gICAgICB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiBbXG4gICAgICAgIC8vIEVzc2VudGlhbHM6XG4gICAgICAgIERvY3VtZW50LFxuICAgICAgICBUZXh0LFxuICAgICAgICBQYXJhZ3JhcGgsIC8vIGJ1dHRvbiBjYW4gYmUgY29udHJvbGxlZCwgYnV0IG5vZGUgbmVlZHMgdG8gYmUgb24uXG5cbiAgICAgICAgLy8gTWFya3M6IGBzY2hlbWEubWFya3NgXG4gICAgICAgIG1hcmtzLmJvbGQgJiYgQm9sZCxcbiAgICAgICAgbWFya3MuaXRhbGljICYmIEl0YWxpYyxcbiAgICAgICAgbWFya3MudW5kZXJsaW5lICYmIFVuZGVybGluZSxcbiAgICAgICAgbWFya3Muc3RyaWtlICYmIFN0cmlrZSxcbiAgICAgICAgbWFya3Muc21hbGwgJiYgU21hbGwsXG4gICAgICAgIG1hcmtzLmNvZGUgJiYgQ29kZSxcbiAgICAgICAgbWFya3MubGluayAmJiBMaW5rV2l0aFRpdGxlLFxuXG4gICAgICAgIC8vIE5vZGVzOiBgc2NoZW1hLm5vZGVzYFxuICAgICAgICBub2Rlcy5ibG9ja3F1b3RlICYmIEJsb2NrcXVvdGUsXG4gICAgICAgIG5vZGVzLmNvZGVCbG9jayAmJiBDb2RlQmxvY2ssXG4gICAgICAgIEhhcmRCcmVhaywgLy8gVE9ETzogU2hvdWxkIHRoaXMgYWx3YXlzIG9uP1xuICAgICAgICBub2Rlcy5oZWFkaW5nICYmIEhlYWRpbmcuY29uZmlndXJlKHsgbGV2ZWxzOiBub2Rlcy5oZWFkaW5nIH0pLFxuICAgICAgICBub2Rlcy5ob3Jpem9udGFsUnVsZSAmJiBIb3Jpem9udGFsUnVsZSxcbiAgICAgICAgKG5vZGVzLm9yZGVyZWRMaXN0IHx8IG5vZGVzLmJ1bGxldExpc3QpICYmIExpc3RJdGVtLFxuICAgICAgICBub2Rlcy5idWxsZXRMaXN0ICYmIEJ1bGxldExpc3QsXG4gICAgICAgIG5vZGVzLm9yZGVyZWRMaXN0ICYmIE9yZGVyZWRMaXN0LFxuICAgICAgICAvLyBUT0RPOlxuICAgICAgICAvLyBub2Rlcy50b2RvTGlzdCAmJiBUb2RvSXRlbSxcbiAgICAgICAgLy8gbm9kZXMudG9kb0xpc3QgJiYgVG9kb0xpc3QsXG5cbiAgICAgICAgLy8gVG9vbHM6IGBzY2hlbWEudG9vbHNgXG4gICAgICAgIHRvb2xzLmhpc3RvcnkgJiYgSGlzdG9yeVxuICAgICAgXS5maWx0ZXIoZXh0ZW5zaW9uID0+ICEhZXh0ZW5zaW9uKVxuICAgIH0sXG5cbiAgICBnZXRCdXR0b25zKHNldHRpbmdzTmFtZSwgZGVzY3JpcHRpb25zKSB7XG4gICAgICBjb25zdCBsaXN0ID0gW11cblxuICAgICAgY29uc3QgYWRkQnV0dG9uID0gKHsgbmFtZSwgaWNvbiwgYXR0cmlidXRlcywgaWdub3JlQWN0aXZlLCBvbkNsaWNrIH0pID0+IHtcbiAgICAgICAgbGlzdC5wdXNoKHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGljb24sXG4gICAgICAgICAgaXNBY3RpdmU6IChcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLmlzQWN0aXZlKG5hbWUsIGF0dHJpYnV0ZXMpICYmXG4gICAgICAgICAgICAoaWdub3JlQWN0aXZlID09IG51bGwgfHwgIWlnbm9yZUFjdGl2ZSgpKVxuICAgICAgICAgICksXG4gICAgICAgICAgb25DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gYHRvZ2dsZSR7Y2FtZWxpemUobmFtZSwgdHJ1ZSl9YFxuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yLmNvbW1hbmRzW2tleV0pIHtcbiAgICAgICAgICAgICAgY29uc3QgY29tbWFuZCA9IGF0dHJpYnV0ZXMgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5jaGFpbigpW2tleV0oYXR0cmlidXRlcykuZm9jdXMoKS5ydW4oKVxuICAgICAgICAgICAgICBvbkNsaWNrXG4gICAgICAgICAgICAgICAgPyBvbkNsaWNrKHRoaXMuZWRpdG9yLCBhdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIDogY29tbWFuZChhdHRyaWJ1dGVzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnNjaGVtYVtzZXR0aW5nc05hbWVdXG4gICAgICBpZiAoc2V0dGluZ3MpIHtcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCBkZXNjcmlwdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoZGVzY3JpcHRpb25zKSkge1xuICAgICAgICAgIGNvbnN0IHNldHRpbmdOYW1lID0gWyd1bmRvJywgJ3JlZG8nXS5pbmNsdWRlcyhrZXkpID8gJ2hpc3RvcnknIDoga2V5XG4gICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHNldHRpbmdzW3NldHRpbmdOYW1lXVxuICAgICAgICAgIGNvbnN0IG5hbWUgPSB1bmRlcnNjb3JlKGtleSlcbiAgICAgICAgICBjb25zdCBpY29uID0gaHlwaGVuYXRlKGtleSlcbiAgICAgICAgICBpZiAoc2V0dGluZykge1xuICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24gfSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGVzY3JpcHRpb24pKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgYXR0cmlidXRlLCB2YWx1ZXMsIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9ID0gZGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlcykgJiYgaXNBcnJheShzZXR0aW5nKSkge1xuICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBoZWFkaW5nIGxldmVsIGF0dHJzOlxuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmcuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgYWRkQnV0dG9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBgJHtpY29ufS0ke3ZhbHVlfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7IFthdHRyaWJ1dGVdOiB2YWx1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgaWdub3JlQWN0aXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkQnV0dG9uKHsgbmFtZSwgaWNvbiwgaWdub3JlQWN0aXZlLCBvbkNsaWNrIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0XG4gICAgfSxcblxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJGVsLnNjcm9sbEludG9WaWV3Py4oKVxuICAgICAgdGhpcy5lZGl0b3IuZm9jdXMoKVxuICAgIH1cbiAgfVxufSlcblxuY29uc3QgU21hbGwgPSBNYXJrLmNyZWF0ZSh7XG4gIG5hbWU6ICdzbWFsbCcsXG5cbiAgcGFyc2VIVE1MKCkge1xuICAgIHJldHVybiBbeyB0YWc6ICdzbWFsbCcgfV1cbiAgfSxcblxuICByZW5kZXJIVE1MKCkge1xuICAgIHJldHVybiBbJ3NtYWxsJywgMF1cbiAgfSxcblxuICBhZGRDb21tYW5kcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2V0U21hbGw6XG4gICAgICAgIGF0dHJpYnV0ZXMgPT5cbiAgICAgICAgKHsgY29tbWFuZHMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiBjb21tYW5kcy5zZXRNYXJrKHRoaXMubmFtZSwgYXR0cmlidXRlcylcbiAgICAgICAgfSxcbiAgICAgIHRvZ2dsZVNtYWxsOlxuICAgICAgICBhdHRyaWJ1dGVzID0+XG4gICAgICAgICh7IGNvbW1hbmRzIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gY29tbWFuZHMudG9nZ2xlTWFyayh0aGlzLm5hbWUsIGF0dHJpYnV0ZXMpXG4gICAgICAgIH0sXG4gICAgICB1bnNldFNtYWxsOlxuICAgICAgICAoKSA9PlxuICAgICAgICAoeyBjb21tYW5kcyB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnVuc2V0TWFyayh0aGlzLm5hbWUpXG4gICAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbmNvbnN0IExpbmtXaXRoVGl0bGUgPSBMaW5rLmV4dGVuZCh7XG4gIGluY2x1c2l2ZTogZmFsc2UsXG4gIHNjaGVtYToge1xuICAgIGF0dHJzOiB7XG4gICAgICBocmVmOiB7XG4gICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgIH0sXG4gICAgICB0aXRsZToge1xuICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhcnNlSFRNTCgpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0YWc6ICdhJyxcbiAgICAgICAgICBnZXRBdHRyczogZWxlbWVudCA9PiAoe1xuICAgICAgICAgICAgaHJlZjogZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSxcbiAgICAgICAgICAgIHRpdGxlOiBlbGVtZW50LmdldEF0dHJpYnV0ZSgndGl0bGUnKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuXG4gICAgcmVuZGVySFRNTChub2RlKSB7XG4gICAgICByZXR1cm4gWydhJywgbm9kZS5hdHRycywgMF1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1tYXJrdXAge1xuICBAZXh0ZW5kICVpbnB1dDtcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLmRpdG8tcmVzaXplIHtcbiAgICBAZXh0ZW5kICVpY29uLXJlc2l6ZTtcblxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IHVuc2V0O1xuICAgIGxlZnQ6IHVuc2V0O1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICB3aWR0aDogMWVtO1xuICAgIGhlaWdodDogMWVtO1xuICB9XG5cbiAgLlByb3NlTWlycm9yIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgfVxuXG4gIC5kaXRvLW1hcmt1cC1lZGl0b3Ige1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgICAvLyBNb3ZlIHBhZGRpbmcgXCJpbnNpZGVcIiBlZGl0b3IgdG8gY29ycmVjdGx5IHBvc2l0aW9uIHNjcm9sbGJhclxuICAgIG1hcmdpbi1yaWdodDogLSRpbnB1dC1wYWRkaW5nLWhvcjtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkaW5wdXQtcGFkZGluZy1ob3I7XG4gIH1cblxuICAuZGl0by1idXR0b25zLXRvb2xiYXIge1xuICAgIG1hcmdpbjogJGlucHV0LXBhZGRpbmctdmVyIDA7XG4gIH1cblxuICBoMSxcbiAgaDIsXG4gIGgzLFxuICBwLFxuICB1bCxcbiAgb2wsXG4gIHByZSxcbiAgYmxvY2txdW90ZSB7XG4gICAgbWFyZ2luOiAxcmVtIDA7XG5cbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgfVxuXG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgfVxuICB9XG5cbiAgaDEsXG4gIGgyLFxuICBoMyB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIH1cblxuICBoMSB7XG4gICAgZm9udC1zaXplOiAxLjRyZW07XG4gIH1cblxuICBoMiB7XG4gICAgZm9udC1zaXplOiAxLjJyZW07XG4gIH1cblxuICB1bCB7XG4gICAgbGlzdC1zdHlsZTogZGlzYztcbiAgfVxuXG4gIGNvZGUge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbW9ubztcbiAgfVxuXG4gIHByZSB7XG4gICAgcGFkZGluZzogMC43cmVtIDFyZW07XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWRhcmtlcjtcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgIG92ZXJmbG93LXg6IGF1dG87XG5cbiAgICBjb2RlIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgfVxuXG4gIHAgY29kZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBhZGRpbmc6IDAgMC4zcmVtO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyO1xuICB9XG5cbiAgYSB7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIGNvbG9yOiBibHVlO1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICB9XG5cbiAgdWwsXG4gIG9sIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDJyZW07XG4gIH1cblxuICBsaSB7XG4gICAgJiA+IHAsXG4gICAgJiA+IG9sLFxuICAgICYgPiB1bCB7XG4gICAgICBtYXJnaW46IDA7XG4gICAgfVxuICB9XG5cbiAgYmxvY2txdW90ZSB7XG4gICAgYm9yZGVyLWxlZnQ6IDNweCBzb2xpZCAkY29sb3ItbGlnaHRlcjtcbiAgICBwYWRkaW5nLWxlZnQ6IDFyZW07XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuXG4gICAgcCB7XG4gICAgICBtYXJnaW46IDA7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLW11bHRpc2VsZWN0KFxuICA6Y2xhc3M9YHtcbiAgICAnZGl0by1tdWx0aXNlbGVjdC1zaW5nbGUnOiAhbXVsdGlwbGUsXG4gICAgJ2RpdG8tbXVsdGlzZWxlY3QtbXVsdGlwbGUnOiBtdWx0aXBsZVxuICB9YFxuKVxuICBWdWVNdWx0aXNlbGVjdChcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICA6Y2xhc3M9XCJ7ICdtdWx0aXNlbGVjdC0tc2hvdy1oaWdobGlnaHQnOiBzaG93SGlnaGxpZ2h0IH1cIlxuICAgIDpzaG93TGFiZWxzPVwiZmFsc2VcIlxuICAgIDpwbGFjZWhvbGRlcj1cInBsYWNlaG9sZGVyXCJcbiAgICB0YWdQbGFjZWhvbGRlcj1cIlByZXNzIGVudGVyIHRvIGFkZCBuZXcgdGFnXCJcbiAgICA6b3B0aW9ucz1cInBvcHVsYXRlICYmIGFjdGl2ZU9wdGlvbnMgfHwgW11cIlxuICAgIDpjdXN0b21MYWJlbD1cImdldExhYmVsRm9yT3B0aW9uXCJcbiAgICA6dHJhY2tCeT1cIm9wdGlvblZhbHVlXCJcbiAgICA6Z3JvdXBMYWJlbD1cImdyb3VwQnlMYWJlbFwiXG4gICAgOmdyb3VwVmFsdWVzPVwiZ3JvdXBCeU9wdGlvbnNcIlxuICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICA6dGFnZ2FibGU9XCJ0YWdnYWJsZVwiXG4gICAgOnNlYXJjaGFibGU9XCJzZWFyY2hhYmxlXCJcbiAgICA6aW50ZXJuYWxTZWFyY2g9XCIhc2VhcmNoRmlsdGVyXCJcbiAgICA6cHJlc2VydmVTZWFyY2g9XCIhIXNlYXJjaEZpbHRlclwiXG4gICAgOmNsZWFyT25TZWxlY3Q9XCIhc2VhcmNoRmlsdGVyXCJcbiAgICA6Y2xvc2VPblNlbGVjdD1cIiFzdGF5T3BlblwiXG4gICAgOmxvYWRpbmc9XCJpc0xvYWRpbmdcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIEBvcGVuPVwib25PcGVuXCJcbiAgICBAY2xvc2U9XCJvbkNsb3NlXCJcbiAgICBAdGFnPVwib25BZGRUYWdcIlxuICAgIEBzZWFyY2gtY2hhbmdlPVwib25TZWFyY2hDaGFuZ2VcIlxuICApXG4gIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICBAY2xpY2s9XCJjbGVhclwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4uL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5pbXBvcnQgVnVlTXVsdGlzZWxlY3QgZnJvbSAndnVlLW11bHRpc2VsZWN0J1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGlzQm9vbGVhbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbXVsdGlzZWxlY3QnLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVnVlTXVsdGlzZWxlY3QgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc01vdW50ZWQ6IGZhbHNlLFxuICAgICAgc2VhcmNoZWRPcHRpb25zOiBudWxsLFxuICAgICAgcG9wdWxhdGU6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlXG4gICAgICAgICAgPyAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKVxuICAgICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAgIC8vIElmIGFuIG9wdGlvbiBjYW5ub3QgYmUgZm91bmQsIHdlIG1heSBiZSBpbiB0YWdnYWJsZSBtb2RlIGFuZFxuICAgICAgICAgICAgICAgIC8vIGNhbiBhZGQgaXQuXG4gICAgICAgICAgICAgICAgdmFsdWUgPT4gKFxuICAgICAgICAgICAgICAgICAgdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSkgfHwgdGhpcy5hZGRUYWdPcHRpb24odmFsdWUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgb3B0aW9ucyB0aGF0IHdlIGNvdWxkbid0IG1hdGNoLlxuICAgICAgICAgICAgICAvLyBUT0RPOiBTaG91bGQgd2UgZGlzcGxheSBhbiBlcnJvciBpbnN0ZWFkP1xuICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgOiB0aGlzLnNlbGVjdGVkT3B0aW9uXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIC8vIENvbnZlcnQgdmFsdWUgdG8gb3B0aW9ucyBvYmplY3QsIHNpbmNlIHZ1ZS1tdWx0aXNlbGVjdCBjYW4ndCBtYXAgdGhhdFxuICAgICAgICAvLyBpdHNlbGYgdW5mb3J0dW5hdGVseS4gYHRyYWNrLWJ5YCBpcyB1c2VkIGZvciA6a2V5IG1hcHBpbmcgaXQgc2VlbXMuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHRoaXMubXVsdGlwbGVcbiAgICAgICAgICA/IChvcHRpb24gfHwgW10pLm1hcCh2YWx1ZSA9PiB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKHZhbHVlKSlcbiAgICAgICAgICA6IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWN0aXZlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaGVkT3B0aW9ucyB8fCB0aGlzLm9wdGlvbnNcbiAgICB9LFxuXG4gICAgbXVsdGlwbGU6IGdldFNjaGVtYUFjY2Vzc29yKCdtdWx0aXBsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgc2VhcmNoYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3NlYXJjaGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHRhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndGFnZ2FibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHN0YXlPcGVuOiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RheU9wZW4nLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHBsYWNlaG9sZGVyKCkge1xuICAgICAgbGV0IHsgcGxhY2Vob2xkZXIsIHNlYXJjaGFibGUsIHRhZ2dhYmxlIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgaWYgKGlzQm9vbGVhbihwbGFjZWhvbGRlcikpIHtcbiAgICAgICAgcGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlciA/IHVuZGVmaW5lZCA6IG51bGxcbiAgICAgIH1cbiAgICAgIHJldHVybiBwbGFjZWhvbGRlciA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gc2VhcmNoYWJsZSAmJiB0YWdnYWJsZVxuICAgICAgICAgID8gYFNlYXJjaCBvciBhZGQgYSAke3RoaXMubGFiZWx9YFxuICAgICAgICAgIDogc2VhcmNoYWJsZVxuICAgICAgICAgICAgPyBgU2VsZWN0IG9yIHNlYXJjaCAke3RoaXMubGFiZWx9YFxuICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgOiBwbGFjZWhvbGRlclxuICAgIH0sXG5cbiAgICBzaG93SGlnaGxpZ2h0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNNb3VudGVkICYmIHRoaXMuJHJlZnMuZWxlbWVudC5wb2ludGVyRGlydHlcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLmlzTW91bnRlZCA9IHRydWVcbiAgICBpZiAodGhpcy5hdXRvZm9jdXMpIHtcbiAgICAgIC8vIHZ1ZS1tdWx0aXNlbGVjdCBkb2Vzbid0IHN1cHBvcnQgdGhlIGF1dG9mb2N1cyBhdHRyaWJ1dGUuIFdlIG5lZWQgdG9cbiAgICAgIC8vIGhhbmRsZSBpdCBoZXJlLlxuICAgICAgdGhpcy5mb2N1cygpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBhZGRUYWdPcHRpb24odGFnKSB7XG4gICAgICBpZiAodGhpcy50YWdnYWJsZSkge1xuICAgICAgICBjb25zdCB7IG9wdGlvbkxhYmVsLCBvcHRpb25WYWx1ZSB9ID0gdGhpc1xuICAgICAgICBjb25zdCBvcHRpb24gPVxuICAgICAgICAgIG9wdGlvbkxhYmVsICYmIG9wdGlvblZhbHVlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBbb3B0aW9uTGFiZWxdOiB0YWcsXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogRGVmaW5lIGEgc2ltcGxlIHNjaGVtYSBvcHRpb24gdG8gY29udmVydCB0aGUgdGFnIHZhbHVlXG4gICAgICAgICAgICAgICAgLy8gdG8gc29tZXRoaW5nIGVsc2UsIGUuZy4gYHRvVGFnOiB0YWcgPT4gdW5kZXJzY29yZSh0YWcpYFxuICAgICAgICAgICAgICAgIFtvcHRpb25WYWx1ZV06IHRhZ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHRhZ1xuICAgICAgICB0aGlzLm9wdGlvbnMucHVzaChvcHRpb24pXG4gICAgICAgIHJldHVybiBvcHRpb25cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kcmVmcy5lbGVtZW50LmFjdGl2YXRlKClcbiAgICB9LFxuXG4gICAgb25PcGVuKCkge1xuICAgICAgdGhpcy5wb3B1bGF0ZSA9IHRydWVcbiAgICB9LFxuXG4gICAgb25DbG9zZSgpIHtcbiAgICAgIC8vIFNpbmNlIHdlIGRvbid0IGZpcmUgYmx1ciBldmVudHMgd2hpbGUgdGhlIG11bHRpc2VsZWN0IGlzIG9wZW4gKHNlZVxuICAgICAgLy8gYmVsb3cpLCB3ZSBuZWVkIHRvIGRvIGl0IGhlcmUsIHdoZW4gaXQncyBhY3R1YWxseSBjbG9zZWQuXG4gICAgICBpZiAodGhpcy5mb2N1c2VkKSB7XG4gICAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25CbHVyKCkge1xuICAgICAgaWYgKCF0aGlzLiRyZWZzLmVsZW1lbnQuaXNPcGVuKSB7XG4gICAgICAgIFR5cGVNaXhpbi5tZXRob2RzLm9uQmx1ci5jYWxsKHRoaXMpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQWRkVGFnKHRhZykge1xuICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5hZGRUYWdPcHRpb24odGFnKVxuICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICB0aGlzLnZhbHVlLnB1c2godGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvblNlYXJjaENoYW5nZShxdWVyeSkge1xuICAgICAgaWYgKHRoaXMuc2VhcmNoRmlsdGVyKSB7XG4gICAgICAgIGlmIChxdWVyeSkge1xuICAgICAgICAgIC8vIFNldCBgc2VhcmNoZWRPcHRpb25zYCB0byBhbiBlbXB0eSBhcnJheSwgYmVmb3JlIGl0IHdpbGwgYmVcbiAgICAgICAgICAvLyBwb3B1bGF0ZWQgYXN5bmNocm9ub3VzbHkgd2l0aCB0aGUgYWN0dWFsIHJlc3VsdHMuXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBbXVxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gYXdhaXQgdGhpcy5yZXNvbHZlRGF0YShcbiAgICAgICAgICAgICgpID0+IHRoaXMuc2VhcmNoRmlsdGVyKG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHF1ZXJ5IH0pKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBDbGVhciBgc2VhcmNoZWRPcHRpb25zYCB3aGVuIHRoZSBxdWVyeSBpcyBjbGVhcmVkLlxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcbkBpbXBvcnQgJ3Z1ZS1tdWx0aXNlbGVjdC9kaXN0L3Z1ZS1tdWx0aXNlbGVjdC5jc3MnO1xuXG4kc3Bpbm5lci13aWR0aDogJHNlbGVjdC1hcnJvdy13aWR0aDtcbiR0YWctaWNvbi13aWR0aDogMS44ZW07XG4kdGFnLW1hcmdpbjogMnB4O1xuJHRhZy1wYWRkaW5nOiAzcHg7XG4kdGFnLWxpbmUtaGVpZ2h0OiAxZW07XG5cbi5kaXRvLW11bHRpc2VsZWN0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICYuZGl0by1tdWx0aXNlbGVjdC1zaW5nbGUge1xuICAgIC0taW5wdXQtd2lkdGg6IDEwMCU7XG4gIH1cblxuICAmLmRpdG8tbXVsdGlzZWxlY3QtbXVsdGlwbGUge1xuICAgIC0taW5wdXQtd2lkdGg6IGF1dG87XG4gIH1cblxuICAmLmRpdG8taGFzLWVycm9ycyB7XG4gICAgJl9fdGFncyB7XG4gICAgICBib3JkZXItY29sb3I6ICRjb2xvci1lcnJvcjtcbiAgICB9XG4gIH1cblxuICAuZGl0by1idXR0b24tY2xlYXIge1xuICAgIHdpZHRoOiAkc3Bpbm5lci13aWR0aDtcbiAgfVxuXG4gIC5tdWx0aXNlbGVjdCB7XG4gICAgJHNlbGY6IGxhc3Qtc2VsZWN0b3IoJik7XG5cbiAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgbWluLWhlaWdodDogaW5oZXJpdDtcbiAgICBjb2xvcjogJGNvbG9yLWJsYWNrO1xuXG4gICAgJi0tYWN0aXZlIHtcbiAgICAgICN7JHNlbGZ9X19wbGFjZWhvbGRlciB7XG4gICAgICAgIC8vIERvbid0IHVzZSBgZGlzcGxheTogbm9uZWAgdG8gaGlkZSBwbGFjZS1ob2xkZXIsIGFzIHRoZSBsYXlvdXQgd291bGRcbiAgICAgICAgLy8gY29sbGFwc2UuXG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgfVxuXG4gICAgICAjeyRzZWxmfV9fc2luZ2xlLFxuICAgICAgI3skc2VsZn1fX2lucHV0IHtcbiAgICAgICAgLy8gU2FkbHksIHZ1ZS1zZWxlY3Qgc2V0cyBgc3R5bGU9XCJ3aWR0aFwiYCBpbiBhZGRpdGlvbiB0byB1c2luZyBjbGFzc2VzXG4gICAgICAgIC8vIHNvIGAhaW1wb3J0YW50YCBpcyBuZWNlc3Nhcnk6XG4gICAgICAgIHdpZHRoOiB2YXIoLS1pbnB1dC13aWR0aCkgIWltcG9ydGFudDtcbiAgICAgIH1cblxuICAgICAgI3skc2VsZn1fX3RhZ3Mge1xuICAgICAgICBib3JkZXItY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICAgICAgfVxuXG4gICAgICAjeyRzZWxmfV9fY29udGVudC13cmFwcGVyIHtcbiAgICAgICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1hY3RpdmU7XG4gICAgICAgIGJvcmRlci10b3AtY29sb3I6ICRib3JkZXItY29sb3I7XG4gICAgICAgIG1hcmdpbjogLTFweCAwIDA7XG4gICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICAgICAgfVxuXG4gICAgICAmI3skc2VsZn0tLWFib3ZlIHtcbiAgICAgICAgI3skc2VsZn1fX3RhZ3Mge1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG4gICAgICAgIH1cblxuICAgICAgICAjeyRzZWxmfV9fY29udGVudC13cmFwcGVyIHtcbiAgICAgICAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWFjdGl2ZTtcbiAgICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICAgICAgICAgIG1hcmdpbjogMCAwIC0xcHg7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICZfX3RhZ3Mge1xuICAgICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgICBtaW4taGVpZ2h0OiBpbmhlcml0O1xuICAgICAgcGFkZGluZzogMCAkc3Bpbm5lci13aWR0aCAwIDA7XG4gICAgICAvLyBTbyB0YWdzIGNhbiBmbG9hdCBvbiBtdWx0aXBsZSBsaW5lcyBhbmQgaGF2ZSBwcm9wZXIgbWFyZ2luczpcbiAgICAgIHBhZGRpbmctYm90dG9tOiAkdGFnLW1hcmdpbjtcbiAgICB9XG5cbiAgICAmX190YWcge1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICBtYXJnaW46ICR0YWctbWFyZ2luIDAgMCAkdGFnLW1hcmdpbjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbTtcbiAgICAgIHBhZGRpbmc6ICR0YWctcGFkZGluZyAkdGFnLWljb24td2lkdGggJHRhZy1wYWRkaW5nIDAuOGVtO1xuICAgICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHQ7XG4gICAgICBoZWlnaHQ6IGNhbGMoJGlucHV0LWhlaWdodCAtIDIgKiAkdGFnLXBhZGRpbmcpO1xuICAgIH1cblxuICAgICZfX3RhZ3Mtd3JhcCB7XG4gICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgIGxpbmUtaGVpZ2h0OiAwO1xuICAgIH1cblxuICAgICZfX3NpbmdsZSxcbiAgICAmX19wbGFjZWhvbGRlcixcbiAgICAmX19pbnB1dCB7XG4gICAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgICBtYXJnaW46IDAgMCAxcHggMDtcbiAgICAgIC8vIFNhZGx5LCB2dWUtc2VsZWN0IHNldHMgc3R5bGU9XCJwYWRkaW5nOiAuLi47XCIgaW4gYWRkaXRpb24gdG8gdXNpbmdcbiAgICAgIC8vIGNsYXNzZXMsIHNvIGAhaW1wb3J0YW50YCBpcyBuZWNlc3Nhcnk6XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZyAhaW1wb3J0YW50O1xuICAgICAgLy8gU28gaW5wdXQgY2FuIGZsb2F0IG5leHQgdG8gdGFncyBhbmQgaGF2ZSBwcm9wZXIgbWFyZ2lucyB3aXRoXG4gICAgICAvLyAmX190YWdzOlxuICAgICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgfVxuXG4gICAgJl9fcGxhY2Vob2xkZXIsXG4gICAgJl9faW5wdXQ6OnBsYWNlaG9sZGVyIHtcbiAgICAgIGNvbG9yOiAkY29sb3ItcGxhY2Vob2xkZXI7XG4gICAgfVxuXG4gICAgJl9fcGxhY2Vob2xkZXIge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAvLyBFbmZvcmNlIGFjdHVhbCBsaW5lLWhlaWdodCBmb3IgcG9zaXRpb25pbmcuXG4gICAgICAgIGNvbnRlbnQ6ICdcXDIwMGInO1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX3NlbGVjdCxcbiAgICAmX19zcGlubmVyIHtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAvLyAkYm9yZGVyLXdpZHRoIHRvIHByZXZlbnQgbWFza2luZyBib3JkZXIgd2l0aCAmX19zcGlubmVyXG4gICAgICB0b3A6ICRib3JkZXItd2lkdGg7XG4gICAgICByaWdodDogJGJvcmRlci13aWR0aDtcbiAgICAgIGJvdHRvbTogJGJvcmRlci13aWR0aDtcbiAgICAgIGhlaWdodDogaW5oZXJpdDtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIH1cblxuICAgICZfX3NlbGVjdCB7XG4gICAgICB3aWR0aDogMDtcbiAgICAgIG1hcmdpbi1yaWdodDogY2FsYygkc2VsZWN0LWFycm93LXdpZHRoIC8gMik7XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIEBpbmNsdWRlIGFycm93KCRzZWxlY3QtYXJyb3ctc2l6ZSk7XG5cbiAgICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbTtcbiAgICAgICAgcmlnaHQ6IGNhbGMoLTEgKiAkc2VsZWN0LWFycm93LXNpemUgLyAyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX19zcGlubmVyIHtcbiAgICAgIHdpZHRoOiAkc3Bpbm5lci13aWR0aDtcblxuICAgICAgJjo6YmVmb3JlLFxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAvLyBDaGFuZ2UgdGhlIHdpZHRoIG9mIHRoZSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgICAgYm9yZGVyLXdpZHRoOiAzcHg7XG4gICAgICAgIGJvcmRlci10b3AtY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgICAgIGluc2V0OiAwO1xuICAgICAgICBtYXJnaW46IGF1dG87XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fb3B0aW9uIHtcbiAgICAgICRvcHRpb246IGxhc3Qtc2VsZWN0b3IoJik7XG5cbiAgICAgIG1pbi1oZWlnaHQ6IHVuc2V0O1xuICAgICAgaGVpZ2h0OiB1bnNldDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0O1xuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gdGV4dCBmb3Igb3B0aW9uc1xuICAgICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgICAgICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgIC8vIE9ubHkgc2hvdyB0aGUgaGlnaGxpZ2h0IG9uY2UgdGhlIHB1bGxkb3duIGhhcyByZWNlaXZlZCBtb3VzZSBvclxuICAgICAgLy8ga2V5Ym9hcmQgaW50ZXJhY3Rpb24sIGluIHdoaWNoIGNhc2UgYCYtLXNob3ctaGlnaGxpZ2h0YCB3aWxsIGJlIHNldCxcbiAgICAgIC8vIHdoaWNoIGlzIGNvbnRyb2xsZWQgYnkgYHBvaW50ZXJEaXJ0eWAgaW4gdnVlLW11bHRpc2VsZWN0LlxuICAgICAgLy8gVW50aWwgdGhlbiwgY2xlYXIgdGhlIGhpZ2hsaWdodCBzdHlsZSwgYnV0IG9ubHkgaWYgaXQgaXNuJ3QgYWxzb1xuICAgICAgLy8gZGlzYWJsZWQgb3Igc2VsZWN0ZWQsIGluIHdoaWNoIGNhc2Ugd2Ugd2FudCB0byBrZWVwIHRoZSBzdHlsZS5cbiAgICAgIEBhdC1yb290ICN7JHNlbGZ9Om5vdCgjeyRzZWxmfS0tc2hvdy1oaWdobGlnaHQpXG4gICAgICAgICAgI3skb3B0aW9ufTpub3QoI3skb3B0aW9ufS0tZGlzYWJsZWQpOm5vdCgjeyRvcHRpb259LS1zZWxlY3RlZCkge1xuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQ7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgfVxuXG4gICAgICAmLS1oaWdobGlnaHQge1xuICAgICAgICAmOjphZnRlciB7XG4gICAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICAgIH1cblxuICAgICAgICBAYXQtcm9vdCAjeyRzZWxmfSN7JHNlbGZ9LS1zaG93LWhpZ2hsaWdodCAje2xhc3Qtc2VsZWN0b3IoJil9IHtcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWQ7XG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmLS1zZWxlY3RlZCB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dDtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodDtcblxuICAgICAgICAmI3skb3B0aW9ufS0taGlnaGxpZ2h0IHtcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJi0tZGlzYWJsZWQge1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkO1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX3RhZyB7XG4gICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWQ7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgIH1cblxuICAgICZfX3RhZy1pY29uIHtcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICBib3JkZXItcmFkaXVzOiAxZW07XG4gICAgICB3aWR0aDogJHRhZy1pY29uLXdpZHRoO1xuICAgICAgbWFyZ2luOiAwO1xuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIEBleHRlbmQgJWljb24tY2xlYXI7XG5cbiAgICAgICAgZm9udC1zaXplOiAwLjllbTtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyOjphZnRlciB7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX190YWdzLFxuICAgICZfX2NvbnRlbnQtd3JhcHBlciB7XG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXB1dGVkOiB7XG4gICAgaW5wdXRWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSAhPT0gbnVsbCA/IHRoaXMudmFsdWUgOiAnJ1xuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPVxuICAgICAgICAgIHZhbHVlICE9PSAnJ1xuICAgICAgICAgICAgPyB0aGlzLmlzSW50ZWdlclxuICAgICAgICAgICAgICA/IHBhcnNlSW50KHZhbHVlLCAxMClcbiAgICAgICAgICAgICAgOiBwYXJzZUZsb2F0KHZhbHVlKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGlzSW50ZWdlcigpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBzdGVwVmFsdWUoKSB7XG4gICAgICAvLyBEb24ndCBzaG93IHN0ZXBzIGlmIHRoZSBpbnB1dCBpcyBhbHNvIGNsZWFyYWJsZSwgc2luY2UgdGhlIHN0ZXAgYnV0dG9uc1xuICAgICAgLy8gd291bGQgY29sbGlkZSB3aXRoIHRoZSBjbGVhciBidXR0b24uXG4gICAgICByZXR1cm4gdGhpcy5jbGVhcmFibGVcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogdGhpcy5zdGVwID09IG51bGwgJiYgIXRoaXMuaXNJbnRlZ2VyXG4gICAgICAgICAgPyAnYW55J1xuICAgICAgICAgIDogdGhpcy5zdGVwXG4gICAgfSxcblxuICAgIGRlY2ltYWxzOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVjaW1hbHMnLCB7XG4gICAgICB0eXBlOiBOdW1iZXJcbiAgICB9KSxcblxuICAgIHN0ZXA6IGdldFNjaGVtYUFjY2Vzc29yKCdzdGVwJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KHN0ZXApIHtcbiAgICAgICAgLy8gRm9yIGludGVnZXJzLCByb3VuZCB0aGUgc3RlcHMgdG8gdGhlIG5leHQgYmlnZ2VyIGludGVnZXIgdmFsdWU6XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBzdGVwICE9IG51bGwgPyBNYXRoLmNlaWwoc3RlcCkgOiBzdGVwXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtaW46IGdldFNjaGVtYUFjY2Vzc29yKCdtaW4nLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQobWluKSB7XG4gICAgICAgIG1pbiA9XG4gICAgICAgICAgbWluID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgncmFuZ2UnLCB7IHR5cGU6IEFycmF5IH0pPy5bMF1cbiAgICAgICAgICAgIDogbWluXG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBtaW4gIT0gbnVsbCA/IE1hdGguZmxvb3IobWluKSA6IG1pblxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWF4OiBnZXRTY2hlbWFBY2Nlc3NvcignbWF4Jywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KG1heCkge1xuICAgICAgICBtYXggPVxuICAgICAgICAgIG1heCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3JhbmdlJywgeyB0eXBlOiBBcnJheSB9KT8uWzFdXG4gICAgICAgICAgICA6IG1heFxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgbWF4ICE9IG51bGwgPyBNYXRoLmNlaWwobWF4KSA6IG1heFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgcmFuZ2U6IGdldFNjaGVtYUFjY2Vzc29yKCdyYW5nZScsIHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZ2V0KCkge1xuICAgICAgICAvLyBgdGhpcy5taW5gLCBgdGhpcy5tYXhgIGFscmVhZHkgc3VwcG9ydCBgc2NoZW1hLnJhbmdlYCxcbiAgICAgICAgLy8gc28gcmVkaXJlY3QgdGhlcmUuXG4gICAgICAgIGNvbnN0IHsgbWluLCBtYXggfSA9IHRoaXNcbiAgICAgICAgcmV0dXJuIG1pbiAhPSBudWxsICYmIG1heCAhPSBudWxsID8gW21pbiwgbWF4XSA6IHVuZGVmaW5lZFxuICAgICAgfSxcblxuICAgICAgc2V0KHJhbmdlKSB7XG4gICAgICAgIC8vIFByb3ZpZGUgYSBzZXR0ZXIgdGhhdCBkZWxlZ2F0ZXMgdG8gYFt0aGlzLm1pbiwgdGhpcy5tYXhdYCxcbiAgICAgICAgLy8gc2luY2UgdGhvc2UgYWxyZWFkeSBoYW5kbGUgYHNjaGVtYS5yYW5nZWAuXG4gICAgICAgIGlmIChpc0FycmF5KHJhbmdlKSkge1xuICAgICAgICAgIDtbdGhpcy5taW4sIHRoaXMubWF4XSA9IHJhbmdlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0ge31cbiAgICAgIGNvbnN0IHsgcmFuZ2UsIG1pbiwgbWF4LCBkZWNpbWFscywgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLnJhbmdlID0gcmFuZ2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChtaW4gIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1pbiA9IG1pblxuICAgICAgICB9XG4gICAgICAgIGlmIChtYXggIT0gbnVsbCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLm1heCA9IG1heFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZGVjaW1hbHMgIT0gbnVsbCkge1xuICAgICAgICB2YWxpZGF0aW9ucy5kZWNpbWFscyA9IGRlY2ltYWxzXG4gICAgICB9IGVsc2UgaWYgKHN0ZXApIHtcbiAgICAgICAgY29uc3QgZGVjaW1hbHMgPSAoYCR7c3RlcH1gLnNwbGl0KCcuJylbMV0gfHwgJycpLmxlbmd0aFxuICAgICAgICBpZiAoZGVjaW1hbHMgPiAwKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMuZGVjaW1hbHMgPSBkZWNpbWFsc1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbGlkYXRpb25zLmludGVnZXIgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmlzSW50ZWdlcikge1xuICAgICAgICB2YWxpZGF0aW9ucy5pbnRlZ2VyID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25zXG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuSW5wdXRGaWVsZC5kaXRvLW51bWJlcihcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICB0eXBlPVwibnVtYmVyXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIDptaW49XCJtaW5cIlxuICA6bWF4PVwibWF4XCJcbiAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuKVxuICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgWydudW1iZXInLCAnaW50ZWdlciddLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICAgIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICAgIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICAgIHRleHRGaWVsZDogdHJ1ZSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBpc0ludGVnZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGUgPT09ICdpbnRlZ2VyJ1xuICAgICAgfVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLy8gT25seSBzaG93IHNwaW4gYnV0dG9ucyBpZiB0aGUgbnVtYmVyIGNvbXBvbmVudCBkZWZpbmVzIGEgc3RlcCBzaXplLlxuaW5wdXRbdHlwZT0nbnVtYmVyJ106bm90KFtzdGVwXSkge1xuICAmOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLFxuICAmOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9uIHtcbiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLW9iamVjdChcbiAgdi1pZj1cImlzUmVhZHlcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cInNjaGVtYS5jbGFzc1wiXG4gIDpzdHlsZT1cInNjaGVtYS5zdHlsZVwiXG4pXG4gIC5kaXRvLW9iamVjdC1jb250ZW50KFxuICAgIHYtaWY9XCJvYmplY3REYXRhXCJcbiAgKVxuICAgIC8vLSBTdXBwb3J0IHRoZSBzYW1lIHJlbmRlcmluZyBvcHRpb25zIGFzIFR5cGVMaXN0OlxuICAgIERpdG9TY2hlbWFJbmxpbmVkKFxuICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICA6bGFiZWw9XCJvYmplY3RMYWJlbFwiXG4gICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBvYmplY3REYXRhLCBjb250ZXh0KVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICApXG4gICAgY29tcG9uZW50KFxuICAgICAgdi1lbHNlLWlmPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gICAgICA6aXM9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KCkpXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZVxuICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgb2JqZWN0RGF0YSlcIlxuICAgIClcbiAgRGl0b0VkaXRCdXR0b25zKFxuICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgIDpkZWxldGFibGU9XCJvYmplY3REYXRhICYmIGRlbGV0YWJsZVwiXG4gICAgOmVkaXRhYmxlPVwib2JqZWN0RGF0YSAmJiBlZGl0YWJsZVwiXG4gICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICA6ZWRpdFBhdGg9XCJwYXRoXCJcbiAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgIDpwYXRoPVwicGF0aFwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0ob2JqZWN0RGF0YSlcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7IHJlc29sdmVTY2hlbWFDb21wb25lbnQgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignb2JqZWN0Jywge1xuICBtaXhpbnM6IFtTb3VyY2VNaXhpbl0sXG5cbiAga2VlcEFsaWduZWQ6IGZhbHNlLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG9iamVjdExhYmVsKCkge1xuICAgICAgLy8gT25seSBzaG93IGEgbGFiZWwgaWYgdGhlIG9iamVjdCBpcyBjb2xsYXBzaWJsZS5cbiAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNpYmxlXG4gICAgICAgID8gdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zY2hlbWEsIHRoaXMub2JqZWN0RGF0YSwgeyBhc09iamVjdDogdHJ1ZSB9KVxuICAgICAgICA6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgZGF0YTogdGhpcy5vYmplY3REYXRhIH0pXG4gICAgfVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLFxuICAgIHNjaGVtYSxcbiAgICBuYW1lLFxuICAgIHJvdXRlcyxcbiAgICBsZXZlbCxcbiAgICBuZXN0ZWQgPSBmYWxzZSxcbiAgICBmbGF0dGVuID0gZmFsc2UsXG4gICAgcHJvY2VzcyA9IG51bGxcbiAgKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudChzY2hlbWEpLFxuICAgICAgU291cmNlTWl4aW4ucHJvY2Vzc1NjaGVtYShcbiAgICAgICAgYXBpLFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHJvdXRlcyxcbiAgICAgICAgbGV2ZWwsXG4gICAgICAgIG5lc3RlZCxcbiAgICAgICAgZmxhdHRlbixcbiAgICAgICAgcHJvY2Vzc1xuICAgICAgKVxuICAgIF0pXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1vYmplY3Qge1xuICBkaXNwbGF5OiBmbGV4O1xuICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmc7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG5cbiAgLmRpdG8tb2JqZWN0LWNvbnRlbnQge1xuICAgIGZsZXg6IDAgMSAxMDAlO1xuICB9XG5cbiAgPiAuZGl0by1idXR0b25zIHtcbiAgICBmbGV4OiAxIDAgMCU7XG4gICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3BhbmVsJywge1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcbiAga2VlcEFsaWduZWQ6IGZhbHNlLFxuICBvbWl0UGFkZGluZzogdHJ1ZSxcblxuICBnZXRQYW5lbFNjaGVtYShhcGksIHNjaGVtYSkge1xuICAgIC8vIEZvciBhIFR5cGVQYW5lbCwgdGhlIGNvbXBvbmVudCBzY2hlbWEgaXMgYWxzbyB0aGUgcGFuZWwgc2NoZW1hLCBidXRcbiAgICAvLyByZW1vdmUgdGhlIGFkZGVkIG5hbWUsIHNvIGl0IGRvZXNuJ3QgZ2V0IGFwcGVuZGVkIHR3aWNlIHRvIGRhdGEtcGF0aC5cbiAgICBjb25zdCB7IG5hbWUsIC4uLnBhbmVsIH0gPSBzY2hlbWFcbiAgICByZXR1cm4gcGFuZWxcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDp2YWx1ZT1cInByb2dyZXNzVmFsdWVcIlxuICA6bWF4PVwicHJvZ3Jlc3NNYXhcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3Byb2dyZXNzJywge1xuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIGNvbXB1dGVkOiB7XG4gICAgcHJvZ3Jlc3NWYWx1ZSgpIHtcbiAgICAgIGxldCB7IHZhbHVlLCByYW5nZSwgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgIHZhbHVlIC09IHJhbmdlWzBdXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZXApIHtcbiAgICAgICAgICB2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUgLyBzdGVwKSAqIHN0ZXBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSAnJ1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIHByb2dyZXNzTWF4KCkge1xuICAgICAgY29uc3QgeyByYW5nZSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHJhbmdlID8gcmFuZ2VbMV0gLSByYW5nZVswXSA6IG51bGxcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG51bC5kaXRvLXJhZGlvLWJ1dHRvbnMoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuKVxuICBsaShcbiAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgKVxuICAgIGxhYmVsXG4gICAgICBpbnB1dC5kaXRvLXJhZGlvLWJ1dHRvbihcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgKVxuICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3JhZGlvJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlXG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tcmFkaW8tYnV0dG9ucyB7XG4gIGxhYmVsIHtcbiAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzO1xuICB9XG5cbiAgLmRpdG8tcmFkaW8tYnV0dG9uIHtcbiAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc2VjdGlvbig6Y2xhc3M9XCJ7ICdkaXRvLXNlY3Rpb24tbGFiZWxsZWQnOiAhIXNjaGVtYS5sYWJlbCB9XCIpXG4gIERpdG9QYW5lLmRpdG8tc2VjdGlvbl9fcGFuZShcbiAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0SXRlbUZvcm1TY2hlbWEsIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NlY3Rpb24nLCB7XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IHNjaGVtYSA9PiAhc2NoZW1hLm5lc3RlZCAmJiAhKCdkZWZhdWx0JyBpbiBzY2hlbWEpLFxuICBkZWZhdWx0TmVzdGVkOiBmYWxzZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG4gIGtlZXBBbGlnbmVkOiBmYWxzZSxcblxuICBjb21wdXRlZDoge1xuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5uZXN0ZWQgPyB0aGlzLnZhbHVlIDogdGhpcy5kYXRhXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRJdGVtRm9ybVNjaGVtYVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwpIHtcbiAgICAvLyBQcm9jZXNzIHNlY3Rpb24gY29tcG9uZW50cyBzbyB0aGVpciBmb3JtcyBnZXQgcmVzb2x2ZWQgdG9vLlxuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgc2NoZW1hLCByb3V0ZXMsIGxldmVsKVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2VjdGlvbiB7XG4gICYuZGl0by1zZWN0aW9uLWxhYmVsbGVkIHtcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgcGFkZGluZzogJGZvcm0tc3BhY2luZztcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICB9XG5cbiAgLmRpdG8tc2VjdGlvbl9fcGFuZSB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gTmVzdGluZyBpcyBuZWVkZWQgdG8gbWFrZSBhbiBhcnJvdyBhcHBlYXIgb3ZlciB0aGUgc2VsZWN0IGl0ZW06XG4uZGl0by1zZWxlY3RcbiAgc2VsZWN0KFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgQG1vdXNlZG93bj1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgQGZvY3VzPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1pZj1cInBvcHVsYXRlXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiXG4gICAgICApXG4gICAgICAgIG9wdGdyb3VwKFxuICAgICAgICAgIHYtaWY9XCJncm91cEJ5XCJcbiAgICAgICAgICA6bGFiZWw9XCJvcHRpb25bZ3JvdXBCeUxhYmVsXVwiXG4gICAgICAgIClcbiAgICAgICAgICBvcHRpb24oXG4gICAgICAgICAgICB2LWZvcj1cIm9wdCBpbiBvcHRpb25bZ3JvdXBCeU9wdGlvbnNdXCJcbiAgICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdClcIlxuICAgICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0KSB9fVxuICAgICAgICBvcHRpb24oXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1lbHNlLWlmPVwic2VsZWN0ZWRPcHRpb25cIlxuICAgIClcbiAgICAgIG9wdGlvbig6dmFsdWU9XCJzZWxlY3RlZFZhbHVlXCIpIHt7IGdldExhYmVsRm9yT3B0aW9uKHNlbGVjdGVkT3B0aW9uKSB9fVxuICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgQGNsaWNrPVwiY2xlYXJcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NlbGVjdCcsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBEaXNhYmxlIGxhenktcG9wdWxhdGlvbiBmb3Igbm93LlxuICAgICAgLy8gVE9ETzogU2V0IHRvIGBmYWxzZWAgT25jZSBsaW5ldG8gZTJlIHRlc3RzIGFkZHJlc3MgdGhlaXIgaXNzdWVzLlxuICAgICAgcG9wdWxhdGU6IHRydWVcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4vLyBUT0RPOiBNb3ZlIHRvIGRpdG8tdWlcbiRzZWxlY3QtYXJyb3ctcmlnaHQ6IGNhbGMoKCRzZWxlY3QtYXJyb3ctd2lkdGggLSAkc2VsZWN0LWFycm93LXNpemUpIC8gMik7XG5cbi5kaXRvLXNlbGVjdCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIHNlbGVjdCB7XG4gICAgcGFkZGluZy1yaWdodDogJHNlbGVjdC1hcnJvdy13aWR0aDtcbiAgfVxuICAvLyBIYW5kbGUgLmRpdG8td2lkdGgtZmlsbCBzZXBhcmF0ZWx5IGR1ZSB0byByZXF1aXJlZCBuZXN0aW5nIG9mIHNlbGVjdDpcbiAgJi5kaXRvLXdpZHRoLWZpbGwge1xuICAgIHNlbGVjdCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gIH1cblxuICAmOjphZnRlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIEBpbmNsdWRlIGFycm93KCRzZWxlY3QtYXJyb3ctc2l6ZSk7XG5cbiAgICBib3R0b206ICRzZWxlY3QtYXJyb3ctYm90dG9tO1xuICAgIHJpZ2h0OiBjYWxjKCN7JHNlbGVjdC1hcnJvdy1yaWdodH0gKyAjeyRib3JkZXItd2lkdGh9KTtcbiAgfVxuXG4gICYuZGl0by1kaXNhYmxlZDo6YWZ0ZXIge1xuICAgIGJvcmRlci1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zbGlkZXJcbiAgaW5wdXQuZGl0by1yYW5nZShcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG4gIElucHV0RmllbGQuZGl0by1udW1iZXIoXG4gICAgdi1pZj1cImlucHV0XCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdHlwZT1cIm51bWJlclwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgOm1pbj1cIm1pblwiXG4gICAgOm1heD1cIm1heFwiXG4gICAgOnN0ZXA9XCJzdGVwVmFsdWVcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2xpZGVyJywge1xuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgSW5wdXRGaWVsZCB9LFxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcblxuICBjb21wdXRlZDoge1xuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0lucHV0YD9cbiAgICBpbnB1dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2lucHV0Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2xpZGVyIHtcbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1yYW5nZSB7XG4gICAgZmxleDogYXV0bztcbiAgICBoZWlnaHQ6IGNhbGMoMWVtICogdmFyKC0tbGluZS1oZWlnaHQpKTtcbiAgfVxuXG4gIC5kaXRvLW51bWJlciB7XG4gICAgYm9yZGVyOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5Td2l0Y2hCdXR0b24uZGl0by1zd2l0Y2goXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIDpsYWJlbHM9XCJsYWJlbHNcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBTd2l0Y2hCdXR0b24gfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzd2l0Y2gnLCB7XG4gIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuXG4gIGNvbXBvbmVudHM6IHtcbiAgICBTd2l0Y2hCdXR0b25cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxhYmVscygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5sYWJlbHNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zd2l0Y2gge1xuICAuZGl0by1zd2l0Y2gtbGFiZWwge1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXB1dGVkOiB7XG4gICAgdHJpbTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RyaW0nLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgcmV0dXJuIHNjaGVtYS50cmltID8gdmFsdWU/LnRyaW0oKSA6IHZhbHVlXG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5JbnB1dEZpZWxkLmRpdG8tdGV4dChcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICA6dHlwZT1cImlucHV0VHlwZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuKVxuICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgVGV4dE1peGluIGZyb20gJy4uL21peGlucy9UZXh0TWl4aW4nXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbmNvbnN0IG1hc2tlZFBhc3N3b3JkID0gJyoqKioqKioqKioqKioqKionXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbXG4gICAgJ3RleHQnLFxuICAgICdlbWFpbCcsXG4gICAgJ3VybCcsXG4gICAgJ2hvc3RuYW1lJyxcbiAgICAnZG9tYWluJyxcbiAgICAndGVsJyxcbiAgICAncGFzc3dvcmQnLFxuICAgICdjcmVkaXRjYXJkJ1xuICBdLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgbWl4aW5zOiBbVGV4dE1peGluXSxcbiAgICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgICB0ZXh0RmllbGQ6IHRydWUsXG4gICAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gc2NoZW1hLnR5cGUgPT09ICdwYXNzd29yZCcsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgaW5wdXRUeXBlKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNyZWRpdGNhcmQ6ICd0ZXh0JyxcbiAgICAgICAgICAgIGhvc3RuYW1lOiAndGV4dCcsXG4gICAgICAgICAgICBkb21haW46ICd0ZXh0J1xuICAgICAgICAgIH1bdGhpcy50eXBlXSB8fFxuICAgICAgICAgIHRoaXMudHlwZVxuICAgICAgICApXG4gICAgICB9LFxuXG4gICAgICBpbnB1dFZhbHVlOiB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy50eXBlID09PSAncGFzc3dvcmQnICYmXG4gICAgICAgICAgICB0aGlzLnZhbHVlID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICF0aGlzLmZvY3VzZWRcbiAgICAgICAgICApXG4gICAgICAgICAgICA/IG1hc2tlZFBhc3N3b3JkXG4gICAgICAgICAgICA6IHRoaXMudmFsdWVcbiAgICAgICAgfSxcblxuICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgICAgY29uc3QgcnVsZSA9IHtcbiAgICAgICAgICBlbWFpbDogJ2VtYWlsJyxcbiAgICAgICAgICB1cmw6ICd1cmwnLFxuICAgICAgICAgIGhvc3RuYW1lOiAnaG9zdG5hbWUnLFxuICAgICAgICAgIGRvbWFpbjogJ2RvbWFpbicsXG4gICAgICAgICAgcGFzc3dvcmQ6ICdwYXNzd29yZCcsXG4gICAgICAgICAgY3JlZGl0Y2FyZDogJ2NyZWRpdGNhcmQnXG4gICAgICAgIH1bdGhpcy50eXBlXVxuICAgICAgICByZXR1cm4gcnVsZSA/IHsgW3J1bGVdOiB0cnVlIH0gOiB7fVxuICAgICAgfVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudGV4dGFyZWEuZGl0by10ZXh0YXJlYS5kaXRvLWlucHV0KFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgOnJvd3M9XCJsaW5lc1wiXG4gIDpjbGFzcz1cInsgJ2RpdG8tcmVzaXphYmxlJzogcmVzaXphYmxlIH1cIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBUZXh0TWl4aW4gZnJvbSAnLi4vbWl4aW5zL1RleHRNaXhpbidcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndGV4dGFyZWEnLCB7XG4gIG1peGluczogW1RleHRNaXhpbl0sXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG4gIGtlZXBBbGlnbmVkOiBmYWxzZSxcblxuICBjb21wdXRlZDoge1xuICAgIGxpbmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxpbmVzIHx8IDRcbiAgICB9LFxuXG4gICAgcmVzaXphYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVzaXphYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRleHRhcmVhIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHJlc2l6ZTogbm9uZTtcbiAgbWluLWhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkgKyAjezIgKiAkaW5wdXQtcGFkZGluZy12ZXJ9KTtcblxuICAmLmRpdG8tcmVzaXphYmxlIHtcbiAgICByZXNpemU6IHZlcnRpY2FsO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXRyZWUtbGlzdFxuICBEaXRvU2NvcGVzKFxuICAgIHYtaWY9XCJzY29wZXNcIlxuICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICA6c2NvcGVzPVwic2NvcGVzXCJcbiAgKVxuICAuZGl0by10cmVlLXBhbmVsXG4gICAgRGl0b1RyZWVJdGVtKFxuICAgICAgOnNjaGVtYT1cInRyZWVTY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwidHJlZURhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwidHJlZURhdGFcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICA6b3Blbj1cInRydWVcIlxuICAgIClcbiAgICAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyKFxuICAgICAgdi1pZj1cImhhc0VkaXRhYmxlRm9ybXNcIlxuICAgIClcbiAgICAgIC8vLSBJbmNsdWRlIGEgcm91dGVyLXZpZXcgZm9yIHRoZSBvcHRpb25hbCBEaXRvRm9ybUlubGluZWRcbiAgICAgIFJvdXRlclZpZXdcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHtcbiAgaGFzRm9ybVNjaGVtYSxcbiAgZ2V0Rm9ybVNjaGVtYXMsXG4gIHJlc29sdmVTY2hlbWFDb21wb25lbnRzXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsndHJlZS1saXN0JywgJ3RyZWUtb2JqZWN0J10sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBtaXhpbnM6IFtTb3VyY2VNaXhpbl0sXG5cbiAgICBrZWVwQWxpZ25lZDogZmFsc2UsXG5cbiAgICBwcm92aWRlKCkge1xuICAgICAgcmV0dXJuIHsgY29udGFpbmVyOiB0aGlzIH1cbiAgICB9LFxuXG4gICAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgICByZXR1cm4gdHlwZSA9PT0gJ3RyZWUtb2JqZWN0JyA/ICdvYmplY3QnIDogJ2xpc3QnXG4gICAgfSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBwYXRoKCkge1xuICAgICAgICAvLyBBY2Nlc3NlZCBmcm9tIERpdG9UcmVlSXRlbSB0aHJvdWdoIGBjb250YWluZXIucGF0aGA6XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ/LnBhdGhcbiAgICAgIH0sXG5cbiAgICAgIGVkaXRQYXRoKCkge1xuICAgICAgICAvLyBBY2Nlc3NlZCBmcm9tIERpdG9UcmVlSXRlbSB0aHJvdWdoIGBjb250YWluZXIuZWRpdFBhdGhgOlxuICAgICAgICByZXR1cm4gdGhpcy4kcm91dGUucGF0aC5zbGljZSh0aGlzLnBhdGg/Lmxlbmd0aClcbiAgICAgIH0sXG5cbiAgICAgIHRyZWVEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICA/IHsgW3RoaXMubmFtZV06IHRoaXMudmFsdWUgfVxuICAgICAgICAgIDogdGhpcy52YWx1ZVxuICAgICAgfSxcblxuICAgICAgdHJlZURhdGFQYXRoKCkge1xuICAgICAgICAvLyBSZW1vdmUgYG5hbWVgIGZyb20gYGRhdGFQYXRoYCwgYXMgaXQgaXMgYWRkZWRcbiAgICAgICAgLy8gdG8gYHRyZWVEYXRhYCBhbmQgYHRyZWVTY2hlbWFgXG4gICAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICAgID8gdGhpcy5kYXRhUGF0aC5zbGljZSgwLCB0aGlzLmRhdGFQYXRoLmxlbmd0aCAtIHRoaXMubmFtZS5sZW5ndGgpXG4gICAgICAgICAgOiB0aGlzLmRhdGFQYXRoXG4gICAgICB9LFxuXG4gICAgICB0cmVlU2NoZW1hKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgY2hpbGRyZW46IHtcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgICAgICAgLi4udGhpcy5zY2hlbWFcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogdGhpcy5zY2hlbWFcbiAgICAgIH0sXG5cbiAgICAgIGhhc0VkaXRhYmxlRm9ybXMoKSB7XG4gICAgICAgIGNvbnN0IGhhc0VkaXRhYmxlRm9ybXMgPSBzY2hlbWEgPT4ge1xuICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBoYXNGb3JtU2NoZW1hKHNjaGVtYSkgJiYgKFxuICAgICAgICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdlZGl0YWJsZScsIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNjaGVtYVxuICAgICAgICAgICAgICB9KSB8fFxuICAgICAgICAgICAgICBzY2hlbWEuY2hpbGRyZW4gJiZcbiAgICAgICAgICAgICAgaGFzRWRpdGFibGVGb3JtcyhzY2hlbWEuY2hpbGRyZW4pXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBoYXNFZGl0YWJsZUZvcm1zKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgICAgYXBpLFxuICAgICAgc2NoZW1hLFxuICAgICAgbmFtZSxcbiAgICAgIHJvdXRlcyxcbiAgICAgIGxldmVsLFxuICAgICAgbmVzdGVkID0gdHJ1ZSxcbiAgICAgIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICAgIHByb2Nlc3MgPSBudWxsXG4gICAgKSB7XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHJlc29sdmVTY2hlbWFDb21wb25lbnRzKHNjaGVtYS5wcm9wZXJ0aWVzKSxcbiAgICAgICAgU291cmNlTWl4aW4ucHJvY2Vzc1NjaGVtYShcbiAgICAgICAgICBhcGksXG4gICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgcm91dGVzLFxuICAgICAgICAgIGxldmVsLFxuICAgICAgICAgIG5lc3RlZCxcbiAgICAgICAgICBmbGF0dGVuLFxuICAgICAgICAgIC8vIFBhc3MgcHJvY2VzcygpIHRvIGFkZCBtb3JlIHJvdXRlcyB0byBjaGlsZFJvdXRlczpcbiAgICAgICAgICAoY2hpbGRSb3V0ZXMsIGxldmVsKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbikge1xuICAgICAgICAgICAgICAvLyBBZGQgYHR5cGVgIHRvIHRoZSBuZXN0ZWQgdHJlZSBsaXN0LlxuICAgICAgICAgICAgICBjaGlsZHJlbi50eXBlID0gJ3RyZWUtbGlzdCdcbiAgICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgY2FsbCBgcHJvY2Vzc1NjaGVtYSgpYCBmb3IgdGhlIG5lc3RlZCB0cmVlIGxpc3Q6XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgICAgICAgICAgYXBpLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuLm5hbWUsXG4gICAgICAgICAgICAgICAgY2hpbGRSb3V0ZXMsXG4gICAgICAgICAgICAgICAgbGV2ZWwsXG4gICAgICAgICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgICAgICAgIHRydWUsIC8vIFBhc3MgYHRydWVgIGZvciBgZmxhdHRlbmAgaW4gdHJlZSBsaXN0cy5cbiAgICAgICAgICAgICAgICBwcm9jZXNzXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgfSxcblxuICAgIGdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyhzY2hlbWEsIGNvbnRleHQpIHtcbiAgICAgIC8vIENvbnZlcnQgbmVzdGVkIGNoaWxkcmVuIHNjaGVtYSB0byBzdGFuZC1hbG9uZSBzY2hlbWEgY29tcG9uZW50LFxuICAgICAgLy8gcHJlc2VudCBpbiBlYWNoIG9mIHRoZSBmb3JtcywgYXMgcmVxdWlyZWQgYnkgYHByb2Nlc3NTY2hlbWFEYXRhKClgXG4gICAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSBzY2hlbWFcbiAgICAgIHJldHVybiBnZXRGb3JtU2NoZW1hcyhcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjaGlsZHJlblxuICAgICAgICAgID8gZm9ybSA9PiAoe1xuICAgICAgICAgICAgICAuLi5mb3JtLFxuICAgICAgICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgICAgICAgLi4uZm9ybS5jb21wb25lbnRzLFxuICAgICAgICAgICAgICAgIFtjaGlsZHJlbi5uYW1lXTogY2hpbGRyZW5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IG51bGxcbiAgICAgIClcbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRyZWUtbGlzdCB7XG4gIEBleHRlbmQgJWZpZWxkO1xuXG4gIC5kaXRvLXRyZWUtcGFuZWwge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gICAgPiAuZGl0by10cmVlLWl0ZW0ge1xuICAgICAgZmxleDogMSAxIDI1JTtcbiAgICB9XG5cbiAgICA+IC5kaXRvLXRyZWUtZm9ybS1jb250YWluZXIge1xuICAgICAgZmxleDogMCAxIDc1JTtcbiAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgICAgYm9yZGVyLWxlZnQ6ICRib3JkZXItc3R5bGU7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAxO1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gMTtcbiAgICAgIG1hcmdpbjogKC0kaW5wdXQtcGFkZGluZy12ZXIpICgtJGlucHV0LXBhZGRpbmctaG9yKTtcbiAgICAgIG1hcmdpbi1sZWZ0OiAkaW5wdXQtcGFkZGluZy1ob3I7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgZmlsZXNpemUgfSBmcm9tICdmaWxlc2l6ZSdcblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdEZpbGVTaXplKHNpemUpIHtcbiAgcmV0dXJuIGZpbGVzaXplKHNpemUsIHsgYmFzZTogMTAgfSlcbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by11cGxvYWRcbiAgdGFibGUuZGl0by10YWJsZS5kaXRvLXRhYmxlLXNlcGFyYXRvcnMuZGl0by10YWJsZS1iYWNrZ3JvdW5kXG4gICAgLy8tIFN0eWxpbmcgY29tZXMgZnJvbSBEaXRvVGFibGVIZWFkXG4gICAgdGhlYWQuZGl0by10YWJsZS1oZWFkXG4gICAgICB0clxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gTmFtZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU2l6ZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU3RhdHVzXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhblxuICAgIERpdG9EcmFnZ2FibGUoXG4gICAgICB2LW1vZGVsPVwiZmlsZXNcIlxuICAgICAgdGFnPVwidGJvZHlcIlxuICAgICAgOm9wdGlvbnM9XCJnZXRTb3J0YWJsZU9wdGlvbnMoZmFsc2UpXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgIClcbiAgICAgIHRyKFxuICAgICAgICB2LWZvcj1cIihmaWxlLCBpbmRleCkgaW4gZmlsZXNcIlxuICAgICAgICA6a2V5PVwiZmlsZS5rZXlcIlxuICAgICAgKVxuICAgICAgICB0ZChcbiAgICAgICAgICB2LWh0bWw9XCJyZW5kZXJGaWxlKGZpbGUsIGluZGV4KVwiXG4gICAgICAgIClcbiAgICAgICAgdGQge3sgZm9ybWF0RmlsZVNpemUoZmlsZS5zaXplKSB9fVxuICAgICAgICB0ZFxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1pZj1cImZpbGUudXBsb2FkXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICAgdi1pZj1cImZpbGUudXBsb2FkLmVycm9yXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfCBFcnJvcjoge3sgZmlsZS51cGxvYWQuZXJyb3IgfX1cbiAgICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5hY3RpdmVcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB8IFVwbG9hZGluZy4uLlxuICAgICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAgIHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLnN1Y2Nlc3NcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB8IFVwbG9hZGVkXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICApXG4gICAgICAgICAgICB8IFN0b3JlZFxuICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zXG4gICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICAgICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwiZGVsZXRlRmlsZShmaWxlLCBpbmRleClcIlxuICAgICAgICAgICAgKVxuICAgIHRmb290XG4gICAgICB0clxuICAgICAgICB0ZCg6Y29sc3Bhbj1cIjRcIilcbiAgICAgICAgICAuZGl0by11cGxvYWQtZm9vdGVyXG4gICAgICAgICAgICBwcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICA6dmFsdWU9XCJ1cGxvYWRQcm9ncmVzc1wiXG4gICAgICAgICAgICAgIG1heD1cIjEwMFwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cInVwbG9hZC5hY3RpdmUgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICkgQ2FuY2VsIEFsbFxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiaXNVcGxvYWRSZWFkeVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICkgVXBsb2FkIEFsbFxuICAgICAgICAgICAgICBWdWVVcGxvYWQuZGl0by1idXR0b24uZGl0by1idXR0b24tYWRkLXVwbG9hZChcbiAgICAgICAgICAgICAgICByZWY9XCJ1cGxvYWRcIlxuICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJ1cGxvYWRzXCJcbiAgICAgICAgICAgICAgICA6aW5wdXRJZD1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICA6bmFtZT1cImRhdGFQYXRoXCJcbiAgICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgOnBvc3RBY3Rpb249XCJ1cGxvYWRQYXRoXCJcbiAgICAgICAgICAgICAgICA6ZXh0ZW5zaW9ucz1cImV4dGVuc2lvbnNcIlxuICAgICAgICAgICAgICAgIDphY2NlcHQ9XCJhY2NlcHRcIlxuICAgICAgICAgICAgICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICA6c2l6ZT1cIm1heFNpemVcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwiVXBsb2FkIEZpbGVzXCJcbiAgICAgICAgICAgICAgICBAaW5wdXQtZmlsdGVyPVwiaW5wdXRGaWx0ZXJcIlxuICAgICAgICAgICAgICAgIEBpbnB1dC1maWxlPVwiaW5wdXRGaWxlXCJcbiAgICAgICAgICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBTb3J0YWJsZU1peGluIGZyb20gJy4uL21peGlucy9Tb3J0YWJsZU1peGluLmpzJ1xuaW1wb3J0IHBhcnNlRmlsZVNpemUgZnJvbSAnZmlsZXNpemUtcGFyc2VyJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGZvcm1hdEZpbGVTaXplIH0gZnJvbSAnLi4vdXRpbHMvdW5pdHMuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5LCBlc2NhcGVIdG1sIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBWdWVVcGxvYWQgZnJvbSAndnVlLXVwbG9hZC1jb21wb25lbnQnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndXBsb2FkJywge1xuICBtaXhpbnM6IFtTb3J0YWJsZU1peGluXSxcbiAgY29tcG9uZW50czogeyBWdWVVcGxvYWQgfSxcblxuICBrZWVwQWxpZ25lZDogZmFsc2UsXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXBsb2FkczogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB1cGxvYWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy51cGxvYWRcbiAgICB9LFxuXG4gICAgZmlsZXMoKSB7XG4gICAgICByZXR1cm4gYXNGaWxlcyh0aGlzLnZhbHVlKVxuICAgIH0sXG5cbiAgICBtdWx0aXBsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ211bHRpcGxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gTm8gY2FsbGJhY2sgYXMgaXQncyB1c2VkIGluIGBwcm9jZXNzVmFsdWUoKWBcbiAgICAgIGNhbGxiYWNrOiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZXh0ZW5zaW9uczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4dGVuc2lvbnMnLCB7XG4gICAgICB0eXBlOiBbQXJyYXksIFN0cmluZywgUmVnRXhwXVxuICAgIH0pLFxuXG4gICAgYWNjZXB0OiBnZXRTY2hlbWFBY2Nlc3NvcignYWNjZXB0Jywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBnZXQoYWNjZXB0KSB7XG4gICAgICAgIHJldHVybiBpc0FycmF5KGFjY2VwdCkgPyBhY2NlcHQuam9pbignLCcpIDogYWNjZXB0XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXhTaXplOiBnZXRTY2hlbWFBY2Nlc3NvcignbWF4U2l6ZScsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBnZXQobWF4U2l6ZSkge1xuICAgICAgICByZXR1cm4gbWF4U2l6ZSA/IHBhcnNlRmlsZVNpemUobWF4U2l6ZSkgOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIGRyYWdnYWJsZSAmJiB0aGlzLmZpbGVzLmxlbmd0aCA+IDFcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgaXNVcGxvYWRSZWFkeSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMudXBsb2Fkcy5sZW5ndGggJiZcbiAgICAgICAgISh0aGlzLnVwbG9hZC5hY3RpdmUgfHwgdGhpcy51cGxvYWQudXBsb2FkZWQpXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzVXBsb2FkQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMudXBsb2Fkcy5sZW5ndGggJiYgdGhpcy51cGxvYWQuYWN0aXZlXG4gICAgfSxcblxuICAgIHVwbG9hZFByb2dyZXNzKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy51cGxvYWRzLnJlZHVjZSgodG90YWwsIGZpbGUpID0+IHRvdGFsICsgZmlsZS5wcm9ncmVzcywgMCkgL1xuICAgICAgICB0aGlzLnVwbG9hZHMubGVuZ3RoXG4gICAgICApXG4gICAgfSxcblxuICAgIHVwbG9hZFBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZVVybCh7XG4gICAgICAgIHR5cGU6ICd1cGxvYWQnLFxuICAgICAgICBwYXRoOiB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKHRoaXMuZGF0YVBhdGgpXG4gICAgICB9KVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9ybWF0RmlsZVNpemUsXG5cbiAgICByZW5kZXJGaWxlKGZpbGUsIGluZGV4KSB7XG4gICAgICBjb25zdCB7IHJlbmRlciB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIHJldHVybiByZW5kZXJcbiAgICAgICAgPyByZW5kZXIuY2FsbChcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgICB2YWx1ZTogZmlsZSxcbiAgICAgICAgICAgICAgZGF0YTogdGhpcy5maWxlcyxcbiAgICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICAgIGRhdGFQYXRoOiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBpbmRleClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICA6IGVzY2FwZUh0bWwoZmlsZS5uYW1lKVxuICAgIH0sXG5cbiAgICBkZWxldGVGaWxlKGZpbGUsIGluZGV4KSB7XG4gICAgICBjb25zdCB7IG5hbWUgfSA9IGZpbGVcblxuICAgICAgaWYgKFxuICAgICAgICBmaWxlICYmXG4gICAgICAgIHdpbmRvdy5jb25maXJtKFxuICAgICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLnJlbW92ZX0gJHtuYW1lfT9gXG4gICAgICAgIClcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbGUudXBsb2FkKSB7XG4gICAgICAgICAgdGhpcy51cGxvYWQucmVtb3ZlKGZpbGUudXBsb2FkKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgIHRpdGxlOiAnU3VjY2Vzc2Z1bGx5IFJlbW92ZWQnLFxuICAgICAgICAgIHRleHQ6IGAke25hbWV9IHdhcyAke3RoaXMudmVyYnMuZGVsZXRlZH0uYFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRGaWxlSW5kZXgoZmlsZSkge1xuICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGUgJiYgdGhpcy52YWx1ZVxuICAgICAgICA/IHRoaXMudmFsdWUuZmluZEluZGV4KGl0ID0+IGl0LmlkID09PSBmaWxlLmlkKVxuICAgICAgICA6IC0xXG4gICAgfSxcblxuICAgIGFkZEZpbGUoZmlsZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlLnB1c2goZmlsZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gW2ZpbGVdXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBmaWxlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlcGxhY2VGaWxlKGZpbGUsIG5ld0ZpbGUpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRGaWxlSW5kZXgoZmlsZSlcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICBpZiAobmV3RmlsZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZVtpbmRleF0gPSBuZXdGaWxlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IG5ld0ZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVtb3ZlRmlsZShmaWxlKSB7XG4gICAgICB0aGlzLnJlcGxhY2VGaWxlKGZpbGUsIG51bGwpXG4gICAgfSxcblxuICAgIGlucHV0RmlsZShuZXdGaWxlLCBvbGRGaWxlKSB7XG4gICAgICBpZiAobmV3RmlsZSAmJiAhb2xkRmlsZSkge1xuICAgICAgICBjb25zdCB7IGlkLCBuYW1lLCBzaXplIH0gPSBuZXdGaWxlXG4gICAgICAgIHRoaXMuYWRkRmlsZSh7IGlkLCBuYW1lLCBzaXplLCB1cGxvYWQ6IG5ld0ZpbGUgfSlcbiAgICAgIH1cbiAgICAgIGlmIChuZXdGaWxlICYmIG9sZEZpbGUpIHtcbiAgICAgICAgY29uc3QgeyBzdWNjZXNzLCBlcnJvciB9ID0gbmV3RmlsZVxuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICAgIGNvbnN0IGZpbGUgPSBuZXdGaWxlLnJlc3BvbnNlWzBdXG4gICAgICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgICAgIGZpbGUudXBsb2FkID0gbmV3RmlsZVxuICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgdXBsb2FkIGZpbGUgb2JqZWN0IHdpdGggdGhlIGZpbGUgb2JqZWN0IHJlY2VpdmVkXG4gICAgICAgICAgICAvLyBmcm9tIHRoZSB1cGxvYWQgcmVzcG9uc2UuXG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VGaWxlKG5ld0ZpbGUsIGZpbGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShuZXdGaWxlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlcnJvcikge1xuICAgICAgICAgIGNvbnN0IHRleHQgPSAoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFib3J0OiAnVXBsb2FkIGFib3J0ZWQnLFxuICAgICAgICAgICAgICBkZW5pZWQ6ICdVcGxvYWQgZGVuaWVkJyxcbiAgICAgICAgICAgICAgZXh0ZW5zaW9uOiBgVW5zdXBwb3J0ZWQgZmlsZS10eXBlOiAke25ld0ZpbGUubmFtZX1gLFxuICAgICAgICAgICAgICBuZXR3b3JrOiAnTmV0d29yayBlcnJvciBlbmNvdW50ZXJlZCBkdXJpbmcgdXBsb2FkJyxcbiAgICAgICAgICAgICAgc2VydmVyOiAnU2VydmVyIGVycm9yIG9jY3VycmVkIGR1cmluZyB1cGxvYWQnLFxuICAgICAgICAgICAgICBzaXplOiBgRmlsZSBpcyB0b28gbGFyZ2U6ICR7Zm9ybWF0RmlsZVNpemUobmV3RmlsZS5zaXplKX1gLFxuICAgICAgICAgICAgICB0aW1lb3V0OiAnVGltZW91dCBvY2N1cnJlZCBkdXJpbmcgdXBsb2FkJ1xuICAgICAgICAgICAgfVtlcnJvcl0gfHxcbiAgICAgICAgICAgIGBVbmtub3duIEZpbGUgVXBsb2FkIEVycm9yOiAnJHtlcnJvcn0nYFxuICAgICAgICAgIClcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdGaWxlIFVwbG9hZCBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0XG4gICAgICAgICAgfSlcbiAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUobmV3RmlsZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBpbnB1dEZpbHRlcihuZXdGaWxlIC8qLCBvbGRGaWxlLCBwcmV2ZW50ICovKSB7XG4gICAgICBjb25zdCB4aHIgPSBuZXdGaWxlPy54aHJcbiAgICAgIGlmICh0aGlzLmFwaS5jb3JzPy5jcmVkZW50aWFscyAmJiB4aHIgJiYgIXhoci53aXRoQ3JlZGVudGlhbHMpIHtcbiAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUpIHtcbiAgICAvLyBGaWx0ZXIgb3V0IGFsbCBuZXdseSBhZGRlZCBmaWxlcyB0aGF0IHdlcmVuJ3QgYWN0dWFsbHkgdXBsb2FkZWQuXG4gICAgY29uc3QgZmlsZXMgPSBhc0ZpbGVzKHZhbHVlKVxuICAgICAgLm1hcCgoeyB1cGxvYWQsIC4uLmZpbGUgfSkgPT4gKCF1cGxvYWQgfHwgdXBsb2FkLnN1Y2Nlc3MgPyBmaWxlIDogbnVsbCkpXG4gICAgICAuZmlsdGVyKGZpbGUgPT4gZmlsZSlcbiAgICByZXR1cm4gc2NoZW1hLm11bHRpcGxlID8gZmlsZXMgOiBmaWxlc1swXSB8fCBudWxsXG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGFzRmlsZXModmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID8gYXNBcnJheSh2YWx1ZSkgOiBbXVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdXBsb2FkIHtcbiAgLmRpdG8tdGFibGUge1xuICAgIHRyIHtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tYnV0dG9uLWFkZC11cGxvYWQge1xuICAgIHBhZGRpbmc6IDA7XG5cbiAgICA+ICoge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXVwbG9hZC1mb290ZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gICAgLmRpdG8tcHJvZ3Jlc3Mge1xuICAgICAgZmxleDogYXV0bztcbiAgICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBtb3VudGVkKG5vZGUsIGJpbmRpbmcpIHtcbiAgICBvYnNlcnZlUmVzaXplKG5vZGUsIGJpbmRpbmcudmFsdWUsIGJpbmRpbmcuYXJnKVxuICB9LFxuXG4gIHVubW91bnRlZChub2RlLCBiaW5kaW5nKSB7XG4gICAgdW5vYnNlcnZlUmVzaXplKG5vZGUsIGJpbmRpbmcudmFsdWUsIGJpbmRpbmcuYXJnKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvYnNlcnZlUmVzaXplKG5vZGUsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgT2JzZXJ2ZXIuZ2V0T2JzZXJ2ZXIob3B0aW9ucykub2JzZXJ2ZShub2RlLCBoYW5kbGVyKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5vYnNlcnZlUmVzaXplKG5vZGUsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgT2JzZXJ2ZXIuZ2V0T2JzZXJ2ZXIob3B0aW9ucykudW5vYnNlcnZlKG5vZGUsIGhhbmRsZXIpXG59XG5cbmV4cG9ydCBjb25zdCBpc1Jlc2l6ZVN1cHBvcnRlZCA9IHR5cGVvZiBSZXNpemVPYnNlcnZlciAhPT0gJ3VuZGVmaW5lZCdcblxuY29uc3Qgb2JzZXJ2ZXJzID0ge31cblxuY2xhc3MgT2JzZXJ2ZXIge1xuICBjb25zdHJ1Y3RvcihrZXksIG9wdGlvbnMpIHtcbiAgICB0aGlzLmtleSA9IGtleVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcbiAgICB0aGlzLm9ic2VydmVyID0gaXNSZXNpemVTdXBwb3J0ZWRcbiAgICAgID8gbmV3IFJlc2l6ZU9ic2VydmVyKGVudHJpZXMgPT4gdGhpcy5oYW5kbGUoZW50cmllcykpXG4gICAgICA6IG51bGxcbiAgICB0aGlzLmhhbmRsZXJzQnlOb2RlID0gbmV3IFdlYWtNYXAoKVxuICAgIHRoaXMubm9kZUNvdW50ID0gMFxuICB9XG5cbiAgb2JzZXJ2ZShub2RlLCBoYW5kbGVyKSB7XG4gICAgbGV0IGhhbmRsZXJzID0gdGhpcy5oYW5kbGVyc0J5Tm9kZS5nZXQobm9kZSlcbiAgICBpZiAoIWhhbmRsZXJzKSB7XG4gICAgICBoYW5kbGVycyA9IG5ldyBTZXQoKVxuICAgICAgdGhpcy5oYW5kbGVyc0J5Tm9kZS5zZXQobm9kZSwgaGFuZGxlcnMpXG4gICAgICB0aGlzLm9ic2VydmVyPy5vYnNlcnZlKG5vZGUsIHRoaXMub3B0aW9ucylcbiAgICAgIHRoaXMubm9kZUNvdW50KytcbiAgICB9XG4gICAgaGFuZGxlcnMuYWRkKGhhbmRsZXIpXG4gIH1cblxuICB1bm9ic2VydmUobm9kZSwgaGFuZGxlcikge1xuICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5oYW5kbGVyc0J5Tm9kZS5nZXQobm9kZSlcbiAgICBpZiAoaGFuZGxlcnM/LmRlbGV0ZShoYW5kbGVyKSAmJiBoYW5kbGVycy5zaXplID09PSAwKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzQnlOb2RlLmRlbGV0ZShub2RlKVxuICAgICAgdGhpcy5vYnNlcnZlcj8udW5vYnNlcnZlKG5vZGUpXG4gICAgICBpZiAoLS10aGlzLm5vZGVDb3VudCA9PT0gMCkge1xuICAgICAgICBkZWxldGUgb2JzZXJ2ZXJzW3RoaXMua2V5XVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGhhbmRsZShlbnRyaWVzKSB7XG4gICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnNCeU5vZGUuZ2V0KGVudHJ5LnRhcmdldClcbiAgICAgIGlmIChoYW5kbGVycykge1xuICAgICAgICBjb25zdCBldmVudCA9IHtcbiAgICAgICAgICB0YXJnZXQ6IGVudHJ5LnRhcmdldCxcbiAgICAgICAgICBjb250ZW50UmVjdDogZW50cnkuY29udGVudFJlY3QsXG4gICAgICAgICAgLy8gVXNlIGBhc0FycmF5YCBzaW5jZSBGaXJlZm94IGJlZm9yZSB2OTIgcmV0dXJucyB0aGVzZSBhcyBvYmplY3RzOlxuICAgICAgICAgIGJvcmRlckJveFNpemU6IGFzQXJyYXkoZW50cnkuYm9yZGVyQm94U2l6ZSksXG4gICAgICAgICAgY29udGVudEJveFNpemU6IGFzQXJyYXkoZW50cnkuY29udGVudEJveFNpemUpLFxuICAgICAgICAgIGRldmljZVBpeGVsQ29udGVudEJveFNpemU6IGFzQXJyYXkoZW50cnkuZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZSlcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgaGFuZGxlcnMpIHtcbiAgICAgICAgICBoYW5kbGVyKGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldE9ic2VydmVyKHsgYm94ID0gJ2NvbnRlbnQtYm94JyB9ID0ge30pIHtcbiAgICBjb25zdCBvcHRpb25zID0geyBib3ggfVxuICAgIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpXG4gICAgb2JzZXJ2ZXJzW2tleV0gfHw9IG5ldyBPYnNlcnZlcihrZXksIG9wdGlvbnMpXG4gICAgcmV0dXJuIG9ic2VydmVyc1trZXldXG4gIH1cbn1cbiIsImNvbnN0IGxvZ2dlZERlcHJlY2F0aW9ucyA9IG5ldyBTZXQoKVxuXG5leHBvcnQgZnVuY3Rpb24gZGVwcmVjYXRlKG1lc3NhZ2UpIHtcbiAgLy8gT25seSBsb2cgZGVwcmVjYXRpb24gbWVzc2FnZXMgb25jZS5cbiAgaWYgKCFsb2dnZWREZXByZWNhdGlvbnMuaGFzKG1lc3NhZ2UpKSB7XG4gICAgbG9nZ2VkRGVwcmVjYXRpb25zLmFkZChtZXNzYWdlKVxuICAgIGNvbnNvbGUud2FybihtZXNzYWdlKVxuICB9XG59XG4iLCJleHBvcnQgZGVmYXVsdCBbXG4gICdjcmVhdGUnLCAnY3JlYXRlZCcsXG4gICdzYXZlJywgJ3NhdmVkJyxcbiAgJ3N1Ym1pdCcsICdzdWJtaXR0ZWQnLFxuICAnZGVsZXRlJywgJ2RlbGV0ZWQnLFxuICAnZWRpdCcsICdlZGl0ZWQnLFxuICAnY2xlYXInLCAnY2xlYXJlZCcsXG4gICdjbG9zZScsICdjbG9zZWQnLFxuICAnY2FuY2VsJywgJ2NhbmNlbGxlZCcsXG4gICdkcmFnJywgJ2RyYWdnZWQnLFxuICAnbG9naW4nLCAnbG9nZ2VkIGluJ1xuXS5yZWR1Y2UoKHZlcmJzLCB2ZXJiKSA9PiB7XG4gIHZlcmJzW3ZlcmJdID0gdmVyYlxuICByZXR1cm4gdmVyYnNcbn0sIHt9KVxuIiwiaW1wb3J0IHsgY3JlYXRlQXBwLCBoIGFzIGNyZWF0ZUVsZW1lbnQgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBjcmVhdGVSb3V0ZXIsIGNyZWF0ZVdlYkhpc3RvcnkgfSBmcm9tICd2dWUtcm91dGVyJ1xuaW1wb3J0IFZ1ZU5vdGlmaWNhdGlvbnMgZnJvbSAnQGt5dmcvdnVlMy1ub3RpZmljYXRpb24nXG5pbXBvcnQge1xuICBpc1N0cmluZyxcbiAgaXNBYnNvbHV0ZVVybCxcbiAgbWVyZ2UsXG4gIGh5cGhlbmF0ZSxcbiAgY2FtZWxpemUsXG4gIGRlZmF1bHRGb3JtYXRzXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgKiBhcyBjb21wb25lbnRzIGZyb20gJy4vY29tcG9uZW50cy9pbmRleC5qcydcbmltcG9ydCAqIGFzIHR5cGVzIGZyb20gJy4vdHlwZXMvaW5kZXguanMnXG5pbXBvcnQgRGl0b1Jvb3QgZnJvbSAnLi9jb21wb25lbnRzL0RpdG9Sb290LnZ1ZSdcbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJlc2l6ZURpcmVjdGl2ZSBmcm9tICcuL2RpcmVjdGl2ZXMvcmVzaXplLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UgfSBmcm9tICcuL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgZGVwcmVjYXRlIH0gZnJvbSAnLi91dGlscy9kZXByZWNhdGUuanMnXG5pbXBvcnQgeyBmb3JtYXRRdWVyeSB9IGZyb20gJy4vdXRpbHMvcm91dGUuanMnXG5pbXBvcnQgdmVyYnMgZnJvbSAnLi92ZXJicy5qcydcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b0FkbWluIHtcbiAgY29uc3RydWN0b3IoZWwsIHtcbiAgICAvLyBgZGl0b2AgY29udGFpbnMgdGhlIGJhc2UgYW5kIGFwaSBzZXR0aW5ncyBwYXNzZWQgZnJvbSBgQWRtaW5Db250cm9sbGVyYFxuICAgIGRpdG8gPSB7fSxcbiAgICBhcGksXG4gICAgdmlld3MgPSB7fSxcbiAgICAuLi5vcHRpb25zXG4gIH0gPSB7fSkge1xuICAgIHRoaXMuZWwgPSBlbFxuICAgIC8vIE1lcmdlIGluIGBhcGlgIHNldHRpbmdzIGFzIHBhc3NlZCBmcm9tIGBjb25maWcuYWRtaW5gIGFuZCB0aHJvdWdoIHRoZVxuICAgIC8vIGBBZG1pbkNvbnRyb2xsZXJgIHdpdGggYGFwaWAgdmFsdWVzIGZyb20gZnJvbSAnYWRtaW4vaW5kZXguanMnXG4gICAgLy8gTk9URTogYEFkbWluQ29udHJvbGxlcmAgcHJvdmlkZXMgYGRpdG8uYXBpLmJhc2VgXG4gICAgdGhpcy5hcGkgPSBhcGkgPSBtZXJnZSh7IGJhc2U6ICcvJyB9LCBkaXRvLmFwaSwgYXBpKVxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNcblxuICAgIC8vIFNldHVwIGRlZmF1bHQgYXBpIHNldHRpbmdzOlxuICAgIGFwaS5sb2NhbGUgfHw9ICdlbi1VUydcbiAgICBhcGkuZm9ybWF0cyA9IG1lcmdlKHt9LCBkZWZhdWx0Rm9ybWF0cywgYXBpLmZvcm1hdHMpXG4gICAgYXBpLnJlcXVlc3QgfHw9IG9wdGlvbnMgPT4gcmVxdWVzdChhcGksIG9wdGlvbnMpXG4gICAgYXBpLmdldEFwaVVybCB8fD0gb3B0aW9ucyA9PiBnZXRBcGlVcmwoYXBpLCBvcHRpb25zKVxuICAgIGFwaS5pc0FwaVVybCB8fD0gdXJsID0+IGlzQXBpVXJsKGFwaSwgdXJsKVxuICAgIC8vIFNldHRpbmcgYGFwaS5ub3JtYWxpemVQYXRocyA9IHRydWUgKHBsdXJhbCkgc2V0cyBib3RoOlxuICAgIC8vIGBhcGkubm9ybWFsaXplUGF0aCA9IGh5cGhlbmF0ZWAgYW5kIGBhcGkuZGVub3JtYWxpemVQYXRoID0gY2FtZWxpemVgXG4gICAgYXBpLm5vcm1hbGl6ZVBhdGggfHw9IGFwaS5ub3JtYWxpemVQYXRocyA/IGh5cGhlbmF0ZSA6IHZhbCA9PiB2YWxcbiAgICBhcGkuZGVub3JtYWxpemVQYXRoIHx8PSBhcGkubm9ybWFsaXplUGF0aHMgPyBjYW1lbGl6ZSA6IHZhbCA9PiB2YWxcblxuICAgIC8vIEFsbG93IGRlZmluaXRpb24gb2YgZGVmYXVsdHMgZm9yIGFkbWluIGNvbXBvbmVudCB0eXBlcywgbmVzdGVkIHBlciB0eXBlOlxuICAgIC8vIGFwaS5kZWZhdWx0cyA9IHtcbiAgICAvLyAgICdtdWx0aXNlbGVjdCc6IHtcbiAgICAvLyAgICAgc2VsZWN0YWJsZTogdHJ1ZVxuICAgIC8vICAgfSxcbiAgICAvLyAgICdmYWtlLXR5cGUnOiBzY2hlbWEgPT4ge1xuICAgIC8vICAgICAvLyBSZXR1cm4gZGVmYXVsdHMsIG9yIGRpcmVjdGx5IG1vZGlmeSB0aGUgc2NoZW1hOlxuICAgIC8vICAgICBPYmplY3QuYXNzaWduKHNjaGVtYSwge1xuICAgIC8vICAgICAgIHR5cGU6ICdyZWFsLXR5cGUnLFxuICAgIC8vICAgICAgIGZvcm1hdDogKHsgdmFsdWUgfSkgPT4gYEZvcm1hdHRlZCAke3ZhbHVlfWAsXG4gICAgLy8gICAgICAgcHJvY2VzczogKHsgdmFsdWUgfSkgPT4gYFByb2Nlc3NlZCAke3ZhbHVlfWBcbiAgICAvLyAgICAgfSlcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5cbiAgICBhcGkuZGVmYXVsdHMgfHw9IHt9XG5cbiAgICAvLyBBbGxvdyB0aGUgY29uZmlndXJhdGlvbiBvZiBhbGwgYXV0aCByZXNvdXJjZXMsIGxpa2Ugc286XG4gICAgLy8gYXBpLnVzZXJzID0ge1xuICAgIC8vICAgcGF0aDogJy9hZG1pbnMnLFxuICAgIC8vICAgLy8gVGhlc2UgYXJlIHRoZSBkZWZhdWx0czpcbiAgICAvLyAgIGxvZ2luOiB7XG4gICAgLy8gICAgIHBhdGg6ICdsb2dpbicsXG4gICAgLy8gICAgIG1ldGhvZDogJ3Bvc3QnXG4gICAgLy8gICB9LFxuICAgIC8vICAgbG9nb3V0OiB7XG4gICAgLy8gICAgIHBhdGg6ICdsb2dvdXQnLFxuICAgIC8vICAgICBtZXRob2Q6ICdwb3N0J1xuICAgIC8vICAgfSxcbiAgICAvLyAgIHNlc3Npb246IHtcbiAgICAvLyAgICAgcGF0aDogJ3Nlc3Npb24nLFxuICAgIC8vICAgICBtZXRob2Q6ICdnZXQnXG4gICAgLy8gICB9XG4gICAgLy8gfVxuICAgIGNvbnN0IHVzZXJzID0gZ2V0UmVzb3VyY2UoYXBpLnVzZXJzLCB7XG4gICAgICB0eXBlOiAnY29sbGVjdGlvbidcbiAgICB9KSB8fCB7fVxuICAgIHVzZXJzLmxvZ2luID0gZ2V0UmVzb3VyY2UodXNlcnMubG9naW4gfHwgJ2xvZ2luJywge1xuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcbiAgICB1c2Vycy5sb2dvdXQgPSBnZXRSZXNvdXJjZSh1c2Vycy5sb2dvdXQgfHwgJ2xvZ291dCcsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgdXNlcnMuc2Vzc2lvbiA9IGdldFJlc291cmNlKHVzZXJzLnNlc3Npb24gfHwgJ3Nlc3Npb24nLCB7XG4gICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgYXBpLnVzZXJzID0gdXNlcnNcblxuICAgIC8vIEFsbG93IG92ZXJyaWRpbmcgb2YgcmVzb3VyY2UgcGF0aCBoYW5kbGVyczpcbiAgICAvLyBhcGkucmVzb3VyY2VzID0ge1xuICAgIC8vICAgY29sbGVjdGlvbihyZXNvdXJjZSkge1xuICAgIC8vICAgICByZXR1cm4gcmVzb3VyY2UucGFyZW50XG4gICAgLy8gICAgICAgPyBgJHtyZXNvdXJjZS5wYXRofT8ke3Jlc291cmNlLnBhcmVudC5wYXRofV9pZD0ke1xuICAgIC8vICAgICAgICAgIHJlc291cmNlLnBhcmVudC5pZH1gXG4gICAgLy8gICAgICAgOiByZXNvdXJjZS5wYXRoXG4gICAgLy8gICB9XG4gICAgLy8gfVxuXG4gICAgYXBpLnJlc291cmNlcyA9IHtcbiAgICAgIGFueShyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpc1tyZXNvdXJjZT8udHlwZV0gfHwgdGhpcy5kZWZhdWx0XG4gICAgICAgIHJldHVybiByZXNvdXJjZSAmJiBoYW5kbGVyLmNhbGwodGhpcywgcmVzb3VyY2UpXG4gICAgICB9LFxuXG4gICAgICBkZWZhdWx0KHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSB0aGlzLmFueShyZXNvdXJjZS5wYXJlbnQpXG4gICAgICAgIHJldHVybiBwYXJlbnRQYXRoXG4gICAgICAgICAgPyBgJHtwYXJlbnRQYXRofS8ke3Jlc291cmNlLnBhdGh9YFxuICAgICAgICAgIDogcmVzb3VyY2UucGF0aFxuICAgICAgfSxcblxuICAgICAgY29sbGVjdGlvbihyZXNvdXJjZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0KHJlc291cmNlKVxuICAgICAgfSxcblxuICAgICAgbWVtYmVyKHJlc291cmNlKSB7XG4gICAgICAgIC8vIE5PVEU6IFdlIGFzc3VtZSB0aGF0IGFsbCBtZW1iZXJzIGhhdmUgcm9vdC1sZXZlbCBjb2xsZWN0aW9uIHJvdXRlcyxcbiAgICAgICAgLy8gdG8gYXZvaWQgZXhjZXNzaXZlIG5lc3Rpbmcgb2YgKHN1Yi0pY29sbGVjdGlvbiByb3V0ZXMuXG4gICAgICAgIHJldHVybiBgJHtyZXNvdXJjZS5wYXRofS8ke3Jlc291cmNlLmlkfWBcbiAgICAgIH0sXG5cbiAgICAgIHVwbG9hZChyZXNvdXJjZSkge1xuICAgICAgICAvLyBEaXRvIFNlcnZlciBoYW5kbGVzIHVwbG9hZCByb3V0ZXMgb24gdGhlIGNvbGxlY3Rpb24gcmVzb3VyY2U6XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbGxlY3Rpb24ocmVzb3VyY2UucGFyZW50KX0vdXBsb2FkLyR7cmVzb3VyY2UucGF0aH1gXG4gICAgICB9LFxuXG4gICAgICAuLi5hcGkucmVzb3VyY2VzXG4gICAgfVxuXG4gICAgLy8gQWxsb3cgb3ZlcnJpZGluZyAvIGV4dGVuZGluZyBvZiBoZWFkZXJzOlxuICAgIC8vIGFwaS5oZWFkZXJzID0ge1xuICAgIC8vICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgIC8vIH1cbiAgICBhcGkuaGVhZGVycyA9IHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAuLi5hcGkuaGVhZGVyc1xuICAgIH1cblxuICAgIGlmIChpc1N0cmluZyhlbCkpIHtcbiAgICAgIGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbClcbiAgICB9XG5cbiAgICBjb25zdCBhcHAgPSAodGhpcy5hcHAgPSBjcmVhdGVBcHAoe1xuICAgICAgY29tcG9uZW50czoge1xuICAgICAgICBEaXRvUm9vdCxcbiAgICAgICAgVnVlTm90aWZpY2F0aW9ucyxcbiAgICAgICAgLy8gVGhpcyBtYXkgb25seSBiZSBuZWVkZWQgdG8gYXZvaWQgdHJlZS1zaGFja2luZyBvZiB0aGVzZSBjb21wb25lbnRzLFxuICAgICAgICAvLyBzaW5jZSB0aGV5IGFjdHVhbGx5IGhhbmRsZSByZWdpc3RyeSBpbnRlcm5hbGx5IGFscmVhZHkuXG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSB0aGlzIG9uY2Ugd2UgaGF2ZSBhIGJldHRlciBzb2x1dGlvbi5cbiAgICAgICAgLi4uY29tcG9uZW50cyxcbiAgICAgICAgLi4udHlwZXNcbiAgICAgIH0sXG5cbiAgICAgIC8vIE1vc3QgaW5qZWN0cyBhcmUgZGVmaW5lZCBhcyBmdW5jdGlvbnMsIHRvIHByZXNlcnZlIHJlYWN0aXZlbmVzcyBhY3Jvc3NcbiAgICAgIC8vIHByb3ZpZGUvaW5qZWN0LCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy83MDE3I2lzc3VlY29tbWVudC00ODA5MDY2OTFcbiAgICAgIHByb3ZpZGU6IHtcbiAgICAgICAgYXBpLFxuICAgICAgICAvLyBBIGRlZmF1bHQgbGlzdCBvZiB2ZXJicyBhcmUgcHJvdmlkZWQgYnkgJHZlcmJzKCkgYW5kIGNhbiBiZVxuICAgICAgICAvLyBvdmVycmlkZGVuIGF0IGFueSBwb2ludCBpbiB0aGUgY29tcG9uZW50IGhpZXJhcmNoeS5cbiAgICAgICAgJHZlcmJzOiAoKSA9PiB2ZXJicyxcbiAgICAgICAgLy8gUHJvdmlkZSBkZWZhdWx0cyBzbyBEaXRvTWl4aW4gY2FuIGluamVjdCB0aGVtIGZvciBhbGwgY29tcG9uZW50czpcbiAgICAgICAgLy8gICBpbmplY3Q6IFsgICckaXNQb3B1bGF0ZWQnLCAnJHNjaGVtYUNvbXBvbmVudCcsICckcm91dGVDb21wb25lbnQnIF1cbiAgICAgICAgJHZpZXdzOiAoKSA9PiB7fSxcbiAgICAgICAgJGlzUG9wdWxhdGVkOiAoKSA9PiB0cnVlLFxuICAgICAgICAkcGFyZW50Q29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc2NoZW1hQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc2NoZW1hUGFyZW50Q29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRkYXRhQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRkaWFsb2dDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRwYW5lbENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gbnVsbFxuICAgICAgfSxcblxuICAgICAgcmVuZGVyOiAoKSA9PlxuICAgICAgICBjcmVhdGVFbGVtZW50KERpdG9Sb290LCB7XG4gICAgICAgICAgcmVmOiAncm9vdCcsXG4gICAgICAgICAgY2xhc3M6IGRpdG8uc2V0dGluZ3Mucm9vdENsYXNzLFxuICAgICAgICAgIHVucmVzb2x2ZWRWaWV3czogdmlld3MsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICB9KVxuICAgIH0pKVxuXG4gICAgYXBwLnVzZShWdWVOb3RpZmljYXRpb25zLCB7XG4gICAgICBuYW1lOiAnbm90aWZ5JyxcbiAgICAgIGNvbXBvbmVudE5hbWU6ICdWdWVOb3RpZmljYXRpb25zJ1xuICAgIH0pXG5cbiAgICBhcHAuZGlyZWN0aXZlKCdyZXNpemUnLCBSZXNpemVEaXJlY3RpdmUpXG5cbiAgICBhcHAudXNlKFxuICAgICAgY3JlYXRlUm91dGVyKHtcbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhIGNhdGNoLWFsbCByb3V0ZSwgdG8gYmUgcmVwbGFjZWQgYnkgdGhlIGFjdHVhbCByb3V0ZXNcbiAgICAgICAgLy8gb25jZSB0aGUgc2NoZW1hcyBhcmUgbG9hZGVkLCB0byBwcmV2ZW50IHZ1ZS1yb3V0ZXIgZnJvbSBjb21wbGFpbmluZyxcbiAgICAgICAgLy8gc2VlOiBgcmVzb2x2ZVZpZXdzKClgIGluIGBEaXRvUm9vdGAgZm9yIHRoZSBhY3R1YWwgcm91dGUgc2V0dXAuXG4gICAgICAgIHJvdXRlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdjYXRjaC1hbGwnLFxuICAgICAgICAgICAgcGF0aDogJy86XyguKiknLFxuICAgICAgICAgICAgY29tcG9uZW50czoge31cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGhpc3Rvcnk6IGNyZWF0ZVdlYkhpc3RvcnkoZGl0by5iYXNlKSxcbiAgICAgICAgbGlua0FjdGl2ZUNsYXNzOiAnJyxcbiAgICAgICAgbGlua0V4YWN0QWN0aXZlQ2xhc3M6ICcnXG4gICAgICB9KVxuICAgIClcblxuICAgIGVsLmNsYXNzTGlzdC5hZGQoJ2RpdG8tYXBwJylcbiAgICBhcHAubW91bnQoZWwpXG4gIH1cblxuICByZWdpc3Rlcih0eXBlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKHR5cGUsIG9wdGlvbnMpXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZXNwb25zZSkge1xuICAgIHN1cGVyKFxuICAgICAgYFJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGU6ICR7cmVzcG9uc2Uuc3RhdHVzfSAoJHtcbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzVGV4dFxuICAgICAgfSlgXG4gICAgKVxuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3QoYXBpLCB7XG4gIHVybCxcbiAgbWV0aG9kID0gJ2dldCcsXG4gIC8vIFRPRE86IGByZXF1ZXN0LnBhcmFtc2Agd2FzIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGBxdWVyeWAgb24gMjAyMi0xMS0wMSxcbiAgLy8gcmVtb3ZlIG9uY2Ugbm90IGluIHVzZSBhbnl3aGVyZSBhbnkgbW9yZS5cbiAgcGFyYW1zID0gbnVsbCxcbiAgcXVlcnkgPSBwYXJhbXMgfHwgbnVsbCxcbiAgaGVhZGVycyA9IG51bGwsXG4gIGRhdGEgPSBudWxsXG59KSB7XG4gIGlmIChwYXJhbXMpIHtcbiAgICBkZXByZWNhdGUoXG4gICAgICBgcmVxdWVzdC5wYXJhbXMgaXMgZGVwcmVjYXRlZC4gVXNlIGFjdGlvbi5tZXRob2QgYW5kIGFjdGlvbi5wYXRoIGluc3RlYWQuYFxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGlzQXBpVXJsID0gYXBpLmlzQXBpVXJsKHVybClcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGFwaS5nZXRBcGlVcmwoeyB1cmwsIHF1ZXJ5IH0pLCB7XG4gICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAuLi4oZGF0YSAmJiB7IGJvZHk6IEpTT04uc3RyaW5naWZ5KGRhdGEpIH0pLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIC4uLihpc0FwaVVybCAmJiBhcGkuaGVhZGVycyksXG4gICAgICAuLi5oZWFkZXJzXG4gICAgfSxcbiAgICBjcmVkZW50aWFsczpcbiAgICAgIGlzQXBpVXJsICYmIGFwaS5jb3JzPy5jcmVkZW50aWFsc1xuICAgICAgICA/ICdpbmNsdWRlJ1xuICAgICAgICA6ICdzYW1lLW9yaWdpbidcbiAgfSlcblxuICBpZiAocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpPy5pbmNsdWRlcygnYXBwbGljYXRpb24vanNvbicpKSB7XG4gICAgcmVzcG9uc2UuZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICB9XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBSZXF1ZXN0RXJyb3IocmVzcG9uc2UpXG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbmZ1bmN0aW9uIGlzQXBpVXJsKGFwaSwgdXJsKSB7XG4gIHJldHVybiAhaXNBYnNvbHV0ZVVybCh1cmwpIHx8IHVybC5zdGFydHNXaXRoKGFwaS51cmwpXG59XG5cbmZ1bmN0aW9uIGdldEFwaVVybChhcGksIHsgdXJsLCBxdWVyeSB9KSB7XG4gIGlmICghaXNBYnNvbHV0ZVVybCh1cmwpKSB7XG4gICAgdXJsID0gY29tYmluZVVybHMoYXBpLnVybCwgdXJsKVxuICB9XG4gIC8vIFN1cHBvcnQgb3B0aW9uYWwgcXVlcnkgcGFyYW1ldGVycywgdG8gYmUgYXJlIGFkZGVkIHRvIHRoZSBVUkwuXG4gIGNvbnN0IHNlYXJjaCA9IGZvcm1hdFF1ZXJ5KHF1ZXJ5KVxuICByZXR1cm4gc2VhcmNoID8gYCR7dXJsfT8ke3NlYXJjaH1gIDogdXJsXG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVVcmxzKGJhc2VVcmwsIHJlbGF0aXZlVXJsKSB7XG4gIC8vIFVzZSBzYW1lIGFwcHJvYWNoIGFzIGF4aW9zIGBjb21iaW5lVVJMcygpYCB0byBqb2luIGJhc2VVcmwgJiByZWxhdGl2ZVVybDpcbiAgcmV0dXJuIGAke2Jhc2VVcmwucmVwbGFjZSgvXFwvKyQvLCAnJyl9LyR7cmVsYXRpdmVVcmwucmVwbGFjZSgvXlxcLysvLCAnJyl9YFxufVxuIl0sIm5hbWVzIjpbImFwcFN0YXRlIiwicmVhY3RpdmUiLCJhcHBlbmREYXRhUGF0aCIsImRhdGFQYXRoIiwidG9rZW4iLCJwYXJzZVBhcmVudERhdGFQYXRoIiwicGF0aCIsInBhcnNlRGF0YVBhdGgiLCJwYXJzZUl0ZW1EYXRhUGF0aCIsIm5lc3RlZCIsImdldEl0ZW1EYXRhUGF0aCIsIm5vcm1hbGl6ZURhdGFQYXRoIiwicGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgiLCJpc0ludGVnZXIiLCJnZXRQYXJlbnRJdGVtRGF0YVBhdGgiLCJnZXRJdGVtIiwicm9vdEl0ZW0iLCJnZXRWYWx1ZUF0RGF0YVBhdGgiLCJnZXRQYXJlbnRJdGVtIiwiZ2V0TGFzdERhdGFQYXRoVG9rZW4iLCJnZXRMYXN0RGF0YVBhdGhOYW1lIiwiZ2V0TGFzdERhdGFQYXRoSW5kZXgiLCJpbmRleCIsInRlbXBvcmFyeUlkIiwic2V0VGVtcG9yYXJ5SWQiLCJkYXRhIiwiaWRLZXkiLCJpc1RlbXBvcmFyeUlkIiwiaWQiLCJpc1JlZmVyZW5jZSIsImhhc093blByb3BlcnR5IiwiY29udGV4dHMiLCJnZXQiLCJjb250ZXh0Iiwia2V5IiwiZGVmYXVsdFZhbHVlIiwib2JqZWN0IiwidG9SYXciLCJ2YWx1ZSIsImlzRnVuY3Rpb24iLCJzZXQiLCJEaXRvQ29udGV4dCIsImNvbXBvbmVudCIsIml0ZW0iLCJvcHRpb25zIiwibG9jYXRpb24iLCJyZXNvdXJjZSIsIkVtaXR0ZXJNaXhpbiIsImV2ZW50IiwiY2FsbGJhY2siLCJpc0FycmF5IiwiZXYiLCJpc1BsYWluT2JqZWN0IiwibGlzdGVuZXJzIiwiY2FsbGJhY2tzIiwib24iLCJhcmdzIiwiZW50cnkiLCJfYSIsImNiIiwicXVldWUiLCJyZXNvbHZlIiwibmV4dCIsInJlc3VsdCIsInJlcyIsImVycm9yIiwidGFyZ2V0IiwiY3JlZGl0Y2FyZCIsImlzQ3JlZGl0Q2FyZCIsImRlY2ltYWxzIiwibWF0Y2giLCJlbWFpbCIsImlzRW1haWwiLCJob3N0bmFtZSIsImlzSG9zdG5hbWUiLCJkb21haW4iLCJpc0RvbWFpbiIsImludGVnZXIiLCJtYXgiLCJtaW4iLCJwYXNzd29yZCIsInJhbmdlIiwicmVxdWlyZWQiLCJzZXR0aW5ncyIsInVybCIsImlzVXJsIiwiVmFsaWRhdGlvbk1peGluIiwibm90aWZ5IiwiaXNWYWxpZCIsInJ1bGUiLCJzZXR0aW5nIiwidmFsaWRhdG9yIiwidmFsaWRhdGlvbnMiLCJ2YWxpZGF0ZSIsIm1lc3NhZ2UiLCJhZGRMYWJlbCIsImVycm9ycyIsImZvY3VzIiwiZ2V0U2NoZW1hQWNjZXNzb3IiLCJrZXlPckRhdGFQYXRoIiwidHlwZSIsImRlZiIsImlzU3RyaW5nIiwibmFtZSIsImdldFN0b3JlQWNjZXNzb3IiLCJUeXBlTWl4aW4iLCJjb21wdXRlVmFsdWUiLCJmb3JtYXQiLCJwYXJzZSIsInNjaGVtYUNvbXBvbmVudCIsImV2ZW50cyIsImNhbWVsaXplIiwibmF0aXZlRmllbGQiLCJ0ZXh0RmllbGQiLCJhdHRyaWJ1dGVzIiwiYWRkIiwib25Gb2N1cyIsIm9uQmx1ciIsIm9uSW5wdXQiLCJvbkNoYW5nZSIsImVsZW1lbnQiLCJhc0FycmF5IiwiX2IiLCJ1aWRNYXAiLCJ1aWQiLCJnZXRVaWQiLCJpdGVtSWQiLCJTY2hlbWFHcmFwaCIsIl9fcHVibGljRmllbGQiLCJkZWZhdWx0cyIsInN1YkdyYXBoIiwicGFydCIsInNjaGVtYSIsInJlbGF0ZWREYXRhUGF0aCIsIm5hbm9pZCIsImZsYXR0ZW4iLCJncmFwaCIsImVudHJpZXMiLCIkc2V0dGluZ3MiLCJzdWJLZXkiLCJzb3VyY2VTY2hlbWEiLCJjbGlwYm9hcmQiLCJpbnRlcm5hbCIsInJlbGF0ZWQiLCJyZWZlcmVuY2UiLCJzb3VyY2UiLCJyZWxhdGlvbiIsInZhbHVlcyIsInJlbW92ZUlkIiwicmVmZXJlbmNlSWQiLCJyZWZLZXkiLCJyZXZWYWx1ZSIsInR5cGVDaGVja2VycyIsImlzQm9vbGVhbiIsImlzTnVtYmVyIiwiaXNEYXRlIiwiaXNPYmplY3QiLCJpc1JlZ0V4cCIsInRvQm9vbGVhbiIsInRvTnVtYmVyIiwidG9TdHJpbmciLCJ0b0RhdGUiLCJ0b0FycmF5IiwidG9PYmplY3QiLCJ0b1JlZ0V4cCIsInR5cGVDb252ZXJ0ZXJzIiwiaXNNYXRjaGluZ1R5cGUiLCJ0eXBlcyIsImNvbnZlcnRUeXBlIiwiY29udmVydGVyIiwidHlwZUNvbXBvbmVudHMiLCJ1bmtub3duVHlwZVJlcG9ydGVkIiwicmVnaXN0ZXJUeXBlQ29tcG9uZW50IiwiZ2V0VHlwZUNvbXBvbmVudCIsImFsbG93TnVsbCIsIml0ZXJhdGVTY2hlbWFDb21wb25lbnRzIiwic2NoZW1hcyIsImlzU2luZ2xlQ29tcG9uZW50VmlldyIsImlzU2NoZW1hIiwiaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMiLCJnZXRUYWJTY2hlbWFzIiwiZmluZE5lc3RlZFNjaGVtYUNvbXBvbmVudCIsInNvbWVOZXN0ZWRTY2hlbWFDb21wb25lbnQiLCJoYXNOZXN0ZWRTY2hlbWFDb21wb25lbnRzIiwiaXNGb3JtIiwiaXNWaWV3IiwiaXNUYWIiLCJpc1BhbmVsIiwiZ2V0U2NoZW1hSWRlbnRpZmllciIsInJlc29sdmVTY2hlbWEiLCJ1bndyYXBNb2R1bGUiLCJpc1Byb21pc2UiLCJpc01vZHVsZSIsImtleXMiLCJyZXNvbHZlU2NoZW1hcyIsInVucmVzb2x2ZWRTY2hlbWFzIiwicmVzb2x2ZUl0ZW0iLCJtYXBDb25jdXJyZW50bHkiLCJyZXNvbHZlU2NoZW1hQ29tcG9uZW50IiwibWFya1JhdyIsIkRpdG9NaXhpbiIsInJlc29sdmVTY2hlbWFDb21wb25lbnRzIiwicHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMiLCJhcGkiLCJyb3V0ZXMiLCJsZXZlbCIsInByb21pc2VzIiwicHJvY2VzcyIsInJlbGF0aXZlTGV2ZWwiLCJwcm9jZXNzU2NoZW1hQ29tcG9uZW50IiwiZ2V0UGFuZWxTY2hlbWFzIiwicHJvY2Vzc1NjaGVtYURlZmF1bHRzIiwicGFuZWwiLCJnZXRUeXBlT3B0aW9ucyIsInByb2Nlc3NWaWV3IiwicHJvY2Vzc1JvdXRlU2NoZW1hIiwicHJvY2Vzc05lc3RlZFNjaGVtYXMiLCJjaGlsZHJlbiIsIm1lcmdlIiwicHJvY2Vzc05lc3RlZFNjaGVtYURlZmF1bHRzIiwiZm9ybXMiLCJnZXRGb3JtU2NoZW1hcyIsImZvcm0iLCJwcm9jZXNzRm9ybXMiLCJjb21wb25lbnRzIiwicHJvY2Vzc0Zvcm0iLCJwcm9jZXNzVGFiIiwicHJvY2Vzc1BhbmVsIiwidGFicyIsInBhbmVscyIsInRhYiIsImhhc0Zvcm1TY2hlbWEiLCJoYXNNdWx0aXBsZUZvcm1TY2hlbWFzIiwiZ2V0Vmlld0Zvcm1TY2hlbWEiLCJ2aWV3Iiwidmlld1NjaGVtYSIsImdldFZpZXdTY2hlbWEiLCJnZXRWaWV3RWRpdFBhdGgiLCJtb2RpZnlGb3JtIiwiY29tcGFjdCIsImdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zIiwiZ2V0SXRlbUZvcm1TY2hlbWEiLCJpc0NvbXBhY3QiLCJpc0lubGluZWQiLCJpc05lc3RlZCIsIm9taXRQYWRkaW5nIiwia2VlcEFsaWduZWQiLCJnZXRTY2hlbWFWYWx1ZSIsImNvbnZlcnRlZCIsInNob3VsZFJlbmRlclNjaGVtYSIsImdldERlZmF1bHRWYWx1ZSIsImNsb25lIiwiaWdub3JlTWlzc2luZ1ZhbHVlIiwidHlwZU9wdGlvbnMiLCJzZXREZWZhdWx0VmFsdWVzIiwicHJvY2Vzc1NjaGVtYURhdGEiLCJyb290RGF0YSIsImNvbXB1dGUiLCJjbG9uZUl0ZW0iLCJjb3B5Iiwib3JkZXJLZXkiLCJwcm9jZXNzRGF0YSIsInNjaGVtYU9ubHkiLCJwcm9jZXNzZWREYXRhIiwid3JhcFByaW1pdGl2ZXMiLCJhIiwiYiIsImlkMSIsImlkMiIsImV4Y2x1ZGUiLCJnZXRDb250ZXh0IiwicHJvY2Vzc1ZhbHVlIiwicHJvY2Vzc0JlZm9yZSIsInByb2Nlc3NBZnRlciIsInByb2Nlc3NDb21wb25lbnRzIiwiZ2V0RGF0YVBhdGgiLCJjb21wb25lbnRTY2hlbWEiLCJjb21wb25lbnREYXRhUGF0aCIsInByb2Nlc3NJdGVtIiwicHJvY2Vzc2VkSXRlbSIsImdldE5hbWVkU2NoZW1hcyIsImFycmF5IiwidG9TY2hlbWEiLCJnZXRCdXR0b25TY2hlbWFzIiwiYnV0dG9ucyIsImdldFR5cGUiLCJzY2hlbWFPclR5cGUiLCJnZXRTb3VyY2VUeXBlIiwiZ2V0UGFuZWxFbnRyeSIsInRhYkNvbXBvbmVudCIsImdldFBhbmVsRW50cmllcyIsInBhbmVsU2NoZW1hcyIsInBhbmVsRW50cmllcyIsImdldEFsbFBhbmVsRW50cmllcyIsInBhbmVsU2NoZW1hIiwiaXNPYmplY3RTb3VyY2UiLCJpc0xpc3RTb3VyY2UiLCJnZXRJdGVtSWQiLCJnZXRJdGVtVWlkIiwiaGFzUmVzb3VyY2UiLCJnZXRSZXNvdXJjZSIsInBhcmVudCIsImRlZnMiLCJnZXRNZW1iZXJSZXNvdXJjZSIsInBpY2tCeSIsIm5leHRVaWQiLCJsYWJlbGl6ZSIsInZlcmIiLCJxdWVyeSIsIm1ldGhvZCIsImNoZWNrVXNlciIsInJlc3BvbnNlIiwiZXF1YWxzIiwiY2FjaGUiLCJjYWNoZVBhcmVudCIsImxvYWRDYWNoZSIsImNhY2hlS2V5IiwibG9jYWxlIiwiYm9keSIsImdldENvbXB1dGVkQWNjZXNzb3IiLCJnZXR0ZXIiLCJjb21wdXRlZCIsImFjY2Vzc29yIiwid2F0Y2giLCJoYW5kbGVycyIsImV4cHIiLCJhZGRFdmVudCIsImh5cGhlbmF0ZSIsImhhc0xpc3RlbmVycyIsInBhcmVudEhhc0xpc3RlbmVycyIsInBhcmFtcyIsInJlc29sdmVNZXJnZWRPcHRpb25zIiwibWl4aW5zIiwibWVyZ2VPcHRpb25zIiwidG8iLCJmcm9tIiwibWl4aW4iLCJkaXRvT3B0aW9uS2V5cyIsIkRpdG9Db21wb25lbnQiLCJkZWZpbml0aW9uIiwiRGl0b1VzZXIiLCJyb2xlcyIsInJvbGUiLCJTY2hlbWFQYXJlbnRNaXhpbiIsInNjaGVtYUNvbXBvbmVudHMiLCJWYWxpZGF0b3JNaXhpbiIsIml0IiwiUm91dGVNaXhpbiIsInJvdXRlQ29tcG9uZW50IiwibWF0Y2hlZCIsImkiLCJyZWNvcmQiLCJicmVhZGNydW1iIiwicm91dGVDb21wb25lbnRzIiwib2siLCJ0ZW1wbGF0ZVBhdGgiLCJyb290UGF0aCIsImdldENvbW1vblByZWZpeCIsImlzTG9hZGluZyIsImNvcHlEYXRlIiwiZGF0ZSIsInllYXIiLCJtb250aCIsImRheSIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJtaWxsaXNlY29uZCIsIl9zZmNfbWFpbiIsIndlZWtkYXlOYW1lcyIsIm1vbnRoTmFtZXMiLCJnZXRMb2NhbGVOYW1lcyIsIm1vZGUiLCJvdmVycmlkZXMiLCJzdGVwIiwiY3VycmVudFZhbHVlIiwic3RhdGUiLCJob3IiLCJ2ZXIiLCJlbnRlciIsImN1cnJlbnRNb2RlIiwic3RhcnRZZWFyIiwiZmlyc3REYXlXZWVrIiwibnVtRGF5cyIsInByZXZNb250aCIsInByZXZNb250aE51bURheXMiLCJ0b2RheSIsImlzRGF5IiwibmV4dE1vbnRoTmVlZCIsIm5leHRNb250aCIsImxvY2FsZU5hbWVzIiwibmFtZXMiLCJhZGRFdmVudHMiLCJnZXRLZXkiLCJnZXRLZXlOYXZpZ2F0aW9uIiwiY2xhc3NlcyIsInNob3ciLCJ0cmlnZ2VyIiwicG9wdXAiLCJlbCIsImJvdW5kcyIsInRyaWdnZXJMZWZ0IiwidHJpZ2dlclRvcCIsInRyaWdnZXJXaWR0aCIsInRyaWdnZXJIZWlnaHQiLCJwb3B1cFdpZHRoIiwicG9wdXBIZWlnaHQiLCJwYXJ0MSIsInBhcnQyIiwid2luV2lkdGgiLCJ3aW5IZWlnaHQiLCJsZWZ0IiwidG9wIiwidHJpZ2dlckJvdW5kcyIsInNpemUiLCJnZXRMZW5ndGgiLCJUcmlnZ2VyIiwiQ2FsZW5kYXIiLCJJbnB1dEZpZWxkIiwiZGVmYXVsdEZvcm1hdHMiLCJzY3JvbGxUbyIsImR1cmF0aW9uIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicGVyVGljayIsInNldFNlbGVjdGlvbiIsImZpZWxkIiwic3RhcnQiLCJlbmQiLCJmb3JjZSIsInNjcm9sbCIsInJlZiIsImxpbmVIZWlnaHQiLCJzZWxlY3RlZCIsImxlbmd0aCIsIkRhdGVQaWNrZXIiLCJUaW1lUGlja2VyIiwicGFnZSIsInBhZ2VTaXplIiwiY3VycmVudFBhZ2VTaXplIiwic2hvd1ByZXYiLCJzaG93TmV4dCIsInRvdGFsIiwiY3VycmVudFBhZ2UiLCJzaG93TGVuZ3RoIiwibnVtUGFnZXMiLCJwYWdlUmFuZ2UiLCJjaGVja2VkIiwiZGlzYWJsZWQiLCJ1bmNoZWNrZWQiLCJtb2RlbFZhbHVlIiwiVHJhbnNpdGlvbkhlaWdodCIsImVuYWJsZWQiLCJzbG90cyIsImNyZWF0ZUVsZW1lbnQiLCJUcmFuc2l0aW9uIiwicHJvcHMiLCJzZXRTdHlsZSIsInN0eWxlIiwiZm9yY2VSZXBhaW50Iiwid2lkdGgiLCJoZWlnaHQiLCJVc2VGb2N1c1RyYXAiLCJkZWZpbmVDb21wb25lbnQiLCJ0cmFwIiwiYWN0aXZhdGUiLCJkZWFjdGl2YXRlIiwidW5yZWZFbGVtZW50IiwiY3JlYXRlRm9jdXNUcmFwIiwib25TY29wZURpc3Bvc2UiLCJoIiwiZGlhbG9nRGF0YSIsIkRvbU1peGluIiwicmVtb3ZlIiwiaGFuZGxlciIsIkRpdG9EaWFsb2ciLCJ0aXBweURlbGVnYXRlIiwiZXJyIiwidGl0bGUiLCJ0ZXh0IiwibG9nIiwic3RyaXBUYWdzIiwibm90aWZpY2F0aW9ucyIsImR1cmF0aW9uRmFjdG9yIiwicmVqZWN0IiwiZGlhbG9nSWQiLCJhZGRpdGlvbmFsQ29tcG9uZW50cyIsInJlZGlyZWN0QWZ0ZXJMb2dpbiIsImxvZ2luRGF0YSIsInVzZXIiLCJEaXRvVmlldyIsImZ1bGxQYXRoIiwiYWRkUm91dGVzIiwicm91dGVyIiwicmVtb3ZlcnMiLCJyb3V0ZSIsInJlbW92ZVJvdXRlIiwiRGl0b1NwaW5uZXIiLCJjb2xvciIsIlB1bGxkb3duTWl4aW4iLCJzdGFydFRpbWUiLCJvcGVuIiwiY29udGVudCIsImFzT2JqZWN0IiwibGFiZWwiLCJJdGVtTWl4aW4iLCJleHRlbmRlZCIsIml0ZW1MYWJlbCIsImZvcm1MYWJlbCIsImdldEZvcm1MYWJlbCIsInByZWZpeCIsInN1ZmZpeCIsImNvbHVtbnMiLCJoYWRMYWJlbCIsInBhbmUiLCJmaXJzdCIsImRlZmF1bHRUYWIiLCJoYXNoIiwic2VsZWN0ZWRUYWIiLCJkYXRhUGF0aE9yTmFtZSIsImV4cGFuZCIsImNvbXBvbmVudHNCeURhdGFQYXRoIiwiZGF0YVBhdGhzIiwiY2hlY2siLCJ1bm1hdGNoZWQiLCJlcnJzIiwiZnVsbERhdGFQYXRoIiwiZGF0YVBhdGhQYXJ0cyIsImZvdW5kIiwicHJvcGVydHkiLCJzdWJDb21wb25lbnRzIiwicmVnaXN0cnkiLCJlbnRyaWVzQnlEYXRhUGF0aCIsIl93aXRoRGlyZWN0aXZlcyIsIl9vcGVuQmxvY2siLCJfY3JlYXRlRWxlbWVudEJsb2NrIiwiX0ZyYWdtZW50IiwiX2N0eCIsIm5lc3RlZERhdGFQYXRoIiwic3RvcmUiLCJfaG9pc3RlZF8xIiwiX2NyZWF0ZUJsb2NrIiwiX2NvbXBvbmVudF9EaXRvQ29udGFpbmVyIiwiX2RpcmVjdGl2ZV9yZXNpemUiLCJfaG9pc3RlZF8yIiwieSIsInBvc2l0aW9ucyIsImZpbmROZXh0UG9zaXRpb24iLCJmYWxsYmFjayIsInBvc2l0aW9uIiwicGFyc2VGcmFjdGlvbiIsImRpdmlkZW5kIiwiZGl2aXNvciIsImNvbnRhaW5lckNsYXNzIiwiYmFzaXMiLCJncm93Iiwic2hyaW5rIiwiYmFzaXNJc0F1dG8iLCJoYXNWTm9kZUNvbnRlbnQiLCJ2bm9kZSIsIkNvbW1lbnQiLCJoYXNTbG90Q29udGVudCIsInNsb3QiLCJ1c2VTbG90cyIsImJ1dHRvbiIsImNhcGl0YWxpemUiLCJjbGlwYm9hcmREYXRhIiwicGFzdGUiLCJyZXBvcnQiLCJqc29uIiwiX2QiLCJfYyIsImRlaW5kZW50IiwiJHNjaGVtYSIsIl9lIiwiTG9hZGluZ01peGluIiwidXBkYXRlUm9vdCIsInVwZGF0ZVZpZXciLCJSZXNvdXJjZU1peGluIiwiYW1vdW50IiwidmVyYnMiLCJjbGVhciIsImxvYWRpbmdPcHRpb25zIiwicmVxdWVzdCIsInNldERhdGEiLCJvblN1Y2Nlc3MiLCJvbkVycm9yIiwibm90aWZ5U3VjY2VzcyIsIm5vdGlmeUVycm9yIiwicmVzb2x2ZVBhdGgiLCJpc0NyZWF0aW5nIiwicHJvdmlkZXNEYXRhIiwiZGF0YVBhcnRzIiwicGF0aFBhcnRzIiwicm91dGVQYXJ0cyIsImxhc3REYXRhUGFydCIsImwiLCJkYXRhUGFydCIsInBhcmFtIiwibWFpblNjaGVtYUNvbXBvbmVudCIsInByZXNlbnQiLCJjbG9zZUZvcm0iLCJnZXRWZXJiIiwiYnV0dG9uUmVzb3VyY2UiLCJzdWNjZXNzIiwiX3Jlc291cmNlIiwiX21ldGhvZCIsIkRpdG9Gb3JtIiwic2NvcGUiLCJQYWdpbmF0aW9uIiwiU29ydGFibGVNaXhpbiIsImZvcmNlRmFsbGJhY2siLCJvbGRJbmRleCIsIm5ld0luZGV4IiwibGlzdCIsInBhZ2luYXRpb25SYW5nZSIsIm9mZnNldCIsIl9ub3JtYWxpemVTdHlsZSIsIl9jYWNoZSIsIl93aXRoTW9kaWZpZXJzIiwiJGV2ZW50IiwiX25vcm1hbGl6ZUNsYXNzIiwiX2NyZWF0ZUVsZW1lbnRWTm9kZSIsIl9ob2lzdGVkXzQiLCJfdG9EaXNwbGF5U3RyaW5nIiwiX2hvaXN0ZWRfNSIsIl9ob2lzdGVkXzciLCJfbWVyZ2VQcm9wcyIsIl9ob2lzdGVkXzgiLCJfcmVuZGVyTGlzdCIsIl9jb21wb25lbnRfRGl0b0xhYmVsIiwiX2NyZWF0ZVZOb2RlIiwiX2NvbXBvbmVudF9EaXRvVGFibGVDZWxsIiwiX2NvbXBvbmVudF9EaXRvRHJhZ2dhYmxlIiwiX2NvbXBvbmVudF9EaXRvVHJlZUl0ZW0iLCJjaGlsZHJlblNjaGVtYSIsImNoaWxkcmVuTGlzdCIsImVkaXRQYXRoIiwiY2hpbGRyZW5PcGVuIiwibnVtQ2hpbGRyZW4iLCJjcmVhdGFibGUiLCJlZGl0YWJsZSIsIm9yZGVyIiwiY29sdW1uIiwicmVuZGVyIiwiZXNjYXBlSHRtbCIsIl9fZGVmUHJvcCIsIl9fZ2V0T3duUHJvcFN5bWJvbHMiLCJfX2hhc093blByb3AiLCJfX3Byb3BJc0VudW0iLCJfX2RlZk5vcm1hbFByb3AiLCJvYmoiLCJfX3NwcmVhZFZhbHVlcyIsInByb3AiLCJfX29ialJlc3QiLCJ1c2VTb3J0YWJsZSIsInNvcnRhYmxlIiwiZG9jdW1lbnQiLCJkZWZhdWx0RG9jdW1lbnQiLCJyZXNldE9wdGlvbnMiLCJkZWZhdWx0T3B0aW9ucyIsImUiLCJtb3ZlQXJyYXlFbGVtZW50IiwiU29ydGFibGUiLCJzdG9wIiwidHJ5T25Nb3VudGVkIiwidHJ5T25TY29wZURpc3Bvc2UiLCJ0b1ZhbHVlIiwibmV4dFRpY2siLCJVc2VTb3J0YWJsZSIsInVzZVZNb2RlbCIsIkRpdG9WTm9kZSIsIkRpdG9UeXBlQ29tcG9uZW50JDEiLCJEaXRvVHlwZUNvbXBvbmVudCIsIm9uQ2xpY2siLCJEYXRhTWl4aW4iLCJyZXNvbHZlQ291bnRlciIsImFzeW5jRW50cnkiLCJyZXNvbHZlZERhdGEiLCJsb2FkIiwidGltZXIiLCJPcHRpb25zTWl4aW4iLCJjb252ZXJ0VmFsdWUiLCJjb252ZXJ0Iiwic2VhcmNoIiwiZmlsdGVyIiwiZGVib3VuY2UiLCJkZWJvdW5jZUFzeW5jIiwib3B0aW9uIiwiZ3JvdXBlZCIsInJlc3VsdHMiLCJncm91cCIsImZpbmRPcHRpb24iLCJncm91cEJ5Iiwib3B0aW9uVmFsdWUiLCJvcHRpb25MYWJlbCIsInByb2Nlc3NSZWxhdGUiLCJmbGFzayIsIkNvZGVGbGFzayIsImNoYW5nZWQiLCJpZ25vcmVXYXRjaCIsImlnbm9yZVVwZGF0ZSIsInNldENvZGUiLCJjb2RlIiwic2V0VmFsdWUiLCJTa2V0Y2hQaWNrZXIiLCJ0aW55Y29sb3IiLCJmb2N1c2VkIiwiRGF0ZVRpbWVQaWNrZXIiLCJmb3JtYXRRdWVyeSIsInZhbCIsInJlcGxhY2VSb3V0ZSIsIlNvdXJjZU1peGluIiwiZGVmYXVsdFNvcnQiLCJkaXJlY3Rpb24iLCJkcmFnZ2FibGUiLCJjb2xsYXBzaWJsZSIsImxpc3REYXRhIiwib25Db21wbGV0ZSIsIm9wZW5lZCIsImNhbGxPbkNvbXBsZXRlIiwiaW5saW5lZCIsIm1ldGEiLCJmb3JtTWV0YSIsImNoaWxkUm91dGVzIiwiZ2V0UGF0aFdpdGhQYXJhbSIsInNvdXJjZVBhdGgiLCJmb3JtUm91dGUiLCJmbGF0Um91dGVzIiwic3ViUm91dGVzIiwiY2hpbGRSb3V0ZSIsImZpbHRlckNvbXBvbmVudHMiLCJkYXRlRm9ybWF0IiwiY3JlYXRlRmlsdGVyc1BhbmVsIiwiZmlsdGVycyIsInByb3h5Iiwic3RpY2t5IiwiZmlsdGVyU2NoZW1hcyIsInBhcnNlRmlsdGVyc0RhdGEiLCJjcmVhdGVGaWx0ZXJzQ29tcG9uZW50cyIsImNyZWF0ZUZpbHRlcnNCdXR0b25zIiwiZm9ybWF0RmlsdGVyc0RhdGEiLCJzbWFsbCIsImNvbXBzIiwiZ2V0Q29tcG9uZW50c0ZvckZpbHRlciIsImZpbHRlcnNEYXRhIiwiX2NvbXBvbmVudF9EaXRvVGFibGVIZWFkIiwiX2NvbXBvbmVudF9EaXRvU2NoZW1hSW5saW5lZCIsIl9yZXNvbHZlRHluYW1pY0NvbXBvbmVudCIsIl9jb21wb25lbnRfRGl0b0VkaXRCdXR0b25zIiwiX2hvaXN0ZWRfOSIsImdldExpc3RDb21wb25lbnQiLCJmaWx0ZXJzRGF0YVBhdGgiLCJFZGl0b3JDb250ZW50IiwiSWNvbiIsImVkaXRvciIsIm1hcmtCdXR0b25zIiwiYmFzaWNOb2RlQnV0dG9ucyIsIm90aGVyTm9kZUJ1dHRvbnMiLCJ0b29sQnV0dG9ucyIsImVuYWJsZVJ1bGVzIiwic2V0VmFsdWVEZWJvdW5jZWQiLCJvblVwZGF0ZSIsIkVkaXRvciIsImdldFBvaW50IiwieCIsInByZXZZIiwibW91c2Vtb3ZlIiwiZGlhbG9nQ29tcG9uZW50IiwiZ2V0TWFya0F0dHJpYnV0ZXMiLCJocmVmIiwibWFya3MiLCJub2RlcyIsInRvb2xzIiwiRG9jdW1lbnQiLCJUZXh0IiwiUGFyYWdyYXBoIiwiQm9sZCIsIkl0YWxpYyIsIlVuZGVybGluZSIsIlN0cmlrZSIsIlNtYWxsIiwiQ29kZSIsIkxpbmtXaXRoVGl0bGUiLCJCbG9ja3F1b3RlIiwiQ29kZUJsb2NrIiwiSGFyZEJyZWFrIiwiSGVhZGluZyIsIkhvcml6b250YWxSdWxlIiwiTGlzdEl0ZW0iLCJCdWxsZXRMaXN0IiwiT3JkZXJlZExpc3QiLCJIaXN0b3J5IiwiZXh0ZW5zaW9uIiwic2V0dGluZ3NOYW1lIiwiZGVzY3JpcHRpb25zIiwiYWRkQnV0dG9uIiwiaWNvbiIsImlnbm9yZUFjdGl2ZSIsImRlc2NyaXB0aW9uIiwic2V0dGluZ05hbWUiLCJ1bmRlcnNjb3JlIiwiYXR0cmlidXRlIiwiTWFyayIsImNvbW1hbmRzIiwiTGluayIsIm5vZGUiLCJfY29tcG9uZW50X1Z1ZU11bHRpc2VsZWN0IiwiVnVlTXVsdGlzZWxlY3QiLCJwbGFjZWhvbGRlciIsInNlYXJjaGFibGUiLCJ0YWdnYWJsZSIsInRhZyIsIk51bWJlck1peGluIiwiU3dpdGNoQnV0dG9uIiwiVGV4dE1peGluIiwibWFza2VkUGFzc3dvcmQiLCJoYXNFZGl0YWJsZUZvcm1zIiwiZm9ybWF0RmlsZVNpemUiLCJmaWxlc2l6ZSIsIlZ1ZVVwbG9hZCIsImFzRmlsZXMiLCJhY2NlcHQiLCJtYXhTaXplIiwicGFyc2VGaWxlU2l6ZSIsImZpbGUiLCJuZXdGaWxlIiwib2xkRmlsZSIsInhociIsImZpbGVzIiwidXBsb2FkIiwiUmVzaXplRGlyZWN0aXZlIiwiYmluZGluZyIsIm9ic2VydmVSZXNpemUiLCJ1bm9ic2VydmVSZXNpemUiLCJPYnNlcnZlciIsImlzUmVzaXplU3VwcG9ydGVkIiwib2JzZXJ2ZXJzIiwiYm94IiwibG9nZ2VkRGVwcmVjYXRpb25zIiwiZGVwcmVjYXRlIiwiRGl0b0FkbWluIiwiZGl0byIsInZpZXdzIiwiZ2V0QXBpVXJsIiwiaXNBcGlVcmwiLCJ1c2VycyIsInBhcmVudFBhdGgiLCJhcHAiLCJjcmVhdGVBcHAiLCJEaXRvUm9vdCIsIlZ1ZU5vdGlmaWNhdGlvbnMiLCJjcmVhdGVSb3V0ZXIiLCJjcmVhdGVXZWJIaXN0b3J5IiwiUmVxdWVzdEVycm9yIiwiaGVhZGVycyIsImlzQWJzb2x1dGVVcmwiLCJjb21iaW5lVXJscyIsImJhc2VVcmwiLCJyZWxhdGl2ZVVybCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsTUFBQUEsS0FBZUMsR0FBUztBQUFBLEVBQ3RCLE9BQU87QUFBQSxFQUNQLGlCQUFpQixDQUFFO0FBQUEsRUFDbkIsTUFBTTtBQUFBLEVBQ04sV0FBVyxDQUFFO0FBQUE7QUFBQSxFQUNiLGFBQWE7QUFBQSxFQUNiLGVBQWU7QUFDakIs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
9880
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi5lcy5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcFN0YXRlLmpzIiwiLi4vc3JjL3V0aWxzL2RhdGEuanMiLCIuLi9zcmMvRGl0b0NvbnRleHQuanMiLCIuLi9zcmMvbWl4aW5zL0VtaXR0ZXJNaXhpbi5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fY3JlZGl0Y2FyZC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fZGVjaW1hbHMuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2VtYWlsLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19ob3N0bmFtZS5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fZG9tYWluLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19pbnRlZ2VyLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19tYXguanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX21pbi5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcGFzc3dvcmQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3JhbmdlLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19yZXF1aXJlZC5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fdXJsLmpzIiwiLi4vc3JjL21peGlucy9WYWxpZGF0aW9uTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvYWNjZXNzb3IuanMiLCIuLi9zcmMvbWl4aW5zL1R5cGVNaXhpbi5qcyIsIi4uL3NyYy91dGlscy91aWQuanMiLCIuLi9zcmMvdXRpbHMvU2NoZW1hR3JhcGguanMiLCIuLi9zcmMvdXRpbHMvdHlwZS5qcyIsIi4uL3NyYy91dGlscy9zY2hlbWEuanMiLCIuLi9zcmMvdXRpbHMvcmVzb3VyY2UuanMiLCIuLi9zcmMvbWl4aW5zL0RpdG9NaXhpbi5qcyIsIi4uL3NyYy91dGlscy9vcHRpb25zLmpzIiwiLi4vc3JjL0RpdG9Db21wb25lbnQuanMiLCIuLi9zcmMvRGl0b1VzZXIuanMiLCIuLi9zcmMvbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzIiwiLi4vc3JjL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUm91dGVNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WaWV3LnZ1ZSIsIi4uLy4uL3VpL3NyYy91dGlscy9kYXRlLmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvQ2FsZW5kYXIudnVlIiwiLi4vLi4vdWkvc3JjL3V0aWxzL2V2ZW50LmpzIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvVHJpZ2dlci52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9JbnB1dEZpZWxkLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVQaWNrZXIudnVlIiwiLi4vLi4vdWkvc3JjL3V0aWxzL3Njcm9sbC5qcyIsIi4uLy4uL3VpL3NyYy91dGlscy9zZWxlY3Rpb24uanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9UaW1lUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0RhdGVUaW1lUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL0ljb24udnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvUGFnaW5hdGlvbi52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9Td2l0Y2hCdXR0b24udnVlIiwiLi4vLi4vdWkvc3JjL3RyYW5zaXRpb25zL1RyYW5zaXRpb25IZWlnaHQudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZUZvY3VzVHJhcC9jb21wb25lbnQubWpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0RpYWxvZy52dWUiLCIuLi9zcmMvbWl4aW5zL0RvbU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NpZGViYXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NwaW5uZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0hlYWRlci52dWUiLCIuLi9zcmMvbWl4aW5zL1B1bGxkb3duTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvQWNjb3VudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRWxlbWVudC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvTGFiZWwudnVlIiwiLi4vc3JjL21peGlucy9JdGVtTWl4aW4uanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TY2hlbWFJbmxpbmVkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lLnZ1ZSIsIi4uL3NyYy91dGlscy9tYXRoLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NvbnRhaW5lci52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFicy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZWwudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVscy52dWUiLCIuLi9zcmMvdXRpbHMvdnVlLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0J1dHRvbnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VkaXRCdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DcmVhdGVCdXR0b24udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NsaXBib2FyZC52dWUiLCIuLi9zcmMvbWl4aW5zL0xvYWRpbmdNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy91dGlscy9wYXRoLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm0udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm1OZXN0ZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Vycm9ycy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NvcGVzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYWdpbmF0aW9uLnZ1ZSIsIi4uL3NyYy9taXhpbnMvU29ydGFibGVNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmVlSXRlbS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVIZWFkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUNlbGwudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZVNvcnRhYmxlL2NvbXBvbmVudC5tanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRHJhZ2dhYmxlLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WTm9kZS52dWUiLCIuLi9zcmMvRGl0b1R5cGVDb21wb25lbnQuanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVCdXR0b24udnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ2hlY2tib3gudnVlIiwiLi4vc3JjL21peGlucy9EYXRhTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL09wdGlvbnNNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNoZWNrYm94ZXMudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29kZS52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDb2xvci52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDb21wb25lbnQudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29tcHV0ZWQudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlRGF0ZS52dWUiLCIuLi9zcmMvdXRpbHMvcm91dGUuanMiLCIuLi9zcmMvbWl4aW5zL1NvdXJjZU1peGluLmpzIiwiLi4vc3JjL3V0aWxzL2ZpbHRlci5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUxpc3QudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTGFiZWwudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTWFya3VwLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZU11bHRpc2VsZWN0LnZ1ZSIsIi4uL3NyYy9taXhpbnMvTnVtYmVyTWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVOdW1iZXIudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlT2JqZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVBhbmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVByb2dyZXNzLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVJhZGlvLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVNlY3Rpb24udnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlU2VsZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVNsaWRlci52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVTd2l0Y2gudnVlIiwiLi4vc3JjL21peGlucy9UZXh0TWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVUZXh0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVRleHRhcmVhLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVRyZWVMaXN0LnZ1ZSIsIi4uL3NyYy91dGlscy91bml0cy5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVVwbG9hZC52dWUiLCIuLi9zcmMvZGlyZWN0aXZlcy9yZXNpemUuanMiLCIuLi9zcmMvdXRpbHMvZGVwcmVjYXRlLmpzIiwiLi4vc3JjL3ZlcmJzLmpzIiwiLi4vc3JjL0RpdG9BZG1pbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWFjdGl2ZSB9IGZyb20gJ3Z1ZSdcblxuZXhwb3J0IGRlZmF1bHQgcmVhY3RpdmUoe1xuICB0aXRsZTogJycsXG4gIHJvdXRlQ29tcG9uZW50czogW10sXG4gIHVzZXI6IG51bGwsXG4gIGxvYWRDYWNoZToge30sIC8vIFNlZSBUeXBlTWl4aW4ubG9hZCgpXG4gIGFjdGl2ZUxhYmVsOiBudWxsLFxuICBjbGlwYm9hcmREYXRhOiBudWxsXG59KVxuIiwiaW1wb3J0IHtcbiAgaXNJbnRlZ2VyLFxuICBwYXJzZURhdGFQYXRoLFxuICBnZXRWYWx1ZUF0RGF0YVBhdGgsXG4gIG5vcm1hbGl6ZURhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgdG9rZW4pIHtcbiAgcmV0dXJuIGRhdGFQYXRoXG4gICAgPyBgJHtkYXRhUGF0aH0vJHt0b2tlbn1gXG4gICAgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcGF0aD8ucG9wKClcbiAgcmV0dXJuIHBhdGhcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudERhdGFQYXRoKGRhdGFQYXRoKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbmVzdGVkID8gcGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkgOiBwYXJzZURhdGFQYXRoKGRhdGFQYXRoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIGlmIChwYXRoKSB7XG4gICAgLy8gUmVtb3ZlIHRoZSBwYXJlbnQgdG9rZW4uIElmIGl0J3MgYSBudW1iZXIsIHRoZW4gd2UncmUgZGVhbGluZyB3aXRoIGFuXG4gICAgLy8gYXJyYXkgYW5kIG5lZWQgdG8gcmVtb3ZlIG1vcmUgdG9rZW5zIHVudGlsIHdlIG1lZXQgdGhlIGFjdHVhbCBwYXJlbnQ6XG4gICAgbGV0IHRva2VuXG4gICAgZG8ge1xuICAgICAgdG9rZW4gPSBwYXRoLnBvcCgpXG4gICAgfSB3aGlsZSAodG9rZW4gIT0gbnVsbCAmJiBpc0ludGVnZXIoK3Rva2VuKSlcbiAgICAvLyBJZiB0aGUgcmVtb3ZlZCB0b2tlbiBpcyB2YWxpZCwgd2UgY2FuIGdldCB0aGUgcGFyZW50IGRhdGE6XG4gICAgaWYgKHRva2VuICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBwYXRoXG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbShyb290SXRlbSwgZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICByZXR1cm4gcGF0aCA/IGdldFZhbHVlQXREYXRhUGF0aChyb290SXRlbSwgcGF0aCkgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aCkge1xuICBjb25zdCBwYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgcmV0dXJuIHBhdGhbcGF0aC5sZW5ndGggLSAxXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoTmFtZShkYXRhUGF0aCkge1xuICBjb25zdCB0b2tlbiA9IGdldExhc3REYXRhUGF0aFRva2VuKGRhdGFQYXRoKVxuICByZXR1cm4gdG9rZW4gPT0gbnVsbCB8fCBpc0ludGVnZXIoK3Rva2VuKSA/IG51bGwgOiB0b2tlblxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoSW5kZXgoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgY29uc3QgaW5kZXggPSB0b2tlbiA9PSBudWxsID8gbnVsbCA6ICt0b2tlblxuICByZXR1cm4gaXNJbnRlZ2VyKGluZGV4KSA/IGluZGV4IDogbnVsbFxufVxuXG5sZXQgdGVtcG9yYXJ5SWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gc2V0VGVtcG9yYXJ5SWQoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFRlbXBvcmFyeSBpZHMgYXJlIG1hcmtlZCB3aXRoIGEgJ0AnIGF0IHRoZSBiZWdpbm5pbmcuXG4gIGRhdGFbaWRLZXldID0gYEAkeysrdGVtcG9yYXJ5SWR9YFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUZW1wb3JhcnlJZChpZCkge1xuICByZXR1cm4gL15ALy50ZXN0KGlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWZlcmVuY2UoZGF0YSwgaWRLZXkgPSAnaWQnKSB7XG4gIC8vIFJldHVybnMgdHJ1ZSBpZiB2YWx1ZSBpcyBhbiBvYmplY3QgdGhhdCBob2xkcyBub3RoaW5nIG1vcmUgdGhhbiBhbiBpZC5cbiAgcmV0dXJuIGRhdGE/LltpZEtleV0gIT0gbnVsbCAmJiBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPT09IDFcbn1cbiIsImltcG9ydCB7IHRvUmF3IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQge1xuICBnZXRJdGVtRGF0YVBhdGgsXG4gIGdldFBhcmVudEl0ZW1EYXRhUGF0aCxcbiAgZ2V0UGFyZW50SXRlbSxcbiAgZ2V0SXRlbSxcbiAgZ2V0TGFzdERhdGFQYXRoTmFtZSxcbiAgZ2V0TGFzdERhdGFQYXRoSW5kZXhcbn0gZnJvbSAnLi91dGlscy9kYXRhLmpzJ1xuXG5jb25zdCB7IGhhc093blByb3BlcnR5IH0gPSBPYmplY3QucHJvdG90eXBlXG5cbi8vIGBEaXRvQ29udGV4dGAgaW5zdGFuY2VzIGFyZSBhIHRoaW4gd3JhcHBlciBhcm91bmQgcmF3IGBjb250ZXh0YCBvYmplY3RzLFxuLy8gd2hpY2ggdGhlbXNlbHZlcyBhY3R1YWxseSBpbmhlcml0IGZyb20gdGhlIGxpbmtlZCBgY29tcG9uZW50YCBpbnN0YW5jZSwgc29cbi8vIHRoYXQgdGhleSBvbmx5IG5lZWQgdG8gcHJvdmlkZSB0aGUgdmFsdWVzIHRoYXQgc2hvdWxkIGJlIGRpZmZlcmVudCB0aGFuXG4vLyBpbiB0aGUgdW5kZXJseWluZyBjb21wb25lbnQuIEluIG9yZGVyIHRvIG5vdCBleHBvc2UgYWxsIGZpZWxkcyBmcm9tIHRoZVxuLy8gY29tcG9uZW50LCB0aGUgd3JhcHBlciBpcyBpbnRyb2R1Y2VkOlxuLy8gVXNlIFdlYWtNYXAgZm9yIHRoZSByYXcgYGNvbnRleHRgIG9iamVjdHMsIHNvIHdlIGRvbid0IGhhdmUgdG8gcG9sbHV0ZSB0aGVcbi8vIGFjdHVhbCBgRGl0b0NvbnRleHRgIGluc3RhbmNlIHdpdGggaXQuXG5jb25zdCBjb250ZXh0cyA9IG5ldyBXZWFrTWFwKClcblxuZnVuY3Rpb24gZ2V0KGNvbnRleHQsIGtleSwgZGVmYXVsdFZhbHVlKSB7XG4gIGNvbnN0IG9iamVjdCA9IGNvbnRleHRzLmdldCh0b1Jhdyhjb250ZXh0KSlcbiAgY29uc3QgdmFsdWUgPSBvYmplY3Rba2V5XVxuICAvLyBJZiBgb2JqZWN0YCBleHBsaWNpdGx5IHNldHMgdGhlIGtleSB0byBgdW5kZWZpbmVkYCwgcmV0dXJuIGl0LlxuICByZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KVxuICAgID8gdmFsdWVcbiAgICA6IGlzRnVuY3Rpb24oZGVmYXVsdFZhbHVlKVxuICAgICAgPyBkZWZhdWx0VmFsdWUoKVxuICAgICAgOiBkZWZhdWx0VmFsdWVcbn1cblxuZnVuY3Rpb24gc2V0KGNvbnRleHQsIGtleSwgdmFsdWUpIHtcbiAgY29udGV4dHMuZ2V0KHRvUmF3KGNvbnRleHQpKVtrZXldID0gdmFsdWVcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b0NvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb21wb25lbnQsIGNvbnRleHQpIHtcbiAgICAvLyBVc2UgdGhlIHByb3ZpZGVkIHBhcmFtcyBvYmplY3QgLyBmdW5jdGlvbiwgb3IgY3JlYXRlIGEgbmV3IG9uZTpcbiAgICBjb250ZXh0ID0gY29udGV4dFxuICAgICAgPyBpc0Z1bmN0aW9uKGNvbnRleHQpXG4gICAgICAgID8gY29udGV4dCgpXG4gICAgICAgIDogeyAuLi5jb250ZXh0IH1cbiAgICAgIDoge31cbiAgICAvLyBJZiBub3QgZXhwbGljaXRseSBzZXQgKHRvIGZhbHNlKSwgZGVmYXVsdCB0byB0cnVlIHNvIHdlIGRvbid0IGZhbGwgYmFja1xuICAgIC8vIHRvIGBjb21wb25lbnRgIGZvciBpdHMgdmFsdWUuXG4gICAgY29udGV4dC5uZXN0ZWQgPz89IHRydWVcbiAgICBjb250ZXh0LmNvbXBvbmVudCA9IGNvbXBvbmVudFxuICAgIC8vIEhhdmUgYG9iamVjdGAgaW5oZXJpdCBmcm9tIHRoZSBgY29tcG9uZW50YCBpbnN0YW5jZSwgc28gaXQgY2FuIG92ZXJyaWRlXG4gICAgLy8gaXRzIHZhbHVlcyBhbmQgc3RpbGwgcmV0cmlldmUgZnJvbSBpdCwgYW5kIGFzc29jaWF0ZSBpdCB3aXRoIGB0aGlzYFxuICAgIC8vIHRocm91Z2ggYGNvbnRleHRzYCBtYXA6XG4gICAgY29uc3Qgb2JqZWN0ID0gT2JqZWN0LnNldFByb3RvdHlwZU9mKGNvbnRleHQsIGNvbXBvbmVudClcbiAgICAvLyBObyBuZWVkIGZvciBgdG9SYXcodGhpcylgIGhlcmUgYXMgaXQncyBhbHdheXMgcmF3IGluc2lkZSB0aGUgY29uc3RydWN0b3IuXG4gICAgY29udGV4dHMuc2V0KHRoaXMsIG9iamVjdClcbiAgfVxuXG4gIHN0YXRpYyBnZXQoY29tcG9uZW50LCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQgaW5zdGFuY2VvZiBEaXRvQ29udGV4dFxuICAgICAgPyBjb250ZXh0XG4gICAgICA6IG5ldyBEaXRvQ29udGV4dChjb21wb25lbnQsIGNvbnRleHQpXG4gIH1cblxuICAvLyBgbmVzdGVkYCBpcyBgdHJ1ZWAgd2hlbiB0aGUgZGF0YS1wYXRoIHBvaW50cyBhIHZhbHVlIGluc2lkZSBhbiBpdGVtLCBhbmRcbiAgLy8gYGZhbHNlYCB3aGVuIGl0IHBvaW50cyB0byB0aGUgaXRlbSBpdHNlbGYuXG4gIGdldCBuZXN0ZWQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmVzdGVkJywgdHJ1ZSlcbiAgfVxuXG4gIGdldCBzY2hlbWEoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnc2NoZW1hJywgbnVsbClcbiAgfVxuXG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2YWx1ZScsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCBkYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkYXRhUGF0aCcsICcnKVxuICB9XG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnbmFtZScsICgpID0+IGdldExhc3REYXRhUGF0aE5hbWUodGhpcy5kYXRhUGF0aCkpXG4gIH1cblxuICBnZXQgaW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnaW5kZXgnLCAoKSA9PiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLmRhdGFQYXRoKSlcbiAgfVxuXG4gIGdldCBpdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBwYXJlbnRJdGVtRGF0YVBhdGgoKSB7XG4gICAgcmV0dXJuIGdldFBhcmVudEl0ZW1EYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgfVxuXG4gIGdldCBpdGVtSW5kZXgoKSB7XG4gICAgcmV0dXJuIGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMuaXRlbURhdGFQYXRoKVxuICB9XG5cbiAgZ2V0IHBhcmVudEl0ZW1JbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5wYXJlbnRJdGVtRGF0YVBhdGgpXG4gIH1cblxuICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgLy8gdGVybSBgaXRlbWAgaXMgdXNlZCBmb3IgdGhlIGRhdGEgdGhhdCByZWxhdGVzIHRvIGVkaXRpbmcgb2JqZWN0czpcbiAgLy8gSWYgYGRhdGFgIGlzbid0IHByb3ZpZGVkLCB3ZSBjYW4gZGV0ZXJtaW5lIGl0IGZyb20gcm9vdERhdGEgJiBkYXRhUGF0aDpcbiAgZ2V0IGl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGF0YScsICgpID0+XG4gICAgICBnZXRJdGVtKHRoaXMucm9vdEl0ZW0sIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgIClcbiAgfVxuXG4gIC8vIE5PVEU6IGBwYXJlbnRJdGVtYCBpc24ndCB0aGUgY2xvc2VzdCBkYXRhIHBhcmVudCB0byBgaXRlbWAsIGl0J3MgdGhlXG4gIC8vIGNsb3Nlc3QgcGFyZW50IHRoYXQgaXNuJ3QgYW4gYXJyYXksIGUuZy4gZm9yIHJlbGF0aW9ucyBvciBuZXN0ZWQgSlNPTiBkYXRhLlxuICAvLyBUaGlzIGlzIHdoeSB0aGUgdGVybSBgaXRlbWAgd2FzIGNob3NlbiBvdmVyIGBkYXRhYCwgZS5nLiBWUyB0aGUgdXNlIG9mXG4gIC8vIGBwYXJlbnREYXRhYCBpbiBzZXJ2ZXItc2lkZWQgdmFsaWRhdGlvbiwgd2hpY2ggaXMgdGhlIGNsb3Nlc3QgcGFyZW50LiBJZlxuICAvLyBuZWVkZWQsIHdlIGNvdWxkIGV4cG9zZSB0aGlzIGRhdGEgaGVyZSB0b28sIGFzIHdlIGNhbiBkbyBhbGwgc29ydHMgb2YgZGF0YVxuICAvLyBwcm9jZXNzaW5nIHdpdGggYHJvb3REYXRhYCBhbmQgYGRhdGFQYXRoYC5cbiAgZ2V0IHBhcmVudEl0ZW0oKSB7XG4gICAgY29uc3QgaXRlbSA9IChcbiAgICAgIGdldFBhcmVudEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpIHx8XG4gICAgICBudWxsXG4gICAgKVxuICAgIHJldHVybiBpdGVtICE9PSB0aGlzLml0ZW0gPyBpdGVtIDogbnVsbFxuICB9XG5cbiAgZ2V0IHJvb3RJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Jvb3REYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCBwcm9jZXNzZWRJdGVtKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3Byb2Nlc3NlZERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGNsaXBib2FyZEl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnY2xpcGJvYXJkRGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgdXNlcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd1c2VyJywgbnVsbClcbiAgfVxuXG4gIGdldCBhcGkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnYXBpJywgbnVsbClcbiAgfVxuXG4gIGdldCB2aWV3cygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2aWV3cycsIG51bGwpXG4gIH1cblxuICBnZXQgaXRlbUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2l0ZW1MYWJlbCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1MYWJlbCcsIG51bGwpXG4gIH1cblxuICAvLyBOT1RFOiBMaWtlICdvcHRpb25zJywgdGhlIGFzc29jaWF0ZWQgY29tcG9uZW50IGRvZXNuJ3QgYWx3YXlzIGV4aXN0LCBlLmcuXG4gIC8vIGluIG5lc3RlZCBmb3JtcyBkdXJpbmcgYHByb2Nlc3NEYXRhKClgLiBCdXQgYHNjaGVtYWAgaXMgZ3VhcmFudGVlZCB0b1xuICAvLyBhbHdheXMgYmUgYXZhaWxhYmxlLlxuICBnZXQgY29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICAvLyBUT0RPOiBBZGQgYGNvbXBvbmVudFNjaGVtYWAgZ2V0dGVyIGZvciB0aGUgc2NoZW1hIG9mIHRoZSBjdXJyZW50IGNvbXBvbmVudCxcbiAgLy8gZXZlbiB3aGVuIHRoZSBjb21wb25lbnQgaXNuJ3QgYWN0dWFsbHkgaW5zdGFudGlhdGVkLiBDb25zaWRlciBhZGRpbmdcbiAgLy8gYHNvdXJjZVNjaGVtYWAgYXMgd2VsbD9cblxuICAvLyBUT0RPOiBGaXggdW5jbGVhciBuYW1pbmc6IFdoaWNoIHNjaGVtYSBpcyB0aGlzLCB0aGF0IG9mIHRoZSBjb21wb25lbnQgb3Igb2ZcbiAgLy8gaXRzIHBhcmVudD8gSXNuJ3QgZXhwb3NpbmcgYGZvcm1Db21wb25lbnRgIGFuZCBgdmlld0NvbXBvbmVudGAgZW5vdWdoLCBvbmNlXG4gIC8vIHdlIG9mZmVyIGFjY2VzcyB0byB0aGVpciBjb21wb25lbnRzIHRoZXJlIHRocm91Z2ggYGdldENvbXBvbmVudCgpYCAmIGNvLiBvblxuICAvLyBgRGl0b01peGluYCBwZXJoYXBzPyAgQWxzbywgdGhlcmUgY291bGQgYmUgYSBgdGFiQ29tcG9uZW50YCBnZXR0ZXIgZm9yXG4gIC8vIHNjaGVtYXMgaW4gdGFicz9cbiAgZ2V0IHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdzY2hlbWFDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGZvcm1Db21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZm9ybUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgdmlld0NvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2aWV3Q29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGlhbG9nQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBwYW5lbENvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdwYW5lbENvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncmVzb3VyY2VDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdzb3VyY2VDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgLy8gV2hlbiB1c2VkIGluIE9wdGlvbnNNaXhpbiBmb3IgYHNjaGVtYS5vcHRpb25zLnZhbHVlKClgLFxuICAvLyBgc2NoZW1hLm9wdGlvbnMubGFiZWwoKWAgYW5kICBgc2NoZW1hLnNlYXJjaC5maWx0ZXIoKWAgY2FsbGJhY2tzOlxuICBnZXQgb3B0aW9uKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ29wdGlvbicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ29wdGlvbnMnLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUT0RPOiBSZW5hbWUgdGhpcyB0byBgc2VhcmNoVGVybWAgb3IgYHNlYXJjaFF1ZXJ5YCwgdG8gcGVyaGFwcyBmcmVlIGBxdWVyeWBcbiAgLy8gZm9yIHRoZSBhY3R1YWwgYHJlc291cmNlQ29tcG9uZW50LnF1ZXJ5YCBvYmplY3Q/XG4gIGdldCBxdWVyeSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdxdWVyeScsIHVuZGVmaW5lZClcbiAgfVxuXG4gIC8vIFRoZSBlcnJvciBmaWVsZCBpcyBvbmx5IHBvcHVsYXRlZCBpbiB0aGUgY29udGV4dCBvZiBidXR0b25zIHRoYXQgc2VuZFxuICAvLyByZXF1ZXN0cywgc2VlIGBSZXNvdXJjZU1peGluLmVtaXRCdXR0b25FdmVudCgpYDpcbiAgZ2V0IGVycm9yKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Vycm9yJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgZ2V0IHdhc05vdGlmaWVkKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3dhc05vdGlmaWVkJywgZmFsc2UpXG4gIH1cblxuICAvLyBIZWxwZXIgTWV0aG9kc1xuXG4gIGdldCByZXF1ZXN0KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHRoaXMuY29tcG9uZW50LnJlcXVlc3Qob3B0aW9ucylcbiAgfVxuXG4gIGdldCBmb3JtYXQoKSB7XG4gICAgcmV0dXJuICh2YWx1ZSwgb3B0aW9ucykgPT4gdGhpcy5jb21wb25lbnQuZm9ybWF0KHZhbHVlLCBvcHRpb25zKVxuICB9XG5cbiAgZ2V0IG5hdmlnYXRlKCkge1xuICAgIHJldHVybiBsb2NhdGlvbiA9PiB0aGlzLmNvbXBvbmVudC5uYXZpZ2F0ZShsb2NhdGlvbilcbiAgfVxuXG4gIGdldCBkb3dubG9hZCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5kb3dubG9hZChvcHRpb25zKVxuICB9XG5cbiAgZ2V0IGdldFJlc291cmNlVXJsKCkge1xuICAgIHJldHVybiByZXNvdXJjZSA9PiB0aGlzLmNvbXBvbmVudC5nZXRSZXNvdXJjZVVybChyZXNvdXJjZSlcbiAgfVxuXG4gIGdldCBub3RpZnkoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4ge1xuICAgICAgdGhpcy5jb21wb25lbnQubm90aWZ5KG9wdGlvbnMpXG4gICAgICBzZXQodGhpcywgJ3dhc05vdGlmaWVkJywgdHJ1ZSlcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzQXJyYXksIGlzUGxhaW5PYmplY3QgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBsaXN0ZW5lcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIC8vIEFzeW5jIG9uKCkgYW5kICRvZmYoKSBtZXRob2RzIHRoYXQga2VlcCB0cmFjayBvZiB0aGUgZXZlbnRzIGFkZGVkIC9cbiAgICAvLyByZW1vdmVkLCBhbmQgcHJvdmlkZSBhIGhhc0xpc3RlbmVycygpIG1ldGhvZCB0aGF0IGNoZWNrcyBpZiB0aGUgY29tcG9uZW50XG4gICAgLy8gaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudC5cblxuICAgIC8vIEFsc28gYWRkcyBwcm9wZXIgaGFuZGxpbmcgb2YgYXN5bmMgZXZlbnRzLCBpbmNsdWRpbmcgYSBhc3luYyBlbWl0KCkgdGhhdFxuICAgIC8vIGRlYWxzIHdpdGggcHJvcGVyIGV2ZW50IHF1ZXVlaW5nLlxuICAgIG9uKGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGV2LCBjYWxsYmFjaylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBldmVudCkge1xuICAgICAgICAgIHRoaXMub24oa2V5LCBldmVudFtrZXldKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSAodGhpcy5saXN0ZW5lcnMgfHw9IE9iamVjdC5jcmVhdGUobnVsbCkpXG4gICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSAobGlzdGVuZXJzW2V2ZW50XSB8fD0ge1xuICAgICAgICAgIGNhbGxiYWNrczogW10sXG4gICAgICAgICAgcXVldWU6IFtdXG4gICAgICAgIH0pXG4gICAgICAgIGNhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgb25jZShldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IG9uID0gKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgdGhpcy5vZmYoZXZlbnQsIG9uKVxuICAgICAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncylcbiAgICAgIH1cbiAgICAgIG9uLmNhbGxiYWNrID0gY2FsbGJhY2sgLy8gTmVlZGVkIGZvciBgb2ZmKClgLCBzZWUgYmVsb3cuXG4gICAgICByZXR1cm4gdGhpcy5vbihldmVudCwgb24pXG4gICAgfSxcblxuICAgIG9mZihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAvLyBSZW1vdmUgYWxsIGV2ZW50c1xuICAgICAgICBkZWxldGUgdGhpcy5saXN0ZW5lcnNcbiAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBldiBvZiBldmVudCkge1xuICAgICAgICAgIHRoaXMub2ZmKGV2LCBjYWxsYmFjaylcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBldmVudCkge1xuICAgICAgICAgIHRoaXMub2ZmKGtleSwgZXZlbnRba2V5XSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVtb3ZlIHNwZWNpZmljIGV2ZW50XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5saXN0ZW5lcnM/LltldmVudF1cbiAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgaWYgKCFjYWxsYmFjaykge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGFsbCBoYW5kbGVycyBmb3IgdGhpcyBldmVudFxuICAgICAgICAgICAgZGVsZXRlIHRoaXMubGlzdGVuZXJzW2V2ZW50XVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBSZW1vdmUgYSBzcGVjaWZpYyBoYW5kbGVyOiBmaW5kIHRoZSBpbmRleCBpbiBjYWxsYmFja3NcbiAgICAgICAgICAgIGNvbnN0IHsgY2FsbGJhY2tzIH0gPSBlbnRyeVxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSBjYWxsYmFja3MuZmluZEluZGV4KFxuICAgICAgICAgICAgICAvLyBNYXRjaCBgY2IuY2FsbGJhY2tgIGFsc28sIGFzIHVzZWQgYnkgYG9uY2UoKWAsIHNlZSAgYWJvdmU6XG4gICAgICAgICAgICAgIGNiID0+IGNiID09PSBjYWxsYmFjayB8fCBjYi5jYWxsYmFjayA9PT0gY2FsbGJhY2tcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2tzLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGVtaXQoZXZlbnQsIC4uLmFyZ3MpIHtcbiAgICAgIC8vIE9ubHkgcXVldWUgZXZlbnQgaWYgdGhlcmUgYWN0dWFsbHkgYXJlIGxpc3RlbmVycyBmb3IgaXQuXG4gICAgICBjb25zdCBlbnRyeSA9IHRoaXMubGlzdGVuZXJzPy5bZXZlbnRdXG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgY29uc3QgeyBxdWV1ZSwgY2FsbGJhY2tzIH0gPSBlbnRyeVxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV4dCA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIC8vIEVtaXQgdGhlIG5leHQgZXZlbnQgaW4gdGhlIHF1ZXVlIHdpdGggaXRzIHBhcmFtcy5cbiAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBpdCBvbmx5IGdldHMgcmVtb3ZlZCBvbmNlIGBuZXh0KClgIGlzIGNhbGxlZC5cbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gcXVldWUuc2hpZnQoKVxuICAgICAgICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgICAgICAgIGxldCByZXN1bHRcbiAgICAgICAgICAgICAgZm9yIChjb25zdCBjYWxsYmFjayBvZiBjYWxsYmFja3MpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgY2FsbGJhY2suYXBwbHkodGhpcywgZW50cnkuYXJncylcbiAgICAgICAgICAgICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSByZXNcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYEVycm9yIGR1cmluZyBldmVudCBoYW5kbGVyIGZvciAnJHtldmVudH0nOmAsXG4gICAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIFJlc29sdmUgdGhlIHByb21pc2UgdGhhdCB3YXMgYWRkZWQgdG8gdGhlIHF1ZXVlIGZvciB0aGUgZXZlbnRcbiAgICAgICAgICAgICAgLy8gdGhhdCB3YXMganVzdCBjb21wbGV0ZWQgYnkgdGhlIHdyYXBwZXIgdGhhdCBjYWxsZWQgYG5leHQoKWBcbiAgICAgICAgICAgICAgZW50cnkucmVzb2x2ZShyZXN1bHQpXG4gICAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBxdWV1ZS5wdXNoKHsgYXJncywgcmVzb2x2ZSB9KVxuICAgICAgICAgIC8vIEZvciBuZXcgcXVldWVzICg9IG9ubHkgb25lIGVudHJ5KSBlbWl0IHRoZSBmaXJzdCBldmVudCBpbW1lZGlhdGVseSxcbiAgICAgICAgICAvLyB0byBnZXQgdGhlIHF1ZXVlIHJ1bm5pbmcuXG4gICAgICAgICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgbmV4dCgpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBDaGVja3MgaWYgdGhlIGNvbXBvbmVudCBoYXMgbGlzdGVuZXJzIGZvciBhIGdpdmVuIGV2ZW50IHR5cGU6XG4gICAgaGFzTGlzdGVuZXJzKGV2ZW50KSB7XG4gICAgICBpZiAoaXNBcnJheShldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBldiBvZiBldmVudCkge1xuICAgICAgICAgIGlmICghdGhpcy5oYXNMaXN0ZW5lcnMoZXYpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV2ZW50Lmxlbmd0aCA+IDBcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMubGlzdGVuZXJzPy5bZXZlbnRdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlbGVnYXRlKGV2ZW50LCB0YXJnZXQpIHtcbiAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBldiBvZiBldmVudCkge1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZShldiwgdGFyZ2V0KVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLm9uKGV2ZW50LCAoLi4uYXJncykgPT4gdGFyZ2V0LmVtaXQoZXZlbnQsIC4uLmFyZ3MpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNDcmVkaXRDYXJkIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGNyZWRpdGNhcmQgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0NyZWRpdENhcmQodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgaW52YWxpZCdcbn1cbiIsImV4cG9ydCBjb25zdCBkZWNpbWFscyA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgZGVjaW1hbHMpID0+IHtcbiAgICBjb25zdCBtYXRjaCA9IGRlY2ltYWxzID09PSAnKicgPyAnKycgOiBgezEsJHtkZWNpbWFsc319YFxuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeWy0rXT9cXFxcZCooXFxcXC5cXFxcZCR7bWF0Y2h9KT8kYCkudGVzdCh2YWx1ZSlcbiAgfSxcblxuICBtZXNzYWdlOiAodmFsdWUsIGRlY2ltYWxzKSA9PlxuICAgIGBtdXN0IGJlIG51bWVyaWMgYW5kIG1heSBjb250YWluICR7XG4gICAgICAhZGVjaW1hbHMgfHwgZGVjaW1hbHMgPT09ICcqJyA/ICcnIDogZGVjaW1hbHNcbiAgICB9IGRlY2ltYWwgcG9pbnRzYFxufVxuIiwiaW1wb3J0IHsgaXNFbWFpbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBlbWFpbCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzRW1haWwodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSBhIHZhbGlkIGVtYWlsJ1xufVxuIiwiaW1wb3J0IHsgaXNIb3N0bmFtZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBob3N0bmFtZSA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzSG9zdG5hbWUodmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgaG9zdCBuYW1lJ1xufVxuIiwiaW1wb3J0IHsgaXNEb21haW4gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZG9tYWluID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNEb21haW4odmFsdWUpLFxuICBtZXNzYWdlOiAnaXMgbm90IGEgZG9tYWluJ1xufVxuIiwiaW1wb3J0IHsgaXNJbnRlZ2VyIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGludGVnZXIgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0ludGVnZXIodmFsdWUpLFxuICBtZXNzYWdlOiAnbXVzdCBiZSB3aG9sZSBudW1iZXInXG59XG4iLCJleHBvcnQgY29uc3QgbWF4ID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtYXgpID0+IHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgbWF4KSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWF4fSBvciBsZXNzYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgbWluID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBtaW4pID0+IHZhbHVlID49IG1pbixcbiAgbWVzc2FnZSh2YWx1ZSwgbWluKSB7XG4gICAgcmV0dXJuIGBtdXN0IGJlICR7bWlufSBvciBtb3JlYFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcGFzc3dvcmQgPSB7XG4gIC8vIEFsbG93IGFueSB2YWx1ZS4gRm9yIG5vdyB0aGlzIGlzIG9ubHkgdXNlZCBhcyBhIG1hcmtlciwgdG8gYWxsb3cgdGhlXG4gIC8vIHJlcXVpcmVkIHZhbGlkYXRpb24gdG8gaGFuZGxlIHVuY2hhbmdlZCBwYXNzd29yZHMgc2VwYXJhdGVseS5cbiAgdmFsaWRhdGU6ICgpID0+IHRydWVcbn1cbiIsImV4cG9ydCBjb25zdCByYW5nZSA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgW21pbiwgbWF4XSkgPT4gdmFsdWUgPj0gbWluICYmIHZhbHVlIDw9IG1heCxcbiAgbWVzc2FnZSh2YWx1ZSwgW21pbiwgbWF4XSkge1xuICAgIHJldHVybiBgbXVzdCBiZSBiZXR3ZWVuICR7bWlufSBhbmQgJHttYXh9YFxuICB9XG59XG4iLCJleHBvcnQgY29uc3QgcmVxdWlyZWQgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIHNldHRpbmdzLCB7IHBhc3N3b3JkIH0pID0+IChcbiAgICAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gJycpIHx8XG4gICAgLy8gUGFzc3dvcmQgZmllbGRzIHVzZSBgdW5kZWZpbmVkYCBhcyBvcHBvc2VkIHRvIGBudWxsYCB3aGVuIHRoZXkncmUgc2V0XG4gICAgLy8gYnV0IHVuY2hhbmdlZCwgYWxsb3cgdGhpcyB0byBwYXNzIHRocm91Z2g6XG4gICAgKHBhc3N3b3JkICYmIHZhbHVlID09PSB1bmRlZmluZWQpXG4gICksXG4gIG1lc3NhZ2U6ICdpcyByZXF1aXJlZCcsXG4gIG51bGxpc2g6IHRydWVcbn1cbiIsImltcG9ydCB7IGlzVXJsIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IHVybCA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzVXJsKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIHZhbGlkIFVSTCdcbn1cbiIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgdmFsaWRhdGlvbnMgZnJvbSAnLi4vdmFsaWRhdGlvbnMvaW5kZXguanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ2Vycm9ycyddLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVG91Y2hlZDogZmFsc2UsXG4gICAgICBpc0RpcnR5OiBmYWxzZSxcbiAgICAgIGlzVmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgZXJyb3JzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLmlzVG91Y2hlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHZhbGlkYXRlKG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd2YWxpZGF0ZScsIHRoaXMuZGF0YVBhdGgsIHZhbHVlLCB0aGlzLnZhbGlkYXRpb25zKVxuICAgICAgZm9yIChjb25zdCBbcnVsZSwgc2V0dGluZ10gb2YgT2JqZWN0LmVudHJpZXModGhpcy52YWxpZGF0aW9ucykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uYW1lc3BhY2VcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gdmFsaWRhdGlvbnNbcnVsZV1cbiAgICAgICAgaWYgKHZhbGlkYXRvciAmJiAodmFsaWRhdG9yLm51bGxpc2ggfHwgdmFsdWUgIT0gbnVsbCkpIHtcbiAgICAgICAgICBjb25zdCB7IHZhbGlkYXRlLCBtZXNzYWdlIH0gPSB2YWxpZGF0b3JcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlKHZhbHVlLCBzZXR0aW5nLCB0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNGdW5jdGlvbihtZXNzYWdlKVxuICAgICAgICAgICAgICAgID8gbWVzc2FnZSh2YWx1ZSwgc2V0dGluZywgdGhpcylcbiAgICAgICAgICAgICAgICA6IG1lc3NhZ2VcbiAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvciwgdHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IHRydWVcbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gaXNWYWxpZFxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoZmFsc2UpXG4gICAgfSxcblxuICAgIG1hcmtUb3VjaGVkKCkge1xuICAgICAgdGhpcy5pc1RvdWNoZWQgPSB0cnVlXG4gICAgfSxcblxuICAgIG1hcmtEaXJ0eSgpIHtcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWVcbiAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2VcbiAgICAgIC8vIENsZWFyIGN1cnJlbnRseSBkaXNwbGF5ZWQgZXJyb3JzIG9uIG5ldyBpbnB1dC5cbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBhZGRFcnJvcihlcnJvciwgYWRkTGFiZWwgPSBmYWxzZSkge1xuICAgICAgdGhpcy5lcnJvcnMgfHw9IFtdXG4gICAgICBpZiAoYWRkTGFiZWwpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmxhYmVsIHx8IHRoaXMucGxhY2Vob2xkZXIgfHwgdGhpcy5uYW1lXG4gICAgICAgIGVycm9yID0gYFRoZSAke2xhYmVsfSBmaWVsZCAke2Vycm9yfS5gXG4gICAgICB9XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgdGhpcy4kZW1pdCgnZXJyb3JzJywgdGhpcy5lcnJvcnMpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIC8vIENvbnZlcnQgZnJvbSBBSlYgZXJyb3JzIG9iamVjdHMgdG8gYW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHRoaXMuZXJyb3JzID0gW11cbiAgICAgIGZvciAoY29uc3QgeyBtZXNzYWdlIH0gb2YgZXJyb3JzKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IobWVzc2FnZSwgdHJ1ZSlcbiAgICAgIH1cbiAgICAgIGlmIChmb2N1cykge1xuICAgICAgICB0aGlzLmZvY3VzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcblxuICAgIGdldEVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLmVycm9ycyA/IFsuLi50aGlzLmVycm9yc10gOiBudWxsXG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgdGhpcy5lcnJvcnMgPSBudWxsXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzRnVuY3Rpb24sXG4gIGlzU3RyaW5nLFxuICBwYXJzZURhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hQWNjZXNzb3IoXG4gIGtleU9yRGF0YVBhdGgsXG4gIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBnZXQsIHNldCwgY2FsbGJhY2sgPSB0cnVlIH0gPSB7fVxuKSB7XG4gIC8vIGBrZXlPckRhdGFQYXRoYCBjYW4gYmUgYSBzaW1wbGUgcHJvcGVydHkga2V5LFxuICAvLyBvciBhIGRhdGEtcGF0aCBpbnRvIHN1Yi1wcm9wZXJ0aWVzLCBib3RoIGluIGFycmF5IG9yIHN0cmluZyBmb3JtYXQuXG4gIGlmIChpc1N0cmluZyhrZXlPckRhdGFQYXRoKSAmJiBrZXlPckRhdGFQYXRoLmluY2x1ZGVzKCcuJykpIHtcbiAgICBrZXlPckRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChrZXlPckRhdGFQYXRoKVxuICB9XG4gIC8vIFVzZSB0aGUgbm9ybWFsaXplZCBkYXRhIHBhdGggZm9yIHRoZSBoYW5kbGluZyBvdmVycmlkZXNcbiAgY29uc3QgbmFtZSA9IG5vcm1hbGl6ZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgLy8gT25seSBkZXRlcm1pbmUgc2NoZW1hIHZhbHVlIGlmIHdlIGhhdmUgbm8gZ2V0dGVyLCBvciB0aGUgZ2V0dGVyXG4gICAgICAvLyB3YW50cyB0byByZWNlaXZlIHRoZSB2YWx1ZSBhbmQgcHJvY2VzcyBpdCBmdXJ0aGVyOlxuICAgICAgY29uc3QgdmFsdWUgPVxuICAgICAgICAhZ2V0IHx8IGdldC5sZW5ndGggPiAwXG4gICAgICAgICAgPyAvLyBOT1RFOiBCZWNhdXNlIGBzY2hlbWFgIG9iamVjdHMgYXJlIHJldHJpZXZlZCBmcm9tIGBtZXRhYCwgdGhleVxuICAgICAgICAgICAgLy8gZG9uJ3Qgc2VlbSB0byBiZSByZWFjdGl2ZS4gVG8gYWxsb3cgY2hhbmdlZCBpbiBgc2NoZW1hYCB2YWx1ZXMsXG4gICAgICAgICAgICAvLyBgc2V0KClgIHN0b3JlcyBjaGFuZ2VkIHZhbHVlcyBpbiB0aGUgc2VwYXJhdGUgYG92ZXJyaWRlc2Agb2JqZWN0LlxuICAgICAgICAgICAgdGhpcy5vdmVycmlkZXMgJiYgbmFtZSBpbiB0aGlzLm92ZXJyaWRlc1xuICAgICAgICAgICAgPyB0aGlzLm92ZXJyaWRlc1tuYW1lXVxuICAgICAgICAgICAgOiB0aGlzLmdldFNjaGVtYVZhbHVlKGtleU9yRGF0YVBhdGgsIHtcbiAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGRlZixcbiAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICByZXR1cm4gZ2V0ID8gZ2V0LmNhbGwodGhpcywgdmFsdWUpIDogdmFsdWVcbiAgICB9LFxuXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICBpZiAoc2V0KSB7XG4gICAgICAgIHNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vdmVycmlkZXMgfHw9IHt9XG4gICAgICAgIHRoaXMub3ZlcnJpZGVzW25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0b3JlQWNjZXNzb3IobmFtZSwgeyBkZWZhdWx0OiBkZWYsIGdldCwgc2V0IH0gPSB7fSkge1xuICByZXR1cm4ge1xuICAgIGdldCgpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zOlxuICAgICAgICB2YWx1ZSA9IGlzRnVuY3Rpb24oZGVmKSA/IGRlZi5jYWxsKHRoaXMpIDogZGVmXG4gICAgICAgIC8vIFRyaWdnZXIgc2V0dGVyIGJ5IHNldHRpbmcgdmFsdWUgYW5kIGFjY2Vzc29yIHRvIGRlZmF1bHQ6XG4gICAgICAgIHRoaXNbbmFtZV0gPSB2YWx1ZVxuICAgICAgICAvLyBOb3cgYWNjZXNzIHN0b3JlIGFnYWluLCBmb3IgcmVhY3Rpdml0eSB0cmFja2luZ1xuICAgICAgICB0aGlzLmdldFN0b3JlKG5hbWUpXG4gICAgICB9XG4gICAgICAvLyBBbGxvdyB0aGUgcHJvdmlkZWQgZ2V0dGVyIHRvIGZ1cnRoZXIgY2hhbmdlIG9yIHByb2Nlc3MgdGhlIHZhbHVlXG4gICAgICAvLyByZXRyaWV2ZWQgZnJvbSB0aGUgc3RvcmU6XG4gICAgICByZXR1cm4gZ2V0ID8gZ2V0LmNhbGwodGhpcywgdmFsdWUpIDogdmFsdWVcbiAgICB9LFxuXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICAvLyBBbGxvdyB0aGUgcHJvdmlkZWQgc2V0dGVyIHRvIHJldHVybiBhIG5ldyB2YWx1ZSB0byBzZXQsIG9yIGRvIHRoZVxuICAgICAgLy8gc2V0dGluZyBpdHNlbGYsIGFuZCB0aGVuIHJldHVybiBgdW5kZWZpbmVkYDpcbiAgICAgIGlmICghc2V0IHx8ICh2YWx1ZSA9IHNldC5jYWxsKHRoaXMsIHZhbHVlKSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnNldFN0b3JlKG5hbWUsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFZhbGlkYXRpb25NaXhpbiBmcm9tICcuL1ZhbGlkYXRpb25NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBjb21wdXRlVmFsdWUgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRJdGVtLCBnZXRQYXJlbnRJdGVtIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGFzQXJyYXksIGNhbWVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbVmFsaWRhdGlvbk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gTk9URTogV2hpbGUgYGRhdGFQYXRoYCBwb2ludHMgdG8gdGhlIGFjdHVhbCBgdmFsdWVgLCBgZGF0YWAgcmVwcmVzZW50c1xuICAgIC8vIHRoZSBgaXRlbWAgaW4gd2hpY2ggdGhlIGB2YWx1ZWAgaXMgY29udGFpbmVkLCB1bmRlciB0aGUga2V5IGBuYW1lYC5cbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHdpZHRoOiB7IHR5cGU6IFtOdW1iZXIsIFN0cmluZ10sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBwYXJzZWRWYWx1ZTogdW5kZWZpbmVkLFxuICAgICAgY2hhbmdlZFZhbHVlOiB1bmRlZmluZWQsXG4gICAgICBmb2N1c2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubmFtZVxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLnR5cGVcbiAgICB9LFxuXG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IHRoaXMubmVzdGVkIH0pXG4gICAgfSxcblxuICAgIHZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZVZhbHVlKFxuICAgICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgICB0aGlzLm5hbWUsXG4gICAgICAgICAgdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICB7IGNvbXBvbmVudDogdGhpcyB9XG4gICAgICAgIClcbiAgICAgICAgY29uc3QgeyBmb3JtYXQgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIC8vIGBzY2hlbWEuZm9ybWF0YCBpcyBvbmx5IGV2ZXIgY2FsbGVkIGluIHRoZSBsaWZlLWN5Y2xlXG4gICAgICAgIC8vIG9mIHRoZSBjb21wb25lbnQgYW5kIHRodXMgaXQncyBvayB0byBiaW5kIGl0IHRvIGB0aGlzYFxuICAgICAgICByZXR1cm4gZm9ybWF0XG4gICAgICAgICAgPyBmb3JtYXQuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyBwYXJzZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgLy8gYHNjaGVtYS5wYXJzZWAgaXMgb25seSBldmVyIGNhbGxlZCBpbiB0aGUgbGlmZS1jeWNsZVxuICAgICAgICAvLyBvZiB0aGUgY29tcG9uZW50IGFuZCB0aHVzIGl0J3Mgb2sgdG8gYmluZCBpdCB0byBgdGhpc2BcbiAgICAgICAgdGhpcy5wYXJzZWRWYWx1ZSA9IHBhcnNlXG4gICAgICAgICAgPyBwYXJzZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IHZhbHVlIH0pKVxuICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1tdXRhdGluZy1wcm9wc1xuICAgICAgICB0aGlzLmRhdGFbdGhpcy5uYW1lXSA9IHRoaXMucGFyc2VkVmFsdWVcbiAgICAgICAgdGhpcy5jaGFuZ2VkVmFsdWUgPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFyZW50RGF0YSgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBnZXRQYXJlbnRJdGVtKHRoaXMucm9vdERhdGEsIHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICAgICAgcmV0dXJuIGRhdGEgIT09IHRoaXMuZGF0YSA/IGRhdGEgOiBudWxsXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZERhdGEoKSB7XG4gICAgICAvLyBXZSBjYW4gb25seSBnZXQgdGhlIHByb2Nlc3NlZCBkYXRhIHRocm91Z2ggdGhlIHNjaGVtYUNvbXBvbmVudCwgYnV0XG4gICAgICAvLyB0aGF0J3Mgbm90IG5lY2Vzc2FyaWx5IHRoZSBpdGVtIHJlcHJlc2VudGVkIGJ5IHRoaXMgY29tcG9uZW50LlxuICAgICAgLy8gU29sdXRpb246IEZpbmQgdGhlIHJlbGF0aXZlIHBhdGggYW5kIHRoZSBwcm9jZXNzZWQgc3ViLWl0ZW0gZnJvbSB0aGVyZTpcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50IH0gPSB0aGlzXG4gICAgICByZXR1cm4gZ2V0SXRlbShcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50LnByb2Nlc3NlZERhdGEsXG4gICAgICAgIC8vIEdldCB0aGUgZGF0YVBhdGggcmVsYXRpdmUgdG8gdGhlIHNjaGVtYUNvbXBvbmVudCdzIGRhdGE6XG4gICAgICAgIHRoaXMuZGF0YVBhdGguc2xpY2Uoc2NoZW1hQ29tcG9uZW50LmRhdGFQYXRoLmxlbmd0aCksXG4gICAgICAgIHRoaXMubmVzdGVkXG4gICAgICApXG4gICAgfSxcblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUgc2ltaWxhciB0byBgRGl0b0NvbnRleHRgXG4gICAgLy8gcHJvcGVydGllcywgc28gdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZXNlIG9uIGB0aGlzYCBhcyB3ZWxsOlxuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIHBhcmVudEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYXJlbnREYXRhXG4gICAgfSxcblxuICAgIHJvb3RJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdERhdGFcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkSXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NlZERhdGFcbiAgICB9LFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJG9wdGlvbnMuZGVmYXVsdFZpc2libGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgZXhjbHVkZWRgIGZvciBjb25zaXN0ZW50IG5hbWluZz9cbiAgICBleGNsdWRlOiBnZXRTY2hlbWFBY2Nlc3NvcignZXhjbHVkZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcmVxdWlyZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXF1aXJlZCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogTW92ZSB0aGVzZSB0byBhIHN1Yi1jbGFzcyBjb21wb25lbnQgdXNlZCBmb3IgYWxsIGlucHV0IGNvbXBvbmVudHM/XG4gICAgcmVhZG9ubHk6IGdldFNjaGVtYUFjY2Vzc29yKCdyZWFkb25seScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgYXV0b2ZvY3VzOiBnZXRTY2hlbWFBY2Nlc3NvcignYXV0b2ZvY3VzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICAvLyBUbyBiZSB1c2VkIGZvciBzZWxlY3RzIGFuZCBpbnB1dHMgb25seT9cbiAgICBjbGVhcmFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjbGVhcmFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHBsYWNlaG9sZGVyOiBnZXRTY2hlbWFBY2Nlc3NvcigncGxhY2Vob2xkZXInLCB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9KSxcblxuICAgIGF1dG9jb21wbGV0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2F1dG9jb21wbGV0ZScsIHtcbiAgICAgIHR5cGU6IFN0cmluZ1xuICAgIH0pLFxuXG4gICAgZXZlbnRzKCkge1xuICAgICAgY29uc3QgZXZlbnRzID0gdGhpcy5nZXRFdmVudHMoKVxuICAgICAgLy8gUmVnaXN0ZXIgY2FsbGJhY2tzIGZvciBhbGwgcHJvdmlkZXMgbm9uLXJlY29nbml6ZWQgZXZlbnRzLFxuICAgICAgLy8gYXNzdW1pbmcgdGhleSBhcmUgbmF0aXZlIGV2ZW50cy5cbiAgICAgIC8vIFRPRE86IE1vdmUgdG8gdnVlMy1zdHlsZSBgb25bQS1aXWAgZXZlbnQgaGFuZGxlcnMgbmFtaW5nIHRoYXQgYXJlbid0XG4gICAgICAvLyBuYW1lc3BhY2VkIGluIGBzY2hlbWEuZXZlbnRzYCBvbmNlIHRoZSB0cmFuc2l0aW9uIGlzIGNvbXBsZXRlLlxuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBPYmplY3Qua2V5cyh0aGlzLnNjaGVtYS5ldmVudHMgfHwge30pKSB7XG4gICAgICAgIGV2ZW50c1tgb24ke2NhbWVsaXplKGV2ZW50LCB0cnVlKX1gXSA/Pz0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZW1pdEV2ZW50KGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZXZlbnRzXG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IG5hdGl2ZUZpZWxkLCB0ZXh0RmllbGQgfSA9IHRoaXMuJG9wdGlvbnNcblxuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcbiAgICAgICAgLi4udGhpcy5ldmVudHMsXG4gICAgICAgIGRpc2FibGVkOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG5cbiAgICAgIGlmIChuYXRpdmVGaWVsZCkge1xuICAgICAgICBhdHRyaWJ1dGVzLm5hbWUgPSB0aGlzLm5hbWVcbiAgICAgICAgaWYgKHRoaXMubGFiZWwpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLnRpdGxlID0gdGhpcy5sYWJlbFxuICAgICAgICB9XG4gICAgICAgIGF0dHJpYnV0ZXMucmVhZG9ubHkgPSB0aGlzLnJlYWRvbmx5XG4gICAgICAgIGF0dHJpYnV0ZXMuYXV0b2ZvY3VzID0gdGhpcy5hdXRvZm9jdXNcbiAgICAgICAgaWYgKHRleHRGaWVsZCkge1xuICAgICAgICAgIGF0dHJpYnV0ZXMucGxhY2Vob2xkZXIgPSB0aGlzLnBsYWNlaG9sZGVyXG4gICAgICAgICAgYXR0cmlidXRlcy5hdXRvY29tcGxldGUgPSB0aGlzLmF1dG9jb21wbGV0ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhdHRyaWJ1dGVzXG4gICAgfSxcblxuICAgIHZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSB7IC4uLnRoaXMuZ2V0VmFsaWRhdGlvbnMoKSB9XG4gICAgICBpZiAodGhpcy5yZXF1aXJlZCkge1xuICAgICAgICB2YWxpZGF0aW9ucy5yZXF1aXJlZCA9IHRydWVcbiAgICAgIH1cbiAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBvdmVycmlkZSBkZWZhdWx0IHJ1bGVzIGFuZCBhZGQgYW55IG5ldyBvbmVzOlxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEucnVsZXMgfHwge30pKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGVsZXRlIHZhbGlkYXRpb25zW2tleV1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9uc1trZXldID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbGlkYXRpb25zXG4gICAgfSxcblxuICAgIHNob3dDbGVhckJ1dHRvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsZWFyYWJsZSAmJiB0aGlzLnZhbHVlICE9IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIHRoaXMuc2V0dXBTY2hlbWFGaWVsZHMoKVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3RlcihmYWxzZSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gUHJldmVudCB1bm5lc3RlZCB0eXBlIGNvbXBvbmVudHMgZnJvbSBvdmVycmlkaW5nIHBhcmVudCBkYXRhIHBhdGhzXG4gICAgICBpZiAodGhpcy5uZXN0ZWQpIHtcbiAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0RXZlbnRzKCkge1xuICAgICAgY29uc3QgeyBvbkZvY3VzLCBvbkJsdXIsIG9uSW5wdXQsIG9uQ2hhbmdlIH0gPSB0aGlzXG4gICAgICByZXR1cm4geyBvbkZvY3VzLCBvbkJsdXIsIG9uSW5wdXQsIG9uQ2hhbmdlIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICBjb25zdCBbZWxlbWVudF0gPSBhc0FycmF5KHRoaXMuJHJlZnMuZWxlbWVudClcbiAgICAgIGlmIChlbGVtZW50KSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICBlbGVtZW50LmZvY3VzKClcbiAgICAgICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBkaXNhYmxlZCwgYGZvY3VzKClgIHdpbGwgbGlrZWx5IG5vdCBoYXZlIHRoZVxuICAgICAgICAgIC8vIGRlc2lyZWQgZWZmZWN0LiBVc2UgYHNjcm9sbEludG9WaWV3KClgIGlmIGF2YWlsYWJsZTpcbiAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgOyhlbGVtZW50LiRlbCB8fCBlbGVtZW50KS5zY3JvbGxJbnRvVmlldz8uKClcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgLy8gQWxzbyBmb2N1cyB0aGlzIGNvbXBvbmVudCdzIHNjaGVtYSBhbmQgcGFuZWwgaW4gY2FzZSBpdCdzIGEgdGFiLlxuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuZm9jdXMoKVxuICAgICAgdGhpcy50YWJDb21wb25lbnQ/LmZvY3VzKClcbiAgICAgIHRoaXMuZm9jdXNFbGVtZW50KClcbiAgICB9LFxuXG4gICAgY2xlYXIoKSB7XG4gICAgICB0aGlzLnZhbHVlID0gbnVsbFxuICAgICAgdGhpcy5jaGFuZ2VkVmFsdWUgPSB1bmRlZmluZWRcbiAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgIH0sXG5cbiAgICBvbkZvY3VzKCkge1xuICAgICAgdGhpcy5mb2N1c2VkID0gdHJ1ZVxuICAgICAgdGhpcy5tYXJrVG91Y2hlZCgpXG4gICAgICB0aGlzLmVtaXRFdmVudCgnZm9jdXMnKVxuICAgIH0sXG5cbiAgICBvbkJsdXIoKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZVxuICAgICAgdGhpcy52YWxpZGF0ZSgpXG4gICAgICB0aGlzLmVtaXRFdmVudCgnYmx1cicpXG4gICAgfSxcblxuICAgIG9uSW5wdXQoKSB7XG4gICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICB0aGlzLmVtaXRFdmVudCgnaW5wdXQnKVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIGNvbnN0IHZhbHVlID1cbiAgICAgICAgdGhpcy5wYXJzZWRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5wYXJzZWRWYWx1ZSA6IHRoaXMudmFsdWVcblxuICAgICAgaWYgKHRoaXMuJG9wdGlvbnMubmF0aXZlRmllbGQpIHtcbiAgICAgICAgLy8gRm9yIHNvbWUgb2RkIHJlYXNvbiwgdGhlIG5hdGl2ZSBjaGFuZ2UgZXZlbnQgbm93IHNvbWV0aW1lcyBmaXJlc1xuICAgICAgICAvLyB0d2ljZSBvbiBWdWUzLiBGaWx0ZXIgb3V0IHNlY29uZCBjYWxsLlxuICAgICAgICAvLyBUT0RPOiBJbnZlc3RpZ2F0ZSB3aHkgdGhpcyBoYXBwZW5zLCBhbmQgaWYgaXQncyBhIGJ1ZyBpbiBWdWUzLlxuICAgICAgICBpZiAodmFsdWUgPT09IHRoaXMuY2hhbmdlZFZhbHVlKSByZXR1cm5cbiAgICAgICAgdGhpcy5jaGFuZ2VkVmFsdWUgPSB2YWx1ZVxuICAgICAgfVxuXG4gICAgICB0aGlzLm1hcmtEaXJ0eSgpXG4gICAgICB0aGlzLmVtaXRFdmVudCgnY2hhbmdlJywge1xuICAgICAgICAvLyBQcmV2ZW50IGVuZGxlc3MgcGFyc2UgcmVjdXJzaW9uOlxuICAgICAgICBjb250ZXh0OiB7IHZhbHVlIH0sXG4gICAgICAgIC8vIFBhc3MgYHNjaGVtYUNvbXBvbmVudGAgYXMgcGFyZW50LCBzbyBjaGFuZ2UgZXZlbnRzIGNhbiBwcm9wYWdhdGUgdXAuXG4gICAgICAgIHBhcmVudDogdGhpcy5zY2hlbWFDb21wb25lbnRcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG4iLCJjb25zdCB1aWRNYXAgPSBuZXcgV2Vha01hcCgpXG5cbi8vIEdlbmVyYXRlZCBhbmQgcmVtZW1iZXJzIHVuaXF1ZSBpZHMgcGVyIHBhc3NlZCBvYmplY3QgdXNpbmcgYSB3ZWFrIG1hcC5cbmxldCB1aWQgPSAwXG5leHBvcnQgZnVuY3Rpb24gZ2V0VWlkKG9iamVjdCwgaXRlbUlkKSB7XG4gIGxldCBpZCA9IHVpZE1hcC5nZXQob2JqZWN0KVxuICBpZiAoIWlkKSB7XG4gICAgaWQgPSBpdGVtSWQgfHwgYEAkeysrdWlkfWBcbiAgICB1aWRNYXAuc2V0KG9iamVjdCwgaWQpXG4gIH1cbiAgcmV0dXJuIGlkXG59XG4iLCJpbXBvcnQgeyBpc1RlbXBvcmFyeUlkIH0gZnJvbSAnLi9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNJbnRlZ2VyLFxuICBhc0FycmF5LFxuICBwYXJzZURhdGFQYXRoLFxuICBnZXRWYWx1ZUF0RGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IG5hbm9pZCB9IGZyb20gJ25hbm9pZCdcblxuLy8gU2NoZW1hR3JhcGggaXMgYSBjbGFzcyB0byBjb2xsZWN0IHNjaGVtYSBncmFwaCBtZXRhIGluZm9ybWF0aW9uIGluIG9yZGVyIHRvXG4vLyBwcm9jZXNzIHNvdXJjZXMgYW5kIHJlbGF0aW9ucyBmb3IgdGhlIGdpdmVuIHRhcmdldHMgJ3NlcnZlcicgYW5kICdjbGlwYm9hcmQnLFxuLy8gYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgdGFibGU6XG4vL1xuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcbi8vIHwgZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHNlcnZlciAgICB8IGNsaXBib2FyZCB8XG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogZmFsc2UgICAgICAgICAgIHwga2VlcCBpZCAgIHwga2VlcCBpZCAgIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IHRydWUgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlZiwgI3JlZiB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiB0cnVlLCB0ZW1wb3JhcnkgfCByZWYsICNyZWYgfCByZWYsICNyZWYgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogZmFsc2UgICAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVtb3ZlIGlkIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IGZhbHNlLCB0ZW1wb3JhcnkgICB8IHJlZiwgI2lkICB8IHJlbW92ZSBpZCB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiB0cnVlICAgICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZWYsICNpZCAgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogdHJ1ZSwgdGVtcG9yYXJ5ICAgIHwgcmVmLCAjaWQgIHwgcmVmLCAjaWQgIHxcbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG5cbmV4cG9ydCBjbGFzcyBTY2hlbWFHcmFwaCB7XG4gIGdyYXBoID0ge31cbiAgcmVmZXJlbmNlcyA9IHt9XG5cbiAgc2V0KGRhdGFQYXRoLCBzZXR0aW5ncywgZGVmYXVsdHMpIHtcbiAgICBkYXRhUGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgbGV0IHN1YkdyYXBoID0gdGhpcy5ncmFwaFxuICAgIGZvciAoY29uc3QgcGFydCBvZiBkYXRhUGF0aCkge1xuICAgICAgY29uc3Qga2V5ID0gaXNJbnRlZ2VyKCtwYXJ0KSA/ICcqJyA6IHBhcnRcbiAgICAgIHN1YkdyYXBoID0gc3ViR3JhcGhba2V5XSA/Pz0ge31cbiAgICB9XG4gICAgc3ViR3JhcGguJHNldHRpbmdzID0ge1xuICAgICAgLi4uZGVmYXVsdHMsIC8vIFNlZSBgYWRkU291cmNlKGRhdGFQYXRoKWBcbiAgICAgIC4uLnN1YkdyYXBoLiRzZXR0aW5ncyxcbiAgICAgIC4uLnNldHRpbmdzXG4gICAgfVxuICB9XG5cbiAgYWRkU291cmNlKGRhdGFQYXRoLCBzY2hlbWEpIHtcbiAgICAvLyBPbmx5IHNldCBgcmVsYXRlZDogZmFsc2VgIHRocm91Z2ggdGhlIGRlZmF1bHRzLCBhcyBgc2V0U291cmNlUmVsYXRlZCgpYFxuICAgIC8vIG1heSBiZSBjYWxsZWQgYmVmb3JlIGBhZGRTb3VyY2UoKWAsIGRlcGVuZGluZyBvbiB0aGUgZ3JhcGggc3RydWN0dXJlLlxuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7IHR5cGU6ICdzb3VyY2UnLCBzY2hlbWEgfSwgeyByZWxhdGVkOiBmYWxzZSB9KVxuICB9XG5cbiAgc2V0U291cmNlUmVsYXRlZChkYXRhUGF0aCkge1xuICAgIHRoaXMuc2V0KGRhdGFQYXRoLCB7XG4gICAgICByZWxhdGVkOiB0cnVlLFxuICAgICAgcmVmZXJlbmNlOiB0aGlzLmdldFJlZmVyZW5jZVByZWZpeChkYXRhUGF0aClcbiAgICB9KVxuICB9XG5cbiAgYWRkUmVsYXRpb24oZGF0YVBhdGgsIHJlbGF0ZWREYXRhUGF0aCwgc2NoZW1hKSB7XG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHtcbiAgICAgIHR5cGU6ICdyZWxhdGlvbicsXG4gICAgICBzY2hlbWEsXG4gICAgICBpbnRlcm5hbDogISFyZWxhdGVkRGF0YVBhdGgsXG4gICAgICByZWZlcmVuY2U6IHRoaXMuZ2V0UmVmZXJlbmNlUHJlZml4KHJlbGF0ZWREYXRhUGF0aClcbiAgICB9KVxuICB9XG5cbiAgZ2V0UmVmZXJlbmNlUHJlZml4KGRhdGFQYXRoKSB7XG4gICAgcmV0dXJuIGRhdGFQYXRoXG4gICAgICA/ICh0aGlzLnJlZmVyZW5jZXNbZGF0YVBhdGhdID8/PSBuYW5vaWQoNikpXG4gICAgICA6IG51bGxcbiAgfVxuXG4gIGZsYXR0ZW4oKSB7XG4gICAgY29uc3QgZmxhdHRlbiA9IGdyYXBoID0+IHtcbiAgICAgIGNvbnN0IGVudHJpZXMgPSBbXVxuICAgICAgZm9yIChjb25zdCBba2V5LCB7ICRzZXR0aW5ncywgLi4uc3ViR3JhcGggfV0gb2YgT2JqZWN0LmVudHJpZXMoZ3JhcGgpKSB7XG4gICAgICAgIGlmICgkc2V0dGluZ3MpIHtcbiAgICAgICAgICBlbnRyaWVzLnB1c2goW2tleSwgJHNldHRpbmdzXSlcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IFtzdWJLZXksIHNldHRpbmdzXSBvZiBmbGF0dGVuKHN1YkdyYXBoKSkge1xuICAgICAgICAgIGVudHJpZXMucHVzaChbYCR7a2V5fS8ke3N1YktleX1gLCBzZXR0aW5nc10pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBlbnRyaWVzXG4gICAgfVxuXG4gICAgcmV0dXJuIGZsYXR0ZW4odGhpcy5ncmFwaClcbiAgfVxuXG4gIHByb2Nlc3Moc291cmNlU2NoZW1hLCBkYXRhLCB7IHRhcmdldCB9KSB7XG4gICAgY29uc3QgY2xpcGJvYXJkID0gdGFyZ2V0ID09PSAnY2xpcGJvYXJkJ1xuICAgIGlmIChjbGlwYm9hcmQpIHtcbiAgICAgIGRlbGV0ZSBkYXRhW3NvdXJjZVNjaGVtYS5pZEtleSB8fCAnaWQnXVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgc2V0dGluZ3NdIG9mIHRoaXMuZmxhdHRlbigpKSB7XG4gICAgICBjb25zdCB7IHR5cGUsIHNjaGVtYSwgaW50ZXJuYWwsIHJlbGF0ZWQsIHJlZmVyZW5jZSB9ID0gc2V0dGluZ3NcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHR5cGUgPT09ICdzb3VyY2UnXG4gICAgICBjb25zdCByZWxhdGlvbiA9IHR5cGUgPT09ICdyZWxhdGlvbidcbiAgICAgIGlmIChzb3VyY2UgfHwgcmVsYXRpb24gJiYgaW50ZXJuYWwpIHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gZ2V0VmFsdWVBdERhdGFQYXRoKGRhdGEsIGRhdGFQYXRoLCAoKSA9PiBudWxsKVxuICAgICAgICBjb25zdCByZW1vdmVJZCA9IGNsaXBib2FyZCAmJiBzb3VyY2UgJiYgIXJlbGF0ZWRcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlSWQgPSAoXG4gICAgICAgICAgY2xpcGJvYXJkICYmIChcbiAgICAgICAgICAgIHJlbGF0aW9uICYmIGludGVybmFsIHx8XG4gICAgICAgICAgICBzb3VyY2UgJiYgcmVsYXRlZFxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGFzQXJyYXkodmFsdWVzKS5mbGF0KCkpIHtcbiAgICAgICAgICBjb25zdCBpZEtleSA9IChcbiAgICAgICAgICAgIHNvdXJjZSAmJiBzY2hlbWEuaWRLZXkgfHxcbiAgICAgICAgICAgIHJlbGF0aW9uICYmIHNjaGVtYS5yZWxhdGVCeSB8fFxuICAgICAgICAgICAgJ2lkJ1xuICAgICAgICAgIClcbiAgICAgICAgICBsZXQgaWQgPSB2YWx1ZT8uW2lkS2V5XVxuICAgICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAocmVtb3ZlSWQpIHtcbiAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2lkS2V5XVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlZmVyZW5jZUlkIHx8IGlzVGVtcG9yYXJ5SWQoaWQpKSB7XG4gICAgICAgICAgICAgIGlmIChpc1RlbXBvcmFyeUlkKGlkKSkge1xuICAgICAgICAgICAgICAgIGlkID0gaWQuc2xpY2UoMSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCByZWZLZXkgPSBjbGlwYm9hcmRcbiAgICAgICAgICAgICAgICA/IC8vIENsaXBib2FyZCBqdXN0IG5lZWRzIHRlbXBvcmFyeSBpZHMgdW5kZXIgdGhlIGFjdHVhbCBgaWRLZXlgXG4gICAgICAgICAgICAgICAgICBpZEtleVxuICAgICAgICAgICAgICAgIDogLy8gU2VydmVyIHdhbnRzIE9iamVjdGlvbi1zdHlsZSAnI2lkJyAvICcjcmVmJyBwYWlycy5cbiAgICAgICAgICAgICAgICAgIHNvdXJjZVxuICAgICAgICAgICAgICAgICAgPyAnI2lkJ1xuICAgICAgICAgICAgICAgICAgOiAnI3JlZidcbiAgICAgICAgICAgICAgY29uc3QgcmV2VmFsdWUgPSBjbGlwYm9hcmRcbiAgICAgICAgICAgICAgICA/IGBAJHtpZH1gXG4gICAgICAgICAgICAgICAgOiAvLyBLZWVwIHRoZSBpZHMgdW5pcXVlIGluIHJlZmVyZW5jZSBncm91cHMsIHNpbmNlIHRoZXlcbiAgICAgICAgICAgICAgICAgIC8vIHJlZmVyZW5jZSBhY3Jvc3MgdGhlIGZ1bGwgZ3JhcGguXG4gICAgICAgICAgICAgICAgICByZWZlcmVuY2VcbiAgICAgICAgICAgICAgICAgID8gYCR7cmVmZXJlbmNlfS0ke2lkfWBcbiAgICAgICAgICAgICAgICAgIDogaWQgLy8gQSB0ZW1wb3JhcnkgaWQgd2l0aG91dCBhIHJlbGF0ZWQsIGp1c3QgcHJlc2VydmUgaXQuXG4gICAgICAgICAgICAgIHZhbHVlW3JlZktleV0gPSByZXZWYWx1ZVxuICAgICAgICAgICAgICBpZiAocmVmS2V5ICE9PSBpZEtleSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVtpZEtleV1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBpc0FycmF5LFxuICBpc09iamVjdCxcbiAgaXNTdHJpbmcsXG4gIGlzQm9vbGVhbixcbiAgaXNOdW1iZXIsXG4gIGlzRnVuY3Rpb24sXG4gIGlzRGF0ZSxcbiAgaXNSZWdFeHAsXG4gIGFzQXJyYXlcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuY29uc3QgdHlwZUNoZWNrZXJzID0ge1xuICBCb29sZWFuOiBpc0Jvb2xlYW4sXG4gIE51bWJlcjogaXNOdW1iZXIsXG4gIFN0cmluZzogaXNTdHJpbmcsXG4gIERhdGU6IGlzRGF0ZSxcbiAgQXJyYXk6IGlzQXJyYXksXG4gIE9iamVjdDogaXNPYmplY3QsXG4gIFJlZ0V4cDogaXNSZWdFeHAsXG4gIEZ1bmN0aW9uOiBpc0Z1bmN0aW9uXG59XG5cbi8vIERlY2xhcmUgdGhlc2Ugc2VwYXJhdGVseSBmcm9tIHRoZSBgdHlwZUNvbnZlcnRlcnNgIG9iamVjdCwgdG8gcHJldmVudFxuLy8gQmFiZWwgaXNzdWVzIHdpdGggYE9iamVjdGAgb3ZlcnJpZGluZyB0aGUgZ2xvYmFsIGBPYmplY3RgOlxuY29uc3QgdG9Cb29sZWFuID0gdmFsdWUgPT4gISF2YWx1ZVxuY29uc3QgdG9OdW1iZXIgPSB2YWx1ZSA9PiArdmFsdWVcbmNvbnN0IHRvU3RyaW5nID0gdmFsdWUgPT4gU3RyaW5nKHZhbHVlKVxuXG5jb25zdCB0b0RhdGUgPSB2YWx1ZSA9PlxuICBpc0RhdGUodmFsdWUpXG4gICAgPyB2YWx1ZVxuICAgIDogbmV3IERhdGUodmFsdWUpXG5cbmNvbnN0IHRvQXJyYXkgPSB2YWx1ZSA9PlxuICBpc0FycmF5KHZhbHVlKVxuICAgID8gdmFsdWVcbiAgICA6IGlzU3RyaW5nKHZhbHVlKVxuICAgICAgPyB2YWx1ZS5zcGxpdCgnLCcpXG4gICAgICA6IGFzQXJyYXkodmFsdWUpXG5cbmNvbnN0IHRvT2JqZWN0ID0gdmFsdWUgPT5cbiAgaXNPYmplY3QodmFsdWUpXG4gICAgPyB2YWx1ZVxuICAgIDogLy8gSWYgYSBPYmplY3QgaXMgZXhwZWN0ZWQgYnV0IGEgQm9vbGVhbiBwcm92aWRlLCBjb252ZXJ0IHRvIGFuIGVtcHR5XG4gICAgICAvLyBvYmplY3QuIFVzZWQgYnkgYGNyZWF0YWJsZWAgJiBjbywgdGhhdCBjYW4gYmUgYm90aC5cbiAgICAgIHZhbHVlID09PSB0cnVlXG4gICAgICA/IHt9XG4gICAgICA6IG51bGxcblxuY29uc3QgdG9SZWdFeHAgPSB2YWx1ZSA9PlxuICBpc1JlZ0V4cCh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiBuZXcgUmVnRXhwKHZhbHVlKVxuXG5jb25zdCB0eXBlQ29udmVydGVycyA9IHtcbiAgQm9vbGVhbjogdG9Cb29sZWFuLFxuICBOdW1iZXI6IHRvTnVtYmVyLFxuICBTdHJpbmc6IHRvU3RyaW5nLFxuICBEYXRlOiB0b0RhdGUsXG4gIEFycmF5OiB0b0FycmF5LFxuICBPYmplY3Q6IHRvT2JqZWN0LFxuICBSZWdFeHA6IHRvUmVnRXhwXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpIHtcbiAgLy8gU2VlIGlmIGFueSBvZiB0aGUgZXhwZWN0IHR5cGVzIG1hdGNoLCByZXR1cm4gaW1tZWRpYXRlbHkgaWYgdGhleSBkbzpcbiAgaWYgKHR5cGVzICYmIHZhbHVlICE9IG51bGwpIHtcbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgIGlmICh0eXBlQ2hlY2tlcnNbdHlwZS5uYW1lXT8uKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRUeXBlKHR5cGUsIHZhbHVlKSB7XG4gIGNvbnN0IGNvbnZlcnRlciA9IHR5cGUgJiYgdHlwZUNvbnZlcnRlcnNbdHlwZS5uYW1lIHx8IHR5cGVdXG4gIHJldHVybiBjb252ZXJ0ZXIgPyBjb252ZXJ0ZXIodmFsdWUpIDogdmFsdWVcbn1cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBEaXRvTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RpdG9NaXhpbi5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCB7IGdldFVpZCB9IGZyb20gJy4vdWlkLmpzJ1xuaW1wb3J0IHsgU2NoZW1hR3JhcGggfSBmcm9tICcuL1NjaGVtYUdyYXBoLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGgsIGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQgeyBpc01hdGNoaW5nVHlwZSwgY29udmVydFR5cGUgfSBmcm9tICcuL3R5cGUuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNTdHJpbmcsXG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb24sXG4gIGlzUHJvbWlzZSxcbiAgaXNNb2R1bGUsXG4gIGFzQXJyYXksXG4gIGNsb25lLFxuICBtZXJnZSxcbiAgY2FtZWxpemUsXG4gIG1hcENvbmN1cnJlbnRseSxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBtYXJrUmF3IH0gZnJvbSAndnVlJ1xuXG5jb25zdCB0eXBlQ29tcG9uZW50cyA9IHt9XG5jb25zdCB1bmtub3duVHlwZVJlcG9ydGVkID0ge31cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpIHtcbiAgdHlwZUNvbXBvbmVudHNbdHlwZV0gPSBjb21wb25lbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb21wb25lbnQodHlwZSwgYWxsb3dOdWxsID0gZmFsc2UpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gdHlwZUNvbXBvbmVudHNbdHlwZV0gfHwgbnVsbFxuICBpZiAoIWNvbXBvbmVudCAmJiAhYWxsb3dOdWxsICYmICF1bmtub3duVHlwZVJlcG9ydGVkW3R5cGVdKSB7XG4gICAgLy8gUmVwb3J0IGVhY2ggbWlzc2luZyB0eXBlIG9ubHkgb25jZSwgdG8gYXZvaWQgZmxvb2RpbmcgdGhlIGNvbnNvbGU6XG4gICAgdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSA9IHRydWVcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gRGl0byBjb21wb25lbnQgdHlwZTogJyR7dHlwZX0nYClcbiAgfVxuICByZXR1cm4gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyhzY2hlbWFzLCBjYWxsYmFjaykge1xuICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBzY2hlbWFzKSB7XG4gICAgaWYgKGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpKSB7XG4gICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhzY2hlbWEuY29tcG9uZW50LCBzY2hlbWEubmFtZSwgMClcbiAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1NjaGVtYShzY2hlbWEpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYS5jb21wb25lbnRzIHx8IHt9KSkge1xuICAgICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhjb21wb25lbnQsIG5hbWUsIDEpXG4gICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gc2NoZW1hXG4gICAgPyBpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyhbc2NoZW1hLCAuLi5nZXRUYWJTY2hlbWFzKHNjaGVtYSldLCBjYWxsYmFjaylcbiAgICA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZE5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiAoXG4gICAgaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoXG4gICAgICBzY2hlbWEsXG4gICAgICBjb21wb25lbnQgPT4gKGNhbGxiYWNrKGNvbXBvbmVudCkgPyBjb21wb25lbnQgOiB1bmRlZmluZWQpXG4gICAgKSA/PyBudWxsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVOZXN0ZWRTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gKFxuICAgIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKFxuICAgICAgc2NoZW1hLFxuICAgICAgY29tcG9uZW50ID0+IChjYWxsYmFjayhjb21wb25lbnQpID8gdHJ1ZSA6IHVuZGVmaW5lZClcbiAgICApID8/IGZhbHNlXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5TmVzdGVkU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIChcbiAgICBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhcbiAgICAgIHNjaGVtYSxcbiAgICAgIGNvbXBvbmVudCA9PiAoY2FsbGJhY2soY29tcG9uZW50KSA/IHVuZGVmaW5lZCA6IGZhbHNlKVxuICAgICkgPz8gdHJ1ZVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNOZXN0ZWRTY2hlbWFDb21wb25lbnRzKHNjaGVtYSkge1xuICByZXR1cm4gc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsICgpID0+IHRydWUpID8/IGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NjaGVtYShzY2hlbWEpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYSkgJiYgaXNTdHJpbmcoc2NoZW1hLnR5cGUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Zvcm0oc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAnZm9ybSdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmlldyhzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICd2aWV3J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUYWIoc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAndGFiJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYW5lbChzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICdwYW5lbCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKSB7XG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShzY2hlbWEpXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlU2NoZW1hKHNjaGVtYSwgdW53cmFwTW9kdWxlID0gZmFsc2UpIHtcbiAgaWYgKGlzRnVuY3Rpb24oc2NoZW1hKSkge1xuICAgIHNjaGVtYSA9IHNjaGVtYSgpXG4gIH1cbiAgaWYgKGlzUHJvbWlzZShzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0gYXdhaXQgc2NoZW1hXG4gIH1cbiAgaWYgKGlzTW9kdWxlKHNjaGVtYSkpIHtcbiAgICAvLyBDb3B5IHRvIGNvbnZlcnQgZnJvbSBtb2R1bGUgdG8gb2JqZWN0OlxuICAgIHNjaGVtYSA9IHsgLi4uc2NoZW1hIH1cbiAgICAvLyBVbndyYXAgZGVmYXVsdCBvciBuYW1lZCBzY2hlbWFcbiAgICBpZiAoIXNjaGVtYS5uYW1lICYmICh1bndyYXBNb2R1bGUgfHwgc2NoZW1hLmRlZmF1bHQpKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc2NoZW1hKVxuICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBrZXlzWzBdXG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVtuYW1lXVxuICAgICAgICBpZiAobmFtZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYXMoXG4gIHVucmVzb2x2ZWRTY2hlbWFzLFxuICByZXNvbHZlSXRlbSA9IHJlc29sdmVTY2hlbWFcbikge1xuICBsZXQgc2NoZW1hcyA9IGlzRnVuY3Rpb24odW5yZXNvbHZlZFNjaGVtYXMpXG4gICAgPyB1bnJlc29sdmVkU2NoZW1hcygpXG4gICAgOiB1bnJlc29sdmVkU2NoZW1hc1xuICBzY2hlbWFzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWFzLCBmYWxzZSlcbiAgaWYgKGlzQXJyYXkoc2NoZW1hcykpIHtcbiAgICAvLyBUcmFuc2xhdGUgYW4gYXJyYXkgb2YgZHluYW1pYyBpbXBvcnQsIGVhY2ggaW1wb3J0aW5nIG9uZSBuYW1lZCBzY2hlbWFcbiAgICAvLyBtb2R1bGUgdG8gYW4gb2JqZWN0IHdpdGggbmFtZWQgZW50cmllcy5cbiAgICBzY2hlbWFzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgYXdhaXQgbWFwQ29uY3VycmVudGx5KFxuICAgICAgICBzY2hlbWFzLFxuICAgICAgICBhc3luYyBpdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBbc2NoZW1hLm5hbWUsIHNjaGVtYV1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIClcbiAgfSBlbHNlIGlmIChpc09iamVjdChzY2hlbWFzKSkge1xuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBhd2FpdCBtYXBDb25jdXJyZW50bHkoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLFxuICAgICAgICBhc3luYyAoW2tleSwgaXRlbV0pID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBba2V5LCBzY2hlbWFdXG4gICAgICAgIH1cbiAgICAgIClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHNjaGVtYXNcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKSB7XG4gIC8vIFJlc29sdmVzIGFzeW5jIHNjaGVtYSBjb21wb25lbnRzIGFuZCBhZGRzIERpdG9NaXhpbiBhbmQgVHlwZU1peGluIHRvIHRoZW0uXG4gIGxldCB7IGNvbXBvbmVudCB9ID0gc2NoZW1hXG4gIGlmIChjb21wb25lbnQpIHtcbiAgICBjb21wb25lbnQgPSBhd2FpdCByZXNvbHZlU2NoZW1hKGNvbXBvbmVudCwgdHJ1ZSlcbiAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAvLyBQcmV2ZW50IHdhcm5pbmc6IFwiVnVlIHJlY2VpdmVkIGEgQ29tcG9uZW50IHdoaWNoIHdhcyBtYWRlIGEgcmVhY3RpdmVcbiAgICAgIC8vIG9iamVjdC4gVGhpcyBjYW4gbGVhZCB0byB1bm5lY2Vzc2FyeSBwZXJmb3JtYW5jZSBvdmVyaGVhZCwgYW5kIHNob3VsZFxuICAgICAgLy8gYmUgYXZvaWRlZCBieSBtYXJraW5nIHRoZSBjb21wb25lbnQgd2l0aCBgbWFya1Jhd2BcIjpcbiAgICAgIHNjaGVtYS5jb21wb25lbnQgPSBtYXJrUmF3KHtcbiAgICAgICAgLi4uY29tcG9uZW50LFxuICAgICAgICBtaXhpbnM6IFtEaXRvTWl4aW4sIFR5cGVNaXhpbiwgLi4uKGNvbXBvbmVudC5taXhpbnMgfHwgW10pXVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFDb21wb25lbnRzKHNjaGVtYXMpIHtcbiAgLy8gYHNjaGVtYXNgIGFyZSBvZiB0aGUgc2FtZSBwb3NzaWJsZSBmb3JtcyBhcyBwYXNzZWQgdG8gYGdldE5hbWVkU2NoZW1hcygpYFxuICBhd2FpdCBtYXBDb25jdXJyZW50bHkoT2JqZWN0LnZhbHVlcyhzY2hlbWFzIHx8IHt9KSwgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudClcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKFxuICBhcGksXG4gIHNjaGVtYSxcbiAgcm91dGVzID0gbnVsbCxcbiAgbGV2ZWwgPSAwXG4pIHtcbiAgY29uc3QgcHJvbWlzZXMgPSBbXVxuICBjb25zdCBwcm9jZXNzID0gKGNvbXBvbmVudCwgbmFtZSwgcmVsYXRpdmVMZXZlbCkgPT4ge1xuICAgIHByb21pc2VzLnB1c2goXG4gICAgICBwcm9jZXNzU2NoZW1hQ29tcG9uZW50KFxuICAgICAgICBhcGksXG4gICAgICAgIGNvbXBvbmVudCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcm91dGVzLFxuICAgICAgICBsZXZlbCArIHJlbGF0aXZlTGV2ZWxcbiAgICAgIClcbiAgICApXG4gIH1cblxuICBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEsIHByb2Nlc3MpXG4gIGl0ZXJhdGVTY2hlbWFDb21wb25lbnRzKGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpLCBwcm9jZXNzKVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudChcbiAgYXBpLFxuICBzY2hlbWEsXG4gIG5hbWUsXG4gIHJvdXRlcyA9IG51bGwsXG4gIGxldmVsID0gMFxuKSB7XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcblxuICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgLy8gQWxzbyBwcm9jZXNzIG5lc3RlZCBwYW5lbCBzY2hlbWFzLlxuICAgIG1hcENvbmN1cnJlbnRseShcbiAgICAgIGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpLFxuICAgICAgcGFuZWwgPT4gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBwYW5lbCwgcm91dGVzLCBsZXZlbClcbiAgICApLFxuICAgIC8vIERlbGVnYXRlIHNjaGVtYSBwcm9jZXNzaW5nIHRvIHRoZSBhY3R1YWwgdHlwZSBjb21wb25lbnRzLlxuICAgIGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LnByb2Nlc3NTY2hlbWE/LihcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYSxcbiAgICAgIG5hbWUsXG4gICAgICByb3V0ZXMsXG4gICAgICBsZXZlbFxuICAgIClcbiAgXSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NWaWV3KGNvbXBvbmVudCwgYXBpLCBzY2hlbWEsIG5hbWUpIHtcbiAgaWYgKCFpc1ZpZXcoc2NoZW1hKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB2aWV3IHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSlcbiAgcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKVxuICBhd2FpdCBwcm9jZXNzTmVzdGVkU2NoZW1hcyhhcGksIHNjaGVtYSlcbiAgY29uc3QgY2hpbGRyZW4gPSBbXVxuICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgY2hpbGRyZW4sIDApXG4gIHJldHVybiB7XG4gICAgcGF0aDogYC8ke3NjaGVtYS5wYXRofWAsXG4gICAgY2hpbGRyZW4sXG4gICAgY29tcG9uZW50LFxuICAgIG1ldGE6IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKSB7XG4gIGxldCBkZWZhdWx0cyA9IGFwaS5kZWZhdWx0c1tzY2hlbWEudHlwZV1cbiAgaWYgKGRlZmF1bHRzKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZGVmYXVsdHMpKSB7XG4gICAgICBkZWZhdWx0cyA9IGRlZmF1bHRzKHNjaGVtYSlcbiAgICB9XG4gICAgaWYgKGlzT2JqZWN0KGRlZmF1bHRzKSkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGVmYXVsdHMpKSB7XG4gICAgICAgIGlmIChzY2hlbWFba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2NoZW1hW2tleV0gPSB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjaGVtYVtrZXldID0gbWVyZ2UodmFsdWUsIHNjaGVtYVtrZXldKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpIHtcbiAgLy8gUHJvY2VzcyBkZWZhdWx0cyBmb3IgbmVzdGVkIHNjaGVtYXMuIE5vdGUgdGhhdCB0aGlzIGlzIGFsc28gZG9uZSB3aGVuXG4gIC8vIGNhbGxpbmcgYHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKClgLCBidXQgdGhhdCBmdW5jdGlvbiBpcyBhc3luYywgYW5kIHdlXG4gIC8vIG5lZWQgYSBzeW5jIHZlcnNpb24gdGhhdCBvbmx5IGhhbmRsZXMgdGhlIGRlZmF1bHRzIGZvciBmaWx0ZXJzLCBzZWVcbiAgLy8gYGdldEZpbHRlcnNQYW5lbCgpYC5cbiAgaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLCBjb21wb25lbnQgPT4ge1xuICAgIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIGNvbXBvbmVudClcbiAgICBjb25zdCBmb3JtcyA9IGdldEZvcm1TY2hlbWFzKGNvbXBvbmVudClcbiAgICBmb3IgKGNvbnN0IGZvcm0gb2YgT2JqZWN0LnZhbHVlcyhmb3JtcykpIHtcbiAgICAgIHByb2Nlc3NOZXN0ZWRTY2hlbWFEZWZhdWx0cyhhcGksIGZvcm0pXG4gICAgfVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1JvdXRlU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lKSB7XG4gIC8vIFVzZWQgZm9yIHZpZXcgYW5kIHNvdXJjZSBzY2hlbWFzLCBzZWUgU291cmNlTWl4aW4uXG4gIHNjaGVtYS5uYW1lID0gbmFtZVxuICBzY2hlbWEucGF0aCB8fD0gYXBpLm5vcm1hbGl6ZVBhdGgobmFtZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGb3JtcyhhcGksIHNjaGVtYSwgbGV2ZWwpIHtcbiAgLy8gRmlyc3QgcmVzb2x2ZSB0aGUgZm9ybXMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGJhY2sgb24gdGhlIHNjaGVtYS5cbiAgbGV0IHsgZm9ybSwgZm9ybXMsIGNvbXBvbmVudHMgfSA9IHNjaGVtYVxuICBpZiAoZm9ybXMpIHtcbiAgICBmb3JtcyA9IHNjaGVtYS5mb3JtcyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKGZvcm1zLCBmb3JtID0+XG4gICAgICBwcm9jZXNzRm9ybShhcGksIGZvcm0pXG4gICAgKVxuICB9IGVsc2UgaWYgKGZvcm0pIHtcbiAgICBmb3JtID0gc2NoZW1hLmZvcm0gPSBhd2FpdCBwcm9jZXNzRm9ybShhcGksIGZvcm0pXG4gIH0gZWxzZSBpZiAoaXNPYmplY3QoY29tcG9uZW50cykpIHtcbiAgICAvLyBOT1RFOiBQcm9jZXNzaW5nIGZvcm1zIGluIGNvbXB1dGVkIGNvbXBvbmVudHMgaXMgbm90IHN1cHBvcnRlZCwgc2luY2UgaXRcbiAgICAvLyBvbmx5IGNhbiBiZSBjb21wdXRlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGFjdHVhbCBkYXRhLlxuICAgIGZvcm0gPSB7XG4gICAgICB0eXBlOiAnZm9ybScsXG4gICAgICBjb21wb25lbnRzXG4gICAgfVxuICB9XG5cbiAgZm9ybXMgfHw9IHsgZGVmYXVsdDogZm9ybSB9IC8vIE9ubHkgdXNlZCBmb3IgcHJvY2VzcyBsb29wIGJlbG93LlxuICBjb25zdCBjaGlsZHJlbiA9IFtdXG4gIGZvciAoY29uc3QgZm9ybSBvZiBPYmplY3QudmFsdWVzKGZvcm1zKSkge1xuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgZm9ybSwgY2hpbGRyZW4sIGxldmVsKVxuICB9XG4gIHJldHVybiBjaGlsZHJlblxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0Zvcm0oYXBpLCBzY2hlbWEpIHtcbiAgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHRydWUpXG4gIGlmICghaXNGb3JtKHNjaGVtYSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZm9ybSBzY2hlbWE6ICcke2dldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKX0nYClcbiAgfVxuICBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpXG4gIGF3YWl0IHByb2Nlc3NOZXN0ZWRTY2hlbWFzKGFwaSwgc2NoZW1hKVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzVGFiKGFwaSwgc2NoZW1hKSB7XG4gIHNjaGVtYSA9IGF3YWl0IHJlc29sdmVTY2hlbWEoc2NoZW1hLCB0cnVlKVxuICBpZiAoIWlzVGFiKHNjaGVtYSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGFiIHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1BhbmVsKGFwaSwgc2NoZW1hKSB7XG4gIHNjaGVtYSA9IGF3YWl0IHJlc29sdmVTY2hlbWEoc2NoZW1hLCB0cnVlKVxuICBpZiAoIWlzUGFuZWwoc2NoZW1hKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYW5lbCBzY2hlbWE6ICcke2dldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKX0nYClcbiAgfVxuICBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpXG4gIHJldHVybiBzY2hlbWFcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NOZXN0ZWRTY2hlbWFzKGFwaSwgc2NoZW1hKSB7XG4gIGNvbnN0IHsgdGFicywgcGFuZWxzIH0gPSBzY2hlbWFcbiAgaWYgKHRhYnMpIHtcbiAgICBzY2hlbWEudGFicyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKFxuICAgICAgdGFicyxcbiAgICAgIHRhYiA9PiBwcm9jZXNzVGFiKGFwaSwgdGFiKVxuICAgIClcbiAgfVxuICBpZiAocGFuZWxzKSB7XG4gICAgc2NoZW1hLnBhbmVscyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKFxuICAgICAgcGFuZWxzLFxuICAgICAgcGFuZWwgPT4gcHJvY2Vzc1BhbmVsKGFwaSwgcGFuZWwpXG4gICAgKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNGb3JtU2NoZW1hKHNjaGVtYSkge1xuICAvLyBTdXBwb3J0IGJvdGggc2luZ2xlIGZvcm0gYW5kIG11bHRpcGxlIGZvcm1zIG5vdGF0aW9uLCBhcyB3ZWxsIGFzIGlubGluZWRcbiAgLy8gY29tcG9uZW50cy5cbiAgcmV0dXJuIChcbiAgICBpc1NjaGVtYShzY2hlbWEpICYmXG4gICAgaXNPYmplY3Qoc2NoZW1hLmZvcm0gfHwgc2NoZW1hLmZvcm1zIHx8IHNjaGVtYS5jb21wb25lbnRzKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNNdWx0aXBsZUZvcm1TY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gKFxuICAgIGlzU2NoZW1hKHNjaGVtYSkgJiZcbiAgICBPYmplY3Qua2V5cyhzY2hlbWE/LmZvcm1zIHx8IHt9KS5sZW5ndGggPiAxXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpIHtcbiAgcmV0dXJuIChcbiAgICBpc1ZpZXcoc2NoZW1hKSAmJlxuICAgIGlzT2JqZWN0KHNjaGVtYS5jb21wb25lbnQpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdGb3JtU2NoZW1hKHNjaGVtYSwgY29udGV4dCkge1xuICBjb25zdCB7IHZpZXcgfSA9IHNjaGVtYVxuICBjb25zdCB2aWV3U2NoZW1hID0gdmlldyAmJiBjb250ZXh0LnZpZXdzW3ZpZXddXG4gIHJldHVybiB2aWV3U2NoZW1hXG4gICAgPyAvLyBOT1RFOiBWaWV3cyBjYW4gaGF2ZSB0YWJzLCBpbiB3aGljaCBjYXNlIHRoZSB2aWV3IGNvbXBvbmVudCBpcyBuZXN0ZWRcbiAgICAgIC8vIGluIG9uZSBvZiB0aGUgdGFicywgZ28gZmluZCBpdC5cbiAgICAgIGZpbmROZXN0ZWRTY2hlbWFDb21wb25lbnQodmlld1NjaGVtYSwgaGFzRm9ybVNjaGVtYSkgfHwgbnVsbFxuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpIHtcbiAgcmV0dXJuIGdldFZpZXdGb3JtU2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgICA/IGNvbnRleHQudmlld3Nbc2NoZW1hLnZpZXddXG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3RWRpdFBhdGgoc2NoZW1hLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZpZXcgPSBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgcmV0dXJuIHZpZXdcbiAgICA/IGlzU2luZ2xlQ29tcG9uZW50Vmlldyh2aWV3KVxuICAgICAgPyBgLyR7dmlldy5wYXRofWBcbiAgICAgIDogYC8ke3ZpZXcucGF0aH0vJHt2aWV3LnBhdGh9YFxuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0LCBtb2RpZnlGb3JtKSB7XG4gIGNvbnN0IHZpZXdTY2hlbWEgPSBjb250ZXh0ICYmIGdldFZpZXdGb3JtU2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgaWYgKHZpZXdTY2hlbWEpIHtcbiAgICBzY2hlbWEgPSB2aWV3U2NoZW1hXG4gIH0gZWxzZSBpZiAoc2NoZW1hLnZpZXcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdmlldzogJyR7c2NoZW1hLnZpZXd9J2ApXG4gIH1cblxuICBsZXQgeyBmb3JtLCBmb3JtcywgY29tcG9uZW50cywgY29tcGFjdCB9ID0gc2NoZW1hXG4gIGlmICghZm9ybSAmJiAhZm9ybXMpIHtcbiAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgLy8gQ29udmVydCBpbmxpbmVkIGNvbXBvbmVudHMgdG8gZm9ybXMsIHN1cHBvcnRpbmcgYGNvbXBhY3RgIHNldHRpbmcuXG4gICAgICBmb3JtID0geyBjb21wb25lbnRzLCBjb21wYWN0IH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gYGZvcm1zYCwgYGZvcm1gIG9yIGBjb21wb25lbnRzYCwgcmV0dXJuIGFuZCBlbXB0eSBgZm9ybXNgIG9iamVjdC5cbiAgICAgIHJldHVybiB7fVxuICAgIH1cbiAgfVxuICBmb3JtcyB8fD0geyBkZWZhdWx0OiBmb3JtIH1cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhmb3JtcykubWFwKChbdHlwZSwgZm9ybV0pID0+IHtcbiAgICAgIC8vIFN1cHBvcnQgYHNjaGVtYS5jb21wb25lbnRzYCBjYWxsYmFja3MgdG8gY3JlYXRlIGNvbXBvbmVudHMgb24gdGhlIGZseS5cbiAgICAgIGlmIChjb250ZXh0ICYmIGlzRnVuY3Rpb24oZm9ybS5jb21wb25lbnRzKSkge1xuICAgICAgICBmb3JtID0ge1xuICAgICAgICAgIC4uLmZvcm0sXG4gICAgICAgICAgY29tcG9uZW50czogZm9ybS5jb21wb25lbnRzKGNvbnRleHQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBbdHlwZSwgbW9kaWZ5Rm9ybT8uKGZvcm0pID8/IGZvcm1dXG4gICAgfSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZm9ybXMsIGl0ZW0pIHtcbiAgcmV0dXJuIGZvcm1zW2l0ZW0/LnR5cGVdIHx8IGZvcm1zLmRlZmF1bHQgfHwgbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KSB7XG4gIHJldHVybiBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3JtcyhnZXRGb3JtU2NoZW1hcyhzY2hlbWEsIGNvbnRleHQpLCBpdGVtKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDb21wYWN0KHNjaGVtYSkge1xuICByZXR1cm4gISFzY2hlbWEuY29tcGFjdFxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNJbmxpbmVkKHNjaGVtYSkge1xuICByZXR1cm4gISEoc2NoZW1hLmlubGluZWQgfHwgc2NoZW1hLmNvbXBvbmVudHMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05lc3RlZChzY2hlbWEpIHtcbiAgcmV0dXJuICEhKHNjaGVtYS5uZXN0ZWQgfHwgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZGVmYXVsdE5lc3RlZCA9PT0gdHJ1ZSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9taXRQYWRkaW5nKHNjaGVtYSkge1xuICByZXR1cm4gISFnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5vbWl0UGFkZGluZ1xufVxuXG5leHBvcnQgZnVuY3Rpb24ga2VlcEFsaWduZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFR5cGVPcHRpb25zKHNjaGVtYSk/LmtlZXBBbGlnbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFWYWx1ZShcbiAga2V5T3JEYXRhUGF0aCxcbiAgeyB0eXBlLCBzY2hlbWEsIGNhbGxiYWNrID0gdHJ1ZSwgZGVmYXVsdDogZGVmLCBjb250ZXh0IH0gPSB7fVxuKSB7XG4gIGNvbnN0IHR5cGVzID0gdHlwZSAmJiBhc0FycmF5KHR5cGUpXG4gIC8vIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBkYXRhLXBhdGhzIGluIGBrZXlPckRhdGFQYXRoYCBjYW4gb25seSBiZVxuICAvLyBwcm92aWRlZCBpbiBpbiBhcnJheSBmb3JtYXQgaGVyZTpcbiAgbGV0IHZhbHVlID0gc2NoZW1hXG4gICAgPyBpc0FycmF5KGtleU9yRGF0YVBhdGgpXG4gICAgICA/IGdldFZhbHVlQXREYXRhUGF0aChzY2hlbWEsIGtleU9yRGF0YVBhdGgsICgpID0+IHVuZGVmaW5lZClcbiAgICAgIDogc2NoZW1hW2tleU9yRGF0YVBhdGhdXG4gICAgOiB1bmRlZmluZWRcblxuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBkZWYgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKGRlZikgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCBkZWYpKSB7XG4gICAgICAvLyBTdXBwb3J0IGBkZWZhdWx0KClgIGZ1bmN0aW9ucyBmb3IgYW55IHR5cGUgZXhjZXB0IGBGdW5jdGlvbmA6XG4gICAgICBkZWYgPSBkZWYoY29udGV4dClcbiAgICB9XG4gICAgcmV0dXJuIGRlZlxuICB9XG5cbiAgaWYgKGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuICAvLyBBbnkgc2NoZW1hIHZhbHVlIGhhbmRsZWQgdGhyb3VnaCBgZ2V0U2NoZW1hVmFsdWUoKWAgY2FuIHByb3ZpZGVcbiAgLy8gYSBmdW5jdGlvbiB0aGF0J3MgcmVzb2x2ZWQgd2hlbiB0aGUgdmFsdWUgaXMgZXZhbHVhdGVkOlxuICBpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICB2YWx1ZSA9IHZhbHVlKGNvbnRleHQpXG4gIH1cbiAgLy8gTm93IGZpbmFsbHkgc2VlIGlmIHdlIGNhbiBjb252ZXJ0IHRvIHRoZSBleHBlY3QgdHlwZXMuXG4gIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpKSB7XG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBjb25zdCBjb252ZXJ0ZWQgPSBjb252ZXJ0VHlwZSh0eXBlLCB2YWx1ZSlcbiAgICAgIGlmIChjb252ZXJ0ZWQgIT09IHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBjb252ZXJ0ZWRcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRSZW5kZXJTY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gIHJldHVybiAoXG4gICAgZ2V0U2NoZW1hVmFsdWUoJ2lmJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIHNjaGVtYSxcbiAgICAgIGNvbnRleHQsXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSkgJiYgKFxuICAgICAgIWhhc05lc3RlZFNjaGVtYUNvbXBvbmVudHMoc2NoZW1hKSB8fFxuICAgICAgc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNvbXBvbmVudCA9PlxuICAgICAgICBzaG91bGRSZW5kZXJTY2hlbWEoY29tcG9uZW50LCBjb250ZXh0KVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSkge1xuICAvLyBTdXBwb3J0IGRlZmF1bHQgdmFsdWVzIGJvdGggb24gc2NoZW1hIGFuZCBvbiBjb21wb25lbnQgbGV2ZWwuXG4gIC8vIE5PVEU6IEF0IHRoZSB0aW1lIG9mIGNyZWF0aW9uLCBjb21wb25lbnRzIG1heSBub3QgYmUgaW5zdGFudGlhdGVkLCAoZS5nLiBpZlxuICAvLyBlbnRyaWVzIGFyZSBjcmVhdGVkIHRocm91Z2ggbmVzdGVkIGZvcm1zLCB0aGUgcGFyZW50IGZvcm0gaXNuJ3QgbW91bnRlZCkgc29cbiAgLy8gd2UgY2FuJ3QgdXNlIGBkYXRhUGF0aGAgdG8gZ2V0IHRvIGNvbXBvbmVudHMsIGFuZCB0aGUgYGRlZmF1bHRWYWx1ZWAgZnJvbVxuICAvLyB0aGVyZS4gVGhhdCdzIHdoeSBgZGVmYXVsdFZhbHVlYCBpcyBkZWZpbmVkIHN0YXRpY2FsbHkgaW4gdGhlIGNvbXBvbmVudHM6XG4gIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHNjaGVtYS5kZWZhdWx0XG4gIGNvbnN0IHZhbHVlID1cbiAgICBkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgPyBkZWZhdWx0VmFsdWVcbiAgICAgIDogZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZGVmYXVsdFZhbHVlXG4gIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlKVxuICAgID8gdmFsdWUoc2NoZW1hKVxuICAgIDogY2xvbmUodmFsdWUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSB7XG4gIGNvbnN0IHR5cGVPcHRpb25zID0gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKVxuICByZXR1cm4gISEoXG4gICAgdHlwZU9wdGlvbnM/LmV4Y2x1ZGVWYWx1ZSB8fCB0eXBlT3B0aW9ucz8uaWdub3JlTWlzc2luZ1ZhbHVlPy4oc2NoZW1hKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0VmFsdWVzKHNjaGVtYSwgZGF0YSA9IHt9LCBjb21wb25lbnQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHsgY29tcG9uZW50LCByb290RGF0YTogZGF0YSB9XG5cbiAgY29uc3QgcHJvY2Vzc0JlZm9yZSA9IChzY2hlbWEsIGRhdGEsIG5hbWUpID0+IHtcbiAgICBpZiAoIShuYW1lIGluIGRhdGEpICYmICFpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSkge1xuICAgICAgZGF0YVtuYW1lXSA9IGdldERlZmF1bHRWYWx1ZShzY2hlbWEpXG4gICAgfVxuICB9XG5cbiAgLy8gU2V0cyB1cCBhIGRhdGEgb2JqZWN0IHRoYXQgaGFzIGtleXMgd2l0aCBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsXG4gIC8vIGZvcm0gZmllbGRzLCBzbyB0aGV5IGNhbiBiZSBjb3JyZWN0bHkgd2F0Y2hlZCBmb3IgY2hhbmdlcy5cbiAgcmV0dXJuIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgIHNjaGVtYSxcbiAgICBkYXRhLFxuICAgIG51bGwsXG4gICAgbnVsbCxcbiAgICBwcm9jZXNzQmVmb3JlLFxuICAgIG51bGwsXG4gICAgb3B0aW9uc1xuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlVmFsdWUoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQgPSBudWxsLFxuICByb290RGF0YSA9IGNvbXBvbmVudD8ucm9vdERhdGFcbn0gPSB7fSkge1xuICBjb25zdCB7IGNvbXB1dGUgfSA9IHNjaGVtYVxuICBpZiAoY29tcHV0ZSkge1xuICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZShcbiAgICAgIERpdG9Db250ZXh0LmdldChjb21wb25lbnQsIHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICAvLyBPdmVycmlkZSB2YWx1ZSB0byBwcmV2ZW50IGVuZGxlc3MgcmVjdXJzaW9uIHRocm91Z2ggY2FsbGluZyB0aGVcbiAgICAgICAgLy8gZ2V0dGVyIGZvciBgdGhpcy52YWx1ZWAgaW4gYERpdG9Db250ZXh0YDpcbiAgICAgICAgdmFsdWU6IGRhdGFbbmFtZV0sXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICByb290RGF0YVxuICAgICAgfSlcbiAgICApXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEFjY2VzcyBgZGF0YVtuYW1lXWAgZGlyZWN0bHkgdG8gdXBkYXRlIHRoZSB2YWx1ZSB3aXRob3V0IGNhbGxpbmdcbiAgICAgIC8vIHBhcnNlKCk6XG4gICAgICBkYXRhW25hbWVdID0gdmFsdWVcbiAgICB9XG4gIH1cbiAgLy8gSWYgdGhlIHZhbHVlIGlzIHN0aWxsIG1pc3NpbmcgYWZ0ZXIgY29tcHV0ZSwgc2V0IHRoZSBkZWZhdWx0IGZvciBpdDpcbiAgaWYgKCEobmFtZSBpbiBkYXRhKSAmJiAhaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkpIHtcbiAgICBkYXRhW25hbWVdID0gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSlcbiAgfVxuICAvLyBOb3cgYWNjZXNzIHRoZSB2YWx1ZS4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHJlYWN0aXZpdHkgYW5kIG5lZWRzIHRvXG4gIC8vIGhhcHBlbiBhZnRlciBhbGwgcHJpb3IgbWFuaXB1bGF0aW9uIG9mIGBkYXRhW25hbWVdYCwgc2VlIGFib3ZlOlxuICByZXR1cm4gZGF0YVtuYW1lXVxufVxuXG5mdW5jdGlvbiBjbG9uZUl0ZW0oc291cmNlU2NoZW1hLCBpdGVtLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnNjaGVtYU9ubHkpIHtcbiAgICBjb25zdCBjb3B5ID0ge31cbiAgICBjb25zdCB7IGlkS2V5ID0gJ2lkJywgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgIGNvbnN0IGlkID0gaXRlbVtpZEtleV1cbiAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29weVtpZEtleV0gPSBpZFxuICAgIH1cbiAgICAvLyBDb3B5IG92ZXIgdHlwZSBpbiBjYXNlIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICBpZiAoaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyhzb3VyY2VTY2hlbWEpKSB7XG4gICAgICBjb3B5LnR5cGUgPSBpdGVtLnR5cGVcbiAgICB9XG4gICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICBjb3B5W29yZGVyS2V5XSA9IGl0ZW1bb3JkZXJLZXldXG4gICAgfVxuICAgIHJldHVybiBjb3B5XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgLi4uaXRlbSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NEYXRhKHNjaGVtYSwgc291cmNlU2NoZW1hLCBkYXRhLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQsXG4gIHNjaGVtYU9ubHksIC8vIHdoZXRoZXIgdG8gb25seSBpbmNsdWRlIGRhdGEgY292ZXJlZCBieSB0aGUgc2NoZW1hLCBvciBhbGwgZGF0YVxuICB0YXJnZXRcbn0gPSB7fSkge1xuICBjb25zdCBvcHRpb25zID0geyBjb21wb25lbnQsIHNjaGVtYU9ubHksIHRhcmdldCwgcm9vdERhdGE6IGRhdGEgfVxuICBjb25zdCBwcm9jZXNzZWREYXRhID0gY2xvbmVJdGVtKHNvdXJjZVNjaGVtYSwgZGF0YSwgb3B0aW9ucylcbiAgY29uc3QgZ3JhcGggPSBuZXcgU2NoZW1hR3JhcGgoKVxuXG4gIGNvbnN0IHByb2Nlc3NCZWZvcmUgPSAoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgcHJvY2Vzc2VkRGF0YSkgPT4ge1xuICAgIGxldCB2YWx1ZSA9IGNvbXB1dGVWYWx1ZShzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBvcHRpb25zKVxuICAgIC8vIFRoZSBzY2hlbWEgZXhwZWN0cyB0aGUgYHdyYXBQcmltaXRpdmVzYCB0cmFuc2Zvcm1hdGlvbnMgdG8gYmUgcHJlc2VudCBvblxuICAgIC8vIHRoZSBkYXRhIHRoYXQgaXQgaXMgYXBwbGllZCBvbiwgc28gd2FycCBiZWZvcmUgYW5kIHVud3JhcCBhZnRlci5cbiAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMsIG9yZGVyS2V5LCBpZEtleSA9ICdpZCcgfSA9IHNjaGVtYVxuICAgICAgaWYgKHdyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUubWFwKGVudHJ5ID0+ICh7XG4gICAgICAgICAgW3dyYXBQcmltaXRpdmVzXTogZW50cnlcbiAgICAgICAgfSkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBBbHdheXMgc2hhbGxvdy1jbG9uZSBhcnJheSB2YWx1ZXM6XG4gICAgICAgIHZhbHVlID0gWy4uLnZhbHVlXVxuICAgICAgfVxuICAgICAgaWYgKG9yZGVyS2V5ICYmIHRhcmdldCA9PT0gJ2NsaXBib2FyZCcpIHtcbiAgICAgICAgLy8gU29ydCB0aGUgZGF0YSBiYWNrIGludG8gdGhlIG5hdHVyYWwgc2VxdWVuY2UgYXMgZGVmaW5lZCBieSB0aGVpciBpZHMsXG4gICAgICAgIC8vIHNvIGNvcHktcGFzdGluZyBiZXR3ZWVuIHNlcnZlcnMgKGUuZy4gbmVzdGVkIGZvbnQtY3V0cyBvbiBMaW5ldG8pXG4gICAgICAgIC8vIG5hdHVyYWxseSBnZXRzIG1hcHBlZCB0byB0aGUgc2FtZSBlbnRyaWVzIGluIHRoZSBncmFwaC5cbiAgICAgICAgdmFsdWUuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgIGNvbnN0IGlkMSA9IGE/LltpZEtleV1cbiAgICAgICAgICBjb25zdCBpZDIgPSBiPy5baWRLZXldXG4gICAgICAgICAgcmV0dXJuIGlkMSA9PSBudWxsIHx8IGlzVGVtcG9yYXJ5SWQoaWQxKVxuICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICA6IGlkMiA9PSBudWxsIHx8IGlzVGVtcG9yYXJ5SWQoaWQyKVxuICAgICAgICAgICAgICA/IC0xXG4gICAgICAgICAgICAgIDogaWQxIC0gaWQyXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICB9XG5cbiAgY29uc3QgcHJvY2Vzc0FmdGVyID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBleGNsdWRlLCBwcm9jZXNzIH0gPSBzY2hlbWFcbiAgICBsZXQgdmFsdWUgPSBwcm9jZXNzZWREYXRhW25hbWVdXG5cbiAgICBjb25zdCB0eXBlT3B0aW9ucyA9IGdldFR5cGVPcHRpb25zKHNjaGVtYSlcblxuICAgIC8vIE5PVEU6IFdlIGRvbid0IGNhY2hlIHRoaXMgY29udGV4dCwgc2luY2UgYHZhbHVlYCBpcyBjaGFuZ2luZy5cbiAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT5cbiAgICAgIERpdG9Db250ZXh0LmdldChjb21wb25lbnQsIHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhLFxuICAgICAgICAvLyBQYXNzIHRoZSBhbHJlYWR5IHByb2Nlc3NlZCBkYXRhIHRvIGBwcm9jZXNzKClgLCBzbyBpdCBjYW4gYmUgbW9kaWZpZWRcbiAgICAgICAgLy8gdGhyb3VnaCBgcHJvY2Vzc2VkSXRlbWAgZnJvbSB0aGVyZS5cbiAgICAgICAgcHJvY2Vzc2VkRGF0YVxuICAgICAgfSlcblxuICAgIC8vIEZpcnN0IHVud3JhcCB0aGUgd3JhcHBlZCBwcmltaXRpdmVzIGFnYWluLCB0byBicmluZyB0aGUgZGF0YSBiYWNrIGludG9cbiAgICAvLyBpdHMgbmF0aXZlIGZvcm0uIFNlIGBwcm9jZXNzQmVmb3JlKClgIGZvciBtb3JlIGRldGFpbHMuXG4gICAgaWYgKHdyYXBQcmltaXRpdmVzICYmIGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLm1hcChvYmplY3QgPT4gb2JqZWN0W3dyYXBQcmltaXRpdmVzXSlcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgdGhlIHVzZXIncyBgcHJvY2VzcygpYCBjYWxsYmFjayBmaXJzdCwgaWYgb25lIGlzIHByb3ZpZGVkLCBzbyB0aGF0XG4gICAgLy8gaXQgY2FuIG1vZGlmeSBkYXRhIGluIGBwcm9jZXNzZWREYXRhYCBldmVuIGlmIGl0IHByb3ZpZGVzIGBleGNsdWRlOiB0cnVlYFxuICAgIGlmIChwcm9jZXNzKSB7XG4gICAgICB2YWx1ZSA9IHByb2Nlc3MoZ2V0Q29udGV4dCgpKVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHR5cGVPcHRpb25zPy5leGNsdWRlVmFsdWUgfHxcbiAgICAgIC8vIFN1cHBvcnQgZnVuY3Rpb25zIG5leHQgdG8gYm9vbGVhbnMgZm9yIGBzY2hlbWEuZXhjbHVkZWA6XG4gICAgICBleGNsdWRlID09PSB0cnVlIHx8XG4gICAgICBpc0Z1bmN0aW9uKGV4Y2x1ZGUpICYmIGV4Y2x1ZGUoZ2V0Q29udGV4dCgpKVxuICAgICkge1xuICAgICAgZGVsZXRlIHByb2Nlc3NlZERhdGFbbmFtZV1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRWFjaCBjb21wb25lbnQgdHlwZSBjYW4gcHJvdmlkZSBpdHMgb3duIHN0YXRpYyBgcHJvY2Vzc1ZhbHVlKClgIG1ldGhvZFxuICAgICAgLy8gdG8gY29udmVydCB0aGUgZGF0YSBmb3Igc3RvcmFnZS5cbiAgICAgIGNvbnN0IHByb2Nlc3NWYWx1ZSA9IHR5cGVPcHRpb25zPy5wcm9jZXNzVmFsdWVcbiAgICAgIGlmIChwcm9jZXNzVmFsdWUpIHtcbiAgICAgICAgdmFsdWUgPSBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKVxuICAgICAgfVxuICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgc2NoZW1hLFxuICAgIGRhdGEsXG4gICAgZGF0YVBhdGgsXG4gICAgcHJvY2Vzc2VkRGF0YSxcbiAgICBwcm9jZXNzQmVmb3JlLFxuICAgIHByb2Nlc3NBZnRlcixcbiAgICBvcHRpb25zXG4gIClcblxuICByZXR1cm4gZ3JhcGgucHJvY2Vzcyhzb3VyY2VTY2hlbWEsIHByb2Nlc3NlZERhdGEsIG9wdGlvbnMpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgc2NoZW1hLFxuICBkYXRhLFxuICBkYXRhUGF0aCxcbiAgcHJvY2Vzc2VkRGF0YSxcbiAgcHJvY2Vzc0JlZm9yZSxcbiAgcHJvY2Vzc0FmdGVyLFxuICBvcHRpb25zXG4pIHtcbiAgY29uc3QgcHJvY2Vzc0NvbXBvbmVudHMgPSBjb21wb25lbnRzID0+IHtcbiAgICBjb25zdCBnZXREYXRhUGF0aCA9IChkYXRhUGF0aCwgdG9rZW4pID0+XG4gICAgICBkYXRhUGF0aCAhPSBudWxsXG4gICAgICAgID8gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHRva2VuKVxuICAgICAgICA6IG51bGxcblxuICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBjb21wb25lbnRTY2hlbWFdIG9mIE9iamVjdC5lbnRyaWVzKGNvbXBvbmVudHMpKSB7XG4gICAgICAgIGlmICghaXNOZXN0ZWQoY29tcG9uZW50U2NoZW1hKSkge1xuICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IHByb2Nlc3MgZGF0YSBvbiB1bm5lc3RlZCBjb21wb25lbnRzLlxuICAgICAgICAgIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgICAgICAgICAgY29tcG9uZW50U2NoZW1hLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YSxcbiAgICAgICAgICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgICAgICAgICBwcm9jZXNzQWZ0ZXIsXG4gICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNvbXBvbmVudERhdGFQYXRoID0gZ2V0RGF0YVBhdGgoZGF0YVBhdGgsIG5hbWUpXG5cbiAgICAgICAgICBjb25zdCBwcm9jZXNzSXRlbSA9IChpdGVtLCBpbmRleCA9IG51bGwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFQYXRoID1cbiAgICAgICAgICAgICAgaW5kZXggIT09IG51bGxcbiAgICAgICAgICAgICAgICA/IGdldERhdGFQYXRoKGNvbXBvbmVudERhdGFQYXRoLCBpbmRleClcbiAgICAgICAgICAgICAgICA6IGNvbXBvbmVudERhdGFQYXRoXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gRGl0b0NvbnRleHQuZ2V0KG9wdGlvbnMuY29tcG9uZW50LCB7XG4gICAgICAgICAgICAgIHNjaGVtYTogY29tcG9uZW50U2NoZW1hLFxuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICByb290RGF0YTogb3B0aW9ucy5yb290RGF0YVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIGNvbnN0IGdldEZvcm1zID0gKFxuICAgICAgICAgICAgICBnZXRUeXBlT3B0aW9ucyhjb21wb25lbnRTY2hlbWEpPy5nZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3NpbmcgfHxcbiAgICAgICAgICAgICAgZ2V0Rm9ybVNjaGVtYXNcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IGZvcm1zID0gZ2V0Rm9ybXMoY29tcG9uZW50U2NoZW1hLCBjb250ZXh0KVxuICAgICAgICAgICAgY29uc3QgZm9ybSA9IGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGZvcm1zLCBpdGVtKVxuICAgICAgICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgICAgICAgY29uc3QgcHJvY2Vzc2VkSXRlbSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IGNsb25lSXRlbShjb21wb25lbnRTY2hlbWEsIGl0ZW0sIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICAgIHJldHVybiBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICAgICAgICAgICAgICBmb3JtLFxuICAgICAgICAgICAgICAgIGl0ZW0sXG4gICAgICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEl0ZW1zIHdpdGhvdXQgZm9ybXMgc3RpbGwgZ2V0IGZ1bGx5IChidXQgc2hhbGxvd2x5KSBjbG9uZWQuXG4gICAgICAgICAgICAgIC8vIFRPRE86IEZpbmQgb3V0IG9mIHRoaXMgaXMgYWN0dWFsbHkgbmVlZGVkIC8gdXNlZCBhdCBhbGw/XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHByb2Nlc3NCZWZvcmU/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgY29tcG9uZW50RGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgKVxuICAgICAgICAgIGxldCB2YWx1ZSA9IHByb2Nlc3NlZERhdGEgPyBwcm9jZXNzZWREYXRhW25hbWVdIDogZGF0YVtuYW1lXVxuICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmIGhhc0Zvcm1TY2hlbWEoY29tcG9uZW50U2NoZW1hKSkge1xuICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcHJvY2VzcyBkYXRhIG9uIG5lc3RlZCBmb3JtIGl0ZW1zLlxuICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgIC8vIE9wdGltaXphdGlvbjogTm8gbmVlZCB0byBjb2xsZWN0IHZhbHVlcyBpZiB3ZSdyZSBub3QgY2xvbmluZyFcbiAgICAgICAgICAgICAgdmFsdWUgPSBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgICAgICAgPyB2YWx1ZS5tYXAocHJvY2Vzc0l0ZW0pXG4gICAgICAgICAgICAgICAgOiB2YWx1ZS5mb3JFYWNoKHByb2Nlc3NJdGVtKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBwcm9jZXNzSXRlbSh2YWx1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcm9jZXNzZWREYXRhKSB7XG4gICAgICAgICAgICAgIHByb2Nlc3NlZERhdGFbbmFtZV0gPSB2YWx1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwcm9jZXNzQWZ0ZXI/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgY29tcG9uZW50RGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvY2Vzc0NvbXBvbmVudHMoc2NoZW1hLmNvbXBvbmVudHMpXG4gIGZvciAoY29uc3QgdGFiIG9mIGdldFRhYlNjaGVtYXMoc2NoZW1hKSkge1xuICAgIHByb2Nlc3NDb21wb25lbnRzKHRhYi5jb21wb25lbnRzKVxuICB9XG4gIGZvciAoY29uc3QgcGFuZWwgb2YgZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYSkpIHtcbiAgICBwcm9jZXNzQ29tcG9uZW50cyhwYW5lbC5jb21wb25lbnRzKVxuICB9XG5cbiAgcmV0dXJuIHByb2Nlc3NlZERhdGEgfHwgZGF0YVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZWRTY2hlbWFzKHNjaGVtYXMsIGRlZmF1bHRzKSB7XG4gIGNvbnN0IHRvT2JqZWN0ID0gKGFycmF5LCB0b1NjaGVtYSkgPT4ge1xuICAgIHJldHVybiBhcnJheS5sZW5ndGggPiAwXG4gICAgICA/IGFycmF5LnJlZHVjZSgob2JqZWN0LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHNjaGVtYSA9IHRvU2NoZW1hKHZhbHVlKVxuICAgICAgICAgIGlmIChzY2hlbWEpIHtcbiAgICAgICAgICAgIG9iamVjdFtzY2hlbWEubmFtZV0gPVxuICAgICAgICAgICAgICBzY2hlbWEgJiYgZGVmYXVsdHNcbiAgICAgICAgICAgICAgICA/IHsgLi4uZGVmYXVsdHMsIC4uLnNjaGVtYSB9XG4gICAgICAgICAgICAgICAgOiBzY2hlbWFcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG9iamVjdFxuICAgICAgICB9LCB7fSlcbiAgICAgIDogbnVsbFxuICB9XG5cbiAgcmV0dXJuIGlzQXJyYXkoc2NoZW1hcylcbiAgICA/IHRvT2JqZWN0KHNjaGVtYXMsIHZhbHVlID0+XG4gICAgICAgIGlzT2JqZWN0KHZhbHVlKVxuICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgbmFtZTogY2FtZWxpemUodmFsdWUsIGZhbHNlKVxuICAgICAgICAgICAgfVxuICAgICAgKVxuICAgIDogaXNPYmplY3Qoc2NoZW1hcylcbiAgICAgID8gdG9PYmplY3QoXG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoc2NoZW1hcyksXG4gICAgICAgICAgKFtuYW1lLCB2YWx1ZV0pID0+XG4gICAgICAgICAgICBpc09iamVjdCh2YWx1ZSlcbiAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgLi4udmFsdWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDogaXNTdHJpbmcodmFsdWUpXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiB2YWx1ZVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICApXG4gICAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJ1dHRvblNjaGVtYXMoYnV0dG9ucykge1xuICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKFxuICAgIGJ1dHRvbnMsXG4gICAgeyB0eXBlOiAnYnV0dG9uJyB9IC8vIERlZmF1bHRzXG4gIClcbn1cblxuZnVuY3Rpb24gZ2V0VHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYU9yVHlwZSkgPyBzY2hlbWFPclR5cGUudHlwZSA6IHNjaGVtYU9yVHlwZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBnZXRUeXBlQ29tcG9uZW50KGdldFR5cGUoc2NoZW1hT3JUeXBlKSwgdHJ1ZSkgPz8gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIChcbiAgICBnZXRUeXBlT3B0aW9ucyhzY2hlbWFPclR5cGUpPy5nZXRTb3VyY2VUeXBlPy4oZ2V0VHlwZShzY2hlbWFPclR5cGUpKSA/P1xuICAgIG51bGxcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFuZWxFbnRyeShzY2hlbWEsIGRhdGFQYXRoID0gbnVsbCwgdGFiQ29tcG9uZW50ID0gbnVsbCkge1xuICByZXR1cm4gc2NoZW1hXG4gICAgPyB7XG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gbmFtZSwgYXBwZW5kIGl0IHRvIHRoZSBkYXRhUGF0aC5cbiAgICAgICAgLy8gVGhpcyBpcyB1c2VkIGUuZy4gZm9yICRmaWx0ZXJzIHBhbmVscy5cbiAgICAgICAgZGF0YVBhdGg6XG4gICAgICAgICAgZGF0YVBhdGggIT0gbnVsbCAmJiBzY2hlbWEubmFtZVxuICAgICAgICAgICAgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgc2NoZW1hLm5hbWUpXG4gICAgICAgICAgICA6IGRhdGFQYXRoLFxuICAgICAgICB0YWJDb21wb25lbnRcbiAgICAgIH1cbiAgICA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhbmVsRW50cmllcyhcbiAgcGFuZWxTY2hlbWFzLFxuICBkYXRhUGF0aCA9IG51bGwsXG4gIHRhYkNvbXBvbmVudCA9IG51bGwsXG4gIHBhbmVsRW50cmllcyA9IFtdXG4pIHtcbiAgaWYgKHBhbmVsU2NoZW1hcykge1xuICAgIGZvciAoY29uc3QgW2tleSwgc2NoZW1hXSBvZiBPYmplY3QuZW50cmllcyhwYW5lbFNjaGVtYXMpKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IGdldFBhbmVsRW50cnkoXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgZGF0YVBhdGggIT0gbnVsbCA/IGFwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBrZXkpIDogbnVsbCxcbiAgICAgICAgdGFiQ29tcG9uZW50XG4gICAgICApXG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgcGFuZWxFbnRyaWVzLnB1c2goZW50cnkpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBwYW5lbEVudHJpZXNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYlNjaGVtYXMoc2NoZW1hKSB7XG4gIHJldHVybiBzY2hlbWE/LnRhYnMgPyBPYmplY3QudmFsdWVzKHNjaGVtYS50YWJzKSA6IFtdXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbFNjaGVtYXMoc2NoZW1hKSB7XG4gIHJldHVybiBzY2hlbWE/LnBhbmVscyA/IE9iamVjdC52YWx1ZXMoc2NoZW1hLnBhbmVscykgOiBbXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWxsUGFuZWxFbnRyaWVzKFxuICBhcGksXG4gIHNjaGVtYSxcbiAgZGF0YVBhdGggPSBudWxsLFxuICBzY2hlbWFDb21wb25lbnQgPSBudWxsLFxuICB0YWJDb21wb25lbnQgPSBudWxsXG4pIHtcbiAgY29uc3QgcGFuZWxTY2hlbWEgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5nZXRQYW5lbFNjaGVtYT8uKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgZGF0YVBhdGgsXG4gICAgc2NoZW1hQ29tcG9uZW50XG4gIClcbiAgY29uc3QgcGFuZWxFbnRyaWVzID0gcGFuZWxTY2hlbWFcbiAgICA/IFtnZXRQYW5lbEVudHJ5KHBhbmVsU2NoZW1hLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50KV1cbiAgICA6IFtdXG4gIC8vIEFsbG93IGVhY2ggY29tcG9uZW50IHRvIHByb3ZpZGUgaXRzIG93biBzZXQgb2YgcGFuZWxzLCBpblxuICAvLyBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBvbmUgKGUuZy4gZ2V0RmlsdGVyc1BhbmVsKCksICRmaWx0ZXJzKTpcbiAgZ2V0UGFuZWxFbnRyaWVzKHNjaGVtYT8ucGFuZWxzLCBkYXRhUGF0aCwgdGFiQ29tcG9uZW50LCBwYW5lbEVudHJpZXMpXG4gIHJldHVybiBwYW5lbEVudHJpZXNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0U291cmNlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpID09PSAnb2JqZWN0J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNMaXN0U291cmNlKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0U291cmNlVHlwZShzY2hlbWFPclR5cGUpID09PSAnbGlzdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0pIHtcbiAgY29uc3QgaWQgPSBpdGVtW3NvdXJjZVNjaGVtYS5pZEtleSB8fCAnaWQnXVxuICByZXR1cm4gaWQgIT0gbnVsbCA/IFN0cmluZyhpZCkgOiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1VaWQoc291cmNlU2NoZW1hLCBpdGVtKSB7XG4gIC8vIFRyeSB0byB1c2UgdGhlIGl0ZW0gaWQgYXMgdGhlIHVpZCwgZmFsbGluZyBiYWNrIG9uIGF1dG8tZ2VuZXJhdGVkIGlkcywgYnV0XG4gIC8vIGVpdGhlciB3YXksIHBhc3MgdGhyb3VnaCBgZ2V0VWlkKClgIHNvIHRoYXQgdGhlIGlkcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZVxuICAvLyBpdGVtIHRocm91Z2ggYSB3ZWFrIG1hcCwgYXMgdGhlIGlkcyBjYW4gYmUgZmlsdGVyZWQgb3V0IGluIGBwcm9jZXNzRGF0YSgpYFxuICAvLyB3aGlsZSB0aGUgY29tcG9uZW50cyB0aGF0IHVzZSB0aGUgdWlkcyBhcyBrZXkgYXJlIHN0aWxsIHZpc2libGUuXG4gIHJldHVybiBnZXRVaWQoaXRlbSwgZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSkpXG59XG4iLCJpbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIHBpY2tCeSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNSZXNvdXJjZShzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0UmVzb3VyY2Uoc2NoZW1hLnJlc291cmNlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzb3VyY2UocmVzb3VyY2UsIGRlZmF1bHRzID0ge30pIHtcbiAgY29uc3QgeyBwYXJlbnQsIC4uLmRlZnMgfSA9IGRlZmF1bHRzXG4gIHJlc291cmNlID0gaXNPYmplY3QocmVzb3VyY2UpXG4gICAgPyB7IC4uLmRlZnMsIC4uLnJlc291cmNlIH1cbiAgICA6IGlzU3RyaW5nKHJlc291cmNlKVxuICAgICAgPyB7IC4uLmRlZnMsIHBhdGg6IHJlc291cmNlIH1cbiAgICAgIDogbnVsbFxuICAvLyBPbmx5IHNldCBwYXJlbnQgaWYgcGF0aCBkb2Vzbid0IHN0YXJ0IHdpdGggJy8nLCBzbyByZWxhdGl2ZSBVUkxzIGFyZVxuICAvLyBkZWFsdCB3aXRoIGNvcnJlY3RseS5cbiAgaWYgKFxuICAgIHJlc291cmNlICYmXG4gICAgcGFyZW50ICE9PSB1bmRlZmluZWQgJiZcbiAgICByZXNvdXJjZS5wYXJlbnQgPT09IHVuZGVmaW5lZCAmJlxuICAgICFyZXNvdXJjZS5wYXRoPy5zdGFydHNXaXRoKCcvJylcbiAgKSB7XG4gICAgcmVzb3VyY2UucGFyZW50ID0gcGFyZW50XG4gICAgaWYgKCFyZXNvdXJjZS5wYXRoKSB7XG4gICAgICByZXNvdXJjZS5wYXRoID0gJy4nXG4gICAgfVxuICB9XG4gIHJldHVybiByZXNvdXJjZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVtYmVyUmVzb3VyY2UoaWQsIHJlc291cmNlKSB7XG4gIHJldHVybiBpZCAhPSBudWxsICYmIHJlc291cmNlPy50eXBlID09PSAnY29sbGVjdGlvbidcbiAgICA/IHtcbiAgICAgICAgdHlwZTogJ21lbWJlcicsXG4gICAgICAgIC4uLnBpY2tCeShcbiAgICAgICAgICByZXNvdXJjZSxcbiAgICAgICAgICAodmFsdWUsIGtleSkgPT4gWydtZXRob2QnLCAncGF0aCcsICdwYXJlbnQnXS5pbmNsdWRlcyhrZXkpXG4gICAgICAgICksXG4gICAgICAgIGlkOiBgJHtpZH1gXG4gICAgICB9XG4gICAgOiBudWxsXG59XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNTdHJpbmcsXG4gIGlzRnVuY3Rpb24sXG4gIGVxdWFscyxcbiAgbGFiZWxpemUsXG4gIGh5cGhlbmF0ZSxcbiAgZm9ybWF0XG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgYXBwU3RhdGUgZnJvbSAnLi4vYXBwU3RhdGUuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRW1pdHRlck1peGluIGZyb20gJy4vRW1pdHRlck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hVmFsdWUsIHNob3VsZFJlbmRlclNjaGVtYSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgY29tcHV0ZWQsIHJlYWN0aXZlIH0gZnJvbSAndnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtFbWl0dGVyTWl4aW5dLFxuXG4gIGluamVjdDogW1xuICAgICdhcGknLFxuICAgICckdmVyYnMnLFxuICAgICckdmlld3MnLFxuICAgICckaXNQb3B1bGF0ZWQnLFxuICAgICckcGFyZW50Q29tcG9uZW50JyxcbiAgICAnJHNjaGVtYUNvbXBvbmVudCcsXG4gICAgJyRyb3V0ZUNvbXBvbmVudCcsXG4gICAgJyRkYXRhQ29tcG9uZW50JyxcbiAgICAnJHNvdXJjZUNvbXBvbmVudCcsXG4gICAgJyRyZXNvdXJjZUNvbXBvbmVudCcsXG4gICAgJyRkaWFsb2dDb21wb25lbnQnLFxuICAgICckcGFuZWxDb21wb25lbnQnLFxuICAgICckdGFiQ29tcG9uZW50J1xuICBdLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvdmlkZXNEYXRhXG4gICAgICA/IHtcbiAgICAgICAgICAkcGFyZW50Q29tcG9uZW50OiAoKSA9PiB0aGlzLFxuICAgICAgICAgICRkYXRhQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgICAgIH1cbiAgICAgIDoge1xuICAgICAgICAgICRwYXJlbnRDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICAgICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFwcFN0YXRlLFxuICAgICAgb3ZlcnJpZGVzOiBudWxsIC8vIFNlZSBhY2Nlc3Nvci5qc1xuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIC8vIE5PVEU6IFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiBSZXNvdXJjZU1peGluLCB1c2VkIGJ5IGxpc3RzLlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIHNvdXJjZVNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGE/LnNjaGVtYVxuICAgIH0sXG5cbiAgICB1c2VyKCkge1xuICAgICAgcmV0dXJuIGFwcFN0YXRlLnVzZXJcbiAgICB9LFxuXG4gICAgLy8gJHZlcmJzLCAkdmVyYnMgYW5kICRpc1BvcHVsYXRlZCBhcmUgZGVmaW5lZCBhcyBmdW5jdGlvbnMsIHRvIHByZXNlcnZlXG4gICAgLy8gcmVhY3RpdmVuZXNzIGFjcm9zcyBwcm92aWRlL2luamVjdC5cbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUvaXNzdWVzLzcwMTcjaXNzdWVjb21tZW50LTQ4MDkwNjY5MVxuICAgIHZlcmJzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHZlcmJzKClcbiAgICB9LFxuXG4gICAgdmlld3MoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdmlld3MoKVxuICAgIH0sXG5cbiAgICBpc1BvcHVsYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRpc1BvcHVsYXRlZCgpXG4gICAgfSxcblxuICAgIGxvY2FsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwaS5sb2NhbGVcbiAgICB9LFxuXG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IGZhbHNlIH0pXG4gICAgfSxcblxuICAgIHJvb3RDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm9vdC4kcmVmcy5yb290XG4gICAgfSxcblxuICAgIC8vIFVzZSBjb21wdXRlZCBwcm9wZXJ0aWVzIGFzIGxpbmtzIHRvIGluamVjdHMsIHNvIERpdG9TY2hlbWEgY2FuXG4gICAgLy8gb3ZlcnJpZGUgdGhlIHByb3BlcnR5IGFuZCByZXR1cm4gYHRoaXNgIGluc3RlYWQgb2YgdGhlIHBhcmVudC5cbiAgICBwYXJlbnRDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFyZW50Q29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHNjaGVtYUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgZm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzRm9ybSA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgdmlld0NvbXBvbmVudCgpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMucm91dGVDb21wb25lbnRcbiAgICAgIHJldHVybiBjb21wb25lbnQ/LmlzVmlldyA/IGNvbXBvbmVudCA6IG51bGxcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzLCBpbmNsdWRpbmdcbiAgICAvLyB0aGlzIGN1cnJlbnQgY29tcG9uZW50LCB0aGF0IGlzIGxpbmtlZCB0byBhIHJlc291cmNlIChhbmQgdGh1cyBsb2FkcyBpdHNcbiAgICAvLyBvd24gZGF0YSBhbmQgZG9lc24ndCBob2xkIG5lc3RlZCBkYXRhKS5cbiAgICBkYXRhQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvdmlkZXNEYXRhID8gdGhpcyA6IHRoaXMuJGRhdGFDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kc291cmNlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVzb3VyY2VDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kZGlhbG9nQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcGFuZWxDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdGFiQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgcGFyZW50U2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50Py5wYXJlbnRDb21wb25lbnQuc2NoZW1hQ29tcG9uZW50XG4gICAgfSxcblxuICAgIHBhcmVudFJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVDb21wb25lbnQ/LnBhcmVudENvbXBvbmVudC5yb3V0ZUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYXJlbnRGb3JtQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybUNvbXBvbmVudD8ucGFyZW50Q29tcG9uZW50LmZvcm1Db21wb25lbnRcbiAgICB9LFxuXG4gICAgLy8gUmV0dXJucyB0aGUgZGF0YSBvZiB0aGUgZmlyc3Qgcm91dGUgY29tcG9uZW50IGluIHRoZSBjaGFpbiBvZiBwYXJlbnRzXG4gICAgLy8gdGhhdCBsb2FkcyBpdHMgb3duIGRhdGEgZnJvbSBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZS5cbiAgICByb290RGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFDb21wb25lbnQ/LmRhdGFcbiAgICB9XG4gIH0sXG5cbiAgYmVmb3JlQ3JlYXRlKCkge1xuICAgIGNvbnN0IHVpZCA9IG5leHRVaWQrK1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnJHVpZCcsIHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHVpZFxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGxhYmVsaXplLFxuXG4gICAgLy8gVGhlIHN0YXRlIG9mIGNvbXBvbmVudHMgaXMgb25seSBhdmFpbGFibGUgZHVyaW5nIHRoZSBsaWZlLWN5Y2xlIG9mIGFcbiAgICAvLyBjb21wb25lbnQuIFNvbWUgaW5mb3JtYXRpb24gd2UgbmVlZCBhdmFpbGFibGUgbG9uZ2VyIHRoYW4gdGhhdCwgZS5nLlxuICAgIC8vIGBxdWVyeWAgJiBgdG90YWxgIG9uIFR5cGVMaXN0LCBzbyB0aGF0IHdoZW4gdGhlIHVzZXIgbmF2aWdhdGVzIGJhY2sgZnJvbVxuICAgIC8vIGVkaXRpbmcgYW4gaXRlbSBpbiB0aGUgbGlzdCwgdGhlIHN0YXRlIG9mIHRoZSBsaXN0IGlzIHN0aWxsIHRoZSBzYW1lLlxuICAgIC8vIFdlIGNhbid0IHN0b3JlIHRoaXMgaW4gYGRhdGFgLCBhcyB0aGlzIGlzIGFscmVhZHkgdGhlIHB1cmUgZGF0YSBmcm9tIHRoZVxuICAgIC8vIEFQSSBzZXJ2ZXIuIFRoYXQncyB3aGF0IHRoZSBgc3RvcmVgIGlzIGZvcjogTWVtb3J5IHRoYXQncyBhdmFpbGFibGUgYXNcbiAgICAvLyBsb25nIGFzIHRoZSBjdXJyZW50IGVkaXRpbmcgcGF0aCBpcyBzdGlsbCB2YWxpZC4gRm9yIHR5cGUgY29tcG9uZW50cyxcbiAgICAvLyB0aGlzIG1lbW9yeSBpcyBwcm92aWRlZCBieSB0aGUgcGFyZW50LCBzZWUgUm91dGVNaXhpbiBhbmQgRGl0b1BhbmUuXG4gICAgZ2V0U3RvcmUoa2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5zdG9yZVtrZXldXG4gICAgfSxcblxuICAgIHNldFN0b3JlKGtleSwgdmFsdWUpIHtcbiAgICAgIHRoaXMuc3RvcmVba2V5XSA9IHZhbHVlXG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRTdG9yZShrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFN0b3JlKGtleSkgfHwgdGhpcy5zZXRTdG9yZShrZXksIHJlYWN0aXZlKHt9KSlcbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hVmFsdWUoXG4gICAgICBrZXlPckRhdGFQYXRoLFxuICAgICAgeyB0eXBlLCBzY2hlbWEgPSB0aGlzLnNjaGVtYSwgY2FsbGJhY2sgPSB0cnVlLCBkZWZhdWx0OiBkZWYgfSA9IHt9XG4gICAgKSB7XG4gICAgICByZXR1cm4gZ2V0U2NoZW1hVmFsdWUoa2V5T3JEYXRhUGF0aCwge1xuICAgICAgICB0eXBlLFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGNhbGxiYWNrLFxuICAgICAgICBjb250ZXh0OiB0aGlzLmNvbnRleHQsXG4gICAgICAgIGRlZmF1bHQ6IGlzRnVuY3Rpb24oZGVmKSA/ICgpID0+IGRlZi5jYWxsKHRoaXMpIDogZGVmXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRMYWJlbChzY2hlbWEsIG5hbWUpIHtcbiAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdsYWJlbCcsIHsgdHlwZTogU3RyaW5nLCBzY2hlbWEgfSkgfHxcbiAgICAgICAgICBsYWJlbGl6ZShuYW1lIHx8IHNjaGVtYS5uYW1lKVxuICAgICAgICA6IGxhYmVsaXplKG5hbWUpIHx8ICcnXG4gICAgfSxcblxuICAgIGdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2xhc3M6IGBkaXRvLWJ1dHRvbi0ke3ZlcmJ9YCxcbiAgICAgICAgdGl0bGU6IGxhYmVsaXplKHZlcmIpXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSAqTGluaygpIHRvICpSb3V0ZSgpLlxuICAgIGdldFF1ZXJ5TGluayhxdWVyeSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcXVlcnksXG4gICAgICAgIC8vIFByZXNlcnZlIGhhc2ggZm9yIHRhYnM6XG4gICAgICAgIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2hcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2hvdWxkUmVuZGVyU2NoZW1hKHNjaGVtYSA9IG51bGwpIHtcbiAgICAgIHJldHVybiBzaG91bGRSZW5kZXJTY2hlbWEoc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIHNob3VsZFNob3coc2NoZW1hID0gbnVsbCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3Zpc2libGUnLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IHRydWUsXG4gICAgICAgIHNjaGVtYVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2hvdWxkRGlzYWJsZShzY2hlbWEgPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZGlzYWJsZWQnLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICBzY2hlbWFcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlUGF0aChyZXNvdXJjZSkge1xuICAgICAgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZShyZXNvdXJjZSlcbiAgICAgIC8vIFJlc291cmNlcyB3aXRob3V0IGEgcGFyZW50IGluaGVyaXQgdGhlIG9uZSBmcm9tIGBkYXRhQ29tcG9uZW50YFxuICAgICAgLy8gYXV0b21hdGljYWxseS5cbiAgICAgIGlmIChyZXNvdXJjZS5wYXJlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXNvdXJjZS5wYXJlbnQgPSB0aGlzLmRhdGFDb21wb25lbnQ/LnJlc291cmNlXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5hcGkucmVzb3VyY2VzLmFueShnZXRSZXNvdXJjZShyZXNvdXJjZSkpXG4gICAgfSxcblxuICAgIGdldFJlc291cmNlVXJsKHJlc291cmNlKSB7XG4gICAgICBjb25zdCB1cmwgPSB0aGlzLmdldFJlc291cmNlUGF0aChyZXNvdXJjZSlcbiAgICAgIHJldHVybiB1cmwgPyB0aGlzLmFwaS5nZXRBcGlVcmwoeyB1cmwsIHF1ZXJ5OiByZXNvdXJjZS5xdWVyeSB9KSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgc2VuZFJlcXVlc3QoeyBtZXRob2QsIHVybCwgcmVzb3VyY2UsIHF1ZXJ5LCBkYXRhLCBpbnRlcm5hbCB9KSB7XG4gICAgICB1cmwgfHw9IHRoaXMuZ2V0UmVzb3VyY2VQYXRoKHJlc291cmNlKVxuICAgICAgbWV0aG9kIHx8PSByZXNvdXJjZT8ubWV0aG9kXG4gICAgICBjb25zdCBjaGVja1VzZXIgPSAhaW50ZXJuYWwgJiYgdGhpcy5hcGkuaXNBcGlVcmwodXJsKVxuICAgICAgaWYgKGNoZWNrVXNlcikge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZW5zdXJlVXNlcigpXG4gICAgICB9XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYXBpLnJlcXVlc3QoeyBtZXRob2QsIHVybCwgZGF0YSwgcXVlcnkgfSlcbiAgICAgIC8vIERldGVjdCBjaGFuZ2Ugb2YgdGhlIG93biB1c2VyLCBhbmQgZmV0Y2ggaXQgYWdhaW4gaWYgaXQgd2FzIGNoYW5nZWQuXG4gICAgICBpZiAoXG4gICAgICAgIGNoZWNrVXNlciAmJlxuICAgICAgICBtZXRob2QgPT09ICdwYXRjaCcgJiZcbiAgICAgICAgZXF1YWxzKHJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLnVzZXIuaWQsIHRoaXMuYXBpLnVzZXJzKSlcbiAgICAgICkge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZmV0Y2hVc2VyKClcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNwb25zZVxuICAgIH0sXG5cbiAgICBzaG93RGlhbG9nKHsgY29tcG9uZW50cywgYnV0dG9ucywgZGF0YSwgc2V0dGluZ3MgfSkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdENvbXBvbmVudC5zaG93RGlhbG9nKHtcbiAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgYnV0dG9ucyxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgc2V0dGluZ3NcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHJlcXVlc3QoeyBjYWNoZSwgLi4ub3B0aW9ucyB9KSB7XG4gICAgICAvLyBBbGxvdyBjYWNoaW5nIG9mIGxvYWRlZCBkYXRhIG9uIHR3byBsZXZlbHM6XG4gICAgICAvLyAtICdnbG9iYWwnOiBjYWNoZSBnbG9iYWxseSwgZm9yIHRoZSBlbnRpcmUgYWRtaW4gc2Vzc2lvblxuICAgICAgLy8gLSAnbG9jYWwnOiBjYWNoZSBsb2NhbGx5IHdpdGhpbiB0aGUgY2xvc2VzdCByb3V0ZSBjb21wb25lbnQgdGhhdCBpc1xuICAgICAgLy8gICAgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UgYW5kIGxvYWRzIGl0cyBvd24gZGF0YS5cbiAgICAgIGNvbnN0IGNhY2hlUGFyZW50ID0gKFxuICAgICAgICBjYWNoZSAmJlxuICAgICAgICB7XG4gICAgICAgICAgZ2xvYmFsOiB0aGlzLmFwcFN0YXRlLFxuICAgICAgICAgIGxvY2FsOiB0aGlzLmRhdGFDb21wb25lbnRcbiAgICAgICAgfVtjYWNoZV1cbiAgICAgIClcbiAgICAgIGNvbnN0IGxvYWRDYWNoZSA9IGNhY2hlUGFyZW50Py5sb2FkQ2FjaGVcbiAgICAgIC8vIEJ1aWxkIGEgY2FjaGUga2V5IGZyb20gdGhlIGNvbmZpZzpcbiAgICAgIGNvbnN0IGNhY2hlS2V5ID0gKFxuICAgICAgICBsb2FkQ2FjaGUgJiZcbiAgICAgICAgYCR7XG4gICAgICAgICAgb3B0aW9ucy5tZXRob2QgfHwgJ2dldCdcbiAgICAgICAgfSAke1xuICAgICAgICAgIG9wdGlvbnMudXJsXG4gICAgICAgIH0gJHtcbiAgICAgICAgICAvLyBUT0RPOiBgcmVxdWVzdC5wYXJhbXNgIHdhcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBgcXVlcnlgIG9uXG4gICAgICAgICAgLy8gMjAyMi0xMS0wMSwgcmVtb3ZlIG9uY2Ugbm90IGluIHVzZSBhbnl3aGVyZSBhbnkgbW9yZS5cbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShvcHRpb25zLnF1ZXJ5IHx8IG9wdGlvbnMucGFyYW1zIHx8ICcnKVxuICAgICAgICB9ICR7XG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5kYXRhIHx8ICcnKVxuICAgICAgICB9YFxuICAgICAgKVxuICAgICAgaWYgKGxvYWRDYWNoZSAmJiAoY2FjaGVLZXkgaW4gbG9hZENhY2hlKSkge1xuICAgICAgICByZXR1cm4gbG9hZENhY2hlW2NhY2hlS2V5XVxuICAgICAgfVxuICAgICAgLy8gTk9URTogTm8gYXdhaXQgaGVyZSwgcmVzIGlzIGEgcHJvbWlzZSB0aGF0IHdlIGNhbiBlYXNpbHkgY2FjaGUuXG4gICAgICAvLyBUaGF0J3MgZmluZSBiZWNhdXNlIHByb21pc2VzIGNhbiBiZSByZXNvbHZlZCBvdmVyIGFuZCBvdmVyIGFnYWluLlxuICAgICAgY29uc3QgcmVzID0gdGhpcy5zZW5kUmVxdWVzdChvcHRpb25zKVxuICAgICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5kYXRhKVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIC8vIENvbnZlcnQgYXhpb3MgZXJyb3JzIHRvIG5vcm1hbCBlcnJvcnNcbiAgICAgICAgICBjb25zdCBkYXRhID0gZXJyb3IucmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICB0aHJvdyBkYXRhXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKGRhdGEubWVzc2FnZSksIGRhdGEpXG4gICAgICAgICAgICA6IGVycm9yXG4gICAgICAgIH0pXG4gICAgICBpZiAobG9hZENhY2hlKSB7XG4gICAgICAgIGxvYWRDYWNoZVtjYWNoZUtleV0gPSByZXNcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9LFxuXG4gICAgZm9ybWF0KHZhbHVlLCB7XG4gICAgICBsb2NhbGUgPSB0aGlzLmFwaS5sb2NhbGUsXG4gICAgICBkZWZhdWx0cyA9IHRoaXMuYXBpLmZvcm1hdHMsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gZm9ybWF0KHZhbHVlLCB7XG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgZGVmYXVsdHMsXG4gICAgICAgIC4uLm9wdGlvbnNcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIG5hdmlnYXRlKGxvY2F0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGVyLnB1c2gobG9jYXRpb24pXG4gICAgfSxcblxuICAgIGRvd25sb2FkKG9wdGlvbnMgPSB7fSkge1xuICAgICAgaWYgKGlzU3RyaW5nKG9wdGlvbnMpKSB7XG4gICAgICAgIG9wdGlvbnMgPSB7IHVybDogb3B0aW9ucyB9XG4gICAgICB9XG4gICAgICAvLyBTZWU6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80OTkxNzA2Ni8xMTYzNzA4XG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG4gICAgICBhLmhyZWYgPSB0aGlzLmFwaS5nZXRBcGlVcmwob3B0aW9ucylcbiAgICAgIGEuZG93bmxvYWQgPSBvcHRpb25zLmZpbGVuYW1lID8/IG51bGxcbiAgICAgIGNvbnN0IHsgYm9keSB9ID0gZG9jdW1lbnRcbiAgICAgIGJvZHkuYXBwZW5kQ2hpbGQoYSlcbiAgICAgIGEuY2xpY2soKVxuICAgICAgYm9keS5yZW1vdmVDaGlsZChhKVxuICAgIH0sXG5cbiAgICBub3RpZnkob3B0aW9ucykge1xuICAgICAgdGhpcy5yb290Q29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgIH0sXG5cbiAgICBjbG9zZU5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICB0aGlzLnJvb3RDb21wb25lbnQuY2xvc2VOb3RpZmljYXRpb25zKClcbiAgICB9LFxuXG4gICAgc2V0dXBTY2hlbWFGaWVsZHMoKSB7XG4gICAgICB0aGlzLnNldHVwTWV0aG9kcygpXG4gICAgICB0aGlzLnNldHVwQ29tcHV0ZWQoKVxuICAgICAgdGhpcy5zZXR1cEV2ZW50cygpXG4gICAgfSxcblxuICAgIHNldHVwTWV0aG9kcygpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLm1ldGhvZHMgfHwge30pKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHZhbHVlKSkge1xuICAgICAgICAgIHRoaXNba2V5XSA9IHZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBtZXRob2QgZGVmaW5pdGlvbjogJHtrZXl9OiAke3ZhbHVlfWApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0dXBDb21wdXRlZCgpIHtcbiAgICAgIGNvbnN0IGdldENvbXB1dGVkQWNjZXNzb3IgPSAoeyBnZXQsIHNldCB9KSA9PiB7XG4gICAgICAgIGNvbnN0IGdldHRlciA9IGNvbXB1dGVkKCgpID0+IGdldC5jYWxsKHRoaXMpKVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGdldDogKCkgPT4gZ2V0dGVyLnZhbHVlLFxuICAgICAgICAgIHNldDogc2V0ID8gdmFsdWUgPT4gc2V0LmNhbGwodGhpcywgdmFsdWUpIDogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBba2V5LCBpdGVtXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5jb21wdXRlZCB8fCB7fSkpIHtcbiAgICAgICAgY29uc3QgYWNjZXNzb3IgPSBpc0Z1bmN0aW9uKGl0ZW0pXG4gICAgICAgICAgPyBnZXRDb21wdXRlZEFjY2Vzc29yKHsgZ2V0OiBpdGVtIH0pXG4gICAgICAgICAgOiBpc09iamVjdChpdGVtKSAmJiBpc0Z1bmN0aW9uKGl0ZW0uZ2V0KVxuICAgICAgICAgICAgPyBnZXRDb21wdXRlZEFjY2Vzc29yKGl0ZW0pXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgaWYgKGFjY2Vzc29yKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIGtleSwgYWNjZXNzb3IpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAgIGBJbnZhbGlkIGNvbXB1dGVkIHByb3BlcnR5IGRlZmluaXRpb246ICR7a2V5fTogJHtpdGVtfWBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0dXBFdmVudHMoKSB7XG4gICAgICBjb25zdCB7IHdhdGNoLCBldmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICBpZiAod2F0Y2gpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlcnMgPSBpc0Z1bmN0aW9uKHdhdGNoKSA/IHdhdGNoLmNhbGwodGhpcykgOiB3YXRjaFxuICAgICAgICBpZiAoaXNPYmplY3QoaGFuZGxlcnMpKSB7XG4gICAgICAgICAgLy8gSW5zdGFsbCB0aGUgd2F0Y2ggaGFuZGxlcnMgaW4gdGhlIG5leHQgdGljaywgc28gYWxsIGNvbXBvbmVudHMgYXJlXG4gICAgICAgICAgLy8gaW5pdGlhbGl6ZWQgYW5kIHdlIGNhbiBjaGVjayBhZ2FpbnN0IHRoZWlyIG5hbWVzLlxuICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW2tleSwgY2FsbGJhY2tdIG9mIE9iamVjdC5lbnRyaWVzKGhhbmRsZXJzKSkge1xuICAgICAgICAgICAgICAvLyBFeHBhbmQgcHJvcGVydHkgbmFtZXMgdG8gJ2RhdGEucHJvcGVydHknOlxuICAgICAgICAgICAgICBjb25zdCBleHByID0gdGhpcy5zY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlOYW1lKGtleSlcbiAgICAgICAgICAgICAgICA/IGBkYXRhLiR7a2V5fWBcbiAgICAgICAgICAgICAgICA6IGtleVxuICAgICAgICAgICAgICB0aGlzLiR3YXRjaChleHByLCBjYWxsYmFjaylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFkZEV2ZW50ID0gKGtleSwgZXZlbnQsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGNhbGxiYWNrKSkge1xuICAgICAgICAgIHRoaXMub24oaHlwaGVuYXRlKGV2ZW50KSwgY2FsbGJhY2spXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBldmVudCBkZWZpbml0aW9uOiAke2tleX06ICR7Y2FsbGJhY2t9YClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnRzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGV2ZW50cykpIHtcbiAgICAgICAgICBhZGRFdmVudChrZXksIGtleSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEFsc28gc2NhbiBzY2hlbWEgZm9yIGBvbltBLVpdYC1zdHlsZSBjYWxsYmFja3MgYW5kIGFkZCB0aGVtXG4gICAgICAvLyBUT0RPOiBEZXByZWNhdGUgb25lIGZvcm1hdCBvciB0aGUgb3RoZXIsIGluIGZhdm91ciBvZiBvbmx5IG9uZSB3YXkgb2ZcbiAgICAgIC8vIGRvaW5nIHRoaW5ncy4gRGVjaWRlIHdoaWNoIG9uZSB0byByZW1vdmUuXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYSkpIHtcbiAgICAgICAgaWYgKC9eb25bQS1aXS8udGVzdChrZXkpKSB7XG4gICAgICAgICAgYWRkRXZlbnQoa2V5LCBrZXkuc2xpY2UoMiksIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGVtaXRFdmVudChldmVudCwge1xuICAgICAgY29udGV4dCA9IG51bGwsXG4gICAgICBwYXJlbnQgPSBudWxsXG4gICAgfSA9IHt9KSB7XG4gICAgICBjb25zdCBoYXNMaXN0ZW5lcnMgPSB0aGlzLmhhc0xpc3RlbmVycyhldmVudClcbiAgICAgIGNvbnN0IHBhcmVudEhhc0xpc3RlbmVycyA9IHBhcmVudD8uaGFzTGlzdGVuZXJzKGV2ZW50KVxuICAgICAgaWYgKGhhc0xpc3RlbmVycyB8fCBwYXJlbnRIYXNMaXN0ZW5lcnMpIHtcbiAgICAgICAgLy8gVGhlIGVmZmVjdHMgb2Ygc29tZSBldmVudHMgbmVlZCBzb21lIHRpbWUgdG8gcHJvcGFnYXRlIHRocm91Z2ggVnVlLlxuICAgICAgICAvLyBVc2UgJG5leHRUaWNrKCkgdG8gbWFrZSBzdXJlIG91ciBoYW5kbGVycyBzZWUgdGhlc2UgY2hhbmdlcy5cbiAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGBwcm9jZXNzZWRJdGVtYCBpcyBvbmx5IGNvcnJlY3QgYWZ0ZXIgY29tcG9uZW50cyB0aGF0XG4gICAgICAgIC8vIGFyZSBuZXdseSByZW5kZXJlZCBkdWUgdG8gZGF0YSBjaGFuZ2VzIGhhdmUgcmVnaXN0ZXJlZCB0aGVtc2VsdmVzLlxuICAgICAgICBpZiAoWydsb2FkJywgJ2NoYW5nZSddLmluY2x1ZGVzKGV2ZW50KSkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuJG5leHRUaWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGdldENvbnRleHQgPSAoKSA9PiAoY29udGV4dCA9IERpdG9Db250ZXh0LmdldCh0aGlzLCBjb250ZXh0KSlcbiAgICAgICAgY29uc3QgcmVzID0gaGFzTGlzdGVuZXJzXG4gICAgICAgICAgPyBhd2FpdCB0aGlzLmVtaXQoZXZlbnQsIGdldENvbnRleHQoKSlcbiAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAvLyBEb24ndCBidWJibGUgdG8gcGFyZW50IGlmIGhhbmRsZWQgZXZlbnQgcmV0dXJuZWQgYGZhbHNlYFxuICAgICAgICBpZiAocGFyZW50SGFzTGlzdGVuZXJzICYmIHJlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBwYXJlbnQuZW1pdChldmVudCwgZ2V0Q29udGV4dCgpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZW1pdFNjaGVtYUV2ZW50KGV2ZW50LCBwYXJhbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudC5lbWl0RXZlbnQoZXZlbnQsIHBhcmFtcylcbiAgICB9XG4gIH1cbn1cblxubGV0IG5leHRVaWQgPSAwXG4iLCIvLyBBIG1pbmktcmVwbGljYXRpb24gb2YgdnVlJ3MgaW50ZXJuYWwgYHJlc29sdmVNZXJnZWRPcHRpb25zKClgIGJ1dCBvbmx5XG4vLyBoYW5kbGluZyBvdXIgb3duIGFkZGVkIG9wdGlvbnMgcHJvcGVydGllcyBhbmQgbWVyZ2luZyB0aGVtIGVhcmx5IGluc3RlYWRcbi8vIG9mIGxhemlseS5cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVNZXJnZWRPcHRpb25zKG9wdGlvbnMpIHtcbiAgY29uc3QgeyBtaXhpbnMgfSA9IG9wdGlvbnNcbiAgcmV0dXJuIG1peGlucyB8fCBvcHRpb25zLmV4dGVuZHNcbiAgICA/IG1lcmdlT3B0aW9ucyhcbiAgICAgICAgeyAuLi5vcHRpb25zIH0sXG4gICAgICAgIG9wdGlvbnNcbiAgICAgIClcbiAgICA6IG9wdGlvbnNcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlT3B0aW9ucyh0bywgZnJvbSkge1xuICBpZiAoZnJvbS5leHRlbmRzKSB7XG4gICAgbWVyZ2VPcHRpb25zKHRvLCBmcm9tLmV4dGVuZHMpXG4gIH1cbiAgaWYgKGZyb20ubWl4aW5zKSB7XG4gICAgZm9yIChjb25zdCBtaXhpbiBvZiBmcm9tLm1peGlucykge1xuICAgICAgbWVyZ2VPcHRpb25zKHRvLCBtaXhpbilcbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBrZXkgb2YgZGl0b09wdGlvbktleXMpIHtcbiAgICBpZiAoa2V5IGluIGZyb20pIHtcbiAgICAgIHRvW2tleV0gPSBmcm9tW2tleV1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRvXG59XG5cbmNvbnN0IGRpdG9PcHRpb25LZXlzID0gW1xuICAnZGVmYXVsdFZhbHVlJyxcbiAgJ2RlZmF1bHROZXN0ZWQnLFxuICAnZGVmYXVsdFZpc2libGUnLFxuICAnZ2VuZXJhdGVMYWJlbCcsXG4gICdleGNsdWRlVmFsdWUnLFxuICAnaWdub3JlTWlzc2luZ1ZhbHVlJyxcbiAgJ2tlZXBBbGlnbmVkJyxcbiAgJ29taXRQYWRkaW5nJyxcbiAgJ3Byb2Nlc3NWYWx1ZScsXG4gICdwcm9jZXNzU2NoZW1hJyxcbiAgJ2dldFBhbmVsU2NoZW1hJyxcbiAgJ2dldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZycsXG4gIC8vIFZ1ZSAzIC8gVnVlLXJvdXRlciA0IGZvcmdldHMgdGhlc2UuXG4gIC8vIFRPRE86IENyZWF0ZSBidWctcmVwb3J0P1xuICAnYmVmb3JlUm91dGVVcGRhdGUnLFxuICAnYmVmb3JlUm91dGVMZWF2ZSdcbl1cbiIsImltcG9ydCBEaXRvTWl4aW4gZnJvbSAnLi9taXhpbnMvRGl0b01peGluLmpzJ1xuaW1wb3J0IHsgZ2V0VHlwZUNvbXBvbmVudCB9IGZyb20gJy4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgcmVzb2x2ZU1lcmdlZE9wdGlvbnMgfSBmcm9tICcuL3V0aWxzL29wdGlvbnMuanMnXG5pbXBvcnQgeyBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuY29uc3QgY29tcG9uZW50cyA9IHt9XG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0RpdG9NaXhpbl0sXG4gIC8vIE1ha2Ugc3VyZSB0aGF0IHJlZ2lzdGVyZWQgY29tcG9uZW50cyBhcmUgcHJlc2VudCBpbiBhbGwgRGl0b0NvbXBvbmVudC5cbiAgY29tcG9uZW50cyxcblxuICBjb21wb25lbnQobmFtZSwgZGVmaW5pdGlvbikge1xuICAgIGlmIChkZWZpbml0aW9uKSB7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChkZWZpbml0aW9uKSkge1xuICAgICAgICBkZWZpbml0aW9uID0gcmVzb2x2ZU1lcmdlZE9wdGlvbnMoe1xuICAgICAgICAgIGV4dGVuZHM6IHRoaXMsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICAuLi5kZWZpbml0aW9uXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBjb21wb25lbnRzW25hbWVdID0gZGVmaW5pdGlvblxuICAgIH1cbiAgICBpZiAoIShuYW1lIGluIGNvbXBvbmVudHMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBvbmVudCBcIiR7bmFtZX1cIiBub3QgcmVnaXN0ZXJlZGApXG4gICAgfVxuICAgIHJldHVybiBjb21wb25lbnRzW25hbWVdXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFR5cGVDb21wb25lbnRcbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b1VzZXIge1xuICBoYXNSb2xlKC4uLnJvbGVzKSB7XG4gICAgaWYgKHRoaXMucm9sZXMpIHtcbiAgICAgIGZvciAoY29uc3Qgcm9sZSBvZiByb2xlcykge1xuICAgICAgICBpZiAodGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NoZW1hQ29tcG9uZW50czogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtYWluU2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50c1swXVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGBEaXRvU2NoZW1hLmNyZWF0ZWQoKS91bm1vdW50ZWQoKWAgb24gaXRzXG4gICAgLy8gYCRzY2hlbWFQYXJlbnRDb21wb25lbnRgLCBpZiB0aGUgcGFyZW50IHVzZXMgdGhlIGBTY2hlbWFQYXJlbnRNaXhpbmA6XG4gICAgX3JlZ2lzdGVyU2NoZW1hQ29tcG9uZW50KHNjaGVtYUNvbXBvbmVudCwgYWRkKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudHMgfSA9IHRoaXNcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50cy5wdXNoKHNjaGVtYUNvbXBvbmVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudHMuc3BsaWNlKHNjaGVtYUNvbXBvbmVudHMuaW5kZXhPZihzY2hlbWFDb21wb25lbnQpLCAxKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFNjaGVtYVBhcmVudE1peGluIGZyb20gJy4vU2NoZW1hUGFyZW50TWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1NjaGVtYVBhcmVudE1peGluXSxcblxuICBjb21wdXRlZDoge1xuICAgIGVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMucmVkdWNlKFxuICAgICAgICAocmVzdWx0LCB7IGVycm9ycyB9KSA9PlxuICAgICAgICAgIGVycm9ycyAmJiByZXN1bHQgPyByZXN1bHQuY29uY2F0KGVycm9ycykgOiBlcnJvcnMsXG4gICAgICAgIG51bGxcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNUb3VjaGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5zb21lKGl0ID0+IGl0LmlzVG91Y2hlZClcbiAgICB9LFxuXG4gICAgaXNEaXJ0eSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuc29tZShpdCA9PiBpdC5pc0RpcnR5KVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHZhbGlkYXRlQWxsKG1hdGNoLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LnZhbGlkYXRlQWxsKG1hdGNoLCBub3RpZnkpKVxuICAgIH0sXG5cbiAgICB2ZXJpZnlBbGwobWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQudmVyaWZ5QWxsKG1hdGNoKSlcbiAgICB9LFxuXG4gICAgcmVzZXRWYWxpZGF0aW9uKCkge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnRzLmZvckVhY2goaXQgPT4gaXQucmVzZXRWYWxpZGF0aW9uKCkpXG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnRzLmZvckVhY2goaXQgPT4gaXQuY2xlYXJFcnJvcnMoKSlcbiAgICB9LFxuXG4gICAgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cykge1xuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnRzLmZvckVhY2goXG4gICAgICAgIGl0ID0+IGl0LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpXG4gICAgICApXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgVmFsaWRhdG9yTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1ZhbGlkYXRvck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0Q29tbW9uUHJlZml4IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbVmFsaWRhdG9yTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRyb3V0ZUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICByZWxvYWQ6IGZhbHNlLFxuICAgICAgLy8gRWFjaCByb3V0ZS1jb21wb25lbnQgZGVmaW5lcyBhIHN0b3JlIHRoYXQgZ2V0cyBwYXNzZWQgb24gdG8gaXRzXG4gICAgICAvLyBjaGlsZCBjb21wb25lbnRzLCBzbyB0aGV5IGNhbiBzdG9yZSB2YWx1ZXMgaW4gdGhlbSB0aGF0IGxpdmUgYmV5b25kXG4gICAgICAvLyB0aGVpciBsaWZlLWN5Y2xlLiBTZWU6IERpdG9QYW5lLCBTb3VyY2VNaXhpblxuICAgICAgc3RvcmU6IHt9LFxuICAgICAgbG9hZENhY2hlOiB7fSAvLyBTZWUgVHlwZU1peGluLmxvYWQoKVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHJvdXRlQ29tcG9uZW50KCkge1xuICAgICAgLy8gT3ZlcnJpZGUgRGl0b01peGluJ3Mgcm91dGVDb21wb25lbnQoKSB3aGljaCB1c2VzIHRoZSBpbmplY3RlZCB2YWx1ZS5cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHJvdXRlTGV2ZWwoKSB7XG4gICAgICBsZXQgbGV2ZWwgPSAwXG4gICAgICBsZXQgcm91dGVDb21wb25lbnQgPSB0aGlzXG4gICAgICB3aGlsZSAoKHJvdXRlQ29tcG9uZW50ID0gcm91dGVDb21wb25lbnQucGFyZW50Q29tcG9uZW50LnJvdXRlQ29tcG9uZW50KSkge1xuICAgICAgICBsZXZlbCsrXG4gICAgICB9XG4gICAgICByZXR1cm4gbGV2ZWxcbiAgICB9LFxuXG4gICAgcm91dGVSZWNvcmQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUubWF0Y2hlZFt0aGlzLnJvdXRlTGV2ZWxdXG4gICAgfSxcblxuICAgIGlzTGFzdFJvdXRlKCkge1xuICAgICAgLy8gUmV0dXJucyB0cnVlIHdoZW4gdGhpcyByb3V0ZXIgY29tcG9uZW50IGlzIHRoZSBsYXN0IG9uZSBpbiB0aGUgcm91dGUuXG4gICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZVJlY29yZCA9PT0gbWF0Y2hlZFttYXRjaGVkLmxlbmd0aCAtIDFdXG4gICAgfSxcblxuICAgIGlzTGFzdFVubmVzdGVkUm91dGUoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyByb3V0ZSBjb21wb25lbnQgaXMgdGhlIGxhc3Qgb25lIGluIHRoZSByb3V0ZSB0aGF0XG4gICAgICAvLyBuZWVkcyBpdHMgb3duIHJvdXRlci12aWV3ICg9IGlzIG5vdCBuZXN0ZWQpLlxuICAgICAgY29uc3QgeyBtYXRjaGVkIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgZm9yIChsZXQgaSA9IG1hdGNoZWQubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgcmVjb3JkID0gbWF0Y2hlZFtpXVxuICAgICAgICBpZiAoIXJlY29yZC5tZXRhLm5lc3RlZCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkID09PSByZWNvcmRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGlzTmVzdGVkUm91dGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhLm5lc3RlZFxuICAgIH0sXG5cbiAgICBpc1ZpZXcoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgbWV0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkPy5tZXRhXG4gICAgfSxcblxuICAgIHBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRSb3V0ZVBhdGgodGhpcy5yb3V0ZVJlY29yZC5wYXRoKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iKCkge1xuICAgICAgY29uc3QgeyBicmVhZGNydW1iIH0gPSB0aGlzLnNjaGVtYSB8fCB7fVxuICAgICAgcmV0dXJuIGJyZWFkY3J1bWIgfHwgYCR7dGhpcy5icmVhZGNydW1iUHJlZml4fSAke3RoaXMubGFiZWx9YFxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfSxcblxuICAgIHBhcmFtKCkge1xuICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdnVlLXJvdXRlciBub3QgYmVpbmcgYWJsZSB0byBtYXAgbXVsdGlwbGUgdXJsIHBhcmFtZXRlcnNcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgbmFtZSB0byBtdWx0aXBsZSBjb21wb25lbnRzLCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhcmFtc1t0aGlzLm1ldGE/LnBhcmFtXSB8fCBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZSwgc2VlIERpdG9Gb3JtXG4gICAgaXNNdXRhdGluZygpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVSb3V0ZVVwZGF0ZSh0bywgZnJvbSwgbmV4dCkge1xuICAgIHRoaXM/LmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGJlZm9yZVJvdXRlTGVhdmUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzPy5iZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dClcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIEtlZXAgYSBzaGFyZWQgc3RhY2sgb2Ygcm9vdCBjb21wb25lbnRzIGZvciBEaXRvVHJhaWwgdG8gdXNlIHRvIHJlbmRlclxuICAgIC8vIGxhYmVscy4gQ2FuJ3QgcmVseSBvbiAkcm91dGUubWF0Y2hlZFtpXS5pbnN0YW5jZXMuZGVmYXVsdCB1bmZvcnR1bmF0ZWx5LFxuICAgIC8vIGFzIGluc3RhbmNlcyBhcmVuJ3QgaW1tZWRpYXRlbHkgcmVhZHksIGFuZCBpbnN0YW5jZXMgaXMgbm90IHJlYWN0aXZlLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLnB1c2godGhpcylcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICByb3V0ZUNvbXBvbmVudHMuc3BsaWNlKHJvdXRlQ29tcG9uZW50cy5pbmRleE9mKHRoaXMpLCAxKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBiZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dCkge1xuICAgICAgbGV0IG9rID0gdHJ1ZVxuICAgICAgY29uc3QgaXNDbG9zaW5nID0gKFxuICAgICAgICAvLyBPbmx5IGhhbmRsZSB0aGlzIHJvdXRlIGNoYW5nZSBpZiB0aGUgZm9ybSBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlXG4gICAgICAgIC8vIGBmcm9tYCByb3V0ZSwgYnV0IGluY2x1ZGUgcGFyZW50IGZvcm1zIG9mIGNsb3NpbmcgbmVzdGVkIGZvcm1zIGFzIGFzXG4gICAgICAgIC8vIHdlbGwsIGJ5IG1hdGNoaW5nIHRoZSB0aGUgc3RhcnQgb2YgZnJvbS90byBwYXRoIGFnYWluc3QgYHRoaXMucGF0aGA6XG4gICAgICAgIGZyb20ucGF0aC5zdGFydHNXaXRoKHRoaXMucGF0aCkgJiZcbiAgICAgICAgIXRvLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgIC8vIEV4Y2x1ZGUgaGFzaCBjaGFuZ2VzIG9ubHkgKD0gdGFiIGNoYW5nZXMpOlxuICAgICAgICBmcm9tLnBhdGggIT09IHRvLnBhdGggJiYgKFxuICAgICAgICAgIHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHx8XG4gICAgICAgICAgLy8gRGVjaWRlIGlmIHdlJ3JlIG1vdmluZyB0b3dhcmRzIGEgbmV3IG5lc3RlZCBmb3JtLCBvciBjbG9zaW5nIC9cbiAgICAgICAgICAvLyByZXBsYWNpbmcgYW4gYWxyZWFkeSBvcGVuIG9uZSBieSBjb21wYXJpbmcgcGF0aCBsZW5ndGhzLlxuICAgICAgICAgIC8vIFRoZSBjYXNlIG9mIGA9YCBtYXRjaGVzIHRoZSByZXBsYWNpbmcgb2YgYW4gYWxyZWFkeSBvcGVuIG9uZS5cbiAgICAgICAgICB0by5wYXRoLmxlbmd0aCA8PSBmcm9tLnBhdGgubGVuZ3RoXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIGlmIChpc0Nsb3NpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNdXRhdGluZykge1xuICAgICAgICAgIC8vIEZvciBhY3RpdmUgZGlyZWN0bHkgbXV0YXRpbmcgKG5lc3RlZCkgZm9ybXMgdGhhdCB3ZXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgICAgICAvLyB5ZXQsIHZhbGlkYXRlIHRoZW0gb25jZS4gSWYgdGhlIHVzZXIgdGhlbiBzdGlsbCB3YW50cyB0byBsZWF2ZVxuICAgICAgICAgIC8vIHRoZW0sIHRoZXkgY2FuIGNsaWNrIGNsb3NlIC8gbmF2aWdhdGUgYXdheSBhZ2Fpbi5cbiAgICAgICAgICBvayA9IChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgfHxcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBbGwoKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGUgZm9ybSBkb2Vzbid0IGRpcmVjdGx5IG11dGF0ZSBkYXRhLiBJZiBpdCBpcyBkaXJ0eSwgYXNrIGlmIHVzZXJcbiAgICAgICAgICAvLyB3YW50cyB0byBwZXJzaXN0IGRhdGEgZmlyc3QuXG4gICAgICAgICAgaWYgKHRoaXMuaXNEaXJ0eSkge1xuICAgICAgICAgICAgb2sgPSB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICAgICAgYFlvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gRG8geW91IHJlYWxseSB3YW50IHRvICR7XG4gICAgICAgICAgICAgICAgdGhpcy52ZXJicy5jYW5jZWxcbiAgICAgICAgICAgICAgfT9gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0KG9rKVxuICAgIH0sXG5cbiAgICBnZXRSb3V0ZVBhdGgodGVtcGxhdGVQYXRoKSB7XG4gICAgICAvLyBNYXBzIHRoZSByb3V0ZSdzIGFjdHVhbCBwYXRoIHRvIHRoZSBtYXRjaGVkIHJvdXRlcyBieSBjb3VudGluZyBpdHNcbiAgICAgIC8vIHBhcnRzIHNlcGFyYXRlZCBieSAnLycsIHNwbGl0dGluZyB0aGUgcGF0aCBpbnRvIHRoZSBtYXBwZWQgcGFydHNcbiAgICAgIC8vIGNvbnRhaW5pbmcgYWN0dWFsIHBhcmFtZXRlcnMuXG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucGF0aFxuICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAuc2xpY2UoMCwgdGVtcGxhdGVQYXRoLnNwbGl0KCcvJykubGVuZ3RoKVxuICAgICAgICAuam9pbignLycpXG4gICAgfSxcblxuICAgIGdldENoaWxkUGF0aChwYXRoKSB7XG4gICAgICByZXR1cm4gYCR7dGhpcy5wYXRofS8ke3BhdGh9YFxuICAgIH0sXG5cbiAgICBpc0Z1bGxSb3V0ZUNoYW5nZSh0bywgZnJvbSkge1xuICAgICAgLy8gVGhlIHJvdXRlIHBhdGggaXMgdGhlIHBhdGggdXAgdG8gdGhlIGZpcnN0IC8gKGV4Y2x1ZGluZyB0aGUgaW5pdGlhbCAvKTpcbiAgICAgIGNvbnN0IHJvb3RQYXRoID0gdGhpcy5wYXRoLm1hdGNoKC9eKFxcL1teL10qKS8pWzFdXG4gICAgICByZXR1cm4gIWdldENvbW1vblByZWZpeCh0by5wYXRoLCBmcm9tLnBhdGgpLnN0YXJ0c1dpdGgocm9vdFBhdGgpXG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudGVtcGxhdGUoXG4gIHYtaWY9XCJ1c2VyXCJcbilcbiAgLy8tIE9ubHkgcmVuZGVyIERpdG9WaWV3IHdoZW4gaXQgaXMgYWN0aXZlLCBvdGhlcndpc2UgYSBub3JtYWwgcm91dGVyLXZpZXdcbiAgLy8tIGluc3RlYWQsIHRvIG5lc3QgZnVydGhlciByb3V0ZSBjb21wb25lbnRzLlxuICAvLy0gTk9URTogVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgaGFuZGxpbmcgaW4gRGl0b0Zvcm0sIHdoZXJlIGB2LXNob3dgIGlzXG4gIC8vLSB1c2VkIHRvIGFsd2F5cyByZW5kZXIgZm9ybXMgZXZlbiB3aGVuIG90aGVyIG5lc3RlZCBmb3JtcyBhcmUgcHJlc2VudC5cbiAgUm91dGVyVmlldyhcbiAgICB2LWlmPVwiIWlzTGFzdFJvdXRlXCJcbiAgICA6a2V5PVwibmFtZVwiXG4gIClcbiAgLmRpdG8tdmlldy5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gICAgdi1lbHNlLWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKHZpZXdTY2hlbWEpXCJcbiAgICA6ZGF0YS1yZXNvdXJjZT1cInNvdXJjZVNjaGVtYS5wYXRoXCJcbiAgKVxuICAgIERpdG9TY2hlbWEoXG4gICAgICA6c2NoZW1hPVwidmlld1NjaGVtYVwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUobmFtZSlcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIHNjcm9sbGFibGVcbiAgICAgIGhlYWRlckluTWVudVxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJvdXRlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1JvdXRlTWl4aW4uanMnXG5pbXBvcnQge1xuICBpc1NpbmdsZUNvbXBvbmVudFZpZXcsXG4gIHNvbWVOZXN0ZWRTY2hlbWFDb21wb25lbnRcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgaGFzUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVmlldycsIHtcbiAgbWl4aW5zOiBbUm91dGVNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICAvLyBSZWRpcmVjdCAkc291cmNlQ29tcG9uZW50IGFuZCAkcmVzb3VyY2VDb21wb25lbnQgdG8gdGhlIG1haW4gY29tcG9uZW50OlxuICAgIHJldHVybiB7XG4gICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzLm1haW5Db21wb25lbnQ/LnNvdXJjZUNvbXBvbmVudCB8fCBudWxsLFxuICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiB0aGlzLm1haW5Db21wb25lbnQ/LnJlc291cmNlQ29tcG9uZW50IHx8IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gVXBkYXRlZCBmcm9tIExvYWRpbmdNaXhpbiB0aHJvdWdoIGBzZXRMb2FkaW5nKGlzTG9hZGluZylgOlxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIC8vIE5PVEU6IERhdGEgaXMgc2hhcmVkIGFjcm9zcyBhbGwgdmlld3MgYmVjYXVzZSB0aGUgcm91dGVyIHJlY3ljbGVzIHRoZVxuICAgICAgLy8gRGl0b1ZpZXcgY29tcG9uZW50LlxuICAgICAgZGF0YToge31cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tZXRhLnNjaGVtYVxuICAgIH0sXG5cbiAgICBuYW1lKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLm5hbWVcbiAgICB9LFxuXG4gICAgaXNWaWV3KCkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9LFxuXG4gICAgaXNTaW5nbGVDb21wb25lbnRWaWV3KCkge1xuICAgICAgcmV0dXJuIGlzU2luZ2xlQ29tcG9uZW50Vmlldyh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgbWFpbkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlEYXRhUGF0aCh0aGlzLm5hbWUpXG4gICAgfSxcblxuICAgIHZpZXdTY2hlbWEoKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudCwgLi4uc2NoZW1hIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgLy8gVHJhbnNsYXRlIHNpbmdsZS1jb21wb25lbnQgc2NoZW1hcyBpbnRvIG11bHRpLWNvbXBvbmVudCBzY2hlbWFzLFxuICAgICAgLy8gc28gdGhleSBjYW4gYmUgcmVuZGVyZWQgZGlyZWN0bHkgdGhyb3VnaCBEaXRvU2NoZW1hIGFsc286XG4gICAgICByZXR1cm4gdGhpcy5pc1NpbmdsZUNvbXBvbmVudFZpZXdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5zY2hlbWEsXG4gICAgICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgICAgIFtzY2hlbWEubmFtZV06IHtcbiAgICAgICAgICAgICAgICBuYW1lOiBzY2hlbWEubmFtZSxcbiAgICAgICAgICAgICAgICBsYWJlbDogZmFsc2UsXG4gICAgICAgICAgICAgICAgLi4uY29tcG9uZW50XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDogc2NoZW1hXG4gICAgfSxcblxuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIHJldHVybiBzb21lTmVzdGVkU2NoZW1hQ29tcG9uZW50KHRoaXMudmlld1NjaGVtYSwgaGFzUmVzb3VyY2UpXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlKHRvLCBmcm9tKSB7XG4gICAgICAvLyBTZWUgaWYgdGhlIHJvdXRlIGNoYW5nZXMgY29tcGxldGVseSwgYW5kIGNsZWFyIHRoZSBkYXRhIGlmIGl0IGRvZXMuXG4gICAgICBpZiAodGhpcy5pc0Z1bGxSb3V0ZUNoYW5nZSh0bywgZnJvbSkpIHtcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZVxuICAgICAgICB0aGlzLmRhdGEgPSB7fVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgfSxcblxuICAgIGdldENoaWxkUGF0aChwYXRoKSB7XG4gICAgICAvLyBMaXN0cyBpbnNpZGUgc2luZ2xlLWNvbXBvbmVudCB2aWV3cyB1c2UgdGhlIHZpZXcncyBwYXRoIGZvciBzdWItcGF0aHM6XG4gICAgICByZXR1cm4gdGhpcy5pc1NpbmdsZUNvbXBvbmVudFZpZXdcbiAgICAgICAgPyB0aGlzLnBhdGhcbiAgICAgICAgOiBgJHt0aGlzLnBhdGh9LyR7cGF0aH1gXG4gICAgfSxcblxuICAgIHNldExvYWRpbmcoaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmlzTG9hZGluZyA9ICEhaXNMb2FkaW5nXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBpc0RhdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gY29weURhdGUoZGF0ZSwge1xuICB5ZWFyID0gZGF0ZT8uZ2V0RnVsbFllYXIoKSA/PyAwLFxuICBtb250aCA9IGRhdGU/LmdldE1vbnRoKCkgPz8gMCxcbiAgZGF5ID0gZGF0ZT8uZ2V0RGF0ZSgpID8/IDAsXG4gIGhvdXIgPSBkYXRlPy5nZXRIb3VycygpID8/IDAsXG4gIG1pbnV0ZSA9IGRhdGU/LmdldE1pbnV0ZXMoKSA/PyAwLFxuICBzZWNvbmQgPSBkYXRlPy5nZXRTZWNvbmRzKCkgPz8gMCxcbiAgbWlsbGlzZWNvbmQgPSBkYXRlPy5nZXRNaWxsaXNlY29uZHMoKSA/PyAwXG59ID0ge30pIHtcbiAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnREYXRlKGRhdGUpIHtcbiAgcmV0dXJuIGlzRGF0ZShkYXRlKSA/IGRhdGUgOiBkYXRlID8gbmV3IERhdGUoZGF0ZSkgOiBudWxsXG59XG4iLCI8IS0tIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvIC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNhbGVuZGFyXG4gIC5kaXRvLWNhbGVuZGFyLXBvcHVwXG4gICAgLmRpdG8tY2FsZW5kYXItaW5uZXJcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwiY3VycmVudE1vZGUgPT09ICdkYXknXCJcbiAgICAgIClcbiAgICAgICAgLmRpdG8tY2FsZW5kYXItaGVhZGVyXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW5cbiAgICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zZWxlY3QteWVhcihcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgneWVhcicpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyB5ZWFyOiAxIH0pIH19XG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LW1vbnRoKFxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZXRNb2RlKCdtb250aCcpXCJcbiAgICAgICAgICAgICkge3sgZGF0ZVRvU3RyaW5nKGN1cnJlbnRWYWx1ZSwgeyBtb250aDogMSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQuZGl0by1jYWxlbmRhci1zdGVwLW1vbnRoKFxuICAgICAgICAgICAgQGNsaWNrPVwic3RlcE1vbnRoKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dC5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcihcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBZZWFyKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci13ZWVrZGF5c1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ3ZWVrZGF5IGluIHdlZWtkYXlOYW1lc1wiXG4gICAgICAgICAgICApIHt7IHdlZWtkYXkuc2hvcnQgfX1cbiAgICAgICAgICAuZGl0by1jYWxlbmRhci1kYXRlc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJkYXRlIGluIGRhdGVSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImRhdGUuc3RhdGUgJiYgYGRpdG8tY2FsZW5kYXItaXRlbS0ke2RhdGUuc3RhdGV9YFwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdERhdGUoZGF0ZS5kYXRlLCBkYXRlLnN0YXRlLCB0cnVlKVwiXG4gICAgICAgICAgICApIHt7IGRhdGUudGV4dCB9fVxuICAgICAgICAuZGl0by1jYWxlbmRhci1mb290ZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXRvZGF5KFxuICAgICAgICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgICAgICAgICA6dGl0bGU9XCJkYXRlVG9TdHJpbmcobmV3IERhdGUoKSwgeyB5ZWFyOiAxLCBtb250aDogMSwgZGF5OiAxIH0pXCJcbiAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdERhdGUobmV3IERhdGUoKSlcIlxuICAgICAgICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ21vbnRoJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogMSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItbW9udGhzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cIihtb250aCwgaW5kZXgpIGluIG1vbnRoTmFtZXNcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRNb250aENsYXNzKGluZGV4KVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdE1vbnRoKGluZGV4KVwiXG4gICAgICAgICAgICApIHt7IG1vbnRoLnNob3J0IH19XG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwiY3VycmVudE1vZGUgPT09ICd5ZWFyJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW4ge3sgZGVjYWRlVG9TdHJpbmcoY3VycmVudFZhbHVlKSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci15ZWFyc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ5ZWFyIGluIHllYXJSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldFllYXJDbGFzcyh5ZWFyKVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdFllYXIoeWVhcilcIlxuICAgICAgICAgICAgKSB7eyB5ZWFyIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY29weURhdGUgfSBmcm9tICcuLi91dGlscy9kYXRlLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZGlzYWJsZWREYXRlOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9LFxuICAgIG1vZGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZGF5JyB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICBjb25zdCB7IHdlZWtkYXlOYW1lcywgbW9udGhOYW1lcyB9ID0gZ2V0TG9jYWxlTmFtZXModGhpcy5sb2NhbGUpXG4gICAgcmV0dXJuIHtcbiAgICAgIHdlZWtkYXlOYW1lcyxcbiAgICAgIG1vbnRoTmFtZXMsXG4gICAgICBkYXRlUmFuZ2U6IFtdLFxuICAgICAgeWVhclJhbmdlOiBbXSxcbiAgICAgIGN1cnJlbnRWYWx1ZTogKFxuICAgICAgICB0aGlzLm1vZGVsVmFsdWUgfHxcbiAgICAgICAgLy8gSWYgbm8gdmFsdWUgaXMgcHJvdmlkZWQsIHVzZSBjdXJyZW50IGRhdGUgYnV0IGNsZWFyIHRpbWUgZmllbGRzOlxuICAgICAgICBjb3B5RGF0ZShuZXcgRGF0ZSgpLCB7IGhvdXI6IDAsIG1pbnV0ZTogMCwgc2Vjb25kOiAwLCBtaWxsaXNlY29uZDogMCB9KVxuICAgICAgKSxcbiAgICAgIGN1cnJlbnRNb2RlOiB0aGlzLm1vZGVcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvIHx8IG5ldyBEYXRlKClcbiAgICAgICAgdGhpcy51cGRhdGVEYXRlUmFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRGF0ZVJhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGlzYWJsZWREYXRlOiAndXBkYXRlRGF0ZVJhbmdlJyxcblxuICAgIG1vZGUobW9kZSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9kZSA9IG1vZGVcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLnVwZGF0ZURhdGVSYW5nZSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldE1vbnRoQ2xhc3MobW9udGgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlJzogKFxuICAgICAgICAgIHRoaXMubW9kZWxWYWx1ZSAmJlxuICAgICAgICAgIG1vbnRoID09PSB0aGlzLm1vZGVsVmFsdWUuZ2V0TW9udGgoKSAmJlxuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgPT09IHRoaXMubW9kZWxWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICAgICksXG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tY3VycmVudCc6IG1vbnRoID09PSB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRNb250aCgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldFllYXJDbGFzcyh5ZWFyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWFjdGl2ZSc6IChcbiAgICAgICAgICB0aGlzLm1vZGVsVmFsdWUgJiYgeWVhciA9PT0gdGhpcy5tb2RlbFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgKSxcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50JzogeWVhciA9PT0gdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXREYXRlKG92ZXJyaWRlcykge1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBjb3B5RGF0ZSh0aGlzLmN1cnJlbnRWYWx1ZSwgb3ZlcnJpZGVzKVxuICAgIH0sXG5cbiAgICBzdGVwRGVjYWRlKHN0ZXApIHtcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBzdGVwICogMTBcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNldE1vZGUobW9kZSkge1xuICAgICAgdGhpcy5jdXJyZW50TW9kZSA9IG1vZGVcbiAgICB9LFxuXG4gICAgc3RlcE1vbnRoKHN0ZXApIHtcbiAgICAgIGNvbnN0IHsgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBjb25zdCB7IHllYXIsIG1vbnRoIH0gPSB0aGlzLmdldFllYXJNb250aChcbiAgICAgICAgY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgIGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpICsgc3RlcFxuICAgICAgKVxuICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgbW9udGgsXG4gICAgICAgIGRheTogTWF0aC5taW4oXG4gICAgICAgICAgdGhpcy5nZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aCksXG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUuZ2V0RGF0ZSgpXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHN0ZXBZZWFyKHN0ZXApIHtcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIHllYXI6IHRoaXMuY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBzdGVwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzZWxlY3REYXRlKGRhdGUsIHN0YXRlLCBjb3B5ID0gZmFsc2UpIHtcbiAgICAgIGlmIChzdGF0ZSAhPT0gJ2Rpc2FibGVkJykge1xuICAgICAgICBpZiAoY29weSkge1xuICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgICAgICB5ZWFyOiBkYXRlLmdldEZ1bGxZZWFyKCksXG4gICAgICAgICAgICBtb250aDogZGF0ZS5nZXRNb250aCgpLFxuICAgICAgICAgICAgZGF5OiBkYXRlLmdldERhdGUoKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBkYXRlXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB0aGlzLmN1cnJlbnRWYWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2VsZWN0TW9udGgobW9udGgpIHtcbiAgICAgIHRoaXMuc2V0TW9kZSgnZGF5JylcbiAgICAgIC8vIFNldCBkYXkgdG8gMSB0byBhdm9pZCBzZWxlY3RpbmcgYSBkYXRlIHRoYXQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGVcbiAgICAgIC8vIG5ldyBtb250aCwgZS5nLiBGZWIgMzEgLT4gTWFyIDMuXG4gICAgICB0aGlzLnNldERhdGUoeyBtb250aCwgZGF5OiAxIH0pXG4gICAgfSxcblxuICAgIHNlbGVjdFllYXIoeWVhcikge1xuICAgICAgdGhpcy5zZXRNb2RlKCdtb250aCcpXG4gICAgICB0aGlzLnNldERhdGUoeyB5ZWFyIH0pXG4gICAgfSxcblxuICAgIGdldFllYXJNb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgaWYgKG1vbnRoID4gMTEpIHtcbiAgICAgICAgeWVhcisrXG4gICAgICAgIG1vbnRoID0gMFxuICAgICAgfSBlbHNlIGlmIChtb250aCA8IDApIHtcbiAgICAgICAgeWVhci0tXG4gICAgICAgIG1vbnRoID0gMTFcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHllYXIsIG1vbnRoIH1cbiAgICB9LFxuXG4gICAgZGF0ZVRvU3RyaW5nKGRhdGUsIHsgeWVhciwgbW9udGgsIGRheSB9KSB7XG4gICAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZyh0aGlzLmxvY2FsZSwge1xuICAgICAgICB5ZWFyOiB5ZWFyICYmICdudW1lcmljJyxcbiAgICAgICAgbW9udGg6IG1vbnRoICYmICdsb25nJyxcbiAgICAgICAgZGF5OiBkYXkgJiYgJ251bWVyaWMnXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBkZWNhZGVUb1N0cmluZyhkYXRlKSB7XG4gICAgICBjb25zdCB5ZWFyID0gdGhpcy5nZXRGaXJzdFllYXJPZkRlY2FkZShkYXRlLmdldEZ1bGxZZWFyKCkpXG4gICAgICByZXR1cm4gYCR7eWVhcn0g4oCTICR7eWVhciArIDl9YFxuICAgIH0sXG5cbiAgICBnZXREYXlzSW5Nb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgMCkuZ2V0RGF0ZSgpXG4gICAgfSxcblxuICAgIGdldEZpcnN0WWVhck9mRGVjYWRlKHllYXIpIHtcbiAgICAgIGNvbnN0IHllYXJTdHIgPSB5ZWFyLnRvU3RyaW5nKClcbiAgICAgIHJldHVybiArYCR7eWVhclN0ci5zbGljZSgwLCAtMSl9MGBcbiAgICB9LFxuXG4gICAgbmF2aWdhdGUoeyBob3IsIHZlciwgZW50ZXIgfSkge1xuICAgICAgY29uc3QgeyBjdXJyZW50TW9kZSwgY3VycmVudFZhbHVlIH0gPSB0aGlzXG4gICAgICBpZiAoaG9yIHx8IHZlcikge1xuICAgICAgICBzd2l0Y2ggKGN1cnJlbnRNb2RlKSB7XG4gICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgICAgICAgIGRheTogY3VycmVudFZhbHVlLmdldERhdGUoKSArIGhvciArIHZlciAqIDdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgICAgICAgIG1vbnRoOiBjdXJyZW50VmFsdWUuZ2V0TW9udGgoKSArIGhvciArIHZlciAqIDZcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgdGhpcy5zZXREYXRlKHtcbiAgICAgICAgICAgICAgeWVhcjogY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBob3IgKyB2ZXIgKiA1XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfSBlbHNlIGlmIChlbnRlcikge1xuICAgICAgICBzd2l0Y2ggKGN1cnJlbnRNb2RlKSB7XG4gICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RGF0ZShjdXJyZW50VmFsdWUpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgIHRoaXMuc2V0TW9kZSgnZGF5JylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICB0aGlzLnNldE1vZGUoJ21vbnRoJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlRGF0ZVJhbmdlKCkge1xuICAgICAgdGhpcy5kYXRlUmFuZ2UgPSBbXVxuICAgICAgdGhpcy55ZWFyUmFuZ2UgPSBbXVxuXG4gICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgY29uc3QgeWVhciA9IGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICBjb25zdCBtb250aCA9IGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpXG4gICAgICBjb25zdCBzdGFydFllYXIgPSB0aGlzLmdldEZpcnN0WWVhck9mRGVjYWRlKHllYXIpXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICAgICAgdGhpcy55ZWFyUmFuZ2UucHVzaChzdGFydFllYXIgKyBpKVxuICAgICAgfVxuICAgICAgY29uc3QgY3Vyck1vbnRoRmlyc3REYXkgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSlcbiAgICAgIGxldCBmaXJzdERheVdlZWsgPSBjdXJyTW9udGhGaXJzdERheS5nZXREYXkoKSArIDFcbiAgICAgIGlmIChmaXJzdERheVdlZWsgPT09IDApIHtcbiAgICAgICAgZmlyc3REYXlXZWVrID0gN1xuICAgICAgfVxuICAgICAgY29uc3QgbnVtRGF5cyA9IHRoaXMuZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpXG4gICAgICBpZiAoZmlyc3REYXlXZWVrID4gMSkge1xuICAgICAgICBjb25zdCBwcmV2TW9udGggPSB0aGlzLmdldFllYXJNb250aCh5ZWFyLCBtb250aCAtIDEpXG4gICAgICAgIGNvbnN0IHByZXZNb250aE51bURheXMgPSB0aGlzLmdldERheXNJbk1vbnRoKFxuICAgICAgICAgIHByZXZNb250aC55ZWFyLFxuICAgICAgICAgIHByZXZNb250aC5tb250aFxuICAgICAgICApXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZmlyc3REYXlXZWVrOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXkgPSBwcmV2TW9udGhOdW1EYXlzIC0gZmlyc3REYXlXZWVrICsgaSArIDFcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUocHJldk1vbnRoLnllYXIsIHByZXZNb250aC5tb250aCwgZGF5KVxuICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgICAgdGV4dDogZGF5LFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIHN0YXRlOiB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCcgOiAnZ3JheSdcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKVxuICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbnVtRGF5czsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgaSlcbiAgICAgICAgY29uc3QgaXNEYXkgPSBkYXRlID0+IChcbiAgICAgICAgICBkYXRlICYmXG4gICAgICAgICAgZGF0ZS5nZXREYXRlKCkgPT09IGkgJiZcbiAgICAgICAgICBkYXRlLmdldEZ1bGxZZWFyKCkgPT09IHllYXIgJiZcbiAgICAgICAgICBkYXRlLmdldE1vbnRoKCkgPT09IG1vbnRoXG4gICAgICAgIClcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBpc0RheSh0aGlzLm1vZGVsVmFsdWUpXG4gICAgICAgICAgPyAnYWN0aXZlJ1xuICAgICAgICAgIDogaXNEYXkodG9kYXkpXG4gICAgICAgICAgICA/ICd0b2RheSdcbiAgICAgICAgICAgIDogdGhpcy5kaXNhYmxlZERhdGUoZGF0ZSlcbiAgICAgICAgICAgICAgPyAnZGlzYWJsZWQnXG4gICAgICAgICAgICAgIDogaXNEYXkoY3VycmVudFZhbHVlKVxuICAgICAgICAgICAgICAgID8gJ2N1cnJlbnQnXG4gICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgZGF0ZSxcbiAgICAgICAgICBzdGF0ZVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXh0TW9udGhOZWVkID0gNDIgLSB0aGlzLmRhdGVSYW5nZS5sZW5ndGhcbiAgICAgIGlmIChuZXh0TW9udGhOZWVkID4gMCkge1xuICAgICAgICBjb25zdCBuZXh0TW9udGggPSB0aGlzLmdldFllYXJNb250aCh5ZWFyLCBtb250aCArIDEpXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG5leHRNb250aE5lZWQ7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShuZXh0TW9udGgueWVhciwgbmV4dE1vbnRoLm1vbnRoLCBpKVxuICAgICAgICAgIGNvbnN0IHN0YXRlID0gdGhpcy5kaXNhYmxlZERhdGUoZGF0ZSkgPyAnZGlzYWJsZWQnIDogJ2dyYXknXG4gICAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBsb2NhbGVOYW1lcyA9IHt9XG5cbi8vIENhbGxpbmcgYHRvTG9jYWxlU3RyaW5nKClgIHRoaXMgbXVjaCBhcHBlYXJzIHRvIGJlIGV4cGVuc2l2ZSwgc28gY2FjaGUgaXQ6XG5mdW5jdGlvbiBnZXRMb2NhbGVOYW1lcyhsb2NhbGUpIHtcbiAgbGV0IG5hbWVzID0gbG9jYWxlTmFtZXNbbG9jYWxlXVxuICBpZiAoIW5hbWVzKSB7XG4gICAgY29uc3Qgd2Vla2RheU5hbWVzID0gW11cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDAsIDAsIGkpXG4gICAgICB3ZWVrZGF5TmFtZXMucHVzaCh7XG4gICAgICAgIGxvbmc6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IHdlZWtkYXk6ICdsb25nJyB9KSxcbiAgICAgICAgc2hvcnQ6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IHdlZWtkYXk6ICdzaG9ydCcgfSlcbiAgICAgIH0pXG4gICAgfVxuICAgIGNvbnN0IG1vbnRoTmFtZXMgPSBbXVxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IDEyOyBpKyspIHtcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgwLCBpLCAwKVxuICAgICAgbW9udGhOYW1lcy5wdXNoKHtcbiAgICAgICAgbG9uZzogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgbW9udGg6ICdsb25nJyB9KSxcbiAgICAgICAgc2hvcnQ6IGRhdGUudG9Mb2NhbGVTdHJpbmcobG9jYWxlLCB7IG1vbnRoOiAnc2hvcnQnIH0pXG4gICAgICB9KVxuICAgIH1cbiAgICBuYW1lcyA9IGxvY2FsZU5hbWVzW2xvY2FsZV0gPSB7XG4gICAgICB3ZWVrZGF5TmFtZXMsXG4gICAgICBtb250aE5hbWVzXG4gICAgfVxuICB9XG4gIHJldHVybiBuYW1lc1xufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY2FsZW5kYXIge1xuICBtaW4td2lkdGg6IDI0MHB4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4uZGl0by1jYWxlbmRhci1wb3B1cCB7XG4gIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3c7XG4gIHotaW5kZXg6IDEwMDA7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWJvZHkge1xuICBwYWRkaW5nOiAwIDAuNWVtO1xuXG4gIHNwYW4ge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogY2FsYygxMDAlIC8gNyk7XG4gICAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICAgIGxpbmUtaGVpZ2h0OiBjYWxjKCN7JGlucHV0LWhlaWdodH0gLSAycHgpO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tdG9kYXkge1xuICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlO1xuICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICB9XG5cbiAgLmRpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUge1xuICAgICYsXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZGlzYWJsZWQge1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZGlzYWJsZWQsXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZ3JheSB7XG4gICAgY29sb3I6ICM5OTk5OTk7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItbW9udGhzLFxuLmRpdG8tY2FsZW5kYXIteWVhcnMge1xuICBzcGFuIHtcbiAgICB3aWR0aDogY2FsYygxMDAlIC8gNCk7XG4gICAgbWFyZ2luOiAwLjVlbSAwO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW4ge1xuICB3aWR0aDogY2FsYygxMDAlIC8gNSk7XG59XG5cbi5kaXRvLWNhbGVuZGFyIGEsXG4uZGl0by1jYWxlbmRhci1kYXRlcyBzcGFuLFxuLmRpdG8tY2FsZW5kYXItbW9udGhzIHNwYW4sXG4uZGl0by1jYWxlbmRhci15ZWFycyBzcGFuIHtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uZGl0by1jYWxlbmRhci1oZWFkZXIgc3BhbiB7XG4gIGN1cnNvcjogZGVmYXVsdDtcblxuICBhIHtcbiAgICBwYWRkaW5nOiAwIDAuMmVtO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLWRhdGVzIHNwYW46aG92ZXIsXG4uZGl0by1jYWxlbmRhci1tb250aHMgc3Bhbjpob3Zlcixcbi5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW46aG92ZXIsXG4uZGl0by1jYWxlbmRhcjpub3QoOmhvdmVyKSAuZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnQge1xuICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0O1xufVxuXG4uZGl0by1jYWxlbmRhci13ZWVrZGF5cyBzcGFuIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xufVxuXG4uZGl0by1jYWxlbmRhci1oZWFkZXIsXG4uZGl0by1jYWxlbmRhci1mb290ZXIge1xuICBAZXh0ZW5kICVpbnB1dC1oZWlnaHQ7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWZvb3RlciB7XG4gIGJvcmRlci10b3A6ICRib3JkZXItc3R5bGU7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWhlYWRlciB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBib3JkZXItYm90dG9tOiAkYm9yZGVyLXN0eWxlO1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gID4gc3BhbiB7XG4gICAgbWFyZ2luOiBhdXRvO1xuICAgIHBhZGRpbmc6IDAgMC41ZW07XG4gIH1cblxuICBhIHtcbiAgICBmb250LXdlaWdodDogYm9sZDtcblxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldixcbi5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgd2lkdGg6IDUlO1xuICBtaW4td2lkdGg6IDJlbTtcbiAgbWF4LXdpZHRoOiAzZW07XG5cbiAgJjo6YWZ0ZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGZvbnQtc2l6ZTogMS4yNWVtO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXN0ZXAtcHJldiB7XG4gICY6OmFmdGVyIHtcbiAgICBjb250ZW50OiAn4oC5JztcbiAgfVxuXG4gICYuZGl0by1jYWxlbmRhci1zdGVwLXllYXI6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnwqsnO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXN0ZXAtbmV4dCB7XG4gICY6OmFmdGVyIHtcbiAgICBjb250ZW50OiAn4oC6JztcbiAgfVxuXG4gICYuZGl0by1jYWxlbmRhci1zdGVwLXllYXI6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnwrsnO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXNlbGVjdC10b2RheSB7XG4gICY6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnTm93JztcbiAgfVxufVxuPC9zdHlsZT5cbiIsImV4cG9ydCBmdW5jdGlvbiBhZGRFdmVudHModGFyZ2V0LCBldmVudHMpIHtcbiAgZm9yIChjb25zdCB0eXBlIGluIGV2ZW50cykge1xuICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50c1t0eXBlXSwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIHtcbiAgICByZW1vdmUoKSB7XG4gICAgICBmb3IgKGNvbnN0IHR5cGUgaW4gZXZlbnRzKSB7XG4gICAgICAgIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGV2ZW50c1t0eXBlXSwgZmFsc2UpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRLZXkoZXZlbnQpIHtcbiAgcmV0dXJuIHtcbiAgICAzNzogJ2xlZnQnLFxuICAgIDM4OiAndXAnLFxuICAgIDM5OiAncmlnaHQnLFxuICAgIDQwOiAnZG93bicsXG4gICAgMTM6ICdlbnRlcidcbiAgfVtldmVudC5rZXlDb2RlXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0S2V5TmF2aWdhdGlvbihldmVudCkge1xuICBjb25zdCBrZXkgPSBnZXRLZXkoZXZlbnQpXG4gIHJldHVybiB7XG4gICAgaG9yOiB7IGxlZnQ6IC0xLCByaWdodDogMSB9W2tleV0gfHwgMCxcbiAgICB2ZXI6IHsgdXA6IC0xLCBkb3duOiAxIH1ba2V5XSB8fCAwLFxuICAgIGVudGVyOiBrZXkgPT09ICdlbnRlcidcbiAgfVxufVxuIiwiPCEtLSBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpLyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10cmlnZ2VyLWNvbnRhaW5lclxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtaWY9XCJhbHdheXNTaG93XCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdjbGljaydcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgQGNsaWNrPVwib25DbGlja1wiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIC5kaXRvLXRyaWdnZXIoXG4gICAgdi1lbHNlLWlmPVwidHJpZ2dlciA9PT0gJ2hvdmVyJ1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgICBAbW91c2VlbnRlcj1cIm9uSG92ZXIodHJ1ZSlcIlxuICAgIEBtb3VzZWxlYXZlPVwib25Ib3ZlcihmYWxzZSlcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdmb2N1cycgfHwgdHJpZ2dlciA9PT0gJ2Fsd2F5cydcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gIClcbiAgICBzbG90KG5hbWU9XCJ0cmlnZ2VyXCIpXG4gIFRyYW5zaXRpb24oOm5hbWU9XCJ0cmFuc2l0aW9uXCIpXG4gICAgLmRpdG8tcG9wdXAoXG4gICAgICB2LWlmPVwidHJpZ2dlciA9PT0gJ2hvdmVyJ1wiXG4gICAgICB2LXNob3c9XCJzaG93UG9wdXBcIlxuICAgICAgcmVmPVwicG9wdXBcIlxuICAgICAgOmNsYXNzPVwicG9wdXBDbGFzc1wiXG4gICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICAgIEBtb3VzZWVudGVyPVwib25Ib3Zlcih0cnVlKVwiXG4gICAgICBAbW91c2VsZWF2ZT1cIm9uSG92ZXIoZmFsc2UpXCJcbiAgICApXG4gICAgICBzbG90KFxuICAgICAgICB2LWlmPVwic2hvd1BvcHVwXCJcbiAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgIClcbiAgICAuZGl0by1wb3B1cChcbiAgICAgIHYtZWxzZVxuICAgICAgdi1zaG93PVwic2hvd1BvcHVwXCJcbiAgICAgIHJlZj1cInBvcHVwXCJcbiAgICAgIDpjbGFzcz1cInBvcHVwQ2xhc3NcIlxuICAgICAgOnN0eWxlPVwicG9wdXBTdHlsZVwiXG4gICAgKVxuICAgICAgc2xvdChcbiAgICAgICAgdi1pZj1cInNob3dQb3B1cFwiXG4gICAgICAgIG5hbWU9XCJwb3B1cFwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNTdHJpbmcsIGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBhZGRFdmVudHMgfSBmcm9tICcuLi91dGlscy9ldmVudC5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWyd1cGRhdGU6c2hvdyddLFxuXG4gIHByb3BzOiB7XG4gICAgdHJpZ2dlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdjbGljaycgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20nIH0sXG4gICAgc2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdGFyZ2V0OiB7IHR5cGU6IFtTdHJpbmcsIEhUTUxFbGVtZW50XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGN1c3RvbUNsYXNzOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHpJbmRleDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfSxcbiAgICBrZWVwSW5WaWV3OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBoaWRlV2hlbkNsaWNrT3V0c2lkZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgYWx3YXlzU2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvdmVyOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaGlkZURlbGF5OiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBwb3B1cFBsYWNlbWVudDogdGhpcy5wbGFjZW1lbnRcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0cmlnZ2VyQ2xhc3MoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by10cmlnZ2VyLWRpc2FibGVkJzogdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwb3B1cENsYXNzKCkge1xuICAgICAgY29uc3QgY2xhc3NlcyA9IHtcbiAgICAgICAgW2BkaXRvLXBvcHVwLSR7aHlwaGVuYXRlKHRoaXMucGxhY2VtZW50KX1gXTogdHJ1ZVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY3VzdG9tQ2xhc3MpIHtcbiAgICAgICAgY2xhc3Nlc1t0aGlzLmN1c3RvbUNsYXNzXSA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGFzc2VzXG4gICAgfSxcblxuICAgIHBvcHVwU3R5bGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy56SW5kZXggPyBgei1pbmRleDogJHt0aGlzLnpJbmRleH1gIDogJydcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvdyB8fCB0aGlzLmFsd2F5c1Nob3dcbiAgICB9LFxuXG4gICAgc2hvd1BvcHVwKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgdG8pXG4gICAgICAgIGlmICh0bykge1xuICAgICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHRoaXMudXBkYXRlUG9zaXRpb24oKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIGNvbnN0IHsgdHJpZ2dlciwgcG9wdXAgfSA9IHRoaXMuJHJlZnNcbiAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnZm9jdXMnKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSB0cmlnZ2VyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0LCB0ZXh0YXJlYScpXG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIHRoaXMuZm9jdXNFdmVudHMgPSBhZGRFdmVudHModGFyZ2V0LCB7XG4gICAgICAgICAgZm9jdXM6ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgYmx1cjogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5oaWRlV2hlbkNsaWNrT3V0c2lkZSAmJiAhdGhpcy5hbHdheXNTaG93KSB7XG4gICAgICAvLyBVc2UgJ21vdXNldXAnIGluc3RlYWQgb2YgJ2NsaWNrJywgc2luY2UgY2xpY2sgYXBwZWFycyB0byBoYXBwZW4gYWZ0ZXJcbiAgICAgIC8vIHRoZSBET00gaW5zaWRlIG9mIHBvcHVwcyBjb3VsZCBjaGFuZ2UgaW4gYSB3YXkgc28gdGhhdCB0aGUgY2hlY2tcbiAgICAgIC8vIGBwb3B1cC5jb250YWlucyhldmVudC50YXJnZXQpYCB3b3VsZCBmYWlsOlxuICAgICAgdGhpcy5jbG9zZUV2ZW50cyA9IGFkZEV2ZW50cyh3aW5kb3csIHtcbiAgICAgICAgbW91c2V1cDogZXZlbnQgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwICYmXG4gICAgICAgICAgICAhcG9wdXAuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgICAgICAgIXRyaWdnZXIuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBibHVyOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFsd2F5c1Nob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuc2hvd1BvcHVwID0gdGhpcy5zaG93XG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuZm9jdXNFdmVudHM/LnJlbW92ZSgpXG4gICAgdGhpcy5jbG9zZUV2ZW50cz8ucmVtb3ZlKClcbiAgICB0aGlzLm1vdXNlTGVhdmVUaW1lciA9IG51bGxcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdXBkYXRlUG9zaXRpb24oKSB7XG4gICAgICBjb25zdCB7IHRyaWdnZXIsIHBvcHVwIH0gPSB0aGlzLiRyZWZzXG4gICAgICBpZiAodGhpcy5zaG93ICYmIHBvcHVwLm9mZnNldFdpZHRoID09PSAwKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVQb3NpdGlvbigpLCAwKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY29uc3QgdGFyZ2V0ID0gaXNTdHJpbmcodGhpcy50YXJnZXQpXG4gICAgICAgID8gdGhpcy4kcmVmc1t0aGlzLnRhcmdldF1cbiAgICAgICAgOiB0aGlzLnRhcmdldFxuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAvLyBBY3R1YWxseSByZXNpemUgdGhlIHBvcHVwJ3MgZmlyc3QgY2hpbGQsIHNvIHRoZXkgY2FuIHNldCBzaXplIGxpbWl0cy5cbiAgICAgICAgY29uc3QgZWwgPSB0YXJnZXQgPT09IHBvcHVwID8gdHJpZ2dlciA6IHBvcHVwLmZpcnN0RWxlbWVudENoaWxkXG4gICAgICAgIGlmIChlbCkge1xuICAgICAgICAgIGVsLnN0eWxlLndpZHRoID0gZ2V0Q29tcHV0ZWRTdHlsZSh0YXJnZXQpLndpZHRoXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgYm91bmRzID0gKHRhcmdldCB8fCB0cmlnZ2VyKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgY29uc3QgdHJpZ2dlckxlZnQgPSBib3VuZHMubGVmdCArIHdpbmRvdy5zY3JvbGxYXG4gICAgICBjb25zdCB0cmlnZ2VyVG9wID0gYm91bmRzLnRvcCArIHdpbmRvdy5zY3JvbGxZXG4gICAgICBjb25zdCB0cmlnZ2VyV2lkdGggPSBib3VuZHMud2lkdGhcbiAgICAgIGNvbnN0IHRyaWdnZXJIZWlnaHQgPSBib3VuZHMuaGVpZ2h0XG4gICAgICBjb25zdCBwb3B1cFdpZHRoID0gcG9wdXAub2Zmc2V0V2lkdGhcbiAgICAgIGNvbnN0IHBvcHVwSGVpZ2h0ID0gcG9wdXAub2Zmc2V0SGVpZ2h0XG5cbiAgICAgIGxldCBbcGFydDEsIHBhcnQyXSA9IHRoaXMucG9wdXBQbGFjZW1lbnQuc3BsaXQoJy0nKSB8fCBbXVxuICAgICAgaWYgKHRoaXMua2VlcEluVmlldykge1xuICAgICAgICBjb25zdCB3aW5XaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoXG4gICAgICAgIGNvbnN0IHdpbkhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodFxuICAgICAgICBpZiAocGFydDEgPT09ICd0b3AnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJUb3AgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDEgPSAnYm90dG9tJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICBpZiAod2luSGVpZ2h0IC0gdHJpZ2dlclRvcCAtIHRyaWdnZXJIZWlnaHQgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDEgPSAndG9wJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgaWYgKHRyaWdnZXJMZWZ0IDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDEgPSAncmlnaHQnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQxID09PSAncmlnaHQnKSB7XG4gICAgICAgICAgaWYgKHdpbldpZHRoIC0gdHJpZ2dlckxlZnQgLSB0cmlnZ2VyV2lkdGggPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MSA9ICdsZWZ0J1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJ0MiA9PT0gJ3RvcCcpIHtcbiAgICAgICAgICBpZiAod2luSGVpZ2h0IC0gdHJpZ2dlclRvcCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdib3R0b20nXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAnYm90dG9tJykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyVG9wICsgdHJpZ2dlckhlaWdodCA8IHBvcHVwSGVpZ2h0KSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICd0b3AnXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBhcnQyID09PSAnbGVmdCcpIHtcbiAgICAgICAgICBpZiAod2luV2lkdGggLSB0cmlnZ2VyTGVmdCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ3JpZ2h0J1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyTGVmdCArIHRyaWdnZXJXaWR0aCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQyID0gJ2xlZnQnXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCBsZWZ0ID0gMFxuICAgICAgbGV0IHRvcCA9IDBcbiAgICAgIHN3aXRjaCAocGFydDEpIHtcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICB0b3AgLT0gcG9wdXBIZWlnaHRcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICBsZWZ0IC09IHBvcHVwV2lkdGhcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgbGVmdCArPSB0cmlnZ2VyV2lkdGhcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgIHRvcCArPSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAocGFydDIpIHtcbiAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgIGxlZnQgLT0gcG9wdXBXaWR0aCAtIHRyaWdnZXJXaWR0aFxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgdG9wIC09IHBvcHVwSGVpZ2h0IC0gdHJpZ2dlckhlaWdodFxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb3Zlcikge1xuICAgICAgICBpZiAocGFydDEgPT09ICd0b3AnKSB7XG4gICAgICAgICAgdG9wICs9IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICB0b3AgLT0gdHJpZ2dlckhlaWdodFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldCAhPT0gdHJpZ2dlcikge1xuICAgICAgICBjb25zdCB0cmlnZ2VyQm91bmRzID0gdHJpZ2dlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICBsZWZ0ICs9IHRyaWdnZXJMZWZ0IC0gdHJpZ2dlckJvdW5kcy5sZWZ0XG4gICAgICAgIHRvcCArPSB0cmlnZ2VyVG9wIC0gdHJpZ2dlckJvdW5kcy50b3BcbiAgICAgIH1cbiAgICAgIHBvcHVwLnN0eWxlLmxlZnQgPSBgJHtsZWZ0fXB4YFxuICAgICAgcG9wdXAuc3R5bGUudG9wID0gYCR7dG9wfXB4YFxuICAgIH0sXG5cbiAgICBvbkNsaWNrKCkge1xuICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuc2hvd1BvcHVwID0gIXRoaXMuc2hvd1BvcHVwXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uSG92ZXIoZW50ZXIpIHtcbiAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5tb3VzZUxlYXZlVGltZXIpXG4gICAgICAgIGlmIChlbnRlcikge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLmhpZGVEZWxheSkge1xuICAgICAgICAgICAgdGhpcy5tb3VzZUxlYXZlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgICAgfSwgdGhpcy5oaWRlRGVsYXkpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5AaW1wb3J0ICcuLi9zdHlsZXMvdHJhbnNpdGlvbnMvaW5kZXguc2Nzcyc7XG5cbi5kaXRvLXRyaWdnZXItY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uZGl0by10cmlnZ2VyLWRpc2FibGVkIHtcbiAgY29sb3I6ICRjb2xvci1kaXNhYmxlZDtcbiAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICBjdXJzb3I6IGRlZmF1bHQ7XG5cbiAgKiB7XG4gICAgY3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnQ7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgICAmOmZvY3VzIHtcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLXBvcHVwIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6IDEwMDA7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWlucHV0XG4gIHNsb3QobmFtZT1cImJlZm9yZVwiKVxuICBpbnB1dChcbiAgICA6aWQ9XCJpZFwiXG4gICAgcmVmPVwiaW5wdXRcIlxuICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgIDp0eXBlPVwidHlwZVwiXG4gICAgOm5hbWU9XCJuYW1lXCJcbiAgICA6dGl0bGU9XCJ0aXRsZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpyZWFkb25seT1cInJlYWRvbmx5XCJcbiAgICA6YXV0b2ZvY3VzPVwiYXV0b2ZvY3VzXCJcbiAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgOmF1dG9jb21wbGV0ZT1cImF1dG9jb21wbGV0ZVwiXG4gICAgOmFyaWEtbGFiZWw9XCJ0aXRsZVwiXG4gICAgdi1iaW5kPVwiJGF0dHJzXCJcbiAgKVxuICBzbG90KG5hbWU9XCJhZnRlclwiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnXSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogW1N0cmluZywgTnVtYmVyXSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHR5cGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAndGV4dCcgfSxcbiAgICBpZDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBuYW1lOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRpdGxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgcmVhZG9ubHk6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhdXRvZm9jdXM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBhdXRvY29tcGxldGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnb2ZmJyB9XG4gICAgLypcbiAgICBjbGVhcmFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICAgIHN1ZmZpeEljb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgcHJlZml4SWNvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICAgICovXG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLm1vZGVsVmFsdWUsXG4gICAgICBob3ZlcmluZzogZmFsc2UsXG4gICAgICBmb2N1c2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNpemUoKSB7XG4gICAgICAvLyBEZXRlcm1pbmUgc2l6ZSBiYXNlZCBvbiBtaW4gJiBtYXggc2V0dGluZ3MsIGlmIHRoZXkncmUgcHJvdmlkZWQuXG4gICAgICBjb25zdCB7IHNpemUsIG1pbiwgbWF4IH0gPSB0aGlzLiRhdHRyc1xuICAgICAgY29uc3QgZ2V0TGVuZ3RoID0gdmFsdWUgPT4gKHZhbHVlICE9IG51bGwgPyBgJHt2YWx1ZX1gLmxlbmd0aCA6IDApXG4gICAgICByZXR1cm4gc2l6ZSB8fCBnZXRMZW5ndGgobWluKSB8fCBnZXRMZW5ndGgobWF4KSB8fCB1bmRlZmluZWRcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0b1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUoY3VycmVudFZhbHVlKSB7XG4gICAgICBpZiAoY3VycmVudFZhbHVlICE9PSB0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCBjdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWlucHV0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgaW5wdXQge1xuICAgIC8vIEluaGVyaXQgYWxsIHN0eWxpbmcgZnJvbSAuZGl0by1pbnB1dFxuICAgIGFsbDogaW5oZXJpdDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyOiAwO1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPCEtLSBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpLyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5UcmlnZ2VyLmRpdG8tZGF0ZS1waWNrZXIoXG4gIHJlZj1cInRyaWdnZXJcIlxuICB2LW1vZGVsOnNob3c9XCJzaG93UG9wdXBcIlxuICB0cmlnZ2VyPVwiY2xpY2tcIlxuICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbilcbiAgdGVtcGxhdGUoI3RyaWdnZXIpXG4gICAgSW5wdXRGaWVsZC5kaXRvLWRhdGUtcGlja2VyLWlucHV0KFxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRUZXh0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIHJlYWRvbmx5XG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIlxuICAgICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQgfVwiXG4gICAgICBAZm9jdXM9XCJpbnB1dEZvY3VzZWQgPSB0cnVlXCJcbiAgICAgIEBibHVyPVwiaW5wdXRGb2N1c2VkID0gZmFsc2VcIlxuICAgICAgQGtleWRvd249XCJvbktleURvd25cIlxuICAgIClcbiAgLy8gaWNvbih0eXBlPVwiY2FsZW5kYXJcIiA6Y29sb3I9XCJpY29uQ29sb3JcIilcbiAgdGVtcGxhdGUoI3BvcHVwKVxuICAgIENhbGVuZGFyLmRpdG8tZGF0ZS1waWNrZXItcG9wdXAoXG4gICAgICByZWY9XCJjYWxlbmRhclwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHYtYmluZD1cInsgbG9jYWxlLCBkaXNhYmxlZERhdGUgfVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGZvcm1hdCwgZGVmYXVsdEZvcm1hdHMgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IFRyaWdnZXIgZnJvbSAnLi9UcmlnZ2VyLnZ1ZSdcbmltcG9ydCBDYWxlbmRhciBmcm9tICcuL0NhbGVuZGFyLnZ1ZSdcbmltcG9ydCBJbnB1dEZpZWxkIGZyb20gJy4vSW5wdXRGaWVsZC52dWUnXG5pbXBvcnQgeyBnZXRLZXlOYXZpZ2F0aW9uIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnQuanMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBUcmlnZ2VyLCBDYWxlbmRhciwgSW5wdXRGaWVsZCB9LFxuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZScsICd1cGRhdGU6c2hvdycsICdmb2N1cycsICdibHVyJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlbWVudDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdib3R0b20tbGVmdCcgfSxcbiAgICBwbGFjZWhvbGRlcjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZGF0ZUZvcm1hdDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+IGRlZmF1bHRGb3JtYXRzLmRhdGUgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiAndHJpZ2dlcicgfSxcbiAgICBkaXNhYmxlZERhdGU6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMubW9kZWxWYWx1ZSxcbiAgICAgIHNob3dQb3B1cDogdGhpcy5zaG93LFxuICAgICAgaW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGNoYW5nZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0Rm9jdXNlZCB8fCB0aGlzLnNob3dQb3B1cFxuICAgIH0sXG5cbiAgICBjdXJyZW50VGV4dCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGZvcm1hdCh0aGlzLmN1cnJlbnRWYWx1ZSwge1xuICAgICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgICAgZGF0ZTogdGhpcy5kYXRlRm9ybWF0LFxuICAgICAgICAgIHRpbWU6IGZhbHNlXG4gICAgICAgIH0pIHx8ICcnXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0b1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUoY3VycmVudFZhbHVlKSB7XG4gICAgICBpZiAoK2N1cnJlbnRWYWx1ZSAhPT0gK3RoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZWQgPSB0cnVlXG4gICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCBjdXJyZW50VmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93XG4gICAgfSxcblxuICAgIHNob3dQb3B1cCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6c2hvdycsIHRvKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQodG8gPyAnZm9jdXMnIDogJ2JsdXInKVxuICAgICAgICBpZiAoIXRvICYmIHRoaXMuY2hhbmdlZCkge1xuICAgICAgICAgIC8vIFRPRE86IFRoaXMgc2VlbXMgdG8gY29udHJhZGljdCB0aGUgYGN1cnJlbnRWYWx1ZSgpYCB3YXRjaGVyIGFib3ZlLlxuICAgICAgICAgIC8vICAgICAgIElzIHRoaXMgbmVlZGVkIGF0IGFsbD9cbiAgICAgICAgICB0aGlzLmNoYW5nZWQgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgdGhpcy5jdXJyZW50VmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uS2V5RG93bihldmVudCkge1xuICAgICAgaWYgKHRoaXMuJHJlZnMuY2FsZW5kYXI/Lm5hdmlnYXRlKGdldEtleU5hdmlnYXRpb24oZXZlbnQpKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZGF0ZS1waWNrZXIge1xuICBtaW4td2lkdGg6IDEwZW07XG5cbiAgLmRpdG8taW5wdXQge1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59XG5cbi5kaXRvLWRhdGUtcGlja2VyLXBvcHVwIHtcbiAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luO1xufVxuPC9zdHlsZT5cbiIsImV4cG9ydCBmdW5jdGlvbiBzY3JvbGxUbyhlbGVtZW50LCB0bywgZHVyYXRpb24pIHtcbiAgY29uc3QgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gKFxuICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHxcbiAgICBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gc2V0VGltZW91dChhcmd1bWVudHNbMF0sIDEwKVxuICAgIH1cbiAgKVxuICBpZiAoZHVyYXRpb24gPD0gMCkge1xuICAgIGVsZW1lbnQuc2Nyb2xsVG9wID0gdG9cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBkaWZmZXJlbmNlID0gdG8gLSBlbGVtZW50LnNjcm9sbFRvcFxuICAgIGNvbnN0IHBlclRpY2sgPSBkaWZmZXJlbmNlIC8gZHVyYXRpb24gKiAxMFxuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICBlbGVtZW50LnNjcm9sbFRvcCA9IGVsZW1lbnQuc2Nyb2xsVG9wICsgcGVyVGlja1xuICAgICAgaWYgKGVsZW1lbnQuc2Nyb2xsVG9wID09PSB0bykgcmV0dXJuXG4gICAgICBzY3JvbGxUbyhlbGVtZW50LCB0bywgZHVyYXRpb24gLSAxMClcbiAgICB9KVxuICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gc2V0U2VsZWN0aW9uKGZpZWxkLCBzdGFydCwgZW5kKSB7XG4gIGlmIChmaWVsZC5jcmVhdGVUZXh0UmFuZ2UpIHtcbiAgICBjb25zdCByYW5nZSA9IGZpZWxkLmNyZWF0ZVRleHRSYW5nZSgpXG4gICAgcmFuZ2UuY29sbGFwc2UodHJ1ZSlcbiAgICByYW5nZS5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIHN0YXJ0KVxuICAgIHJhbmdlLm1vdmVFbmQoJ2NoYXJhY3RlcicsIGVuZClcbiAgICByYW5nZS5zZWxlY3QoKVxuICAgIGZpZWxkLmZvY3VzKClcbiAgfSBlbHNlIGlmIChmaWVsZC5zZXRTZWxlY3Rpb25SYW5nZSkge1xuICAgIGZpZWxkLmZvY3VzKClcbiAgICBmaWVsZC5zZXRTZWxlY3Rpb25SYW5nZShzdGFydCwgZW5kKVxuICB9IGVsc2UgaWYgKCdzZWxlY3Rpb25TdGFydCcgaW4gZmllbGQpIHtcbiAgICBmaWVsZC5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0XG4gICAgZmllbGQuc2VsZWN0aW9uRW5kID0gZW5kXG4gICAgZmllbGQuZm9jdXMoKVxuICB9XG59XG4iLCI8IS0tIERlcml2ZWQgZnJvbSBBVFVJLCBhbmQgZnVydGhlciBleHRlbmRlZDogaHR0cHM6Ly9hbGlxaW4uZ2l0aHViLmlvL2F0dWkvIC0tPlxuPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblRyaWdnZXIuZGl0by10aW1lLXBpY2tlcihcbiAgcmVmPVwidHJpZ2dlclwiXG4gIHYtbW9kZWw6c2hvdz1cInNob3dQb3B1cFwiXG4gIHRyaWdnZXI9XCJjbGlja1wiXG4gIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgcGxhY2VtZW50LCBkaXNhYmxlZCwgdGFyZ2V0IH1cIlxuKVxuICB0ZW1wbGF0ZSgjdHJpZ2dlcilcbiAgICBJbnB1dEZpZWxkLmRpdG8tdGltZS1waWNrZXItaW5wdXQoXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFRleHRcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgcmVhZG9ubHlcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBzaG93UG9wdXAgfVwiXG4gICAgICB2LWJpbmQ9XCJ7IHBsYWNlaG9sZGVyLCBkaXNhYmxlZCB9XCJcbiAgICAgIEBmb2N1cz1cImlucHV0Rm9jdXNlZCA9IHRydWVcIlxuICAgICAgQGJsdXI9XCJpbnB1dEZvY3VzZWQgPSBmYWxzZVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgKVxuICAgIC8vLSBpY29uKHR5cGU9XCJ0aW1lXCJcbiAgICAvLy0gOmNvbG9yPVwiZGlzYWJsZWQgPyAnI2JmYmZiZicgOiAodGV4dCA/ICcjNjY2JyA6ICcjYmZiZmJmJylcIlxuICAgIC8vLSApXG4gIHRlbXBsYXRlKCNwb3B1cClcbiAgICAuZGl0by10aW1lLXBpY2tlci1wb3B1cFxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1ob3VyKFxuICAgICAgICAgIHJlZj1cImhvdXJcIlxuICAgICAgICAgIEBtb3VzZW92ZXI9XCJzZWxlY3Rpb24gPSAwXCJcbiAgICAgICAgKVxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiAyNFwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgbGkoXG4gICAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRIb3VyKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBob3VyID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cImhvdXIgPSBpbmRleCAtIDFcIlxuICAgICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItbWludXRlKFxuICAgICAgICAgIHJlZj1cIm1pbnV0ZVwiXG4gICAgICAgICAgQG1vdXNlb3Zlcj1cInNlbGVjdGlvbiA9IDFcIlxuICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImluZGV4IGluIDYwXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBsaShcbiAgICAgICAgICAgICAgdi1pZj1cIiFkaXNhYmxlZE1pbnV0ZShpbmRleCAtIDEpXCJcbiAgICAgICAgICAgICAgOmNsYXNzPVwieyBzZWxlY3RlZDogbWludXRlID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cIm1pbnV0ZSA9IGluZGV4IC0gMVwiXG4gICAgICAgICAgICApIHt7IGxlZnRQYWQoaW5kZXggLSAxKSB9fVxuICAgICAgLmRpdG8tdGltZS1waWNrZXItcGFuZWxcbiAgICAgICAgdWwuZGl0by10aW1lLXBpY2tlci1zZWNvbmQoXG4gICAgICAgICAgcmVmPVwic2Vjb25kXCJcbiAgICAgICAgICBAbW91c2VvdmVyPVwic2VsZWN0aW9uID0gMlwiXG4gICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtZm9yPVwiaW5kZXggaW4gNjBcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIGxpKFxuICAgICAgICAgICAgICB2LWlmPVwiIWRpc2FibGVkU2Vjb25kKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBzZWNvbmQgPT09IGluZGV4IC0gMSB9XCJcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2Vjb25kID0gaW5kZXggLSAxXCJcbiAgICAgICAgICAgICkge3sgbGVmdFBhZChpbmRleCAtIDEpIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IFRyaWdnZXIgZnJvbSAnLi9UcmlnZ2VyLnZ1ZSdcbmltcG9ydCBJbnB1dEZpZWxkIGZyb20gJy4vSW5wdXRGaWVsZC52dWUnXG5pbXBvcnQgeyBjb3B5RGF0ZSB9IGZyb20gJy4uL3V0aWxzL2RhdGUuanMnXG5pbXBvcnQgeyBzY3JvbGxUbyB9IGZyb20gJy4uL3V0aWxzL3Njcm9sbC5qcydcbmltcG9ydCB7IHNldFNlbGVjdGlvbiB9IGZyb20gJy4uL3V0aWxzL3NlbGVjdGlvbi5qcydcbmltcG9ydCB7IGdldEtleU5hdmlnYXRpb24gfSBmcm9tICcuLi91dGlscy9ldmVudC5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIElucHV0RmllbGQgfSxcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAndXBkYXRlOnNob3cnLCAnY2hhbmdlJywgJ2ZvY3VzJywgJ2JsdXInXSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbS1sZWZ0JyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRhcmdldDogeyB0eXBlOiBbU3RyaW5nLCBIVE1MRWxlbWVudF0sIGRlZmF1bHQ6ICd0cmlnZ2VyJyB9LFxuICAgIGRpc2FibGVkSG91cjogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBkaXNhYmxlZE1pbnV0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBkaXNhYmxlZFNlY29uZDogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgc2hvd1BvcHVwOiB0aGlzLnNob3csXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgc2VsZWN0aW9uOiAwLFxuICAgICAgY2hhbmdlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb2N1c2VkIHx8IHRoaXMuc2hvd1BvcHVwXG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFZhbHVlXG4gICAgICAgID8gYCR7XG4gICAgICAgICAgICB0aGlzLmxlZnRQYWQodGhpcy5ob3VyKVxuICAgICAgICAgIH06JHtcbiAgICAgICAgICAgIHRoaXMubGVmdFBhZCh0aGlzLm1pbnV0ZSlcbiAgICAgICAgICB9OiR7XG4gICAgICAgICAgICB0aGlzLmxlZnRQYWQodGhpcy5zZWNvbmQpXG4gICAgICAgICAgfWBcbiAgICAgICAgOiAnJ1xuICAgIH0sXG5cbiAgICBjdXJyZW50RGF0ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlIHx8XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBEYXRlKCkgb2JqZWN0IHdpdGggdGhlIHRpbWUgc2V0IHRvIDAsIHRvIGJlIHVzZWQgd2hlblxuICAgICAgICAvLyBmaXJzdCBzZXR0aW5nIGFueSBvZiB0aGUgdGltZXMsIGZvciBtZWFuaW5nZnVsIGRhdGVzIGluIGNhc2UgdGhlXG4gICAgICAgIC8vIG9iamVjdCBpcyBzaGFyZWQgd2l0aCBhIERhdGVQaWNrZXIsIGUuZy4gdGhyb3VnaCBEYXRlVGltZVBpY2tlci5cbiAgICAgICAgY29weURhdGUobmV3IERhdGUoKSwgeyBob3VyOiAwLCBtaW51dGU6IDAsIHNlY29uZDogMCwgbWlsbGlzZWNvbmQ6IDAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaG91cjoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRIb3VycygpXG4gICAgICB9LFxuXG4gICAgICBzZXQoaG91cikge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBob3VyIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1pbnV0ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRNaW51dGVzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChtaW51dGUpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgbWludXRlIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlY29uZDoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50RGF0ZS5nZXRTZWNvbmRzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChzZWNvbmQpIHtcbiAgICAgICAgdGhpcy5zZXRUaW1lKHsgc2Vjb25kIH0pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSB0b1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBjdXJyZW50VmFsdWUoZGF0ZSkge1xuICAgICAgaWYgKCtkYXRlICE9PSArdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlZCA9IHRydWVcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCBkYXRlKVxuICAgICAgICB0aGlzLnNjcm9sbEFsbCgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0OiAndXBkYXRlU2VsZWN0aW9uJyxcblxuICAgIHNlbGVjdGlvbjogJ3VwZGF0ZVNlbGVjdGlvbicsXG5cbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAodG8sIGZyb20pIHtcbiAgICAgIGlmICh0bykge1xuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbigpXG4gICAgICAgIHRoaXMuc2Nyb2xsQWxsKDApXG4gICAgICB9XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTpzaG93JywgdG8pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCh0byA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICAgIGlmICghdG8gJiYgdGhpcy5jaGFuZ2VkKSB7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB0aGlzLmN1cnJlbnRWYWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbGVmdFBhZCh2YWx1ZSkge1xuICAgICAgcmV0dXJuICgnMCcgKyB2YWx1ZSkuc2xpY2UoLTIpXG4gICAgfSxcblxuICAgIHNldFRpbWUob3ZlcnJpZGVzKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGNvcHlEYXRlKHRoaXMuY3VycmVudERhdGUsIHtcbiAgICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgICAgICBtaWxsaXNlY29uZDogMFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdXBkYXRlU2VsZWN0aW9uKGZvcmNlID0gZmFsc2UpIHtcbiAgICAgIGlmICh0aGlzLnNob3dQb3B1cCB8fCBmb3JjZSkge1xuICAgICAgICBjb25zdCBzdGFydCA9IDMgKiB0aGlzLnNlbGVjdGlvblxuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiBzZXRTZWxlY3Rpb24odGhpcy4kcmVmcy5pbnB1dCwgc3RhcnQsIHN0YXJ0ICsgMikpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNjcm9sbEFsbChkdXJhdGlvbiA9IDEwMCkge1xuICAgICAgY29uc3Qgc2Nyb2xsID0gKHJlZiwgdmFsdWUpID0+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy4kcmVmc1tyZWZdXG4gICAgICAgIGlmICh0YXJnZXQpIHtcbiAgICAgICAgICAvLyBGaXJzdCBhbmQgbGFzdCBvbmUgYWRkIDMgdGltZXMgdGhlIG1hcmdpblxuICAgICAgICAgIGNvbnN0IGxpbmVIZWlnaHQgPSB0YXJnZXQuc2Nyb2xsSGVpZ2h0IC8gKHRhcmdldC5jaGlsZHJlbi5sZW5ndGggKyA2KVxuICAgICAgICAgIHNjcm9sbFRvKHRhcmdldCwgTWF0aC5yb3VuZCh2YWx1ZSAqIGxpbmVIZWlnaHQpLCBkdXJhdGlvbilcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICBzY3JvbGwoJ2hvdXInLCB0aGlzLmhvdXIpXG4gICAgICAgIHNjcm9sbCgnbWludXRlJywgdGhpcy5taW51dGUpXG4gICAgICAgIHNjcm9sbCgnc2Vjb25kJywgdGhpcy5zZWNvbmQpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbktleURvd24oZXZlbnQpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gWydob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnXVt0aGlzLnNlbGVjdGlvbl1cbiAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICBjb25zdCB7IGhvciwgdmVyLCBlbnRlciB9ID0gZ2V0S2V5TmF2aWdhdGlvbihldmVudClcbiAgICAgICAgaWYgKGhvcikge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zZWxlY3Rpb24gKyBob3JcbiAgICAgICAgICB0aGlzLnNlbGVjdGlvbiA9IHZhbHVlIDwgMCA/IDIgOiB2YWx1ZSA+IDIgPyAwIDogdmFsdWVcbiAgICAgICAgfSBlbHNlIGlmICh2ZXIpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXNbc2VsZWN0ZWRdICsgdmVyXG4gICAgICAgICAgY29uc3QgeyBsZW5ndGggfSA9IHRoaXMuJHJlZnNbc2VsZWN0ZWRdLmNoaWxkcmVuXG4gICAgICAgICAgdGhpc1tzZWxlY3RlZF0gPVxuICAgICAgICAgICAgdmFsdWUgPCAwXG4gICAgICAgICAgICAgID8gdmFsdWUgKyBsZW5ndGhcbiAgICAgICAgICAgICAgOiB2YWx1ZSA+PSBsZW5ndGhcbiAgICAgICAgICAgICAgICA/IHZhbHVlIC0gbGVuZ3RoXG4gICAgICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICB9XG4gICAgICAgIGlmIChlbnRlcikge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG9yIHx8IHZlciB8fCBlbnRlcikge1xuICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKHRydWUpXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLiRyZWZzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdGltZS1waWNrZXIge1xuICAuZGl0by1pbnB1dCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLmRpdG8tdGltZS1waWNrZXItcG9wdXAge1xuICBtYXgtd2lkdGg6IDE2MHB4O1xuICBtYXJnaW46ICRwb3B1cC1tYXJnaW47XG59XG5cbiR0aW1lLXBpY2tlci1saW5lLWhlaWdodDogMjRweDtcblxuLmRpdG8tdGltZS1waWNrZXIge1xuICAuZGl0by1pbnB1dCB7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICAuZGl0by1pY29uLXRpbWUge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogN3B4O1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgIH1cbiAgfVxufVxuXG4uZGl0by10aW1lLXBpY2tlci1wb3B1cCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3c7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5kaXRvLXRpbWUtcGlja2VyLXBvcHVwIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsIHtcbiAgZmxvYXQ6IGxlZnQ7XG4gIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgYm9yZGVyLXdpZHRoOiAwIDFweCAwO1xuICBtYXJnaW4tbGVmdDogLTFweDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgd2lkdGg6IGNhbGMoMTAwJSAvIDMgKyAxcHgpO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICY6bGFzdC1jaGlsZCB7XG4gICAgYm9yZGVyLXJpZ2h0OiAwO1xuICB9XG5cbiAgdWwge1xuICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luOiAwO1xuICAgIC8vIEhpZGUgc2Nyb2xsYmFyOlxuICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAgIHBhZGRpbmc6IDAgMTdweCAwIDA7XG4gICAgaGVpZ2h0OiA3ICogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0O1xuXG4gICAgJiA+IGxpIHtcbiAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBoZWlnaHQ6ICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICAgICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi10b3A6IDMgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIG1hcmdpbi1ib3R0b206IDMgKiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0O1xuICAgICAgfVxuXG4gICAgICAmLnNlbGVjdGVkLFxuICAgICAgJi5zZWxlY3RlZDpob3ZlciB7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIH1cblxuICAgICAgJi5kaXNhYmxlZCB7XG4gICAgICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICAgICAgY29sb3I6ICRjb2xvci1kaXNhYmxlZDtcbiAgICAgIH1cblxuICAgICAgJi5kaXNhYmxlZDpob3ZlciB7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1kYXRlLXRpbWUtcGlja2VyKHJlZj1cInBpY2tlclwiKVxuICAuZGl0by1waWNrZXJzKDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBmb2N1c2VkIH1cIilcbiAgICBEYXRlUGlja2VyKFxuICAgICAgcmVmPVwiZGF0ZVwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHYtbW9kZWw6c2hvdz1cInNob3dEYXRlXCJcbiAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZWhvbGRlciwgbG9jYWxlLCBkYXRlRm9ybWF0LCBkaXNhYmxlZCB9XCJcbiAgICAgIEBmb2N1cz1cImRhdGVGb2N1c2VkID0gdHJ1ZVwiXG4gICAgICBAYmx1cj1cImRhdGVGb2N1c2VkID0gZmFsc2VcIlxuICAgIClcbiAgICBUaW1lUGlja2VyKFxuICAgICAgcmVmPVwidGltZVwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHYtbW9kZWw6c2hvdz1cInNob3dUaW1lXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwiXCJcbiAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1yaWdodFwiXG4gICAgICA6dGFyZ2V0PVwiJHJlZnMucGlja2VyXCJcbiAgICAgIHYtYmluZD1cInsgdHJhbnNpdGlvbiwgZGlzYWJsZWQgfVwiXG4gICAgICBAZm9jdXM9XCJ0aW1lRm9jdXNlZCA9IHRydWVcIlxuICAgICAgQGJsdXI9XCJ0aW1lRm9jdXNlZCA9IGZhbHNlXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZGVmYXVsdEZvcm1hdHMgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERhdGVQaWNrZXIgZnJvbSAnLi9EYXRlUGlja2VyLnZ1ZSdcbmltcG9ydCBUaW1lUGlja2VyIGZyb20gJy4vVGltZVBpY2tlci52dWUnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcG9uZW50czogeyBEYXRlUGlja2VyLCBUaW1lUGlja2VyIH0sXG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ2NoYW5nZScsICdmb2N1cycsICdibHVyJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IERhdGUsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0cmFuc2l0aW9uOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3NsaWRlJyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGVGb3JtYXQ6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiBkZWZhdWx0Rm9ybWF0cy5kYXRlIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMubW9kZWxWYWx1ZSxcbiAgICAgIHNob3dEYXRlOiBmYWxzZSxcbiAgICAgIHNob3dUaW1lOiBmYWxzZSxcbiAgICAgIGRhdGVGb2N1c2VkOiBmYWxzZSxcbiAgICAgIHRpbWVGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGNoYW5nZWQ6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGVGb2N1c2VkIHx8IHRoaXMudGltZUZvY3VzZWRcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZShkYXRlKSB7XG4gICAgICBpZiAoK2RhdGUgIT09ICt0aGlzLm1vZGVsVmFsdWUpIHtcbiAgICAgICAgdGhpcy5jaGFuZ2VkID0gdHJ1ZVxuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIGRhdGUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzZWQodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCh0byA/ICdmb2N1cycgOiAnYmx1cicpXG4gICAgICAgIGlmICghdG8gJiYgdGhpcy5jaGFuZ2VkKSB7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB0aGlzLmN1cnJlbnRWYWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLiRyZWZzLmRhdGUuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy4kcmVmcy5kYXRlLmJsdXIoKVxuICAgICAgdGhpcy4kcmVmcy50aW1lLmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZGF0ZS10aW1lLXBpY2tlciB7XG4gIC5kaXRvLXBpY2tlcnMge1xuICAgIEBleHRlbmQgJWlucHV0O1xuXG4gICAgcGFkZGluZzogMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuXG4gICAgLmRpdG8taW5wdXQge1xuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgIGJvcmRlcjogMDtcbiAgICB9XG4gIH1cblxuICAuZGl0by1kYXRlLXBpY2tlciB7XG4gICAgd2lkdGg6IDYwJTtcbiAgICBtaW4td2lkdGg6IDYuOWVtO1xuXG4gICAgLmRpdG8taW5wdXQge1xuICAgICAgcGFkZGluZy1yaWdodDogMDtcbiAgICB9XG4gIH1cblxuICAuZGl0by10aW1lLXBpY2tlciB7XG4gICAgd2lkdGg6IDQwJTtcbiAgICBtaW4td2lkdGg6IDUuNGVtO1xuXG4gICAgLmRpdG8taW5wdXQge1xuICAgICAgcGFkZGluZy1sZWZ0OiAwO1xuICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmkuZGl0by1pY29uKDpjbGFzcz1cImBkaXRvLWljb24tJHtuYW1lfWBcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgbmFtZToge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi8vIGB5YXJuIGJ1aWxkOmljb25zYCBjb252ZXJ0cyB0aGUgaWNvbiBTVkcgZmlsZXMgdG8gc2lsZW50IGNsYXNzZXMgaW5zaWRlXG4vLyBgc3JjL3N0eWxlcy9taXhpbnMvX2ljb25zLnNjc3NgLCBtYWtpbmcgdGhlbSBhdmFpbGFibGUgdG8gYWxsIG90aGVyIHNhc3Ncbi8vIGNvZGUgdGhyb3VnaCBgX2ltcG9ydHNgLlxuLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byB1c2UgdGhlbSBhcyBub3JtYWwgQ1NTIGNsYXNzZXMsIGNvbnZlcnQgdGhlbSBoZXJlOlxuQGVhY2ggJG5hbWUgaW4gJGljb25zIHtcbiAgLmRpdG8taWNvbi0jeyRuYW1lfSB7XG4gICAgQGV4dGVuZCAlaWNvbi0jeyRuYW1lfTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjwhLS0gZXNsaW50LWRpc2FibGUgdnVlL25vLXRlbXBsYXRlLXNoYWRvdyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1wYWdpbmF0aW9uXG4gIC5kaXRvLXBhZ2luYXRpb24tdG90YWwoXG4gICAgdi1pZj1cInNob3dUb3RhbFwiXG4gIClcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtaWY9XCJ0b3RhbCA+IDBcIlxuICAgICkge3sgZmlyc3QgfX0g4oCTIHt7IGxhc3QgfX1cbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtZWxzZVxuICAgICkgMFxuICAgIHwgLyB7eyB0b3RhbCB9fVxuICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHYtZm9yPVwicGFnZSBpbiBwYWdlUmFuZ2VcIlxuICAgICAgOmNsYXNzPVwiZ2V0UGFnZUNsYXNzKHBhZ2UpXCJcbiAgICAgIDpkaXNhYmxlZD1cInBhZ2UuZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrPVwib25DbGlja1BhZ2UocGFnZSlcIlxuICAgIClcbiAgICAgIHNwYW4oXG4gICAgICAgIHYtaWY9XCJwYWdlLnRleHRcIlxuICAgICAgKSB7eyBwYWdlLnRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTpwYWdlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfSxcbiAgICBwYWdlOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMSB9LFxuICAgIHBhZ2VTaXplOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMTAgfSxcbiAgICBzaG93VG90YWw6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZVJhbmdlOiBbXSxcbiAgICAgIHNob3dQcmV2OiB0cnVlLFxuICAgICAgc2hvd05leHQ6IHRydWUsXG4gICAgICBudW1QYWdlczogMCxcbiAgICAgIGN1cnJlbnRQYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSxcbiAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLnBhZ2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmaXJzdCgpIHtcbiAgICAgIHJldHVybiAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5jdXJyZW50UGFnZVNpemUgKyAxXG4gICAgfSxcblxuICAgIGxhc3QoKSB7XG4gICAgICByZXR1cm4gTWF0aC5taW4odGhpcy5maXJzdCArIHRoaXMuY3VycmVudFBhZ2VTaXplIC0gMSwgdGhpcy50b3RhbClcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB0b3RhbDogJ3VwZGF0ZVBhZ2VSYW5nZScsXG4gICAgc2hvd1ByZXY6ICd1cGRhdGVQYWdlUmFuZ2UnLFxuICAgIHNob3dOZXh0OiAndXBkYXRlUGFnZVJhbmdlJyxcblxuICAgIHBhZ2UocGFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2VcbiAgICB9LFxuXG4gICAgcGFnZVNpemUocGFnZVNpemUpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2VTaXplID0gcGFnZVNpemVcbiAgICB9LFxuXG4gICAgY3VycmVudFBhZ2VTaXplKGN1cnJlbnRQYWdlU2l6ZSkge1xuICAgICAgdGhpcy5udW1QYWdlcyA9IE1hdGguY2VpbCh0aGlzLnRvdGFsIC8gY3VycmVudFBhZ2VTaXplKVxuICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPiB0aGlzLm51bVBhZ2VzKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLm51bVBhZ2VzXG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVBhZ2VSYW5nZSgpXG4gICAgfSxcblxuICAgIGN1cnJlbnRQYWdlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgdGhpcy51cGRhdGVQYWdlUmFuZ2UoKVxuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6cGFnZScsIHRvKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VcbiAgICB0aGlzLmN1cnJlbnRQYWdlU2l6ZSA9IHRoaXMucGFnZVNpemVcbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMudXBkYXRlUGFnZVJhbmdlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25DbGlja1BhZ2UocGFnZSkge1xuICAgICAgaWYgKHBhZ2UuaW5kZXggJiYgIXBhZ2UuZGlzYWJsZWQgJiYgcGFnZS5pbmRleCAhPT0gdGhpcy5jdXJyZW50UGFnZSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZS5pbmRleFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRQYWdlQ2xhc3MocGFnZSkge1xuICAgICAgY29uc3QgY2xhc3NlcyA9IHtcbiAgICAgICAgJ2RpdG8tc2VsZWN0ZWQnOiBwYWdlLmFjdGl2ZVxuICAgICAgfVxuICAgICAgaWYgKHBhZ2UudHlwZSkge1xuICAgICAgICBjbGFzc2VzW2BkaXRvLWJ1dHRvbi0ke3BhZ2UudHlwZX1gXSA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGFzc2VzXG4gICAgfSxcblxuICAgIHVwZGF0ZVBhZ2VSYW5nZSgpIHtcbiAgICAgIGNvbnN0IHsgc2hvd1ByZXYsIHNob3dOZXh0LCB0b3RhbCwgY3VycmVudFBhZ2VTaXplLCBjdXJyZW50UGFnZSB9ID0gdGhpc1xuICAgICAgY29uc3Qgc2hvd0xlbmd0aCA9IHNob3dQcmV2ICsgc2hvd05leHQgKyAxXG4gICAgICBjb25zdCBudW1QYWdlcyA9ICh0aGlzLm51bVBhZ2VzID0gTWF0aC5jZWlsKHRvdGFsIC8gY3VycmVudFBhZ2VTaXplKSlcblxuICAgICAgbGV0IHN0YXJ0ID0gMVxuICAgICAgbGV0IGVuZCA9IDFcbiAgICAgIGlmIChudW1QYWdlcyA8PSBzaG93TGVuZ3RoKSB7XG4gICAgICAgIGVuZCA9IG51bVBhZ2VzXG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQYWdlIDw9IHNob3dQcmV2ICsgMSkge1xuICAgICAgICBlbmQgPSBzaG93TGVuZ3RoXG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQYWdlID49IG51bVBhZ2VzIC0gc2hvd05leHQpIHtcbiAgICAgICAgZW5kID0gbnVtUGFnZXNcbiAgICAgICAgc3RhcnQgPSBudW1QYWdlcyAtIHNob3dMZW5ndGggKyAxXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydCA9IGN1cnJlbnRQYWdlIC0gc2hvd1ByZXZcbiAgICAgICAgZW5kID0gY3VycmVudFBhZ2UgKyBzaG93TmV4dFxuICAgICAgfVxuXG4gICAgICBjb25zdCBwYWdlUmFuZ2UgPSBbXVxuICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICBpbmRleDogY3VycmVudFBhZ2UgLSAxLFxuICAgICAgICB0eXBlOiAncHJldicsXG4gICAgICAgIGRpc2FibGVkOiBjdXJyZW50UGFnZSA8PSAxXG4gICAgICB9KVxuICAgICAgaWYgKHN0YXJ0ID49IDIpIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goeyBpbmRleDogMSwgdGV4dDogMSB9KVxuICAgICAgfVxuICAgICAgaWYgKHN0YXJ0ID4gMikge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE1hdGgubWF4KDEsIGN1cnJlbnRQYWdlIC0gMTApLFxuICAgICAgICAgIHR5cGU6ICdlbGxpcHNpcy1wcmV2J1xuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgIGFjdGl2ZTogaSA9PT0gY3VycmVudFBhZ2VcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPCBudW1QYWdlcyAtIDEpIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICAgIGluZGV4OiBNYXRoLm1pbihudW1QYWdlcywgY3VycmVudFBhZ2UgKyAxMCksXG4gICAgICAgICAgdHlwZTogJ2VsbGlwc2lzLW5leHQnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoZW5kIDw9IG51bVBhZ2VzIC0gMSkge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7IGluZGV4OiBudW1QYWdlcywgdGV4dDogbnVtUGFnZXMgfSlcbiAgICAgIH1cbiAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgaW5kZXg6IGN1cnJlbnRQYWdlICsgMSxcbiAgICAgICAgdHlwZTogJ25leHQnLFxuICAgICAgICBkaXNhYmxlZDogY3VycmVudFBhZ2UgPj0gbnVtUGFnZXNcbiAgICAgIH0pXG5cbiAgICAgIHRoaXMucGFnZVJhbmdlID0gcGFnZVJhbmdlXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYWdpbmF0aW9uIHtcbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1wYWdpbmF0aW9uLXRvdGFsIHtcbiAgICBAaW5jbHVkZSBlbGxpcHNpcztcblxuICAgIG1hcmdpbjogMCAwLjVlbTtcbiAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbiB7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgZWFzZSwgY29sb3IgMHMsIGJhY2tncm91bmQgMHMsIGJvcmRlciAwcztcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgIHBhZGRpbmc6IDAgMC41ZW07XG5cbiAgICAmLXByZXYsXG4gICAgJi1uZXh0IHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIEBleHRlbmQgJWljb24tYXJyb3c7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJi1wcmV2OjpiZWZvcmUge1xuICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xuICAgIH1cblxuICAgICYtZWxsaXBzaXMtcHJldixcbiAgICAmLWVsbGlwc2lzLW5leHQge1xuICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgQGV4dGVuZCAlaWNvbi1lbGxpcHNpcztcbiAgICAgIH1cblxuICAgICAgJjpob3Zlcjo6YmVmb3JlIHtcbiAgICAgICAgQGV4dGVuZCAlaWNvbi1jaGV2cm9ucztcbiAgICAgIH1cblxuICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgIGJvcmRlcjogMDtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICBjb2xvcjogJGNvbG9yLXRleHQ7XG5cbiAgICAgICY6Zm9jdXMge1xuICAgICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIH1cblxuICAgICAgJjphY3RpdmUge1xuICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICAgICAgfVxuICAgIH1cblxuICAgICYtZWxsaXBzaXMtcHJldjo6YmVmb3JlIHtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc3dpdGNoKFxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbilcbiAgLmRpdG8tc3dpdGNoLXBhbmVcbiAgICBpbnB1dChcbiAgICAgIDppZD1cImlkXCJcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtYmluZD1cIiRhdHRyc1wiXG4gICAgICB2LW1vZGVsPVwiY2hlY2tlZFwiXG4gICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgOm5hbWU9XCJuYW1lXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvblxuICAgIHNwYW4uZGl0by1zd2l0Y2gtbGFiZWwoXG4gICAgICB2LWlmPVwibGFiZWxzXCJcbiAgICApXG4gICAgICBzbG90KFxuICAgICAgICB2LWlmPVwiY2hlY2tlZFwiXG4gICAgICAgIG5hbWU9XCJjaGVja2VkXCJcbiAgICAgICkge3sgbGFiZWxzLmNoZWNrZWQgfHwgJ29uJyB9fVxuICAgICAgc2xvdChcbiAgICAgICAgdi1lbHNlXG4gICAgICAgIG5hbWU9XCJ1bmNoZWNrZWRcIlxuICAgICAgKSB7eyBsYWJlbHMudW5jaGVja2VkIHx8ICdvZmYnIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZScsICdjaGFuZ2UnXSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBpZDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBuYW1lOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbGFiZWxzOiB7IHR5cGU6IFtPYmplY3QsIEJvb2xlYW5dLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY2hlY2tlZDogdGhpcy5tb2RlbFZhbHVlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY2xhc3NlcygpIHtcbiAgICAgIGNvbnN0IHsgY2hlY2tlZCwgZGlzYWJsZWQgfSA9IHRoaXNcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWNoZWNrZWQnOiBjaGVja2VkLFxuICAgICAgICAnZGl0by1kaXNhYmxlZCc6IGRpc2FibGVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIGNvbnN0IHsgbGFiZWxzOiB7IGNoZWNrZWQsIHVuY2hlY2tlZCB9ID0ge30gfSA9IHRoaXNcbiAgICAgIC8vIENhbGN1bGF0ZSBgLS1zd2l0Y2gtd2lkdGhgIGluIGByZW1gLCBiYXNlZCBvbiBsYWJlbCBsZW5ndGguXG4gICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1heCgwLCBjaGVja2VkPy5sZW5ndGgsIHVuY2hlY2tlZD8ubGVuZ3RoKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJy0tc3dpdGNoLXdpZHRoJzogbGVuZ3RoID8gYCR7bGVuZ3RoICogMS41fXJlbWAgOiBudWxsXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZShtb2RlbFZhbHVlKSB7XG4gICAgICB0aGlzLmNoZWNrZWQgPSBtb2RlbFZhbHVlXG4gICAgfSxcblxuICAgIGNoZWNrZWQoY2hlY2tlZCkge1xuICAgICAgaWYgKGNoZWNrZWQgIT09IHRoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIGNoZWNrZWQpXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIGNoZWNrZWQpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuJHJlZnMuaW5wdXQuZm9jdXMoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc3dpdGNoIHtcbiAgLy8gVXNlIHdob2xlIG11bHRpcGxlcyBvZiBgcmVtYCBmb3Igc2l6ZXMgYW5kIGBweGAgbWFyZ2lucy9wYWRkaW5nIGFsb25nXG4gIC8vIHdpdGggYGNhbGMoKWAgdG8gZW5kIHVwIHdpdGggZXZlbiBwaXhlbCBzaXplcy5cbiAgLS1zd2l0Y2gtd2lkdGg6IDRlbTtcbiAgLS1zd2l0Y2gtaGVpZ2h0OiAyZW07XG4gIC0tc3dpdGNoLW1hcmdpbjogMnB4O1xuICAtLXN3aXRjaC1wYWRkaW5nOiAzcHg7XG4gIC0tc3dpdGNoLXNwZWVkOiAzMDBtcztcbiAgLS1sYWJlbC1tYXJnaW46IDAuNWVtO1xuICAtLXdpZHRoOiBjYWxjKHZhcigtLXN3aXRjaC13aWR0aCkgLSAyICogdmFyKC0tc3dpdGNoLW1hcmdpbikpO1xuICAtLWhlaWdodDogY2FsYyh2YXIoLS1zd2l0Y2gtaGVpZ2h0KSAtIDIgKiB2YXIoLS1zd2l0Y2gtbWFyZ2luKSk7XG4gIC0tb2Zmc2V0OiBjYWxjKHZhcigtLXdpZHRoKSAtIHZhcigtLWhlaWdodCkpO1xuXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IHZhcigtLXN3aXRjaC1oZWlnaHQpO1xuICAvLyBUbyBtYWtlIGlubGluZSBsYWJlbHMgYXBwZWFyIG9uIGNvbnNpc3RlbnQgYmFzZWxpbmU6XG4gIHZlcnRpY2FsLWFsaWduOiBib3R0b207XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gIC5kaXRvLXN3aXRjaC1wYW5lIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgd2lkdGg6IHZhcigtLXdpZHRoKTtcbiAgICBoZWlnaHQ6IHZhcigtLWhlaWdodCk7XG4gIH1cblxuICAuZGl0by1zd2l0Y2gtcGFuZSxcbiAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICB0b3A6IDUwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG4gIH1cblxuICBpbnB1dCB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGFwcGVhcmFuY2U6IG5vbmU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGJvcmRlci1yYWRpdXM6IDFlbTtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHQ7XG4gICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuM3MsIGJhY2tncm91bmQtY29sb3IgMC4zcztcbiAgfVxuXG4gIC5kaXRvLXN3aXRjaC1idXR0b24ge1xuICAgIC0tc2l6ZTogY2FsYyh2YXIoLS1oZWlnaHQpIC0gMiAqIHZhcigtLXN3aXRjaC1wYWRkaW5nKSk7XG5cbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiB2YXIoLS1zd2l0Y2gtcGFkZGluZyk7XG4gICAgbGVmdDogdmFyKC0tc3dpdGNoLXBhZGRpbmcpO1xuICAgIHdpZHRoOiB2YXIoLS1zaXplKTtcbiAgICBoZWlnaHQ6IHZhcigtLXNpemUpO1xuICAgIGJvcmRlci1yYWRpdXM6IGNhbGModmFyKC0tc2l6ZSkgLyAyKTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gdmFyKC0tc3dpdGNoLXNwZWVkKTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7XG4gIH1cblxuICAuZGl0by1zd2l0Y2gtYnV0dG9uLFxuICAuZGl0by1zd2l0Y2gtbGFiZWwge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG5cbiAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IHZhcigtLWxhYmVsLW1hcmdpbik7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICB9XG5cbiAgJi5kaXRvLWNoZWNrZWQge1xuICAgIGlucHV0IHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuXG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvbiB7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgodmFyKC0tb2Zmc2V0KSk7XG4gICAgfVxuXG4gICAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICAgIGxlZnQ6IHZhcigtLWxhYmVsLW1hcmdpbik7XG4gICAgICByaWdodDogdW5zZXQ7XG4gICAgfVxuICB9XG5cbiAgJi5kaXRvLWRpc2FibGVkIHtcbiAgICBAZXh0ZW5kICVidXR0b24tZGlzYWJsZWQ7XG4gIH1cblxuICAmOmZvY3VzLXdpdGhpbjpub3QoOmhvdmVyKSB7XG4gICAgLmRpdG8tc3dpdGNoLWJ1dHRvbiB7XG4gICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgeyBoIGFzIGNyZWF0ZUVsZW1lbnQsIFRyYW5zaXRpb24gfSBmcm9tICd2dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5mdW5jdGlvbiBUcmFuc2l0aW9uSGVpZ2h0KHsgZW5hYmxlZCB9LCB7IHNsb3RzIH0pIHtcbiAgcmV0dXJuIGVuYWJsZWRcbiAgICA/IGNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgcHJvcHMsIHNsb3RzKVxuICAgIDogc2xvdHMuZGVmYXVsdCgpXG59XG5cblRyYW5zaXRpb25IZWlnaHQucHJvcHMgPSB7XG4gIGVuYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb25IZWlnaHRcblxuY29uc3Qgc2V0U3R5bGUgPSAoZWxlbWVudCwgc3R5bGUpID0+IE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpXG5cbi8vIEZvcmNlIHJlcGFpbnQgdG8gbWFrZSBzdXJlIHRoZSBhbmltYXRpb24gaXMgdHJpZ2dlcmVkIGNvcnJlY3RseS5cbmNvbnN0IGZvcmNlUmVwYWludCA9IGVsZW1lbnQgPT4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5oZWlnaHRcblxuY29uc3QgcHJvcHMgPSB7XG4gIG5hbWU6ICdoZWlnaHQnLFxuXG4gIG9uQWZ0ZXJFbnRlcihlbGVtZW50KSB7XG4gICAgLy8gQSB0aW1lb3V0IGJlZm9yZSBzZXR0aW5nIHN0eWxlIGlzIG9ubHkgcmVhbGx5IG5lZWRlZCBhZnRlciBjYWxscyB0b1xuICAgIC8vIGBmb3JjZVJlcGFpbnQoKWAsIGJ1dCB1c2luZyBvbmUgaGVyZSB0b28gcHJlc2VydmVzIGV4ZWN1dGlvbiBzZXF1ZW5jZSBzb1xuICAgIC8vIHRoYXQgdGhlIGNhbGwgZnJvbSBgZW50ZXIoKWAgY2FuIG5ldmVyIG91dHJ1biB0aGUgb25lIGZyb20gYGFmdGVyRW50ZXIoKWBcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiAnYXV0bycgfSkpXG4gIH0sXG5cbiAgb25FbnRlcihlbGVtZW50KSB7XG4gICAgY29uc3QgeyB3aWR0aCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICAgIHNldFN0eWxlKGVsZW1lbnQsIHtcbiAgICAgIHdpZHRoLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICB2aXNpYmlsaXR5OiAnaGlkZGVuJyxcbiAgICAgIGhlaWdodDogJ2F1dG8nXG4gICAgfSlcbiAgICBjb25zdCB7IGhlaWdodCB9ID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVxuICAgIHNldFN0eWxlKGVsZW1lbnQsIHtcbiAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgcG9zaXRpb246IG51bGwsXG4gICAgICB2aXNpYmlsaXR5OiBudWxsLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0IH0pKVxuICB9LFxuXG4gIG9uTGVhdmUoZWxlbWVudCkge1xuICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBzZXRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiAwIH0pKVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4kZHVyYXRpb246IDAuMTVzO1xuXG4uaGVpZ2h0LWVudGVyLWFjdGl2ZSxcbi5oZWlnaHQtbGVhdmUtYWN0aXZlIHtcbiAgdHJhbnNpdGlvbjogaGVpZ2h0ICRkdXJhdGlvbiAkZWFzZS1vdXQtcXVhcnQ7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5oZWlnaHQtZW50ZXItYWN0aXZlIHtcbiAgYW5pbWF0aW9uOiBzbGlkZS1lbnRlciAkZHVyYXRpb24gJGVhc2Utb3V0LXF1YXJ0O1xufVxuXG4uaGVpZ2h0LWxlYXZlLWFjdGl2ZSB7XG4gIGFuaW1hdGlvbjogc2xpZGUtbGVhdmUgJGR1cmF0aW9uICRlYXNlLW91dC1xdWFydDtcbn1cblxuLmhlaWdodC1lbnRlci1mcm9tLFxuLmhlaWdodC1sZWF2ZS10byB7XG4gIGhlaWdodDogMDtcbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBkZWZpbmVDb21wb25lbnQsIHJlZiwgd2F0Y2gsIG9uU2NvcGVEaXNwb3NlLCBoIH0gZnJvbSAndnVlLWRlbWknO1xuaW1wb3J0IHsgY3JlYXRlRm9jdXNUcmFwIH0gZnJvbSAnZm9jdXMtdHJhcCc7XG5pbXBvcnQgeyB1bnJlZkVsZW1lbnQgfSBmcm9tICdAdnVldXNlL2NvcmUnO1xuXG5jb25zdCBVc2VGb2N1c1RyYXAgPSAvKiBAX19QVVJFX18gKi8gLyogI19fUFVSRV9fICovIGRlZmluZUNvbXBvbmVudCh7XG4gIG5hbWU6IFwiVXNlRm9jdXNUcmFwXCIsXG4gIHByb3BzOiBbXCJhc1wiLCBcIm9wdGlvbnNcIl0sXG4gIHNldHVwKHByb3BzLCB7IHNsb3RzIH0pIHtcbiAgICBsZXQgdHJhcDtcbiAgICBjb25zdCB0YXJnZXQgPSByZWYoKTtcbiAgICBjb25zdCBhY3RpdmF0ZSA9ICgpID0+IHRyYXAgJiYgdHJhcC5hY3RpdmF0ZSgpO1xuICAgIGNvbnN0IGRlYWN0aXZhdGUgPSAoKSA9PiB0cmFwICYmIHRyYXAuZGVhY3RpdmF0ZSgpO1xuICAgIHdhdGNoKFxuICAgICAgKCkgPT4gdW5yZWZFbGVtZW50KHRhcmdldCksXG4gICAgICAoZWwpID0+IHtcbiAgICAgICAgaWYgKCFlbClcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRyYXAgPSBjcmVhdGVGb2N1c1RyYXAoZWwsIHByb3BzLm9wdGlvbnMgfHwge30pO1xuICAgICAgICBhY3RpdmF0ZSgpO1xuICAgICAgfSxcbiAgICAgIHsgZmx1c2g6IFwicG9zdFwiIH1cbiAgICApO1xuICAgIG9uU2NvcGVEaXNwb3NlKCgpID0+IGRlYWN0aXZhdGUoKSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGlmIChzbG90cy5kZWZhdWx0KVxuICAgICAgICByZXR1cm4gaChwcm9wcy5hcyB8fCBcImRpdlwiLCB7IHJlZjogdGFyZ2V0IH0sIHNsb3RzLmRlZmF1bHQoKSk7XG4gICAgfTtcbiAgfVxufSk7XG5cbmV4cG9ydCB7IFVzZUZvY3VzVHJhcCB9O1xuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWRpYWxvZyhcbiAgcmVmPVwiZGlhbG9nXCJcbiAgcm9sZT1cImRpYWxvZ1wiXG4gIGFyaWEtZXhwYW5kZWQ9XCJ0cnVlXCJcbiAgYXJpYS1tb2RhbD1cInRydWVcIlxuICA6c3R5bGU9XCJ7ICctLXdpZHRoJzogYCR7c2V0dGluZ3Mud2lkdGh9cHhgIH1cIlxuICBAbW91c2V1cD1cIm9uTW91c2VVcFwiXG4pXG4gIFVzZUZvY3VzVHJhcC5kaXRvLWRpYWxvZ19fZm9jdXMtdHJhcChcbiAgICA6b3B0aW9ucz1cInsgaW1tZWRpYXRlOiB0cnVlLCBmYWxsYmFja0ZvY3VzOiAoKSA9PiAkcmVmcy5kaWFsb2cgfVwiXG4gIClcbiAgICBmb3JtLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgICAgIEBzdWJtaXQucHJldmVudD1cInN1Ym1pdFwiXG4gICAgKVxuICAgICAgRGl0b1NjaGVtYShcbiAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgICAgIHNjcm9sbGFibGVcbiAgICAgICAgZ2VuZXJhdGVMYWJlbHNcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoI2J1dHRvbnMpXG4gICAgICAgICAgRGl0b0J1dHRvbnMuZGl0by1idXR0b25zLWxhcmdlKFxuICAgICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICAgIDpkYXRhPVwiZGlhbG9nRGF0YVwiXG4gICAgICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNsb25lIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cyB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBVc2VGb2N1c1RyYXAgfSBmcm9tICdAdnVldXNlL2ludGVncmF0aW9ucy91c2VGb2N1c1RyYXAvY29tcG9uZW50J1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9EaWFsb2cnLCB7XG4gIGNvbXBvbmVudHM6IHsgVXNlRm9jdXNUcmFwIH0sXG4gIGVtaXRzOiBbJ3JlbW92ZSddLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRkaWFsb2dDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBjb21wb25lbnRzOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwcm9taXNlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHNldHRpbmdzOiB7XG4gICAgICB0eXBlOiBPYmplY3QsXG4gICAgICBkZWZhdWx0OiAoKSA9PiAoe1xuICAgICAgICB3aWR0aDogNDgwLFxuICAgICAgICBjbGlja1RvQ2xvc2U6IGZhbHNlXG4gICAgICB9KVxuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIC8vIE1ha2Ugc3VyZSBkaWFsb2cgZGF0YSBjb250YWlucyBhbGwgdGhlIGV4cGVjdGVkIGtleXNcbiAgICBjb25zdCBkaWFsb2dEYXRhID0gY2xvbmUodGhpcy5kYXRhKVxuICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgaWYgKCEoa2V5IGluIGRpYWxvZ0RhdGEpKSB7XG4gICAgICAgIGRpYWxvZ0RhdGFba2V5XSA9IG51bGxcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpbmRvd0V2ZW50czogbnVsbCxcbiAgICAgIGRpYWxvZ0RhdGFcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiAnZGlhbG9nJyxcbiAgICAgICAgY29tcG9uZW50czogdGhpcy5jb21wb25lbnRzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhnZXRCdXR0b25TY2hlbWFzKHRoaXMuYnV0dG9ucykpLm1hcChcbiAgICAgICAgICAvLyBQcm9jZXNzIHRoZSBidXR0b24gc2NoZW1hcyB0byBhZGQgZGVmYXVsdCBjbGljayBldmVudHNcbiAgICAgICAgICAvLyBmb3IgYm90aCAnc3VibWl0JyBhbmQgJ2NhbmNlbCcgYnV0dG9uczpcbiAgICAgICAgICAoW2tleSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gJ2NhbmNlbCcgJiYgIXNjaGVtYS5ldmVudHMpIHtcbiAgICAgICAgICAgICAgc2NoZW1hID0ge1xuICAgICAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICAgIGNsaWNrOiAoKSA9PiB0aGlzLmNhbmNlbCgpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gW2tleSwgc2NoZW1hXVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuYnV0dG9uU2NoZW1hcykubGVuZ3RoID4gMFxuICAgIH0sXG5cbiAgICBoYXNDYW5jZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmJ1dHRvblNjaGVtYXMuY2FuY2VsXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy53aW5kb3dFdmVudHMgPSBhZGRFdmVudHMod2luZG93LCB7XG4gICAgICBrZXl1cDogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoKHRoaXMuaGFzQ2FuY2VsIHx8ICF0aGlzLmhhc0J1dHRvbnMpICYmIGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XG4gICAgICAgICAgdGhpcy5jYW5jZWwoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy53aW5kb3dFdmVudHMucmVtb3ZlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVtb3ZlKCkge1xuICAgICAgdGhpcy4kZW1pdCgncmVtb3ZlJylcbiAgICB9LFxuXG4gICAgcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlc29sdmUodmFsdWUpXG4gICAgICB0aGlzLnJlbW92ZSgpXG4gICAgfSxcblxuICAgIHJlamVjdCh2YWx1ZSkge1xuICAgICAgdGhpcy5wcm9taXNlLnJlamVjdCh2YWx1ZSlcbiAgICAgIHRoaXMucmVtb3ZlKClcbiAgICB9LFxuXG4gICAgc3VibWl0KCkge1xuICAgICAgdGhpcy5yZXNvbHZlKHRoaXMuZGlhbG9nRGF0YSlcbiAgICB9LFxuXG4gICAgY2FuY2VsKCkge1xuICAgICAgdGhpcy5yZXNvbHZlKG51bGwpXG4gICAgfSxcblxuICAgIGNsb3NlKCkge1xuICAgICAgdGhpcy5jYW5jZWwoKVxuICAgIH0sXG5cbiAgICBvbk1vdXNlVXAoKSB7XG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5jbGlja1RvQ2xvc2UpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZGlhbG9nIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBkaXNwbGF5OiBmbGV4O1xuICBpbnNldDogMDtcbiAgei1pbmRleDogMjAwMDtcbiAgcGFkZGluZzogJGNvbnRlbnQtcGFkZGluZztcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC8vIFByZXZlbnQgc2Nyb2xsaW5nIG9mIHRoZSBwYWdlIGJlaGluZCB0aGUgZGlhbG9nOlxuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7XG5cbiAgJl9fZm9jdXMtdHJhcCB7XG4gICAgbWF4LWhlaWdodDogMTAwJTtcbiAgfVxuXG4gIC8vIFRPRE86IGAmX19pbm5lcmBcbiAgZm9ybSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBtYXgtd2lkdGg6IHZhcigtLXdpZHRoLCA0ODBweCk7XG4gICAgbWF4LWhlaWdodDogMTAwJTtcbiAgICBib3gtc2hhZG93OiAwIDIwcHggNjBweCAtMnB4IHJnYmEoMjcsIDMzLCA1OCwgMC40KTtcbiAgfVxufVxuXG4uZGl0by1kaWFsb2ctZW50ZXItYWN0aXZlLFxuLmRpdG8tZGlhbG9nLWxlYXZlLWFjdGl2ZSB7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXM7XG5cbiAgZm9ybSB7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMjVzO1xuICB9XG59XG5cbi5kaXRvLWRpYWxvZy1lbnRlci1mcm9tLFxuLmRpdG8tZGlhbG9nLWxlYXZlLXRvIHtcbiAgb3BhY2l0eTogMDtcblxuICBmb3JtIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTIwcHgpO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRvbUhhbmRsZXJzOiBbXVxuICAgIH1cbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgZm9yIChjb25zdCB7IHJlbW92ZSB9IG9mIHRoaXMuZG9tSGFuZGxlcnMpIHtcbiAgICAgIHJlbW92ZSgpXG4gICAgfVxuICAgIHRoaXMuZG9tSGFuZGxlcnMgPSBbXVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBkb21PbihlbGVtZW50LCB0eXBlLCBoYW5kbGVyKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhZGRFdmVudHMoXG4gICAgICAgIGVsZW1lbnQsXG4gICAgICAgIGlzT2JqZWN0KHR5cGUpID8gdHlwZSA6IHsgW3R5cGVdOiBoYW5kbGVyIH1cbiAgICAgIClcbiAgICAgIHRoaXMuZG9tSGFuZGxlcnMucHVzaChyZXN1bHQpXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tcm9vdFxuICBWdWVOb3RpZmljYXRpb25zLmRpdG8tbm90aWZpY2F0aW9ucyhcbiAgICByZWY9XCJub3RpZmljYXRpb25zXCJcbiAgICBwb3NpdGlvbj1cInRvcCByaWdodFwiXG4gICAgY2xhc3Nlcz1cImRpdG8tbm90aWZpY2F0aW9uXCJcbiAgKVxuICBUcmFuc2l0aW9uR3JvdXAobmFtZT1cImRpdG8tZGlhbG9nXCIpXG4gICAgRGl0b0RpYWxvZyhcbiAgICAgIHYtZm9yPVwiKGRpYWxvZywga2V5KSBpbiBkaWFsb2dzXCJcbiAgICAgIDprZXk9XCJrZXlcIlxuICAgICAgOmNvbXBvbmVudHM9XCJkaWFsb2cuY29tcG9uZW50c1wiXG4gICAgICA6YnV0dG9ucz1cImRpYWxvZy5idXR0b25zXCJcbiAgICAgIDpwcm9taXNlPVwiZGlhbG9nLnByb21pc2VcIlxuICAgICAgOmRhdGE9XCJkaWFsb2cuZGF0YVwiXG4gICAgICA6c2V0dGluZ3M9XCJkaWFsb2cuc2V0dGluZ3NcIlxuICAgICAgQHJlbW92ZT1cInJlbW92ZURpYWxvZyhrZXkpXCJcbiAgICApXG4gIERpdG9NZW51XG4gIG1haW4uZGl0by1wYWdlLmRpdG8tc2Nyb2xsLXBhcmVudFxuICAgIERpdG9IZWFkZXIoXG4gICAgICA6c3Bpbm5lcj1cIm9wdGlvbnMuc3Bpbm5lclwiXG4gICAgICA6aXNMb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICApXG4gICAgICBEaXRvQWNjb3VudChcbiAgICAgICAgdi1pZj1cInVzZXJcIlxuICAgICAgKVxuICAgICAgYS5kaXRvLWxvZ2luKFxuICAgICAgICB2LWVsc2UtaWY9XCJhbGxvd0xvZ2luXCJcbiAgICAgICAgQGNsaWNrPVwicm9vdENvbXBvbmVudC5sb2dpbigpXCJcbiAgICAgIClcbiAgICAgICAgc3BhbiBMb2dpblxuICAgIFJvdXRlclZpZXdcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBkZWxlZ2F0ZSBhcyB0aXBweURlbGVnYXRlIH0gZnJvbSAndGlwcHkuanMnXG5pbXBvcnQgeyBhc0FycmF5LCBtYXBDb25jdXJyZW50bHksIHN0cmlwVGFncyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Vc2VyIGZyb20gJy4uL0RpdG9Vc2VyLmpzJ1xuaW1wb3J0IERpdG9WaWV3IGZyb20gJy4uL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlJ1xuaW1wb3J0IERpdG9EaWFsb2cgZnJvbSAnLi9EaXRvRGlhbG9nLnZ1ZSdcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQge1xuICBwcm9jZXNzVmlldyxcbiAgcmVzb2x2ZVNjaGVtYXMsXG4gIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUm9vdCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IERpdG9EaWFsb2cgfSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdmlld3M6ICgpID0+IHRoaXMucmVzb2x2ZWRWaWV3c1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHVucmVzb2x2ZWRWaWV3czogeyB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbiwgUHJvbWlzZV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgb3B0aW9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc29sdmVkVmlld3M6IHt9LFxuICAgICAgcmVtb3ZlUm91dGVzOiBudWxsLFxuICAgICAgZGlhbG9nczoge30sXG4gICAgICBhbGxvd0xvZ2luOiBmYWxzZSxcbiAgICAgIGxvYWRpbmdDb3VudDogMFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5vdGlmaWNhdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy5ub3RpZmljYXRpb25zXG4gICAgfSxcblxuICAgIGlzTG9hZGluZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmxvYWRpbmdDb3VudCA+IDBcbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLmFwcFN0YXRlLnRpdGxlID0gZG9jdW1lbnQudGl0bGUgfHwgJ0RpdG8uanMgQWRtaW4nXG4gICAgLy8gV2l0aCBob3QtcmVsb2FkaW5nLCBpdCBsb29rcyBsaWtlIGRlc3Ryb3llZCBob29rcyBhcmVuJ3QgYWx3YXlzIGNhbGxlZFxuICAgIC8vIGZvciByb3V0ZSBjb21wb25lbnRzIHNvIHJlc2V0IHRoZSBhcnJheSBvZiByZWdpc3RlcmVkIGNvbXBvbmVudHMgaW5zdGVhZC5cbiAgICB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cyA9IFtdXG4gIH0sXG5cbiAgYXN5bmMgbW91bnRlZCgpIHtcbiAgICB0aXBweURlbGVnYXRlKHRoaXMuJGVsLCB7XG4gICAgICB0YXJnZXQ6ICdbZGF0YS10aXBweS1jb250ZW50XSdcbiAgICB9KVxuICAgIC8vIENsZWFyIHRoZSBsYWJlbCBtYXJrZWQgYXMgYWN0aXZlIG9uIGFsbCBtb3VzZSBhbmQga2V5Ym9hcmQgZXZlbnRzLCBleGNlcHRcbiAgICAvLyB0aGUgb25lcyB0aGF0IERpdG9MYWJlbCBpdHNlbGYgaW50ZXJjZXB0cy5cbiAgICB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICBjbGljazogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5jbG9zZXN0KCcuZGl0by1sYWJlbCcpKSB7XG4gICAgICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAga2V5dXA6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdUYWInKSB7XG4gICAgICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuYWxsb3dMb2dpbiA9IGZhbHNlXG4gICAgICBpZiAoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkge1xuICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCB0aGlzLmxvZ2luKClcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKVxuICAgIH1cbiAgICB0aGlzLmFsbG93TG9naW4gPSB0cnVlXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG5vdGlmeSh7IHR5cGUgPSAnaW5mbycsIHRpdGxlLCB0ZXh0IH0gPSB7fSkge1xuICAgICAgdGl0bGUgfHw9IChcbiAgICAgICAge1xuICAgICAgICAgIHdhcm5pbmc6ICdXYXJuaW5nJyxcbiAgICAgICAgICBlcnJvcjogJ0Vycm9yJyxcbiAgICAgICAgICBpbmZvOiAnSW5mb3JtYXRpb24nLFxuICAgICAgICAgIHN1Y2Nlc3M6ICdTdWNjZXNzJ1xuICAgICAgICB9W3R5cGVdIHx8XG4gICAgICAgICdOb3RpZmljYXRpb24nXG4gICAgICApXG4gICAgICB0ZXh0ID0gYDxwPiR7XG4gICAgICAgIGFzQXJyYXkodGV4dCkuam9pbignPC9wPiA8cD4nKVxuICAgICAgfTwvcD5gLnJlcGxhY2UoL1xcbnxcXHJcXG58XFxyL2csICc8YnI+JylcbiAgICAgIGNvbnN0IGxvZyA9IChcbiAgICAgICAge1xuICAgICAgICAgIHdhcm5pbmc6ICd3YXJuJyxcbiAgICAgICAgICBlcnJvcjogJ2Vycm9yJyxcbiAgICAgICAgICBpbmZvOiAnbG9nJyxcbiAgICAgICAgICBzdWNjZXNzOiAnbG9nJ1xuICAgICAgICB9W3R5cGVdIHx8XG4gICAgICAgICdlcnJvcidcbiAgICAgIClcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlW2xvZ10oc3RyaXBUYWdzKHRleHQpKVxuICAgICAgY29uc3QgeyBub3RpZmljYXRpb25zID0gdHJ1ZSB9ID0gdGhpcy5hcGlcbiAgICAgIGlmIChub3RpZmljYXRpb25zKSB7XG4gICAgICAgIC8vIENhbGN1bGF0ZSBkaXNwbGF5LWR1cmF0aW9uIGZvciB0aGUgbm90aWZpY2F0aW9uIGJhc2VkIG9uIGl0cyBjb250ZW50XG4gICAgICAgIC8vIGFuZCB0aGUgc2V0dGluZyBvZiB0aGUgYGR1cmF0aW9uRmFjdG9yYCBjb25maWd1cmF0aW9uLiBJdCBkZWZpbmVzIHRoZVxuICAgICAgICAvLyBhbW91bnQgb2YgbWlsbGlzZWNvbmRzIG11bHRpcGxpZWQgd2l0aCB0aGUgYW1vdW50IG9mIGNoYXJhY3RlcnNcbiAgICAgICAgLy8gZGlzcGxheWVkIGluIHRoZSBub3RpZmljYXRpb24sIHBsdXMgNDAgKDQwICsgdGl0bGUgKyBtZXNzYWdlKTpcbiAgICAgICAgY29uc3QgeyBkdXJhdGlvbkZhY3RvciA9IDIwIH0gPSBub3RpZmljYXRpb25zXG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gKDQwICsgdGV4dC5sZW5ndGggKyB0aXRsZS5sZW5ndGgpICogZHVyYXRpb25GYWN0b3JcbiAgICAgICAgdGhpcy4kbm90aWZ5KHsgdHlwZSwgdGl0bGUsIHRleHQsIGR1cmF0aW9uIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsb3NlTm90aWZpY2F0aW9ucygpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5kZXN0cm95QWxsKClcbiAgICB9LFxuXG4gICAgcmVnaXN0ZXJMb2FkaW5nKGlzTG9hZGluZykge1xuICAgICAgdGhpcy5sb2FkaW5nQ291bnQgKz0gaXNMb2FkaW5nID8gMSA6IC0xXG4gICAgfSxcblxuICAgIHNob3dEaWFsb2coeyBjb21wb25lbnRzLCBidXR0b25zLCBkYXRhLCBzZXR0aW5ncyB9KSB7XG4gICAgICAvLyBTaG93cyBhIGRpdG8tZGlhbG9nIGNvbXBvbmVudCBhbmQgd3JhcHMgaXQgaW4gYSBwcm9taXNlIHNvIHRoYXQgdGhlXG4gICAgICAvLyBidXR0b25zIGluIHRoZSBkaWFsb2cgY2FuIHVzZSBgZGlhbG9nLnJlc29sdmUoKWAgYW5kIGBkaWFsb2cucmVqZWN0KClgXG4gICAgICAvLyB0byBjbG9zZSB0aGUgbW9kYWwgZGlhbG9nIGFuZCByZXNvbHZlIC8gcmVqZWN0IHRoZSBwcm9taXNlIGF0IG9uY2UuXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1hc3luYy1wcm9taXNlLWV4ZWN1dG9yXG4gICAgICAgIGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAvLyBQcm9jZXNzIGNvbXBvbmVudHMgdG8gcmVzb2x2ZSBhc3luYyBzY2hlbWFzLlxuICAgICAgICAgIGNvbnN0IHJvdXRlcyA9IFtdXG4gICAgICAgICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoXG4gICAgICAgICAgICB0aGlzLmFwaSxcbiAgICAgICAgICAgIHsgdHlwZTogJ2RpYWxvZycsIGNvbXBvbmVudHMgfSxcbiAgICAgICAgICAgIHJvdXRlcyxcbiAgICAgICAgICAgIDBcbiAgICAgICAgICApXG4gICAgICAgICAgaWYgKHJvdXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICdEaWFsb2dzIGRvIG5vdCBzdXBwb3J0IGNvbXBvbmVudHMgdGhhdCBwcm9kdWNlIHJvdXRlcydcbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qga2V5ID0gYGRpYWxvZy0keysrZGlhbG9nSWR9YFxuICAgICAgICAgIHRoaXMuZGlhbG9nc1trZXldID0ge1xuICAgICAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgICAgIGJ1dHRvbnMsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgc2V0dGluZ3MsXG4gICAgICAgICAgICBwcm9taXNlOiB7IHJlc29sdmUsIHJlamVjdCB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgfSxcblxuICAgIHJlbW92ZURpYWxvZyhrZXkpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmRpYWxvZ3Nba2V5XVxuICAgIH0sXG5cbiAgICBhc3luYyBsb2dpbigpIHtcbiAgICAgIHRoaXMuYWxsb3dMb2dpbiA9IHRydWVcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgYWRkaXRpb25hbENvbXBvbmVudHMsXG4gICAgICAgIHJlZGlyZWN0QWZ0ZXJMb2dpblxuICAgICAgfSA9IHRoaXMub3B0aW9ucy5sb2dpbiB8fCB7fVxuICAgICAgY29uc3QgbG9naW5EYXRhID0gYXdhaXQgdGhpcy5zaG93RGlhbG9nKHtcbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIHVzZXJuYW1lOiB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBhdXRvZm9jdXM6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBhc3N3b3JkOiB7XG4gICAgICAgICAgICB0eXBlOiAncGFzc3dvcmQnXG4gICAgICAgICAgfSxcbiAgICAgICAgICAuLi5hZGRpdGlvbmFsQ29tcG9uZW50c1xuICAgICAgICB9LFxuICAgICAgICBidXR0b25zOiB7XG4gICAgICAgICAgY2FuY2VsOiB7XG4gICAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICAgIHRleHQ6ICdDYW5jZWwnXG4gICAgICAgICAgICAvLyBOT1RFOiBUaGUgY2xpY2sgZXZlbnQgaXMgYWRkZWQgaW4gRGl0b0RpYWxvZy5idXR0b25TY2hlbWFzKClcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgbG9naW46IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgICAgICAgdGV4dDogJ0xvZ2luJ1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIGlmIChsb2dpbkRhdGEpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLmxvZ2luLFxuICAgICAgICAgICAgZGF0YTogbG9naW5EYXRhLFxuICAgICAgICAgICAgaW50ZXJuYWw6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmIChyZWRpcmVjdEFmdGVyTG9naW4pIHtcbiAgICAgICAgICAgIGxvY2F0aW9uLnJlcGxhY2UocmVkaXJlY3RBZnRlckxvZ2luKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFVzZXIocmVzcG9uc2UuZGF0YS51c2VyKVxuICAgICAgICAgICAgYXdhaXQgdGhpcy5yZXNvbHZlVmlld3MoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBlcnIucmVzcG9uc2U/LmRhdGE/LmVycm9yXG4gICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24gRXJyb3InLFxuICAgICAgICAgICAgdGV4dDogZXJyb3IgfHwgZXJyXG4gICAgICAgICAgfSlcbiAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLnJlc3BvbnNlKVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmxvZ2luKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZUhvbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSgnLycpXG4gICAgfSxcblxuICAgIGFzeW5jIGxvZ291dCgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgcmVzb3VyY2U6IHRoaXMuYXBpLnVzZXJzLmxvZ291dCxcbiAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YS5zdWNjZXNzKSB7XG4gICAgICAgICAgdGhpcy5zZXRVc2VyKG51bGwpXG4gICAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGZldGNoVXNlcigpIHtcbiAgICAgIGxldCB1c2VyID0gbnVsbFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMuc2Vzc2lvbixcbiAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgICB1c2VyID0gcmVzcG9uc2UuZGF0YS51c2VyIHx8IG51bGxcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICB0aXRsZTogJ0F1dGhlbnRpY2F0aW9uIEVycm9yJyxcbiAgICAgICAgICB0ZXh0OiBlcnJcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0VXNlcih1c2VyKVxuICAgICAgcmV0dXJuIHVzZXJcbiAgICB9LFxuXG4gICAgc2V0VXNlcih1c2VyKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLnVzZXIgPSAoXG4gICAgICAgIHVzZXIgJiZcbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHVzZXIsIERpdG9Vc2VyLnByb3RvdHlwZSlcbiAgICAgIClcbiAgICAgIC8vIENsZWFyIHJlc29sdmVkIHZpZXdzIHdoZW4gdXNlciBpcyBsb2dnZWQgb3V0LlxuICAgICAgaWYgKCF1c2VyKSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IHt9XG4gICAgICAgIHRoaXMubmF2aWdhdGVIb21lKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZW5zdXJlVXNlcigpIHtcbiAgICAgIGlmICghKGF3YWl0IHRoaXMuZmV0Y2hVc2VyKCkpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyByZXNvbHZlVmlld3MoKSB7XG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnJlc29sdmVkVmlld3MgPSBhd2FpdCByZXNvbHZlU2NoZW1hcyh0aGlzLnVucmVzb2x2ZWRWaWV3cylcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghZXJyb3IucmVxdWVzdCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgICAgLy8gQ29sbGVjdCBhbGwgcm91dGVzIGZyb20gdGhlIHJvb3Qgc2NoZW1hIGNvbXBvbmVudHNcbiAgICAgIGNvbnN0IHJvdXRlcyA9IGF3YWl0IG1hcENvbmN1cnJlbnRseShcbiAgICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5yZXNvbHZlZFZpZXdzKSxcbiAgICAgICAgKFtuYW1lLCBzY2hlbWFdKSA9PiBwcm9jZXNzVmlldyhEaXRvVmlldywgdGhpcy5hcGksIHNjaGVtYSwgbmFtZSlcbiAgICAgIClcbiAgICAgIC8vIE5vdyB0aGF0IHRoZSByb3V0ZXMgYXJlIGxvYWRlZCwgcmVwbGFjZSBhbGwgZXhpc3Rpbmcgcm91dGVzIHdpdGggdGhlXG4gICAgICAvLyBuZXcgcm91dGVzLCBhbmQgcmVzdG9yZSB0aGUgY3VycmVudCBwYXRoLlxuICAgICAgY29uc3QgeyBmdWxsUGF0aCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIHRoaXMucmVtb3ZlUm91dGVzPy4oKVxuICAgICAgdGhpcy5yZW1vdmVSb3V0ZXMgPSBhZGRSb3V0ZXModGhpcy4kcm91dGVyLCBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAncm9vdCcsXG4gICAgICAgICAgcGF0aDogJy8nLFxuICAgICAgICAgIGNvbXBvbmVudHM6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIC4uLnJvdXRlc1xuICAgICAgXSlcbiAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKGZ1bGxQYXRoKVxuICAgIH1cbiAgfVxufSlcblxubGV0IGRpYWxvZ0lkID0gMFxuXG5mdW5jdGlvbiBhZGRSb3V0ZXMocm91dGVyLCByb3V0ZXMpIHtcbiAgY29uc3QgcmVtb3ZlcnMgPSBbXVxuICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlcykge1xuICAgIGNvbnN0IHJlbW92ZVJvdXRlID0gcm91dGVyLmFkZFJvdXRlKHJvdXRlKVxuICAgIHJlbW92ZXJzLnB1c2gocmVtb3ZlUm91dGUpXG4gIH1cblxuICByZXR1cm4gKCkgPT4ge1xuICAgIGZvciAoY29uc3QgcmVtb3ZlIG9mIHJlbW92ZXJzKSB7XG4gICAgICByZW1vdmUoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL3N0eWxlJztcblxuLmRpdG8tYXBwLFxuLmRpdG8tcm9vdCB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG5cbi5kaXRvLXJvb3Qge1xuICAuZGl0by1wYWdlIHtcbiAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbm5hdi5kaXRvLXNpZGViYXIuZGl0by1zY3JvbGwtcGFyZW50XG4gIGgxIHt7IGFwcFN0YXRlLnRpdGxlIH19XG4gIHVsLmRpdG8tc2Nyb2xsXG4gICAgbGkoXG4gICAgICB2LWZvcj1cInZpZXcgaW4gdmlld3NcIlxuICAgIClcbiAgICAgIFJvdXRlckxpbmsoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEodmlldylcIlxuICAgICAgICB2LXNsb3Q9XCJ7IGlzQWN0aXZlLCBocmVmLCByb3V0ZSB9XCJcbiAgICAgICAgY3VzdG9tXG4gICAgICAgIDp0bz1cImAvJHt2aWV3LnBhdGh9YFwiXG4gICAgICApXG4gICAgICAgIGEuZGl0by1saW5rKFxuICAgICAgICAgIDpocmVmPVwiaHJlZlwiXG4gICAgICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBpc0FjdGl2ZSB9XCJcbiAgICAgICAgICBAY2xpY2sucHJldmVudD1cIm9uQ2xpY2tMaW5rKHJvdXRlKVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWwodmlldykgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9NZW51Jywge1xuICBtZXRob2RzOiB7XG4gICAgb25DbGlja0xpbmsocm91dGUpIHtcbiAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgLi4ucm91dGUsIGZvcmNlOiB0cnVlIH0pXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2lkZWJhciB7XG4gIGZsZXg6IGluaXRpYWw7XG4gIGZvbnQtc2l6ZTogJG1lbnUtZm9udC1zaXplO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICB1bCB7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXI7XG4gICAgYm9yZGVyLXJpZ2h0OiAkYm9yZGVyLXN0eWxlO1xuICB9XG5cbiAgYSxcbiAgaDEge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5cbiAgaDEge1xuICAgIHBhZGRpbmc6ICRtZW51LXBhZGRpbmc7XG4gICAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0O1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrZXI7XG4gICAgYm9yZGVyLXJpZ2h0OiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1kYXJrZXN0O1xuICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gIH1cblxuICAuZGl0by1saW5rIHtcbiAgICBwYWRkaW5nOiAkbWVudS1wYWRkaW5nO1xuICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodDtcblxuICAgICYuZGl0by1hY3RpdmUge1xuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLWxpbmsge1xuICAmOmZvY3VzOm5vdCg6YWN0aXZlLCAuZGl0by1hY3RpdmUpIHtcbiAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXNwaW5uZXIoXG4gIHYtc2hvdz1cImxvYWRpbmdcIlxuKVxuICAvLy0gVE9ETzogQ29udmVydCB0byBCRU1cbiAgLnYtcHVsc2Uudi1wdWxzZTEoOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSwgc3Bpbm5lckRlbGF5MV1cIilcbiAgLnYtcHVsc2Uudi1wdWxzZTIoOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSwgc3Bpbm5lckRlbGF5Ml1cIilcbiAgLnYtcHVsc2Uudi1wdWxzZTMoOnN0eWxlPVwiW3NwaW5uZXJTdHlsZSwgc3Bpbm5lckRlbGF5M11cIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3BzOiB7XG4gICAgbG9hZGluZzoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGNvbG9yOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnIzVkYzU5NidcbiAgICB9LFxuICAgIHNpemU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcxNXB4J1xuICAgIH0sXG4gICAgbWFyZ2luOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMnB4J1xuICAgIH0sXG4gICAgcmFkaXVzOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnMTAwJSdcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICAvLyBUT0RPOiBDb252ZXJ0IHRvIHVzaW5nIG9ubHkgY2xhc3Nlc1xuICAgIHJldHVybiB7XG4gICAgICBzcGlubmVyU3R5bGU6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGlzLmNvbG9yLFxuICAgICAgICB3aWR0aDogdGhpcy5zaXplLFxuICAgICAgICBoZWlnaHQ6IHRoaXMuc2l6ZSxcbiAgICAgICAgbWFyZ2luOiB0aGlzLm1hcmdpbixcbiAgICAgICAgYm9yZGVyUmFkaXVzOiB0aGlzLnJhZGl1cyxcbiAgICAgICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgICAgIGFuaW1hdGlvbk5hbWU6ICd2LXB1bHNlU3RyZXRjaERlbGF5JyxcbiAgICAgICAgYW5pbWF0aW9uRHVyYXRpb246ICcwLjc1cycsXG4gICAgICAgIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAnaW5maW5pdGUnLFxuICAgICAgICBhbmltYXRpb25UaW1pbmdGdW5jdGlvbjogJ2N1YmljLWJlemllciguMiwuNjgsLjE4LDEuMDgpJyxcbiAgICAgICAgYW5pbWF0aW9uRmlsbE1vZGU6ICdib3RoJ1xuICAgICAgfSxcbiAgICAgIHNwaW5uZXJEZWxheTE6IHtcbiAgICAgICAgYW5pbWF0aW9uRGVsYXk6ICcwLjEycydcbiAgICAgIH0sXG4gICAgICBzcGlubmVyRGVsYXkyOiB7XG4gICAgICAgIGFuaW1hdGlvbkRlbGF5OiAnMC4yNHMnXG4gICAgICB9LFxuICAgICAgc3Bpbm5lckRlbGF5Mzoge1xuICAgICAgICBhbmltYXRpb25EZWxheTogJzAuMzZzJ1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGtleWZyYW1lcyB2LXB1bHNlU3RyZXRjaERlbGF5IHtcbiAgMCUsXG4gIDgwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG5cbiAgNDUlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgb3BhY2l0eTogMC43O1xuICB9XG59XG5cbkBrZXlmcmFtZXMgdi1wdWxzZVN0cmV0Y2hEZWxheSB7XG4gIDAlLFxuICA4MCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIDQ1JSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5uYXYuZGl0by1oZWFkZXJcbiAgLmRpdG8tdHJhaWxcbiAgICB1bFxuICAgICAgbGkoXG4gICAgICAgIHYtZm9yPVwiKGNvbXBvbmVudCwgaW5kZXgpIGluIHRyYWlsXCJcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1pZj1cImluZGV4ID09PSB0cmFpbC5sZW5ndGggLSAxXCJcbiAgICAgICAgKVxuICAgICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0QnJlYWRjcnVtYkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICAgIHwge3sgY29tcG9uZW50LmJyZWFkY3J1bWIgfX1cbiAgICAgICAgUm91dGVyTGluay5kaXRvLWJyZWFkY3J1bWIoXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgOnRvPVwiY29tcG9uZW50LnBhdGhcIlxuICAgICAgICApXG4gICAgICAgICAgc3Bhbig6Y2xhc3M9XCJnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KVwiKVxuICAgICAgICAgICAgfCB7eyBjb21wb25lbnQuYnJlYWRjcnVtYiB9fVxuICAgIERpdG9TcGlubmVyKFxuICAgICAgdi1pZj1cImlzTG9hZGluZ1wiXG4gICAgKVxuICAvLy0gVGVsZXBvcnQgdGFyZ2V0IGZvciBgLmRpdG8tc2NoZW1hLWhlYWRlcmA6XG4gIC5kaXRvLW1lbnVcbiAgc2xvdFxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b1NwaW5uZXIgZnJvbSAnLi9EaXRvU3Bpbm5lci52dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0hlYWRlcicsIHtcbiAgY29tcG9uZW50czogeyBEaXRvU3Bpbm5lciB9LFxuXG4gIHByb3BzOiB7XG4gICAgc3Bpbm5lcjoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0sXG4gICAgaXNMb2FkaW5nOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0cmFpbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cy5maWx0ZXIoXG4gICAgICAgIGNvbXBvbmVudCA9PiAhIWNvbXBvbmVudC5yb3V0ZVJlY29yZFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNpemUgPSAnOHB4JyxcbiAgICAgIGNvbG9yID0gJyM5OTknXG4gICAgfSA9IHRoaXMuc3Bpbm5lciB8fCB7fVxuICAgIC8vIFRPRE86IFRoaXMgaXMgYSBoYWNrIHRvIHNldCB0aGUgZGVmYXVsdCBwcm9wcyBmb3IgdGhlIERpdG9TcGlubmVyLlxuICAgIC8vIFBhc3MgdGhlbSBvbiB0aHJvdWdoIHRoZSB0ZW1wbGF0ZSBpbnN0ZWFkIVxuICAgIGNvbnN0IHsgcHJvcHMgfSA9IERpdG9TcGlubmVyXG4gICAgcHJvcHMuc2l6ZS5kZWZhdWx0ID0gc2l6ZVxuICAgIHByb3BzLmNvbG9yLmRlZmF1bHQgPSBjb2xvclxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRCcmVhZGNydW1iQ2xhc3MoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1kaXJ0eSc6IGNvbXBvbmVudC5pc0RpcnR5XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8taGVhZGVyIHtcbiAgYmFja2dyb3VuZDogJGNvbG9yLWJsYWNrO1xuICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZTtcbiAgbGluZS1oZWlnaHQ6ICRtZW51LWxpbmUtaGVpZ2h0O1xuICB6LWluZGV4OiAkbWVudS16LWluZGV4O1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICBzcGFuIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgcGFkZGluZzogJG1lbnUtcGFkZGluZztcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICB9XG5cbiAgLmRpdG8tdHJhaWwge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBoZWlnaHQ6IDNlbTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoICsgJGNvbnRlbnQtcGFkZGluZztcblxuICAgIHVsIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgfVxuXG4gICAgYSB7XG4gICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDAuNGVtO1xuXG4gICAgICAkYW5nbGU6IDMzZGVnO1xuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgY29sb3I6ICM5OTk5OTk7XG4gICAgICB9XG5cbiAgICAgICY6OmJlZm9yZSxcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgd2lkdGg6IDFweDtcbiAgICAgICAgaGVpZ2h0OiAxLjJlbTtcbiAgICAgICAgcmlnaHQ6IC0xcHg7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrO1xuICAgICAgfVxuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICB0b3A6IDUwJTtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoJGFuZ2xlKTtcbiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wO1xuICAgICAgfVxuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGJvdHRvbTogNTAlO1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtJGFuZ2xlKTtcbiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogYm90dG9tO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXNwaW5uZXIge1xuICAgIG1hcmdpbi10b3A6ICRtZW51LXBhZGRpbmctdmVyO1xuICB9XG5cbiAgLmRpdG8tZGlydHkge1xuICAgICY6OmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgd2lkdGg6IDhweDtcbiAgICAgIGhlaWdodDogOHB4O1xuICAgICAgbWFyZ2luOiAycHg7XG4gICAgICBtYXJnaW4tbGVmdDogMC41ZW07XG4gICAgICBib3JkZXItcmFkaXVzOiAxMDAlO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWFjY291bnQsXG4gIC5kaXRvLWxvZ2luIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuXG4gIC5kaXRvLWFjY291bnQge1xuICAgIGxlZnQ6ICRjb250ZW50LXdpZHRoICsgJGNvbnRlbnQtcGFkZGluZyAqIDI7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi9Eb21NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHB1bGxkb3duOiB7XG4gICAgICAgIG9wZW46IGZhbHNlLFxuICAgICAgICBzdGFydFRpbWU6IDAsXG4gICAgICAgIGNoZWNrVGltZTogdHJ1ZSxcbiAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgbW91c2Vkb3duOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgbW91c2V1cDogKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMub25QdWxsZG93bk1vdXNlVXAobnVsbCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgaGFuZGxlcnM6IG51bGxcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uUHVsbGRvd25Nb3VzZURvd24odmFsdWUpIHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4odHJ1ZSlcbiAgICAgICAgdGhpcy5jaGVja1RpbWUgPSB0cnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNoZWNrVGltZSA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUHVsbGRvd25Nb3VzZVVwKHZhbHVlKSB7XG4gICAgICBjb25zdCB7IHN0YXJ0VGltZSB9ID0gdGhpcy5wdWxsZG93blxuICAgICAgaWYgKCF0aGlzLmNoZWNrVGltZSB8fCBzdGFydFRpbWUgJiYgKERhdGUubm93KCkgLSBzdGFydFRpbWUgPiAyNTApKSB7XG4gICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICB0aGlzLm9uUHVsbGRvd25TZWxlY3QodmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25QdWxsZG93blNlbGVjdCgvKiB2YWx1ZSAqLykge1xuICAgICAgLy8gTk9URTogVG8gYmUgb3ZlcnJpZGRlbi5cbiAgICB9LFxuXG4gICAgc2V0UHVsbGRvd25PcGVuKG9wZW4pIHtcbiAgICAgIHRoaXMucHVsbGRvd24ub3BlbiA9IG9wZW5cbiAgICAgIHRoaXMucHVsbGRvd24uc3RhcnRUaW1lID0gb3BlbiA/IERhdGUubm93KCkgOiAwXG4gICAgICBpZiAob3Blbikge1xuICAgICAgICB0aGlzLnB1bGxkb3duLmhhbmRsZXJzID0gdGhpcy5kb21Pbihkb2N1bWVudCwgdGhpcy5wdWxsZG93bi5ldmVudHMpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tYWNjb3VudFxuICBhKFxuICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gIClcbiAgICBzcGFuIHt7IHVzZXIudXNlcm5hbWUgfX1cbiAgdWwuZGl0by1wdWxsZG93big6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIilcbiAgICBsaShcbiAgICAgIHYtZm9yPVwiKGxhYmVsLCB2YWx1ZSkgb2YgaXRlbXNcIlxuICAgIClcbiAgICAgIGEoXG4gICAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24odmFsdWUpXCJcbiAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh2YWx1ZSlcIlxuICAgICAgKSB7eyBsYWJlbCB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUHVsbGRvd25NaXhpbiBmcm9tICcuLi9taXhpbnMvUHVsbGRvd25NaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQWNjb3VudCcsIHtcbiAgbWl4aW5zOiBbUHVsbGRvd25NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXRlbXM6IHtcbiAgICAgICAgc2V0dGluZ3M6ICdTZXR0aW5ncycsXG4gICAgICAgIGxvZ291dDogJ0xvZ291dCdcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uUHVsbGRvd25TZWxlY3QodmFsdWUpIHtcbiAgICAgIHN3aXRjaCAodmFsdWUpIHtcbiAgICAgICAgY2FzZSAnbG9nb3V0JzpcbiAgICAgICAgICB0aGlzLnJvb3RDb21wb25lbnQubG9nb3V0KClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdzZXR0aW5ncyc6XG4gICAgICAgICAgY29uc29sZS5pbmZvKCdUT0RPOiBJbXBsZW1lbnQgU2V0dGluZ3MnKVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tYWNjb3VudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAuZGl0by1wdWxsZG93biB7XG4gICAgdG9wOiAkcHVsbGRvd24tcGFkZGluZy12ZXI7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuY29tcG9uZW50KFxuICB2LWlmPVwiY29udGVudFwiXG4gIDppcz1cIm9wdGlvbnMudGFnIHx8IHRhZ1wiXG4gIDpjbGFzcz1cImNsYXNzZXNcIlxuICA6c3R5bGU9XCJzdHlsZXNcIlxuKSB7eyBvcHRpb25zLnRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRWxlbWVudCcsIHtcbiAgcHJvcHM6IHtcbiAgICB0YWc6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc3BhbicgfSxcbiAgICBjb250ZW50OiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IHsgY29udGVudCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KGNvbnRlbnQpID8gY29udGVudCA6IHsgdGV4dDogY29udGVudCB9XG4gICAgfSxcblxuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLiRhdHRycy5jbGFzcyxcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy5vcHRpb25zLmNsYXNzKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdHlsZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLiRhdHRycy5zdHlsZSxcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy5vcHRpb25zLnN0eWxlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuZnVuY3Rpb24gYXNPYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIGFzQXJyYXkodmFsdWUpLnJlZHVjZSgob2JqZWN0LCBlbnRyeSkgPT4ge1xuICAgIGlmIChpc1N0cmluZyhlbnRyeSkpIHtcbiAgICAgIG9iamVjdFtlbnRyeV0gPSB0cnVlXG4gICAgfSBlbHNlIGlmIChpc09iamVjdChlbnRyeSkpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ob2JqZWN0LCBlbnRyeSlcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdFxuICB9LCB7fSlcbn1cbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmNvbXBvbmVudC5kaXRvLWxhYmVsKFxuICB2LWlmPVwidGV4dCB8fCBjb2xsYXBzaWJsZVwiXG4gIDppcz1cInRhZ1wiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIlxuKVxuICAuZGl0by1jaGV2cm9uKFxuICAgIHYtaWY9XCJjb2xsYXBzaWJsZVwiXG4gICAgOmNsYXNzPVwieyAnZGl0by1vcGVuZWQnOiAhY29sbGFwc2VkIH1cIlxuICApXG4gIC5kaXRvLWxhYmVsX19pbm5lclxuICAgIERpdG9FbGVtZW50LmRpdG8tbGFiZWwtcHJlZml4KFxuICAgICAgdi1mb3I9XCIocHJlZml4LCBpbmRleCkgb2YgcHJlZml4ZXNcIlxuICAgICAgOmtleT1cImBwcmVmaXgtJHtpbmRleH1gXCJcbiAgICAgIHRhZz1cInNwYW5cIlxuICAgICAgOmNvbnRlbnQ9XCJwcmVmaXhcIlxuICAgIClcbiAgICBsYWJlbChcbiAgICAgIDpmb3I9XCJkYXRhUGF0aFwiXG4gICAgICB2LWh0bWw9XCJ0ZXh0XCJcbiAgICApXG4gICAgRGl0b0VsZW1lbnQuZGl0by1sYWJlbC1zdWZmaXgoXG4gICAgICB2LWZvcj1cIihzdWZmaXgsIGluZGV4KSBvZiBzdWZmaXhlc1wiXG4gICAgICA6a2V5PVwiYHN1ZmZpeC0ke2luZGV4fWBcIlxuICAgICAgdGFnPVwic3BhblwiXG4gICAgICA6Y29udGVudD1cInN1ZmZpeFwiXG4gICAgKVxuICAgIC5kaXRvLWluZm8oXG4gICAgICB2LWlmPVwiaW5mb1wiXG4gICAgICA6ZGF0YS10aXBweS1jb250ZW50PVwiaW5mb1wiXG4gICAgICBkYXRhLXRpcHB5LXRoZW1lPVwiaW5mb1wiXG4gICAgKVxuICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9MYWJlbCcsIHtcbiAgZW1pdHM6IFsnZXhwYW5kJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBsYWJlbDogeyB0eXBlOiBbU3RyaW5nLCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBpbmZvOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0YWcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xsYXBzaWJsZSA/ICdhJyA6ICdkaXYnXG4gICAgfSxcblxuICAgIHRleHQoKSB7XG4gICAgICBjb25zdCB7IGxhYmVsIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNPYmplY3QobGFiZWwpID8gbGFiZWw/LnRleHQgOiBsYWJlbFxuICAgIH0sXG5cbiAgICBwcmVmaXhlcygpIHtcbiAgICAgIHJldHVybiBhc0FycmF5KHRoaXMubGFiZWw/LnByZWZpeClcbiAgICB9LFxuXG4gICAgc3VmZml4ZXMoKSB7XG4gICAgICByZXR1cm4gYXNBcnJheSh0aGlzLmxhYmVsPy5zdWZmaXgpXG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb2xsYXBzaWJsZSA/IHsgb25DbGljazogdGhpcy5vbkNsaWNrIH0gOiB7fVxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwcFN0YXRlLmFjdGl2ZUxhYmVsID09PSB0aGlzXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkNsaWNrKCkge1xuICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IHRoaXNcbiAgICAgIHRoaXMuJGVtaXQoJ2V4cGFuZCcsIHRoaXMuY29sbGFwc2VkKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWxhYmVsIHtcbiAgJHNlbGY6ICY7XG5cbiAgLS1sYWJlbC1wYWRkaW5nOiAwO1xuICAvLyBGb3IgYnV0dG9ucyBhbmQgY2hldnJvbiB0byBhbGlnbiByaWdodDpcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAvLyBWZXJ0aWNhbGx5IGNlbnRlciBhbGwgaXRlbXMgaW4gdGhlIGxhYmVsLCBlLmcuIGNoZXZyb24sIGVkaXQtYnV0dG9ucy5cbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogdmFyKC0tbGFiZWwtcGFkZGluZyk7XG4gIG1hcmdpbjogMCAwICRmb3JtLXNwYWNpbmctaGFsZiAwO1xuXG4gICZfX2lubmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIC8vIFN0cmV0Y2ggdG8gZnVsbCBhdmFpbGFibGUgd2lkdGggc28gdGhhdCBidXR0b25zIGFwcGVhciByaWdodC1hbGlnbmVkOlxuICAgIGZsZXg6IDEgMSBhdXRvO1xuICB9XG5cbiAgbGFiZWwge1xuICAgIGN1cnNvcjogaW5oZXJpdDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG5cbiAgbGFiZWwsXG4gIC5kaXRvLWxhYmVsLXByZWZpeCxcbiAgLmRpdG8tbGFiZWwtc3VmZml4IHtcbiAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcbiAgICBAaW5jbHVkZSBlbGxpcHNpcztcblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6ICdcXGEwJzsgLy8gJm5ic3A7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tYnV0dG9ucyB7XG4gICAgLy8gTW92ZSB0aGUgbGFiZWwgcGFkZGluZyBpbnNpZGUgLmRpdG8tYnV0dG9ucywgc28gdGhhdCBpdCBjYXB0dXJlcyBhbGxcbiAgICAvLyBuZWFyIG1vdXNlIGV2ZW50czpcbiAgICBtYXJnaW46IGNhbGMoLTEgKiB2YXIoLS1sYWJlbC1wYWRkaW5nKSk7XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgcGFkZGluZzogdmFyKC0tbGFiZWwtcGFkZGluZyk7XG4gIH1cblxuICAmLmRpdG8td2lkdGgtZmlsbCB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgLy8gSW4gb3JkZXIgZm9yIGVsbGlwc2lzIHRvIHdvcmsgb24gbGFiZWxzIHdpdGhvdXQgYWZmZWN0aW5nIG90aGVyIGxheW91dCxcbiAgICAvLyB3ZSBuZWVkIHRvIHBvc2l0aW9uIGl0IGFic29sdXRlbHkgaW5zaWRlIGl0cyBjb250YWluZXIuXG4gICAgI3skc2VsZn1fX2lubmVyIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGluc2V0OiAwO1xuICAgIH1cblxuICAgICY6OmFmdGVyIHtcbiAgICAgIC8vIFNpbmNlIDxsYWJlbD4gdXNlcyBgcG9zaXRpb246IGFic29sdXRlYCwgc2V0IGNvbnRlbnQgdG8gYSB6ZXJvLXdpZHRoXG4gICAgICAvLyBzcGFjZSBvbiBpdHMgcGFyZW50IHRvIGVuZm9yY2UgdGhlIHJpZ2h0IHRleHQgaGVpZ2h0IGluIHRoZSBjb250YWluZXJcbiAgICAgIGNvbnRlbnQ6ICdcXDIwMGInOyAvLyB6ZXJvLXdpZHRoIHNwYWNlO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWluZm8ge1xuICAgIG1hcmdpbi1sZWZ0OiAwLjM1ZW07XG4gIH1cbn1cblxuYS5kaXRvLWxhYmVsIHtcbiAgJjpob3ZlciB7XG4gICAgLmRpdG8tY2hldnJvbiB7XG4gICAgICBjb2xvcjogJGNvbG9yLWRhcmtlcjtcbiAgICB9XG4gIH1cblxuICAmOmZvY3VzOm5vdCg6YWN0aXZlLCAuZGl0by1hY3RpdmUpIHtcbiAgICAuZGl0by1jaGV2cm9uIHtcbiAgICAgIC13ZWJraXQtdGV4dC1zdHJva2U6ICRib3JkZXItd2lkdGggJGNvbG9yLWFjdGl2ZTtcbiAgICB9XG4gICAgLy8gRGlzcGxheSBsYWJlbHMgaW4gY29tcGFjdCBzY2hlbWEgYXMgaW5saW5lLWJsb2NrcywgdG8gYWxsb3cgY29tcGFjdFxuICAgIC8vIGxheW91dHMgd2l0aCBgd2lkdGg6ICdhdXRvJ2AgZWxlbWVudHM6XG4gICAgLy8gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gY29udHJvbCB0aGlzIGJlaGF2aW9yLlxuICB9XG59XG5cbi5kaXRvLXNjaGVtYS1jb21wYWN0IHtcbiAgPiAuZGl0by1zY2hlbWEtY29udGVudCB7XG4gICAgPiAuZGl0by1wYW5lIHtcbiAgICAgID4gLmRpdG8tY29udGFpbmVyIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7XG4gIGdldEl0ZW1Gb3JtU2NoZW1hLFxuICBnZXRJdGVtSWQsXG4gIGdldEl0ZW1VaWQsXG4gIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtZXRob2RzOiB7XG4gICAgZ2V0SXRlbUZvcm1TY2hlbWEsXG5cbiAgICBnZXRJdGVtVWlkLFxuXG4gICAgZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXggPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudCAmJiBpbmRleCAhPT0gbnVsbFxuICAgICAgICA/IFN0cmluZyhpbmRleClcbiAgICAgICAgOiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKVxuICAgIH0sXG5cbiAgICBnZXRJdGVtRGF0YVBhdGgoc291cmNlU2NoZW1hLCBpbmRleCkge1xuICAgICAgbGV0IHsgZGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGlmIChzb3VyY2VTY2hlbWEgIT09IHRoaXMuc2NoZW1hKSB7XG4gICAgICAgIGRhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNvdXJjZVNjaGVtYS5uYW1lKVxuICAgICAgfVxuICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgaW5kZXgpXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgZmluZEl0ZW1JZEluZGV4KHNvdXJjZVNjaGVtYSwgZGF0YSwgaXRlbUlkKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgPyAvLyBGb3IgdHJhbnNpZW50IGRhdGEsIHRoZSBpbmRleCBpcyB1c2VkIGFzIHRoZSBpZFxuICAgICAgICAgIGl0ZW1JZFxuICAgICAgICA6IGRhdGE/LmZpbmRJbmRleChcbiAgICAgICAgICAgIChpdGVtLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICB0aGlzLmdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4KSA9PT0gaXRlbUlkXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgcmV0dXJuIGluZGV4ICE9PSAtMSA/IGluZGV4IDogbnVsbFxuICAgIH0sXG5cbiAgICBnZXRJdGVtTGFiZWwoc291cmNlU2NoZW1hLCBpdGVtLCB7XG4gICAgICBpbmRleCA9IG51bGwsXG4gICAgICBleHRlbmRlZCA9IGZhbHNlLFxuICAgICAgYXNPYmplY3QgPSBmYWxzZVxuICAgIH0gPSB7fSkge1xuICAgICAgY29uc3QgeyBpdGVtTGFiZWwgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgaWYgKCFpdGVtIHx8ICFleHRlbmRlZCAmJiBpdGVtTGFiZWwgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIGxldCBkYXRhUGF0aFxuICAgICAgY29uc3QgZ2V0RGF0YVBhdGggPSAoKSA9PlxuICAgICAgICAoZGF0YVBhdGggfHw9IHRoaXMuZ2V0SXRlbURhdGFQYXRoKHNvdXJjZVNjaGVtYSwgaW5kZXgpKVxuXG4gICAgICBsZXQgZm9ybUxhYmVsXG4gICAgICBjb25zdCBnZXRGb3JtTGFiZWwgPSAoKSA9PlxuICAgICAgICAoZm9ybUxhYmVsIHx8PSB0aGlzLmdldExhYmVsKFxuICAgICAgICAgIGdldEl0ZW1Gb3JtU2NoZW1hKHNvdXJjZVNjaGVtYSwgaXRlbSwgdGhpcy5jb250ZXh0KVxuICAgICAgICApKVxuXG4gICAgICBsZXQgdGV4dFxuICAgICAgbGV0IHByZWZpeFxuICAgICAgbGV0IHN1ZmZpeFxuICAgICAgaWYgKGlzRnVuY3Rpb24oaXRlbUxhYmVsKSkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1MYWJlbC5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgIG5lc3RlZDogZmFsc2UsXG4gICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgICAgICBpbmRleCxcblxuICAgICAgICAgICAgZ2V0IGRhdGFQYXRoKCkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0RGF0YVBhdGgoKVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZ2V0IGZvcm1MYWJlbCgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEZvcm1MYWJlbCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICBpZiAoaXNPYmplY3QobGFiZWwpKSB7XG4gICAgICAgICAgOyh7IHRleHQsIHByZWZpeCwgc3VmZml4IH0gPSBsYWJlbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0ID0gbGFiZWxcbiAgICAgICAgfVxuICAgICAgICAvLyBJdCdzIHVwIHRvIGBpdGVtTGFiZWwoKWAgZW50aXJlbHkgdG8gcHJvZHVjZSB0aGUgbGFiZWw6XG4gICAgICAgIGV4dGVuZGVkID0gZmFsc2VcbiAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmcoaXRlbUxhYmVsKSAmJiAhKGl0ZW1MYWJlbCBpbiBpdGVtKSkge1xuICAgICAgICAvLyBgaXRlbUxhYmVsYCBjYW4gYmUgYm90aCBhIGtleSwgb3Igc2ltcGx5IGEgbGFiZWwuXG4gICAgICAgIHRleHQgPSBpdGVtTGFiZWxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExvb2sgdXAgdGhlIG5hbWUgb24gdGhlIGl0ZW0sIGJ5IHRoZXNlIHJ1bGVzOlxuICAgICAgICAvLyAxLiBJZiBgaXRlbUxhYmVsYCBpcyBhIHN0cmluZywgdXNlIGl0IGFzIHRoZSBwcm9wZXJ0eSBrZXlcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgY29sdW1ucywgdXNlIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3RcbiAgICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBzZWUgaWYgdGhlIGl0ZW0gaGFzIGEgcHJvcGVydHkgbmFtZWQgJ25hbWUnXG4gICAgICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gc291cmNlU2NoZW1hXG4gICAgICAgIGNvbnN0IGtleSA9IChcbiAgICAgICAgICBpc1N0cmluZyhpdGVtTGFiZWwpICYmIGl0ZW1MYWJlbCB8fFxuICAgICAgICAgIGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGNvbHVtbnMgJiYgT2JqZWN0LmtleXMoY29sdW1ucylbMF0gfHxcbiAgICAgICAgICAnbmFtZSdcbiAgICAgICAgKVxuICAgICAgICB0ZXh0ID0gaXRlbVtrZXldXG4gICAgICB9XG4gICAgICBjb25zdCBoYWRMYWJlbCA9ICEhdGV4dFxuICAgICAgLy8gSWYgbm8gbGFiZWwgd2FzIGZvdW5kIHNvIGZhciwgdHJ5IHRvIHByb2R1Y2Ugb25lIGZyb20gdGhlIGluZGV4LlxuICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xuICAgICAgICAvLyBBbHdheXMgdXNlIGV4dGVuZGVkIHN0eWxlIHdoZW4gYXV0by1nZW5lcmF0aW5nIGxhYmVscyBmcm9tIGluZGV4L2lkOlxuICAgICAgICBleHRlbmRlZCA9IHRydWVcbiAgICAgICAgdGV4dCA9XG4gICAgICAgICAgaXNMaXN0U291cmNlKHNvdXJjZVNjaGVtYSkgJiYgaW5kZXggIT09IG51bGxcbiAgICAgICAgICAgID8gKHRleHQgPSBgJHtpbmRleCArIDF9YClcbiAgICAgICAgICAgIDogJydcbiAgICAgIH1cbiAgICAgIGlmIChleHRlbmRlZCkge1xuICAgICAgICBjb25zdCBmb3JtTGFiZWwgPSBnZXRGb3JtTGFiZWwoKVxuICAgICAgICBpZiAoZm9ybUxhYmVsKSB7XG4gICAgICAgICAgLy8gSWYgYSBsYWJlbCB3YXMgcHJvdmlkZWQsIHB1dCBpbiBxdW90ZXMgd2hlbiBwcmVmaXhlZCB3aXRoIHRoZVxuICAgICAgICAgIC8vIGZvcm0gbGFiZWwgZm9yIHRoZSBleHRlbmRlZCBzdHlsZTpcbiAgICAgICAgICB0ZXh0ID0gYCR7Zm9ybUxhYmVsfSAke2hhZExhYmVsID8gYCcke3RleHR9J2AgOiB0ZXh0fWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFzT2JqZWN0ID8geyB0ZXh0LCBwcmVmaXgsIHN1ZmZpeCB9IDogdGV4dFxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnNsb3QobmFtZT1cImJlZm9yZVwiKVxuLmRpdG8tc2NoZW1hKFxuICB2LWJpbmQ9XCIkYXR0cnNcIlxuKVxuICAuZGl0by1zY2hlbWEtY29udGVudCg6Y2xhc3M9XCJ7ICdkaXRvLXNjcm9sbCc6IHNjcm9sbGFibGUgfVwiKVxuICAgIFRlbGVwb3J0KFxuICAgICAgdG89XCIuZGl0by1tZW51XCJcbiAgICAgIDpkaXNhYmxlZD1cIiFoZWFkZXJJbk1lbnVcIlxuICAgIClcbiAgICAgIC5kaXRvLXNjaGVtYS1oZWFkZXIoXG4gICAgICAgIHYtaWY9XCJoYXNMYWJlbCB8fCBoYXNUYWJzIHx8IGNsaXBib2FyZFwiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2NoZW1hLWhlYWRlci0tbWVudSc6IGhlYWRlckluTWVudSB9XCJcbiAgICAgIClcbiAgICAgICAgRGl0b0xhYmVsKFxuICAgICAgICAgIHYtaWY9XCJoYXNMYWJlbFwiXG4gICAgICAgICAgOmxhYmVsPVwibGFiZWxcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgICAgOmNvbGxhcHNlZD1cIiFvcGVuZWRcIlxuICAgICAgICAgIEBleHBhbmQ9XCJvbkV4cGFuZFwiXG4gICAgICAgIClcbiAgICAgICAgICAvLy0gUGFzcyBlZGl0LWJ1dHRvbnMgdGhyb3VnaCB0byBkaXRvLWxhYmVsJ3Mgb3duIGVkaXQtYnV0dG9ucyBzbG90OlxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1pZj1cImlubGluZWRcIlxuICAgICAgICAgICAgI2VkaXQtYnV0dG9uc1xuICAgICAgICAgIClcbiAgICAgICAgICAgIHNsb3QobmFtZT1cImVkaXQtYnV0dG9uc1wiKVxuICAgICAgICBEaXRvVGFicyhcbiAgICAgICAgICB2LWlmPVwidGFic1wiXG4gICAgICAgICAgOnRhYnM9XCJ0YWJzXCJcbiAgICAgICAgICA6c2VsZWN0ZWRUYWI9XCJzZWxlY3RlZFRhYlwiXG4gICAgICAgIClcbiAgICAgICAgRGl0b0NsaXBib2FyZChcbiAgICAgICAgICA6Y2xpcGJvYXJkPVwiY2xpcGJvYXJkXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgKVxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1pZj1cImhhc1RhYnNcIlxuICAgIClcbiAgICAgIERpdG9QYW5lLmRpdG8tcGFuZS10YWIoXG4gICAgICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwgdGFiKSBpbiB0YWJzXCJcbiAgICAgICAgcmVmPVwidGFic1wiXG4gICAgICAgIDprZXk9XCJ0YWJcIlxuICAgICAgICA6dmlzaWJsZT1cInNlbGVjdGVkVGFiID09PSB0YWJcIlxuICAgICAgICA6dGFiPVwidGFiXCJcbiAgICAgICAgOnNjaGVtYT1cInRhYlNjaGVtYVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6c2luZ2xlPVwiIWlubGluZWQgJiYgIWhhc01haW5QYW5lXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICApXG4gICAgVHJhbnNpdGlvbkhlaWdodCg6ZW5hYmxlZD1cImlubGluZWRcIilcbiAgICAgIERpdG9QYW5lLmRpdG8tcGFuZS1tYWluKFxuICAgICAgICB2LWlmPVwiaGFzTWFpblBhbmUgJiYgb3BlbmVkXCJcbiAgICAgICAgcmVmPVwiY29tcG9uZW50c1wiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNUYWJzXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICApXG4gICAgc2xvdChcbiAgICAgIHYtaWY9XCIhaW5saW5lZCAmJiBpc1BvcHVsYXRlZFwiXG4gICAgICBuYW1lPVwiYnV0dG9uc1wiXG4gICAgKVxuICB0ZW1wbGF0ZShcbiAgICB2LWlmPVwiaW5saW5lZFwiXG4gIClcbiAgICBzbG90KFxuICAgICAgdi1pZj1cIiFoYXNMYWJlbFwiXG4gICAgICBuYW1lPVwiZWRpdC1idXR0b25zXCJcbiAgICApXG4gIHRlbXBsYXRlKFxuICAgIHYtZWxzZS1pZj1cImlzUG9wdWxhdGVkXCJcbiAgKVxuICAgIERpdG9QYW5lbHMoXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNjcm9sbCc6IHNjcm9sbGFibGUgfVwiXG4gICAgICA6cGFuZWxzPVwicGFuZWxFbnRyaWVzXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbnNsb3QobmFtZT1cImFmdGVyXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb24sXG4gIGlzUmVnRXhwLFxuICBwYXJzZURhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aCxcbiAgbGFiZWxpemVcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IFRyYW5zaXRpb25IZWlnaHQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgSXRlbU1peGluIGZyb20gJy4uL21peGlucy9JdGVtTWl4aW4uanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCwgZ2V0UGFyZW50SXRlbSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQge1xuICBnZXROYW1lZFNjaGVtYXMsXG4gIGdldFBhbmVsRW50cmllcyxcbiAgc2V0RGVmYXVsdFZhbHVlcyxcbiAgcHJvY2Vzc0RhdGFcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U3RvcmVBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9TY2hlbWEnLCB7XG4gIG1peGluczogW0l0ZW1NaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVHJhbnNpdGlvbkhlaWdodCB9LFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJyRzY2hlbWFQYXJlbnRDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGlubGluZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgc2Nyb2xsYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGhhc093bkRhdGE6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBoZWFkZXJJbk1lbnU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICBjb25zdCB7IGRhdGEgfSA9IHRoaXMuc2NoZW1hXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBwcm92aWRlIG1vcmUgZGF0YSB0aHJvdWdoIGBzY2hlbWEuZGF0YWAsIHZ1ZS1zdHlsZTpcbiAgICAgIC4uLihcbiAgICAgICAgZGF0YSAmJiBpc0Z1bmN0aW9uKGRhdGEpXG4gICAgICAgICAgPyBkYXRhKHRoaXMuY29udGV4dClcbiAgICAgICAgICA6IGRhdGFcbiAgICAgICksXG4gICAgICBjdXJyZW50VGFiOiBudWxsLFxuICAgICAgY29tcG9uZW50c1JlZ2lzdHJ5OiB7fSxcbiAgICAgIHBhbmVzUmVnaXN0cnk6IHt9LFxuICAgICAgcGFuZWxzUmVnaXN0cnk6IHt9XG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gT3ZlcnJpZGUgRGl0b01peGluJ3Mgc2NoZW1hQ29tcG9uZW50KCkgd2hpY2ggdXNlcyB0aGUgaW5qZWN0ZWQgdmFsdWUuXG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBwYXJlbnRTY2hlbWFDb21wb25lbnQoKSB7XG4gICAgICAvLyBEb24ndCByZXR1cm4gdGhlIGFjdHVhbCBwYXJlbnQgc2NoZW1hIGlzIHRoaXMgc2NoZW1hIGhhbmRsZXMgaXRzIG93blxuICAgICAgLy8gZGF0YS4gVGhpcyBwcmV2ZW50cyBkZWxlZ2F0aW5nIGV2ZW50cyB0byB0aGUgcGFyZW50LCBhbmQgcmVnaXN0ZXJpbmdcbiAgICAgIC8vIGNvbXBvbmVudHMgd2l0aCB0aGUgcGFyZW50IHRoYXQgd291bGQgY2F1c2UgaXQgdG8gc2V0IGlzRGlydHkgZmxhZ3MuXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gbnVsbCA6IHRoaXMucGFyZW50Q29tcG9uZW50LnNjaGVtYUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYW5lbEVudHJpZXMoKSB7XG4gICAgICBjb25zdCBwYW5lbEVudHJpZXMgPSBnZXRQYW5lbEVudHJpZXModGhpcy5zY2hlbWEucGFuZWxzLCAnJylcbiAgICAgIGZvciAoY29uc3QgcGFuZSBvZiB0aGlzLnBhbmVzKSB7XG4gICAgICAgIHBhbmVsRW50cmllcy5wdXNoKC4uLnBhbmUucGFuZWxFbnRyaWVzKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHBhbmVsRW50cmllc1xuICAgIH0sXG5cbiAgICB0YWJzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS50YWJzKVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZFRhYigpIHtcbiAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRUYWIgfHwgdGhpcy5kZWZhdWx0VGFiPy5uYW1lIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZGVmYXVsdFRhYigpIHtcbiAgICAgIGxldCBmaXJzdCA9IG51bGxcbiAgICAgIGlmICh0aGlzLnRhYnMpIHtcbiAgICAgICAgZm9yIChjb25zdCB0YWIgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnRhYnMpKSB7XG4gICAgICAgICAgY29uc3QgeyBkZWZhdWx0VGFiIH0gPSB0YWJcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc0Z1bmN0aW9uKGRlZmF1bHRUYWIpXG4gICAgICAgICAgICAgID8gZGVmYXVsdFRhYih0aGlzLmNvbnRleHQpXG4gICAgICAgICAgICAgIDogZGVmYXVsdFRhYlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIHRhYlxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgICBmaXJzdCA9IHRhYlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZpcnN0XG4gICAgfSxcblxuICAgIGNsaXBib2FyZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYT8uY2xpcGJvYXJkXG4gICAgfSxcblxuICAgIHBhcmVudERhdGEoKSB7XG4gICAgICBjb25zdCBkYXRhID0gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCBmYWxzZSlcbiAgICAgIHJldHVybiBkYXRhICE9PSB0aGlzLmRhdGEgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWREYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc0RhdGEoeyB0YXJnZXQ6ICdzZXJ2ZXInLCBzY2hlbWFPbmx5OiB0cnVlIH0pXG4gICAgfSxcblxuICAgIGNsaXBib2FyZERhdGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAkc2NoZW1hOiB0aGlzLnNjaGVtYS5uYW1lLFxuICAgICAgICAuLi50aGlzLnByb2Nlc3NEYXRhKHsgdGFyZ2V0OiAnY2xpcGJvYXJkJywgc2NoZW1hT25seTogdHJ1ZSB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICAvLyBOT1RFOiBXaGlsZSBpbnRlcm5hbGx5LCB3ZSBzcGVhayBvZiBgZGF0YWAsIGluIHRoZSBBUEkgc3VyZmFjZSB0aGVcbiAgICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzLlxuICAgIC8vIE5PVEU6IFRoaXMgc2hvdWxkIGFsd2F5cyByZXR1cm4gdGhlIHNhbWUgYXM6XG4gICAgLy8gcmV0dXJuIGdldEl0ZW0odGhpcy5yb290RGF0YSwgdGhpcy5kYXRhUGF0aCwgZmFsc2UpXG4gICAgaXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcGFyZW50SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhcmVudERhdGFcbiAgICB9LFxuXG4gICAgcm9vdEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5yb290RGF0YVxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc2VkRGF0YVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xpcGJvYXJkRGF0YVxuICAgIH0sXG5cbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbChcbiAgICAgICAgdGhpcy5nZXRJdGVtRm9ybVNjaGVtYSh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB0aGlzLmNvbnRleHQpXG4gICAgICApXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0LmlzRGlydHkpXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaXNUb3VjaGVkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlcnlDb21wb25lbnQoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVyeUNvbXBvbmVudChpdCA9PiBpdC5pc1ZhbGlkYXRlZClcbiAgICB9LFxuXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMubGFiZWwgfHwgdGhpcy5jb2xsYXBzaWJsZVxuICAgIH0sXG5cbiAgICBoYXNUYWJzKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlubGluZWQgJiYgISF0aGlzLnRhYnNcbiAgICB9LFxuXG4gICAgaGFzTWFpblBhbmUoKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gISFjb21wb25lbnRzICYmIE9iamVjdC5rZXlzKGNvbXBvbmVudHMpLmxlbmd0aCA+IDBcbiAgICB9LFxuXG4gICAgb3BlbmVkOiBnZXRTdG9yZUFjY2Vzc29yKCdvcGVuZWQnLCB7XG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuY29sbGFwc2VkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICckcm91dGUuaGFzaCc6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXIoaGFzaCkge1xuICAgICAgICBpZiAodGhpcy5oYXNUYWJzKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VGFiID0gaGFzaD8uc2xpY2UoMSkgfHwgbnVsbFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgICdzZWxlY3RlZFRhYicoc2VsZWN0ZWRUYWIpIHtcbiAgICAgIGlmICh0aGlzLmhhc1RhYnMpIHtcbiAgICAgICAgbGV0IHRhYiA9IG51bGxcbiAgICAgICAgaWYgKHNlbGVjdGVkVGFiICE9PSB0aGlzLmN1cnJlbnRUYWIpIHtcbiAgICAgICAgICAvLyBBbnkgdGFiIGNoYW5nZSBuZWVkcyB0byBiZSByZWZsZWN0ZWQgaW4gdGhlIHJvdXRlciBhbHNvLlxuICAgICAgICAgIHRhYiA9IHNlbGVjdGVkVGFiXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuc2hvdWxkUmVuZGVyU2NoZW1hKHRoaXMudGFic1tzZWxlY3RlZFRhYl0pKSB7XG4gICAgICAgICAgdGFiID0gdGhpcy5kZWZhdWx0VGFiPy5uYW1lXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhYikge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgaGFzaDogYCMke3RhYn1gIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICB0aGlzLl9yZWdpc3Rlcih0cnVlKVxuICAgIHRoaXMuc2V0dXBTY2hlbWFGaWVsZHMoKVxuICAgIC8vIERlbGVnYXRlIGNoYW5nZSBldmVudHMgdGhyb3VnaCB0byBwYXJlbnQgc2NoZW1hOlxuICAgIHRoaXMuZGVsZWdhdGUoJ2NoYW5nZScsIHRoaXMucGFyZW50U2NoZW1hQ29tcG9uZW50KVxuICAgIHRoaXMuZW1pdEV2ZW50KCdpbml0aWFsaXplJykgLy8gTm90IGAnY3JlYXRlJ2AsIHNpbmNlIHRoYXQncyBmb3IgZGF0YS5cbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5lbWl0RXZlbnQoJ2Rlc3Ryb3knKVxuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aChcbiAgICAgICAgdGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCxcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIG1hdGNoXG4gICAgICApXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudEJ5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50c0J5TmFtZShkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlOYW1lKHRoaXMuY29tcG9uZW50c0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50QnlOYW1lKG5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllcyh0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudChkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENvbXBvbmVudHMoZGF0YVBhdGhPck5hbWUsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldFBhbmVsc0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpXG4gICAgfSxcblxuICAgIGdldFBhbmVsQnlEYXRhUGF0aChkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBhbmVsc0J5RGF0YVBhdGgoZGF0YVBhdGgsIG1hdGNoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzKHRoaXMucGFuZWxzQnlEYXRhUGF0aCwgZGF0YVBhdGhPck5hbWUsIG1hdGNoKVxuICAgIH0sXG5cbiAgICBnZXRQYW5lbChkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSwgbWF0Y2gpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgc29tZUNvbXBvbmVudChjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHRoaXMuaXNQb3B1bGF0ZWQgJiYgdGhpcy5jb21wb25lbnRzLnNvbWUoY2FsbGJhY2spXG4gICAgfSxcblxuICAgIGV2ZXJ5Q29tcG9uZW50KGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1BvcHVsYXRlZCAmJiB0aGlzLmNvbXBvbmVudHMuZXZlcnkoY2FsbGJhY2spXG4gICAgfSxcblxuICAgIG9uRXhwYW5kKGV4cGFuZCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2V4cGFuZCcsIHtcbiAgICAgICAgLy8gVE9ETzogQWN0dWFsbHkgZXhwb3NlIHRoaXMgb24gRGl0b0NvbnRleHQ/XG4gICAgICAgIGNvbnRleHQ6IHsgZXhwYW5kIH1cbiAgICAgIH0pXG4gICAgICAvLyBQcmV2ZW50IGNsb3NpbmcgdGhlIHNjaGVtYSB3aXRoIGludmFsaWQgZGF0YSwgc2luY2UgdGhlIGluLWNvbXBvbmVudFxuICAgICAgLy8gdmFsaWRhdGlvbiB3aWxsIG5vdCBiZSBleGVjdXRlZCBvbmNlIGl0J3MgY2xvc2VkLlxuXG4gICAgICAvLyBUT0RPOiBNb3ZlIHZhbGlkYXRpb24gb3V0IG9mIGNvbXBvbmVudHMsIHRvIHNjaGVtYSwganVzdCBsaWtlXG4gICAgICAvLyBwcm9jZXNzaW5nLCBhbmQgdXNlIGBzaG93VmFsaWRhdGlvbkVycm9ycygpYCBmb3IgdGhlIHJlc3VsdGluZyBlcnJvcnMsXG4gICAgICAvLyB0aGVuIHJlbW92ZSB0aGlzIHJlcXVpcmVtZW50LCBzaW5jZSB3ZSBjYW4gdmFsaWRhdGUgY2xvc2VkIGZvcm1zIGFuZFxuICAgICAgLy8gc2NoZW1hcyB0aGVuLlxuICAgICAgaWYgKCF0aGlzLm9wZW5lZCB8fCBleHBhbmQgfHwgdGhpcy52YWxpZGF0ZUFsbCgpKSB7XG4gICAgICAgIHRoaXMub3BlbmVkID0gZXhwYW5kXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2NoYW5nZScpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgICBjb21wb25lbnQucmVzZXRWYWxpZGF0aW9uKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgICAgY29tcG9uZW50LmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLnBhcmVudFNjaGVtYUNvbXBvbmVudD8uZm9jdXMoKVxuICAgICAgdGhpcy5vcGVuZWQgPSB0cnVlXG4gICAgfSxcblxuICAgIHZhbGlkYXRlQWxsKG1hdGNoLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudHNCeURhdGFQYXRoIH0gPSB0aGlzXG4gICAgICBsZXQgZGF0YVBhdGhzXG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgY29uc3QgY2hlY2sgPSBpc0Z1bmN0aW9uKG1hdGNoKVxuICAgICAgICAgID8gbWF0Y2hcbiAgICAgICAgICA6IGlzUmVnRXhwKG1hdGNoKVxuICAgICAgICAgICAgPyBmaWVsZCA9PiBtYXRjaC50ZXN0KGZpZWxkKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIGRhdGFQYXRocyA9IGNoZWNrXG4gICAgICAgICAgPyBPYmplY3Qua2V5cyhjb21wb25lbnRzQnlEYXRhUGF0aCkuZmlsdGVyKGNoZWNrKVxuICAgICAgICAgIDogaXNBcnJheShtYXRjaClcbiAgICAgICAgICAgID8gbWF0Y2hcbiAgICAgICAgICAgIDogW21hdGNoXVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgbGV0IGZpcnN0ID0gdHJ1ZVxuICAgICAgZGF0YVBhdGhzIHx8PSBPYmplY3Qua2V5cyhjb21wb25lbnRzQnlEYXRhUGF0aClcbiAgICAgIGZvciAoY29uc3QgZGF0YVBhdGggb2YgZGF0YVBhdGhzKSB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0aGlzLmdldENvbXBvbmVudHNCeURhdGFQYXRoKGRhdGFQYXRoKVxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgaWYgKCFjb21wb25lbnQudmFsaWRhdGUobm90aWZ5KSkge1xuICAgICAgICAgICAgLy8gRm9jdXMgZmlyc3QgZXJyb3IgZmllbGRcbiAgICAgICAgICAgIGlmIChub3RpZnkgJiYgZmlyc3QpIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50LmZvY3VzKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKG5vdGlmeSAmJiAhaXNWYWxpZCkge1xuICAgICAgICB0aGlzLm5vdGlmeUVycm9ycygpXG4gICAgICB9XG4gICAgICByZXR1cm4gaXNWYWxpZFxuICAgIH0sXG5cbiAgICB2ZXJpZnlBbGwobWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQWxsKG1hdGNoLCBmYWxzZSlcbiAgICB9LFxuXG4gICAgYXN5bmMgc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cykge1xuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgICBsZXQgZmlyc3QgPSB0cnVlXG4gICAgICBjb25zdCB1bm1hdGNoZWQgPSBbXVxuICAgICAgZm9yIChjb25zdCBbZGF0YVBhdGgsIGVycnNdIG9mIE9iamVjdC5lbnRyaWVzKGVycm9ycykpIHtcbiAgICAgICAgLy8gSWYgdGhlIHNjaGVtYSBpcyBhIGRhdGEtcm9vdCwgcHJlZml4IGl0cyBvd24gZGF0YVBhdGggdG8gYWxsIGVycm9ycyxcbiAgICAgICAgLy8gc2luY2UgdGhlIGRhdGEgdGhhdCBpdCBzZW5kcyBhbmQgdmFsaWRhdGVzIHdpbGwgYmUgdW5wcmVmaXhlZC5cbiAgICAgICAgY29uc3QgZnVsbERhdGFQYXRoID0gdGhpcy5oYXNPd25EYXRhXG4gICAgICAgICAgPyBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBkYXRhUGF0aClcbiAgICAgICAgICA6IGRhdGFQYXRoXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMsIHRoaXMuZGF0YVBhdGgsIHRoaXMuaGFzT3duRGF0YSwgZnVsbERhdGFQYXRoKVxuICAgICAgICAvLyBDb252ZXJ0IGZyb20gSmF2YVNjcmlwdCBwcm9wZXJ0eSBhY2Nlc3Mgbm90YXRpb24sIHRvIG91ciBvd24gZm9ybVxuICAgICAgICAvLyBvZiByZWxhdGl2ZSBKU09OIHBvaW50ZXJzIGFzIGRhdGEtcGF0aHM6XG4gICAgICAgIGNvbnN0IGRhdGFQYXRoUGFydHMgPSBwYXJzZURhdGFQYXRoKGZ1bGxEYXRhUGF0aClcbiAgICAgICAgbGV0IGZvdW5kID0gZmFsc2VcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGhQYXJ0cylcbiAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgIGlmIChjb21wb25lbnQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJycywgZmlyc3QgJiYgZm9jdXMpKSB7XG4gICAgICAgICAgICBmb3VuZCA9IHRydWVcbiAgICAgICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICAgIC8vIENvdWxkbid0IGZpbmQgYSBjb21wb25lbnQgaW4gYW4gYWN0aXZlIGZvcm0gZm9yIHRoZSBnaXZlbiBkYXRhUGF0aC5cbiAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGZpbmQgYSBjb21wb25lbnQgc2VydmluZyBhIHBhcnQgb2YgdGhlIGRhdGFQYXRoLFxuICAgICAgICAgIC8vIGFuZCB0YWtlIGl0IGZyb20gdGhlcmU6XG4gICAgICAgICAgY29uc3QgcHJvcGVydHkgPSBkYXRhUGF0aFBhcnRzLnBvcCgpXG4gICAgICAgICAgd2hpbGUgKGRhdGFQYXRoUGFydHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGhQYXJ0cylcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGF3YWl0IGNvbXBvbmVudC5uYXZpZ2F0ZVRvQ29tcG9uZW50Py4oXG4gICAgICAgICAgICAgICAgICBmdWxsRGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgICBzdWJDb21wb25lbnRzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZvdW5kID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2Ygc3ViQ29tcG9uZW50cykge1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycnMgPSBlcnJvcnNbY29tcG9uZW50LmRhdGFQYXRoXVxuICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJzLCBmaXJzdCAmJiBmb2N1cylcbiAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm91bmRcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIEZvdW5kIGEgbmVzdGVkIGZvcm0gdG8gZGlzcGxheSBhdCBsZWFzdCBwYXJ0cyBmbyB0aGUgZXJyb3JzLlxuICAgICAgICAgICAgICAgIC8vIFdlIGNhbid0IHNob3cgYWxsIGVycm9ycyBhdCBvbmNlLCBzbyB3ZSdyZSBkb25lLiBEb24ndCBjYWxsXG4gICAgICAgICAgICAgICAgLy8gYG5vdGlmeUVycm9ycygpYCB5ZXQsIGFzIHdlIGNhbiBvbmx5IGRpc3BsYXkgaXQgb25jZVxuICAgICAgICAgICAgICAgIC8vIGBzaG93VmFsaWRhdGlvbkVycm9ycygpYCB3YXMgY2FsbGVkIGZyb20gYERpdG9Gb3JtLm1vdW50ZWQoKWBcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU3RpbGwgaGVyZSwgc28ga2VlcCByZW1vdmluZyB0aGUgbGFzdCBwYXJ0IHVudGlsIHdlIGZpbmQgYSBtYXRjaC5cbiAgICAgICAgICAgIGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gV2hlbiB0aGUgZXJyb3IgY2FuJ3QgYmUgbWF0Y2hlZCwgYWRkIGl0IHRvIGEgbGlzdCBvZiB1bm1hdGNoZWRcbiAgICAgICAgICAvLyBlcnJvcnMgd2l0aCBkZWNlbnQgbWVzc2FnZSwgdG8gcmVwb3J0IGF0IHRoZSBlbmQuXG4gICAgICAgICAgY29uc3QgZmllbGQgPSBsYWJlbGl6ZShwcm9wZXJ0eSlcbiAgICAgICAgICBmb3IgKGNvbnN0IGVyciBvZiBlcnJzKSB7XG4gICAgICAgICAgICBjb25zdCBwcmVmaXggPSBmaWVsZFxuICAgICAgICAgICAgICA/IGBUaGUgZmllbGQgJHtmaWVsZH1gXG4gICAgICAgICAgICAgIDogYFRoZSAke3RoaXMuZm9ybUxhYmVsfWBcbiAgICAgICAgICAgIHVubWF0Y2hlZC5wdXNoKGAke3ByZWZpeH0gJHtlcnIubWVzc2FnZX1gKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICB9XG4gICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgIHRoaXMubm90aWZ5RXJyb3JzKHVubWF0Y2hlZC5qb2luKCdcXG4nKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbm90aWZ5RXJyb3JzKG1lc3NhZ2UpIHtcbiAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgdGl0bGU6ICdWYWxpZGF0aW9uIEVycm9ycycsXG4gICAgICAgIHRleHQ6IG1lc3NhZ2UgfHwgJ1BsZWFzZSBjb3JyZWN0IHRoZSBoaWdobGlnaHRlZCBlcnJvcnMuJ1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgcmVzZXREYXRhKCkge1xuICAgICAgLy8gV2UgY2FuJ3Qgc2V0IGB0aGlzLmRhdGEgPSAuLi5gIGJlY2F1c2UgaXQncyBhIHByb3BlcnR5LCBidXQgd2UgY2FuIHNldFxuICAgICAgLy8gYWxsIGtub3duIHByb3BlcnRpZXMgb24gaXQgdG8gdGhlIHZhbHVlcyByZXR1cm5lZCBieVxuICAgICAgLy8gYHNldERlZmF1bHRWYWx1ZXMoKWAsIGFzIHRoZXkgYXJlIGFsbCByZWFjdGl2ZSBhbHJlYWR5IGZyb20gdGhlIHN0YXJ0czpcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5kYXRhLCBzZXREZWZhdWx0VmFsdWVzKHRoaXMuc2NoZW1hLCB7fSwgdGhpcykpXG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICB9LFxuXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gZGF0YSkge1xuICAgICAgICBpZiAobmFtZSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLW11dGF0aW5nLXByb3BzXG4gICAgICAgICAgdGhpcy5kYXRhW25hbWVdID0gZGF0YVtuYW1lXVxuICAgICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuZ2V0Q29tcG9uZW50c0J5TmFtZShuYW1lKSkge1xuICAgICAgICAgICAgY29tcG9uZW50Lm1hcmtEaXJ0eSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGZpbHRlckRhdGEoZGF0YSkge1xuICAgICAgLy8gRmlsdGVycyBvdXQgYXJyYXlzIGFuZCBvYmplY3RzIHRoYXQgYXJlIGJhY2sgYnkgZGF0YSByZXNvdXJjZXNcbiAgICAgIC8vIHRoZW1zZWx2ZXMsIGFzIHRob3NlIGFyZSBhbHJlYWR5IHRha2luZyBjYXJlIG9mIHRocm91Z2ggdGhlaXIgb3duIEFQSVxuICAgICAgLy8gcmVzb3VyY2UgZW5kLXBvaW50cyBhbmQgc2hvdWxkbid0IGJlIHNldC5cbiAgICAgIGNvbnN0IGNvcHkgPSB7fVxuICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSB8fCBpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpXG4gICAgICAgICAgaWYgKGNvbXBvbmVudHMuc29tZShjb21wb25lbnQgPT4gY29tcG9uZW50LnByb3ZpZGVzRGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvcHlbbmFtZV0gPSB2YWx1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNvcHlcbiAgICB9LFxuXG4gICAgcHJvY2Vzc0RhdGEoeyB0YXJnZXQgPSAnY2xpcGJvYXJkJywgc2NoZW1hT25seSA9IHRydWUgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gcHJvY2Vzc0RhdGEoXG4gICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICB0aGlzLmRhdGFQYXRoLFxuICAgICAgICB7XG4gICAgICAgICAgLy8gTmVlZGVkIGZvciBEaXRvQ29udGV4dCBoYW5kbGluZyBpbnNpZGUgYHByb2Nlc3NEYXRhYCBhbmRcbiAgICAgICAgICAvLyBgcHJvY2Vzc1NjaGVtYURhdGEoKWA6XG4gICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgIHNjaGVtYU9ubHksXG4gICAgICAgICAgdGFyZ2V0XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gYCRzY2hlbWFQYXJlbnRDb21wb25lbnQoKWAgaXMgb25seSBzZXQgaWYgb25lIG9mIHRoZSBhbmNlc3RvcnMgdXNlc1xuICAgICAgLy8gdGhlIGBTY2hlbWFQYXJlbnRNaXhpbmA6XG4gICAgICB0aGlzLiRzY2hlbWFQYXJlbnRDb21wb25lbnQoKT8uX3JlZ2lzdGVyU2NoZW1hQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudCwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5LCBjb21wb25lbnQsIGFkZClcbiAgICAgIC8vIE9ubHkgcmVnaXN0ZXIgd2l0aCB0aGUgcGFyZW50IGlmIHNjaGVtYSBzaGFyZXMgZGF0YSB3aXRoIGl0LlxuICAgICAgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQ/Ll9yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyUGFuZShwYW5lLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lc1JlZ2lzdHJ5LCBwYW5lLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlclBhbmVsKHBhbmVsLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lbHNSZWdpc3RyeSwgcGFuZWwsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyRW50cnkocmVnaXN0cnksIGVudHJ5LCBhZGQpIHtcbiAgICAgIGNvbnN0IHVpZCA9IGVudHJ5LiR1aWRcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgcmVnaXN0cnlbdWlkXSA9IGVudHJ5XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgcmVnaXN0cnlbdWlkXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBfbGlzdEVudHJpZXNCeURhdGFQYXRoKHJlZ2lzdHJ5KSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZWdpc3RyeSkucmVkdWNlKChlbnRyaWVzQnlEYXRhUGF0aCwgZW50cnkpID0+IHtcbiAgICAgICAgLy8gTXVsdGlwbGUgZW50cmllcyBjYW4gYmUgbGlua2VkIHRvIHRoZSBzYW1lIGRhdGEtcGF0aCwgZS5nLiB3aGVuXG4gICAgICAgIC8vIHRoZXJlIGFyZSB0YWJzLiBMaW5rIGVhY2ggZGF0YS1wYXRoIHRvIGFuIGFycmF5IG9mIGVudHJpZXMuXG4gICAgICAgIGNvbnN0IHsgZGF0YVBhdGggfSA9IGVudHJ5XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSAoZW50cmllc0J5RGF0YVBhdGhbZGF0YVBhdGhdIHx8PSBbXSlcbiAgICAgICAgZW50cmllcy5wdXNoKGVudHJ5KVxuICAgICAgICByZXR1cm4gZW50cmllc0J5RGF0YVBhdGhcbiAgICAgIH0sIHt9KVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllcyhlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgoZGF0YVBhdGgpLnN0YXJ0c1dpdGgodGhpcy5kYXRhUGF0aClcbiAgICAgICAgPyB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aChlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgsIG1hdGNoKVxuICAgICAgICA6IHRoaXMuX2dldEVudHJpZXNCeU5hbWUoZW50cmllc0J5RGF0YVBhdGgsIGRhdGFQYXRoLCBtYXRjaClcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXNCeURhdGFQYXRoKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJFbnRyaWVzKFxuICAgICAgICBlbnRyaWVzQnlEYXRhUGF0aFtub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aCldIHx8IFtdLFxuICAgICAgICBtYXRjaFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllc0J5TmFtZShlbnRyaWVzQnlEYXRhUGF0aCwgbmFtZSwgbWF0Y2gpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maWx0ZXJFbnRyaWVzKFxuICAgICAgICBlbnRyaWVzQnlEYXRhUGF0aFthcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKV0gfHwgW10sXG4gICAgICAgIG1hdGNoXG4gICAgICApXG4gICAgfSxcblxuICAgIF9maWx0ZXJFbnRyaWVzKGVudHJpZXMsIG1hdGNoKSB7XG4gICAgICByZXR1cm4gbWF0Y2ggPyBlbnRyaWVzLmZpbHRlcihtYXRjaCkgOiBlbnRyaWVzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2NoZW1hIHtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLy8gVG8gZGlzcGxheSBzY2hlbWEgbmV4dCB0byBwYW5lbHM6XG4gIGRpc3BsYXk6IGZsZXg7XG4gIG1pbi1oZWlnaHQ6IDEwMCU7XG5cbiAgPiAuZGl0by1zY2hlbWEtY29udGVudCB7XG4gICAgZmxleDogMSAxIDEwMCU7XG4gICAgLy8gU28gdGhhdCBzY2hlbWEgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50O1xuXG4gICAgPiAqOm9ubHktY2hpbGQge1xuICAgICAgZ3JpZC1yb3ctZW5kOiBub25lO1xuICAgIH1cblxuICAgICYuZGl0by1zY3JvbGw6aGFzKC5kaXRvLXBhbmU6bGFzdC1jaGlsZCk6OmFmdGVyIHtcbiAgICAgIC8vIEVhdCB1cCBuZWdhdGl2ZSBtYXJnaW4gb2YgdGhlIGxhc3QgY2hpbGQgdG8gcHJldmVudCBvdmVyc2Nyb2xsLlxuICAgICAgY29udGVudDogJyc7XG4gICAgfVxuXG4gICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aCArIDIgKiAkY29udGVudC1wYWRkaW5nO1xuICB9XG5cbiAgPiAuZGl0by1idXR0b25zLFxuICA+IC5kaXRvLXBhbmVscyB7XG4gICAgZmxleDogMSAxIDAlO1xuICB9XG5cbiAgPiAuZGl0by1idXR0b25zIHtcbiAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZztcbiAgfVxuXG4gID4gLmRpdG8tcGFuZWxzIHtcbiAgICBwYWRkaW5nOiAkY29udGVudC1wYWRkaW5nICRjb250ZW50LXBhZGRpbmcgJGNvbnRlbnQtcGFkZGluZyAwO1xuICB9XG5cbiAgLy8gRGlzcGxheSBhIHJ1bGVyIGJldHdlZW4gdGFiYmVkIGNvbXBvbmVudHMgYW5kIHRvd2FyZHMgdGhlIC5kaXRvLWJ1dHRvbnNcbiAgLmRpdG8tcGFuZS10YWIgKyAuZGl0by1wYW5lLW1haW4ge1xuICAgICY6OmJlZm9yZSB7XG4gICAgICAvLyBVc2UgYSBwc2V1ZG8gZWxlbWVudCB0byBkaXNwbGF5IGEgcnVsZXIgd2l0aCBwcm9wZXIgbWFyZ2luc1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgYm9yZGVyLWJvdHRvbTogJGJvcmRlci1zdHlsZTtcbiAgICAgIC8vIEFkZCByZW1vdmVkICRmb3JtLXNwYWNpbmcgYWdhaW4gdG8gdGhlIHJ1bGVyXG4gICAgICBtYXJnaW46ICRjb250ZW50LXBhZGRpbmcgJGZvcm0tc3BhY2luZy1oYWxmICRmb3JtLXNwYWNpbmctaGFsZjtcbiAgICB9XG4gIH1cblxuICAuZGl0by1wYW5lLW1haW4gKyAuZGl0by1idXR0b25zLW1haW4ge1xuICAgIC8vIE5lZWRlZCBmb3JtcyB3aXRoIHN0aWNreSBtYWluIGJ1dHRvbnMuXG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxufVxuXG4uZGl0by1zY2hlbWEtaGVhZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gIC5kaXRvLXRhYnMsXG4gIC5kaXRvLWNsaXBib2FyZCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1zZWxmOiBmbGV4LWVuZDtcbiAgfVxuXG4gIC5kaXRvLWNsaXBib2FyZCB7XG4gICAgJjpvbmx5LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgIH1cblxuICAgIC5kaXRvLWJ1dHRvbiB7XG4gICAgICBtYXJnaW46IDAgMCAkdGFiLW1hcmdpbiAkdGFiLW1hcmdpbjtcbiAgICB9XG4gIH1cblxuICAmLS1tZW51IHtcbiAgICAvLyBBbGlnbiB0aGUgdGFicyBvbiB0b3Agb2YgdG8gdGhlIGhlYWRlciBtZW51LlxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBoZWlnaHQ6ICRtZW51LWhlaWdodDtcbiAgICBwYWRkaW5nOiAwICRtZW51LXBhZGRpbmctaG9yO1xuICAgIG1heC13aWR0aDogJGNvbnRlbnQtd2lkdGg7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgei1pbmRleDogJG1lbnUtei1pbmRleDtcbiAgICAvLyBUdXJuIG9mZiBwb2ludGVyIGV2ZW50cyBzbyB0aGF0IERpdG9UcmFpbCBrZWVwcyByZWNlaXZpbmcgZXZlbnRzLi4uXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgLy8gLi4uYnV0IGFsbG93IGludGVyYWN0aW9uIHdpdGggdGhlIHRhYnMgYW5kIGJ1dHRvbnMgKGUuZy4gY2xpcGJvYXJkKVxuICAgIC8vIGxheWVyZWQgb24gdG9wIG9mIERpdG9UcmFpbC5cbiAgICAuZGl0by10YWJzLFxuICAgIC5kaXRvLWJ1dHRvbnMge1xuICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgICBsaW5lLWhlaWdodDogJG1lbnUtbGluZS1oZWlnaHQ7XG4gICAgICBmb250LXNpemU6ICRtZW51LWZvbnQtc2l6ZTtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuRGl0b1NjaGVtYS5kaXRvLXNjaGVtYS1pbmxpbmVkKFxuICA6Y2xhc3M9XCJ7ICdkaXRvLXNjaGVtYS1jb21wYWN0JzogaXNDb21wYWN0IH1cIlxuICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICA6ZGF0YT1cImRhdGFcIlxuICA6bWV0YT1cIm1ldGFcIlxuICA6c3RvcmU9XCJzdG9yZVwiXG4gIDpsYWJlbD1cImlzQ29tcGFjdCA/IG51bGwgOiBsYWJlbFwiXG4gIDppbmxpbmVkPVwidHJ1ZVwiXG4gIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgOmdlbmVyYXRlTGFiZWxzPVwiIWlzQ29tcGFjdFwiXG4pXG4gIC8vLSBSZW5kZXIgZGl0by1lZGl0LWJ1dHRvbnMgZm9yIGlubGluZWQgc2NoZW1hcyBzZXBhcmF0ZWx5IGZyb20gYWxsXG4gIC8vLSBvdGhlcnMgaW4gYFR5cGVMaXN0YCBhcyBhIHNjb3BlLCBmb3IgYmV0dGVyIGhhbmRsaW5nIG9mIGxheW91dC5cbiAgdGVtcGxhdGUoI2VkaXQtYnV0dG9ucylcbiAgICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgICB2LWlmPVwiZGVsZXRhYmxlIHx8IGRyYWdnYWJsZSB8fCBlZGl0YWJsZVwiXG4gICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgOmVkaXRQYXRoPVwiZWRpdFBhdGhcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIEBkZWxldGU9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNDb21wYWN0IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvU2NoZW1hSW5saW5lZCcsIHtcbiAgZW1pdHM6IFsnZGVsZXRlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRlbGV0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpc0NvbXBhY3QoKSB7XG4gICAgICByZXR1cm4gaXNDb21wYWN0KHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc0NvbXBhY3QgJiYgISF0aGlzLmxhYmVsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2NoZW1hLWlubGluZWQge1xuICA+IC5kaXRvLXNjaGVtYS1jb250ZW50IHtcbiAgICA+IC5kaXRvLXNjaGVtYS1oZWFkZXIge1xuICAgICAgLy8gQ2hhbmdlIHNwYWNpbmcgc28gLmRpdG8tbGFiZWwgY292ZXJzIHRoZSBmdWxsIC5kaXRvLXNjaGVtYS1oZWFkZXIuXG4gICAgICBtYXJnaW46IC0kZm9ybS1zcGFjaW5nO1xuXG4gICAgICAuZGl0by1sYWJlbCB7XG4gICAgICAgIC8vIEFkZCByZW1vdmVkICRmb3JtLXNwYWNpbmcgYWdhaW5cbiAgICAgICAgLS1sYWJlbC1wYWRkaW5nOiAjeyRmb3JtLXNwYWNpbmd9O1xuXG4gICAgICAgIG1hcmdpbjogMDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94O1xuICAgICAgICAvLyBCZWNhdXNlIHRhYmxlcyBoYXZlIGEgZnVubnkgd2F5IG9mIGFsbG93aW5nIHRvbyBtdWNoIHdpZHRoIGdyb3d0aDpcbiAgICAgICAgbWF4LXdpZHRoOiAkY29udGVudC13aWR0aDtcbiAgICAgICAgLy8gUHJldmVudCBjb2xsYXBzaW5nIHRvIG1pbi1oZWlnaHQgd2hlbiBhbG9uZSBpblxuICAgICAgICAvLyAuZGl0by1zY2hlbWEtY29udGVudCwgZHVlIHRvIGdyaWQtdGVtcGxhdGUtcm93czogbWluLWNvbnRlbnRcbiAgICAgICAgbWluLWhlaWdodDogMmVtO1xuICAgICAgfVxuICAgIH1cblxuICAgID4gLmRpdG8tcGFuZSB7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjwhLS0gZXNsaW50LWRpc2FibGUgdnVlL25vLXRlbXBsYXRlLXNoYWRvdyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1wYW5lKFxuICB2LWlmPVwiaXNQb3B1bGF0ZWQgJiYgY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPiAwXCJcbiAgdi1zaG93PVwidmlzaWJsZVwiXG4gIDpjbGFzcz1ge1xuICAgICdkaXRvLXBhbmUtLXNpbmdsZSc6IGlzU2luZ2xlQ29tcG9uZW50XG4gIH1gXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPWB7XG4gICAgICBzY2hlbWEsXG4gICAgICBkYXRhUGF0aCxcbiAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgbmVzdGVkLFxuICAgICAgc3RvcmVcbiAgICB9LCBpbmRleCBpbiBjb21wb25lbnRTY2hlbWFzYFxuICApXG4gICAgLmRpdG8tYnJlYWsoXG4gICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYmVmb3JlJ1wiXG4gICAgKVxuICAgIERpdG9Db250YWluZXIoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKHNjaGVtYSlcIlxuICAgICAgOmtleT1cIm5lc3RlZERhdGFQYXRoXCJcbiAgICAgIHYtcmVzaXplPVwiZXZlbnQgPT4gb25SZXNpemUoaW5kZXgsIGV2ZW50KVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOnNpbmdsZT1cImlzU2luZ2xlQ29tcG9uZW50XCJcbiAgICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmdlbmVyYXRlTGFiZWxzPVwiZ2VuZXJhdGVMYWJlbHNcIlxuICAgICAgOmZpcnN0SW5Sb3c9XCJzY2hlbWEuYnJlYWsgPT09ICdiZWZvcmUnIHx8IGlzRmlyc3RJblJvdyhpbmRleClcIlxuICAgICAgOmxhc3RJblJvdz1cInNjaGVtYS5icmVhayA9PT0gJ2FmdGVyJyB8fCBpc0xhc3RJblJvdyhpbmRleClcIlxuICAgIClcbiAgICAuZGl0by1icmVhayhcbiAgICAgIHYtaWY9XCJzY2hlbWEuYnJlYWsgPT09ICdhZnRlcidcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZ2V0QWxsUGFuZWxFbnRyaWVzLCBpc05lc3RlZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFuZScsIHtcbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gdGhpcy50YWJDb21wb25lbnRcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0YWI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2luZ2xlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdmlzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcG9zaXRpb25zOiBbXVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnRhYiA/IHRoaXMgOiB0aGlzLiR0YWJDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRTY2hlbWFzKCkge1xuICAgICAgLy8gQ29tcHV0ZSBhIGNvbXBvbmVudHMgbGlzdCB3aGljaCBoYXMgdGhlIGRhdGFQYXRoIGJha2VkIGludG8gaXRzIGtleXNcbiAgICAgIC8vIGFuZCBhZGRzIHRoZSBrZXkgYXMgdGhlIG5hbWUgdG8gZWFjaCBjb21wb25lbnQsIHVzZWQgZm9yIGxhYmVscywgZXRjLlxuICAgICAgLy8gTk9URTogc2NoZW1hIGNhbiBiZSBudWxsIHdoaWxlIG11bHRpLWZvcm0gbGlzdHMgbG9hZCB0aGVpciBkYXRhLFxuICAgICAgLy8gYmVjYXVzZSBvbmx5IHRoZSBhdmFpbGFibGUgZGF0YSB3aWxsIGRldGVybWluZSB0aGUgdHlwZSBvZiBmb3JtLlxuICAgICAgLy8gV2hlbiBlZGl0aW5nIHByaW1pdGl2ZSB2YWx1ZXMgdGhyb3VnaCBhIGZvcm0sIGRvIG5vdCBhcHBlbmQgJ25hbWUnIHRvXG4gICAgICAvLyB0aGUgY29tcG9uZW50J3MgZGF0YVBhdGggc28gaXQgY2FuIGJlIG1hcHBlZCB0byBmcm9tIHZhbGlkYXRpb24gZXJyb3JzLlxuICAgICAgLy8gTk9URTogTm90IGFsbCBzY2hlbWFzIC8gY29tcG9uZW50cyBoYXZlIGEgc291cmNlU2NoZW1hLCBlLmcuIGRpYWxvZ3MuXG4gICAgICBjb25zdCB3cmFwUHJpbWl0aXZlcyA9IHRoaXMuc291cmNlU2NoZW1hPy53cmFwUHJpbWl0aXZlc1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hPy5jb21wb25lbnRzIHx8IHt9KS5tYXAoXG4gICAgICAgIChbbmFtZSwgc2NoZW1hXSkgPT4ge1xuICAgICAgICAgIC8vIEFsd2F5cyBhZGQgbmFtZSB0byBjb21wb25lbnQgc2NoZW1hLlxuICAgICAgICAgIHNjaGVtYS5uYW1lID0gbmFtZVxuICAgICAgICAgIC8vIFNoYXJlIGRhdGFQYXRoIGFuZCBzdG9yZSB3aXRoIHBhcmVudCBpZiBub3QgbmVzdGVkOlxuICAgICAgICAgIGNvbnN0IG5lc3RlZCA9IGlzTmVzdGVkKHNjaGVtYSlcbiAgICAgICAgICBjb25zdCBuZXN0ZWREYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgIGRhdGFQYXRoOlxuICAgICAgICAgICAgICBuZXN0ZWQgJiYgIXdyYXBQcmltaXRpdmVzXG4gICAgICAgICAgICAgICAgPyBuZXN0ZWREYXRhUGF0aFxuICAgICAgICAgICAgICAgIDogdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICAgIG5lc3RlZERhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgICAgc3RvcmU6IG5lc3RlZCA/IHRoaXMuZ2V0Q2hpbGRTdG9yZShuYW1lKSA6IHRoaXMuc3RvcmVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgcGFuZWxFbnRyaWVzKCkge1xuICAgICAgLy8gR2F0aGVyIGFsbCBwYW5lbCBzY2hlbWFzIGZyb20gYWxsIGNvbXBvbmVudCBzY2hlbWFzLCBieSBmaW5kaW5nIHRob3NlXG4gICAgICAvLyB0aGF0IHdhbnQgdG8gcHJvdmlkZSBhIHBhbmVsLiBTZWUgYGdldEFsbFBhbmVsRW50cmllcygpYCBmb3IgZGV0YWlscy5cbiAgICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFNjaGVtYXMuZmxhdE1hcChcbiAgICAgICAgKHsgc2NoZW1hLCBuZXN0ZWREYXRhUGF0aDogZGF0YVBhdGggfSkgPT5cbiAgICAgICAgICBnZXRBbGxQYW5lbEVudHJpZXMoXG4gICAgICAgICAgICB0aGlzLmFwaSxcbiAgICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQsXG4gICAgICAgICAgICB0aGlzLnRhYkNvbXBvbmVudFxuICAgICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNTaW5nbGVDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaW5nbGUgJiYgdGhpcy5jb21wb25lbnRTY2hlbWFzLmxlbmd0aCA9PT0gMVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJQYW5lKHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICBpZiAodGhpcy50YWIpIHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBoYXNoOiBgIyR7dGhpcy50YWJ9YCB9KVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblJlc2l6ZShpbmRleCwgeyB0YXJnZXQgfSkge1xuICAgICAgY29uc3QgeyB5LCB3aWR0aCwgaGVpZ2h0IH0gPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIHRoaXMucG9zaXRpb25zW2luZGV4XSA9IHdpZHRoID4gMCAmJiBoZWlnaHQgPiAwID8geSA6IG51bGxcbiAgICB9LFxuXG4gICAgaXNGaXJzdEluUm93KGluZGV4KSB7XG4gICAgICBjb25zdCB7IHBvc2l0aW9ucyB9ID0gdGhpc1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgcG9zaXRpb25zW2luZGV4XSAhPT0gbnVsbCAmJiAoXG4gICAgICAgICAgaW5kZXggPT09IDAgfHxcbiAgICAgICAgICAoZmluZE5leHRQb3NpdGlvbihwb3NpdGlvbnMsIGluZGV4LCAtMSwgSW5maW5pdHkpIDwgcG9zaXRpb25zW2luZGV4XSlcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0xhc3RJblJvdyhpbmRleCkge1xuICAgICAgY29uc3QgeyBwb3NpdGlvbnMgfSA9IHRoaXNcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHBvc2l0aW9uc1tpbmRleF0gIT09IG51bGwgJiYgKFxuICAgICAgICAgIGluZGV4ID09PSBwb3NpdGlvbnMubGVuZ3RoIC0gMSB8fFxuICAgICAgICAgIGZpbmROZXh0UG9zaXRpb24ocG9zaXRpb25zLCBpbmRleCwgKzEsIDApID4gcG9zaXRpb25zW2luZGV4XVxuICAgICAgICApXG4gICAgICApXG4gICAgfVxuICB9XG59KVxuXG5mdW5jdGlvbiBmaW5kTmV4dFBvc2l0aW9uKHBvc2l0aW9ucywgaW5kZXgsIHN0ZXAsIGZhbGxiYWNrKSB7XG4gIGZvciAobGV0IGkgPSBpbmRleCArIHN0ZXA7IGkgPj0gMCAmJiBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSArPSBzdGVwKSB7XG4gICAgY29uc3QgcG9zaXRpb24gPSBwb3NpdGlvbnNbaV1cbiAgICBpZiAocG9zaXRpb24pIHJldHVybiBwb3NpdGlvblxuICB9XG4gIHJldHVybiBmYWxsYmFja1xufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tcGFuZSB7XG4gICRtYXgtd2lkdGg6ICRjb250ZW50LXdpZHRoICsgMiAqICRjb250ZW50LXBhZGRpbmc7XG5cbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gIHBhZGRpbmc6ICRjb250ZW50LXBhZGRpbmc7XG4gIC8vIFJlbW92ZSB0aGUgcGFkZGluZyBhZGRlZCBieSBgLmRpdG8tY29udGFpbmVyYCBpbnNpZGUgYC5kaXRvLXBhbmVgOlxuICBtYXJnaW46ICgtJGZvcm0tc3BhY2luZykgKC0kZm9ybS1zcGFjaW5nLWhhbGYpO1xuICAvLyBBZGQgcmVtb3ZlZCBob3Jpem9udGFsIG1hcmdpbiBhZ2FpbiB0byBtYXgtd2lkdGg6XG4gIG1heC13aWR0aDogJG1heC13aWR0aCArIDIgKiAkZm9ybS1zcGFjaW5nLWhhbGY7XG4gIC8vIFVzZSBgZmxleDogMCVgIGZvciBhbGwgYC5kaXRvLXBhbmVgIGV4Y2VwdCBgLmRpdG8tcGFuZS1tYWluYCxcbiAgLy8gc28gdGhhdCB0aGUgYC5kaXRvLWJ1dHRvbnMtbWFpbmAgY2FuIGJlIG1vdmVkIGFsbCB0aGUgd2F5IHRvIHRoZSBib3R0b20uXG4gIGZsZXg6IDAlO1xuXG4gICYtLXNpbmdsZSB7XG4gICAgLy8gQ2xlYXIgc2V0dGluZ3MgZnJvbSBhYm92ZS5cbiAgICBtYXJnaW46IDA7XG4gICAgbWF4LXdpZHRoOiAkbWF4LXdpZHRoO1xuICB9XG5cbiAgJi5kaXRvLXBhbmUtbWFpbiB7XG4gICAgZmxleDogMTAwJTtcbiAgfVxuXG4gIC5kaXRvLXNjaGVtYS1oZWFkZXIgKyAmIHtcbiAgICAvLyBDbGVhciB0b3AtbWFyZ2luIGlmIHRoZSBjb21wb25lbnRzIGFyZSBwcmVjZWRlZCBieSBhIHNjaGVtYSBoZWFkZXIuXG4gICAgbWFyZ2luLXRvcDogMDtcbiAgfVxuXG4gIC5kaXRvLWNvbnRhaW5lci0tb21pdC1wYWRkaW5nID4gJiB7XG4gICAgLy8gQ2xlYXIgbWFyZ2lucyBzZXQgYWJvdmUgYWdhaW4gaWYgcGFyZW50IGlzIG9taXR0aW5nIHBhZGRpbmcuXG4gICAgbWFyZ2luOiAwO1xuICAgIG1heC13aWR0aDogdW5zZXQ7XG4gIH1cblxuICAuZGl0by1icmVhayB7XG4gICAgZmxleDogMTAwJTtcbiAgICBoZWlnaHQ6IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUZyYWN0aW9uKHZhbHVlKSB7XG4gIGNvbnN0IG1hdGNoID0gKFxuICAgIGlzU3RyaW5nKHZhbHVlKSAmJlxuICAgIHZhbHVlLm1hdGNoKC9eXFxzKihbKy1dP1xcZCspXFxzKlxcL1xccyooWystXT9cXGQrKVxccyokLylcbiAgKVxuICBpZiAobWF0Y2gpIHtcbiAgICBjb25zdCBbLCBkaXZpZGVuZCwgZGl2aXNvcl0gPSBtYXRjaFxuICAgIHJldHVybiBwYXJzZUZsb2F0KGRpdmlkZW5kKSAvIHBhcnNlRmxvYXQoZGl2aXNvcilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdCh2YWx1ZSlcbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNvbnRhaW5lcihcbiAgdi1zaG93PVwiY29tcG9uZW50VmlzaWJsZVwiXG4gIDpjbGFzcz1cImNvbnRhaW5lckNsYXNzXCJcbiAgOnN0eWxlPVwiY29udGFpbmVyU3R5bGVcIlxuKVxuICBEaXRvTGFiZWwoXG4gICAgdi1pZj1cImhhc0xhYmVsXCJcbiAgICA6Y2xhc3M9XCJjb21wb25lbnRDbGFzc1wiXG4gICAgOmxhYmVsPVwibGFiZWxcIlxuICAgIDpkYXRhUGF0aD1cImxhYmVsRGF0YVBhdGhcIlxuICAgIDppbmZvPVwiaW5mb1wiXG4gIClcbiAgY29tcG9uZW50LmRpdG8tY29tcG9uZW50KFxuICAgIDppcz1cInR5cGVDb21wb25lbnRcIlxuICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6d2lkdGg9XCJ3aWR0aFwiXG4gICAgOmxhYmVsPVwibGFiZWxcIlxuICAgIDpzaW5nbGU9XCJzaW5nbGVcIlxuICAgIDpuZXN0ZWQ9XCJuZXN0ZWRcIlxuICAgIDpkaXNhYmxlZD1cImNvbXBvbmVudERpc2FibGVkXCJcbiAgICBAZXJyb3JzPVwib25FcnJvcnNcIlxuICApXG4gIERpdG9FcnJvcnMoOmVycm9ycz1cImVycm9yc1wiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzU3RyaW5nLCBpc051bWJlciB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldFR5cGVDb21wb25lbnQsIGtlZXBBbGlnbmVkLCBvbWl0UGFkZGluZyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHBhcnNlRnJhY3Rpb24gfSBmcm9tICcuLi91dGlscy9tYXRoLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Db250YWluZXInLCB7XG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIG5lc3RlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBnZW5lcmF0ZUxhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGZpcnN0SW5Sb3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYXN0SW5Sb3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVycm9yczogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiB0aGlzLm5lc3RlZCB9KVxuICAgIH0sXG5cbiAgICB0eXBlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIGdldFR5cGVDb21wb25lbnQodGhpcy5zY2hlbWEudHlwZSlcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICBjb25zdCB7IGxhYmVsIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIChcbiAgICAgICAgbGFiZWwgIT09IGZhbHNlICYmIChcbiAgICAgICAgICAhIWxhYmVsIHx8XG4gICAgICAgICAgdGhpcy5nZW5lcmF0ZUxhYmVscyAmJiB0aGlzLnR5cGVDb21wb25lbnQ/LmdlbmVyYXRlTGFiZWxcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc0xhYmVsID8gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYSkgOiBudWxsXG4gICAgfSxcblxuICAgIGxhYmVsRGF0YVBhdGgoKSB7XG4gICAgICAvLyBVbm5lc3RlZCB0eXBlcyBkb24ndCBoYXZlIGEgZGF0YVBhdGggZm9yIHRoZW1zZWx2ZXMsIGRvbid0IHVzZSBpdDpcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMuZGF0YVBhdGggOiBudWxsXG4gICAgfSxcblxuICAgIGluZm86IGdldFNjaGVtYUFjY2Vzc29yKCdpbmZvJywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgd2lkdGg6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlQ29tcG9uZW50Py5kZWZhdWx0V2lkdGhcbiAgICAgIH0sXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgLy8gVXNlIDEwMCUgPT0gMS4wIGFzIGRlZmF1bHQgd2lkdGggd2hlbiBub3RoaW5nIGlzIHNldDpcbiAgICAgICAgcmV0dXJuIHdpZHRoID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IDEuMFxuICAgICAgICAgIDogaXNTdHJpbmcod2lkdGgpXG4gICAgICAgICAgICA/IHdpZHRoLm1hdGNoKC9eXFxzKls8Pl0/XFxzKiguKikkLylbMV0gLy8gUmVtb3ZlIHdpZHRoIG9wZXJhdG9yXG4gICAgICAgICAgICA6IHdpZHRoXG4gICAgICB9XG4gICAgfSksXG5cbiAgICB3aWR0aE9wZXJhdG9yOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKHdpZHRoKVxuICAgICAgICAgID8gd2lkdGgubWF0Y2goL15cXHMqKFs8Pl0/KS8pWzFdIHx8IG51bGxcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudFZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVDb21wb25lbnQ/LmRlZmF1bHRWaXNpYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnREaXNhYmxlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Rpc2FibGVkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybiBkaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb250YWluZXJDbGFzcygpIHtcbiAgICAgIGNvbnN0IHsgY2xhc3M6IGNvbnRhaW5lckNsYXNzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgY29uc3QgcHJlZml4ID0gJ2RpdG8tY29udGFpbmVyJ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Ake3ByZWZpeH0tLXNpbmdsZWBdOiB0aGlzLnNpbmdsZSxcbiAgICAgICAgW2Ake3ByZWZpeH0tLWhhcy1sYWJlbGBdOiB0aGlzLmhhc0xhYmVsLFxuICAgICAgICBbYCR7cHJlZml4fS0tYWxpZ25lZGBdOiBrZWVwQWxpZ25lZCh0aGlzLnNjaGVtYSksXG4gICAgICAgIFtgJHtwcmVmaXh9LS1vbWl0LXBhZGRpbmdgXTogb21pdFBhZGRpbmcodGhpcy5zY2hlbWEpLFxuICAgICAgICBbYCR7cHJlZml4fS0tZmlyc3QtaW4tcm93YF06IHRoaXMuZmlyc3RJblJvdyxcbiAgICAgICAgW2Ake3ByZWZpeH0tLWxhc3QtaW4tcm93YF06IHRoaXMubGFzdEluUm93LFxuICAgICAgICBbYCR7cHJlZml4fS0tYWxvbmUtaW4tcm93YF06IHRoaXMuZmlyc3RJblJvdyAmJiB0aGlzLmxhc3RJblJvdyxcbiAgICAgICAgLi4uKFxuICAgICAgICAgIGlzU3RyaW5nKGNvbnRhaW5lckNsYXNzKVxuICAgICAgICAgICAgPyB7IFtjb250YWluZXJDbGFzc106IHRydWUgfVxuICAgICAgICAgICAgOiBjb250YWluZXJDbGFzc1xuICAgICAgICApXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbXBvbmVudEJhc2lzKCkge1xuICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLndpZHRoXG4gICAgICAvLyAnYXV0bycgPSBubyBmaXR0aW5nOlxuICAgICAgY29uc3QgYmFzaXMgPSBbbnVsbCwgJ2F1dG8nLCAnZmlsbCddLmluY2x1ZGVzKHdpZHRoKVxuICAgICAgICA/ICdhdXRvJ1xuICAgICAgICA6IC8lJC8udGVzdCh3aWR0aClcbiAgICAgICAgICA/IHBhcnNlRmxvYXQod2lkdGgpIC8vIHBlcmNlbnRhZ2VcbiAgICAgICAgICA6IC9bYS16XS8udGVzdCh3aWR0aClcbiAgICAgICAgICAgID8gd2lkdGggLy8gbmF0aXZlIHVuaXRzXG4gICAgICAgICAgICA6IHBhcnNlRnJhY3Rpb24od2lkdGgpICogMTAwIC8vIGZyYWN0aW9uXG4gICAgICByZXR1cm4gaXNOdW1iZXIoYmFzaXMpID8gYCR7YmFzaXN9JWAgOiBiYXNpc1xuICAgIH0sXG5cbiAgICBjb250YWluZXJTdHlsZSgpIHtcbiAgICAgIC8vIEludGVycHJldCAnPjUwJScgYXMgJzUwJSwgZmxleC1ncm93OiAxYFxuICAgICAgY29uc3QgZ3JvdyA9IChcbiAgICAgICAgdGhpcy53aWR0aE9wZXJhdG9yID09PSAnPicgfHxcbiAgICAgICAgdGhpcy53aWR0aCA9PT0gJ2ZpbGwnXG4gICAgICApXG4gICAgICAvLyBJbnRlcnByZXQgJzw1MCUnIGFzICc1MCUsIGZsZXgtc2hyaW5rOiAxYFxuICAgICAgY29uc3Qgc2hyaW5rID0gdGhpcy53aWR0aE9wZXJhdG9yID09PSAnPCdcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZsZXg6IGAke2dyb3cgPyAxIDogMH0gJHtzaHJpbmsgPyAxIDogMH0gJHt0aGlzLmNvbXBvbmVudEJhc2lzfWBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcG9uZW50Q2xhc3MoKSB7XG4gICAgICBjb25zdCBiYXNpc0lzQXV0byA9IHRoaXMuY29tcG9uZW50QmFzaXMgPT09ICdhdXRvJ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLy8gVE9ETzogQkVNP1xuICAgICAgICAnZGl0by1zaW5nbGUnOiB0aGlzLnNpbmdsZSxcbiAgICAgICAgJ2RpdG8tZGlzYWJsZWQnOiB0aGlzLmNvbXBvbmVudERpc2FibGVkLFxuICAgICAgICAnZGl0by13aWR0aC1maWxsJzogIWJhc2lzSXNBdXRvIHx8IHRoaXMud2lkdGggPT09ICdmaWxsJyxcbiAgICAgICAgJ2RpdG8taGFzLWVycm9ycyc6ICEhdGhpcy5lcnJvcnNcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRXJyb3JzKGVycm9ycykge1xuICAgICAgdGhpcy5lcnJvcnMgPSBlcnJvcnNcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jb250YWluZXIge1xuICAkc2VsZjogJjtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWZsb3c6IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIC8vIE5lZWRlZCBmb3IgYmV0dGVyIHZlcnRpY2FsIGFsaWdubWVudDpcbiAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgLy8gVG8gcHJldmVudCBsaXN0IHRhYmxlcyBmcm9tIGJsb3dpbmcgb3V0IG9mIHRoZWlyIGZsZXggYm94IGNvbnRhaW5lcnMuXG4gIG1heC13aWR0aDogMTAwJTtcbiAgLy8gQ2Fubm90IHVzZSBtYXJnaW4gaGVyZSBhcyBpdCBuZWVkcyB0byBiZSBwYXJ0IG9mIGJveC1zaXppbmcgZm9yXG4gIC8vIHBlcmNlbnRhZ2VzIGluIGZsZXgtYmFzaXMgdG8gd29yay5cbiAgcGFkZGluZzogJGZvcm0tc3BhY2luZyAkZm9ybS1zcGFjaW5nLWhhbGY7XG5cbiAgJjplbXB0eSB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuXG4gICYtLXNpbmdsZSB7XG4gICAgaGVpZ2h0OiAxMDAlOyAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IGF0IHRoZSBib3R0b207XG4gICAgLy8gSnVzdCBsaWtlIG9uIERpdG9QYW5lLCBjbGVhciBzZXR0aW5ncyBmcm9tIGFib3ZlLlxuICAgIHBhZGRpbmc6IDA7XG4gIH1cblxuICAmLS1hbGlnbmVkIHtcbiAgICAvLyBGb3IgY29tcG9uZW50cyB3aXRoIGxhYmVscywgYWxpZ24gdGhlIGxhYmVsIGF0IHRoZSB0b3AgYW5kIHRoZSBjb21wb25lbnRcbiAgICAvLyBhdCB0aGUgYm90dG9tLlxuICAgIC0tanVzdGlmeTogc3BhY2UtYmV0d2VlbjtcblxuICAgICY6aGFzKD4gOm9ubHktY2hpbGQpIHtcbiAgICAgIC8vIEJ1dCBpZiB0aGVyZSBpcyBubyBsYWJlbCwgc3RpbGwgYWxpZ24gdGhlIGNvbXBvbmVudCB0byB0aGUgYm90dG9tLlxuICAgICAgLS1qdXN0aWZ5OiBmbGV4LWVuZDtcbiAgICB9XG5cbiAgICAmOm5vdCgjeyRzZWxmfS0tb25seS1pbi1yb3cpIHtcbiAgICAgIC8vIE5vdyBvbmx5IGFwcGx5IGFsaWdubWVudCBpZiB0aGVyZSBhcmUgbmVpZ2hib3VyaW5nIGNvbXBvbmVudHMgbm8gdGhlXG4gICAgICAvLyBzYW1lIHJvdyB0aGF0IGFsc28gYWxpZ24uXG4gICAgICAvLyBMb29rIGFoZWFkOlxuICAgICAgJjpub3QoI3skc2VsZn0tLWxhc3QtaW4tcm93KSArICN7Jn06bm90KCN7JHNlbGZ9LS1maXJzdC1pbi1yb3cpLFxuICAgICAgLy8gTG9vayBiZWhpbmQ6XG4gICAgICAmOm5vdCgjeyRzZWxmfS0tbGFzdC1pbi1yb3cpOmhhcygrICN7Jn06bm90KCN7JHNlbGZ9LS1maXJzdC1pbi1yb3cpKSB7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogdmFyKC0tanVzdGlmeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJi0tb21pdC1wYWRkaW5nIHtcbiAgICBwYWRkaW5nOiAwO1xuXG4gICAgPiAuZGl0by1sYWJlbCB7XG4gICAgICBtYXJnaW46ICRmb3JtLXNwYWNpbmcgJGZvcm0tc3BhY2luZy1oYWxmIDA7XG4gICAgfVxuICB9XG59XG5cbi8vIE5PVEU6IFRoaXMgaXMgbm90IG5lc3RlZCBpbnNpZGUgYC5kaXRvLWNvbnRhaW5lcmAgc28gdGhhdCBvdGhlclxuLy8gdHlwZSBjb21wb25lbnRzIGNhbiBvdmVycmlkZSBgLmRpdG8td2lkdGgtZmlsbGAgY2xhc3MgKGZpbHRlciBwcmVjZWRlbmNlKS5cbi5kaXRvLWNvbXBvbmVudCB7XG4gICYuZGl0by13aWR0aC1maWxsIHtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgICYuZGl0by1jaGVja2JveCxcbiAgICAmLmRpdG8tcmFkaW8tYnV0dG9uIHtcbiAgICAgIC8vIFdlYktpdCBkb2Vzbid0IGxpa2UgY2hhbmdlZCB3aWR0aCBvbiBjaGVja2JveGVzIGFuZCByYWRpb3MsIG92ZXJyaWRlOlxuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgd2lkdGg6IGF1dG87XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXRhYnNcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9XCIodGFiU2NoZW1hLCBrZXkpIGluIHRhYnNcIlxuICApXG4gICAgUm91dGVyTGluay5kaXRvLWxpbmsoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKHRhYlNjaGVtYSlcIlxuICAgICAgOmtleT1cImtleVwiXG4gICAgICA6dG89XCJ7IGhhc2g6IGAjJHtrZXl9YCB9XCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogc2VsZWN0ZWRUYWIgPT09IGtleSB9XCJcbiAgICApIHt7IGdldExhYmVsKHRhYlNjaGVtYSwga2V5KSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1RhYnMnLCB7XG4gIHByb3BzOiB7XG4gICAgdGFiczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzZWxlY3RlZFRhYjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuJHRhYi1jb2xvci1iYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlc3Q7XG4kdGFiLWNvbG9yLWluYWN0aXZlOiAkY29sb3ItbGlnaHQ7XG4kdGFiLWNvbG9yLWFjdGl2ZTogJGNvbG9yLWxpZ2h0ZXN0O1xuJHRhYi1jb2xvci1ob3ZlcjogJGNvbG9yLXdoaXRlO1xuXG4uZGl0by10YWJzIHtcbiAgLy8gU2VlOiBodHRwczovL2NvZGVwZW4uaW8vdGhvbGV4L3Blbi9odmVCeC9cbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG5cbiAgYSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgICBiYWNrZ3JvdW5kOiAkdGFiLWNvbG9yLWluYWN0aXZlO1xuICAgIHBhZGRpbmc6ICR0YWItcGFkZGluZy12ZXIgJHRhYi1wYWRkaW5nLWhvcjtcbiAgICBtYXJnaW4tbGVmdDogJHRhYi1tYXJnaW47XG4gICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJHRhYi1yYWRpdXM7XG4gICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICR0YWItcmFkaXVzO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAkdGFiLWNvbG9yLWhvdmVyO1xuICAgIH1cblxuICAgICY6YWN0aXZlIHtcbiAgICAgIGJhY2tncm91bmQ6ICR0YWItY29sb3ItYWN0aXZlO1xuICAgIH1cblxuICAgICYuZGl0by1hY3RpdmUge1xuICAgICAgYmFja2dyb3VuZDogJHRhYi1jb2xvci1iYWNrZ3JvdW5kO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gT25seSBzaG93IHBhbmVscyBpbiB0YWJzIHdoZW4gdGhlIHRhYnMgYXJlIGFsc28gdmlzaWJsZS5cbmNvbXBvbmVudC5kaXRvLXBhbmVsKFxuICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKHBhbmVsU2NoZW1hKVwiXG4gIHYtc2hvdz1cInZpc2libGUgJiYgKCFwYW5lbFRhYkNvbXBvbmVudCB8fCBwYW5lbFRhYkNvbXBvbmVudC52aXNpYmxlKVwiXG4gIDppcz1cInBhbmVsVGFnXCJcbiAgQHN1Ym1pdC5wcmV2ZW50XG4pXG4gIERpdG9TY2hlbWEuZGl0by1wYW5lbF9fc2NoZW1hKFxuICAgIDpzY2hlbWE9XCJwYW5lbFNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6aGFzT3duRGF0YT1cImhhc093bkRhdGFcIlxuICAgIGdlbmVyYXRlTGFiZWxzXG4gIClcbiAgICB0ZW1wbGF0ZSgjYmVmb3JlKVxuICAgICAgaDIuZGl0by1wYW5lbF9faGVhZGVyKDpjbGFzcz1cInsgJ2RpdG8tcGFuZWxfX2hlYWRlci0tc3RpY2t5Jzogc3RpY2t5IH1cIilcbiAgICAgICAgc3BhbiB7eyBnZXRMYWJlbChzY2hlbWEpIH19XG4gICAgICAgIERpdG9CdXR0b25zLmRpdG8tYnV0dG9ucy1zbWFsbChcbiAgICAgICAgICA6YnV0dG9ucz1cInBhbmVsQnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJwYW5lbERhdGFcIlxuICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgKVxuICAgIHRlbXBsYXRlKCNidXR0b25zKVxuICAgICAgRGl0b0J1dHRvbnMoXG4gICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgIDpkYXRhUGF0aD1cInBhbmVsRGF0YVBhdGhcIlxuICAgICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBWYWxpZGF0b3JNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFuZWwnLCB7XG4gIG1peGluczogW1ZhbGlkYXRvck1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcGFuZWxDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiB0aGlzLnBhbmVsVGFiQ29tcG9uZW50XG4gICAgfVxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFuZWxUYWJDb21wb25lbnQ6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvd25EYXRhOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFuZWxDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICB0YWJDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYW5lbFRhYkNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEuYnV0dG9ucylcbiAgICB9LFxuXG4gICAgcGFuZWxCdXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEucGFuZWxCdXR0b25zKVxuICAgIH0sXG5cbiAgICB0YXJnZXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEudGFyZ2V0IHx8IHRoaXMuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgaGFzT3duRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMub3duRGF0YVxuICAgIH0sXG5cbiAgICBwYW5lbERhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5vd25EYXRhIHx8IHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBwYW5lbFNjaGVtYSgpIHtcbiAgICAgIGlmICh0aGlzLmhhc093bkRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSZW1vdmUgYGRhdGFgIGZyb20gdGhlIHNjaGVtYSwgc28gdGhhdCBEaXRvU2NoZW1hIGlzbid0IHVzaW5nIGl0IHRvXG4gICAgICAgIC8vIHByb2R1Y2UgaXRzIG93biBkYXRhLiBTZWUgJGZpbHRlcnMgcGFuZWwgZm9yIG1vcmUgZGV0YWlscyBvbiBkYXRhLlxuICAgICAgICBjb25zdCB7IGRhdGEsIC4uLnNjaGVtYSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgcmV0dXJuIHNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwYW5lbFRhZygpIHtcbiAgICAgIC8vIFBhbmVscyB0aGF0IHByb3ZpZGUgdGhlaXIgb3duIGRhdGEgbmVlZCB0aGVpciBvd24gZm9ybS5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyAnZm9ybScgOiAnZGl2J1xuICAgIH0sXG5cbiAgICBwYW5lbERhdGFQYXRoKCkge1xuICAgICAgLy8gSWYgdGhlIHBhbmVsIHByb3ZpZGVzIGl0cyBvd24gZGF0YSwgdGhlbiBpdCBuZWVkcyB0byBwcmVmaXggYWxsXG4gICAgICAvLyBjb21wb25lbnRzIHdpdGggaXRzIGRhdGEtcGF0aCwgYnV0IGlmIGl0IHNoYXJlcyBkYXRhIHdpdGggdGhlIHNjaGVtYVxuICAgICAgLy8gY29tcG9uZW50LCB0aGVuIGl0IHNob3VsZCBzaGFyZSB0aGUgZGF0YS1wYXRoIG5hbWUgc3BhY2UgdG9vLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/IHRoaXMuZGF0YVBhdGggOiB0aGlzLnNjaGVtYUNvbXBvbmVudC5kYXRhUGF0aFxuICAgIH0sXG5cbiAgICB2aXNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndmlzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSksXG5cbiAgICBzdGlja3k6IGdldFNjaGVtYUFjY2Vzc29yKCdzdGlja3knLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICAvLyBOT1RFOiBUaGlzIGlzIG5vdCB0aGUgc2FtZSBhcyBgc2NoZW1hLmRhdGFgIGhhbmRsaW5nIGluIERpdG9TY2hlbWEsXG4gICAgLy8gd2hlcmUgdGhlIGRhdGEgaXMgYWRkZWQgdG8gdGhlIGFjdHVhbCBjb21wb25lbnQuXG4gICAgY29uc3QgeyBkYXRhIH0gPSB0aGlzLnNjaGVtYVxuICAgIGlmIChkYXRhKSB7XG4gICAgICB0aGlzLm93bkRhdGEgPSBpc0Z1bmN0aW9uKGRhdGEpXG4gICAgICAgID8gZGF0YSh0aGlzLmNvbnRleHQpXG4gICAgICAgIDogZGF0YVxuICAgIH1cbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIFJlZ2lzdGVyIHRoZSBwYW5lbHMgc28gdGhhdCBvdGhlciBjb21wb25lbnRzIGNhbiBmaW5kIHRoZW0gYnkgdGhlaXJcbiAgICAgIC8vIGRhdGEtcGF0aCwgZS5nLiBpbiBUeXBlTGlzdC5vbkZpbHRlckVycm9ycygpXG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJQYW5lbCh0aGlzLCBhZGQpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tcGFuZWwge1xuICAmOm5vdCg6bGFzdC1jaGlsZCkge1xuICAgIG1hcmdpbi1ib3R0b206ICRjb250ZW50LXBhZGRpbmc7XG4gIH1cblxuICAmX19oZWFkZXIge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuICAgIGJhY2tncm91bmQ6ICRidXR0b24tY29sb3I7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcblxuICAgICYtLXN0aWNreSB7XG4gICAgICAkbWFyZ2luOiAkaW5wdXQtaGVpZ2h0LWZhY3RvciAqICRsaW5lLWhlaWdodCAqICRmb250LXNpemUtc21hbGwgK1xuICAgICAgICAkZm9ybS1zcGFjaW5nO1xuXG4gICAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgICAgdG9wOiAwO1xuICAgICAgbWFyZ2luLWJvdHRvbTogJG1hcmdpbjtcbiAgICAgIHotaW5kZXg6IDE7XG5cbiAgICAgICYgKyAqIHtcbiAgICAgICAgbWFyZ2luLXRvcDogLSRtYXJnaW47XG4gICAgICB9XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgICAgICBsZWZ0OiAwO1xuICAgICAgICByaWdodDogMDtcbiAgICAgICAgaGVpZ2h0OiAkY29udGVudC1wYWRkaW5nO1xuICAgICAgICB0b3A6IC0kY29udGVudC1wYWRkaW5nO1xuICAgICAgICBtYXJnaW46IC0kYm9yZGVyLXdpZHRoO1xuICAgICAgfVxuICAgIH1cblxuICAgIC5kaXRvLWJ1dHRvbnMge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgcmlnaHQ6ICRpbnB1dC1wYWRkaW5nLXZlcjtcbiAgICAgIHRvcDogNTAlO1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgIH1cbiAgfVxuXG4gICZfX3NjaGVtYSB7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsO1xuICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICAgIGJvcmRlci10b3A6IDA7XG4gICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuXG4gICAgPiAuZGl0by1zY2hlbWEtY29udGVudCB7XG4gICAgICA+IC5kaXRvLXBhbmUge1xuICAgICAgICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nLWhhbGYgJGZvcm0tc3BhY2luZztcbiAgICAgIH1cblxuICAgICAgLmRpdG8tY29udGFpbmVyIHtcbiAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZy1oYWxmO1xuICAgICAgfVxuXG4gICAgICAuZGl0by1vYmplY3Qge1xuICAgICAgICBib3JkZXI6IDA7XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICB9XG5cbiAgICAgID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgICAgIC0tYnV0dG9uLW1hcmdpbjogI3skZm9ybS1zcGFjaW5nfTtcblxuICAgICAgICBwYWRkaW5nOiAwICRmb3JtLXNwYWNpbmcgJGZvcm0tc3BhY2luZztcblxuICAgICAgICAuZGl0by1jb250YWluZXIge1xuICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZGl0by1sYWJlbCB7XG4gICAgICBtYXJnaW46IDA7XG5cbiAgICAgIGxhYmVsIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZGl0by1wYW5lIHtcbiAgICAgIG1hcmdpbjogMCAoLSRmb3JtLXNwYWNpbmctaGFsZik7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXBhbmVscyhcbiAgdi1pZj1cInBhbmVscy5sZW5ndGggPiAwXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9XCJ7IHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCB9IGluIHBhbmVsc1wiXG4gIClcbiAgICBEaXRvUGFuZWwoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKHNjaGVtYSlcIlxuICAgICAgOmtleT1cImdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKHNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJzY2hlbWEuZGlzYWJsZWQgIT0gbnVsbCA/IHNjaGVtYS5kaXNhYmxlZCA6IGRpc2FibGVkXCJcbiAgICAgIDpwYW5lbFRhYkNvbXBvbmVudD1cInRhYkNvbXBvbmVudFwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1BhbmVscycsIHtcbiAgcHJvcHM6IHtcbiAgICBwYW5lbHM6IHsgdHlwZTogQXJyYXksIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRQYW5lbEtleShkYXRhUGF0aCwgdGFiQ29tcG9uZW50KSB7XG4gICAgICAvLyBBbGxvdyBzZXBhcmF0ZSB0YWJzIHRvIHVzZSBwYW5lbHMgb2YgdGhlIHNhbWUgbmFtZSwgYnlcbiAgICAgIC8vIHByZWZpeGluZyB0aGVpciBrZXkgd2l0aCB0aGUgdGFiIG5hbWUuXG4gICAgICByZXR1cm4gdGFiQ29tcG9uZW50ID8gYCR7dGFiQ29tcG9uZW50LnRhYn1fJHtkYXRhUGF0aH1gIDogZGF0YVBhdGhcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYW5lbHMge1xuICBtYXgtd2lkdGg6ICRjb250ZW50LXNpZGViYXItd2lkdGg7XG4gIG1pbi13aWR0aDogY2FsYygkY29udGVudC1zaWRlYmFyLXdpZHRoIC8gMik7XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgdXNlU2xvdHMsIENvbW1lbnQgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBpc1N0cmluZywgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNWTm9kZUNvbnRlbnQodm5vZGUpIHtcbiAgcmV0dXJuIHZub2RlICYmIGFzQXJyYXkodm5vZGUpLnNvbWUodm5vZGUgPT4gdm5vZGUudHlwZSAhPT0gQ29tbWVudClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1Nsb3RDb250ZW50KHNsb3QsIHByb3BzID0ge30pIHtcbiAgc2xvdCA9IGlzU3RyaW5nKHNsb3QpID8gdXNlU2xvdHMoKVtzbG90XSA6IHNsb3RcbiAgcmV0dXJuIGhhc1ZOb2RlQ29udGVudChzbG90Py4ocHJvcHMpKVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWJ1dHRvbnMoXG4gIHYtaWY9XCJidXR0b25TY2hlbWFzIHx8IGhhc1Nsb3RDb250ZW50KCRzbG90cy5kZWZhdWx0KVwiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwiKGJ1dHRvblNjaGVtYSwgYnV0dG9uRGF0YVBhdGgpIGluIGJ1dHRvblNjaGVtYXNcIlxuICApXG4gICAgRGl0b0NvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoYnV0dG9uU2NoZW1hKVwiXG4gICAgICA6a2V5PVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOnNjaGVtYT1cImJ1dHRvblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoYnV0dG9uU2NoZW1hLm5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwidm5vZGUgb2YgJHNsb3RzLmRlZmF1bHQ/LigpXCJcbiAgKVxuICAgIC8vLSBSZW5kZXIgZWFjaCBub2RlIGluIHRoZSBkZWZhdWx0IHNsb3QgdGhyb3VnaCBgZGl0by12bm9kZWAsXG4gICAgLy8tIHNvIGl0IGNhbiBiZSB3cmFwcGVkIGluIGEgYC5kaXRvLWNvbnRhaW5lcmAgY2xhc3MuXG4gICAgLmRpdG8tY29udGFpbmVyKFxuICAgICAgdi1pZj1cImhhc1ZOb2RlQ29udGVudCh2bm9kZSlcIlxuICAgIClcbiAgICAgIERpdG9Wbm9kZSg6dm5vZGU9XCJ2bm9kZVwiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBoYXNTbG90Q29udGVudCwgaGFzVk5vZGVDb250ZW50IH0gZnJvbSAnLi4vdXRpbHMvdnVlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9CdXR0b25zJywge1xuICBwcm92aWRlOiB7XG4gICAgJHRhYkNvbXBvbmVudDogKCkgPT4gbnVsbFxuICB9LFxuXG4gIHByb3BzOiB7XG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogKCkgPT4gKHt9KSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICAvLyBDb21wdXRlIGEgYnV0dG9ucyBsaXN0IHdoaWNoIGhhcyB0aGUgZGF0YVBhdGggYmFrZWQgaW50byBpdHMga2V5cy5cbiAgICAgIGNvbnN0IHsgZGF0YVBhdGgsIGJ1dHRvbnMgfSA9IHRoaXNcbiAgICAgIHJldHVybiBidXR0b25zXG4gICAgICAgID8gT2JqZWN0LnZhbHVlcyhidXR0b25zKS5yZWR1Y2UoKHNjaGVtYXMsIGJ1dHRvbikgPT4ge1xuICAgICAgICAgICAgc2NoZW1hc1thcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgYnV0dG9uLm5hbWUpXSA9IGJ1dHRvblxuICAgICAgICAgICAgcmV0dXJuIHNjaGVtYXNcbiAgICAgICAgICB9LCB7fSlcbiAgICAgICAgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBoYXNTbG90Q29udGVudCxcbiAgICBoYXNWTm9kZUNvbnRlbnRcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLWJ1dHRvbnMge1xuICA+IC5kaXRvLWNvbnRhaW5lciB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gU2V0IGBAY2xpY2suc3RvcGAgdG8gcHJldmVudCBjbGljayBldmVudHMgZnJvbSBidWJibGluZyB0byBkaXRvLWxhYmVsLlxuRGl0b0J1dHRvbnMuZGl0by1lZGl0LWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICA6YnV0dG9ucz1cImJ1dHRvbnNcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gIDpkYXRhPVwiZGF0YVwiXG4gIDptZXRhPVwibWV0YVwiXG4gIDpzdG9yZT1cInN0b3JlXCJcbiAgQGNsaWNrLnN0b3BcbilcbiAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgYS5kaXRvLWJ1dHRvbihcbiAgICB2LWlmPVwiaXNEcmFnZ2FibGVcIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICApXG4gIFJvdXRlckxpbmsuZGl0by1idXR0b24oXG4gICAgdi1pZj1cImlzRWRpdGFibGVcIlxuICAgIDp0bz1cInsgcGF0aDogZWRpdFBhdGggfVwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gIClcbiAgRGl0b0NyZWF0ZUJ1dHRvbihcbiAgICB2LWlmPVwiaXNDcmVhdGFibGVcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpwYXRoPVwiY3JlYXRlUGF0aFwiXG4gICAgOnZlcmI9XCJ2ZXJicy5jcmVhdGVcIlxuICAgIDp0ZXh0PVwiY3JlYXRlQnV0dG9uVGV4dFwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJpc0RlbGV0YWJsZVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICBAY2xpY2s9XCIkZW1pdCgnZGVsZXRlJylcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9FZGl0QnV0dG9ucycsIHtcbiAgZW1pdHM6IFsnZGVsZXRlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNyZWF0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRlbGV0YWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGNyZWF0ZVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgYnV0dG9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9ybUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFiZWwodGhpcy5zY2hlbWEuZm9ybSlcbiAgICB9LFxuXG4gICAgaXNEcmFnZ2FibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2RyYWdnYWJsZScpXG4gICAgfSxcblxuICAgIGlzRWRpdGFibGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNPcHRpb24oJ2VkaXRhYmxlJykgJiYgISF0aGlzLmVkaXRQYXRoXG4gICAgfSxcblxuICAgIGlzQ3JlYXRhYmxlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzT3B0aW9uKCdjcmVhdGFibGUnKSAmJiAhIXRoaXMuY3JlYXRlUGF0aFxuICAgIH0sXG5cbiAgICBpc0RlbGV0YWJsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc09wdGlvbignZGVsZXRhYmxlJylcbiAgICB9LFxuXG4gICAgY3JlYXRlQnV0dG9uVGV4dCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBvdmVycmlkZSBjcmVhdGUgYnV0dG9uIHRocm91Z2ggY3JlYXRhYmxlIG9iamVjdDpcbiAgICAgICAgdGhpcy5zY2hlbWEuY3JlYXRhYmxlPy5sYWJlbCB8fCAoXG4gICAgICAgICAgLy8gQXV0by1nZW5lcmF0ZSBjcmVhdGUgYnV0dG9uIGxhYmVscyBmcm9tIGZyb20gbGFiZWxzIGZvciBsaXN0XG4gICAgICAgICAgLy8gc291cmNlcyB3aXRoIG9ubHkgb25lIGZvcm06XG4gICAgICAgICAgdGhpcy5mb3JtTGFiZWwgJiZcbiAgICAgICAgICBgJHtjYXBpdGFsaXplKHRoaXMudmVyYnMuY3JlYXRlKX0gJHt0aGlzLmZvcm1MYWJlbH1gXG4gICAgICAgICkgfHxcbiAgICAgICAgbnVsbFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFzT3B0aW9uKG5hbWUpIHtcbiAgICAgIC8vIFRoZSBvcHRpb25zIG9mIHRoZSBvdXRlciBjb21wb25lbnQgYXJlIHBhc3NlZCB0byB0aGUgYnV0dG9ucyBjb21wb25lbnRcbiAgICAgIC8vIHRocm91Z2ggcHJvcGVydGllcyBgdGhpc1tuYW1lXWAsIGJ1dCBjYW4gYmUgZGlzYWJsZWQgb24gYSBwZXItZm9ybVxuICAgICAgLy8gYmFzaXMgYnkgc2V0dGluZyBgc2NoZW1hW25hbWVdYCB0byBgZmFsc2VgLlxuICAgICAgcmV0dXJuICEhKHRoaXNbbmFtZV0gJiYgdGhpcy5zY2hlbWFbbmFtZV0gIT09IGZhbHNlKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLWVkaXQtYnV0dG9ucyB7XG4gIC8vIE92ZXJyaWRlIGN1cnNvciBmcm9tIGNvbGxhcHNpYmxlIGRpdG8tbGFiZWw6XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgZmxleDogbm9uZTtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY3JlYXRlLWJ1dHRvblxuICB0ZW1wbGF0ZShcbiAgICB2LWlmPVwic2hvd1B1bGxkb3duXCJcbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmNsYXNzPVwiYGRpdG8tYnV0dG9uLSR7dmVyYn1gXCJcbiAgICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICAgIEBtb3VzZWRvd24uc3RvcD1cIm9uUHVsbGRvd25Nb3VzZURvd24oKVwiXG4gICAgKSB7eyB0ZXh0IH19XG4gICAgdWwuZGl0by1wdWxsZG93big6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBwdWxsZG93bi5vcGVuIH1cIilcbiAgICAgIGxpKFxuICAgICAgICB2LWZvcj1cIihmb3JtLCB0eXBlKSBpbiBmb3Jtc1wiXG4gICAgICApXG4gICAgICAgIGEoXG4gICAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYShmb3JtKVwiXG4gICAgICAgICAgdi1zaG93PVwic2hvdWxkU2hvdyhmb3JtKVwiXG4gICAgICAgICAgOmNsYXNzPVwiZ2V0Rm9ybUNsYXNzKGZvcm0sIHR5cGUpXCJcbiAgICAgICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKHR5cGUpXCJcbiAgICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHR5cGUpXCJcbiAgICAgICAgKSB7eyBnZXRMYWJlbChmb3JtKSB9fVxuICBidXR0b24uZGl0by1idXR0b24oXG4gICAgdi1lbHNlXG4gICAgOnR5cGU9XCJpc0lubGluZWQgPyAnYnV0dG9uJyA6ICdzdWJtaXQnXCJcbiAgICA6Y2xhc3M9XCJgZGl0by1idXR0b24tJHt2ZXJifWBcIlxuICAgIDp0aXRsZT1cImxhYmVsaXplKHZlcmIpXCJcbiAgICBAY2xpY2s9XCJjcmVhdGVJdGVtKGZvcm1zLmRlZmF1bHQpXCJcbiAgKSB7eyB0ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0Rm9ybVNjaGVtYXMsIGlzSW5saW5lZCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQ3JlYXRlQnV0dG9uJywge1xuICBtaXhpbnM6IFtQdWxsZG93bk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdmVyYjogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGV4dDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9ybXMoKSB7XG4gICAgICByZXR1cm4gZ2V0Rm9ybVNjaGVtYXModGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dClcbiAgICB9LFxuXG4gICAgaXNJbmxpbmVkKCkge1xuICAgICAgcmV0dXJuIGlzSW5saW5lZCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgc2hvd1B1bGxkb3duKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuZm9ybXMpLmxlbmd0aCA+IDEgfHwgIXRoaXMuZm9ybXMuZGVmYXVsdFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgY3JlYXRlSXRlbShmb3JtLCB0eXBlID0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMuc2hvdWxkUmVuZGVyU2NoZW1hKGZvcm0pICYmICF0aGlzLnNob3VsZERpc2FibGUoZm9ybSkpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbmxpbmVkKSB7XG4gICAgICAgICAgdGhpcy5zb3VyY2VDb21wb25lbnQuY3JlYXRlSXRlbShmb3JtLCB0eXBlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgICAgIHBhdGg6IGAke3RoaXMucGF0aH0vY3JlYXRlYCxcbiAgICAgICAgICAgIHF1ZXJ5OiB7IHR5cGUgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm90IGFsbG93ZWQgdG8gY3JlYXRlIGl0ZW0gZm9yIGdpdmVuIGZvcm0nKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRGb3JtQ2xhc3MoZm9ybSwgdHlwZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2BkaXRvLXR5cGUtJHt0eXBlfWBdOiB0cnVlLFxuICAgICAgICAnZGl0by1kaXNhYmxlZCc6IHRoaXMuc2hvdWxkRGlzYWJsZShmb3JtKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KHR5cGUpIHtcbiAgICAgIHRoaXMuY3JlYXRlSXRlbSh0aGlzLmZvcm1zW3R5cGVdLCB0eXBlKVxuICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tY3JlYXRlLWJ1dHRvbiB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAuZGl0by1wdWxsZG93biB7XG4gICAgcmlnaHQ6IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY2xpcGJvYXJkLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQoXG4gIHYtaWY9XCJjbGlwYm9hcmRcIlxuKVxuICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tY29weShcbiAgICByZWY9XCJjb3B5RGF0YVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdGl0bGU9XCJDb3B5IERhdGFcIlxuICAgIDpkaXNhYmxlZD1cIiFjb3B5RW5hYmxlZFwiXG4gICAgQGNsaWNrPVwib25Db3B5XCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tcGFzdGUoXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgdGl0bGU9XCJQYXN0ZSBEYXRhXCJcbiAgICA6ZGlzYWJsZWQ9XCIhcGFzdGVFbmFibGVkXCJcbiAgICBAY2xpY2s9XCJvblBhc3RlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGlzT2JqZWN0LCBjbG9uZSwgZGVpbmRlbnQgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0NsaXBib2FyZCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgY2xpcGJvYXJkOiB7IHR5cGU6IFtCb29sZWFuLCBPYmplY3RdLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29weUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgcGFzdGVFbmFibGVkOiBmYWxzZSxcbiAgICAgIGZpeENsaXBib2FyZDogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsaXBib2FyZE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3QodGhpcy5jbGlwYm9hcmQpID8gdGhpcy5jbGlwYm9hcmQgOiB7fVxuICAgIH0sXG5cbiAgICBjb3B5RGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgY29weSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gY29weVxuICAgICAgICA/IGNsaXBib2FyZERhdGEgPT5cbiAgICAgICAgICAgIGNvcHkuY2FsbChcbiAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgICAgICBjbGlwYm9hcmREYXRhXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgIDogY2xpcGJvYXJkRGF0YSA9PiBjbG9uZShjbGlwYm9hcmREYXRhKVxuICAgIH0sXG5cbiAgICBwYXN0ZURhdGEoKSB7XG4gICAgICBjb25zdCB7IHBhc3RlIH0gPSB0aGlzLmNsaXBib2FyZE9wdGlvbnNcbiAgICAgIHJldHVybiBwYXN0ZVxuICAgICAgICA/IGNsaXBib2FyZERhdGEgPT5cbiAgICAgICAgICAgIHBhc3RlLmNhbGwoXG4gICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICAgICAgY2xpcGJvYXJkRGF0YVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xpcGJvYXJkRGF0YVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIC8vIENoZWNrIGNsaXBib2FyZCBjb250ZW50IHdoZW5ldmVyIHNvbWV0aGluZyBnZXRzIGNvcGllZCBvciB0aGUgd2luZG93IGdldHNcbiAgICAvLyAocmUpYWN0aXZhdGVkLCBhcyB0aG9zZSBhcmUgdGhlIG1vbWVudHMgd2hlbiB0aGUgY2xpcGJvYXJkIGNhbiBjaGFuZ2U6XG4gICAgdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgY29weTogdGhpcy5jaGVja0NsaXBib2FyZFxuICAgIH0pXG4gICAgdGhpcy5kb21Pbih3aW5kb3csIHtcbiAgICAgIGZvY3VzOiB0aGlzLmNoZWNrQ2xpcGJvYXJkXG4gICAgfSlcbiAgICB0aGlzLiR3YXRjaCgnZGF0YScsIHtcbiAgICAgIC8vIENoZWNrIHJpZ2h0IGF3YXkgYWxzbyBpbiBjYXNlIHRoZXJlJ3MgYWxyZWFkeSBkYXRhIChlLmcuIGNyZWF0ZSBmb3JtKS5cbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6ICh0bywgZnJvbSkgPT4ge1xuICAgICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgICB0aGlzLmNoZWNrQ2xpcGJvYXJkKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGFzeW5jIGdldENsaXBib2FyZERhdGEocmVwb3J0KSB7XG4gICAgICAvLyBVc2UgdGhlIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgIGxldCB7IGNsaXBib2FyZERhdGEgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGpzb24gPSBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy5yZWFkVGV4dD8uKClcbiAgICAgICAgaWYgKHRoaXMuZml4Q2xpcGJvYXJkICYmIGpzb24pIHtcbiAgICAgICAgICAvLyBUaGlzIGFwcGVhcnMgdG8gYmUgbmVlZGVkIG9uIFNhZmFyaSB0byBwcmV2ZW50IGEgc3RyYW5nZSBcIlBhc3RlXCJcbiAgICAgICAgICAvLyBidXR0b24gZnJvbSBhcHBlYXJpbmcgd2hlbiB0aGUgY2xpcGJvYXJkIGlzIGFjY2Vzc2VkICh3aHk/ISkuXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICB0aGlzLmZpeENsaXBib2FyZCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGpzb24pIHtcbiAgICAgICAgICBjbGlwYm9hcmREYXRhID0gSlNPTi5wYXJzZShqc29uKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKHJlcG9ydCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIubmFtZSwgZXJyLm1lc3NhZ2UpXG4gICAgICAgICAgaWYgKGVyci5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICBhbGVydChkZWluZGVudGBcbiAgICAgICAgICAgICAgVGhlIGRhdGEgaW4gdGhlIGNsaXBib2FyZCBhcHBlYXJzIHRvIGJlIG1hbGZvcm1lZDpcbiAgICAgICAgICAgICAgJHtlcnIubWVzc2FnZX1cbiAgICAgICAgICAgIGApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCB7ICRzY2hlbWEsIC4uLmRhdGEgfSA9IGNsaXBib2FyZERhdGEgfHwge31cbiAgICAgIHJldHVybiAkc2NoZW1hID09PSB0aGlzLnNjaGVtYUNvbXBvbmVudD8uc2NoZW1hLm5hbWUgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBhc3luYyBjaGVja0NsaXBib2FyZCgpIHtcbiAgICAgIHRoaXMuY29weUVuYWJsZWQgPSAhIXRoaXMuZGF0YVxuICAgICAgLy8gU2VlIGlmIHRoZSBjbGlwYm9hcmQgY29udGVudCBpcyB2YWxpZCBKU09OIGRhdGEgdGhhdCBpcyBjb21wYXRpYmxlXG4gICAgICAvLyB3aXRoIHRoZSBjdXJyZW50IHRhcmdldCBzY2hlbWEsIGFuZCBvbmx5IHRoZW4gYWN0aXZhdGUgdGhlIHBhc3Rpbmc6XG4gICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9ICEhKGF3YWl0IHRoaXMuZ2V0Q2xpcGJvYXJkRGF0YShmYWxzZSkpIC8vIGRvbid0IHJlcG9ydFxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNvcHkoKSB7XG4gICAgICBsZXQgZGF0YSA9IHRoaXMuc2NoZW1hQ29tcG9uZW50Py5jbGlwYm9hcmREYXRhXG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gZGF0YSAmJiB0aGlzLmNvcHlEYXRhKGRhdGEpXG4gICAgICAgIC8vIEtlZXAgYW4gaW50ZXJuYWwgY2xpcGJvYXJkIGFzIGZhbGxiYWNrLlxuICAgICAgICB0aGlzLmFwcFN0YXRlLmNsaXBib2FyZERhdGEgPSBkYXRhXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDIpXG4gICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZD8ud3JpdGVUZXh0Py4oanNvbilcbiAgICAgICAgICAvLyBTZWUgaWYgd2UgY2FuIGFjdGl2YXRlIHRoZSBwYXN0ZSBidXR0b24sIGRlcGVuZGluZyBvbiBicm93c2VyczpcbiAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrQ2xpcGJvYXJkKClcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyci5uYW1lLCBlcnIubWVzc2FnZSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgICAgYWxlcnQoZXJyb3IubWVzc2FnZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25QYXN0ZSgpIHtcbiAgICAgIGxldCBkYXRhID0gYXdhaXQgdGhpcy5nZXRDbGlwYm9hcmREYXRhKHRydWUpIC8vIHJlcG9ydFxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGRhdGEgJiYgdGhpcy5wYXN0ZURhdGEoZGF0YSlcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5zZXREYXRhKGRhdGEpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGFsZXJ0KGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCIvLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXRMb2FkaW5nKGlzTG9hZGluZywgeyB1cGRhdGVSb290ID0gZmFsc2UsIHVwZGF0ZVZpZXcgPSBmYWxzZSB9ID0ge30pIHtcbiAgICAgIGlmICghdGhpcy5pc0xvYWRpbmcgXiAhaXNMb2FkaW5nKSB7XG4gICAgICAgIC8vIEJvb2xlYW4geG9yXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gISFpc0xvYWRpbmdcbiAgICAgICAgaWYgKHVwZGF0ZVJvb3QpIHtcbiAgICAgICAgICB0aGlzLnJvb3RDb21wb25lbnQucmVnaXN0ZXJMb2FkaW5nKGlzTG9hZGluZylcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlVmlldykge1xuICAgICAgICAgIHRoaXMudmlld0NvbXBvbmVudC5zZXRMb2FkaW5nKHRoaXMuaXNMb2FkaW5nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgSXRlbU1peGluIGZyb20gJy4vSXRlbU1peGluLmpzJ1xuaW1wb3J0IExvYWRpbmdNaXhpbiBmcm9tICcuL0xvYWRpbmdNaXhpbi5qcydcbmltcG9ydCB7IHNldERlZmF1bHRWYWx1ZXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0l0ZW1NaXhpbiwgTG9hZGluZ01peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMsXG4gICAgICAvLyBQYXNzIGxvY2FsIHZlcmJzIG92ZXJyaWRlcyBvbiB0byBjaGlsZHJlbiwgc2VlIHZlcmJzKCkgY29tcHV0ZWQgcHJvcC5cbiAgICAgICR2ZXJiczogKCkgPT4gdGhpcy52ZXJicyxcbiAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdGhpcy5oYXNEYXRhXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxvYWRlZERhdGE6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICByZXNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgLy8gUmV0dXJucyB0aGUgcmVzb3VyY2Ugb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcmVzb3VyY2UgZm9yIHRoZVxuICAgICAgLy8gYXNzb2NpYXRlZCBzb3VyY2Ugc2NoZW1hLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgIH0sXG5cbiAgICBwcm92aWRlc0RhdGEoKSB7XG4gICAgICAvLyBUaGlzIGNvbXBvbmVudCBpcyBhIGRhdGEtc291cmNlIGlmIGl0IGhhcyBhbiBhc3NvY2lhdGVkIEFQSSByZXNvdXJjZTpcbiAgICAgIHJldHVybiAhIXRoaXMucmVzb3VyY2VcbiAgICB9LFxuXG4gICAgbGlua3NUb1ZpZXcoKSB7XG4gICAgICAvLyBSZXR1cm5zIGBmYWxzZWBoZXJlLCBidXQgaXMgb3ZlcnJpZGRlbiB0byByZXR1cm4gYHRydWVgIGluXG4gICAgICAvLyBgU291cmNlTWl4aW5gIGZvciBjb21wb25lbnQgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGVpciBvd24gZGF0YSwgYnV0XG4gICAgICAvLyBlZGl0IHRoZWlyIGl0ZW1zIHRocm91Z2ggYSBsaW5rZWQgdmlldy4gIEluIHRoaXMgY2FzZSwgcmVhbCBpZHMgbmVlZCB0b1xuICAgICAgLy8gYmUgdXNlZC5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIC8vIENoZWNrIHRoZSBmb3JtIHRoYXQgdGhpcyBjb21wb25lbnQgYmVsb25ncyB0byBhcyB3ZWxsLCBzaW5jZSBpdCBtYXkgYmVcbiAgICAgIC8vIGluIGNyZWF0aW9uIG1vZGUsIHdoaWNoIG1ha2VzIGl0IHRyYW5zaWVudC5cbiAgICAgIC8vIE5PVEU6IFRoaXMgZG9lcyBub3QgbG9vcCBlbmRsZXNzbHkgYmVjYXVzZSBEaXRvRm9ybSByZWRlZmluZXNcbiAgICAgIC8vIGBpc1RyYW5zaWVudCgpYCB0byBvbmx5IHJldHVybiBgIXRoaXMucHJvdmlkZXNEYXRhYC5cbiAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmZvcm1Db21wb25lbnRcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLnByb3ZpZGVzRGF0YSAmJlxuICAgICAgICAhdGhpcy5saW5rc1RvVmlldyB8fFxuICAgICAgICBmb3JtICYmIChcbiAgICAgICAgICBmb3JtLmlzVHJhbnNpZW50IHx8XG4gICAgICAgICAgZm9ybS5pc0NyZWF0aW5nXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdHJhbnNpZW50Tm90ZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiYgKFxuICAgICAgICAgICc8Yj5Ob3RlPC9iPjogdGhlIHBhcmVudCBzdGlsbCBuZWVkcyB0byBiZSBzYXZlZCAnICtcbiAgICAgICAgICAnaW4gb3JkZXIgdG8gcGVyc2lzdCB0aGlzIGNoYW5nZS4nXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgc2hvdWxkTG9hZCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICF0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgICF0aGlzLmlzTG9hZGluZ1xuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBoYXNEYXRhKCkge1xuICAgICAgLy8gQmFzZSBkZWZpbml0aW9uLCB3aWxsIGJlIG92ZXJyaWRkZW4gYnkgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluXG4gICAgICByZXR1cm4gISF0aGlzLmxvYWRlZERhdGFcbiAgICB9LFxuXG4gICAgdmVyYnMoKSB7XG4gICAgICAvLyBUaGUgYWN0dWFsIGNvZGUgaXMgdGhlIGBnZXRWZXJicygpYCBtZXRob2QsIGZvciBlYXNpZXIgb3ZlcnJpZGluZyBvZlxuICAgICAgLy8gdGhpcyBjb21wdXRlZCBwcm9wZXJ0eSBpbiBjb21wb25lbnRzIHRoYXQgdXNlIHRoZSBSZXNvdXJjZU1peGluLlxuICAgICAgcmV0dXJuIHRoaXMuZ2V0VmVyYnMoKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0aW9uUmFuZ2UoKSB7XG4gICAgICAvLyBPbmx5IGFwcGx5IHBhZ2luYXRpb24gdG8gbGlzdHMuXG4gICAgICBjb25zdCB7IHBhZ2luYXRlOiBhbW91bnQgfSA9IHRoaXMuc291cmNlU2NoZW1hXG4gICAgICBpZiAodGhpcy5pc0xpc3RTb3VyY2UgJiYgYW1vdW50KSB7XG4gICAgICAgIGNvbnN0IHsgcGFnZSA9IDAgfSA9IHRoaXMucXVlcnkgfHwge31cbiAgICAgICAgY29uc3Qgc3RhcnQgPSBwYWdlICogYW1vdW50XG4gICAgICAgIHJldHVybiBbc3RhcnQsIHN0YXJ0ICsgYW1vdW50IC0gMV1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIHF1ZXJ5UGFyYW1zKCkge1xuICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnBhZ2luYXRpb25SYW5nZVxuICAgICAgY29uc3QgeyBwYWdlLCAuLi5xdWVyeSB9ID0gdGhpcy5xdWVyeSB8fCB7fVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucXVlcnksIC8vIFF1ZXJ5IG1heSBvdmVycmlkZSBzY29wZS5cbiAgICAgICAgLi4uKHJhbmdlICYmIHtcbiAgICAgICAgICAvLyBQYXNzIHBhZ2luYXRpb24gYXMgcmFuZ2UsIHNvIHRoYXQgd2UgYXV0b21hdGljYWxseSBnZXQgT2JqZWN0aW9uJ3NcbiAgICAgICAgICAvLyByZXN1bHRzIGNvdW50aW5nOlxuICAgICAgICAgIHJhbmdlOiByYW5nZS5qb2luKCcsJylcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICAvLyBXaGVuIGNyZWF0aW5nIG5lc3RlZCBkYXRhLCB3ZSBzdGlsbCBuZWVkIHRvIGNhbGwgc2V0dXBEYXRhKClcbiAgICBpZiAodGhpcy5wcm92aWRlc0RhdGEgfHwgdGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICB0aGlzLnNldHVwRGF0YSgpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRSZXNvdXJjZSgpIHtcbiAgICAgIC8vIFRoaXMgaXMgZGVmaW5lZCBhcyBhIG1ldGhvZCBzbyB0aGUgY29tcHV0ZWQgYHJlc291cmNlYCBnZXR0ZXIgY2FuXG4gICAgICAvLyBiZSBvdmVycmlkZGVuIGFuZCBgc3VwZXJgIGZ1bmN0aW9uYWxpdHkgY2FuIHN0aWxsIGJlIGFjY2Vzc2VkLlxuICAgICAgcmV0dXJuIGdldFJlc291cmNlKHRoaXMuc291cmNlU2NoZW1hPy5yZXNvdXJjZSwge1xuICAgICAgICB0eXBlOiAnY29sbGVjdGlvbicsXG4gICAgICAgIHBhcmVudDogdGhpcy5wYXJlbnRGb3JtQ29tcG9uZW50Py5yZXNvdXJjZSA/PyBudWxsXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRWZXJicygpIHtcbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy4kdmVyYnMoKVxuICAgICAgcmV0dXJuIHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgICAgIC8vIE92ZXJyaWRlIGRlZmF1bHQgdmVyYnMgd2l0aCB0aGVpciB0cmFuc2llbnQgdmVyc2lvbnM6XG4gICAgICAgICAgICBjcmVhdGU6ICdhZGQnLFxuICAgICAgICAgICAgY3JlYXRlZDogJ2FkZGVkJyxcbiAgICAgICAgICAgIHNhdmU6ICdhcHBseScsXG4gICAgICAgICAgICBzYXZlZDogJ2FwcGxpZWQnLFxuICAgICAgICAgICAgZGVsZXRlOiAncmVtb3ZlJyxcbiAgICAgICAgICAgIGRlbGV0ZWQ6ICdyZW1vdmVkJ1xuICAgICAgICAgIH1cbiAgICAgICAgOiB2ZXJic1xuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgdGhpcy5sb2FkZWREYXRhID0gZGF0YVxuICAgIH0sXG5cbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICAvLyBBY3R1YWwgY29kZSBpcyBpbiBzZXBhcmF0ZSBmdW5jdGlvbiBzbyBpdCdzIGVhc2VyIHRvIG92ZXJyaWRlXG4gICAgICAvLyBgc2V0dXBEYXRhKClgIGFuZCBhbmQgY2FsbCBgZW5zdXJlRGF0YSgpYCBmcm9tIHRoZSBvdmVycmlkZXMsXG4gICAgICAvLyBzZWUgRGl0b0Zvcm0gYW5kIFNvdXJjZU1peGluLlxuICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICB9LFxuXG4gICAgZW5zdXJlRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLnNob3VsZExvYWQpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzRGF0YSkge1xuICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2FkRGF0YSh0cnVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbG9hZERhdGEoKSB7XG4gICAgICB0aGlzLmxvYWREYXRhKGZhbHNlKVxuICAgIH0sXG5cbiAgICBsb2FkRGF0YShjbGVhcikge1xuICAgICAgaWYgKCF0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIGlmIChjbGVhcikge1xuICAgICAgICAgIHRoaXMuY2xlYXJEYXRhKClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlcXVlc3REYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlRGF0YShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIHJldHVybiBzZXREZWZhdWx0VmFsdWVzKHNjaGVtYSwgdHlwZSA/IHsgdHlwZSB9IDoge30sIHRoaXMpXG4gICAgfSxcblxuICAgIHJlcXVlc3REYXRhKCkge1xuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLnF1ZXJ5UGFyYW1zXG4gICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoeyBtZXRob2Q6ICdnZXQnLCBxdWVyeSB9LCAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGRhdGE/LnR5cGUgPT09ICdGaWx0ZXJWYWxpZGF0aW9uJyAmJlxuICAgICAgICAgICAgICB0aGlzLm9uRmlsdGVyRXJyb3JzPy4oZGF0YS5lcnJvcnMpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1VuYXV0aG9yaXplZEVycm9yKHJlc3BvbnNlKSkge1xuICAgICAgICAgICAgICAvLyBUT0RPOiBDYW4gd2UgcmVhbGx5IHN3YWxsb3cgdGhlc2UgZXJyb3JzP1xuICAgICAgICAgICAgICAvLyBJcyBjYWxsaW5nIGBlbnN1cmVVc2VyKClgIGluIGBvbkJlZm9yZVJlcXVlc3QoKWAgZW5vdWdoP1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldERhdGEocmVzcG9uc2UuZGF0YSlcbiAgICAgICAgICB0aGlzLmVtaXRTY2hlbWFFdmVudCgnbG9hZCcpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGlvbkVycm9yKHJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2U/LnN0YXR1cyA9PT0gNDAwXG4gICAgfSxcblxuICAgIGlzVW5hdXRob3JpemVkRXJyb3IocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzID09PSA0MDFcbiAgICB9LFxuXG4gICAgYXN5bmMgaGFuZGxlUmVxdWVzdChcbiAgICAgIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICByZXNvdXJjZSA9IHRoaXMucmVzb3VyY2UsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBkYXRhXG4gICAgICB9LFxuICAgICAgY2FsbGJhY2tcbiAgICApIHtcbiAgICAgIGNvbnN0IGxvYWRpbmdPcHRpb25zID0ge1xuICAgICAgICB1cGRhdGVSb290OiB0cnVlLCAvLyBEaXNwbGF5IHNwaW5uZXIgaW4gaGVhZGVyIHdoZW4gbG9hZGluZyBpbiByZXNvdXJjZXNcbiAgICAgICAgdXBkYXRlVmlldzogdGhpcy5pc0luVmlldyAvLyBOb3RpZnkgdmlldyBvZiBsb2FkaW5nIGZvciB2aWV3IGNvbXBvbmVudHNcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEsIHF1ZXJ5IH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAvLyBQYXNzIGJvdGggcmVxdWVzdCBhbmQgcmVzcG9uc2UgdG8gdGhlIGNhbGxiYWNrLCBzbyB0aGV5IGNhbiBiZVxuICAgICAgICAvLyBleHBvc2VkIHRvIGZ1cnRoZXIgY2FsbGJhY2tzIHRocm91Z2ggRGl0b0NvbnRleHQuXG4gICAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3BvbnNlKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgLy8gSWYgY2FsbGJhY2sgcmV0dXJucyB0cnVlLCBlcnJvcnMgd2VyZSBhbHJlYWR5IGhhbmRsZWQuXG4gICAgICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IGVycm9yXG4gICAgICAgIGlmICghY2FsbGJhY2soZXJyb3IsIHJlc3BvbnNlKSkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZT8uZGF0YVxuICAgICAgICAgIGNvbnN0IHRpdGxlID0gaXNTdHJpbmcoZGF0YT8udHlwZSlcbiAgICAgICAgICAgID8gbGFiZWxpemUoZGF0YS50eXBlKVxuICAgICAgICAgICAgOiAnRXJyb3InXG4gICAgICAgICAgY29uc3QgdGV4dCA9IGRhdGE/Lm1lc3NhZ2UgPz8gZXJyb3JcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7IHR5cGU6ICdlcnJvcicsIHRpdGxlLCB0ZXh0IH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgfSxcblxuICAgIGdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKSB7XG4gICAgICAvLyBDb252ZW50aW9uOiBvbmx5IHBvc3QsIHB1dCBhbmQgcGF0Y2ggcmVxdWVzdHMgcGFzcyB0aGUgZGF0YSBhcyBwYXlsb2FkLlxuICAgICAgcmV0dXJuIChcbiAgICAgICAgWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLmluY2x1ZGVzKG1ldGhvZCkgJiYgKFxuICAgICAgICAgIC8vIFRPRE86IFVzZSBgaGFuZGxlRGF0YVNjaGVtYSgpYCBhc3luY2hyb25vdXNseSBoZXJlIGluc3RlYWQsIHRvXG4gICAgICAgICAgLy8gb2ZmZXIgdGhlIHNhbWUgYW1vdW50IG9mIHBvc3NpYmlsaXRpZXMgZm9yIGRhdGEgbG9hZGluZy5cbiAgICAgICAgICBidXR0b24uZ2V0U2NoZW1hVmFsdWUoWydyZXNvdXJjZScsICdkYXRhJ10pIHx8XG4gICAgICAgICAgYnV0dG9uLnByb2Nlc3NlZEl0ZW1cbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IGdldFJlc291cmNlKGJ1dHRvbi5zY2hlbWEucmVzb3VyY2UsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLnJlc291cmNlXG4gICAgICB9KVxuICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IHsgbWV0aG9kIH0gPSByZXNvdXJjZVxuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgICAgcmV0dXJuIHRoaXMuc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgc2V0RGF0YSA9IGZhbHNlLFxuICAgICAgb25TdWNjZXNzLFxuICAgICAgb25FcnJvcixcbiAgICAgIG5vdGlmeVN1Y2Nlc3MgPSAoKSA9PlxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBTdWNjZXNzZnVsJyxcbiAgICAgICAgICB0ZXh0OiAnUmVxdWVzdCB3YXMgc3VjY2Vzc2Z1bGx5IHNlbnQuJ1xuICAgICAgICB9KSxcbiAgICAgIG5vdGlmeUVycm9yID0gZXJyb3IgPT5cbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICBgVW5hYmxlIHRvIHNlbmQgcmVxdWVzdCR7ZXJyb3IgPyAnOicgOiAnJ31gLFxuICAgICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdChcbiAgICAgICAgICB7IG1ldGhvZCwgcmVzb3VyY2UsIGRhdGEgfSxcbiAgICAgICAgICBhc3luYyAoZXJyLCByZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgIC8vIFNlZSBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBEaXRvIHZhbGlkYXRpb24gZXJyb3I6XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMuaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpICYmIGRhdGEuZXJyb3JzXG4gICAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlcnJvciA9IGlzT2JqZWN0KGRhdGEpID8gZGF0YSA6IGVyclxuICAgICAgICAgICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdlcnJvcicsIHtcbiAgICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5RXJyb3IsXG4gICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdW5kZXJseWluZyBkYXRhIGJlZm9yZSBjYWxsaW5nIGBub3RpZnkoKWAgb3JcbiAgICAgICAgICAgICAgLy8gYHRoaXMuaXRlbUxhYmVsYCwgc28gaWQgaXMgc2V0IGFmdGVyIGNyZWF0aW5nIG5ldyBpdGVtcy5cbiAgICAgICAgICAgICAgaWYgKHNldERhdGEgJiYgZGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RGF0YShkYXRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgZXZlbnQsIHsgbm90aWZ5LCBlcnJvciB9KSB7XG4gICAgICAvLyBDcmVhdGUgdGhlIGNvbnRleHQgb3V0c2lkZSBvZiBgZW1pdEV2ZW50KClgLCBzbyB0aGF0XG4gICAgICAvLyBgY29udGV4dC53YXNOb3RpZmllZGAgY2FuIGJlIGNoZWNrZWQgYWZ0ZXIuXG4gICAgICBjb25zdCBjb250ZXh0ID0gbmV3IERpdG9Db250ZXh0KGJ1dHRvbiwge1xuICAgICAgICBuZXN0ZWQ6IGZhbHNlLFxuICAgICAgICBkYXRhOiB0aGlzLmRhdGEsXG4gICAgICAgIGl0ZW1MYWJlbDogdGhpcy5pdGVtTGFiZWwsXG4gICAgICAgIGVycm9yXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzID0gYXdhaXQgYnV0dG9uLmVtaXRFdmVudChldmVudCwgeyBjb250ZXh0IH0pXG4gICAgICBpZiAoXG4gICAgICAgIG5vdGlmeSAmJlxuICAgICAgICAvLyBQcmV2ZW50IGRlZmF1bHQgaWYgYW55dGhpbmcgd2FzIHJldHVybmVkIGZyb20gdGhlIGV2ZW50IGhhbmRsZXIuXG4gICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIC8vIERvIG5vdCBkaXNwbGF5IGRlZmF1bHQgbm90aWZpY2F0aW9uIGlmIHRoZSBldmVudCBoYW5kbGVyIGFscmVhZHlcbiAgICAgICAgLy8gZGlzcGxheWVkIGEgbm90aWZpY2F0aW9uLlxuICAgICAgICAhY29udGV4dC53YXNOb3RpZmllZFxuICAgICAgKSB7XG4gICAgICAgIG5vdGlmeShlcnJvcilcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGF0aChwYXRoKSB7XG4gIC8vIEZvciBwYXRocyBzdGFyaW5nIHdpdGggYC9gLCB3ZSBjYW4gdXNlIHRoZSBuYXRpdmUgYFVSTCgpYCBjbGFzcyB0byByZXNvbHZlXG4gIC8vIHRoZSBwYXRoLCB3aGljaCB3aWxsIGFsc28gaGFuZGxlIGAuLmAgYW5kIGAuYCBzZWdtZW50czpcbiAgcmV0dXJuIG5ldyBVUkwoYGZpbGU6JHtwYXRofWApLnBhdGhuYW1lXG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZm9ybS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gIDpjbGFzcz1cInsgJ2RpdG8tZm9ybS1uZXN0ZWQnOiBpc05lc3RlZFJvdXRlIH1cIlxuICA6ZGF0YS1yZXNvdXJjZT1cInNvdXJjZVNjaGVtYS5wYXRoXCJcbilcbiAgLy8tIE5PVEU6IE5lc3RlZCBmb3JtIGNvbXBvbmVudHMgYXJlIGtlcHQgYWxpdmUgYnkgdXNpbmcgYHYtc2hvd2AgaW5zdGVhZCBvZlxuICAvLy0gYHYtaWZgIGhlcmUsIHNvIGV2ZW50IGhhbmRsaW5nIGFuZCBvdGhlciB0aGluZ3Mgc3RpbGwgd29yayB3aXRoIG5lc3RlZFxuICAvLy0gZWRpdGluZy4gT25seSByZW5kZXIgYSByb3V0ZXItdmlldyBoZXJlIGlmIHRoaXMgaXNuJ3QgdGhlIGxhc3QgZGF0YSByb3V0ZVxuICAvLy0gYW5kIG5vdCBhIG5lc3RlZCBmb3JtIHJvdXRlLCB3aGljaCB3aWxsIGFwcGVhciBlbHNld2hlcmUgaW4gaXRzIG93biB2aWV3LlxuICBSb3V0ZXJWaWV3KFxuICAgIHYtaWY9XCIhKGlzTGFzdFVubmVzdGVkUm91dGUgfHwgaXNOZXN0ZWRSb3V0ZSlcIlxuICAgIHYtc2hvdz1cIiFpc0FjdGl2ZVwiXG4gIClcbiAgLy8tIFVzZSBhIDxkaXY+IGZvciBpbmxpbmVkIGZvcm1zLCBhcyB3ZSBzaG91bGRuJ3QgbmVzdCBhY3R1YWwgPGZvcm0+IHRhZ3MuXG4gIGNvbXBvbmVudC5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gICAgdi1zaG93PVwiaXNBY3RpdmVcIlxuICAgIDppcz1cImlzTmVzdGVkUm91dGUgPyAnZGl2JyA6ICdmb3JtJ1wiXG4gICAgQHN1Ym1pdC5wcmV2ZW50XG4gIClcbiAgICBEaXRvU2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICBzY3JvbGxhYmxlXG4gICAgICBoZWFkZXJJbk1lbnVcbiAgICAgIGdlbmVyYXRlTGFiZWxzXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI2J1dHRvbnMpXG4gICAgICAgIERpdG9CdXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZC5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICA6ZGlzYWJsZWQ9XCJpc0xvYWRpbmdcIlxuICAgICAgICApXG4gICAgLy8tIFByZXZlbnQgaW1wbGljaXQgc3VibWlzc2lvbiBvZiB0aGUgZm9ybSwgZm9yIGV4YW1wbGUgd2hlbiB0eXBpbmcgZW50ZXJcbiAgICAvLy0gaW4gYW4gaW5wdXQgZmllbGQuXG4gICAgLy8tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTUwNzgwNlxuICAgIGJ1dHRvbihcbiAgICAgIHYtc2hvdz1cImZhbHNlXCJcbiAgICAgIHR5cGU9XCJzdWJtaXRcIlxuICAgICAgZGlzYWJsZWRcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgY2xvbmUsIGNhcGl0YWxpemUsIHBhcnNlRGF0YVBhdGgsIG1lcmdlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUm91dGVNaXhpbiBmcm9tICcuLi9taXhpbnMvUm91dGVNaXhpbi5qcydcbmltcG9ydCBSZXNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9SZXNvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzLCBpc09iamVjdFNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHJlc29sdmVQYXRoIH0gZnJvbSAnLi4vdXRpbHMvcGF0aC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRm9ybScsIHtcbiAgbWl4aW5zOiBbUm91dGVNaXhpbiwgUmVzb3VyY2VNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3JlYXRlZERhdGE6IG51bGwsXG4gICAgICBjbG9uZWREYXRhOiB1bmRlZmluZWQsXG4gICAgICBzb3VyY2VLZXk6IG51bGwsXG4gICAgICBpc0Zvcm06IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2ZXJicygpIHtcbiAgICAgIC8vIEFkZCBzdWJtaXQgLyBzdWJtaXR0ZWQgdG8gdGhlIHZlcmJzIHJldHVybmVkIGJ5IFJlc291cmNlTWl4aW5cbiAgICAgIC8vIE5PVEU6IFRoZXNlIGdldCBwYXNzZWQgb24gdG8gY2hpbGRyZW4gdGhyb3VnaDpcbiAgICAgIC8vIGBwcm92aWRlKCkgLi4uIHsgJHZlcmJzOiAoKSA9PiB0aGlzLnZlcmJzIH1gIGluIFJlc291cmNlTWl4aW5cbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy5nZXRWZXJicygpXG4gICAgICBjb25zdCB7IGlzQ3JlYXRpbmcsIHByb3ZpZGVzRGF0YSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udmVyYnMsXG4gICAgICAgIHN1Ym1pdDogaXNDcmVhdGluZyA/IHZlcmJzLmNyZWF0ZSA6IHZlcmJzLnNhdmUsXG4gICAgICAgIHN1Ym1pdHRlZDogaXNDcmVhdGluZyA/IHZlcmJzLmNyZWF0ZWQgOiB2ZXJicy5zYXZlZCxcbiAgICAgICAgY2FuY2VsOiBwcm92aWRlc0RhdGEgPyB2ZXJicy5jYW5jZWwgOiB2ZXJicy5jbG9zZSxcbiAgICAgICAgY2FuY2VsbGVkOiBwcm92aWRlc0RhdGEgPyB2ZXJicy5jYW5jZWxsZWQgOiB2ZXJicy5jbG9zZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5nZXRJdGVtRm9ybVNjaGVtYShcbiAgICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBkYXRhIHlldCwgcHJvdmlkZSBhbiBlbXB0eSBvYmplY3Qgd2l0aCBqdXN0IHRoZVxuICAgICAgICAgIC8vIHJpZ2h0IHR5cGUgc2V0LCBzbyB0aGUgZm9ybSBjYW4gYWx3YXlzIGJlIGRldGVybWluZWQuXG4gICAgICAgICAgdGhpcy5kYXRhIHx8IHsgdHlwZTogdGhpcy50eXBlIH0sXG4gICAgICAgICAgdGhpcy5jb250ZXh0XG4gICAgICAgICkgfHwge31cbiAgICAgICkgLy8gQWx3YXlzIHJldHVybiBhIHNjaGVtYSBvYmplY3Qgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgaXQuXG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyhcbiAgICAgICAgbWVyZ2UoXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2FuY2VsOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5jYW5jZWwoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzdWJtaXQ6ICF0aGlzLmlzTXV0YXRpbmcgJiYge1xuICAgICAgICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgICAgICAgLy8gU3VibWl0IGJ1dHRvbnMgY2xvc2UgdGhlIGZvcm0gYnkgZGVmYXVsdDpcbiAgICAgICAgICAgICAgY2xvc2VGb3JtOiB0cnVlLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKHsgY29tcG9uZW50OiBidXR0b24gfSkgPT4gYnV0dG9uLnN1Ym1pdCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMuc2NoZW1hLmJ1dHRvbnNcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0FjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTGFzdFJvdXRlIHx8IHRoaXMuaXNMYXN0VW5uZXN0ZWRSb3V0ZVxuICAgIH0sXG5cbiAgICBpc1RyYW5zaWVudCgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5wcm92aWRlc0RhdGFcbiAgICB9LFxuXG4gICAgaXNDcmVhdGluZygpIHtcbiAgICAgIC8vIHRoaXMucGFyYW0gaXMgaW5oZXJpdGVkIGZyb20gUm91dGVNaXhpblxuICAgICAgcmV0dXJuIHRoaXMucGFyYW0gPT09ICdjcmVhdGUnXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNNdXRhdGluZyAmJiAhIXRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uaXNEaXJ0eVxuICAgIH0sXG5cbiAgICBpc011dGF0aW5nKCkge1xuICAgICAgLy8gV2hlbiBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgdGhlIGZvcm0gZWRpdHMgdGhlIGluaGVyaXRlZCBkYXRhXG4gICAgICAvLyBkaXJlY3RseSBpbnN0ZWFkIG9mIG1ha2luZyBhIGNvcHkgZm9yIHBlcnNpc3RlbmNlIHVwb24gc3VibWlzc2lvbi5cbiAgICAgIC8vIFNlZSBgaW5oZXJpdGVkRGF0YSgpYCBjb21wdXRlZCBwcm9wZXJ0eSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgICAgcmV0dXJuICEhdGhpcy5zb3VyY2VTY2hlbWEubXV0YXRlXG4gICAgfSxcblxuICAgIHNlbGVjdGVkVGFiKCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudD8uc2VsZWN0ZWRUYWIgfHwgbnVsbFxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgLy8gVGhlIHR5cGUgb2YgZm9ybSB0byBjcmVhdGUsIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5xdWVyeS50eXBlXG4gICAgfSxcblxuICAgIGl0ZW1JZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogdGhpcy5wYXJhbSA/PyBudWxsXG4gICAgfSxcblxuICAgIG1ldGhvZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmcgPyAncG9zdCcgOiAncGF0Y2gnXG4gICAgfSxcblxuICAgIHJlc291cmNlKCkge1xuICAgICAgY29uc3QgcmVzb3VyY2UgPSB0aGlzLmdldFJlc291cmNlKClcbiAgICAgIHJldHVybiBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLml0ZW1JZCwgcmVzb3VyY2UpIHx8IHJlc291cmNlXG4gICAgfSxcblxuICAgIGJyZWFkY3J1bWJQcmVmaXgoKSB7XG4gICAgICByZXR1cm4gY2FwaXRhbGl6ZSh0aGlzLmlzQ3JlYXRpbmcgPyB0aGlzLnZlcmJzLmNyZWF0ZSA6IHRoaXMudmVyYnMuZWRpdClcbiAgICB9LFxuXG4gICAgZGF0YSgpIHtcbiAgICAgIC8vIFJldHVybiBkaWZmZXJlbnQgZGF0YSBcImNvbnRhaW5lcnNcIiBiYXNlZCBvbiBkaWZmZXJlbnQgc2NlbmFyaW9zOlxuICAgICAgLy8gMS4gY3JlYXRlZERhdGEsIGlmIHdlJ3JlIGluIGEgZm9ybSBmb3IgYSBuZXdseSBjcmVhdGVkIG9iamVjdC5cbiAgICAgIC8vIDIuIGxvYWRlZERhdGEsIGlmIHRoZSBmb3JtIGl0c2VsZiBpcyB0aGUgcm9vdCBvZiB0aGUgZGF0YSAoZS5nLiB3aGVuXG4gICAgICAvLyAgICBkaXJlY3RseSBsb2FkaW5nIGFuIGVkaXRpbmcgcm9vdCkuXG4gICAgICAvLyAzLiBUaGUgZGF0YSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50LCB3aGljaCBpdHNlbGYgbWF5IGJlIGVpdGhlciBhXG4gICAgICAvLyAgICB2aWV3IHRoYXQgbG9hZGVkIHRoZSBkYXRhLCBvciBhIGZvcm0gdGhhdCBlaXRoZXIgbG9hZGVkIHRoZSBkYXRhLCBvclxuICAgICAgLy8gICAgYWxzbyBpbmhlcml0ZWQgaXQgZnJvbSBpdHMgcGFyZW50LiBOb3RlIHRoYXQgd2UgdXNlIGEgY2xvbmUgb2YgaXQsXG4gICAgICAvLyAgICBzbywgZGF0YSBjaGFuZ2VzIGFyZW4ndCBhcHBsaWVkIHVudGlsIHNldFNvdXJjZURhdGEoKSBpcyBjYWxsZWQuXG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVkRGF0YSB8fCB0aGlzLmxvYWRlZERhdGEgfHwgdGhpcy5pbmhlcml0ZWREYXRhIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZGF0YVBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXREYXRhUGF0aEZyb20odGhpcy5kYXRhQ29tcG9uZW50KVxuICAgIH0sXG5cbiAgICBzb3VyY2VEYXRhKCkge1xuICAgICAgLy8gUG9zc2libGUgcGFyZW50cyBhcmUgRGl0b0Zvcm0gZm9yIGZvcm1zLCBvciBEaXRvVmlldyBmb3Igcm9vdCBsaXN0cy5cbiAgICAgIC8vIEJvdGggaGF2ZSBhIGRhdGEgcHJvcGVydHkgd2hpY2ggYWJzdHJhY3RzIGF3YXkgbG9hZGluZyBhbmQgaW5oZXJpdGluZ1xuICAgICAgLy8gb2YgZGF0YS5cbiAgICAgIC8vIEZvcm1zIHRoYXQgYXJlIGFib3V0IHRvIGJlIGRlc3Ryb3llZCBkdWUgdG8gbmF2aWdhdGlvbiBsb29zZSB0aGVpclxuICAgICAgLy8gcm91dGUtcmVjb3JkLCBidXQgbWlnaHQgc3RpbGwgdHJpZ2dlciB0aGlzIGdldHRlci4gRmlsdGVyIHRob3NlIG91dC5cbiAgICAgIGxldCBkYXRhID0gdGhpcy5yb3V0ZVJlY29yZCA/IHRoaXMucGFyZW50Um91dGVDb21wb25lbnQuZGF0YSA6IG51bGxcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIC8vIEhhbmRsZSBuZXN0ZWQgZGF0YSBieSBzcGxpdHRpbmcgdGhlIGRhdGFQYXRoLCBpdGVyYXRlIHRocm91Z2ggdGhlXG4gICAgICAgIC8vIGFjdHVhbCBkYXRhIGFuZCBsb29rIG5lc3QgY2hpbGQtZGF0YSB1cC5cbiAgICAgICAgY29uc3QgZGF0YVBhcnRzID0gcGFyc2VEYXRhUGF0aChcbiAgICAgICAgICB0aGlzLmdldERhdGFQYXRoRnJvbSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50KVxuICAgICAgICApXG4gICAgICAgIC8vIENvbXBhcmUgZGF0YVBhcnRzIGFnYWluc3QgbWF0Y2hlZCByb3V0ZVBhdGggcGFydHMsIHRvIGlkZW50aWZ5IHRob3NlXG4gICAgICAgIC8vIHBhcnRzIHRoYXQgbmVlZCB0byBiZSB0cmVhdGVkIGxpa2UgaWRzIGFuZCBtYXBwZWQgdG8gaW5kaWNlcyBpbiBkYXRhLlxuICAgICAgICBjb25zdCBwYXRoUGFydHMgPSB0aGlzLnJvdXRlUmVjb3JkLnBhdGguc3BsaXQoJy8nKVxuICAgICAgICBjb25zdCByb3V0ZVBhcnRzID0gcGF0aFBhcnRzLnNsaWNlKHBhdGhQYXJ0cy5sZW5ndGggLSBkYXRhUGFydHMubGVuZ3RoKVxuICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBudWxsXG4gICAgICAgIGNvbnN0IGxhc3REYXRhUGFydCA9IGRhdGFQYXJ0c1tkYXRhUGFydHMubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKSAmJiBsYXN0RGF0YVBhcnQgPT09ICdjcmVhdGUnKSB7XG4gICAgICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBvYmplY3Qgc291cmNlIGFuZCBhcmUgY3JlYXRpbmcsIHRoZSBkYXRhUGF0aCBuZWVkcyB0b1xuICAgICAgICAgIC8vIGJlIHNob3J0ZW5lZCBieSB0aGUgJ2NyZWF0ZScgZW50cnkuIFRoaXMgaXNuJ3QgbmVlZGVkIGZvciBsaXN0XG4gICAgICAgICAgLy8gc291cmNlcywgYXMgdGhlcmUgdGhlIHBhcmFtZXRlciBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlIGl0ZW0gaWQuXG4gICAgICAgICAgZGF0YVBhcnRzLmxlbmd0aC0tXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBkYXRhUGFydHMubGVuZ3RoOyBpIDwgbCAmJiBkYXRhOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXRhUGFydCA9IGRhdGFQYXJ0c1tpXVxuICAgICAgICAgIC8vIElmIHRoaXMgaXMgYW4gOmlkIHBhcnQsIGZpbmQgdGhlIGluZGV4IG9mIHRoZSBpdGVtIHdpdGggZ2l2ZW4gaWQuXG4gICAgICAgICAgY29uc3Qga2V5ID0gL146aWQvLnRlc3Qocm91dGVQYXJ0c1tpXSlcbiAgICAgICAgICAgID8gZGF0YVBhcnQgPT09ICdjcmVhdGUnXG4gICAgICAgICAgICAgID8gbnVsbCAvLyBUaGVyZSdzIG5vIGluZGV4IGZvciBlbnRyaWVzIGFib3V0IHRvIGJlIGNyZWF0ZWRcbiAgICAgICAgICAgICAgOiB0aGlzLmZpbmRJdGVtSWRJbmRleCh0aGlzLnNvdXJjZVNjaGVtYSwgZGF0YSwgZGF0YVBhcnQpXG4gICAgICAgICAgICA6IGRhdGFQYXJ0XG4gICAgICAgICAgLy8gU2tpcCB0aGUgZmluYWwgbG9va3VwIGJ1dCByZW1lbWJlciBgc291cmNlS2V5YCwgYXMgd2Ugd2FudCB0aGVcbiAgICAgICAgICAvLyBwYXJlbnQgZGF0YSBzbyB3ZSBjYW4gcmVwbGFjZSB0aGUgZW50cnkgYXQgYHNvdXJjZUtleWAgb24gaXQuXG4gICAgICAgICAgaWYgKGkgPT09IGwgLSAxKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRoaXMuc291cmNlS2V5ID0ga2V5XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGEgPSBkYXRhW2tleV1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhXG4gICAgfSxcblxuICAgIGluaGVyaXRlZERhdGEoKSB7XG4gICAgICAvLyBEYXRhIGluaGVyaXRlZCBmcm9tIHBhcmVudCwgYW5kIGNsb25lZCB0byBwcm90ZWN0IGFnYWluc3QgcmVhY3RpdmVcbiAgICAgIC8vIGNoYW5nZXMgdW50aWwgY2hhbmdlcyBhcmUgYXBwbGllZCB0aHJvdWdoIHNldFNvdXJjZURhdGEoKSwgdW5sZXNzXG4gICAgICAvLyBgc291cmNlU2NoZW1hLm11dGF0ZWAgaXMgdHJ1ZSwgaW4gd2hpY2ggY2FzZSBkYXRhIGlzIG11dGF0ZWQgZGlyZWN0bHkuXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgdGhpcy5jbG9uZWREYXRhID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgdGhpcy5zb3VyY2VEYXRhICYmXG4gICAgICAgIHRoaXMuc291cmNlS2V5ICE9PSBudWxsXG4gICAgICApIHtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLnNvdXJjZURhdGFbdGhpcy5zb3VyY2VLZXldXG4gICAgICAgIGlmICghdGhpcy5pc011dGF0aW5nKSB7XG4gICAgICAgICAgLy8gVXNlIGEgdHJpY2sgdG8gc3RvcmUgY2xvbmVkIGluaGVyaXRlZCBkYXRhIGluIGNsb25lZERhdGEsIHRvIG1ha2VcbiAgICAgICAgICAvLyBpdCByZWFjdGl2ZSBhbmQgcHJldmVudCBpdCBmcm9tIGJlaW5nIGNsb25lZCBtdWx0aXBsZSB0aW1lcy5cbiAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9IGRhdGEgPSBjbG9uZShkYXRhKVxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICBkYXRhID09PSBudWxsICYmXG4gICAgICAgICAgIXRoaXMuaXNDcmVhdGluZyAmJlxuICAgICAgICAgIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIG9mIGFuIG9iamVjdCBzb3VyY2UgaXMgbnVsbCwgcmVkaXJlY3QgdG8gaXRzIGNyZWF0ZSByb3V0ZS5cbiAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHsgcGF0aDogYCR7dGhpcy5wYXRofS9jcmVhdGVgIH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNsb25lZERhdGFcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uaGFzRGF0YSgpXG4gICAgaGFzRGF0YSgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBpdGVtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zb3VyY2VTY2hlbWEsIHRoaXMuZGF0YSwgeyBleHRlbmRlZDogdHJ1ZSB9KVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICRyb3V0ZSh0bywgZnJvbSkge1xuICAgICAgLy8gUmVsb2FkIGZvcm0gZGF0YSB3aGVuIG5hdmlnYXRpbmcgdG8gYSBkaWZmZXJlbnQgZW50aXR5IGluIHNhbWUgZm9ybS5cbiAgICAgIGNvbnN0IHsgcGFyYW0gfSA9IHRoaXMubWV0YVxuICAgICAgaWYgKFxuICAgICAgICBwYXJhbSAmJlxuICAgICAgICB0aGlzLnByb3ZpZGVzRGF0YSAmJlxuICAgICAgICBmcm9tLnBhcmFtc1twYXJhbV0gIT09ICdjcmVhdGUnICYmXG4gICAgICAgIHRvLnBhcmFtc1twYXJhbV0gIT09IGZyb20ucGFyYW1zW3BhcmFtXVxuICAgICAgKSB7XG4gICAgICAgIHRoaXMubG9hZERhdGEodHJ1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc291cmNlRGF0YTogJ2NsZWFyQ2xvbmVkRGF0YScsXG4gICAgLy8gTmVlZGVkIGZvciB0aGUgJ2NyZWF0ZScgcmVkaXJlY3QgaW4gYGluaGVyaXRlZERhdGEoKWAgdG8gd29yazpcbiAgICBjcmVhdGU6ICdzZXR1cERhdGEnXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50LmVtaXRFdmVudChldmVudCwgcGFyYW1zKVxuICAgIH0sXG5cbiAgICBnZXREYXRhUGF0aEZyb20ocm91dGUpIHtcbiAgICAgIC8vIEdldCB0aGUgZGF0YSBwYXRoIGJ5IGRlbm9ybWFsaXplUGF0aCB0aGUgcmVsYXRpdmUgcm91dGUgcGF0aFxuICAgICAgcmV0dXJuIHRoaXMuYXBpLmRlbm9ybWFsaXplUGF0aChcbiAgICAgICAgdGhpcy5wYXRoXG4gICAgICAgICAgLy8gRGl0b1ZpZXdzIGhhdmUgbmVzdGVkIHJvdXRlcywgc28gZG9uJ3QgcmVtb3ZlIHRoZWlyIHBhdGguXG4gICAgICAgICAgLnNsaWNlKChyb3V0ZS5pc1ZpZXcgPyAwIDogcm91dGUucGF0aC5sZW5ndGgpICsgMSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0dXBEYXRhKClcbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICBpZiAodGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlZERhdGEgfHw9IHRoaXMuY3JlYXRlRGF0YSh0aGlzLnNjaGVtYSwgdGhpcy50eXBlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lbnN1cmVEYXRhKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2V0U291cmNlRGF0YShkYXRhKSB7XG4gICAgICBpZiAodGhpcy5zb3VyY2VEYXRhICYmIHRoaXMuc291cmNlS2V5ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHsgbWFpblNjaGVtYUNvbXBvbmVudCB9ID0gdGhpc1xuICAgICAgICB0aGlzLnNvdXJjZURhdGFbdGhpcy5zb3VyY2VLZXldID0gbWFpblNjaGVtYUNvbXBvbmVudC5maWx0ZXJEYXRhKGRhdGEpXG4gICAgICAgIG1haW5TY2hlbWFDb21wb25lbnQub25DaGFuZ2UoKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGFkZFNvdXJjZURhdGEoZGF0YSkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMuc291cmNlU2NoZW1hKVxuICAgICAgICA/IHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgICA6ICEhdGhpcy5zb3VyY2VEYXRhPy5wdXNoKGRhdGEpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy5zZXREYXRhKG51bGwpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gc2V0RGF0YSgpIGlzIGNhbGxlZCBhZnRlciBzdWJtaXQgd2hlbiBkYXRhIGhhcyBjaGFuZ2VkLlxuICAgICAgaWYgKHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgLy8gRm9yIGNvbXBvbmVudHMgd2l0aCB0cmFuc2llbnQgZGF0YSwgbW9kaWZ5IHRoaXMuc291cmNlRGF0YS5cbiAgICAgICAgdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmNyZWF0ZWREYXRhID0gbnVsbFxuICAgICAgICB0aGlzLmxvYWRlZERhdGEgPSBkYXRhXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNsZWFyQ2xvbmVkRGF0YSh0bywgZnJvbSkge1xuICAgICAgLy8gT25seSBjbGVhciBpZiB0aGUgd2F0Y2hlZCBzb3VyY2VEYXRhIGl0c2VsZiBjaGFuZ2VzIGluIHRoZSBmb3JtLlxuICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBjYW5jZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbG9zZSgpXG4gICAgfSxcblxuICAgIGFzeW5jIGNsb3NlKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGUodGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudC5wYXRoKVxuICAgIH0sXG5cbiAgICBnZXRTdWJtaXRWZXJiKHByZXNlbnQgPSB0cnVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gcHJlc2VudFxuICAgICAgICAgID8gJ2NyZWF0ZSdcbiAgICAgICAgICA6ICdjcmVhdGVkJ1xuICAgICAgICA6IHByZXNlbnRcbiAgICAgICAgICA/ICdzdWJtaXQnXG4gICAgICAgICAgOiAnc3VibWl0dGVkJ1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXQoYnV0dG9uLCB7IHZhbGlkYXRlID0gdHJ1ZSwgY2xvc2VGb3JtID0gZmFsc2UgfSA9IHt9KSB7XG4gICAgICBpZiAodmFsaWRhdGUgJiYgIXRoaXMudmFsaWRhdGVBbGwoKSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgZ2V0VmVyYiA9IHByZXNlbnQgPT4gdGhpcy52ZXJic1t0aGlzLmdldFN1Ym1pdFZlcmIocHJlc2VudCldXG5cbiAgICAgIC8vIEFsbG93IGJ1dHRvbnMgdG8gb3ZlcnJpZGUgYm90aCBtZXRob2QgYW5kIHJlc291cmNlIHBhdGggdG8gc3VibWl0IHRvOlxuICAgICAgY29uc3QgYnV0dG9uUmVzb3VyY2UgPSBnZXRSZXNvdXJjZShidXR0b24uc2NoZW1hLnJlc291cmNlLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5yZXNvdXJjZVxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlc291cmNlID0gYnV0dG9uUmVzb3VyY2UgfHwgdGhpcy5yZXNvdXJjZVxuICAgICAgY29uc3QgbWV0aG9kID0gcmVzb3VyY2U/Lm1ldGhvZCB8fCB0aGlzLm1ldGhvZFxuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpXG4gICAgICBsZXQgc3VjY2Vzc1xuICAgICAgaWYgKCFidXR0b25SZXNvdXJjZSAmJiB0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnN1Ym1pdFRyYW5zaWVudChidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KHRoaXMuZ2V0U3VibWl0VmVyYigpKSxcbiAgICAgICAgICBvbkVycm9yOiBlcnJvciA9PlxuICAgICAgICAgICAgdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2Vycm9yJywge1xuICAgICAgICAgICAgICBjb250ZXh0OiB7IGVycm9yIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vdGlmeVN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgICAgIHRpdGxlOiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgICAgICAgICA/IGBJdGVtICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gXG4gICAgICAgICAgICAgICAgOiBgQ2hhbmdlICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gLFxuICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgICAgICAgICAgICA/IGAke3RoaXMuaXRlbUxhYmVsfSB3YXMgJHt2ZXJifS5gXG4gICAgICAgICAgICAgICAgICA6IGBDaGFuZ2VzIHRvICR7dGhpcy5pdGVtTGFiZWx9IHdlcmUgJHt2ZXJifS5gLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNpZW50Tm90ZVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm90aWZ5RXJyb3I6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKHRydWUpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IGBVbmFibGUgdG8gJHt2ZXJifSAke3RoaXMuaXRlbUxhYmVsfS5gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN1Y2Nlc3MgPSBhd2FpdCB0aGlzLnN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgICAgIHNldERhdGE6IHRydWUsXG4gICAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCh0aGlzLmdldFN1Ym1pdFZlcmIoKSksXG4gICAgICAgICAgb25FcnJvcjogZXJyb3IgPT5cbiAgICAgICAgICAgIHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgICAgY29udGV4dDogeyBlcnJvciB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBub3RpZnlTdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgICB0aXRsZTogYFN1Y2Nlc3NmdWxseSAke2NhcGl0YWxpemUodmVyYil9YCxcbiAgICAgICAgICAgICAgdGV4dDogYCR7dGhpcy5pdGVtTGFiZWx9IHdhcyAke3ZlcmJ9LmBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBub3RpZnlFcnJvcjogZXJyb3IgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIodHJ1ZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgICAgIGBVbmFibGUgdG8gJHt2ZXJifSAke3RoaXMuaXRlbUxhYmVsfSR7ZXJyb3IgPyAnOicgOiAnJ31gLFxuICAgICAgICAgICAgICAgIGVycm9yPy5tZXNzYWdlIHx8IGVycm9yXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgdGhpcy5yZXNldFZhbGlkYXRpb24oKVxuICAgICAgICBpZiAoY2xvc2VGb3JtIHx8IGJ1dHRvbi5jbG9zZUZvcm0pIHtcbiAgICAgICAgICB0aGlzLmNsb3NlKClcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgICAgICAvLyBSZWRpcmVjdCB0byB0aGUgZm9ybSBlZGl0aW5nIHRoZSBuZXdseSBjcmVhdGVkIGl0ZW06XG4gICAgICAgICAgY29uc3QgaWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgdGhpcy5kYXRhKVxuICAgICAgICAgIHRoaXMuJHJvdXRlci5yZXBsYWNlKHsgcGF0aDogcmVzb2x2ZVBhdGgoYCR7dGhpcy5wYXRofS8uLi8ke2lkfWApIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWNjZXNzXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdFRyYW5zaWVudChidXR0b24sIF9yZXNvdXJjZSwgX21ldGhvZCwgZGF0YSwge1xuICAgICAgb25TdWNjZXNzLFxuICAgICAgb25FcnJvcixcbiAgICAgIG5vdGlmeVN1Y2Nlc3MsXG4gICAgICBub3RpZnlFcnJvclxuICAgIH0pIHtcbiAgICAgIC8vIEhhbmRsZSB0aGUgZGVmYXVsdCBcInN1Ym1pdHRpbmdcIiBvZiB0cmFuc2llbnQsIG5lc3RlZCBkYXRhOlxuICAgICAgY29uc3Qgc3VjY2VzcyA9IHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IHRoaXMuYWRkU291cmNlRGF0YShkYXRhKVxuICAgICAgICA6IHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgb25TdWNjZXNzPy4oKVxuICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdzdWNjZXNzJywge1xuICAgICAgICAgIG5vdGlmeTogbm90aWZ5U3VjY2Vzc1xuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSAnQ291bGQgbm90IHN1Ym1pdCB0cmFuc2llbnQgaXRlbSdcbiAgICAgICAgb25FcnJvcj8uKGVycm9yKVxuICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdlcnJvcicsIHtcbiAgICAgICAgICBub3RpZnk6IG5vdGlmeUVycm9yLFxuICAgICAgICAgIGVycm9yXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2Vzc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0Zvcm0gZnJvbSAnLi9EaXRvRm9ybS52dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0Zvcm1OZXN0ZWQnLCB7XG4gIGV4dGVuZHM6IERpdG9Gb3JtXG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tZm9ybS1uZXN0ZWQge1xuICAmLFxuICAuZGl0by1zY3JvbGwge1xuICAgIC8vIE5vIHNjcm9sbGluZyBpbnNpZGUgbmVzdGVkIGZvcm1zLCBhbmQgcHJldmVudCBvcGVuIC5tdWx0aXNlbGVjdCBmcm9tXG4gICAgLy8gYmVpbmcgY3JvcHBlZC5cbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1lcnJvcnMoXG4gIHYtaWY9XCJlcnJvcnNcIlxuKVxuICB1bFxuICAgIGxpKFxuICAgICAgdi1mb3I9XCJlcnJvciBvZiBlcnJvcnNcIlxuICAgIClcbiAgICAgIHwge3sgZXJyb3IgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9FcnJvcnMnLCB7XG4gIHByb3BzOiB7XG4gICAgZXJyb3JzOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBudWxsIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWVycm9ycyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMTtcblxuICB1bCB7XG4gICAgbWFyZ2luLXRvcDogMXB4O1xuICAgIGNvbG9yOiAkY29sb3ItZXJyb3I7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc2NvcGVzXG4gIFJvdXRlckxpbmsoXG4gICAgdi1mb3I9XCIoc2NvcGUsIGtleSkgaW4gc2NvcGVzXCJcbiAgICA6a2V5PVwia2V5XCJcbiAgICB2LXNsb3Q9XCJ7IG5hdmlnYXRlIH1cIlxuICAgIDp0bz1cImdldFNjb3BlTGluayhzY29wZSlcIlxuICAgIGN1c3RvbVxuICApXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNlbGVjdGVkJzogc2NvcGUubmFtZSA9PT0gcXVlcnkuc2NvcGUgfVwiXG4gICAgICA6dGl0bGU9XCJzY29wZS5oaW50IHx8IGdldExhYmVsKHNjb3BlKVwiXG4gICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgKSB7eyBnZXRMYWJlbChzY29wZSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9TY29wZXMnLCB7XG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNjb3BlczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0U2NvcGVMaW5rKHNjb3BlKSB7XG4gICAgICBjb25zdCBxdWVyeSA9IHsgLi4udGhpcy5xdWVyeSwgc2NvcGU6IHNjb3BlLm5hbWUgfVxuICAgICAgaWYgKHF1ZXJ5LnBhZ2UpIHtcbiAgICAgICAgcXVlcnkucGFnZSA9IDBcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5TGluayhxdWVyeSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zY29wZXMge1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gIC5kaXRvLWJ1dHRvbiB7XG4gICAgQGluY2x1ZGUgZWxsaXBzaXM7XG5cbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIC8vIEEgYml0IG1vcmUgdGhhbiB0aGUgd2lkdGggb2YgZWxsaXBzaXMsIHRvIHByZXZlbnQgcmVwbGFjaW5nIHNob3J0IHdvcmRzXG4gICAgLy8gd2l0aCBlbGxpcHNpcy5cbiAgICBtaW4td2lkdGg6IDNlbTtcbiAgICBmbGV4OiAwIDEgYXV0bztcblxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMWVtO1xuICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMWVtO1xuICAgICAgcGFkZGluZy1sZWZ0OiAxZW07XG4gICAgfVxuXG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAxZW07XG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMWVtO1xuICAgICAgcGFkZGluZy1yaWdodDogMWVtO1xuICAgIH1cblxuICAgICYgKyAuZGl0by1idXR0b24ge1xuICAgICAgbWFyZ2luLWxlZnQ6IC0xcHg7XG4gICAgfSAvLyBEb24ndCBjb3ZlciB0aGUgZm9jdXNlZCBib3JkZXIgb2YgYnV0dG9uczpcbiAgICAmOmZvY3VzIHtcbiAgICAgIHotaW5kZXg6IDE7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblBhZ2luYXRpb24oXG4gIHYtbW9kZWw6cGFnZT1cInBhZ2VcIlxuICA6cGFnZVNpemU9XCJsaW1pdFwiXG4gIDp0b3RhbD1cInRvdGFsXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBQYWdpbmF0aW9uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9QYWdpbmF0aW9uJywge1xuICBjb21wb25lbnRzOiB7IFBhZ2luYXRpb24gfSxcblxuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBsaW1pdDogeyB0eXBlOiBOdW1iZXIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdG90YWw6IHsgdHlwZTogTnVtYmVyLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwYWdlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiAoK3RoaXMucXVlcnkucGFnZSB8fCAwKSArIDFcbiAgICAgIH0sXG5cbiAgICAgIHNldChwYWdlKSB7XG4gICAgICAgIGlmICh0aGlzLnBhZ2UgIT09IHBhZ2UpIHtcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaChcbiAgICAgICAgICAgIHRoaXMuZ2V0UXVlcnlMaW5rKHtcbiAgICAgICAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgICAgICAgcGFnZTogcGFnZSAtIDFcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgSXRlbU1peGluIGZyb20gJy4vSXRlbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtJdGVtTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRyYWdnaW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0U29ydGFibGVPcHRpb25zKGZvcmNlRmFsbGJhY2sgPSBmYWxzZSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYW5pbWF0aW9uOiAxNTAsXG4gICAgICAgIGhhbmRsZTogJy5kaXRvLWJ1dHRvbi1kcmFnJyxcbiAgICAgICAgZHJhZ0NsYXNzOiAnZGl0by1zb3J0YWJsZS1hY3RpdmUnLFxuICAgICAgICBjaG9zZW5DbGFzczogJ2RpdG8tc29ydGFibGUtY2hvc2VuJyxcbiAgICAgICAgZ2hvc3RDbGFzczogJ2RpdG8tc29ydGFibGUtZ2hvc3QnLFxuICAgICAgICBmYWxsYmFja0NsYXNzOiAnZGl0by1zb3J0YWJsZS1mYWxsYmFjaycsXG4gICAgICAgIGZvcmNlRmFsbGJhY2ssXG4gICAgICAgIG9uU3RhcnQ6IHRoaXMub25TdGFydERyYWcsXG4gICAgICAgIG9uRW5kOiB0aGlzLm9uRW5kRHJhZ1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblN0YXJ0RHJhZygpIHtcbiAgICAgIHRoaXMuZHJhZ2dpbmcgPSB0cnVlXG4gICAgfSxcblxuICAgIG9uRW5kRHJhZyh7IG9sZEluZGV4LCBuZXdJbmRleCB9KSB7XG4gICAgICB0aGlzLmRyYWdnaW5nID0gZmFsc2VcbiAgICAgIGlmIChvbGRJbmRleCAhPT0gbmV3SW5kZXgpIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVwZGF0ZU9yZGVyKHNvdXJjZVNjaGVtYSwgbGlzdCwgcGFnaW5hdGlvblJhbmdlKSB7XG4gICAgICBjb25zdCB7IG9yZGVyS2V5IH0gPSBzb3VyY2VTY2hlbWFcbiAgICAgIGlmIChvcmRlcktleSkge1xuICAgICAgICAvLyBSZW9yZGVyIHRoZSBjaGFuZ2VkIGVudHJpZXMgYnkgdGhlaXIgb3JkZXIga2V5LCB0YWtpbmcgcGFnaW5hdGlvblxuICAgICAgICAvLyBvZmZzZXRzIGludG8gYWNjb3VudDpcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gcGFnaW5hdGlvblJhbmdlPy5bMF0gfHwgMFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBsaXN0W2ldW29yZGVyS2V5XSA9IGkgKyBvZmZzZXRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxpc3RcbiAgICB9XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10cmVlLWl0ZW0oXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPWB7XG4gICAgJ2RpdG8tZHJhZ2dpbmcnOiBkcmFnZ2luZyxcbiAgICAnZGl0by1hY3RpdmUnOiBhY3RpdmVcbiAgfWBcbiAgOnN0eWxlPVwibGV2ZWwgPiAwICYmIHsgJy0tbGV2ZWwnOiBsZXZlbCB9XCJcbilcbiAgLmRpdG8tdHJlZS1oZWFkZXIoXG4gICAgdi1pZj1cImxhYmVsXCJcbiAgKVxuICAgIC5kaXRvLXRyZWUtYnJhbmNoKFxuICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgQGNsaWNrLnN0b3A9XCJvcGVuZWQgPSAhb3BlbmVkXCJcbiAgICApXG4gICAgICAuZGl0by1jaGV2cm9uKFxuICAgICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3BlbmVkJzogb3BlbmVkIH1cIlxuICAgICAgKVxuICAgICAgLmRpdG8tdHJlZS1sYWJlbChcbiAgICAgICAgdi1odG1sPVwibGFiZWxcIlxuICAgICAgKVxuICAgICAgLmRpdG8tdHJlZS1pbmZvKFxuICAgICAgICB2LWlmPVwiZGV0YWlsc1wiXG4gICAgICApIHt7IGRldGFpbHMgfX1cbiAgICAuZGl0by10cmVlLWxlYWYoXG4gICAgICB2LWVsc2VcbiAgICApXG4gICAgICAuZGl0by10cmVlLWxhYmVsKFxuICAgICAgICB2LWh0bWw9XCJsYWJlbFwiXG4gICAgICApXG4gICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtc21hbGwoXG4gICAgICB2LWlmPVwiaGFzRWRpdEJ1dHRvbnNcIlxuICAgIClcbiAgICAgIC8vLSBGaXJlZm94IGRvZXNuJ3QgbGlrZSA8YnV0dG9uPiBoZXJlLCBzbyB1c2UgPGE+IGluc3RlYWQ6XG4gICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kcmFnKVwiXG4gICAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmVkaXQpXCJcbiAgICAgICAgQGNsaWNrPVwib25FZGl0XCJcbiAgICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgICBAY2xpY2s9XCJvbkRlbGV0ZVwiXG4gICAgICApXG4gIHRhYmxlLmRpdG8tcHJvcGVydGllcyhcbiAgICB2LWlmPVwicHJvcGVydGllc1wiXG4gICAgdi1zaG93PVwib3BlbmVkXCJcbiAgKVxuICAgIHRyKFxuICAgICAgdi1mb3I9XCJwcm9wZXJ0eSBpbiBwcm9wZXJ0aWVzXCJcbiAgICApXG4gICAgICB0ZFxuICAgICAgICBEaXRvTGFiZWwoXG4gICAgICAgICAgdi1pZj1cInByb3BlcnR5LmxhYmVsICE9PSBmYWxzZVwiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICAgIDpsYWJlbD1cImdldExhYmVsKHByb3BlcnR5KVwiXG4gICAgICAgIClcbiAgICAgIERpdG9UYWJsZUNlbGwoXG4gICAgICAgIDpjZWxsPVwicHJvcGVydHlcIlxuICAgICAgICA6c2NoZW1hPVwicHJvcGVydHlcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgKVxuICBEaXRvRHJhZ2dhYmxlKFxuICAgIHYtaWY9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgdi1zaG93PVwib3BlbmVkXCJcbiAgICA6bW9kZWxWYWx1ZT1cInVwZGF0ZU9yZGVyKGNoaWxkcmVuU2NoZW1hLCBjaGlsZHJlbkxpc3QpXCJcbiAgICA6b3B0aW9ucz1cImdldFNvcnRhYmxlT3B0aW9ucyh0cnVlKVwiXG4gICAgOmRyYWdnYWJsZT1cImNoaWxkcmVuRHJhZ2dhYmxlXCJcbiAgICBAdXBkYXRlOm1vZGVsVmFsdWU9XCJ2YWx1ZSA9PiAoY2hpbGRyZW5MaXN0ID0gdmFsdWUpXCJcbiAgKVxuICAgIERpdG9UcmVlSXRlbShcbiAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBjaGlsZHJlbkl0ZW1zXCJcbiAgICAgIDprZXk9XCJnZXRJdGVtVWlkKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEpXCJcbiAgICAgIDpzY2hlbWE9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJnZXRJdGVtRGF0YVBhdGgoY2hpbGRyZW5TY2hlbWEsIGluZGV4KVwiXG4gICAgICA6ZGF0YT1cIml0ZW0uZGF0YVwiXG4gICAgICA6cGF0aD1cIml0ZW0ucGF0aFwiXG4gICAgICA6b3Blbj1cIml0ZW0ub3BlblwiXG4gICAgICA6YWN0aXZlPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgOmRyYWdnYWJsZT1cImNoaWxkcmVuRHJhZ2dhYmxlXCJcbiAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhLCB7IGluZGV4IH0pXCJcbiAgICAgIDpsZXZlbD1cImxldmVsICsgMVwiXG4gICAgKVxuICAgIC8vLSBUT0RPOiBDb252ZXJ0IGRpdG8tdHJlZS1pdGVtIHRvIHVzZSBkaXRvLWxhYmVsIGludGVybmFsbHksIGFuZCB0aGVuXG4gICAgLy8tIHBhc3MgYGFzT2JqZWN0OiB0cnVlYCBpbiB0aGUgYGdldEl0ZW1MYWJlbCgpYCBjYWxsIGFib3ZlLlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgU29ydGFibGVNaXhpbiBmcm9tICcuLi9taXhpbnMvU29ydGFibGVNaXhpbi5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBnZXROYW1lZFNjaGVtYXMsIGhhc0Zvcm1TY2hlbWEgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1RyZWVJdGVtJywge1xuICBtaXhpbnM6IFtTb3J0YWJsZU1peGluXSxcbiAgaW5qZWN0OiBbJ2NvbnRhaW5lciddLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbQXJyYXksIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBwYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBvcGVuOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYWN0aXZlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbGV2ZWw6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBvcGVuZWQ6IHRoaXMub3BlbiB8fCB0aGlzLnNjaGVtYS5vcGVuXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbWV0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5tZXRhXG4gICAgfSxcblxuICAgIHN0b3JlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLnN0b3JlXG4gICAgfSxcblxuICAgIGRpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLmRpc2FibGVkXG4gICAgfSxcblxuICAgIG5lc3RlZE1ldGEoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi50aGlzLm1ldGEsXG4gICAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEucHJvcGVydGllcylcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogU2hvdWxkIHRoaXMgYmUgbmFtZWQgYHNvdXJjZVNjaGVtYWAgaW5zdGVhZD8gVXNlIFNvdXJjZU1peGluP1xuICAgIGNoaWxkcmVuU2NoZW1hKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmNoaWxkcmVuXG4gICAgfSxcblxuICAgIGNoaWxkcmVuTGlzdCgpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmNoaWxkcmVuU2NoZW1hPy5uYW1lXG4gICAgICByZXR1cm4gbmFtZSAmJiB0aGlzLmRhdGFbbmFtZV1cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5EcmFnZ2FibGUoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmNoaWxkcmVuTGlzdD8ubGVuZ3RoID4gMSAmJlxuICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdkcmFnZ2FibGUnLCB7XG4gICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICBzY2hlbWE6IHRoaXMuY2hpbGRyZW5TY2hlbWFcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9LFxuXG4gICAgbnVtQ2hpbGRyZW4oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbkxpc3Q/Lmxlbmd0aCB8fCAwXG4gICAgfSxcblxuICAgIG51bVByb3BlcnRpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9wZXJ0aWVzPy5sZW5ndGggfHwgMFxuICAgIH0sXG5cbiAgICBudW1FbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMubnVtUHJvcGVydGllcyArIHRoaXMubnVtQ2hpbGRyZW5cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5JdGVtcygpIHtcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW5TY2hlbWEsIGNoaWxkcmVuTGlzdCB9ID0gdGhpc1xuICAgICAgaWYgKGNoaWxkcmVuU2NoZW1hICYmIGNoaWxkcmVuTGlzdCkge1xuICAgICAgICBjb25zdCB7IGVkaXRQYXRoIH0gPSB0aGlzLmNvbnRhaW5lclxuICAgICAgICBjb25zdCBjaGlsZHJlbk9wZW4gPSAhdGhpcy5wYXRoICYmIGNoaWxkcmVuU2NoZW1hLm9wZW5cbiAgICAgICAgLy8gQnVpbGQgYSBjaGlsZHJlbiBsaXN0IHdpdGggY2hpbGQgbWV0YSBpbmZvcm1hdGlvbiBmb3IgdGhlIHRlbXBsYXRlLlxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVPcmRlcihcbiAgICAgICAgICBjaGlsZHJlblNjaGVtYSxcbiAgICAgICAgICBjaGlsZHJlbkxpc3QubWFwKChkYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGF0aCA9IChcbiAgICAgICAgICAgICAgY2hpbGRyZW5TY2hlbWEucGF0aCAmJlxuICAgICAgICAgICAgICBgJHt0aGlzLnBhdGh9LyR7Y2hpbGRyZW5TY2hlbWEucGF0aH0vJHtpbmRleH1gXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBvcGVuID0gKFxuICAgICAgICAgICAgICBjaGlsZHJlbk9wZW4gfHxcbiAgICAgICAgICAgICAgLy8gT25seSBjb3VudCBhcyBcImluIGVkaXQgcGF0aFwiIHdoZW4gaXQncyBub3QgdGhlIGZ1bGwgZWRpdCBwYXRoLlxuICAgICAgICAgICAgICBlZGl0UGF0aC5zdGFydHNXaXRoKHBhdGgpICYmIHBhdGgubGVuZ3RoIDwgZWRpdFBhdGgubGVuZ3RoXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb25zdCBhY3RpdmUgPSBlZGl0UGF0aCA9PT0gcGF0aFxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgcGF0aCxcbiAgICAgICAgICAgICAgb3BlbixcbiAgICAgICAgICAgICAgYWN0aXZlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIFtdXG4gICAgfSxcblxuICAgIGRldGFpbHMoKSB7XG4gICAgICBjb25zdCB7IG51bUNoaWxkcmVuIH0gPSB0aGlzXG4gICAgICByZXR1cm4gKFxuICAgICAgICBudW1DaGlsZHJlbiAmJlxuICAgICAgICBgJHtudW1DaGlsZHJlbn0gJHtcbiAgICAgICAgICBudW1DaGlsZHJlbiA9PT0gMSA/ICdpdGVtJyA6ICdpdGVtcydcbiAgICAgICAgfWBcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kcmFnZ2FibGUgfHwgdGhpcy5lZGl0YWJsZSB8fCB0aGlzLmRlbGV0YWJsZVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTdXBwb3J0IGNyZWF0YWJsZSFcbiAgICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgY3JlYXRhYmxlLCBlZGl0YWJsZSBhbmQgZGVsZXRhYmxlIG92ZXJyaWRlcyBvbiB0aGVcbiAgICAvLyBhc3NvY2lhdGVkIGZvcm1zLCBqdXN0IGxpa2UgaW4gYFR5cGVMaXN0YCBhbmQgYFR5cGVPYmplY3RgLCB0aHJvdWdoXG4gICAgLy8gYERpdG9FZGl0QnV0dG9uc2AuIEl0IHdvdWxkIGJlIGJlc3QgdG8gdXNlIGBEaXRvRWRpdEJ1dHRvbnNgIGhlcmUgdG9vLlxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBwcm9wZXJ0eS5uYW1lKVxuICAgIH0sXG5cbiAgICBvbkVkaXQoKSB7XG4gICAgICAvLyBBbGwgd2UgZ290IHRvIGRvIGlzIHB1c2ggdGhlIHJpZ2h0IGVkaXQgcGF0aCB0byB0aGUgcm91dGVyLCB0aGUgcmVzdFxuICAgICAgLy8gaXMgaGFuZGxlZCBieSBvdXIgcm91dGVzLCBhbGxvd2luZyByZWxvYWRzIGFzIHdlbGwuXG4gICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7XG4gICAgICAgIHBhdGg6IGAke3RoaXMuY29udGFpbmVyLnBhdGh9JHt0aGlzLnBhdGh9YCxcbiAgICAgICAgLy8gUHJlc2VydmUgY3VycmVudCBxdWVyeVxuICAgICAgICBxdWVyeTogdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRGVsZXRlKCkge1xuICAgICAgLy8gVE9ETzogSW1wbGVtZW50IVxuICAgIH0sXG5cbiAgICBvbkNoYW5nZSgpIHtcbiAgICAgIHRoaXMuY29udGFpbmVyLm9uQ2hhbmdlKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10cmVlLWl0ZW0ge1xuICAtLWNoZXZyb24taW5kZW50OiAjeyRjaGV2cm9uLWluZGVudH07XG5cbiAgPiAuZGl0by10cmVlLWhlYWRlciB7XG4gICAgPiAuZGl0by10cmVlLWJyYW5jaCxcbiAgICA+IC5kaXRvLXRyZWUtbGVhZiB7XG4gICAgICAvLyBVc2UgYC0tbGV2ZWxgIENTUyB2YXJpYWJsZSB0byBjYWxjdWxhdGVkIHRoZSBhY2N1bXVsYXRlZCBpbmRlbnRcbiAgICAgIC8vIHBhZGRpbmcgZGlyZWN0bHkgaW5zdGVhZCBvZiBoYXZpbmcgaXQgYWNjdW11bGF0ZSBpbiBuZXN0ZWQgQ1NTLlxuICAgICAgLy8gVGhpcyB3YXksIHdlIGNhbiBrZWVwIHRoZSAuZGl0by1hY3RpdmUgYXJlYSBjb3ZlciB0aGUgZnVsbCB3aWR0aDpcbiAgICAgIHBhZGRpbmctbGVmdDogY2FsYyh2YXIoLS1jaGV2cm9uLWluZGVudCkgKiAodmFyKC0tbGV2ZWwsIDEpIC0gMSkpO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXRyZWUtYnJhbmNoIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cblxuICAuZGl0by10cmVlLWhlYWRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIH1cblxuICAuZGl0by10cmVlLWJyYW5jaCxcbiAgLmRpdG8tdHJlZS1sZWFmIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXg6IGF1dG87XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbjogMXB4IDA7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG4gIH1cblxuICAuZGl0by10cmVlLWxhYmVsLFxuICAuZGl0by10cmVlLWluZm8ge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cblxuICAuZGl0by10cmVlLWluZm8ge1xuICAgIHBhZGRpbmctbGVmdDogMC4zNWVtO1xuICAgIGNvbG9yOiByZ2JhKCRjb2xvci1ibGFjaywgMC4yKTtcbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtYXJnaW46IDFweCAwIDFweCAxZW07XG4gIH1cblxuICAuZGl0by10cmVlLWhlYWRlcjpob3ZlciB7XG4gICAgPiAuZGl0by1idXR0b25zIHtcbiAgICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgfSAvLyBIaWRlIGJ1dHRvbnMgZHVyaW5nIGRyYWdnaW5nXG4gIH1cblxuICAmLmRpdG8tZHJhZ2dpbmcge1xuICAgIC5kaXRvLXRyZWUtaGVhZGVyIHtcbiAgICAgID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmLmRpdG8tYWN0aXZlIHtcbiAgICA+IC5kaXRvLXRyZWUtaGVhZGVyIHtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgICBwYWRkaW5nOiAwICRpbnB1dC1wYWRkaW5nLWhvcjtcbiAgICAgIG1hcmdpbjogMCAoLSRpbnB1dC1wYWRkaW5nLWhvcik7XG5cbiAgICAgID4gLmRpdG8tdHJlZS1icmFuY2gge1xuICAgICAgICA+IC5kaXRvLWNoZXZyb246OmJlZm9yZSB7XG4gICAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICA+ICogPiAuZGl0by10cmVlLWxhYmVsIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZGl0by1wcm9wZXJ0aWVzIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tbGVmdDogJGNoZXZyb24taW5kZW50O1xuXG4gICAgPiB0ciB7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7XG4gICAgfVxuXG4gICAgLmRpdG8tbGFiZWwge1xuICAgICAgbWFyZ2luOiAwO1xuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6ICc6ICc7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICB0clxuICAgIHRlbXBsYXRlKFxuICAgICAgdi1mb3I9XCJjb2x1bW4gaW4gY29sdW1uc1wiXG4gICAgKVxuICAgICAgdGgoXG4gICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoY29sdW1uKVwiXG4gICAgICAgIDpjbGFzcz1cImdldENvbHVtbkNsYXNzKGNvbHVtbilcIlxuICAgICAgKVxuICAgICAgICBSb3V0ZXJMaW5rKFxuICAgICAgICAgIHYtaWY9XCJjb2x1bW4uc29ydGFibGVcIlxuICAgICAgICAgIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgICAgICAgOnRvPVwiZ2V0U29ydExpbmsoY29sdW1uKVwiXG4gICAgICAgICAgY3VzdG9tXG4gICAgICAgIClcbiAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIDpjbGFzcz1cImdldFNvcnRDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICAuZGl0by1vcmRlci1hcnJvd3NcbiAgICAgICAgICAgIHNwYW4ge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgICAgICBzcGFuKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICApIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICB0aChcbiAgICAgIHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgKVxuICAgICAgLy8tIEVtcHR5IDxzcGFuPiBpcyBuZWVkZWQgZm9yIHN0eWxpbmcsIHNlZSBfdGFibGUuc2Nzc1xuICAgICAgc3BhblxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UYWJsZUhlYWQnLCB7XG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGNvbHVtbnM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGhhc0VkaXRCdXR0b25zOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvcnQoKSB7XG4gICAgICBjb25zdCBvcmRlciA9ICh0aGlzLnF1ZXJ5Lm9yZGVyIHx8ICcnKS5zcGxpdCgvXFxzKy8pXG4gICAgICByZXR1cm4ge1xuICAgICAgICBuYW1lOiBvcmRlclswXSxcbiAgICAgICAgb3JkZXI6IG9yZGVyWzFdXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb2x1bW5DbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiBgZGl0by1jb2x1bW4tJHtoeXBoZW5hdGUoY29sdW1uLm5hbWUpfWBcbiAgICB9LFxuXG4gICAgZ2V0U29ydENsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIHRoaXMuc29ydC5uYW1lID09PSBjb2x1bW4ubmFtZVxuICAgICAgICA/IGBkaXRvLXNlbGVjdGVkIGRpdG8tb3JkZXItJHt0aGlzLnNvcnQub3JkZXJ9YFxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0U29ydExpbmsoY29sdW1uKSB7XG4gICAgICAvLyBUb2dnbGUgb3JkZXIgaWYgdGhlIHNhbWUgY29sdW1uIGlzIGNsaWNrZWQgYWdhaW4uXG4gICAgICBjb25zdCBvcmRlciA9XG4gICAgICAgIHRoaXMuc29ydC5uYW1lID09PSBjb2x1bW4ubmFtZSAmJiB0aGlzLnNvcnQub3JkZXIgPT09ICdhc2MnXG4gICAgICAgICAgPyAnZGVzYydcbiAgICAgICAgICA6ICdhc2MnXG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICBvcmRlcjogYCR7Y29sdW1uLm5hbWV9ICR7b3JkZXJ9YFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10YWJsZS1oZWFkIHtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgdHIge1xuICAgIHRoIHtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgICAgIC5kaXRvLWJ1dHRvbiB7XG4gICAgICAgIC8vIENvbnZlbnRpb246IE5lc3RlZCBzcGFucyBoYW5kbGUgcGFkZGluZywgc2VlIGJlbG93XG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB0ZXh0LWFsaWduOiBpbmhlcml0O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgfVxuXG4gICAgICBzcGFuIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAvLyBDb252ZW50aW9uOiBOZXN0ZWQgc3BhbnMgaGFuZGxlIHBhZGRpbmdcbiAgICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG5cbiAgICAgICAgJjplbXB0eTo6YWZ0ZXIge1xuICAgICAgICAgIC8vIFByZXZlbnQgZW1wdHkgPHRoPiBmcm9tIGNvbGxhcHNpbmdcbiAgICAgICAgICBjb250ZW50OiAnXFwyMDBiJzsgLy8gemVyby13aWR0aCBzcGFjZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICA+IHNwYW4ge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudGQoXG4gIDpjbGFzcz1cImNlbGwuY2xhc3NcIlxuICA6c3R5bGU9XCJjZWxsLnN0eWxlXCJcbilcbiAgLy8tIFRPRE86IEltcGxlbWVudCBpbmxpbmVkIGNvbXBvbmVudHMgaW4gY2VsbCBtb2RlIVxuICBjb21wb25lbnQoXG4gICAgdi1pZj1cImNlbGwuY29tcG9uZW50XCJcbiAgICA6aXM9XCJjZWxsLmNvbXBvbmVudFwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4gIHNwYW4oXG4gICAgdi1lbHNlXG4gICAgdi1odG1sPVwicmVuZGVyQ2VsbChkYXRhKVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZXNjYXBlSHRtbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1RhYmxlQ2VsbCcsIHtcbiAgcHJvcHM6IHtcbiAgICBjZWxsOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlbmRlckNlbGwoaXRlbSkge1xuICAgICAgY29uc3QgeyBuYW1lLCByZW5kZXIgfSA9IHRoaXMuY2VsbFxuICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW25hbWVdXG4gICAgICByZXR1cm4gcmVuZGVyXG4gICAgICAgID8gcmVuZGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICAgIGRhdGFQYXRoOiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIDogZXNjYXBlSHRtbCh2YWx1ZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IG5leHRUaWNrLCBkZWZpbmVDb21wb25lbnQsIHJlZiwgcmVhY3RpdmUsIGggfSBmcm9tICd2dWUtZGVtaSc7XG5pbXBvcnQgeyB0cnlPbk1vdW50ZWQsIHRyeU9uU2NvcGVEaXNwb3NlLCB1bnJlZkVsZW1lbnQsIGRlZmF1bHREb2N1bWVudCwgdG9WYWx1ZSwgdXNlVk1vZGVsIH0gZnJvbSAnQHZ1ZXVzZS9jb3JlJztcbmltcG9ydCBTb3J0YWJsZSBmcm9tICdzb3J0YWJsZWpzJztcblxudmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0uY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xudmFyIF9fb2JqUmVzdCA9IChzb3VyY2UsIGV4Y2x1ZGUpID0+IHtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICBmb3IgKHZhciBwcm9wIGluIHNvdXJjZSlcbiAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoc291cmNlLCBwcm9wKSAmJiBleGNsdWRlLmluZGV4T2YocHJvcCkgPCAwKVxuICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdO1xuICBpZiAoc291cmNlICE9IG51bGwgJiYgX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoc291cmNlKSkge1xuICAgICAgaWYgKGV4Y2x1ZGUuaW5kZXhPZihwcm9wKSA8IDAgJiYgX19wcm9wSXNFbnVtLmNhbGwoc291cmNlLCBwcm9wKSlcbiAgICAgICAgdGFyZ2V0W3Byb3BdID0gc291cmNlW3Byb3BdO1xuICAgIH1cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5mdW5jdGlvbiB1c2VTb3J0YWJsZShlbCwgbGlzdCwgb3B0aW9ucyA9IHt9KSB7XG4gIGxldCBzb3J0YWJsZTtcbiAgY29uc3QgX2EgPSBvcHRpb25zLCB7IGRvY3VtZW50ID0gZGVmYXVsdERvY3VtZW50IH0gPSBfYSwgcmVzZXRPcHRpb25zID0gX19vYmpSZXN0KF9hLCBbXCJkb2N1bWVudFwiXSk7XG4gIGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgIG9uVXBkYXRlOiAoZSkgPT4ge1xuICAgICAgbW92ZUFycmF5RWxlbWVudChsaXN0LCBlLm9sZEluZGV4LCBlLm5ld0luZGV4KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHN0YXJ0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IHR5cGVvZiBlbCA9PT0gXCJzdHJpbmdcIiA/IGRvY3VtZW50ID09IG51bGwgPyB2b2lkIDAgOiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKSA6IHVucmVmRWxlbWVudChlbCk7XG4gICAgaWYgKCF0YXJnZXQpXG4gICAgICByZXR1cm47XG4gICAgc29ydGFibGUgPSBuZXcgU29ydGFibGUodGFyZ2V0LCBfX3NwcmVhZFZhbHVlcyhfX3NwcmVhZFZhbHVlcyh7fSwgZGVmYXVsdE9wdGlvbnMpLCByZXNldE9wdGlvbnMpKTtcbiAgfTtcbiAgY29uc3Qgc3RvcCA9ICgpID0+IHNvcnRhYmxlID09IG51bGwgPyB2b2lkIDAgOiBzb3J0YWJsZS5kZXN0cm95KCk7XG4gIHRyeU9uTW91bnRlZChzdGFydCk7XG4gIHRyeU9uU2NvcGVEaXNwb3NlKHN0b3ApO1xuICByZXR1cm4geyBzdG9wLCBzdGFydCB9O1xufVxuZnVuY3Rpb24gbW92ZUFycmF5RWxlbWVudChsaXN0LCBmcm9tLCB0bykge1xuICBjb25zdCBhcnJheSA9IHRvVmFsdWUobGlzdCk7XG4gIGlmICh0byA+PSAwICYmIHRvIDwgYXJyYXkubGVuZ3RoKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5LnNwbGljZShmcm9tLCAxKVswXTtcbiAgICBuZXh0VGljaygoKSA9PiBhcnJheS5zcGxpY2UodG8sIDAsIGVsZW1lbnQpKTtcbiAgfVxufVxuXG5jb25zdCBVc2VTb3J0YWJsZSA9IC8qIEBfX1BVUkVfXyAqLyAvKiAjX19QVVJFX18gKi8gZGVmaW5lQ29tcG9uZW50KHtcbiAgbmFtZTogXCJVc2VTb3J0YWJsZVwiLFxuICBtb2RlbDoge1xuICAgIC8vIENvbXBhdGlibGUgd2l0aCB2dWUyXG4gICAgcHJvcDogXCJtb2RlbFZhbHVlXCIsXG4gICAgZXZlbnQ6IFwidXBkYXRlOm1vZGVsVmFsdWVcIlxuICB9LFxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHRhZzoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogXCJkaXZcIlxuICAgIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9XG4gIH0sXG4gIHNldHVwKHByb3BzLCB7IHNsb3RzIH0pIHtcbiAgICBjb25zdCBsaXN0ID0gdXNlVk1vZGVsKHByb3BzLCBcIm1vZGVsVmFsdWVcIik7XG4gICAgY29uc3QgdGFyZ2V0ID0gcmVmKCk7XG4gICAgY29uc3QgZGF0YSA9IHJlYWN0aXZlKHVzZVNvcnRhYmxlKHRhcmdldCwgbGlzdCwgcHJvcHMub3B0aW9ucykpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoc2xvdHMuZGVmYXVsdClcbiAgICAgICAgcmV0dXJuIGgocHJvcHMudGFnLCB7IHJlZjogdGFyZ2V0IH0sIHNsb3RzLmRlZmF1bHQoZGF0YSkpO1xuICAgIH07XG4gIH1cbn0pO1xuXG5leHBvcnQgeyBVc2VTb3J0YWJsZSB9O1xuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblVzZVNvcnRhYmxlKFxuICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgOnRhZz1cInRhZ1wiXG4gIDptb2RlbFZhbHVlPVwibW9kZWxWYWx1ZVwiXG4gIDpvcHRpb25zPVwib3B0aW9uc1wiXG4gIEB1cGRhdGU6bW9kZWxWYWx1ZT1cIiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsICRldmVudClcIlxuKVxuICBzbG90XG5jb21wb25lbnQoXG4gIHYtZWxzZVxuICA6aXM9XCJ0YWdcIlxuKVxuICBzbG90XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudCdcbmltcG9ydCB7IFVzZVNvcnRhYmxlIH0gZnJvbSAnQHZ1ZXVzZS9pbnRlZ3JhdGlvbnMvdXNlU29ydGFibGUvY29tcG9uZW50J1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9EcmFnZ2FibGUnLCB7XG4gIGNvbXBvbmVudHM6IHsgVXNlU29ydGFibGUgfSxcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnXSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHRhZzoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2RpdidcbiAgICB9LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBkcmFnZ2FibGU6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmZ1bmN0aW9uIERpdG9WTm9kZSh7IHZub2RlIH0pIHtcbiAgcmV0dXJuIHZub2RlXG59XG5cbkRpdG9WTm9kZS5wcm9wcyA9IHtcbiAgdm5vZGU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVm5vZGUnLCBEaXRvVk5vZGUpXG48L3NjcmlwdD5cbiIsIi8vIERpdG9UeXBlQ29tcG9uZW50IGlzIHRoZSBhYnN0cmFjdCBiYXNlIGNvbXBvbmVudCBmb3IgYWxsIG90aGVyIHR5cGVcbi8vIGNvbXBvbmVudHMgaW5zaWRlIHRoZSB0eXBlcy8gZm9sZGVyLiBUaGVyZSdzIGFsc28gYSBzZXBhcmF0ZSBjb25jcmV0ZVxuLy8gYERpdG9UeXBlQ29tcG9uZW50LnZ1ZWAgY29tcG9uZW50LCB1c2UgdG8gcmVuZGVyIGB7IHR5cGU6ICdjb21wb25lbnQnIH1gXG5pbXBvcnQgeyBhc0FycmF5LCBjYW1lbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCB7IHJlZ2lzdGVyVHlwZUNvbXBvbmVudCwgZ2V0VHlwZUNvbXBvbmVudCB9IGZyb20gJy4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBleHRlbmRzOiBEaXRvQ29tcG9uZW50LFxuICBtaXhpbnM6IFtUeXBlTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiBmYWxzZSxcbiAgdGV4dEZpZWxkOiBmYWxzZSxcbiAgLy8gU2V0IHJlYXNvbmFibGUgZGVmYXVsdHMgZm9yIGFsbCBvZiB0aGVzZSB0aGF0IGFyZSB1c2VkIGJ5IG1vc3QgdHlwZVxuICAvLyBjb21wb25lbnRzLiBUaGVzZSBvbmx5IG5lZWQgZGVmaW5pbmcgaW4gc3ViLWNsYXNzZXMgd2hlbiB0aGV5IGRpZmZlci5cbiAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICBkZWZhdWx0TmVzdGVkOiB0cnVlLFxuICBkZWZhdWx0VmlzaWJsZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogdHJ1ZSxcbiAgZXhjbHVkZVZhbHVlOiBmYWxzZSxcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBudWxsLFxuICBrZWVwQWxpZ25lZDogdHJ1ZSxcbiAgb21pdFBhZGRpbmc6IGZhbHNlLFxuXG4gIGNvbXBvbmVudDogRGl0b0NvbXBvbmVudC5jb21wb25lbnQsXG5cbiAgZ2V0OiBnZXRUeXBlQ29tcG9uZW50LFxuXG4gIHJlZ2lzdGVyKHR5cGVzLCBkZWZpbml0aW9uID0ge30pIHtcbiAgICB0eXBlcyA9IGFzQXJyYXkodHlwZXMpXG4gICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnQoXG4gICAgICBgRGl0b1R5cGUke2NhbWVsaXplKHR5cGVzWzBdLCB0cnVlKX1gLFxuICAgICAgZGVmaW5pdGlvblxuICAgIClcbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpXG4gICAgfVxuICAgIHJldHVybiBjb21wb25lbnRcbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgOnR5cGU9XCJ0eXBlXCJcbiAgOnRpdGxlPVwidGl0bGVcIlxuICA6Y2xhc3M9XCJidXR0b25DbGFzc1wiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuKVxuICB0ZW1wbGF0ZShcbiAgICB2LWlmPVwiaW5mbyB8fCB3aWR0aCA9PT0gJ2ZpbGwnXCJcbiAgKVxuICAgIC5kaXRvLWJ1dHRvbl9fdGV4dFxuICAgICAgc3BhbiB7eyB0ZXh0IH19XG4gICAgLmRpdG8taW5mbyhcbiAgICAgIHYtaWY9XCIhbGFiZWwgJiYgaW5mb1wiXG4gICAgICA6ZGF0YS10aXBweS1jb250ZW50PVwiaW5mb1wiXG4gICAgICBkYXRhLXRpcHB5LXRoZW1lPVwiaW5mb1wiXG4gICAgKVxuICB0ZW1wbGF0ZShcbiAgICB2LWVsc2VcbiAgKSB7eyB0ZXh0IH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGhhc1Jlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbJ2J1dHRvbicsICdzdWJtaXQnXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICAgIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcbiAgICBkZWZhdWx0V2lkdGg6ICdhdXRvJyxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICB2ZXJiKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52ZXJic1t0aGlzLm5hbWVdXG4gICAgICB9LFxuXG4gICAgICBidXR0b25DbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmVyYiA/IGBkaXRvLWJ1dHRvbi0ke3RoaXMudmVyYn1gIDogbnVsbFxuICAgICAgfSxcblxuICAgICAgdGV4dDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RleHQnLCB7XG4gICAgICAgIHR5cGU6IFN0cmluZ1xuICAgICAgfSksXG5cbiAgICAgIHRpdGxlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0IHx8IGxhYmVsaXplKHRoaXMudmVyYilcbiAgICAgIH0sXG5cbiAgICAgIGluZm86IGdldFNjaGVtYUFjY2Vzc29yKCdpbmZvJywge1xuICAgICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgIH0pLFxuXG4gICAgICBjbG9zZUZvcm06IGdldFNjaGVtYUFjY2Vzc29yKCdjbG9zZUZvcm0nLCB7XG4gICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICAvLyBAb3ZlcnJpZGVcbiAgICAgIGdldEV2ZW50cygpIHtcbiAgICAgICAgY29uc3QgeyBvbkZvY3VzLCBvbkJsdXIsIG9uQ2xpY2sgfSA9IHRoaXNcbiAgICAgICAgcmV0dXJuIHsgb25Gb2N1cywgb25CbHVyLCBvbkNsaWNrIH1cbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIHN1Ym1pdChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc291cmNlQ29tcG9uZW50Py5zdWJtaXQodGhpcywgb3B0aW9ucylcbiAgICAgIH0sXG5cbiAgICAgIGFzeW5jIG9uQ2xpY2soKSB7XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZW1pdEV2ZW50KCdjbGljaycsIHtcbiAgICAgICAgICBwYXJlbnQ6IHRoaXMuc2NoZW1hQ29tcG9uZW50XG4gICAgICAgIH0pXG4gICAgICAgIC8vIEhhdmUgYnV0dG9ucyB0aGF0IGRlZmluZSByZXNvdXJjZXMgY2FsbCBgdGhpcy5zdWJtaXQoKWAgYnkgZGVmYXVsdDpcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHJlcyA9PT0gdW5kZWZpbmVkICYmIC8vIE1lYW5pbmc6IGRvbid0IHByZXZlbnQgZGVmYXVsdC5cbiAgICAgICAgICBoYXNSZXNvdXJjZSh0aGlzLnNjaGVtYSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zdWJtaXQoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1idXR0b24ge1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gICZfX3RleHQge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtaW4td2lkdGg6IG1pbi1jb250ZW50O1xuICAgIGhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpO1xuXG4gICAgc3BhbiB7XG4gICAgICBAaW5jbHVkZSBlbGxpcHNpcztcblxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgaW5zZXQ6IDA7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmlucHV0LmRpdG8tY2hlY2tib3goXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gIHR5cGU9XCJjaGVja2JveFwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjaGVja2JveCcsIHtcbiAgbmF0aXZlRmllbGQ6IHRydWVcbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jaGVja2JveCB7XG4gIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3M7XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzRnVuY3Rpb24sXG4gIGlzUHJvbWlzZSxcbiAgbm9ybWFsaXplRGF0YVBhdGgsXG4gIGdldFZhbHVlQXREYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgcmVhY3RpdmUgfSBmcm9tICd2dWUnXG5pbXBvcnQgTG9hZGluZ01peGluIGZyb20gJy4vTG9hZGluZ01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtMb2FkaW5nTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBhc3luY0RhdGFFbnRyaWVzOiB7fVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlRGF0YVNjaGVtYShzY2hlbWEsIG5hbWUsIHtcbiAgICAgIHJlc29sdmVDb3VudGVyID0gMSxcbiAgICAgIC4uLmxvYWRpbmdPcHRpb25zXG4gICAgfSA9IHt9KSB7XG4gICAgICBpZiAoIWlzT2JqZWN0KHNjaGVtYSkpIHtcbiAgICAgICAgc2NoZW1hID0geyBkYXRhOiBzY2hlbWEgfVxuICAgICAgfVxuICAgICAgbGV0IHsgZGF0YSA9IHVuZGVmaW5lZCwgZGF0YVBhdGggPSBudWxsIH0gPSBzY2hlbWFcbiAgICAgIC8vIFNlZSBpZiB0aGVyZSBpcyBhc3luYyBkYXRhIGxvYWRpbmcgYWxyZWFkeSBpbiBwcm9jZXNzLlxuICAgICAgY29uc3QgYXN5bmNFbnRyeSA9ICh0aGlzLmFzeW5jRGF0YUVudHJpZXNbbmFtZV0gfHw9IHJlYWN0aXZlKHtcbiAgICAgICAgZGVwZW5kZW5jeUZ1bmN0aW9uOiBudWxsLFxuICAgICAgICByZXNvbHZlQ291bnRlcjogMCxcbiAgICAgICAgcmVzb2x2ZWREYXRhOiBudWxsLFxuICAgICAgICByZXNvbHZpbmc6IGZhbHNlXG4gICAgICB9KSlcbiAgICAgIC8vIElmIHRoZSBkYXRhIGNhbGxiYWNrIHByb3ZpZGVkIGEgZGVwZW5kZW5jeSBmdW5jdGlvbiB3aGVuIGl0IHdhcyBjYWxsZWQsXG4gICAgICAvLyBjYWwgaXQgaW4gZXZlcnkgY2FsbCBvZiBgaGFuZGxlRGF0YVNjaGVtYSgpYCB0byBmb3JjZSBWdWUgdG8ga2VlcCB0cmFja1xuICAgICAgLy8gb2YgdGhlIGFzeW5jIGRlcGVuZGVuY2llcy5cbiAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uPy4odGhpcy5jb250ZXh0KVxuXG4gICAgICBpZiAoYXN5bmNFbnRyeS5yZXNvbHZlQ291bnRlciA+IDApIHtcbiAgICAgICAgLy8gSWYgdGhlIGRhdGEgd2FzIHJlc29sdmVkIGFscmVhZHksIHJldHVybiBpdCBhbmQgY2xlYXIgdGhlIHZhbHVlIG9uY2VcbiAgICAgICAgLy8gYHJlc29sdmVDb3VudGVyYCByZWFjaGVzIHplcm8uIENvdW50aW5nIGlzIG5lZWRlZCBiZWNhdXNlIGRlcGVuZGluZ1xuICAgICAgICAvLyBvbiB0aGUgdXNlIG9mIGRhdGEgYW5kIHJlYWN0aXZpdHksIG11bHRpcGxlIGNhbGxzIHRvIHRoZSBjb21wdXRlZFxuICAgICAgICAvLyBnZXR0ZXIgYXJlIHRyaWdnZXJlZCB3aGVuIHRoZSBkYXRhIGlzIGNoYW5naW5nLiBDbGVhcmluZyB0aGUgcmVzb2x2ZWRcbiAgICAgICAgLy8gZGF0YSB3b3JrcyBiZWNhdXNlIFZ1ZSBjYWNoZXMgdGhlIHJlc3VsdCBvZiBjb21wdXRlZCBnZXR0ZXJzIGFuZCBvbmx5XG4gICAgICAgIC8vIHJlZXZhbHVhdGVzIGlmIG9uZSBvZiB0aGUgZGVwZW5kZW5jaWVzIGNoYW5nZWQuIFRoaXMgaXMgdG8gZW5zdXJlXG4gICAgICAgIC8vIHRoYXQgYSBjYWNoZWQgdmFsdWUgaGVyZSBkb2Vzbid0IGJsb2NrIC8gb3ZlcnJpZGUgcmVldmFsdWF0aW9uOlxuICAgICAgICBjb25zdCB7IHJlc29sdmVkRGF0YSB9ID0gYXN5bmNFbnRyeVxuICAgICAgICBpZiAoLS1hc3luY0VudHJ5LnJlc29sdmVDb3VudGVyID09PSAwKSB7XG4gICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlZERhdGEgPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc29sdmVkRGF0YVxuICAgICAgfVxuICAgICAgLy8gQXZvaWQgY2FsbGluZyB0aGUgZGF0YSBmdW5jdGlvbiB0d2ljZTpcbiAgICAgIGlmIChhc3luY0VudHJ5LnJlc29sdmluZykge1xuICAgICAgICBkYXRhID0gbnVsbFxuICAgICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGRhdGEpKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGF0YSh0aGlzLmNvbnRleHQpXG4gICAgICAgICAgLy8gSWYgdGhlIHJlc3VsdCBvZiB0aGUgZGF0YSBmdW5jdGlvbiBpcyBhbm90aGVyIGZ1bmN0aW9uLCB0aGVuIHRoZVxuICAgICAgICAgIC8vIGZpcnN0IGRhdGEgZnVuY3Rpb24gaXMgdGhlcmUgdG8gdHJhY2sgZGVwZW5kZW5jaWVzIGFuZCB0aGUgcmVhbFxuICAgICAgICAgIC8vIGRhdGEgbG9hZGluZyBoYXBwZW5zIGluIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkLiBLZWVwIHRyYWNrXG4gICAgICAgICAgLy8gaXQgaW4gYGRlcGVuZGVuY3lGdW5jdGlvbmAgc28gaXQgY2FuIGJlIGNhbGxlZCBvbiBlYWNoIGNhbGwgb2ZcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYCB0byBrZWVwIHRoZSBkZXBlbmRlbmNpZXMgaW50YWN0LCBhbmQgY2FsbFxuICAgICAgICAgIC8vIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkIG9uY2UgdG8gZ2V0IHRoZSBhY3R1YWwgZGF0YTpcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihyZXN1bHQpKSB7XG4gICAgICAgICAgICBhc3luY0VudHJ5LmRlcGVuZGVuY3lGdW5jdGlvbiA9IGRhdGFcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHQodGhpcy5jb250ZXh0KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhID0gcmVzdWx0XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Byb21pc2UoZGF0YSkpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGF0YSBpcyBhc3luY2hyb25vdXMsIGl0IGNhbid0IGJlIHJldHVybmVkIHN0cmFpZ2h0IGF3YXkuXG4gICAgICAgICAgLy8gQnV0IHdlIGNhbiBjaGVhdCB1c2luZyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFuZCBgcmVzb2x2ZWREYXRhYCxcbiAgICAgICAgICAvLyB3aGljaCBpcyBnb2luZyB0byByZWNlaXZlIHRoZSBsb2FkZWQgZGF0YSBhc3luY2hyb25vdXNseSxcbiAgICAgICAgICAvLyB0cmlnZ2VyaW5nIGEgcmVjb21wdXRlIG9mIHRoZSBjb21wdXRlZCBwcm9wZXJ0eSB0aGF0IGNhbGxzXG4gICAgICAgICAgLy8gYGhhbmRsZURhdGFTY2hlbWEoKWAuXG4gICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZpbmcgPSB0cnVlXG4gICAgICAgICAgdGhpcy5yZXNvbHZlRGF0YShkYXRhLCBsb2FkaW5nT3B0aW9ucykudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2ZUNvdW50ZXIgPSByZXNvbHZlQ291bnRlclxuICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlZERhdGEgPSBkYXRhXG4gICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IGZhbHNlXG4gICAgICAgICAgfSlcbiAgICAgICAgICAvLyBDbGVhciBkYXRhIHVudGlsIHByb21pc2UgaXMgcmVzb2x2ZWQgYW5kIGByZXNvbHZlZERhdGFgIGlzIHNldFxuICAgICAgICAgIGRhdGEgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZGF0YVBhdGgpIHtcbiAgICAgICAgZGF0YSA9IGdldFZhbHVlQXREYXRhUGF0aChcbiAgICAgICAgICB0aGlzLnJvb3REYXRhLFxuICAgICAgICAgIG5vcm1hbGl6ZURhdGFQYXRoKGAke3RoaXMuZGF0YVBhdGh9LyR7ZGF0YVBhdGh9YClcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9LFxuXG4gICAgYXN5bmMgcmVzb2x2ZURhdGEobG9hZCwgbG9hZGluZ09wdGlvbnMgPSB7fSkge1xuICAgICAgLy8gVXNlIGEgdGltZW91dCB0byBhbGxvdyBhbHJlYWR5IHJlc29sdmVkIHByb21pc2VzIHRvIHJldHVybiBkYXRhIHdpdGhvdXRcbiAgICAgIC8vIHNob3dpbmcgYSBsb2FkaW5nIGluZGljYXRvci5cbiAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLnNldExvYWRpbmcodHJ1ZSwgbG9hZGluZ09wdGlvbnMpLCAwKVxuICAgICAgbGV0IGRhdGEgPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gYXdhaXQgKGlzRnVuY3Rpb24obG9hZCkgPyBsb2FkKCkgOiBsb2FkKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvci5tZXNzYWdlIHx8IGVycm9yKVxuICAgICAgfVxuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKVxuICAgICAgdGhpcy5zZXRMb2FkaW5nKGZhbHNlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIHJldHVybiBkYXRhXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRGF0YU1peGluIGZyb20gJy4vRGF0YU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IHNldFRlbXBvcmFyeUlkLCBpc1JlZmVyZW5jZSB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNBcnJheSxcbiAgaXNTdHJpbmcsXG4gIGlzRnVuY3Rpb24sXG4gIG5vcm1hbGl6ZURhdGFQYXRoLFxuICBsYWJlbGl6ZSxcbiAgZGVib3VuY2VBc3luY1xufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEYXRhTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGhhc09wdGlvbnM6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCBjb252ZXJ0VmFsdWUgPSB2YWx1ZSA9PlxuICAgICAgICAgIHRoaXMucmVsYXRlXG4gICAgICAgICAgICA/IHRoaXMuaGFzT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgICA/IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24odmFsdWUpXG4gICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICBjb25zdCB2YWx1ZSA9IGlzQXJyYXkodGhpcy52YWx1ZSlcbiAgICAgICAgICA/IHRoaXMudmFsdWUubWFwKGNvbnZlcnRWYWx1ZSkuZmlsdGVyKHZhbHVlID0+IHZhbHVlICE9PSBudWxsKVxuICAgICAgICAgIDogY29udmVydFZhbHVlKHRoaXMudmFsdWUpXG4gICAgICAgIGlmIChcbiAgICAgICAgICAvLyBXaGVuIHJlbGF0aW5nIGFuZCBhcyBzb29uIGFzIHRoZSBvcHRpb25zIGFyZSBhdmFpbGFibGUuLi5cbiAgICAgICAgICB0aGlzLnJlbGF0ZSAmJlxuICAgICAgICAgIHRoaXMuaGFzT3B0aW9ucyAmJiAoXG4gICAgICAgICAgICAvLyAuLi5pZiB0aGUgdmFsdWUgaXMgZm9yY2VkIHRvIG51bGwgYmVjYXVzZSBhIGRpc2FwcGVhcmVkIG9wdGlvbi4uLlxuICAgICAgICAgICAgdmFsdWUgPT09IG51bGwgJiYgdGhpcy52YWx1ZSAhPT0gbnVsbCB8fFxuICAgICAgICAgICAgLy8gLi4ub3IgaWYgdGhlIHZhbHVlIGlzIGEgcmVmZXJlbmNlLCByZXBsYWNlIGl0IHdpdGggaXRzIG9wdGlvblxuICAgICAgICAgICAgLy8gdmFsdWUsIHNvIHRoYXQgaXQnbGwgaG9sZCBhY3R1YWwgZGF0YSwgbm90IGp1c3QgYSByZWZlcmVuY2UgaWQuXG4gICAgICAgICAgICBpc1JlZmVyZW5jZSh0aGlzLnZhbHVlKVxuICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnQgPSB2YWx1ZSA9PlxuICAgICAgICAgIHRoaXMucmVsYXRlXG4gICAgICAgICAgICA/IHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpXG4gICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIHRoaXMudmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICAgID8gdmFsdWUubWFwKGNvbnZlcnQpXG4gICAgICAgICAgOiBjb252ZXJ0KHZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZE9wdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHRoaXMuc2VsZWN0ZWRWYWx1ZSlcbiAgICB9LFxuXG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEodGhpcy5zY2hlbWEub3B0aW9ucywgJ29wdGlvbnMnLCB7XG4gICAgICAgIHJlc29sdmVDb3VudGVyOiAxXG4gICAgICB9KSA/PyBbXVxuICAgICAgaWYgKCFpc0FycmF5KGRhdGEpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBvcHRpb25zIGRhdGEsIHNob3VsZCBiZSBhcnJheTogJHtkYXRhfWApXG4gICAgICB9XG4gICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICB0aGlzLmhhc09wdGlvbnMgPSBkYXRhLmxlbmd0aCA+IDBcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NPcHRpb25zKGRhdGEpXG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICAvLyBUaGlzIGlzIG92ZXJyaWRkZW4gaW4gYFR5cGVNdWx0aXNlbGVjdGAgdG8gcmV0dXJuIHRoZSBgc2VhcmNoZWRPcHRpb25zYFxuICAgICAgLy8gd2hlbiBhIHNlYXJjaCBmaWx0ZXIgd2FzIGFwcGxpZWQuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIHJlbGF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbGF0ZScsIHtcbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gYHJlbGF0ZUJ5OiAnaWQnYFxuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gV2UgY2Fubm90IHVzZSBzY2hlbWEgYWNjZXNzb3IgY2FsbGJhY2sgbWFnaWMgZm9yIGByZWxhdGVgIGFzIHdlIG5lZWRcbiAgICAgIC8vIHRoaXMgb3V0c2lkZSBvZiB0aGUgY29tcG9uZW50J3MgbGlmZS1zcGFuLCBzZWUgYHByb2Nlc3NEYXRhKClgIGJlbG93LlxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBncm91cEJ5OiBnZXRTY2hlbWFBY2Nlc3NvcignZ3JvdXBCeScsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgb3B0aW9ucy5sYWJlbEtleWAgLyBgb3B0aW9uTGFiZWxLZXlgP1xuICAgIG9wdGlvbkxhYmVsOiBnZXRTY2hlbWFBY2Nlc3Nvcignb3B0aW9ucy5sYWJlbCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQobGFiZWwpIHtcbiAgICAgICAgLy8gSWYgbm8gYGxhYmVsYCB3YXMgcHJvdmlkZWQgYnV0IHRoZSBvcHRpb25zIGFyZSBvYmplY3RzLCBhc3N1bWUgYVxuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIG9mICdsYWJlbCc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgbGFiZWwgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgnbGFiZWwnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBvcHRpb25zLnZhbHVlS2V5YCAvIGBvcHRpb25WYWx1ZUtleWA/XG4gICAgb3B0aW9uVmFsdWU6IGdldFNjaGVtYUFjY2Vzc29yKCdvcHRpb25zLnZhbHVlJywge1xuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldCh2YWx1ZSkge1xuICAgICAgICAvLyBJZiBubyBgbGFiZWxgIHdhcyBwcm92aWRlZCBidXQgdGhlIG9wdGlvbnMgYXJlIG9iamVjdHMsIGFzc3VtZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgb2YgJ3ZhbHVlJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB2YWx1ZSB8fFxuICAgICAgICAgIHRoaXMucmVsYXRlICYmICdpZCcgfHxcbiAgICAgICAgICB0aGlzLmdldE9wdGlvbktleSgndmFsdWUnKSB8fFxuICAgICAgICAgIG51bGxcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogQ29uc2lkZXIgbW92aW5nIHNlYXJjaCB0byBgb3B0aW9ucy5zZWFyY2hgP1xuICAgIHNlYXJjaEZpbHRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3NlYXJjaCcsIHtcbiAgICAgIHR5cGU6IFtPYmplY3QsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQoc2VhcmNoKSB7XG4gICAgICAgIGlmIChzZWFyY2gpIHtcbiAgICAgICAgICBjb25zdCB7IGZpbHRlciwgZGVib3VuY2UgfSA9IGlzRnVuY3Rpb24oc2VhcmNoKVxuICAgICAgICAgICAgPyB7IGZpbHRlcjogc2VhcmNoIH1cbiAgICAgICAgICAgIDogc2VhcmNoXG4gICAgICAgICAgcmV0dXJuIGRlYm91bmNlID8gZGVib3VuY2VBc3luYyhmaWx0ZXIsIGRlYm91bmNlKSA6IGZpbHRlclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBncm91cEJ5TGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cEJ5ID8gJ2xhYmVsJyA6IG51bGxcbiAgICB9LFxuXG4gICAgZ3JvdXBCeU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cEJ5ID8gJ29wdGlvbnMnIDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0T3B0aW9uS2V5KGtleSkge1xuICAgICAgY29uc3QgW29wdGlvbl0gPSB0aGlzLmFjdGl2ZU9wdGlvbnNcbiAgICAgIHJldHVybiBpc09iamVjdChvcHRpb24pICYmIGtleSBpbiBvcHRpb24gPyBrZXkgOiBudWxsXG4gICAgfSxcblxuICAgIHByb2Nlc3NPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5yZWxhdGUpIHtcbiAgICAgICAgICAvLyBJZiBpZHMgYXJlIG1pc3NpbmcgYW5kIHdlIHdhbnQgdG8gcmVsYXRlLCBzZXQgdGVtcG9yYXJ5IGlkcy5cbiAgICAgICAgICAvLyBOT1RFOiBXZSBuZWVkIHRvIG1vZGlmeSB0aGUgYWN0dWFsIGRhdGEsIG1ha2luZyBhIGNvcHkgd29uJ3Qgd29ya1xuICAgICAgICAgIC8vIGFzIGl0IHdvbid0IHByb3BhZ2F0ZS5cbiAgICAgICAgICAvLyBOT1RFOiBUaGlzIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhlIGRhdGEgaXMgZnJvbSB0aGUgZ3JhcGggdGhhdFxuICAgICAgICAgIC8vIHdlJ3JlIGN1cnJlbnRseSBlZGl0aW5nLlxuICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICghKCdpZCcgaW4gb3B0aW9uKSkge1xuICAgICAgICAgICAgICBzZXRUZW1wb3JhcnlJZChvcHRpb24sICdpZCcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyb3VwQnkpIHtcbiAgICAgICAgICBjb25zdCBncm91cGVkID0ge31cbiAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5yZWR1Y2UoXG4gICAgICAgICAgICAocmVzdWx0cywgb3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gb3B0aW9uW3RoaXMuZ3JvdXBCeV1cbiAgICAgICAgICAgICAgbGV0IGVudHJ5ID0gZ3JvdXBlZFtncm91cF1cbiAgICAgICAgICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICAgICAgICAgIGVudHJ5ID0gZ3JvdXBlZFtncm91cF0gPSB7XG4gICAgICAgICAgICAgICAgICBbdGhpcy5ncm91cEJ5TGFiZWxdOiBncm91cCxcbiAgICAgICAgICAgICAgICAgIFt0aGlzLmdyb3VwQnlPcHRpb25zXTogW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGVudHJ5KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVudHJ5Lm9wdGlvbnMucHVzaChvcHRpb24pXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHRzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW11cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfSxcblxuICAgIGhhc09wdGlvbihvcHRpb24pIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKVxuICAgIH0sXG5cbiAgICBnZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgY29uc3QgZmluZE9wdGlvbiA9IChvcHRpb25zLCB2YWx1ZSwgZ3JvdXBCeSkgPT4ge1xuICAgICAgICAvLyBTZWFyY2ggZm9yIHRoZSBvcHRpb24gb2JqZWN0IHdpdGggdGhlIGdpdmVuIHZhbHVlIGFuZCByZXR1cm4gdGhlXG4gICAgICAgIC8vIHdob2xlIG9iamVjdC5cbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgIGlmIChncm91cEJ5KSB7XG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9IGZpbmRPcHRpb24ob3B0aW9uLm9wdGlvbnMsIHZhbHVlLCBudWxsKVxuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25WYWx1ZVxuICAgICAgICA/IGZpbmRPcHRpb24odGhpcy5hY3RpdmVPcHRpb25zLCB2YWx1ZSwgdGhpcy5ncm91cEJ5KVxuICAgICAgICA6IHZhbHVlXG4gICAgfSxcblxuICAgIGdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikge1xuICAgICAgY29uc3QgeyBvcHRpb25WYWx1ZSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzU3RyaW5nKG9wdGlvblZhbHVlKVxuICAgICAgICA/IG9wdGlvbj8uW29wdGlvblZhbHVlXVxuICAgICAgICA6IGlzRnVuY3Rpb24ob3B0aW9uVmFsdWUpXG4gICAgICAgICAgPyBvcHRpb25WYWx1ZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IG9wdGlvblxuICAgIH0sXG5cbiAgICBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIHtcbiAgICAgIGNvbnN0IHsgb3B0aW9uTGFiZWwgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc1N0cmluZyhvcHRpb25MYWJlbClcbiAgICAgICAgPyBvcHRpb24/LltvcHRpb25MYWJlbF1cbiAgICAgICAgOiBpc0Z1bmN0aW9uKG9wdGlvbkxhYmVsKVxuICAgICAgICAgID8gb3B0aW9uTGFiZWwuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBvcHRpb24gfSkpXG4gICAgICAgICAgOiBsYWJlbGl6ZShgJHtvcHRpb259YClcbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaCkge1xuICAgIGlmIChzY2hlbWEucmVsYXRlKSB7XG4gICAgICAvLyBGb3IgaW50ZXJuYWxseSByZWxhdGluZyBkYXRhIChgc2NoZW1hLm9wdGlvbnMuZGF0YVBhdGhgKSwgd2UgbmVlZCB0b1xuICAgICAgLy8gcHJvY2VzcyBib3RoIHRoZSBvcHRpb25zIChmb3IgJyNyZWYnKSBhbmQgdGhlIHZhbHVlICgnI2lkJykuXG4gICAgICAvLyBTZWUgYERhdGFNaXhpbi5oYW5kbGVEYXRhU2NoZW1hKClgOlxuICAgICAgY29uc3QgcGF0aCA9IHNjaGVtYS5vcHRpb25zPy5kYXRhUGF0aFxuICAgICAgY29uc3QgcmVsYXRlZERhdGFQYXRoID0gcGF0aFxuICAgICAgICA/IG5vcm1hbGl6ZURhdGFQYXRoKGAke2RhdGFQYXRofS8ke3BhdGh9YClcbiAgICAgICAgOiBudWxsXG4gICAgICBncmFwaC5hZGRSZWxhdGlvbihkYXRhUGF0aCwgcmVsYXRlZERhdGFQYXRoLCBzY2hlbWEpXG4gICAgICBpZiAocmVsYXRlZERhdGFQYXRoKSB7XG4gICAgICAgIGdyYXBoLnNldFNvdXJjZVJlbGF0ZWQocmVsYXRlZERhdGFQYXRoKVxuICAgICAgfVxuICAgICAgLy8gQ29udmVydCByZWxhdGluZyBvYmplY3RzIHRvIGEgc2hhbGxvdyBjb3B5IHdpdGggb25seSB0aGUgaWQgbGVmdC5cbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gdXNpbmcgYHJlbGF0ZUJ5YDpcbiAgICAgIGNvbnN0IHByb2Nlc3NSZWxhdGUgPSB2YWx1ZSA9PiAodmFsdWUgPyB7IGlkOiB2YWx1ZS5pZCB9IDogdmFsdWUpXG4gICAgICAvLyBTZWxlY3RlZCBvcHRpb25zIGNhbiBiZSBib3RoIG9iamVjdHMgJiBhcnJheXMsIGUuZy4gJ2NoZWNrYm94ZXMnOlxuICAgICAgdmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzUmVsYXRlKVxuICAgICAgICA6IHByb2Nlc3NSZWxhdGUodmFsdWUpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudWwuZGl0by1jaGVja2JveGVzKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbilcbiAgbGkoXG4gICAgdi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiXG4gIClcbiAgICBsYWJlbFxuICAgICAgaW5wdXQuZGl0by1jaGVja2JveChcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICApXG4gICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY2hlY2tib3hlcycsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgZGVmYXVsdFZhbHVlOiBbXSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkT3B0aW9uczoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuc2VsZWN0ZWRWYWx1ZSB8fCBbXSkuZmlsdGVyKHZhbHVlID0+IHZhbHVlKVxuICAgICAgfSxcblxuICAgICAgc2V0KG9wdGlvbikge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBvcHRpb24gfHwgW11cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jaGVja2JveGVzIHtcbiAgbGFiZWwge1xuICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3M7XG4gIH1cblxuICAuZGl0by1jaGVja2JveCB7XG4gICAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNvZGUoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiY29kZVwiXG4gIDpzdHlsZT1cInN0eWxlXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IENvZGVGbGFzayBmcm9tICdjb2RlZmxhc2snXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29kZScsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBrZWVwQWxpZ25lZDogZmFsc2UsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCAzXG4gICAgfSxcblxuICAgIHN0eWxlKCkge1xuICAgICAgcmV0dXJuIGBoZWlnaHQ6IGNhbGMoJHt0aGlzLmxpbmVzfWVtICogdmFyKC0tbGluZS1oZWlnaHQpKWBcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBjb25zdCBmbGFzayA9IG5ldyBDb2RlRmxhc2sodGhpcy4kcmVmcy5jb2RlLCB7XG4gICAgICBsYW5ndWFnZTogdGhpcy5zY2hlbWEubGFuZ3VhZ2UgfHwgJ2phdmFzY3JpcHQnLFxuICAgICAgdGFiU2l6ZTogdGhpcy5zY2hlbWEuaW5kZW50U2l6ZSB8fCAyLFxuICAgICAgbGluZU51bWJlcnM6IGZhbHNlXG4gICAgfSlcblxuICAgIGxldCBjaGFuZ2VkID0gZmFsc2VcbiAgICBsZXQgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgIGxldCBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuXG4gICAgY29uc3Qgb25DaGFuZ2UgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9jdXNlZCAmJiBjaGFuZ2VkKSB7XG4gICAgICAgIGNoYW5nZWQgPSBmYWxzZVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvbkZvY3VzID0gKCkgPT4gdGhpcy5vbkZvY3VzKClcblxuICAgIGNvbnN0IG9uQmx1ciA9ICgpID0+IHtcbiAgICAgIHRoaXMub25CbHVyKClcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9XG5cbiAgICB0aGlzLmRvbU9uKHRoaXMuJHJlZnMuY29kZS5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpLCB7XG4gICAgICBmb2N1czogb25Gb2N1cyxcbiAgICAgIGJsdXI6IG9uQmx1clxuICAgIH0pXG5cbiAgICBjb25zdCBzZXRDb2RlID0gY29kZSA9PiB7XG4gICAgICBpZiAoY29kZSAhPT0gZmxhc2suY29kZSkge1xuICAgICAgICBpZ25vcmVVcGRhdGUgPSB0cnVlXG4gICAgICAgIGZsYXNrLnVwZGF0ZUNvZGUoY29kZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRWYWx1ZSA9IHZhbHVlID0+IHtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdGhpcy52YWx1ZSkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IHRydWVcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICAgIGNoYW5nZWQgPSB0cnVlXG4gICAgICAgIG9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmbGFzay5vblVwZGF0ZSh2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlVXBkYXRlKSB7XG4gICAgICAgIGlnbm9yZVVwZGF0ZSA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRWYWx1ZSh2YWx1ZSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy4kd2F0Y2goJ3ZhbHVlJywgdmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVdhdGNoKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldENvZGUodmFsdWUgfHwgJycpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHNldENvZGUodGhpcy52YWx1ZSB8fCAnJylcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kZWwucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKT8uZm9jdXMoKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNvZGUge1xuICBAZXh0ZW5kICVpbnB1dDtcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIC8vIEZvciBwcm9wZXIgc2l6aW5nIG9mIGNvbnRlbnQgYWxvbmcgd2l0aCA6c3R5bGU9XCJzdHlsZVwiIHNldHRpbmcgYWJvdmUsXG4gIC8vIGZvciBwcm9wZXIgbGluZS1oZWlnaHQgY2FsY3VsYXRpb24uXG4gIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuXG4gIC5jb2RlZmxhc2sge1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgLy8gSWdub3JlIHRoZSBwYXJlbnQgcGFkZGluZyBkZWZpbmVkIGFib3ZlIHdoaWNoIGlzIG9ubHkgbmVlZGVkIHRvIHNldFxuICAgIC8vIHRoZSBkZXNpcmVkIGhlaWdodCB3aXRoIDpzdHlsZT1cInN0eWxlXCIuXG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gIH1cblxuICAuY29kZWZsYXNrX190ZXh0YXJlYSxcbiAgLmNvZGVmbGFza19fcHJlIHtcbiAgICAvLyBVc2Ugc2FtZSBwYWRkaW5nIGFzIC5kaXRvLWNvZGVcbiAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgfVxuXG4gIC5jb2RlZmxhc2tfX3RleHRhcmVhLFxuICAuY29kZWZsYXNrX19jb2RlLFxuICAuY29kZWZsYXNrX19saW5lcyB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xuICB9XG5cbiAgLmNvZGVmbGFza19fbGluZXMge1xuICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblRyaWdnZXIuZGl0by1jb2xvcihcbiAgdi1tb2RlbDpzaG93PVwic2hvd1BvcHVwXCJcbiAgdHJpZ2dlcj1cImNsaWNrXCJcbilcbiAgdGVtcGxhdGUoI3RyaWdnZXIpXG4gICAgLmRpdG8taW5wdXQoOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCIpXG4gICAgICBpbnB1dChcbiAgICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgdi1tb2RlbD1cImhleFZhbHVlXCJcbiAgICAgICAgdHlwZT1cImlucHV0XCJcbiAgICAgICAgc2l6ZT1cIjhcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIClcbiAgICAgIC5kaXRvLWNvbG9yLXByZXZpZXcuZGl0by1pbmhlcml0LWZvY3VzKFxuICAgICAgICB2LWlmPVwidmFsdWVcIlxuICAgICAgKVxuICAgICAgICBkaXYoOnN0eWxlPVwieyBiYWNrZ3JvdW5kOiBgIyR7aGV4VmFsdWUgfHwgJzAwMDAwMDAwJ31gIH1cIilcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICAgIClcbiAgdGVtcGxhdGUoI3BvcHVwKVxuICAgIFNrZXRjaFBpY2tlci5kaXRvLWNvbG9yLXBpY2tlcihcbiAgICAgIHYtbW9kZWw9XCJjb2xvclZhbHVlXCJcbiAgICAgIDpkaXNhYmxlQWxwaGE9XCIhYWxwaGFcIlxuICAgICAgOmRpc2FibGVGaWVsZHM9XCIhaW5wdXRzXCJcbiAgICAgIDpwcmVzZXRDb2xvcnM9XCJwcmVzZXRzXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHRpbnljb2xvciBmcm9tICd0aW55Y29sb3IyJ1xuaW1wb3J0IHsgU2tldGNoIGFzIFNrZXRjaFBpY2tlciB9IGZyb20gJ0Bsazc3L3Z1ZTMtY29sb3InXG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBUcmlnZ2VyIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NvbG9yJywge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIFNrZXRjaFBpY2tlciB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dQb3B1cDogZmFsc2UsXG4gICAgICBjb252ZXJ0ZWRIZXhWYWx1ZTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNvbG9yVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgfHwge31cbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBmb3JtYXQgPSB0aGlzLmNvbG9yRm9ybWF0XG4gICAgICAgIGNvbnN0IGtleSA9IChcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBOT1RFOiB2dWUzLWNvbG9yIGNhbGxzIGl0ICdoZXgnLCB3aGlsZSB0aW55Y29sb3IgY2FsbHMgaXQgJ2hleDYnXG4gICAgICAgICAgICBoZXg6IHZhbHVlPy5hIDwgMSA/ICdoZXg4JyA6ICdoZXgnLFxuICAgICAgICAgICAgcmdiOiAncmdiYSdcbiAgICAgICAgICB9W2Zvcm1hdF0gfHxcbiAgICAgICAgICBmb3JtYXRcbiAgICAgICAgKVxuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlW2tleV1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGlueWNvbG9yKHZhbHVlKS50b1N0cmluZyhmb3JtYXQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGhleFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSBudWxsXG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZm9jdXNlZCkge1xuICAgICAgICAgIGNvbnN0IGNvbG9yID0gdGlueWNvbG9yKHRoaXMudmFsdWUpXG4gICAgICAgICAgaWYgKGNvbG9yLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gY29sb3JcbiAgICAgICAgICAgICAgLnRvU3RyaW5nKGNvbG9yLmdldEFscGhhKCkgPCAxID8gJ2hleDgnIDogJ2hleDYnKVxuICAgICAgICAgICAgICAuc2xpY2UoMSlcbiAgICAgICAgICAgICAgLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuY29udmVydGVkSGV4VmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLmNvbnZlcnRlZEhleFZhbHVlID0gdmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVE9ETzogYGZvcm1hdGAgY2xhc2hlcyB3aXRoIFR5cGVNaXhpbi5mb3JtYXQoKWAsIHdoaWNoIHNoYWxsIGJlIHJlbmFtZWRcbiAgICAvLyBzb29uIHRvIGBmb3JtYXRWYWx1ZSgpYC4gUmVuYW1lIGBjb2xvckZvcm1hdGAgYmFjayB0byBgZm9ybWF0YCBhZnRlci5cbiAgICBjb2xvckZvcm1hdDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Zvcm1hdCcsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdoZXgnXG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYHNob3dBbHBoYWA/XG4gICAgYWxwaGE6IGdldFNjaGVtYUFjY2Vzc29yKCdhbHBoYScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBzaG93SW5wdXRzYD9cbiAgICBpbnB1dHM6IGdldFNjaGVtYUFjY2Vzc29yKCdpbnB1dHMnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pLFxuXG4gICAgcHJlc2V0czogZ2V0U2NoZW1hQWNjZXNzb3IoJ3ByZXNldHMnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGRlZmF1bHQ6IFtcbiAgICAgICAgJyNmZmZmZmYnLFxuICAgICAgICAnI2MzYzNjMycsXG4gICAgICAgICcjN2Y3ZjdmJyxcbiAgICAgICAgJyMwMDAwMDAnLFxuICAgICAgICAnIzg4MDAxNScsXG4gICAgICAgICcjZWQxYzI0JyxcbiAgICAgICAgJyNmZjdmMjcnLFxuICAgICAgICAnI2ZmZjIwMCcsXG5cbiAgICAgICAgJyMyMmIxNGMnLFxuICAgICAgICAnIzAwYTJlOCcsXG4gICAgICAgICcjM2Y0OGNjJyxcbiAgICAgICAgJyNhMzQ5YTQnLFxuICAgICAgICAnI2I5N2E1NycsXG4gICAgICAgICcjZmZhZWM5JyxcbiAgICAgICAgJyNmZmM5MGUnLFxuICAgICAgICAnIzAwMDAwMDAwJ1xuICAgICAgXVxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBmb2N1c2VkKGZvY3VzZWQpIHtcbiAgICAgIGlmICghZm9jdXNlZCAmJiB0aGlzLmNvbnZlcnRlZEhleFZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNvbG9yID0gdGlueWNvbG9yKGAjJHt0aGlzLmNvbnZlcnRlZEhleFZhbHVlfWApXG4gICAgICAgIGlmIChjb2xvcj8uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbG9yLnRvU3RyaW5nKHRoaXMuY29sb3JGb3JtYXQpXG4gICAgICAgICAgLy8gVE9ETzogRW1pdCAnaW5wdXQnIGhlcmUgaW5zdGVhZCwgYW5kICdjaGFuZ2UnIGluIGJsdXIsIGxpa2Ugb3RoZXJzLlxuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuJGNvbG9yLXN3YXRjaC13aWR0aDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5LXNpemU7XG4kY29sb3Itc3dhdGNoLXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAkYm9yZGVyLXdpZHRoO1xuXG4uZGl0by1jb2xvciB7XG4gIC5kaXRvLWlucHV0IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICBpbnB1dCB7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICAgIHBhZGRpbmctcmlnaHQ6ICRjb2xvci1zd2F0Y2gtd2lkdGg7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tYnV0dG9uLWNsZWFyIHtcbiAgICBtYXJnaW4tcmlnaHQ6ICRjb2xvci1zd2F0Y2gtd2lkdGg7XG4gIH1cblxuICAuZGl0by1jb2xvci1waWNrZXIge1xuICAgIG1hcmdpbjogJHBvcHVwLW1hcmdpbjtcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93O1xuICB9XG5cbiAgLmRpdG8tY29sb3ItcHJldmlldyB7XG4gICAgYmFja2dyb3VuZDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5O1xuICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlO1xuXG4gICAgJixcbiAgICBkaXYge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgd2lkdGg6ICRjb2xvci1zd2F0Y2gtd2lkdGg7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkY29sb3Itc3dhdGNoLXJhZGl1cztcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkY29sb3Itc3dhdGNoLXJhZGl1cztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuY29tcG9uZW50KFxuICA6aXM9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgdi1iaW5kPVwiJHByb3BzXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4vLyBUaGlzIGlzIHRoZSBnZW5lcmFsIHB1cnBvc2UgJ2NvbXBvbmVudCcgdHlwZSwgd2hpY2ggY2FuIHJlc29sdmUgdG8gYW55IGN1c3RvbVxuLy8gY29tcG9uZW50IHRocm91Z2ggYHNjaGVtYS5jb21wb25lbnRgLCBzZWUgYHJlc29sdmVTY2hlbWFDb21wb25lbnQoKWAuIFRoaXNcbi8vIGNhbiBiZSB1c2VkIHRvIG5lc3QgYXJiaXRyYXJ5IHZ1ZSBjb21wb25lbnRzIGluIHNjaGVtYTpcbi8vIHtcbi8vICAgdHlwZTogJ2NvbXBvbmVudCcsXG4vLyAgIGNvbXBvbmVudDogaW1wb3J0KCcuL2NvbXBvbmVudCcpXG4vLyB9XG5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IHJlc29sdmVTY2hlbWFDb21wb25lbnQgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29tcG9uZW50Jywge1xuICAvLyBPdmVycmlkZSB0aGUgc3RhbmRhcmQgYGRlZmF1bHRWYWx1ZTogbnVsbGAgdG8gbm90IHNldCBhbnkgZGF0YSBmb3IgY3VzdG9tXG4gIC8vIGNvbXBvbmVudHMsIHVubGVzcyB0aGV5IHByb3ZpZGUgYSBkZWZhdWx0IHZhbHVlLlxuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAga2VlcEFsaWduZWQ6IGZhbHNlLFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IHNjaGVtYSA9PiAhKCdkZWZhdWx0JyBpbiBzY2hlbWEpLFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoYXBpLCBzY2hlbWEpIHtcbiAgICBhd2FpdCByZXNvbHZlU2NoZW1hQ29tcG9uZW50KHNjaGVtYSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vLSBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byB0cmlnZ2VyIGV2YWx1YXRpb24gb2YgYHZhbHVlYCB0aGF0IGRvc2Ugbm90XG4vLy0gaW52b2x2ZSBhY3R1YWxseSByZW5kZXJpbmcgaXQgd2hlbiB0aGUgY29tcG9uZW50IGlzIG5vdCB2aXNpYmxlLlxuaW5wdXQuZGl0by10ZXh0LmRpdG8taW5wdXQoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDpuYW1lPVwibmFtZVwiXG4gIHR5cGU9XCJ0ZXh0XCJcbiAgOnZhbHVlPVwidmFsdWVcIlxuICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIDpyZWFkb25seT1cInRydWVcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RhdGFNaXhpbi5qcydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsnY29tcHV0ZWQnLCAnZGF0YScsICdoaWRkZW4nXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIG1peGluczogW0RhdGFNaXhpbl0sXG5cbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgICBkZWZhdWx0VmlzaWJsZTogZmFsc2UsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgdmFsdWU6IHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIGNvbnN0IHsgc2NoZW1hIH0gPSB0aGlzXG4gICAgICAgICAgaWYgKHNjaGVtYS5kYXRhIHx8IHNjaGVtYS5kYXRhUGF0aCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmhhbmRsZURhdGFTY2hlbWEoc2NoZW1hLCAnc2NoZW1hJywge1xuICAgICAgICAgICAgICAvLyBNb2RpZnlpbmcgYHRoaXMuZGF0YWAgYmVsb3cgdHJpZ2dlcnMgYW5vdGhlciBjYWxsIG9mIHRoZVxuICAgICAgICAgICAgICAvLyBgdmFsdWVgIGdldHRlciwgc28gdXNlIGEgdmFsdWUgb2YgMiBmb3IgYHJlc29sdmVDb3VudGVyYCB0b1xuICAgICAgICAgICAgICAvLyByZXR1cm4gdGhlIHJlc29sdmVkIGRhdGEgdHdpY2UuXG4gICAgICAgICAgICAgIHJlc29sdmVDb3VudGVyOiAyXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICB0aGlzLmRhdGFbdGhpcy5uYW1lXSA9IHZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBUeXBlTWl4aW4uY29tcHV0ZWQudmFsdWUuZ2V0LmNhbGwodGhpcylcbiAgICAgICAgfSxcblxuICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICBUeXBlTWl4aW4uY29tcHV0ZWQudmFsdWUuc2V0LmNhbGwodGhpcywgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWRhdGVcbiAgY29tcG9uZW50KFxuICAgIDppcz1cImdldENvbXBvbmVudCh0eXBlKVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIHYtbW9kZWw9XCJkYXRlVmFsdWVcIlxuICAgIDpsb2NhbGU9XCJsb2NhbGVcIlxuICAgIDpkYXRlRm9ybWF0PVwieyAuLi5hcGkuZm9ybWF0cy5kYXRlLCAuLi5kYXRlRm9ybWF0IH1cIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IERhdGVQaWNrZXIsIFRpbWVQaWNrZXIsIERhdGVUaW1lUGlja2VyIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgeyBpc0RhdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgWydkYXRlJywgJ2RhdGV0aW1lJywgJ3RpbWUnXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIGNvbXBvbmVudHM6IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSxcbiAgICAvLyBUT0RPOiBUaGlzIGlzIG9ubHkgaGVyZSBzbyB3ZSBnZXQgcGxhY2Vob2xkZXIgYWRkZWQuIENvbWUgdXAgd2l0aCBhXG4gICAgLy8gYmV0dGVyIHdheSB0byBzdXBwb3J0IGF0dHJpYnV0ZXMgcGVyIGNvbXBvbmVudCAoYSBsaXN0IG9mIGFjdHVhbGx5XG4gICAgLy8gc3VwcG9ydGVkIGF0dHJpYnV0ZXMpXG4gICAgbmF0aXZlRmllbGQ6IHRydWUsXG4gICAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGRhdGVWYWx1ZToge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gdGhpc1xuICAgICAgICAgIHJldHVybiB2YWx1ZSA/IG5ldyBEYXRlKHZhbHVlKSA6IHZhbHVlXG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGRhdGVGb3JtYXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdkYXRlRm9ybWF0Jywge1xuICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGdldENvbXBvbmVudCh0eXBlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0ZTogJ2RhdGUtcGlja2VyJyxcbiAgICAgICAgICB0aW1lOiAndGltZS1waWNrZXInLFxuICAgICAgICAgIGRhdGV0aW1lOiAnZGF0ZS10aW1lLXBpY2tlcidcbiAgICAgICAgfVt0eXBlXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzRGF0ZSh2YWx1ZSkgPyB2YWx1ZS50b0lTT1N0cmluZygpIDogdmFsdWVcbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgaXNBcnJheSwgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRRdWVyeShxdWVyeSkge1xuICBjb25zdCBlbnRyaWVzID0gcXVlcnlcbiAgICA/IGlzQXJyYXkocXVlcnkpXG4gICAgICA/IHF1ZXJ5XG4gICAgICA6IE9iamVjdC5lbnRyaWVzKHF1ZXJ5KVxuICAgIDogW11cbiAgcmV0dXJuIChcbiAgICBuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgICAgLy8gRXhwYW5kIGFycmF5IHZhbHVlcyBpbnRvIG11bHRpcGxlIGVudHJpZXMgdW5kZXIgdGhlIHNhbWUga2V5LCBzb1xuICAgICAgLy8gYGZvcm1hdFF1ZXJ5KHsgZm9vOiBbMSwgMl0sIGJhcjogMyB9KWAgPT4gJ2Zvbz0xJmZvbz0yJmJhcj0zJy5cbiAgICAgIGVudHJpZXMucmVkdWNlKFxuICAgICAgICAoZW50cmllcywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgZm9yIChjb25zdCB2YWwgb2YgYXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGVudHJpZXMucHVzaChba2V5LCB2YWxdKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZW50cmllc1xuICAgICAgICB9LFxuICAgICAgICBbXVxuICAgICAgKVxuICAgIClcbiAgICAgIC50b1N0cmluZygpXG4gICAgICAvLyBkZWNvZGUgYWxsIHRoZXNlIGVuY29kZWQgY2hhcmFjdGVycyB0byBoYXZlIHRoZSBzYW1lIGJlaGF2aW9yIGFzXG4gICAgICAvLyB2dWUtcm91dGVyJ3Mgb3duIHF1ZXJ5IGVuY29kaW5nLlxuICAgICAgLnJlcGxhY2VBbGwoLyUoPzoyMXwyNHwyOHwyOXwyQ3wyRnwzQXwzQnwzRHwzRnw0MCkvZywgZGVjb2RlVVJJQ29tcG9uZW50KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlUm91dGUoeyBwYXRoLCBxdWVyeSwgaGFzaCB9KSB7XG4gIC8vIFByZXNlcnZlIGBoaXN0b3J5LnN0YXRlYCwgc2VlOlxuICAvLyBodHRwczovL3JvdXRlci52dWVqcy5vcmcvZ3VpZGUvbWlncmF0aW9uLyN1c2FnZS1vZi1oaXN0b3J5LXN0YXRlXG4gIGhpc3RvcnkucmVwbGFjZVN0YXRlKFxuICAgIGhpc3Rvcnkuc3RhdGUsXG4gICAgbnVsbCxcbiAgICBgJHtcbiAgICAgIGxvY2F0aW9uLm9yaWdpblxuICAgIH0ke1xuICAgICAgcGF0aCA/PyBsb2NhdGlvbi5wYXRobmFtZVxuICAgIH0/JHtcbiAgICAgIHF1ZXJ5ID8gZm9ybWF0UXVlcnkocXVlcnkpIDogbG9jYXRpb24uc2VhcmNoLnNsaWNlKDEpXG4gICAgfSR7XG4gICAgICBoYXNoID8/IGxvY2F0aW9uLmhhc2hcbiAgICB9YFxuICApXG59XG4iLCJpbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJlc291cmNlTWl4aW4gZnJvbSAnLi9SZXNvdXJjZU1peGluLmpzJ1xuaW1wb3J0IFNjaGVtYVBhcmVudE1peGluIGZyb20gJy4uL21peGlucy9TY2hlbWFQYXJlbnRNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yLCBnZXRTdG9yZUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgcmVwbGFjZVJvdXRlIH0gZnJvbSAnLi4vdXRpbHMvcm91dGUuanMnXG5pbXBvcnQge1xuICBwcm9jZXNzUm91dGVTY2hlbWEsXG4gIHByb2Nlc3NGb3JtcyxcbiAgZ2V0TmFtZWRTY2hlbWFzLFxuICBnZXRCdXR0b25TY2hlbWFzLFxuICBoYXNGb3JtU2NoZW1hLFxuICBnZXRGb3JtU2NoZW1hcyxcbiAgZ2V0Vmlld1NjaGVtYSxcbiAgaXNDb21wYWN0LFxuICBpc0lubGluZWQsXG4gIGlzT2JqZWN0U291cmNlLFxuICBpc0xpc3RTb3VyY2Vcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzU3RyaW5nLFxuICBpc0FycmF5LFxuICBpc051bWJlcixcbiAgZXF1YWxzLFxuICBwYXJzZURhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtSZXNvdXJjZU1peGluLCBTY2hlbWFQYXJlbnRNaXhpbl0sXG5cbiAgZGVmYXVsdFZhbHVlKHNjaGVtYSkge1xuICAgIHJldHVybiBpc0xpc3RTb3VyY2Uoc2NoZW1hKSA/IFtdIDogbnVsbFxuICB9LFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd3JhcHBlZFByaW1pdGl2ZXM6IG51bGwsXG4gICAgICB1bndyYXBwaW5nUHJpbWl0aXZlczogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBpc09iamVjdFNvdXJjZSgpIHtcbiAgICAgIHJldHVybiBpc09iamVjdFNvdXJjZSh0aGlzLnR5cGUpXG4gICAgfSxcblxuICAgIGlzTGlzdFNvdXJjZSgpIHtcbiAgICAgIHJldHVybiBpc0xpc3RTb3VyY2UodGhpcy50eXBlKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5oYXNEYXRhKClcbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52YWx1ZVxuICAgIH0sXG5cbiAgICBpc1JlYWR5KCkge1xuICAgICAgLy8gTGlzdHMgdGhhdCBoYXZlIG5vIGRhdGEgYW5kIG5vIGFzc29jaWF0ZWQgcmVzb3VyY2Ugc2hvdWxkIHN0aWxsIHJlbmRlcixcbiAgICAgIC8vIGFzIHRoZXkgbWF5IGJlIGdldHRpbmcgdGhlaXIgZGF0YSBlbHNld2hlcmUsIGUuZy4gYGNvbXB1dGUoKWAuXG4gICAgICByZXR1cm4gdGhpcy5oYXNEYXRhIHx8ICF0aGlzLnByb3ZpZGVzRGF0YVxuICAgIH0sXG5cbiAgICBpc0luVmlldygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmlld0NvbXBvbmVudFxuICAgIH0sXG5cbiAgICB3cmFwUHJpbWl0aXZlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS53cmFwUHJpbWl0aXZlc1xuICAgIH0sXG5cbiAgICBsaXN0RGF0YToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMudmFsdWVcbiAgICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgICAvLyBDb252ZXJ0IHRvIGxpc3QgYXJyYXkuXG4gICAgICAgICAgZGF0YSA9IGRhdGEgIT0gbnVsbCA/IFtkYXRhXSA6IFtdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgZGF0YSBnZXRzIGluaGVyaXRlZCBmcm9tIHBhcmVudCwgdW53cmFwcGluZyBpcyBub3QgaGFwcGVuaW5nXG4gICAgICAgICAgLy8gYXQgdGhlIHJvb3QgaW4gYHNldERhdGEoKWAsIGJ1dCBoZXJlIGluc3RlYWQuXG4gICAgICAgICAgZGF0YSA9IHRoaXMudW53cmFwTGlzdERhdGEoZGF0YSkgfHwgZGF0YVxuICAgICAgICB9XG4gICAgICAgIGRhdGEgfHw9IFtdXG4gICAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMgfSA9IHRoaXNcbiAgICAgICAgaWYgKHdyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgICAgaWYgKHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMpIHtcbiAgICAgICAgICAgIC8vIFdlJ3JlIGRvbmUgdW53cmFwcGluZyBvbmNlIGBsaXN0RGF0YWAgaXMgcmVldmFsdWF0ZWQsIHNvIHNldFxuICAgICAgICAgICAgLy8gdGhpcyB0byBgZmFsc2VgIGFnYWluLiBTZWUgYHdyYXBwZWRQcmltaXRpdmVzYCB3YXRjaGVyIGFib3ZlLlxuICAgICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzID0gZmFsc2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ29udmVydCBkYXRhIHRvIGEgbGlzdCBvZiB3cmFwcGVkIHByaW1pdGl2ZXMsIGFuZCByZXR1cm4gaXQuXG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRoaXMud3JhcHBlZFByaW1pdGl2ZXMgPSBkYXRhLm1hcCh2YWx1ZSA9PiAoe1xuICAgICAgICAgICAgICBbd3JhcFByaW1pdGl2ZXNdOiB2YWx1ZVxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLndyYXBwZWRQcmltaXRpdmVzXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLndyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgICAgdGhpcy53cmFwcGVkUHJpbWl0aXZlcyA9IGRhdGFcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyBkYXRhICYmIGRhdGEubGVuZ3RoID4gMFxuICAgICAgICAgICAgICA/IGRhdGFbMF1cbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICA6IGRhdGFcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvYmplY3REYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIC8vIEFsd2F5cyBnbyB0aHJvdWdoIGBsaXN0RGF0YWAgaW50ZXJuYWxseSwgd2hpY2ggZG9lcyBhbGwgdGhlXG4gICAgICAgIC8vIHByb2Nlc3Npbmcgb2YgYHdyYXBQcmltaXRpdmVzYCwgZXRjLlxuICAgICAgICByZXR1cm4gdGhpcy5saXN0RGF0YVswXSB8fCBudWxsXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICB0aGlzLmxpc3REYXRhID0gZGF0YSA/IFtkYXRhXSA6IFtdXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNvdXJjZVNjaGVtYSgpIHtcbiAgICAgIC8vIFRoZSBzb3VyY2VTY2hlbWEgb2YgYSBsaXN0IGlzIHRoZSBsaXN0J3Mgc2NoZW1hIGl0c2VsZi5cbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgIH0sXG5cbiAgICBwYXRoKCkge1xuICAgICAgLy8gVGhpcyBpcyB1c2VkIGluIFR5cGVMaXN0IGZvciBEaXRvRm9ybUNob29zZXIuXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgodGhpcy5zY2hlbWEucGF0aClcbiAgICB9LFxuXG4gICAgZGVmYXVsdFF1ZXJ5KCkge1xuICAgICAgY29uc3QgeyBkZWZhdWx0T3JkZXI6IG9yZGVyIH0gPSB0aGlzXG4gICAgICByZXR1cm4gb3JkZXIgPyB7IG9yZGVyIH0gOiB7fVxuICAgIH0sXG5cbiAgICBxdWVyeTogZ2V0U3RvcmVBY2Nlc3NvcigncXVlcnknLCB7XG4gICAgICBnZXQocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmRlZmF1bHRRdWVyeSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBzZXQocXVlcnkpIHtcbiAgICAgICAgLy8gQWx3YXlzIGtlZXAgdGhlIGRpc3BsYXllZCBxdWVyeSBwYXJhbWV0ZXJzIGluIHN5bmMgd2l0aCB0aGUgc3RvcmVkXG4gICAgICAgIC8vIG9uZXMuIFVzZSBzY29wZSBhbmQgcGFnZSBmcm9tIHRoZSBsaXN0IHNjaGVtYSBhcyBkZWZhdWx0cywgYnV0IGFsbG93XG4gICAgICAgIC8vIHRoZSByb3V0ZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIG92ZXJyaWRlIHRoZW0uXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBzY29wZSA9IHRoaXMuZGVmYXVsdFNjb3BlPy5uYW1lLFxuICAgICAgICAgIHBhZ2UgPSB0aGlzLnNjaGVtYS5wYWdlXG4gICAgICAgIH0gPSB0aGlzLnF1ZXJ5XG4gICAgICAgIC8vIFByZXNlcnZlIC8gbWVyZ2UgY3VycmVudGx5IHN0b3JlZCB2YWx1ZXMuXG4gICAgICAgIHF1ZXJ5ID0ge1xuICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgLi4uKHNjb3BlICE9IG51bGwgJiYgeyBzY29wZSB9KSxcbiAgICAgICAgICAuLi4ocGFnZSAhPSBudWxsICYmIHsgcGFnZSB9KSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICAgIGlmICghZXF1YWxzKHF1ZXJ5LCB0aGlzLiRyb3V0ZS5xdWVyeSkpIHtcbiAgICAgICAgICAvLyBDaGFuZ2UgdGhlIHJvdXRlIHF1ZXJ5IHBhcmFtZXRlcnMsIGJ1dCBkb24ndCB0cmlnZ2VyIGEgcm91dGVcbiAgICAgICAgICAvLyBjaGFuZ2UsIGFzIHRoYXQgd291bGQgY2F1c2UgdGhlIGxpc3QgdG8gcmVsb2FkLlxuICAgICAgICAgIHJlcGxhY2VSb3V0ZSh7IHF1ZXJ5IH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHF1ZXJ5IC8vIExldCBnZXRTdG9yZUFjY2Vzc29yKCkgZG8gdGhlIGFjdHVhbCBzZXR0aW5nXG4gICAgICB9XG4gICAgfSksXG5cbiAgICB0b3RhbDogZ2V0U3RvcmVBY2Nlc3NvcigndG90YWwnKSxcblxuICAgIGNvbHVtbnMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLmNvbHVtbnMpXG4gICAgfSxcblxuICAgIHNjb3BlcygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEuc2NvcGVzKVxuICAgIH0sXG5cbiAgICBkZWZhdWx0U2NvcGUoKSB7XG4gICAgICBsZXQgZmlyc3QgPSBudWxsXG4gICAgICBpZiAodGhpcy5zY29wZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBzY29wZSBvZiBPYmplY3QudmFsdWVzKHRoaXMuc2NvcGVzKSkge1xuICAgICAgICAgIGlmIChzY29wZS5kZWZhdWx0U2NvcGUpIHtcbiAgICAgICAgICAgIHJldHVybiBzY29wZVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgICBmaXJzdCA9IHNjb3BlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmlyc3RcbiAgICB9LFxuXG4gICAgZGVmYXVsdE9yZGVyKCkge1xuICAgICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBPYmplY3QudmFsdWVzKHRoaXMuY29sdW1ucykpIHtcbiAgICAgICAgICBjb25zdCB7IGRlZmF1bHRTb3J0IH0gPSBjb2x1bW5cbiAgICAgICAgICBpZiAoZGVmYXVsdFNvcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGlzU3RyaW5nKGRlZmF1bHRTb3J0KSA/IGRlZmF1bHRTb3J0IDogJ2FzYydcbiAgICAgICAgICAgIHJldHVybiBgJHtjb2x1bW4ubmFtZX0gJHtkaXJlY3Rpb259YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgbmVzdGVkTWV0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMubWV0YSxcbiAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb3JtcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKGdldEZvcm1TY2hlbWFzKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpKVxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBsaW5rZWQgdmlldyBzY2hlbWEgaWYgdGhpcyBzb3VyY2UgZWRpdHMgaXQgaXRzIGl0ZW1zIHRocm91Z2hcbiAgICAvLyBhIGxpbmtlZCB2aWV3LlxuICAgIHZpZXcoKSB7XG4gICAgICByZXR1cm4gZ2V0Vmlld1NjaGVtYSh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBsaW5rc1RvVmlldygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmlld1xuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEuYnV0dG9ucylcbiAgICB9LFxuXG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybXMuZXZlcnkoaXNDb21wYWN0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BhZ2luYXRlJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICByZW5kZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdyZW5kZXInLCB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgICAgID8gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyAhdGhpcy52YWx1ZVxuICAgICAgICAgICAgOiB0cnVlXG4gICAgICAgICAgOiBmYWxzZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgIXRoaXMuaXNJbmxpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlICYmIHRoaXMubGlzdERhdGEubGVuZ3RoID4gMSAmJiBkcmFnZ2FibGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbCwgLy8gc28gdGhhdCBgPz9gIGJlbG93IGNhbiBkbyBpdHMgdGhpbmc6XG4gICAgICBnZXQoY29sbGFwc2libGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbmxpbmVkICYmICEhKGNvbGxhcHNpYmxlID8/IHRoaXMuY29sbGFwc2VkICE9PSBudWxsKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29sbGFwc2VkOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2VkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodGhpcy5wcm92aWRlc0RhdGEgJiYgZnJvbS5wYXRoID09PSB0by5wYXRoICYmIGZyb20uaGFzaCA9PT0gdG8uaGFzaCkge1xuICAgICAgICAvLyBQYXRocyBhbmQgaGFzaGVzIHJlbWFpbiB0aGUgc2FtZSwgc28gb25seSBxdWVyaWVzIGhhdmUgY2hhbmdlZC5cbiAgICAgICAgLy8gVXBkYXRlIGZpbHRlciBhbmQgcmVsb2FkIGRhdGEgd2l0aG91dCBjbGVhcmluZy5cbiAgICAgICAgdGhpcy5xdWVyeSA9IHRvLnF1ZXJ5XG4gICAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHdyYXBwZWRQcmltaXRpdmVzOiB7XG4gICAgICBkZWVwOiB0cnVlLFxuICAgICAgaGFuZGxlcih0bywgZnJvbSkge1xuICAgICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzIH0gPSB0aGlzXG4gICAgICAgIC8vIFNraXAgdGhlIGluaXRpYWwgc2V0dGluZyBvZiB3cmFwcGVkUHJpbWl0aXZlcyBhcnJheVxuICAgICAgICBpZiAod3JhcFByaW1pdGl2ZXMgJiYgZnJvbSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdoZW5ldmVyIHRoZSB3cmFwcGVkUHJpbWl0aXZlcyBjaGFuZ2UsIG1hcCB0aGVpciB2YWx1ZXMgYmFjayB0b1xuICAgICAgICAgIC8vIHRoZSBhcnJheSBvZiBwcmltaXRpdmVzLCBpbiBhIHByaW1pdGl2ZSB3YXkgOilcbiAgICAgICAgICAvLyBCdXQgc2V0IGB1bndyYXBwaW5nUHJpbWl0aXZlcyA9IHRydWVgLCBzbyB0aGUgYGxpc3REYXRhYCBjb21wdXRlZFxuICAgICAgICAgIC8vIHByb3BlcnR5IGtub3dzIGFib3V0IGl0LCB3aGljaCBzZXRzIGl0IHRvIGBmYWxzZWAgYWdhaW4uXG4gICAgICAgICAgdGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcyA9IHRydWVcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdG8ubWFwKG9iamVjdCA9PiBvYmplY3Rbd3JhcFByaW1pdGl2ZXNdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIHRoaXMuZW5zdXJlRGF0YSgpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy50b3RhbCA9IDBcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gV2hlbiBuZXcgZGF0YSBpcyBsb2FkZWQsIHdlIGNhbiBzdG9yZSBpdCByaWdodCBiYWNrIGluIHRoZSBkYXRhIG9mIHRoZVxuICAgICAgLy8gdmlldyBvciBmb3JtIHRoYXQgY3JlYXRlZCB0aGlzIGxpc3QgY29tcG9uZW50LlxuICAgICAgLy8gU3VwcG9ydCB0d28gZm9ybWF0cyBmb3IgbGlzdCBkYXRhOlxuICAgICAgLy8gLSBBcnJheTogYFsuLi5dYFxuICAgICAgLy8gLSBPYmplY3Q6IGB7IHJlc3VsdHM6IFsuLi5dLCB0b3RhbCB9YCwgc2VlIGB1bndyYXBMaXN0RGF0YSgpYFxuICAgICAgaWYgKFxuICAgICAgICAhZGF0YSB8fFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJiBpc0FycmF5KGRhdGEpIHx8XG4gICAgICAgIHRoaXMuaXNPYmplY3RTb3VyY2UgJiYgaXNPYmplY3QoZGF0YSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLnZhbHVlID0gZGF0YVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnVud3JhcExpc3REYXRhKGRhdGEpKSB7XG4gICAgICAgIC8vIFRoZSBmb3JtYXQgZGlkbid0IG1hdGNoLCBzZWUgaWYgd2UgcmVjZWl2ZWQgYSBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyBvYmplY3QsIGluIHdoaWNoIGNhc2UgYHRoaXMudmFsdWVgIHdhcyBhbHJlYWR5IHNldCBieVxuICAgICAgICAvLyBgdW53cmFwTGlzdERhdGEoKWAgYW5kIHdlJ3JlIGRvbmUgbm93LlxuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChkYXRhKSAmJiB0aGlzLmlzSW5WaWV3KSB7XG4gICAgICAgIC8vIFRoZSBjb250cm9sbGVyIGlzIHNlbmRpbmcgZGF0YSBmb3IgYSBmdWxsIG11bHRpLWNvbXBvbmVudCB2aWV3LFxuICAgICAgICAvLyBpbmNsdWRpbmcgdGhlIG5lc3RlZCBsaXN0IGRhdGEuXG4gICAgICAgIHRoaXMudmlld0NvbXBvbmVudC5zZXREYXRhKGRhdGEpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVud3JhcExpc3REYXRhKGRhdGEpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc0xpc3RTb3VyY2UgJiZcbiAgICAgICAgaXNPYmplY3QoZGF0YSkgJiZcbiAgICAgICAgaXNOdW1iZXIoZGF0YS50b3RhbCkgJiZcbiAgICAgICAgaXNBcnJheShkYXRhLnJlc3VsdHMpXG4gICAgICApIHtcbiAgICAgICAgLy8gSWYgQGRpdG9qcy9zZXJ2ZXIgc2VuZHMgZGF0YSBpbiB0aGUgZm9ybSBvZiBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyByZXBsYWNlIHRoZSB2YWx1ZSB3aXRoIHJlc3VsdCwgYnV0IHJlbWVtYmVyIHRoZSB0b3RhbCBpbiB0aGUgc3RvcmUuXG4gICAgICAgIHRoaXMudG90YWwgPSBkYXRhLnRvdGFsXG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhLnJlc3VsdHNcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlSXRlbShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmNyZWF0ZURhdGEoc2NoZW1hLCB0eXBlKVxuICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5vYmplY3REYXRhID0gaXRlbVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5saXN0RGF0YS5wdXNoKGl0ZW0pXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB0aGlzLm9wZW5TY2hlbWFDb21wb25lbnQoLTEpKVxuICAgICAgfVxuICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICByZXR1cm4gaXRlbVxuICAgIH0sXG5cbiAgICByZW1vdmVJdGVtKGl0ZW0pIHtcbiAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgIHRoaXMub2JqZWN0RGF0YSA9IG51bGxcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7IGxpc3REYXRhIH0gPSB0aGlzXG4gICAgICAgIGNvbnN0IGluZGV4ID0gbGlzdERhdGEgJiYgbGlzdERhdGEuaW5kZXhPZihpdGVtKVxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGxpc3REYXRhLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWxldGVJdGVtKGl0ZW0sIGluZGV4KSB7XG4gICAgICBjb25zdCBsYWJlbCA9IChcbiAgICAgICAgaXRlbSAmJlxuICAgICAgICB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNjaGVtYSwgaXRlbSwge1xuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIGV4dGVuZGVkOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICApXG5cbiAgICAgIGNvbnN0IG5vdGlmeSA9ICgpID0+XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiB0aGlzLmlzVHJhbnNpZW50ID8gJ2luZm8nIDogJ3N1Y2Nlc3MnLFxuICAgICAgICAgIHRpdGxlOiAnU3VjY2Vzc2Z1bGx5IFJlbW92ZWQnLFxuICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgIGAke2xhYmVsfSB3YXMgJHt0aGlzLnZlcmJzLmRlbGV0ZWR9LmAsXG4gICAgICAgICAgICB0aGlzLnRyYW5zaWVudE5vdGVcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG5cbiAgICAgIGlmIChcbiAgICAgICAgaXRlbSAmJlxuICAgICAgICB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICBgRG8geW91IHJlYWxseSB3YW50IHRvICR7dGhpcy52ZXJicy5kZWxldGV9ICR7bGFiZWx9P2BcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0pXG4gICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpdGVtSWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSlcbiAgICAgICAgICBjb25zdCByZXNvdXJjZSA9IGdldE1lbWJlclJlc291cmNlKGl0ZW1JZCwgdGhpcy5yZXNvdXJjZSlcbiAgICAgICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdCh7IG1ldGhvZDogJ2RlbGV0ZScsIHJlc291cmNlIH0sIGVyciA9PiB7XG4gICAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0pXG4gICAgICAgICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnJlbG9hZERhdGEoKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KSB7XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudHMgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBzY2hlbWFDb21wb25lbnRzXG4gICAgICByZXR1cm4gc2NoZW1hQ29tcG9uZW50c1soKGluZGV4ICUgbGVuZ3RoKSArIGxlbmd0aCkgJSBsZW5ndGhdXG4gICAgfSxcblxuICAgIG9wZW5TY2hlbWFDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHNjaGVtYUNvbXBvbmVudCA9IHRoaXMuZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KVxuICAgICAgaWYgKHNjaGVtYUNvbXBvbmVudCkge1xuICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBuYXZpZ2F0ZVRvQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGRhdGFQYXRoLnN0YXJ0c1dpdGgodGhpcy5kYXRhUGF0aClcbiAgICAgICAgICA/IHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgICA/IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGguc2xpY2UodGhpcy5kYXRhUGF0aC5sZW5ndGggKyAxKSlbMF0gPz8gbnVsbFxuICAgICAgICAgICAgOiAwXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIGlmIChpbmRleCAhPT0gbnVsbCAmJiBpc051bWJlcigraW5kZXgpKSB7XG4gICAgICAgICAgY29uc3Qgc2NoZW1hQ29tcG9uZW50ID0gdGhpcy5nZXRTY2hlbWFDb21wb25lbnQoK2luZGV4KVxuICAgICAgICAgIGlmIChzY2hlbWFDb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgb3BlbmVkIH0gPSBzY2hlbWFDb21wb25lbnRcbiAgICAgICAgICAgIGlmICghb3BlbmVkKSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSB0cnVlXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuJG5leHRUaWNrKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50cy5sZW5ndGggPiAwICYmIChvbkNvbXBsZXRlPy4oY29tcG9uZW50cykgPz8gdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSBvcGVuZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG9Sb3V0ZUNvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSlcbiAgICB9LFxuXG4gICAgbmF2aWdhdGVUb1JvdXRlQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsT25Db21wbGV0ZSA9ICgpID0+IHtcbiAgICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQsIHdoaWNoIHdpbGwgYmUgdGhlIGNvbXBvbmVudCB0aGF0XG4gICAgICAgICAgLy8gd2UganVzdCBuYXZpZ2F0ZWQgdG8sIGFuZCBwYXNzIGl0IG9uIHRvIGBvbkNvbXBsZXRlKClgXG4gICAgICAgICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgICAgICBjb25zdCByb3V0ZUNvbXBvbmVudCA9IHJvdXRlQ29tcG9uZW50c1tyb3V0ZUNvbXBvbmVudHMubGVuZ3RoIC0gMV1cbiAgICAgICAgICByZXNvbHZlKG9uQ29tcGxldGU/Lihbcm91dGVDb21wb25lbnRdKSA/PyB0cnVlKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIHJvdXRlIHRoYXQgY2FuIHNlcnZlIHBhcnQgb2YgdGhlIGdpdmVuIGRhdGFQYXRoLFxuICAgICAgICAvLyBhbmQgdGFrZSBpdCBmcm9tIHRoZXJlOlxuICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMucm91dGVDb21wb25lbnQuZ2V0Q2hpbGRQYXRoKFxuICAgICAgICAgICAgdGhpcy5hcGkubm9ybWFsaXplUGF0aChub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aFBhcnRzKSlcbiAgICAgICAgICApXG4gICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGFjdHVhbGx5IGlzIGEgcm91dGUgZm9yIHRoaXMgc3ViLWNvbXBvbmVudDpcbiAgICAgICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlci5tYXRjaChwYXRoKVxuICAgICAgICAgIGlmIChtYXRjaGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuJHJvdXRlLnBhdGggPT09IHBhdGgpIHtcbiAgICAgICAgICAgICAgLy8gV2UncmUgYWxyZWFkeSB0aGVyZSwgc28ganVzdCBjYWxsIGBvbkNvbXBsZXRlKClgOlxuICAgICAgICAgICAgICBjYWxsT25Db21wbGV0ZSgpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgY29tcG9uZW50J3MgcGF0aCwgdGhlbiBjYWxsIGBvbkNvbXBsZXRlKClgXzpcbiAgICAgICAgICAgICAgdGhpcy4kcm91dGVyXG4gICAgICAgICAgICAgICAgLnB1c2goeyBwYXRoIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKHJlamVjdClcbiAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQgdG8gYmUgbW91bnRlZCBpbiB0aGUgbmV4dFxuICAgICAgICAgICAgICAgIC8vIHRpY2sgYmVmb3JlIGNhbGxpbmcgYG9uQ29tcGxldGUoKWBcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljayhjYWxsT25Db21wbGV0ZSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBLZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgIGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgfSlcbiAgICB9XG4gIH0sIC8vIGVuZCBvZiBgbWV0aG9kc2BcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgbmFtZSxcbiAgICByb3V0ZXMsXG4gICAgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsXG4gICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSlcbiAgICBjb25zdCBpbmxpbmVkID0gaXNJbmxpbmVkKHNjaGVtYSlcbiAgICBpZiAoaW5saW5lZCAmJiBzY2hlbWEucmVzb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0xpc3RzIHdpdGggbmVzdGVkIGZvcm1zIGNhbm5vdCBsb2FkIGRhdGEgZnJvbSB0aGVpciBvd24gcmVzb3VyY2VzJ1xuICAgICAgKVxuICAgIH1cbiAgICAvLyBVc2UgZGlmZmVyZW50bHkgbmFtZWQgdXJsIHBhcmFtZXRlcnMgb24gZWFjaCBuZXN0ZWQgbGV2ZWwgZm9yIGlkIGFzXG4gICAgLy8gb3RoZXJ3aXNlIHRoZXkgd291bGQgY2xhc2ggYW5kIG92ZXJyaWRlIGVhY2ggb3RoZXIgaW5zaWRlICRyb3V0ZS5wYXJhbXNcbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8xMzQ1XG4gICAgY29uc3QgcGFyYW0gPSBgaWQke2xldmVsICsgMX1gXG4gICAgY29uc3QgbWV0YSA9IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgICBjb25zdCBmb3JtTWV0YSA9IHtcbiAgICAgIC4uLm1ldGEsXG4gICAgICAvLyBXaGVuIGNoaWxkcmVuIGFyZSBmbGF0dGVuZWQgKGUuZy4gdHJlZS1saXN0cyksIGluY2x1ZGUgdGhlIGBmbGF0dGVuYFxuICAgICAgLy8gc2V0dGluZyBhbHNvLCBmb3IgZmxhdHRlbmluZyBiZWxvdy5cbiAgICAgIGZsYXR0ZW4sXG4gICAgICBuZXN0ZWQsXG4gICAgICBwYXJhbVxuICAgIH1cbiAgICBjb25zdCBjaGlsZFJvdXRlcyA9IGF3YWl0IHByb2Nlc3NGb3JtcyhhcGksIHNjaGVtYSwgbGV2ZWwpXG4gICAgaWYgKHByb2Nlc3MpIHtcbiAgICAgIGF3YWl0IHByb2Nlc3MoY2hpbGRSb3V0ZXMsIGxldmVsICsgMSlcbiAgICB9XG4gICAgLy8gSW5saW5lZCBmb3JtcyBkb24ndCBuZWVkIHRvIGFjdHVhbGx5IGFkZCByb3V0ZXMuXG4gICAgaWYgKGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSAmJiAhaW5saW5lZCkge1xuICAgICAgY29uc3QgZ2V0UGF0aFdpdGhQYXJhbSA9IChwYXRoLCBwYXJhbSkgPT5cbiAgICAgICAgcGFyYW1cbiAgICAgICAgICA/IHBhdGhcbiAgICAgICAgICAgID8gYCR7cGF0aH0vOiR7cGFyYW19YFxuICAgICAgICAgICAgOiBgOiR7cGFyYW19YFxuICAgICAgICAgIDogcGF0aFxuXG4gICAgICAvLyBMaXN0cyBpbiBzaW5nbGUtY29tcG9uZW50LXZpZXdzIChsZXZlbCA9PT0gMCkgdXNlIHRoZWlyIHZpZXcncyBwYXRoLFxuICAgICAgLy8gd2hpbGUgYWxsIG90aGVycyBuZWVkIHRoZWlyIHBhdGggcHJlZml4ZWQgd2l0aCB0aGUgcGFyZW50J3MgcGF0aDpcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBsZXZlbCA9PT0gMCA/ICcnIDogc2NoZW1hLnBhdGhcbiAgICAgIGNvbnN0IGZvcm1Sb3V0ZSA9IHtcbiAgICAgICAgLy8gT2JqZWN0IHNvdXJjZXMgZG9uJ3QgbmVlZCBpZCBwYXJhbXMgaW4gdGhlaXIgZm9ybSBwYXRocywgYXMgdGhleVxuICAgICAgICAvLyBkaXJlY3RseSBlZGl0IG9uZSBvYmplY3QuXG4gICAgICAgIHBhdGg6IGdldFBhdGhXaXRoUGFyYW0oc291cmNlUGF0aCwgaXNMaXN0U291cmNlKHNjaGVtYSkgJiYgcGFyYW0pLFxuICAgICAgICBjb21wb25lbnQ6IERpdG9Db21wb25lbnQuY29tcG9uZW50KFxuICAgICAgICAgIG5lc3RlZCA/ICdEaXRvRm9ybU5lc3RlZCcgOiAnRGl0b0Zvcm0nXG4gICAgICAgICksXG4gICAgICAgIG1ldGE6IGZvcm1NZXRhXG4gICAgICB9XG4gICAgICBpZiAoaXNPYmplY3RTb3VyY2Uoc2NoZW1hKSkge1xuICAgICAgICAvLyBBbHNvIGFkZCBhIHBhcmFtIHJvdXRlLCBzaW1wbHkgdG8gaGFuZGxlICcvY3JlYXRlJyBsaW5rcyB0aGUgc2FtZVxuICAgICAgICAvLyB3YXkgdGhhdCBsaXN0cyBkbywgd2hlcmUgaXQgb3ZlcmxhcHMgd2l0aCA6aWQgZm9yIGl0ZW0gaWRzLlxuICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgLi4uZm9ybVJvdXRlLFxuICAgICAgICAgIHBhdGg6IGdldFBhdGhXaXRoUGFyYW0oc291cmNlUGF0aCwgcGFyYW0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc291cmNlUGF0aCkge1xuICAgICAgICAvLyBKdXN0IHJlZGlyZWN0IGJhY2sgdG8gdGhlIHBhcmVudCB3aGVuIGEgbmVzdGVkIHNvdXJjZSByb3V0ZSBpcyBoaXQuXG4gICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICBwYXRoOiBzb3VyY2VQYXRoLFxuICAgICAgICAgIHJlZGlyZWN0OiAnLicsXG4gICAgICAgICAgbWV0YVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgLy8gUGFydGl0aW9uIGNoaWxkUm91dGVzIGludG8gdGhvc2UgdGhhdCBuZWVkIGZsYXR0ZW5pbmcgKGUuZy4gdHJlZS1saXN0cylcbiAgICAgIC8vIGFuZCB0aG9zZSB0aGF0IGRvbid0LCBhbmQgcHJvY2VzcyBlYWNoIGdyb3VwIHNlcGFyYXRlbHkgYWZ0ZXIuXG4gICAgICBjb25zdCBbZmxhdFJvdXRlcywgc3ViUm91dGVzXSA9IGNoaWxkUm91dGVzLnJlZHVjZShcbiAgICAgICAgKHJlcywgcm91dGUpID0+IHtcbiAgICAgICAgICByZXNbcm91dGUubWV0YS5mbGF0dGVuID8gMCA6IDFdLnB1c2gocm91dGUpXG4gICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICB9LFxuICAgICAgICBbW10sIFtdXVxuICAgICAgKVxuICAgICAgaWYgKHN1YlJvdXRlcy5sZW5ndGgpIHtcbiAgICAgICAgZm9ybVJvdXRlLmNoaWxkcmVuID0gc3ViUm91dGVzXG4gICAgICB9XG4gICAgICByb3V0ZXMucHVzaChmb3JtUm91dGUpXG4gICAgICAvLyBBZGQgdGhlIHByZWZpeGVkIGZvcm1Sb3V0ZXMgd2l0aCB0aGVpciBjaGlsZHJlbiBmb3IgbmVzdGVkIGxpc3RzLlxuICAgICAgaWYgKGZsYXRSb3V0ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGRSb3V0ZSBvZiBmbGF0Um91dGVzKSB7XG4gICAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgICAgLi4uKGNoaWxkUm91dGUucmVkaXJlY3QgPyBjaGlsZFJvdXRlIDogZm9ybVJvdXRlKSxcbiAgICAgICAgICAgIHBhdGg6IGAke2Zvcm1Sb3V0ZS5wYXRofS8ke2NoaWxkUm91dGUucGF0aH1gLFxuICAgICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgICAuLi5jaGlsZFJvdXRlLm1ldGEsXG4gICAgICAgICAgICAgIGZsYXR0ZW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCwgZ3JhcGgpIHtcbiAgICBncmFwaC5hZGRTb3VyY2UoZGF0YVBhdGgsIHNjaGVtYSlcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNBcnJheSwgYXNBcnJheSwgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMgfSBmcm9tICcuL3NjaGVtYSdcblxuZXhwb3J0IGNvbnN0IGZpbHRlckNvbXBvbmVudHMgPSB7XG4gICd0ZXh0JyhmaWx0ZXIpIHtcbiAgICBjb25zdCBvcHRpb25zID0gW1xuICAgICAge1xuICAgICAgICBsYWJlbDogJ2NvbnRhaW5zJyxcbiAgICAgICAgdmFsdWU6ICdjb250YWlucydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnZXF1YWxzJyxcbiAgICAgICAgdmFsdWU6ICdlcXVhbHMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ3N0YXJ0cyB3aXRoJyxcbiAgICAgICAgdmFsdWU6ICdzdGFydHMtd2l0aCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnZW5kcyB3aXRoJyxcbiAgICAgICAgdmFsdWU6ICdlbmRzLXdpdGgnXG4gICAgICB9XG4gICAgXVxuICAgIHJldHVybiB7XG4gICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yc1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgICAgICAgd2lkdGg6ICcyLzUnLFxuICAgICAgICAgICAgb3B0aW9uczogaXNBcnJheShmaWx0ZXIub3BlcmF0b3JzKVxuICAgICAgICAgICAgICA/IG9wdGlvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgb3B0aW9uID0+IGZpbHRlci5vcGVyYXRvcnMuaW5jbHVkZXMob3B0aW9uLnZhbHVlKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBvcHRpb25zLFxuICAgICAgICAgICAgY2xlYXJhYmxlOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICA6IG51bGwsXG4gICAgICB0ZXh0OiB7XG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgd2lkdGg6IGZpbHRlci5vcGVyYXRvcnMgPyAnMy81JyA6ICdmaWxsJyxcbiAgICAgICAgY2xlYXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gICdkYXRlLXJhbmdlJygpIHtcbiAgICAvLyBVc2Ugc2hvcnRlciBkYXRlIGZvcm1hdCBpbiBkYXRlLXJhbmdlIGZpbHRlcnM6XG4gICAgY29uc3QgZGF0ZUZvcm1hdCA9IHtcbiAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgIHllYXI6ICdudW1lcmljJ1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZnJvbToge1xuICAgICAgICB0eXBlOiAnZGF0ZXRpbWUnLFxuICAgICAgICB3aWR0aDogJzEvMicsXG4gICAgICAgIGRhdGVGb3JtYXQsXG4gICAgICAgIGNsZWFyYWJsZTogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHRvOiB7XG4gICAgICAgIHR5cGU6ICdkYXRldGltZScsXG4gICAgICAgIHdpZHRoOiAnMS8yJyxcbiAgICAgICAgZGF0ZUZvcm1hdCxcbiAgICAgICAgY2xlYXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGaWx0ZXJzUGFuZWwoYXBpLCBmaWx0ZXJzLCBkYXRhUGF0aCwgcHJveHkpIHtcbiAgY29uc3QgeyBzdGlja3ksIC4uLmZpbHRlclNjaGVtYXMgfSA9IGZpbHRlcnNcbiAgY29uc3QgcGFuZWwgPSB7XG4gICAgdHlwZTogJ3BhbmVsJyxcbiAgICBsYWJlbDogJ0ZpbHRlcnMnLFxuICAgIG5hbWU6ICckZmlsdGVycycsXG4gICAgdGFyZ2V0OiBkYXRhUGF0aCxcbiAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBzdGlja3ksXG5cbiAgICAvLyBOT1RFOiBPbiBwYW5lbHMsIHRoZSBkYXRhKCkgY2FsbGJhY2sgZG9lcyBzb21ldGhpbmcgZWxzZSB0aGFuIG9uIG5vcm1hbFxuICAgIC8vIHNjaGVtYTogSXQgcHJvZHVjZXMgdGhlIGBkYXRhYCBwcm9wZXJ0eSB0byBiZSBwYXNzZWQgdG8gdGhlIHBhbmVsJ3NcbiAgICAvLyBzY2hlbWEsIG5vdCB0aGUgZGF0YSB0byBiZSB1c2VkIGZvciB0aGUgcGFuZWwgY29tcG9uZW50IGRpcmVjdGx5LlxuICAgIGRhdGEoKSB7XG4gICAgICByZXR1cm4gcGFyc2VGaWx0ZXJzRGF0YShcbiAgICAgICAgcGFuZWwsXG4gICAgICAgIHByb3h5LnF1ZXJ5XG4gICAgICApXG4gICAgfSxcblxuICAgIGNvbXBvbmVudHM6IGNyZWF0ZUZpbHRlcnNDb21wb25lbnRzKGZpbHRlclNjaGVtYXMpLFxuICAgIGJ1dHRvbnM6IGNyZWF0ZUZpbHRlcnNCdXR0b25zKGZhbHNlKSxcbiAgICBwYW5lbEJ1dHRvbnM6IGNyZWF0ZUZpbHRlcnNCdXR0b25zKHRydWUpLFxuXG4gICAgZXZlbnRzOiB7XG4gICAgICBjaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGZpbHRlcnMoKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXRGaWx0ZXJzRGF0YSh0aGlzLnNjaGVtYSwgdGhpcy5kYXRhKVxuICAgICAgfSxcblxuICAgICAgaGFzRmlsdGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVycy5sZW5ndGggPiAwXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGFwcGx5RmlsdGVycygpIHtcbiAgICAgICAgcHJveHkucXVlcnkgPSB7XG4gICAgICAgICAgLi4ucHJveHkucXVlcnksXG4gICAgICAgICAgZmlsdGVyOiB0aGlzLmZpbHRlcnMsXG4gICAgICAgICAgLy8gQ2xlYXIgcGFnaW5hdGlvbiB3aGVuIGFwcGx5aW5nIG9yIGNsZWFyaW5nIGZpbHRlcnM6XG4gICAgICAgICAgcGFnZTogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGNsZWFyRmlsdGVycygpIHtcbiAgICAgICAgdGhpcy5yZXNldERhdGEoKVxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb2Nlc3NOZXN0ZWRTY2hlbWFEZWZhdWx0cyhhcGksIHBhbmVsKVxuICByZXR1cm4gcGFuZWxcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmlsdGVyc0J1dHRvbnMoc21hbGwpIHtcbiAgcmV0dXJuIHtcbiAgICBjbGVhcjoge1xuICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICB0ZXh0OiBzbWFsbCA/IG51bGwgOiAnQ2xlYXInLFxuICAgICAgZGlzYWJsZWQ6ICh7IHNjaGVtYUNvbXBvbmVudCB9KSA9PiAhc2NoZW1hQ29tcG9uZW50Lmhhc0ZpbHRlcnMsXG4gICAgICBldmVudHM6IHtcbiAgICAgICAgY2xpY2soeyBzY2hlbWFDb21wb25lbnQgfSkge1xuICAgICAgICAgIC8vIFNpbmNlIHBhbmVsIGJ1dHRvbnMgYXJlIG91dHNpZGUgb2YgdGhlIHNjaGVtYSwgd2UgbmVlZCB0byB1c2UgdGhlXG4gICAgICAgICAgLy8gc2NoZW1hIGNvbXBvbmVudCByZWNlaXZlZCBmcm9tIHRoZSBpbml0aWFsaXplIGV2ZW50IGJlbG93OlxuICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5jbGVhckZpbHRlcnMoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHN1Ym1pdDoge1xuICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICB0ZXh0OiBzbWFsbCA/IG51bGwgOiAnRmlsdGVyJyxcbiAgICAgIHZpc2libGU6ICFzbWFsbCxcbiAgICAgIGV2ZW50czoge1xuICAgICAgICBjbGljayh7IHNjaGVtYUNvbXBvbmVudCB9KSB7XG4gICAgICAgICAgc2NoZW1hQ29tcG9uZW50LmFwcGx5RmlsdGVycygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRmlsdGVyc0NvbXBvbmVudHMoZmlsdGVycykge1xuICBjb25zdCBjb21wcyA9IHt9XG4gIGZvciAoY29uc3QgZmlsdGVyIG9mIE9iamVjdC52YWx1ZXMoZ2V0TmFtZWRTY2hlbWFzKGZpbHRlcnMpIHx8IHt9KSkge1xuICAgIC8vIFN1cHBvcnQgYm90aCBjdXN0b20gZm9ybXMgYW5kIGRlZmF1bHQgZmlsdGVyIGNvbXBvbmVudHMsIHRocm91Z2ggdGhlXG4gICAgLy8gYGZpbHRlckNvbXBvbmVudHNgIHJlZ2lzdHJ5LiBFdmVuIGZvciBkZWZhdWx0IGZpbHRlcnMsIHN0aWxsIHVzZSB0aGVcbiAgICAvLyBwcm9wZXJ0aWVzIGluIGBmaWx0ZXJgIGFzIHRoZSBiYXNlIGZvciBgZm9ybWAsIHNvIHRoaW5ncyBsaWtlIGBsYWJlbGBcbiAgICAvLyBjYW4gYmUgY2hhbmdlZCBvbiB0aGUgcmVzdWx0aW5nIGZvcm0uXG4gICAgY29uc3QgeyBmaWx0ZXI6IHR5cGUsIHdpZHRoLCAuLi5mb3JtIH0gPSBmaWx0ZXJcbiAgICBjb25zdCBjb21wb25lbnRzID0gdHlwZVxuICAgICAgPyBmaWx0ZXJDb21wb25lbnRzW3R5cGVdPy4oZmlsdGVyKVxuICAgICAgOiBmaWx0ZXIuY29tcG9uZW50c1xuICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICBmb3JtLnR5cGUgPSAnZm9ybSdcbiAgICAgIGZvcm0uY29tcG9uZW50cyA9IHt9XG4gICAgICAvLyBDb252ZXJ0IGxhYmVscyB0byBwbGFjZWhvbGRlcnM6XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIGNvbXBvbmVudF0gb2YgT2JqZWN0LmVudHJpZXMoY29tcG9uZW50cykpIHtcbiAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgIGNvbnN0IGxhYmVsID0gY29tcG9uZW50LmxhYmVsIHx8IGxhYmVsaXplKGNvbXBvbmVudC5uYW1lIHx8IGtleSlcbiAgICAgICAgICBmb3JtLmNvbXBvbmVudHNba2V5XSA9IHtcbiAgICAgICAgICAgIC4uLmNvbXBvbmVudCxcbiAgICAgICAgICAgIGxhYmVsOiBmYWxzZSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBsYWJlbFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29tcHNbZmlsdGVyLm5hbWVdID0ge1xuICAgICAgICBsYWJlbDogZm9ybS5sYWJlbCxcbiAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIHdpZHRoLFxuICAgICAgICBkZWZhdWx0OiAoKSA9PiAoe30pLFxuICAgICAgICBmb3JtLFxuICAgICAgICBpbmxpbmVkOiB0cnVlXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgZmlsdGVyICcke2ZpbHRlci5uYW1lfSc6IFVua25vd24gZmlsdGVyIHR5cGUgJyR7dHlwZX0nLmBcbiAgICAgIClcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbXBzXG59XG5cbmZ1bmN0aW9uIGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBuYW1lKSB7XG4gIGNvbnN0IGNvbXBvbmVudCA9IHNjaGVtYS5jb21wb25lbnRzW25hbWVdXG4gIHJldHVybiBjb21wb25lbnQ/LmZvcm0/LmNvbXBvbmVudHNcbn1cblxuZnVuY3Rpb24gZm9ybWF0RmlsdGVyc0RhdGEoc2NoZW1hLCBkYXRhKSB7XG4gIGNvbnN0IGZpbHRlcnMgPSBbXVxuICBmb3IgKGNvbnN0IG5hbWUgaW4gZGF0YSkge1xuICAgIGNvbnN0IGVudHJ5ID0gZGF0YVtuYW1lXVxuICAgIGlmIChlbnRyeSkge1xuICAgICAgLy8gTWFwIGNvbXBvbmVudHMgc2VxdWVuY2UgdG8gYXJndW1lbnRzOlxuICAgICAgY29uc3QgYXJncyA9IE9iamVjdC5rZXlzKGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBuYW1lKSkubWFwKFxuICAgICAgICBrZXkgPT4gZW50cnlba2V5XSA/PyBudWxsXG4gICAgICApXG4gICAgICAvLyBPbmx5IGFwcGx5IGZpbHRlciBpZiB0aGVyZSBhcmUgc29tZSBhcmd1bWVudHMgdGhhdCBhcmVuJ3QgbnVsbDpcbiAgICAgIGlmIChhcmdzLnNvbWUodmFsdWUgPT4gdmFsdWUgIT09IG51bGwpKSB7XG4gICAgICAgIGZpbHRlcnMucHVzaChgJHtuYW1lfToke2FyZ3MubWFwKEpTT04uc3RyaW5naWZ5KS5qb2luKCcsJyl9YClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbHRlcnNcbn1cblxuZnVuY3Rpb24gcGFyc2VGaWx0ZXJzRGF0YShzY2hlbWEsIHF1ZXJ5KSB7XG4gIGNvbnN0IGZpbHRlcnMgPSB7fVxuICAvLyBTYW1lIGFzIEBkaXRvanMvc2VydmVyJ3MgUXVlcnlQYXJhbWV0ZXJzLmZpbHRlcjogVHJhbnNsYXRlIHRoZSBzdHJpbmcgZGF0YVxuICAvLyBmcm9tICRyb3V0ZS5xdWVyeSBiYWNrIHRvIHBhcmFtIGxpc3RzIHBlciBmaWx0ZXI6XG4gIGlmIChxdWVyeSkge1xuICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGFzQXJyYXkocXVlcnkuZmlsdGVyKSkge1xuICAgICAgY29uc3QgWywgbmFtZSwganNvbl0gPSBmaWx0ZXIubWF0Y2goL14oXFx3Kyk6KC4qKSQvKVxuICAgICAgdHJ5IHtcbiAgICAgICAgZmlsdGVyc1tuYW1lXSA9IGFzQXJyYXkoSlNPTi5wYXJzZShgWyR7anNvbn1dYCkpXG4gICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICB9XG4gIH1cbiAgY29uc3QgZmlsdGVyc0RhdGEgPSB7fVxuICBmb3IgKGNvbnN0IG5hbWUgaW4gc2NoZW1hLmNvbXBvbmVudHMpIHtcbiAgICBjb25zdCBkYXRhID0ge31cbiAgICAvLyBJZiB3ZSBoYXZlIHJldHJpZXZlZCBwYXJhbXMgZnJvbSB0aGUgcXVlcnksIGZldGNoIHRoZSBhc3NvY2lhdGVkXG4gICAgLy8gZm9ybSBjb21wb25lbnRzIHNvIHdlIGNhbiBtYXAgdGhlIHZhbHVlcyBiYWNrIHRvIG9iamVjdCBrZXlzOlxuICAgIGNvbnN0IGFyZ3MgPSBmaWx0ZXJzW25hbWVdXG4gICAgaWYgKGFyZ3MpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgbmFtZSlcbiAgICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICAgIGxldCBpbmRleCA9IDBcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gY29tcG9uZW50cykge1xuICAgICAgICAgIGRhdGFba2V5XSA9IGFyZ3NbaW5kZXgrK11cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmaWx0ZXJzRGF0YVtuYW1lXSA9IGRhdGFcbiAgfVxuICByZXR1cm4gZmlsdGVyc0RhdGFcbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1saXN0KFxuICB2LWlmPVwiaXNSZWFkeVwiXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwic2NoZW1hLmNsYXNzXCJcbiAgOnN0eWxlPVwic2NoZW1hLnN0eWxlXCJcbilcbiAgLmRpdG8tbmF2aWdhdGlvbihcbiAgICB2LWlmPVwic2NvcGVzIHx8IGhhc1BhZ2luYXRpb25cIlxuICApXG4gICAgRGl0b1Njb3BlcyhcbiAgICAgIHYtaWY9XCJzY29wZXNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgKVxuICAgIC8vLSBXaGVuIHRoZXJlJ3Mgb25seSBwYWdpbmF0aW9uIHdpdGhvdXQgc2NvcGVzLCB3ZSBuZWVkIGEgZ29vZCBvbCcgc3BhY2VyXG4gICAgLy8tIGRpdiwgZm9yIHRoZSBsYXlvdXQgbm90IHRvIGJyZWFrLi4uXG4gICAgLmRpdG8tc3BhY2VyKFxuICAgICAgdi1lbHNlLWlmPVwiaGFzUGFnaW5hdGlvblwiXG4gICAgKVxuICAgIERpdG9QYWdpbmF0aW9uKFxuICAgICAgdi1pZj1cImhhc1BhZ2luYXRpb25cIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOmxpbWl0PVwicGFnaW5hdGVcIlxuICAgICAgOnRvdGFsPVwidG90YWwgfHwgMFwiXG4gICAgKVxuICB0YWJsZS5kaXRvLXRhYmxlKFxuICAgIDpjbGFzcz1ge1xuICAgICAgJ2RpdG8tdGFibGUtc2VwYXJhdG9ycyc6IGlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWxhcmdlci1wYWRkaW5nJzogaGFzRWRpdEJ1dHRvbnMgJiYgIWlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWFsdGVybmF0ZS1jb2xvcnMnOiAhaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtZXZlbi1jb3VudCc6IGhhc0V2ZW5Db3VudFxuICAgIH1gXG4gIClcbiAgICBEaXRvVGFibGVIZWFkKFxuICAgICAgdi1pZj1cImNvbHVtbnNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOmNvbHVtbnM9XCJjb2x1bW5zXCJcbiAgICAgIDpoYXNFZGl0QnV0dG9ucz1cImhhc0VkaXRCdXR0b25zXCJcbiAgICApXG4gICAgRGl0b0RyYWdnYWJsZShcbiAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgIDptb2RlbFZhbHVlPVwidXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0RGF0YSwgcGFnaW5hdGlvblJhbmdlKVwiXG4gICAgICA6b3B0aW9ucz1cImdldFNvcnRhYmxlT3B0aW9ucyhmYWxzZSlcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICBAdXBkYXRlOm1vZGVsVmFsdWU9XCJ2YWx1ZSA9PiAobGlzdERhdGEgPSB2YWx1ZSlcIlxuICAgIClcbiAgICAgIHRyKFxuICAgICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gbGlzdERhdGFcIlxuICAgICAgICA6aWQ9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICA6a2V5PVwiZ2V0SXRlbVVpZChzY2hlbWEsIGl0ZW0pXCJcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1pZj1cImNvbHVtbnNcIlxuICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImNvbHVtbiBpbiBjb2x1bW5zXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBEaXRvVGFibGVDZWxsKFxuICAgICAgICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKGNvbHVtbilcIlxuICAgICAgICAgICAgICA6a2V5PVwiY29sdW1uLm5hbWVcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRDZWxsQ2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgICAgIDpjZWxsPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgIClcbiAgICAgICAgICB0ZFxuICAgICAgICAgICAgRGl0b1NjaGVtYUlubGluZWQoXG4gICAgICAgICAgICAgIHYtaWY9XCJpc0lubGluZWRcIlxuICAgICAgICAgICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4LCBhc09iamVjdDogdHJ1ZSB9KVwiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwiZ2V0Q2hpbGRTdG9yZShpbmRleClcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbXBvbmVudChcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gICAgICAgICAgICAgIDppcz1cInNjaGVtYS5jb21wb25lbnRcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoaXRlbSwgaW5kZXgpKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCB9KVwiXG4gICAgICAgICAgICApXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgdi1pZj1cImhhc0NlbGxFZGl0QnV0dG9uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoaW5kZXgpXCJcbiAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgKVxuICAgIC8vLSBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgaW5zaWRlIHRhYmxlIHdoZW4gbm90IGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgIHRmb290KFxuICAgICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmICFzaW5nbGVcIlxuICAgIClcbiAgICAgIHRyXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoOmNvbHNwYW49XCJudW1Db2x1bW5zXCIpXG4gICAgICAgICAgRGl0b0VkaXRCdXR0b25zKFxuICAgICAgICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICAgICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIClcbiAgLy8tIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBvdXRzaWRlIHRhYmxlIHdoZW4gaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gIERpdG9FZGl0QnV0dG9ucy5kaXRvLWJ1dHRvbnMtbWFpbi5kaXRvLWJ1dHRvbnMtbGFyZ2UoXG4gICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmIHNpbmdsZVwiXG4gICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5pbXBvcnQgU29ydGFibGVNaXhpbiBmcm9tICcuLi9taXhpbnMvU29ydGFibGVNaXhpbi5qcydcbmltcG9ydCB7XG4gIGdldFZpZXdFZGl0UGF0aCxcbiAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudCxcbiAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudHNcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgY3JlYXRlRmlsdGVyc1BhbmVsIH0gZnJvbSAnLi4vdXRpbHMvZmlsdGVyLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgcGlja0J5LCBlcXVhbHMsIGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbGlzdCcsIHtcbiAgbWl4aW5zOiBbU291cmNlTWl4aW4sIFNvcnRhYmxlTWl4aW5dLFxuICBrZWVwQWxpZ25lZDogZmFsc2UsXG5cbiAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgLy8gTm8gbmVlZCBmb3IgdHJhbnNmb3JtYXRpb24gaGVyZS4gU2VlIFR5cGVUcmVlTGlzdCBmb3IgZGV0YWlscy5cbiAgICByZXR1cm4gdHlwZVxuICB9LFxuXG4gIGdldFBhbmVsU2NoZW1hKGFwaSwgc2NoZW1hLCBkYXRhUGF0aCwgc2NoZW1hQ29tcG9uZW50KSB7XG4gICAgY29uc3QgeyBmaWx0ZXJzIH0gPSBzY2hlbWFcbiAgICAvLyBTZWUgaWYgdGhpcyBsaXN0IGNvbXBvbmVudCB3YW50cyB0byBkaXNwbGF5IGEgZmlsdGVyIHBhbmVsLCBhbmQgaWYgc28sXG4gICAgLy8gY3JlYXRlIHRoZSBwYW5lbCBzY2hlbWEgZm9yIGl0IHRocm91Z2ggYGdldEZpbHRlcnNQYW5lbCgpYC5cbiAgICBpZiAoZmlsdGVycykge1xuICAgICAgLy8gQXQgdGhlIHRpbWUgb2YgdGhlIGNyZWF0aW9uIG9mIHRoZSBwYW5lbCBzY2hlbWEsIHRoZSBzY2hlbWFDb21wb25lbnQgaXNcbiAgICAgIC8vIG5vdCBmaWxsZWQgeWV0LCBzbyB3ZSBjYW4ndCBnZXQgdGhlIHRhcmdldCBjb21wb25lbnQgKGRhdGFQYXRoKSByaWdodFxuICAgICAgLy8gYXdheS4gVXNlIGEgcHJveHkgYW5kIGEgZ2V0dGVyIGluc3RlYWQsIHRvIGdldCBhcm91bmQgdGhpczpcbiAgICAgIGNvbnN0IGdldExpc3RDb21wb25lbnQgPSAoKSA9PlxuICAgICAgICBzY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50QnlEYXRhUGF0aChcbiAgICAgICAgICBkYXRhUGF0aCxcbiAgICAgICAgICBjb21wb25lbnQgPT4gY29tcG9uZW50LnR5cGUgPT09ICdsaXN0J1xuICAgICAgICApXG5cbiAgICAgIHJldHVybiBjcmVhdGVGaWx0ZXJzUGFuZWwoYXBpLCBmaWx0ZXJzLCBkYXRhUGF0aCwge1xuICAgICAgICAvLyBDcmVhdGUgYSBzaW1wbGUgcHJveHkgdG8gZ2V0IC8gc2V0IHRoZSBxdWVyeSwgc2VlIGdldEZpbHRlcnNQYW5lbCgpXG4gICAgICAgIGdldCBxdWVyeSgpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0TGlzdENvbXBvbmVudCgpPy5xdWVyeVxuICAgICAgICB9LFxuICAgICAgICBzZXQgcXVlcnkocXVlcnkpIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBnZXRMaXN0Q29tcG9uZW50KClcbiAgICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHVuZGVmaW5lZCB2YWx1ZXMgZm9yIGNvbXBhcmluZyB3aXRoIGVxdWFscygpXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBvYmogPT4gcGlja0J5KG9iaiwgdmFsdWUgPT4gdmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGlmICghZXF1YWxzKGZpbHRlcihxdWVyeSksIGZpbHRlcihjb21wb25lbnQucXVlcnkpKSkge1xuICAgICAgICAgICAgICBjb21wb25lbnQucXVlcnkgPSBxdWVyeVxuICAgICAgICAgICAgICBjb21wb25lbnQubG9hZERhdGEoZmFsc2UpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGhhc1BhZ2luYXRpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYWdpbmF0ZSAmJiB0aGlzLnRvdGFsID4gdGhpcy5wYWdpbmF0ZVxuICAgIH0sXG5cbiAgICBoYXNMaXN0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiAhISh0aGlzLmJ1dHRvblNjaGVtYXMgfHwgdGhpcy5jcmVhdGFibGUpXG4gICAgfSxcblxuICAgIGhhc0VkaXRCdXR0b25zKCkge1xuICAgICAgY29uc3QgeyBsaXN0RGF0YSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgbGlzdERhdGEubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgdGhpcy5lZGl0YWJsZSB8fFxuICAgICAgICAgIHRoaXMuZGVsZXRhYmxlIHx8XG4gICAgICAgICAgdGhpcy5kcmFnZ2FibGVcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNDZWxsRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNJbmxpbmVkICYmIHRoaXMuaGFzRWRpdEJ1dHRvbnNcbiAgICB9LFxuXG4gICAgaGFzRXZlbkNvdW50KCkge1xuICAgICAgcmV0dXJuICEodGhpcy5saXN0RGF0YS5sZW5ndGggJSAyKVxuICAgIH0sXG5cbiAgICBudW1Db2x1bW5zKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHRoaXMuY29sdW1ucyA/IE9iamVjdC5rZXlzKHRoaXMuY29sdW1ucykubGVuZ3RoIDogMSkgK1xuICAgICAgICAodGhpcy5oYXNDZWxsRWRpdEJ1dHRvbnMgPyAxIDogMClcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldERhdGFQYXRoKGluZGV4KSB7XG4gICAgICByZXR1cm4gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgaW5kZXgpXG4gICAgfSxcblxuICAgIGdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KSB7XG4gICAgICBpZiAodGhpcy5lZGl0YWJsZSkge1xuICAgICAgICBjb25zdCBwYXRoID0gZ2V0Vmlld0VkaXRQYXRoKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpIHx8IHRoaXMucGF0aFxuICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCBpdGVtLCBpbmRleClcbiAgICAgICAgcmV0dXJuIGAke3BhdGh9LyR7aWR9YFxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q2VsbENsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIGBkaXRvLWNlbGwtJHtoeXBoZW5hdGUoY29sdW1uLm5hbWUpfWBcbiAgICB9LFxuXG4gICAgZ2V0Q29udGV4dChpdGVtLCBpbmRleCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgZGF0YVBhdGg6IHRoaXMuZ2V0RGF0YVBhdGgoaW5kZXgpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkZpbHRlckVycm9ycyhlcnJvcnMpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnNEYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsICckZmlsdGVycycpXG4gICAgICBjb25zdCBwYW5lbCA9IHRoaXMuc2NoZW1hQ29tcG9uZW50LmdldFBhbmVsQnlEYXRhUGF0aChmaWx0ZXJzRGF0YVBhdGgpXG4gICAgICBpZiAocGFuZWwpIHtcbiAgICAgICAgcGFuZWwuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCB0cnVlKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgbmFtZSxcbiAgICByb3V0ZXMsXG4gICAgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsXG4gICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKSxcbiAgICAgIHJlc29sdmVTY2hlbWFDb21wb25lbnRzKHNjaGVtYS5jb2x1bW5zKSxcbiAgICAgIFNvdXJjZU1peGluLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgIGFwaSxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBuYW1lLFxuICAgICAgICByb3V0ZXMsXG4gICAgICAgIGxldmVsLFxuICAgICAgICBuZXN0ZWQsXG4gICAgICAgIGZsYXR0ZW4sXG4gICAgICAgIHByb2Nlc3NcbiAgICAgIClcbiAgICBdKVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbGlzdCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAuZGl0by1uYXZpZ2F0aW9uIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBwYWRkaW5nLWJvdHRvbTogJGNvbnRlbnQtcGFkZGluZy1oYWxmO1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICAgJjplbXB0eSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIC5kaXRvLXNjb3BlcyxcbiAgICAuZGl0by1wYWdpbmF0aW9uIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4OiAwIDEgYXV0bztcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICB9XG4gIH1cblxuICAmLmRpdG8tc2luZ2xlIHtcbiAgICAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50O1xuICAgIGhlaWdodDogMTAwJTtcblxuICAgIC8vIE1ha2Ugc2luZ2xlIGxpc3QgaGVhZGVyLCBuYXZpZ2F0aW9uIGFuZCBidXR0b25zIHN0aWNreSB0byB0aGUgdG9wIGFuZFxuICAgIC8vIGJvdHRvbTpcbiAgICAuZGl0by1uYXZpZ2F0aW9uIHtcbiAgICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgICB0b3A6IDA7XG4gICAgICBtYXJnaW4tdG9wOiAtJGNvbnRlbnQtcGFkZGluZztcbiAgICAgIHBhZGRpbmctdG9wOiAkY29udGVudC1wYWRkaW5nO1xuICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICAgIHotaW5kZXg6IDE7XG5cbiAgICAgICsgLmRpdG8tdGFibGUge1xuICAgICAgICAuZGl0by10YWJsZS1oZWFkIHtcbiAgICAgICAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgICAgICAgIHRvcDogY2FsYygkaW5wdXQtaGVpZ2h0ICsgJGNvbnRlbnQtcGFkZGluZyArICRjb250ZW50LXBhZGRpbmctaGFsZik7XG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbkRpdG9MYWJlbC5kaXRvLWxhYmVsLWNvbXBvbmVudChcbiAgOmxhYmVsPVwidmFsdWVcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2xhYmVsJywge1xuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuICBrZWVwQWxpZ25lZDogZmFsc2Vcbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1sYWJlbC1jb21wb25lbnQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBoZWlnaHQ6IDJlbTtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tbWFya3VwKDppZD1cImRhdGFQYXRoXCIpXG4gIC5kaXRvLW1hcmt1cC10b29sYmFyKDplZGl0b3I9XCJlZGl0b3JcIilcbiAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy10b29sYmFyKFxuICAgICAgdi1pZj1cImdyb3VwZWRCdXR0b25zLmxlbmd0aCA+IDBcIlxuICAgIClcbiAgICAgIC5kaXRvLWJ1dHRvbi1ncm91cChcbiAgICAgICAgdi1mb3I9XCJidXR0b25zIGluIGdyb3VwZWRCdXR0b25zXCJcbiAgICAgIClcbiAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgIHYtZm9yPVwieyBuYW1lLCBpY29uLCBpc0FjdGl2ZSwgb25DbGljayB9IGluIGJ1dHRvbnNcIlxuICAgICAgICAgIDprZXk9XCJuYW1lXCJcbiAgICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIlxuICAgICAgICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICAgICAgICApXG4gICAgICAgICAgSWNvbig6bmFtZT1cImljb25cIilcbiAgRWRpdG9yQ29udGVudC5kaXRvLW1hcmt1cC1lZGl0b3IoXG4gICAgcmVmPVwiZWRpdG9yXCJcbiAgICA6ZWRpdG9yPVwiZWRpdG9yXCJcbiAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICApXG4gIC5kaXRvLXJlc2l6ZShcbiAgICB2LWlmPVwicmVzaXphYmxlXCJcbiAgICBAbW91c2Vkb3duLnN0b3AucHJldmVudD1cIm9uRHJhZ1Jlc2l6ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IEVkaXRvciwgRWRpdG9yQ29udGVudCwgTWFyaywgZ2V0TWFya0F0dHJpYnV0ZXMgfSBmcm9tICdAdGlwdGFwL3Z1ZS0zJ1xuLy8gaW1wb3J0IHsgdG9nZ2xlTWFyayB9IGZyb20gJ3RpcHRhcC1jb21tYW5kcydcbi8vIEVzc2VudGlhbHM6XG5pbXBvcnQgeyBEb2N1bWVudCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWRvY3VtZW50J1xuaW1wb3J0IHsgVGV4dCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRleHQnXG4vLyBNYXJrczpcbmltcG9ydCB7IEJvbGQgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1ib2xkJ1xuaW1wb3J0IHsgQ29kZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWNvZGUnXG5pbXBvcnQgeyBJdGFsaWMgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1pdGFsaWMnXG5pbXBvcnQgeyBMaW5rIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tbGluaydcbmltcG9ydCB7IFN0cmlrZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXN0cmlrZSdcbmltcG9ydCB7IFVuZGVybGluZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXVuZGVybGluZSdcbi8vIE5vZGVzOlxuaW1wb3J0IHsgQmxvY2txdW90ZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWJsb2NrcXVvdGUnXG5pbXBvcnQgeyBDb2RlQmxvY2sgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1jb2RlLWJsb2NrJ1xuaW1wb3J0IHsgSGFyZEJyZWFrIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taGFyZC1icmVhaydcbmltcG9ydCB7IEhlYWRpbmcgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1oZWFkaW5nJ1xuaW1wb3J0IHsgUGFyYWdyYXBoIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tcGFyYWdyYXBoJ1xuaW1wb3J0IHsgSG9yaXpvbnRhbFJ1bGUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1ob3Jpem9udGFsLXJ1bGUnXG5pbXBvcnQgeyBPcmRlcmVkTGlzdCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLW9yZGVyZWQtbGlzdCdcbmltcG9ydCB7IEJ1bGxldExpc3QgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1idWxsZXQtbGlzdCdcbmltcG9ydCB7IExpc3RJdGVtIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tbGlzdC1pdGVtJ1xuLy8gVE9ETzpcbi8vIGltcG9ydCB7IEltYWdlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taW1hZ2UnXG4vLyBpbXBvcnQgeyBNZW50aW9uIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tbWVudGlvbidcbi8vIGltcG9ydCB7IENvZGVCbG9ja0hpZ2hsaWdodCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWNvZGUtYmxvY2staGlnaGxpZ2h0J1xuLy8gaW1wb3J0IHsgVGFibGUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZSdcbi8vIGltcG9ydCB7IFRhYmxlQ2VsbCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLWNlbGwnXG4vLyBpbXBvcnQgeyBUYWJsZUhlYWRlciB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLWhlYWRlcidcbi8vIGltcG9ydCB7IFRhYmxlTm9kZXMgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1ub2Rlcydcbi8vIGltcG9ydCB7IFRhYmxlUm93IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUtcm93J1xuLy8gaW1wb3J0IHsgVGFza0xpc3QgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YXNrLWxpc3QnXG4vLyBpbXBvcnQgeyBUYXNrSXRlbSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhc2staXRlbSdcbi8vIFRvb2xzOlxuaW1wb3J0IHsgSGlzdG9yeSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhpc3RvcnknXG5cbmltcG9ydCB7IEljb24gfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCB7XG4gIGlzQXJyYXksXG4gIGlzT2JqZWN0LFxuICB1bmRlcnNjb3JlLFxuICBoeXBoZW5hdGUsXG4gIGRlYm91bmNlLFxuICBjYW1lbGl6ZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ21hcmt1cCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBjb21wb25lbnRzOiB7XG4gICAgRWRpdG9yQ29udGVudCxcbiAgICBJY29uXG4gIH0sXG5cbiAga2VlcEFsaWduZWQ6IGZhbHNlLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVkaXRvcjogbnVsbCxcbiAgICAgIGhlaWdodDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxpbmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxpbmVzIHx8IDEwXG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQgfHwgYGNhbGMoJHt0aGlzLmxpbmVzfWVtICogdmFyKC0tbGluZS1oZWlnaHQpKWBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWFya0J1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdtYXJrcycsIHtcbiAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgaXRhbGljOiB0cnVlLFxuICAgICAgICB1bmRlcmxpbmU6IHRydWUsXG4gICAgICAgIHN0cmlrZTogdHJ1ZSxcbiAgICAgICAgc21hbGw6IHRydWUsXG4gICAgICAgIGNvZGU6IHRydWUsXG4gICAgICAgIGxpbms6IHtcbiAgICAgICAgICBvbkNsaWNrOiBlZGl0b3IgPT4gdGhpcy5vbkNsaWNrTGluayhlZGl0b3IpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGJhc2ljTm9kZUJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdub2RlcycsIHtcbiAgICAgICAgcGFyYWdyYXBoOiB7XG4gICAgICAgICAgLy8gRG8gbm90IHNob3cgdGhlIHBhcmFncmFwaCBjb21tYW5kIGFzIGFjdGl2ZSBpZiBhbnkgb2YgdGhlIGJsb2NrXG4gICAgICAgICAgLy8gY29tbWFuZHMgYXJlIGFsc28gYWN0aXZlOlxuICAgICAgICAgIGlnbm9yZUFjdGl2ZTogKCkgPT5cbiAgICAgICAgICAgIHRoaXMub3RoZXJOb2RlQnV0dG9ucy5zb21lKGJ1dHRvbiA9PiBidXR0b24uaXNBY3RpdmUpXG4gICAgICAgIH0sXG4gICAgICAgIGhlYWRpbmc6IHtcbiAgICAgICAgICBhdHRyaWJ1dGU6ICdsZXZlbCcsXG4gICAgICAgICAgdmFsdWVzOiBbMSwgMiwgMywgNCwgNSwgNl1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb3RoZXJOb2RlQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ25vZGVzJywge1xuICAgICAgICBidWxsZXRMaXN0OiB0cnVlLFxuICAgICAgICBvcmRlcmVkTGlzdDogdHJ1ZSxcbiAgICAgICAgYmxvY2txdW90ZTogdHJ1ZSxcbiAgICAgICAgY29kZUJsb2NrOiB0cnVlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICB0b29sQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ3Rvb2xzJywge1xuICAgICAgICB1bmRvOiB0cnVlLFxuICAgICAgICByZWRvOiB0cnVlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBncm91cGVkQnV0dG9ucygpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFya0J1dHRvbnMsXG4gICAgICAgIGJhc2ljTm9kZUJ1dHRvbnMsXG4gICAgICAgIG90aGVyTm9kZUJ1dHRvbnMsXG4gICAgICAgIHRvb2xCdXR0b25zXG4gICAgICB9ID0gdGhpc1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgbWFya0J1dHRvbnMsXG4gICAgICAgIGJhc2ljTm9kZUJ1dHRvbnMsXG4gICAgICAgIG90aGVyTm9kZUJ1dHRvbnMsXG4gICAgICAgIHRvb2xCdXR0b25zXG4gICAgICBdLmZpbHRlcihidXR0b25zID0+IGJ1dHRvbnMubGVuZ3RoID4gMClcbiAgICB9LFxuXG4gICAgcGFyc2VPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJlc2VydmVXaGl0ZXNwYWNlOiB7XG4gICAgICAgICAgJ2NvbGxhcHNlJzogZmFsc2UsXG4gICAgICAgICAgJ3ByZXNlcnZlJzogdHJ1ZSxcbiAgICAgICAgICAncHJlc2VydmUtYWxsJzogJ2Z1bGwnXG4gICAgICAgIH1bdGhpcy53aGl0ZXNwYWNlXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBlZGl0b3JPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWRpdGFibGU6ICF0aGlzLnJlYWR5b25seSxcbiAgICAgICAgYXV0b0ZvY3VzOiB0aGlzLmF1dG9mb2N1cyxcbiAgICAgICAgZGlzYWJsZUlucHV0UnVsZXM6ICF0aGlzLmVuYWJsZVJ1bGVzLmlucHV0LFxuICAgICAgICBkaXNhYmxlUGFzdGVSdWxlczogIXRoaXMuZW5hYmxlUnVsZXMucGFzdGUsXG4gICAgICAgIHBhcnNlT3B0aW9uczogdGhpcy5wYXJzZU9wdGlvbnNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVzaXphYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVzaXphYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICB3aGl0ZXNwYWNlOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2hpdGVzcGFjZScsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdjb2xsYXBzZSdcbiAgICAgIC8vIFBvc3NpYmxlIHZhbHVlcyBhcmU6ICdjb2xsYXBzZScsICdwcmVzZXJ2ZScsICdwcmVzZXJ2ZS1hbGwnXG4gICAgfSksXG5cbiAgICBlbmFibGVSdWxlczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VuYWJsZVJ1bGVzJywge1xuICAgICAgdHlwZTogW09iamVjdCwgQm9vbGVhbl0sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlbmFibGVSdWxlcykge1xuICAgICAgICByZXR1cm4gaXNPYmplY3QoZW5hYmxlUnVsZXMpXG4gICAgICAgICAgPyBlbmFibGVSdWxlc1xuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBpbnB1dDogISFlbmFibGVSdWxlcyxcbiAgICAgICAgICAgICAgcGFzdGU6ICEhZW5hYmxlUnVsZXNcbiAgICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgcmVhZHlvbmx5OiAndXBkYXRlRWRpdG9yT3B0aW9ucycsXG4gICAgYXV0b2ZvY3VzOiAndXBkYXRlRWRpdG9yT3B0aW9ucycsXG4gICAgZW5hYmxlUnVsZXM6ICd1cGRhdGVFZGl0b3JPcHRpb25zJ1xuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZVxuICAgIGxldCBpZ25vcmVXYXRjaCA9IGZhbHNlXG5cbiAgICBjb25zdCBvbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5mb2N1c2VkICYmIGNoYW5nZWQpIHtcbiAgICAgICAgY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9uRm9jdXMgPSAoKSA9PiB0aGlzLm9uRm9jdXMoKVxuXG4gICAgY29uc3Qgb25CbHVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5vbkJsdXIoKVxuICAgICAgb25DaGFuZ2UoKVxuICAgIH1cblxuICAgIGNvbnN0IHNldFZhbHVlRGVib3VuY2VkID0gZGVib3VuY2UoZWRpdG9yID0+IHtcbiAgICAgIGlnbm9yZVdhdGNoID0gdHJ1ZVxuICAgICAgdGhpcy52YWx1ZSA9IGVkaXRvci5nZXRIVE1MKClcbiAgICAgIGNoYW5nZWQgPSB0cnVlXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfSwgMTAwKVxuXG4gICAgY29uc3Qgb25VcGRhdGUgPSAoeyBlZGl0b3IgfSkgPT4ge1xuICAgICAgc2V0VmFsdWVEZWJvdW5jZWQoZWRpdG9yKVxuICAgICAgdGhpcy5vbklucHV0KClcbiAgICB9XG5cbiAgICB0aGlzLiR3YXRjaCgndmFsdWUnLCB2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlV2F0Y2gpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0Q29udGVudCh2YWx1ZSwgZmFsc2UsIHRoaXMucGFyc2VPcHRpb25zKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLmVkaXRvciA9IG5ldyBFZGl0b3Ioe1xuICAgICAgLi4udGhpcy5lZGl0b3JPcHRpb25zLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uVXBkYXRlLFxuICAgICAgZXh0ZW5zaW9uczogdGhpcy5nZXRFeHRlbnNpb25zKCksXG4gICAgICBjb250ZW50OiB0aGlzLnZhbHVlIHx8ICcnXG4gICAgfSlcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRHJhZ1Jlc2l6ZShldmVudCkge1xuICAgICAgY29uc3QgZ2V0UG9pbnQgPSAoeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5IH0pID0+ICh7IHgsIHkgfSlcblxuICAgICAgbGV0IHByZXZZID0gZ2V0UG9pbnQoZXZlbnQpLnlcbiAgICAgIGxldCBoZWlnaHQgPSBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUodGhpcy4kcmVmcy5lZGl0b3IuJGVsKS5oZWlnaHQpXG5cbiAgICAgIGNvbnN0IG1vdXNlbW92ZSA9IGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgeyB5IH0gPSBnZXRQb2ludChldmVudClcbiAgICAgICAgaGVpZ2h0ICs9IHkgLSBwcmV2WVxuICAgICAgICBwcmV2WSA9IHlcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBgJHtNYXRoLm1heChoZWlnaHQsIDApfXB4YFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgICAgbW91c2Vtb3ZlLFxuXG4gICAgICAgIG1vdXNldXAoZXZlbnQpIHtcbiAgICAgICAgICBtb3VzZW1vdmUoZXZlbnQpXG4gICAgICAgICAgaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdXBkYXRlRWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHRoaXMuZWRpdG9yLnNldE9wdGlvbnModGhpcy5lZGl0b3JPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNsaWNrTGluayhlZGl0b3IpIHtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICBocmVmOiB7XG4gICAgICAgICAgICB0eXBlOiAndXJsJyxcbiAgICAgICAgICAgIGxhYmVsOiAnTGluaycsXG4gICAgICAgICAgICBhdXRvZm9jdXM6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBsYWJlbDogJ1RpdGxlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge30sXG4gICAgICAgICAgYXBwbHk6IHsgdHlwZTogJ3N1Ym1pdCcgfSxcbiAgICAgICAgICByZW1vdmU6IHtcbiAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICBjbGljayh7IGRpYWxvZ0NvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29tcG9uZW50LnJlc29sdmUobnVsbClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF0YTogZ2V0TWFya0F0dHJpYnV0ZXModGhpcy5lZGl0b3Iuc3RhdGUsICdsaW5rJylcbiAgICAgIH0pXG4gICAgICBpZiAoYXR0cmlidXRlcykge1xuICAgICAgICBsZXQgeyBocmVmLCB0aXRsZSB9ID0gYXR0cmlidXRlc1xuICAgICAgICBpZiAoaHJlZikge1xuICAgICAgICAgIC8vIFNlZSBpZiBgaHJlZmAgY2FuIGJlIHBhcnNlZCBhcyBhIFVSTCwgYW5kIGlmIG5vdCxcbiAgICAgICAgICAvLyBwcmVmaXggaXQgd2l0aCBhIGRlZmF1bHQgcHJvdG9jb2wuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXdcbiAgICAgICAgICAgIG5ldyBVUkwoaHJlZilcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIGhyZWYgPSBgaHR0cHM6Ly8ke2hyZWZ9YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlZGl0b3IuY29tbWFuZHMuc2V0TGluayh7IGhyZWYsIHRpdGxlIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlZGl0b3IuY29tbWFuZHMudW5zZXRMaW5rKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0RXh0ZW5zaW9ucygpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFya3MgPSB7fSxcbiAgICAgICAgbm9kZXMgPSB7fSxcbiAgICAgICAgdG9vbHMgPSB7fVxuICAgICAgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gW1xuICAgICAgICAvLyBFc3NlbnRpYWxzOlxuICAgICAgICBEb2N1bWVudCxcbiAgICAgICAgVGV4dCxcbiAgICAgICAgUGFyYWdyYXBoLCAvLyBidXR0b24gY2FuIGJlIGNvbnRyb2xsZWQsIGJ1dCBub2RlIG5lZWRzIHRvIGJlIG9uLlxuXG4gICAgICAgIC8vIE1hcmtzOiBgc2NoZW1hLm1hcmtzYFxuICAgICAgICBtYXJrcy5ib2xkICYmIEJvbGQsXG4gICAgICAgIG1hcmtzLml0YWxpYyAmJiBJdGFsaWMsXG4gICAgICAgIG1hcmtzLnVuZGVybGluZSAmJiBVbmRlcmxpbmUsXG4gICAgICAgIG1hcmtzLnN0cmlrZSAmJiBTdHJpa2UsXG4gICAgICAgIG1hcmtzLnNtYWxsICYmIFNtYWxsLFxuICAgICAgICBtYXJrcy5jb2RlICYmIENvZGUsXG4gICAgICAgIG1hcmtzLmxpbmsgJiYgTGlua1dpdGhUaXRsZSxcblxuICAgICAgICAvLyBOb2RlczogYHNjaGVtYS5ub2Rlc2BcbiAgICAgICAgbm9kZXMuYmxvY2txdW90ZSAmJiBCbG9ja3F1b3RlLFxuICAgICAgICBub2Rlcy5jb2RlQmxvY2sgJiYgQ29kZUJsb2NrLFxuICAgICAgICBIYXJkQnJlYWssIC8vIFRPRE86IFNob3VsZCB0aGlzIGFsd2F5cyBvbj9cbiAgICAgICAgbm9kZXMuaGVhZGluZyAmJiBIZWFkaW5nLmNvbmZpZ3VyZSh7IGxldmVsczogbm9kZXMuaGVhZGluZyB9KSxcbiAgICAgICAgbm9kZXMuaG9yaXpvbnRhbFJ1bGUgJiYgSG9yaXpvbnRhbFJ1bGUsXG4gICAgICAgIChub2Rlcy5vcmRlcmVkTGlzdCB8fCBub2Rlcy5idWxsZXRMaXN0KSAmJiBMaXN0SXRlbSxcbiAgICAgICAgbm9kZXMuYnVsbGV0TGlzdCAmJiBCdWxsZXRMaXN0LFxuICAgICAgICBub2Rlcy5vcmRlcmVkTGlzdCAmJiBPcmRlcmVkTGlzdCxcbiAgICAgICAgLy8gVE9ETzpcbiAgICAgICAgLy8gbm9kZXMudG9kb0xpc3QgJiYgVG9kb0l0ZW0sXG4gICAgICAgIC8vIG5vZGVzLnRvZG9MaXN0ICYmIFRvZG9MaXN0LFxuXG4gICAgICAgIC8vIFRvb2xzOiBgc2NoZW1hLnRvb2xzYFxuICAgICAgICB0b29scy5oaXN0b3J5ICYmIEhpc3RvcnlcbiAgICAgIF0uZmlsdGVyKGV4dGVuc2lvbiA9PiAhIWV4dGVuc2lvbilcbiAgICB9LFxuXG4gICAgZ2V0QnV0dG9ucyhzZXR0aW5nc05hbWUsIGRlc2NyaXB0aW9ucykge1xuICAgICAgY29uc3QgbGlzdCA9IFtdXG5cbiAgICAgIGNvbnN0IGFkZEJ1dHRvbiA9ICh7IG5hbWUsIGljb24sIGF0dHJpYnV0ZXMsIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9KSA9PiB7XG4gICAgICAgIGxpc3QucHVzaCh7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBpY29uLFxuICAgICAgICAgIGlzQWN0aXZlOiAoXG4gICAgICAgICAgICB0aGlzLmVkaXRvci5pc0FjdGl2ZShuYW1lLCBhdHRyaWJ1dGVzKSAmJlxuICAgICAgICAgICAgKGlnbm9yZUFjdGl2ZSA9PSBudWxsIHx8ICFpZ25vcmVBY3RpdmUoKSlcbiAgICAgICAgICApLFxuICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGB0b2dnbGUke2NhbWVsaXplKG5hbWUsIHRydWUpfWBcbiAgICAgICAgICAgIGlmICh0aGlzLmVkaXRvci5jb21tYW5kc1trZXldKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBhdHRyaWJ1dGVzID0+XG4gICAgICAgICAgICAgICAgdGhpcy5lZGl0b3IuY2hhaW4oKVtrZXldKGF0dHJpYnV0ZXMpLmZvY3VzKCkucnVuKClcbiAgICAgICAgICAgICAgb25DbGlja1xuICAgICAgICAgICAgICAgID8gb25DbGljayh0aGlzLmVkaXRvciwgYXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICA6IGNvbW1hbmQoYXR0cmlidXRlcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5zY2hlbWFbc2V0dGluZ3NOYW1lXVxuICAgICAgaWYgKHNldHRpbmdzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgZGVzY3JpcHRpb25dIG9mIE9iamVjdC5lbnRyaWVzKGRlc2NyaXB0aW9ucykpIHtcbiAgICAgICAgICBjb25zdCBzZXR0aW5nTmFtZSA9IFsndW5kbycsICdyZWRvJ10uaW5jbHVkZXMoa2V5KSA/ICdoaXN0b3J5JyA6IGtleVxuICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSBzZXR0aW5nc1tzZXR0aW5nTmFtZV1cbiAgICAgICAgICBjb25zdCBuYW1lID0gdW5kZXJzY29yZShrZXkpXG4gICAgICAgICAgY29uc3QgaWNvbiA9IGh5cGhlbmF0ZShrZXkpXG4gICAgICAgICAgaWYgKHNldHRpbmcpIHtcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBhZGRCdXR0b24oeyBuYW1lLCBpY29uIH0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGRlc2NyaXB0aW9uKSkge1xuICAgICAgICAgICAgICBjb25zdCB7IGF0dHJpYnV0ZSwgdmFsdWVzLCBpZ25vcmVBY3RpdmUsIG9uQ2xpY2sgfSA9IGRlc2NyaXB0aW9uXG4gICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZXMpICYmIGlzQXJyYXkoc2V0dGluZykpIHtcbiAgICAgICAgICAgICAgICAgIC8vIFN1cHBvcnQgaGVhZGluZyBsZXZlbCBhdHRyczpcbiAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nLmluY2x1ZGVzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgIGFkZEJ1dHRvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogYCR7aWNvbn0tJHt2YWx1ZX1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogeyBbYXR0cmlidXRlXTogdmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUFjdGl2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24sIGlnbm9yZUFjdGl2ZSwgb25DbGljayB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRlbC5zY3JvbGxJbnRvVmlldz8uKClcbiAgICAgIHRoaXMuZWRpdG9yLmZvY3VzKClcbiAgICB9XG4gIH1cbn0pXG5cbmNvbnN0IFNtYWxsID0gTWFyay5jcmVhdGUoe1xuICBuYW1lOiAnc21hbGwnLFxuXG4gIHBhcnNlSFRNTCgpIHtcbiAgICByZXR1cm4gW3sgdGFnOiAnc21hbGwnIH1dXG4gIH0sXG5cbiAgcmVuZGVySFRNTCgpIHtcbiAgICByZXR1cm4gWydzbWFsbCcsIDBdXG4gIH0sXG5cbiAgYWRkQ29tbWFuZHMoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNldFNtYWxsOlxuICAgICAgICBhdHRyaWJ1dGVzID0+XG4gICAgICAgICh7IGNvbW1hbmRzIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gY29tbWFuZHMuc2V0TWFyayh0aGlzLm5hbWUsIGF0dHJpYnV0ZXMpXG4gICAgICAgIH0sXG4gICAgICB0b2dnbGVTbWFsbDpcbiAgICAgICAgYXR0cmlidXRlcyA9PlxuICAgICAgICAoeyBjb21tYW5kcyB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnRvZ2dsZU1hcmsodGhpcy5uYW1lLCBhdHRyaWJ1dGVzKVxuICAgICAgICB9LFxuICAgICAgdW5zZXRTbWFsbDpcbiAgICAgICAgKCkgPT5cbiAgICAgICAgKHsgY29tbWFuZHMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiBjb21tYW5kcy51bnNldE1hcmsodGhpcy5uYW1lKVxuICAgICAgICB9XG4gICAgfVxuICB9XG59KVxuXG5jb25zdCBMaW5rV2l0aFRpdGxlID0gTGluay5leHRlbmQoe1xuICBpbmNsdXNpdmU6IGZhbHNlLFxuICBzY2hlbWE6IHtcbiAgICBhdHRyczoge1xuICAgICAgaHJlZjoge1xuICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICB9LFxuICAgICAgdGl0bGU6IHtcbiAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwYXJzZUhUTUwoKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgdGFnOiAnYScsXG4gICAgICAgICAgZ2V0QXR0cnM6IGVsZW1lbnQgPT4gKHtcbiAgICAgICAgICAgIGhyZWY6IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdocmVmJyksXG4gICAgICAgICAgICB0aXRsZTogZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RpdGxlJylcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcblxuICAgIHJlbmRlckhUTUwobm9kZSkge1xuICAgICAgcmV0dXJuIFsnYScsIG5vZGUuYXR0cnMsIDBdXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbWFya3VwIHtcbiAgQGV4dGVuZCAlaW5wdXQ7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIC5kaXRvLXJlc2l6ZSB7XG4gICAgQGV4dGVuZCAlaWNvbi1yZXNpemU7XG5cbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiB1bnNldDtcbiAgICBsZWZ0OiB1bnNldDtcbiAgICByaWdodDogMDtcbiAgICBib3R0b206IDA7XG4gICAgd2lkdGg6IDFlbTtcbiAgICBoZWlnaHQ6IDFlbTtcbiAgfVxuXG4gIC5Qcm9zZU1pcnJvciB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG91dGxpbmU6IG5vbmU7XG4gIH1cblxuICAuZGl0by1tYXJrdXAtZWRpdG9yIHtcbiAgICBvdmVyZmxvdy15OiBzY3JvbGw7XG4gICAgLy8gTW92ZSBwYWRkaW5nIFwiaW5zaWRlXCIgZWRpdG9yIHRvIGNvcnJlY3RseSBwb3NpdGlvbiBzY3JvbGxiYXJcbiAgICBtYXJnaW4tcmlnaHQ6IC0kaW5wdXQtcGFkZGluZy1ob3I7XG4gICAgcGFkZGluZy1yaWdodDogJGlucHV0LXBhZGRpbmctaG9yO1xuICB9XG5cbiAgLmRpdG8tYnV0dG9ucy10b29sYmFyIHtcbiAgICBtYXJnaW46ICRpbnB1dC1wYWRkaW5nLXZlciAwO1xuICB9XG5cbiAgaDEsXG4gIGgyLFxuICBoMyxcbiAgcCxcbiAgdWwsXG4gIG9sLFxuICBwcmUsXG4gIGJsb2NrcXVvdGUge1xuICAgIG1hcmdpbjogMXJlbSAwO1xuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tdG9wOiAwO1xuICAgIH1cblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cbiAgfVxuXG4gIGgxLFxuICBoMixcbiAgaDMge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuICB9XG5cbiAgaDEge1xuICAgIGZvbnQtc2l6ZTogMS40cmVtO1xuICB9XG5cbiAgaDIge1xuICAgIGZvbnQtc2l6ZTogMS4ycmVtO1xuICB9XG5cbiAgdWwge1xuICAgIGxpc3Qtc3R5bGU6IGRpc2M7XG4gIH1cblxuICBjb2RlIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm87XG4gIH1cblxuICBwcmUge1xuICAgIHBhZGRpbmc6IDAuN3JlbSAxcmVtO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1kYXJrZXI7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xuXG4gICAgY29kZSB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICB9XG4gIH1cblxuICBwIGNvZGUge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBwYWRkaW5nOiAwIDAuM3JlbTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlcjtcbiAgfVxuXG4gIGEge1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgICBjb2xvcjogYmx1ZTtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgfVxuXG4gIHVsLFxuICBvbCB7XG4gICAgcGFkZGluZy1sZWZ0OiAycmVtO1xuICB9XG5cbiAgbGkge1xuICAgICYgPiBwLFxuICAgICYgPiBvbCxcbiAgICAmID4gdWwge1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgfVxuXG4gIGJsb2NrcXVvdGUge1xuICAgIGJvcmRlci1sZWZ0OiAzcHggc29saWQgJGNvbG9yLWxpZ2h0ZXI7XG4gICAgcGFkZGluZy1sZWZ0OiAxcmVtO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcblxuICAgIHAge1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1tdWx0aXNlbGVjdChcbiAgOmNsYXNzPWB7XG4gICAgJ2RpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlJzogIW11bHRpcGxlLFxuICAgICdkaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlJzogbXVsdGlwbGVcbiAgfWBcbilcbiAgVnVlTXVsdGlzZWxlY3QoXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgOmNsYXNzPVwieyAnbXVsdGlzZWxlY3QtLXNob3ctaGlnaGxpZ2h0Jzogc2hvd0hpZ2hsaWdodCB9XCJcbiAgICA6c2hvd0xhYmVscz1cImZhbHNlXCJcbiAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgdGFnUGxhY2Vob2xkZXI9XCJQcmVzcyBlbnRlciB0byBhZGQgbmV3IHRhZ1wiXG4gICAgOm9wdGlvbnM9XCJwb3B1bGF0ZSAmJiBhY3RpdmVPcHRpb25zIHx8IFtdXCJcbiAgICA6Y3VzdG9tTGFiZWw9XCJnZXRMYWJlbEZvck9wdGlvblwiXG4gICAgOnRyYWNrQnk9XCJvcHRpb25WYWx1ZVwiXG4gICAgOmdyb3VwTGFiZWw9XCJncm91cEJ5TGFiZWxcIlxuICAgIDpncm91cFZhbHVlcz1cImdyb3VwQnlPcHRpb25zXCJcbiAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgOnRhZ2dhYmxlPVwidGFnZ2FibGVcIlxuICAgIDpzZWFyY2hhYmxlPVwic2VhcmNoYWJsZVwiXG4gICAgOmludGVybmFsU2VhcmNoPVwiIXNlYXJjaEZpbHRlclwiXG4gICAgOnByZXNlcnZlU2VhcmNoPVwiISFzZWFyY2hGaWx0ZXJcIlxuICAgIDpjbGVhck9uU2VsZWN0PVwiIXNlYXJjaEZpbHRlclwiXG4gICAgOmNsb3NlT25TZWxlY3Q9XCIhc3RheU9wZW5cIlxuICAgIDpsb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICBAb3Blbj1cIm9uT3BlblwiXG4gICAgQGNsb3NlPVwib25DbG9zZVwiXG4gICAgQHRhZz1cIm9uQWRkVGFnXCJcbiAgICBAc2VhcmNoLWNoYW5nZT1cIm9uU2VhcmNoQ2hhbmdlXCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgQGNsaWNrPVwiY2xlYXJcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuaW1wb3J0IFZ1ZU11bHRpc2VsZWN0IGZyb20gJ3Z1ZS1tdWx0aXNlbGVjdCdcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBpc0Jvb2xlYW4gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ211bHRpc2VsZWN0Jywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IFZ1ZU11bHRpc2VsZWN0IH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNNb3VudGVkOiBmYWxzZSxcbiAgICAgIHNlYXJjaGVkT3B0aW9uczogbnVsbCxcbiAgICAgIHBvcHVsYXRlOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkT3B0aW9uczoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZVxuICAgICAgICAgID8gKHRoaXMuc2VsZWN0ZWRWYWx1ZSB8fCBbXSlcbiAgICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgICAvLyBJZiBhbiBvcHRpb24gY2Fubm90IGJlIGZvdW5kLCB3ZSBtYXkgYmUgaW4gdGFnZ2FibGUgbW9kZSBhbmRcbiAgICAgICAgICAgICAgICAvLyBjYW4gYWRkIGl0LlxuICAgICAgICAgICAgICAgIHZhbHVlID0+IChcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpIHx8IHRoaXMuYWRkVGFnT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IG9wdGlvbnMgdGhhdCB3ZSBjb3VsZG4ndCBtYXRjaC5cbiAgICAgICAgICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIGRpc3BsYXkgYW4gZXJyb3IgaW5zdGVhZD9cbiAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgIDogdGhpcy5zZWxlY3RlZE9wdGlvblxuICAgICAgfSxcblxuICAgICAgc2V0KG9wdGlvbikge1xuICAgICAgICAvLyBDb252ZXJ0IHZhbHVlIHRvIG9wdGlvbnMgb2JqZWN0LCBzaW5jZSB2dWUtbXVsdGlzZWxlY3QgY2FuJ3QgbWFwIHRoYXRcbiAgICAgICAgLy8gaXRzZWxmIHVuZm9ydHVuYXRlbHkuIGB0cmFjay1ieWAgaXMgdXNlZCBmb3IgOmtleSBtYXBwaW5nIGl0IHNlZW1zLlxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLm11bHRpcGxlXG4gICAgICAgICAgPyAob3B0aW9uIHx8IFtdKS5tYXAodmFsdWUgPT4gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbih2YWx1ZSkpXG4gICAgICAgICAgOiB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hlZE9wdGlvbnMgfHwgdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIG11bHRpcGxlOiBnZXRTY2hlbWFBY2Nlc3NvcignbXVsdGlwbGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHNlYXJjaGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdzZWFyY2hhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICB0YWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzdGF5T3BlbjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0YXlPcGVuJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcigpIHtcbiAgICAgIGxldCB7IHBsYWNlaG9sZGVyLCBzZWFyY2hhYmxlLCB0YWdnYWJsZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIGlmIChpc0Jvb2xlYW4ocGxhY2Vob2xkZXIpKSB7XG4gICAgICAgIHBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXIgPyB1bmRlZmluZWQgOiBudWxsXG4gICAgICB9XG4gICAgICByZXR1cm4gcGxhY2Vob2xkZXIgPT09IHVuZGVmaW5lZFxuICAgICAgICA/IHNlYXJjaGFibGUgJiYgdGFnZ2FibGVcbiAgICAgICAgICA/IGBTZWFyY2ggb3IgYWRkIGEgJHt0aGlzLmxhYmVsfWBcbiAgICAgICAgICA6IHNlYXJjaGFibGVcbiAgICAgICAgICAgID8gYFNlbGVjdCBvciBzZWFyY2ggJHt0aGlzLmxhYmVsfWBcbiAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIDogcGxhY2Vob2xkZXJcbiAgICB9LFxuXG4gICAgc2hvd0hpZ2hsaWdodCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTW91bnRlZCAmJiB0aGlzLiRyZWZzLmVsZW1lbnQucG9pbnRlckRpcnR5XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5pc01vdW50ZWQgPSB0cnVlXG4gICAgaWYgKHRoaXMuYXV0b2ZvY3VzKSB7XG4gICAgICAvLyB2dWUtbXVsdGlzZWxlY3QgZG9lc24ndCBzdXBwb3J0IHRoZSBhdXRvZm9jdXMgYXR0cmlidXRlLiBXZSBuZWVkIHRvXG4gICAgICAvLyBoYW5kbGUgaXQgaGVyZS5cbiAgICAgIHRoaXMuZm9jdXMoKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgYWRkVGFnT3B0aW9uKHRhZykge1xuICAgICAgaWYgKHRoaXMudGFnZ2FibGUpIHtcbiAgICAgICAgY29uc3QgeyBvcHRpb25MYWJlbCwgb3B0aW9uVmFsdWUgfSA9IHRoaXNcbiAgICAgICAgY29uc3Qgb3B0aW9uID1cbiAgICAgICAgICBvcHRpb25MYWJlbCAmJiBvcHRpb25WYWx1ZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgW29wdGlvbkxhYmVsXTogdGFnLFxuICAgICAgICAgICAgICAgIC8vIFRPRE86IERlZmluZSBhIHNpbXBsZSBzY2hlbWEgb3B0aW9uIHRvIGNvbnZlcnQgdGhlIHRhZyB2YWx1ZVxuICAgICAgICAgICAgICAgIC8vIHRvIHNvbWV0aGluZyBlbHNlLCBlLmcuIGB0b1RhZzogdGFnID0+IHVuZGVyc2NvcmUodGFnKWBcbiAgICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdOiB0YWdcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB0YWdcbiAgICAgICAgdGhpcy5vcHRpb25zLnB1c2gob3B0aW9uKVxuICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJHJlZnMuZWxlbWVudC5hY3RpdmF0ZSgpXG4gICAgfSxcblxuICAgIG9uT3BlbigpIHtcbiAgICAgIHRoaXMucG9wdWxhdGUgPSB0cnVlXG4gICAgfSxcblxuICAgIG9uQ2xvc2UoKSB7XG4gICAgICAvLyBTaW5jZSB3ZSBkb24ndCBmaXJlIGJsdXIgZXZlbnRzIHdoaWxlIHRoZSBtdWx0aXNlbGVjdCBpcyBvcGVuIChzZWVcbiAgICAgIC8vIGJlbG93KSwgd2UgbmVlZCB0byBkbyBpdCBoZXJlLCB3aGVuIGl0J3MgYWN0dWFsbHkgY2xvc2VkLlxuICAgICAgaWYgKHRoaXMuZm9jdXNlZCkge1xuICAgICAgICB0aGlzLm9uQmx1cigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQmx1cigpIHtcbiAgICAgIGlmICghdGhpcy4kcmVmcy5lbGVtZW50LmlzT3Blbikge1xuICAgICAgICBUeXBlTWl4aW4ubWV0aG9kcy5vbkJsdXIuY2FsbCh0aGlzKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkFkZFRhZyh0YWcpIHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuYWRkVGFnT3B0aW9uKHRhZylcbiAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgdGhpcy52YWx1ZS5wdXNoKHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25TZWFyY2hDaGFuZ2UocXVlcnkpIHtcbiAgICAgIGlmICh0aGlzLnNlYXJjaEZpbHRlcikge1xuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICAvLyBTZXQgYHNlYXJjaGVkT3B0aW9uc2AgdG8gYW4gZW1wdHkgYXJyYXksIGJlZm9yZSBpdCB3aWxsIGJlXG4gICAgICAgICAgLy8gcG9wdWxhdGVkIGFzeW5jaHJvbm91c2x5IHdpdGggdGhlIGFjdHVhbCByZXN1bHRzLlxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gW11cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IGF3YWl0IHRoaXMucmVzb2x2ZURhdGEoXG4gICAgICAgICAgICAoKSA9PiB0aGlzLnNlYXJjaEZpbHRlcihuZXcgRGl0b0NvbnRleHQodGhpcywgeyBxdWVyeSB9KSlcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQ2xlYXIgYHNlYXJjaGVkT3B0aW9uc2Agd2hlbiB0aGUgcXVlcnkgaXMgY2xlYXJlZC5cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5AaW1wb3J0ICd2dWUtbXVsdGlzZWxlY3QvZGlzdC92dWUtbXVsdGlzZWxlY3QuY3NzJztcblxuJHNwaW5uZXItd2lkdGg6ICRzZWxlY3QtYXJyb3ctd2lkdGg7XG4kdGFnLWljb24td2lkdGg6IDEuOGVtO1xuJHRhZy1tYXJnaW46IDJweDtcbiR0YWctcGFkZGluZzogM3B4O1xuJHRhZy1saW5lLWhlaWdodDogMWVtO1xuXG4uZGl0by1tdWx0aXNlbGVjdCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAmLmRpdG8tbXVsdGlzZWxlY3Qtc2luZ2xlIHtcbiAgICAtLWlucHV0LXdpZHRoOiAxMDAlO1xuICB9XG5cbiAgJi5kaXRvLW11bHRpc2VsZWN0LW11bHRpcGxlIHtcbiAgICAtLWlucHV0LXdpZHRoOiBhdXRvO1xuICB9XG5cbiAgJi5kaXRvLWhhcy1lcnJvcnMge1xuICAgICZfX3RhZ3Mge1xuICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3ItZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tYnV0dG9uLWNsZWFyIHtcbiAgICB3aWR0aDogJHNwaW5uZXItd2lkdGg7XG4gIH1cblxuICAubXVsdGlzZWxlY3Qge1xuICAgICRzZWxmOiBsYXN0LXNlbGVjdG9yKCYpO1xuXG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgIG1pbi1oZWlnaHQ6IGluaGVyaXQ7XG4gICAgY29sb3I6ICRjb2xvci1ibGFjaztcblxuICAgICYtLWFjdGl2ZSB7XG4gICAgICAjeyRzZWxmfV9fcGxhY2Vob2xkZXIge1xuICAgICAgICAvLyBEb24ndCB1c2UgYGRpc3BsYXk6IG5vbmVgIHRvIGhpZGUgcGxhY2UtaG9sZGVyLCBhcyB0aGUgbGF5b3V0IHdvdWxkXG4gICAgICAgIC8vIGNvbGxhcHNlLlxuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICAgIH1cblxuICAgICAgI3skc2VsZn1fX3NpbmdsZSxcbiAgICAgICN7JHNlbGZ9X19pbnB1dCB7XG4gICAgICAgIC8vIFNhZGx5LCB2dWUtc2VsZWN0IHNldHMgYHN0eWxlPVwid2lkdGhcImAgaW4gYWRkaXRpb24gdG8gdXNpbmcgY2xhc3Nlc1xuICAgICAgICAvLyBzbyBgIWltcG9ydGFudGAgaXMgbmVjZXNzYXJ5OlxuICAgICAgICB3aWR0aDogdmFyKC0taW5wdXQtd2lkdGgpICFpbXBvcnRhbnQ7XG4gICAgICB9XG5cbiAgICAgICN7JHNlbGZ9X190YWdzIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICAgICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgIH1cblxuICAgICAgI3skc2VsZn1fX2NvbnRlbnQtd3JhcHBlciB7XG4gICAgICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlO1xuICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICAgICAgICBtYXJnaW46IC0xcHggMCAwO1xuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgIH1cblxuICAgICAgJiN7JHNlbGZ9LS1hYm92ZSB7XG4gICAgICAgICN7JHNlbGZ9X190YWdzIHtcbiAgICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgI3skc2VsZn1fX2NvbnRlbnQtd3JhcHBlciB7XG4gICAgICAgICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkICRjb2xvci1hY3RpdmU7XG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgICAgICAgICBtYXJnaW46IDAgMCAtMXB4O1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX190YWdzIHtcbiAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgbWluLWhlaWdodDogaW5oZXJpdDtcbiAgICAgIHBhZGRpbmc6IDAgJHNwaW5uZXItd2lkdGggMCAwO1xuICAgICAgLy8gU28gdGFncyBjYW4gZmxvYXQgb24gbXVsdGlwbGUgbGluZXMgYW5kIGhhdmUgcHJvcGVyIG1hcmdpbnM6XG4gICAgICBwYWRkaW5nLWJvdHRvbTogJHRhZy1tYXJnaW47XG4gICAgfVxuXG4gICAgJl9fdGFnIHtcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgbWFyZ2luOiAkdGFnLW1hcmdpbiAwIDAgJHRhZy1tYXJnaW47XG4gICAgICBib3JkZXItcmFkaXVzOiAxZW07XG4gICAgICBwYWRkaW5nOiAkdGFnLXBhZGRpbmcgJHRhZy1pY29uLXdpZHRoICR0YWctcGFkZGluZyAwLjhlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0O1xuICAgICAgaGVpZ2h0OiBjYWxjKCRpbnB1dC1oZWlnaHQgLSAyICogJHRhZy1wYWRkaW5nKTtcbiAgICB9XG5cbiAgICAmX190YWdzLXdyYXAge1xuICAgICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgICBsaW5lLWhlaWdodDogMDtcbiAgICB9XG5cbiAgICAmX19zaW5nbGUsXG4gICAgJl9fcGxhY2Vob2xkZXIsXG4gICAgJl9faW5wdXQge1xuICAgICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgbWFyZ2luOiAwIDAgMXB4IDA7XG4gICAgICAvLyBTYWRseSwgdnVlLXNlbGVjdCBzZXRzIHN0eWxlPVwicGFkZGluZzogLi4uO1wiIGluIGFkZGl0aW9uIHRvIHVzaW5nXG4gICAgICAvLyBjbGFzc2VzLCBzbyBgIWltcG9ydGFudGAgaXMgbmVjZXNzYXJ5OlxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmcgIWltcG9ydGFudDtcbiAgICAgIC8vIFNvIGlucHV0IGNhbiBmbG9hdCBuZXh0IHRvIHRhZ3MgYW5kIGhhdmUgcHJvcGVyIG1hcmdpbnMgd2l0aFxuICAgICAgLy8gJl9fdGFnczpcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7XG4gICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIH1cblxuICAgICZfX3BsYWNlaG9sZGVyLFxuICAgICZfX2lucHV0OjpwbGFjZWhvbGRlciB7XG4gICAgICBjb2xvcjogJGNvbG9yLXBsYWNlaG9sZGVyO1xuICAgIH1cblxuICAgICZfX3BsYWNlaG9sZGVyIHtcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgLy8gRW5mb3JjZSBhY3R1YWwgbGluZS1oZWlnaHQgZm9yIHBvc2l0aW9uaW5nLlxuICAgICAgICBjb250ZW50OiAnXFwyMDBiJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX19zZWxlY3QsXG4gICAgJl9fc3Bpbm5lciB7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgLy8gJGJvcmRlci13aWR0aCB0byBwcmV2ZW50IG1hc2tpbmcgYm9yZGVyIHdpdGggJl9fc3Bpbm5lclxuICAgICAgdG9wOiAkYm9yZGVyLXdpZHRoO1xuICAgICAgcmlnaHQ6ICRib3JkZXItd2lkdGg7XG4gICAgICBib3R0b206ICRib3JkZXItd2lkdGg7XG4gICAgICBoZWlnaHQ6IGluaGVyaXQ7XG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICB9XG5cbiAgICAmX19zZWxlY3Qge1xuICAgICAgd2lkdGg6IDA7XG4gICAgICBtYXJnaW4tcmlnaHQ6IGNhbGMoJHNlbGVjdC1hcnJvdy13aWR0aCAvIDIpO1xuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBAaW5jbHVkZSBhcnJvdygkc2VsZWN0LWFycm93LXNpemUpO1xuXG4gICAgICAgIGJvdHRvbTogJHNlbGVjdC1hcnJvdy1ib3R0b207XG4gICAgICAgIHJpZ2h0OiBjYWxjKC0xICogJHNlbGVjdC1hcnJvdy1zaXplIC8gMik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fc3Bpbm5lciB7XG4gICAgICB3aWR0aDogJHNwaW5uZXItd2lkdGg7XG5cbiAgICAgICY6OmJlZm9yZSxcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgLy8gQ2hhbmdlIHRoZSB3aWR0aCBvZiB0aGUgbG9hZGluZyBzcGlubmVyXG4gICAgICAgIGJvcmRlci13aWR0aDogM3B4O1xuICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgbWFyZ2luOiBhdXRvO1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX29wdGlvbiB7XG4gICAgICAkb3B0aW9uOiBsYXN0LXNlbGVjdG9yKCYpO1xuXG4gICAgICBtaW4taGVpZ2h0OiB1bnNldDtcbiAgICAgIGhlaWdodDogdW5zZXQ7XG4gICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodDtcbiAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIC8vIEluc3RydWN0aW9uIHRleHQgZm9yIG9wdGlvbnNcbiAgICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG4gICAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICAvLyBPbmx5IHNob3cgdGhlIGhpZ2hsaWdodCBvbmNlIHRoZSBwdWxsZG93biBoYXMgcmVjZWl2ZWQgbW91c2Ugb3JcbiAgICAgIC8vIGtleWJvYXJkIGludGVyYWN0aW9uLCBpbiB3aGljaCBjYXNlIGAmLS1zaG93LWhpZ2hsaWdodGAgd2lsbCBiZSBzZXQsXG4gICAgICAvLyB3aGljaCBpcyBjb250cm9sbGVkIGJ5IGBwb2ludGVyRGlydHlgIGluIHZ1ZS1tdWx0aXNlbGVjdC5cbiAgICAgIC8vIFVudGlsIHRoZW4sIGNsZWFyIHRoZSBoaWdobGlnaHQgc3R5bGUsIGJ1dCBvbmx5IGlmIGl0IGlzbid0IGFsc29cbiAgICAgIC8vIGRpc2FibGVkIG9yIHNlbGVjdGVkLCBpbiB3aGljaCBjYXNlIHdlIHdhbnQgdG8ga2VlcCB0aGUgc3R5bGUuXG4gICAgICBAYXQtcm9vdCAjeyRzZWxmfTpub3QoI3skc2VsZn0tLXNob3ctaGlnaGxpZ2h0KVxuICAgICAgICAgICN7JG9wdGlvbn06bm90KCN7JG9wdGlvbn0tLWRpc2FibGVkKTpub3QoI3skb3B0aW9ufS0tc2VsZWN0ZWQpIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0O1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIH1cblxuICAgICAgJi0taGlnaGxpZ2h0IHtcbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgQGF0LXJvb3QgI3skc2VsZn0jeyRzZWxmfS0tc2hvdy1oaWdobGlnaHQgI3tsYXN0LXNlbGVjdG9yKCYpfSB7XG4gICAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJi0tc2VsZWN0ZWQge1xuICAgICAgICBmb250LXdlaWdodDogbm9ybWFsO1xuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQ7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1oaWdobGlnaHQ7XG5cbiAgICAgICAgJiN7JG9wdGlvbn0tLWhpZ2hsaWdodCB7XG4gICAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICYtLWRpc2FibGVkIHtcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgICAgY29sb3I6ICRjb2xvci1kaXNhYmxlZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX190YWcge1xuICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICB9XG5cbiAgICAmX190YWctaWNvbiB7XG4gICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgYm9yZGVyLXJhZGl1czogMWVtO1xuICAgICAgd2lkdGg6ICR0YWctaWNvbi13aWR0aDtcbiAgICAgIG1hcmdpbjogMDtcblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBAZXh0ZW5kICVpY29uLWNsZWFyO1xuXG4gICAgICAgIGZvbnQtc2l6ZTogMC45ZW07XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgIH1cblxuICAgICAgJjpob3Zlcjo6YWZ0ZXIge1xuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fdGFncyxcbiAgICAmX19jb250ZW50LXdyYXBwZXIge1xuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wdXRlZDoge1xuICAgIGlucHV0VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgIT09IG51bGwgPyB0aGlzLnZhbHVlIDogJydcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID1cbiAgICAgICAgICB2YWx1ZSAhPT0gJydcbiAgICAgICAgICAgID8gdGhpcy5pc0ludGVnZXJcbiAgICAgICAgICAgICAgPyBwYXJzZUludCh2YWx1ZSwgMTApXG4gICAgICAgICAgICAgIDogcGFyc2VGbG9hdCh2YWx1ZSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBpc0ludGVnZXIoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc3RlcFZhbHVlKCkge1xuICAgICAgLy8gRG9uJ3Qgc2hvdyBzdGVwcyBpZiB0aGUgaW5wdXQgaXMgYWxzbyBjbGVhcmFibGUsIHNpbmNlIHRoZSBzdGVwIGJ1dHRvbnNcbiAgICAgIC8vIHdvdWxkIGNvbGxpZGUgd2l0aCB0aGUgY2xlYXIgYnV0dG9uLlxuICAgICAgcmV0dXJuIHRoaXMuY2xlYXJhYmxlXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IHRoaXMuc3RlcCA9PSBudWxsICYmICF0aGlzLmlzSW50ZWdlclxuICAgICAgICAgID8gJ2FueSdcbiAgICAgICAgICA6IHRoaXMuc3RlcFxuICAgIH0sXG5cbiAgICBkZWNpbWFsczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlY2ltYWxzJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICBzdGVwOiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RlcCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChzdGVwKSB7XG4gICAgICAgIC8vIEZvciBpbnRlZ2Vycywgcm91bmQgdGhlIHN0ZXBzIHRvIHRoZSBuZXh0IGJpZ2dlciBpbnRlZ2VyIHZhbHVlOlxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgc3RlcCAhPSBudWxsID8gTWF0aC5jZWlsKHN0ZXApIDogc3RlcFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWluOiBnZXRTY2hlbWFBY2Nlc3NvcignbWluJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KG1pbikge1xuICAgICAgICBtaW4gPVxuICAgICAgICAgIG1pbiA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3JhbmdlJywgeyB0eXBlOiBBcnJheSB9KT8uWzBdXG4gICAgICAgICAgICA6IG1pblxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgbWluICE9IG51bGwgPyBNYXRoLmZsb29yKG1pbikgOiBtaW5cbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1heDogZ2V0U2NoZW1hQWNjZXNzb3IoJ21heCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChtYXgpIHtcbiAgICAgICAgbWF4ID1cbiAgICAgICAgICBtYXggPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdyYW5nZScsIHsgdHlwZTogQXJyYXkgfSk/LlsxXVxuICAgICAgICAgICAgOiBtYXhcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIG1heCAhPSBudWxsID8gTWF0aC5jZWlsKG1heCkgOiBtYXhcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHJhbmdlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmFuZ2UnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGdldCgpIHtcbiAgICAgICAgLy8gYHRoaXMubWluYCwgYHRoaXMubWF4YCBhbHJlYWR5IHN1cHBvcnQgYHNjaGVtYS5yYW5nZWAsXG4gICAgICAgIC8vIHNvIHJlZGlyZWN0IHRoZXJlLlxuICAgICAgICBjb25zdCB7IG1pbiwgbWF4IH0gPSB0aGlzXG4gICAgICAgIHJldHVybiBtaW4gIT0gbnVsbCAmJiBtYXggIT0gbnVsbCA/IFttaW4sIG1heF0gOiB1bmRlZmluZWRcbiAgICAgIH0sXG5cbiAgICAgIHNldChyYW5nZSkge1xuICAgICAgICAvLyBQcm92aWRlIGEgc2V0dGVyIHRoYXQgZGVsZWdhdGVzIHRvIGBbdGhpcy5taW4sIHRoaXMubWF4XWAsXG4gICAgICAgIC8vIHNpbmNlIHRob3NlIGFscmVhZHkgaGFuZGxlIGBzY2hlbWEucmFuZ2VgLlxuICAgICAgICBpZiAoaXNBcnJheShyYW5nZSkpIHtcbiAgICAgICAgICA7W3RoaXMubWluLCB0aGlzLm1heF0gPSByYW5nZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IHt9XG4gICAgICBjb25zdCB7IHJhbmdlLCBtaW4sIG1heCwgZGVjaW1hbHMsIHN0ZXAgfSA9IHRoaXNcbiAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICB2YWxpZGF0aW9ucy5yYW5nZSA9IHJhbmdlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobWluICE9IG51bGwpIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5taW4gPSBtaW5cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4ICE9IG51bGwpIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5tYXggPSBtYXhcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRlY2ltYWxzICE9IG51bGwpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMuZGVjaW1hbHMgPSBkZWNpbWFsc1xuICAgICAgfSBlbHNlIGlmIChzdGVwKSB7XG4gICAgICAgIGNvbnN0IGRlY2ltYWxzID0gKGAke3N0ZXB9YC5zcGxpdCgnLicpWzFdIHx8ICcnKS5sZW5ndGhcbiAgICAgICAgaWYgKGRlY2ltYWxzID4gMCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLmRlY2ltYWxzID0gZGVjaW1hbHNcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5pbnRlZ2VyID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc0ludGVnZXIpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMuaW50ZWdlciA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZGF0aW9uc1xuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbklucHV0RmllbGQuZGl0by1udW1iZXIoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgdHlwZT1cIm51bWJlclwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICA6bWluPVwibWluXCJcbiAgOm1heD1cIm1heFwiXG4gIDpzdGVwPVwic3RlcFZhbHVlXCJcbilcbiAgdGVtcGxhdGUoI2FmdGVyKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsnbnVtYmVyJywgJ2ludGVnZXInXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIG1peGluczogW051bWJlck1peGluXSxcbiAgICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgaXNJbnRlZ2VyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnaW50ZWdlcidcbiAgICAgIH1cbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi8vIE9ubHkgc2hvdyBzcGluIGJ1dHRvbnMgaWYgdGhlIG51bWJlciBjb21wb25lbnQgZGVmaW5lcyBhIHN0ZXAgc2l6ZS5cbmlucHV0W3R5cGU9J251bWJlciddOm5vdChbc3RlcF0pIHtcbiAgJjo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbiAgJjo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgIG1hcmdpbjogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1vYmplY3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJzY2hlbWEuY2xhc3NcIlxuICA6c3R5bGU9XCJzY2hlbWEuc3R5bGVcIlxuKVxuICAuZGl0by1vYmplY3QtY29udGVudChcbiAgICB2LWlmPVwib2JqZWN0RGF0YVwiXG4gIClcbiAgICAvLy0gU3VwcG9ydCB0aGUgc2FtZSByZW5kZXJpbmcgb3B0aW9ucyBhcyBUeXBlTGlzdDpcbiAgICBEaXRvU2NoZW1hSW5saW5lZChcbiAgICAgIHYtaWY9XCJpc0lubGluZWRcIlxuICAgICAgOmxhYmVsPVwib2JqZWN0TGFiZWxcIlxuICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgb2JqZWN0RGF0YSwgY29udGV4dClcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgKVxuICAgIGNvbXBvbmVudChcbiAgICAgIHYtZWxzZS1pZj1cInNjaGVtYS5jb21wb25lbnRcIlxuICAgICAgOmlzPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dCgpKVwiXG4gICAgKVxuICAgIHNwYW4oXG4gICAgICB2LWVsc2VcbiAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIG9iamVjdERhdGEpXCJcbiAgICApXG4gIERpdG9FZGl0QnV0dG9ucyhcbiAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICA6ZGVsZXRhYmxlPVwib2JqZWN0RGF0YSAmJiBkZWxldGFibGVcIlxuICAgIDplZGl0YWJsZT1cIm9iamVjdERhdGEgJiYgZWRpdGFibGVcIlxuICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gICAgOmVkaXRQYXRoPVwicGF0aFwiXG4gICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICA6cGF0aD1cInBhdGhcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKG9iamVjdERhdGEpXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5pbXBvcnQgeyByZXNvbHZlU2NoZW1hQ29tcG9uZW50IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ29iamVjdCcsIHtcbiAgbWl4aW5zOiBbU291cmNlTWl4aW5dLFxuXG4gIGtlZXBBbGlnbmVkOiBmYWxzZSxcblxuICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICAvLyBObyBuZWVkIGZvciB0cmFuc2Zvcm1hdGlvbiBoZXJlLiBTZWUgVHlwZVRyZWVMaXN0IGZvciBkZXRhaWxzLlxuICAgIHJldHVybiB0eXBlXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBvYmplY3RMYWJlbCgpIHtcbiAgICAgIC8vIE9ubHkgc2hvdyBhIGxhYmVsIGlmIHRoZSBvYmplY3QgaXMgY29sbGFwc2libGUuXG4gICAgICByZXR1cm4gdGhpcy5jb2xsYXBzaWJsZVxuICAgICAgICA/IHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc2NoZW1hLCB0aGlzLm9iamVjdERhdGEsIHsgYXNPYmplY3Q6IHRydWUgfSlcbiAgICAgICAgOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRDb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IGRhdGE6IHRoaXMub2JqZWN0RGF0YSB9KVxuICAgIH1cbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgbmFtZSxcbiAgICByb3V0ZXMsXG4gICAgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsXG4gICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKSxcbiAgICAgIFNvdXJjZU1peGluLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgIGFwaSxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBuYW1lLFxuICAgICAgICByb3V0ZXMsXG4gICAgICAgIGxldmVsLFxuICAgICAgICBuZXN0ZWQsXG4gICAgICAgIGZsYXR0ZW4sXG4gICAgICAgIHByb2Nlc3NcbiAgICAgIClcbiAgICBdKVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tb2JqZWN0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAkZm9ybS1zcGFjaW5nO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXG4gIC5kaXRvLW9iamVjdC1jb250ZW50IHtcbiAgICBmbGV4OiAwIDEgMTAwJTtcbiAgfVxuXG4gID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgZmxleDogMSAwIDAlO1xuICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdwYW5lbCcsIHtcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG4gIGtlZXBBbGlnbmVkOiBmYWxzZSxcbiAgb21pdFBhZGRpbmc6IHRydWUsXG5cbiAgZ2V0UGFuZWxTY2hlbWEoYXBpLCBzY2hlbWEpIHtcbiAgICAvLyBGb3IgYSBUeXBlUGFuZWwsIHRoZSBjb21wb25lbnQgc2NoZW1hIGlzIGFsc28gdGhlIHBhbmVsIHNjaGVtYSwgYnV0XG4gICAgLy8gcmVtb3ZlIHRoZSBhZGRlZCBuYW1lLCBzbyBpdCBkb2Vzbid0IGdldCBhcHBlbmRlZCB0d2ljZSB0byBkYXRhLXBhdGguXG4gICAgY29uc3QgeyBuYW1lLCAuLi5wYW5lbCB9ID0gc2NoZW1hXG4gICAgcmV0dXJuIHBhbmVsXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5wcm9ncmVzcy5kaXRvLXByb2dyZXNzKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6dmFsdWU9XCJwcm9ncmVzc1ZhbHVlXCJcbiAgOm1heD1cInByb2dyZXNzTWF4XCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdwcm9ncmVzcycsIHtcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBjb21wdXRlZDoge1xuICAgIHByb2dyZXNzVmFsdWUoKSB7XG4gICAgICBsZXQgeyB2YWx1ZSwgcmFuZ2UsIHN0ZXAgfSA9IHRoaXNcbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgICB2YWx1ZSAtPSByYW5nZVswXVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdGVwKSB7XG4gICAgICAgICAgdmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlIC8gc3RlcCkgKiBzdGVwXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbHVlID0gJydcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG5cbiAgICBwcm9ncmVzc01heCgpIHtcbiAgICAgIGNvbnN0IHsgcmFuZ2UgfSA9IHRoaXNcbiAgICAgIHJldHVybiByYW5nZSA/IHJhbmdlWzFdIC0gcmFuZ2VbMF0gOiBudWxsXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudWwuZGl0by1yYWRpby1idXR0b25zKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbilcbiAgbGkoXG4gICAgdi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiXG4gIClcbiAgICBsYWJlbFxuICAgICAgaW5wdXQuZGl0by1yYWRpby1idXR0b24oXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICAgIHR5cGU9XCJyYWRpb1wiXG4gICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIClcbiAgICAgIHwge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdyYWRpbycsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXJhZGlvLWJ1dHRvbnMge1xuICBsYWJlbCB7XG4gICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzcztcbiAgfVxuXG4gIC5kaXRvLXJhZGlvLWJ1dHRvbiB7XG4gICAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXNlY3Rpb24oOmNsYXNzPVwieyAnZGl0by1zZWN0aW9uLWxhYmVsbGVkJzogISFzY2hlbWEubGFiZWwgfVwiKVxuICBEaXRvUGFuZS5kaXRvLXNlY3Rpb25fX3BhbmUoXG4gICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cIml0ZW1cIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldEl0ZW1Gb3JtU2NoZW1hLCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzZWN0aW9uJywge1xuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gIXNjaGVtYS5uZXN0ZWQgJiYgISgnZGVmYXVsdCcgaW4gc2NoZW1hKSxcbiAgZGVmYXVsdE5lc3RlZDogZmFsc2UsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuICBrZWVwQWxpZ25lZDogZmFsc2UsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmVzdGVkID8gdGhpcy52YWx1ZSA6IHRoaXMuZGF0YVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0SXRlbUZvcm1TY2hlbWFcbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKGFwaSwgc2NoZW1hLCBuYW1lLCByb3V0ZXMsIGxldmVsKSB7XG4gICAgLy8gUHJvY2VzcyBzZWN0aW9uIGNvbXBvbmVudHMgc28gdGhlaXIgZm9ybXMgZ2V0IHJlc29sdmVkIHRvby5cbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgcm91dGVzLCBsZXZlbClcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNlY3Rpb24ge1xuICAmLmRpdG8tc2VjdGlvbi1sYWJlbGxlZCB7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmc7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgfVxuXG4gIC5kaXRvLXNlY3Rpb25fX3BhbmUge1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLy8tIE5lc3RpbmcgaXMgbmVlZGVkIHRvIG1ha2UgYW4gYXJyb3cgYXBwZWFyIG92ZXIgdGhlIHNlbGVjdCBpdGVtOlxuLmRpdG8tc2VsZWN0XG4gIHNlbGVjdChcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIEBtb3VzZWRvd249XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgIEBmb2N1cz1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gIClcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtaWY9XCJwb3B1bGF0ZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICAgICAgKVxuICAgICAgICBvcHRncm91cChcbiAgICAgICAgICB2LWlmPVwiZ3JvdXBCeVwiXG4gICAgICAgICAgOmxhYmVsPVwib3B0aW9uW2dyb3VwQnlMYWJlbF1cIlxuICAgICAgICApXG4gICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgdi1mb3I9XCJvcHQgaW4gb3B0aW9uW2dyb3VwQnlPcHRpb25zXVwiXG4gICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHQpXCJcbiAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdCkgfX1cbiAgICAgICAgb3B0aW9uKFxuICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtZWxzZS1pZj1cInNlbGVjdGVkT3B0aW9uXCJcbiAgICApXG4gICAgICBvcHRpb24oOnZhbHVlPVwic2VsZWN0ZWRWYWx1ZVwiKSB7eyBnZXRMYWJlbEZvck9wdGlvbihzZWxlY3RlZE9wdGlvbikgfX1cbiAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIEBjbGljaz1cImNsZWFyXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzZWxlY3QnLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IHRydWUsXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gRGlzYWJsZSBsYXp5LXBvcHVsYXRpb24gZm9yIG5vdy5cbiAgICAgIC8vIFRPRE86IFNldCB0byBgZmFsc2VgIE9uY2UgbGluZXRvIGUyZSB0ZXN0cyBhZGRyZXNzIHRoZWlyIGlzc3Vlcy5cbiAgICAgIHBvcHVsYXRlOiB0cnVlXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLy8gVE9ETzogTW92ZSB0byBkaXRvLXVpXG4kc2VsZWN0LWFycm93LXJpZ2h0OiBjYWxjKCgkc2VsZWN0LWFycm93LXdpZHRoIC0gJHNlbGVjdC1hcnJvdy1zaXplKSAvIDIpO1xuXG4uZGl0by1zZWxlY3Qge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICBzZWxlY3Qge1xuICAgIHBhZGRpbmctcmlnaHQ6ICRzZWxlY3QtYXJyb3ctd2lkdGg7XG4gIH1cbiAgLy8gSGFuZGxlIC5kaXRvLXdpZHRoLWZpbGwgc2VwYXJhdGVseSBkdWUgdG8gcmVxdWlyZWQgbmVzdGluZyBvZiBzZWxlY3Q6XG4gICYuZGl0by13aWR0aC1maWxsIHtcbiAgICBzZWxlY3Qge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuICB9XG5cbiAgJjo6YWZ0ZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBAaW5jbHVkZSBhcnJvdygkc2VsZWN0LWFycm93LXNpemUpO1xuXG4gICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbTtcbiAgICByaWdodDogY2FsYygjeyRzZWxlY3QtYXJyb3ctcmlnaHR9ICsgI3skYm9yZGVyLXdpZHRofSk7XG4gIH1cblxuICAmLmRpdG8tZGlzYWJsZWQ6OmFmdGVyIHtcbiAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc2xpZGVyXG4gIGlucHV0LmRpdG8tcmFuZ2UoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB0eXBlPVwicmFuZ2VcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuICBJbnB1dEZpZWxkLmRpdG8tbnVtYmVyKFxuICAgIHYtaWY9XCJpbnB1dFwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHR5cGU9XCJudW1iZXJcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NsaWRlcicsIHtcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYHNob3dJbnB1dGA/XG4gICAgaW5wdXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdpbnB1dCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNsaWRlciB7XG4gIEBleHRlbmQgJWlucHV0O1xuXG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgLmRpdG8tcmFuZ2Uge1xuICAgIGZsZXg6IGF1dG87XG4gICAgaGVpZ2h0OiBjYWxjKDFlbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSk7XG4gIH1cblxuICAuZGl0by1udW1iZXIge1xuICAgIGJvcmRlcjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuU3dpdGNoQnV0dG9uLmRpdG8tc3dpdGNoKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICA6bGFiZWxzPVwibGFiZWxzXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgU3dpdGNoQnV0dG9uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc3dpdGNoJywge1xuICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICBkZWZhdWx0V2lkdGg6ICdhdXRvJyxcblxuICBjb21wb25lbnRzOiB7XG4gICAgU3dpdGNoQnV0dG9uXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsYWJlbHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGFiZWxzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc3dpdGNoIHtcbiAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGw7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wdXRlZDoge1xuICAgIHRyaW06IGdldFNjaGVtYUFjY2Vzc29yKCd0cmltJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSkge1xuICAgIHJldHVybiBzY2hlbWEudHJpbSA/IHZhbHVlPy50cmltKCkgOiB2YWx1ZVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuSW5wdXRGaWVsZC5kaXRvLXRleHQoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgOnR5cGU9XCJpbnB1dFR5cGVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbilcbiAgdGVtcGxhdGUoI2FmdGVyKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFRleHRNaXhpbiBmcm9tICcuLi9taXhpbnMvVGV4dE1peGluJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG5jb25zdCBtYXNrZWRQYXNzd29yZCA9ICcqKioqKioqKioqKioqKioqJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgW1xuICAgICd0ZXh0JyxcbiAgICAnZW1haWwnLFxuICAgICd1cmwnLFxuICAgICdob3N0bmFtZScsXG4gICAgJ2RvbWFpbicsXG4gICAgJ3RlbCcsXG4gICAgJ3Bhc3N3b3JkJyxcbiAgICAnY3JlZGl0Y2FyZCdcbiAgXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIG1peGluczogW1RleHRNaXhpbl0sXG4gICAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gICAgbmF0aXZlRmllbGQ6IHRydWUsXG4gICAgdGV4dEZpZWxkOiB0cnVlLFxuICAgIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+IHNjaGVtYS50eXBlID09PSAncGFzc3dvcmQnLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGlucHV0VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjcmVkaXRjYXJkOiAndGV4dCcsXG4gICAgICAgICAgICBob3N0bmFtZTogJ3RleHQnLFxuICAgICAgICAgICAgZG9tYWluOiAndGV4dCdcbiAgICAgICAgICB9W3RoaXMudHlwZV0gfHxcbiAgICAgICAgICB0aGlzLnR5cGVcbiAgICAgICAgKVxuICAgICAgfSxcblxuICAgICAgaW5wdXRWYWx1ZToge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMudHlwZSA9PT0gJ3Bhc3N3b3JkJyAmJlxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAhdGhpcy5mb2N1c2VkXG4gICAgICAgICAgKVxuICAgICAgICAgICAgPyBtYXNrZWRQYXNzd29yZFxuICAgICAgICAgICAgOiB0aGlzLnZhbHVlXG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IHJ1bGUgPSB7XG4gICAgICAgICAgZW1haWw6ICdlbWFpbCcsXG4gICAgICAgICAgdXJsOiAndXJsJyxcbiAgICAgICAgICBob3N0bmFtZTogJ2hvc3RuYW1lJyxcbiAgICAgICAgICBkb21haW46ICdkb21haW4nLFxuICAgICAgICAgIHBhc3N3b3JkOiAncGFzc3dvcmQnLFxuICAgICAgICAgIGNyZWRpdGNhcmQ6ICdjcmVkaXRjYXJkJ1xuICAgICAgICB9W3RoaXMudHlwZV1cbiAgICAgICAgcmV0dXJuIHJ1bGUgPyB7IFtydWxlXTogdHJ1ZSB9IDoge31cbiAgICAgIH1cbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRleHRhcmVhLmRpdG8tdGV4dGFyZWEuZGl0by1pbnB1dChcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIDpyb3dzPVwibGluZXNcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLXJlc2l6YWJsZSc6IHJlc2l6YWJsZSB9XCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgVGV4dE1peGluIGZyb20gJy4uL21peGlucy9UZXh0TWl4aW4nXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3RleHRhcmVhJywge1xuICBtaXhpbnM6IFtUZXh0TWl4aW5dLFxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgdGV4dEZpZWxkOiB0cnVlLFxuICBrZWVwQWxpZ25lZDogZmFsc2UsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCA0XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10ZXh0YXJlYSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICByZXNpemU6IG5vbmU7XG4gIG1pbi1oZWlnaHQ6IGNhbGMoMWVtICogdmFyKC0tbGluZS1oZWlnaHQpICsgI3syICogJGlucHV0LXBhZGRpbmctdmVyfSk7XG5cbiAgJi5kaXRvLXJlc2l6YWJsZSB7XG4gICAgcmVzaXplOiB2ZXJ0aWNhbDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10cmVlLWxpc3RcbiAgRGl0b1Njb3BlcyhcbiAgICB2LWlmPVwic2NvcGVzXCJcbiAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gIClcbiAgLmRpdG8tdHJlZS1wYW5lbFxuICAgIERpdG9UcmVlSXRlbShcbiAgICAgIDpzY2hlbWE9XCJ0cmVlU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cInRyZWVEYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cInRyZWVEYXRhXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgOm9wZW49XCJ0cnVlXCJcbiAgICApXG4gICAgLmRpdG8tdHJlZS1mb3JtLWNvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJoYXNFZGl0YWJsZUZvcm1zXCJcbiAgICApXG4gICAgICAvLy0gSW5jbHVkZSBhIHJvdXRlci12aWV3IGZvciB0aGUgb3B0aW9uYWwgRGl0b0Zvcm1JbmxpbmVkXG4gICAgICBSb3V0ZXJWaWV3XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7XG4gIGhhc0Zvcm1TY2hlbWEsXG4gIGdldEZvcm1TY2hlbWFzLFxuICByZXNvbHZlU2NoZW1hQ29tcG9uZW50c1xufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbJ3RyZWUtbGlzdCcsICd0cmVlLW9iamVjdCddLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgbWl4aW5zOiBbU291cmNlTWl4aW5dLFxuXG4gICAga2VlcEFsaWduZWQ6IGZhbHNlLFxuXG4gICAgcHJvdmlkZSgpIHtcbiAgICAgIHJldHVybiB7IGNvbnRhaW5lcjogdGhpcyB9XG4gICAgfSxcblxuICAgIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgICAgcmV0dXJuIHR5cGUgPT09ICd0cmVlLW9iamVjdCcgPyAnb2JqZWN0JyA6ICdsaXN0J1xuICAgIH0sXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgcGF0aCgpIHtcbiAgICAgICAgLy8gQWNjZXNzZWQgZnJvbSBEaXRvVHJlZUl0ZW0gdGhyb3VnaCBgY29udGFpbmVyLnBhdGhgOlxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50Py5wYXRoXG4gICAgICB9LFxuXG4gICAgICBlZGl0UGF0aCgpIHtcbiAgICAgICAgLy8gQWNjZXNzZWQgZnJvbSBEaXRvVHJlZUl0ZW0gdGhyb3VnaCBgY29udGFpbmVyLmVkaXRQYXRoYDpcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhdGguc2xpY2UodGhpcy5wYXRoPy5sZW5ndGgpXG4gICAgICB9LFxuXG4gICAgICB0cmVlRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgPyB7IFt0aGlzLm5hbWVdOiB0aGlzLnZhbHVlIH1cbiAgICAgICAgICA6IHRoaXMudmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHRyZWVEYXRhUGF0aCgpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGBuYW1lYCBmcm9tIGBkYXRhUGF0aGAsIGFzIGl0IGlzIGFkZGVkXG4gICAgICAgIC8vIHRvIGB0cmVlRGF0YWAgYW5kIGB0cmVlU2NoZW1hYFxuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICA/IHRoaXMuZGF0YVBhdGguc2xpY2UoMCwgdGhpcy5kYXRhUGF0aC5sZW5ndGggLSB0aGlzLm5hbWUubGVuZ3RoKVxuICAgICAgICAgIDogdGhpcy5kYXRhUGF0aFxuICAgICAgfSxcblxuICAgICAgdHJlZVNjaGVtYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGNoaWxkcmVuOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuc2NoZW1hXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHRoaXMuc2NoZW1hXG4gICAgICB9LFxuXG4gICAgICBoYXNFZGl0YWJsZUZvcm1zKCkge1xuICAgICAgICBjb25zdCBoYXNFZGl0YWJsZUZvcm1zID0gc2NoZW1hID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmIChcbiAgICAgICAgICAgICAgdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZWRpdGFibGUnLCB7XG4gICAgICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzY2hlbWFcbiAgICAgICAgICAgICAgfSkgfHxcbiAgICAgICAgICAgICAgc2NoZW1hLmNoaWxkcmVuICYmXG4gICAgICAgICAgICAgIGhhc0VkaXRhYmxlRm9ybXMoc2NoZW1hLmNoaWxkcmVuKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFzRWRpdGFibGVGb3Jtcyh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgcHJvY2Vzc1NjaGVtYShcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYSxcbiAgICAgIG5hbWUsXG4gICAgICByb3V0ZXMsXG4gICAgICBsZXZlbCxcbiAgICAgIG5lc3RlZCA9IHRydWUsXG4gICAgICBmbGF0dGVuID0gZmFsc2UsXG4gICAgICBwcm9jZXNzID0gbnVsbFxuICAgICkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICByZXNvbHZlU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEucHJvcGVydGllcyksXG4gICAgICAgIFNvdXJjZU1peGluLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgICAgYXBpLFxuICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHJvdXRlcyxcbiAgICAgICAgICBsZXZlbCxcbiAgICAgICAgICBuZXN0ZWQsXG4gICAgICAgICAgZmxhdHRlbixcbiAgICAgICAgICAvLyBQYXNzIHByb2Nlc3MoKSB0byBhZGQgbW9yZSByb3V0ZXMgdG8gY2hpbGRSb3V0ZXM6XG4gICAgICAgICAgKGNoaWxkUm91dGVzLCBsZXZlbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gc2NoZW1hXG4gICAgICAgICAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgLy8gQWRkIGB0eXBlYCB0byB0aGUgbmVzdGVkIHRyZWUgbGlzdC5cbiAgICAgICAgICAgICAgY2hpbGRyZW4udHlwZSA9ICd0cmVlLWxpc3QnXG4gICAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNhbGwgYHByb2Nlc3NTY2hlbWEoKWAgZm9yIHRoZSBuZXN0ZWQgdHJlZSBsaXN0OlxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2NoZW1hKFxuICAgICAgICAgICAgICAgIGFwaSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5uYW1lLFxuICAgICAgICAgICAgICAgIGNoaWxkUm91dGVzLFxuICAgICAgICAgICAgICAgIGxldmVsLFxuICAgICAgICAgICAgICAgIG5lc3RlZCxcbiAgICAgICAgICAgICAgICB0cnVlLCAvLyBQYXNzIGB0cnVlYCBmb3IgYGZsYXR0ZW5gIGluIHRyZWUgbGlzdHMuXG4gICAgICAgICAgICAgICAgcHJvY2Vzc1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICBdKVxuICAgIH0sXG5cbiAgICBnZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3Npbmcoc2NoZW1hLCBjb250ZXh0KSB7XG4gICAgICAvLyBDb252ZXJ0IG5lc3RlZCBjaGlsZHJlbiBzY2hlbWEgdG8gc3RhbmQtYWxvbmUgc2NoZW1hIGNvbXBvbmVudCxcbiAgICAgIC8vIHByZXNlbnQgaW4gZWFjaCBvZiB0aGUgZm9ybXMsIGFzIHJlcXVpcmVkIGJ5IGBwcm9jZXNzU2NoZW1hRGF0YSgpYFxuICAgICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gc2NoZW1hXG4gICAgICByZXR1cm4gZ2V0Rm9ybVNjaGVtYXMoXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgY2hpbGRyZW5cbiAgICAgICAgICA/IGZvcm0gPT4gKHtcbiAgICAgICAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgICAgICAgIC4uLmZvcm0uY29tcG9uZW50cyxcbiAgICAgICAgICAgICAgICBbY2hpbGRyZW4ubmFtZV06IGNoaWxkcmVuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBudWxsXG4gICAgICApXG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10cmVlLWxpc3Qge1xuICBAZXh0ZW5kICVmaWVsZDtcblxuICAuZGl0by10cmVlLXBhbmVsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcblxuICAgID4gLmRpdG8tdHJlZS1pdGVtIHtcbiAgICAgIGZsZXg6IDEgMSAyNSU7XG4gICAgfVxuXG4gICAgPiAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyIHtcbiAgICAgIGZsZXg6IDAgMSA3NSU7XG4gICAgICBhbGlnbi1zZWxmOiBzdHJldGNoO1xuICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlO1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gMTtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtIDE7XG4gICAgICBtYXJnaW46ICgtJGlucHV0LXBhZGRpbmctdmVyKSAoLSRpbnB1dC1wYWRkaW5nLWhvcik7XG4gICAgICBtYXJnaW4tbGVmdDogJGlucHV0LXBhZGRpbmctaG9yO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGZpbGVzaXplIH0gZnJvbSAnZmlsZXNpemUnXG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRGaWxlU2l6ZShzaXplKSB7XG4gIHJldHVybiBmaWxlc2l6ZShzaXplLCB7IGJhc2U6IDEwIH0pXG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdXBsb2FkXG4gIHRhYmxlLmRpdG8tdGFibGUuZGl0by10YWJsZS1zZXBhcmF0b3JzLmRpdG8tdGFibGUtYmFja2dyb3VuZFxuICAgIC8vLSBTdHlsaW5nIGNvbWVzIGZyb20gRGl0b1RhYmxlSGVhZFxuICAgIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgICAgdHJcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIE5hbWVcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIFNpemVcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIFN0YXR1c1xuICAgICAgICB0aFxuICAgICAgICAgIHNwYW5cbiAgICBEaXRvRHJhZ2dhYmxlKFxuICAgICAgdi1tb2RlbD1cImZpbGVzXCJcbiAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgIDpvcHRpb25zPVwiZ2V0U29ydGFibGVPcHRpb25zKGZhbHNlKVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICApXG4gICAgICB0cihcbiAgICAgICAgdi1mb3I9XCIoZmlsZSwgaW5kZXgpIGluIGZpbGVzXCJcbiAgICAgICAgOmtleT1cImZpbGUua2V5XCJcbiAgICAgIClcbiAgICAgICAgdGQoXG4gICAgICAgICAgdi1odG1sPVwicmVuZGVyRmlsZShmaWxlLCBpbmRleClcIlxuICAgICAgICApXG4gICAgICAgIHRkIHt7IGZvcm1hdEZpbGVTaXplKGZpbGUuc2l6ZSkgfX1cbiAgICAgICAgdGRcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtaWY9XCJmaWxlLnVwbG9hZFwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAgIHYtaWY9XCJmaWxlLnVwbG9hZC5lcnJvclwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHwgRXJyb3I6IHt7IGZpbGUudXBsb2FkLmVycm9yIH19XG4gICAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuYWN0aXZlXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfCBVcGxvYWRpbmcuLi5cbiAgICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5zdWNjZXNzXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfCBVcGxvYWRlZFxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgKVxuICAgICAgICAgICAgfCBTdG9yZWRcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9uc1xuICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cImRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICB0Zm9vdFxuICAgICAgdHJcbiAgICAgICAgdGQoOmNvbHNwYW49XCI0XCIpXG4gICAgICAgICAgLmRpdG8tdXBsb2FkLWZvb3RlclxuICAgICAgICAgICAgcHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgOnZhbHVlPVwidXBsb2FkUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gZmFsc2VcIlxuICAgICAgICAgICAgICApIENhbmNlbCBBbGxcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImlzVXBsb2FkUmVhZHlcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IHRydWVcIlxuICAgICAgICAgICAgICApIFVwbG9hZCBBbGxcbiAgICAgICAgICAgICAgVnVlVXBsb2FkLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWFkZC11cGxvYWQoXG4gICAgICAgICAgICAgICAgcmVmPVwidXBsb2FkXCJcbiAgICAgICAgICAgICAgICB2LW1vZGVsPVwidXBsb2Fkc1wiXG4gICAgICAgICAgICAgICAgOmlucHV0SWQ9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgOm5hbWU9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIDpwb3N0QWN0aW9uPVwidXBsb2FkUGF0aFwiXG4gICAgICAgICAgICAgICAgOmV4dGVuc2lvbnM9XCJleHRlbnNpb25zXCJcbiAgICAgICAgICAgICAgICA6YWNjZXB0PVwiYWNjZXB0XCJcbiAgICAgICAgICAgICAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgICAgICAgICAgICAgOnNpemU9XCJtYXhTaXplXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIlVwbG9hZCBGaWxlc1wiXG4gICAgICAgICAgICAgICAgQGlucHV0LWZpbHRlcj1cImlucHV0RmlsdGVyXCJcbiAgICAgICAgICAgICAgICBAaW5wdXQtZmlsZT1cImlucHV0RmlsZVwiXG4gICAgICAgICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU29ydGFibGVNaXhpbiBmcm9tICcuLi9taXhpbnMvU29ydGFibGVNaXhpbi5qcydcbmltcG9ydCBwYXJzZUZpbGVTaXplIGZyb20gJ2ZpbGVzaXplLXBhcnNlcidcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBmb3JtYXRGaWxlU2l6ZSB9IGZyb20gJy4uL3V0aWxzL3VuaXRzLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNBcnJheSwgYXNBcnJheSwgZXNjYXBlSHRtbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgVnVlVXBsb2FkIGZyb20gJ3Z1ZS11cGxvYWQtY29tcG9uZW50J1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3VwbG9hZCcsIHtcbiAgbWl4aW5zOiBbU29ydGFibGVNaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVnVlVXBsb2FkIH0sXG5cbiAga2VlcEFsaWduZWQ6IGZhbHNlLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVwbG9hZHM6IFtdXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdXBsb2FkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlZnMudXBsb2FkXG4gICAgfSxcblxuICAgIGZpbGVzKCkge1xuICAgICAgcmV0dXJuIGFzRmlsZXModGhpcy52YWx1ZSlcbiAgICB9LFxuXG4gICAgbXVsdGlwbGU6IGdldFNjaGVtYUFjY2Vzc29yKCdtdWx0aXBsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIC8vIE5vIGNhbGxiYWNrIGFzIGl0J3MgdXNlZCBpbiBgcHJvY2Vzc1ZhbHVlKClgXG4gICAgICBjYWxsYmFjazogZmFsc2VcbiAgICB9KSxcblxuICAgIGV4dGVuc2lvbnM6IGdldFNjaGVtYUFjY2Vzc29yKCdleHRlbnNpb25zJywge1xuICAgICAgdHlwZTogW0FycmF5LCBTdHJpbmcsIFJlZ0V4cF1cbiAgICB9KSxcblxuICAgIGFjY2VwdDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2FjY2VwdCcsIHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZ2V0KGFjY2VwdCkge1xuICAgICAgICByZXR1cm4gaXNBcnJheShhY2NlcHQpID8gYWNjZXB0LmpvaW4oJywnKSA6IGFjY2VwdFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWF4U2l6ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ21heFNpemUnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBOdW1iZXJdLFxuICAgICAgZ2V0KG1heFNpemUpIHtcbiAgICAgICAgcmV0dXJuIG1heFNpemUgPyBwYXJzZUZpbGVTaXplKG1heFNpemUpIDogdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkcmFnZ2FibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkcmFnZ2FibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZHJhZ2dhYmxlKSB7XG4gICAgICAgIHJldHVybiBkcmFnZ2FibGUgJiYgdGhpcy5maWxlcy5sZW5ndGggPiAxXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGlzVXBsb2FkUmVhZHkoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLnVwbG9hZHMubGVuZ3RoICYmXG4gICAgICAgICEodGhpcy51cGxvYWQuYWN0aXZlIHx8IHRoaXMudXBsb2FkLnVwbG9hZGVkKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc1VwbG9hZEFjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwbG9hZHMubGVuZ3RoICYmIHRoaXMudXBsb2FkLmFjdGl2ZVxuICAgIH0sXG5cbiAgICB1cGxvYWRQcm9ncmVzcygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMudXBsb2Fkcy5yZWR1Y2UoKHRvdGFsLCBmaWxlKSA9PiB0b3RhbCArIGZpbGUucHJvZ3Jlc3MsIDApIC9cbiAgICAgICAgdGhpcy51cGxvYWRzLmxlbmd0aFxuICAgICAgKVxuICAgIH0sXG5cbiAgICB1cGxvYWRQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VVcmwoe1xuICAgICAgICB0eXBlOiAndXBsb2FkJyxcbiAgICAgICAgcGF0aDogdGhpcy5hcGkubm9ybWFsaXplUGF0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgfSlcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvcm1hdEZpbGVTaXplLFxuXG4gICAgcmVuZGVyRmlsZShmaWxlLCBpbmRleCkge1xuICAgICAgY29uc3QgeyByZW5kZXIgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gcmVuZGVyXG4gICAgICAgID8gcmVuZGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgICAgdmFsdWU6IGZpbGUsXG4gICAgICAgICAgICAgIGRhdGE6IHRoaXMuZmlsZXMsXG4gICAgICAgICAgICAgIGluZGV4LFxuICAgICAgICAgICAgICBkYXRhUGF0aDogYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgaW5kZXgpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgOiBlc2NhcGVIdG1sKGZpbGUubmFtZSlcbiAgICB9LFxuXG4gICAgZGVsZXRlRmlsZShmaWxlLCBpbmRleCkge1xuICAgICAgY29uc3QgeyBuYW1lIH0gPSBmaWxlXG5cbiAgICAgIGlmIChcbiAgICAgICAgZmlsZSAmJlxuICAgICAgICB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICBgRG8geW91IHJlYWxseSB3YW50IHRvICR7dGhpcy52ZXJicy5yZW1vdmV9ICR7bmFtZX0/YFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGlmIChmaWxlLnVwbG9hZCkge1xuICAgICAgICAgIHRoaXMudXBsb2FkLnJlbW92ZShmaWxlLnVwbG9hZClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgICB0aXRsZTogJ1N1Y2Nlc3NmdWxseSBSZW1vdmVkJyxcbiAgICAgICAgICB0ZXh0OiBgJHtuYW1lfSB3YXMgJHt0aGlzLnZlcmJzLmRlbGV0ZWR9LmBcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0RmlsZUluZGV4KGZpbGUpIHtcbiAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlICYmIHRoaXMudmFsdWVcbiAgICAgICAgPyB0aGlzLnZhbHVlLmZpbmRJbmRleChpdCA9PiBpdC5pZCA9PT0gZmlsZS5pZClcbiAgICAgICAgOiAtMVxuICAgIH0sXG5cbiAgICBhZGRGaWxlKGZpbGUpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZS5wdXNoKGZpbGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IFtmaWxlXVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlID0gZmlsZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByZXBsYWNlRmlsZShmaWxlLCBuZXdGaWxlKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0RmlsZUluZGV4KGZpbGUpXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5ld0ZpbGUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVbaW5kZXhdID0gbmV3RmlsZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXdGaWxlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbW92ZUZpbGUoZmlsZSkge1xuICAgICAgdGhpcy5yZXBsYWNlRmlsZShmaWxlLCBudWxsKVxuICAgIH0sXG5cbiAgICBpbnB1dEZpbGUobmV3RmlsZSwgb2xkRmlsZSkge1xuICAgICAgaWYgKG5ld0ZpbGUgJiYgIW9sZEZpbGUpIHtcbiAgICAgICAgY29uc3QgeyBpZCwgbmFtZSwgc2l6ZSB9ID0gbmV3RmlsZVxuICAgICAgICB0aGlzLmFkZEZpbGUoeyBpZCwgbmFtZSwgc2l6ZSwgdXBsb2FkOiBuZXdGaWxlIH0pXG4gICAgICB9XG4gICAgICBpZiAobmV3RmlsZSAmJiBvbGRGaWxlKSB7XG4gICAgICAgIGNvbnN0IHsgc3VjY2VzcywgZXJyb3IgfSA9IG5ld0ZpbGVcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgICBjb25zdCBmaWxlID0gbmV3RmlsZS5yZXNwb25zZVswXVxuICAgICAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICAgICBmaWxlLnVwbG9hZCA9IG5ld0ZpbGVcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIHVwbG9hZCBmaWxlIG9iamVjdCB3aXRoIHRoZSBmaWxlIG9iamVjdCByZWNlaXZlZFxuICAgICAgICAgICAgLy8gZnJvbSB0aGUgdXBsb2FkIHJlc3BvbnNlLlxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlRmlsZShuZXdGaWxlLCBmaWxlKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUobmV3RmlsZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhYm9ydDogJ1VwbG9hZCBhYm9ydGVkJyxcbiAgICAgICAgICAgICAgZGVuaWVkOiAnVXBsb2FkIGRlbmllZCcsXG4gICAgICAgICAgICAgIGV4dGVuc2lvbjogYFVuc3VwcG9ydGVkIGZpbGUtdHlwZTogJHtuZXdGaWxlLm5hbWV9YCxcbiAgICAgICAgICAgICAgbmV0d29yazogJ05ldHdvcmsgZXJyb3IgZW5jb3VudGVyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICAgIHNlcnZlcjogJ1NlcnZlciBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdXBsb2FkJyxcbiAgICAgICAgICAgICAgc2l6ZTogYEZpbGUgaXMgdG9vIGxhcmdlOiAke2Zvcm1hdEZpbGVTaXplKG5ld0ZpbGUuc2l6ZSl9YCxcbiAgICAgICAgICAgICAgdGltZW91dDogJ1RpbWVvdXQgb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCdcbiAgICAgICAgICAgIH1bZXJyb3JdIHx8XG4gICAgICAgICAgICBgVW5rbm93biBGaWxlIFVwbG9hZCBFcnJvcjogJyR7ZXJyb3J9J2BcbiAgICAgICAgICApXG4gICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIHRpdGxlOiAnRmlsZSBVcGxvYWQgRXJyb3InLFxuICAgICAgICAgICAgdGV4dFxuICAgICAgICAgIH0pXG4gICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKG5ld0ZpbGUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaW5wdXRGaWx0ZXIobmV3RmlsZSAvKiwgb2xkRmlsZSwgcHJldmVudCAqLykge1xuICAgICAgY29uc3QgeGhyID0gbmV3RmlsZT8ueGhyXG4gICAgICBpZiAodGhpcy5hcGkuY29ycz8uY3JlZGVudGlhbHMgJiYgeGhyICYmICF4aHIud2l0aENyZWRlbnRpYWxzKSB7XG4gICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgLy8gRmlsdGVyIG91dCBhbGwgbmV3bHkgYWRkZWQgZmlsZXMgdGhhdCB3ZXJlbid0IGFjdHVhbGx5IHVwbG9hZGVkLlxuICAgIGNvbnN0IGZpbGVzID0gYXNGaWxlcyh2YWx1ZSlcbiAgICAgIC5tYXAoKHsgdXBsb2FkLCAuLi5maWxlIH0pID0+ICghdXBsb2FkIHx8IHVwbG9hZC5zdWNjZXNzID8gZmlsZSA6IG51bGwpKVxuICAgICAgLmZpbHRlcihmaWxlID0+IGZpbGUpXG4gICAgcmV0dXJuIHNjaGVtYS5tdWx0aXBsZSA/IGZpbGVzIDogZmlsZXNbMF0gfHwgbnVsbFxuICB9XG59KVxuXG5mdW5jdGlvbiBhc0ZpbGVzKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA/IGFzQXJyYXkodmFsdWUpIDogW11cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXVwbG9hZCB7XG4gIC5kaXRvLXRhYmxlIHtcbiAgICB0ciB7XG4gICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbi1hZGQtdXBsb2FkIHtcbiAgICBwYWRkaW5nOiAwO1xuXG4gICAgPiAqIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG4gIH1cblxuICAuZGl0by11cGxvYWQtZm9vdGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAgIC5kaXRvLXByb2dyZXNzIHtcbiAgICAgIGZsZXg6IGF1dG87XG4gICAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmc7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbW91bnRlZChub2RlLCBiaW5kaW5nKSB7XG4gICAgb2JzZXJ2ZVJlc2l6ZShub2RlLCBiaW5kaW5nLnZhbHVlLCBiaW5kaW5nLmFyZylcbiAgfSxcblxuICB1bm1vdW50ZWQobm9kZSwgYmluZGluZykge1xuICAgIHVub2JzZXJ2ZVJlc2l6ZShub2RlLCBiaW5kaW5nLnZhbHVlLCBiaW5kaW5nLmFyZylcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JzZXJ2ZVJlc2l6ZShub2RlLCBoYW5kbGVyLCBvcHRpb25zKSB7XG4gIE9ic2VydmVyLmdldE9ic2VydmVyKG9wdGlvbnMpLm9ic2VydmUobm9kZSwgaGFuZGxlcilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVub2JzZXJ2ZVJlc2l6ZShub2RlLCBoYW5kbGVyLCBvcHRpb25zKSB7XG4gIE9ic2VydmVyLmdldE9ic2VydmVyKG9wdGlvbnMpLnVub2JzZXJ2ZShub2RlLCBoYW5kbGVyKVxufVxuXG5leHBvcnQgY29uc3QgaXNSZXNpemVTdXBwb3J0ZWQgPSB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnXG5cbmNvbnN0IG9ic2VydmVycyA9IHt9XG5cbmNsYXNzIE9ic2VydmVyIHtcbiAgY29uc3RydWN0b3Ioa2V5LCBvcHRpb25zKSB7XG4gICAgdGhpcy5rZXkgPSBrZXlcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG4gICAgdGhpcy5vYnNlcnZlciA9IGlzUmVzaXplU3VwcG9ydGVkXG4gICAgICA/IG5ldyBSZXNpemVPYnNlcnZlcihlbnRyaWVzID0+IHRoaXMuaGFuZGxlKGVudHJpZXMpKVxuICAgICAgOiBudWxsXG4gICAgdGhpcy5oYW5kbGVyc0J5Tm9kZSA9IG5ldyBXZWFrTWFwKClcbiAgICB0aGlzLm5vZGVDb3VudCA9IDBcbiAgfVxuXG4gIG9ic2VydmUobm9kZSwgaGFuZGxlcikge1xuICAgIGxldCBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnNCeU5vZGUuZ2V0KG5vZGUpXG4gICAgaWYgKCFoYW5kbGVycykge1xuICAgICAgaGFuZGxlcnMgPSBuZXcgU2V0KClcbiAgICAgIHRoaXMuaGFuZGxlcnNCeU5vZGUuc2V0KG5vZGUsIGhhbmRsZXJzKVxuICAgICAgdGhpcy5vYnNlcnZlcj8ub2JzZXJ2ZShub2RlLCB0aGlzLm9wdGlvbnMpXG4gICAgICB0aGlzLm5vZGVDb3VudCsrXG4gICAgfVxuICAgIGhhbmRsZXJzLmFkZChoYW5kbGVyKVxuICB9XG5cbiAgdW5vYnNlcnZlKG5vZGUsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnNCeU5vZGUuZ2V0KG5vZGUpXG4gICAgaWYgKGhhbmRsZXJzPy5kZWxldGUoaGFuZGxlcikgJiYgaGFuZGxlcnMuc2l6ZSA9PT0gMCkge1xuICAgICAgdGhpcy5oYW5kbGVyc0J5Tm9kZS5kZWxldGUobm9kZSlcbiAgICAgIHRoaXMub2JzZXJ2ZXI/LnVub2JzZXJ2ZShub2RlKVxuICAgICAgaWYgKC0tdGhpcy5ub2RlQ291bnQgPT09IDApIHtcbiAgICAgICAgZGVsZXRlIG9ic2VydmVyc1t0aGlzLmtleV1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGUoZW50cmllcykge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzQnlOb2RlLmdldChlbnRyeS50YXJnZXQpXG4gICAgICBpZiAoaGFuZGxlcnMpIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICAgICAgdGFyZ2V0OiBlbnRyeS50YXJnZXQsXG4gICAgICAgICAgY29udGVudFJlY3Q6IGVudHJ5LmNvbnRlbnRSZWN0LFxuICAgICAgICAgIC8vIFVzZSBgYXNBcnJheWAgc2luY2UgRmlyZWZveCBiZWZvcmUgdjkyIHJldHVybnMgdGhlc2UgYXMgb2JqZWN0czpcbiAgICAgICAgICBib3JkZXJCb3hTaXplOiBhc0FycmF5KGVudHJ5LmJvcmRlckJveFNpemUpLFxuICAgICAgICAgIGNvbnRlbnRCb3hTaXplOiBhc0FycmF5KGVudHJ5LmNvbnRlbnRCb3hTaXplKSxcbiAgICAgICAgICBkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplOiBhc0FycmF5KGVudHJ5LmRldmljZVBpeGVsQ29udGVudEJveFNpemUpXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIGhhbmRsZXJzKSB7XG4gICAgICAgICAgaGFuZGxlcihldmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRPYnNlcnZlcih7IGJveCA9ICdjb250ZW50LWJveCcgfSA9IHt9KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHsgYm94IH1cbiAgICBjb25zdCBrZXkgPSBKU09OLnN0cmluZ2lmeShvcHRpb25zKVxuICAgIG9ic2VydmVyc1trZXldIHx8PSBuZXcgT2JzZXJ2ZXIoa2V5LCBvcHRpb25zKVxuICAgIHJldHVybiBvYnNlcnZlcnNba2V5XVxuICB9XG59XG4iLCJjb25zdCBsb2dnZWREZXByZWNhdGlvbnMgPSBuZXcgU2V0KClcblxuZXhwb3J0IGZ1bmN0aW9uIGRlcHJlY2F0ZShtZXNzYWdlKSB7XG4gIC8vIE9ubHkgbG9nIGRlcHJlY2F0aW9uIG1lc3NhZ2VzIG9uY2UuXG4gIGlmICghbG9nZ2VkRGVwcmVjYXRpb25zLmhhcyhtZXNzYWdlKSkge1xuICAgIGxvZ2dlZERlcHJlY2F0aW9ucy5hZGQobWVzc2FnZSlcbiAgICBjb25zb2xlLndhcm4obWVzc2FnZSlcbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgW1xuICAnY3JlYXRlJywgJ2NyZWF0ZWQnLFxuICAnc2F2ZScsICdzYXZlZCcsXG4gICdzdWJtaXQnLCAnc3VibWl0dGVkJyxcbiAgJ2RlbGV0ZScsICdkZWxldGVkJyxcbiAgJ2VkaXQnLCAnZWRpdGVkJyxcbiAgJ2NsZWFyJywgJ2NsZWFyZWQnLFxuICAnY2xvc2UnLCAnY2xvc2VkJyxcbiAgJ2NhbmNlbCcsICdjYW5jZWxsZWQnLFxuICAnZHJhZycsICdkcmFnZ2VkJyxcbiAgJ2xvZ2luJywgJ2xvZ2dlZCBpbidcbl0ucmVkdWNlKCh2ZXJicywgdmVyYikgPT4ge1xuICB2ZXJic1t2ZXJiXSA9IHZlcmJcbiAgcmV0dXJuIHZlcmJzXG59LCB7fSlcbiIsImltcG9ydCB7IGNyZWF0ZUFwcCwgaCBhcyBjcmVhdGVFbGVtZW50IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgY3JlYXRlUm91dGVyLCBjcmVhdGVXZWJIaXN0b3J5IH0gZnJvbSAndnVlLXJvdXRlcidcbmltcG9ydCBWdWVOb3RpZmljYXRpb25zIGZyb20gJ0BreXZnL3Z1ZTMtbm90aWZpY2F0aW9uJ1xuaW1wb3J0IHtcbiAgaXNTdHJpbmcsXG4gIGlzQWJzb2x1dGVVcmwsXG4gIG1lcmdlLFxuICBoeXBoZW5hdGUsXG4gIGNhbWVsaXplLFxuICBkZWZhdWx0Rm9ybWF0c1xufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0ICogYXMgY29tcG9uZW50cyBmcm9tICcuL2NvbXBvbmVudHMvaW5kZXguanMnXG5pbXBvcnQgKiBhcyB0eXBlcyBmcm9tICcuL3R5cGVzL2luZGV4LmpzJ1xuaW1wb3J0IERpdG9Sb290IGZyb20gJy4vY29tcG9uZW50cy9EaXRvUm9vdC52dWUnXG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBSZXNpemVEaXJlY3RpdmUgZnJvbSAnLi9kaXJlY3RpdmVzL3Jlc2l6ZS5qcydcbmltcG9ydCB7IGdldFJlc291cmNlIH0gZnJvbSAnLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGRlcHJlY2F0ZSB9IGZyb20gJy4vdXRpbHMvZGVwcmVjYXRlLmpzJ1xuaW1wb3J0IHsgZm9ybWF0UXVlcnkgfSBmcm9tICcuL3V0aWxzL3JvdXRlLmpzJ1xuaW1wb3J0IHZlcmJzIGZyb20gJy4vdmVyYnMuanMnXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpdG9BZG1pbiB7XG4gIGNvbnN0cnVjdG9yKGVsLCB7XG4gICAgLy8gYGRpdG9gIGNvbnRhaW5zIHRoZSBiYXNlIGFuZCBhcGkgc2V0dGluZ3MgcGFzc2VkIGZyb20gYEFkbWluQ29udHJvbGxlcmBcbiAgICBkaXRvID0ge30sXG4gICAgYXBpLFxuICAgIHZpZXdzID0ge30sXG4gICAgLi4ub3B0aW9uc1xuICB9ID0ge30pIHtcbiAgICB0aGlzLmVsID0gZWxcbiAgICAvLyBNZXJnZSBpbiBgYXBpYCBzZXR0aW5ncyBhcyBwYXNzZWQgZnJvbSBgY29uZmlnLmFkbWluYCBhbmQgdGhyb3VnaCB0aGVcbiAgICAvLyBgQWRtaW5Db250cm9sbGVyYCB3aXRoIGBhcGlgIHZhbHVlcyBmcm9tIGZyb20gJ2FkbWluL2luZGV4LmpzJ1xuICAgIC8vIE5PVEU6IGBBZG1pbkNvbnRyb2xsZXJgIHByb3ZpZGVzIGBkaXRvLmFwaS5iYXNlYFxuICAgIHRoaXMuYXBpID0gYXBpID0gbWVyZ2UoeyBiYXNlOiAnLycgfSwgZGl0by5hcGksIGFwaSlcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG5cbiAgICAvLyBTZXR1cCBkZWZhdWx0IGFwaSBzZXR0aW5nczpcbiAgICBhcGkubG9jYWxlIHx8PSAnZW4tVVMnXG4gICAgYXBpLmZvcm1hdHMgPSBtZXJnZSh7fSwgZGVmYXVsdEZvcm1hdHMsIGFwaS5mb3JtYXRzKVxuICAgIGFwaS5yZXF1ZXN0IHx8PSBvcHRpb25zID0+IHJlcXVlc3QoYXBpLCBvcHRpb25zKVxuICAgIGFwaS5nZXRBcGlVcmwgfHw9IG9wdGlvbnMgPT4gZ2V0QXBpVXJsKGFwaSwgb3B0aW9ucylcbiAgICBhcGkuaXNBcGlVcmwgfHw9IHVybCA9PiBpc0FwaVVybChhcGksIHVybClcbiAgICAvLyBTZXR0aW5nIGBhcGkubm9ybWFsaXplUGF0aHMgPSB0cnVlIChwbHVyYWwpIHNldHMgYm90aDpcbiAgICAvLyBgYXBpLm5vcm1hbGl6ZVBhdGggPSBoeXBoZW5hdGVgIGFuZCBgYXBpLmRlbm9ybWFsaXplUGF0aCA9IGNhbWVsaXplYFxuICAgIGFwaS5ub3JtYWxpemVQYXRoIHx8PSBhcGkubm9ybWFsaXplUGF0aHMgPyBoeXBoZW5hdGUgOiB2YWwgPT4gdmFsXG4gICAgYXBpLmRlbm9ybWFsaXplUGF0aCB8fD0gYXBpLm5vcm1hbGl6ZVBhdGhzID8gY2FtZWxpemUgOiB2YWwgPT4gdmFsXG5cbiAgICAvLyBBbGxvdyBkZWZpbml0aW9uIG9mIGRlZmF1bHRzIGZvciBhZG1pbiBjb21wb25lbnQgdHlwZXMsIG5lc3RlZCBwZXIgdHlwZTpcbiAgICAvLyBhcGkuZGVmYXVsdHMgPSB7XG4gICAgLy8gICAnbXVsdGlzZWxlY3QnOiB7XG4gICAgLy8gICAgIHNlbGVjdGFibGU6IHRydWVcbiAgICAvLyAgIH0sXG4gICAgLy8gICAnZmFrZS10eXBlJzogc2NoZW1hID0+IHtcbiAgICAvLyAgICAgLy8gUmV0dXJuIGRlZmF1bHRzLCBvciBkaXJlY3RseSBtb2RpZnkgdGhlIHNjaGVtYTpcbiAgICAvLyAgICAgT2JqZWN0LmFzc2lnbihzY2hlbWEsIHtcbiAgICAvLyAgICAgICB0eXBlOiAncmVhbC10eXBlJyxcbiAgICAvLyAgICAgICBmb3JtYXQ6ICh7IHZhbHVlIH0pID0+IGBGb3JtYXR0ZWQgJHt2YWx1ZX1gLFxuICAgIC8vICAgICAgIHByb2Nlc3M6ICh7IHZhbHVlIH0pID0+IGBQcm9jZXNzZWQgJHt2YWx1ZX1gXG4gICAgLy8gICAgIH0pXG4gICAgLy8gICB9XG4gICAgLy8gfVxuXG4gICAgYXBpLmRlZmF1bHRzIHx8PSB7fVxuXG4gICAgLy8gQWxsb3cgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYWxsIGF1dGggcmVzb3VyY2VzLCBsaWtlIHNvOlxuICAgIC8vIGFwaS51c2VycyA9IHtcbiAgICAvLyAgIHBhdGg6ICcvYWRtaW5zJyxcbiAgICAvLyAgIC8vIFRoZXNlIGFyZSB0aGUgZGVmYXVsdHM6XG4gICAgLy8gICBsb2dpbjoge1xuICAgIC8vICAgICBwYXRoOiAnbG9naW4nLFxuICAgIC8vICAgICBtZXRob2Q6ICdwb3N0J1xuICAgIC8vICAgfSxcbiAgICAvLyAgIGxvZ291dDoge1xuICAgIC8vICAgICBwYXRoOiAnbG9nb3V0JyxcbiAgICAvLyAgICAgbWV0aG9kOiAncG9zdCdcbiAgICAvLyAgIH0sXG4gICAgLy8gICBzZXNzaW9uOiB7XG4gICAgLy8gICAgIHBhdGg6ICdzZXNzaW9uJyxcbiAgICAvLyAgICAgbWV0aG9kOiAnZ2V0J1xuICAgIC8vICAgfVxuICAgIC8vIH1cbiAgICBjb25zdCB1c2VycyA9IGdldFJlc291cmNlKGFwaS51c2Vycywge1xuICAgICAgdHlwZTogJ2NvbGxlY3Rpb24nXG4gICAgfSkgfHwge31cbiAgICB1c2Vycy5sb2dpbiA9IGdldFJlc291cmNlKHVzZXJzLmxvZ2luIHx8ICdsb2dpbicsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgdXNlcnMubG9nb3V0ID0gZ2V0UmVzb3VyY2UodXNlcnMubG9nb3V0IHx8ICdsb2dvdXQnLCB7XG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIHVzZXJzLnNlc3Npb24gPSBnZXRSZXNvdXJjZSh1c2Vycy5zZXNzaW9uIHx8ICdzZXNzaW9uJywge1xuICAgICAgbWV0aG9kOiAnZ2V0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIGFwaS51c2VycyA9IHVzZXJzXG5cbiAgICAvLyBBbGxvdyBvdmVycmlkaW5nIG9mIHJlc291cmNlIHBhdGggaGFuZGxlcnM6XG4gICAgLy8gYXBpLnJlc291cmNlcyA9IHtcbiAgICAvLyAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAvLyAgICAgcmV0dXJuIHJlc291cmNlLnBhcmVudFxuICAgIC8vICAgICAgID8gYCR7cmVzb3VyY2UucGF0aH0/JHtyZXNvdXJjZS5wYXJlbnQucGF0aH1faWQ9JHtcbiAgICAvLyAgICAgICAgICByZXNvdXJjZS5wYXJlbnQuaWR9YFxuICAgIC8vICAgICAgIDogcmVzb3VyY2UucGF0aFxuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIGFwaS5yZXNvdXJjZXMgPSB7XG4gICAgICBhbnkocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IHRoaXNbcmVzb3VyY2U/LnR5cGVdIHx8IHRoaXMuZGVmYXVsdFxuICAgICAgICByZXR1cm4gcmVzb3VyY2UgJiYgaGFuZGxlci5jYWxsKHRoaXMsIHJlc291cmNlKVxuICAgICAgfSxcblxuICAgICAgZGVmYXVsdChyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCBwYXJlbnRQYXRoID0gdGhpcy5hbnkocmVzb3VyY2UucGFyZW50KVxuICAgICAgICByZXR1cm4gcGFyZW50UGF0aFxuICAgICAgICAgID8gYCR7cGFyZW50UGF0aH0vJHtyZXNvdXJjZS5wYXRofWBcbiAgICAgICAgICA6IHJlc291cmNlLnBhdGhcbiAgICAgIH0sXG5cbiAgICAgIGNvbGxlY3Rpb24ocmVzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdChyZXNvdXJjZSlcbiAgICAgIH0sXG5cbiAgICAgIG1lbWJlcihyZXNvdXJjZSkge1xuICAgICAgICAvLyBOT1RFOiBXZSBhc3N1bWUgdGhhdCBhbGwgbWVtYmVycyBoYXZlIHJvb3QtbGV2ZWwgY29sbGVjdGlvbiByb3V0ZXMsXG4gICAgICAgIC8vIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBuZXN0aW5nIG9mIChzdWItKWNvbGxlY3Rpb24gcm91dGVzLlxuICAgICAgICByZXR1cm4gYCR7cmVzb3VyY2UucGF0aH0vJHtyZXNvdXJjZS5pZH1gXG4gICAgICB9LFxuXG4gICAgICB1cGxvYWQocmVzb3VyY2UpIHtcbiAgICAgICAgLy8gRGl0byBTZXJ2ZXIgaGFuZGxlcyB1cGxvYWQgcm91dGVzIG9uIHRoZSBjb2xsZWN0aW9uIHJlc291cmNlOlxuICAgICAgICByZXR1cm4gYCR7dGhpcy5jb2xsZWN0aW9uKHJlc291cmNlLnBhcmVudCl9L3VwbG9hZC8ke3Jlc291cmNlLnBhdGh9YFxuICAgICAgfSxcblxuICAgICAgLi4uYXBpLnJlc291cmNlc1xuICAgIH1cblxuICAgIC8vIEFsbG93IG92ZXJyaWRpbmcgLyBleHRlbmRpbmcgb2YgaGVhZGVyczpcbiAgICAvLyBhcGkuaGVhZGVycyA9IHtcbiAgICAvLyAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAvLyB9XG4gICAgYXBpLmhlYWRlcnMgPSB7XG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgLi4uYXBpLmhlYWRlcnNcbiAgICB9XG5cbiAgICBpZiAoaXNTdHJpbmcoZWwpKSB7XG4gICAgICBlbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWwpXG4gICAgfVxuXG4gICAgY29uc3QgYXBwID0gKHRoaXMuYXBwID0gY3JlYXRlQXBwKHtcbiAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgRGl0b1Jvb3QsXG4gICAgICAgIFZ1ZU5vdGlmaWNhdGlvbnMsXG4gICAgICAgIC8vIFRoaXMgbWF5IG9ubHkgYmUgbmVlZGVkIHRvIGF2b2lkIHRyZWUtc2hhY2tpbmcgb2YgdGhlc2UgY29tcG9uZW50cyxcbiAgICAgICAgLy8gc2luY2UgdGhleSBhY3R1YWxseSBoYW5kbGUgcmVnaXN0cnkgaW50ZXJuYWxseSBhbHJlYWR5LlxuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBvbmNlIHdlIGhhdmUgYSBiZXR0ZXIgc29sdXRpb24uXG4gICAgICAgIC4uLmNvbXBvbmVudHMsXG4gICAgICAgIC4uLnR5cGVzXG4gICAgICB9LFxuXG4gICAgICAvLyBNb3N0IGluamVjdHMgYXJlIGRlZmluZWQgYXMgZnVuY3Rpb25zLCB0byBwcmVzZXJ2ZSByZWFjdGl2ZW5lc3MgYWNyb3NzXG4gICAgICAvLyBwcm92aWRlL2luamVjdCwgc2VlOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS9pc3N1ZXMvNzAxNyNpc3N1ZWNvbW1lbnQtNDgwOTA2NjkxXG4gICAgICBwcm92aWRlOiB7XG4gICAgICAgIGFwaSxcbiAgICAgICAgLy8gQSBkZWZhdWx0IGxpc3Qgb2YgdmVyYnMgYXJlIHByb3ZpZGVkIGJ5ICR2ZXJicygpIGFuZCBjYW4gYmVcbiAgICAgICAgLy8gb3ZlcnJpZGRlbiBhdCBhbnkgcG9pbnQgaW4gdGhlIGNvbXBvbmVudCBoaWVyYXJjaHkuXG4gICAgICAgICR2ZXJiczogKCkgPT4gdmVyYnMsXG4gICAgICAgIC8vIFByb3ZpZGUgZGVmYXVsdHMgc28gRGl0b01peGluIGNhbiBpbmplY3QgdGhlbSBmb3IgYWxsIGNvbXBvbmVudHM6XG4gICAgICAgIC8vICAgaW5qZWN0OiBbICAnJGlzUG9wdWxhdGVkJywgJyRzY2hlbWFDb21wb25lbnQnLCAnJHJvdXRlQ29tcG9uZW50JyBdXG4gICAgICAgICR2aWV3czogKCkgPT4ge30sXG4gICAgICAgICRpc1BvcHVsYXRlZDogKCkgPT4gdHJ1ZSxcbiAgICAgICAgJHBhcmVudENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNjaGVtYUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNjaGVtYVBhcmVudENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHJvdXRlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkZGF0YUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHJlc291cmNlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkZGlhbG9nQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcGFuZWxDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHJlbmRlcjogKCkgPT5cbiAgICAgICAgY3JlYXRlRWxlbWVudChEaXRvUm9vdCwge1xuICAgICAgICAgIHJlZjogJ3Jvb3QnLFxuICAgICAgICAgIGNsYXNzOiBkaXRvLnNldHRpbmdzLnJvb3RDbGFzcyxcbiAgICAgICAgICB1bnJlc29sdmVkVmlld3M6IHZpZXdzLFxuICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgfSlcbiAgICB9KSlcblxuICAgIGFwcC51c2UoVnVlTm90aWZpY2F0aW9ucywge1xuICAgICAgbmFtZTogJ25vdGlmeScsXG4gICAgICBjb21wb25lbnROYW1lOiAnVnVlTm90aWZpY2F0aW9ucydcbiAgICB9KVxuXG4gICAgYXBwLmRpcmVjdGl2ZSgncmVzaXplJywgUmVzaXplRGlyZWN0aXZlKVxuXG4gICAgYXBwLnVzZShcbiAgICAgIGNyZWF0ZVJvdXRlcih7XG4gICAgICAgIC8vIFN0YXJ0IHdpdGggYSBjYXRjaC1hbGwgcm91dGUsIHRvIGJlIHJlcGxhY2VkIGJ5IHRoZSBhY3R1YWwgcm91dGVzXG4gICAgICAgIC8vIG9uY2UgdGhlIHNjaGVtYXMgYXJlIGxvYWRlZCwgdG8gcHJldmVudCB2dWUtcm91dGVyIGZyb20gY29tcGxhaW5pbmcsXG4gICAgICAgIC8vIHNlZTogYHJlc29sdmVWaWV3cygpYCBpbiBgRGl0b1Jvb3RgIGZvciB0aGUgYWN0dWFsIHJvdXRlIHNldHVwLlxuICAgICAgICByb3V0ZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnY2F0Y2gtYWxsJyxcbiAgICAgICAgICAgIHBhdGg6ICcvOl8oLiopJyxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IHt9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBoaXN0b3J5OiBjcmVhdGVXZWJIaXN0b3J5KGRpdG8uYmFzZSksXG4gICAgICAgIGxpbmtBY3RpdmVDbGFzczogJycsXG4gICAgICAgIGxpbmtFeGFjdEFjdGl2ZUNsYXNzOiAnJ1xuICAgICAgfSlcbiAgICApXG5cbiAgICBlbC5jbGFzc0xpc3QuYWRkKCdkaXRvLWFwcCcpXG4gICAgYXBwLm1vdW50KGVsKVxuICB9XG5cbiAgcmVnaXN0ZXIodHlwZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcih0eXBlLCBvcHRpb25zKVxuICB9XG59XG5cbmNsYXNzIFJlcXVlc3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IocmVzcG9uc2UpIHtcbiAgICBzdXBlcihcbiAgICAgIGBSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlOiAke3Jlc3BvbnNlLnN0YXR1c30gKCR7XG4gICAgICAgIHJlc3BvbnNlLnN0YXR1c1RleHRcbiAgICAgIH0pYFxuICAgIClcbiAgICB0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2VcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiByZXF1ZXN0KGFwaSwge1xuICB1cmwsXG4gIG1ldGhvZCA9ICdnZXQnLFxuICAvLyBUT0RPOiBgcmVxdWVzdC5wYXJhbXNgIHdhcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBgcXVlcnlgIG9uIDIwMjItMTEtMDEsXG4gIC8vIHJlbW92ZSBvbmNlIG5vdCBpbiB1c2UgYW55d2hlcmUgYW55IG1vcmUuXG4gIHBhcmFtcyA9IG51bGwsXG4gIHF1ZXJ5ID0gcGFyYW1zIHx8IG51bGwsXG4gIGhlYWRlcnMgPSBudWxsLFxuICBkYXRhID0gbnVsbFxufSkge1xuICBpZiAocGFyYW1zKSB7XG4gICAgZGVwcmVjYXRlKFxuICAgICAgYHJlcXVlc3QucGFyYW1zIGlzIGRlcHJlY2F0ZWQuIFVzZSBhY3Rpb24ubWV0aG9kIGFuZCBhY3Rpb24ucGF0aCBpbnN0ZWFkLmBcbiAgICApXG4gIH1cblxuICBjb25zdCBpc0FwaVVybCA9IGFwaS5pc0FwaVVybCh1cmwpXG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChhcGkuZ2V0QXBpVXJsKHsgdXJsLCBxdWVyeSB9KSwge1xuICAgIG1ldGhvZDogbWV0aG9kLnRvVXBwZXJDYXNlKCksXG4gICAgLi4uKGRhdGEgJiYgeyBib2R5OiBKU09OLnN0cmluZ2lmeShkYXRhKSB9KSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAuLi4oaXNBcGlVcmwgJiYgYXBpLmhlYWRlcnMpLFxuICAgICAgLi4uaGVhZGVyc1xuICAgIH0sXG4gICAgY3JlZGVudGlhbHM6XG4gICAgICBpc0FwaVVybCAmJiBhcGkuY29ycz8uY3JlZGVudGlhbHNcbiAgICAgICAgPyAnaW5jbHVkZSdcbiAgICAgICAgOiAnc2FtZS1vcmlnaW4nXG4gIH0pXG5cbiAgaWYgKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKT8uaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgIHJlc3BvbnNlLmRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgfVxuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgUmVxdWVzdEVycm9yKHJlc3BvbnNlKVxuICB9XG4gIHJldHVybiByZXNwb25zZVxufVxuXG5mdW5jdGlvbiBpc0FwaVVybChhcGksIHVybCkge1xuICByZXR1cm4gIWlzQWJzb2x1dGVVcmwodXJsKSB8fCB1cmwuc3RhcnRzV2l0aChhcGkudXJsKVxufVxuXG5mdW5jdGlvbiBnZXRBcGlVcmwoYXBpLCB7IHVybCwgcXVlcnkgfSkge1xuICBpZiAoIWlzQWJzb2x1dGVVcmwodXJsKSkge1xuICAgIHVybCA9IGNvbWJpbmVVcmxzKGFwaS51cmwsIHVybClcbiAgfVxuICAvLyBTdXBwb3J0IG9wdGlvbmFsIHF1ZXJ5IHBhcmFtZXRlcnMsIHRvIGJlIGFyZSBhZGRlZCB0byB0aGUgVVJMLlxuICBjb25zdCBzZWFyY2ggPSBmb3JtYXRRdWVyeShxdWVyeSlcbiAgcmV0dXJuIHNlYXJjaCA/IGAke3VybH0/JHtzZWFyY2h9YCA6IHVybFxufVxuXG5mdW5jdGlvbiBjb21iaW5lVXJscyhiYXNlVXJsLCByZWxhdGl2ZVVybCkge1xuICAvLyBVc2Ugc2FtZSBhcHByb2FjaCBhcyBheGlvcyBgY29tYmluZVVSTHMoKWAgdG8gam9pbiBiYXNlVXJsICYgcmVsYXRpdmVVcmw6XG4gIHJldHVybiBgJHtiYXNlVXJsLnJlcGxhY2UoL1xcLyskLywgJycpfS8ke3JlbGF0aXZlVXJsLnJlcGxhY2UoL15cXC8rLywgJycpfWBcbn1cbiJdLCJuYW1lcyI6WyJhcHBTdGF0ZSIsInJlYWN0aXZlIiwiYXBwZW5kRGF0YVBhdGgiLCJkYXRhUGF0aCIsInRva2VuIiwicGFyc2VQYXJlbnREYXRhUGF0aCIsInBhdGgiLCJwYXJzZURhdGFQYXRoIiwicGFyc2VJdGVtRGF0YVBhdGgiLCJuZXN0ZWQiLCJnZXRJdGVtRGF0YVBhdGgiLCJub3JtYWxpemVEYXRhUGF0aCIsInBhcnNlUGFyZW50SXRlbURhdGFQYXRoIiwiaXNJbnRlZ2VyIiwiZ2V0UGFyZW50SXRlbURhdGFQYXRoIiwiZ2V0SXRlbSIsInJvb3RJdGVtIiwiZ2V0VmFsdWVBdERhdGFQYXRoIiwiZ2V0UGFyZW50SXRlbSIsImdldExhc3REYXRhUGF0aFRva2VuIiwiZ2V0TGFzdERhdGFQYXRoTmFtZSIsImdldExhc3REYXRhUGF0aEluZGV4IiwiaW5kZXgiLCJ0ZW1wb3JhcnlJZCIsInNldFRlbXBvcmFyeUlkIiwiZGF0YSIsImlkS2V5IiwiaXNUZW1wb3JhcnlJZCIsImlkIiwiaXNSZWZlcmVuY2UiLCJoYXNPd25Qcm9wZXJ0eSIsImNvbnRleHRzIiwiZ2V0IiwiY29udGV4dCIsImtleSIsImRlZmF1bHRWYWx1ZSIsIm9iamVjdCIsInRvUmF3IiwidmFsdWUiLCJpc0Z1bmN0aW9uIiwic2V0IiwiRGl0b0NvbnRleHQiLCJjb21wb25lbnQiLCJpdGVtIiwib3B0aW9ucyIsImxvY2F0aW9uIiwicmVzb3VyY2UiLCJFbWl0dGVyTWl4aW4iLCJldmVudCIsImNhbGxiYWNrIiwiaXNBcnJheSIsImV2IiwiaXNQbGFpbk9iamVjdCIsImxpc3RlbmVycyIsImNhbGxiYWNrcyIsIm9uIiwiYXJncyIsImVudHJ5IiwiX2EiLCJjYiIsInF1ZXVlIiwicmVzb2x2ZSIsIm5leHQiLCJyZXN1bHQiLCJyZXMiLCJlcnJvciIsInRhcmdldCIsImNyZWRpdGNhcmQiLCJpc0NyZWRpdENhcmQiLCJkZWNpbWFscyIsIm1hdGNoIiwiZW1haWwiLCJpc0VtYWlsIiwiaG9zdG5hbWUiLCJpc0hvc3RuYW1lIiwiZG9tYWluIiwiaXNEb21haW4iLCJpbnRlZ2VyIiwibWF4IiwibWluIiwicGFzc3dvcmQiLCJyYW5nZSIsInJlcXVpcmVkIiwic2V0dGluZ3MiLCJ1cmwiLCJpc1VybCIsIlZhbGlkYXRpb25NaXhpbiIsIm5vdGlmeSIsImlzVmFsaWQiLCJydWxlIiwic2V0dGluZyIsInZhbGlkYXRvciIsInZhbGlkYXRpb25zIiwidmFsaWRhdGUiLCJtZXNzYWdlIiwiYWRkTGFiZWwiLCJlcnJvcnMiLCJmb2N1cyIsImdldFNjaGVtYUFjY2Vzc29yIiwia2V5T3JEYXRhUGF0aCIsInR5cGUiLCJkZWYiLCJpc1N0cmluZyIsIm5hbWUiLCJnZXRTdG9yZUFjY2Vzc29yIiwiVHlwZU1peGluIiwiY29tcHV0ZVZhbHVlIiwiZm9ybWF0IiwicGFyc2UiLCJzY2hlbWFDb21wb25lbnQiLCJldmVudHMiLCJjYW1lbGl6ZSIsIm5hdGl2ZUZpZWxkIiwidGV4dEZpZWxkIiwiYXR0cmlidXRlcyIsImFkZCIsIm9uRm9jdXMiLCJvbkJsdXIiLCJvbklucHV0Iiwib25DaGFuZ2UiLCJlbGVtZW50IiwiYXNBcnJheSIsIl9iIiwidWlkTWFwIiwidWlkIiwiZ2V0VWlkIiwiaXRlbUlkIiwiU2NoZW1hR3JhcGgiLCJfX3B1YmxpY0ZpZWxkIiwiZGVmYXVsdHMiLCJzdWJHcmFwaCIsInBhcnQiLCJzY2hlbWEiLCJyZWxhdGVkRGF0YVBhdGgiLCJuYW5vaWQiLCJmbGF0dGVuIiwiZ3JhcGgiLCJlbnRyaWVzIiwiJHNldHRpbmdzIiwic3ViS2V5Iiwic291cmNlU2NoZW1hIiwiY2xpcGJvYXJkIiwiaW50ZXJuYWwiLCJyZWxhdGVkIiwicmVmZXJlbmNlIiwic291cmNlIiwicmVsYXRpb24iLCJ2YWx1ZXMiLCJyZW1vdmVJZCIsInJlZmVyZW5jZUlkIiwicmVmS2V5IiwicmV2VmFsdWUiLCJ0eXBlQ2hlY2tlcnMiLCJpc0Jvb2xlYW4iLCJpc051bWJlciIsImlzRGF0ZSIsImlzT2JqZWN0IiwiaXNSZWdFeHAiLCJ0b0Jvb2xlYW4iLCJ0b051bWJlciIsInRvU3RyaW5nIiwidG9EYXRlIiwidG9BcnJheSIsInRvT2JqZWN0IiwidG9SZWdFeHAiLCJ0eXBlQ29udmVydGVycyIsImlzTWF0Y2hpbmdUeXBlIiwidHlwZXMiLCJjb252ZXJ0VHlwZSIsImNvbnZlcnRlciIsInR5cGVDb21wb25lbnRzIiwidW5rbm93blR5cGVSZXBvcnRlZCIsInJlZ2lzdGVyVHlwZUNvbXBvbmVudCIsImdldFR5cGVDb21wb25lbnQiLCJhbGxvd051bGwiLCJpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyIsInNjaGVtYXMiLCJpc1NpbmdsZUNvbXBvbmVudFZpZXciLCJpc1NjaGVtYSIsIml0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzIiwiZ2V0VGFiU2NoZW1hcyIsImZpbmROZXN0ZWRTY2hlbWFDb21wb25lbnQiLCJzb21lTmVzdGVkU2NoZW1hQ29tcG9uZW50IiwiaGFzTmVzdGVkU2NoZW1hQ29tcG9uZW50cyIsImlzRm9ybSIsImlzVmlldyIsImlzVGFiIiwiaXNQYW5lbCIsImdldFNjaGVtYUlkZW50aWZpZXIiLCJyZXNvbHZlU2NoZW1hIiwidW53cmFwTW9kdWxlIiwiaXNQcm9taXNlIiwiaXNNb2R1bGUiLCJrZXlzIiwicmVzb2x2ZVNjaGVtYXMiLCJ1bnJlc29sdmVkU2NoZW1hcyIsInJlc29sdmVJdGVtIiwibWFwQ29uY3VycmVudGx5IiwicmVzb2x2ZVNjaGVtYUNvbXBvbmVudCIsIm1hcmtSYXciLCJEaXRvTWl4aW4iLCJyZXNvbHZlU2NoZW1hQ29tcG9uZW50cyIsInByb2Nlc3NTY2hlbWFDb21wb25lbnRzIiwiYXBpIiwicm91dGVzIiwibGV2ZWwiLCJwcm9taXNlcyIsInByb2Nlc3MiLCJyZWxhdGl2ZUxldmVsIiwicHJvY2Vzc1NjaGVtYUNvbXBvbmVudCIsImdldFBhbmVsU2NoZW1hcyIsInByb2Nlc3NTY2hlbWFEZWZhdWx0cyIsInBhbmVsIiwiZ2V0VHlwZU9wdGlvbnMiLCJwcm9jZXNzVmlldyIsInByb2Nlc3NSb3V0ZVNjaGVtYSIsInByb2Nlc3NOZXN0ZWRTY2hlbWFzIiwiY2hpbGRyZW4iLCJtZXJnZSIsInByb2Nlc3NOZXN0ZWRTY2hlbWFEZWZhdWx0cyIsImZvcm1zIiwiZ2V0Rm9ybVNjaGVtYXMiLCJmb3JtIiwicHJvY2Vzc0Zvcm1zIiwiY29tcG9uZW50cyIsInByb2Nlc3NGb3JtIiwicHJvY2Vzc1RhYiIsInByb2Nlc3NQYW5lbCIsInRhYnMiLCJwYW5lbHMiLCJ0YWIiLCJoYXNGb3JtU2NoZW1hIiwiaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyIsImdldFZpZXdGb3JtU2NoZW1hIiwidmlldyIsInZpZXdTY2hlbWEiLCJnZXRWaWV3U2NoZW1hIiwiZ2V0Vmlld0VkaXRQYXRoIiwibW9kaWZ5Rm9ybSIsImNvbXBhY3QiLCJnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3JtcyIsImdldEl0ZW1Gb3JtU2NoZW1hIiwiaXNDb21wYWN0IiwiaXNJbmxpbmVkIiwiaXNOZXN0ZWQiLCJvbWl0UGFkZGluZyIsImtlZXBBbGlnbmVkIiwiZ2V0U2NoZW1hVmFsdWUiLCJjb252ZXJ0ZWQiLCJzaG91bGRSZW5kZXJTY2hlbWEiLCJnZXREZWZhdWx0VmFsdWUiLCJjbG9uZSIsImlnbm9yZU1pc3NpbmdWYWx1ZSIsInR5cGVPcHRpb25zIiwic2V0RGVmYXVsdFZhbHVlcyIsInByb2Nlc3NTY2hlbWFEYXRhIiwicm9vdERhdGEiLCJjb21wdXRlIiwiY2xvbmVJdGVtIiwiY29weSIsIm9yZGVyS2V5IiwicHJvY2Vzc0RhdGEiLCJzY2hlbWFPbmx5IiwicHJvY2Vzc2VkRGF0YSIsIndyYXBQcmltaXRpdmVzIiwiYSIsImIiLCJpZDEiLCJpZDIiLCJleGNsdWRlIiwiZ2V0Q29udGV4dCIsInByb2Nlc3NWYWx1ZSIsInByb2Nlc3NCZWZvcmUiLCJwcm9jZXNzQWZ0ZXIiLCJwcm9jZXNzQ29tcG9uZW50cyIsImdldERhdGFQYXRoIiwiY29tcG9uZW50U2NoZW1hIiwiY29tcG9uZW50RGF0YVBhdGgiLCJwcm9jZXNzSXRlbSIsInByb2Nlc3NlZEl0ZW0iLCJnZXROYW1lZFNjaGVtYXMiLCJhcnJheSIsInRvU2NoZW1hIiwiZ2V0QnV0dG9uU2NoZW1hcyIsImJ1dHRvbnMiLCJnZXRUeXBlIiwic2NoZW1hT3JUeXBlIiwiZ2V0U291cmNlVHlwZSIsImdldFBhbmVsRW50cnkiLCJ0YWJDb21wb25lbnQiLCJnZXRQYW5lbEVudHJpZXMiLCJwYW5lbFNjaGVtYXMiLCJwYW5lbEVudHJpZXMiLCJnZXRBbGxQYW5lbEVudHJpZXMiLCJwYW5lbFNjaGVtYSIsImlzT2JqZWN0U291cmNlIiwiaXNMaXN0U291cmNlIiwiZ2V0SXRlbUlkIiwiZ2V0SXRlbVVpZCIsImhhc1Jlc291cmNlIiwiZ2V0UmVzb3VyY2UiLCJwYXJlbnQiLCJkZWZzIiwiZ2V0TWVtYmVyUmVzb3VyY2UiLCJwaWNrQnkiLCJuZXh0VWlkIiwibGFiZWxpemUiLCJ2ZXJiIiwicXVlcnkiLCJtZXRob2QiLCJjaGVja1VzZXIiLCJyZXNwb25zZSIsImVxdWFscyIsImNhY2hlIiwiY2FjaGVQYXJlbnQiLCJsb2FkQ2FjaGUiLCJjYWNoZUtleSIsImxvY2FsZSIsImJvZHkiLCJnZXRDb21wdXRlZEFjY2Vzc29yIiwiZ2V0dGVyIiwiY29tcHV0ZWQiLCJhY2Nlc3NvciIsIndhdGNoIiwiaGFuZGxlcnMiLCJleHByIiwiYWRkRXZlbnQiLCJoeXBoZW5hdGUiLCJoYXNMaXN0ZW5lcnMiLCJwYXJlbnRIYXNMaXN0ZW5lcnMiLCJwYXJhbXMiLCJyZXNvbHZlTWVyZ2VkT3B0aW9ucyIsIm1peGlucyIsIm1lcmdlT3B0aW9ucyIsInRvIiwiZnJvbSIsIm1peGluIiwiZGl0b09wdGlvbktleXMiLCJEaXRvQ29tcG9uZW50IiwiZGVmaW5pdGlvbiIsIkRpdG9Vc2VyIiwicm9sZXMiLCJyb2xlIiwiU2NoZW1hUGFyZW50TWl4aW4iLCJzY2hlbWFDb21wb25lbnRzIiwiVmFsaWRhdG9yTWl4aW4iLCJpdCIsIlJvdXRlTWl4aW4iLCJyb3V0ZUNvbXBvbmVudCIsIm1hdGNoZWQiLCJpIiwicmVjb3JkIiwiYnJlYWRjcnVtYiIsInJvdXRlQ29tcG9uZW50cyIsIm9rIiwidGVtcGxhdGVQYXRoIiwicm9vdFBhdGgiLCJnZXRDb21tb25QcmVmaXgiLCJpc0xvYWRpbmciLCJjb3B5RGF0ZSIsImRhdGUiLCJ5ZWFyIiwibW9udGgiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwibWlsbGlzZWNvbmQiLCJfc2ZjX21haW4iLCJ3ZWVrZGF5TmFtZXMiLCJtb250aE5hbWVzIiwiZ2V0TG9jYWxlTmFtZXMiLCJtb2RlIiwib3ZlcnJpZGVzIiwic3RlcCIsImN1cnJlbnRWYWx1ZSIsInN0YXRlIiwiaG9yIiwidmVyIiwiZW50ZXIiLCJjdXJyZW50TW9kZSIsInN0YXJ0WWVhciIsImZpcnN0RGF5V2VlayIsIm51bURheXMiLCJwcmV2TW9udGgiLCJwcmV2TW9udGhOdW1EYXlzIiwidG9kYXkiLCJpc0RheSIsIm5leHRNb250aE5lZWQiLCJuZXh0TW9udGgiLCJsb2NhbGVOYW1lcyIsIm5hbWVzIiwiYWRkRXZlbnRzIiwiZ2V0S2V5IiwiZ2V0S2V5TmF2aWdhdGlvbiIsImNsYXNzZXMiLCJzaG93IiwidHJpZ2dlciIsInBvcHVwIiwiZWwiLCJib3VuZHMiLCJ0cmlnZ2VyTGVmdCIsInRyaWdnZXJUb3AiLCJ0cmlnZ2VyV2lkdGgiLCJ0cmlnZ2VySGVpZ2h0IiwicG9wdXBXaWR0aCIsInBvcHVwSGVpZ2h0IiwicGFydDEiLCJwYXJ0MiIsIndpbldpZHRoIiwid2luSGVpZ2h0IiwibGVmdCIsInRvcCIsInRyaWdnZXJCb3VuZHMiLCJzaXplIiwiZ2V0TGVuZ3RoIiwiVHJpZ2dlciIsIkNhbGVuZGFyIiwiSW5wdXRGaWVsZCIsImRlZmF1bHRGb3JtYXRzIiwic2Nyb2xsVG8iLCJkdXJhdGlvbiIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInBlclRpY2siLCJzZXRTZWxlY3Rpb24iLCJmaWVsZCIsInN0YXJ0IiwiZW5kIiwiZm9yY2UiLCJzY3JvbGwiLCJyZWYiLCJsaW5lSGVpZ2h0Iiwic2VsZWN0ZWQiLCJsZW5ndGgiLCJEYXRlUGlja2VyIiwiVGltZVBpY2tlciIsInBhZ2UiLCJwYWdlU2l6ZSIsImN1cnJlbnRQYWdlU2l6ZSIsInNob3dQcmV2Iiwic2hvd05leHQiLCJ0b3RhbCIsImN1cnJlbnRQYWdlIiwic2hvd0xlbmd0aCIsIm51bVBhZ2VzIiwicGFnZVJhbmdlIiwiY2hlY2tlZCIsImRpc2FibGVkIiwidW5jaGVja2VkIiwibW9kZWxWYWx1ZSIsIlRyYW5zaXRpb25IZWlnaHQiLCJlbmFibGVkIiwic2xvdHMiLCJjcmVhdGVFbGVtZW50IiwiVHJhbnNpdGlvbiIsInByb3BzIiwic2V0U3R5bGUiLCJzdHlsZSIsImZvcmNlUmVwYWludCIsIndpZHRoIiwiaGVpZ2h0IiwiVXNlRm9jdXNUcmFwIiwiZGVmaW5lQ29tcG9uZW50IiwidHJhcCIsImFjdGl2YXRlIiwiZGVhY3RpdmF0ZSIsInVucmVmRWxlbWVudCIsImNyZWF0ZUZvY3VzVHJhcCIsIm9uU2NvcGVEaXNwb3NlIiwiaCIsImRpYWxvZ0RhdGEiLCJEb21NaXhpbiIsInJlbW92ZSIsImhhbmRsZXIiLCJEaXRvRGlhbG9nIiwidGlwcHlEZWxlZ2F0ZSIsImVyciIsInRpdGxlIiwidGV4dCIsImxvZyIsInN0cmlwVGFncyIsIm5vdGlmaWNhdGlvbnMiLCJkdXJhdGlvbkZhY3RvciIsInJlamVjdCIsImRpYWxvZ0lkIiwiYWRkaXRpb25hbENvbXBvbmVudHMiLCJyZWRpcmVjdEFmdGVyTG9naW4iLCJsb2dpbkRhdGEiLCJ1c2VyIiwiRGl0b1ZpZXciLCJmdWxsUGF0aCIsImFkZFJvdXRlcyIsInJvdXRlciIsInJlbW92ZXJzIiwicm91dGUiLCJyZW1vdmVSb3V0ZSIsIkRpdG9TcGlubmVyIiwiY29sb3IiLCJQdWxsZG93bk1peGluIiwic3RhcnRUaW1lIiwib3BlbiIsImNvbnRlbnQiLCJhc09iamVjdCIsImxhYmVsIiwiSXRlbU1peGluIiwiZXh0ZW5kZWQiLCJpdGVtTGFiZWwiLCJmb3JtTGFiZWwiLCJnZXRGb3JtTGFiZWwiLCJwcmVmaXgiLCJzdWZmaXgiLCJjb2x1bW5zIiwiaGFkTGFiZWwiLCJwYW5lIiwiZmlyc3QiLCJkZWZhdWx0VGFiIiwiaGFzaCIsInNlbGVjdGVkVGFiIiwiZGF0YVBhdGhPck5hbWUiLCJleHBhbmQiLCJjb21wb25lbnRzQnlEYXRhUGF0aCIsImRhdGFQYXRocyIsImNoZWNrIiwidW5tYXRjaGVkIiwiZXJycyIsImZ1bGxEYXRhUGF0aCIsImRhdGFQYXRoUGFydHMiLCJmb3VuZCIsInByb3BlcnR5Iiwic3ViQ29tcG9uZW50cyIsInJlZ2lzdHJ5IiwiZW50cmllc0J5RGF0YVBhdGgiLCJfd2l0aERpcmVjdGl2ZXMiLCJfb3BlbkJsb2NrIiwiX2NyZWF0ZUVsZW1lbnRCbG9jayIsIl9GcmFnbWVudCIsIl9jdHgiLCJuZXN0ZWREYXRhUGF0aCIsInN0b3JlIiwiX2hvaXN0ZWRfMSIsIl9jcmVhdGVCbG9jayIsIl9jb21wb25lbnRfRGl0b0NvbnRhaW5lciIsIl9kaXJlY3RpdmVfcmVzaXplIiwiX2hvaXN0ZWRfMiIsInkiLCJwb3NpdGlvbnMiLCJmaW5kTmV4dFBvc2l0aW9uIiwiZmFsbGJhY2siLCJwb3NpdGlvbiIsInBhcnNlRnJhY3Rpb24iLCJkaXZpZGVuZCIsImRpdmlzb3IiLCJjb250YWluZXJDbGFzcyIsImJhc2lzIiwiZ3JvdyIsInNocmluayIsImJhc2lzSXNBdXRvIiwiaGFzVk5vZGVDb250ZW50Iiwidm5vZGUiLCJDb21tZW50IiwiaGFzU2xvdENvbnRlbnQiLCJzbG90IiwidXNlU2xvdHMiLCJidXR0b24iLCJjYXBpdGFsaXplIiwiY2xpcGJvYXJkRGF0YSIsInBhc3RlIiwicmVwb3J0IiwianNvbiIsIl9kIiwiX2MiLCJkZWluZGVudCIsIiRzY2hlbWEiLCJfZSIsIkxvYWRpbmdNaXhpbiIsInVwZGF0ZVJvb3QiLCJ1cGRhdGVWaWV3IiwiUmVzb3VyY2VNaXhpbiIsImFtb3VudCIsInZlcmJzIiwiY2xlYXIiLCJsb2FkaW5nT3B0aW9ucyIsInJlcXVlc3QiLCJzZXREYXRhIiwib25TdWNjZXNzIiwib25FcnJvciIsIm5vdGlmeVN1Y2Nlc3MiLCJub3RpZnlFcnJvciIsInJlc29sdmVQYXRoIiwiaXNDcmVhdGluZyIsInByb3ZpZGVzRGF0YSIsImRhdGFQYXJ0cyIsInBhdGhQYXJ0cyIsInJvdXRlUGFydHMiLCJsYXN0RGF0YVBhcnQiLCJsIiwiZGF0YVBhcnQiLCJwYXJhbSIsIm1haW5TY2hlbWFDb21wb25lbnQiLCJwcmVzZW50IiwiY2xvc2VGb3JtIiwiZ2V0VmVyYiIsImJ1dHRvblJlc291cmNlIiwic3VjY2VzcyIsIl9yZXNvdXJjZSIsIl9tZXRob2QiLCJEaXRvRm9ybSIsInNjb3BlIiwiUGFnaW5hdGlvbiIsIlNvcnRhYmxlTWl4aW4iLCJmb3JjZUZhbGxiYWNrIiwib2xkSW5kZXgiLCJuZXdJbmRleCIsImxpc3QiLCJwYWdpbmF0aW9uUmFuZ2UiLCJvZmZzZXQiLCJfbm9ybWFsaXplU3R5bGUiLCJfY2FjaGUiLCJfd2l0aE1vZGlmaWVycyIsIiRldmVudCIsIl9ub3JtYWxpemVDbGFzcyIsIl9jcmVhdGVFbGVtZW50Vk5vZGUiLCJfaG9pc3RlZF80IiwiX3RvRGlzcGxheVN0cmluZyIsIl9ob2lzdGVkXzUiLCJfaG9pc3RlZF83IiwiX21lcmdlUHJvcHMiLCJfaG9pc3RlZF84IiwiX3JlbmRlckxpc3QiLCJfY29tcG9uZW50X0RpdG9MYWJlbCIsIl9jcmVhdGVWTm9kZSIsIl9jb21wb25lbnRfRGl0b1RhYmxlQ2VsbCIsIl9jb21wb25lbnRfRGl0b0RyYWdnYWJsZSIsIl9jb21wb25lbnRfRGl0b1RyZWVJdGVtIiwiY2hpbGRyZW5TY2hlbWEiLCJjaGlsZHJlbkxpc3QiLCJlZGl0UGF0aCIsImNoaWxkcmVuT3BlbiIsIm51bUNoaWxkcmVuIiwiY3JlYXRhYmxlIiwiZWRpdGFibGUiLCJvcmRlciIsImNvbHVtbiIsInJlbmRlciIsImVzY2FwZUh0bWwiLCJfX2RlZlByb3AiLCJfX2dldE93blByb3BTeW1ib2xzIiwiX19oYXNPd25Qcm9wIiwiX19wcm9wSXNFbnVtIiwiX19kZWZOb3JtYWxQcm9wIiwib2JqIiwiX19zcHJlYWRWYWx1ZXMiLCJwcm9wIiwiX19vYmpSZXN0IiwidXNlU29ydGFibGUiLCJzb3J0YWJsZSIsImRvY3VtZW50IiwiZGVmYXVsdERvY3VtZW50IiwicmVzZXRPcHRpb25zIiwiZGVmYXVsdE9wdGlvbnMiLCJlIiwibW92ZUFycmF5RWxlbWVudCIsIlNvcnRhYmxlIiwic3RvcCIsInRyeU9uTW91bnRlZCIsInRyeU9uU2NvcGVEaXNwb3NlIiwidG9WYWx1ZSIsIm5leHRUaWNrIiwiVXNlU29ydGFibGUiLCJ1c2VWTW9kZWwiLCJEaXRvVk5vZGUiLCJEaXRvVHlwZUNvbXBvbmVudCQxIiwiRGl0b1R5cGVDb21wb25lbnQiLCJvbkNsaWNrIiwiRGF0YU1peGluIiwicmVzb2x2ZUNvdW50ZXIiLCJhc3luY0VudHJ5IiwicmVzb2x2ZWREYXRhIiwibG9hZCIsInRpbWVyIiwiT3B0aW9uc01peGluIiwiY29udmVydFZhbHVlIiwiY29udmVydCIsInNlYXJjaCIsImZpbHRlciIsImRlYm91bmNlIiwiZGVib3VuY2VBc3luYyIsIm9wdGlvbiIsImdyb3VwZWQiLCJyZXN1bHRzIiwiZ3JvdXAiLCJmaW5kT3B0aW9uIiwiZ3JvdXBCeSIsIm9wdGlvblZhbHVlIiwib3B0aW9uTGFiZWwiLCJwcm9jZXNzUmVsYXRlIiwiZmxhc2siLCJDb2RlRmxhc2siLCJjaGFuZ2VkIiwiaWdub3JlV2F0Y2giLCJpZ25vcmVVcGRhdGUiLCJzZXRDb2RlIiwiY29kZSIsInNldFZhbHVlIiwiU2tldGNoUGlja2VyIiwidGlueWNvbG9yIiwiZm9jdXNlZCIsIkRhdGVUaW1lUGlja2VyIiwiZm9ybWF0UXVlcnkiLCJ2YWwiLCJyZXBsYWNlUm91dGUiLCJTb3VyY2VNaXhpbiIsImRlZmF1bHRTb3J0IiwiZGlyZWN0aW9uIiwiZHJhZ2dhYmxlIiwiY29sbGFwc2libGUiLCJsaXN0RGF0YSIsIm9uQ29tcGxldGUiLCJvcGVuZWQiLCJjYWxsT25Db21wbGV0ZSIsImlubGluZWQiLCJtZXRhIiwiZm9ybU1ldGEiLCJjaGlsZFJvdXRlcyIsImdldFBhdGhXaXRoUGFyYW0iLCJzb3VyY2VQYXRoIiwiZm9ybVJvdXRlIiwiZmxhdFJvdXRlcyIsInN1YlJvdXRlcyIsImNoaWxkUm91dGUiLCJmaWx0ZXJDb21wb25lbnRzIiwiZGF0ZUZvcm1hdCIsImNyZWF0ZUZpbHRlcnNQYW5lbCIsImZpbHRlcnMiLCJwcm94eSIsInN0aWNreSIsImZpbHRlclNjaGVtYXMiLCJwYXJzZUZpbHRlcnNEYXRhIiwiY3JlYXRlRmlsdGVyc0NvbXBvbmVudHMiLCJjcmVhdGVGaWx0ZXJzQnV0dG9ucyIsImZvcm1hdEZpbHRlcnNEYXRhIiwic21hbGwiLCJjb21wcyIsImdldENvbXBvbmVudHNGb3JGaWx0ZXIiLCJmaWx0ZXJzRGF0YSIsIl9jb21wb25lbnRfRGl0b1RhYmxlSGVhZCIsIl9jb21wb25lbnRfRGl0b1NjaGVtYUlubGluZWQiLCJfcmVzb2x2ZUR5bmFtaWNDb21wb25lbnQiLCJfY29tcG9uZW50X0RpdG9FZGl0QnV0dG9ucyIsIl9ob2lzdGVkXzkiLCJnZXRMaXN0Q29tcG9uZW50IiwiZmlsdGVyc0RhdGFQYXRoIiwiRWRpdG9yQ29udGVudCIsIkljb24iLCJlZGl0b3IiLCJtYXJrQnV0dG9ucyIsImJhc2ljTm9kZUJ1dHRvbnMiLCJvdGhlck5vZGVCdXR0b25zIiwidG9vbEJ1dHRvbnMiLCJlbmFibGVSdWxlcyIsInNldFZhbHVlRGVib3VuY2VkIiwib25VcGRhdGUiLCJFZGl0b3IiLCJnZXRQb2ludCIsIngiLCJwcmV2WSIsIm1vdXNlbW92ZSIsImRpYWxvZ0NvbXBvbmVudCIsImdldE1hcmtBdHRyaWJ1dGVzIiwiaHJlZiIsIm1hcmtzIiwibm9kZXMiLCJ0b29scyIsIkRvY3VtZW50IiwiVGV4dCIsIlBhcmFncmFwaCIsIkJvbGQiLCJJdGFsaWMiLCJVbmRlcmxpbmUiLCJTdHJpa2UiLCJTbWFsbCIsIkNvZGUiLCJMaW5rV2l0aFRpdGxlIiwiQmxvY2txdW90ZSIsIkNvZGVCbG9jayIsIkhhcmRCcmVhayIsIkhlYWRpbmciLCJIb3Jpem9udGFsUnVsZSIsIkxpc3RJdGVtIiwiQnVsbGV0TGlzdCIsIk9yZGVyZWRMaXN0IiwiSGlzdG9yeSIsImV4dGVuc2lvbiIsInNldHRpbmdzTmFtZSIsImRlc2NyaXB0aW9ucyIsImFkZEJ1dHRvbiIsImljb24iLCJpZ25vcmVBY3RpdmUiLCJkZXNjcmlwdGlvbiIsInNldHRpbmdOYW1lIiwidW5kZXJzY29yZSIsImF0dHJpYnV0ZSIsIk1hcmsiLCJjb21tYW5kcyIsIkxpbmsiLCJub2RlIiwiX2NvbXBvbmVudF9WdWVNdWx0aXNlbGVjdCIsIlZ1ZU11bHRpc2VsZWN0IiwicGxhY2Vob2xkZXIiLCJzZWFyY2hhYmxlIiwidGFnZ2FibGUiLCJ0YWciLCJOdW1iZXJNaXhpbiIsIlN3aXRjaEJ1dHRvbiIsIlRleHRNaXhpbiIsIm1hc2tlZFBhc3N3b3JkIiwiaGFzRWRpdGFibGVGb3JtcyIsImZvcm1hdEZpbGVTaXplIiwiZmlsZXNpemUiLCJWdWVVcGxvYWQiLCJhc0ZpbGVzIiwiYWNjZXB0IiwibWF4U2l6ZSIsInBhcnNlRmlsZVNpemUiLCJmaWxlIiwibmV3RmlsZSIsIm9sZEZpbGUiLCJ4aHIiLCJmaWxlcyIsInVwbG9hZCIsIlJlc2l6ZURpcmVjdGl2ZSIsImJpbmRpbmciLCJvYnNlcnZlUmVzaXplIiwidW5vYnNlcnZlUmVzaXplIiwiT2JzZXJ2ZXIiLCJpc1Jlc2l6ZVN1cHBvcnRlZCIsIm9ic2VydmVycyIsImJveCIsImxvZ2dlZERlcHJlY2F0aW9ucyIsImRlcHJlY2F0ZSIsIkRpdG9BZG1pbiIsImRpdG8iLCJ2aWV3cyIsImdldEFwaVVybCIsImlzQXBpVXJsIiwidXNlcnMiLCJwYXJlbnRQYXRoIiwiYXBwIiwiY3JlYXRlQXBwIiwiRGl0b1Jvb3QiLCJWdWVOb3RpZmljYXRpb25zIiwiY3JlYXRlUm91dGVyIiwiY3JlYXRlV2ViSGlzdG9yeSIsIlJlcXVlc3RFcnJvciIsImhlYWRlcnMiLCJpc0Fic29sdXRlVXJsIiwiY29tYmluZVVybHMiLCJiYXNlVXJsIiwicmVsYXRpdmVVcmwiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLE1BQUFBLEtBQWVDLEdBQVM7QUFBQSxFQUN0QixPQUFPO0FBQUEsRUFDUCxpQkFBaUIsQ0FBRTtBQUFBLEVBQ25CLE1BQU07QUFBQSxFQUNO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QUNULE9BQUF0QixJQUFRc0IsS0FBVTtBQUFBLEVBQ2xCLFNBQUE0Z0IsSUFBVTtBQUFBLEVBQ1YsTUFBQTd6QixJQUFPO0FBQ1QsR0FBRzs7QUFDRCxFQUFJaVQsS0FDRjZmO0FBQUEsSUFDRTtBQUFBLEVBQ0Q7QUFHSCxRQUFNSyxJQUFXam9CLEVBQUksU0FBU3ZILENBQUcsR0FFM0JtTyxJQUFXLE1BQU0sTUFBTTVHLEVBQUksVUFBVSxFQUFFLEtBQUF2SCxHQUFLLE9BQUFnTyxFQUFLLENBQUUsR0FBRztBQUFBLElBQzFELFFBQVFDLEVBQU8sWUFBYTtBQUFBLElBQzVCLEdBQUk1UixLQUFRLEVBQUUsTUFBTSxLQUFLLFVBQVVBLENBQUk7SUFDdkMsU0FBUztBQUFBLE1BQ1AsR0FBSW16QixLQUFZam9CLEVBQUk7QUFBQSxNQUNwQixHQUFHMm9CO0FBQUEsSUFDSjtBQUFBLElBQ0QsYUFDRVYsT0FBWWx4QixJQUFBaUosRUFBSSxTQUFKLFFBQUFqSixFQUFVLGVBQ2xCLFlBQ0E7QUFBQSxFQUNWLENBQUc7QUFNRCxPQUpJZ0UsSUFBQTZMLEVBQVMsUUFBUSxJQUFJLGNBQWMsTUFBbkMsUUFBQTdMLEVBQXNDLFNBQVMsd0JBQ2pENkwsRUFBUyxPQUFPLE1BQU1BLEVBQVMsS0FBTSxJQUduQyxDQUFDQSxFQUFTO0FBQ1osVUFBTSxJQUFJOGhCLEdBQWE5aEIsQ0FBUTtBQUVqQyxTQUFPQTtBQUNUO0FBRUEsU0FBU3FoQixHQUFTam9CLEdBQUt2SCxHQUFLO0FBQzFCLFNBQU8sQ0FBQ213QixHQUFjbndCLENBQUcsS0FBS0EsRUFBSSxXQUFXdUgsRUFBSSxHQUFHO0FBQ3REO0FBRUEsU0FBU2dvQixHQUFVaG9CLEdBQUssRUFBRSxLQUFBdkgsR0FBSyxPQUFBZ08sRUFBSyxHQUFJO0FBQ3RDLEVBQUttaUIsR0FBY253QixDQUFHLE1BQ3BCQSxJQUFNb3dCLEdBQVk3b0IsRUFBSSxLQUFLdkgsQ0FBRztBQUdoQyxRQUFNdWxCLElBQVN5QixHQUFZaFosQ0FBSztBQUNoQyxTQUFPdVgsSUFBUyxHQUFHdmxCLEtBQU91bEIsTUFBV3ZsQjtBQUN2QztBQUVBLFNBQVNvd0IsR0FBWUMsR0FBU0MsR0FBYTtBQUV6QyxTQUFPLEdBQUdELEVBQVEsUUFBUSxRQUFRLEVBQUUsS0FBS0MsRUFBWSxRQUFRLFFBQVEsRUFBRTtBQUN6RTsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbNDYsODNdfQ==