@wavemaker/app-ng-runtime 11.4.0-next.26251 → 11.4.0-next.28151

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.
Files changed (52) hide show
  1. app-ng-runtime/build-task/bundles/index.umd.js +1 -1
  2. app-ng-runtime/build-task/bundles/index.umd.js.map +1 -1
  3. app-ng-runtime/build-task/esm2015/data/form/form-field/form-field.build.js +2 -2
  4. app-ng-runtime/build-task/fesm2015/index.js +1 -1
  5. app-ng-runtime/build-task/fesm2015/index.js.map +1 -1
  6. app-ng-runtime/components/basic/rich-text-editor/bundles/index.umd.js +2 -2
  7. app-ng-runtime/components/basic/rich-text-editor/bundles/index.umd.js.map +1 -1
  8. app-ng-runtime/components/basic/rich-text-editor/esm2015/rich-text-editor.component.js +3 -3
  9. app-ng-runtime/components/basic/rich-text-editor/fesm2015/index.js +2 -2
  10. app-ng-runtime/components/basic/rich-text-editor/fesm2015/index.js.map +1 -1
  11. app-ng-runtime/components/data/list/bundles/index.umd.js +11 -5
  12. app-ng-runtime/components/data/list/bundles/index.umd.js.map +1 -1
  13. app-ng-runtime/components/data/list/esm2015/list.component.js +10 -4
  14. app-ng-runtime/components/data/list/fesm2015/index.js +9 -3
  15. app-ng-runtime/components/data/list/fesm2015/index.js.map +1 -1
  16. app-ng-runtime/components/data/table/bundles/index.umd.js +2 -1
  17. app-ng-runtime/components/data/table/bundles/index.umd.js.map +1 -1
  18. app-ng-runtime/components/data/table/esm2015/table-filter.directive.js +3 -2
  19. app-ng-runtime/components/data/table/fesm2015/index.js +2 -1
  20. app-ng-runtime/components/data/table/fesm2015/index.js.map +1 -1
  21. app-ng-runtime/components/input/epoch/base-date-time.component.d.ts +4 -0
  22. app-ng-runtime/components/input/epoch/bundles/index.umd.js +25 -3
  23. app-ng-runtime/components/input/epoch/bundles/index.umd.js.map +1 -1
  24. app-ng-runtime/components/input/epoch/esm2015/base-date-time.component.js +26 -3
  25. app-ng-runtime/components/input/epoch/esm2015/date/date.component.js +1 -2
  26. app-ng-runtime/components/input/epoch/fesm2015/index.js +25 -3
  27. app-ng-runtime/components/input/epoch/fesm2015/index.js.map +1 -1
  28. app-ng-runtime/components/input/epoch/index.metadata.json +1 -1
  29. app-ng-runtime/mobile/core/bundles/index.umd.js +2 -1
  30. app-ng-runtime/mobile/core/bundles/index.umd.js.map +1 -1
  31. app-ng-runtime/mobile/core/esm2015/services/device.service.js +3 -2
  32. app-ng-runtime/mobile/core/fesm2015/index.js +2 -1
  33. app-ng-runtime/mobile/core/fesm2015/index.js.map +1 -1
  34. app-ng-runtime/mobile/runtime-dynamic/bundles/index.umd.js +3 -2
  35. app-ng-runtime/mobile/runtime-dynamic/bundles/index.umd.js.map +1 -1
  36. app-ng-runtime/mobile/runtime-dynamic/esm2015/services/live-sync.service.js +4 -3
  37. app-ng-runtime/mobile/runtime-dynamic/fesm2015/index.js +3 -2
  38. app-ng-runtime/mobile/runtime-dynamic/fesm2015/index.js.map +1 -1
  39. app-ng-runtime/package.json +1 -1
  40. app-ng-runtime/runtime/base/bundles/index.umd.js +1 -0
  41. app-ng-runtime/runtime/base/bundles/index.umd.js.map +1 -1
  42. app-ng-runtime/runtime/base/esm2015/services/prefab-manager.service.js +2 -1
  43. app-ng-runtime/runtime/base/fesm2015/index.js +1 -0
  44. app-ng-runtime/runtime/base/fesm2015/index.js.map +1 -1
  45. app-ng-runtime/scripts/datatable/datatable.js +31 -12
  46. app-ng-runtime/scripts/summernote/dist/summernote-lite.min.js +3 -3
  47. app-ng-runtime/variables/bundles/index.umd.js +5 -12
  48. app-ng-runtime/variables/bundles/index.umd.js.map +1 -1
  49. app-ng-runtime/variables/esm2015/constants/variables.constants.js +3 -9
  50. app-ng-runtime/variables/fesm2015/index.js +2 -9
  51. app-ng-runtime/variables/fesm2015/index.js.map +1 -1
  52. app-ng-runtime/variables/index.metadata.json +1 -1
@@ -416,7 +416,8 @@ export class TableFilterSortDirective {
416
416
  data,
417
417
  sortDirection: sortObj.direction,
418
418
  colDef: this.table.columns[sortObj.field]
419
- } });
419
+ }
420
+ });
420
421
  });
421
422
  }
422
423
  searchHandler(searchSortObj, e, type, statePersistenceTriggered) {
@@ -663,4 +664,4 @@ TableFilterSortDirective.ctorParameters = () => [
663
664
  { type: undefined, decorators: [{ type: Self }, { type: Inject, args: [TableComponent,] }] }
664
665
  ];
665
666
  export { ɵ0, ɵ1, ɵ2, ɵ3, ɵ4, ɵ5 };
666
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZmlsdGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL3RhYmxlL3NyYy90YWJsZS1maWx0ZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLHlCQUF5QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pKLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVuSixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFLbkQsTUFBTSxlQUFlLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFFcEYscUNBQXFDO0FBQ3JDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO0lBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRTtRQUNuQyxPQUFPLFNBQVMsQ0FBQztLQUNwQjtJQUNELElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3BCLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM1QjtJQUNELElBQUksSUFBSSxLQUFLLFFBQVEsQ0FBQyxRQUFRLEVBQUU7UUFDNUIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLENB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SyxDQUFDLFVBQVUsRUFBRTtZQUNyQyxJQUFJLEVBQUUsSUFBSTtZQUNWLFlBQVksRUFBRyxZQUFZO1lBQzNCLE9BQU8sRUFBRyxXQUFXO1lBQ3JCLFNBQVMsRUFBRyxTQUFTO1NBQ3hCLENBQUMsQ0FBQztJQUNQLENBQUM7OztZQXBnQkosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxxQkFBcUI7YUFDbEM7Ozs0Q0FHZ0IsSUFBSSxZQUFJLE1BQU0sU0FBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbmplY3QsIFNlbGYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgJGFwcERpZ2VzdCwgRGF0YVNvdXJjZSwgRGF0YVR5cGUsIEZvcm1XaWRnZXRUeXBlLCBnZXRDbG9uZWRPYmplY3QsIGlzRGVmaW5lZCwgaXNOdW1iZXJUeXBlLCBhZGp1c3RDb250YWluZXJSaWdodEVkZ2VzIH0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgZ2V0TWF0Y2hNb2RlTXNncywgZ2V0TWF0Y2hNb2RlVHlwZXNNYXAsIGlzRGF0YVNldFdpZGdldCwgcmVmcmVzaERhdGFTb3VyY2UsIHVuc3VwcG9ydGVkU3RhdGVQZXJzaXN0ZW5jZVR5cGVzIH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5cbmltcG9ydCB7IFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5jb21wb25lbnQnO1xuXG5kZWNsYXJlIGNvbnN0IF8sICQ7XG5kZWNsYXJlIGNvbnN0IG1vbWVudDtcblxuY29uc3QgZW1wdHlNYXRjaE1vZGVzID0gWydudWxsJywgJ2VtcHR5JywgJ251bGxvcmVtcHR5JywgJ2lzbm90bnVsbCcsICdpc25vdGVtcHR5J107XG5cbi8vIEdldCBzZWFyY2ggdmFsdWUgYmFzZWQgb24gdGhlIHRpbWVcbmNvbnN0IGdldFNlYXJjaFZhbHVlID0gKHZhbHVlLCB0eXBlKSA9PiB7XG4gICAgaWYgKCFpc0RlZmluZWQodmFsdWUpIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXJUeXBlKHR5cGUpKSB7XG4gICAgICAgIHJldHVybiBfLnRvTnVtYmVyKHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09IERhdGFUeXBlLkRBVEVUSU1FKSB7XG4gICAgICAgIHJldHVybiBtb21lbnQodmFsdWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gICAgcmV0dXJuIF8udG9TdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG4vLyBGaWx0ZXIgdGhlIGRhdGEgYmFzZWQgb24gdGhlIHNlYXJjaCB2YWx1ZSBhbmQgY29uZGl0aW9uc1xuY29uc3QgZ2V0RmlsdGVyZWREYXRhID0gKGRhdGEsIHNlYXJjaE9iaiwgdmlzaWJsZUNvbHMgPSBbXSkgPT4ge1xuICAgIGNvbnN0IHNlYXJjaFZhbCA9IGdldFNlYXJjaFZhbHVlKHNlYXJjaE9iai52YWx1ZSwgc2VhcmNoT2JqLnR5cGUpO1xuICAgIGxldCBjdXJyZW50VmFsO1xuICAgIC8vIFJldHVybiB3aG9sZSBkYXRhIGlmXG4gICAgLy8gLSBzZWFyY2ggdmFsdWUgaXMgdW5kZWZpbmVkIGFuZCBtYXRjaG1vZGUgaXMgbm90IGFuIGVtcHR5IG1hdGNobW9kZSB0eXBlXG4gICAgLy8gLSBzZWFyY2ggdmFsdWUgaXMgbnVsbCBhbmQgZGF0YXR5cGUgaXMgbnVtYmVyLiBOdWxsIGNhbiBub3QgYmUgY29tcGFyZWQgd2l0aCBudW1lcmljIHZhbHVlc1tXTVMtMTkyNzVdLlxuICAgIGlmICgoIWlzRGVmaW5lZChzZWFyY2hWYWwpICYmICFfLmluY2x1ZGVzKGVtcHR5TWF0Y2hNb2Rlcywgc2VhcmNoT2JqLm1hdGNoTW9kZSkpIHx8IChpc051bWJlclR5cGUoc2VhcmNoT2JqLnR5cGUpICYmIF8uaXNOdWxsKHNlYXJjaE9iai52YWx1ZSkpKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBkYXRhID0gZGF0YS5maWx0ZXIoKG9iaikgPT4ge1xuICAgICAgICBsZXQgaXNFeGlzdHM7XG4gICAgICAgIGlmIChzZWFyY2hPYmouZmllbGQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRWYWwgPSBnZXRTZWFyY2hWYWx1ZShfLmdldChvYmosIHNlYXJjaE9iai5maWVsZCksIHNlYXJjaE9iai50eXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN1cnJlbnRWYWwgPSBbXTtcbiAgICAgICAgICAgIF8uZm9yRWFjaChvYmosICh2YWwsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgoXy5pbmNsdWRlcyh2aXNpYmxlQ29scywga2V5KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbC5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV01TLTIyMjcxIElmIHRoZSBrZXkgaXMgaW4gbmVzdGVkIGtleSBmb3JtYXQgKGRvdCBmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgYWxsIHRoZSBpbmRleGVzIG9mIHRoZSBrZXkgaW4gdmlzaWJsZWNvbHMgYW5kIGV4dHJhY3QgdGhlaXIgdmFsdWVzIGZyb20gb2JqXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbEluZGV4ID0gXy5maWx0ZXIoXy5yYW5nZSh2aXNpYmxlQ29scy5sZW5ndGgpLCAoaSkgPT4gdmlzaWJsZUNvbHNbaV0uaW5jbHVkZXMoa2V5KSk7XG4gICAgICAgICAgICAgICAgICAgIF8uZm9yRWFjaChjb2xJbmRleCwgKGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IF8uZ2V0KG9iaiwgdmlzaWJsZUNvbHNbaW5kZXhdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VmFsLmluZGV4T2YodmFsdWUpIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRWYWwucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY3VycmVudFZhbCA9IGN1cnJlbnRWYWwuam9pbignICcpLnRvTG93ZXJDYXNlKCk7IC8vIElmIGZpZWxkIGlzIG5vdCB0aGVyZSwgc2VhcmNoIG9uIGFsbCB0aGUgY29sdW1uc1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoc2VhcmNoT2JqLm1hdGNoTW9kZSkge1xuICAgICAgICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICAgICAgICAgIGlzRXhpc3RzID0gXy5zdGFydHNXaXRoKGN1cnJlbnRWYWwsIHNlYXJjaFZhbCBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICBpc0V4aXN0cyA9IF8uZW5kc1dpdGgoY3VycmVudFZhbCwgc2VhcmNoVmFsIGFzIHN0cmluZyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdleGFjdCc6XG4gICAgICAgICAgICAgICAgaXNFeGlzdHMgPSBfLmlzRXF1YWwoY3VycmVudFZhbCwgc2VhcmNoVmFsKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ25vdGVxdWFscyc6XG4gICAgICAgICAgICAgICAgaXNFeGlzdHMgPSAhXy5pc0VxdWFsKGN1cnJlbnRWYWwsIHNlYXJjaFZhbCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdudWxsJzpcbiAgICAgICAgICAgICAgICBpc0V4aXN0cyA9IF8uaXNOdWxsKGN1cnJlbnRWYWwpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXNub3RudWxsJzpcbiAgICAgICAgICAgICAgICBpc0V4aXN0cyA9ICFfLmlzTnVsbChjdXJyZW50VmFsKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2VtcHR5JzpcbiAgICAgICAgICAgICAgICBpc0V4aXN0cyA9IF8uaXNFbXB0eShjdXJyZW50VmFsKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzbm90ZW1wdHknOlxuICAgICAgICAgICAgICAgIGlzRXhpc3RzID0gIV8uaXNFbXB0eShjdXJyZW50VmFsKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ251bGxvcmVtcHR5JzpcbiAgICAgICAgICAgICAgICBpc0V4aXN0cyA9IF8uaXNOdWxsKGN1cnJlbnRWYWwpIHx8IF8uaXNFbXB0eShjdXJyZW50VmFsKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2xlc3N0aGFuJzpcbiAgICAgICAgICAgICAgICBpc0V4aXN0cyA9IGN1cnJlbnRWYWwgPCBzZWFyY2hWYWw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdsZXNzdGhhbmVxdWFsJzpcbiAgICAgICAgICAgICAgICBpc0V4aXN0cyA9IGN1cnJlbnRWYWwgPD0gc2VhcmNoVmFsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZ3JlYXRlcnRoYW4nOlxuICAgICAgICAgICAgICAgIGlzRXhpc3RzID0gY3VycmVudFZhbCA+IHNlYXJjaFZhbDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2dyZWF0ZXJ0aGFuZXF1YWwnOlxuICAgICAgICAgICAgICAgIGlzRXhpc3RzID0gY3VycmVudFZhbCA+PSBzZWFyY2hWYWw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlzRXhpc3RzID0gaXNOdW1iZXJUeXBlKHNlYXJjaE9iai50eXBlKSA/IF8uaXNFcXVhbChjdXJyZW50VmFsLCBzZWFyY2hWYWwpIDogXy5pbmNsdWRlcyhjdXJyZW50VmFsLCBzZWFyY2hWYWwpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0V4aXN0cztcbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YTtcbn07XG5cbi8vIFNldCB0aGUgZmlsdGVyIGZpZWxkcyB3aGVuIHRoZSBzZWFyY2ggdmFsdWUgaXMgc3BlY2lmaWVkIGFuZCBmaWVsZCBpcyBub3Qgc2VsZWN0ZWRcbmNvbnN0IHNldEFsbEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uKGZpbHRlckZpZWxkcywgc2VhcmNoT2JqLCB2aXNpYmxlQ29scykge1xuICAgIHZpc2libGVDb2xzLmZvckVhY2goZnVuY3Rpb24oZmllbGQpIHtcbiAgICAgICAgZmlsdGVyRmllbGRzW2ZpZWxkXSA9IHtcbiAgICAgICAgICAgICd2YWx1ZSc6IHNlYXJjaE9iai52YWx1ZSxcbiAgICAgICAgICAgICd0eXBlJyA6IHNlYXJjaE9iai52YWx1ZS50eXBlLFxuICAgICAgICAgICAgJ2xvZ2ljYWxPcCc6ICdPUidcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHNlYXJjaE9iai5tYXRjaE1vZGUpIHtcbiAgICAgICAgICAgIGZpbHRlckZpZWxkc1tmaWVsZF0ubWF0Y2hNb2RlID0gc2VhcmNoT2JqLm1hdGNoTW9kZTtcbiAgICAgICAgfVxuICAgIH0pO1xufTtcblxuLy8gU2V0IHRoZSBmaWx0ZXIgZmllbGRzIGFzIHJlcXVpcmVkIGJ5IGRhdGFzb3VyY2VcbmNvbnN0IHNldEZpbHRlckZpZWxkcyA9IChmaWx0ZXJGaWVsZHMsIHNlYXJjaE9iaiwgdmlzaWJsZUNvbHMgPSBbXSkgPT4ge1xuICAgIGNvbnN0IGZpZWxkID0gc2VhcmNoT2JqICYmIHNlYXJjaE9iai5maWVsZDtcbiAgICAvKlNldCB0aGUgZmlsdGVyIG9wdGlvbnMgd2hlbiBhIGZpZWxkL2NvbHVtbiBoYXMgYmVlbiBzZWxlY3RlZC4qL1xuICAgIGlmIChmaWVsZCkge1xuICAgICAgICBmaWx0ZXJGaWVsZHNbZmllbGRdID0ge1xuICAgICAgICAgICAgJ3ZhbHVlJyAgICAgOiBzZWFyY2hPYmoudmFsdWUsXG4gICAgICAgICAgICAnbG9naWNhbE9wJyA6ICdBTkQnXG4gICAgICAgIH07XG4gICAgICAgIGlmIChzZWFyY2hPYmoubWF0Y2hNb2RlKSB7XG4gICAgICAgICAgICBmaWx0ZXJGaWVsZHNbZmllbGRdLm1hdGNoTW9kZSA9IHNlYXJjaE9iai5tYXRjaE1vZGU7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICAvKlNldCB0aGUgZmlsdGVyIG9wdGlvbnMgd2hlbiBhIGZpZWxkL2NvbHVtbiBoYXNuJ3QgYmVlbiBzZWxlY3RlZC4qL1xuICAgICAgICBzZXRBbGxGaWx0ZXJGaWVsZHMoZmlsdGVyRmllbGRzLCBzZWFyY2hPYmosIHZpc2libGVDb2xzKTtcbiAgICB9XG59O1xuXG4vLyBUcmFuc2Zvcm0gZmlsdGVyIGZpZWxkcyBmcm9tIGFycmF5IHRvIG9iamVjdCBoYXZpbmcgZmllbGQgbmFtZXMgYXMga2V5c1xuY29uc3QgdHJhbnNmb3JtRmlsdGVyRmllbGQgPSAodXNlckZpbHRlcnMsIGZpbHRlckZpZWxkKSA9PiB7XG4gICAgaWYgKGZpbHRlckZpZWxkLmZpZWxkKSB7XG4gICAgICAgIHVzZXJGaWx0ZXJzW2ZpbHRlckZpZWxkLmZpZWxkXSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBmaWx0ZXJGaWVsZC52YWx1ZSxcbiAgICAgICAgICAgIG1hdGNoTW9kZTogZmlsdGVyRmllbGQubWF0Y2hNb2RlLFxuICAgICAgICAgICAgdHlwZTogZmlsdGVyRmllbGQudHlwZVxuICAgICAgICB9O1xuICAgIH1cbn07XG5cbi8vIEJ1aWxkIGEgZmlsdGVyIEZpZWxkcyBvYmplY3RcbmNvbnN0IGFkZFRvRmlsdGVyRmllbGRzID0gKGZpbHRlckZpZWxkcywgc2VhcmNoT2JqKSA9PiB7XG4gICAgZmlsdGVyRmllbGRzLnB1c2goe1xuICAgICAgICBmaWVsZDogKHNlYXJjaE9iai5rZXkpID8gc2VhcmNoT2JqLmtleSA6ICcnLFxuICAgICAgICBtYXRjaE1vZGU6IHNlYXJjaE9iai5tYXRjaE1vZGUsXG4gICAgICAgIHR5cGU6IHNlYXJjaE9iai50eXBlLFxuICAgICAgICB2YWx1ZTogc2VhcmNoT2JqLnZhbHVlXG4gICAgfSk7XG59O1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1t3bVRhYmxlRmlsdGVyU29ydF0nXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlRmlsdGVyU29ydERpcmVjdGl2ZSB7XG5cbiAgICBjb25zdHJ1Y3RvcihAU2VsZigpIEBJbmplY3QoVGFibGVDb21wb25lbnQpIHByaXZhdGUgdGFibGUpIHtcbiAgICAgICAgdGFibGUuX3NlYXJjaFNvcnRIYW5kbGVyID0gdGhpcy5zZWFyY2hTb3J0SGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgICB0YWJsZS5nZXRTZWFyY2hSZXN1bHQgPSB0aGlzLmdldFNlYXJjaFJlc3VsdC5iaW5kKHRoaXMpO1xuICAgICAgICB0YWJsZS5nZXRTb3J0UmVzdWx0ID0gdGhpcy5nZXRTb3J0UmVzdWx0LmJpbmQodGhpcyk7XG4gICAgICAgIHRhYmxlLmNoZWNrRmlsdGVyc0FwcGxpZWQgPSB0aGlzLmNoZWNrRmlsdGVyc0FwcGxpZWQuYmluZCh0aGlzKTtcbiAgICAgICAgdGFibGUuZ2V0RmlsdGVyRmllbGRzID0gdGhpcy5nZXRGaWx0ZXJGaWVsZHMuYmluZCh0aGlzKTtcbiAgICAgICAgdGFibGUub25Sb3dGaWx0ZXJDaGFuZ2UgPSB0aGlzLm9uUm93RmlsdGVyQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRhYmxlLm9uRmlsdGVyQ29uZGl0aW9uU2VsZWN0ID0gdGhpcy5vbkZpbHRlckNvbmRpdGlvblNlbGVjdC5iaW5kKHRoaXMpO1xuICAgICAgICB0YWJsZS5zaG93Q2xlYXJJY29uID0gdGhpcy5zaG93Q2xlYXJJY29uLmJpbmQodGhpcyk7XG4gICAgICAgIHRhYmxlLmNsZWFyUm93RmlsdGVyID0gdGhpcy5jbGVhclJvd0ZpbHRlci5iaW5kKHRoaXMpO1xuICAgICAgICB0YWJsZS5tYXRjaE1vZGVUeXBlc01hcCA9IGdldE1hdGNoTW9kZVR5cGVzTWFwKCk7XG4gICAgICAgIHRhYmxlLm1hdGNoTW9kZU1zZ3MgPSBnZXRNYXRjaE1vZGVNc2dzKHRhYmxlLmFwcExvY2FsZSk7XG4gICAgICAgIHRhYmxlLmVtcHR5TWF0Y2hNb2RlcyA9IGVtcHR5TWF0Y2hNb2RlcztcbiAgICAgICAgdGFibGUuZ2V0TmF2aWdhdGlvblRhcmdldEJ5U29ydEluZm8gPSB0aGlzLmdldE5hdmlnYXRpb25UYXJnZXRCeVNvcnRJbmZvLmJpbmQodGhpcyk7XG4gICAgICAgIHRhYmxlLnJlZnJlc2hEYXRhID0gdGhpcy5yZWZyZXNoRGF0YS5iaW5kKHRoaXMpO1xuICAgICAgICB0YWJsZS5jbGVhckZpbHRlciA9IHRoaXMuY2xlYXJGaWx0ZXIuYmluZCh0aGlzKTtcbiAgICAgICAgdGFibGUuYWRqdXN0Q29udGFpbmVyID0gdGhpcy5hZGp1c3RDb250YWluZXIuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBhZGp1c3RDb250YWluZXIoZmllbGROYW1lKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgYWRqdXN0Q29udGFpbmVyUmlnaHRFZGdlcygkKCdicy1kcm9wZG93bi1jb250YWluZXInKSwgdGhpcy50YWJsZS5yb3dGaWx0ZXJDb21wbGllZFRsW2ZpZWxkTmFtZV0sIHRoaXMudGFibGUsICQoJ2JzLWRyb3Bkb3duLWNvbnRhaW5lciAuZHJvcGRvd24tbWVudScpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gR2V0IGZpcnN0IG9yIGxhc3QgcGFnZSBiYXNlZCBvbiBzb3J0IGluZm8gb2YgcHJpbWFyeSBrZXlcbiAgICBnZXROYXZpZ2F0aW9uVGFyZ2V0QnlTb3J0SW5mbygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGUuc29ydEluZm8gJiYgdGhpcy50YWJsZS5zb3J0SW5mby5kaXJlY3Rpb24gPT09ICdkZXNjJyAmJlxuICAgICAgICAgICAgICAgICAgICBfLmluY2x1ZGVzKHRoaXMudGFibGUucHJpbWFyeUtleSwgdGhpcy50YWJsZS5zb3J0SW5mby5maWVsZCkgPyAnZmlyc3QnIDogJ2xhc3QnO1xuICAgIH1cblxuICAgIC8vIFJldHVybnMgYWxsIHRoZSBjb2x1bW5zIG9mIHRoZSB0YWJsZSB3aGVyZWluLCBzaG93aW5maWx0ZXIgaXMgc2V0IHRvIHRydWVcbiAgICBnZXRUYWJsZVZpc2libGVDb2xzKCkge1xuICAgICAgICBjb25zdCB2aXNpYmxlQ29scyA9IFtdO1xuICAgICAgICBfLmZvckVhY2godGhpcy50YWJsZS5jb2x1bW5zLCAodmFsLCBjb2wpID0+IHtcbiAgICAgICAgICAgIGlmIChfLnRvTG93ZXIoXy50b1N0cmluZyh2YWwuc2hvd2luZmlsdGVyKSkgPT09ICd0cnVlJyAmJiBjb2wgIT09ICdyb3dPcGVyYXRpb25zJyAmJiB2YWwuc2VhcmNoYWJsZSkge1xuICAgICAgICAgICAgICAgIHZpc2libGVDb2xzLnB1c2goY29sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB2aXNpYmxlQ29scztcbiAgICB9XG5cbiAgICAvLyBjYWxsIHRoZSBzZXQgZmlsdGVyIGZpZWxkcyBmdW5jdGlvbiBiYXNlZCBvbiB0aGUgZmllbGQgc2VsZWN0ZWQgb3Igbm90XG4gICAgaW52b2tlU2V0RmlsdGVyZmllbGRCYXNlZE9uRmllbGR2YWwoc2VhcmNoT2JqLCBmaWx0ZXJGaWVsZHMpIHtcbiAgICAgICAgaWYgKHNlYXJjaE9iai5maWVsZCkge1xuICAgICAgICAgICAgc2V0RmlsdGVyRmllbGRzKGZpbHRlckZpZWxkcywgc2VhcmNoT2JqKTtcbiAgICAgICAgfSBlbHNlIGlmICghXy5pc0VtcHR5KHNlYXJjaE9iaikpIHtcbiAgICAgICAgICAgY29uc3QgdmlzaWJsZUNvbHMgPSB0aGlzLmdldFRhYmxlVmlzaWJsZUNvbHMoKTtcbiAgICAgICAgICAgIHNldEZpbHRlckZpZWxkcyhmaWx0ZXJGaWVsZHMsIHNlYXJjaE9iaiwgdmlzaWJsZUNvbHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gR2V0IHRoZSBmaWx0ZXIgZmllbGRzIGFzIHJlcXVpcmVkIGJ5IGRhdGFzb3VyY2VcbiAgICBnZXRGaWx0ZXJGaWVsZHMoc2VhcmNoT2JqKSB7XG4gICAgICAgIHNlYXJjaE9iaiA9IHNlYXJjaE9iaiB8fCB7fTtcbiAgICAgICAgY29uc3QgZmlsdGVyRmllbGRzID0ge307XG4gICAgICAgIGlmIChfLmlzQXJyYXkoc2VhcmNoT2JqKSkge1xuICAgICAgICAgICAgXy5mb3JFYWNoKHNlYXJjaE9iaiwgIG9iaiA9PiB7XG4gICAgICAgICAgICAgICB0aGlzLmludm9rZVNldEZpbHRlcmZpZWxkQmFzZWRPbkZpZWxkdmFsKG9iaiwgZmlsdGVyRmllbGRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnZva2VTZXRGaWx0ZXJmaWVsZEJhc2VkT25GaWVsZHZhbChzZWFyY2hPYmosIGZpbHRlckZpZWxkcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlckZpZWxkcztcbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIGxvZ2ljYWwgb3BlcmF0b3IgZm9yIHRoZSBzZWFyY2ggZmlsdGVyXG4gICAgZ2V0TG9naWNhbE9wZXJhdG9yKGZpbHRlckZpZWxkcykge1xuICAgICAgICBsZXQgb3BlcmF0b3IgPSAnJztcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBpbiBmaWx0ZXJGaWVsZHMpIHtcbiAgICAgICAgICAgIG9wZXJhdG9yID0gZmlsdGVyRmllbGRzW2ZpZWxkXVsnbG9naWNhbE9wJ10gfHwgJyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3BlcmF0b3I7XG4gICAgfVxuXG4gICAgLy8gUmVzZXQgdGhlIHNvcnQgYmFzZWQgb24gc29ydCByZXR1cm5lZCBieSB0aGUgY2FsbFxuICAgIHJlc2V0U29ydFN0YXR1cyh2YXJpYWJsZVNvcnQpIHtcbiAgICAgICAgbGV0IGdyaWRTb3J0U3RyaW5nO1xuICAgICAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLnRhYmxlLnNvcnRJbmZvKSAmJiB0aGlzLnRhYmxlLmRhdGFzb3VyY2UpIHtcbiAgICAgICAgICAgIGdyaWRTb3J0U3RyaW5nID0gdGhpcy50YWJsZS5zb3J0SW5mby5maWVsZCArICcgJyArIHRoaXMudGFibGUuc29ydEluZm8uZGlyZWN0aW9uO1xuICAgICAgICAgICAgdmFyaWFibGVTb3J0ID0gdGhpcy50YWJsZS5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX09QVElPTlMpLm9yZGVyQnkgfHwgdmFyaWFibGVTb3J0O1xuICAgICAgICAgICAgaWYgKHZhcmlhYmxlU29ydCkgeyAvLyBJZiBtdWx0aXBsZSBvcmRlciBieSBmaWVsZHMgYXJlIHByZXNlbnQsIGNvbXBhcmUgd2l0aCB0aGUgZmlyc3Qgb25lXG4gICAgICAgICAgICAgICAgdmFyaWFibGVTb3J0ID0gXy5oZWFkKF8uc3BsaXQodmFyaWFibGVTb3J0LCAnLCcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChncmlkU29ydFN0cmluZyAhPT0gdmFyaWFibGVTb3J0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZS5jYWxsRGF0YUdyaWRNZXRob2QoJ3Jlc2V0U29ydEljb25zJyk7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZS5zb3J0SW5mbyA9IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMudGFibGUuc2V0RGF0YUdyaWRPcHRpb24oJ3NvcnRJbmZvJywge30pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2xlYXIgdGhlIGFsbCB0aGUgZmlsdGVycyBhcHBsaWVkXG4gICAgY2xlYXJGaWx0ZXIoc2tpcEZpbHRlcikge1xuICAgICAgICBsZXQgJGdyaWRFbGVtZW50O1xuICAgICAgICB0aGlzLnRhYmxlLmZpbHRlckluZm8gPSB7fTtcbiAgICAgICAgaWYgKHRoaXMudGFibGUuZmlsdGVybW9kZSA9PT0gJ211bHRpY29sdW1uJykge1xuICAgICAgICAgICAgdGhpcy50YWJsZS5maWVsZERlZnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb2wucmVzZXRGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sLnJlc2V0RmlsdGVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIXNraXBGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLm9uUm93RmlsdGVyQ2hhbmdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50YWJsZS5maWx0ZXJtb2RlID09PSAnc2VhcmNoJykge1xuICAgICAgICAgICAgJGdyaWRFbGVtZW50ID0gdGhpcy50YWJsZS5kYXRhZ3JpZEVsZW1lbnQ7XG4gICAgICAgICAgICAkZ3JpZEVsZW1lbnQuZmluZCgnW2RhdGEtZWxlbWVudD1cImRnU2VhcmNoVGV4dFwiXScpLnZhbCgnJyk7XG4gICAgICAgICAgICAkZ3JpZEVsZW1lbnQuZmluZCgnW2RhdGEtZWxlbWVudD1cImRnRmlsdGVyVmFsdWVcIl0nKS52YWwoJycpO1xuICAgICAgICAgICAgaWYgKCFza2lwRmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgJGdyaWRFbGVtZW50LmZpbmQoJy5hcHAtc2VhcmNoLWJ1dHRvbicpLnRyaWdnZXIoJ2NsaWNrJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayB0aGUgZmlsdGVycyBhcHBsaWVkIGFuZCByZW1vdmUgaWYgZGF0IGRvZXMgbm90IGNvbnRhaW4gYW55IGZpbHRlcnNcbiAgICBjaGVja0ZpbHRlcnNBcHBsaWVkKHZhcmlhYmxlU29ydCkge1xuICAgICAgICBpZiAoIXRoaXMudGFibGUuZGF0YXNvdXJjZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRhYmxlLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5TVVBQT1JUU19TRVJWRVJfRklMVEVSKSkge1xuICAgICAgICAgICAgaWYgKF8uaXNFbXB0eSh0aGlzLnRhYmxlLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfT1BUSU9OUykuZmlsdGVyRmllbGRzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJGaWx0ZXIodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlc2V0U29ydFN0YXR1cyh2YXJpYWJsZVNvcnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRhYmxlLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5JU19QQUdFQUJMRSkpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTb3J0U3RhdHVzKHZhcmlhYmxlU29ydCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIGRhdGEgZmlsdGVyZWQgdXNpbmcgc2VhcmNoT2JqXG4gICAgZ2V0U2VhcmNoUmVzdWx0KGRhdGEsIHNlYXJjaE9iaikge1xuICAgICAgICBjb25zdCB2aXNpYmxlQ29scyA9IHRoaXMuZ2V0VGFibGVWaXNpYmxlQ29scygpO1xuICAgICAgICBpZiAoIXNlYXJjaE9iaikge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaXNBcnJheShzZWFyY2hPYmopKSB7XG4gICAgICAgICAgICBzZWFyY2hPYmouZm9yRWFjaCgob2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGdldEZpbHRlcmVkRGF0YShkYXRhLCBvYmosIHZpc2libGVDb2xzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IGdldEZpbHRlcmVkRGF0YShkYXRhLCBzZWFyY2hPYmosIHZpc2libGVDb2xzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIGRhdGEgc29ydGVkIHVzaW5nIHNvcnRPYmpcbiAgICBnZXRTb3J0UmVzdWx0KGRhdGEsIHNvcnRPYmopIHtcbiAgICAgICAgaWYgKHNvcnRPYmogJiYgc29ydE9iai5kaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIGRhdGEgPSBfLm9yZGVyQnkoZGF0YSwgc29ydE9iai5maWVsZCwgc29ydE9iai5kaXJlY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIC8vIFRoaXMgbWV0aG9kIGhhbmRsZXMgdGhlIGNsaWVudCBzaWRlIHNvcnQgYW5kIHNlYXJjaFxuICAgIHByaXZhdGUgaGFuZGxlQ2xpZW50U2lkZVNvcnRTZWFyY2goc2VhcmNoU29ydE9iaiwgZSwgdHlwZSkge1xuICAgICAgICB0aGlzLnRhYmxlLl9pc0NsaWVudFNlYXJjaCA9IHRydWU7XG5cbiAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgIGRhdGEgPSB0aGlzLnRhYmxlLmlzTmF2aWdhdGlvbkVuYWJsZWQoKSA/IGdldENsb25lZE9iamVjdCh0aGlzLnRhYmxlLl9fZnVsbERhdGEpIDogZ2V0Q2xvbmVkT2JqZWN0KHRoaXMudGFibGUuZGF0YXNldCk7XG4gICAgICAgIGlmICh0eXBlID09PSAnc2VhcmNoJykge1xuICAgICAgICAgICAgdGhpcy50YWJsZS5maWx0ZXJJbmZvID0gc2VhcmNoU29ydE9iajtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudGFibGUuc29ydEluZm8gPSBzZWFyY2hTb3J0T2JqO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfLmlzT2JqZWN0KGRhdGEpICYmICFfLmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgIH1cbiAgICAgICAgLypCb3RoIHRoZSBmdW5jdGlvbnMgcmV0dXJuIHNhbWUgJ2RhdGEnIGlmIGFyZ3VtZW50cyBhcmUgdW5kZWZpbmVkKi9cbiAgICAgICAgZGF0YSA9IHRoaXMuZ2V0U2VhcmNoUmVzdWx0KGRhdGEsIHRoaXMudGFibGUuZmlsdGVySW5mbyk7XG4gICAgICAgIGRhdGEgPSB0aGlzLmdldFNvcnRSZXN1bHQoZGF0YSwgdGhpcy50YWJsZS5zb3J0SW5mbyk7XG4gICAgICAgIHRoaXMudGFibGUuc2VydmVyRGF0YSA9IGRhdGE7XG5cbiAgICAgICAgaWYgKHR5cGUgPT09ICdzb3J0Jykge1xuICAgICAgICAgICAgLy8gQ2FsbGluZyAnb25Tb3J0JyBldmVudFxuICAgICAgICAgICAgdGhpcy50YWJsZS5pbnZva2VFdmVudENhbGxiYWNrKCdzb3J0JywgeyRldmVudDogZSwgJGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogdGhpcy50YWJsZS5zZXJ2ZXJEYXRhLFxuICAgICAgICAgICAgICAgICAgICBzb3J0RGlyZWN0aW9uOiB0aGlzLnRhYmxlLnNvcnRJbmZvLmRpcmVjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgY29sRGVmOiB0aGlzLnRhYmxlLmNvbHVtbnNbdGhpcy50YWJsZS5zb3J0SW5mby5maWVsZF1cbiAgICAgICAgICAgICAgICB9fSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50YWJsZS5pc05hdmlnYXRpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBwYWdlIG51bWJlciB0byAxXG4gICAgICAgICAgICB0aGlzLnRhYmxlLmRhdGFOYXZpZ2F0b3IuZG4uY3VycmVudFBhZ2UgPSAxO1xuICAgICAgICAgICAgdGhpcy50YWJsZS5kYXRhTmF2aWdhdG9yLnNldFBhZ2luZ1ZhbHVlcyhkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudGFibGUuc2V0R3JpZERhdGEodGhpcy50YWJsZS5zZXJ2ZXJEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoaXMgbWV0aG9kIGhhbmRsZXMgdGhlIHNlYXJjaCBmb3IgcGFnZWFibGUgZGF0YXNvdXJjZVxuICAgIHByaXZhdGUgaGFuZGxlU2luZ2xlUGFnZVNlYXJjaChzZWFyY2hPYmopIHtcbiAgICAgICAgdGhpcy50YWJsZS5faXNQYWdlU2VhcmNoID0gdHJ1ZTtcblxuICAgICAgICBsZXQgZGF0YSAgPSBnZXRDbG9uZWRPYmplY3QodGhpcy50YWJsZS5ncmlkRGF0YSk7XG4gICAgICAgIGNvbnN0ICRyb3dzID0gdGhpcy50YWJsZS5kYXRhZ3JpZEVsZW1lbnQuZmluZCgndGJvZHkgdHIuYXBwLWRhdGFncmlkLXJvdycpO1xuICAgICAgICB0aGlzLnRhYmxlLmZpbHRlckluZm8gPSBzZWFyY2hPYmo7XG4gICAgICAgIGRhdGEgPSB0aGlzLmdldFNlYXJjaFJlc3VsdChkYXRhLCBzZWFyY2hPYmopO1xuICAgICAgICAvLyBDb21wYXJlZCB0aGUgZmlsdGVyZWQgZGF0YSBhbmQgb3JpZ2luYWwgZGF0YSwgdG8gc2hvdyBvciBoaWRlIHRoZSByb3dzXG4gICAgICAgIF8uZm9yRWFjaCh0aGlzLnRhYmxlLmdyaWREYXRhLCAodmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCAkcm93ID0gJCgkcm93c1tpbmRleF0pO1xuICAgICAgICAgICAgaWYgKF8uZmluZChkYXRhLCBvYmogPT4gXy5pc0VxdWFsKG9iaiwgdmFsdWUpKSkge1xuICAgICAgICAgICAgICAgICRyb3cuc2hvdygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAkcm93LmhpZGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ3JlYWR5Jyk7XG4gICAgICAgICAgICAvLyBTZWxlY3QgdGhlIGZpcnN0IHJvdyBhZnRlciB0aGUgc2VhcmNoIGZvciBzaW5nbGUgc2VsZWN0XG4gICAgICAgICAgICBpZiAodGhpcy50YWJsZS5ncmlkZmlyc3Ryb3dzZWxlY3QgJiYgIXRoaXMudGFibGUubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2VsZWN0Rmlyc3RSb3cnLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudGFibGUuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbm9kYXRhJywgdGhpcy50YWJsZS5ub2RhdGFtZXNzYWdlKTtcbiAgICAgICAgICAgIHRoaXMudGFibGUuc2VsZWN0ZWRpdGVtID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGFibGUuY2FsbERhdGFHcmlkTWV0aG9kKCd1cGRhdGVTZWxlY3RBbGxDaGVja2JveFN0YXRlJyk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBtZXRob2QgaGFuZGxlcyB0aGUgc2VhcmNoIGZvciBzZXJ2ZXIgc2lkZSB2YXJpYWJsZXNcbiAgICBwcml2YXRlIGhhbmRsZVNlcnZlclNpZGVTZWFyY2goc2VhcmNoT2JqKSB7XG4gICAgICAgIHRoaXMudGFibGUuZmlsdGVySW5mbyA9IHNlYXJjaE9iajtcblxuICAgICAgICBpZiAoIXRoaXMudGFibGUuZGF0YXNvdXJjZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc29ydEluZm8gICAgID0gdGhpcy50YWJsZS5zb3J0SW5mbztcbiAgICAgICAgY29uc3Qgc29ydE9wdGlvbnMgID0gc29ydEluZm8gJiYgc29ydEluZm8uZGlyZWN0aW9uID8gKHNvcnRJbmZvLmZpZWxkICsgJyAnICsgc29ydEluZm8uZGlyZWN0aW9uKSA6ICcnO1xuICAgICAgICBjb25zdCBmaWx0ZXJGaWVsZHMgPSB0aGlzLmdldEZpbHRlckZpZWxkcyhzZWFyY2hPYmopO1xuICAgICAgICBjb25zdCBsb2dpY2FsT3AgPSB0aGlzLmdldExvZ2ljYWxPcGVyYXRvcihmaWx0ZXJGaWVsZHMpO1xuICAgICAgICByZWZyZXNoRGF0YVNvdXJjZSh0aGlzLnRhYmxlLmRhdGFzb3VyY2UsIHtcbiAgICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgICAgICBmaWx0ZXJGaWVsZHMgOiBmaWx0ZXJGaWVsZHMsXG4gICAgICAgICAgICBvcmRlckJ5IDogc29ydE9wdGlvbnMsXG4gICAgICAgICAgICBjb25kaXRpb24gOiBsb2dpY2FsT3BcbiAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAkYXBwRGlnZXN0KCk7XG4gICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudGFibGUudG9nZ2xlTWVzc2FnZSh0cnVlLCAnZXJyb3InLCB0aGlzLnRhYmxlLm5vZGF0YW1lc3NhZ2UpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIG1ldGhvZCBoYW5kbGVzIHRoZSBzb3J0IGZvciBzZXJ2ZXIgc2lkZSB2YXJpYWJsZXNcbiAgICBwcml2YXRlIGhhbmRsZVNldmVyU2lkZVNvcnQoc29ydE9iaiwgZSwgc3RhdGVQZXJzaXN0ZW5jZVRyaWdnZXJlZD8pIHtcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBzb3J0IGluZm8gZm9yIHBhc3NpbmcgdG8gZGF0YWdyaWRcbiAgICAgICAgdGhpcy50YWJsZS5ncmlkT3B0aW9ucy5zb3J0SW5mby5maWVsZCA9IHNvcnRPYmouZmllbGQ7XG4gICAgICAgIHRoaXMudGFibGUuZ3JpZE9wdGlvbnMuc29ydEluZm8uZGlyZWN0aW9uID0gc29ydE9iai5kaXJlY3Rpb247XG4gICAgICAgIHRoaXMudGFibGUuc29ydEluZm8gPSBnZXRDbG9uZWRPYmplY3Qoc29ydE9iaik7XG5cbiAgICAgICAgY29uc3Qgc29ydE9wdGlvbnMgID0gc29ydE9iaiAmJiBzb3J0T2JqLmRpcmVjdGlvbiA/IChzb3J0T2JqLmZpZWxkICsgJyAnICsgc29ydE9iai5kaXJlY3Rpb24pIDogJyc7XG4gICAgICAgIGNvbnN0IGZpbHRlckZpZWxkcyA9IHRoaXMuZ2V0RmlsdGVyRmllbGRzKHRoaXMudGFibGUuZmlsdGVySW5mbyk7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IHRoaXMuZ2V0TG9naWNhbE9wZXJhdG9yKGZpbHRlckZpZWxkcyk7XG4gICAgICAgIGlmICghc3RhdGVQZXJzaXN0ZW5jZVRyaWdnZXJlZCAmJiB0aGlzLnRhYmxlLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgIHRoaXMudGFibGUuc3RhdGVQZXJzaXN0ZW5jZS5yZW1vdmVXaWRnZXRTdGF0ZSh0aGlzLnRhYmxlLCAncGFnaW5hdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVmcmVzaERhdGFTb3VyY2UodGhpcy50YWJsZS5kYXRhc291cmNlLCB7XG4gICAgICAgICAgICBwYWdlIDogMSxcbiAgICAgICAgICAgIGZpbHRlckZpZWxkcyA6IGZpbHRlckZpZWxkcyxcbiAgICAgICAgICAgIG9yZGVyQnkgOiBzb3J0T3B0aW9ucyxcbiAgICAgICAgICAgIGNvbmRpdGlvbiA6IGNvbmRpdGlvblxuICAgICAgICB9KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IChyZXNwb25zZSAmJiByZXNwb25zZS5kYXRhKSA/IHJlc3BvbnNlLmRhdGEgOiByZXNwb25zZTtcbiAgICAgICAgICAgIHRoaXMudGFibGUuaW52b2tlRXZlbnRDYWxsYmFjaygnc29ydCcsIHskZXZlbnQ6IGUsICRkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHNvcnREaXJlY3Rpb246IHNvcnRPYmouZGlyZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBjb2xEZWY6IHRoaXMudGFibGUuY29sdW1uc1tzb3J0T2JqLmZpZWxkXVxuICAgICAgICAgICAgICAgIH19KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWFyY2hIYW5kbGVyKHNlYXJjaFNvcnRPYmosIGUsIHR5cGUsIHN0YXRlUGVyc2lzdGVuY2VUcmlnZ2VyZWQ/KSB7XG4gICAgICAgIGxldCBvYmo7XG4gICAgICAgIGlmIChfLmlzQXJyYXkoc2VhcmNoU29ydE9iaikpIHtcbiAgICAgICAgICAgIG9iaiA9IHNlYXJjaFNvcnRPYmouZmlsdGVyKGZ1bmN0aW9uKHNlYXJjaE9iamVjdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoc2VhcmNoT2JqZWN0Lm1hdGNoTW9kZSAhPT0gdW5kZWZpbmVkICYmIHNlYXJjaE9iamVjdC52YWx1ZSAhPT0gdW5kZWZpbmVkKSB8fCAoc2VhcmNoT2JqZWN0LnZhbHVlICE9PSB1bmRlZmluZWQgJiYgc2VhcmNoT2JqZWN0LmZpZWxkID09PSAnJyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9iaiA9IHtmaWVsZDogc2VhcmNoU29ydE9iai5maWVsZCwgdmFsdWU6IHNlYXJjaFNvcnRPYmoudmFsdWUsIHR5cGU6IHNlYXJjaFNvcnRPYmoudHlwZX07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMudGFibGUuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJyAmJiB1bnN1cHBvcnRlZFN0YXRlUGVyc2lzdGVuY2VUeXBlcy5pbmRleE9mKHRoaXMudGFibGUubmF2aWdhdGlvbikgPCAwKSB7XG4gICAgICAgICAgICBpZiAoKF8uaXNBcnJheShzZWFyY2hTb3J0T2JqKSAmJiBvYmoubGVuZ3RoKSB8fCAoc2VhcmNoU29ydE9iai52YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLnN0YXRlUGVyc2lzdGVuY2UucmVtb3ZlV2lkZ2V0U3RhdGUodGhpcy50YWJsZSwgJ3NlYXJjaCcpO1xuICAgICAgICAgICAgICAgIHRoaXMudGFibGUuc3RhdGVQZXJzaXN0ZW5jZS5zZXRXaWRnZXRTdGF0ZSh0aGlzLnRhYmxlLCB7c2VhcmNoOiBvYmp9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZS5zdGF0ZVBlcnNpc3RlbmNlLnJlbW92ZVdpZGdldFN0YXRlKHRoaXMudGFibGUsICdzZWFyY2gnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RhdGVQZXJzaXN0ZW5jZVRyaWdnZXJlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMudGFibGUuc3RhdGVQZXJzaXN0ZW5jZS5yZW1vdmVXaWRnZXRTdGF0ZSh0aGlzLnRhYmxlLCAncGFnaW5hdGlvbicpO1xuICAgICAgICAgICAgICAgIHRoaXMudGFibGUuc3RhdGVQZXJzaXN0ZW5jZS5yZW1vdmVXaWRnZXRTdGF0ZSh0aGlzLnRhYmxlLCAnc2VsZWN0ZWRJdGVtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1JldGFpbiBTdGF0ZSBoYW5kbGluZyBvbiBXaWRnZXQgJyArIHRoaXMudGFibGUubmFtZSArICcgaXMgbm90IHN1cHBvcnRlZCBmb3IgY3VycmVudCBwYWdpbmF0aW9uIHR5cGUuJyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGZpbHRlckZpZWxkcyA9IGdldENsb25lZE9iamVjdChzZWFyY2hTb3J0T2JqKTtcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IHRoaXMudGFibGUuZGF0YXNvdXJjZTtcbiAgICAgICAgaWYgKCFkYXRhU291cmNlICYmICF0aGlzLnRhYmxlLmRhdGFzZXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgb3V0cHV0O1xuICAgICAgICBjb25zdCB1c2VyRmlsdGVycyA9IHt9O1xuICAgICAgICAvLyBUcmFuc2Zvcm0gZmlsdGVyIGZpZWxkcyBmcm9tIGFycmF5IHRvIG9iamVjdCBoYXZpbmcgZmllbGQgbmFtZXMgYXMga2V5c1xuICAgICAgICBpZiAoXy5pc0FycmF5KGZpbHRlckZpZWxkcykpIHtcbiAgICAgICAgICAgIGZpbHRlckZpZWxkcy5mb3JFYWNoKGZpbHRlckZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1GaWx0ZXJGaWVsZCh1c2VyRmlsdGVycywgZmlsdGVyRmllbGQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1GaWx0ZXJGaWVsZCh1c2VyRmlsdGVycywgZmlsdGVyRmllbGRzKTtcbiAgICAgICAgfVxuICAgICAgICBvdXRwdXQgPSB0aGlzLnRhYmxlLmludm9rZUV2ZW50Q2FsbGJhY2soJ2JlZm9yZWZpbHRlcicsIHskZXZlbnQ6IGUsICRkYXRhOiB1c2VyRmlsdGVycywgY29sdW1uczogdXNlckZpbHRlcnN9KTtcbiAgICAgICAgLy8gSWYgY2FsbGJhY2sgcmV0dXJucyBmYWxzZSwgZG9uJ3QgdHJpZ2dlciB0aGUgZmlsdGVyIGNhbGxcbiAgICAgICAgaWYgKG91dHB1dCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBmaWx0ZXJGaWVsZHMgPSBbXTtcbiAgICAgICAgLy8gaWYgdGhlIGZpZWxkIGlzIG5vdCBzZWxlY3RlZCBpbiBzZWFyY2ggZmlsdGVyIGRyb3Bkb3duLCBidWlsZGluZyB0aGUgZmlsdGVyIGZpZWxkcyBvYmplY3RcbiAgICAgICAgaWYgKF8uaXNFbXB0eSh1c2VyRmlsdGVycykgJiYgIV8uaXNFbXB0eShvYmopKSB7XG4gICAgICAgICAgICBpZiAoXy5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgICAgICAgICBfLmZvckVhY2gob2JqLCAgc2VhcmNoT2JqID0+IHtcbiAgICAgICAgICAgICAgICAgICAgYWRkVG9GaWx0ZXJGaWVsZHMoZmlsdGVyRmllbGRzLCBzZWFyY2hPYmopO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhZGRUb0ZpbHRlckZpZWxkcyhmaWx0ZXJGaWVsZHMsIG9iaik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBUcmFuc2Zvcm0gYmFjayB0aGUgZmlsdGVyIGZpZWxkcyBmcm9tIG9iamVjdCB0byBhcnJheVxuICAgICAgICAgICAgXy5mb3JFYWNoKHVzZXJGaWx0ZXJzLCAodmFsLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBmaWx0ZXJGaWVsZHMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBrZXksXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogdmFsLm1hdGNoTW9kZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogdmFsLnR5cGUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWwudmFsdWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhU291cmNlICYmIGRhdGFTb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5TVVBQT1JUU19TRVJWRVJfRklMVEVSKSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVTZXJ2ZXJTaWRlU2VhcmNoKGZpbHRlckZpZWxkcyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGFTb3VyY2UgJiYgZGF0YVNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLklTX0FQSV9BV0FSRSkgJiYgZGF0YVNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLklTX1BBR0VBQkxFKSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVTaW5nbGVQYWdlU2VhcmNoKGZpbHRlckZpZWxkcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNsaWVudFNpZGVTb3J0U2VhcmNoKGZpbHRlckZpZWxkcywgZSwgdHlwZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNvcnRIYW5kbGVyKHNlYXJjaFNvcnRPYmosIGUsIHR5cGUsIHN0YXRlUGVyc2lzdGVuY2VUcmlnZ2VyZWQ/KSB7XG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSB0aGlzLnRhYmxlLmRhdGFzb3VyY2U7XG4gICAgICAgIGlmICghZGF0YVNvdXJjZSAmJiAhdGhpcy50YWJsZS5kYXRhc2V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzdGF0ZVBlcnNpc3RlbmNlVHJpZ2dlcmVkICYmIHRoaXMudGFibGUuZ2V0Q29uZmlndXJlZFN0YXRlKCkgIT09ICdub25lJyAmJiB1bnN1cHBvcnRlZFN0YXRlUGVyc2lzdGVuY2VUeXBlcy5pbmRleE9mKHRoaXMudGFibGUubmF2aWdhdGlvbikgPCAwKSB7XG4gICAgICAgICAgICBjb25zdCBvYmogPSB7ZGlyZWN0aW9uOiBzZWFyY2hTb3J0T2JqLmRpcmVjdGlvbiwgZmllbGQ6IHNlYXJjaFNvcnRPYmouZmllbGR9O1xuICAgICAgICAgICAgaWYgKHNlYXJjaFNvcnRPYmouZGlyZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZS5zdGF0ZVBlcnNpc3RlbmNlLnNldFdpZGdldFN0YXRlKHRoaXMudGFibGUsIHtzb3J0OiBvYmp9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZS5zdGF0ZVBlcnNpc3RlbmNlLnJlbW92ZVdpZGdldFN0YXRlKHRoaXMudGFibGUsICdzb3J0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRhYmxlLnN0YXRlUGVyc2lzdGVuY2UucmVtb3ZlV2lkZ2V0U3RhdGUodGhpcy50YWJsZSwgJ3NlbGVjdGVkSXRlbScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdSZXRhaW4gU3RhdGUgaGFuZGxpbmcgb24gV2lkZ2V0ICcgKyB0aGlzLnRhYmxlLm5hbWUgKyAnIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGN1cnJlbnQgcGFnaW5hdGlvbiB0eXBlLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV01TLTIyMzg3OiBGb3Igc2VydmVyIHNpZGUgcGFnaW5hdGlvbiwgZXhlY3V0ZSBjbGllbnQgc2lkZSBzb3J0aW5nXG4gICAgICAgIGlmIChkYXRhU291cmNlICYmIGRhdGFTb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5JU19TT1JUQUJMRSkpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlU2V2ZXJTaWRlU29ydChzZWFyY2hTb3J0T2JqLCBlLCBzdGF0ZVBlcnNpc3RlbmNlVHJpZ2dlcmVkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2xpZW50U2lkZVNvcnRTZWFyY2goc2VhcmNoU29ydE9iaiwgZSwgdHlwZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gc2V0IHRoZSAnbGFzdEFjdGlvbicgcGVyZm9ybWVkIG9uIHRoZSB0YWJsZSB0byAnc2VhcmNoX29yX3NvcnQnXG4gICAgc2V0TGFzdEFjdGlvblBlcmZvcm1lZFRvU2VhcmNoU29ydCgpIHtcbiAgICAgICAgdGhpcy50YWJsZS5ncmlkT3B0aW9ucy5zZXRMYXN0QWN0aW9uUGVyZm9ybWVkKHRoaXMudGFibGUuZ3JpZE9wdGlvbnMuQUNUSU9OUy5TRUFSQ0hfT1JfU09SVCk7XG4gICAgICAgIHRoaXMudGFibGUuZ3JpZE9wdGlvbnMuc2V0SXNTZWFyY2hUcmlnZXJyZWQodHJ1ZSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBtZXRob2QgaXMgdHJpZ2dlcmVkIGJ5IGpxdWVyeSB0YWJsZVxuICAgIHNlYXJjaFNvcnRIYW5kbGVyKHNlYXJjaFNvcnRPYmosIGUsIHR5cGUsIHN0YXRlUGVyc2lzdGVuY2VUcmlnZ2VyZWQ/KSB7XG4gICAgICAgIGNvbnN0IGV2ZW50X3R5cGUgPSBlID8gZS50eXBlIDogJyc7XG4gICAgICAgIGlmIChldmVudF90eXBlID09PSAnY2hhbmdlJyAmJiB0aGlzLnRhYmxlLmZpbHRlcm1vZGUgIT09ICdtdWx0aWNvbHVtbicpIHtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldExhc3RBY3Rpb25QZXJmb3JtZWRUb1NlYXJjaFNvcnQoKTtcbiAgICAgICAgICAgIGlmICh0eXBlID09PSAnc2VhcmNoJykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoSGFuZGxlcihzZWFyY2hTb3J0T2JqLCBlLCB0eXBlLCBzdGF0ZVBlcnNpc3RlbmNlVHJpZ2dlcmVkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zb3J0SGFuZGxlcihzZWFyY2hTb3J0T2JqLCBlLCB0eXBlLCBzdGF0ZVBlcnNpc3RlbmNlVHJpZ2dlcmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1ldGhvZCB0byBzaG93L2hpZGUgY2xlYXIgaWNvbiBpbiBtdWx0aSBjb2x1bW4gZmlsdGVyXG4gICAgc2hvd0NsZWFySWNvbihmaWVsZE5hbWUpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnRhYmxlLnJvd0ZpbHRlcltmaWVsZE5hbWVdICYmIHRoaXMudGFibGUucm93RmlsdGVyW2ZpZWxkTmFtZV0udmFsdWU7XG4gICAgICAgIHJldHVybiBpc0RlZmluZWQodmFsdWUpICYmIHZhbHVlICE9PSAnJyAmJiB2YWx1ZSAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBNZXRob2QgY2xlYXIgdGhlIGZpbHRlciB2YWx1ZSBpbiBtdWx0aSBjb2x1bW4gZmlsdGVyXG4gICAgY2xlYXJSb3dGaWx0ZXIoZmllbGROYW1lKSB7XG4gICAgICAgIGlmICh0aGlzLnRhYmxlLnJvd0ZpbHRlciAmJiB0aGlzLnRhYmxlLnJvd0ZpbHRlcltmaWVsZE5hbWVdKSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlLmNvbHVtbnNbZmllbGROYW1lXS5yZXNldEZpbHRlcigpO1xuICAgICAgICAgICAgdGhpcy5vblJvd0ZpbHRlckNoYW5nZShmaWVsZE5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhpcyBtZXRob2QgaXMgdHJpZ2dlcmVkIG9uIHNlbGVjdCBvZiBjb25kaXRpb24gaW4gbXVsdGkgY29sdW1uIGZpbHRlclxuICAgIG9uRmlsdGVyQ29uZGl0aW9uU2VsZWN0KGZpZWxkTmFtZSwgY29uZGl0aW9uKSB7XG4gICAgICAgIHRoaXMudGFibGUucm93RmlsdGVyW2ZpZWxkTmFtZV0gPSB0aGlzLnRhYmxlLnJvd0ZpbHRlcltmaWVsZE5hbWVdIHx8IHt9O1xuICAgICAgICB0aGlzLnRhYmxlLnJvd0ZpbHRlcltmaWVsZE5hbWVdLm1hdGNoTW9kZSA9IGNvbmRpdGlvbjtcbiAgICAgICAgLy8gRm9yIGVtcHR5IG1hdGNoIG1vZGVzLCBjbGVhciBvZmYgdGhlIHZhbHVlIGFuZCBjYWxsIGZpbHRlclxuICAgICAgICBpZiAoXy5pbmNsdWRlcyh0aGlzLnRhYmxlLmVtcHR5TWF0Y2hNb2RlcywgY29uZGl0aW9uKSkge1xuICAgICAgICAgICAgdGhpcy50YWJsZS5jb2x1bW5zW2ZpZWxkTmFtZV0ucmVzZXRGaWx0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMudGFibGUub25Sb3dGaWx0ZXJDaGFuZ2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIHZhbHVlIGlzIHByZXNlbnQsIGNhbGwgdGhlIGZpbHRlci4gRWxzZSwgZm9jdXMgb24gdGhlIGZpZWxkXG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHRoaXMudGFibGUucm93RmlsdGVyW2ZpZWxkTmFtZV0udmFsdWUpICYmIHRoaXMudGFibGUucm93RmlsdGVyW2ZpZWxkTmFtZV0udmFsdWUgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZS5vblJvd0ZpbHRlckNoYW5nZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZS5jb2x1bW5zW2ZpZWxkTmFtZV0uZmlsdGVySW5zdGFuY2UuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1ldGhvZCB0byBnZXQgdGhlIHVwZGF0ZWQgdmFsdWVzIHdoZW4gZmlsdGVyIG9uIGZpZWxkIGlzIGNoYW5nZWQgZm9yIG11bHRpY29sdW1uIGZpbHRlclxuICAgIHByaXZhdGUgZ2V0RmlsdGVyT25GaWVsZFZhbHVlcyhmaWx0ZXJEZWYpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRhYmxlLmRhdGFzb3VyY2UgfHwgIXRoaXMudGFibGUuZGF0YXNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLlNVUFBPUlRTX0RJU1RJTkNUX0FQSSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IGZpbHRlckRlZi5maWVsZDtcbiAgICAgICAgY29uc3QgZm9ybUZpZWxkcyA9IHRoaXMudGFibGUuZnVsbEZpZWxkRGVmcztcbiAgICAgICAgY29uc3QgZmlsdGVyT25GaWVsZHMgPSBfLmZpbHRlcihmb3JtRmllbGRzLCB7J2ZpbHRlcm9uZmlsdGVyJzogZmllbGROYW1lfSk7XG4gICAgICAgIGNvbnN0IG5ld1ZhbCA9IF8uZ2V0KHRoaXMudGFibGUucm93RmlsdGVyLCBbZmllbGROYW1lLCAndmFsdWUnXSk7XG5cbiAgICAgICAgLy8gTG9vcCBvdmVyIHRoZSBmaWVsZHMgZm9yIHdoaWNoIHRoZSBjdXJyZW50IGZpZWxkIGlzIGZpbHRlciBvbiBmaWVsZFxuICAgICAgICBfLmZvckVhY2goZmlsdGVyT25GaWVsZHMsIGZpbHRlckZpZWxkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlck9uID0gZmlsdGVyRmllbGQuZmlsdGVyb25maWx0ZXI7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJLZXkgPSBmaWx0ZXJGaWVsZC5maWVsZDtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlckZpZWxkcyA9IHt9O1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyV2lkZ2V0ID0gZmlsdGVyRmllbGQuZmlsdGVyd2lkZ2V0O1xuXG4gICAgICAgICAgICBpZiAoIWlzRGF0YVNldFdpZGdldChmaWx0ZXJXaWRnZXQpIHx8IGZpbHRlck9uID09PSBmaWx0ZXJLZXkgfHwgZmlsdGVyRmllbGQuaXNGaWx0ZXJEYXRhU2V0Qm91bmQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpbHRlckZpZWxkc1tmaWx0ZXJPbl0gPSAoaXNEZWZpbmVkKG5ld1ZhbCkgJiYgbmV3VmFsICE9PSAnJyAmJiBuZXdWYWwgIT09IG51bGwpID8geyd2YWx1ZScgOiBuZXdWYWx9IDoge307XG5cbiAgICAgICAgICAgIGlmIChmaWx0ZXJXaWRnZXQgPT09IEZvcm1XaWRnZXRUeXBlLkFVVE9DT01QTEVURSAmJiBmaWx0ZXJGaWVsZC5maWx0ZXJJbnN0YW5jZS5kYXRhb3B0aW9ucykge1xuICAgICAgICAgICAgICAgIGZpbHRlckZpZWxkLmZpbHRlckluc3RhbmNlLmRhdGFvcHRpb25zLmZpbHRlckZpZWxkcyA9IGZpbHRlckZpZWxkcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZS5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX0RJU1RJTkNUX0RBVEFfQllfRklFTERTLCB7XG4gICAgICAgICAgICAgICAgICAgICdmaWVsZHMnICAgICAgICAgOiBmaWx0ZXJLZXksXG4gICAgICAgICAgICAgICAgICAgICdmaWx0ZXJGaWVsZHMnICAgOiBmaWx0ZXJGaWVsZHNcbiAgICAgICAgICAgICAgICB9KS50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJGaWVsZC5maWx0ZXJkYXRhc2V0ID0gZGF0YS5kYXRhO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIG1ldGhvZCBpcyB0cmlnZ2VyZWQgb24gdmFsdWUgY2hhbmdlIGluIG11bHRpIGNvbHVtbiBmaWx0ZXJcbiAgICBvblJvd0ZpbHRlckNoYW5nZShmaWVsZE5hbWUpIHtcbiAgICAgICAgY29uc3Qgc2VhcmNoT2JqID0gW107XG4gICAgICAgIGNvbnN0IGZpZWxkID0gXy5maW5kKHRoaXMudGFibGUuZnVsbEZpZWxkRGVmcywgeydmaWVsZCc6IGZpZWxkTmFtZX0pO1xuICAgICAgICAvLyBDb252ZXJ0IHJvdyBmaWx0ZXJzIHRvIGEgc2VhcmNoIG9iamVjdCBhbmQgY2FsbCBzZWFyY2ggaGFuZGxlclxuICAgICAgICBfLmZvckVhY2godGhpcy50YWJsZS5yb3dGaWx0ZXIsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoKGlzRGVmaW5lZCh2YWx1ZS52YWx1ZSkgJiYgdmFsdWUudmFsdWUgIT09ICcnKSB8fCBfLmluY2x1ZGVzKHRoaXMudGFibGUuZW1wdHlNYXRjaE1vZGVzLCB2YWx1ZS5tYXRjaE1vZGUpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZpZWxkICYmIGtleSA9PT0gZmllbGQuZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUudHlwZSAgICAgID0gdmFsdWUudHlwZSB8fCBmaWVsZC50eXBlO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5tYXRjaE1vZGUgPSB2YWx1ZS5tYXRjaE1vZGUgfHwgXy5nZXQodGhpcy50YWJsZS5tYXRjaE1vZGVUeXBlc01hcFt2YWx1ZS50eXBlXSwgMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlYXJjaE9iai5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBtYXRjaE1vZGU6IHZhbHVlLm1hdGNoTW9kZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogdmFsdWUudHlwZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy50YWJsZS5ncmlkT3B0aW9ucy5zZWFyY2hIYW5kbGVyKHNlYXJjaE9iaiwgdW5kZWZpbmVkLCAnc2VhcmNoJyk7XG5cbiAgICAgICAgLy8gSWYgZmllbGQgaXMgcGFzc2VkLCB1cGRhdGUgYW55IGZpbHRlciBvbiBmaWVsZCB2YWx1ZXMgaWYgcHJlc2VudFxuICAgICAgICBpZiAoZmllbGQpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0RmlsdGVyT25GaWVsZFZhbHVlcyhmaWVsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZWZyZXNoRGF0YShpc1NhbWVQYWdlKSB7XG4gICAgICAgIGlmICghdGhpcy50YWJsZS5kYXRhc291cmNlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFnZSA9IGlzU2FtZVBhZ2UgPyB0aGlzLnRhYmxlLmRhdGFOYXZpZ2F0b3IuZG4uY3VycmVudFBhZ2UgOiAxO1xuICAgICAgICBjb25zdCBzb3J0SW5mbyAgICAgPSB0aGlzLnRhYmxlLnNvcnRJbmZvO1xuICAgICAgICBjb25zdCBzb3J0T3B0aW9ucyAgPSBzb3J0SW5mbyAmJiBzb3J0SW5mby5kaXJlY3Rpb24gPyAoc29ydEluZm8uZmllbGQgKyAnICcgKyBzb3J0SW5mby5kaXJlY3Rpb24pIDogJyc7XG4gICAgICAgIGNvbnN0IGZpbHRlckZpZWxkcyA9IHRoaXMuZ2V0RmlsdGVyRmllbGRzKHRoaXMudGFibGUuZmlsdGVySW5mbyk7XG4gICAgICAgIGNvbnN0IGxvZ2ljYWxPcCA9IHRoaXMuZ2V0TG9naWNhbE9wZXJhdG9yKGZpbHRlckZpZWxkcyk7XG4gICAgICAgIHJlZnJlc2hEYXRhU291cmNlKHRoaXMudGFibGUuZGF0YXNvdXJjZSwge1xuICAgICAgICAgICAgcGFnZTogcGFnZSxcbiAgICAgICAgICAgIGZpbHRlckZpZWxkcyA6IGZpbHRlckZpZWxkcyxcbiAgICAgICAgICAgIG9yZGVyQnkgOiBzb3J0T3B0aW9ucyxcbiAgICAgICAgICAgIGNvbmRpdGlvbiA6IGxvZ2ljYWxPcFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
667
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZmlsdGVyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhL3RhYmxlL3NyYy90YWJsZS1maWx0ZXIuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLHlCQUF5QixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ2pKLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBRSxlQUFlLEVBQUUsaUJBQWlCLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUVuSixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFLbkQsTUFBTSxlQUFlLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFFcEYscUNBQXFDO0FBQ3JDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFO0lBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxLQUFLLEVBQUUsRUFBRTtRQUNuQyxPQUFPLFNBQVMsQ0FBQztLQUNwQjtJQUNELElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3BCLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUM1QjtJQUNELElBQUksSUFBSSxLQUFLLFFBQVEsQ0FBQyxRQUFRLEVBQUU7UUFDNUIsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsT0FBTyxFQUFFLENB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SyxDQUFDLFVBQVUsRUFBRTtZQUNyQyxJQUFJLEVBQUUsSUFBSTtZQUNWLFlBQVksRUFBRyxZQUFZO1lBQzNCLE9BQU8sRUFBRyxXQUFXO1lBQ3JCLFNBQVMsRUFBRyxTQUFTO1NBQ3hCLENBQUMsQ0FBQztJQUNQLENBQUM7OztZQXRnQkosU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxxQkFBcUI7YUFDbEM7Ozs0Q0FHZ0IsSUFBSSxZQUFJLE1BQU0sU0FBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbmplY3QsIFNlbGYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgJGFwcERpZ2VzdCwgRGF0YVNvdXJjZSwgRGF0YVR5cGUsIEZvcm1XaWRnZXRUeXBlLCBnZXRDbG9uZWRPYmplY3QsIGlzRGVmaW5lZCwgaXNOdW1iZXJUeXBlLCBhZGp1c3RDb250YWluZXJSaWdodEVkZ2VzIH0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgZ2V0TWF0Y2hNb2RlTXNncywgZ2V0TWF0Y2hNb2RlVHlwZXNNYXAsIGlzRGF0YVNldFdpZGdldCwgcmVmcmVzaERhdGFTb3VyY2UsIHVuc3VwcG9ydGVkU3RhdGVQZXJzaXN0ZW5jZVR5cGVzIH0gZnJvbSAnQHdtL2NvbXBvbmVudHMvYmFzZSc7XG5cbmltcG9ydCB7IFRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi90YWJsZS5jb21wb25lbnQnO1xuXG5kZWNsYXJlIGNvbnN0IF8sICQ7XG5kZWNsYXJlIGNvbnN0IG1vbWVudDtcblxuY29uc3QgZW1wdHlNYXRjaE1vZGVzID0gWydudWxsJywgJ2VtcHR5JywgJ251bGxvcmVtcHR5JywgJ2lzbm90bnVsbCcsICdpc25vdGVtcHR5J107XG5cbi8vIEdldCBzZWFyY2ggdmFsdWUgYmFzZWQgb24gdGhlIHRpbWVcbmNvbnN0IGdldFNlYXJjaFZhbHVlID0gKHZhbHVlLCB0eXBlKSA9PiB7XG4gICAgaWYgKCFpc0RlZmluZWQodmFsdWUpIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoaXNOdW1iZXJUeXBlKHR5cGUpKSB7XG4gICAgICAgIHJldHVybiBfLnRvTnVtYmVyKHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHR5cGUgPT09IERhdGFUeXBlLkRBVEVUSU1FKSB7XG4gICAgICAgIHJldHVybiBtb21lbnQodmFsdWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gICAgcmV0dXJuIF8udG9TdHJpbmcodmFsdWUpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG4vLyBGaWx0ZXIgdGhlIGRhdGEgYmFzZWQgb24gdGhlIHNlYXJjaCB2YWx1ZSBhbmQgY29uZGl0aW9uc1xuY29uc3QgZ2V0RmlsdGVyZWREYXRhID0gKGRhdGEsIHNlYXJjaE9iaiwgdmlzaWJsZUNvbHMgPSBbXSkgPT4ge1xuICAgIGNvbnN0IHNlYXJjaFZhbCA9IGdldFNlYXJjaFZhbHVlKHNlYXJjaE9iai52YWx1ZSwgc2VhcmNoT2JqLnR5cGUpO1xuICAgIGxldCBjdXJyZW50VmFsO1xuICAgIC8vIFJldHVybiB3aG9sZSBkYXRhIGlmXG4gICAgLy8gLSBzZWFyY2ggdmFsdWUgaXMgdW5kZWZpbmVkIGFuZCBtYXRjaG1vZGUgaXMgbm90IGFuIGVtcHR5IG1hdGNobW9kZSB0eXBlXG4gICAgLy8gLSBzZWFyY2ggdmFsdWUgaXMgbnVsbCBhbmQgZGF0YXR5cGUgaXMgbnVtYmVyLiBOdWxsIGNhbiBub3QgYmUgY29tcGFyZWQgd2l0aCBudW1lcmljIHZhbHVlc1tXTVMtMTkyNzVdLlxuICAgIGlmICgoIWlzRGVmaW5lZChzZWFyY2hWYWwpICYmICFfLmluY2x1ZGVzKGVtcHR5TWF0Y2hNb2Rlcywgc2VhcmNoT2JqLm1hdGNoTW9kZSkpIHx8IChpc051bWJlclR5cGUoc2VhcmNoT2JqLnR5cGUpICYmIF8uaXNOdWxsKHNlYXJjaE9iai52YWx1ZSkpKSB7XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cbiAgICBkYXRhID0gZGF0YS5maWx0ZXIoKG9iaikgPT4ge1xuICAgICAgICBsZXQgaXNFeGlzdHM7XG4gICAgICAgIGlmIChzZWFyY2hPYmouZmllbGQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRWYWwgPSBnZXRTZWFyY2hWYWx1ZShfLmdldChvYmosIHNlYXJjaE9iai5maWVsZCksIHNlYXJjaE9iai50eXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGN1cnJlbnRWYWwgPSBbXTtcbiAgICAgICAgICAgIF8uZm9yRWFjaChvYmosICh2YWwsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICgoXy5pbmNsdWRlcyh2aXNpYmxlQ29scywga2V5KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbC5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV01TLTIyMjcxIElmIHRoZSBrZXkgaXMgaW4gbmVzdGVkIGtleSBmb3JtYXQgKGRvdCBmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgYWxsIHRoZSBpbmRleGVzIG9mIHRoZSBrZXkgaW4gdmlzaWJsZWNvbHMgYW5kIGV4dHJhY3QgdGhlaXIgdmFsdWVzIGZyb20gb2JqXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbEluZGV4ID0gXy5maWx0ZXIoXy5yYW5nZSh2aXNpYmxlQ29scy5sZW5ndGgpLCAoaSkgPT4gdmlzaWJsZUNvbHNbaV0uaW5jbHVkZXMoa2V5KSk7XG4gICAgICAgICAgICAgICAgICAgIF8uZm9yRWFjaChjb2xJbmRleCwgKGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IF8uZ2V0KG9iaiwgdmlzaWJsZUNvbHNbaW5kZXhdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VmFsLmluZGV4T2YodmFsdWUpIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRWYWwucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY3VycmVudFZhbCA9IGN1cnJlbnRWYWwuam9pbignICcpLnRvTG93ZXJDYXNlKCk7IC8vIElmIGZpZWxkIGlzIG5vdCB0aGVyZSwgc2VhcmNoIG9uIGFsbCB0aGUgY29sdW1uc1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAoc2VhcmNoT2JqLm1hdGNoTW9kZSkge1xuICAgICAgICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICAgICAgICAgIGlzRXhpc3RzID0gXy5zdGFydHNXaXRoKGN1cnJlbnRWYWwsIHNlYXJjaFZhbCBhcyBzdHJpbmcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgICAgICAgICBpc0V4aXN0cyA9IF8uZW5kc1dpdGgoY3VycmVudFZhbCwgc2VhcmNoVmFsIGFzIHN0cmluZyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdleGFjdCc6XG4gICAgICAgICAgICAgICAgaXNFeGlzdHMgPSBfLmlzRXF1YWwoY3VycmVudFZhbCwgc2VhcmNoVmFsKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ25vdGVxdWFscyc6XG4gICAgICAgICAgICAgICAgaXNFeGlzdHMgPSAhXy5pc0VxdWFsKGN1cnJlbnRWYWwsIHNlYXJjaFZhbCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdudWxsJzpcbiAgICAgICAgICAgICAgICBpc0V4aXN0cyA9IF8uaXNOdWxsKGN1cnJlbnRWYWwpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXNub3RudWxsJzpcbiAgICAgICAgICAgICAgICBpc0V4aXN0cyA9ICFfLmlzTnVsbChjdXJyZW50VmFsKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2VtcHR5JzpcbiAgICAgICAgICAgICAgICBpc0V4aXN0cyA9IF8uaXNFbXB0eShjdXJyZW50VmFsKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzbm90ZW1wdHknOlxuICAgICAgICAgICAgICAgIGlzRXhpc3RzID0gIV8uaXNFbXB0eShjdXJyZW50VmFsKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ251bGxvcmVtcHR5JzpcbiAgICAgICAgICAgICAgICBpc0V4aXN0cyA9IF8uaXNOdWxsKGN1cnJlbnRWYWwpIHx8IF8uaXNFbXB0eShjdXJyZW50VmFsKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2xlc3N0aGFuJzpcbiAgICAgICAgICAgICAgICBpc0V4aXN0cyA9IGN1cnJlbnRWYWwgPCBzZWFyY2hWYWw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdsZXNzdGhhbmVxdWFsJzpcbiAgICAgICAgICAgICAgICBpc0V4aXN0cyA9IGN1cnJlbnRWYWwgPD0gc2VhcmNoVmFsO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZ3JlYXRlcnRoYW4nOlxuICAgICAgICAgICAgICAgIGlzRXhpc3RzID0gY3VycmVudFZhbCA+IHNlYXJjaFZhbDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2dyZWF0ZXJ0aGFuZXF1YWwnOlxuICAgICAgICAgICAgICAgIGlzRXhpc3RzID0gY3VycmVudFZhbCA+PSBzZWFyY2hWYWw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlzRXhpc3RzID0gaXNOdW1iZXJUeXBlKHNlYXJjaE9iai50eXBlKSA/IF8uaXNFcXVhbChjdXJyZW50VmFsLCBzZWFyY2hWYWwpIDogXy5pbmNsdWRlcyhjdXJyZW50VmFsLCBzZWFyY2hWYWwpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0V4aXN0cztcbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YTtcbn07XG5cbi8vIFNldCB0aGUgZmlsdGVyIGZpZWxkcyB3aGVuIHRoZSBzZWFyY2ggdmFsdWUgaXMgc3BlY2lmaWVkIGFuZCBmaWVsZCBpcyBub3Qgc2VsZWN0ZWRcbmNvbnN0IHNldEFsbEZpbHRlckZpZWxkcyA9IGZ1bmN0aW9uKGZpbHRlckZpZWxkcywgc2VhcmNoT2JqLCB2aXNpYmxlQ29scykge1xuICAgIHZpc2libGVDb2xzLmZvckVhY2goZnVuY3Rpb24oZmllbGQpIHtcbiAgICAgICAgZmlsdGVyRmllbGRzW2ZpZWxkXSA9IHtcbiAgICAgICAgICAgICd2YWx1ZSc6IHNlYXJjaE9iai52YWx1ZSxcbiAgICAgICAgICAgICd0eXBlJyA6IHNlYXJjaE9iai52YWx1ZS50eXBlLFxuICAgICAgICAgICAgJ2xvZ2ljYWxPcCc6ICdPUidcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHNlYXJjaE9iai5tYXRjaE1vZGUpIHtcbiAgICAgICAgICAgIGZpbHRlckZpZWxkc1tmaWVsZF0ubWF0Y2hNb2RlID0gc2VhcmNoT2JqLm1hdGNoTW9kZTtcbiAgICAgICAgfVxuICAgIH0pO1xufTtcblxuLy8gU2V0IHRoZSBmaWx0ZXIgZmllbGRzIGFzIHJlcXVpcmVkIGJ5IGRhdGFzb3VyY2VcbmNvbnN0IHNldEZpbHRlckZpZWxkcyA9IChmaWx0ZXJGaWVsZHMsIHNlYXJjaE9iaiwgdmlzaWJsZUNvbHMgPSBbXSkgPT4ge1xuICAgIGNvbnN0IGZpZWxkID0gc2VhcmNoT2JqICYmIHNlYXJjaE9iai5maWVsZDtcbiAgICAvKlNldCB0aGUgZmlsdGVyIG9wdGlvbnMgd2hlbiBhIGZpZWxkL2NvbHVtbiBoYXMgYmVlbiBzZWxlY3RlZC4qL1xuICAgIGlmIChmaWVsZCkge1xuICAgICAgICBmaWx0ZXJGaWVsZHNbZmllbGRdID0ge1xuICAgICAgICAgICAgJ3ZhbHVlJyAgICAgOiBzZWFyY2hPYmoudmFsdWUsXG4gICAgICAgICAgICAnbG9naWNhbE9wJyA6ICdBTkQnXG4gICAgICAgIH07XG4gICAgICAgIGlmIChzZWFyY2hPYmoubWF0Y2hNb2RlKSB7XG4gICAgICAgICAgICBmaWx0ZXJGaWVsZHNbZmllbGRdLm1hdGNoTW9kZSA9IHNlYXJjaE9iai5tYXRjaE1vZGU7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICAvKlNldCB0aGUgZmlsdGVyIG9wdGlvbnMgd2hlbiBhIGZpZWxkL2NvbHVtbiBoYXNuJ3QgYmVlbiBzZWxlY3RlZC4qL1xuICAgICAgICBzZXRBbGxGaWx0ZXJGaWVsZHMoZmlsdGVyRmllbGRzLCBzZWFyY2hPYmosIHZpc2libGVDb2xzKTtcbiAgICB9XG59O1xuXG4vLyBUcmFuc2Zvcm0gZmlsdGVyIGZpZWxkcyBmcm9tIGFycmF5IHRvIG9iamVjdCBoYXZpbmcgZmllbGQgbmFtZXMgYXMga2V5c1xuY29uc3QgdHJhbnNmb3JtRmlsdGVyRmllbGQgPSAodXNlckZpbHRlcnMsIGZpbHRlckZpZWxkKSA9PiB7XG4gICAgaWYgKGZpbHRlckZpZWxkLmZpZWxkKSB7XG4gICAgICAgIHVzZXJGaWx0ZXJzW2ZpbHRlckZpZWxkLmZpZWxkXSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBmaWx0ZXJGaWVsZC52YWx1ZSxcbiAgICAgICAgICAgIG1hdGNoTW9kZTogZmlsdGVyRmllbGQubWF0Y2hNb2RlLFxuICAgICAgICAgICAgdHlwZTogZmlsdGVyRmllbGQudHlwZVxuICAgICAgICB9O1xuICAgIH1cbn07XG5cbi8vIEJ1aWxkIGEgZmlsdGVyIEZpZWxkcyBvYmplY3RcbmNvbnN0IGFkZFRvRmlsdGVyRmllbGRzID0gKGZpbHRlckZpZWxkcywgc2VhcmNoT2JqKSA9PiB7XG4gICAgZmlsdGVyRmllbGRzLnB1c2goe1xuICAgICAgICBmaWVsZDogKHNlYXJjaE9iai5rZXkpID8gc2VhcmNoT2JqLmtleSA6ICcnLFxuICAgICAgICBtYXRjaE1vZGU6IHNlYXJjaE9iai5tYXRjaE1vZGUsXG4gICAgICAgIHR5cGU6IHNlYXJjaE9iai50eXBlLFxuICAgICAgICB2YWx1ZTogc2VhcmNoT2JqLnZhbHVlXG4gICAgfSk7XG59O1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1t3bVRhYmxlRmlsdGVyU29ydF0nXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlRmlsdGVyU29ydERpcmVjdGl2ZSB7XG5cbiAgICBjb25zdHJ1Y3RvcihAU2VsZigpIEBJbmplY3QoVGFibGVDb21wb25lbnQpIHByaXZhdGUgdGFibGUpIHtcbiAgICAgICAgdGFibGUuX3NlYXJjaFNvcnRIYW5kbGVyID0gdGhpcy5zZWFyY2hTb3J0SGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgICB0YWJsZS5nZXRTZWFyY2hSZXN1bHQgPSB0aGlzLmdldFNlYXJjaFJlc3VsdC5iaW5kKHRoaXMpO1xuICAgICAgICB0YWJsZS5nZXRTb3J0UmVzdWx0ID0gdGhpcy5nZXRTb3J0UmVzdWx0LmJpbmQodGhpcyk7XG4gICAgICAgIHRhYmxlLmNoZWNrRmlsdGVyc0FwcGxpZWQgPSB0aGlzLmNoZWNrRmlsdGVyc0FwcGxpZWQuYmluZCh0aGlzKTtcbiAgICAgICAgdGFibGUuZ2V0RmlsdGVyRmllbGRzID0gdGhpcy5nZXRGaWx0ZXJGaWVsZHMuYmluZCh0aGlzKTtcbiAgICAgICAgdGFibGUub25Sb3dGaWx0ZXJDaGFuZ2UgPSB0aGlzLm9uUm93RmlsdGVyQ2hhbmdlLmJpbmQodGhpcyk7XG4gICAgICAgIHRhYmxlLm9uRmlsdGVyQ29uZGl0aW9uU2VsZWN0ID0gdGhpcy5vbkZpbHRlckNvbmRpdGlvblNlbGVjdC5iaW5kKHRoaXMpO1xuICAgICAgICB0YWJsZS5zaG93Q2xlYXJJY29uID0gdGhpcy5zaG93Q2xlYXJJY29uLmJpbmQodGhpcyk7XG4gICAgICAgIHRhYmxlLmNsZWFyUm93RmlsdGVyID0gdGhpcy5jbGVhclJvd0ZpbHRlci5iaW5kKHRoaXMpO1xuICAgICAgICB0YWJsZS5tYXRjaE1vZGVUeXBlc01hcCA9IGdldE1hdGNoTW9kZVR5cGVzTWFwKCk7XG4gICAgICAgIHRhYmxlLm1hdGNoTW9kZU1zZ3MgPSBnZXRNYXRjaE1vZGVNc2dzKHRhYmxlLmFwcExvY2FsZSk7XG4gICAgICAgIHRhYmxlLmVtcHR5TWF0Y2hNb2RlcyA9IGVtcHR5TWF0Y2hNb2RlcztcbiAgICAgICAgdGFibGUuZ2V0TmF2aWdhdGlvblRhcmdldEJ5U29ydEluZm8gPSB0aGlzLmdldE5hdmlnYXRpb25UYXJnZXRCeVNvcnRJbmZvLmJpbmQodGhpcyk7XG4gICAgICAgIHRhYmxlLnJlZnJlc2hEYXRhID0gdGhpcy5yZWZyZXNoRGF0YS5iaW5kKHRoaXMpO1xuICAgICAgICB0YWJsZS5jbGVhckZpbHRlciA9IHRoaXMuY2xlYXJGaWx0ZXIuYmluZCh0aGlzKTtcbiAgICAgICAgdGFibGUuYWRqdXN0Q29udGFpbmVyID0gdGhpcy5hZGp1c3RDb250YWluZXIuYmluZCh0aGlzKTtcbiAgICB9XG5cbiAgICBhZGp1c3RDb250YWluZXIoZmllbGROYW1lKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgYWRqdXN0Q29udGFpbmVyUmlnaHRFZGdlcygkKCdicy1kcm9wZG93bi1jb250YWluZXInKSwgdGhpcy50YWJsZS5yb3dGaWx0ZXJDb21wbGllZFRsW2ZpZWxkTmFtZV0sIHRoaXMudGFibGUsICQoJ2JzLWRyb3Bkb3duLWNvbnRhaW5lciAuZHJvcGRvd24tbWVudScpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gR2V0IGZpcnN0IG9yIGxhc3QgcGFnZSBiYXNlZCBvbiBzb3J0IGluZm8gb2YgcHJpbWFyeSBrZXlcbiAgICBnZXROYXZpZ2F0aW9uVGFyZ2V0QnlTb3J0SW5mbygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGUuc29ydEluZm8gJiYgdGhpcy50YWJsZS5zb3J0SW5mby5kaXJlY3Rpb24gPT09ICdkZXNjJyAmJlxuICAgICAgICAgICAgICAgICAgICBfLmluY2x1ZGVzKHRoaXMudGFibGUucHJpbWFyeUtleSwgdGhpcy50YWJsZS5zb3J0SW5mby5maWVsZCkgPyAnZmlyc3QnIDogJ2xhc3QnO1xuICAgIH1cblxuICAgIC8vIFJldHVybnMgYWxsIHRoZSBjb2x1bW5zIG9mIHRoZSB0YWJsZSB3aGVyZWluLCBzaG93aW5maWx0ZXIgaXMgc2V0IHRvIHRydWVcbiAgICBnZXRUYWJsZVZpc2libGVDb2xzKCkge1xuICAgICAgICBjb25zdCB2aXNpYmxlQ29scyA9IFtdO1xuICAgICAgICBfLmZvckVhY2godGhpcy50YWJsZS5jb2x1bW5zLCAodmFsLCBjb2wpID0+IHtcbiAgICAgICAgICAgIGlmIChfLnRvTG93ZXIoXy50b1N0cmluZyh2YWwuc2hvd2luZmlsdGVyKSkgPT09ICd0cnVlJyAmJiBjb2wgIT09ICdyb3dPcGVyYXRpb25zJyAmJiB2YWwuc2VhcmNoYWJsZSkge1xuICAgICAgICAgICAgICAgIHZpc2libGVDb2xzLnB1c2goY29sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB2aXNpYmxlQ29scztcbiAgICB9XG5cbiAgICAvLyBjYWxsIHRoZSBzZXQgZmlsdGVyIGZpZWxkcyBmdW5jdGlvbiBiYXNlZCBvbiB0aGUgZmllbGQgc2VsZWN0ZWQgb3Igbm90XG4gICAgaW52b2tlU2V0RmlsdGVyZmllbGRCYXNlZE9uRmllbGR2YWwoc2VhcmNoT2JqLCBmaWx0ZXJGaWVsZHMpIHtcbiAgICAgICAgaWYgKHNlYXJjaE9iai5maWVsZCkge1xuICAgICAgICAgICAgc2V0RmlsdGVyRmllbGRzKGZpbHRlckZpZWxkcywgc2VhcmNoT2JqKTtcbiAgICAgICAgfSBlbHNlIGlmICghXy5pc0VtcHR5KHNlYXJjaE9iaikpIHtcbiAgICAgICAgICAgY29uc3QgdmlzaWJsZUNvbHMgPSB0aGlzLmdldFRhYmxlVmlzaWJsZUNvbHMoKTtcbiAgICAgICAgICAgIHNldEZpbHRlckZpZWxkcyhmaWx0ZXJGaWVsZHMsIHNlYXJjaE9iaiwgdmlzaWJsZUNvbHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gR2V0IHRoZSBmaWx0ZXIgZmllbGRzIGFzIHJlcXVpcmVkIGJ5IGRhdGFzb3VyY2VcbiAgICBnZXRGaWx0ZXJGaWVsZHMoc2VhcmNoT2JqKSB7XG4gICAgICAgIHNlYXJjaE9iaiA9IHNlYXJjaE9iaiB8fCB7fTtcbiAgICAgICAgY29uc3QgZmlsdGVyRmllbGRzID0ge307XG4gICAgICAgIGlmIChfLmlzQXJyYXkoc2VhcmNoT2JqKSkge1xuICAgICAgICAgICAgXy5mb3JFYWNoKHNlYXJjaE9iaiwgIG9iaiA9PiB7XG4gICAgICAgICAgICAgICB0aGlzLmludm9rZVNldEZpbHRlcmZpZWxkQmFzZWRPbkZpZWxkdmFsKG9iaiwgZmlsdGVyRmllbGRzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnZva2VTZXRGaWx0ZXJmaWVsZEJhc2VkT25GaWVsZHZhbChzZWFyY2hPYmosIGZpbHRlckZpZWxkcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlckZpZWxkcztcbiAgICB9XG5cbiAgICAvLyBHZXQgdGhlIGxvZ2ljYWwgb3BlcmF0b3IgZm9yIHRoZSBzZWFyY2ggZmlsdGVyXG4gICAgZ2V0TG9naWNhbE9wZXJhdG9yKGZpbHRlckZpZWxkcykge1xuICAgICAgICBsZXQgb3BlcmF0b3IgPSAnJztcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZCBpbiBmaWx0ZXJGaWVsZHMpIHtcbiAgICAgICAgICAgIG9wZXJhdG9yID0gZmlsdGVyRmllbGRzW2ZpZWxkXVsnbG9naWNhbE9wJ10gfHwgJyc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3BlcmF0b3I7XG4gICAgfVxuXG4gICAgLy8gUmVzZXQgdGhlIHNvcnQgYmFzZWQgb24gc29ydCByZXR1cm5lZCBieSB0aGUgY2FsbFxuICAgIHJlc2V0U29ydFN0YXR1cyh2YXJpYWJsZVNvcnQpIHtcbiAgICAgICAgbGV0IGdyaWRTb3J0U3RyaW5nO1xuICAgICAgICBpZiAoIV8uaXNFbXB0eSh0aGlzLnRhYmxlLnNvcnRJbmZvKSAmJiB0aGlzLnRhYmxlLmRhdGFzb3VyY2UpIHtcbiAgICAgICAgICAgIGdyaWRTb3J0U3RyaW5nID0gdGhpcy50YWJsZS5zb3J0SW5mby5maWVsZCArICcgJyArIHRoaXMudGFibGUuc29ydEluZm8uZGlyZWN0aW9uO1xuICAgICAgICAgICAgdmFyaWFibGVTb3J0ID0gdGhpcy50YWJsZS5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uR0VUX09QVElPTlMpLm9yZGVyQnkgfHwgdmFyaWFibGVTb3J0O1xuICAgICAgICAgICAgaWYgKHZhcmlhYmxlU29ydCkgeyAvLyBJZiBtdWx0aXBsZSBvcmRlciBieSBmaWVsZHMgYXJlIHByZXNlbnQsIGNvbXBhcmUgd2l0aCB0aGUgZmlyc3Qgb25lXG4gICAgICAgICAgICAgICAgdmFyaWFibGVTb3J0ID0gXy5oZWFkKF8uc3BsaXQodmFyaWFibGVTb3J0LCAnLCcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChncmlkU29ydFN0cmluZyAhPT0gdmFyaWFibGVTb3J0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZS5jYWxsRGF0YUdyaWRNZXRob2QoJ3Jlc2V0U29ydEljb25zJyk7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZS5zb3J0SW5mbyA9IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMudGFibGUuc2V0RGF0YUdyaWRPcHRpb24oJ3NvcnRJbmZvJywge30pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2xlYXIgdGhlIGFsbCB0aGUgZmlsdGVycyBhcHBsaWVkXG4gICAgY2xlYXJGaWx0ZXIoc2tpcEZpbHRlcikge1xuICAgICAgICBsZXQgJGdyaWRFbGVtZW50O1xuICAgICAgICB0aGlzLnRhYmxlLmZpbHRlckluZm8gPSB7fTtcbiAgICAgICAgaWYgKHRoaXMudGFibGUuZmlsdGVybW9kZSA9PT0gJ211bHRpY29sdW1uJykge1xuICAgICAgICAgICAgdGhpcy50YWJsZS5maWVsZERlZnMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjb2wucmVzZXRGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sLnJlc2V0RmlsdGVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIXNraXBGaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLm9uUm93RmlsdGVyQ2hhbmdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy50YWJsZS5maWx0ZXJtb2RlID09PSAnc2VhcmNoJykge1xuICAgICAgICAgICAgJGdyaWRFbGVtZW50ID0gdGhpcy50YWJsZS5kYXRhZ3JpZEVsZW1lbnQ7XG4gICAgICAgICAgICAkZ3JpZEVsZW1lbnQuZmluZCgnW2RhdGEtZWxlbWVudD1cImRnU2VhcmNoVGV4dFwiXScpLnZhbCgnJyk7XG4gICAgICAgICAgICAkZ3JpZEVsZW1lbnQuZmluZCgnW2RhdGEtZWxlbWVudD1cImRnRmlsdGVyVmFsdWVcIl0nKS52YWwoJycpO1xuICAgICAgICAgICAgaWYgKCFza2lwRmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgJGdyaWRFbGVtZW50LmZpbmQoJy5hcHAtc2VhcmNoLWJ1dHRvbicpLnRyaWdnZXIoJ2NsaWNrJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayB0aGUgZmlsdGVycyBhcHBsaWVkIGFuZCByZW1vdmUgaWYgZGF0IGRvZXMgbm90IGNvbnRhaW4gYW55IGZpbHRlcnNcbiAgICBjaGVja0ZpbHRlcnNBcHBsaWVkKHZhcmlhYmxlU29ydCkge1xuICAgICAgICBpZiAoIXRoaXMudGFibGUuZGF0YXNvdXJjZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRhYmxlLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5TVVBQT1JUU19TRVJWRVJfRklMVEVSKSkge1xuICAgICAgICAgICAgaWYgKF8uaXNFbXB0eSh0aGlzLnRhYmxlLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfT1BUSU9OUykuZmlsdGVyRmllbGRzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJGaWx0ZXIodHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJlc2V0U29ydFN0YXR1cyh2YXJpYWJsZVNvcnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLnRhYmxlLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5JU19QQUdFQUJMRSkpIHtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTb3J0U3RhdHVzKHZhcmlhYmxlU29ydCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIGRhdGEgZmlsdGVyZWQgdXNpbmcgc2VhcmNoT2JqXG4gICAgZ2V0U2VhcmNoUmVzdWx0KGRhdGEsIHNlYXJjaE9iaikge1xuICAgICAgICBjb25zdCB2aXNpYmxlQ29scyA9IHRoaXMuZ2V0VGFibGVWaXNpYmxlQ29scygpO1xuICAgICAgICBpZiAoIXNlYXJjaE9iaikge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF8uaXNBcnJheShzZWFyY2hPYmopKSB7XG4gICAgICAgICAgICBzZWFyY2hPYmouZm9yRWFjaCgob2JqKSA9PiB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGdldEZpbHRlcmVkRGF0YShkYXRhLCBvYmosIHZpc2libGVDb2xzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IGdldEZpbHRlcmVkRGF0YShkYXRhLCBzZWFyY2hPYmosIHZpc2libGVDb2xzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm5zIGRhdGEgc29ydGVkIHVzaW5nIHNvcnRPYmpcbiAgICBnZXRTb3J0UmVzdWx0KGRhdGEsIHNvcnRPYmopIHtcbiAgICAgICAgaWYgKHNvcnRPYmogJiYgc29ydE9iai5kaXJlY3Rpb24pIHtcbiAgICAgICAgICAgIGRhdGEgPSBfLm9yZGVyQnkoZGF0YSwgc29ydE9iai5maWVsZCwgc29ydE9iai5kaXJlY3Rpb24pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIC8vIFRoaXMgbWV0aG9kIGhhbmRsZXMgdGhlIGNsaWVudCBzaWRlIHNvcnQgYW5kIHNlYXJjaFxuICAgIHByaXZhdGUgaGFuZGxlQ2xpZW50U2lkZVNvcnRTZWFyY2goc2VhcmNoU29ydE9iaiwgZSwgdHlwZSkge1xuICAgICAgICB0aGlzLnRhYmxlLl9pc0NsaWVudFNlYXJjaCA9IHRydWU7XG5cbiAgICAgICAgbGV0IGRhdGE7XG4gICAgICAgIGRhdGEgPSB0aGlzLnRhYmxlLmlzTmF2aWdhdGlvbkVuYWJsZWQoKSA/IGdldENsb25lZE9iamVjdCh0aGlzLnRhYmxlLl9fZnVsbERhdGEpIDogZ2V0Q2xvbmVkT2JqZWN0KHRoaXMudGFibGUuZGF0YXNldCk7XG4gICAgICAgIGlmICh0eXBlID09PSAnc2VhcmNoJykge1xuICAgICAgICAgICAgdGhpcy50YWJsZS5maWx0ZXJJbmZvID0gc2VhcmNoU29ydE9iajtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudGFibGUuc29ydEluZm8gPSBzZWFyY2hTb3J0T2JqO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfLmlzT2JqZWN0KGRhdGEpICYmICFfLmlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICAgIGRhdGEgPSBbZGF0YV07XG4gICAgICAgIH1cbiAgICAgICAgLypCb3RoIHRoZSBmdW5jdGlvbnMgcmV0dXJuIHNhbWUgJ2RhdGEnIGlmIGFyZ3VtZW50cyBhcmUgdW5kZWZpbmVkKi9cbiAgICAgICAgZGF0YSA9IHRoaXMuZ2V0U2VhcmNoUmVzdWx0KGRhdGEsIHRoaXMudGFibGUuZmlsdGVySW5mbyk7XG4gICAgICAgIGRhdGEgPSB0aGlzLmdldFNvcnRSZXN1bHQoZGF0YSwgdGhpcy50YWJsZS5zb3J0SW5mbyk7XG4gICAgICAgIHRoaXMudGFibGUuc2VydmVyRGF0YSA9IGRhdGE7XG5cbiAgICAgICAgaWYgKHR5cGUgPT09ICdzb3J0Jykge1xuICAgICAgICAgICAgLy8gQ2FsbGluZyAnb25Tb3J0JyBldmVudFxuICAgICAgICAgICAgdGhpcy50YWJsZS5pbnZva2VFdmVudENhbGxiYWNrKCdzb3J0JywgeyRldmVudDogZSwgJGRhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogdGhpcy50YWJsZS5zZXJ2ZXJEYXRhLFxuICAgICAgICAgICAgICAgICAgICBzb3J0RGlyZWN0aW9uOiB0aGlzLnRhYmxlLnNvcnRJbmZvLmRpcmVjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgY29sRGVmOiB0aGlzLnRhYmxlLmNvbHVtbnNbdGhpcy50YWJsZS5zb3J0SW5mby5maWVsZF1cbiAgICAgICAgICAgICAgICB9fSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50YWJsZS5pc05hdmlnYXRpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBwYWdlIG51bWJlciB0byAxXG4gICAgICAgICAgICB0aGlzLnRhYmxlLmRhdGFOYXZpZ2F0b3IuZG4uY3VycmVudFBhZ2UgPSAxO1xuICAgICAgICAgICAgdGhpcy50YWJsZS5kYXRhTmF2aWdhdG9yLnNldFBhZ2luZ1ZhbHVlcyhkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudGFibGUuc2V0R3JpZERhdGEodGhpcy50YWJsZS5zZXJ2ZXJEYXRhKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoaXMgbWV0aG9kIGhhbmRsZXMgdGhlIHNlYXJjaCBmb3IgcGFnZWFibGUgZGF0YXNvdXJjZVxuICAgIHByaXZhdGUgaGFuZGxlU2luZ2xlUGFnZVNlYXJjaChzZWFyY2hPYmopIHtcbiAgICAgICAgdGhpcy50YWJsZS5faXNQYWdlU2VhcmNoID0gdHJ1ZTtcblxuICAgICAgICBsZXQgZGF0YSAgPSBnZXRDbG9uZWRPYmplY3QodGhpcy50YWJsZS5ncmlkRGF0YSk7XG4gICAgICAgIGNvbnN0ICRyb3dzID0gdGhpcy50YWJsZS5kYXRhZ3JpZEVsZW1lbnQuZmluZCgndGJvZHkgdHIuYXBwLWRhdGFncmlkLXJvdycpO1xuICAgICAgICB0aGlzLnRhYmxlLmZpbHRlckluZm8gPSBzZWFyY2hPYmo7XG4gICAgICAgIGRhdGEgPSB0aGlzLmdldFNlYXJjaFJlc3VsdChkYXRhLCBzZWFyY2hPYmopO1xuICAgICAgICAvLyBDb21wYXJlZCB0aGUgZmlsdGVyZWQgZGF0YSBhbmQgb3JpZ2luYWwgZGF0YSwgdG8gc2hvdyBvciBoaWRlIHRoZSByb3dzXG4gICAgICAgIF8uZm9yRWFjaCh0aGlzLnRhYmxlLmdyaWREYXRhLCAodmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCAkcm93ID0gJCgkcm93c1tpbmRleF0pO1xuICAgICAgICAgICAgaWYgKF8uZmluZChkYXRhLCBvYmogPT4gXy5pc0VxdWFsKG9iaiwgdmFsdWUpKSkge1xuICAgICAgICAgICAgICAgICRyb3cuc2hvdygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAkcm93LmhpZGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChkYXRhICYmIGRhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2V0U3RhdHVzJywgJ3JlYWR5Jyk7XG4gICAgICAgICAgICAvLyBTZWxlY3QgdGhlIGZpcnN0IHJvdyBhZnRlciB0aGUgc2VhcmNoIGZvciBzaW5nbGUgc2VsZWN0XG4gICAgICAgICAgICBpZiAodGhpcy50YWJsZS5ncmlkZmlyc3Ryb3dzZWxlY3QgJiYgIXRoaXMudGFibGUubXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLmNhbGxEYXRhR3JpZE1ldGhvZCgnc2VsZWN0Rmlyc3RSb3cnLCB0cnVlLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudGFibGUuY2FsbERhdGFHcmlkTWV0aG9kKCdzZXRTdGF0dXMnLCAnbm9kYXRhJywgdGhpcy50YWJsZS5ub2RhdGFtZXNzYWdlKTtcbiAgICAgICAgICAgIHRoaXMudGFibGUuc2VsZWN0ZWRpdGVtID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGFibGUuY2FsbERhdGFHcmlkTWV0aG9kKCd1cGRhdGVTZWxlY3RBbGxDaGVja2JveFN0YXRlJyk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBtZXRob2QgaGFuZGxlcyB0aGUgc2VhcmNoIGZvciBzZXJ2ZXIgc2lkZSB2YXJpYWJsZXNcbiAgICBwcml2YXRlIGhhbmRsZVNlcnZlclNpZGVTZWFyY2goc2VhcmNoT2JqKSB7XG4gICAgICAgIHRoaXMudGFibGUuZmlsdGVySW5mbyA9IHNlYXJjaE9iajtcblxuICAgICAgICBpZiAoIXRoaXMudGFibGUuZGF0YXNvdXJjZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc29ydEluZm8gICAgID0gdGhpcy50YWJsZS5zb3J0SW5mbztcbiAgICAgICAgY29uc3Qgc29ydE9wdGlvbnMgID0gc29ydEluZm8gJiYgc29ydEluZm8uZGlyZWN0aW9uID8gKHNvcnRJbmZvLmZpZWxkICsgJyAnICsgc29ydEluZm8uZGlyZWN0aW9uKSA6ICcnO1xuICAgICAgICBjb25zdCBmaWx0ZXJGaWVsZHMgPSB0aGlzLmdldEZpbHRlckZpZWxkcyhzZWFyY2hPYmopO1xuICAgICAgICBjb25zdCBsb2dpY2FsT3AgPSB0aGlzLmdldExvZ2ljYWxPcGVyYXRvcihmaWx0ZXJGaWVsZHMpO1xuICAgICAgICByZWZyZXNoRGF0YVNvdXJjZSh0aGlzLnRhYmxlLmRhdGFzb3VyY2UsIHtcbiAgICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgICAgICBmaWx0ZXJGaWVsZHMgOiBmaWx0ZXJGaWVsZHMsXG4gICAgICAgICAgICBvcmRlckJ5IDogc29ydE9wdGlvbnMsXG4gICAgICAgICAgICBjb25kaXRpb24gOiBsb2dpY2FsT3BcbiAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAkYXBwRGlnZXN0KCk7XG4gICAgICAgIH0sICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudGFibGUudG9nZ2xlTWVzc2FnZSh0cnVlLCAnZXJyb3InLCB0aGlzLnRhYmxlLm5vZGF0YW1lc3NhZ2UpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIG1ldGhvZCBoYW5kbGVzIHRoZSBzb3J0IGZvciBzZXJ2ZXIgc2lkZSB2YXJpYWJsZXNcbiAgICBwcml2YXRlIGhhbmRsZVNldmVyU2lkZVNvcnQoc29ydE9iaiwgZSwgc3RhdGVQZXJzaXN0ZW5jZVRyaWdnZXJlZD8pIHtcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBzb3J0IGluZm8gZm9yIHBhc3NpbmcgdG8gZGF0YWdyaWRcbiAgICAgICAgdGhpcy50YWJsZS5ncmlkT3B0aW9ucy5zb3J0SW5mby5maWVsZCA9IHNvcnRPYmouZmllbGQ7XG4gICAgICAgIHRoaXMudGFibGUuZ3JpZE9wdGlvbnMuc29ydEluZm8uZGlyZWN0aW9uID0gc29ydE9iai5kaXJlY3Rpb247XG4gICAgICAgIHRoaXMudGFibGUuc29ydEluZm8gPSBnZXRDbG9uZWRPYmplY3Qoc29ydE9iaik7XG5cbiAgICAgICAgY29uc3Qgc29ydE9wdGlvbnMgID0gc29ydE9iaiAmJiBzb3J0T2JqLmRpcmVjdGlvbiA/IChzb3J0T2JqLmZpZWxkICsgJyAnICsgc29ydE9iai5kaXJlY3Rpb24pIDogJyc7XG4gICAgICAgIGNvbnN0IGZpbHRlckZpZWxkcyA9IHRoaXMuZ2V0RmlsdGVyRmllbGRzKHRoaXMudGFibGUuZmlsdGVySW5mbyk7XG4gICAgICAgIGNvbnN0IGNvbmRpdGlvbiA9IHRoaXMuZ2V0TG9naWNhbE9wZXJhdG9yKGZpbHRlckZpZWxkcyk7XG4gICAgICAgIGlmICghc3RhdGVQZXJzaXN0ZW5jZVRyaWdnZXJlZCAmJiB0aGlzLnRhYmxlLmdldENvbmZpZ3VyZWRTdGF0ZSgpICE9PSAnbm9uZScpIHtcbiAgICAgICAgICAgIHRoaXMudGFibGUuc3RhdGVQZXJzaXN0ZW5jZS5yZW1vdmVXaWRnZXRTdGF0ZSh0aGlzLnRhYmxlLCAncGFnaW5hdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVmcmVzaERhdGFTb3VyY2UodGhpcy50YWJsZS5kYXRhc291cmNlLCB7XG4gICAgICAgICAgICBwYWdlIDogMSxcbiAgICAgICAgICAgIGZpbHRlckZpZWxkcyA6IGZpbHRlckZpZWxkcyxcbiAgICAgICAgICAgIG9yZGVyQnkgOiBzb3J0T3B0aW9ucyxcbiAgICAgICAgICAgIGNvbmRpdGlvbiA6IGNvbmRpdGlvblxuICAgICAgICB9KS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgICAgJGFwcERpZ2VzdCgpO1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IChyZXNwb25zZSAmJiByZXNwb25zZS5kYXRhKSA/IHJlc3BvbnNlLmRhdGEgOiByZXNwb25zZTtcbiAgICAgICAgICAgIHRoaXMudGFibGUuaW52b2tlRXZlbnRDYWxsYmFjaygnc29ydCcsIHskZXZlbnQ6IGUsICRkYXRhOiB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHNvcnREaXJlY3Rpb246IHNvcnRPYmouZGlyZWN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBjb2xEZWY6IHRoaXMudGFibGUuY29sdW1uc1tzb3J0T2JqLmZpZWxkXVxuXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNlYXJjaEhhbmRsZXIoc2VhcmNoU29ydE9iaiwgZSwgdHlwZSwgc3RhdGVQZXJzaXN0ZW5jZVRyaWdnZXJlZD8pIHtcbiAgICAgICAgbGV0IG9iajtcbiAgICAgICAgaWYgKF8uaXNBcnJheShzZWFyY2hTb3J0T2JqKSkge1xuICAgICAgICAgICAgb2JqID0gc2VhcmNoU29ydE9iai5maWx0ZXIoZnVuY3Rpb24oc2VhcmNoT2JqZWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChzZWFyY2hPYmplY3QubWF0Y2hNb2RlICE9PSB1bmRlZmluZWQgJiYgc2VhcmNoT2JqZWN0LnZhbHVlICE9PSB1bmRlZmluZWQpIHx8IChzZWFyY2hPYmplY3QudmFsdWUgIT09IHVuZGVmaW5lZCAmJiBzZWFyY2hPYmplY3QuZmllbGQgPT09ICcnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JqID0ge2ZpZWxkOiBzZWFyY2hTb3J0T2JqLmZpZWxkLCB2YWx1ZTogc2VhcmNoU29ydE9iai52YWx1ZSwgdHlwZTogc2VhcmNoU29ydE9iai50eXBlfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50YWJsZS5nZXRDb25maWd1cmVkU3RhdGUoKSAhPT0gJ25vbmUnICYmIHVuc3VwcG9ydGVkU3RhdGVQZXJzaXN0ZW5jZVR5cGVzLmluZGV4T2YodGhpcy50YWJsZS5uYXZpZ2F0aW9uKSA8IDApIHtcbiAgICAgICAgICAgIGlmICgoXy5pc0FycmF5KHNlYXJjaFNvcnRPYmopICYmIG9iai5sZW5ndGgpIHx8IChzZWFyY2hTb3J0T2JqLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudGFibGUuc3RhdGVQZXJzaXN0ZW5jZS5yZW1vdmVXaWRnZXRTdGF0ZSh0aGlzLnRhYmxlLCAnc2VhcmNoJyk7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZS5zdGF0ZVBlcnNpc3RlbmNlLnNldFdpZGdldFN0YXRlKHRoaXMudGFibGUsIHtzZWFyY2g6IG9ian0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLnN0YXRlUGVyc2lzdGVuY2UucmVtb3ZlV2lkZ2V0U3RhdGUodGhpcy50YWJsZSwgJ3NlYXJjaCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdGF0ZVBlcnNpc3RlbmNlVHJpZ2dlcmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZS5zdGF0ZVBlcnNpc3RlbmNlLnJlbW92ZVdpZGdldFN0YXRlKHRoaXMudGFibGUsICdwYWdpbmF0aW9uJyk7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZS5zdGF0ZVBlcnNpc3RlbmNlLnJlbW92ZVdpZGdldFN0YXRlKHRoaXMudGFibGUsICdzZWxlY3RlZEl0ZW0nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignUmV0YWluIFN0YXRlIGhhbmRsaW5nIG9uIFdpZGdldCAnICsgdGhpcy50YWJsZS5uYW1lICsgJyBpcyBub3Qgc3VwcG9ydGVkIGZvciBjdXJyZW50IHBhZ2luYXRpb24gdHlwZS4nKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZmlsdGVyRmllbGRzID0gZ2V0Q2xvbmVkT2JqZWN0KHNlYXJjaFNvcnRPYmopO1xuICAgICAgICBjb25zdCBkYXRhU291cmNlID0gdGhpcy50YWJsZS5kYXRhc291cmNlO1xuICAgICAgICBpZiAoIWRhdGFTb3VyY2UgJiYgIXRoaXMudGFibGUuZGF0YXNldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGxldCBvdXRwdXQ7XG4gICAgICAgIGNvbnN0IHVzZXJGaWx0ZXJzID0ge307XG4gICAgICAgIC8vIFRyYW5zZm9ybSBmaWx0ZXIgZmllbGRzIGZyb20gYXJyYXkgdG8gb2JqZWN0IGhhdmluZyBmaWVsZCBuYW1lcyBhcyBrZXlzXG4gICAgICAgIGlmIChfLmlzQXJyYXkoZmlsdGVyRmllbGRzKSkge1xuICAgICAgICAgICAgZmlsdGVyRmllbGRzLmZvckVhY2goZmlsdGVyRmllbGQgPT4ge1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybUZpbHRlckZpZWxkKHVzZXJGaWx0ZXJzLCBmaWx0ZXJGaWVsZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybUZpbHRlckZpZWxkKHVzZXJGaWx0ZXJzLCBmaWx0ZXJGaWVsZHMpO1xuICAgICAgICB9XG4gICAgICAgIG91dHB1dCA9IHRoaXMudGFibGUuaW52b2tlRXZlbnRDYWxsYmFjaygnYmVmb3JlZmlsdGVyJywgeyRldmVudDogZSwgJGRhdGE6IHVzZXJGaWx0ZXJzLCBjb2x1bW5zOiB1c2VyRmlsdGVyc30pO1xuICAgICAgICAvLyBJZiBjYWxsYmFjayByZXR1cm5zIGZhbHNlLCBkb24ndCB0cmlnZ2VyIHRoZSBmaWx0ZXIgY2FsbFxuICAgICAgICBpZiAob3V0cHV0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZpbHRlckZpZWxkcyA9IFtdO1xuICAgICAgICAvLyBpZiB0aGUgZmllbGQgaXMgbm90IHNlbGVjdGVkIGluIHNlYXJjaCBmaWx0ZXIgZHJvcGRvd24sIGJ1aWxkaW5nIHRoZSBmaWx0ZXIgZmllbGRzIG9iamVjdFxuICAgICAgICBpZiAoXy5pc0VtcHR5KHVzZXJGaWx0ZXJzKSAmJiAhXy5pc0VtcHR5KG9iaikpIHtcbiAgICAgICAgICAgIGlmIChfLmlzQXJyYXkob2JqKSkge1xuICAgICAgICAgICAgICAgIF8uZm9yRWFjaChvYmosICBzZWFyY2hPYmogPT4ge1xuICAgICAgICAgICAgICAgICAgICBhZGRUb0ZpbHRlckZpZWxkcyhmaWx0ZXJGaWVsZHMsIHNlYXJjaE9iaik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZFRvRmlsdGVyRmllbGRzKGZpbHRlckZpZWxkcywgb2JqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFRyYW5zZm9ybSBiYWNrIHRoZSBmaWx0ZXIgZmllbGRzIGZyb20gb2JqZWN0IHRvIGFycmF5XG4gICAgICAgICAgICBfLmZvckVhY2godXNlckZpbHRlcnMsICh2YWwsIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIGZpbHRlckZpZWxkcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiB2YWwubWF0Y2hNb2RlLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiB2YWwudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbC52YWx1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGFTb3VyY2UgJiYgZGF0YVNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLlNVUFBPUlRTX1NFUlZFUl9GSUxURVIpKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVNlcnZlclNpZGVTZWFyY2goZmlsdGVyRmllbGRzKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF0YVNvdXJjZSAmJiBkYXRhU291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfQVBJX0FXQVJFKSAmJiBkYXRhU291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uSVNfUEFHRUFCTEUpKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVNpbmdsZVBhZ2VTZWFyY2goZmlsdGVyRmllbGRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2xpZW50U2lkZVNvcnRTZWFyY2goZmlsdGVyRmllbGRzLCBlLCB0eXBlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc29ydEhhbmRsZXIoc2VhcmNoU29ydE9iaiwgZSwgdHlwZSwgc3RhdGVQZXJzaXN0ZW5jZVRyaWdnZXJlZD8pIHtcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IHRoaXMudGFibGUuZGF0YXNvdXJjZTtcbiAgICAgICAgaWYgKCFkYXRhU291cmNlICYmICF0aGlzLnRhYmxlLmRhdGFzZXQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXN0YXRlUGVyc2lzdGVuY2VUcmlnZ2VyZWQgJiYgdGhpcy50YWJsZS5nZXRDb25maWd1cmVkU3RhdGUoKSAhPT0gJ25vbmUnICYmIHVuc3VwcG9ydGVkU3RhdGVQZXJzaXN0ZW5jZVR5cGVzLmluZGV4T2YodGhpcy50YWJsZS5uYXZpZ2F0aW9uKSA8IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IHtkaXJlY3Rpb246IHNlYXJjaFNvcnRPYmouZGlyZWN0aW9uLCBmaWVsZDogc2VhcmNoU29ydE9iai5maWVsZH07XG4gICAgICAgICAgICBpZiAoc2VhcmNoU29ydE9iai5kaXJlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLnN0YXRlUGVyc2lzdGVuY2Uuc2V0V2lkZ2V0U3RhdGUodGhpcy50YWJsZSwge3NvcnQ6IG9ian0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLnN0YXRlUGVyc2lzdGVuY2UucmVtb3ZlV2lkZ2V0U3RhdGUodGhpcy50YWJsZSwgJ3NvcnQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudGFibGUuc3RhdGVQZXJzaXN0ZW5jZS5yZW1vdmVXaWRnZXRTdGF0ZSh0aGlzLnRhYmxlLCAnc2VsZWN0ZWRJdGVtJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ1JldGFpbiBTdGF0ZSBoYW5kbGluZyBvbiBXaWRnZXQgJyArIHRoaXMudGFibGUubmFtZSArICcgaXMgbm90IHN1cHBvcnRlZCBmb3IgY3VycmVudCBwYWdpbmF0aW9uIHR5cGUuJyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXTVMtMjIzODc6IEZvciBzZXJ2ZXIgc2lkZSBwYWdpbmF0aW9uLCBleGVjdXRlIGNsaWVudCBzaWRlIHNvcnRpbmdcbiAgICAgICAgaWYgKGRhdGFTb3VyY2UgJiYgZGF0YVNvdXJjZS5leGVjdXRlKERhdGFTb3VyY2UuT3BlcmF0aW9uLklTX1NPUlRBQkxFKSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVTZXZlclNpZGVTb3J0KHNlYXJjaFNvcnRPYmosIGUsIHN0YXRlUGVyc2lzdGVuY2VUcmlnZ2VyZWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVDbGllbnRTaWRlU29ydFNlYXJjaChzZWFyY2hTb3J0T2JqLCBlLCB0eXBlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBzZXQgdGhlICdsYXN0QWN0aW9uJyBwZXJmb3JtZWQgb24gdGhlIHRhYmxlIHRvICdzZWFyY2hfb3Jfc29ydCdcbiAgICBzZXRMYXN0QWN0aW9uUGVyZm9ybWVkVG9TZWFyY2hTb3J0KCkge1xuICAgICAgICB0aGlzLnRhYmxlLmdyaWRPcHRpb25zLnNldExhc3RBY3Rpb25QZXJmb3JtZWQodGhpcy50YWJsZS5ncmlkT3B0aW9ucy5BQ1RJT05TLlNFQVJDSF9PUl9TT1JUKTtcbiAgICAgICAgdGhpcy50YWJsZS5ncmlkT3B0aW9ucy5zZXRJc1NlYXJjaFRyaWdlcnJlZCh0cnVlKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIG1ldGhvZCBpcyB0cmlnZ2VyZWQgYnkganF1ZXJ5IHRhYmxlXG4gICAgc2VhcmNoU29ydEhhbmRsZXIoc2VhcmNoU29ydE9iaiwgZSwgdHlwZSwgc3RhdGVQZXJzaXN0ZW5jZVRyaWdnZXJlZD8pIHtcbiAgICAgICAgY29uc3QgZXZlbnRfdHlwZSA9IGUgPyBlLnR5cGUgOiAnJztcbiAgICAgICAgaWYgKGV2ZW50X3R5cGUgPT09ICdjaGFuZ2UnICYmIHRoaXMudGFibGUuZmlsdGVybW9kZSAhPT0gJ211bHRpY29sdW1uJykge1xuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0TGFzdEFjdGlvblBlcmZvcm1lZFRvU2VhcmNoU29ydCgpO1xuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdzZWFyY2gnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hIYW5kbGVyKHNlYXJjaFNvcnRPYmosIGUsIHR5cGUsIHN0YXRlUGVyc2lzdGVuY2VUcmlnZ2VyZWQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNvcnRIYW5kbGVyKHNlYXJjaFNvcnRPYmosIGUsIHR5cGUsIHN0YXRlUGVyc2lzdGVuY2VUcmlnZ2VyZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTWV0aG9kIHRvIHNob3cvaGlkZSBjbGVhciBpY29uIGluIG11bHRpIGNvbHVtbiBmaWx0ZXJcbiAgICBzaG93Q2xlYXJJY29uKGZpZWxkTmFtZSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudGFibGUucm93RmlsdGVyW2ZpZWxkTmFtZV0gJiYgdGhpcy50YWJsZS5yb3dGaWx0ZXJbZmllbGROYW1lXS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIGlzRGVmaW5lZCh2YWx1ZSkgJiYgdmFsdWUgIT09ICcnICYmIHZhbHVlICE9PSBudWxsO1xuICAgIH1cblxuICAgIC8vIE1ldGhvZCBjbGVhciB0aGUgZmlsdGVyIHZhbHVlIGluIG11bHRpIGNvbHVtbiBmaWx0ZXJcbiAgICBjbGVhclJvd0ZpbHRlcihmaWVsZE5hbWUpIHtcbiAgICAgICAgaWYgKHRoaXMudGFibGUucm93RmlsdGVyICYmIHRoaXMudGFibGUucm93RmlsdGVyW2ZpZWxkTmFtZV0pIHtcbiAgICAgICAgICAgIHRoaXMudGFibGUuY29sdW1uc1tmaWVsZE5hbWVdLnJlc2V0RmlsdGVyKCk7XG4gICAgICAgICAgICB0aGlzLm9uUm93RmlsdGVyQ2hhbmdlKGZpZWxkTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIG1ldGhvZCBpcyB0cmlnZ2VyZWQgb24gc2VsZWN0IG9mIGNvbmRpdGlvbiBpbiBtdWx0aSBjb2x1bW4gZmlsdGVyXG4gICAgb25GaWx0ZXJDb25kaXRpb25TZWxlY3QoZmllbGROYW1lLCBjb25kaXRpb24pIHtcbiAgICAgICAgdGhpcy50YWJsZS5yb3dGaWx0ZXJbZmllbGROYW1lXSA9IHRoaXMudGFibGUucm93RmlsdGVyW2ZpZWxkTmFtZV0gfHwge307XG4gICAgICAgIHRoaXMudGFibGUucm93RmlsdGVyW2ZpZWxkTmFtZV0ubWF0Y2hNb2RlID0gY29uZGl0aW9uO1xuICAgICAgICAvLyBGb3IgZW1wdHkgbWF0Y2ggbW9kZXMsIGNsZWFyIG9mZiB0aGUgdmFsdWUgYW5kIGNhbGwgZmlsdGVyXG4gICAgICAgIGlmIChfLmluY2x1ZGVzKHRoaXMudGFibGUuZW1wdHlNYXRjaE1vZGVzLCBjb25kaXRpb24pKSB7XG4gICAgICAgICAgICB0aGlzLnRhYmxlLmNvbHVtbnNbZmllbGROYW1lXS5yZXNldEZpbHRlcigpO1xuICAgICAgICAgICAgdGhpcy50YWJsZS5vblJvd0ZpbHRlckNoYW5nZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgdmFsdWUgaXMgcHJlc2VudCwgY2FsbCB0aGUgZmlsdGVyLiBFbHNlLCBmb2N1cyBvbiB0aGUgZmllbGRcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQodGhpcy50YWJsZS5yb3dGaWx0ZXJbZmllbGROYW1lXS52YWx1ZSkgJiYgdGhpcy50YWJsZS5yb3dGaWx0ZXJbZmllbGROYW1lXS52YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLm9uUm93RmlsdGVyQ2hhbmdlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLmNvbHVtbnNbZmllbGROYW1lXS5maWx0ZXJJbnN0YW5jZS5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTWV0aG9kIHRvIGdldCB0aGUgdXBkYXRlZCB2YWx1ZXMgd2hlbiBmaWx0ZXIgb24gZmllbGQgaXMgY2hhbmdlZCBmb3IgbXVsdGljb2x1bW4gZmlsdGVyXG4gICAgcHJpdmF0ZSBnZXRGaWx0ZXJPbkZpZWxkVmFsdWVzKGZpbHRlckRlZikge1xuICAgICAgICBpZiAoIXRoaXMudGFibGUuZGF0YXNvdXJjZSB8fCAhdGhpcy50YWJsZS5kYXRhc291cmNlLmV4ZWN1dGUoRGF0YVNvdXJjZS5PcGVyYXRpb24uU1VQUE9SVFNfRElTVElOQ1RfQVBJKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmllbGROYW1lID0gZmlsdGVyRGVmLmZpZWxkO1xuICAgICAgICBjb25zdCBmb3JtRmllbGRzID0gdGhpcy50YWJsZS5mdWxsRmllbGREZWZzO1xuICAgICAgICBjb25zdCBmaWx0ZXJPbkZpZWxkcyA9IF8uZmlsdGVyKGZvcm1GaWVsZHMsIHsnZmlsdGVyb25maWx0ZXInOiBmaWVsZE5hbWV9KTtcbiAgICAgICAgY29uc3QgbmV3VmFsID0gXy5nZXQodGhpcy50YWJsZS5yb3dGaWx0ZXIsIFtmaWVsZE5hbWUsICd2YWx1ZSddKTtcblxuICAgICAgICAvLyBMb29wIG92ZXIgdGhlIGZpZWxkcyBmb3Igd2hpY2ggdGhlIGN1cnJlbnQgZmllbGQgaXMgZmlsdGVyIG9uIGZpZWxkXG4gICAgICAgIF8uZm9yRWFjaChmaWx0ZXJPbkZpZWxkcywgZmlsdGVyRmllbGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyT24gPSBmaWx0ZXJGaWVsZC5maWx0ZXJvbmZpbHRlcjtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcktleSA9IGZpbHRlckZpZWxkLmZpZWxkO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyRmllbGRzID0ge307XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJXaWRnZXQgPSBmaWx0ZXJGaWVsZC5maWx0ZXJ3aWRnZXQ7XG5cbiAgICAgICAgICAgIGlmICghaXNEYXRhU2V0V2lkZ2V0KGZpbHRlcldpZGdldCkgfHwgZmlsdGVyT24gPT09IGZpbHRlcktleSB8fCBmaWx0ZXJGaWVsZC5pc0ZpbHRlckRhdGFTZXRCb3VuZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmlsdGVyRmllbGRzW2ZpbHRlck9uXSA9IChpc0RlZmluZWQobmV3VmFsKSAmJiBuZXdWYWwgIT09ICcnICYmIG5ld1ZhbCAhPT0gbnVsbCkgPyB7J3ZhbHVlJyA6IG5ld1ZhbH0gOiB7fTtcblxuICAgICAgICAgICAgaWYgKGZpbHRlcldpZGdldCA9PT0gRm9ybVdpZGdldFR5cGUuQVVUT0NPTVBMRVRFICYmIGZpbHRlckZpZWxkLmZpbHRlckluc3RhbmNlLmRhdGFvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgZmlsdGVyRmllbGQuZmlsdGVySW5zdGFuY2UuZGF0YW9wdGlvbnMuZmlsdGVyRmllbGRzID0gZmlsdGVyRmllbGRzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlLmRhdGFzb3VyY2UuZXhlY3V0ZShEYXRhU291cmNlLk9wZXJhdGlvbi5HRVRfRElTVElOQ1RfREFUQV9CWV9GSUVMRFMsIHtcbiAgICAgICAgICAgICAgICAgICAgJ2ZpZWxkcycgICAgICAgICA6IGZpbHRlcktleSxcbiAgICAgICAgICAgICAgICAgICAgJ2ZpbHRlckZpZWxkcycgICA6IGZpbHRlckZpZWxkc1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckZpZWxkLmZpbHRlcmRhdGFzZXQgPSBkYXRhLmRhdGE7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIFRoaXMgbWV0aG9kIGlzIHRyaWdnZXJlZCBvbiB2YWx1ZSBjaGFuZ2UgaW4gbXVsdGkgY29sdW1uIGZpbHRlclxuICAgIG9uUm93RmlsdGVyQ2hhbmdlKGZpZWxkTmFtZSkge1xuICAgICAgICBjb25zdCBzZWFyY2hPYmogPSBbXTtcbiAgICAgICAgY29uc3QgZmllbGQgPSBfLmZpbmQodGhpcy50YWJsZS5mdWxsRmllbGREZWZzLCB7J2ZpZWxkJzogZmllbGROYW1lfSk7XG4gICAgICAgIC8vIENvbnZlcnQgcm93IGZpbHRlcnMgdG8gYSBzZWFyY2ggb2JqZWN0IGFuZCBjYWxsIHNlYXJjaCBoYW5kbGVyXG4gICAgICAgIF8uZm9yRWFjaCh0aGlzLnRhYmxlLnJvd0ZpbHRlciwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICgoaXNEZWZpbmVkKHZhbHVlLnZhbHVlKSAmJiB2YWx1ZS52YWx1ZSAhPT0gJycpIHx8IF8uaW5jbHVkZXModGhpcy50YWJsZS5lbXB0eU1hdGNoTW9kZXMsIHZhbHVlLm1hdGNoTW9kZSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGQgJiYga2V5ID09PSBmaWVsZC5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS50eXBlICAgICAgPSB2YWx1ZS50eXBlIHx8IGZpZWxkLnR5cGU7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLm1hdGNoTW9kZSA9IHZhbHVlLm1hdGNoTW9kZSB8fCBfLmdldCh0aGlzLnRhYmxlLm1hdGNoTW9kZVR5cGVzTWFwW3ZhbHVlLnR5cGVdLCAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2VhcmNoT2JqLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBmaWVsZDoga2V5LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogdmFsdWUubWF0Y2hNb2RlLFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiB2YWx1ZS50eXBlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnRhYmxlLmdyaWRPcHRpb25zLnNlYXJjaEhhbmRsZXIoc2VhcmNoT2JqLCB1bmRlZmluZWQsICdzZWFyY2gnKTtcblxuICAgICAgICAvLyBJZiBmaWVsZCBpcyBwYXNzZWQsIHVwZGF0ZSBhbnkgZmlsdGVyIG9uIGZpZWxkIHZhbHVlcyBpZiBwcmVzZW50XG4gICAgICAgIGlmIChmaWVsZCkge1xuICAgICAgICAgICAgdGhpcy5nZXRGaWx0ZXJPbkZpZWxkVmFsdWVzKGZpZWxkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJlZnJlc2hEYXRhKGlzU2FtZVBhZ2UpIHtcbiAgICAgICAgaWYgKCF0aGlzLnRhYmxlLmRhdGFzb3VyY2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYWdlID0gaXNTYW1lUGFnZSA/IHRoaXMudGFibGUuZGF0YU5hdmlnYXRvci5kbi5jdXJyZW50UGFnZSA6IDE7XG4gICAgICAgIGNvbnN0IHNvcnRJbmZvICAgICA9IHRoaXMudGFibGUuc29ydEluZm87XG4gICAgICAgIGNvbnN0IHNvcnRPcHRpb25zICA9IHNvcnRJbmZvICYmIHNvcnRJbmZvLmRpcmVjdGlvbiA/IChzb3J0SW5mby5maWVsZCArICcgJyArIHNvcnRJbmZvLmRpcmVjdGlvbikgOiAnJztcbiAgICAgICAgY29uc3QgZmlsdGVyRmllbGRzID0gdGhpcy5nZXRGaWx0ZXJGaWVsZHModGhpcy50YWJsZS5maWx0ZXJJbmZvKTtcbiAgICAgICAgY29uc3QgbG9naWNhbE9wID0gdGhpcy5nZXRMb2dpY2FsT3BlcmF0b3IoZmlsdGVyRmllbGRzKTtcbiAgICAgICAgcmVmcmVzaERhdGFTb3VyY2UodGhpcy50YWJsZS5kYXRhc291cmNlLCB7XG4gICAgICAgICAgICBwYWdlOiBwYWdlLFxuICAgICAgICAgICAgZmlsdGVyRmllbGRzIDogZmlsdGVyRmllbGRzLFxuICAgICAgICAgICAgb3JkZXJCeSA6IHNvcnRPcHRpb25zLFxuICAgICAgICAgICAgY29uZGl0aW9uIDogbG9naWNhbE9wXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
@@ -2856,7 +2856,8 @@ class TableFilterSortDirective {
2856
2856
  data,
2857
2857
  sortDirection: sortObj.direction,
2858
2858
  colDef: this.table.columns[sortObj.field]
2859
- } });
2859
+ }
2860
+ });
2860
2861
  });
2861
2862
  }
2862
2863
  searchHandler(searchSortObj, e, type, statePersistenceTriggered) {