@talrace/ngx-noder 0.0.17 → 0.0.18

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 (47) hide show
  1. package/README.md +72 -9
  2. package/assets/i18n/noder.en.json +93 -0
  3. package/assets/i18n/noder.es.json +93 -0
  4. package/assets/i18n/noder.ru.json +93 -0
  5. package/esm2022/lib/apart-components/add-link-dialog/add-link-dialog.component.mjs +21 -21
  6. package/esm2022/lib/apart-components/add-link-mobile/add-link-mobile.component.mjs +5 -3
  7. package/esm2022/lib/apart-components/confirm-dialog/confirm-dialog.component.mjs +5 -3
  8. package/esm2022/lib/apart-components/editor-search/editor-search-dialog.component.mjs +14 -3
  9. package/esm2022/lib/apart-components/editor-title/editor-title.component.mjs +17 -14
  10. package/esm2022/lib/apart-components/editor-title-mobile/editor-title-mobile.component.mjs +5 -3
  11. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/color-picker/color-picker.component.mjs +3 -3
  12. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/font/font.component.mjs +3 -3
  13. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/format/format.component.mjs +3 -3
  14. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/numbering/numbering.component.mjs +3 -3
  15. package/esm2022/lib/apart-components/editor-toolbar/components/menu-dropdowns/menu-dropdowns.component.mjs +4 -3
  16. package/esm2022/lib/apart-components/editor-toolbar/components/menu-dropdowns-mobile/menu-dropdowns-mobile.component.mjs +4 -3
  17. package/esm2022/lib/apart-components/editor-toolbar/components/toolbar-actions/toolbar-actions.component.mjs +2 -2
  18. package/esm2022/lib/apart-components/editor-toolbar/editor-mobile-toolbar/editor-mobile-toolbar.component.mjs +18 -16
  19. package/esm2022/lib/apart-components/editor-toolbar/editor-toolbar.module.mjs +8 -13
  20. package/esm2022/lib/apart-components/insert-table-mobile/insert-table-mobile.component.mjs +5 -3
  21. package/esm2022/lib/apart-components/text-format-mobile/text-format-mobile.component.mjs +14 -3
  22. package/esm2022/lib/editor/components/edges/edge.component.mjs +48 -6
  23. package/esm2022/lib/editor/components/edges/edges.mjs +7 -29
  24. package/esm2022/lib/editor/components/external-element/models/external-element.model.mjs +4 -4
  25. package/esm2022/lib/editor/components/table/overlay-menu/overlay-menu.component.mjs +29 -19
  26. package/esm2022/lib/editor/editor.module.mjs +28 -4
  27. package/esm2022/lib/editor/execution/editor.mjs +2 -1
  28. package/esm2022/lib/editor/gadgets/scrollbar.mjs +11 -6
  29. package/esm2022/lib/translate/noder-translate.loader.mjs +22 -0
  30. package/esm2022/public-api.mjs +2 -1
  31. package/fesm2022/talrace-ngx-noder.mjs +241 -168
  32. package/fesm2022/talrace-ngx-noder.mjs.map +1 -1
  33. package/lib/apart-components/add-link-dialog/add-link-dialog.component.d.ts +1 -10
  34. package/lib/apart-components/editor-title/editor-title.component.d.ts +5 -3
  35. package/lib/apart-components/editor-toolbar/editor-mobile-toolbar/editor-mobile-toolbar.component.d.ts +3 -1
  36. package/lib/apart-components/editor-toolbar/editor-toolbar.module.d.ts +23 -23
  37. package/lib/editor/components/edges/edge.component.d.ts +10 -3
  38. package/lib/editor/components/edges/edges.d.ts +0 -2
  39. package/lib/editor/components/external-element/models/external-element.model.d.ts +3 -3
  40. package/lib/editor/components/table/overlay-menu/overlay-menu.component.d.ts +3 -1
  41. package/lib/editor/editor.module.d.ts +2 -1
  42. package/lib/editor/gadgets/scrollbar.d.ts +1 -0
  43. package/lib/translate/noder-translate.loader.d.ts +11 -0
  44. package/package.json +3 -1
  45. package/public-api.d.ts +1 -0
  46. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/heading/heading.component.mjs +0 -22
  47. package/lib/apart-components/editor-toolbar/components/buttons/heading/heading.component.d.ts +0 -8
@@ -1112,6 +1112,7 @@ export class Editor {
1112
1112
  const beforeTable = ContentHelper.documentIndexToParagraphIndex(this.session.displayData.paragraphs, resizeTableColumns.insertIndex);
1113
1113
  this.selection.placeCursor(beforeTable);
1114
1114
  this.history.pushResizeTableColumns(resizeTableColumns);
1115
+ this.commandsService.createCommand(SaveCommandsHelper.getResizeTableColumnsCommand(resizeTableColumns, this.targets));
1115
1116
  this.session.resizeTableColumns(resizeTableColumns);
1116
1117
  this.changedTableSize(resizeTableColumns.insertIndex, sessionId);
1117
1118
  }
@@ -1364,4 +1365,4 @@ export class Editor {
1364
1365
  });
1365
1366
  }
1366
1367
  }
1367
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL2V4ZWN1dGlvbi9lZGl0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDMUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDdEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDOUYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFcEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFHcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDeEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUtsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRWhFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3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Q2xILENBQUMsQ0FBQyxDQUFDO2FBQ047aUJBQU07Z0JBQ0gsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDO2dCQUN2SCxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQzthQUMxRjtZQUNELE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2hCLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbEgsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENsaXBib2FyZCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jbGlwYm9hcmQnO1xuaW1wb3J0IHsgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFkZE51bWJlcmluZ01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9hZGQtbnVtYmVyaW5nLm1vZGVsJztcbmltcG9ydCB7IEFwcGx5RWxlbWVudFN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2FwcGx5LWVsZW1lbnQtc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgQXBwbHlJbWFnZVN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2FwcGx5LWltYWdlLXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IEFwcGx5UGFyYWdyYXBoU3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvYXBwbHktcGFyYWdyYXBoLXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IEFwcGx5VGV4dFN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2FwcGx5LXRleHQtc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgQmFzZU5vZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9zaGFyZWQvYWJzdHJhY3QvYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnJlYWtIZWxwZXIgfSBmcm9tICcuLi9nYWRnZXRzL3BhZ2UtYnJlYWsvYnJlYWsuaGVscGVyJztcbmltcG9ydCB7IEJyZWFrTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2JyZWFrLm1vZGVsJztcbmltcG9ydCB7IEJyZWFrVHlwZXMgfSBmcm9tICcuLi9nYWRnZXRzL3BhZ2UtYnJlYWsvYnJlYWstdHlwZXMuZW51bSc7XG5pbXBvcnQgeyBDb21tYW5kTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2NvbW1hbmQubW9kZWwnO1xuaW1wb3J0IHsgQ29tbWFuZHNTZXJ2aWNlIH0gZnJvbSAnLi4vb3BlcmF0aW9ucy9jb21tYW5kcy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbnRlbnRIZWxwZXIgfSBmcm9tICcuLi9wb3NpdGlvbmluZy9jb250ZW50LmhlbHBlcic7XG5pbXBvcnQgeyBDb250ZW50U3R5bGVIZWxwZXIgfSBmcm9tICcuLi9jb250ZW50L2hlbHBlcnMvY29udGVudC1zdHlsZS5oZWxwZXInO1xuaW1wb3J0IHsgQ3Vyc29yUGFyYWdyYXBoIH0gZnJvbSAnLi4vcG9zaXRpb25pbmcvY3Vyc29yLXBhcmFncmFwaCc7XG5pbXBvcnQgeyBDVVNUT01fRUxFTUVOVF9NQVJLRVIsIFRBQkxFX01BUktFUiB9IGZyb20gJy4uL2NvbXBvbmVudHMvc2hhcmVkL2N1c3RvbS1jb250ZW50LW1hcmtlcnMuY29uc3QnO1xuaW1wb3J0IHsgRGVsZXRlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2RlbGV0ZS5tb2RlbCc7XG5pbXBvcnQgeyBEb2N1bWVudEhhbmRsZXIgfSBmcm9tICcuLi9pbnRlcmFjdGlvbi9kb2N1bWVudC5oYW5kbGVyJztcbmltcG9ydCB7IERvY3hNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvZG9jeC5tb2RlbCc7XG5pbXBvcnQgeyBFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24vZWRpdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRpdFNlc3Npb24gfSBmcm9tICcuL2VkaXQuc2Vzc2lvbic7XG5pbXBvcnQgeyBFbGVtZW50RGF0YU1vZGVsIH0gZnJvbSAnLi4vY29tcG9uZW50cy9leHRlcm5hbC1lbGVtZW50L21vZGVscy9lbGVtZW50LWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgRWxlbWVudE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9lbGVtZW50Lm1vZGVsJztcbmltcG9ydCB7IEZvcm1hdEhlbHBlciB9IGZyb20gJy4uL2NvbnRlbnQvaGVscGVycy9mb3JtYXQuaGVscGVyJztcbmltcG9ydCB7IEltYWdlRGF0YU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbWFnZS1kYXRhLm1vZGVsJztcbmltcG9ydCB7IEltYWdlSGVscGVyIH0gZnJvbSAnLi9oZWxwZXJzL2ltYWdlLmhlbHBldCc7XG5pbXBvcnQgeyBJbWFnZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbWFnZS5tb2RlbCc7XG5pbXBvcnQgeyBJbmRleGVkRWxlbWVudEhlbHBlciB9IGZyb20gJy4uL2NvbnRlbnQvaGVscGVycy9pbmRleGVkLWVsZW1lbnQuaGVscGVyJztcbmltcG9ydCB7IElucHV0SGFuZGxlciB9IGZyb20gJy4uL2ludGVyYWN0aW9uL2lucHV0LmhhbmRsZXInO1xuaW1wb3J0IHsgSW5zZXJ0QnJlYWtNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWJyZWFrLm1vZGVsJztcbmltcG9ydCB7IEluc2VydEVsZW1lbnRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWVsZW1lbnQubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0SW1hZ2VNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWltYWdlLm1vZGVsJztcbmltcG9ydCB7IEluc2VydExpbmtNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWxpbmsubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0UGFyYWdyYXBoTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC1wYXJhZ3JhcGgubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0U3R5bGVkVGV4dE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbnNlcnQtc3R5bGVkLXRleHQubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0VGFibGVDb2x1bW5zTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC10YWJsZS1jb2x1bW5zLm1vZGVsJztcbmltcG9ydCB7IEluc2VydFRhYmxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC10YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBJbnNlcnRUYWJsZVJvd3NNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LXRhYmxlLXJvd3MubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0VGFiTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC10YWIubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0VGV4dE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbnNlcnQtdGV4dC5tb2RlbCc7XG5pbXBvcnQgeyBMaW5rRGF0YU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9saW5rLWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgTGlua0hlbHBlciB9IGZyb20gJy4uL2NvbnRlbnQvaGVscGVycy9saW5rLmhlbHBlcic7XG5pbXBvcnQgeyBMaW5rTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2xpbmsubW9kZWwnO1xuaW1wb3J0IHsgTW91c2VIYW5kbGVyIH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24vbW91c2UuaGFuZGxlcic7XG5pbXBvcnQgeyBORVdfTElORV9NQVJLVVAgfSBmcm9tICcuLi9jb250ZW50L2NvbnN0YW50cy9lZGl0b3IuY29uc3QnO1xuaW1wb3J0IHsgTnVtYmVyaW5nTGV2ZWxNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvbnVtYmVyaW5nLWxldmVsLm1vZGVsJztcbmltcG9ydCB7IE9wZXJhdGlvbiB9IGZyb20gJy4uL2dhZGdldHMvaGlzdG9yeS9vcGVyYXRpb24udHlwZSc7XG5pbXBvcnQgeyBPcGVyYXRpb25IaXN0b3J5IH0gZnJvbSAnLi4vZ2FkZ2V0cy9oaXN0b3J5L29wZXJhdGlvbi1oaXN0b3J5JztcbmltcG9ydCB7IFBhcmFncmFwaE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9wYXJhZ3JhcGgubW9kZWwnO1xuaW1wb3J0IHsgUGFyYWdyYXBoU3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcGFyYWdyYXBoLXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IFBvc2l0aW9uSGVscGVyIH0gZnJvbSAnLi4vcG9zaXRpb25pbmcvcG9zaXRpb24uaGVscGVyJztcbmltcG9ydCB7IFByaW50SGVscGVyIH0gZnJvbSAnLi4vZGlzcGxheS9wcmludC9wcmludC5oZWxwZXInO1xuaW1wb3J0IHsgUmFuZ2UgfSBmcm9tICcuLi9wb3NpdGlvbmluZy9yYW5nZSc7XG5pbXBvcnQgeyBSZWd1bGF0b3JTZXJ2aWNlIH0gZnJvbSAnLi9yZWd1bGF0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBSZW1vdmVOdW1iZXJpbmdzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3JlbW92ZS1udW1iZXJpbmdzLm1vZGVsJztcbmltcG9ydCB7IFJlbW92ZVRhYmxlQ29sdW1uc01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZW1vdmUtdGFibGUtY29sdW1ucy5tb2RlbCc7XG5pbXBvcnQgeyBSZW1vdmVUYWJsZVJvd3NNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVtb3ZlLXRhYmxlLXJvd3MubW9kZWwnO1xuaW1wb3J0IHsgUmVuZGVyZXIgfSBmcm9tICcuLi9kaXNwbGF5L3JlbmRlcmVyJztcbmltcG9ydCB7IFJlcGxhY2VNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVwbGFjZS5tb2RlbCc7XG5pbXBvcnQgeyBSZXNpemVUYWJsZUNvbHVtbnNNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVzaXplLXRhYmxlLWNvbHVtbnMubW9kZWwnO1xuaW1wb3J0IHsgUmVzdG9yZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZXN0b3JlLm1vZGVsJztcbmltcG9ydCB7IFJlc3RvcmVOdW1iZXJpbmdzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3Jlc3RvcmUtbnVtYmVyaW5ncy5tb2RlbCc7XG5pbXBvcnQgeyBSZXN0b3JlUGFyYWdyYXBoU3R5bGVzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3Jlc3RvcmUtcGFyYWdyYXBoLXN0eWxlcy5tb2RlbCc7XG5pbXBvcnQgeyBSZXN0b3JlVGFibGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVzdG9yZS10YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBSZXN0b3JlVGV4dFN0eWxlc01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZXN0b3JlLXRleHQtc3R5bGVzLm1vZGVsJztcbmltcG9ydCB7IFNhdmVDb21tYW5kc0hlbHBlciB9IGZyb20gJy4uL29wZXJhdGlvbnMvc2F2ZS1jb21tYW5kcy5oZWxwZXInO1xuaW1wb3J0IHsgU2NhbGluZ0hlbHBlciB9IGZyb20gJy4uL2NvbnRlbnQvaGVscGVycy9zY2FsaW5nLmhlbHBlcic7XG5pbXBvcnQgeyBTZWFyY2gsIFNlYXJjaE9wdGlvbnMgfSBmcm9tICcuLi9nYWRnZXRzL3NlYXJjaC9zZWFyY2gnO1xuaW1wb3J0IHsgU2VhcmNoSXRlcmF0aW9uIH0gZnJvbSAnLi4vZ2FkZ2V0cy9zZWFyY2gvc2VhcmNoLWl0ZXJhdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2VsZWN0aW9uIH0gZnJvbSAnLi4vcG9zaXRpb25pbmcvc2VsZWN0aW9uJztcbmltcG9ydCB7IFRhYmxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3RhYmxlLm1vZGVsJztcbmltcG9ydCB7IFRhYk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90YWIubW9kZWwnO1xuaW1wb3J0IHsgVGFyZ2V0TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3RhcmdldC5tb2RlbCc7XG5pbXBvcnQgeyBUZXh0SW5wdXQgfSBmcm9tICcuLi9pbnRlcmFjdGlvbi90ZXh0LWlucHV0JztcbmltcG9ydCB7IFRleHRTdHlsZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90ZXh0LXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IFZpcnR1YWxSZW5kZXJlciB9IGZyb20gJy4uL2Rpc3BsYXkvdmlydHVhbC5yZW5kZXJlcic7XG5cbmV4cG9ydCBjbGFzcyBFZGl0b3Ige1xuICAgIHJlYWRvbmx5IE1BWF9DT1VOVCA9IDk5OTtcblxuICAgIHJlYWRvbmx5IHBhcmVudFRhZ05hbWUgPSAnQVBQLU5PRC1FRElUT1InO1xuXG4gICAgcmVhZG9ubHkgdGFibGVDZWxsVGFnTmFtZSA9ICdBUFAtTk9ELVRBQkxFLUNFTEwnO1xuXG4gICAgcmVhZG9ubHkgZWRnZUVsZW1lbnRUYWdOYW1lID0gJ0FQUC1OT0QtRURHRSc7XG5cbiAgICByZWFkb25seSBpbWFnZVRhZ05hbWUgPSAnQVBQLU5PRC1JTUFHRSc7XG5cbiAgICByZWFkb25seSBjdXN0b21FbGVtZW50VGFnTmFtZXM6IHN0cmluZ1tdO1xuXG4gICAgcmVhZG9ubHkgaGlzdG9yeTogT3BlcmF0aW9uSGlzdG9yeTtcblxuICAgIGdldCBtYWluU2Vzc2lvbigpOiBFZGl0U2Vzc2lvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ3VsYXRvclNlcnZpY2UubWFpblNlc3Npb24uc2Vzc2lvbjtcbiAgICB9XG5cbiAgICBnZXQgbWFpblJlbmRlcmVyKCk6IFZpcnR1YWxSZW5kZXJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ3VsYXRvclNlcnZpY2UubWFpblNlc3Npb24ucmVuZGVyZXIgYXMgVmlydHVhbFJlbmRlcmVyO1xuICAgIH1cblxuICAgIGdldCBzZXNzaW9uKCk6IEVkaXRTZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVndWxhdG9yU2VydmljZS5jdXJyZW50U2Vzc2lvbi5zZXNzaW9uO1xuICAgIH1cblxuICAgIGdldCByZW5kZXJlcigpOiBSZW5kZXJlciB8IFZpcnR1YWxSZW5kZXJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ3VsYXRvclNlcnZpY2UuY3VycmVudFNlc3Npb24ucmVuZGVyZXI7XG4gICAgfVxuXG4gICAgZ2V0IGlzVmlld09ubHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuaXNWaWV3T25seTtcbiAgICB9XG5cbiAgICBnZXQgdGFyZ2V0cygpOiBUYXJnZXRNb2RlbFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVndWxhdG9yU2VydmljZS5nZXRDdXJyZW50U2Vzc2lvblRhcmdldHMoKTtcbiAgICB9XG5cbiAgICBzZWxlY3Rpb246IFNlbGVjdGlvbjtcblxuICAgIG1vdXNlSGFuZGxlcjogTW91c2VIYW5kbGVyO1xuXG4gICAgaW5wdXRIYW5kbGVyOiBJbnB1dEhhbmRsZXI7XG5cbiAgICBkb2N1bWVudEhhbmRsZXI6IERvY3VtZW50SGFuZGxlcjtcblxuICAgIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgICBwcml2YXRlIHNlYXJjaDogU2VhcmNoO1xuXG4gICAgcHJpdmF0ZSB0ZXh0SW5wdXQ6IFRleHRJbnB1dDtcblxuICAgIHByaXZhdGUgY2xpcGJvYXJkRGF0YTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgbW9kZWw6IERvY3hNb2RlbCxcbiAgICAgICAgcHJpdmF0ZSBjb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBwcml2YXRlIGVkaXRvclNlcnZpY2U6IEVkaXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVndWxhdG9yU2VydmljZTogUmVndWxhdG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb21tYW5kc1NlcnZpY2U6IENvbW1hbmRzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjbGlwYm9hcmQ6IENsaXBib2FyZCxcbiAgICAgICAgcHJpdmF0ZSBleHRlcm5hbEVsZW1lbnRUYWdOYW1lczogc3RyaW5nW10sXG4gICAgICAgIHByaXZhdGUgY3VzdG9tUGFnZVdpZHRoPzogbnVtYmVyXG4gICAgKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMucmVjZWl2ZVRleHRTdHlsZVN1YnNjcmlwdGlvbigpKTtcbiAgICAgICAgdGhpcy5jdXN0b21FbGVtZW50VGFnTmFtZXMgPSBbLi4udGhpcy5leHRlcm5hbEVsZW1lbnRUYWdOYW1lcywgdGhpcy5pbWFnZVRhZ05hbWUsIHRoaXMudGFibGVDZWxsVGFnTmFtZSwgdGhpcy5lZGdlRWxlbWVudFRhZ05hbWVdO1xuICAgICAgICB0aGlzLmhpc3RvcnkgPSBuZXcgT3BlcmF0aW9uSGlzdG9yeShlZGl0b3JTZXJ2aWNlLCByZWd1bGF0b3JTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRTZWxlY3Rpb24odGhpcy5zZWxlY3Rpb24pO1xuICAgICAgICB0aGlzLmluaXRNYWluU2Vzc2lvbigpO1xuICAgICAgICB0aGlzLnRleHRJbnB1dCA9IG5ldyBUZXh0SW5wdXQodGhpcy5tYWluUmVuZGVyZXIuY29udGFpbmVyKTtcbiAgICAgICAgdGhpcy5tYWluUmVuZGVyZXIudGV4dGFyZWEgPSB0aGlzLnRleHRJbnB1dC5pbnB1dDtcbiAgICAgICAgdGhpcy5tb3VzZUhhbmRsZXIgPSBuZXcgTW91c2VIYW5kbGVyKHRoaXMubWFpblJlbmRlcmVyLmNvbnRhaW5lciwgdGhpcyk7XG4gICAgICAgIHRoaXMuaW5wdXRIYW5kbGVyID0gbmV3IElucHV0SGFuZGxlcih0aGlzLnRleHRJbnB1dC5pbnB1dCwgdGhpcyk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRIYW5kbGVyID0gbmV3IERvY3VtZW50SGFuZGxlcih0aGlzKTtcbiAgICAgICAgdGhpcy5pbml0UmVzaXplTGlzdGVuZXIoKTtcbiAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICB0aGlzLnNlc3Npb24uYXBwbHlUb29sYmFyU3R5bGVzKCk7XG5cbiAgICAgICAgdGhpcy5zZWFyY2ggPSBuZXcgU2VhcmNoKCk7XG4gICAgICAgIHRoaXMuc2VhcmNoLnNldCh7IHdyYXA6IHRydWUgfSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkRWRnZVNpemVTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZEVkZ2VTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZVN1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VFbGVtZW50U3R5bGVTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuY2xpcGJvYXJkRGF0YVN1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5jb3B5U2VsZWN0ZWRTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQ3VzdG9tQ29tcG9uZW50U3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmN1dFNlbGVjdGVkU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVTZWxlY3Rpb25TdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuZW5kTW91c2VQcmVzc1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5pbWFnZUxvYWRlZFN1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5pbnNlcnRCcmVha1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5pbnNlcnRJbWFnZVN1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5pbnNlcnRMaW5rU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmluc2VydFRhYmxlQ29sdW1uc1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5pbnNlcnRUYWJsZVJvd3NTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0VGFibGVTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0VGV4dFN1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5wYXN0ZUZyb21DbGlwYm9hcmRTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMucHJpbnRTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMucmVkb1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5yZW1vdmVMZWZ0U3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnJlbW92ZU51bWJlcmluZ3NTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlUmlnaHRTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWRTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVGFibGVDb2x1bW5zU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnJlbW92ZVRhYmxlUm93c1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnJlc2l6ZVRhYmxlQ29sdW1uc1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5zZWFyY2hPcHRpb25TdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnNldEltYWdlU3R5bGVTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuc2V0TnVtYmVyaW5nVGVtcGxhdGVUeXBlU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnNldFBhcmFncmFwaFN0eWxlc1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5zZXRUZXh0U3R5bGVzU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnVuZG9TdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRWRnZVN1YnNjcmlwdGlvbigpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzPy51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgdGhpcy5kZXN0cm95UmVzaXplTGlzdGVuZXIoKTtcbiAgICAgICAgdGhpcy5tb3VzZUhhbmRsZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmlucHV0SGFuZGxlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRIYW5kbGVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uYmx1cigpO1xuICAgIH1cblxuICAgIHNlbGVjdFBhZ2VEb3duKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLm1haW5SZW5kZXJlci5sYXllckNvbmZpZztcbiAgICAgICAgY29uc3QgbGluZSA9IGNvbmZpZy52aXNpYmxlUmFuZ2UuZW5kU2NyZWVuTGluZTtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBQb3NpdGlvbkhlbHBlci5zY3JlZW5Ub0RvY3VtZW50KHRoaXMubWFpblNlc3Npb24sIGxpbmUsIDApO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlU2VsZWN0aW9uKHBvc2l0aW9uKTtcbiAgICAgICAgdGhpcy5tYWluUmVuZGVyZXIuc2Nyb2xsQnkoY29uZmlnLmhlaWdodCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ3Vyc29ySW50b01haW5WaWV3KDAuNSk7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBzZWxlY3RQYWdlVXAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMubWFpblJlbmRlcmVyLmxheWVyQ29uZmlnO1xuICAgICAgICBjb25zdCBsaW5lID0gY29uZmlnLnZpc2libGVSYW5nZS5zdGFydFNjcmVlbkxpbmU7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gUG9zaXRpb25IZWxwZXIuc2NyZWVuVG9Eb2N1bWVudCh0aGlzLm1haW5TZXNzaW9uLCBsaW5lLCAwKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZVNlbGVjdGlvbihwb3NpdGlvbik7XG4gICAgICAgIHRoaXMubWFpblJlbmRlcmVyLnNjcm9sbEJ5KC1jb25maWcuaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvTWFpblZpZXcoMC41KTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIGdvdG9QYWdlRG93bigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5tYWluUmVuZGVyZXIubGF5ZXJDb25maWc7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBjb25maWcudmlzaWJsZVJhbmdlLmVuZFNjcmVlbkxpbmU7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gUG9zaXRpb25IZWxwZXIuc2NyZWVuVG9Eb2N1bWVudCh0aGlzLm1haW5TZXNzaW9uLCBsaW5lLCAwKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IocG9zaXRpb24pO1xuICAgICAgICB0aGlzLm1haW5SZW5kZXJlci5zY3JvbGxCeShjb25maWcuaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvTWFpblZpZXcoMC41KTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIGdvdG9QYWdlVXAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMubWFpblJlbmRlcmVyLmxheWVyQ29uZmlnO1xuICAgICAgICBjb25zdCBsaW5lID0gY29uZmlnLnZpc2libGVSYW5nZS5zdGFydFNjcmVlbkxpbmU7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gUG9zaXRpb25IZWxwZXIuc2NyZWVuVG9Eb2N1bWVudCh0aGlzLm1haW5TZXNzaW9uLCBsaW5lLCAwKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IocG9zaXRpb24pO1xuICAgICAgICB0aGlzLm1haW5SZW5kZXJlci5zY3JvbGxCeSgtY29uZmlnLmhlaWdodCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ3Vyc29ySW50b01haW5WaWV3KDAuNSk7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBjdXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICBpbnNlcnQodGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0U3R5bGUgPSBDb250ZW50U3R5bGVIZWxwZXIuY29tYmluZVRleHRTdHlsZXMobnVsbCwgdGhpcy5lZGl0b3JTZXJ2aWNlLnN0eWxlcyBhcyBUZXh0U3R5bGVNb2RlbCk7XG4gICAgICAgICAgICB0aGlzLmluc2VydFRleHQodGV4dCwgdGV4dFN0eWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGluc2VydEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhUb0RvY3VtZW50SW5kZXgoXG4gICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQucm93LFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LmNvbHVtblxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGluc2VydFRleHQgPSBuZXcgSW5zZXJ0VGV4dE1vZGVsKHsgaW5zZXJ0SW5kZXgsIHRleHQgfSk7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VCeShuZXcgUmVwbGFjZU1vZGVsKHsgaW5zZXJ0VGV4dCB9KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbnNlcnRUZXh0KHRleHQ6IHN0cmluZywgdGV4dFN0eWxlOiBUZXh0U3R5bGVNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuc2VsZWN0aW9uLmN1cnNvcjtcbiAgICAgICAgaWYgKHRleHRTdHlsZSkge1xuICAgICAgICAgICAgdGhpcy5zYXZlSW5zZXJ0U3R5bGVkVGV4dFRvSGlzdG9yeShwb3NpdGlvbi5yb3csIHBvc2l0aW9uLmNvbHVtbiwgdGV4dCwgdGV4dFN0eWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZUluc2VydFRleHRUb0hpc3RvcnkocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4sIHRleHQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnRUZXh0KHBvc2l0aW9uLCB0ZXh0LCB0ZXh0U3R5bGUpO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlTGVmdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdExlZnQodGhpcy5zZXNzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGVkKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlUmlnaHQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RSaWdodCh0aGlzLnNlc3Npb24pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICBpbnNlcnRCcmVhayhicmVha1R5cGU6IEJyZWFrVHlwZXMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5zZXJ0SW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleChcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQucm93LFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQuY29sdW1uXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGluc2VydEJyZWFrID0gbmV3IEluc2VydEJyZWFrTW9kZWwoeyBpbnNlcnRJbmRleCwgYnJlYWtUeXBlIH0pO1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUJ5KG5ldyBSZXBsYWNlTW9kZWwoeyBpbnNlcnRCcmVhayB9KSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYnJlYWtUeXBlID09PSBCcmVha1R5cGVzLkNvbHVtbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zYXZlSW5zZXJ0QnJlYWtUb0hpc3RvcnkoaW5zZXJ0QnJlYWspO1xuICAgICAgICBjb25zdCBlbmRQb2ludCA9IHRoaXMuc2Vzc2lvbi5pbnNlcnRCcmVhayh0aGlzLnNlbGVjdGlvbi5jdXJzb3IsIGJyZWFrVHlwZSk7XG4gICAgICAgIGxldCBsYXN0Um93ID0gdGhpcy5zZWxlY3Rpb24uY3Vyc29yLnJvdyA9PT0gZW5kUG9pbnQucm93ID8gZW5kUG9pbnQucm93IDogSW5maW5pdHk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlTGluZXModGhpcy5zZWxlY3Rpb24uY3Vyc29yLnJvdywgbGFzdFJvdyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7XG4gICAgICAgIHRoaXMucmVyZW5kZXJNYXJrZXIoKTtcbiAgICAgICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvTWFpblZpZXcoMC4xKTtcbiAgICB9XG5cbiAgICBpbnNlcnRUYWIoKSB7XG4gICAgICAgIGNvbnN0IGluc2VydEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhUb0RvY3VtZW50SW5kZXgoXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LnJvdyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LmNvbHVtblxuICAgICAgICApO1xuICAgICAgICBjb25zdCBpbnNlcnRUYWIgPSBuZXcgSW5zZXJ0VGFiTW9kZWwoeyBpbnNlcnRJbmRleCB9KTtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VCeShuZXcgUmVwbGFjZU1vZGVsKHsgaW5zZXJ0VGFiIH0pKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2F2ZUluc2VydFRhYlRvSGlzdG9yeShpbnNlcnRUYWIpO1xuICAgICAgICBjb25zdCBlbmRQb2ludCA9IHRoaXMuc2Vzc2lvbi5pbnNlcnRUYWIodGhpcy5zZWxlY3Rpb24uY3Vyc29yKTtcbiAgICAgICAgdGhpcy5vbkRvY3VtZW50Q2hhbmdlKG5ldyBSYW5nZSh0aGlzLnNlbGVjdGlvbi5jdXJzb3IsIGVuZFBvaW50KSk7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBpbnNlcnRJbWFnZShpbWFnZURhdGE6IEltYWdlRGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFkanVzdGVkSW1hZ2UgPSBJbWFnZUhlbHBlci5nZXRJbWFnZVdpdGhBbGxvd2VkU2l6ZShpbWFnZURhdGEsIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5jb250ZW50V2lkdGgpO1xuICAgICAgICBjb25zdCBpbnNlcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoVG9Eb2N1bWVudEluZGV4KFxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5yb3csXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5jb2x1bW5cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaW5zZXJ0SW1hZ2UgPSBuZXcgSW5zZXJ0SW1hZ2VNb2RlbCh7IGluc2VydEluZGV4LCBpbWFnZURhdGE6IGFkanVzdGVkSW1hZ2UgfSk7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSkge1xuICAgICAgICAgICAgdGhpcy5yZXBsYWNlQnkobmV3IFJlcGxhY2VNb2RlbCh7IGluc2VydEltYWdlIH0pKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2F2ZUluc2VydEltYWdlVG9IaXN0b3J5KGluc2VydEltYWdlKTtcbiAgICAgICAgY29uc3QgZW5kUG9pbnQgPSB0aGlzLnNlc3Npb24uaW5zZXJ0SW1hZ2UodGhpcy5zZWxlY3Rpb24uY3Vyc29yLCBhZGp1c3RlZEltYWdlKTtcbiAgICAgICAgbGV0IGxhc3RSb3cgPSB0aGlzLnNlbGVjdGlvbi5jdXJzb3Iucm93ID09PSBlbmRQb2ludC5yb3cgPyBlbmRQb2ludC5yb3cgOiBJbmZpbml0eTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVMaW5lcyh0aGlzLnNlbGVjdGlvbi5jdXJzb3Iucm93LCBsYXN0Um93KTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTtcbiAgICAgICAgdGhpcy5yZXJlbmRlck1hcmtlcigpO1xuICAgIH1cblxuICAgIGluc2VydExpbmsobGlua0RhdGFNb2RlbDogTGlua0RhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnNlcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoVG9Eb2N1bWVudEluZGV4KFxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5yb3csXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5jb2x1bW5cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaW5zZXJ0TGluayA9IG5ldyBJbnNlcnRMaW5rTW9kZWwoeyBpbnNlcnRJbmRleCwgZW5kSW5kZXg6IGluc2VydEluZGV4ICsgbGlua0RhdGFNb2RlbC50ZXh0Lmxlbmd0aCwgbGlua0RhdGFNb2RlbCB9KTtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VCeShuZXcgUmVwbGFjZU1vZGVsKHsgaW5zZXJ0TGluayB9KSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNhdmVJbnNlcnRMaW5rVG9IaXN0b3J5KGluc2VydExpbmspO1xuICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0TGluayh0aGlzLnNlbGVjdGlvbi5jdXJzb3IsIGxpbmtEYXRhTW9kZWwpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgICAgICB0aGlzLnJlcmVuZGVyTWFya2VyKCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0VGFibGUodGFibGVEYXRhOiB7IHJvd3M6IG51bWJlcjsgY29sdW1uczogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5zZXJ0SW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleChcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQucm93LFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQuY29sdW1uXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgaW5zZXJ0VGFibGUgPSBuZXcgSW5zZXJ0VGFibGVNb2RlbCh7XG4gICAgICAgICAgICBpbnNlcnRJbmRleCxcbiAgICAgICAgICAgIGluc2VydFRhYmxlSW5kZXg6IGluc2VydEluZGV4LFxuICAgICAgICAgICAgcm93c0NvdW50OiB0YWJsZURhdGEucm93cyxcbiAgICAgICAgICAgIGNvbHVtbnNDb3VudDogdGFibGVEYXRhLmNvbHVtbnMsXG4gICAgICAgICAgICBjb250ZW50OiBUQUJMRV9NQVJLRVJcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHNbdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQucm93XS5wYXJhZ3JhcGhTZXR0aW5ncy5udW1iZXJpbmdEYXRhLm51bWJlcmluZ0lkIHx8XG4gICAgICAgICAgICAhdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMuc29tZSh4ID0+IHguc3RhcnRJbmRleCA9PT0gaW5zZXJ0SW5kZXgpIHx8XG4gICAgICAgICAgICAhdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLmlzTmV3TGluZVN5bWJvbChpbnNlcnRJbmRleClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmluc2VydFRhYmxlSW5OZXdQYXJhZ3JhcGgoaW5zZXJ0VGFibGUsIGluc2VydEluZGV4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0VGFibGVJbkN1cnJlbnRQYXJhZ3JhcGgoaW5zZXJ0VGFibGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5zZXJ0VGFibGVJbk5ld1BhcmFncmFwaChpbnNlcnRUYWJsZTogSW5zZXJ0VGFibGVNb2RlbCwgaW5zZXJ0SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnNlcnRQYXJhZ3JhcGggPSBuZXcgSW5zZXJ0UGFyYWdyYXBoTW9kZWwoeyBpbnNlcnRJbmRleCwgaW5zZXJ0VGFibGUgfSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VCeShuZXcgUmVwbGFjZU1vZGVsKHsgaW5zZXJ0UGFyYWdyYXBoIH0pKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2F2ZUluc2VydFBhcmFncmFwaFRvSGlzdG9yeShpbnNlcnRUYWJsZS5jb250ZW50LCBpbnNlcnRQYXJhZ3JhcGgpO1xuICAgICAgICBjb25zdCBlbmRQb2ludCA9IHRoaXMuc2Vzc2lvbi5pbnNlcnRQYXJhZ3JhcGgodGhpcy5zZWxlY3Rpb24uY3Vyc29yLCBpbnNlcnRQYXJhZ3JhcGgpO1xuICAgICAgICBsZXQgbGFzdFJvdyA9IHRoaXMuc2VsZWN0aW9uLmN1cnNvci5yb3cgPT09IGVuZFBvaW50LnJvdyA/IGVuZFBvaW50LnJvdyA6IEluZmluaXR5O1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUxpbmVzKHRoaXMuc2VsZWN0aW9uLmN1cnNvci5yb3csIGxhc3RSb3cpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgICAgICB0aGlzLnJlcmVuZGVyTWFya2VyKCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0VGFibGVJbkN1cnJlbnRQYXJhZ3JhcGgoaW5zZXJ0VGFibGU6IEluc2VydFRhYmxlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VCeShuZXcgUmVwbGFjZU1vZGVsKHsgaW5zZXJ0VGFibGUgfSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zYXZlSW5zZXJ0VGFibGVUb0hpc3RvcnkoaW5zZXJ0VGFibGUpO1xuICAgICAgICBjb25zdCBlbmRQb2ludCA9IHRoaXMuc2Vzc2lvbi5pbnNlcnRUYWJsZSh0aGlzLnNlbGVjdGlvbi5jdXJzb3IsIGluc2VydFRhYmxlKTtcbiAgICAgICAgbGV0IGxhc3RSb3cgPSB0aGlzLnNlbGVjdGlvbi5jdXJzb3Iucm93ID09PSBlbmRQb2ludC5yb3cgPyBlbmRQb2ludC5yb3cgOiBJbmZpbml0eTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVMaW5lcyh0aGlzLnNlbGVjdGlvbi5jdXJzb3Iucm93LCBsYXN0Um93KTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTtcbiAgICAgICAgdGhpcy5yZXJlbmRlck1hcmtlcigpO1xuICAgIH1cblxuICAgIHJlcGxhY2VCeShtb2RlbDogUmVwbGFjZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhcnRJbmRleGVzID0gQ29udGVudEhlbHBlci5nZXRTZWxlY3RlZFBhcnREb2N1bWVudEluZGV4ZXModGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHRoaXMuc2VsZWN0aW9uLnJhbmdlKTtcbiAgICAgICAgbW9kZWwuZGVsZXRlID0gbmV3IERlbGV0ZU1vZGVsKHsgc3RhcnRJbmRleDogcGFydEluZGV4ZXMuc3RhcnRJbmRleCwgY291bnQ6IHBhcnRJbmRleGVzLmVuZEluZGV4IC0gcGFydEluZGV4ZXMuc3RhcnRJbmRleCArIDEgfSk7XG4gICAgICAgIHRoaXMuc2F2ZVJlcGxhY2VUb0hpc3RvcnkodGhpcy5zZWxlY3Rpb24ucmFuZ2UsIG1vZGVsKTtcbiAgICAgICAgdGhpcy5yZW1vdmVDdXN0b21FbGVtZW50c0RhdGEoKTtcbiAgICAgICAgY29uc3QgZW5kUG9zaXRpb24gPSB0aGlzLnNlc3Npb24ucmVwbGFjZShtb2RlbCk7XG4gICAgICAgIHRoaXMub25Eb2N1bWVudENoYW5nZShuZXcgUmFuZ2UodGhpcy5zZWxlY3Rpb24uY3Vyc29yLCBlbmRQb3NpdGlvbikpO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlVG9MaW5lU3RhcnQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RMaW5lU3RhcnQodGhpcy5zZXNzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGVkKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlVG9MaW5lRW5kKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0TGluZUVuZCh0aGlzLnNlc3Npb24pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICByZW1vdmVXb3JkTGVmdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdFdvcmRMZWZ0KHRoaXMuc2Vzc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZCgpO1xuICAgIH1cblxuICAgIHJlbW92ZVdvcmRSaWdodCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdFdvcmRSaWdodCh0aGlzLnNlc3Npb24pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICBhcHBseVRleHRTdHlsZUJvbGQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYXBwbHlUZXh0U3R5bGVzKG5ldyBUZXh0U3R5bGVNb2RlbCh7IGJvbGQ6ICF0aGlzLnNlc3Npb24uZWRpdG9yU2VydmljZS5zdHlsZXMuYm9sZCB9KSk7XG4gICAgfVxuXG4gICAgYXBwbHlUZXh0U3R5bGVJdGFsaWMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYXBwbHlUZXh0U3R5bGVzKG5ldyBUZXh0U3R5bGVNb2RlbCh7IGl0YWxpYzogIXRoaXMuc2Vzc2lvbi5lZGl0b3JTZXJ2aWNlLnN0eWxlcy5pdGFsaWMgfSkpO1xuICAgIH1cblxuICAgIGFwcGx5VGV4dFN0eWxlVW5kZXJsaW5lKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFwcGx5VGV4dFN0eWxlcyhuZXcgVGV4dFN0eWxlTW9kZWwoeyB1bmRlcmxpbmU6ICF0aGlzLnNlc3Npb24uZWRpdG9yU2VydmljZS5zdHlsZXMudW5kZXJsaW5lIH0pKTtcbiAgICB9XG5cbiAgICBhcHBseVRleHRTdHlsZXModGV4dFN0eWxlOiBUZXh0U3R5bGVNb2RlbCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRJbmRleGVzID0gQ29udGVudEhlbHBlci5nZXRTZWxlY3RlZFBhcnREb2N1bWVudEluZGV4ZXModGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHRoaXMuc2VsZWN0aW9uLnJhbmdlKTtcbiAgICAgICAgICAgIHRoaXMuc2F2ZUFwcGx5VGV4dFN0eWxlVG9IaXN0b3J5KHBhcnRJbmRleGVzLnN0YXJ0SW5kZXgsIHBhcnRJbmRleGVzLmVuZEluZGV4LCB0ZXh0U3R5bGUpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmFwcGx5VGV4dFN0eWxlKHBhcnRJbmRleGVzLnN0YXJ0SW5kZXgsIHBhcnRJbmRleGVzLmVuZEluZGV4LCB0ZXh0U3R5bGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRUZXh0U3R5bGUodGV4dFN0eWxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFRleHRTdHlsZSh0ZXh0U3R5bGU6IFRleHRTdHlsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhQb3NpdGlvblRvRG9jdW1lbnRJbmRleCh0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocywgdGhpcy5zZWxlY3Rpb24uY3Vyc29yKTtcbiAgICAgICAgY29uc3QgaXNQYXJhZ3JhcGggPSB0aGlzLnNlc3Npb24ubW9kZWwuY29udGVudExlbmd0aCA9PT0gaW5kZXggfHwgdGhpcy5zZXNzaW9uLm1vZGVsLmNvbnRlbnRbaW5kZXhdID09PSBORVdfTElORV9NQVJLVVA7XG4gICAgICAgIGlmIChpc1BhcmFncmFwaCkge1xuICAgICAgICAgICAgdGhpcy5zYXZlQXBwbHlUZXh0U3R5bGVUb0hpc3RvcnkoaW5kZXgsIGluZGV4LCB0ZXh0U3R5bGUpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmFwcGx5VGV4dFN0eWxlKGluZGV4LCBpbmRleCwgdGV4dFN0eWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRUZXh0U3R5bGUodGV4dFN0eWxlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgIH1cblxuICAgIGFwcGx5UGFyYWdyYXBoU3R5bGVzKHBhcmFncmFwaFN0eWxlOiBQYXJhZ3JhcGhTdHlsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5zZWxlY3Rpb24ucmFuZ2U7XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLnNlc3Npb24ubW9kZWwucGFyYWdyYXBoc1tyYW5nZS5zdGFydC5yb3ddLmluc2VydEluZGV4O1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IHRoaXMuc2Vzc2lvbi5tb2RlbC5wYXJhZ3JhcGhzW3JhbmdlLmVuZC5yb3ddLmluc2VydEluZGV4O1xuICAgICAgICB0aGlzLnNhdmVBcHBseVBhcmFncmFwaFN0eWxlVG9IaXN0b3J5KHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBwYXJhZ3JhcGhTdHlsZSk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5hcHBseVBhcmFncmFwaFN0eWxlKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBwYXJhZ3JhcGhTdHlsZSk7XG4gICAgfVxuXG4gICAgYXBwbHlFbGVtZW50U3R5bGUoY3VycmVudDogRWxlbWVudE1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2F2ZUFwcGx5RWxlbWVudFN0eWxlVG9IaXN0b3J5KGN1cnJlbnQpO1xuICAgICAgICB0aGlzLnNlc3Npb24uYXBwbHlFbGVtZW50U3R5bGUobmV3IEFwcGx5RWxlbWVudFN0eWxlTW9kZWwoY3VycmVudCkpO1xuICAgIH1cblxuICAgIHNldE51bWJlcmluZ1RlbXBsYXRlKHRlbXBsYXRlTGV2ZWxzOiBOdW1iZXJpbmdMZXZlbE1vZGVsW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvbi5yYW5nZTtcbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IHRoaXMuc2Vzc2lvbi5tb2RlbC5wYXJhZ3JhcGhzW3JhbmdlLnN0YXJ0LnJvd10uaW5zZXJ0SW5kZXg7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdGhpcy5zZXNzaW9uLm1vZGVsLnBhcmFncmFwaHNbcmFuZ2UuZW5kLnJvd10uaW5zZXJ0SW5kZXg7XG4gICAgICAgIHRoaXMuc2F2ZUFkZE51bWJlcmluZ1RvSGlzdG9yeSh0ZW1wbGF0ZUxldmVscywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICB0aGlzLnNlc3Npb24uYWRkTnVtYmVyaW5nKHRlbXBsYXRlTGV2ZWxzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlTnVtYmVyaW5nc0Zyb21QYXJhZ3JhcGhzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuc2VsZWN0aW9uLnJhbmdlO1xuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gdGhpcy5zZXNzaW9uLm1vZGVsLnBhcmFncmFwaHNbcmFuZ2Uuc3RhcnQucm93XS5pbnNlcnRJbmRleDtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSB0aGlzLnNlc3Npb24ubW9kZWwucGFyYWdyYXBoc1tyYW5nZS5lbmQucm93XS5pbnNlcnRJbmRleDtcbiAgICAgICAgdGhpcy5zYXZlUmVtb3ZlTnVtYmVyaW5nVG9IaXN0b3J5KHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZU51bWJlcmluZ3Moc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgIH1cblxuICAgIGFwcGx5SW1hZ2VTdHlsZXMoaW1hZ2U6IEltYWdlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zYXZlQXBwbHlJbWFnZVN0eWxlVG9IaXN0b3J5KGltYWdlKTtcbiAgICAgICAgY29uc3QgaW1hZ2VTdHlsZSA9IG5ldyBBcHBseUltYWdlU3R5bGVNb2RlbCh7IGluc2VydEluZGV4OiBpbWFnZS5pbnNlcnRJbmRleCwgaGVpZ2h0OiBpbWFnZS5oZWlnaHQsIHdpZHRoOiBpbWFnZS53aWR0aCB9KTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLmFwcGx5SW1hZ2VTdHlsZShpbWFnZVN0eWxlKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTtcbiAgICB9XG5cbiAgICBmb2N1cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnRleHRJbnB1dC5pc0ZvY3VzZWQgJiYgIXRoaXMuc2VsZWN0aW9uLmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgdGhpcy50ZXh0SW5wdXQuaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9wZW5TZWFyY2goKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5vcGVuU2VhcmNoRGlhbG9nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmaW5kKG9wdGlvbnM6IFNlYXJjaE9wdGlvbnMpOiBSYW5nZSB7XG4gICAgICAgIGxldCByYW5nZSA9IHRoaXMuc2VsZWN0aW9uLnJhbmdlO1xuICAgICAgICBpZiAob3B0aW9ucy50ZXJtID09IG51bGwpIHtcbiAgICAgICAgICAgIGxldCB0ZXJtID0gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLmdldFRleHRSYW5nZShyYW5nZSkgfHwgdGhpcy5zZWFyY2gub3B0aW9ucy50ZXJtO1xuICAgICAgICAgICAgaWYgKCF0ZXJtKSB7XG4gICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLnNlc3Npb24uZ2V0V29yZFJhbmdlKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uKTtcbiAgICAgICAgICAgICAgICB0ZXJtID0gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLmdldFRleHRSYW5nZShyYW5nZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zLnRlcm0gPSB0ZXJtO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLnN0YXJ0KSB7XG4gICAgICAgICAgICBvcHRpb25zLnN0YXJ0ID0gcmFuZ2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlYXJjaC5zZXQob3B0aW9ucyk7XG5cbiAgICAgICAgY29uc3QgbmV3UmFuZ2UgPSB0aGlzLnNlYXJjaC5maW5kKHRoaXMuc2Vzc2lvbik7XG4gICAgICAgIGlmIChuZXdSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VTZWxlY3Rpb24ocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXNzaW9uID09PSB0aGlzLm1haW5TZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYWluUmVuZGVyZXIuc2Nyb2xsU2VsZWN0aW9uSW50b1ZpZXcocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCwgMC41KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXdSYW5nZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJhbmdlLmVuZCA9IHJhbmdlLnN0YXJ0O1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZUN1cnNvcihyYW5nZS5zdGFydCk7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdXBkYXRlQ291bnRlcigpOiBTZWFyY2hJdGVyYXRpb24ge1xuICAgICAgICBjb25zdCByZWdleCA9IHRoaXMuc2VhcmNoLm9wdGlvbnMucmVnZXggYXMgUmVnRXhwO1xuICAgICAgICBsZXQgYWxsID0gMDtcbiAgICAgICAgbGV0IGN1cnJlbnQgPSAwO1xuICAgICAgICBpZiAoIXJlZ2V4KSB7XG4gICAgICAgICAgICByZXR1cm4geyBjdXJyZW50OiAwLCB0b3RhbDogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEuZ2V0QWxsUGFyYWdyYXBoc0NvbnRlbnQoKS5qb2luKCdcXG4nKTtcblxuICAgICAgICBsZXQgb2Zmc2V0ID0gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBvc2l0aW9uVG9JbmRleCh0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydCk7XG5cbiAgICAgICAgcmVnZXgubGFzdEluZGV4ID0gMDtcbiAgICAgICAgbGV0IHJlZ2V4UmVzdWx0O1xuICAgICAgICB3aGlsZSAoKHJlZ2V4UmVzdWx0ID0gcmVnZXguZXhlYyh2YWx1ZSkpKSB7XG4gICAgICAgICAgICBhbGwrKztcbiAgICAgICAgICAgIGxldCBsYXN0ID0gcmVnZXhSZXN1bHQuaW5kZXg7XG4gICAgICAgICAgICBpZiAobGFzdCA8PSBvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWxsID4gdGhpcy5NQVhfQ09VTlQpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IGN1cnJlbnQ6IGN1cnJlbnQsIHRvdGFsOiBhbGwgPiB0aGlzLk1BWF9DT1VOVCA/IHRoaXMuTUFYX0NPVU5UIDogYWxsIH07XG4gICAgfVxuXG4gICAgcmVwbGFjZShzZWFyY2g6IHN0cmluZywgcmVwbGFjZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2VhcmNoICE9PSByZXBsYWNlKSB7XG4gICAgICAgICAgICBpZiAocmVwbGFjZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc2VydEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhUb0RvY3VtZW50SW5kZXgoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5yb3csXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LmNvbHVtblxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5zZXJ0VGV4dCA9IG5ldyBJbnNlcnRUZXh0TW9kZWwoeyBpbnNlcnRJbmRleCwgdGV4dDogcmVwbGFjZSB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlcGxhY2VCeShuZXcgUmVwbGFjZU1vZGVsKHsgaW5zZXJ0VGV4dCB9KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmluZCh7IHRlcm06IHNlYXJjaCwgc2tpcEN1cnJlbnQ6IHRydWUsIGJhY2t3YXJkczogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgdW5kbygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdW5kbyA9IHRoaXMuaGlzdG9yeS5wb3BVbmRvT3BlcmF0aW9uKCk7XG4gICAgICAgIGlmICghdW5kbykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRUYXJnZXRlZFNlc3Npb25Bc0N1cnJlbnQodW5kby50YXJnZXRzKTtcbiAgICAgICAgdGhpcy5hcHBseU9wZXJhdGlvbih1bmRvLm9wZXJhdGlvbik7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlU2VsZWN0aW9uKHVuZG8uY3Vyc29yLCB1bmRvLmFuY2hvcik7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICByZWRvKCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZWRvID0gdGhpcy5oaXN0b3J5LnBvcFJlZG9PcGVyYXRpb24oKTtcbiAgICAgICAgaWYgKCFyZWRvKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLnNldFRhcmdldGVkU2Vzc2lvbkFzQ3VycmVudChyZWRvLnRhcmdldHMpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZVNlbGVjdGlvbihyZWRvLmN1cnNvciwgcmVkby5hbmNob3IpO1xuICAgICAgICB0aGlzLmFwcGx5T3BlcmF0aW9uKHJlZG8ub3BlcmF0aW9uKTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIGFwcGx5T3BlcmF0aW9uKG9wZXJhdGlvbjogT3BlcmF0aW9uKTogdm9pZCB7XG4gICAgICAgIGxldCBjb21tYW5kOiBDb21tYW5kTW9kZWwgfCBudWxsID0gbnVsbDtcbiAgICAgICAgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEluc2VydFRleHRNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydFRleHRCeURvY3VtZW50SW5kZXgob3BlcmF0aW9uLmluc2VydEluZGV4LCBvcGVyYXRpb24udGV4dCwgbnVsbCk7XG4gICAgICAgICAgICBjb25zdCB7IHRleHQsIGluc2VydEluZGV4IH0gPSBvcGVyYXRpb247XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFRleHRDb21tYW5kKHRleHQsIGluc2VydEluZGV4LCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEluc2VydFBhcmFncmFwaE1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0UGFyYWdyYXBoQnlEb2N1bWVudEluZGV4KG9wZXJhdGlvbik7XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFBhcmFncmFwaENvbW1hbmQob3BlcmF0aW9uLCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIERlbGV0ZU1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlQnlEb2N1bWVudEluZGV4ZXMob3BlcmF0aW9uLnN0YXJ0SW5kZXgsIG9wZXJhdGlvbi5zdGFydEluZGV4ICsgb3BlcmF0aW9uLmNvdW50KTtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0RGVsZXRlQ29tbWFuZChvcGVyYXRpb24uc3RhcnRJbmRleCwgb3BlcmF0aW9uLmNvdW50LCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEluc2VydFN0eWxlZFRleHRNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydFRleHRCeURvY3VtZW50SW5kZXgob3BlcmF0aW9uLmluc2VydEluZGV4LCBvcGVyYXRpb24udGV4dCwgbmV3IFRleHRTdHlsZU1vZGVsKG9wZXJhdGlvbi50ZXh0U3R5bGUpKTtcbiAgICAgICAgICAgIGNvbnN0IHsgdGV4dCwgaW5zZXJ0SW5kZXgsIHRleHRTdHlsZSB9ID0gb3BlcmF0aW9uO1xuICAgICAgICAgICAgY29tbWFuZCA9IFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRTdHlsZWRUZXh0Q29tbWFuZCh0ZXh0LCBpbnNlcnRJbmRleCwgdGV4dFN0eWxlLCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIFJlc3RvcmVNb2RlbCkge1xuICAgICAgICAgICAgY29uc3QgZGVlcENvcHkgPSBzdHJ1Y3R1cmVkQ2xvbmUob3BlcmF0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZXN0b3JlKGRlZXBDb3B5KTtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVzdG9yZUNvbW1hbmQoZGVlcENvcHksIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgQXBwbHlUZXh0U3R5bGVNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmFwcGx5VGV4dFN0eWxlKG9wZXJhdGlvbi5zdGFydEluZGV4LCBvcGVyYXRpb24uZW5kSW5kZXgsIG5ldyBUZXh0U3R5bGVNb2RlbChvcGVyYXRpb24udGV4dFN0eWxlKSk7XG4gICAgICAgICAgICBjb25zdCB7IHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0ZXh0U3R5bGUgfSA9IG9wZXJhdGlvbjtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0QXBwbHlUZXh0U3R5bGVDb21tYW5kKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0ZXh0U3R5bGUsIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgQXBwbHlQYXJhZ3JhcGhTdHlsZU1vZGVsKSB7XG4gICAgICAgICAgICBjb25zdCBjb3B5ID0gbmV3IFBhcmFncmFwaFN0eWxlTW9kZWwob3BlcmF0aW9uLnBhcmFncmFwaFN0eWxlKTtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5hcHBseVBhcmFncmFwaFN0eWxlKG9wZXJhdGlvbi5zdGFydEluZGV4LCBvcGVyYXRpb24uZW5kSW5kZXgsIGNvcHkpO1xuICAgICAgICAgICAgY29uc3QgeyBzdGFydEluZGV4LCBlbmRJbmRleCwgcGFyYWdyYXBoU3R5bGUgfSA9IG9wZXJhdGlvbjtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0QXBwbHlQYXJhZ3JhcGhTdHlsZUNvbW1hbmQoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHBhcmFncmFwaFN0eWxlLCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIFJlc3RvcmVUZXh0U3R5bGVzTW9kZWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZXBDb3B5ID0gc3RydWN0dXJlZENsb25lKG9wZXJhdGlvbik7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVzdG9yZVRleHRTdHlsZXMoZGVlcENvcHkuZm9ybWF0cywgZGVlcENvcHkubGlua0Zvcm1hdHMpO1xuICAgICAgICAgICAgY29tbWFuZCA9IFNhdmVDb21tYW5kc0hlbHBlci5nZXRSZXN0b3JlVGV4dFN0eWxlc0NvbW1hbmQoZGVlcENvcHkuZm9ybWF0cywgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBSZXN0b3JlUGFyYWdyYXBoU3R5bGVzTW9kZWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZXBDb3B5ID0gc3RydWN0dXJlZENsb25lKG9wZXJhdGlvbik7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVzdG9yZVBhcmFncmFwaFN0eWxlcyhkZWVwQ29weS5wYXJhZ3JhcGhzKTtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVzdG9yZVBhcmFncmFwaFN0eWxlc0NvbW1hbmQoZGVlcENvcHkucGFyYWdyYXBocywgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBJbnNlcnRFbGVtZW50TW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnRFbGVtZW50QnlEb2N1bWVudEluZGV4KG9wZXJhdGlvbik7XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydEVsZW1lbnRDb21tYW5kKG9wZXJhdGlvbiwgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBJbnNlcnRCcmVha01vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0QnJlYWtCeURvY3VtZW50SW5kZXgob3BlcmF0aW9uKTtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0QnJlYWtDb21tYW5kKG9wZXJhdGlvbiwgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBBcHBseUVsZW1lbnRTdHlsZU1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uYXBwbHlFbGVtZW50U3R5bGUob3BlcmF0aW9uKTtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0QXBwbHlFbGVtZW50U3R5bGVDb21tYW5kKG9wZXJhdGlvbiwgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBJbnNlcnRUYWJNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydFRhYkJ5RG9jdW1lbnRJbmRleChvcGVyYXRpb24pO1xuICAgICAgICAgICAgY29tbWFuZCA9IFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRUYWJDb21tYW5kKG9wZXJhdGlvbiwgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBJbnNlcnRJbWFnZU1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0SW1hZ2VCeURvY3VtZW50SW5kZXgob3BlcmF0aW9uKTtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0SW1hZ2VDb21tYW5kKG9wZXJhdGlvbiwgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBJbnNlcnRMaW5rTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnRMaW5rQnlEb2N1bWVudEluZGV4KG9wZXJhdGlvbik7XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydExpbmtPcGVyYXRpb24ob3BlcmF0aW9uLCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEFwcGx5SW1hZ2VTdHlsZU1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uYXBwbHlJbWFnZVN0eWxlKG9wZXJhdGlvbik7XG4gICAgICAgICAgICBjb25zdCB7IGhlaWdodCwgd2lkdGgsIGluc2VydEluZGV4IH0gPSBvcGVyYXRpb247XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldEFwcGx5SW1hZ2VTdHlsZUNvbW1hbmQoaGVpZ2h0LCB3aWR0aCwgaW5zZXJ0SW5kZXgsIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgQWRkTnVtYmVyaW5nTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5hZGROdW1iZXJpbmcob3BlcmF0aW9uLmxldmVscywgb3BlcmF0aW9uLnN0YXJ0SW5kZXgsIG9wZXJhdGlvbi5lbmRJbmRleCk7XG4gICAgICAgICAgICBjb25zdCB7IHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBsZXZlbHMgfSA9IG9wZXJhdGlvbjtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0QWRkTnVtYmVyaW5nQ29tbWFuZChzdGFydEluZGV4LCBlbmRJbmRleCwgbGV2ZWxzLCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIFJlc3RvcmVOdW1iZXJpbmdzTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZXN0b3JlTnVtYmVyaW5ncyhvcGVyYXRpb24ucGFyYWdyYXBocywgb3BlcmF0aW9uLm51bWJlcmluZ3MpO1xuICAgICAgICAgICAgY29tbWFuZCA9IFNhdmVDb21tYW5kc0hlbHBlci5nZXRSZXN0b3JlTnVtYmVyaW5nc0NvbW1hbmQob3BlcmF0aW9uLCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEluc2VydFRhYmxlQ29sdW1uc01vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0VGFibGVDb2x1bW5zKG9wZXJhdGlvbi5pbnNlcnRJbmRleCwgb3BlcmF0aW9uLmNvbHVtbnNDb3VudCwgb3BlcmF0aW9uLnRhcmdldEluZGV4LCBvcGVyYXRpb24uaW5oZXJpdEluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZShvcGVyYXRpb24uaW5zZXJ0SW5kZXgsIHRoaXMuc2Vzc2lvbi5zZXNzaW9uSWQpO1xuICAgICAgICAgICAgY29uc3QgeyBjb2x1bW5zQ291bnQsIGluaGVyaXRJbmRleCwgaW5zZXJ0SW5kZXgsIHRhcmdldEluZGV4IH0gPSBvcGVyYXRpb247XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFRhYmxlQ29sdW1uc0NvbW1hbmQoY29sdW1uc0NvdW50LCBpbmhlcml0SW5kZXgsIGluc2VydEluZGV4LCB0YXJnZXRJbmRleCwgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBJbnNlcnRUYWJsZVJvd3NNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydFRhYmxlUm93cyhvcGVyYXRpb24uaW5zZXJ0SW5kZXgsIG9wZXJhdGlvbi5yb3dzQ291bnQsIG9wZXJhdGlvbi50YXJnZXRJbmRleCwgb3BlcmF0aW9uLmluaGVyaXRJbmRleCk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUob3BlcmF0aW9uLmluc2VydEluZGV4LCB0aGlzLnNlc3Npb24uc2Vzc2lvbklkKTtcbiAgICAgICAgICAgIGNvbnN0IHsgaW5zZXJ0SW5kZXgsIHJvd3NDb3VudCwgdGFyZ2V0SW5kZXgsIGluaGVyaXRJbmRleCB9ID0gb3BlcmF0aW9uO1xuICAgICAgICAgICAgY29tbWFuZCA9IFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRUYWJsZVJvd3NDb21tYW5kKGluc2VydEluZGV4LCByb3dzQ291bnQsIHRhcmdldEluZGV4LCBpbmhlcml0SW5kZXgsIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgUmVtb3ZlVGFibGVDb2x1bW5zTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVUYWJsZUNvbHVtbnMob3BlcmF0aW9uLmluc2VydEluZGV4LCBvcGVyYXRpb24uc3RhcnRJbmRleCwgb3BlcmF0aW9uLmVuZEluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZShvcGVyYXRpb24uaW5zZXJ0SW5kZXgsIHRoaXMuc2Vzc2lvbi5zZXNzaW9uSWQpO1xuICAgICAgICAgICAgY29uc3QgeyBpbnNlcnRJbmRleCwgc3RhcnRJbmRleCwgZW5kSW5kZXggfSA9IG9wZXJhdGlvbjtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVtb3ZlVGFibGVDb2x1bW5zQ29tbWFuZChpbnNlcnRJbmRleCwgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgUmVtb3ZlVGFibGVSb3dzTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVUYWJsZVJvd3Mob3BlcmF0aW9uLmluc2VydEluZGV4LCBvcGVyYXRpb24uc3RhcnRJbmRleCwgb3BlcmF0aW9uLmVuZEluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZShvcGVyYXRpb24uaW5zZXJ0SW5kZXgsIHRoaXMuc2Vzc2lvbi5zZXNzaW9uSWQpO1xuICAgICAgICAgICAgY29uc3QgeyBpbnNlcnRJbmRleCwgc3RhcnRJbmRleCwgZW5kSW5kZXggfSA9IG9wZXJhdGlvbjtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVtb3ZlVGFibGVSb3dzQ29tbWFuZChpbnNlcnRJbmRleCwgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgUmVzaXplVGFibGVDb2x1bW5zTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZXNpemVUYWJsZUNvbHVtbnMob3BlcmF0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZShvcGVyYXRpb24uaW5zZXJ0SW5kZXgsIHRoaXMuc2Vzc2lvbi5zZXNzaW9uSWQpO1xuICAgICAgICAgICAgY29tbWFuZCA9IFNhdmVDb21tYW5kc0hlbHBlci5nZXRSZXNpemVUYWJsZUNvbHVtbnNDb21tYW5kKG9wZXJhdGlvbiwgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBSZXN0b3JlVGFibGVNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlc3RvcmVUYWJsZShvcGVyYXRpb24uaW5zZXJ0SW5kZXgsIG9wZXJhdGlvbi5vbGRUYWJsZSk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUob3BlcmF0aW9uLmluc2VydEluZGV4LCB0aGlzLnNlc3Npb24uc2Vzc2lvbklkKTtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVzdG9yZVRhYmxlQ29tbWFuZChvcGVyYXRpb24sIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgSW5zZXJ0VGFibGVNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydFRhYmxlQnlEb2N1bWVudEluZGV4KG9wZXJhdGlvbik7XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFRhYmxlQ29tbWFuZChvcGVyYXRpb24sIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgUmVtb3ZlTnVtYmVyaW5nc01vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlTnVtYmVyaW5ncyhvcGVyYXRpb24uc3RhcnRJbmRleCwgb3BlcmF0aW9uLmVuZEluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRJbmRleCwgZW5kSW5kZXggfSA9IG9wZXJhdGlvbjtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVtb3ZlTnVtYmVyaW5nc0NvbW1hbmQoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgUmVwbGFjZU1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVwbGFjZShvcGVyYXRpb24pO1xuICAgICAgICAgICAgY29tbWFuZCA9IFNhdmVDb21tYW5kc0hlbHBlci5nZXRSZXBsYWNlQ29tbWFuZChvcGVyYXRpb24sIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZG8vcmVkbyBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIHRoZSBPcGVyYXRpb24nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKGNvbW1hbmQpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgIH1cblxuICAgIHNhdmVSZW1vdmVUb0hpc3RvcnkocmFuZ2U6IFJhbmdlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc3RvcmVNb2RlbCA9IHRoaXMuY3JlYXRlUmVzdG9yZUZyb21TbGljZShyYW5nZS5zdGFydC5yb3csIHJhbmdlLnN0YXJ0LmNvbHVtbiwgcmFuZ2UuZW5kLnJvdywgcmFuZ2UuZW5kLmNvbHVtbik7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gcmVzdG9yZU1vZGVsLmVuZEluZGV4IC0gcmVzdG9yZU1vZGVsLnN0YXJ0SW5kZXggKyAxO1xuICAgICAgICByZXN0b3JlTW9kZWwuZW5kSW5kZXggPSByZXN0b3JlTW9kZWwuc3RhcnRJbmRleDsgLy8gdGhpcyBpcyB0byByZXN0b3JlIGluIHBvc2l0aW9uIHdpdGhvdXQgZGVsZXRpbmcvcmVwbGFjaW5nIGFueXRoaW5nIGluIHJhbmdlXG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoRGVsZXRlKHJlc3RvcmVNb2RlbCk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldERlbGV0ZUNvbW1hbmQocmVzdG9yZU1vZGVsLnN0YXJ0SW5kZXgsIGNvdW50LCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBzYXZlSW5zZXJ0VGV4dFRvSGlzdG9yeShwYXJhZ3JhcGg6IG51bWJlciwgaW5kZXhJblBhcmFncmFwaDogbnVtYmVyLCB0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleCh0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocywgcGFyYWdyYXBoLCBpbmRleEluUGFyYWdyYXBoKTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hJbnNlcnRUZXh0KGluZGV4LCB0ZXh0KTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0VGV4dENvbW1hbmQodGV4dCwgaW5kZXgsIHRoaXMudGFyZ2V0cykpO1xuICAgIH1cblxuICAgIHNhdmVJbnNlcnRQYXJhZ3JhcGhUb0hpc3RvcnkoY29udGVudDogc3RyaW5nLCBtb2RlbDogSW5zZXJ0UGFyYWdyYXBoTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hJbnNlcnRQYXJhZ3JhcGgoY29udGVudCwgbW9kZWwsIHRoaXMuc2Vzc2lvbi5tb2RlbC5wYXJhZ3JhcGhzKTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0UGFyYWdyYXBoQ29tbWFuZChtb2RlbCwgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgc2F2ZUluc2VydFN0eWxlZFRleHRUb0hpc3RvcnkocGFyYWdyYXBoOiBudW1iZXIsIGluZGV4SW5QYXJhZ3JhcGg6IG51bWJlciwgdGV4dDogc3RyaW5nLCBzdHlsZTogVGV4dFN0eWxlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleCh0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocywgcGFyYWdyYXBoLCBpbmRleEluUGFyYWdyYXBoKTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hJbnNlcnRTdHlsZWRUZXh0KGluZGV4LCB0ZXh0LCBzdHlsZSk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFN0eWxlZFRleHRDb21tYW5kKHRleHQsIGluZGV4LCBzdHlsZSwgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgc2F2ZUluc2VydEVsZW1lbnRUb0hpc3RvcnkobW9kZWw6IEluc2VydEVsZW1lbnRNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEluc2VydEVsZW1lbnQobW9kZWwpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRFbGVtZW50Q29tbWFuZChtb2RlbCwgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgc2F2ZUluc2VydEJyZWFrVG9IaXN0b3J5KG1vZGVsOiBJbnNlcnRCcmVha01vZGVsKTogdm9pZCB7XG4gICAgICAgIG1vZGVsLmlzT25OZXdQYXJhZ3JhcGggPVxuICAgICAgICAgICAgbW9kZWwuYnJlYWtUeXBlID09PSBCcmVha1R5cGVzLlBhZ2UgJiZcbiAgICAgICAgICAgIEJyZWFrSGVscGVyLmdldEJyZWFrVHlwZSh0aGlzLnNlc3Npb24ubW9kZWwsIENVU1RPTV9FTEVNRU5UX01BUktFUiwgbW9kZWwuaW5zZXJ0SW5kZXggLSAxKSAhPT0gQnJlYWtUeXBlcy5QYWdlO1xuICAgICAgICBjb25zdCBjb3VudCA9IG1vZGVsLmlzT25OZXdQYXJhZ3JhcGggPyBORVdfTElORV9NQVJLVVAubGVuZ3RoICsgMSA6IDE7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoSW5zZXJ0QnJlYWsobW9kZWwsIGNvdW50KTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0QnJlYWtDb21tYW5kKG1vZGVsLCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBzYXZlSW5zZXJ0VGFiVG9IaXN0b3J5KG1vZGVsOiBJbnNlcnRUYWJNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEluc2VydFRhYihtb2RlbCk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFRhYkNvbW1hbmQobW9kZWwsIHRoaXMudGFyZ2V0cykpO1xuICAgIH1cblxuICAgIHNhdmVJbnNlcnRJbWFnZVRvSGlzdG9yeShtb2RlbDogSW5zZXJ0SW1hZ2VNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEluc2VydEltYWdlKG1vZGVsKTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0SW1hZ2VDb21tYW5kKG1vZGVsLCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBzYXZlSW5zZXJ0TGlua1RvSGlzdG9yeShtb2RlbDogSW5zZXJ0TGlua01vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoSW5zZXJ0TGluayhtb2RlbCk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydExpbmtPcGVyYXRpb24obW9kZWwsIHRoaXMudGFyZ2V0cykpO1xuICAgIH1cblxuICAgIHNhdmVJbnNlcnRUYWJsZVRvSGlzdG9yeShtb2RlbDogSW5zZXJ0VGFibGVNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEluc2VydFRhYmxlKG1vZGVsKTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0VGFibGVDb21tYW5kKG1vZGVsLCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBzYXZlQXBwbHlUZXh0U3R5bGVUb0hpc3Rvcnkoc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyLCB0ZXh0U3R5bGU6IFRleHRTdHlsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHMgPSBGb3JtYXRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC5mb3JtYXRzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIGNvbnN0IGxpbmtGb3JtYXRzID0gTGlua0hlbHBlci5zbGljZUZvcm1hdHModGhpcy5zZXNzaW9uLm1vZGVsLmxpbmtzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoQXBwbHlUZXh0U3R5bGUoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRleHRTdHlsZSwgZm9ybWF0cywgbGlua0Zvcm1hdHMpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFNhdmVDb21tYW5kc0hlbHBlci5nZXRBcHBseVRleHRTdHlsZUNvbW1hbmQoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRleHRTdHlsZSwgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgc2F2ZUFwcGx5UGFyYWdyYXBoU3R5bGVUb0hpc3Rvcnkoc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyLCBwYXJhZ3JhcGhTdHlsZTogUGFyYWdyYXBoU3R5bGVNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhzID0gSW5kZXhlZEVsZW1lbnRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC5wYXJhZ3JhcGhzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaHNEZWVwQ29weSA9IHBhcmFncmFwaHMubWFwKFxuICAgICAgICAgICAgeCA9PiBuZXcgUGFyYWdyYXBoTW9kZWwoeyBpbnNlcnRJbmRleDogeC5pbnNlcnRJbmRleCwgcGFyYWdyYXBoU3R5bGU6IG5ldyBQYXJhZ3JhcGhTdHlsZU1vZGVsKHsgLi4ueC5wYXJhZ3JhcGhTdHlsZSB9KSB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEFwcGx5UGFyYWdyYXBoU3R5bGUoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHBhcmFncmFwaFN0eWxlLCBwYXJhZ3JhcGhzRGVlcENvcHkpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFxuICAgICAgICAgICAgU2F2ZUNvbW1hbmRzSGVscGVyLmdldEFwcGx5UGFyYWdyYXBoU3R5bGVDb21tYW5kKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBwYXJhZ3JhcGhTdHlsZSwgdGhpcy50YXJnZXRzKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHNhdmVBcHBseUVsZW1lbnRTdHlsZVRvSGlzdG9yeShjdXJyZW50OiBFbGVtZW50TW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLnNlc3Npb24ubW9kZWwuZWxlbWVudHMuZmluZCh4ID0+IHguaW5zZXJ0SW5kZXggPT09IGN1cnJlbnQuaW5zZXJ0SW5kZXgpO1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEFwcGx5RWxlbWVudFN0eWxlKHByZXZpb3VzLCBjdXJyZW50KTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0QXBwbHlFbGVtZW50U3R5bGVDb21tYW5kKGN1cnJlbnQsIHRoaXMudGFyZ2V0cykpO1xuICAgIH1cblxuICAgIHNhdmVBZGROdW1iZXJpbmdUb0hpc3RvcnkodGVtcGxhdGVMZXZlbHM6IE51bWJlcmluZ0xldmVsTW9kZWxbXSwgc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaHMgPSBJbmRleGVkRWxlbWVudEhlbHBlci5zbGljZVNlY3Rpb24odGhpcy5zZXNzaW9uLm1vZGVsLnBhcmFncmFwaHMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoc0RlZXBDb3B5ID0gcGFyYWdyYXBocy5tYXAoXG4gICAgICAgICAgICB4ID0+IG5ldyBQYXJhZ3JhcGhNb2RlbCh7IGluc2VydEluZGV4OiB4Lmluc2VydEluZGV4LCBwYXJhZ3JhcGhTdHlsZTogbmV3IFBhcmFncmFwaFN0eWxlTW9kZWwoeyAuLi54LnBhcmFncmFwaFN0eWxlIH0pIH0pXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJlbW92ZWROdW1iZXJpbmdJZHMgPSBbLi4ubmV3IFNldChwYXJhZ3JhcGhzLm1hcCh4ID0+IHgucGFyYWdyYXBoU3R5bGUubnVtYmVyaW5nSWQpKV07XG4gICAgICAgIGNvbnN0IG51bWJlcmluZ3MgPSB0aGlzLnNlc3Npb24uZ2VuZXJhbFByb3BlcnRpZXMubnVtYmVyaW5ncy5maWx0ZXIoeCA9PiByZW1vdmVkTnVtYmVyaW5nSWRzLmluY2x1ZGVzKHgubnVtYmVyaW5nSWQpKTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hBZGROdW1iZXJpbmcoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRlbXBsYXRlTGV2ZWxzLCBwYXJhZ3JhcGhzRGVlcENvcHksIG51bWJlcmluZ3MpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFNhdmVDb21tYW5kc0hlbHBlci5nZXRBZGROdW1iZXJpbmdDb21tYW5kKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0ZW1wbGF0ZUxldmVscywgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgc2F2ZVJlbW92ZU51bWJlcmluZ1RvSGlzdG9yeShzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBocyA9IEluZGV4ZWRFbGVtZW50SGVscGVyLnNsaWNlU2VjdGlvbih0aGlzLnNlc3Npb24ubW9kZWwucGFyYWdyYXBocywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhzRGVlcENvcHkgPSBwYXJhZ3JhcGhzLm1hcChcbiAgICAgICAgICAgIHggPT4gbmV3IFBhcmFncmFwaE1vZGVsKHsgaW5zZXJ0SW5kZXg6IHguaW5zZXJ0SW5kZXgsIHBhcmFncmFwaFN0eWxlOiBuZXcgUGFyYWdyYXBoU3R5bGVNb2RlbCh7IC4uLngucGFyYWdyYXBoU3R5bGUgfSkgfSlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZE51bWJlcmluZ0lkcyA9IFsuLi5uZXcgU2V0KHBhcmFncmFwaHMubWFwKHggPT4geC5wYXJhZ3JhcGhTdHlsZS5udW1iZXJpbmdJZCkpXTtcbiAgICAgICAgY29uc3QgbnVtYmVyaW5ncyA9IHRoaXMuc2Vzc2lvbi5nZW5lcmFsUHJvcGVydGllcy5udW1iZXJpbmdzLmZpbHRlcih4ID0+IHJlbW92ZWROdW1iZXJpbmdJZHMuaW5jbHVkZXMoeC5udW1iZXJpbmdJZCkpO1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaFJlbW92ZU51bWJlcmluZ3Moc3RhcnRJbmRleCwgZW5kSW5kZXgsIG51bWJlcmluZ3MsIHBhcmFncmFwaHNEZWVwQ29weSk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldFJlbW92ZU51bWJlcmluZ3NDb21tYW5kKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNhdmVBcHBseUltYWdlU3R5bGVUb0hpc3RvcnkoaW1hZ2U6IEltYWdlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLnNlc3Npb24ubW9kZWwuaW1hZ2VzLmZpbmQoeCA9PiB4Lmluc2VydEluZGV4ID09PSBpbWFnZS5pbnNlcnRJbmRleCk7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoQXBwbHlJbWFnZVN0eWxlKHByZXZpb3VzLCBpbWFnZSk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoXG4gICAgICAgICAgICBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0QXBwbHlJbWFnZVN0eWxlQ29tbWFuZChpbWFnZS5oZWlnaHQsIGltYWdlLndpZHRoLCBpbWFnZS5pbnNlcnRJbmRleCwgdGhpcy50YXJnZXRzKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2F2ZVJlcGxhY2VUb0hpc3RvcnkocmFuZ2U6IFJhbmdlLCBtb2RlbDogUmVwbGFjZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc3RvcmVNb2RlbCA9IHRoaXMuY3JlYXRlUmVzdG9yZUZyb21TbGljZShyYW5nZS5zdGFydC5yb3csIHJhbmdlLnN0YXJ0LmNvbHVtbiwgcmFuZ2UuZW5kLnJvdywgcmFuZ2UuZW5kLmNvbHVtbik7XG4gICAgICAgIGlmIChtb2RlbC5pbnNlcnRQYXJhZ3JhcGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRJbmRleCwgY291bnQgfSA9IHRoaXMuaGlzdG9yeS5nZXREZWxldGVEYXRhRm9ySW5zZXJ0UGFyYWdyYXBocyhcbiAgICAgICAgICAgICAgICBDb250ZW50SGVscGVyLmdldENvbnRlbnRGcm9tSW5zZXJ0UGFyYWdyYXBoKG1vZGVsLmluc2VydFBhcmFncmFwaCksXG4gICAgICAgICAgICAgICAgbW9kZWwuaW5zZXJ0UGFyYWdyYXBoLFxuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5tb2RlbC5wYXJhZ3JhcGhzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmVzdG9yZU1vZGVsLnN0YXJ0SW5kZXggPSBzdGFydEluZGV4O1xuICAgICAgICAgICAgcmVzdG9yZU1vZGVsLmVuZEluZGV4ID0gc3RhcnRJbmRleCArIGNvdW50IC0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3RvcmVNb2RlbC5lbmRJbmRleCA9IHJlc3RvcmVNb2RlbC5zdGFydEluZGV4ICsgKG1vZGVsLmluc2VydFRleHQ/LnRleHQubGVuZ3RoID8/IDEpOyAvLyB0aGlzIGlzIHRvIHJlc3RvcmUgaW4gcmFuZ2Ugd2l0aCBkZWxldGluZy9yZXBsYWNpbmcgY29udGVudCB3aXRoaW5cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaFJlcGxhY2UocmVzdG9yZU1vZGVsLCBtb2RlbCk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldFJlcGxhY2VDb21tYW5kKG1vZGVsLCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVJlc3RvcmVGcm9tU2xpY2UocGFyYWdyYXBoU3RhcnQ6IG51bWJlciwgaW5kZXhJblN0YXJ0OiBudW1iZXIsIHBhcmFncmFwaEVuZDogbnVtYmVyLCBpbmRleEluRW5kOiBudW1iZXIpOiBSZXN0b3JlTW9kZWwge1xuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhUb0RvY3VtZW50SW5kZXgodGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHBhcmFncmFwaFN0YXJ0LCBpbmRleEluU3RhcnQpO1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoVG9Eb2N1bWVudEluZGV4KHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBwYXJhZ3JhcGhFbmQsIGluZGV4SW5FbmQpIC0gMTtcbiAgICAgICAgY29uc3QgdGV4dCA9IHRoaXMuc2Vzc2lvbi5tb2RlbC5jb250ZW50LnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4ICsgMSk7XG4gICAgICAgIGNvbnN0IGZvcm1hdHMgPSBGb3JtYXRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC5mb3JtYXRzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaHMgPSBJbmRleGVkRWxlbWVudEhlbHBlci5zbGljZVNlY3Rpb24odGhpcy5zZXNzaW9uLm1vZGVsLnBhcmFncmFwaHMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KS5tYXAoXG4gICAgICAgICAgICB4ID0+IG5ldyBQYXJhZ3JhcGhNb2RlbCh4KVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBpbWFnZXMgPSBJbmRleGVkRWxlbWVudEhlbHBlci5zbGljZVNlY3Rpb24odGhpcy5zZXNzaW9uLm1vZGVsLmltYWdlcywgc3RhcnRJbmRleCwgZW5kSW5kZXgpLm1hcCh4ID0+IG5ldyBJbWFnZU1vZGVsKHgpKTtcbiAgICAgICAgY29uc3QgdGFibGVzID0gSW5kZXhlZEVsZW1lbnRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC50YWJsZXMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KS5tYXAoeCA9PiBuZXcgVGFibGVNb2RlbCh4KSk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gSW5kZXhlZEVsZW1lbnRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC5lbGVtZW50cywgc3RhcnRJbmRleCwgZW5kSW5kZXgpLm1hcChcbiAgICAgICAgICAgIHggPT4gbmV3IEVsZW1lbnRNb2RlbCh7IC4uLngsIGlkOiAwLCBndWlkOiAnJyB9KVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBicmVha3MgPSBJbmRleGVkRWxlbWVudEhlbHBlci5zbGljZVNlY3Rpb24odGhpcy5zZXNzaW9uLm1vZGVsLmJyZWFrcywgc3RhcnRJbmRleCwgZW5kSW5kZXgpLm1hcCh4ID0+IG5ldyBCcmVha01vZGVsKHgpKTtcbiAgICAgICAgY29uc3QgdGFicyA9IEluZGV4ZWRFbGVtZW50SGVscGVyLnNsaWNlU2VjdGlvbih0aGlzLnNlc3Npb24ubW9kZWwudGFicywgc3RhcnRJbmRleCwgZW5kSW5kZXgpLm1hcCh4ID0+IG5ldyBUYWJNb2RlbCh4KSk7XG4gICAgICAgIGNvbnN0IGxpbmtzID0gTGlua0hlbHBlci5zbGljZVNlY3Rpb24odGhpcy5zZXNzaW9uLm1vZGVsLmxpbmtzLCBzdGFydEluZGV4LCBlbmRJbmRleCkubWFwKHggPT4gbmV3IExpbmtNb2RlbCh4KSk7XG4gICAgICAgIHJldHVybiBuZXcgUmVzdG9yZU1vZGVsKHsgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRleHQsIGZvcm1hdHMsIHBhcmFncmFwaHMsIGltYWdlcywgdGFibGVzLCBlbGVtZW50cywgYnJlYWtzLCB0YWJzLCBsaW5rcyB9KTtcbiAgICB9XG5cbiAgICBjcmVhdGVDdXN0b21FbGVtZW50KGRhdGE6IEVsZW1lbnREYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5zZXJ0SW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleChcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQucm93LFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQuY29sdW1uXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGluc2VydEVsZW1lbnQgPSBuZXcgSW5zZXJ0RWxlbWVudE1vZGVsKHsgZWxlbWVudDogbmV3IEVsZW1lbnRNb2RlbCh7IC4uLmRhdGEsIGluc2VydEluZGV4IH0pIH0pO1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUJ5KG5ldyBSZXBsYWNlTW9kZWwoeyBpbnNlcnRFbGVtZW50IH0pKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2F2ZUluc2VydEVsZW1lbnRUb0hpc3RvcnkoaW5zZXJ0RWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGVuZFBvaW50ID0gdGhpcy5zZXNzaW9uLmluc2VydEVsZW1lbnQodGhpcy5zZWxlY3Rpb24uY3Vyc29yLCBkYXRhKTtcbiAgICAgICAgdGhpcy5vbkRvY3VtZW50Q2hhbmdlKG5ldyBSYW5nZSh0aGlzLnNlbGVjdGlvbi5jdXJzb3IsIGVuZFBvaW50KSk7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICByZW1vdmVTZWxlY3RlZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2F2ZVJlbW92ZVRvSGlzdG9yeSh0aGlzLnNlbGVjdGlvbi5yYW5nZSk7XG4gICAgICAgIHRoaXMucmVtb3ZlQ3VzdG9tRWxlbWVudHNEYXRhKCk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmUodGhpcy5zZWxlY3Rpb24ucmFuZ2UpO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG5cbiAgICByZW1vdmVDdXN0b21FbGVtZW50c0RhdGEoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleChcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQucm93LFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQuY29sdW1uXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID1cbiAgICAgICAgICAgIENvbnRlbnRIZWxwZXIucGFyYWdyYXBoVG9Eb2N1bWVudEluZGV4KFxuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLmVuZC5yb3csXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2UuZW5kLmNvbHVtblxuICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gSW5kZXhlZEVsZW1lbnRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC5lbGVtZW50cywgc3RhcnRJbmRleCwgZW5kSW5kZXgpLnNsaWNlKCk7XG4gICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5yZW1vdmVDdXN0b21FbGVtZW50c0RhdGEoZWxlbWVudHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25JbnB1dCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IHRoaXMudGV4dElucHV0LmdldEluc2VydFRleHQoKTtcbiAgICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc0VtcHR5TnVtYmVyaW5nUGFyYWdyYXBoID0gdGhpcy5pc0VtcHR5TnVtYmVyaW5nUGFyYWdyYXBoKHRoaXMuc2VsZWN0aW9uLmN1cnNvci5yb3cpO1xuICAgICAgICBpZiAodGV4dCA9PT0gTkVXX0xJTkVfTUFSS1VQICYmIHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkgJiYgaXNFbXB0eU51bWJlcmluZ1BhcmFncmFwaCkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVOdW1iZXJpbmdzRnJvbVBhcmFncmFwaHMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0KHRleHQpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvTWFpblZpZXcoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ3V0KGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRTZWxlY3RlZFRleHQoKTtcbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnNldENsaXBib2FyZERhdGEoZGF0YSk7XG4gICAgICAgIHRoaXMuY2xpcGJvYXJkLmNvcHkoZGF0YSk7XG4gICAgICAgIHRoaXMuY3V0KCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ3Vyc29ySW50b01haW5WaWV3KCk7XG4gICAgfVxuXG4gICAgb25Db3B5KGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRTZWxlY3RlZFRleHQoKTtcbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnNldENsaXBib2FyZERhdGEoZGF0YSk7XG4gICAgICAgIHRoaXMuY2xpcGJvYXJkLmNvcHkoZGF0YSk7XG4gICAgfVxuXG4gICAgb25QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMudGV4dElucHV0LmdldENsaXBib2FyZERhdGEoZXZlbnQpO1xuICAgICAgICB0aGlzLnBhc3RlRGF0YShkYXRhKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRSZXNpemVMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMucmVyZW5kZXJSZXNpemUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVzdHJveVJlc2l6ZUxpc3RlbmVyKCk6IHZvaWQge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5yZXJlbmRlclJlc2l6ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXJlbmRlck1hcmtlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5sb29wLnNjaGVkdWxlKHsgbWFya2VyOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVyZW5kZXJSZXNpemUgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMubWFpblJlbmRlcmVyLm9uUmVzaXplKHRydWUpO1xuICAgIH07XG5cbiAgICBvbkJsdXIoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy50ZXh0SW5wdXQuaXNGb2N1c2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRleHRJbnB1dC5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5oaWRlQ3Vyc29yKCk7XG4gICAgfVxuXG4gICAgb25Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudGV4dElucHV0LmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uYmx1cigpO1xuICAgICAgICB0aGlzLnRleHRJbnB1dC5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNob3dDdXJzb3IoKTtcbiAgICB9XG5cbiAgICBvbk1vdXNlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3VzdG9tRWxlbWVudCA9IHRoaXMuc2V0Q3VycmVudFNlc3Npb24oZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgaWYgKGN1c3RvbUVsZW1lbnQgJiYgY3VzdG9tRWxlbWVudC50YWdOYW1lICE9PSB0aGlzLnRhYmxlQ2VsbFRhZ05hbWUgJiYgY3VzdG9tRWxlbWVudC50YWdOYW1lICE9PSB0aGlzLmVkZ2VFbGVtZW50VGFnTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0N1c3RvbUNvbXBvbmVudChjdXN0b21FbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmJsdXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTGVmdENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUVsZW1lbnQgPSB0aGlzLnNldEN1cnJlbnRTZXNzaW9uKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgIGlmIChjdXN0b21FbGVtZW50ICYmIGN1c3RvbUVsZW1lbnQudGFnTmFtZSAhPT0gdGhpcy50YWJsZUNlbGxUYWdOYW1lICYmIGN1c3RvbUVsZW1lbnQudGFnTmFtZSAhPT0gdGhpcy5lZGdlRWxlbWVudFRhZ05hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNDdXN0b21Db21wb25lbnQoY3VzdG9tRWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXNVc2luZ01pZHBvaW50KGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVTZWxlY3Rpb24ocG9zaXRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IocG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGlmIChldmVudC5jdHJsS2V5KSB7XG4gICAgICAgICAgICBjb25zdCBsaW5rID0gdGhpcy5nZXRMaW5rTW9kZWwoZXZlbnQpO1xuICAgICAgICAgICAgaWYgKGxpbmspIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cub3BlbihsaW5rLmxpbmspO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tb3VzZUhhbmRsZXIuc3RhcnRNb3VzZVByZXNzKHRoaXMpO1xuICAgIH1cblxuICAgIG9uRG91YmxlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXNFZGdlRWRpdCA9IHRoaXMubWFpblNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5pc0VkaXQ7XG4gICAgICAgIGNvbnN0IGN1c3RvbUVsZW1lbnQgPSB0aGlzLmdldEN1c3RvbUVsZW1lbnQoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgaWYgKGN1c3RvbUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRTZXNzaW9uSWQgPSArY3VzdG9tRWxlbWVudC5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgnZGF0YS1zZXNzaW9uLWlkJykudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnJlZ3VsYXRvclNlcnZpY2Uuc2V0Q3VzdG9tU2Vzc2lvbkFzQ3VycmVudChlbGVtZW50U2Vzc2lvbklkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRNYWluU2Vzc2lvbkFzQ3VycmVudCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1c3RvbUVsZW1lbnQgJiYgY3VzdG9tRWxlbWVudC50YWdOYW1lICE9PSB0aGlzLnRhYmxlQ2VsbFRhZ05hbWUgJiYgY3VzdG9tRWxlbWVudC50YWdOYW1lICE9PSB0aGlzLmVkZ2VFbGVtZW50VGFnTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0N1c3RvbUNvbXBvbmVudChjdXN0b21FbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlc1VzaW5nTWlkcG9pbnQoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG4gICAgICAgIGlmICghaXNFZGdlRWRpdCAmJiB0aGlzLm1haW5TZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMuZWRnZXMuaXNFZGl0KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZUN1cnNvcihwb3NpdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuc2Vzc2lvbi5nZXRXb3JkUmFuZ2UocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VTZWxlY3Rpb24ocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIG9uVHJpcGxlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3VzdG9tRWxlbWVudCA9IHRoaXMuc2V0Q3VycmVudFNlc3Npb24oZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgaWYgKGN1c3RvbUVsZW1lbnQgJiYgY3VzdG9tRWxlbWVudC50YWdOYW1lICE9PSB0aGlzLnRhYmxlQ2VsbFRhZ05hbWUgJiYgY3VzdG9tRWxlbWVudC50YWdOYW1lICE9PSB0aGlzLmVkZ2VFbGVtZW50VGFnTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0N1c3RvbUNvbXBvbmVudChjdXN0b21FbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlc1VzaW5nTWlkcG9pbnQoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IEN1cnNvclBhcmFncmFwaChwb3NpdGlvbi5yb3csIDApO1xuICAgICAgICBjb25zdCBlbmQgPSBuZXcgQ3Vyc29yUGFyYWdyYXBoKHBvc2l0aW9uLnJvdywgdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLmdldFBhcmFncmFwaENvbnRlbnQocG9zaXRpb24ucm93KS5sZW5ndGgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZVNlbGVjdGlvbihzdGFydCwgZW5kKTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIG9uUXVhZENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUVsZW1lbnQgPSB0aGlzLnNldEN1cnJlbnRTZXNzaW9uKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgIGlmIChjdXN0b21FbGVtZW50ICYmIGN1c3RvbUVsZW1lbnQudGFnTmFtZSAhPT0gdGhpcy50YWJsZUNlbGxUYWdOYW1lICYmIGN1c3RvbUVsZW1lbnQudGFnTmFtZSAhPT0gdGhpcy5lZGdlRWxlbWVudFRhZ05hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNDdXN0b21Db21wb25lbnQoY3VzdG9tRWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RBbGwodGhpcy5zZXNzaW9uLm1vZGVsKTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIG9uTW91c2VXaGVlbChldmVudDogV2hlZWxFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmFjdG9yID0gMC4zNTtcbiAgICAgICAgY29uc3Qgc2Nyb2xsU3BlZWQgPSA0O1xuICAgICAgICBjb25zdCBkZWx0YVkgPSBldmVudC5kZWx0YVkgKiBmYWN0b3IgKiBzY3JvbGxTcGVlZDtcbiAgICAgICAgdGhpcy5tYWluUmVuZGVyZXIuc2Nyb2xsQnkoZGVsdGFZKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgZ2V0TGlua01vZGVsKGV2ZW50OiBNb3VzZUV2ZW50KTogTGlua01vZGVsIHtcbiAgICAgICAgY29uc3QgaXNJbnNpZGVFZGdlID0gdGhpcy5pc0luc2lkZUVkZ2UoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgY29uc3QgaXNFZGdlRWRpdCA9IHRoaXMubWFpblNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5pc0VkaXQ7XG4gICAgICAgIGlmICghaXNJbnNpZGVFZGdlIHx8IGlzRWRnZUVkaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlc1VzaW5nQm91bmRhcnkoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdldExpbmtNb2RlbChwb3NpdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VzdG9tRWxlbWVudCA9IHRoaXMuZ2V0Q3VzdG9tRWxlbWVudChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBzZXNzaW9uSWQgPSArY3VzdG9tRWxlbWVudC5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgnZGF0YS1zZXNzaW9uLWlkJykudmFsdWU7XG4gICAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnJlZ3VsYXRvclNlcnZpY2UuZ2V0U2Vzc2lvbk1vZGVsKHNlc3Npb25JZCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gc2Vzc2lvbi5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlc1VzaW5nQm91bmRhcnkoXG4gICAgICAgICAgICBldmVudC5jbGllbnRYLFxuICAgICAgICAgICAgZXZlbnQuY2xpZW50WSxcbiAgICAgICAgICAgIGN1c3RvbUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHNlc3Npb24uc2Vzc2lvbi5nZXRMaW5rTW9kZWwocG9zaXRpb24pO1xuICAgIH1cblxuICAgIHNldEN1cnJlbnRTZXNzaW9uKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgY3VzdG9tRWxlbWVudCA9IHRoaXMuZ2V0Q3VzdG9tRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgY29uc3QgaXNJbnNpZGVFZGdlID0gdGhpcy5pc0luc2lkZUVkZ2UoY3VzdG9tRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGlzRWRnZUVkaXQgPSB0aGlzLm1haW5TZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMuZWRnZXMuaXNFZGl0O1xuICAgICAgICBpZiAoIWN1c3RvbUVsZW1lbnQgfHwgKCFpc0VkZ2VFZGl0ICYmIGlzSW5zaWRlRWRnZSkpIHtcbiAgICAgICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRNYWluU2Vzc2lvbkFzQ3VycmVudCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tRWxlbWVudFRhZ05hbWVzLmluY2x1ZGVzKGN1c3RvbUVsZW1lbnQ/LnRhZ05hbWUpID8gY3VzdG9tRWxlbWVudCA6IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbGVtZW50U2Vzc2lvbklkID0gK2N1c3RvbUVsZW1lbnQuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oJ2RhdGEtc2Vzc2lvbi1pZCcpLnZhbHVlO1xuICAgICAgICB0aGlzLnJlZ3VsYXRvclNlcnZpY2Uuc2V0Q3VzdG9tU2Vzc2lvbkFzQ3VycmVudChlbGVtZW50U2Vzc2lvbklkKTtcbiAgICAgICAgcmV0dXJuIGN1c3RvbUVsZW1lbnQudGFnTmFtZSAhPT0gdGhpcy5lZGdlRWxlbWVudFRhZ05hbWUgPyBjdXN0b21FbGVtZW50IDogbnVsbDtcbiAgICB9XG5cbiAgICBnZXRDdXN0b21FbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQudGFnTmFtZSA9PT0gdGhpcy5wYXJlbnRUYWdOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1c3RvbUVsZW1lbnRUYWdOYW1lcy5pbmNsdWRlcyhlbGVtZW50LnRhZ05hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEN1c3RvbUVsZW1lbnQoZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzSW5zaWRlRWRnZShlbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5nZXRQYXJlbnRFZGdlKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGdldFBhcmVudEVkZ2UoZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQudGFnTmFtZSA9PT0gdGhpcy5wYXJlbnRUYWdOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LnRhZ05hbWUgPT09IHRoaXMuZWRnZUVsZW1lbnRUYWdOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFBhcmVudEVkZ2UoZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHN0cmluZyBvZiB0ZXh0IGN1cnJlbnRseSBoaWdobGlnaHRlZC5cbiAgICAgKi9cbiAgICBnZXRTZWxlY3RlZFRleHQoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uUmFuZ2UgPSB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZFJhbmdlO1xuICAgICAgICBpZiAoc2VsZWN0aW9uUmFuZ2UuaXNFbXB0eSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoUG9zaXRpb25Ub0RvY3VtZW50SW5kZXgodGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHNlbGVjdGlvblJhbmdlLnN0YXJ0KTtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFBvc2l0aW9uVG9Eb2N1bWVudEluZGV4KHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBzZWxlY3Rpb25SYW5nZS5lbmQpO1xuICAgICAgICBsZXQgZWxlbWVudEluZGV4ZXM6IG51bWJlcltdID0gW107XG4gICAgICAgIENvbnRlbnRIZWxwZXIuc2V0SW5kZXhlc0VsZW1lbnRzSW5JbnRlcnZhbCh0aGlzLnNlc3Npb24ubW9kZWwuYnJlYWtzLCBlbGVtZW50SW5kZXhlcywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICBDb250ZW50SGVscGVyLnNldEluZGV4ZXNFbGVtZW50c0luSW50ZXJ2YWwodGhpcy5zZXNzaW9uLm1vZGVsLnRhYmxlcywgZWxlbWVudEluZGV4ZXMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgQ29udGVudEhlbHBlci5zZXRJbmRleGVzRWxlbWVudHNJbkludGVydmFsKHRoaXMuc2Vzc2lvbi5tb2RlbC5pbWFnZXMsIGVsZW1lbnRJbmRleGVzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIENvbnRlbnRIZWxwZXIuc2V0SW5kZXhlc0VsZW1lbnRzSW5JbnRlcnZhbCh0aGlzLnNlc3Npb24ubW9kZWwuZWxlbWVudHMsIGVsZW1lbnRJbmRleGVzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIENvbnRlbnRIZWxwZXIuc2V0SW5kZXhlc0VsZW1lbnRzSW5JbnRlcnZhbCh0aGlzLnNlc3Npb24ubW9kZWwudGFicywgZWxlbWVudEluZGV4ZXMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgZWxlbWVudEluZGV4ZXMuc29ydCgoYSwgYikgPT4gYiAtIGEpO1xuICAgICAgICBsZXQgdGV4dEludGVydmFsID0gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLmdldFRleHRSYW5nZShzZWxlY3Rpb25SYW5nZSk7XG4gICAgICAgIGVsZW1lbnRJbmRleGVzLmZvckVhY2goeCA9PiB7XG4gICAgICAgICAgICB0ZXh0SW50ZXJ2YWwgPSB0ZXh0SW50ZXJ2YWwuc2xpY2UoMCwgeCkgKyB0ZXh0SW50ZXJ2YWwuc2xpY2UoeCArIDEpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGV4dEludGVydmFsO1xuICAgIH1cblxuICAgIGluaXRNYWluU2Vzc2lvbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFnZVdpZHRoID0gdGhpcy5jdXN0b21QYWdlV2lkdGggPz8gdGhpcy5tb2RlbC5wYWdlV2lkdGg7XG4gICAgICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUubWF4V2lkdGggPSBgJHtwYWdlV2lkdGh9cHhgO1xuICAgICAgICBjb25zdCBzY2FsaW5nUmF0aW8gPSB0aGlzLmN1c3RvbVBhZ2VXaWR0aCA/IFNjYWxpbmdIZWxwZXIuZ2V0UmF0aW8odGhpcy5jdXN0b21QYWdlV2lkdGgsIHRoaXMubW9kZWwucGFnZVdpZHRoKSA6IDE7XG4gICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5hZGRNYWluU2Vzc2lvbih0aGlzLm1vZGVsLCBwYWdlV2lkdGgsIHNjYWxpbmdSYXRpbywgdGhpcy5jb250YWluZXIpO1xuICAgIH1cblxuICAgIG9uU2VsZWN0aW9uQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlc3Npb24uYXBwbHlUb29sYmFyU3R5bGVzKCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlU2VsZWN0aW9uKHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkUmFuZ2UpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2Uuc2V0SGFzU2VsZWN0aW9uKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KTtcbiAgICAgICAgdGhpcy5yZXJlbmRlck1hcmtlcigpO1xuICAgIH1cblxuICAgIGVuYWJsZVNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VzdG9tRWxlbWVudCA9IHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtc2Vzc2lvbi1pZD1cIiR7dGhpcy5zZXNzaW9uLnNlc3Npb25JZH1cIl1gKTtcbiAgICAgICAgaWYgKGN1c3RvbUVsZW1lbnQudGFnTmFtZSA9PT0gdGhpcy50YWJsZUNlbGxUYWdOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCB0YWJsZVNlc3Npb24gPSB0aGlzLnJlZ3VsYXRvclNlcnZpY2UuZ2V0U2Vzc2lvbih0aGlzLnJlZ3VsYXRvclNlcnZpY2UuY3VycmVudFNlc3Npb24ucGFyZW50U2Vzc2lvbklkKTtcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlID0gdGFibGVTZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMudGFibGVzLmZpbmQoXG4gICAgICAgICAgICAgICAgeCA9PiB4Lmluc3RhbmNlLnNlc3Npb25JZCA9PT0gdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLmN1cnJlbnRTZXNzaW9uLnBhcmVudFNlc3Npb25JZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRhYmxlLmluc3RhbmNlLnRhYmxlU2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uZW5hYmxlU2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuY3Vyc29yTGF5ZXIuc2hvd0N1cnNvcigpO1xuICAgIH1cblxuICAgIG9uSG90S2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2Uua2V5RG93bihldmVudCk7XG4gICAgfVxuXG4gICAgb25QcmludCgpOiB2b2lkIHtcbiAgICAgICAgUHJpbnRIZWxwZXIucHJpbnREb2N1bWVudCh0aGlzLm1haW5TZXNzaW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRG9jdW1lbnRDaGFuZ2UgPSAocmFuZ2U6IFJhbmdlKTogdm9pZCA9PiB7XG4gICAgICAgIGxldCBsYXN0Um93ID0gcmFuZ2Uuc3RhcnQucm93ID09PSByYW5nZS5lbmQucm93ID8gcmFuZ2UuZW5kLnJvdyA6IEluZmluaXR5O1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUxpbmVzKHJhbmdlLnN0YXJ0LnJvdywgbGFzdFJvdyk7XG5cbiAgICAgICAgLy8gVXBkYXRlIGN1cnNvciBiZWNhdXNlIHRhYiBjaGFyYWN0ZXJzIGNhbiBpbmZsdWVuY2UgdGhlIGN1cnNvciBwb3NpdGlvbi5cbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBmb2N1c0N1c3RvbUNvbXBvbmVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleCA9ICtlbGVtZW50LmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCdkYXRhLWluc2VydC1pbmRleCcpLnZhbHVlO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPVxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMuaW1hZ2VzLmZpbmQoeCA9PiB4Lmluc3RhbmNlLmluc2VydEluZGV4ID09PSBpbmRleCkgPz9cbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5jdXN0b21Db21wb25lbnRzLnRhYmxlcy5maW5kKHggPT4geC5pbnN0YW5jZS5pbnNlcnRJbmRleCA9PT0gaW5kZXgpID8/XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5jdXN0b21FbGVtZW50cy5maW5kKHggPT4geC5pbnN0YW5jZS5pbnNlcnRJbmRleCA9PT0gaW5kZXgpO1xuICAgICAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEuaW5kZXhUb1Bvc2l0aW9uKGluZGV4LCAwKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uZm9jdXMoY29tcG9uZW50LCBwb3NpdGlvbik7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRW1wdHlOdW1iZXJpbmdQYXJhZ3JhcGgocGFyYWdyYXBoSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjdXJyZW50TGluZSA9IHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5nZXRQYXJhZ3JhcGhDb250ZW50KHBhcmFncmFwaEluZGV4KTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRMaW5lLmxlbmd0aCA9PT0gMCAmJiB0aGlzLnNlc3Npb24ubW9kZWwucGFyYWdyYXBoc1twYXJhZ3JhcGhJbmRleF0ucGFyYWdyYXBoU3R5bGUubnVtYmVyaW5nSWQgIT09IG51bGw7XG4gICAgfVxuXG4gICAgc2Nyb2xsQ3Vyc29ySW50b01haW5WaWV3KG9mZnNldD86IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZXNzaW9uICE9PSB0aGlzLm1haW5TZXNzaW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tYWluUmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcobnVsbCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICBjaGFuZ2VkVGFibGVTaXplKGluc2VydEluZGV4OiBudW1iZXIsIHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnJlZ3VsYXRvclNlcnZpY2UuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpO1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGggPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocywgaW5zZXJ0SW5kZXgpLnJvdztcbiAgICAgICAgc2Vzc2lvbi5kaXNwbGF5RGF0YS5yZXNldEFsbE51bWJlcmluZ0luZm8ocGFyYWdyYXBoKTtcbiAgICAgICAgc2Vzc2lvbi5kaXNwbGF5RGF0YS51cGRhdGVOZXh0TGluZUluZGV4ZXMocGFyYWdyYXBoLCBwYXJhZ3JhcGgpO1xuICAgICAgICBzZXNzaW9uLmRpc3BsYXlEYXRhLnVwZGF0ZU51bWJlcmluZ3NEYXRhT25DaGFuZ2UocGFyYWdyYXBoICsgMSk7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBpbnNlcnRUYWJsZVJvd3MoaW5zZXJ0SW5kZXg6IG51bWJlciwgcm93c0NvdW50OiBudW1iZXIsIHRhcmdldEluZGV4OiBudW1iZXIsIGluaGVyaXRJbmRleDogbnVtYmVyLCBzZXNzaW9uSWQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnJlZ3VsYXRvclNlcnZpY2Uuc2V0Q3VzdG9tU2Vzc2lvbkFzQ3VycmVudChzZXNzaW9uSWQpO1xuICAgICAgICBjb25zdCBiZWZvcmVUYWJsZSA9IENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoSW5kZXgodGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIGluc2VydEluZGV4KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IoYmVmb3JlVGFibGUpO1xuICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMuc2Vzc2lvbi5tb2RlbC50YWJsZXMuZmluZCh4ID0+IHguaW5zZXJ0SW5kZXggPT09IGluc2VydEluZGV4KTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hJbnNlcnRUYWJsZVJvd3MoaW5zZXJ0SW5kZXgsIHJvd3NDb3VudCwgdGFyZ2V0SW5kZXgsIGluaGVyaXRJbmRleCwgdGFibGUpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFxuICAgICAgICAgICAgU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFRhYmxlUm93c0NvbW1hbmQocm93c0NvdW50LCBpbmhlcml0SW5kZXgsIGluc2VydEluZGV4LCB0YXJnZXRJbmRleCwgdGhpcy50YXJnZXRzKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0VGFibGVSb3dzKGluc2VydEluZGV4LCByb3dzQ291bnQsIHRhcmdldEluZGV4LCBpbmhlcml0SW5kZXgpO1xuICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUoaW5zZXJ0SW5kZXgsIHNlc3Npb25JZCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0VGFibGVDb2x1bW5zKGluc2VydEluZGV4OiBudW1iZXIsIGNvbHVtbnNDb3VudDogbnVtYmVyLCB0YXJnZXRJbmRleDogbnVtYmVyLCBpbmhlcml0SW5kZXg6IG51bWJlciwgc2Vzc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLnNldEN1c3RvbVNlc3Npb25Bc0N1cnJlbnQoc2Vzc2lvbklkKTtcbiAgICAgICAgY29uc3QgYmVmb3JlVGFibGUgPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBpbnNlcnRJbmRleCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlQ3Vyc29yKGJlZm9yZVRhYmxlKTtcbiAgICAgICAgY29uc3QgdGFibGUgPSB0aGlzLnNlc3Npb24ubW9kZWwudGFibGVzLmZpbmQoeCA9PiB4Lmluc2VydEluZGV4ID09PSBpbnNlcnRJbmRleCk7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoSW5zZXJ0VGFibGVDb2x1bW5zKGluc2VydEluZGV4LCBjb2x1bW5zQ291bnQsIHRhcmdldEluZGV4LCBpbmhlcml0SW5kZXgsIHRhYmxlKTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChcbiAgICAgICAgICAgIFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRUYWJsZUNvbHVtbnNDb21tYW5kKGNvbHVtbnNDb3VudCwgaW5oZXJpdEluZGV4LCBpbnNlcnRJbmRleCwgdGFyZ2V0SW5kZXgsIHRoaXMudGFyZ2V0cylcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydFRhYmxlQ29sdW1ucyhpbnNlcnRJbmRleCwgY29sdW1uc0NvdW50LCB0YXJnZXRJbmRleCwgaW5oZXJpdEluZGV4KTtcbiAgICAgICAgdGhpcy5jaGFuZ2VkVGFibGVTaXplKGluc2VydEluZGV4LCBzZXNzaW9uSWQpO1xuICAgIH1cblxuICAgIHJlbW92ZVRhYmxlUm93cyhpbnNlcnRJbmRleDogbnVtYmVyLCBzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIsIHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRDdXN0b21TZXNzaW9uQXNDdXJyZW50KHNlc3Npb25JZCk7XG4gICAgICAgIGNvbnN0IGJlZm9yZVRhYmxlID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleCh0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocywgaW5zZXJ0SW5kZXgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZUN1cnNvcihiZWZvcmVUYWJsZSk7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5zZXNzaW9uLm1vZGVsLnRhYmxlcy5maW5kKHggPT4geC5pbnNlcnRJbmRleCA9PT0gaW5zZXJ0SW5kZXgpO1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaFJlbW92ZVRhYmxlUm93cyhpbnNlcnRJbmRleCwgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRhYmxlKTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVtb3ZlVGFibGVSb3dzQ29tbWFuZChzdGFydEluZGV4LCBlbmRJbmRleCwgaW5zZXJ0SW5kZXgsIHRoaXMudGFyZ2V0cykpO1xuICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlVGFibGVSb3dzKGluc2VydEluZGV4LCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZShpbnNlcnRJbmRleCwgc2Vzc2lvbklkKTtcbiAgICB9XG5cbiAgICByZW1vdmVUYWJsZUNvbHVtbnMoaW5zZXJ0SW5kZXg6IG51bWJlciwgc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyLCBzZXNzaW9uSWQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnJlZ3VsYXRvclNlcnZpY2Uuc2V0Q3VzdG9tU2Vzc2lvbkFzQ3VycmVudChzZXNzaW9uSWQpO1xuICAgICAgICBjb25zdCBiZWZvcmVUYWJsZSA9IENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoSW5kZXgodGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIGluc2VydEluZGV4KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IoYmVmb3JlVGFibGUpO1xuICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMuc2Vzc2lvbi5tb2RlbC50YWJsZXMuZmluZCh4ID0+IHguaW5zZXJ0SW5kZXggPT09IGluc2VydEluZGV4KTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hSZW1vdmVUYWJsZUNvbHVtbnMoaW5zZXJ0SW5kZXgsIHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0YWJsZSk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoXG4gICAgICAgICAgICBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVtb3ZlVGFibGVDb2x1bW5zQ29tbWFuZChzdGFydEluZGV4LCBlbmRJbmRleCwgaW5zZXJ0SW5kZXgsIHRoaXMudGFyZ2V0cylcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZVRhYmxlQ29sdW1ucyhpbnNlcnRJbmRleCwgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUoaW5zZXJ0SW5kZXgsIHNlc3Npb25JZCk7XG4gICAgfVxuXG4gICAgcmVzaXplVGFibGVDb2x1bW5zKHJlc2l6ZVRhYmxlQ29sdW1uczogUmVzaXplVGFibGVDb2x1bW5zTW9kZWwsIHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRDdXN0b21TZXNzaW9uQXNDdXJyZW50KHNlc3Npb25JZCk7XG4gICAgICAgIGNvbnN0IGJlZm9yZVRhYmxlID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleChcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLFxuICAgICAgICAgICAgcmVzaXplVGFibGVDb2x1bW5zLmluc2VydEluZGV4XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlQ3Vyc29yKGJlZm9yZVRhYmxlKTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hSZXNpemVUYWJsZUNvbHVtbnMocmVzaXplVGFibGVDb2x1bW5zKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnJlc2l6ZVRhYmxlQ29sdW1ucyhyZXNpemVUYWJsZUNvbHVtbnMpO1xuICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUocmVzaXplVGFibGVDb2x1bW5zLmluc2VydEluZGV4LCBzZXNzaW9uSWQpO1xuICAgIH1cblxuICAgIG9uTW91c2VQcmVzc2VkTW92ZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXNVc2luZ01pZHBvaW50KGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuICAgICAgICBjb25zdCBjdXJzb3IgPSB0aGlzLnNlbGVjdGlvbi5jdXJzb3I7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVTZWxlY3Rpb24ocG9zaXRpb24pO1xuICAgICAgICBpZiAoY3Vyc29yLmNvbHVtbiAhPT0gdGhpcy5zZWxlY3Rpb24uY3Vyc29yLmNvbHVtbiB8fCBjdXJzb3Iucm93ICE9PSB0aGlzLnNlbGVjdGlvbi5jdXJzb3Iucm93KSB7XG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvTWFpblZpZXcoKTtcbiAgICB9XG5cbiAgICBwcm92aWRlVGV4dFN0eWxlKGNvbXBvbmVudDogQmFzZU5vZGVyQ29tcG9uZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnJlZ3VsYXRvclNlcnZpY2UuZ2V0U2Vzc2lvbihjb21wb25lbnQuc2Vzc2lvbklkKTtcbiAgICAgICAgY29uc3QgZm9ybWF0ID0gc2Vzc2lvbi5tb2RlbC5mb3JtYXRzLmZpbmQoeCA9PiB4LnN0YXJ0SW5kZXggPD0gY29tcG9uZW50Lmluc2VydEluZGV4ICYmIHguZW5kSW5kZXggPj0gY29tcG9uZW50Lmluc2VydEluZGV4KTtcbiAgICAgICAgY29tcG9uZW50LnJlY2VpdmVTdHlsZShmb3JtYXQudGV4dFN0eWxlKTtcbiAgICB9XG5cbiAgICByZWNlaXZlVGV4dFN0eWxlU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UucmVjZWl2ZVRleHRTdHlsZSQuc3Vic2NyaWJlKHggPT4gdGhpcy5wcm92aWRlVGV4dFN0eWxlKHgpKTtcbiAgICB9XG5cbiAgICBzZWFyY2hPcHRpb25TdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5zZWFyY2hPcHRpb25zJC5zdWJzY3JpYmUoc2VhcmNoT3B0aW9ucyA9PiB7XG4gICAgICAgICAgICB0aGlzLmZpbmQoc2VhcmNoT3B0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2Uuc2VhcmNoSXRlcmF0aW9uID0gdGhpcy51cGRhdGVDb3VudGVyKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlcGxhY2VTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5yZXBsYWNlJC5zdWJzY3JpYmUocmVwbGFjZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2UocmVwbGFjZS5zZWFyY2hWYWx1ZSwgcmVwbGFjZS5yZXBsYWNlVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnNlYXJjaEl0ZXJhdGlvbiA9IHRoaXMudXBkYXRlQ291bnRlcigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRUZXh0U3R5bGVzU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2Uuc2V0VGV4dFN0eWxlcyQuc3Vic2NyaWJlKHRleHRTdHlsZXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5hcHBseVRleHRTdHlsZXModGV4dFN0eWxlcyk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldFBhcmFncmFwaFN0eWxlc1N1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnNldFBhcmFncmFwaFN0eWxlcyQuc3Vic2NyaWJlKHBhcmFncmFwaFN0eWxlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5UGFyYWdyYXBoU3R5bGVzKHBhcmFncmFwaFN0eWxlcyk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldE51bWJlcmluZ1RlbXBsYXRlVHlwZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnNldE51bWJlcmluZ1RlbXBsYXRlVHlwZSQuc3Vic2NyaWJlKG51bWJlcmluZ1RlbXBsYXRlVHlwZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldE51bWJlcmluZ1RlbXBsYXRlKG51bWJlcmluZ1RlbXBsYXRlVHlwZSk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbW92ZU51bWJlcmluZ3NTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5yZW1vdmVOdW1iZXJpbmdzJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVOdW1iZXJpbmdzRnJvbVBhcmFncmFwaHMoKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0SW1hZ2VTdHlsZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnNldEltYWdlU3R5bGUkLnN1YnNjcmliZShpbWFnZSA9PiB0aGlzLmFwcGx5SW1hZ2VTdHlsZXMoaW1hZ2UpKTtcbiAgICB9XG5cbiAgICBjaGFuZ2VFbGVtZW50U3R5bGVTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5jaGFuZ2VFbGVtZW50U3R5bGUkLnN1YnNjcmliZSh4ID0+IHRoaXMuYXBwbHlFbGVtZW50U3R5bGUoeCkpO1xuICAgIH1cblxuICAgIGNyZWF0ZUN1c3RvbUNvbXBvbmVudFN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmNyZWF0ZUN1c3RvbUNvbXBvbmVudCQuc3Vic2NyaWJlKG1vZGVsID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQ3VzdG9tRWxlbWVudChtb2RlbCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluc2VydEJyZWFrU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuaW5zZXJ0QnJlYWskLnN1YnNjcmliZShicmVha1R5cGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRCcmVhayhicmVha1R5cGUpO1xuICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbnNlcnRJbWFnZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmluc2VydEltYWdlJC5zdWJzY3JpYmUoaW1hZ2VEYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0SW1hZ2UoaW1hZ2VEYXRhKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5zZXJ0TGlua1N1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmluc2VydExpbmskLnN1YnNjcmliZShsaW5rRGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluc2VydExpbmsobmV3IExpbmtEYXRhTW9kZWwoeyBsaW5rOiBsaW5rRGF0YS5saW5rLCB0ZXh0OiBsaW5rRGF0YS50ZXh0IH0pKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZW5kTW91c2VQcmVzc1N1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmVuZE1vdXNlUHJlc3MkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1vdXNlSGFuZGxlci5lbmRNb3VzZVByZXNzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGRpc2FibGVTZWxlY3Rpb25TdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5kaXNhYmxlU2VsZWN0aW9uJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uZGlzYWJsZVNlbGVjdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5jdXJzb3JMYXllci5oaWRlQ3Vyc29yKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNoYW5nZWRUYWJsZVNpemVTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5jaGFuZ2VkVGFibGVTaXplJC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUoZGF0YS5pbnNlcnRJbmRleCwgZGF0YS5zZXNzaW9uSWQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjaGFuZ2VkRWRnZVNpemVTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5jaGFuZ2VkRWRnZVNpemUkLnN1YnNjcmliZSgoeyBlZGdlVHlwZSwgcGFnZVR5cGUgfSkgPT5cbiAgICAgICAgICAgIHRoaXMubWFpblNlc3Npb24uZGlzcGxheURhdGEudXBkYXRlUGFnZVZlcnRpY2FsRGF0YShlZGdlVHlwZSwgcGFnZVR5cGUpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgaW1hZ2VMb2FkZWRTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5pbWFnZUxvYWRlZCQuc3Vic2NyaWJlKHNlc3Npb25JZCA9PiB0aGlzLnJlZ3VsYXRvclNlcnZpY2UuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpLm9uUmVuZGVyZWQoKSk7XG4gICAgfVxuXG4gICAgY2hhbmdlZEVkZ2VTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5jaGFuZ2VkRWRnZSQuc3Vic2NyaWJlKHNlc3Npb25JZCA9PiB0aGlzLnJlZ3VsYXRvclNlcnZpY2UuYXJyYW5nZUVkZ2VDaGFuZ2Uoc2Vzc2lvbklkKSk7XG4gICAgfVxuXG4gICAgaW5zZXJ0VGFibGVSb3dzU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuaW5zZXJ0VGFibGVSb3dzJC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluc2VydFRhYmxlUm93cyhkYXRhLmluc2VydEluZGV4LCBkYXRhLnJvd3NDb3VudCwgZGF0YS50YXJnZXRJbmRleCwgZGF0YS5pbmhlcml0SW5kZXgsIGRhdGEuc2Vzc2lvbklkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5zZXJ0VGFibGVDb2x1bW5zU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuaW5zZXJ0VGFibGVDb2x1bW5zJC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluc2VydFRhYmxlQ29sdW1ucyhkYXRhLmluc2VydEluZGV4LCBkYXRhLmNvbHVtbnNDb3VudCwgZGF0YS50YXJnZXRJbmRleCwgZGF0YS5pbmhlcml0SW5kZXgsIGRhdGEuc2Vzc2lvbklkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlVGFibGVSb3dzU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UucmVtb3ZlVGFibGVSb3dzJC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVRhYmxlUm93cyhkYXRhLmluc2VydEluZGV4LCBkYXRhLnN0YXJ0SW5kZXgsIGRhdGEuZW5kSW5kZXgsIGRhdGEuc2Vzc2lvbklkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlVGFibGVDb2x1bW5zU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UucmVtb3ZlVGFibGVDb2x1bW5zJC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVRhYmxlQ29sdW1ucyhkYXRhLmluc2VydEluZGV4LCBkYXRhLnN0YXJ0SW5kZXgsIGRhdGEuZW5kSW5kZXgsIGRhdGEuc2Vzc2lvbklkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlUmlnaHRTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5yZW1vdmVSaWdodCQuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVtb3ZlUmlnaHQoKSk7XG4gICAgfVxuXG4gICAgcmVzaXplVGFibGVDb2x1bW5zU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UucmVzaXplVGFibGVDb2x1bW5zJC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZVRhYmxlQ29sdW1ucyhkYXRhLnJlc2l6ZVRhYmxlQ29sdW1ucywgZGF0YS5zZXNzaW9uSWQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbnNlcnRUYWJsZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmluc2VydFRhYmxlJC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluc2VydFRhYmxlKGRhdGEpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbnNlcnRUZXh0U3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuaW5zZXJ0VGV4dCQuc3Vic2NyaWJlKHggPT4ge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnQoeCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHVuZG9TdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS51bmRvJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51bmRvKCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbEN1cnNvckludG9NYWluVmlldygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZWRvU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UucmVkbyQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVkbygpO1xuICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvTWFpblZpZXcoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlTGVmdFN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnJlbW92ZUxlZnQkLnN1YnNjcmliZSgoKSA9PiB0aGlzLnJlbW92ZUxlZnQoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmludFN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnByaW50JC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5vblByaW50KCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3V0U2VsZWN0ZWRTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5jdXRTZWxlY3RlZCQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25DdXQobmV3IENsaXBib2FyZEV2ZW50KCdjdXQnKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29weVNlbGVjdGVkU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuY29weVNlbGVjdGVkJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkNvcHkobmV3IENsaXBib2FyZEV2ZW50KCdjb3B5JykpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhc3RlRnJvbUNsaXBib2FyZFN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnBhc3RlRnJvbUNsaXBib2FyZCQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVhZENsaXBib2FyZCgpXG4gICAgICAgICAgICAgICAgLnRoZW4oZGF0YSA9PiB0aGlzLnBhc3RlRGF0YShkYXRhKSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBjb250aW51ZSByZWdhcmRsZXNzIGVycm9yXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcmVhZENsaXBib2FyZCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBjb25zdCByZWFkID0gYXdhaXQgbmF2aWdhdG9yLnBlcm1pc3Npb25zLnF1ZXJ5KHsgbmFtZTogJ2NsaXBib2FyZC1yZWFkJyBhcyBQZXJtaXNzaW9uTmFtZSB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQgJiYgcmVhZC5zdGF0ZSAhPSAnZGVuaWVkJykge1xuICAgICAgICAgICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmRcbiAgICAgICAgICAgICAgICAgICAgLnJlYWRUZXh0KClcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udGludWUgcmVnYXJkbGVzcyBlcnJvclxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmNsaXBib2FyZERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhc3RlRGF0YShkYXRhOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGV4dCA9IGRhdGEucmVwbGFjZSgvXFxyXFxuL2csICdcXG4nKS5yZXBsYWNlKC9cXHQvZywgJyAnKTtcbiAgICAgICAgdGhpcy5pbnNlcnQodGV4dCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ3Vyc29ySW50b01haW5WaWV3KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWxlY3RBbGxTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5zZWxlY3RBbGwkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RBbGwodGhpcy5zZXNzaW9uLm1vZGVsKTtcbiAgICAgICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVTZWxlY3RlZFN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnJlbW92ZVNlbGVjdGVkJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsaXBib2FyZERhdGFTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5jbGlwYm9hcmREYXRhJC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNsaXBib2FyZERhdGEgPSBkYXRhO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB1cGRhdGVFZGdlU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UudXBkYXRlRWRnZXMkLnN1YnNjcmliZShzZXNzaW9uSWQgPT4ge1xuICAgICAgICAgICAgbGV0IGZvb3RlcnMgPSB0aGlzLm1haW5TZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMuZWRnZXMuZm9vdGVyc0NvbXBvbmVudHM7XG4gICAgICAgICAgICBsZXQgZXhpc3RlZCA9IHRoaXMubWFpblNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5oZWFkZXJzQ29tcG9uZW50cy5maW5kSW5kZXgoeCA9PiB4Lmluc3RhbmNlLnNlc3Npb25JZCA9PT0gc2Vzc2lvbklkKTtcbiAgICAgICAgICAgIGlmIChleGlzdGVkICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLm1haW5TZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMuZWRnZXMuaGVhZGVyc0NvbXBvbmVudHMuc2xpY2UoZXhpc3RlZCArIDEpO1xuICAgICAgICAgICAgICAgIGhlYWRlcnMuZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgeC5pbnN0YW5jZS5zZXNzaW9uLmRpc3BsYXlEYXRhLnVwZGF0ZU5leHRMaW5lSW5kZXhlcygwLCB4Lmluc3RhbmNlLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocy5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZXhpc3RlZCA9IHRoaXMubWFpblNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5mb290ZXJzQ29tcG9uZW50cy5maW5kSW5kZXgoeCA9PiB4Lmluc3RhbmNlLnNlc3Npb25JZCA9PT0gc2Vzc2lvbklkKTtcbiAgICAgICAgICAgICAgICBmb290ZXJzID0gdGhpcy5tYWluU2Vzc2lvbi5jdXN0b21Db21wb25lbnRzLmVkZ2VzLmZvb3RlcnNDb21wb25lbnRzLnNsaWNlKGV4aXN0ZWQgKyAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvb3RlcnMuZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICAgICAgICB4Lmluc3RhbmNlLnNlc3Npb24uZGlzcGxheURhdGEudXBkYXRlTmV4dExpbmVJbmRleGVzKDAsIHguaW5zdGFuY2Uuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
1368
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL2V4ZWN1dGlvbi9lZGl0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDL0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDMUYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDdEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0RBQW9ELENBQUM7QUFDOUYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFFcEYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFHcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDeEcsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUtsRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBRWhFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx3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QyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2xILENBQUMsQ0FBQyxDQUFDO2FBQ047aUJBQU07Z0JBQ0gsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxDQUFDO2dCQUN2SCxPQUFPLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQzthQUMxRjtZQUNELE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQ2hCLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbEgsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENsaXBib2FyZCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jbGlwYm9hcmQnO1xuaW1wb3J0IHsgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFkZE51bWJlcmluZ01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9hZGQtbnVtYmVyaW5nLm1vZGVsJztcbmltcG9ydCB7IEFwcGx5RWxlbWVudFN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2FwcGx5LWVsZW1lbnQtc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgQXBwbHlJbWFnZVN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2FwcGx5LWltYWdlLXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IEFwcGx5UGFyYWdyYXBoU3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvYXBwbHktcGFyYWdyYXBoLXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IEFwcGx5VGV4dFN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2FwcGx5LXRleHQtc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgQmFzZU5vZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9zaGFyZWQvYWJzdHJhY3QvYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnJlYWtIZWxwZXIgfSBmcm9tICcuLi9nYWRnZXRzL3BhZ2UtYnJlYWsvYnJlYWsuaGVscGVyJztcbmltcG9ydCB7IEJyZWFrTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2JyZWFrLm1vZGVsJztcbmltcG9ydCB7IEJyZWFrVHlwZXMgfSBmcm9tICcuLi9nYWRnZXRzL3BhZ2UtYnJlYWsvYnJlYWstdHlwZXMuZW51bSc7XG5pbXBvcnQgeyBDb21tYW5kTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2NvbW1hbmQubW9kZWwnO1xuaW1wb3J0IHsgQ29tbWFuZHNTZXJ2aWNlIH0gZnJvbSAnLi4vb3BlcmF0aW9ucy9jb21tYW5kcy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbnRlbnRIZWxwZXIgfSBmcm9tICcuLi9wb3NpdGlvbmluZy9jb250ZW50LmhlbHBlcic7XG5pbXBvcnQgeyBDb250ZW50U3R5bGVIZWxwZXIgfSBmcm9tICcuLi9jb250ZW50L2hlbHBlcnMvY29udGVudC1zdHlsZS5oZWxwZXInO1xuaW1wb3J0IHsgQ3Vyc29yUGFyYWdyYXBoIH0gZnJvbSAnLi4vcG9zaXRpb25pbmcvY3Vyc29yLXBhcmFncmFwaCc7XG5pbXBvcnQgeyBDVVNUT01fRUxFTUVOVF9NQVJLRVIsIFRBQkxFX01BUktFUiB9IGZyb20gJy4uL2NvbXBvbmVudHMvc2hhcmVkL2N1c3RvbS1jb250ZW50LW1hcmtlcnMuY29uc3QnO1xuaW1wb3J0IHsgRGVsZXRlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2RlbGV0ZS5tb2RlbCc7XG5pbXBvcnQgeyBEb2N1bWVudEhhbmRsZXIgfSBmcm9tICcuLi9pbnRlcmFjdGlvbi9kb2N1bWVudC5oYW5kbGVyJztcbmltcG9ydCB7IERvY3hNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvZG9jeC5tb2RlbCc7XG5pbXBvcnQgeyBFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24vZWRpdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWRpdFNlc3Npb24gfSBmcm9tICcuL2VkaXQuc2Vzc2lvbic7XG5pbXBvcnQgeyBFbGVtZW50RGF0YU1vZGVsIH0gZnJvbSAnLi4vY29tcG9uZW50cy9leHRlcm5hbC1lbGVtZW50L21vZGVscy9lbGVtZW50LWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgRWxlbWVudE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9lbGVtZW50Lm1vZGVsJztcbmltcG9ydCB7IEZvcm1hdEhlbHBlciB9IGZyb20gJy4uL2NvbnRlbnQvaGVscGVycy9mb3JtYXQuaGVscGVyJztcbmltcG9ydCB7IEltYWdlRGF0YU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbWFnZS1kYXRhLm1vZGVsJztcbmltcG9ydCB7IEltYWdlSGVscGVyIH0gZnJvbSAnLi9oZWxwZXJzL2ltYWdlLmhlbHBldCc7XG5pbXBvcnQgeyBJbWFnZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbWFnZS5tb2RlbCc7XG5pbXBvcnQgeyBJbmRleGVkRWxlbWVudEhlbHBlciB9IGZyb20gJy4uL2NvbnRlbnQvaGVscGVycy9pbmRleGVkLWVsZW1lbnQuaGVscGVyJztcbmltcG9ydCB7IElucHV0SGFuZGxlciB9IGZyb20gJy4uL2ludGVyYWN0aW9uL2lucHV0LmhhbmRsZXInO1xuaW1wb3J0IHsgSW5zZXJ0QnJlYWtNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWJyZWFrLm1vZGVsJztcbmltcG9ydCB7IEluc2VydEVsZW1lbnRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWVsZW1lbnQubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0SW1hZ2VNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWltYWdlLm1vZGVsJztcbmltcG9ydCB7IEluc2VydExpbmtNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWxpbmsubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0UGFyYWdyYXBoTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC1wYXJhZ3JhcGgubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0U3R5bGVkVGV4dE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbnNlcnQtc3R5bGVkLXRleHQubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0VGFibGVDb2x1bW5zTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC10YWJsZS1jb2x1bW5zLm1vZGVsJztcbmltcG9ydCB7IEluc2VydFRhYmxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC10YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBJbnNlcnRUYWJsZVJvd3NNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LXRhYmxlLXJvd3MubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0VGFiTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC10YWIubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0VGV4dE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbnNlcnQtdGV4dC5tb2RlbCc7XG5pbXBvcnQgeyBMaW5rRGF0YU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9saW5rLWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgTGlua0hlbHBlciB9IGZyb20gJy4uL2NvbnRlbnQvaGVscGVycy9saW5rLmhlbHBlcic7XG5pbXBvcnQgeyBMaW5rTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2xpbmsubW9kZWwnO1xuaW1wb3J0IHsgTW91c2VIYW5kbGVyIH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24vbW91c2UuaGFuZGxlcic7XG5pbXBvcnQgeyBORVdfTElORV9NQVJLVVAgfSBmcm9tICcuLi9jb250ZW50L2NvbnN0YW50cy9lZGl0b3IuY29uc3QnO1xuaW1wb3J0IHsgTnVtYmVyaW5nTGV2ZWxNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvbnVtYmVyaW5nLWxldmVsLm1vZGVsJztcbmltcG9ydCB7IE9wZXJhdGlvbiB9IGZyb20gJy4uL2dhZGdldHMvaGlzdG9yeS9vcGVyYXRpb24udHlwZSc7XG5pbXBvcnQgeyBPcGVyYXRpb25IaXN0b3J5IH0gZnJvbSAnLi4vZ2FkZ2V0cy9oaXN0b3J5L29wZXJhdGlvbi1oaXN0b3J5JztcbmltcG9ydCB7IFBhcmFncmFwaE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9wYXJhZ3JhcGgubW9kZWwnO1xuaW1wb3J0IHsgUGFyYWdyYXBoU3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcGFyYWdyYXBoLXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IFBvc2l0aW9uSGVscGVyIH0gZnJvbSAnLi4vcG9zaXRpb25pbmcvcG9zaXRpb24uaGVscGVyJztcbmltcG9ydCB7IFByaW50SGVscGVyIH0gZnJvbSAnLi4vZGlzcGxheS9wcmludC9wcmludC5oZWxwZXInO1xuaW1wb3J0IHsgUmFuZ2UgfSBmcm9tICcuLi9wb3NpdGlvbmluZy9yYW5nZSc7XG5pbXBvcnQgeyBSZWd1bGF0b3JTZXJ2aWNlIH0gZnJvbSAnLi9yZWd1bGF0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBSZW1vdmVOdW1iZXJpbmdzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3JlbW92ZS1udW1iZXJpbmdzLm1vZGVsJztcbmltcG9ydCB7IFJlbW92ZVRhYmxlQ29sdW1uc01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZW1vdmUtdGFibGUtY29sdW1ucy5tb2RlbCc7XG5pbXBvcnQgeyBSZW1vdmVUYWJsZVJvd3NNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVtb3ZlLXRhYmxlLXJvd3MubW9kZWwnO1xuaW1wb3J0IHsgUmVuZGVyZXIgfSBmcm9tICcuLi9kaXNwbGF5L3JlbmRlcmVyJztcbmltcG9ydCB7IFJlcGxhY2VNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVwbGFjZS5tb2RlbCc7XG5pbXBvcnQgeyBSZXNpemVUYWJsZUNvbHVtbnNNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVzaXplLXRhYmxlLWNvbHVtbnMubW9kZWwnO1xuaW1wb3J0IHsgUmVzdG9yZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZXN0b3JlLm1vZGVsJztcbmltcG9ydCB7IFJlc3RvcmVOdW1iZXJpbmdzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3Jlc3RvcmUtbnVtYmVyaW5ncy5tb2RlbCc7XG5pbXBvcnQgeyBSZXN0b3JlUGFyYWdyYXBoU3R5bGVzTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3Jlc3RvcmUtcGFyYWdyYXBoLXN0eWxlcy5tb2RlbCc7XG5pbXBvcnQgeyBSZXN0b3JlVGFibGVNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVzdG9yZS10YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBSZXN0b3JlVGV4dFN0eWxlc01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZXN0b3JlLXRleHQtc3R5bGVzLm1vZGVsJztcbmltcG9ydCB7IFNhdmVDb21tYW5kc0hlbHBlciB9IGZyb20gJy4uL29wZXJhdGlvbnMvc2F2ZS1jb21tYW5kcy5oZWxwZXInO1xuaW1wb3J0IHsgU2NhbGluZ0hlbHBlciB9IGZyb20gJy4uL2NvbnRlbnQvaGVscGVycy9zY2FsaW5nLmhlbHBlcic7XG5pbXBvcnQgeyBTZWFyY2gsIFNlYXJjaE9wdGlvbnMgfSBmcm9tICcuLi9nYWRnZXRzL3NlYXJjaC9zZWFyY2gnO1xuaW1wb3J0IHsgU2VhcmNoSXRlcmF0aW9uIH0gZnJvbSAnLi4vZ2FkZ2V0cy9zZWFyY2gvc2VhcmNoLWl0ZXJhdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2VsZWN0aW9uIH0gZnJvbSAnLi4vcG9zaXRpb25pbmcvc2VsZWN0aW9uJztcbmltcG9ydCB7IFRhYmxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3RhYmxlLm1vZGVsJztcbmltcG9ydCB7IFRhYk1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90YWIubW9kZWwnO1xuaW1wb3J0IHsgVGFyZ2V0TW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3RhcmdldC5tb2RlbCc7XG5pbXBvcnQgeyBUZXh0SW5wdXQgfSBmcm9tICcuLi9pbnRlcmFjdGlvbi90ZXh0LWlucHV0JztcbmltcG9ydCB7IFRleHRTdHlsZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90ZXh0LXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IFZpcnR1YWxSZW5kZXJlciB9IGZyb20gJy4uL2Rpc3BsYXkvdmlydHVhbC5yZW5kZXJlcic7XG5cbmV4cG9ydCBjbGFzcyBFZGl0b3Ige1xuICAgIHJlYWRvbmx5IE1BWF9DT1VOVCA9IDk5OTtcblxuICAgIHJlYWRvbmx5IHBhcmVudFRhZ05hbWUgPSAnQVBQLU5PRC1FRElUT1InO1xuXG4gICAgcmVhZG9ubHkgdGFibGVDZWxsVGFnTmFtZSA9ICdBUFAtTk9ELVRBQkxFLUNFTEwnO1xuXG4gICAgcmVhZG9ubHkgZWRnZUVsZW1lbnRUYWdOYW1lID0gJ0FQUC1OT0QtRURHRSc7XG5cbiAgICByZWFkb25seSBpbWFnZVRhZ05hbWUgPSAnQVBQLU5PRC1JTUFHRSc7XG5cbiAgICByZWFkb25seSBjdXN0b21FbGVtZW50VGFnTmFtZXM6IHN0cmluZ1tdO1xuXG4gICAgcmVhZG9ubHkgaGlzdG9yeTogT3BlcmF0aW9uSGlzdG9yeTtcblxuICAgIGdldCBtYWluU2Vzc2lvbigpOiBFZGl0U2Vzc2lvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ3VsYXRvclNlcnZpY2UubWFpblNlc3Npb24uc2Vzc2lvbjtcbiAgICB9XG5cbiAgICBnZXQgbWFpblJlbmRlcmVyKCk6IFZpcnR1YWxSZW5kZXJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ3VsYXRvclNlcnZpY2UubWFpblNlc3Npb24ucmVuZGVyZXIgYXMgVmlydHVhbFJlbmRlcmVyO1xuICAgIH1cblxuICAgIGdldCBzZXNzaW9uKCk6IEVkaXRTZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVndWxhdG9yU2VydmljZS5jdXJyZW50U2Vzc2lvbi5zZXNzaW9uO1xuICAgIH1cblxuICAgIGdldCByZW5kZXJlcigpOiBSZW5kZXJlciB8IFZpcnR1YWxSZW5kZXJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ3VsYXRvclNlcnZpY2UuY3VycmVudFNlc3Npb24ucmVuZGVyZXI7XG4gICAgfVxuXG4gICAgZ2V0IGlzVmlld09ubHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuaXNWaWV3T25seTtcbiAgICB9XG5cbiAgICBnZXQgdGFyZ2V0cygpOiBUYXJnZXRNb2RlbFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVndWxhdG9yU2VydmljZS5nZXRDdXJyZW50U2Vzc2lvblRhcmdldHMoKTtcbiAgICB9XG5cbiAgICBzZWxlY3Rpb246IFNlbGVjdGlvbjtcblxuICAgIG1vdXNlSGFuZGxlcjogTW91c2VIYW5kbGVyO1xuXG4gICAgaW5wdXRIYW5kbGVyOiBJbnB1dEhhbmRsZXI7XG5cbiAgICBkb2N1bWVudEhhbmRsZXI6IERvY3VtZW50SGFuZGxlcjtcblxuICAgIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgICBwcml2YXRlIHNlYXJjaDogU2VhcmNoO1xuXG4gICAgcHJpdmF0ZSB0ZXh0SW5wdXQ6IFRleHRJbnB1dDtcblxuICAgIHByaXZhdGUgY2xpcGJvYXJkRGF0YTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgbW9kZWw6IERvY3hNb2RlbCxcbiAgICAgICAgcHJpdmF0ZSBjb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBwcml2YXRlIGVkaXRvclNlcnZpY2U6IEVkaXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVndWxhdG9yU2VydmljZTogUmVndWxhdG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb21tYW5kc1NlcnZpY2U6IENvbW1hbmRzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjbGlwYm9hcmQ6IENsaXBib2FyZCxcbiAgICAgICAgcHJpdmF0ZSBleHRlcm5hbEVsZW1lbnRUYWdOYW1lczogc3RyaW5nW10sXG4gICAgICAgIHByaXZhdGUgY3VzdG9tUGFnZVdpZHRoPzogbnVtYmVyXG4gICAgKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMucmVjZWl2ZVRleHRTdHlsZVN1YnNjcmlwdGlvbigpKTtcbiAgICAgICAgdGhpcy5jdXN0b21FbGVtZW50VGFnTmFtZXMgPSBbLi4udGhpcy5leHRlcm5hbEVsZW1lbnRUYWdOYW1lcywgdGhpcy5pbWFnZVRhZ05hbWUsIHRoaXMudGFibGVDZWxsVGFnTmFtZSwgdGhpcy5lZGdlRWxlbWVudFRhZ05hbWVdO1xuICAgICAgICB0aGlzLmhpc3RvcnkgPSBuZXcgT3BlcmF0aW9uSGlzdG9yeShlZGl0b3JTZXJ2aWNlLCByZWd1bGF0b3JTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRTZWxlY3Rpb24odGhpcy5zZWxlY3Rpb24pO1xuICAgICAgICB0aGlzLmluaXRNYWluU2Vzc2lvbigpO1xuICAgICAgICB0aGlzLnRleHRJbnB1dCA9IG5ldyBUZXh0SW5wdXQodGhpcy5tYWluUmVuZGVyZXIuY29udGFpbmVyKTtcbiAgICAgICAgdGhpcy5tYWluUmVuZGVyZXIudGV4dGFyZWEgPSB0aGlzLnRleHRJbnB1dC5pbnB1dDtcbiAgICAgICAgdGhpcy5tb3VzZUhhbmRsZXIgPSBuZXcgTW91c2VIYW5kbGVyKHRoaXMubWFpblJlbmRlcmVyLmNvbnRhaW5lciwgdGhpcyk7XG4gICAgICAgIHRoaXMuaW5wdXRIYW5kbGVyID0gbmV3IElucHV0SGFuZGxlcih0aGlzLnRleHRJbnB1dC5pbnB1dCwgdGhpcyk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRIYW5kbGVyID0gbmV3IERvY3VtZW50SGFuZGxlcih0aGlzKTtcbiAgICAgICAgdGhpcy5pbml0UmVzaXplTGlzdGVuZXIoKTtcbiAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICB0aGlzLnNlc3Npb24uYXBwbHlUb29sYmFyU3R5bGVzKCk7XG5cbiAgICAgICAgdGhpcy5zZWFyY2ggPSBuZXcgU2VhcmNoKCk7XG4gICAgICAgIHRoaXMuc2VhcmNoLnNldCh7IHdyYXA6IHRydWUgfSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkRWRnZVNpemVTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZEVkZ2VTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZVN1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VFbGVtZW50U3R5bGVTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuY2xpcGJvYXJkRGF0YVN1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5jb3B5U2VsZWN0ZWRTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQ3VzdG9tQ29tcG9uZW50U3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmN1dFNlbGVjdGVkU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmRpc2FibGVTZWxlY3Rpb25TdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuZW5kTW91c2VQcmVzc1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5pbWFnZUxvYWRlZFN1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5pbnNlcnRCcmVha1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5pbnNlcnRJbWFnZVN1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5pbnNlcnRMaW5rU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmluc2VydFRhYmxlQ29sdW1uc1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5pbnNlcnRUYWJsZVJvd3NTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0VGFibGVTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0VGV4dFN1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5wYXN0ZUZyb21DbGlwYm9hcmRTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMucHJpbnRTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMucmVkb1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5yZW1vdmVMZWZ0U3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnJlbW92ZU51bWJlcmluZ3NTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlUmlnaHRTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWRTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVGFibGVDb2x1bW5zU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnJlbW92ZVRhYmxlUm93c1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnJlc2l6ZVRhYmxlQ29sdW1uc1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5zZWFyY2hPcHRpb25TdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnNldEltYWdlU3R5bGVTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuc2V0TnVtYmVyaW5nVGVtcGxhdGVUeXBlU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnNldFBhcmFncmFwaFN0eWxlc1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5zZXRUZXh0U3R5bGVzU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnVuZG9TdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRWRnZVN1YnNjcmlwdGlvbigpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2gocyA9PiBzPy51bnN1YnNjcmliZSgpKTtcbiAgICAgICAgdGhpcy5kZXN0cm95UmVzaXplTGlzdGVuZXIoKTtcbiAgICAgICAgdGhpcy5tb3VzZUhhbmRsZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLmlucHV0SGFuZGxlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuZG9jdW1lbnRIYW5kbGVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uYmx1cigpO1xuICAgIH1cblxuICAgIHNlbGVjdFBhZ2VEb3duKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLm1haW5SZW5kZXJlci5sYXllckNvbmZpZztcbiAgICAgICAgY29uc3QgbGluZSA9IGNvbmZpZy52aXNpYmxlUmFuZ2UuZW5kU2NyZWVuTGluZTtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBQb3NpdGlvbkhlbHBlci5zY3JlZW5Ub0RvY3VtZW50KHRoaXMubWFpblNlc3Npb24sIGxpbmUsIDApO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlU2VsZWN0aW9uKHBvc2l0aW9uKTtcbiAgICAgICAgdGhpcy5tYWluUmVuZGVyZXIuc2Nyb2xsQnkoY29uZmlnLmhlaWdodCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ3Vyc29ySW50b01haW5WaWV3KDAuNSk7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBzZWxlY3RQYWdlVXAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMubWFpblJlbmRlcmVyLmxheWVyQ29uZmlnO1xuICAgICAgICBjb25zdCBsaW5lID0gY29uZmlnLnZpc2libGVSYW5nZS5zdGFydFNjcmVlbkxpbmU7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gUG9zaXRpb25IZWxwZXIuc2NyZWVuVG9Eb2N1bWVudCh0aGlzLm1haW5TZXNzaW9uLCBsaW5lLCAwKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZVNlbGVjdGlvbihwb3NpdGlvbik7XG4gICAgICAgIHRoaXMubWFpblJlbmRlcmVyLnNjcm9sbEJ5KC1jb25maWcuaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvTWFpblZpZXcoMC41KTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIGdvdG9QYWdlRG93bigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5tYWluUmVuZGVyZXIubGF5ZXJDb25maWc7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBjb25maWcudmlzaWJsZVJhbmdlLmVuZFNjcmVlbkxpbmU7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gUG9zaXRpb25IZWxwZXIuc2NyZWVuVG9Eb2N1bWVudCh0aGlzLm1haW5TZXNzaW9uLCBsaW5lLCAwKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IocG9zaXRpb24pO1xuICAgICAgICB0aGlzLm1haW5SZW5kZXJlci5zY3JvbGxCeShjb25maWcuaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvTWFpblZpZXcoMC41KTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIGdvdG9QYWdlVXAoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMubWFpblJlbmRlcmVyLmxheWVyQ29uZmlnO1xuICAgICAgICBjb25zdCBsaW5lID0gY29uZmlnLnZpc2libGVSYW5nZS5zdGFydFNjcmVlbkxpbmU7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gUG9zaXRpb25IZWxwZXIuc2NyZWVuVG9Eb2N1bWVudCh0aGlzLm1haW5TZXNzaW9uLCBsaW5lLCAwKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IocG9zaXRpb24pO1xuICAgICAgICB0aGlzLm1haW5SZW5kZXJlci5zY3JvbGxCeSgtY29uZmlnLmhlaWdodCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ3Vyc29ySW50b01haW5WaWV3KDAuNSk7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBjdXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICBpbnNlcnQodGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICBjb25zdCB0ZXh0U3R5bGUgPSBDb250ZW50U3R5bGVIZWxwZXIuY29tYmluZVRleHRTdHlsZXMobnVsbCwgdGhpcy5lZGl0b3JTZXJ2aWNlLnN0eWxlcyBhcyBUZXh0U3R5bGVNb2RlbCk7XG4gICAgICAgICAgICB0aGlzLmluc2VydFRleHQodGV4dCwgdGV4dFN0eWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGluc2VydEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhUb0RvY3VtZW50SW5kZXgoXG4gICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQucm93LFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LmNvbHVtblxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGluc2VydFRleHQgPSBuZXcgSW5zZXJ0VGV4dE1vZGVsKHsgaW5zZXJ0SW5kZXgsIHRleHQgfSk7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VCeShuZXcgUmVwbGFjZU1vZGVsKHsgaW5zZXJ0VGV4dCB9KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbnNlcnRUZXh0KHRleHQ6IHN0cmluZywgdGV4dFN0eWxlOiBUZXh0U3R5bGVNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuc2VsZWN0aW9uLmN1cnNvcjtcbiAgICAgICAgaWYgKHRleHRTdHlsZSkge1xuICAgICAgICAgICAgdGhpcy5zYXZlSW5zZXJ0U3R5bGVkVGV4dFRvSGlzdG9yeShwb3NpdGlvbi5yb3csIHBvc2l0aW9uLmNvbHVtbiwgdGV4dCwgdGV4dFN0eWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZUluc2VydFRleHRUb0hpc3RvcnkocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4sIHRleHQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnRUZXh0KHBvc2l0aW9uLCB0ZXh0LCB0ZXh0U3R5bGUpO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlTGVmdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdExlZnQodGhpcy5zZXNzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGVkKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlUmlnaHQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RSaWdodCh0aGlzLnNlc3Npb24pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICBpbnNlcnRCcmVhayhicmVha1R5cGU6IEJyZWFrVHlwZXMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5zZXJ0SW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleChcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQucm93LFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQuY29sdW1uXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGluc2VydEJyZWFrID0gbmV3IEluc2VydEJyZWFrTW9kZWwoeyBpbnNlcnRJbmRleCwgYnJlYWtUeXBlIH0pO1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUJ5KG5ldyBSZXBsYWNlTW9kZWwoeyBpbnNlcnRCcmVhayB9KSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYnJlYWtUeXBlID09PSBCcmVha1R5cGVzLkNvbHVtbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zYXZlSW5zZXJ0QnJlYWtUb0hpc3RvcnkoaW5zZXJ0QnJlYWspO1xuICAgICAgICBjb25zdCBlbmRQb2ludCA9IHRoaXMuc2Vzc2lvbi5pbnNlcnRCcmVhayh0aGlzLnNlbGVjdGlvbi5jdXJzb3IsIGJyZWFrVHlwZSk7XG4gICAgICAgIGxldCBsYXN0Um93ID0gdGhpcy5zZWxlY3Rpb24uY3Vyc29yLnJvdyA9PT0gZW5kUG9pbnQucm93ID8gZW5kUG9pbnQucm93IDogSW5maW5pdHk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlTGluZXModGhpcy5zZWxlY3Rpb24uY3Vyc29yLnJvdywgbGFzdFJvdyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7XG4gICAgICAgIHRoaXMucmVyZW5kZXJNYXJrZXIoKTtcbiAgICAgICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvTWFpblZpZXcoMC4xKTtcbiAgICB9XG5cbiAgICBpbnNlcnRUYWIoKSB7XG4gICAgICAgIGNvbnN0IGluc2VydEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhUb0RvY3VtZW50SW5kZXgoXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LnJvdyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LmNvbHVtblxuICAgICAgICApO1xuICAgICAgICBjb25zdCBpbnNlcnRUYWIgPSBuZXcgSW5zZXJ0VGFiTW9kZWwoeyBpbnNlcnRJbmRleCB9KTtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VCeShuZXcgUmVwbGFjZU1vZGVsKHsgaW5zZXJ0VGFiIH0pKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2F2ZUluc2VydFRhYlRvSGlzdG9yeShpbnNlcnRUYWIpO1xuICAgICAgICBjb25zdCBlbmRQb2ludCA9IHRoaXMuc2Vzc2lvbi5pbnNlcnRUYWIodGhpcy5zZWxlY3Rpb24uY3Vyc29yKTtcbiAgICAgICAgdGhpcy5vbkRvY3VtZW50Q2hhbmdlKG5ldyBSYW5nZSh0aGlzLnNlbGVjdGlvbi5jdXJzb3IsIGVuZFBvaW50KSk7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBpbnNlcnRJbWFnZShpbWFnZURhdGE6IEltYWdlRGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGFkanVzdGVkSW1hZ2UgPSBJbWFnZUhlbHBlci5nZXRJbWFnZVdpdGhBbGxvd2VkU2l6ZShpbWFnZURhdGEsIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5jb250ZW50V2lkdGgpO1xuICAgICAgICBjb25zdCBpbnNlcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoVG9Eb2N1bWVudEluZGV4KFxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5yb3csXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5jb2x1bW5cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaW5zZXJ0SW1hZ2UgPSBuZXcgSW5zZXJ0SW1hZ2VNb2RlbCh7IGluc2VydEluZGV4LCBpbWFnZURhdGE6IGFkanVzdGVkSW1hZ2UgfSk7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSkge1xuICAgICAgICAgICAgdGhpcy5yZXBsYWNlQnkobmV3IFJlcGxhY2VNb2RlbCh7IGluc2VydEltYWdlIH0pKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2F2ZUluc2VydEltYWdlVG9IaXN0b3J5KGluc2VydEltYWdlKTtcbiAgICAgICAgY29uc3QgZW5kUG9pbnQgPSB0aGlzLnNlc3Npb24uaW5zZXJ0SW1hZ2UodGhpcy5zZWxlY3Rpb24uY3Vyc29yLCBhZGp1c3RlZEltYWdlKTtcbiAgICAgICAgbGV0IGxhc3RSb3cgPSB0aGlzLnNlbGVjdGlvbi5jdXJzb3Iucm93ID09PSBlbmRQb2ludC5yb3cgPyBlbmRQb2ludC5yb3cgOiBJbmZpbml0eTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVMaW5lcyh0aGlzLnNlbGVjdGlvbi5jdXJzb3Iucm93LCBsYXN0Um93KTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTtcbiAgICAgICAgdGhpcy5yZXJlbmRlck1hcmtlcigpO1xuICAgIH1cblxuICAgIGluc2VydExpbmsobGlua0RhdGFNb2RlbDogTGlua0RhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnNlcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoVG9Eb2N1bWVudEluZGV4KFxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5yb3csXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5jb2x1bW5cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaW5zZXJ0TGluayA9IG5ldyBJbnNlcnRMaW5rTW9kZWwoeyBpbnNlcnRJbmRleCwgZW5kSW5kZXg6IGluc2VydEluZGV4ICsgbGlua0RhdGFNb2RlbC50ZXh0Lmxlbmd0aCwgbGlua0RhdGFNb2RlbCB9KTtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VCeShuZXcgUmVwbGFjZU1vZGVsKHsgaW5zZXJ0TGluayB9KSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNhdmVJbnNlcnRMaW5rVG9IaXN0b3J5KGluc2VydExpbmspO1xuICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0TGluayh0aGlzLnNlbGVjdGlvbi5jdXJzb3IsIGxpbmtEYXRhTW9kZWwpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgICAgICB0aGlzLnJlcmVuZGVyTWFya2VyKCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0VGFibGUodGFibGVEYXRhOiB7IHJvd3M6IG51bWJlcjsgY29sdW1uczogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5zZXJ0SW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleChcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQucm93LFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQuY29sdW1uXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgaW5zZXJ0VGFibGUgPSBuZXcgSW5zZXJ0VGFibGVNb2RlbCh7XG4gICAgICAgICAgICBpbnNlcnRJbmRleCxcbiAgICAgICAgICAgIGluc2VydFRhYmxlSW5kZXg6IGluc2VydEluZGV4LFxuICAgICAgICAgICAgcm93c0NvdW50OiB0YWJsZURhdGEucm93cyxcbiAgICAgICAgICAgIGNvbHVtbnNDb3VudDogdGFibGVEYXRhLmNvbHVtbnMsXG4gICAgICAgICAgICBjb250ZW50OiBUQUJMRV9NQVJLRVJcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHNbdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQucm93XS5wYXJhZ3JhcGhTZXR0aW5ncy5udW1iZXJpbmdEYXRhLm51bWJlcmluZ0lkIHx8XG4gICAgICAgICAgICAhdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMuc29tZSh4ID0+IHguc3RhcnRJbmRleCA9PT0gaW5zZXJ0SW5kZXgpIHx8XG4gICAgICAgICAgICAhdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLmlzTmV3TGluZVN5bWJvbChpbnNlcnRJbmRleClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmluc2VydFRhYmxlSW5OZXdQYXJhZ3JhcGgoaW5zZXJ0VGFibGUsIGluc2VydEluZGV4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0VGFibGVJbkN1cnJlbnRQYXJhZ3JhcGgoaW5zZXJ0VGFibGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5zZXJ0VGFibGVJbk5ld1BhcmFncmFwaChpbnNlcnRUYWJsZTogSW5zZXJ0VGFibGVNb2RlbCwgaW5zZXJ0SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnNlcnRQYXJhZ3JhcGggPSBuZXcgSW5zZXJ0UGFyYWdyYXBoTW9kZWwoeyBpbnNlcnRJbmRleCwgaW5zZXJ0VGFibGUgfSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VCeShuZXcgUmVwbGFjZU1vZGVsKHsgaW5zZXJ0UGFyYWdyYXBoIH0pKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2F2ZUluc2VydFBhcmFncmFwaFRvSGlzdG9yeShpbnNlcnRUYWJsZS5jb250ZW50LCBpbnNlcnRQYXJhZ3JhcGgpO1xuICAgICAgICBjb25zdCBlbmRQb2ludCA9IHRoaXMuc2Vzc2lvbi5pbnNlcnRQYXJhZ3JhcGgodGhpcy5zZWxlY3Rpb24uY3Vyc29yLCBpbnNlcnRQYXJhZ3JhcGgpO1xuICAgICAgICBsZXQgbGFzdFJvdyA9IHRoaXMuc2VsZWN0aW9uLmN1cnNvci5yb3cgPT09IGVuZFBvaW50LnJvdyA/IGVuZFBvaW50LnJvdyA6IEluZmluaXR5O1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUxpbmVzKHRoaXMuc2VsZWN0aW9uLmN1cnNvci5yb3csIGxhc3RSb3cpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgICAgICB0aGlzLnJlcmVuZGVyTWFya2VyKCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0VGFibGVJbkN1cnJlbnRQYXJhZ3JhcGgoaW5zZXJ0VGFibGU6IEluc2VydFRhYmxlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VCeShuZXcgUmVwbGFjZU1vZGVsKHsgaW5zZXJ0VGFibGUgfSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zYXZlSW5zZXJ0VGFibGVUb0hpc3RvcnkoaW5zZXJ0VGFibGUpO1xuICAgICAgICBjb25zdCBlbmRQb2ludCA9IHRoaXMuc2Vzc2lvbi5pbnNlcnRUYWJsZSh0aGlzLnNlbGVjdGlvbi5jdXJzb3IsIGluc2VydFRhYmxlKTtcbiAgICAgICAgbGV0IGxhc3RSb3cgPSB0aGlzLnNlbGVjdGlvbi5jdXJzb3Iucm93ID09PSBlbmRQb2ludC5yb3cgPyBlbmRQb2ludC5yb3cgOiBJbmZpbml0eTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVMaW5lcyh0aGlzLnNlbGVjdGlvbi5jdXJzb3Iucm93LCBsYXN0Um93KTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTtcbiAgICAgICAgdGhpcy5yZXJlbmRlck1hcmtlcigpO1xuICAgIH1cblxuICAgIHJlcGxhY2VCeShtb2RlbDogUmVwbGFjZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhcnRJbmRleGVzID0gQ29udGVudEhlbHBlci5nZXRTZWxlY3RlZFBhcnREb2N1bWVudEluZGV4ZXModGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHRoaXMuc2VsZWN0aW9uLnJhbmdlKTtcbiAgICAgICAgbW9kZWwuZGVsZXRlID0gbmV3IERlbGV0ZU1vZGVsKHsgc3RhcnRJbmRleDogcGFydEluZGV4ZXMuc3RhcnRJbmRleCwgY291bnQ6IHBhcnRJbmRleGVzLmVuZEluZGV4IC0gcGFydEluZGV4ZXMuc3RhcnRJbmRleCArIDEgfSk7XG4gICAgICAgIHRoaXMuc2F2ZVJlcGxhY2VUb0hpc3RvcnkodGhpcy5zZWxlY3Rpb24ucmFuZ2UsIG1vZGVsKTtcbiAgICAgICAgdGhpcy5yZW1vdmVDdXN0b21FbGVtZW50c0RhdGEoKTtcbiAgICAgICAgY29uc3QgZW5kUG9zaXRpb24gPSB0aGlzLnNlc3Npb24ucmVwbGFjZShtb2RlbCk7XG4gICAgICAgIHRoaXMub25Eb2N1bWVudENoYW5nZShuZXcgUmFuZ2UodGhpcy5zZWxlY3Rpb24uY3Vyc29yLCBlbmRQb3NpdGlvbikpO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlVG9MaW5lU3RhcnQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RMaW5lU3RhcnQodGhpcy5zZXNzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGVkKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlVG9MaW5lRW5kKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0TGluZUVuZCh0aGlzLnNlc3Npb24pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICByZW1vdmVXb3JkTGVmdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdFdvcmRMZWZ0KHRoaXMuc2Vzc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZCgpO1xuICAgIH1cblxuICAgIHJlbW92ZVdvcmRSaWdodCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdFdvcmRSaWdodCh0aGlzLnNlc3Npb24pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICBhcHBseVRleHRTdHlsZUJvbGQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYXBwbHlUZXh0U3R5bGVzKG5ldyBUZXh0U3R5bGVNb2RlbCh7IGJvbGQ6ICF0aGlzLnNlc3Npb24uZWRpdG9yU2VydmljZS5zdHlsZXMuYm9sZCB9KSk7XG4gICAgfVxuXG4gICAgYXBwbHlUZXh0U3R5bGVJdGFsaWMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYXBwbHlUZXh0U3R5bGVzKG5ldyBUZXh0U3R5bGVNb2RlbCh7IGl0YWxpYzogIXRoaXMuc2Vzc2lvbi5lZGl0b3JTZXJ2aWNlLnN0eWxlcy5pdGFsaWMgfSkpO1xuICAgIH1cblxuICAgIGFwcGx5VGV4dFN0eWxlVW5kZXJsaW5lKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFwcGx5VGV4dFN0eWxlcyhuZXcgVGV4dFN0eWxlTW9kZWwoeyB1bmRlcmxpbmU6ICF0aGlzLnNlc3Npb24uZWRpdG9yU2VydmljZS5zdHlsZXMudW5kZXJsaW5lIH0pKTtcbiAgICB9XG5cbiAgICBhcHBseVRleHRTdHlsZXModGV4dFN0eWxlOiBUZXh0U3R5bGVNb2RlbCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRJbmRleGVzID0gQ29udGVudEhlbHBlci5nZXRTZWxlY3RlZFBhcnREb2N1bWVudEluZGV4ZXModGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHRoaXMuc2VsZWN0aW9uLnJhbmdlKTtcbiAgICAgICAgICAgIHRoaXMuc2F2ZUFwcGx5VGV4dFN0eWxlVG9IaXN0b3J5KHBhcnRJbmRleGVzLnN0YXJ0SW5kZXgsIHBhcnRJbmRleGVzLmVuZEluZGV4LCB0ZXh0U3R5bGUpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmFwcGx5VGV4dFN0eWxlKHBhcnRJbmRleGVzLnN0YXJ0SW5kZXgsIHBhcnRJbmRleGVzLmVuZEluZGV4LCB0ZXh0U3R5bGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRUZXh0U3R5bGUodGV4dFN0eWxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFRleHRTdHlsZSh0ZXh0U3R5bGU6IFRleHRTdHlsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhQb3NpdGlvblRvRG9jdW1lbnRJbmRleCh0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocywgdGhpcy5zZWxlY3Rpb24uY3Vyc29yKTtcbiAgICAgICAgY29uc3QgaXNQYXJhZ3JhcGggPSB0aGlzLnNlc3Npb24ubW9kZWwuY29udGVudExlbmd0aCA9PT0gaW5kZXggfHwgdGhpcy5zZXNzaW9uLm1vZGVsLmNvbnRlbnRbaW5kZXhdID09PSBORVdfTElORV9NQVJLVVA7XG4gICAgICAgIGlmIChpc1BhcmFncmFwaCkge1xuICAgICAgICAgICAgdGhpcy5zYXZlQXBwbHlUZXh0U3R5bGVUb0hpc3RvcnkoaW5kZXgsIGluZGV4LCB0ZXh0U3R5bGUpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmFwcGx5VGV4dFN0eWxlKGluZGV4LCBpbmRleCwgdGV4dFN0eWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5zZXRUZXh0U3R5bGUodGV4dFN0eWxlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgIH1cblxuICAgIGFwcGx5UGFyYWdyYXBoU3R5bGVzKHBhcmFncmFwaFN0eWxlOiBQYXJhZ3JhcGhTdHlsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5zZWxlY3Rpb24ucmFuZ2U7XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLnNlc3Npb24ubW9kZWwucGFyYWdyYXBoc1tyYW5nZS5zdGFydC5yb3ddLmluc2VydEluZGV4O1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IHRoaXMuc2Vzc2lvbi5tb2RlbC5wYXJhZ3JhcGhzW3JhbmdlLmVuZC5yb3ddLmluc2VydEluZGV4O1xuICAgICAgICB0aGlzLnNhdmVBcHBseVBhcmFncmFwaFN0eWxlVG9IaXN0b3J5KHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBwYXJhZ3JhcGhTdHlsZSk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5hcHBseVBhcmFncmFwaFN0eWxlKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBwYXJhZ3JhcGhTdHlsZSk7XG4gICAgfVxuXG4gICAgYXBwbHlFbGVtZW50U3R5bGUoY3VycmVudDogRWxlbWVudE1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2F2ZUFwcGx5RWxlbWVudFN0eWxlVG9IaXN0b3J5KGN1cnJlbnQpO1xuICAgICAgICB0aGlzLnNlc3Npb24uYXBwbHlFbGVtZW50U3R5bGUobmV3IEFwcGx5RWxlbWVudFN0eWxlTW9kZWwoY3VycmVudCkpO1xuICAgIH1cblxuICAgIHNldE51bWJlcmluZ1RlbXBsYXRlKHRlbXBsYXRlTGV2ZWxzOiBOdW1iZXJpbmdMZXZlbE1vZGVsW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvbi5yYW5nZTtcbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IHRoaXMuc2Vzc2lvbi5tb2RlbC5wYXJhZ3JhcGhzW3JhbmdlLnN0YXJ0LnJvd10uaW5zZXJ0SW5kZXg7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdGhpcy5zZXNzaW9uLm1vZGVsLnBhcmFncmFwaHNbcmFuZ2UuZW5kLnJvd10uaW5zZXJ0SW5kZXg7XG4gICAgICAgIHRoaXMuc2F2ZUFkZE51bWJlcmluZ1RvSGlzdG9yeSh0ZW1wbGF0ZUxldmVscywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICB0aGlzLnNlc3Npb24uYWRkTnVtYmVyaW5nKHRlbXBsYXRlTGV2ZWxzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlTnVtYmVyaW5nc0Zyb21QYXJhZ3JhcGhzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuc2VsZWN0aW9uLnJhbmdlO1xuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gdGhpcy5zZXNzaW9uLm1vZGVsLnBhcmFncmFwaHNbcmFuZ2Uuc3RhcnQucm93XS5pbnNlcnRJbmRleDtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSB0aGlzLnNlc3Npb24ubW9kZWwucGFyYWdyYXBoc1tyYW5nZS5lbmQucm93XS5pbnNlcnRJbmRleDtcbiAgICAgICAgdGhpcy5zYXZlUmVtb3ZlTnVtYmVyaW5nVG9IaXN0b3J5KHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZU51bWJlcmluZ3Moc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgIH1cblxuICAgIGFwcGx5SW1hZ2VTdHlsZXMoaW1hZ2U6IEltYWdlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zYXZlQXBwbHlJbWFnZVN0eWxlVG9IaXN0b3J5KGltYWdlKTtcbiAgICAgICAgY29uc3QgaW1hZ2VTdHlsZSA9IG5ldyBBcHBseUltYWdlU3R5bGVNb2RlbCh7IGluc2VydEluZGV4OiBpbWFnZS5pbnNlcnRJbmRleCwgaGVpZ2h0OiBpbWFnZS5oZWlnaHQsIHdpZHRoOiBpbWFnZS53aWR0aCB9KTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLmFwcGx5SW1hZ2VTdHlsZShpbWFnZVN0eWxlKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTtcbiAgICB9XG5cbiAgICBmb2N1cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnRleHRJbnB1dC5pc0ZvY3VzZWQgJiYgIXRoaXMuc2VsZWN0aW9uLmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgdGhpcy50ZXh0SW5wdXQuaW5wdXQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9wZW5TZWFyY2goKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5vcGVuU2VhcmNoRGlhbG9nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmaW5kKG9wdGlvbnM6IFNlYXJjaE9wdGlvbnMpOiBSYW5nZSB7XG4gICAgICAgIGxldCByYW5nZSA9IHRoaXMuc2VsZWN0aW9uLnJhbmdlO1xuICAgICAgICBpZiAob3B0aW9ucy50ZXJtID09IG51bGwpIHtcbiAgICAgICAgICAgIGxldCB0ZXJtID0gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLmdldFRleHRSYW5nZShyYW5nZSkgfHwgdGhpcy5zZWFyY2gub3B0aW9ucy50ZXJtO1xuICAgICAgICAgICAgaWYgKCF0ZXJtKSB7XG4gICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLnNlc3Npb24uZ2V0V29yZFJhbmdlKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uKTtcbiAgICAgICAgICAgICAgICB0ZXJtID0gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLmdldFRleHRSYW5nZShyYW5nZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zLnRlcm0gPSB0ZXJtO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLnN0YXJ0KSB7XG4gICAgICAgICAgICBvcHRpb25zLnN0YXJ0ID0gcmFuZ2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlYXJjaC5zZXQob3B0aW9ucyk7XG5cbiAgICAgICAgY29uc3QgbmV3UmFuZ2UgPSB0aGlzLnNlYXJjaC5maW5kKHRoaXMuc2Vzc2lvbik7XG4gICAgICAgIGlmIChuZXdSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VTZWxlY3Rpb24ocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXNzaW9uID09PSB0aGlzLm1haW5TZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYWluUmVuZGVyZXIuc2Nyb2xsU2VsZWN0aW9uSW50b1ZpZXcocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCwgMC41KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXdSYW5nZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJhbmdlLmVuZCA9IHJhbmdlLnN0YXJ0O1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZUN1cnNvcihyYW5nZS5zdGFydCk7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdXBkYXRlQ291bnRlcigpOiBTZWFyY2hJdGVyYXRpb24ge1xuICAgICAgICBjb25zdCByZWdleCA9IHRoaXMuc2VhcmNoLm9wdGlvbnMucmVnZXggYXMgUmVnRXhwO1xuICAgICAgICBsZXQgYWxsID0gMDtcbiAgICAgICAgbGV0IGN1cnJlbnQgPSAwO1xuICAgICAgICBpZiAoIXJlZ2V4KSB7XG4gICAgICAgICAgICByZXR1cm4geyBjdXJyZW50OiAwLCB0b3RhbDogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEuZ2V0QWxsUGFyYWdyYXBoc0NvbnRlbnQoKS5qb2luKCdcXG4nKTtcblxuICAgICAgICBsZXQgb2Zmc2V0ID0gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBvc2l0aW9uVG9JbmRleCh0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydCk7XG5cbiAgICAgICAgcmVnZXgubGFzdEluZGV4ID0gMDtcbiAgICAgICAgbGV0IHJlZ2V4UmVzdWx0O1xuICAgICAgICB3aGlsZSAoKHJlZ2V4UmVzdWx0ID0gcmVnZXguZXhlYyh2YWx1ZSkpKSB7XG4gICAgICAgICAgICBhbGwrKztcbiAgICAgICAgICAgIGxldCBsYXN0ID0gcmVnZXhSZXN1bHQuaW5kZXg7XG4gICAgICAgICAgICBpZiAobGFzdCA8PSBvZmZzZXQpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50Kys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWxsID4gdGhpcy5NQVhfQ09VTlQpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IGN1cnJlbnQ6IGN1cnJlbnQsIHRvdGFsOiBhbGwgPiB0aGlzLk1BWF9DT1VOVCA/IHRoaXMuTUFYX0NPVU5UIDogYWxsIH07XG4gICAgfVxuXG4gICAgcmVwbGFjZShzZWFyY2g6IHN0cmluZywgcmVwbGFjZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2VhcmNoICE9PSByZXBsYWNlKSB7XG4gICAgICAgICAgICBpZiAocmVwbGFjZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc2VydEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhUb0RvY3VtZW50SW5kZXgoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5yb3csXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LmNvbHVtblxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5zZXJ0VGV4dCA9IG5ldyBJbnNlcnRUZXh0TW9kZWwoeyBpbnNlcnRJbmRleCwgdGV4dDogcmVwbGFjZSB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlcGxhY2VCeShuZXcgUmVwbGFjZU1vZGVsKHsgaW5zZXJ0VGV4dCB9KSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmluZCh7IHRlcm06IHNlYXJjaCwgc2tpcEN1cnJlbnQ6IHRydWUsIGJhY2t3YXJkczogZmFsc2UgfSk7XG4gICAgfVxuXG4gICAgdW5kbygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdW5kbyA9IHRoaXMuaGlzdG9yeS5wb3BVbmRvT3BlcmF0aW9uKCk7XG4gICAgICAgIGlmICghdW5kbykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRUYXJnZXRlZFNlc3Npb25Bc0N1cnJlbnQodW5kby50YXJnZXRzKTtcbiAgICAgICAgdGhpcy5hcHBseU9wZXJhdGlvbih1bmRvLm9wZXJhdGlvbik7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlU2VsZWN0aW9uKHVuZG8uY3Vyc29yLCB1bmRvLmFuY2hvcik7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICByZWRvKCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZWRvID0gdGhpcy5oaXN0b3J5LnBvcFJlZG9PcGVyYXRpb24oKTtcbiAgICAgICAgaWYgKCFyZWRvKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLnNldFRhcmdldGVkU2Vzc2lvbkFzQ3VycmVudChyZWRvLnRhcmdldHMpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZVNlbGVjdGlvbihyZWRvLmN1cnNvciwgcmVkby5hbmNob3IpO1xuICAgICAgICB0aGlzLmFwcGx5T3BlcmF0aW9uKHJlZG8ub3BlcmF0aW9uKTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIGFwcGx5T3BlcmF0aW9uKG9wZXJhdGlvbjogT3BlcmF0aW9uKTogdm9pZCB7XG4gICAgICAgIGxldCBjb21tYW5kOiBDb21tYW5kTW9kZWwgfCBudWxsID0gbnVsbDtcbiAgICAgICAgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEluc2VydFRleHRNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydFRleHRCeURvY3VtZW50SW5kZXgob3BlcmF0aW9uLmluc2VydEluZGV4LCBvcGVyYXRpb24udGV4dCwgbnVsbCk7XG4gICAgICAgICAgICBjb25zdCB7IHRleHQsIGluc2VydEluZGV4IH0gPSBvcGVyYXRpb247XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFRleHRDb21tYW5kKHRleHQsIGluc2VydEluZGV4LCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEluc2VydFBhcmFncmFwaE1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0UGFyYWdyYXBoQnlEb2N1bWVudEluZGV4KG9wZXJhdGlvbik7XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFBhcmFncmFwaENvbW1hbmQob3BlcmF0aW9uLCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIERlbGV0ZU1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlQnlEb2N1bWVudEluZGV4ZXMob3BlcmF0aW9uLnN0YXJ0SW5kZXgsIG9wZXJhdGlvbi5zdGFydEluZGV4ICsgb3BlcmF0aW9uLmNvdW50KTtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0RGVsZXRlQ29tbWFuZChvcGVyYXRpb24uc3RhcnRJbmRleCwgb3BlcmF0aW9uLmNvdW50LCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEluc2VydFN0eWxlZFRleHRNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydFRleHRCeURvY3VtZW50SW5kZXgob3BlcmF0aW9uLmluc2VydEluZGV4LCBvcGVyYXRpb24udGV4dCwgbmV3IFRleHRTdHlsZU1vZGVsKG9wZXJhdGlvbi50ZXh0U3R5bGUpKTtcbiAgICAgICAgICAgIGNvbnN0IHsgdGV4dCwgaW5zZXJ0SW5kZXgsIHRleHRTdHlsZSB9ID0gb3BlcmF0aW9uO1xuICAgICAgICAgICAgY29tbWFuZCA9IFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRTdHlsZWRUZXh0Q29tbWFuZCh0ZXh0LCBpbnNlcnRJbmRleCwgdGV4dFN0eWxlLCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIFJlc3RvcmVNb2RlbCkge1xuICAgICAgICAgICAgY29uc3QgZGVlcENvcHkgPSBzdHJ1Y3R1cmVkQ2xvbmUob3BlcmF0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZXN0b3JlKGRlZXBDb3B5KTtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVzdG9yZUNvbW1hbmQoZGVlcENvcHksIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgQXBwbHlUZXh0U3R5bGVNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmFwcGx5VGV4dFN0eWxlKG9wZXJhdGlvbi5zdGFydEluZGV4LCBvcGVyYXRpb24uZW5kSW5kZXgsIG5ldyBUZXh0U3R5bGVNb2RlbChvcGVyYXRpb24udGV4dFN0eWxlKSk7XG4gICAgICAgICAgICBjb25zdCB7IHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0ZXh0U3R5bGUgfSA9IG9wZXJhdGlvbjtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0QXBwbHlUZXh0U3R5bGVDb21tYW5kKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0ZXh0U3R5bGUsIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgQXBwbHlQYXJhZ3JhcGhTdHlsZU1vZGVsKSB7XG4gICAgICAgICAgICBjb25zdCBjb3B5ID0gbmV3IFBhcmFncmFwaFN0eWxlTW9kZWwob3BlcmF0aW9uLnBhcmFncmFwaFN0eWxlKTtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5hcHBseVBhcmFncmFwaFN0eWxlKG9wZXJhdGlvbi5zdGFydEluZGV4LCBvcGVyYXRpb24uZW5kSW5kZXgsIGNvcHkpO1xuICAgICAgICAgICAgY29uc3QgeyBzdGFydEluZGV4LCBlbmRJbmRleCwgcGFyYWdyYXBoU3R5bGUgfSA9IG9wZXJhdGlvbjtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0QXBwbHlQYXJhZ3JhcGhTdHlsZUNvbW1hbmQoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHBhcmFncmFwaFN0eWxlLCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIFJlc3RvcmVUZXh0U3R5bGVzTW9kZWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZXBDb3B5ID0gc3RydWN0dXJlZENsb25lKG9wZXJhdGlvbik7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVzdG9yZVRleHRTdHlsZXMoZGVlcENvcHkuZm9ybWF0cywgZGVlcENvcHkubGlua0Zvcm1hdHMpO1xuICAgICAgICAgICAgY29tbWFuZCA9IFNhdmVDb21tYW5kc0hlbHBlci5nZXRSZXN0b3JlVGV4dFN0eWxlc0NvbW1hbmQoZGVlcENvcHkuZm9ybWF0cywgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBSZXN0b3JlUGFyYWdyYXBoU3R5bGVzTW9kZWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZXBDb3B5ID0gc3RydWN0dXJlZENsb25lKG9wZXJhdGlvbik7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVzdG9yZVBhcmFncmFwaFN0eWxlcyhkZWVwQ29weS5wYXJhZ3JhcGhzKTtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVzdG9yZVBhcmFncmFwaFN0eWxlc0NvbW1hbmQoZGVlcENvcHkucGFyYWdyYXBocywgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBJbnNlcnRFbGVtZW50TW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnRFbGVtZW50QnlEb2N1bWVudEluZGV4KG9wZXJhdGlvbik7XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydEVsZW1lbnRDb21tYW5kKG9wZXJhdGlvbiwgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBJbnNlcnRCcmVha01vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0QnJlYWtCeURvY3VtZW50SW5kZXgob3BlcmF0aW9uKTtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0QnJlYWtDb21tYW5kKG9wZXJhdGlvbiwgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBBcHBseUVsZW1lbnRTdHlsZU1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uYXBwbHlFbGVtZW50U3R5bGUob3BlcmF0aW9uKTtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0QXBwbHlFbGVtZW50U3R5bGVDb21tYW5kKG9wZXJhdGlvbiwgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBJbnNlcnRUYWJNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydFRhYkJ5RG9jdW1lbnRJbmRleChvcGVyYXRpb24pO1xuICAgICAgICAgICAgY29tbWFuZCA9IFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRUYWJDb21tYW5kKG9wZXJhdGlvbiwgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBJbnNlcnRJbWFnZU1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0SW1hZ2VCeURvY3VtZW50SW5kZXgob3BlcmF0aW9uKTtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0SW1hZ2VDb21tYW5kKG9wZXJhdGlvbiwgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBJbnNlcnRMaW5rTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnRMaW5rQnlEb2N1bWVudEluZGV4KG9wZXJhdGlvbik7XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydExpbmtPcGVyYXRpb24ob3BlcmF0aW9uLCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEFwcGx5SW1hZ2VTdHlsZU1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uYXBwbHlJbWFnZVN0eWxlKG9wZXJhdGlvbik7XG4gICAgICAgICAgICBjb25zdCB7IGhlaWdodCwgd2lkdGgsIGluc2VydEluZGV4IH0gPSBvcGVyYXRpb247XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldEFwcGx5SW1hZ2VTdHlsZUNvbW1hbmQoaGVpZ2h0LCB3aWR0aCwgaW5zZXJ0SW5kZXgsIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgQWRkTnVtYmVyaW5nTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5hZGROdW1iZXJpbmcob3BlcmF0aW9uLmxldmVscywgb3BlcmF0aW9uLnN0YXJ0SW5kZXgsIG9wZXJhdGlvbi5lbmRJbmRleCk7XG4gICAgICAgICAgICBjb25zdCB7IHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBsZXZlbHMgfSA9IG9wZXJhdGlvbjtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0QWRkTnVtYmVyaW5nQ29tbWFuZChzdGFydEluZGV4LCBlbmRJbmRleCwgbGV2ZWxzLCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIFJlc3RvcmVOdW1iZXJpbmdzTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZXN0b3JlTnVtYmVyaW5ncyhvcGVyYXRpb24ucGFyYWdyYXBocywgb3BlcmF0aW9uLm51bWJlcmluZ3MpO1xuICAgICAgICAgICAgY29tbWFuZCA9IFNhdmVDb21tYW5kc0hlbHBlci5nZXRSZXN0b3JlTnVtYmVyaW5nc0NvbW1hbmQob3BlcmF0aW9uLCB0aGlzLnRhcmdldHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEluc2VydFRhYmxlQ29sdW1uc01vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0VGFibGVDb2x1bW5zKG9wZXJhdGlvbi5pbnNlcnRJbmRleCwgb3BlcmF0aW9uLmNvbHVtbnNDb3VudCwgb3BlcmF0aW9uLnRhcmdldEluZGV4LCBvcGVyYXRpb24uaW5oZXJpdEluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZShvcGVyYXRpb24uaW5zZXJ0SW5kZXgsIHRoaXMuc2Vzc2lvbi5zZXNzaW9uSWQpO1xuICAgICAgICAgICAgY29uc3QgeyBjb2x1bW5zQ291bnQsIGluaGVyaXRJbmRleCwgaW5zZXJ0SW5kZXgsIHRhcmdldEluZGV4IH0gPSBvcGVyYXRpb247XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFRhYmxlQ29sdW1uc0NvbW1hbmQoY29sdW1uc0NvdW50LCBpbmhlcml0SW5kZXgsIGluc2VydEluZGV4LCB0YXJnZXRJbmRleCwgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBJbnNlcnRUYWJsZVJvd3NNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydFRhYmxlUm93cyhvcGVyYXRpb24uaW5zZXJ0SW5kZXgsIG9wZXJhdGlvbi5yb3dzQ291bnQsIG9wZXJhdGlvbi50YXJnZXRJbmRleCwgb3BlcmF0aW9uLmluaGVyaXRJbmRleCk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUob3BlcmF0aW9uLmluc2VydEluZGV4LCB0aGlzLnNlc3Npb24uc2Vzc2lvbklkKTtcbiAgICAgICAgICAgIGNvbnN0IHsgaW5zZXJ0SW5kZXgsIHJvd3NDb3VudCwgdGFyZ2V0SW5kZXgsIGluaGVyaXRJbmRleCB9ID0gb3BlcmF0aW9uO1xuICAgICAgICAgICAgY29tbWFuZCA9IFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRUYWJsZVJvd3NDb21tYW5kKGluc2VydEluZGV4LCByb3dzQ291bnQsIHRhcmdldEluZGV4LCBpbmhlcml0SW5kZXgsIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgUmVtb3ZlVGFibGVDb2x1bW5zTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVUYWJsZUNvbHVtbnMob3BlcmF0aW9uLmluc2VydEluZGV4LCBvcGVyYXRpb24uc3RhcnRJbmRleCwgb3BlcmF0aW9uLmVuZEluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZShvcGVyYXRpb24uaW5zZXJ0SW5kZXgsIHRoaXMuc2Vzc2lvbi5zZXNzaW9uSWQpO1xuICAgICAgICAgICAgY29uc3QgeyBpbnNlcnRJbmRleCwgc3RhcnRJbmRleCwgZW5kSW5kZXggfSA9IG9wZXJhdGlvbjtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVtb3ZlVGFibGVDb2x1bW5zQ29tbWFuZChpbnNlcnRJbmRleCwgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgUmVtb3ZlVGFibGVSb3dzTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVUYWJsZVJvd3Mob3BlcmF0aW9uLmluc2VydEluZGV4LCBvcGVyYXRpb24uc3RhcnRJbmRleCwgb3BlcmF0aW9uLmVuZEluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZShvcGVyYXRpb24uaW5zZXJ0SW5kZXgsIHRoaXMuc2Vzc2lvbi5zZXNzaW9uSWQpO1xuICAgICAgICAgICAgY29uc3QgeyBpbnNlcnRJbmRleCwgc3RhcnRJbmRleCwgZW5kSW5kZXggfSA9IG9wZXJhdGlvbjtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVtb3ZlVGFibGVSb3dzQ29tbWFuZChpbnNlcnRJbmRleCwgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgUmVzaXplVGFibGVDb2x1bW5zTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZXNpemVUYWJsZUNvbHVtbnMob3BlcmF0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZShvcGVyYXRpb24uaW5zZXJ0SW5kZXgsIHRoaXMuc2Vzc2lvbi5zZXNzaW9uSWQpO1xuICAgICAgICAgICAgY29tbWFuZCA9IFNhdmVDb21tYW5kc0hlbHBlci5nZXRSZXNpemVUYWJsZUNvbHVtbnNDb21tYW5kKG9wZXJhdGlvbiwgdGhpcy50YXJnZXRzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBSZXN0b3JlVGFibGVNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlc3RvcmVUYWJsZShvcGVyYXRpb24uaW5zZXJ0SW5kZXgsIG9wZXJhdGlvbi5vbGRUYWJsZSk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUob3BlcmF0aW9uLmluc2VydEluZGV4LCB0aGlzLnNlc3Npb24uc2Vzc2lvbklkKTtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVzdG9yZVRhYmxlQ29tbWFuZChvcGVyYXRpb24sIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgSW5zZXJ0VGFibGVNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydFRhYmxlQnlEb2N1bWVudEluZGV4KG9wZXJhdGlvbik7XG4gICAgICAgICAgICBjb21tYW5kID0gU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFRhYmxlQ29tbWFuZChvcGVyYXRpb24sIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgUmVtb3ZlTnVtYmVyaW5nc01vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlTnVtYmVyaW5ncyhvcGVyYXRpb24uc3RhcnRJbmRleCwgb3BlcmF0aW9uLmVuZEluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRJbmRleCwgZW5kSW5kZXggfSA9IG9wZXJhdGlvbjtcbiAgICAgICAgICAgIGNvbW1hbmQgPSBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVtb3ZlTnVtYmVyaW5nc0NvbW1hbmQoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgUmVwbGFjZU1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVwbGFjZShvcGVyYXRpb24pO1xuICAgICAgICAgICAgY29tbWFuZCA9IFNhdmVDb21tYW5kc0hlbHBlci5nZXRSZXBsYWNlQ29tbWFuZChvcGVyYXRpb24sIHRoaXMudGFyZ2V0cyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZG8vcmVkbyBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIHRoZSBPcGVyYXRpb24nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKGNvbW1hbmQpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgIH1cblxuICAgIHNhdmVSZW1vdmVUb0hpc3RvcnkocmFuZ2U6IFJhbmdlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc3RvcmVNb2RlbCA9IHRoaXMuY3JlYXRlUmVzdG9yZUZyb21TbGljZShyYW5nZS5zdGFydC5yb3csIHJhbmdlLnN0YXJ0LmNvbHVtbiwgcmFuZ2UuZW5kLnJvdywgcmFuZ2UuZW5kLmNvbHVtbik7XG4gICAgICAgIGNvbnN0IGNvdW50ID0gcmVzdG9yZU1vZGVsLmVuZEluZGV4IC0gcmVzdG9yZU1vZGVsLnN0YXJ0SW5kZXggKyAxO1xuICAgICAgICByZXN0b3JlTW9kZWwuZW5kSW5kZXggPSByZXN0b3JlTW9kZWwuc3RhcnRJbmRleDsgLy8gdGhpcyBpcyB0byByZXN0b3JlIGluIHBvc2l0aW9uIHdpdGhvdXQgZGVsZXRpbmcvcmVwbGFjaW5nIGFueXRoaW5nIGluIHJhbmdlXG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoRGVsZXRlKHJlc3RvcmVNb2RlbCk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldERlbGV0ZUNvbW1hbmQocmVzdG9yZU1vZGVsLnN0YXJ0SW5kZXgsIGNvdW50LCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBzYXZlSW5zZXJ0VGV4dFRvSGlzdG9yeShwYXJhZ3JhcGg6IG51bWJlciwgaW5kZXhJblBhcmFncmFwaDogbnVtYmVyLCB0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleCh0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocywgcGFyYWdyYXBoLCBpbmRleEluUGFyYWdyYXBoKTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hJbnNlcnRUZXh0KGluZGV4LCB0ZXh0KTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0VGV4dENvbW1hbmQodGV4dCwgaW5kZXgsIHRoaXMudGFyZ2V0cykpO1xuICAgIH1cblxuICAgIHNhdmVJbnNlcnRQYXJhZ3JhcGhUb0hpc3RvcnkoY29udGVudDogc3RyaW5nLCBtb2RlbDogSW5zZXJ0UGFyYWdyYXBoTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hJbnNlcnRQYXJhZ3JhcGgoY29udGVudCwgbW9kZWwsIHRoaXMuc2Vzc2lvbi5tb2RlbC5wYXJhZ3JhcGhzKTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0UGFyYWdyYXBoQ29tbWFuZChtb2RlbCwgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgc2F2ZUluc2VydFN0eWxlZFRleHRUb0hpc3RvcnkocGFyYWdyYXBoOiBudW1iZXIsIGluZGV4SW5QYXJhZ3JhcGg6IG51bWJlciwgdGV4dDogc3RyaW5nLCBzdHlsZTogVGV4dFN0eWxlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleCh0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocywgcGFyYWdyYXBoLCBpbmRleEluUGFyYWdyYXBoKTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hJbnNlcnRTdHlsZWRUZXh0KGluZGV4LCB0ZXh0LCBzdHlsZSk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFN0eWxlZFRleHRDb21tYW5kKHRleHQsIGluZGV4LCBzdHlsZSwgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgc2F2ZUluc2VydEVsZW1lbnRUb0hpc3RvcnkobW9kZWw6IEluc2VydEVsZW1lbnRNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEluc2VydEVsZW1lbnQobW9kZWwpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRFbGVtZW50Q29tbWFuZChtb2RlbCwgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgc2F2ZUluc2VydEJyZWFrVG9IaXN0b3J5KG1vZGVsOiBJbnNlcnRCcmVha01vZGVsKTogdm9pZCB7XG4gICAgICAgIG1vZGVsLmlzT25OZXdQYXJhZ3JhcGggPVxuICAgICAgICAgICAgbW9kZWwuYnJlYWtUeXBlID09PSBCcmVha1R5cGVzLlBhZ2UgJiZcbiAgICAgICAgICAgIEJyZWFrSGVscGVyLmdldEJyZWFrVHlwZSh0aGlzLnNlc3Npb24ubW9kZWwsIENVU1RPTV9FTEVNRU5UX01BUktFUiwgbW9kZWwuaW5zZXJ0SW5kZXggLSAxKSAhPT0gQnJlYWtUeXBlcy5QYWdlO1xuICAgICAgICBjb25zdCBjb3VudCA9IG1vZGVsLmlzT25OZXdQYXJhZ3JhcGggPyBORVdfTElORV9NQVJLVVAubGVuZ3RoICsgMSA6IDE7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoSW5zZXJ0QnJlYWsobW9kZWwsIGNvdW50KTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0QnJlYWtDb21tYW5kKG1vZGVsLCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBzYXZlSW5zZXJ0VGFiVG9IaXN0b3J5KG1vZGVsOiBJbnNlcnRUYWJNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEluc2VydFRhYihtb2RlbCk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFRhYkNvbW1hbmQobW9kZWwsIHRoaXMudGFyZ2V0cykpO1xuICAgIH1cblxuICAgIHNhdmVJbnNlcnRJbWFnZVRvSGlzdG9yeShtb2RlbDogSW5zZXJ0SW1hZ2VNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEluc2VydEltYWdlKG1vZGVsKTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0SW1hZ2VDb21tYW5kKG1vZGVsLCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBzYXZlSW5zZXJ0TGlua1RvSGlzdG9yeShtb2RlbDogSW5zZXJ0TGlua01vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoSW5zZXJ0TGluayhtb2RlbCk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydExpbmtPcGVyYXRpb24obW9kZWwsIHRoaXMudGFyZ2V0cykpO1xuICAgIH1cblxuICAgIHNhdmVJbnNlcnRUYWJsZVRvSGlzdG9yeShtb2RlbDogSW5zZXJ0VGFibGVNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEluc2VydFRhYmxlKG1vZGVsKTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0VGFibGVDb21tYW5kKG1vZGVsLCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBzYXZlQXBwbHlUZXh0U3R5bGVUb0hpc3Rvcnkoc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyLCB0ZXh0U3R5bGU6IFRleHRTdHlsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHMgPSBGb3JtYXRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC5mb3JtYXRzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIGNvbnN0IGxpbmtGb3JtYXRzID0gTGlua0hlbHBlci5zbGljZUZvcm1hdHModGhpcy5zZXNzaW9uLm1vZGVsLmxpbmtzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoQXBwbHlUZXh0U3R5bGUoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRleHRTdHlsZSwgZm9ybWF0cywgbGlua0Zvcm1hdHMpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFNhdmVDb21tYW5kc0hlbHBlci5nZXRBcHBseVRleHRTdHlsZUNvbW1hbmQoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRleHRTdHlsZSwgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgc2F2ZUFwcGx5UGFyYWdyYXBoU3R5bGVUb0hpc3Rvcnkoc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyLCBwYXJhZ3JhcGhTdHlsZTogUGFyYWdyYXBoU3R5bGVNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhzID0gSW5kZXhlZEVsZW1lbnRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC5wYXJhZ3JhcGhzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaHNEZWVwQ29weSA9IHBhcmFncmFwaHMubWFwKFxuICAgICAgICAgICAgeCA9PiBuZXcgUGFyYWdyYXBoTW9kZWwoeyBpbnNlcnRJbmRleDogeC5pbnNlcnRJbmRleCwgcGFyYWdyYXBoU3R5bGU6IG5ldyBQYXJhZ3JhcGhTdHlsZU1vZGVsKHsgLi4ueC5wYXJhZ3JhcGhTdHlsZSB9KSB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEFwcGx5UGFyYWdyYXBoU3R5bGUoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHBhcmFncmFwaFN0eWxlLCBwYXJhZ3JhcGhzRGVlcENvcHkpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFxuICAgICAgICAgICAgU2F2ZUNvbW1hbmRzSGVscGVyLmdldEFwcGx5UGFyYWdyYXBoU3R5bGVDb21tYW5kKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBwYXJhZ3JhcGhTdHlsZSwgdGhpcy50YXJnZXRzKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHNhdmVBcHBseUVsZW1lbnRTdHlsZVRvSGlzdG9yeShjdXJyZW50OiBFbGVtZW50TW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLnNlc3Npb24ubW9kZWwuZWxlbWVudHMuZmluZCh4ID0+IHguaW5zZXJ0SW5kZXggPT09IGN1cnJlbnQuaW5zZXJ0SW5kZXgpO1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEFwcGx5RWxlbWVudFN0eWxlKHByZXZpb3VzLCBjdXJyZW50KTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0QXBwbHlFbGVtZW50U3R5bGVDb21tYW5kKGN1cnJlbnQsIHRoaXMudGFyZ2V0cykpO1xuICAgIH1cblxuICAgIHNhdmVBZGROdW1iZXJpbmdUb0hpc3RvcnkodGVtcGxhdGVMZXZlbHM6IE51bWJlcmluZ0xldmVsTW9kZWxbXSwgc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaHMgPSBJbmRleGVkRWxlbWVudEhlbHBlci5zbGljZVNlY3Rpb24odGhpcy5zZXNzaW9uLm1vZGVsLnBhcmFncmFwaHMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoc0RlZXBDb3B5ID0gcGFyYWdyYXBocy5tYXAoXG4gICAgICAgICAgICB4ID0+IG5ldyBQYXJhZ3JhcGhNb2RlbCh7IGluc2VydEluZGV4OiB4Lmluc2VydEluZGV4LCBwYXJhZ3JhcGhTdHlsZTogbmV3IFBhcmFncmFwaFN0eWxlTW9kZWwoeyAuLi54LnBhcmFncmFwaFN0eWxlIH0pIH0pXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJlbW92ZWROdW1iZXJpbmdJZHMgPSBbLi4ubmV3IFNldChwYXJhZ3JhcGhzLm1hcCh4ID0+IHgucGFyYWdyYXBoU3R5bGUubnVtYmVyaW5nSWQpKV07XG4gICAgICAgIGNvbnN0IG51bWJlcmluZ3MgPSB0aGlzLnNlc3Npb24uZ2VuZXJhbFByb3BlcnRpZXMubnVtYmVyaW5ncy5maWx0ZXIoeCA9PiByZW1vdmVkTnVtYmVyaW5nSWRzLmluY2x1ZGVzKHgubnVtYmVyaW5nSWQpKTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hBZGROdW1iZXJpbmcoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRlbXBsYXRlTGV2ZWxzLCBwYXJhZ3JhcGhzRGVlcENvcHksIG51bWJlcmluZ3MpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFNhdmVDb21tYW5kc0hlbHBlci5nZXRBZGROdW1iZXJpbmdDb21tYW5kKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0ZW1wbGF0ZUxldmVscywgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgc2F2ZVJlbW92ZU51bWJlcmluZ1RvSGlzdG9yeShzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBocyA9IEluZGV4ZWRFbGVtZW50SGVscGVyLnNsaWNlU2VjdGlvbih0aGlzLnNlc3Npb24ubW9kZWwucGFyYWdyYXBocywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhzRGVlcENvcHkgPSBwYXJhZ3JhcGhzLm1hcChcbiAgICAgICAgICAgIHggPT4gbmV3IFBhcmFncmFwaE1vZGVsKHsgaW5zZXJ0SW5kZXg6IHguaW5zZXJ0SW5kZXgsIHBhcmFncmFwaFN0eWxlOiBuZXcgUGFyYWdyYXBoU3R5bGVNb2RlbCh7IC4uLngucGFyYWdyYXBoU3R5bGUgfSkgfSlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZE51bWJlcmluZ0lkcyA9IFsuLi5uZXcgU2V0KHBhcmFncmFwaHMubWFwKHggPT4geC5wYXJhZ3JhcGhTdHlsZS5udW1iZXJpbmdJZCkpXTtcbiAgICAgICAgY29uc3QgbnVtYmVyaW5ncyA9IHRoaXMuc2Vzc2lvbi5nZW5lcmFsUHJvcGVydGllcy5udW1iZXJpbmdzLmZpbHRlcih4ID0+IHJlbW92ZWROdW1iZXJpbmdJZHMuaW5jbHVkZXMoeC5udW1iZXJpbmdJZCkpO1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaFJlbW92ZU51bWJlcmluZ3Moc3RhcnRJbmRleCwgZW5kSW5kZXgsIG51bWJlcmluZ3MsIHBhcmFncmFwaHNEZWVwQ29weSk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldFJlbW92ZU51bWJlcmluZ3NDb21tYW5kKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNhdmVBcHBseUltYWdlU3R5bGVUb0hpc3RvcnkoaW1hZ2U6IEltYWdlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLnNlc3Npb24ubW9kZWwuaW1hZ2VzLmZpbmQoeCA9PiB4Lmluc2VydEluZGV4ID09PSBpbWFnZS5pbnNlcnRJbmRleCk7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoQXBwbHlJbWFnZVN0eWxlKHByZXZpb3VzLCBpbWFnZSk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoXG4gICAgICAgICAgICBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0QXBwbHlJbWFnZVN0eWxlQ29tbWFuZChpbWFnZS5oZWlnaHQsIGltYWdlLndpZHRoLCBpbWFnZS5pbnNlcnRJbmRleCwgdGhpcy50YXJnZXRzKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2F2ZVJlcGxhY2VUb0hpc3RvcnkocmFuZ2U6IFJhbmdlLCBtb2RlbDogUmVwbGFjZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc3RvcmVNb2RlbCA9IHRoaXMuY3JlYXRlUmVzdG9yZUZyb21TbGljZShyYW5nZS5zdGFydC5yb3csIHJhbmdlLnN0YXJ0LmNvbHVtbiwgcmFuZ2UuZW5kLnJvdywgcmFuZ2UuZW5kLmNvbHVtbik7XG4gICAgICAgIGlmIChtb2RlbC5pbnNlcnRQYXJhZ3JhcGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgc3RhcnRJbmRleCwgY291bnQgfSA9IHRoaXMuaGlzdG9yeS5nZXREZWxldGVEYXRhRm9ySW5zZXJ0UGFyYWdyYXBocyhcbiAgICAgICAgICAgICAgICBDb250ZW50SGVscGVyLmdldENvbnRlbnRGcm9tSW5zZXJ0UGFyYWdyYXBoKG1vZGVsLmluc2VydFBhcmFncmFwaCksXG4gICAgICAgICAgICAgICAgbW9kZWwuaW5zZXJ0UGFyYWdyYXBoLFxuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5tb2RlbC5wYXJhZ3JhcGhzXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmVzdG9yZU1vZGVsLnN0YXJ0SW5kZXggPSBzdGFydEluZGV4O1xuICAgICAgICAgICAgcmVzdG9yZU1vZGVsLmVuZEluZGV4ID0gc3RhcnRJbmRleCArIGNvdW50IC0gMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc3RvcmVNb2RlbC5lbmRJbmRleCA9IHJlc3RvcmVNb2RlbC5zdGFydEluZGV4ICsgKG1vZGVsLmluc2VydFRleHQ/LnRleHQubGVuZ3RoID8/IDEpOyAvLyB0aGlzIGlzIHRvIHJlc3RvcmUgaW4gcmFuZ2Ugd2l0aCBkZWxldGluZy9yZXBsYWNpbmcgY29udGVudCB3aXRoaW5cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaFJlcGxhY2UocmVzdG9yZU1vZGVsLCBtb2RlbCk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldFJlcGxhY2VDb21tYW5kKG1vZGVsLCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVJlc3RvcmVGcm9tU2xpY2UocGFyYWdyYXBoU3RhcnQ6IG51bWJlciwgaW5kZXhJblN0YXJ0OiBudW1iZXIsIHBhcmFncmFwaEVuZDogbnVtYmVyLCBpbmRleEluRW5kOiBudW1iZXIpOiBSZXN0b3JlTW9kZWwge1xuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhUb0RvY3VtZW50SW5kZXgodGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHBhcmFncmFwaFN0YXJ0LCBpbmRleEluU3RhcnQpO1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoVG9Eb2N1bWVudEluZGV4KHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBwYXJhZ3JhcGhFbmQsIGluZGV4SW5FbmQpIC0gMTtcbiAgICAgICAgY29uc3QgdGV4dCA9IHRoaXMuc2Vzc2lvbi5tb2RlbC5jb250ZW50LnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4ICsgMSk7XG4gICAgICAgIGNvbnN0IGZvcm1hdHMgPSBGb3JtYXRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC5mb3JtYXRzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaHMgPSBJbmRleGVkRWxlbWVudEhlbHBlci5zbGljZVNlY3Rpb24odGhpcy5zZXNzaW9uLm1vZGVsLnBhcmFncmFwaHMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KS5tYXAoXG4gICAgICAgICAgICB4ID0+IG5ldyBQYXJhZ3JhcGhNb2RlbCh4KVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBpbWFnZXMgPSBJbmRleGVkRWxlbWVudEhlbHBlci5zbGljZVNlY3Rpb24odGhpcy5zZXNzaW9uLm1vZGVsLmltYWdlcywgc3RhcnRJbmRleCwgZW5kSW5kZXgpLm1hcCh4ID0+IG5ldyBJbWFnZU1vZGVsKHgpKTtcbiAgICAgICAgY29uc3QgdGFibGVzID0gSW5kZXhlZEVsZW1lbnRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC50YWJsZXMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KS5tYXAoeCA9PiBuZXcgVGFibGVNb2RlbCh4KSk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gSW5kZXhlZEVsZW1lbnRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC5lbGVtZW50cywgc3RhcnRJbmRleCwgZW5kSW5kZXgpLm1hcChcbiAgICAgICAgICAgIHggPT4gbmV3IEVsZW1lbnRNb2RlbCh7IC4uLngsIGlkOiAwLCBndWlkOiAnJyB9KVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBicmVha3MgPSBJbmRleGVkRWxlbWVudEhlbHBlci5zbGljZVNlY3Rpb24odGhpcy5zZXNzaW9uLm1vZGVsLmJyZWFrcywgc3RhcnRJbmRleCwgZW5kSW5kZXgpLm1hcCh4ID0+IG5ldyBCcmVha01vZGVsKHgpKTtcbiAgICAgICAgY29uc3QgdGFicyA9IEluZGV4ZWRFbGVtZW50SGVscGVyLnNsaWNlU2VjdGlvbih0aGlzLnNlc3Npb24ubW9kZWwudGFicywgc3RhcnRJbmRleCwgZW5kSW5kZXgpLm1hcCh4ID0+IG5ldyBUYWJNb2RlbCh4KSk7XG4gICAgICAgIGNvbnN0IGxpbmtzID0gTGlua0hlbHBlci5zbGljZVNlY3Rpb24odGhpcy5zZXNzaW9uLm1vZGVsLmxpbmtzLCBzdGFydEluZGV4LCBlbmRJbmRleCkubWFwKHggPT4gbmV3IExpbmtNb2RlbCh4KSk7XG4gICAgICAgIHJldHVybiBuZXcgUmVzdG9yZU1vZGVsKHsgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRleHQsIGZvcm1hdHMsIHBhcmFncmFwaHMsIGltYWdlcywgdGFibGVzLCBlbGVtZW50cywgYnJlYWtzLCB0YWJzLCBsaW5rcyB9KTtcbiAgICB9XG5cbiAgICBjcmVhdGVDdXN0b21FbGVtZW50KGRhdGE6IEVsZW1lbnREYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5zZXJ0SW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleChcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQucm93LFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQuY29sdW1uXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGluc2VydEVsZW1lbnQgPSBuZXcgSW5zZXJ0RWxlbWVudE1vZGVsKHsgZWxlbWVudDogbmV3IEVsZW1lbnRNb2RlbCh7IC4uLmRhdGEsIGluc2VydEluZGV4IH0pIH0pO1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUJ5KG5ldyBSZXBsYWNlTW9kZWwoeyBpbnNlcnRFbGVtZW50IH0pKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2F2ZUluc2VydEVsZW1lbnRUb0hpc3RvcnkoaW5zZXJ0RWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGVuZFBvaW50ID0gdGhpcy5zZXNzaW9uLmluc2VydEVsZW1lbnQodGhpcy5zZWxlY3Rpb24uY3Vyc29yLCBkYXRhKTtcbiAgICAgICAgdGhpcy5vbkRvY3VtZW50Q2hhbmdlKG5ldyBSYW5nZSh0aGlzLnNlbGVjdGlvbi5jdXJzb3IsIGVuZFBvaW50KSk7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICByZW1vdmVTZWxlY3RlZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2F2ZVJlbW92ZVRvSGlzdG9yeSh0aGlzLnNlbGVjdGlvbi5yYW5nZSk7XG4gICAgICAgIHRoaXMucmVtb3ZlQ3VzdG9tRWxlbWVudHNEYXRhKCk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmUodGhpcy5zZWxlY3Rpb24ucmFuZ2UpO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG5cbiAgICByZW1vdmVDdXN0b21FbGVtZW50c0RhdGEoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleChcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQucm93LFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQuY29sdW1uXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID1cbiAgICAgICAgICAgIENvbnRlbnRIZWxwZXIucGFyYWdyYXBoVG9Eb2N1bWVudEluZGV4KFxuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLmVuZC5yb3csXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2UuZW5kLmNvbHVtblxuICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gSW5kZXhlZEVsZW1lbnRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC5lbGVtZW50cywgc3RhcnRJbmRleCwgZW5kSW5kZXgpLnNsaWNlKCk7XG4gICAgICAgIGlmIChlbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5yZW1vdmVDdXN0b21FbGVtZW50c0RhdGEoZWxlbWVudHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25JbnB1dCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGV4dCA9IHRoaXMudGV4dElucHV0LmdldEluc2VydFRleHQoKTtcbiAgICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBpc0VtcHR5TnVtYmVyaW5nUGFyYWdyYXBoID0gdGhpcy5pc0VtcHR5TnVtYmVyaW5nUGFyYWdyYXBoKHRoaXMuc2VsZWN0aW9uLmN1cnNvci5yb3cpO1xuICAgICAgICBpZiAodGV4dCA9PT0gTkVXX0xJTkVfTUFSS1VQICYmIHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkgJiYgaXNFbXB0eU51bWJlcmluZ1BhcmFncmFwaCkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVOdW1iZXJpbmdzRnJvbVBhcmFncmFwaHMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0KHRleHQpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvTWFpblZpZXcoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQ3V0KGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRTZWxlY3RlZFRleHQoKTtcbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnNldENsaXBib2FyZERhdGEoZGF0YSk7XG4gICAgICAgIHRoaXMuY2xpcGJvYXJkLmNvcHkoZGF0YSk7XG4gICAgICAgIHRoaXMuY3V0KCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ3Vyc29ySW50b01haW5WaWV3KCk7XG4gICAgfVxuXG4gICAgb25Db3B5KGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRTZWxlY3RlZFRleHQoKTtcbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnNldENsaXBib2FyZERhdGEoZGF0YSk7XG4gICAgICAgIHRoaXMuY2xpcGJvYXJkLmNvcHkoZGF0YSk7XG4gICAgfVxuXG4gICAgb25QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMudGV4dElucHV0LmdldENsaXBib2FyZERhdGEoZXZlbnQpO1xuICAgICAgICB0aGlzLnBhc3RlRGF0YShkYXRhKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRSZXNpemVMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMucmVyZW5kZXJSZXNpemUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVzdHJveVJlc2l6ZUxpc3RlbmVyKCk6IHZvaWQge1xuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5yZXJlbmRlclJlc2l6ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXJlbmRlck1hcmtlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5sb29wLnNjaGVkdWxlKHsgbWFya2VyOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVyZW5kZXJSZXNpemUgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMubWFpblJlbmRlcmVyLm9uUmVzaXplKHRydWUpO1xuICAgIH07XG5cbiAgICBvbkJsdXIoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy50ZXh0SW5wdXQuaXNGb2N1c2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRleHRJbnB1dC5pc0ZvY3VzZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5oaWRlQ3Vyc29yKCk7XG4gICAgfVxuXG4gICAgb25Gb2N1cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudGV4dElucHV0LmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uYmx1cigpO1xuICAgICAgICB0aGlzLnRleHRJbnB1dC5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNob3dDdXJzb3IoKTtcbiAgICB9XG5cbiAgICBvbk1vdXNlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3VzdG9tRWxlbWVudCA9IHRoaXMuc2V0Q3VycmVudFNlc3Npb24oZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgaWYgKGN1c3RvbUVsZW1lbnQgJiYgY3VzdG9tRWxlbWVudC50YWdOYW1lICE9PSB0aGlzLnRhYmxlQ2VsbFRhZ05hbWUgJiYgY3VzdG9tRWxlbWVudC50YWdOYW1lICE9PSB0aGlzLmVkZ2VFbGVtZW50VGFnTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0N1c3RvbUNvbXBvbmVudChjdXN0b21FbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmJsdXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uTGVmdENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUVsZW1lbnQgPSB0aGlzLnNldEN1cnJlbnRTZXNzaW9uKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgIGlmIChjdXN0b21FbGVtZW50ICYmIGN1c3RvbUVsZW1lbnQudGFnTmFtZSAhPT0gdGhpcy50YWJsZUNlbGxUYWdOYW1lICYmIGN1c3RvbUVsZW1lbnQudGFnTmFtZSAhPT0gdGhpcy5lZGdlRWxlbWVudFRhZ05hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNDdXN0b21Db21wb25lbnQoY3VzdG9tRWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXNVc2luZ01pZHBvaW50KGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVTZWxlY3Rpb24ocG9zaXRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IocG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGlmIChldmVudC5jdHJsS2V5KSB7XG4gICAgICAgICAgICBjb25zdCBsaW5rID0gdGhpcy5nZXRMaW5rTW9kZWwoZXZlbnQpO1xuICAgICAgICAgICAgaWYgKGxpbmspIHtcbiAgICAgICAgICAgICAgICB3aW5kb3cub3BlbihsaW5rLmxpbmspO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tb3VzZUhhbmRsZXIuc3RhcnRNb3VzZVByZXNzKHRoaXMpO1xuICAgIH1cblxuICAgIG9uRG91YmxlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXNFZGdlRWRpdCA9IHRoaXMubWFpblNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5pc0VkaXQ7XG4gICAgICAgIGNvbnN0IGN1c3RvbUVsZW1lbnQgPSB0aGlzLmdldEN1c3RvbUVsZW1lbnQoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgaWYgKGN1c3RvbUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRTZXNzaW9uSWQgPSArY3VzdG9tRWxlbWVudC5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgnZGF0YS1zZXNzaW9uLWlkJykudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnJlZ3VsYXRvclNlcnZpY2Uuc2V0Q3VzdG9tU2Vzc2lvbkFzQ3VycmVudChlbGVtZW50U2Vzc2lvbklkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRNYWluU2Vzc2lvbkFzQ3VycmVudCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1c3RvbUVsZW1lbnQgJiYgY3VzdG9tRWxlbWVudC50YWdOYW1lICE9PSB0aGlzLnRhYmxlQ2VsbFRhZ05hbWUgJiYgY3VzdG9tRWxlbWVudC50YWdOYW1lICE9PSB0aGlzLmVkZ2VFbGVtZW50VGFnTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0N1c3RvbUNvbXBvbmVudChjdXN0b21FbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlc1VzaW5nTWlkcG9pbnQoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG4gICAgICAgIGlmICghaXNFZGdlRWRpdCAmJiB0aGlzLm1haW5TZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMuZWRnZXMuaXNFZGl0KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZUN1cnNvcihwb3NpdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuc2Vzc2lvbi5nZXRXb3JkUmFuZ2UocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VTZWxlY3Rpb24ocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIG9uVHJpcGxlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3VzdG9tRWxlbWVudCA9IHRoaXMuc2V0Q3VycmVudFNlc3Npb24oZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgaWYgKGN1c3RvbUVsZW1lbnQgJiYgY3VzdG9tRWxlbWVudC50YWdOYW1lICE9PSB0aGlzLnRhYmxlQ2VsbFRhZ05hbWUgJiYgY3VzdG9tRWxlbWVudC50YWdOYW1lICE9PSB0aGlzLmVkZ2VFbGVtZW50VGFnTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0N1c3RvbUNvbXBvbmVudChjdXN0b21FbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlc1VzaW5nTWlkcG9pbnQoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbmV3IEN1cnNvclBhcmFncmFwaChwb3NpdGlvbi5yb3csIDApO1xuICAgICAgICBjb25zdCBlbmQgPSBuZXcgQ3Vyc29yUGFyYWdyYXBoKHBvc2l0aW9uLnJvdywgdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLmdldFBhcmFncmFwaENvbnRlbnQocG9zaXRpb24ucm93KS5sZW5ndGgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZVNlbGVjdGlvbihzdGFydCwgZW5kKTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIG9uUXVhZENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUVsZW1lbnQgPSB0aGlzLnNldEN1cnJlbnRTZXNzaW9uKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgIGlmIChjdXN0b21FbGVtZW50ICYmIGN1c3RvbUVsZW1lbnQudGFnTmFtZSAhPT0gdGhpcy50YWJsZUNlbGxUYWdOYW1lICYmIGN1c3RvbUVsZW1lbnQudGFnTmFtZSAhPT0gdGhpcy5lZGdlRWxlbWVudFRhZ05hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNDdXN0b21Db21wb25lbnQoY3VzdG9tRWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RBbGwodGhpcy5zZXNzaW9uLm1vZGVsKTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIG9uTW91c2VXaGVlbChldmVudDogV2hlZWxFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmFjdG9yID0gMC4zNTtcbiAgICAgICAgY29uc3Qgc2Nyb2xsU3BlZWQgPSA0O1xuICAgICAgICBjb25zdCBkZWx0YVkgPSBldmVudC5kZWx0YVkgKiBmYWN0b3IgKiBzY3JvbGxTcGVlZDtcbiAgICAgICAgdGhpcy5tYWluUmVuZGVyZXIuc2Nyb2xsQnkoZGVsdGFZKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgZ2V0TGlua01vZGVsKGV2ZW50OiBNb3VzZUV2ZW50KTogTGlua01vZGVsIHtcbiAgICAgICAgY29uc3QgaXNJbnNpZGVFZGdlID0gdGhpcy5pc0luc2lkZUVkZ2UoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgY29uc3QgaXNFZGdlRWRpdCA9IHRoaXMubWFpblNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5pc0VkaXQ7XG4gICAgICAgIGlmICghaXNJbnNpZGVFZGdlIHx8IGlzRWRnZUVkaXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlc1VzaW5nQm91bmRhcnkoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zZXNzaW9uLmdldExpbmtNb2RlbChwb3NpdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VzdG9tRWxlbWVudCA9IHRoaXMuZ2V0Q3VzdG9tRWxlbWVudChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBzZXNzaW9uSWQgPSArY3VzdG9tRWxlbWVudC5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgnZGF0YS1zZXNzaW9uLWlkJykudmFsdWU7XG4gICAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnJlZ3VsYXRvclNlcnZpY2UuZ2V0U2Vzc2lvbk1vZGVsKHNlc3Npb25JZCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gc2Vzc2lvbi5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlc1VzaW5nQm91bmRhcnkoXG4gICAgICAgICAgICBldmVudC5jbGllbnRYLFxuICAgICAgICAgICAgZXZlbnQuY2xpZW50WSxcbiAgICAgICAgICAgIGN1c3RvbUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHNlc3Npb24uc2Vzc2lvbi5nZXRMaW5rTW9kZWwocG9zaXRpb24pO1xuICAgIH1cblxuICAgIHNldEN1cnJlbnRTZXNzaW9uKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgY29uc3QgY3VzdG9tRWxlbWVudCA9IHRoaXMuZ2V0Q3VzdG9tRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgY29uc3QgaXNJbnNpZGVFZGdlID0gdGhpcy5pc0luc2lkZUVkZ2UoY3VzdG9tRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGlzRWRnZUVkaXQgPSB0aGlzLm1haW5TZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMuZWRnZXMuaXNFZGl0O1xuICAgICAgICBpZiAoIWN1c3RvbUVsZW1lbnQgfHwgKCFpc0VkZ2VFZGl0ICYmIGlzSW5zaWRlRWRnZSkpIHtcbiAgICAgICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRNYWluU2Vzc2lvbkFzQ3VycmVudCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tRWxlbWVudFRhZ05hbWVzLmluY2x1ZGVzKGN1c3RvbUVsZW1lbnQ/LnRhZ05hbWUpID8gY3VzdG9tRWxlbWVudCA6IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbGVtZW50U2Vzc2lvbklkID0gK2N1c3RvbUVsZW1lbnQuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oJ2RhdGEtc2Vzc2lvbi1pZCcpLnZhbHVlO1xuICAgICAgICB0aGlzLnJlZ3VsYXRvclNlcnZpY2Uuc2V0Q3VzdG9tU2Vzc2lvbkFzQ3VycmVudChlbGVtZW50U2Vzc2lvbklkKTtcbiAgICAgICAgcmV0dXJuIGN1c3RvbUVsZW1lbnQudGFnTmFtZSAhPT0gdGhpcy5lZGdlRWxlbWVudFRhZ05hbWUgPyBjdXN0b21FbGVtZW50IDogbnVsbDtcbiAgICB9XG5cbiAgICBnZXRDdXN0b21FbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQudGFnTmFtZSA9PT0gdGhpcy5wYXJlbnRUYWdOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1c3RvbUVsZW1lbnRUYWdOYW1lcy5pbmNsdWRlcyhlbGVtZW50LnRhZ05hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEN1c3RvbUVsZW1lbnQoZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzSW5zaWRlRWRnZShlbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5nZXRQYXJlbnRFZGdlKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGdldFBhcmVudEVkZ2UoZWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsKTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQudGFnTmFtZSA9PT0gdGhpcy5wYXJlbnRUYWdOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LnRhZ05hbWUgPT09IHRoaXMuZWRnZUVsZW1lbnRUYWdOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFBhcmVudEVkZ2UoZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHN0cmluZyBvZiB0ZXh0IGN1cnJlbnRseSBoaWdobGlnaHRlZC5cbiAgICAgKi9cbiAgICBnZXRTZWxlY3RlZFRleHQoKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uUmFuZ2UgPSB0aGlzLnNlbGVjdGlvbi5zZWxlY3RlZFJhbmdlO1xuICAgICAgICBpZiAoc2VsZWN0aW9uUmFuZ2UuaXNFbXB0eSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoUG9zaXRpb25Ub0RvY3VtZW50SW5kZXgodGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIHNlbGVjdGlvblJhbmdlLnN0YXJ0KTtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFBvc2l0aW9uVG9Eb2N1bWVudEluZGV4KHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBzZWxlY3Rpb25SYW5nZS5lbmQpO1xuICAgICAgICBsZXQgZWxlbWVudEluZGV4ZXM6IG51bWJlcltdID0gW107XG4gICAgICAgIENvbnRlbnRIZWxwZXIuc2V0SW5kZXhlc0VsZW1lbnRzSW5JbnRlcnZhbCh0aGlzLnNlc3Npb24ubW9kZWwuYnJlYWtzLCBlbGVtZW50SW5kZXhlcywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICBDb250ZW50SGVscGVyLnNldEluZGV4ZXNFbGVtZW50c0luSW50ZXJ2YWwodGhpcy5zZXNzaW9uLm1vZGVsLnRhYmxlcywgZWxlbWVudEluZGV4ZXMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgQ29udGVudEhlbHBlci5zZXRJbmRleGVzRWxlbWVudHNJbkludGVydmFsKHRoaXMuc2Vzc2lvbi5tb2RlbC5pbWFnZXMsIGVsZW1lbnRJbmRleGVzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIENvbnRlbnRIZWxwZXIuc2V0SW5kZXhlc0VsZW1lbnRzSW5JbnRlcnZhbCh0aGlzLnNlc3Npb24ubW9kZWwuZWxlbWVudHMsIGVsZW1lbnRJbmRleGVzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIENvbnRlbnRIZWxwZXIuc2V0SW5kZXhlc0VsZW1lbnRzSW5JbnRlcnZhbCh0aGlzLnNlc3Npb24ubW9kZWwudGFicywgZWxlbWVudEluZGV4ZXMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgZWxlbWVudEluZGV4ZXMuc29ydCgoYSwgYikgPT4gYiAtIGEpO1xuICAgICAgICBsZXQgdGV4dEludGVydmFsID0gdGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLmdldFRleHRSYW5nZShzZWxlY3Rpb25SYW5nZSk7XG4gICAgICAgIGVsZW1lbnRJbmRleGVzLmZvckVhY2goeCA9PiB7XG4gICAgICAgICAgICB0ZXh0SW50ZXJ2YWwgPSB0ZXh0SW50ZXJ2YWwuc2xpY2UoMCwgeCkgKyB0ZXh0SW50ZXJ2YWwuc2xpY2UoeCArIDEpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGV4dEludGVydmFsO1xuICAgIH1cblxuICAgIGluaXRNYWluU2Vzc2lvbigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFnZVdpZHRoID0gdGhpcy5jdXN0b21QYWdlV2lkdGggPz8gdGhpcy5tb2RlbC5wYWdlV2lkdGg7XG4gICAgICAgIHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUubWF4V2lkdGggPSBgJHtwYWdlV2lkdGh9cHhgO1xuICAgICAgICBjb25zdCBzY2FsaW5nUmF0aW8gPSB0aGlzLmN1c3RvbVBhZ2VXaWR0aCA/IFNjYWxpbmdIZWxwZXIuZ2V0UmF0aW8odGhpcy5jdXN0b21QYWdlV2lkdGgsIHRoaXMubW9kZWwucGFnZVdpZHRoKSA6IDE7XG4gICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5hZGRNYWluU2Vzc2lvbih0aGlzLm1vZGVsLCBwYWdlV2lkdGgsIHNjYWxpbmdSYXRpbywgdGhpcy5jb250YWluZXIpO1xuICAgIH1cblxuICAgIG9uU2VsZWN0aW9uQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlc3Npb24uYXBwbHlUb29sYmFyU3R5bGVzKCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlU2VsZWN0aW9uKHRoaXMuc2VsZWN0aW9uLnNlbGVjdGVkUmFuZ2UpO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2Uuc2V0SGFzU2VsZWN0aW9uKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KTtcbiAgICAgICAgdGhpcy5yZXJlbmRlck1hcmtlcigpO1xuICAgIH1cblxuICAgIGVuYWJsZVNlbGVjdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3VzdG9tRWxlbWVudCA9IHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgW2RhdGEtc2Vzc2lvbi1pZD1cIiR7dGhpcy5zZXNzaW9uLnNlc3Npb25JZH1cIl1gKTtcbiAgICAgICAgaWYgKGN1c3RvbUVsZW1lbnQudGFnTmFtZSA9PT0gdGhpcy50YWJsZUNlbGxUYWdOYW1lKSB7XG4gICAgICAgICAgICBjb25zdCB0YWJsZVNlc3Npb24gPSB0aGlzLnJlZ3VsYXRvclNlcnZpY2UuZ2V0U2Vzc2lvbih0aGlzLnJlZ3VsYXRvclNlcnZpY2UuY3VycmVudFNlc3Npb24ucGFyZW50U2Vzc2lvbklkKTtcbiAgICAgICAgICAgIGNvbnN0IHRhYmxlID0gdGFibGVTZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMudGFibGVzLmZpbmQoXG4gICAgICAgICAgICAgICAgeCA9PiB4Lmluc3RhbmNlLnNlc3Npb25JZCA9PT0gdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLmN1cnJlbnRTZXNzaW9uLnBhcmVudFNlc3Npb25JZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRhYmxlLmluc3RhbmNlLnRhYmxlU2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uZW5hYmxlU2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuY3Vyc29yTGF5ZXIuc2hvd0N1cnNvcigpO1xuICAgIH1cblxuICAgIG9uSG90S2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2Uua2V5RG93bihldmVudCk7XG4gICAgfVxuXG4gICAgb25QcmludCgpOiB2b2lkIHtcbiAgICAgICAgUHJpbnRIZWxwZXIucHJpbnREb2N1bWVudCh0aGlzLm1haW5TZXNzaW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRG9jdW1lbnRDaGFuZ2UgPSAocmFuZ2U6IFJhbmdlKTogdm9pZCA9PiB7XG4gICAgICAgIGxldCBsYXN0Um93ID0gcmFuZ2Uuc3RhcnQucm93ID09PSByYW5nZS5lbmQucm93ID8gcmFuZ2UuZW5kLnJvdyA6IEluZmluaXR5O1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUxpbmVzKHJhbmdlLnN0YXJ0LnJvdywgbGFzdFJvdyk7XG5cbiAgICAgICAgLy8gVXBkYXRlIGN1cnNvciBiZWNhdXNlIHRhYiBjaGFyYWN0ZXJzIGNhbiBpbmZsdWVuY2UgdGhlIGN1cnNvciBwb3NpdGlvbi5cbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBmb2N1c0N1c3RvbUNvbXBvbmVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleCA9ICtlbGVtZW50LmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCdkYXRhLWluc2VydC1pbmRleCcpLnZhbHVlO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPVxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMuaW1hZ2VzLmZpbmQoeCA9PiB4Lmluc3RhbmNlLmluc2VydEluZGV4ID09PSBpbmRleCkgPz9cbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5jdXN0b21Db21wb25lbnRzLnRhYmxlcy5maW5kKHggPT4geC5pbnN0YW5jZS5pbnNlcnRJbmRleCA9PT0gaW5kZXgpID8/XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5jdXN0b21FbGVtZW50cy5maW5kKHggPT4geC5pbnN0YW5jZS5pbnNlcnRJbmRleCA9PT0gaW5kZXgpO1xuICAgICAgICBpZiAoIWNvbXBvbmVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnNlc3Npb24uZGlzcGxheURhdGEuaW5kZXhUb1Bvc2l0aW9uKGluZGV4LCAwKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24uZm9jdXMoY29tcG9uZW50LCBwb3NpdGlvbik7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRW1wdHlOdW1iZXJpbmdQYXJhZ3JhcGgocGFyYWdyYXBoSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjdXJyZW50TGluZSA9IHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5nZXRQYXJhZ3JhcGhDb250ZW50KHBhcmFncmFwaEluZGV4KTtcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRMaW5lLmxlbmd0aCA9PT0gMCAmJiB0aGlzLnNlc3Npb24ubW9kZWwucGFyYWdyYXBoc1twYXJhZ3JhcGhJbmRleF0ucGFyYWdyYXBoU3R5bGUubnVtYmVyaW5nSWQgIT09IG51bGw7XG4gICAgfVxuXG4gICAgc2Nyb2xsQ3Vyc29ySW50b01haW5WaWV3KG9mZnNldD86IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZXNzaW9uICE9PSB0aGlzLm1haW5TZXNzaW9uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tYWluUmVuZGVyZXIuc2Nyb2xsQ3Vyc29ySW50b1ZpZXcobnVsbCwgb2Zmc2V0KTtcbiAgICB9XG5cbiAgICBjaGFuZ2VkVGFibGVTaXplKGluc2VydEluZGV4OiBudW1iZXIsIHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNlc3Npb24gPSB0aGlzLnJlZ3VsYXRvclNlcnZpY2UuZ2V0U2Vzc2lvbihzZXNzaW9uSWQpO1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGggPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocywgaW5zZXJ0SW5kZXgpLnJvdztcbiAgICAgICAgc2Vzc2lvbi5kaXNwbGF5RGF0YS5yZXNldEFsbE51bWJlcmluZ0luZm8ocGFyYWdyYXBoKTtcbiAgICAgICAgc2Vzc2lvbi5kaXNwbGF5RGF0YS51cGRhdGVOZXh0TGluZUluZGV4ZXMocGFyYWdyYXBoLCBwYXJhZ3JhcGgpO1xuICAgICAgICBzZXNzaW9uLmRpc3BsYXlEYXRhLnVwZGF0ZU51bWJlcmluZ3NEYXRhT25DaGFuZ2UocGFyYWdyYXBoICsgMSk7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG5cbiAgICBpbnNlcnRUYWJsZVJvd3MoaW5zZXJ0SW5kZXg6IG51bWJlciwgcm93c0NvdW50OiBudW1iZXIsIHRhcmdldEluZGV4OiBudW1iZXIsIGluaGVyaXRJbmRleDogbnVtYmVyLCBzZXNzaW9uSWQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnJlZ3VsYXRvclNlcnZpY2Uuc2V0Q3VzdG9tU2Vzc2lvbkFzQ3VycmVudChzZXNzaW9uSWQpO1xuICAgICAgICBjb25zdCBiZWZvcmVUYWJsZSA9IENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoSW5kZXgodGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIGluc2VydEluZGV4KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IoYmVmb3JlVGFibGUpO1xuICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMuc2Vzc2lvbi5tb2RlbC50YWJsZXMuZmluZCh4ID0+IHguaW5zZXJ0SW5kZXggPT09IGluc2VydEluZGV4KTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hJbnNlcnRUYWJsZVJvd3MoaW5zZXJ0SW5kZXgsIHJvd3NDb3VudCwgdGFyZ2V0SW5kZXgsIGluaGVyaXRJbmRleCwgdGFibGUpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFxuICAgICAgICAgICAgU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFRhYmxlUm93c0NvbW1hbmQocm93c0NvdW50LCBpbmhlcml0SW5kZXgsIGluc2VydEluZGV4LCB0YXJnZXRJbmRleCwgdGhpcy50YXJnZXRzKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0VGFibGVSb3dzKGluc2VydEluZGV4LCByb3dzQ291bnQsIHRhcmdldEluZGV4LCBpbmhlcml0SW5kZXgpO1xuICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUoaW5zZXJ0SW5kZXgsIHNlc3Npb25JZCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0VGFibGVDb2x1bW5zKGluc2VydEluZGV4OiBudW1iZXIsIGNvbHVtbnNDb3VudDogbnVtYmVyLCB0YXJnZXRJbmRleDogbnVtYmVyLCBpbmhlcml0SW5kZXg6IG51bWJlciwgc2Vzc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLnNldEN1c3RvbVNlc3Npb25Bc0N1cnJlbnQoc2Vzc2lvbklkKTtcbiAgICAgICAgY29uc3QgYmVmb3JlVGFibGUgPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLCBpbnNlcnRJbmRleCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlQ3Vyc29yKGJlZm9yZVRhYmxlKTtcbiAgICAgICAgY29uc3QgdGFibGUgPSB0aGlzLnNlc3Npb24ubW9kZWwudGFibGVzLmZpbmQoeCA9PiB4Lmluc2VydEluZGV4ID09PSBpbnNlcnRJbmRleCk7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoSW5zZXJ0VGFibGVDb2x1bW5zKGluc2VydEluZGV4LCBjb2x1bW5zQ291bnQsIHRhcmdldEluZGV4LCBpbmhlcml0SW5kZXgsIHRhYmxlKTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChcbiAgICAgICAgICAgIFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRUYWJsZUNvbHVtbnNDb21tYW5kKGNvbHVtbnNDb3VudCwgaW5oZXJpdEluZGV4LCBpbnNlcnRJbmRleCwgdGFyZ2V0SW5kZXgsIHRoaXMudGFyZ2V0cylcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydFRhYmxlQ29sdW1ucyhpbnNlcnRJbmRleCwgY29sdW1uc0NvdW50LCB0YXJnZXRJbmRleCwgaW5oZXJpdEluZGV4KTtcbiAgICAgICAgdGhpcy5jaGFuZ2VkVGFibGVTaXplKGluc2VydEluZGV4LCBzZXNzaW9uSWQpO1xuICAgIH1cblxuICAgIHJlbW92ZVRhYmxlUm93cyhpbnNlcnRJbmRleDogbnVtYmVyLCBzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIsIHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRDdXN0b21TZXNzaW9uQXNDdXJyZW50KHNlc3Npb25JZCk7XG4gICAgICAgIGNvbnN0IGJlZm9yZVRhYmxlID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleCh0aGlzLnNlc3Npb24uZGlzcGxheURhdGEucGFyYWdyYXBocywgaW5zZXJ0SW5kZXgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZUN1cnNvcihiZWZvcmVUYWJsZSk7XG4gICAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5zZXNzaW9uLm1vZGVsLnRhYmxlcy5maW5kKHggPT4geC5pbnNlcnRJbmRleCA9PT0gaW5zZXJ0SW5kZXgpO1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaFJlbW92ZVRhYmxlUm93cyhpbnNlcnRJbmRleCwgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRhYmxlKTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVtb3ZlVGFibGVSb3dzQ29tbWFuZChzdGFydEluZGV4LCBlbmRJbmRleCwgaW5zZXJ0SW5kZXgsIHRoaXMudGFyZ2V0cykpO1xuICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlVGFibGVSb3dzKGluc2VydEluZGV4LCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZShpbnNlcnRJbmRleCwgc2Vzc2lvbklkKTtcbiAgICB9XG5cbiAgICByZW1vdmVUYWJsZUNvbHVtbnMoaW5zZXJ0SW5kZXg6IG51bWJlciwgc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyLCBzZXNzaW9uSWQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnJlZ3VsYXRvclNlcnZpY2Uuc2V0Q3VzdG9tU2Vzc2lvbkFzQ3VycmVudChzZXNzaW9uSWQpO1xuICAgICAgICBjb25zdCBiZWZvcmVUYWJsZSA9IENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoSW5kZXgodGhpcy5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMsIGluc2VydEluZGV4KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IoYmVmb3JlVGFibGUpO1xuICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMuc2Vzc2lvbi5tb2RlbC50YWJsZXMuZmluZCh4ID0+IHguaW5zZXJ0SW5kZXggPT09IGluc2VydEluZGV4KTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hSZW1vdmVUYWJsZUNvbHVtbnMoaW5zZXJ0SW5kZXgsIHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0YWJsZSk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoXG4gICAgICAgICAgICBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVtb3ZlVGFibGVDb2x1bW5zQ29tbWFuZChzdGFydEluZGV4LCBlbmRJbmRleCwgaW5zZXJ0SW5kZXgsIHRoaXMudGFyZ2V0cylcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZVRhYmxlQ29sdW1ucyhpbnNlcnRJbmRleCwgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUoaW5zZXJ0SW5kZXgsIHNlc3Npb25JZCk7XG4gICAgfVxuXG4gICAgcmVzaXplVGFibGVDb2x1bW5zKHJlc2l6ZVRhYmxlQ29sdW1uczogUmVzaXplVGFibGVDb2x1bW5zTW9kZWwsIHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRDdXN0b21TZXNzaW9uQXNDdXJyZW50KHNlc3Npb25JZCk7XG4gICAgICAgIGNvbnN0IGJlZm9yZVRhYmxlID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleChcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLFxuICAgICAgICAgICAgcmVzaXplVGFibGVDb2x1bW5zLmluc2VydEluZGV4XG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlQ3Vyc29yKGJlZm9yZVRhYmxlKTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hSZXNpemVUYWJsZUNvbHVtbnMocmVzaXplVGFibGVDb2x1bW5zKTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVzaXplVGFibGVDb2x1bW5zQ29tbWFuZChyZXNpemVUYWJsZUNvbHVtbnMsIHRoaXMudGFyZ2V0cykpO1xuICAgICAgICB0aGlzLnNlc3Npb24ucmVzaXplVGFibGVDb2x1bW5zKHJlc2l6ZVRhYmxlQ29sdW1ucyk7XG4gICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZShyZXNpemVUYWJsZUNvbHVtbnMuaW5zZXJ0SW5kZXgsIHNlc3Npb25JZCk7XG4gICAgfVxuXG4gICAgb25Nb3VzZVByZXNzZWRNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlc1VzaW5nTWlkcG9pbnQoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG4gICAgICAgIGNvbnN0IGN1cnNvciA9IHRoaXMuc2VsZWN0aW9uLmN1cnNvcjtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZVNlbGVjdGlvbihwb3NpdGlvbik7XG4gICAgICAgIGlmIChjdXJzb3IuY29sdW1uICE9PSB0aGlzLnNlbGVjdGlvbi5jdXJzb3IuY29sdW1uIHx8IGN1cnNvci5yb3cgIT09IHRoaXMuc2VsZWN0aW9uLmN1cnNvci5yb3cpIHtcbiAgICAgICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNjcm9sbEN1cnNvckludG9NYWluVmlldygpO1xuICAgIH1cblxuICAgIHByb3ZpZGVUZXh0U3R5bGUoY29tcG9uZW50OiBCYXNlTm9kZXJDb21wb25lbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMucmVndWxhdG9yU2VydmljZS5nZXRTZXNzaW9uKGNvbXBvbmVudC5zZXNzaW9uSWQpO1xuICAgICAgICBjb25zdCBmb3JtYXQgPSBzZXNzaW9uLm1vZGVsLmZvcm1hdHMuZmluZCh4ID0+IHguc3RhcnRJbmRleCA8PSBjb21wb25lbnQuaW5zZXJ0SW5kZXggJiYgeC5lbmRJbmRleCA+PSBjb21wb25lbnQuaW5zZXJ0SW5kZXgpO1xuICAgICAgICBjb21wb25lbnQucmVjZWl2ZVN0eWxlKGZvcm1hdC50ZXh0U3R5bGUpO1xuICAgIH1cblxuICAgIHJlY2VpdmVUZXh0U3R5bGVTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5yZWNlaXZlVGV4dFN0eWxlJC5zdWJzY3JpYmUoeCA9PiB0aGlzLnByb3ZpZGVUZXh0U3R5bGUoeCkpO1xuICAgIH1cblxuICAgIHNlYXJjaE9wdGlvblN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnNlYXJjaE9wdGlvbnMkLnN1YnNjcmliZShzZWFyY2hPcHRpb25zID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmluZChzZWFyY2hPcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5zZWFyY2hJdGVyYXRpb24gPSB0aGlzLnVwZGF0ZUNvdW50ZXIoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVwbGFjZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnJlcGxhY2UkLnN1YnNjcmliZShyZXBsYWNlID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZShyZXBsYWNlLnNlYXJjaFZhbHVlLCByZXBsYWNlLnJlcGxhY2VWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2Uuc2VhcmNoSXRlcmF0aW9uID0gdGhpcy51cGRhdGVDb3VudGVyKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldFRleHRTdHlsZXNTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5zZXRUZXh0U3R5bGVzJC5zdWJzY3JpYmUodGV4dFN0eWxlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5VGV4dFN0eWxlcyh0ZXh0U3R5bGVzKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0UGFyYWdyYXBoU3R5bGVzU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2Uuc2V0UGFyYWdyYXBoU3R5bGVzJC5zdWJzY3JpYmUocGFyYWdyYXBoU3R5bGVzID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlQYXJhZ3JhcGhTdHlsZXMocGFyYWdyYXBoU3R5bGVzKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0TnVtYmVyaW5nVGVtcGxhdGVUeXBlU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2Uuc2V0TnVtYmVyaW5nVGVtcGxhdGVUeXBlJC5zdWJzY3JpYmUobnVtYmVyaW5nVGVtcGxhdGVUeXBlID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0TnVtYmVyaW5nVGVtcGxhdGUobnVtYmVyaW5nVGVtcGxhdGVUeXBlKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlTnVtYmVyaW5nc1N1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnJlbW92ZU51bWJlcmluZ3MkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZU51bWJlcmluZ3NGcm9tUGFyYWdyYXBocygpO1xuICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRJbWFnZVN0eWxlU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2Uuc2V0SW1hZ2VTdHlsZSQuc3Vic2NyaWJlKGltYWdlID0+IHRoaXMuYXBwbHlJbWFnZVN0eWxlcyhpbWFnZSkpO1xuICAgIH1cblxuICAgIGNoYW5nZUVsZW1lbnRTdHlsZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmNoYW5nZUVsZW1lbnRTdHlsZSQuc3Vic2NyaWJlKHggPT4gdGhpcy5hcHBseUVsZW1lbnRTdHlsZSh4KSk7XG4gICAgfVxuXG4gICAgY3JlYXRlQ3VzdG9tQ29tcG9uZW50U3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuY3JlYXRlQ3VzdG9tQ29tcG9uZW50JC5zdWJzY3JpYmUobW9kZWwgPT4ge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVDdXN0b21FbGVtZW50KG1vZGVsKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5zZXJ0QnJlYWtTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5pbnNlcnRCcmVhayQuc3Vic2NyaWJlKGJyZWFrVHlwZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluc2VydEJyZWFrKGJyZWFrVHlwZSk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluc2VydEltYWdlU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuaW5zZXJ0SW1hZ2UkLnN1YnNjcmliZShpbWFnZURhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRJbWFnZShpbWFnZURhdGEpO1xuICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbnNlcnRMaW5rU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuaW5zZXJ0TGluayQuc3Vic2NyaWJlKGxpbmtEYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0TGluayhuZXcgTGlua0RhdGFNb2RlbCh7IGxpbms6IGxpbmtEYXRhLmxpbmssIHRleHQ6IGxpbmtEYXRhLnRleHQgfSkpO1xuICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBlbmRNb3VzZVByZXNzU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuZW5kTW91c2VQcmVzcyQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW91c2VIYW5kbGVyLmVuZE1vdXNlUHJlc3MoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZGlzYWJsZVNlbGVjdGlvblN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmRpc2FibGVTZWxlY3Rpb24kLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5kaXNhYmxlU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLmN1cnNvckxheWVyLmhpZGVDdXJzb3IoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2hhbmdlZFRhYmxlU2l6ZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmNoYW5nZWRUYWJsZVNpemUkLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZShkYXRhLmluc2VydEluZGV4LCBkYXRhLnNlc3Npb25JZCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNoYW5nZWRFZGdlU2l6ZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmNoYW5nZWRFZGdlU2l6ZSQuc3Vic2NyaWJlKCh7IGVkZ2VUeXBlLCBwYWdlVHlwZSB9KSA9PlxuICAgICAgICAgICAgdGhpcy5tYWluU2Vzc2lvbi5kaXNwbGF5RGF0YS51cGRhdGVQYWdlVmVydGljYWxEYXRhKGVkZ2VUeXBlLCBwYWdlVHlwZSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBpbWFnZUxvYWRlZFN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmltYWdlTG9hZGVkJC5zdWJzY3JpYmUoc2Vzc2lvbklkID0+IHRoaXMucmVndWxhdG9yU2VydmljZS5nZXRTZXNzaW9uKHNlc3Npb25JZCkub25SZW5kZXJlZCgpKTtcbiAgICB9XG5cbiAgICBjaGFuZ2VkRWRnZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmNoYW5nZWRFZGdlJC5zdWJzY3JpYmUoc2Vzc2lvbklkID0+IHRoaXMucmVndWxhdG9yU2VydmljZS5hcnJhbmdlRWRnZUNoYW5nZShzZXNzaW9uSWQpKTtcbiAgICB9XG5cbiAgICBpbnNlcnRUYWJsZVJvd3NTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5pbnNlcnRUYWJsZVJvd3MkLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0VGFibGVSb3dzKGRhdGEuaW5zZXJ0SW5kZXgsIGRhdGEucm93c0NvdW50LCBkYXRhLnRhcmdldEluZGV4LCBkYXRhLmluaGVyaXRJbmRleCwgZGF0YS5zZXNzaW9uSWQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbnNlcnRUYWJsZUNvbHVtbnNTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5pbnNlcnRUYWJsZUNvbHVtbnMkLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0VGFibGVDb2x1bW5zKGRhdGEuaW5zZXJ0SW5kZXgsIGRhdGEuY29sdW1uc0NvdW50LCBkYXRhLnRhcmdldEluZGV4LCBkYXRhLmluaGVyaXRJbmRleCwgZGF0YS5zZXNzaW9uSWQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVUYWJsZVJvd3NTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5yZW1vdmVUYWJsZVJvd3MkLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVGFibGVSb3dzKGRhdGEuaW5zZXJ0SW5kZXgsIGRhdGEuc3RhcnRJbmRleCwgZGF0YS5lbmRJbmRleCwgZGF0YS5zZXNzaW9uSWQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVUYWJsZUNvbHVtbnNTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5yZW1vdmVUYWJsZUNvbHVtbnMkLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVGFibGVDb2x1bW5zKGRhdGEuaW5zZXJ0SW5kZXgsIGRhdGEuc3RhcnRJbmRleCwgZGF0YS5lbmRJbmRleCwgZGF0YS5zZXNzaW9uSWQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVSaWdodFN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnJlbW92ZVJpZ2h0JC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5yZW1vdmVSaWdodCgpKTtcbiAgICB9XG5cbiAgICByZXNpemVUYWJsZUNvbHVtbnNTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5yZXNpemVUYWJsZUNvbHVtbnMkLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplVGFibGVDb2x1bW5zKGRhdGEucmVzaXplVGFibGVDb2x1bW5zLCBkYXRhLnNlc3Npb25JZCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluc2VydFRhYmxlU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuaW5zZXJ0VGFibGUkLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0VGFibGUoZGF0YSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluc2VydFRleHRTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5pbnNlcnRUZXh0JC5zdWJzY3JpYmUoeCA9PiB7XG4gICAgICAgICAgICB0aGlzLmluc2VydCh4KTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdW5kb1N1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnVuZG8kLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuZG8oKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQ3Vyc29ySW50b01haW5WaWV3KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlZG9TdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5yZWRvJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWRvKCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbEN1cnNvckludG9NYWluVmlldygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVMZWZ0U3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UucmVtb3ZlTGVmdCQuc3Vic2NyaWJlKCgpID0+IHRoaXMucmVtb3ZlTGVmdCgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByaW50U3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UucHJpbnQkLnN1YnNjcmliZSgoKSA9PiB0aGlzLm9uUHJpbnQoKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjdXRTZWxlY3RlZFN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmN1dFNlbGVjdGVkJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkN1dChuZXcgQ2xpcGJvYXJkRXZlbnQoJ2N1dCcpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb3B5U2VsZWN0ZWRTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5jb3B5U2VsZWN0ZWQkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQ29weShuZXcgQ2xpcGJvYXJkRXZlbnQoJ2NvcHknKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFzdGVGcm9tQ2xpcGJvYXJkU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UucGFzdGVGcm9tQ2xpcGJvYXJkJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWFkQ2xpcGJvYXJkKClcbiAgICAgICAgICAgICAgICAudGhlbihkYXRhID0+IHRoaXMucGFzdGVEYXRhKGRhdGEpKVxuICAgICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnRpbnVlIHJlZ2FyZGxlc3MgZXJyb3JcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyByZWFkQ2xpcGJvYXJkKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IHJlYWQgPSBhd2FpdCBuYXZpZ2F0b3IucGVybWlzc2lvbnMucXVlcnkoeyBuYW1lOiAnY2xpcGJvYXJkLXJlYWQnIGFzIFBlcm1pc3Npb25OYW1lIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgICAgICBpZiAobmF2aWdhdG9yLmNsaXBib2FyZCAmJiByZWFkLnN0YXRlICE9ICdkZW5pZWQnKSB7XG4gICAgICAgICAgICAgICAgbmF2aWdhdG9yLmNsaXBib2FyZFxuICAgICAgICAgICAgICAgICAgICAucmVhZFRleHQoKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb250aW51ZSByZWdhcmRsZXNzIGVycm9yXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuY2xpcGJvYXJkRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcGFzdGVEYXRhKGRhdGE6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0ZXh0ID0gZGF0YS5yZXBsYWNlKC9cXHJcXG4vZywgJ1xcbicpLnJlcGxhY2UoL1xcdC9nLCAnICcpO1xuICAgICAgICB0aGlzLmluc2VydCh0ZXh0KTtcbiAgICAgICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvTWFpblZpZXcoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNlbGVjdEFsbFN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnNlbGVjdEFsbCQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdEFsbCh0aGlzLnNlc3Npb24ubW9kZWwpO1xuICAgICAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlbW92ZVNlbGVjdGVkU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UucmVtb3ZlU2VsZWN0ZWQkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGVkKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xpcGJvYXJkRGF0YVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmNsaXBib2FyZERhdGEkLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2xpcGJvYXJkRGF0YSA9IGRhdGE7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHVwZGF0ZUVkZ2VTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS51cGRhdGVFZGdlcyQuc3Vic2NyaWJlKHNlc3Npb25JZCA9PiB7XG4gICAgICAgICAgICBsZXQgZm9vdGVycyA9IHRoaXMubWFpblNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5mb290ZXJzQ29tcG9uZW50cztcbiAgICAgICAgICAgIGxldCBleGlzdGVkID0gdGhpcy5tYWluU2Vzc2lvbi5jdXN0b21Db21wb25lbnRzLmVkZ2VzLmhlYWRlcnNDb21wb25lbnRzLmZpbmRJbmRleCh4ID0+IHguaW5zdGFuY2Uuc2Vzc2lvbklkID09PSBzZXNzaW9uSWQpO1xuICAgICAgICAgICAgaWYgKGV4aXN0ZWQgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMubWFpblNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5oZWFkZXJzQ29tcG9uZW50cy5zbGljZShleGlzdGVkICsgMSk7XG4gICAgICAgICAgICAgICAgaGVhZGVycy5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgICAgICAgICAgICB4Lmluc3RhbmNlLnNlc3Npb24uZGlzcGxheURhdGEudXBkYXRlTmV4dExpbmVJbmRleGVzKDAsIHguaW5zdGFuY2Uuc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBleGlzdGVkID0gdGhpcy5tYWluU2Vzc2lvbi5jdXN0b21Db21wb25lbnRzLmVkZ2VzLmZvb3RlcnNDb21wb25lbnRzLmZpbmRJbmRleCh4ID0+IHguaW5zdGFuY2Uuc2Vzc2lvbklkID09PSBzZXNzaW9uSWQpO1xuICAgICAgICAgICAgICAgIGZvb3RlcnMgPSB0aGlzLm1haW5TZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMuZWRnZXMuZm9vdGVyc0NvbXBvbmVudHMuc2xpY2UoZXhpc3RlZCArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9vdGVycy5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgICAgICAgIHguaW5zdGFuY2Uuc2Vzc2lvbi5kaXNwbGF5RGF0YS51cGRhdGVOZXh0TGluZUluZGV4ZXMoMCwgeC5pbnN0YW5jZS5zZXNzaW9uLmRpc3BsYXlEYXRhLnBhcmFncmFwaHMubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19