@talrace/ngx-noder 0.0.3 → 0.0.5

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 (75) hide show
  1. package/README.md +72 -64
  2. package/esm2022/lib/+shared/add-link-dialog/add-link-dialog.component.mjs +9 -5
  3. package/esm2022/lib/+shared/confirm-dialog/confirm-dialog.component.mjs +10 -6
  4. package/esm2022/lib/+shared/editor/core/editor.mjs +7 -14
  5. package/esm2022/lib/+shared/editor/core/helpers/rendering.helper.mjs +9 -8
  6. package/esm2022/lib/+shared/editor/core/layers/text.layer.mjs +4 -4
  7. package/esm2022/lib/+shared/editor/custom-components/image/components/image.component.mjs +4 -3
  8. package/esm2022/lib/+shared/editor/custom-components/shared/abstract/base.component.mjs +4 -2
  9. package/esm2022/lib/+shared/editor/custom-components/shared/services/custom-content/custom-content.service.mjs +6 -12
  10. package/esm2022/lib/+shared/editor/custom-components/tab/tab.component.mjs +3 -2
  11. package/esm2022/lib/+shared/editor/custom-components/table/components/table-cell.component.mjs +6 -4
  12. package/esm2022/lib/+shared/editor/custom-components/table/components/table.component.mjs +7 -5
  13. package/esm2022/lib/+shared/editor/editor.component.mjs +5 -12
  14. package/esm2022/lib/+shared/editor/editor.module.mjs +1 -4
  15. package/esm2022/lib/+shared/editor/execution/models/general-properties.model.mjs +1 -1
  16. package/esm2022/lib/+shared/editor/execution/regulator.service.mjs +15 -5
  17. package/esm2022/lib/+shared/editor-title/editor-title.component.mjs +83 -0
  18. package/esm2022/lib/+shared/editor-toolbar/color-picker/color-picker.component.mjs +2 -2
  19. package/esm2022/lib/+shared/editor-toolbar/editor-toolbar.component.mjs +77 -91
  20. package/esm2022/lib/+shared/editor-toolbar/editor-toolbar.module.mjs +11 -1
  21. package/esm2022/lib/+shared/editor-toolbar/font/font.component.mjs +3 -3
  22. package/esm2022/lib/+shared/editor-toolbar/font-size/font-size.component.mjs +2 -2
  23. package/esm2022/lib/+shared/editor-toolbar/font-style/font-style.component.mjs +2 -2
  24. package/esm2022/lib/+shared/editor-toolbar/menu-dropdowns/menu-dropdowns.component.mjs +194 -0
  25. package/esm2022/lib/+shared/editor-toolbar/numbering/numbering.component.mjs +3 -3
  26. package/esm2022/lib/+shared/editor-toolbar/print/print.component.mjs +2 -2
  27. package/esm2022/lib/+shared/editor-toolbar/toolbar-actions/toolbar-actions.component.mjs +126 -0
  28. package/esm2022/lib/+shared/editor-toolbar/undo-redo/undo-redo.component.mjs +2 -2
  29. package/esm2022/lib/+shared/helpers/scaling.helper.mjs +9 -0
  30. package/esm2022/public-api.mjs +2 -2
  31. package/fesm2022/talrace-ngx-noder.mjs +455 -398
  32. package/fesm2022/talrace-ngx-noder.mjs.map +1 -1
  33. package/lib/+shared/add-link-dialog/add-link-dialog.component.d.ts +1 -0
  34. package/lib/+shared/confirm-dialog/confirm-dialog.component.d.ts +1 -0
  35. package/lib/+shared/editor/core/editor.d.ts +3 -3
  36. package/lib/+shared/editor/core/helpers/rendering.helper.d.ts +3 -3
  37. package/lib/+shared/editor/custom-components/shared/abstract/base.component.d.ts +3 -1
  38. package/lib/+shared/editor/custom-components/shared/services/custom-content/custom-content.service.d.ts +1 -1
  39. package/lib/+shared/editor/custom-components/table/components/table-cell.component.d.ts +2 -2
  40. package/lib/+shared/editor/custom-components/table/components/table.component.d.ts +0 -2
  41. package/lib/+shared/editor/editor.component.d.ts +1 -5
  42. package/lib/+shared/editor/editor.module.d.ts +15 -16
  43. package/lib/+shared/editor/execution/models/general-properties.model.d.ts +1 -0
  44. package/lib/+shared/editor/execution/regulator.service.d.ts +2 -2
  45. package/lib/+shared/editor-title/editor-title.component.d.ts +24 -0
  46. package/lib/+shared/editor-toolbar/editor-toolbar.component.d.ts +31 -30
  47. package/lib/+shared/editor-toolbar/editor-toolbar.module.d.ts +19 -16
  48. package/lib/+shared/editor-toolbar/menu-dropdowns/menu-dropdowns.component.d.ts +73 -0
  49. package/lib/+shared/editor-toolbar/toolbar-actions/toolbar-actions.component.d.ts +49 -0
  50. package/lib/+shared/helpers/scaling.helper.d.ts +4 -0
  51. package/package.json +1 -1
  52. package/public-api.d.ts +1 -1
  53. package/src/_ngx-noder.theme.scss +10 -8
  54. package/src/lib/+shared/add-link-dialog/_add-link-dialog.theme.scss +3 -3
  55. package/src/lib/+shared/confirm-dialog/_theme.scss +6 -6
  56. package/src/lib/+shared/editor/_editor.theme.scss +84 -15
  57. package/src/lib/+shared/editor/_theme.scss +0 -2
  58. package/src/lib/+shared/editor-title/_editor-title.theme.scss +28 -0
  59. package/src/lib/+shared/editor-toolbar/_editor-toolbar.theme.scss +1 -24
  60. package/src/lib/+shared/editor-toolbar/_theme.scss +14 -2
  61. package/src/lib/+shared/editor-toolbar/font-size/_font-size.theme.scss +14 -0
  62. package/src/lib/+shared/editor-toolbar/font-style/_font-style.theme.scss +21 -0
  63. package/src/lib/+shared/editor-toolbar/format/_format.theme.scss +21 -0
  64. package/src/lib/+shared/editor-toolbar/menu-dropdowns/_menu-dropdowns.theme.scss +22 -0
  65. package/src/lib/+shared/editor-toolbar/numbering/_numbering.theme.scss +52 -11
  66. package/src/lib/+shared/editor-toolbar/toolbar-actions/_toolbar-actions.theme.scss +21 -0
  67. package/src/lib/+shared/editor-toolbar/undo-redo/_undo-redo.theme.scss +16 -0
  68. package/src/lib/+shared/insert-table/_insert-table.theme.scss +9 -6
  69. package/src/scss/_mixins.scss +2 -37
  70. package/esm2022/lib/+shared/editor/custom-components/external-element/element-toolbar/element-toolbar.component.mjs +0 -35
  71. package/esm2022/lib/+shared/editor-header/editor-header.component.mjs +0 -314
  72. package/lib/+shared/editor/custom-components/external-element/element-toolbar/element-toolbar.component.d.ts +0 -14
  73. package/lib/+shared/editor-header/editor-header.component.d.ts +0 -101
  74. package/src/lib/+shared/editor/custom-components/external-element/element-toolbar/_element-toolbar.theme.scss +0 -10
  75. package/src/lib/+shared/editor-header/_editor-header.theme.scss +0 -106
@@ -6,9 +6,9 @@ import { ApplyTextStyleModel } from '../../../models/generated/apply-text-style.
6
6
  import { BreakHelper } from '../helpers/break.helper';
7
7
  import { BreakModel } from '../../../models/generated/break.model';
8
8
  import { BreakTypes } from './enums/break-types.enum';
9
+ import { CUSTOM_ELEMENT_MARKER, TABLE_MARKER } from '../custom-components/shared/constants/custom-content-markers.const';
9
10
  import { ClipboardEventTypes } from './constants/clipboardEventTypes.const';
10
11
  import { ContentHelper } from '../helpers/content.helper';
11
- import { CUSTOM_ELEMENT_MARKER, TABLE_MARKER } from '../custom-components/shared/constants/custom-content-markers.const';
12
12
  import { DeleteModel } from '../../../models/generated/delete.model';
13
13
  import { EdgeType } from './components/edges/edge-type.enum';
14
14
  import { ElementModel } from '../../../models/generated/element.model';
@@ -22,12 +22,11 @@ import { InsertElementModel } from '../../../models/generated/insert-element.mod
22
22
  import { InsertImageModel } from '../../../models/generated/insert-image.model';
23
23
  import { InsertLinkModel } from '../../../models/generated/insert-link.model';
24
24
  import { InsertStyledTextModel } from '../../../models/generated/insert-styled-text.model';
25
+ import { InsertTabModel } from '../../../models/generated/insert-tab.model';
25
26
  import { InsertTableColumnsModel } from '../../../models/generated/insert-table-columns.model';
26
27
  import { InsertTableModel } from '../../../models/generated/insert-table.model';
27
28
  import { InsertTableRowsModel } from '../../../models/generated/insert-table-rows.model';
28
- import { InsertTabModel } from '../../../models/generated/insert-tab.model';
29
29
  import { InsertTextModel } from '../../../models/generated/insert-text.model';
30
- import { MarginModel } from './models/margin.model';
31
30
  import { MouseHandler } from '../interaction/mouse.handler';
32
31
  import { NEW_LINE_MARKUP } from './constants/editor.const';
33
32
  import { OperationHistory } from '../operation-history/operation-history';
@@ -49,10 +48,11 @@ import { RestoreParagraphStylesModel } from '../../../models/generated/restore-p
49
48
  import { RestoreTableModel } from '../../../models/generated/restore-table.model';
50
49
  import { RestoreTextStylesModel } from '../../../models/generated/restore-text-styles.model';
51
50
  import { SaveCommandsHelper } from '../operations/helpers/save-commands.helper';
51
+ import { ScalingHelper } from '../../helpers/scaling.helper';
52
52
  import { Search } from './search';
53
53
  import { Selection } from '../positioning/selection';
54
- import { TableModel } from '../../../models/generated/table.model';
55
54
  import { TabModel } from '../../../models/generated/tab.model';
55
+ import { TableModel } from '../../../models/generated/table.model';
56
56
  import { TextInput } from './keyboard/text-input';
57
57
  import { TextStyleModel } from '../../../models/generated/text-style.model';
58
58
  export class Editor extends EventEmitting {
@@ -931,15 +931,8 @@ export class Editor extends EventEmitting {
931
931
  initMainSession() {
932
932
  const pageWidth = this.customPageWidth ?? this.model.pageWidth;
933
933
  this.container.nativeElement.style.maxWidth = `${pageWidth}px`;
934
- const pageMargin = new MarginModel({
935
- left: this.model.marginLeft,
936
- right: this.model.marginRight,
937
- top: this.model.marginTop,
938
- bottom: this.model.marginBottom,
939
- header: this.model.marginHeader,
940
- footer: this.model.marginFooter
941
- });
942
- this.regulatorService.addMainSession(this.model, pageMargin, pageWidth, this.container);
934
+ const scalingRatio = this.customPageWidth ? ScalingHelper.getRatio(this.customPageWidth, this.model.pageWidth) : 1;
935
+ this.regulatorService.addMainSession(this.model, pageWidth, scalingRatio, this.container);
943
936
  this.mainSession.addEventListener('changeScrollTop', this.onScrollTopChange);
944
937
  this.session.addEventListener('setStyles', this.setStyles);
945
938
  this.mainRenderer.scrollTo(0);
@@ -1278,4 +1271,4 @@ export class Editor extends EventEmitting {
1278
1271
  });
1279
1272
  }
1280
1273
  }
1281
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvK3NoYXJlZC9lZGl0b3IvY29yZS9lZGl0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDbEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDN0YsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDekYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDakcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFFdkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFNUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzFELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxZQUFZLEVBQUUsTUFBTSxvRUFBb0UsQ0FBQztBQUN6SCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFckUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBSTdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXhELE9BQU8sRUFBRSxVQUFVLEVBQUUs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Q0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDaEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTywwQkFBMEI7UUFDOUIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ3JELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUMxQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyx5QkFBeUI7UUFDN0IsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7UUFDOUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDbGlwYm9hcmQgfSBmcm9tICdAYW5ndWxhci9jZGsvY2xpcGJvYXJkJztcbmltcG9ydCB7IENvbXBvbmVudFJlZiwgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFkZE51bWJlcmluZ01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9hZGQtbnVtYmVyaW5nLm1vZGVsJztcbmltcG9ydCB7IEFwcGx5RWxlbWVudFN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2FwcGx5LWVsZW1lbnQtc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgQXBwbHlJbWFnZVN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2FwcGx5LWltYWdlLXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IEFwcGx5UGFyYWdyYXBoU3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvYXBwbHktcGFyYWdyYXBoLXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IEFwcGx5VGV4dFN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2FwcGx5LXRleHQtc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgQmFzZU5vZGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vY3VzdG9tLWNvbXBvbmVudHMvc2hhcmVkL2Fic3RyYWN0L2Jhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IEJyZWFrSGVscGVyIH0gZnJvbSAnLi4vaGVscGVycy9icmVhay5oZWxwZXInO1xuaW1wb3J0IHsgQnJlYWtNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvYnJlYWsubW9kZWwnO1xuaW1wb3J0IHsgQnJlYWtUeXBlcyB9IGZyb20gJy4vZW51bXMvYnJlYWstdHlwZXMuZW51bSc7XG5pbXBvcnQgeyBDbGlwYm9hcmRFdmVudFR5cGVzIH0gZnJvbSAnLi9jb25zdGFudHMvY2xpcGJvYXJkRXZlbnRUeXBlcy5jb25zdCc7XG5pbXBvcnQgeyBDb21tYW5kc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21tYW5kcy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbnRlbnRIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzL2NvbnRlbnQuaGVscGVyJztcbmltcG9ydCB7IENVU1RPTV9FTEVNRU5UX01BUktFUiwgVEFCTEVfTUFSS0VSIH0gZnJvbSAnLi4vY3VzdG9tLWNvbXBvbmVudHMvc2hhcmVkL2NvbnN0YW50cy9jdXN0b20tY29udGVudC1tYXJrZXJzLmNvbnN0JztcbmltcG9ydCB7IERlbGV0ZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9kZWxldGUubW9kZWwnO1xuaW1wb3J0IHsgRG9jeE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9kb2N4Lm1vZGVsJztcbmltcG9ydCB7IEVkZ2VUeXBlIH0gZnJvbSAnLi9jb21wb25lbnRzL2VkZ2VzL2VkZ2UtdHlwZS5lbnVtJztcbmltcG9ydCB7IEVkaXRvclNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmFjdGlvbi9lZGl0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBFZGl0U2Vzc2lvbiB9IGZyb20gJy4vZWRpdC5zZXNzaW9uJztcbmltcG9ydCB7IEVsZW1lbnREYXRhTW9kZWwgfSBmcm9tICcuLi9jdXN0b20tY29tcG9uZW50cy9leHRlcm5hbC1lbGVtZW50L21vZGVscy9lbGVtZW50LWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgRWxlbWVudE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9lbGVtZW50Lm1vZGVsJztcbmltcG9ydCB7IEV2ZW50RW1pdHRpbmcgfSBmcm9tICcuL2Jhc2UvZXZlbnQtZW1pdHRpbmcnO1xuaW1wb3J0IHsgRm9ybWF0SGVscGVyIH0gZnJvbSAnLi4vaGVscGVycy9mb3JtYXQuaGVscGVyJztcbmltcG9ydCB7IEltYWdlRGF0YU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbWFnZS1kYXRhLm1vZGVsJztcbmltcG9ydCB7IEltYWdlTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2ltYWdlLm1vZGVsJztcbmltcG9ydCB7IEluZGV4ZWRFbGVtZW50SGVscGVyIH0gZnJvbSAnLi4vaGVscGVycy9pbmRleGVkLWVsZW1lbnQuaGVscGVyJztcbmltcG9ydCB7IElucHV0SGFuZGxlciB9IGZyb20gJy4uL2ludGVyYWN0aW9uL2lucHV0LmhhbmRsZXInO1xuaW1wb3J0IHsgSW5zZXJ0QnJlYWtNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWJyZWFrLm1vZGVsJztcbmltcG9ydCB7IEluc2VydEVsZW1lbnRNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWVsZW1lbnQubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0SW1hZ2VNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWltYWdlLm1vZGVsJztcbmltcG9ydCB7IEluc2VydExpbmtNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWxpbmsubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0U3R5bGVkVGV4dE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbnNlcnQtc3R5bGVkLXRleHQubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0VGFibGVDb2x1bW5zTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC10YWJsZS1jb2x1bW5zLm1vZGVsJztcbmltcG9ydCB7IEluc2VydFRhYmxlTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC10YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBJbnNlcnRUYWJsZVJvd3NNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LXRhYmxlLXJvd3MubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0VGFiTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC10YWIubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0VGV4dE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbnNlcnQtdGV4dC5tb2RlbCc7XG5pbXBvcnQgeyBJVG9vbGJhclN0eWxlcyB9IGZyb20gJy4vaW50ZXJmYWNlcy90b29sYmFyLXN0eWxlcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTGlua0RhdGFNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvbGluay1kYXRhLm1vZGVsJztcbmltcG9ydCB7IE1hcmdpbk1vZGVsIH0gZnJvbSAnLi9tb2RlbHMvbWFyZ2luLm1vZGVsJztcbmltcG9ydCB7IE1vdXNlSGFuZGxlciB9IGZyb20gJy4uL2ludGVyYWN0aW9uL21vdXNlLmhhbmRsZXInO1xuaW1wb3J0IHsgTkVXX0xJTkVfTUFSS1VQIH0gZnJvbSAnLi9jb25zdGFudHMvZWRpdG9yLmNvbnN0JztcbmltcG9ydCB7IE5vZGVyRWRnZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9lZGdlcy9lZGdlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOdW1iZXJpbmdMZXZlbE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9udW1iZXJpbmctbGV2ZWwubW9kZWwnO1xuaW1wb3J0IHsgT3BlcmF0aW9uIH0gZnJvbSAnLi4vb3BlcmF0aW9uLWhpc3Rvcnkvb3BlcmF0aW9uLnR5cGUnO1xuaW1wb3J0IHsgT3BlcmF0aW9uSGlzdG9yeSB9IGZyb20gJy4uL29wZXJhdGlvbi1oaXN0b3J5L29wZXJhdGlvbi1oaXN0b3J5JztcbmltcG9ydCB7IFBhZ2VIZWxwZXIgfSBmcm9tICcuL2hlbHBlcnMvcGFnZS5oZWxwZXInO1xuaW1wb3J0IHsgUGFnZVR5cGUgfSBmcm9tICcuL2VudW1zL3BhZ2UtdHlwZS5lbnVtJztcbmltcG9ydCB7IFBhcmFncmFwaE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9wYXJhZ3JhcGgubW9kZWwnO1xuaW1wb3J0IHsgUGFyYWdyYXBoU3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcGFyYWdyYXBoLXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IFBvaW50IH0gZnJvbSAnLi9wb2ludCc7XG5pbXBvcnQgeyBQb3NpdGlvbkhlbHBlciB9IGZyb20gJy4vaGVscGVycy9wb3NpdGlvbi5oZWxwZXInO1xuaW1wb3J0IHsgUHJpbnRIZWxwZXIgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3ByaW50LmhlbHBlcic7XG5pbXBvcnQgeyBSYW5nZSB9IGZyb20gJy4vcmFuZ2UnO1xuaW1wb3J0IHsgUmVndWxhdG9yU2VydmljZSB9IGZyb20gJy4uL2V4ZWN1dGlvbi9yZWd1bGF0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBSZW1vdmVOdW1iZXJpbmdzTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3JlbW92ZS1udW1iZXJpbmdzLm1vZGVsJztcbmltcG9ydCB7IFJlbW92ZVRhYmxlQ29sdW1uc01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZW1vdmUtdGFibGUtY29sdW1ucy5tb2RlbCc7XG5pbXBvcnQgeyBSZW1vdmVUYWJsZVJvd3NNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVtb3ZlLXRhYmxlLXJvd3MubW9kZWwnO1xuaW1wb3J0IHsgUmVuZGVyZXIgfSBmcm9tICcuL3JlbmRlcmVyJztcbmltcG9ydCB7IFJlcGxhY2VNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVwbGFjZS5tb2RlbCc7XG5pbXBvcnQgeyBSZXNpemVUYWJsZUNvbHVtbnNNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVzaXplLXRhYmxlLWNvbHVtbnMubW9kZWwnO1xuaW1wb3J0IHsgUmVzdG9yZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZXN0b3JlLm1vZGVsJztcbmltcG9ydCB7IFJlc3RvcmVOdW1iZXJpbmdzTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3Jlc3RvcmUtbnVtYmVyaW5ncy5tb2RlbCc7XG5pbXBvcnQgeyBSZXN0b3JlUGFyYWdyYXBoU3R5bGVzTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3Jlc3RvcmUtcGFyYWdyYXBoLXN0eWxlcy5tb2RlbCc7XG5pbXBvcnQgeyBSZXN0b3JlVGFibGVNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVzdG9yZS10YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBSZXN0b3JlVGV4dFN0eWxlc01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZXN0b3JlLXRleHQtc3R5bGVzLm1vZGVsJztcbmltcG9ydCB7IFNhdmVDb21tYW5kc0hlbHBlciB9IGZyb20gJy4uL29wZXJhdGlvbnMvaGVscGVycy9zYXZlLWNvbW1hbmRzLmhlbHBlcic7XG5pbXBvcnQgeyBTZWFyY2gsIFNlYXJjaE9wdGlvbnMgfSBmcm9tICcuL3NlYXJjaCc7XG5pbXBvcnQgeyBTZWFyY2hJdGVyYXRpb24gfSBmcm9tICcuL2ludGVyZmFjZXMvc2VhcmNoLWl0ZXJhdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2VsZWN0aW9uIH0gZnJvbSAnLi4vcG9zaXRpb25pbmcvc2VsZWN0aW9uJztcbmltcG9ydCB7IFRhYmxlTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3RhYmxlLm1vZGVsJztcbmltcG9ydCB7IFRhYk1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90YWIubW9kZWwnO1xuaW1wb3J0IHsgVGFyZ2V0TW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3RhcmdldC5tb2RlbCc7XG5pbXBvcnQgeyBUZXh0SW5wdXQgfSBmcm9tICcuL2tleWJvYXJkL3RleHQtaW5wdXQnO1xuaW1wb3J0IHsgVGV4dFN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3RleHQtc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgVmlydHVhbFJlbmRlcmVyIH0gZnJvbSAnLi92aXJ0dWFsLnJlbmRlcmVyJztcblxuZXhwb3J0IGNsYXNzIEVkaXRvciBleHRlbmRzIEV2ZW50RW1pdHRpbmcge1xuICAgIHJlYWRvbmx5IE1BWF9DT1VOVCA9IDk5OTtcblxuICAgIHJlYWRvbmx5IHBhcmVudFRhZ05hbWUgPSAnQVBQLUVESVRPUic7XG5cbiAgICByZWFkb25seSB0YWJsZUNlbGxUYWdOYW1lID0gJ0FQUC1OT0RFUi1UQUJMRS1DRUxMJztcblxuICAgIHJlYWRvbmx5IGN1c3RvbUVsZW1lbnRUYWdOYW1lc1dpdGhvdXRUYWJsZSA9IFsnQVBQLU5PREVSLUlOUFVUJywgJ0FQUC1OT0RFUi1JTUFHRScsICdBUFAtTk9ERVItU0lHTkFUVVJFJywgJ0FQUC1OT0RFUi1EQVRFUElDS0VSJ107XG5cbiAgICByZWFkb25seSBjdXN0b21FbGVtZW50VGFnTmFtZXMgPSBbLi4udGhpcy5jdXN0b21FbGVtZW50VGFnTmFtZXNXaXRob3V0VGFibGUsIHRoaXMudGFibGVDZWxsVGFnTmFtZV07XG5cbiAgICByZWFkb25seSBoaXN0b3J5OiBPcGVyYXRpb25IaXN0b3J5O1xuXG4gICAgZ2V0IG1haW5TZXNzaW9uKCk6IEVkaXRTZXNzaW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVndWxhdG9yU2VydmljZS5tYWluU2Vzc2lvbi5zZXNzaW9uO1xuICAgIH1cblxuICAgIGdldCBtYWluUmVuZGVyZXIoKTogVmlydHVhbFJlbmRlcmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVndWxhdG9yU2VydmljZS5tYWluU2Vzc2lvbi5yZW5kZXJlciBhcyBWaXJ0dWFsUmVuZGVyZXI7XG4gICAgfVxuXG4gICAgZ2V0IHNlc3Npb24oKTogRWRpdFNlc3Npb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLmN1cnJlbnRTZXNzaW9uLnNlc3Npb247XG4gICAgfVxuXG4gICAgZ2V0IHJlbmRlcmVyKCk6IFJlbmRlcmVyIHwgVmlydHVhbFJlbmRlcmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVndWxhdG9yU2VydmljZS5jdXJyZW50U2Vzc2lvbi5yZW5kZXJlcjtcbiAgICB9XG5cbiAgICBnZXQgaXNWaWV3T25seSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5pc1ZpZXdPbmx5O1xuICAgIH1cblxuICAgIGdldCB0YXJnZXRzKCk6IFRhcmdldE1vZGVsW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLmdldEN1cnJlbnRTZXNzaW9uVGFyZ2V0cygpO1xuICAgIH1cblxuICAgIHNlbGVjdGlvbjogU2VsZWN0aW9uO1xuXG4gICAgbW91c2VIYW5kbGVyOiBNb3VzZUhhbmRsZXI7XG5cbiAgICBpbnB1dEhhbmRsZXI6IElucHV0SGFuZGxlcjtcblxuICAgIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG5cbiAgICBwcml2YXRlIHNlYXJjaDogU2VhcmNoO1xuXG4gICAgcHJpdmF0ZSB0ZXh0SW5wdXQ6IFRleHRJbnB1dDtcblxuICAgIHByaXZhdGUgZm9jdXNlZENvbXBvbmVudDogQ29tcG9uZW50UmVmPEJhc2VOb2RlckNvbXBvbmVudD47XG5cbiAgICBwcml2YXRlIGNsaXBib2FyZERhdGE6IHN0cmluZztcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIG1vZGVsOiBEb2N4TW9kZWwsXG4gICAgICAgIHByaXZhdGUgY29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PixcbiAgICAgICAgcHJpdmF0ZSBlZGl0b3JTZXJ2aWNlOiBFZGl0b3JTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlZ3VsYXRvclNlcnZpY2U6IFJlZ3VsYXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY29tbWFuZHNTZXJ2aWNlOiBDb21tYW5kc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY2xpcGJvYXJkOiBDbGlwYm9hcmQsXG4gICAgICAgIHByaXZhdGUgY3VzdG9tUGFnZVdpZHRoPzogbnVtYmVyXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgdGhpcy5oaXN0b3J5ID0gbmV3IE9wZXJhdGlvbkhpc3RvcnkoZWRpdG9yU2VydmljZSwgcmVndWxhdG9yU2VydmljZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbigpO1xuICAgICAgICB0aGlzLnJlZ3VsYXRvclNlcnZpY2Uuc2V0U2VsZWN0aW9uKHRoaXMuc2VsZWN0aW9uKTtcbiAgICAgICAgdGhpcy5pbml0TWFpblNlc3Npb24oKTtcbiAgICAgICAgdGhpcy50ZXh0SW5wdXQgPSBuZXcgVGV4dElucHV0KHRoaXMubWFpblJlbmRlcmVyLmNvbnRhaW5lcik7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudGV4dGFyZWEgPSB0aGlzLnRleHRJbnB1dC5pbnB1dDtcbiAgICAgICAgdGhpcy5tb3VzZUhhbmRsZXIgPSBuZXcgTW91c2VIYW5kbGVyKHRoaXMucmVuZGVyZXIuY29udGFpbmVyLCB0aGlzKTtcbiAgICAgICAgdGhpcy5pbnB1dEhhbmRsZXIgPSBuZXcgSW5wdXRIYW5kbGVyKHRoaXMudGV4dElucHV0LmlucHV0LCB0aGlzKTtcbiAgICAgICAgdGhpcy5pbml0UmVzaXplTGlzdGVuZXIoKTtcbiAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICB0aGlzLnNlc3Npb24ucHJvY2Vzc1NlbGVjdGlvblN0eWxlcygpO1xuXG4gICAgICAgIHRoaXMuc2VhcmNoID0gbmV3IFNlYXJjaCgpO1xuICAgICAgICB0aGlzLnNlYXJjaC5zZXQoeyB3cmFwOiB0cnVlIH0pO1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoT3B0aW9uU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuc2V0VGV4dFN0eWxlc1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5zZXRQYXJhZ3JhcGhTdHlsZXNTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlRWxlbWVudFN0eWxlU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnNldE51bWJlcmluZ1RlbXBsYXRlVHlwZVN1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5yZW1vdmVOdW1iZXJpbmdzU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnNldEltYWdlU3R5bGVTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQ3VzdG9tQ29tcG9uZW50U3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmluc2VydEJyZWFrU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmluc2VydEltYWdlU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmluc2VydExpbmtTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuZW5kTW91c2VQcmVzc1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvblN1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkVGFibGVTaXplU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmluc2VydFRhYmxlUm93c1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5pbnNlcnRUYWJsZUNvbHVtbnNTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVGFibGVSb3dzU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnJlbW92ZVRhYmxlQ29sdW1uc1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5yZW1vdmVkSW1hZ2VTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMucmVzaXplVGFibGVDb2x1bW5zU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmluc2VydFRhYmxlU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyVXBkYXRlZFN1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5lZGdlRWxlbWVudENvcHlVcGRhdGVkU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRFZGdlSGVpZ2h0U3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnVuZG9TdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMucmVkb1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5jbGlwYm9hcmREYXRhU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmN1dFNlbGVjdGVkU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmNvcHlTZWxlY3RlZFN1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5wYXN0ZUZyb21DbGlwYm9hcmRTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0QWxsU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGVkU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnByaW50U3Vic2NyaXB0aW9uKClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHM/LnVuc3Vic2NyaWJlKCkpO1xuICAgICAgICB0aGlzLmRlc3Ryb3lSZXNpemVMaXN0ZW5lcigpO1xuICAgICAgICB0aGlzLmRlc3Ryb3lNYWluU2Vzc2lvbkxpc3RlbmVycygpO1xuICAgICAgICB0aGlzLm1vdXNlSGFuZGxlci5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMuaW5wdXRIYW5kbGVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3NldFN0eWxlcycsIHRoaXMuc2V0U3R5bGVzKTtcbiAgICAgICAgdGhpcy5ibHVyQ3VzdG9tQ29tcG9uZW50KCk7XG4gICAgfVxuXG4gICAgc2VsZWN0UGFnZURvd24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMubWFpblJlbmRlcmVyLmxheWVyQ29uZmlnO1xuICAgICAgICBjb25zdCBsaW5lID0gY29uZmlnLnZpc2libGVSYW5nZS5lbmRTY3JlZW5MaW5lO1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IFBvc2l0aW9uSGVscGVyLnNjcmVlblRvRG9jdW1lbnQodGhpcy5tYWluU2Vzc2lvbiwgbGluZSwgMCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVTZWxlY3Rpb24ocG9zaXRpb24pO1xuICAgICAgICB0aGlzLm1haW5SZW5kZXJlci5zY3JvbGxCeShjb25maWcuaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvTWFpblZpZXcoMC41KTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIHNlbGVjdFBhZ2VVcCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5tYWluUmVuZGVyZXIubGF5ZXJDb25maWc7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBjb25maWcudmlzaWJsZVJhbmdlLnN0YXJ0U2NyZWVuTGluZTtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBQb3NpdGlvbkhlbHBlci5zY3JlZW5Ub0RvY3VtZW50KHRoaXMubWFpblNlc3Npb24sIGxpbmUsIDApO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlU2VsZWN0aW9uKHBvc2l0aW9uKTtcbiAgICAgICAgdGhpcy5tYWluUmVuZGVyZXIuc2Nyb2xsQnkoLWNvbmZpZy5oZWlnaHQpO1xuICAgICAgICB0aGlzLnNjcm9sbEN1cnNvckludG9NYWluVmlldygwLjUpO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgZ290b1BhZ2VEb3duKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLm1haW5SZW5kZXJlci5sYXllckNvbmZpZztcbiAgICAgICAgY29uc3QgbGluZSA9IGNvbmZpZy52aXNpYmxlUmFuZ2UuZW5kU2NyZWVuTGluZTtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBQb3NpdGlvbkhlbHBlci5zY3JlZW5Ub0RvY3VtZW50KHRoaXMubWFpblNlc3Npb24sIGxpbmUsIDApO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZUN1cnNvcihwb3NpdGlvbik7XG4gICAgICAgIHRoaXMubWFpblJlbmRlcmVyLnNjcm9sbEJ5KGNvbmZpZy5oZWlnaHQpO1xuICAgICAgICB0aGlzLnNjcm9sbEN1cnNvckludG9NYWluVmlldygwLjUpO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgZ290b1BhZ2VVcCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5tYWluUmVuZGVyZXIubGF5ZXJDb25maWc7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBjb25maWcudmlzaWJsZVJhbmdlLnN0YXJ0U2NyZWVuTGluZTtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBQb3NpdGlvbkhlbHBlci5zY3JlZW5Ub0RvY3VtZW50KHRoaXMubWFpblNlc3Npb24sIGxpbmUsIDApO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZUN1cnNvcihwb3NpdGlvbik7XG4gICAgICAgIHRoaXMubWFpblJlbmRlcmVyLnNjcm9sbEJ5KC1jb25maWcuaGVpZ2h0KTtcbiAgICAgICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvTWFpblZpZXcoMC41KTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIGN1dCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZCgpO1xuICAgIH1cblxuICAgIGluc2VydCh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0VGV4dCh0ZXh0LCB0aGlzLnNlc3Npb24uY3Vyc29yU3R5bGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaW5zZXJ0SW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleChcbiAgICAgICAgICAgICAgICB0aGlzLnNlc3Npb24ud3JhcFBhcmFncmFwaEluZGV4LFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LnJvdyxcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5jb2x1bW5cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBjb25zdCBpbnNlcnRUZXh0ID0gbmV3IEluc2VydFRleHRNb2RlbCh7IGluc2VydEluZGV4LCB0ZXh0IH0pO1xuICAgICAgICAgICAgdGhpcy5yZXBsYWNlQnkobmV3IFJlcGxhY2VNb2RlbCh7IGluc2VydFRleHQgfSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5zZXJ0VGV4dCh0ZXh0OiBzdHJpbmcsIHRleHRTdHlsZTogVGV4dFN0eWxlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnNlbGVjdGlvbi5jdXJzb3I7XG4gICAgICAgIGlmICh0ZXh0U3R5bGUpIHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZUluc2VydFN0eWxlZFRleHRUb0hpc3RvcnkocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4sIHRleHQsIHRleHRTdHlsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNhdmVJbnNlcnRUZXh0VG9IaXN0b3J5KHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uLCB0ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0VGV4dChwb3NpdGlvbiwgdGV4dCwgdGV4dFN0eWxlKTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIHJlcGxhY2VUZXh0KHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCB0b29sYmFyU3R5bGUgPSBuZXcgVGV4dFN0eWxlTW9kZWwodGhpcy5zZXNzaW9uLnN0eWxlc01hcCk7XG4gICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQoKTtcbiAgICAgICAgdGhpcy5pbnNlcnRUZXh0KHRleHQsIHRvb2xiYXJTdHlsZSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlTGVmdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdExlZnQodGhpcy5zZXNzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGVkKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlUmlnaHQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RSaWdodCh0aGlzLnNlc3Npb24pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICBpbnNlcnRCcmVhayhicmVha1R5cGU6IEJyZWFrVHlwZXMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5zZXJ0SW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleChcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi53cmFwUGFyYWdyYXBoSW5kZXgsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5yb3csXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5jb2x1bW5cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaW5zZXJ0QnJlYWsgPSBuZXcgSW5zZXJ0QnJlYWtNb2RlbCh7IGluc2VydEluZGV4LCBicmVha1R5cGUgfSk7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSkge1xuICAgICAgICAgICAgdGhpcy5yZXBsYWNlQnkobmV3IFJlcGxhY2VNb2RlbCh7IGluc2VydEJyZWFrIH0pKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChicmVha1R5cGUgPT09IEJyZWFrVHlwZXMuQ29sdW1uKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNhdmVJbnNlcnRCcmVha1RvSGlzdG9yeShpbnNlcnRCcmVhayk7XG4gICAgICAgIGNvbnN0IGVuZFBvaW50ID0gdGhpcy5zZXNzaW9uLmluc2VydEJyZWFrKHRoaXMuc2VsZWN0aW9uLmN1cnNvciwgYnJlYWtUeXBlKTtcbiAgICAgICAgbGV0IGxhc3RSb3cgPSB0aGlzLnNlbGVjdGlvbi5jdXJzb3Iucm93ID09PSBlbmRQb2ludC5yb3cgPyBlbmRQb2ludC5yb3cgOiBJbmZpbml0eTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVMaW5lcyh0aGlzLnNlbGVjdGlvbi5jdXJzb3Iucm93LCBsYXN0Um93KTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTtcbiAgICAgICAgdGhpcy5yZXJlbmRlck1hcmtlcigpO1xuICAgICAgICB0aGlzLnNjcm9sbEN1cnNvckludG9NYWluVmlldygwLjEpO1xuICAgIH1cblxuICAgIGluc2VydFRhYigpIHtcbiAgICAgICAgY29uc3QgaW5zZXJ0SW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleChcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi53cmFwUGFyYWdyYXBoSW5kZXgsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5yb3csXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5jb2x1bW5cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaW5zZXJ0VGFiID0gbmV3IEluc2VydFRhYk1vZGVsKHsgaW5zZXJ0SW5kZXggfSk7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSkge1xuICAgICAgICAgICAgdGhpcy5yZXBsYWNlQnkobmV3IFJlcGxhY2VNb2RlbCh7IGluc2VydFRhYiB9KSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNhdmVJbnNlcnRUYWJUb0hpc3RvcnkoaW5zZXJ0VGFiKTtcbiAgICAgICAgY29uc3QgZW5kUG9pbnQgPSB0aGlzLnNlc3Npb24uaW5zZXJ0VGFiKHRoaXMuc2VsZWN0aW9uLmN1cnNvcik7XG4gICAgICAgIHRoaXMub25Eb2N1bWVudENoYW5nZShuZXcgUmFuZ2UodGhpcy5zZWxlY3Rpb24uY3Vyc29yLCBlbmRQb2ludCkpO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0SW1hZ2UoaW1hZ2VEYXRhOiBJbWFnZURhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnNlcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoVG9Eb2N1bWVudEluZGV4KFxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLndyYXBQYXJhZ3JhcGhJbmRleCxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LnJvdyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LmNvbHVtblxuICAgICAgICApO1xuICAgICAgICBjb25zdCBpbnNlcnRJbWFnZSA9IG5ldyBJbnNlcnRJbWFnZU1vZGVsKHsgaW5zZXJ0SW5kZXgsIGltYWdlRGF0YSB9KTtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VCeShuZXcgUmVwbGFjZU1vZGVsKHsgaW5zZXJ0SW1hZ2UgfSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zYXZlSW5zZXJ0SW1hZ2VUb0hpc3RvcnkoaW5zZXJ0SW1hZ2UpO1xuICAgICAgICBjb25zdCBlbmRQb2ludCA9IHRoaXMuc2Vzc2lvbi5pbnNlcnRJbWFnZSh0aGlzLnNlbGVjdGlvbi5jdXJzb3IsIGltYWdlRGF0YSk7XG4gICAgICAgIGxldCBsYXN0Um93ID0gdGhpcy5zZWxlY3Rpb24uY3Vyc29yLnJvdyA9PT0gZW5kUG9pbnQucm93ID8gZW5kUG9pbnQucm93IDogSW5maW5pdHk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlTGluZXModGhpcy5zZWxlY3Rpb24uY3Vyc29yLnJvdywgbGFzdFJvdyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7XG4gICAgICAgIHRoaXMucmVyZW5kZXJNYXJrZXIoKTtcbiAgICB9XG5cbiAgICBpbnNlcnRMaW5rKGxpbmtEYXRhTW9kZWw6IExpbmtEYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5zZXJ0SW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleChcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi53cmFwUGFyYWdyYXBoSW5kZXgsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5yb3csXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5jb2x1bW5cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaW5zZXJ0TGluayA9IG5ldyBJbnNlcnRMaW5rTW9kZWwoeyBpbnNlcnRJbmRleCwgZW5kSW5kZXg6IGluc2VydEluZGV4ICsgbGlua0RhdGFNb2RlbC50ZXh0Lmxlbmd0aCwgbGlua0RhdGFNb2RlbCB9KTtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VCeShuZXcgUmVwbGFjZU1vZGVsKHsgaW5zZXJ0TGluayB9KSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNhdmVJbnNlcnRMaW5rVG9IaXN0b3J5KGluc2VydExpbmspO1xuICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0TGluayh0aGlzLnNlbGVjdGlvbi5jdXJzb3IsIGxpbmtEYXRhTW9kZWwpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgICAgICB0aGlzLnJlcmVuZGVyTWFya2VyKCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0VGFibGUodGFibGVEYXRhOiB7IHJvd3M6IG51bWJlcjsgY29sdW1uczogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5zZXJ0SW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleChcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi53cmFwUGFyYWdyYXBoSW5kZXgsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5yb3csXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5jb2x1bW5cbiAgICAgICAgKTtcbiAgICAgICAgbGV0IHRleHRUb0luc2VydCA9IFRBQkxFX01BUktFUjtcbiAgICAgICAgbGV0IGluc2VydFRhYmxlSW5kZXggPSBpbnNlcnRJbmRleDtcbiAgICAgICAgaWYgKCF0aGlzLnNlc3Npb24ud3JhcFBhcmFncmFwaEluZGV4LnNvbWUoeCA9PiB4ID09PSBpbnNlcnRJbmRleCkpIHtcbiAgICAgICAgICAgIHRleHRUb0luc2VydCA9IE5FV19MSU5FX01BUktVUCArIHRleHRUb0luc2VydDtcbiAgICAgICAgICAgIGluc2VydFRhYmxlSW5kZXgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5zZXNzaW9uLmRvY3VtZW50LmlzTmV3TGluZVN5bWJvbChpbnNlcnRJbmRleCkpIHtcbiAgICAgICAgICAgIHRleHRUb0luc2VydCA9IHRleHRUb0luc2VydCArIE5FV19MSU5FX01BUktVUDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluc2VydFRhYmxlID0gbmV3IEluc2VydFRhYmxlTW9kZWwoe1xuICAgICAgICAgICAgaW5zZXJ0SW5kZXgsXG4gICAgICAgICAgICBpbnNlcnRUYWJsZUluZGV4LFxuICAgICAgICAgICAgcm93c0NvdW50OiB0YWJsZURhdGEucm93cyxcbiAgICAgICAgICAgIGNvbHVtbnNDb3VudDogdGFibGVEYXRhLmNvbHVtbnMsXG4gICAgICAgICAgICBjb250ZW50OiB0ZXh0VG9JbnNlcnRcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSkge1xuICAgICAgICAgICAgdGhpcy5yZXBsYWNlQnkobmV3IFJlcGxhY2VNb2RlbCh7IGluc2VydFRhYmxlIH0pKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2F2ZUluc2VydFRhYmxlVG9IaXN0b3J5KGluc2VydFRhYmxlKTtcbiAgICAgICAgY29uc3QgZW5kUG9pbnQgPSB0aGlzLnNlc3Npb24uaW5zZXJ0VGFibGUodGhpcy5zZWxlY3Rpb24uY3Vyc29yLCBpbnNlcnRUYWJsZSk7XG4gICAgICAgIGxldCBsYXN0Um93ID0gdGhpcy5zZWxlY3Rpb24uY3Vyc29yLnJvdyA9PT0gZW5kUG9pbnQucm93ID8gZW5kUG9pbnQucm93IDogSW5maW5pdHk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlTGluZXModGhpcy5zZWxlY3Rpb24uY3Vyc29yLnJvdywgbGFzdFJvdyk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7XG4gICAgICAgIHRoaXMucmVyZW5kZXJNYXJrZXIoKTtcbiAgICB9XG5cbiAgICByZXBsYWNlQnkobW9kZWw6IFJlcGxhY2VNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhQb3NpdGlvblRvRG9jdW1lbnRJbmRleCh0aGlzLnNlc3Npb24ud3JhcFBhcmFncmFwaEluZGV4LCB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydCk7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhQb3NpdGlvblRvRG9jdW1lbnRJbmRleCh0aGlzLnNlc3Npb24ud3JhcFBhcmFncmFwaEluZGV4LCB0aGlzLnNlbGVjdGlvbi5yYW5nZS5lbmQpIC0gMTtcbiAgICAgICAgbW9kZWwuZGVsZXRlID0gbmV3IERlbGV0ZU1vZGVsKHsgc3RhcnRJbmRleCwgZW5kSW5kZXggfSk7XG4gICAgICAgIHRoaXMuc2F2ZVJlcGxhY2VUb0hpc3RvcnkodGhpcy5zZWxlY3Rpb24ucmFuZ2UsIG1vZGVsKTtcbiAgICAgICAgY29uc3QgZW5kUG9pbnQgPSB0aGlzLnNlc3Npb24ucmVwbGFjZShtb2RlbCk7XG4gICAgICAgIHRoaXMub25Eb2N1bWVudENoYW5nZShuZXcgUmFuZ2UodGhpcy5zZWxlY3Rpb24uY3Vyc29yLCBlbmRQb2ludCkpO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlVG9MaW5lU3RhcnQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RMaW5lU3RhcnQodGhpcy5zZXNzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGVkKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlVG9MaW5lRW5kKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0TGluZUVuZCh0aGlzLnNlc3Npb24pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICByZW1vdmVXb3JkTGVmdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdFdvcmRMZWZ0KHRoaXMuc2Vzc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZCgpO1xuICAgIH1cblxuICAgIHJlbW92ZVdvcmRSaWdodCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdFdvcmRSaWdodCh0aGlzLnNlc3Npb24pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICBhcHBseVRleHRTdHlsZXModGV4dFN0eWxlOiBUZXh0U3R5bGVNb2RlbCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRleHRTdHlsZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ibHVyQ3VzdG9tQ29tcG9uZW50KCk7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSkge1xuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvbi5yYW5nZTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleCh0aGlzLnNlc3Npb24ud3JhcFBhcmFncmFwaEluZGV4LCByYW5nZS5zdGFydC5yb3csIHJhbmdlLnN0YXJ0LmNvbHVtbik7XG4gICAgICAgICAgICBjb25zdCBlbmRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoVG9Eb2N1bWVudEluZGV4KHRoaXMuc2Vzc2lvbi53cmFwUGFyYWdyYXBoSW5kZXgsIHJhbmdlLmVuZC5yb3csIHJhbmdlLmVuZC5jb2x1bW4pIC0gMTtcbiAgICAgICAgICAgIHRoaXMuc2F2ZUFwcGx5VGV4dFN0eWxlVG9IaXN0b3J5KHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0ZXh0U3R5bGUpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmFwcGx5VGV4dFN0eWxlKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0ZXh0U3R5bGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXRUZXh0U3R5bGUodGV4dFN0eWxlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFRleHRTdHlsZSh0ZXh0U3R5bGU6IFRleHRTdHlsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhQb3NpdGlvblRvRG9jdW1lbnRJbmRleCh0aGlzLnNlc3Npb24ud3JhcFBhcmFncmFwaEluZGV4LCB0aGlzLnNlbGVjdGlvbi5jdXJzb3IpO1xuICAgICAgICBjb25zdCBpc1BhcmFncmFwaCA9IHRoaXMuc2Vzc2lvbi5tb2RlbC5jb250ZW50TGVuZ3RoID09PSBpbmRleCB8fCB0aGlzLnNlc3Npb24ubW9kZWwuY29udGVudFtpbmRleF0gPT09IE5FV19MSU5FX01BUktVUDtcbiAgICAgICAgaWYgKGlzUGFyYWdyYXBoKSB7XG4gICAgICAgICAgICB0aGlzLnNhdmVBcHBseVRleHRTdHlsZVRvSGlzdG9yeShpbmRleCwgaW5kZXgsIHRleHRTdHlsZSk7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uYXBwbHlUZXh0U3R5bGUoaW5kZXgsIGluZGV4LCB0ZXh0U3R5bGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnNldFRleHRTdHlsZSh0ZXh0U3R5bGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7XG4gICAgfVxuXG4gICAgYXBwbHlQYXJhZ3JhcGhTdHlsZXMocGFyYWdyYXBoU3R5bGU6IFBhcmFncmFwaFN0eWxlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvbi5yYW5nZTtcbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IHRoaXMuc2Vzc2lvbi5tb2RlbC5wYXJhZ3JhcGhzW3JhbmdlLnN0YXJ0LnJvd10uaW5zZXJ0SW5kZXg7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdGhpcy5zZXNzaW9uLm1vZGVsLnBhcmFncmFwaHNbcmFuZ2UuZW5kLnJvd10uaW5zZXJ0SW5kZXg7XG4gICAgICAgIHRoaXMuc2F2ZUFwcGx5UGFyYWdyYXBoU3R5bGVUb0hpc3Rvcnkoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHBhcmFncmFwaFN0eWxlKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLmFwcGx5UGFyYWdyYXBoU3R5bGUoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHBhcmFncmFwaFN0eWxlKTtcbiAgICB9XG5cbiAgICBhcHBseUVsZW1lbnRTdHlsZShjdXJyZW50OiBFbGVtZW50TW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXNzaW9uLmFwcGx5RWxlbWVudFN0eWxlKG5ldyBBcHBseUVsZW1lbnRTdHlsZU1vZGVsKGN1cnJlbnQpKTtcbiAgICB9XG5cbiAgICBoYW5kbGVJbWFnZVN0eWxlQ2hhbmdlKHByZXZpb3VzOiBJbWFnZU1vZGVsLCBjdXJyZW50OiBJbWFnZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoQXBwbHlJbWFnZVN0eWxlKHByZXZpb3VzLCBjdXJyZW50KTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnNlc3Npb24uZG9jdW1lbnQuaW5kZXhUb1Bvc2l0aW9uKGN1cnJlbnQuaW5zZXJ0SW5kZXgsIDApO1xuICAgICAgICB0aGlzLnNlc3Npb24udXBkYXRlV3JhcERhdGEoc3RhcnQucm93LCB0aGlzLnNlc3Npb24uZG9jdW1lbnQubGluZXMubGVuZ3RoIC0gMSk7XG4gICAgfVxuXG4gICAgc2V0TnVtYmVyaW5nVGVtcGxhdGUodGVtcGxhdGVMZXZlbHM6IE51bWJlcmluZ0xldmVsTW9kZWxbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuc2VsZWN0aW9uLnJhbmdlO1xuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gdGhpcy5zZXNzaW9uLm1vZGVsLnBhcmFncmFwaHNbcmFuZ2Uuc3RhcnQucm93XS5pbnNlcnRJbmRleDtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSB0aGlzLnNlc3Npb24ubW9kZWwucGFyYWdyYXBoc1tyYW5nZS5lbmQucm93XS5pbnNlcnRJbmRleDtcbiAgICAgICAgdGhpcy5zYXZlQWRkTnVtYmVyaW5nVG9IaXN0b3J5KHRlbXBsYXRlTGV2ZWxzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5hZGROdW1iZXJpbmcodGVtcGxhdGVMZXZlbHMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICB9XG5cbiAgICByZW1vdmVOdW1iZXJpbmdzRnJvbVBhcmFncmFwaHMoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5zZWxlY3Rpb24ucmFuZ2U7XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLnNlc3Npb24ubW9kZWwucGFyYWdyYXBoc1tyYW5nZS5zdGFydC5yb3ddLmluc2VydEluZGV4O1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IHRoaXMuc2Vzc2lvbi5tb2RlbC5wYXJhZ3JhcGhzW3JhbmdlLmVuZC5yb3ddLmluc2VydEluZGV4O1xuICAgICAgICB0aGlzLnNhdmVSZW1vdmVOdW1iZXJpbmdUb0hpc3Rvcnkoc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlTnVtYmVyaW5ncyhzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgfVxuXG4gICAgYXBwbHlJbWFnZVN0eWxlcyhpbWFnZTogSW1hZ2VNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNhdmVBcHBseUltYWdlU3R5bGVUb0hpc3RvcnkoaW1hZ2UpO1xuICAgICAgICBjb25zdCBpbWFnZVN0eWxlID0gbmV3IEFwcGx5SW1hZ2VTdHlsZU1vZGVsKHsgaW5zZXJ0SW5kZXg6IGltYWdlLmluc2VydEluZGV4LCBoZWlnaHQ6IGltYWdlLmhlaWdodCwgd2lkdGg6IGltYWdlLndpZHRoIH0pO1xuICAgICAgICB0aGlzLnNlc3Npb24uYXBwbHlJbWFnZVN0eWxlKGltYWdlU3R5bGUpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgIH1cblxuICAgIGZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRleHRJbnB1dC5pbnB1dC5mb2N1cygpO1xuICAgIH1cblxuICAgIG9wZW5TZWFyY2goKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5vcGVuU2VhcmNoRGlhbG9nID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmaW5kKG9wdGlvbnM6IFNlYXJjaE9wdGlvbnMpOiBSYW5nZSB7XG4gICAgICAgIGxldCByYW5nZSA9IHRoaXMuc2VsZWN0aW9uLnJhbmdlO1xuICAgICAgICBpZiAob3B0aW9ucy50ZXJtID09IG51bGwpIHtcbiAgICAgICAgICAgIGxldCB0ZXJtID0gdGhpcy5zZXNzaW9uLmRvY3VtZW50LmdldFRleHRSYW5nZShyYW5nZSkgfHwgdGhpcy5zZWFyY2gub3B0aW9ucy50ZXJtO1xuICAgICAgICAgICAgaWYgKCF0ZXJtKSB7XG4gICAgICAgICAgICAgICAgcmFuZ2UgPSB0aGlzLnNlc3Npb24uZ2V0V29yZFJhbmdlKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uKTtcbiAgICAgICAgICAgICAgICB0ZXJtID0gdGhpcy5zZXNzaW9uLmRvY3VtZW50LmdldFRleHRSYW5nZShyYW5nZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zLnRlcm0gPSB0ZXJtO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLnN0YXJ0KSB7XG4gICAgICAgICAgICBvcHRpb25zLnN0YXJ0ID0gcmFuZ2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlYXJjaC5zZXQob3B0aW9ucyk7XG5cbiAgICAgICAgY29uc3QgbmV3UmFuZ2UgPSB0aGlzLnNlYXJjaC5maW5kKHRoaXMuc2Vzc2lvbik7XG4gICAgICAgIGlmIChuZXdSYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VTZWxlY3Rpb24ocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXNzaW9uID09PSB0aGlzLm1haW5TZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYWluUmVuZGVyZXIuc2Nyb2xsU2VsZWN0aW9uSW50b1ZpZXcocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCwgMC41KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXdSYW5nZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJhbmdlLmVuZCA9IHJhbmdlLnN0YXJ0O1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZUN1cnNvcihyYW5nZS5zdGFydCk7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdXBkYXRlQ291bnRlcigpOiBTZWFyY2hJdGVyYXRpb24ge1xuICAgICAgICBjb25zdCByZWdleCA9IHRoaXMuc2VhcmNoLm9wdGlvbnMucmVnZXggYXMgUmVnRXhwO1xuICAgICAgICBsZXQgYWxsID0gMDtcbiAgICAgICAgbGV0IGN1cnJlbnQgPSAwO1xuICAgICAgICBpZiAoIXJlZ2V4KSB7XG4gICAgICAgICAgICByZXR1cm4geyBjdXJyZW50OiAwLCB0b3RhbDogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnNlc3Npb24uZG9jdW1lbnQuZ2V0QWxsTGluZXMoKS5qb2luKCdcXG4nKTtcblxuICAgICAgICBsZXQgb2Zmc2V0ID0gdGhpcy5zZXNzaW9uLmRvY3VtZW50LnBvc2l0aW9uVG9JbmRleCh0aGlzLnNlc3Npb24uZG9jdW1lbnQubGluZXMsIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0KTtcblxuICAgICAgICByZWdleC5sYXN0SW5kZXggPSAwO1xuICAgICAgICBsZXQgcmVnZXhSZXN1bHQ7XG4gICAgICAgIHdoaWxlICgocmVnZXhSZXN1bHQgPSByZWdleC5leGVjKHZhbHVlKSkpIHtcbiAgICAgICAgICAgIGFsbCsrO1xuICAgICAgICAgICAgbGV0IGxhc3QgPSByZWdleFJlc3VsdC5pbmRleDtcbiAgICAgICAgICAgIGlmIChsYXN0IDw9IG9mZnNldCkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnQrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhbGwgPiB0aGlzLk1BWF9DT1VOVCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgY3VycmVudDogY3VycmVudCwgdG90YWw6IGFsbCA+IHRoaXMuTUFYX0NPVU5UID8gdGhpcy5NQVhfQ09VTlQgOiBhbGwgfTtcbiAgICB9XG5cbiAgICByZXBsYWNlKHNlYXJjaDogc3RyaW5nLCByZXBsYWNlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZWFyY2ggIT09IHJlcGxhY2UpIHtcbiAgICAgICAgICAgIGlmIChyZXBsYWNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXBsYWNlVGV4dChyZXBsYWNlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5maW5kKHsgdGVybTogc2VhcmNoLCBza2lwQ3VycmVudDogdHJ1ZSwgYmFja3dhcmRzOiBmYWxzZSB9KTtcbiAgICB9XG5cbiAgICB1bmRvKCk6IHZvaWQge1xuICAgICAgICBjb25zdCB1bmRvID0gdGhpcy5oaXN0b3J5LnBvcFVuZG9PcGVyYXRpb24oKTtcbiAgICAgICAgaWYgKCF1bmRvKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLnNldFRhcmdldGVkU2Vzc2lvbkFzQ3VycmVudCh1bmRvLnRhcmdldHMpO1xuICAgICAgICB0aGlzLmFwcGx5T3BlcmF0aW9uKHVuZG8ub3BlcmF0aW9uKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VTZWxlY3Rpb24odW5kby5jdXJzb3IsIHVuZG8uYW5jaG9yKTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIHJlZG8oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlZG8gPSB0aGlzLmhpc3RvcnkucG9wUmVkb09wZXJhdGlvbigpO1xuICAgICAgICBpZiAoIXJlZG8pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlZ3VsYXRvclNlcnZpY2Uuc2V0VGFyZ2V0ZWRTZXNzaW9uQXNDdXJyZW50KHJlZG8udGFyZ2V0cyk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlU2VsZWN0aW9uKHJlZG8uY3Vyc29yLCByZWRvLmFuY2hvcik7XG4gICAgICAgIHRoaXMuYXBwbHlPcGVyYXRpb24ocmVkby5vcGVyYXRpb24pO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgYXBwbHlPcGVyYXRpb24ob3BlcmF0aW9uOiBPcGVyYXRpb24pOiB2b2lkIHtcbiAgICAgICAgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEluc2VydFRleHRNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydFRleHRCeURvY3VtZW50SW5kZXgob3BlcmF0aW9uLmluc2VydEluZGV4LCBvcGVyYXRpb24udGV4dCwgbnVsbCk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgRGVsZXRlTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVCeURvY3VtZW50SW5kZXhlcyhvcGVyYXRpb24uc3RhcnRJbmRleCwgb3BlcmF0aW9uLmVuZEluZGV4KTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBJbnNlcnRTdHlsZWRUZXh0TW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnRUZXh0QnlEb2N1bWVudEluZGV4KG9wZXJhdGlvbi5pbnNlcnRJbmRleCwgb3BlcmF0aW9uLnRleHQsIG5ldyBUZXh0U3R5bGVNb2RlbChvcGVyYXRpb24udGV4dFN0eWxlKSk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgUmVzdG9yZU1vZGVsKSB7XG4gICAgICAgICAgICBjb25zdCBkZWVwQ29weSA9IHN0cnVjdHVyZWRDbG9uZShvcGVyYXRpb24pO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlc3RvcmUoZGVlcENvcHkpO1xuICAgICAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVzdG9yZUNvbW1hbmQoZGVlcENvcHkpKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBBcHBseVRleHRTdHlsZU1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uYXBwbHlUZXh0U3R5bGUob3BlcmF0aW9uLnN0YXJ0SW5kZXgsIG9wZXJhdGlvbi5lbmRJbmRleCwgbmV3IFRleHRTdHlsZU1vZGVsKG9wZXJhdGlvbi50ZXh0U3R5bGUpKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBBcHBseVBhcmFncmFwaFN0eWxlTW9kZWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvcHkgPSBuZXcgUGFyYWdyYXBoU3R5bGVNb2RlbChvcGVyYXRpb24ucGFyYWdyYXBoU3R5bGUpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmFwcGx5UGFyYWdyYXBoU3R5bGUob3BlcmF0aW9uLnN0YXJ0SW5kZXgsIG9wZXJhdGlvbi5lbmRJbmRleCwgY29weSk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgUmVzdG9yZVRleHRTdHlsZXNNb2RlbCkge1xuICAgICAgICAgICAgY29uc3QgZGVlcENvcHkgPSBzdHJ1Y3R1cmVkQ2xvbmUob3BlcmF0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZXN0b3JlVGV4dFN0eWxlcyhkZWVwQ29weS5mb3JtYXRzKTtcbiAgICAgICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldFJlc3RvcmVUZXh0U3R5bGVzQ29tbWFuZChkZWVwQ29weS5mb3JtYXRzKSk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgUmVzdG9yZVBhcmFncmFwaFN0eWxlc01vZGVsKSB7XG4gICAgICAgICAgICBjb25zdCBkZWVwQ29weSA9IHN0cnVjdHVyZWRDbG9uZShvcGVyYXRpb24pO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlc3RvcmVQYXJhZ3JhcGhTdHlsZXMoZGVlcENvcHkucGFyYWdyYXBocyk7XG4gICAgICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFNhdmVDb21tYW5kc0hlbHBlci5nZXRSZXN0b3JlUGFyYWdyYXBoU3R5bGVzQ29tbWFuZChkZWVwQ29weS5wYXJhZ3JhcGhzKSk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgSW5zZXJ0RWxlbWVudE1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0RWxlbWVudEJ5RG9jdW1lbnRJbmRleChvcGVyYXRpb24pO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEluc2VydEJyZWFrTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnRCcmVha0J5RG9jdW1lbnRJbmRleChvcGVyYXRpb24pO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEFwcGx5RWxlbWVudFN0eWxlTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5hcHBseUVsZW1lbnRTdHlsZShvcGVyYXRpb24pO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEluc2VydFRhYk1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0VGFiQnlEb2N1bWVudEluZGV4KG9wZXJhdGlvbik7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgSW5zZXJ0SW1hZ2VNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydEltYWdlQnlEb2N1bWVudEluZGV4KG9wZXJhdGlvbik7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgQXBwbHlJbWFnZVN0eWxlTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5hcHBseUltYWdlU3R5bGUob3BlcmF0aW9uKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBBZGROdW1iZXJpbmdNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmFkZE51bWJlcmluZyhvcGVyYXRpb24ubGV2ZWxzLCBvcGVyYXRpb24uc3RhcnRJbmRleCwgb3BlcmF0aW9uLmVuZEluZGV4KTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBSZXN0b3JlTnVtYmVyaW5nc01vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVzdG9yZU51bWJlcmluZ3Mob3BlcmF0aW9uLnBhcmFncmFwaHMsIG9wZXJhdGlvbi5udW1iZXJpbmdzKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBJbnNlcnRUYWJsZUNvbHVtbnNNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydFRhYmxlQ29sdW1ucyhvcGVyYXRpb24uaW5zZXJ0SW5kZXgsIG9wZXJhdGlvbi5jb2x1bW5zQ291bnQsIG9wZXJhdGlvbi50YXJnZXRJbmRleCwgb3BlcmF0aW9uLmluaGVyaXRJbmRleCk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUob3BlcmF0aW9uLmluc2VydEluZGV4LCB0aGlzLnNlc3Npb24uc2Vzc2lvbklkKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBJbnNlcnRUYWJsZVJvd3NNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydFRhYmxlUm93cyhvcGVyYXRpb24uaW5zZXJ0SW5kZXgsIG9wZXJhdGlvbi5yb3dzQ291bnQsIG9wZXJhdGlvbi50YXJnZXRJbmRleCwgb3BlcmF0aW9uLmluaGVyaXRJbmRleCk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUob3BlcmF0aW9uLmluc2VydEluZGV4LCB0aGlzLnNlc3Npb24uc2Vzc2lvbklkKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBSZW1vdmVUYWJsZUNvbHVtbnNNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZVRhYmxlQ29sdW1ucyhvcGVyYXRpb24uaW5zZXJ0SW5kZXgsIG9wZXJhdGlvbi5zdGFydEluZGV4LCBvcGVyYXRpb24uZW5kSW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkVGFibGVTaXplKG9wZXJhdGlvbi5pbnNlcnRJbmRleCwgdGhpcy5zZXNzaW9uLnNlc3Npb25JZCk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgUmVtb3ZlVGFibGVSb3dzTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVUYWJsZVJvd3Mob3BlcmF0aW9uLmluc2VydEluZGV4LCBvcGVyYXRpb24uc3RhcnRJbmRleCwgb3BlcmF0aW9uLmVuZEluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZShvcGVyYXRpb24uaW5zZXJ0SW5kZXgsIHRoaXMuc2Vzc2lvbi5zZXNzaW9uSWQpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIFJlc2l6ZVRhYmxlQ29sdW1uc01vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVzaXplVGFibGVDb2x1bW5zKG9wZXJhdGlvbik7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUob3BlcmF0aW9uLmluc2VydEluZGV4LCB0aGlzLnNlc3Npb24uc2Vzc2lvbklkKTtcbiAgICAgICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldFJlc2l6ZVRhYmxlQ29sdW1uc0NvbW1hbmQob3BlcmF0aW9uKSk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgUmVzdG9yZVRhYmxlTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZXN0b3JlVGFibGUob3BlcmF0aW9uLmluc2VydEluZGV4LCBvcGVyYXRpb24ub2xkVGFibGUpO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkVGFibGVTaXplKG9wZXJhdGlvbi5pbnNlcnRJbmRleCwgdGhpcy5zZXNzaW9uLnNlc3Npb25JZCk7XG4gICAgICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFNhdmVDb21tYW5kc0hlbHBlci5nZXRSZXN0b3JlVGFibGVDb21tYW5kKG9wZXJhdGlvbikpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEluc2VydFRhYmxlTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnRUYWJsZUJ5RG9jdW1lbnRJbmRleChvcGVyYXRpb24pO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIFJlbW92ZU51bWJlcmluZ3NNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZU51bWJlcmluZ3Mob3BlcmF0aW9uLnN0YXJ0SW5kZXgsIG9wZXJhdGlvbi5lbmRJbmRleCk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgUmVwbGFjZU1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVwbGFjZShvcGVyYXRpb24pO1xuICAgICAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVwbGFjZUNvbW1hbmQob3BlcmF0aW9uLCB0aGlzLnRhcmdldHMpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgIH1cblxuICAgIHNhdmVSZW1vdmVUb0hpc3RvcnkocmFuZ2U6IFJhbmdlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc3RvcmVNb2RlbCA9IHRoaXMuY3JlYXRlUmVzdG9yZUZyb21TbGljZShyYW5nZS5zdGFydC5yb3csIHJhbmdlLnN0YXJ0LmNvbHVtbiwgcmFuZ2UuZW5kLnJvdywgcmFuZ2UuZW5kLmNvbHVtbik7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gcmVzdG9yZU1vZGVsLmVuZEluZGV4O1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaERlbGV0ZShyZXN0b3JlTW9kZWwpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFNhdmVDb21tYW5kc0hlbHBlci5nZXREZWxldGVDb21tYW5kKHJlc3RvcmVNb2RlbC5zdGFydEluZGV4LCBlbmRJbmRleCwgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgc2F2ZUluc2VydFRleHRUb0hpc3RvcnkocGFyYWdyYXBoOiBudW1iZXIsIGluZGV4SW5QYXJhZ3JhcGg6IG51bWJlciwgdGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhUb0RvY3VtZW50SW5kZXgodGhpcy5zZXNzaW9uLndyYXBQYXJhZ3JhcGhJbmRleCwgcGFyYWdyYXBoLCBpbmRleEluUGFyYWdyYXBoKTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hJbnNlcnRUZXh0KGluZGV4LCB0ZXh0KTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0VGV4dENvbW1hbmQodGV4dCwgaW5kZXgsIHRoaXMudGFyZ2V0cykpO1xuICAgIH1cblxuICAgIHNhdmVJbnNlcnRTdHlsZWRUZXh0VG9IaXN0b3J5KHBhcmFncmFwaDogbnVtYmVyLCBpbmRleEluUGFyYWdyYXBoOiBudW1iZXIsIHRleHQ6IHN0cmluZywgc3R5bGU6IFRleHRTdHlsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhUb0RvY3VtZW50SW5kZXgodGhpcy5zZXNzaW9uLndyYXBQYXJhZ3JhcGhJbmRleCwgcGFyYWdyYXBoLCBpbmRleEluUGFyYWdyYXBoKTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hJbnNlcnRTdHlsZWRUZXh0KGluZGV4LCB0ZXh0LCBzdHlsZSk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFN0eWxlZFRleHRDb21tYW5kKHRleHQsIGluZGV4LCBzdHlsZSwgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgc2F2ZUluc2VydEVsZW1lbnRUb0hpc3RvcnkobW9kZWw6IEluc2VydEVsZW1lbnRNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEluc2VydEVsZW1lbnQobW9kZWwpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRFbGVtZW50Q29tbWFuZChtb2RlbCwgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgc2F2ZUluc2VydEJyZWFrVG9IaXN0b3J5KG1vZGVsOiBJbnNlcnRCcmVha01vZGVsKTogdm9pZCB7XG4gICAgICAgIG1vZGVsLmlzT25OZXdQYXJhZ3JhcGggPVxuICAgICAgICAgICAgbW9kZWwuYnJlYWtUeXBlID09PSBCcmVha1R5cGVzLlBhZ2UgJiZcbiAgICAgICAgICAgIEJyZWFrSGVscGVyLmdldEJyZWFrVHlwZSh0aGlzLnNlc3Npb24ubW9kZWwsIENVU1RPTV9FTEVNRU5UX01BUktFUiwgbW9kZWwuaW5zZXJ0SW5kZXggLSAxKSAhPT0gQnJlYWtUeXBlcy5QYWdlO1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IG1vZGVsLmlzT25OZXdQYXJhZ3JhcGggPyBtb2RlbC5pbnNlcnRJbmRleCArIE5FV19MSU5FX01BUktVUC5sZW5ndGggKyAxIDogbW9kZWwuaW5zZXJ0SW5kZXggKyAxO1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEluc2VydEJyZWFrKG1vZGVsLCBlbmRJbmRleCk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydEJyZWFrQ29tbWFuZChtb2RlbCwgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgc2F2ZUluc2VydFRhYlRvSGlzdG9yeShtb2RlbDogSW5zZXJ0VGFiTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hJbnNlcnRUYWIobW9kZWwpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRUYWJDb21tYW5kKG1vZGVsLCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBzYXZlSW5zZXJ0SW1hZ2VUb0hpc3RvcnkobW9kZWw6IEluc2VydEltYWdlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hJbnNlcnRJbWFnZShtb2RlbCk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydEltYWdlQ29tbWFuZChtb2RlbCwgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgc2F2ZUluc2VydExpbmtUb0hpc3RvcnkobW9kZWw6IEluc2VydExpbmtNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEluc2VydExpbmsobW9kZWwpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRMaW5rT3BlcmF0aW9uKG1vZGVsLCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBzYXZlSW5zZXJ0VGFibGVUb0hpc3RvcnkobW9kZWw6IEluc2VydFRhYmxlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hJbnNlcnRUYWJsZShtb2RlbCk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFRhYmxlQ29tbWFuZChtb2RlbCwgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgc2F2ZUFwcGx5VGV4dFN0eWxlVG9IaXN0b3J5KHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlciwgdGV4dFN0eWxlOiBUZXh0U3R5bGVNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBmb3JtYXRzID0gRm9ybWF0SGVscGVyLnNsaWNlU2VjdGlvbih0aGlzLnNlc3Npb24ubW9kZWwuZm9ybWF0cywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEFwcGx5VGV4dFN0eWxlKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0ZXh0U3R5bGUsIGZvcm1hdHMpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFNhdmVDb21tYW5kc0hlbHBlci5nZXRBcHBseVRleHRTdHlsZUNvbW1hbmQoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRleHRTdHlsZSwgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgc2F2ZUFwcGx5UGFyYWdyYXBoU3R5bGVUb0hpc3Rvcnkoc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyLCBwYXJhZ3JhcGhTdHlsZTogUGFyYWdyYXBoU3R5bGVNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhzID0gSW5kZXhlZEVsZW1lbnRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC5wYXJhZ3JhcGhzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaHNEZWVwQ29weSA9IHBhcmFncmFwaHMubWFwKFxuICAgICAgICAgICAgeCA9PiBuZXcgUGFyYWdyYXBoTW9kZWwoeyBpbnNlcnRJbmRleDogeC5pbnNlcnRJbmRleCwgcGFyYWdyYXBoU3R5bGU6IG5ldyBQYXJhZ3JhcGhTdHlsZU1vZGVsKHsgLi4ueC5wYXJhZ3JhcGhTdHlsZSB9KSB9KVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEFwcGx5UGFyYWdyYXBoU3R5bGUoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHBhcmFncmFwaFN0eWxlLCBwYXJhZ3JhcGhzRGVlcENvcHkpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFxuICAgICAgICAgICAgU2F2ZUNvbW1hbmRzSGVscGVyLmdldEFwcGx5UGFyYWdyYXBoU3R5bGVDb21tYW5kKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBwYXJhZ3JhcGhTdHlsZSwgdGhpcy50YXJnZXRzKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHNhdmVBZGROdW1iZXJpbmdUb0hpc3RvcnkodGVtcGxhdGVMZXZlbHM6IE51bWJlcmluZ0xldmVsTW9kZWxbXSwgc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaHMgPSBJbmRleGVkRWxlbWVudEhlbHBlci5zbGljZVNlY3Rpb24odGhpcy5zZXNzaW9uLm1vZGVsLnBhcmFncmFwaHMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoc0RlZXBDb3B5ID0gcGFyYWdyYXBocy5tYXAoXG4gICAgICAgICAgICB4ID0+IG5ldyBQYXJhZ3JhcGhNb2RlbCh7IGluc2VydEluZGV4OiB4Lmluc2VydEluZGV4LCBwYXJhZ3JhcGhTdHlsZTogbmV3IFBhcmFncmFwaFN0eWxlTW9kZWwoeyAuLi54LnBhcmFncmFwaFN0eWxlIH0pIH0pXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJlbW92ZWROdW1iZXJpbmdJZHMgPSBbLi4ubmV3IFNldChwYXJhZ3JhcGhzLm1hcCh4ID0+IHgucGFyYWdyYXBoU3R5bGUubnVtYmVyaW5nSWQpKV07XG4gICAgICAgIGNvbnN0IG51bWJlcmluZ3MgPSB0aGlzLnNlc3Npb24ucHJvcGVydGllcy5udW1iZXJpbmdzLmZpbHRlcih4ID0+IHJlbW92ZWROdW1iZXJpbmdJZHMuaW5jbHVkZXMoeC5udW1iZXJpbmdJZCkpO1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEFkZE51bWJlcmluZyhzdGFydEluZGV4LCBlbmRJbmRleCwgdGVtcGxhdGVMZXZlbHMsIHBhcmFncmFwaHNEZWVwQ29weSwgbnVtYmVyaW5ncyk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldEFkZE51bWJlcmluZ0NvbW1hbmQoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRlbXBsYXRlTGV2ZWxzLCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBzYXZlUmVtb3ZlTnVtYmVyaW5nVG9IaXN0b3J5KHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhzID0gSW5kZXhlZEVsZW1lbnRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC5wYXJhZ3JhcGhzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaHNEZWVwQ29weSA9IHBhcmFncmFwaHMubWFwKFxuICAgICAgICAgICAgeCA9PiBuZXcgUGFyYWdyYXBoTW9kZWwoeyBpbnNlcnRJbmRleDogeC5pbnNlcnRJbmRleCwgcGFyYWdyYXBoU3R5bGU6IG5ldyBQYXJhZ3JhcGhTdHlsZU1vZGVsKHsgLi4ueC5wYXJhZ3JhcGhTdHlsZSB9KSB9KVxuICAgICAgICApO1xuICAgICAgICBjb25zdCByZW1vdmVkTnVtYmVyaW5nSWRzID0gWy4uLm5ldyBTZXQocGFyYWdyYXBocy5tYXAoeCA9PiB4LnBhcmFncmFwaFN0eWxlLm51bWJlcmluZ0lkKSldO1xuICAgICAgICBjb25zdCBudW1iZXJpbmdzID0gdGhpcy5zZXNzaW9uLnByb3BlcnRpZXMubnVtYmVyaW5ncy5maWx0ZXIoeCA9PiByZW1vdmVkTnVtYmVyaW5nSWRzLmluY2x1ZGVzKHgubnVtYmVyaW5nSWQpKTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hSZW1vdmVOdW1iZXJpbmdzKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBudW1iZXJpbmdzLCBwYXJhZ3JhcGhzRGVlcENvcHkpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFNhdmVDb21tYW5kc0hlbHBlci5nZXRSZW1vdmVOdW1iZXJpbmdzQ29tbWFuZChzdGFydEluZGV4LCBlbmRJbmRleCwgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzYXZlQXBwbHlJbWFnZVN0eWxlVG9IaXN0b3J5KGltYWdlOiBJbWFnZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHByZXZpb3VzID0gdGhpcy5zZXNzaW9uLm1vZGVsLmltYWdlcy5maW5kKHggPT4geC5pbnNlcnRJbmRleCA9PT0gaW1hZ2UuaW5zZXJ0SW5kZXgpO1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEFwcGx5SW1hZ2VTdHlsZShwcmV2aW91cywgaW1hZ2UpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFxuICAgICAgICAgICAgU2F2ZUNvbW1hbmRzSGVscGVyLmdldEFwcGx5SW1hZ2VTdHlsZUNvbW1hbmQoaW1hZ2UuaGVpZ2h0LCBpbWFnZS53aWR0aCwgaW1hZ2UuaW5zZXJ0SW5kZXgsIHRoaXMudGFyZ2V0cylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNhdmVSZXBsYWNlVG9IaXN0b3J5KHJhbmdlOiBSYW5nZSwgbW9kZWw6IFJlcGxhY2VNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZXN0b3JlTW9kZWwgPSB0aGlzLmNyZWF0ZVJlc3RvcmVGcm9tU2xpY2UocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5zdGFydC5jb2x1bW4sIHJhbmdlLmVuZC5yb3csIHJhbmdlLmVuZC5jb2x1bW4pO1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaFJlcGxhY2UocmVzdG9yZU1vZGVsLCBtb2RlbCk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldFJlcGxhY2VDb21tYW5kKG1vZGVsLCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVJlc3RvcmVGcm9tU2xpY2UocGFyYWdyYXBoU3RhcnQ6IG51bWJlciwgaW5kZXhJblN0YXJ0OiBudW1iZXIsIHBhcmFncmFwaEVuZDogbnVtYmVyLCBpbmRleEluRW5kOiBudW1iZXIpOiBSZXN0b3JlTW9kZWwge1xuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhUb0RvY3VtZW50SW5kZXgodGhpcy5zZXNzaW9uLndyYXBQYXJhZ3JhcGhJbmRleCwgcGFyYWdyYXBoU3RhcnQsIGluZGV4SW5TdGFydCk7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhUb0RvY3VtZW50SW5kZXgodGhpcy5zZXNzaW9uLndyYXBQYXJhZ3JhcGhJbmRleCwgcGFyYWdyYXBoRW5kLCBpbmRleEluRW5kKSAtIDE7XG4gICAgICAgIGNvbnN0IHRleHQgPSB0aGlzLnNlc3Npb24ubW9kZWwuY29udGVudC5zbGljZShzdGFydEluZGV4LCBlbmRJbmRleCArIDEpO1xuICAgICAgICBjb25zdCBmb3JtYXRzID0gRm9ybWF0SGVscGVyLnNsaWNlU2VjdGlvbih0aGlzLnNlc3Npb24ubW9kZWwuZm9ybWF0cywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhzID0gSW5kZXhlZEVsZW1lbnRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC5wYXJhZ3JhcGhzLCBzdGFydEluZGV4LCBlbmRJbmRleCkubWFwKFxuICAgICAgICAgICAgeCA9PiBuZXcgUGFyYWdyYXBoTW9kZWwoeClcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaW1hZ2VzID0gSW5kZXhlZEVsZW1lbnRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC5pbWFnZXMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KS5tYXAoeCA9PiBuZXcgSW1hZ2VNb2RlbCh4KSk7XG4gICAgICAgIGNvbnN0IHRhYmxlcyA9IEluZGV4ZWRFbGVtZW50SGVscGVyLnNsaWNlU2VjdGlvbih0aGlzLnNlc3Npb24ubW9kZWwudGFibGVzLCBzdGFydEluZGV4LCBlbmRJbmRleCkubWFwKHggPT4gbmV3IFRhYmxlTW9kZWwoeCkpO1xuICAgICAgICBjb25zdCBlbGVtZW50cyA9IEluZGV4ZWRFbGVtZW50SGVscGVyLnNsaWNlU2VjdGlvbih0aGlzLnNlc3Npb24ubW9kZWwuZWxlbWVudHMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KS5tYXAoeCA9PiBuZXcgRWxlbWVudE1vZGVsKHgpKTtcbiAgICAgICAgY29uc3QgYnJlYWtzID0gSW5kZXhlZEVsZW1lbnRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC5icmVha3MsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KS5tYXAoeCA9PiBuZXcgQnJlYWtNb2RlbCh4KSk7XG4gICAgICAgIGNvbnN0IHRhYnMgPSBJbmRleGVkRWxlbWVudEhlbHBlci5zbGljZVNlY3Rpb24odGhpcy5zZXNzaW9uLm1vZGVsLnRhYnMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KS5tYXAoeCA9PiBuZXcgVGFiTW9kZWwoeCkpO1xuICAgICAgICByZXR1cm4gbmV3IFJlc3RvcmVNb2RlbCh7IHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0ZXh0LCBmb3JtYXRzLCBwYXJhZ3JhcGhzLCBpbWFnZXMsIHRhYmxlcywgZWxlbWVudHMsIGJyZWFrcywgdGFicyB9KTtcbiAgICB9XG5cbiAgICBjcmVhdGVDdXN0b21FbGVtZW50KGRhdGE6IEVsZW1lbnREYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5zZXJ0SW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleChcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi53cmFwUGFyYWdyYXBoSW5kZXgsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5yb3csXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5yYW5nZS5zdGFydC5jb2x1bW5cbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaW5zZXJ0RWxlbWVudCA9IG5ldyBJbnNlcnRFbGVtZW50TW9kZWwoeyBlbGVtZW50OiBuZXcgRWxlbWVudE1vZGVsKHsgLi4uZGF0YSwgaW5zZXJ0SW5kZXggfSkgfSk7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSkge1xuICAgICAgICAgICAgdGhpcy5yZXBsYWNlQnkobmV3IFJlcGxhY2VNb2RlbCh7IGluc2VydEVsZW1lbnQgfSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zYXZlSW5zZXJ0RWxlbWVudFRvSGlzdG9yeShpbnNlcnRFbGVtZW50KTtcbiAgICAgICAgY29uc3QgZW5kUG9pbnQgPSB0aGlzLnNlc3Npb24uaW5zZXJ0RWxlbWVudCh0aGlzLnNlbGVjdGlvbi5jdXJzb3IsIGRhdGEpO1xuICAgICAgICB0aGlzLm9uRG9jdW1lbnRDaGFuZ2UobmV3IFJhbmdlKHRoaXMuc2VsZWN0aW9uLmN1cnNvciwgZW5kUG9pbnQpKTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIHJlbW92ZVNlbGVjdGVkKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zYXZlUmVtb3ZlVG9IaXN0b3J5KHRoaXMuc2VsZWN0aW9uLnJhbmdlKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZSh0aGlzLnNlbGVjdGlvbi5yYW5nZSk7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBvbklucHV0KCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0ZXh0ID0gdGhpcy50ZXh0SW5wdXQuZ2V0SW5zZXJ0VGV4dCgpO1xuICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzRW1wdHlOdW1iZXJpbmdQYXJhZ3JhcGggPSB0aGlzLmlzRW1wdHlOdW1iZXJpbmdQYXJhZ3JhcGgodGhpcy5zZWxlY3Rpb24uY3Vyc29yLnJvdyk7XG4gICAgICAgIGlmICh0ZXh0ID09PSBORVdfTElORV9NQVJLVVAgJiYgdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSAmJiBpc0VtcHR5TnVtYmVyaW5nUGFyYWdyYXBoKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZU51bWJlcmluZ3NGcm9tUGFyYWdyYXBocygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnQodGV4dCk7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbEN1cnNvckludG9NYWluVmlldygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25DdXQoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFNlbGVjdGVkVGV4dCgpO1xuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2Uuc2V0Q2xpcGJvYXJkRGF0YShkYXRhKTtcbiAgICAgICAgdGhpcy5jbGlwYm9hcmQuY29weShkYXRhKTtcbiAgICAgICAgdGhpcy5jdXQoKTtcbiAgICAgICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvTWFpblZpZXcoKTtcbiAgICB9XG5cbiAgICBvbkNvcHkoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFNlbGVjdGVkVGV4dCgpO1xuICAgICAgICBpZiAoIWRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2Uuc2V0Q2xpcGJvYXJkRGF0YShkYXRhKTtcbiAgICAgICAgdGhpcy5jbGlwYm9hcmQuY29weShkYXRhKTtcbiAgICB9XG5cbiAgICBvblBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBkYXRhID0gdGhpcy50ZXh0SW5wdXQuZ2V0Q2xpcGJvYXJkRGF0YShldmVudCk7XG4gICAgICAgIHRoaXMucGFzdGVEYXRhKGRhdGEpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdFJlc2l6ZUxpc3RlbmVyKCk6IHZvaWQge1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5yZXJlbmRlclJlc2l6ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBkZXN0cm95UmVzaXplTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnJlcmVuZGVyUmVzaXplKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlcmVuZGVyTWFya2VyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmxvb3Auc2NoZWR1bGUoeyBtYXJrZXI6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXJlbmRlclJlc2l6ZSA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgdGhpcy5tYWluUmVuZGVyZXIub25SZXNpemUodHJ1ZSk7XG4gICAgfTtcblxuICAgIG9uQmx1cigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnRleHRJbnB1dC5pc0ZvY3VzZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGV4dElucHV0LmlzRm9jdXNlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLmhpZGVDdXJzb3IoKTtcbiAgICB9XG5cbiAgICBvbkZvY3VzKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50ZXh0SW5wdXQuaXNGb2N1c2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJsdXJDdXN0b21Db21wb25lbnQoKTtcbiAgICAgICAgdGhpcy50ZXh0SW5wdXQuaXNGb2N1c2VkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zaG93Q3Vyc29yKCk7XG4gICAgfVxuXG4gICAgb25Nb3VzZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUVsZW1lbnQgPSB0aGlzLnNldEN1cnJlbnRTZXNzaW9uKGV2ZW50LmNsaWVudFksIGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgIGlmIChjdXN0b21FbGVtZW50ICYmIGN1c3RvbUVsZW1lbnQudGFnTmFtZSAhPT0gdGhpcy50YWJsZUNlbGxUYWdOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzQ3VzdG9tQ29tcG9uZW50KGN1c3RvbUVsZW1lbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5ibHVyQ3VzdG9tQ29tcG9uZW50KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVtaXQoJ2ZvY3VzRWRpdG9yJyk7XG4gICAgfVxuXG4gICAgb25MZWZ0Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3VzdG9tRWxlbWVudCA9IHRoaXMuc2V0Q3VycmVudFNlc3Npb24oZXZlbnQuY2xpZW50WSwgZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgdGhpcy5lbWl0KCdmb2N1c0VkaXRvcicpO1xuICAgICAgICBpZiAoY3VzdG9tRWxlbWVudCAmJiBjdXN0b21FbGVtZW50LnRhZ05hbWUgIT09IHRoaXMudGFibGVDZWxsVGFnTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0N1c3RvbUNvbXBvbmVudChjdXN0b21FbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmx1ckN1c3RvbUNvbXBvbmVudCgpO1xuXG4gICAgICAgIGlmICghdGhpcy50ZXh0SW5wdXQuaXNGb2N1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLnRleHRJbnB1dC5pbnB1dC5mb2N1cygpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnJlbmRlcmVyLnNjcmVlblRvVGV4dENvb3JkaW5hdGVzKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuICAgICAgICBpZiAoZXZlbnQuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVTZWxlY3Rpb24ocG9zaXRpb24pO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmN0cmxLZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmtNb2RlbCA9IHRoaXMuc2Vzc2lvbi5nZXRMaW5rTW9kZWwocG9zaXRpb24pO1xuICAgICAgICAgICAgaWYgKGxpbmtNb2RlbCkge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKGxpbmtNb2RlbC5saW5rKTtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlQ3Vyc29yKHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5tb3VzZUhhbmRsZXIuc3RhcnRNb3VzZVByZXNzKHRoaXMpO1xuICAgIH1cblxuICAgIG9uRG91YmxlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3NldFN0eWxlcycsIHRoaXMuc2V0U3R5bGVzKTtcbiAgICAgICAgbGV0IGlzU3RhcnRFZGl0RWRnZSA9IGZhbHNlO1xuICAgICAgICBjb25zdCBjdXN0b21FbGVtZW50ID0gdGhpcy5nZXRDdXN0b21FbGVtZW50KGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgIGlmIChjdXN0b21FbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50U2Vzc2lvbklkID0gK2N1c3RvbUVsZW1lbnQuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oJ2RhdGEtc2Vzc2lvbi1pZCcpLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLnNldEN1c3RvbVNlc3Npb25Bc0N1cnJlbnQoZWxlbWVudFNlc3Npb25JZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBlZGdlRGF0YSA9IHRoaXMuZ2V0Q2xpY2tlZEVkZ2VEYXRhKGV2ZW50LmNsaWVudFkpO1xuICAgICAgICAgICAgaWYgKGVkZ2VEYXRhKSB7XG4gICAgICAgICAgICAgICAgaXNTdGFydEVkaXRFZGdlID0gIXRoaXMucmVndWxhdG9yU2VydmljZS5lZGdlRWRpdGluZ1BhZ2U7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLnNldEVkZ2VTZXNzaW9uQXNDdXJyZW50KGVkZ2VEYXRhLmVkZ2Uuc2Vzc2lvbklkLCBlZGdlRGF0YS5jbGlja2VkUGFnZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRNYWluU2Vzc2lvbkFzQ3VycmVudCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCdzZXRTdHlsZXMnLCB0aGlzLnNldFN0eWxlcyk7XG4gICAgICAgIGlmIChjdXN0b21FbGVtZW50ICYmIGN1c3RvbUVsZW1lbnQudGFnTmFtZSAhPT0gdGhpcy50YWJsZUNlbGxUYWdOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzQ3VzdG9tQ29tcG9uZW50KGN1c3RvbUVsZW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ibHVyQ3VzdG9tQ29tcG9uZW50KCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlcyhldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcbiAgICAgICAgaWYgKGlzU3RhcnRFZGl0RWRnZSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IocG9zaXRpb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnNlc3Npb24uZ2V0V29yZFJhbmdlKHBvc2l0aW9uLnJvdywgcG9zaXRpb24uY29sdW1uKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlU2VsZWN0aW9uKHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBvblRyaXBsZUNsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUVsZW1lbnQgPSB0aGlzLnNldEN1cnJlbnRTZXNzaW9uKGV2ZW50LmNsaWVudFksIGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgIGlmIChjdXN0b21FbGVtZW50ICYmIGN1c3RvbUVsZW1lbnQudGFnTmFtZSAhPT0gdGhpcy50YWJsZUNlbGxUYWdOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzQ3VzdG9tQ29tcG9uZW50KGN1c3RvbUVsZW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ibHVyQ3VzdG9tQ29tcG9uZW50KCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlcyhldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBuZXcgUG9pbnQocG9zaXRpb24ucm93LCAwKTtcbiAgICAgICAgY29uc3QgZW5kID0gbmV3IFBvaW50KHBvc2l0aW9uLnJvdywgdGhpcy5zZXNzaW9uLmRvY3VtZW50LmxpbmVzW3Bvc2l0aW9uLnJvd10ubGVuZ3RoKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VTZWxlY3Rpb24oc3RhcnQsIGVuZCk7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBvblF1YWRDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjdXN0b21FbGVtZW50ID0gdGhpcy5zZXRDdXJyZW50U2Vzc2lvbihldmVudC5jbGllbnRZLCBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xuICAgICAgICBpZiAoY3VzdG9tRWxlbWVudCAmJiBjdXN0b21FbGVtZW50LnRhZ05hbWUgIT09IHRoaXMudGFibGVDZWxsVGFnTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0N1c3RvbUNvbXBvbmVudChjdXN0b21FbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmx1ckN1c3RvbUNvbXBvbmVudCgpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RBbGwodGhpcy5zZXNzaW9uLm1vZGVsKTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIG9uTW91c2VXaGVlbChldmVudDogV2hlZWxFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmFjdG9yID0gMC4zNTtcbiAgICAgICAgY29uc3Qgc2Nyb2xsU3BlZWQgPSA0O1xuICAgICAgICBjb25zdCBkZWx0YVkgPSBldmVudC5kZWx0YVkgKiBmYWN0b3IgKiBzY3JvbGxTcGVlZDtcbiAgICAgICAgdGhpcy5tYWluUmVuZGVyZXIuc2Nyb2xsQnkoZGVsdGFZKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgc2V0Q3VycmVudFNlc3Npb24oY2xpY2tQb3NpdGlvblk6IG51bWJlciwgZWxlbWVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudCB8IG51bGwge1xuICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2V0U3R5bGVzJywgdGhpcy5zZXRTdHlsZXMpO1xuICAgICAgICBjb25zdCBjdXN0b21FbGVtZW50ID0gdGhpcy5nZXRDdXN0b21FbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICBpZiAoY3VzdG9tRWxlbWVudCkge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudFNlc3Npb25JZCA9ICtjdXN0b21FbGVtZW50LmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCdkYXRhLXNlc3Npb24taWQnKS52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRDdXN0b21TZXNzaW9uQXNDdXJyZW50KGVsZW1lbnRTZXNzaW9uSWQpO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoJ3NldFN0eWxlcycsIHRoaXMuc2V0U3R5bGVzKTtcbiAgICAgICAgICAgIHJldHVybiBjdXN0b21FbGVtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZWRnZURhdGEgPSB0aGlzLmdldENsaWNrZWRFZGdlRGF0YShjbGlja1Bvc2l0aW9uWSk7XG4gICAgICAgIGlmIChlZGdlRGF0YSAmJiB0aGlzLnJlZ3VsYXRvclNlcnZpY2UuZWRnZUVkaXRpbmdQYWdlKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ3VsYXRvclNlcnZpY2Uuc2V0RWRnZVNlc3Npb25Bc0N1cnJlbnQoZWRnZURhdGEuZWRnZS5zZXNzaW9uSWQsIGVkZ2VEYXRhLmNsaWNrZWRQYWdlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRNYWluU2Vzc2lvbkFzQ3VycmVudCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoJ3NldFN0eWxlcycsIHRoaXMuc2V0U3R5bGVzKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZ2V0Q3VzdG9tRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIGlmIChlbGVtZW50LnRhZ05hbWUgPT09IHRoaXMucGFyZW50VGFnTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5jdXN0b21FbGVtZW50VGFnTmFtZXMuaW5jbHVkZXMoZWxlbWVudC50YWdOYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRDdXN0b21FbGVtZW50KGVsZW1lbnQucGFyZW50RWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRDbGlja2VkRWRnZURhdGEobW91c2VQb3NpdGlvbjogbnVtYmVyKTogeyBlZGdlOiBOb2RlckVkZ2VDb21wb25lbnQ7IGNsaWNrZWRQYWdlOiBudW1iZXIgfSB8IG51bGwge1xuICAgICAgICBjb25zdCBwb3NpdGlvblkgPSBtb3VzZVBvc2l0aW9uICsgdGhpcy5tYWluU2Vzc2lvbi5zY3JvbGxUb3AgLSB0aGlzLm1haW5SZW5kZXJlci5jb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgICAgICBjb25zdCBjbGlja2VkUGFnZSA9IFBvc2l0aW9uSGVscGVyLnBpeGVsVG9QYWdlKHBvc2l0aW9uWSwgdGhpcy5tYWluU2Vzc2lvbik7XG4gICAgICAgIGNvbnN0IHBhZ2VXcmFwID0gdGhpcy5tYWluU2Vzc2lvbi5wYWdlc1dyYXA7XG4gICAgICAgIGNvbnN0IHBhZ2VWZXJ0aWNhbERhdGEgPSBQYWdlSGVscGVyLmdldFZlcnRpY2FsRGF0YShjbGlja2VkUGFnZSwgcGFnZVdyYXAucGFnZXNWZXJ0aWNhbERhdGEpO1xuICAgICAgICBjb25zdCBwYWdlU3RhcnRQb3NpdGlvbiA9IChwYWdlV3JhcC5wYWdlc1NwYWNlICsgcGFnZVdyYXAucGFnZUhlaWdodCkgKiAoY2xpY2tlZFBhZ2UgLSAxKSArIHBhZ2VXcmFwLnBhZ2VzU3BhY2U7XG4gICAgICAgIGNvbnN0IHBhZ2VUb3AgPSBwYWdlU3RhcnRQb3NpdGlvbiArIHBhZ2VWZXJ0aWNhbERhdGEubWFyZ2luVG9wO1xuICAgICAgICBjb25zdCBwYWdlQm90dG9tID0gcGFnZVN0YXJ0UG9zaXRpb24gKyBwYWdlV3JhcC5wYWdlSGVpZ2h0IC0gcGFnZVZlcnRpY2FsRGF0YS5tYXJnaW5Cb3R0b207XG4gICAgICAgIGxldCBjb21wb25lbnQ6IENvbXBvbmVudFJlZjxOb2RlckVkZ2VDb21wb25lbnQ+O1xuICAgICAgICBpZiAocGFnZVRvcCA+PSBwb3NpdGlvblkpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudCA9IHRoaXMubWFpblNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5nZXRDb21wb25lbnRCeVBhZ2UoY2xpY2tlZFBhZ2UsIEVkZ2VUeXBlLkhlYWRlcik7XG4gICAgICAgIH0gZWxzZSBpZiAocGFnZUJvdHRvbSA8PSBwb3NpdGlvblkpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudCA9IHRoaXMubWFpblNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5nZXRDb21wb25lbnRCeVBhZ2UoY2xpY2tlZFBhZ2UsIEVkZ2VUeXBlLkZvb3Rlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29tcG9uZW50ID8geyBlZGdlOiBjb21wb25lbnQuaW5zdGFuY2UsIGNsaWNrZWRQYWdlIH0gOiBudWxsO1xuICAgIH1cblxuICAgIHNldFN0eWxlcyA9IChzdHlsZXM6IElUb29sYmFyU3R5bGVzKSA9PiB7XG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5zdHlsZXMgPSBzdHlsZXM7XG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHN0cmluZyBvZiB0ZXh0IGN1cnJlbnRseSBoaWdobGlnaHRlZC5cbiAgICAgKi9cbiAgICBnZXRTZWxlY3RlZFRleHQoKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFBvc2l0aW9uVG9Eb2N1bWVudEluZGV4KHRoaXMuc2Vzc2lvbi53cmFwUGFyYWdyYXBoSW5kZXgsIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0KTtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFBvc2l0aW9uVG9Eb2N1bWVudEluZGV4KHRoaXMuc2Vzc2lvbi53cmFwUGFyYWdyYXBoSW5kZXgsIHRoaXMuc2VsZWN0aW9uLnJhbmdlLmVuZCk7XG4gICAgICAgIGxldCBlbGVtZW50SW5kZXhlczogbnVtYmVyW10gPSBbXTtcbiAgICAgICAgQ29udGVudEhlbHBlci5zZXRJbmRleGVzRWxlbWVudHNJbkludGVydmFsKHRoaXMuc2Vzc2lvbi5tb2RlbC5icmVha3MsIGVsZW1lbnRJbmRleGVzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIENvbnRlbnRIZWxwZXIuc2V0SW5kZXhlc0VsZW1lbnRzSW5JbnRlcnZhbCh0aGlzLnNlc3Npb24ubW9kZWwudGFibGVzLCBlbGVtZW50SW5kZXhlcywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICBDb250ZW50SGVscGVyLnNldEluZGV4ZXNFbGVtZW50c0luSW50ZXJ2YWwodGhpcy5zZXNzaW9uLm1vZGVsLmltYWdlcywgZWxlbWVudEluZGV4ZXMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgQ29udGVudEhlbHBlci5zZXRJbmRleGVzRWxlbWVudHNJbkludGVydmFsKHRoaXMuc2Vzc2lvbi5tb2RlbC5lbGVtZW50cywgZWxlbWVudEluZGV4ZXMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgQ29udGVudEhlbHBlci5zZXRJbmRleGVzRWxlbWVudHNJbkludGVydmFsKHRoaXMuc2Vzc2lvbi5tb2RlbC50YWJzLCBlbGVtZW50SW5kZXhlcywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICBlbGVtZW50SW5kZXhlcy5zb3J0KChhLCBiKSA9PiBiIC0gYSk7XG4gICAgICAgIGxldCB0ZXh0SW50ZXJ2YWwgPSB0aGlzLnNlc3Npb24uZG9jdW1lbnQuZ2V0VGV4dFJhbmdlKHRoaXMuc2VsZWN0aW9uLnJhbmdlKTtcbiAgICAgICAgZWxlbWVudEluZGV4ZXMuZm9yRWFjaCh4ID0+IHtcbiAgICAgICAgICAgIHRleHRJbnRlcnZhbCA9IHRleHRJbnRlcnZhbC5zbGljZSgwLCB4KSArIHRleHRJbnRlcnZhbC5zbGljZSh4ICsgMSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0ZXh0SW50ZXJ2YWw7XG4gICAgfVxuXG4gICAgaW5pdE1haW5TZXNzaW9uKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwYWdlV2lkdGggPSB0aGlzLmN1c3RvbVBhZ2VXaWR0aCA/PyB0aGlzLm1vZGVsLnBhZ2VXaWR0aDtcbiAgICAgICAgdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5tYXhXaWR0aCA9IGAke3BhZ2VXaWR0aH1weGA7XG4gICAgICAgIGNvbnN0IHBhZ2VNYXJnaW4gPSBuZXcgTWFyZ2luTW9kZWwoe1xuICAgICAgICAgICAgbGVmdDogdGhpcy5tb2RlbC5tYXJnaW5MZWZ0LFxuICAgICAgICAgICAgcmlnaHQ6IHRoaXMubW9kZWwubWFyZ2luUmlnaHQsXG4gICAgICAgICAgICB0b3A6IHRoaXMubW9kZWwubWFyZ2luVG9wLFxuICAgICAgICAgICAgYm90dG9tOiB0aGlzLm1vZGVsLm1hcmdpbkJvdHRvbSxcbiAgICAgICAgICAgIGhlYWRlcjogdGhpcy5tb2RlbC5tYXJnaW5IZWFkZXIsXG4gICAgICAgICAgICBmb290ZXI6IHRoaXMubW9kZWwubWFyZ2luRm9vdGVyXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlZ3VsYXRvclNlcnZpY2UuYWRkTWFpblNlc3Npb24odGhpcy5tb2RlbCwgcGFnZU1hcmdpbiwgcGFnZVdpZHRoLCB0aGlzLmNvbnRhaW5lcik7XG4gICAgICAgIHRoaXMubWFpblNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlU2Nyb2xsVG9wJywgdGhpcy5vblNjcm9sbFRvcENoYW5nZSk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCdzZXRTdHlsZXMnLCB0aGlzLnNldFN0eWxlcyk7XG4gICAgICAgIHRoaXMubWFpblJlbmRlcmVyLnNjcm9sbFRvKDApO1xuICAgIH1cblxuICAgIG9uU2VsZWN0aW9uQ2hhbmdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlc3Npb24ucHJvY2Vzc1NlbGVjdGlvblN0eWxlcygpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZVNlbGVjdGlvbih0aGlzLnNlbGVjdGlvbi5yYW5nZSk7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5zZXRIYXNTZWxlY3Rpb24oIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpO1xuICAgICAgICB0aGlzLnJlcmVuZGVyTWFya2VyKCk7XG4gICAgfVxuXG4gICAgb25TY3JvbGxUb3BDaGFuZ2UgPSAodmFsdWU6IG51bWJlcik6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLm1haW5SZW5kZXJlci5zY3JvbGxUbyh2YWx1ZSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgb25Eb2N1bWVudENoYW5nZSA9IChyYW5nZTogUmFuZ2UpOiB2b2lkID0+IHtcbiAgICAgICAgbGV0IGxhc3RSb3cgPSByYW5nZS5zdGFydC5yb3cgPT09IHJhbmdlLmVuZC5yb3cgPyByYW5nZS5lbmQucm93IDogSW5maW5pdHk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlTGluZXMocmFuZ2Uuc3RhcnQucm93LCBsYXN0Um93KTtcblxuICAgICAgICAvLyBVcGRhdGUgY3Vyc29yIGJlY2F1c2UgdGFiIGNoYXJhY3RlcnMgY2FuIGluZmx1ZW5jZSB0aGUgY3Vyc29yIHBvc2l0aW9uLlxuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgIH07XG5cbiAgICBkZXN0cm95TWFpblNlc3Npb25MaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubWFpblNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlU2Nyb2xsVG9wJywgdGhpcy5vblNjcm9sbFRvcENoYW5nZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmb2N1c0N1c3RvbUNvbXBvbmVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbmRleCA9ICtlbGVtZW50LmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCdkYXRhLWluc2VydC1pbmRleCcpLnZhbHVlO1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPVxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMuaW1hZ2VzLmZpbmQoeCA9PiB4Lmluc3RhbmNlLmluc2VydEluZGV4ID09PSBpbmRleCkgPz9cbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5jdXN0b21Db21wb25lbnRzLnRhYmxlcy5maW5kKHggPT4geC5pbnN0YW5jZS5pbnNlcnRJbmRleCA9PT0gaW5kZXgpID8/XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5jdXN0b21FbGVtZW50cy5maW5kKHggPT4geC5pbnN0YW5jZS5pbnNlcnRJbmRleCA9PT0gaW5kZXgpO1xuICAgICAgICBpZiAoIWNvbXBvbmVudCB8fCBjb21wb25lbnQgPT09IHRoaXMuZm9jdXNlZENvbXBvbmVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5mb2N1c2VkQ29tcG9uZW50Py5pbnN0YW5jZS5ibHVyKCk7XG4gICAgICAgIGNvbXBvbmVudC5pbnN0YW5jZS5mb2N1cygpO1xuICAgICAgICB0aGlzLmZvY3VzZWRDb21wb25lbnQgPSBjb21wb25lbnQ7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5zZXNzaW9uLmRvY3VtZW50LmluZGV4VG9Qb3NpdGlvbihpbmRleCwgMCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlQ3Vyc29yKHBvc2l0aW9uKTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmx1ckN1c3RvbUNvbXBvbmVudCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZm9jdXNlZENvbXBvbmVudCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkQ29tcG9uZW50Lmluc3RhbmNlLmJsdXIoKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNlZENvbXBvbmVudCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzRW1wdHlOdW1iZXJpbmdQYXJhZ3JhcGgocGFyYWdyYXBoSW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBjdXJyZW50TGluZSA9IHRoaXMuc2Vzc2lvbi5kb2N1bWVudC5nZXRMaW5lKHRoaXMuc2Vzc2lvbi5kb2N1bWVudC5saW5lcywgcGFyYWdyYXBoSW5kZXgpO1xuICAgICAgICByZXR1cm4gY3VycmVudExpbmUubGVuZ3RoID09PSAwICYmIHRoaXMuc2Vzc2lvbi5tb2RlbC5wYXJhZ3JhcGhzW3BhcmFncmFwaEluZGV4XS5wYXJhZ3JhcGhTdHlsZS5udW1iZXJpbmdJZCAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICBzY3JvbGxDdXJzb3JJbnRvTWFpblZpZXcob2Zmc2V0PzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlc3Npb24gIT09IHRoaXMubWFpblNlc3Npb24pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1haW5SZW5kZXJlci5zY3JvbGxDdXJzb3JJbnRvVmlldyhudWxsLCBvZmZzZXQpO1xuICAgIH1cblxuICAgIGNoYW5nZWRUYWJsZVNpemUoaW5zZXJ0SW5kZXg6IG51bWJlciwgc2Vzc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2Vzc2lvbiA9IHRoaXMucmVndWxhdG9yU2VydmljZS5nZXRTZXNzaW9uKHNlc3Npb25JZCk7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaCA9IENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoSW5kZXgoc2Vzc2lvbi53cmFwUGFyYWdyYXBoSW5kZXgsIGluc2VydEluZGV4KS5yb3c7XG4gICAgICAgIHNlc3Npb24udXBkYXRlV3JhcERhdGEocGFyYWdyYXBoLCBwYXJhZ3JhcGgpO1xuICAgICAgICB0aGlzLnRleHRJbnB1dC5pbnB1dC5mb2N1cygpO1xuICAgIH1cblxuICAgIGluc2VydFRhYmxlUm93cyhpbnNlcnRJbmRleDogbnVtYmVyLCByb3dzQ291bnQ6IG51bWJlciwgdGFyZ2V0SW5kZXg6IG51bWJlciwgaW5oZXJpdEluZGV4OiBudW1iZXIsIHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRDdXN0b21TZXNzaW9uQXNDdXJyZW50KHNlc3Npb25JZCk7XG4gICAgICAgIGNvbnN0IGJlZm9yZVRhYmxlID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleCh0aGlzLnNlc3Npb24ud3JhcFBhcmFncmFwaEluZGV4LCBpbnNlcnRJbmRleCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlQ3Vyc29yKGJlZm9yZVRhYmxlKTtcbiAgICAgICAgY29uc3QgdGFibGUgPSB0aGlzLnNlc3Npb24ubW9kZWwudGFibGVzLmZpbmQoeCA9PiB4Lmluc2VydEluZGV4ID09PSBpbnNlcnRJbmRleCk7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoSW5zZXJ0VGFibGVSb3dzKGluc2VydEluZGV4LCByb3dzQ291bnQsIHRhcmdldEluZGV4LCBpbmhlcml0SW5kZXgsIHRhYmxlKTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChcbiAgICAgICAgICAgIFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRUYWJsZVJvd3NDb21tYW5kKHJvd3NDb3VudCwgaW5oZXJpdEluZGV4LCBpbnNlcnRJbmRleCwgdGFyZ2V0SW5kZXgsIHRoaXMudGFyZ2V0cylcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydFRhYmxlUm93cyhpbnNlcnRJbmRleCwgcm93c0NvdW50LCB0YXJnZXRJbmRleCwgaW5oZXJpdEluZGV4KTtcbiAgICAgICAgdGhpcy5jaGFuZ2VkVGFibGVTaXplKGluc2VydEluZGV4LCBzZXNzaW9uSWQpO1xuICAgIH1cblxuICAgIGluc2VydFRhYmxlQ29sdW1ucyhpbnNlcnRJbmRleDogbnVtYmVyLCBjb2x1bW5zQ291bnQ6IG51bWJlciwgdGFyZ2V0SW5kZXg6IG51bWJlciwgaW5oZXJpdEluZGV4OiBudW1iZXIsIHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRDdXN0b21TZXNzaW9uQXNDdXJyZW50KHNlc3Npb25JZCk7XG4gICAgICAgIGNvbnN0IGJlZm9yZVRhYmxlID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleCh0aGlzLnNlc3Npb24ud3JhcFBhcmFncmFwaEluZGV4LCBpbnNlcnRJbmRleCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlQ3Vyc29yKGJlZm9yZVRhYmxlKTtcbiAgICAgICAgY29uc3QgdGFibGUgPSB0aGlzLnNlc3Npb24ubW9kZWwudGFibGVzLmZpbmQoeCA9PiB4Lmluc2VydEluZGV4ID09PSBpbnNlcnRJbmRleCk7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoSW5zZXJ0VGFibGVDb2x1bW5zKGluc2VydEluZGV4LCBjb2x1bW5zQ291bnQsIHRhcmdldEluZGV4LCBpbmhlcml0SW5kZXgsIHRhYmxlKTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChcbiAgICAgICAgICAgIFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRUYWJsZUNvbHVtbnNDb21tYW5kKGNvbHVtbnNDb3VudCwgaW5oZXJpdEluZGV4LCBpbnNlcnRJbmRleCwgdGFyZ2V0SW5kZXgsIHRoaXMudGFyZ2V0cylcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydFRhYmxlQ29sdW1ucyhpbnNlcnRJbmRleCwgY29sdW1uc0NvdW50LCB0YXJnZXRJbmRleCwgaW5oZXJpdEluZGV4KTtcbiAgICAgICAgdGhpcy5jaGFuZ2VkVGFibGVTaXplKGluc2VydEluZGV4LCBzZXNzaW9uSWQpO1xuICAgIH1cblxuICAgIHJlbW92ZVRhYmxlUm93cyhpbnNlcnRJbmRleDogbnVtYmVyLCBzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIsIHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRDdXN0b21TZXNzaW9uQXNDdXJyZW50KHNlc3Npb25JZCk7XG4gICAgICAgIGNvbnN0IGJlZm9yZVRhYmxlID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleCh0aGlzLnNlc3Npb24ud3JhcFBhcmFncmFwaEluZGV4LCBpbnNlcnRJbmRleCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlQ3Vyc29yKGJlZm9yZVRhYmxlKTtcbiAgICAgICAgY29uc3QgdGFibGUgPSB0aGlzLnNlc3Npb24ubW9kZWwudGFibGVzLmZpbmQoeCA9PiB4Lmluc2VydEluZGV4ID09PSBpbnNlcnRJbmRleCk7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoUmVtb3ZlVGFibGVSb3dzKGluc2VydEluZGV4LCBzdGFydEluZGV4LCBlbmRJbmRleCwgdGFibGUpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFNhdmVDb21tYW5kc0hlbHBlci5nZXRSZW1vdmVUYWJsZVJvd3NDb21tYW5kKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBpbnNlcnRJbmRleCwgdGhpcy50YXJnZXRzKSk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVUYWJsZVJvd3MoaW5zZXJ0SW5kZXgsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgdGhpcy5jaGFuZ2VkVGFibGVTaXplKGluc2VydEluZGV4LCBzZXNzaW9uSWQpO1xuICAgIH1cblxuICAgIHJlbW92ZVRhYmxlQ29sdW1ucyhpbnNlcnRJbmRleDogbnVtYmVyLCBzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIsIHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRDdXN0b21TZXNzaW9uQXNDdXJyZW50KHNlc3Npb25JZCk7XG4gICAgICAgIGNvbnN0IGJlZm9yZVRhYmxlID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleCh0aGlzLnNlc3Npb24ud3JhcFBhcmFncmFwaEluZGV4LCBpbnNlcnRJbmRleCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlQ3Vyc29yKGJlZm9yZVRhYmxlKTtcbiAgICAgICAgY29uc3QgdGFibGUgPSB0aGlzLnNlc3Npb24ubW9kZWwudGFibGVzLmZpbmQoeCA9PiB4Lmluc2VydEluZGV4ID09PSBpbnNlcnRJbmRleCk7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoUmVtb3ZlVGFibGVDb2x1bW5zKGluc2VydEluZGV4LCBzdGFydEluZGV4LCBlbmRJbmRleCwgdGFibGUpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFxuICAgICAgICAgICAgU2F2ZUNvbW1hbmRzSGVscGVyLmdldFJlbW92ZVRhYmxlQ29sdW1uc0NvbW1hbmQoc3RhcnRJbmRleCwgZW5kSW5kZXgsIGluc2VydEluZGV4LCB0aGlzLnRhcmdldHMpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVUYWJsZUNvbHVtbnMoaW5zZXJ0SW5kZXgsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgdGhpcy5jaGFuZ2VkVGFibGVTaXplKGluc2VydEluZGV4LCBzZXNzaW9uSWQpO1xuICAgIH1cblxuICAgIHJlbW92ZUltYWdlKGluc2VydEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnNlc3Npb24uZG9jdW1lbnQuaW5kZXhlc1RvUmFuZ2UoaW5zZXJ0SW5kZXgsIGluc2VydEluZGV4ICsgMSk7XG4gICAgICAgIHRoaXMuc2F2ZVJlbW92ZVRvSGlzdG9yeShyYW5nZSk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmUocmFuZ2UpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgICAgICB0aGlzLnRleHRJbnB1dC5pbnB1dC5mb2N1cygpO1xuICAgIH1cblxuICAgIHJlc2l6ZVRhYmxlQ29sdW1ucyhyZXNpemVUYWJsZUNvbHVtbnM6IFJlc2l6ZVRhYmxlQ29sdW1uc01vZGVsLCBzZXNzaW9uSWQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnJlZ3VsYXRvclNlcnZpY2Uuc2V0Q3VzdG9tU2Vzc2lvbkFzQ3VycmVudChzZXNzaW9uSWQpO1xuICAgICAgICBjb25zdCBiZWZvcmVUYWJsZSA9IENvbnRlbnRIZWxwZXIuZG9jdW1lbnRJbmRleFRvUGFyYWdyYXBoSW5kZXgodGhpcy5zZXNzaW9uLndyYXBQYXJhZ3JhcGhJbmRleCwgcmVzaXplVGFibGVDb2x1bW5zLmluc2VydEluZGV4KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IoYmVmb3JlVGFibGUpO1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaFJlc2l6ZVRhYmxlQ29sdW1ucyhyZXNpemVUYWJsZUNvbHVtbnMpO1xuICAgICAgICB0aGlzLnNlc3Npb24ucmVzaXplVGFibGVDb2x1bW5zKHJlc2l6ZVRhYmxlQ29sdW1ucyk7XG4gICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZShyZXNpemVUYWJsZUNvbHVtbnMuaW5zZXJ0SW5kZXgsIHNlc3Npb25JZCk7XG4gICAgfVxuXG4gICAgb25Nb3VzZVByZXNzZWRNb3ZlKHg6IG51bWJlciwgeTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5yZW5kZXJlci5zY3JlZW5Ub1RleHRDb29yZGluYXRlcyh4LCB5KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZVNlbGVjdGlvbihwb3NpdGlvbik7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvTWFpblZpZXcoKTtcbiAgICB9XG5cbiAgICBzZWFyY2hPcHRpb25TdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5zZWFyY2hPcHRpb25zJC5zdWJzY3JpYmUoc2VhcmNoT3B0aW9ucyA9PiB7XG4gICAgICAgICAgICB0aGlzLmZpbmQoc2VhcmNoT3B0aW9ucyk7XG4gICAgICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2Uuc2VhcmNoSXRlcmF0aW9uID0gdGhpcy51cGRhdGVDb3VudGVyKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlcGxhY2VTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5yZXBsYWNlJC5zdWJzY3JpYmUocmVwbGFjZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2UocmVwbGFjZS5zZWFyY2hWYWx1ZSwgcmVwbGFjZS5yZXBsYWNlVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnNlYXJjaEl0ZXJhdGlvbiA9IHRoaXMudXBkYXRlQ291bnRlcigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRUZXh0U3R5bGVzU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2Uuc2V0VGV4dFN0eWxlcyQuc3Vic2NyaWJlKHRleHRTdHlsZXMgPT4ge1xuICAgICAgICAgICAgdGhpcy5hcHBseVRleHRTdHlsZXModGV4dFN0eWxlcyk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldFBhcmFncmFwaFN0eWxlc1N1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnNldFBhcmFncmFwaFN0eWxlcyQuc3Vic2NyaWJlKHBhcmFncmFwaFN0eWxlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5UGFyYWdyYXBoU3R5bGVzKHBhcmFncmFwaFN0eWxlcyk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldE51bWJlcmluZ1RlbXBsYXRlVHlwZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnNldE51bWJlcmluZ1RlbXBsYXRlVHlwZSQuc3Vic2NyaWJlKG51bWJlcmluZ1RlbXBsYXRlVHlwZSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldE51bWJlcmluZ1RlbXBsYXRlKG51bWJlcmluZ1RlbXBsYXRlVHlwZSk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbW92ZU51bWJlcmluZ3NTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5yZW1vdmVOdW1iZXJpbmdzJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVOdW1iZXJpbmdzRnJvbVBhcmFncmFwaHMoKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0SW1hZ2VTdHlsZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnNldEltYWdlU3R5bGUkLnN1YnNjcmliZShpbWFnZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5SW1hZ2VTdHlsZXMoaW1hZ2UpO1xuICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjaGFuZ2VFbGVtZW50U3R5bGVTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5jaGFuZ2VFbGVtZW50U3R5bGUkLnN1YnNjcmliZSh4ID0+IHRoaXMuYXBwbHlFbGVtZW50U3R5bGUoeCkpO1xuICAgIH1cblxuICAgIGNyZWF0ZUN1c3RvbUNvbXBvbmVudFN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmNyZWF0ZUN1c3RvbUNvbXBvbmVudCQuc3Vic2NyaWJlKG1vZGVsID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlQ3VzdG9tRWxlbWVudChtb2RlbCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluc2VydEJyZWFrU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuaW5zZXJ0QnJlYWskLnN1YnNjcmliZShicmVha1R5cGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRCcmVhayhicmVha1R5cGUpO1xuICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbnNlcnRJbWFnZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmluc2VydEltYWdlJC5zdWJzY3JpYmUoaW1hZ2VEYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0SW1hZ2UoaW1hZ2VEYXRhKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5zZXJ0TGlua1N1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmluc2VydExpbmskLnN1YnNjcmliZShsaW5rRGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluc2VydExpbmsobGlua0RhdGEpO1xuICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBlbmRNb3VzZVByZXNzU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuZW5kTW91c2VQcmVzcyQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW91c2VIYW5kbGVyLmVuZE1vdXNlUHJlc3MoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xlYXJTZWxlY3Rpb25TdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5jbGVhclNlbGVjdGlvbiQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNoYW5nZWRUYWJsZVNpemVTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5jaGFuZ2VkVGFibGVTaXplJC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUoZGF0YS5pbnNlcnRJbmRleCwgZGF0YS5zZXNzaW9uSWQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbnNlcnRUYWJsZVJvd3NTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5pbnNlcnRUYWJsZVJvd3MkLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0VGFibGVSb3dzKGRhdGEuaW5zZXJ0SW5kZXgsIGRhdGEucm93c0NvdW50LCBkYXRhLnRhcmdldEluZGV4LCBkYXRhLmluaGVyaXRJbmRleCwgZGF0YS5zZXNzaW9uSWQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbnNlcnRUYWJsZUNvbHVtbnNTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5pbnNlcnRUYWJsZUNvbHVtbnMkLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0VGFibGVDb2x1bW5zKGRhdGEuaW5zZXJ0SW5kZXgsIGRhdGEuY29sdW1uc0NvdW50LCBkYXRhLnRhcmdldEluZGV4LCBkYXRhLmluaGVyaXRJbmRleCwgZGF0YS5zZXNzaW9uSWQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVUYWJsZVJvd3NTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5yZW1vdmVUYWJsZVJvd3MkLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVGFibGVSb3dzKGRhdGEuaW5zZXJ0SW5kZXgsIGRhdGEuc3RhcnRJbmRleCwgZGF0YS5lbmRJbmRleCwgZGF0YS5zZXNzaW9uSWQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVUYWJsZUNvbHVtbnNTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5yZW1vdmVUYWJsZUNvbHVtbnMkLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVGFibGVDb2x1bW5zKGRhdGEuaW5zZXJ0SW5kZXgsIGRhdGEuc3RhcnRJbmRleCwgZGF0YS5lbmRJbmRleCwgZGF0YS5zZXNzaW9uSWQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVkSW1hZ2VTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5yZW1vdmVJbWFnZSQuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVJbWFnZShkYXRhLmluc2VydEluZGV4KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVzaXplVGFibGVDb2x1bW5zU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UucmVzaXplVGFibGVDb2x1bW5zJC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZVRhYmxlQ29sdW1ucyhkYXRhLnJlc2l6ZVRhYmxlQ29sdW1ucywgZGF0YS5zZXNzaW9uSWQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbnNlcnRUYWJsZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmluc2VydFRhYmxlJC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluc2VydFRhYmxlKGRhdGEpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZW5kZXJlclVwZGF0ZWRTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5yZW5kZXJlclVwZGF0ZWQkLnN1YnNjcmliZShzZXNzaW9uSWQgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWRnZVRhcmdldCA9IHRoaXMucmVndWxhdG9yU2VydmljZS5nZXRFZGdlVGFyZ2V0KHNlc3Npb25JZCk7XG4gICAgICAgICAgICBpZiAoZWRnZVRhcmdldCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMubWFpblJlbmRlcmVyLmVkZ2VzTGF5ZXIudXBkYXRlQnlMb2NhdGlvbihlZGdlVGFyZ2V0LmVkZ2VEYXRhLnBhZ2VUeXBlIGFzIFBhZ2VUeXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZWRnZUVsZW1lbnRDb3B5VXBkYXRlZFN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmVkZ2VFbGVtZW50Q29weVVwZGF0ZWQkLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlZ3VsYXRvclNlcnZpY2UuZWRnZUVkaXRpbmdQYWdlICE9PSBkYXRhLnBhZ2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGVkZ2VTZXNzaW9uSWQgPSArZGF0YS5uZXdFbGVtZW50Q29weS5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgnZGF0YS1zZXNzaW9uLWlkJykudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBlZGdlU2Vzc2lvbiA9IHRoaXMucmVndWxhdG9yU2VydmljZS5zZXNzaW9ucy5maW5kKHggPT4geC5zZXNzaW9uSWQgPT09IGVkZ2VTZXNzaW9uSWQpO1xuICAgICAgICAgICAgZWRnZVNlc3Npb24ucmVuZGVyZXIuY29udGFpbmVyID0gZGF0YS5uZXdFbGVtZW50Q29weS5maXJzdENoaWxkIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjaGFuZ2VkRWRnZUhlaWdodFN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmNoYW5nZWRFZGdlSGVpZ2h0JC5zdWJzY3JpYmUoZWRnZVR5cGUgPT4ge1xuICAgICAgICAgICAgdGhpcy5tYWluU2Vzc2lvbi5wYWdlc1dyYXAudXBkYXRlUGFnZVZlcnRpY2FsRGF0YShcbiAgICAgICAgICAgICAgICBlZGdlVHlwZSxcbiAgICAgICAgICAgICAgICB0aGlzLnJlZ3VsYXRvclNlcnZpY2UuZWRnZUVkaXRpbmdQYWdlLFxuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi53cmFwUGFyYWdyYXBoSW5kZXhcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHVuZG9TdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS51bmRvJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51bmRvKCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbEN1cnNvckludG9NYWluVmlldygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZWRvU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UucmVkbyQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVkbygpO1xuICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxDdXJzb3JJbnRvTWFpblZpZXcoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwcmludFN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnByaW50JC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgUHJpbnRIZWxwZXIucHJpbnREb2N1bWVudCh0aGlzLm1haW5TZXNzaW9uLCB0aGlzLmVkaXRvclNlcnZpY2UpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGN1dFNlbGVjdGVkU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuY3V0U2VsZWN0ZWQkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uQ3V0KG5ldyBDbGlwYm9hcmRFdmVudChDbGlwYm9hcmRFdmVudFR5cGVzLmN1dCkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvcHlTZWxlY3RlZFN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmNvcHlTZWxlY3RlZCQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25Db3B5KG5ldyBDbGlwYm9hcmRFdmVudChDbGlwYm9hcmRFdmVudFR5cGVzLmNvcHkpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXN0ZUZyb21DbGlwYm9hcmRTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5wYXN0ZUZyb21DbGlwYm9hcmQkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlYWRDbGlwYm9hcmQoKVxuICAgICAgICAgICAgICAgIC50aGVuKGRhdGEgPT4gdGhpcy5wYXN0ZURhdGEoZGF0YSkpXG4gICAgICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29udGludWUgcmVnYXJkbGVzcyBlcnJvclxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHJlYWRDbGlwYm9hcmQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgcmVhZCA9IGF3YWl0IG5hdmlnYXRvci5wZXJtaXNzaW9ucy5xdWVyeSh7IG5hbWU6ICdjbGlwYm9hcmQtcmVhZCcgYXMgUGVybWlzc2lvbk5hbWUgfSk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIGlmIChuYXZpZ2F0b3IuY2xpcGJvYXJkICYmIHJlYWQuc3RhdGUgIT0gJ2RlbmllZCcpIHtcbiAgICAgICAgICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkXG4gICAgICAgICAgICAgICAgICAgIC5yZWFkVGV4dCgpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnRpbnVlIHJlZ2FyZGxlc3MgZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5jbGlwYm9hcmREYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBwYXN0ZURhdGEoZGF0YTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRleHQgPSBkYXRhLnJlcGxhY2UoL1xcclxcbi9nLCAnXFxuJykucmVwbGFjZSgvXFx0L2csICcgJyk7XG4gICAgICAgIHRoaXMuaW5zZXJ0KHRleHQpO1xuICAgICAgICB0aGlzLnNjcm9sbEN1cnNvckludG9NYWluVmlldygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2VsZWN0QWxsU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2Uuc2VsZWN0QWxsJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0QWxsKHRoaXMuc2Vzc2lvbi5tb2RlbCk7XG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVtb3ZlU2VsZWN0ZWRTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5yZW1vdmVTZWxlY3RlZCQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjbGlwYm9hcmREYXRhU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuY2xpcGJvYXJkRGF0YSQuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5jbGlwYm9hcmREYXRhID0gZGF0YTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
1274
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvK3NoYXJlZC9lZGl0b3IvY29yZS9lZGl0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDbEYsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDN0YsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDekYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFDakcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFFdkYsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDdEQsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFlBQVksRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBQ3pILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRTVFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFckUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBSTdELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBR3hELE9BQU8sRUFBRSxVQUFVLEVBQUUs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QzdCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLDBCQUEwQjtRQUM5QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDckQsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLHlCQUF5QjtRQUM3QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0RCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQztRQUM5QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENsaXBib2FyZCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jbGlwYm9hcmQnO1xuaW1wb3J0IHsgQ29tcG9uZW50UmVmLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQWRkTnVtYmVyaW5nTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2FkZC1udW1iZXJpbmcubW9kZWwnO1xuaW1wb3J0IHsgQXBwbHlFbGVtZW50U3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvYXBwbHktZWxlbWVudC1zdHlsZS5tb2RlbCc7XG5pbXBvcnQgeyBBcHBseUltYWdlU3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvYXBwbHktaW1hZ2Utc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgQXBwbHlQYXJhZ3JhcGhTdHlsZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9hcHBseS1wYXJhZ3JhcGgtc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgQXBwbHlUZXh0U3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvYXBwbHktdGV4dC1zdHlsZS5tb2RlbCc7XG5pbXBvcnQgeyBCYXNlTm9kZXJDb21wb25lbnQgfSBmcm9tICcuLi9jdXN0b20tY29tcG9uZW50cy9zaGFyZWQvYWJzdHJhY3QvYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnJlYWtIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzL2JyZWFrLmhlbHBlcic7XG5pbXBvcnQgeyBCcmVha01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9icmVhay5tb2RlbCc7XG5pbXBvcnQgeyBCcmVha1R5cGVzIH0gZnJvbSAnLi9lbnVtcy9icmVhay10eXBlcy5lbnVtJztcbmltcG9ydCB7IENVU1RPTV9FTEVNRU5UX01BUktFUiwgVEFCTEVfTUFSS0VSIH0gZnJvbSAnLi4vY3VzdG9tLWNvbXBvbmVudHMvc2hhcmVkL2NvbnN0YW50cy9jdXN0b20tY29udGVudC1tYXJrZXJzLmNvbnN0JztcbmltcG9ydCB7IENsaXBib2FyZEV2ZW50VHlwZXMgfSBmcm9tICcuL2NvbnN0YW50cy9jbGlwYm9hcmRFdmVudFR5cGVzLmNvbnN0JztcbmltcG9ydCB7IENvbW1hbmRzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbW1hbmRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29udGVudEhlbHBlciB9IGZyb20gJy4uL2hlbHBlcnMvY29udGVudC5oZWxwZXInO1xuaW1wb3J0IHsgRGVsZXRlTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2RlbGV0ZS5tb2RlbCc7XG5pbXBvcnQgeyBEb2N4TW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2RvY3gubW9kZWwnO1xuaW1wb3J0IHsgRWRnZVR5cGUgfSBmcm9tICcuL2NvbXBvbmVudHMvZWRnZXMvZWRnZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgRWRpdFNlc3Npb24gfSBmcm9tICcuL2VkaXQuc2Vzc2lvbic7XG5pbXBvcnQgeyBFZGl0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24vZWRpdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgRWxlbWVudERhdGFNb2RlbCB9IGZyb20gJy4uL2N1c3RvbS1jb21wb25lbnRzL2V4dGVybmFsLWVsZW1lbnQvbW9kZWxzL2VsZW1lbnQtZGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBFbGVtZW50TW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2VsZW1lbnQubW9kZWwnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGluZyB9IGZyb20gJy4vYmFzZS9ldmVudC1lbWl0dGluZyc7XG5pbXBvcnQgeyBGb3JtYXRIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzL2Zvcm1hdC5oZWxwZXInO1xuaW1wb3J0IHsgSVRvb2xiYXJTdHlsZXMgfSBmcm9tICcuL2ludGVyZmFjZXMvdG9vbGJhci1zdHlsZXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IEltYWdlRGF0YU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbWFnZS1kYXRhLm1vZGVsJztcbmltcG9ydCB7IEltYWdlTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2ltYWdlLm1vZGVsJztcbmltcG9ydCB7IEluZGV4ZWRFbGVtZW50SGVscGVyIH0gZnJvbSAnLi4vaGVscGVycy9pbmRleGVkLWVsZW1lbnQuaGVscGVyJztcbmltcG9ydCB7IElucHV0SGFuZGxlciB9IGZyb20gJy4uL2ludGVyYWN0aW9uL2lucHV0LmhhbmRsZXInO1xuaW1wb3J0IHsgSW5zZXJ0QnJlYWtNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWJyZWFrLm1vZGVsJztcbmltcG9ydCB7IEluc2VydEVsZW1lbnRNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWVsZW1lbnQubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0SW1hZ2VNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWltYWdlLm1vZGVsJztcbmltcG9ydCB7IEluc2VydExpbmtNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LWxpbmsubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0U3R5bGVkVGV4dE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbnNlcnQtc3R5bGVkLXRleHQubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0VGFiTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC10YWIubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0VGFibGVDb2x1bW5zTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC10YWJsZS1jb2x1bW5zLm1vZGVsJztcbmltcG9ydCB7IEluc2VydFRhYmxlTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2luc2VydC10YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBJbnNlcnRUYWJsZVJvd3NNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW5zZXJ0LXRhYmxlLXJvd3MubW9kZWwnO1xuaW1wb3J0IHsgSW5zZXJ0VGV4dE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbnNlcnQtdGV4dC5tb2RlbCc7XG5pbXBvcnQgeyBMaW5rRGF0YU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9saW5rLWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgTW91c2VIYW5kbGVyIH0gZnJvbSAnLi4vaW50ZXJhY3Rpb24vbW91c2UuaGFuZGxlcic7XG5pbXBvcnQgeyBORVdfTElORV9NQVJLVVAgfSBmcm9tICcuL2NvbnN0YW50cy9lZGl0b3IuY29uc3QnO1xuaW1wb3J0IHsgTm9kZXJFZGdlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2VkZ2VzL2VkZ2UuY29tcG9uZW50JztcbmltcG9ydCB7IE51bWJlcmluZ0xldmVsTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL251bWJlcmluZy1sZXZlbC5tb2RlbCc7XG5pbXBvcnQgeyBPcGVyYXRpb24gfSBmcm9tICcuLi9vcGVyYXRpb24taGlzdG9yeS9vcGVyYXRpb24udHlwZSc7XG5pbXBvcnQgeyBPcGVyYXRpb25IaXN0b3J5IH0gZnJvbSAnLi4vb3BlcmF0aW9uLWhpc3Rvcnkvb3BlcmF0aW9uLWhpc3RvcnknO1xuaW1wb3J0IHsgUGFnZUhlbHBlciB9IGZyb20gJy4vaGVscGVycy9wYWdlLmhlbHBlcic7XG5pbXBvcnQgeyBQYWdlVHlwZSB9IGZyb20gJy4vZW51bXMvcGFnZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgUGFyYWdyYXBoTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3BhcmFncmFwaC5tb2RlbCc7XG5pbXBvcnQgeyBQYXJhZ3JhcGhTdHlsZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9wYXJhZ3JhcGgtc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuL3BvaW50JztcbmltcG9ydCB7IFBvc2l0aW9uSGVscGVyIH0gZnJvbSAnLi9oZWxwZXJzL3Bvc2l0aW9uLmhlbHBlcic7XG5pbXBvcnQgeyBQcmludEhlbHBlciB9IGZyb20gJy4uLy4uL2hlbHBlcnMvcHJpbnQuaGVscGVyJztcbmltcG9ydCB7IFJhbmdlIH0gZnJvbSAnLi9yYW5nZSc7XG5pbXBvcnQgeyBSZWd1bGF0b3JTZXJ2aWNlIH0gZnJvbSAnLi4vZXhlY3V0aW9uL3JlZ3VsYXRvci5zZXJ2aWNlJztcbmltcG9ydCB7IFJlbW92ZU51bWJlcmluZ3NNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVtb3ZlLW51bWJlcmluZ3MubW9kZWwnO1xuaW1wb3J0IHsgUmVtb3ZlVGFibGVDb2x1bW5zTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3JlbW92ZS10YWJsZS1jb2x1bW5zLm1vZGVsJztcbmltcG9ydCB7IFJlbW92ZVRhYmxlUm93c01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZW1vdmUtdGFibGUtcm93cy5tb2RlbCc7XG5pbXBvcnQgeyBSZW5kZXJlciB9IGZyb20gJy4vcmVuZGVyZXInO1xuaW1wb3J0IHsgUmVwbGFjZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZXBsYWNlLm1vZGVsJztcbmltcG9ydCB7IFJlc2l6ZVRhYmxlQ29sdW1uc01vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZXNpemUtdGFibGUtY29sdW1ucy5tb2RlbCc7XG5pbXBvcnQgeyBSZXN0b3JlTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3Jlc3RvcmUubW9kZWwnO1xuaW1wb3J0IHsgUmVzdG9yZU51bWJlcmluZ3NNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVzdG9yZS1udW1iZXJpbmdzLm1vZGVsJztcbmltcG9ydCB7IFJlc3RvcmVQYXJhZ3JhcGhTdHlsZXNNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcmVzdG9yZS1wYXJhZ3JhcGgtc3R5bGVzLm1vZGVsJztcbmltcG9ydCB7IFJlc3RvcmVUYWJsZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZXN0b3JlLXRhYmxlLm1vZGVsJztcbmltcG9ydCB7IFJlc3RvcmVUZXh0U3R5bGVzTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3Jlc3RvcmUtdGV4dC1zdHlsZXMubW9kZWwnO1xuaW1wb3J0IHsgU2F2ZUNvbW1hbmRzSGVscGVyIH0gZnJvbSAnLi4vb3BlcmF0aW9ucy9oZWxwZXJzL3NhdmUtY29tbWFuZHMuaGVscGVyJztcbmltcG9ydCB7IFNjYWxpbmdIZWxwZXIgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3NjYWxpbmcuaGVscGVyJztcbmltcG9ydCB7IFNlYXJjaCwgU2VhcmNoT3B0aW9ucyB9IGZyb20gJy4vc2VhcmNoJztcbmltcG9ydCB7IFNlYXJjaEl0ZXJhdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9zZWFyY2gtaXRlcmF0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTZWxlY3Rpb24gfSBmcm9tICcuLi9wb3NpdGlvbmluZy9zZWxlY3Rpb24nO1xuaW1wb3J0IHsgVGFiTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3RhYi5tb2RlbCc7XG5pbXBvcnQgeyBUYWJsZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90YWJsZS5tb2RlbCc7XG5pbXBvcnQgeyBUYXJnZXRNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvdGFyZ2V0Lm1vZGVsJztcbmltcG9ydCB7IFRleHRJbnB1dCB9IGZyb20gJy4va2V5Ym9hcmQvdGV4dC1pbnB1dCc7XG5pbXBvcnQgeyBUZXh0U3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvdGV4dC1zdHlsZS5tb2RlbCc7XG5pbXBvcnQgeyBWaXJ0dWFsUmVuZGVyZXIgfSBmcm9tICcuL3ZpcnR1YWwucmVuZGVyZXInO1xuXG5leHBvcnQgY2xhc3MgRWRpdG9yIGV4dGVuZHMgRXZlbnRFbWl0dGluZyB7XG4gICAgcmVhZG9ubHkgTUFYX0NPVU5UID0gOTk5O1xuXG4gICAgcmVhZG9ubHkgcGFyZW50VGFnTmFtZSA9ICdBUFAtRURJVE9SJztcblxuICAgIHJlYWRvbmx5IHRhYmxlQ2VsbFRhZ05hbWUgPSAnQVBQLU5PREVSLVRBQkxFLUNFTEwnO1xuXG4gICAgcmVhZG9ubHkgY3VzdG9tRWxlbWVudFRhZ05hbWVzV2l0aG91dFRhYmxlID0gWydBUFAtTk9ERVItSU5QVVQnLCAnQVBQLU5PREVSLUlNQUdFJywgJ0FQUC1OT0RFUi1TSUdOQVRVUkUnLCAnQVBQLU5PREVSLURBVEVQSUNLRVInXTtcblxuICAgIHJlYWRvbmx5IGN1c3RvbUVsZW1lbnRUYWdOYW1lcyA9IFsuLi50aGlzLmN1c3RvbUVsZW1lbnRUYWdOYW1lc1dpdGhvdXRUYWJsZSwgdGhpcy50YWJsZUNlbGxUYWdOYW1lXTtcblxuICAgIHJlYWRvbmx5IGhpc3Rvcnk6IE9wZXJhdGlvbkhpc3Rvcnk7XG5cbiAgICBnZXQgbWFpblNlc3Npb24oKTogRWRpdFNlc3Npb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLm1haW5TZXNzaW9uLnNlc3Npb247XG4gICAgfVxuXG4gICAgZ2V0IG1haW5SZW5kZXJlcigpOiBWaXJ0dWFsUmVuZGVyZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLm1haW5TZXNzaW9uLnJlbmRlcmVyIGFzIFZpcnR1YWxSZW5kZXJlcjtcbiAgICB9XG5cbiAgICBnZXQgc2Vzc2lvbigpOiBFZGl0U2Vzc2lvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ3VsYXRvclNlcnZpY2UuY3VycmVudFNlc3Npb24uc2Vzc2lvbjtcbiAgICB9XG5cbiAgICBnZXQgcmVuZGVyZXIoKTogUmVuZGVyZXIgfCBWaXJ0dWFsUmVuZGVyZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLmN1cnJlbnRTZXNzaW9uLnJlbmRlcmVyO1xuICAgIH1cblxuICAgIGdldCBpc1ZpZXdPbmx5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmlzVmlld09ubHk7XG4gICAgfVxuXG4gICAgZ2V0IHRhcmdldHMoKTogVGFyZ2V0TW9kZWxbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlZ3VsYXRvclNlcnZpY2UuZ2V0Q3VycmVudFNlc3Npb25UYXJnZXRzKCk7XG4gICAgfVxuXG4gICAgc2VsZWN0aW9uOiBTZWxlY3Rpb247XG5cbiAgICBtb3VzZUhhbmRsZXI6IE1vdXNlSGFuZGxlcjtcblxuICAgIGlucHV0SGFuZGxlcjogSW5wdXRIYW5kbGVyO1xuXG4gICAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICAgIHByaXZhdGUgc2VhcmNoOiBTZWFyY2g7XG5cbiAgICBwcml2YXRlIHRleHRJbnB1dDogVGV4dElucHV0O1xuXG4gICAgcHJpdmF0ZSBmb2N1c2VkQ29tcG9uZW50OiBDb21wb25lbnRSZWY8QmFzZU5vZGVyQ29tcG9uZW50PjtcblxuICAgIHByaXZhdGUgY2xpcGJvYXJkRGF0YTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgbW9kZWw6IERvY3hNb2RlbCxcbiAgICAgICAgcHJpdmF0ZSBjb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+LFxuICAgICAgICBwcml2YXRlIGVkaXRvclNlcnZpY2U6IEVkaXRvclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVndWxhdG9yU2VydmljZTogUmVndWxhdG9yU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb21tYW5kc1NlcnZpY2U6IENvbW1hbmRzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjbGlwYm9hcmQ6IENsaXBib2FyZCxcbiAgICAgICAgcHJpdmF0ZSBjdXN0b21QYWdlV2lkdGg/OiBudW1iZXJcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcblxuICAgICAgICB0aGlzLmhpc3RvcnkgPSBuZXcgT3BlcmF0aW9uSGlzdG9yeShlZGl0b3JTZXJ2aWNlLCByZWd1bGF0b3JTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRTZWxlY3Rpb24odGhpcy5zZWxlY3Rpb24pO1xuICAgICAgICB0aGlzLmluaXRNYWluU2Vzc2lvbigpO1xuICAgICAgICB0aGlzLnRleHRJbnB1dCA9IG5ldyBUZXh0SW5wdXQodGhpcy5tYWluUmVuZGVyZXIuY29udGFpbmVyKTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci50ZXh0YXJlYSA9IHRoaXMudGV4dElucHV0LmlucHV0O1xuICAgICAgICB0aGlzLm1vdXNlSGFuZGxlciA9IG5ldyBNb3VzZUhhbmRsZXIodGhpcy5yZW5kZXJlci5jb250YWluZXIsIHRoaXMpO1xuICAgICAgICB0aGlzLmlucHV0SGFuZGxlciA9IG5ldyBJbnB1dEhhbmRsZXIodGhpcy50ZXh0SW5wdXQuaW5wdXQsIHRoaXMpO1xuICAgICAgICB0aGlzLmluaXRSZXNpemVMaXN0ZW5lcigpO1xuICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5wcm9jZXNzU2VsZWN0aW9uU3R5bGVzKCk7XG5cbiAgICAgICAgdGhpcy5zZWFyY2ggPSBuZXcgU2VhcmNoKCk7XG4gICAgICAgIHRoaXMuc2VhcmNoLnNldCh7IHdyYXA6IHRydWUgfSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICAgICAgdGhpcy5zZWFyY2hPcHRpb25TdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZVN1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5zZXRUZXh0U3R5bGVzU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnNldFBhcmFncmFwaFN0eWxlc1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5jaGFuZ2VFbGVtZW50U3R5bGVTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuc2V0TnVtYmVyaW5nVGVtcGxhdGVUeXBlU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnJlbW92ZU51bWJlcmluZ3NTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuc2V0SW1hZ2VTdHlsZVN1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5jcmVhdGVDdXN0b21Db21wb25lbnRTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0QnJlYWtTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0SW1hZ2VTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0TGlua1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5lbmRNb3VzZVByZXNzU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemVTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0VGFibGVSb3dzU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmluc2VydFRhYmxlQ29sdW1uc1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5yZW1vdmVUYWJsZVJvd3NTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlVGFibGVDb2x1bW5zU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnJlbW92ZWRJbWFnZVN1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5yZXNpemVUYWJsZUNvbHVtbnNTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0VGFibGVTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXJVcGRhdGVkU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmVkZ2VFbGVtZW50Q29weVVwZGF0ZWRTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZEVkZ2VIZWlnaHRTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMudW5kb1N1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5yZWRvU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLmNsaXBib2FyZERhdGFTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuY3V0U2VsZWN0ZWRTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMuY29weVNlbGVjdGVkU3Vic2NyaXB0aW9uKCksXG4gICAgICAgICAgICB0aGlzLnBhc3RlRnJvbUNsaXBib2FyZFN1YnNjcmlwdGlvbigpLFxuICAgICAgICAgICAgdGhpcy5zZWxlY3RBbGxTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWRTdWJzY3JpcHRpb24oKSxcbiAgICAgICAgICAgIHRoaXMucHJpbnRTdWJzY3JpcHRpb24oKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4gcz8udW5zdWJzY3JpYmUoKSk7XG4gICAgICAgIHRoaXMuZGVzdHJveVJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgICAgIHRoaXMuZGVzdHJveU1haW5TZXNzaW9uTGlzdGVuZXJzKCk7XG4gICAgICAgIHRoaXMubW91c2VIYW5kbGVyLmRlc3Ryb3koKTtcbiAgICAgICAgdGhpcy5pbnB1dEhhbmRsZXIuZGVzdHJveSgpO1xuICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2V0U3R5bGVzJywgdGhpcy5zZXRTdHlsZXMpO1xuICAgICAgICB0aGlzLmJsdXJDdXN0b21Db21wb25lbnQoKTtcbiAgICB9XG5cbiAgICBzZWxlY3RQYWdlRG93bigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5tYWluUmVuZGVyZXIubGF5ZXJDb25maWc7XG4gICAgICAgIGNvbnN0IGxpbmUgPSBjb25maWcudmlzaWJsZVJhbmdlLmVuZFNjcmVlbkxpbmU7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gUG9zaXRpb25IZWxwZXIuc2NyZWVuVG9Eb2N1bWVudCh0aGlzLm1haW5TZXNzaW9uLCBsaW5lLCAwKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZVNlbGVjdGlvbihwb3NpdGlvbik7XG4gICAgICAgIHRoaXMubWFpblJlbmRlcmVyLnNjcm9sbEJ5KGNvbmZpZy5oZWlnaHQpO1xuICAgICAgICB0aGlzLnNjcm9sbEN1cnNvckludG9NYWluVmlldygwLjUpO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgc2VsZWN0UGFnZVVwKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLm1haW5SZW5kZXJlci5sYXllckNvbmZpZztcbiAgICAgICAgY29uc3QgbGluZSA9IGNvbmZpZy52aXNpYmxlUmFuZ2Uuc3RhcnRTY3JlZW5MaW5lO1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IFBvc2l0aW9uSGVscGVyLnNjcmVlblRvRG9jdW1lbnQodGhpcy5tYWluU2Vzc2lvbiwgbGluZSwgMCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLm1vdmVTZWxlY3Rpb24ocG9zaXRpb24pO1xuICAgICAgICB0aGlzLm1haW5SZW5kZXJlci5zY3JvbGxCeSgtY29uZmlnLmhlaWdodCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ3Vyc29ySW50b01haW5WaWV3KDAuNSk7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBnb3RvUGFnZURvd24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMubWFpblJlbmRlcmVyLmxheWVyQ29uZmlnO1xuICAgICAgICBjb25zdCBsaW5lID0gY29uZmlnLnZpc2libGVSYW5nZS5lbmRTY3JlZW5MaW5lO1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IFBvc2l0aW9uSGVscGVyLnNjcmVlblRvRG9jdW1lbnQodGhpcy5tYWluU2Vzc2lvbiwgbGluZSwgMCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlQ3Vyc29yKHBvc2l0aW9uKTtcbiAgICAgICAgdGhpcy5tYWluUmVuZGVyZXIuc2Nyb2xsQnkoY29uZmlnLmhlaWdodCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ3Vyc29ySW50b01haW5WaWV3KDAuNSk7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBnb3RvUGFnZVVwKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLm1haW5SZW5kZXJlci5sYXllckNvbmZpZztcbiAgICAgICAgY29uc3QgbGluZSA9IGNvbmZpZy52aXNpYmxlUmFuZ2Uuc3RhcnRTY3JlZW5MaW5lO1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IFBvc2l0aW9uSGVscGVyLnNjcmVlblRvRG9jdW1lbnQodGhpcy5tYWluU2Vzc2lvbiwgbGluZSwgMCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlQ3Vyc29yKHBvc2l0aW9uKTtcbiAgICAgICAgdGhpcy5tYWluUmVuZGVyZXIuc2Nyb2xsQnkoLWNvbmZpZy5oZWlnaHQpO1xuICAgICAgICB0aGlzLnNjcm9sbEN1cnNvckludG9NYWluVmlldygwLjUpO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgY3V0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGVkKCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0KHRleHQ6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSkge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRUZXh0KHRleHQsIHRoaXMuc2Vzc2lvbi5jdXJzb3JTdHlsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpbnNlcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoVG9Eb2N1bWVudEluZGV4KFxuICAgICAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi53cmFwUGFyYWdyYXBoSW5kZXgsXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQucm93LFxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LmNvbHVtblxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IGluc2VydFRleHQgPSBuZXcgSW5zZXJ0VGV4dE1vZGVsKHsgaW5zZXJ0SW5kZXgsIHRleHQgfSk7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VCeShuZXcgUmVwbGFjZU1vZGVsKHsgaW5zZXJ0VGV4dCB9KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpbnNlcnRUZXh0KHRleHQ6IHN0cmluZywgdGV4dFN0eWxlOiBUZXh0U3R5bGVNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuc2VsZWN0aW9uLmN1cnNvcjtcbiAgICAgICAgaWYgKHRleHRTdHlsZSkge1xuICAgICAgICAgICAgdGhpcy5zYXZlSW5zZXJ0U3R5bGVkVGV4dFRvSGlzdG9yeShwb3NpdGlvbi5yb3csIHBvc2l0aW9uLmNvbHVtbiwgdGV4dCwgdGV4dFN0eWxlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZUluc2VydFRleHRUb0hpc3RvcnkocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4sIHRleHQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnRUZXh0KHBvc2l0aW9uLCB0ZXh0LCB0ZXh0U3R5bGUpO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcmVwbGFjZVRleHQodGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRvb2xiYXJTdHlsZSA9IG5ldyBUZXh0U3R5bGVNb2RlbCh0aGlzLnNlc3Npb24uc3R5bGVzTWFwKTtcbiAgICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZCgpO1xuICAgICAgICB0aGlzLmluc2VydFRleHQodGV4dCwgdG9vbGJhclN0eWxlKTtcbiAgICB9XG5cbiAgICByZW1vdmVMZWZ0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0TGVmdCh0aGlzLnNlc3Npb24pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICByZW1vdmVSaWdodCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdFJpZ2h0KHRoaXMuc2Vzc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZCgpO1xuICAgIH1cblxuICAgIGluc2VydEJyZWFrKGJyZWFrVHlwZTogQnJlYWtUeXBlcyk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnNlcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoVG9Eb2N1bWVudEluZGV4KFxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLndyYXBQYXJhZ3JhcGhJbmRleCxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LnJvdyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LmNvbHVtblxuICAgICAgICApO1xuICAgICAgICBjb25zdCBpbnNlcnRCcmVhayA9IG5ldyBJbnNlcnRCcmVha01vZGVsKHsgaW5zZXJ0SW5kZXgsIGJyZWFrVHlwZSB9KTtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VCeShuZXcgUmVwbGFjZU1vZGVsKHsgaW5zZXJ0QnJlYWsgfSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJyZWFrVHlwZSA9PT0gQnJlYWtUeXBlcy5Db2x1bW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2F2ZUluc2VydEJyZWFrVG9IaXN0b3J5KGluc2VydEJyZWFrKTtcbiAgICAgICAgY29uc3QgZW5kUG9pbnQgPSB0aGlzLnNlc3Npb24uaW5zZXJ0QnJlYWsodGhpcy5zZWxlY3Rpb24uY3Vyc29yLCBicmVha1R5cGUpO1xuICAgICAgICBsZXQgbGFzdFJvdyA9IHRoaXMuc2VsZWN0aW9uLmN1cnNvci5yb3cgPT09IGVuZFBvaW50LnJvdyA/IGVuZFBvaW50LnJvdyA6IEluZmluaXR5O1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUxpbmVzKHRoaXMuc2VsZWN0aW9uLmN1cnNvci5yb3csIGxhc3RSb3cpO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnVwZGF0ZUN1cnNvcigpO1xuICAgICAgICB0aGlzLnJlcmVuZGVyTWFya2VyKCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ3Vyc29ySW50b01haW5WaWV3KDAuMSk7XG4gICAgfVxuXG4gICAgaW5zZXJ0VGFiKCkge1xuICAgICAgICBjb25zdCBpbnNlcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoVG9Eb2N1bWVudEluZGV4KFxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLndyYXBQYXJhZ3JhcGhJbmRleCxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LnJvdyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LmNvbHVtblxuICAgICAgICApO1xuICAgICAgICBjb25zdCBpbnNlcnRUYWIgPSBuZXcgSW5zZXJ0VGFiTW9kZWwoeyBpbnNlcnRJbmRleCB9KTtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VCeShuZXcgUmVwbGFjZU1vZGVsKHsgaW5zZXJ0VGFiIH0pKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2F2ZUluc2VydFRhYlRvSGlzdG9yeShpbnNlcnRUYWIpO1xuICAgICAgICBjb25zdCBlbmRQb2ludCA9IHRoaXMuc2Vzc2lvbi5pbnNlcnRUYWIodGhpcy5zZWxlY3Rpb24uY3Vyc29yKTtcbiAgICAgICAgdGhpcy5vbkRvY3VtZW50Q2hhbmdlKG5ldyBSYW5nZSh0aGlzLnNlbGVjdGlvbi5jdXJzb3IsIGVuZFBvaW50KSk7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBpbnNlcnRJbWFnZShpbWFnZURhdGE6IEltYWdlRGF0YU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluc2VydEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhUb0RvY3VtZW50SW5kZXgoXG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ud3JhcFBhcmFncmFwaEluZGV4LFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQucm93LFxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQuY29sdW1uXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGluc2VydEltYWdlID0gbmV3IEluc2VydEltYWdlTW9kZWwoeyBpbnNlcnRJbmRleCwgaW1hZ2VEYXRhIH0pO1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUJ5KG5ldyBSZXBsYWNlTW9kZWwoeyBpbnNlcnRJbWFnZSB9KSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNhdmVJbnNlcnRJbWFnZVRvSGlzdG9yeShpbnNlcnRJbWFnZSk7XG4gICAgICAgIGNvbnN0IGVuZFBvaW50ID0gdGhpcy5zZXNzaW9uLmluc2VydEltYWdlKHRoaXMuc2VsZWN0aW9uLmN1cnNvciwgaW1hZ2VEYXRhKTtcbiAgICAgICAgbGV0IGxhc3RSb3cgPSB0aGlzLnNlbGVjdGlvbi5jdXJzb3Iucm93ID09PSBlbmRQb2ludC5yb3cgPyBlbmRQb2ludC5yb3cgOiBJbmZpbml0eTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVMaW5lcyh0aGlzLnNlbGVjdGlvbi5jdXJzb3Iucm93LCBsYXN0Um93KTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTtcbiAgICAgICAgdGhpcy5yZXJlbmRlck1hcmtlcigpO1xuICAgIH1cblxuICAgIGluc2VydExpbmsobGlua0RhdGFNb2RlbDogTGlua0RhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnNlcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoVG9Eb2N1bWVudEluZGV4KFxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLndyYXBQYXJhZ3JhcGhJbmRleCxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LnJvdyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LmNvbHVtblxuICAgICAgICApO1xuICAgICAgICBjb25zdCBpbnNlcnRMaW5rID0gbmV3IEluc2VydExpbmtNb2RlbCh7IGluc2VydEluZGV4LCBlbmRJbmRleDogaW5zZXJ0SW5kZXggKyBsaW5rRGF0YU1vZGVsLnRleHQubGVuZ3RoLCBsaW5rRGF0YU1vZGVsIH0pO1xuICAgICAgICBpZiAoIXRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZUJ5KG5ldyBSZXBsYWNlTW9kZWwoeyBpbnNlcnRMaW5rIH0pKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2F2ZUluc2VydExpbmtUb0hpc3RvcnkoaW5zZXJ0TGluayk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnRMaW5rKHRoaXMuc2VsZWN0aW9uLmN1cnNvciwgbGlua0RhdGFNb2RlbCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7XG4gICAgICAgIHRoaXMucmVyZW5kZXJNYXJrZXIoKTtcbiAgICB9XG5cbiAgICBpbnNlcnRUYWJsZSh0YWJsZURhdGE6IHsgcm93czogbnVtYmVyOyBjb2x1bW5zOiBudW1iZXIgfSk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnNlcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoVG9Eb2N1bWVudEluZGV4KFxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLndyYXBQYXJhZ3JhcGhJbmRleCxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LnJvdyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LmNvbHVtblxuICAgICAgICApO1xuICAgICAgICBsZXQgdGV4dFRvSW5zZXJ0ID0gVEFCTEVfTUFSS0VSO1xuICAgICAgICBsZXQgaW5zZXJ0VGFibGVJbmRleCA9IGluc2VydEluZGV4O1xuICAgICAgICBpZiAoIXRoaXMuc2Vzc2lvbi53cmFwUGFyYWdyYXBoSW5kZXguc29tZSh4ID0+IHggPT09IGluc2VydEluZGV4KSkge1xuICAgICAgICAgICAgdGV4dFRvSW5zZXJ0ID0gTkVXX0xJTkVfTUFSS1VQICsgdGV4dFRvSW5zZXJ0O1xuICAgICAgICAgICAgaW5zZXJ0VGFibGVJbmRleCsrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnNlc3Npb24uZG9jdW1lbnQuaXNOZXdMaW5lU3ltYm9sKGluc2VydEluZGV4KSkge1xuICAgICAgICAgICAgdGV4dFRvSW5zZXJ0ID0gdGV4dFRvSW5zZXJ0ICsgTkVXX0xJTkVfTUFSS1VQO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW5zZXJ0VGFibGUgPSBuZXcgSW5zZXJ0VGFibGVNb2RlbCh7XG4gICAgICAgICAgICBpbnNlcnRJbmRleCxcbiAgICAgICAgICAgIGluc2VydFRhYmxlSW5kZXgsXG4gICAgICAgICAgICByb3dzQ291bnQ6IHRhYmxlRGF0YS5yb3dzLFxuICAgICAgICAgICAgY29sdW1uc0NvdW50OiB0YWJsZURhdGEuY29sdW1ucyxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHRleHRUb0luc2VydFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VCeShuZXcgUmVwbGFjZU1vZGVsKHsgaW5zZXJ0VGFibGUgfSkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zYXZlSW5zZXJ0VGFibGVUb0hpc3RvcnkoaW5zZXJ0VGFibGUpO1xuICAgICAgICBjb25zdCBlbmRQb2ludCA9IHRoaXMuc2Vzc2lvbi5pbnNlcnRUYWJsZSh0aGlzLnNlbGVjdGlvbi5jdXJzb3IsIGluc2VydFRhYmxlKTtcbiAgICAgICAgbGV0IGxhc3RSb3cgPSB0aGlzLnNlbGVjdGlvbi5jdXJzb3Iucm93ID09PSBlbmRQb2ludC5yb3cgPyBlbmRQb2ludC5yb3cgOiBJbmZpbml0eTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVMaW5lcyh0aGlzLnNlbGVjdGlvbi5jdXJzb3Iucm93LCBsYXN0Um93KTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTtcbiAgICAgICAgdGhpcy5yZXJlbmRlck1hcmtlcigpO1xuICAgIH1cblxuICAgIHJlcGxhY2VCeShtb2RlbDogUmVwbGFjZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFBvc2l0aW9uVG9Eb2N1bWVudEluZGV4KHRoaXMuc2Vzc2lvbi53cmFwUGFyYWdyYXBoSW5kZXgsIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0KTtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFBvc2l0aW9uVG9Eb2N1bWVudEluZGV4KHRoaXMuc2Vzc2lvbi53cmFwUGFyYWdyYXBoSW5kZXgsIHRoaXMuc2VsZWN0aW9uLnJhbmdlLmVuZCkgLSAxO1xuICAgICAgICBtb2RlbC5kZWxldGUgPSBuZXcgRGVsZXRlTW9kZWwoeyBzdGFydEluZGV4LCBlbmRJbmRleCB9KTtcbiAgICAgICAgdGhpcy5zYXZlUmVwbGFjZVRvSGlzdG9yeSh0aGlzLnNlbGVjdGlvbi5yYW5nZSwgbW9kZWwpO1xuICAgICAgICBjb25zdCBlbmRQb2ludCA9IHRoaXMuc2Vzc2lvbi5yZXBsYWNlKG1vZGVsKTtcbiAgICAgICAgdGhpcy5vbkRvY3VtZW50Q2hhbmdlKG5ldyBSYW5nZSh0aGlzLnNlbGVjdGlvbi5jdXJzb3IsIGVuZFBvaW50KSk7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICByZW1vdmVUb0xpbmVTdGFydCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdExpbmVTdGFydCh0aGlzLnNlc3Npb24pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlU2VsZWN0ZWQoKTtcbiAgICB9XG5cbiAgICByZW1vdmVUb0xpbmVFbmQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RMaW5lRW5kKHRoaXMuc2Vzc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZCgpO1xuICAgIH1cblxuICAgIHJlbW92ZVdvcmRMZWZ0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0V29yZExlZnQodGhpcy5zZXNzaW9uKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGVkKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlV29yZFJpZ2h0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uc2VsZWN0V29yZFJpZ2h0KHRoaXMuc2Vzc2lvbik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZCgpO1xuICAgIH1cblxuICAgIGFwcGx5VGV4dFN0eWxlcyh0ZXh0U3R5bGU6IFRleHRTdHlsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGlmICghdGV4dFN0eWxlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJsdXJDdXN0b21Db21wb25lbnQoKTtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuc2VsZWN0aW9uLnJhbmdlO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoVG9Eb2N1bWVudEluZGV4KHRoaXMuc2Vzc2lvbi53cmFwUGFyYWdyYXBoSW5kZXgsIHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZEluZGV4ID0gQ29udGVudEhlbHBlci5wYXJhZ3JhcGhUb0RvY3VtZW50SW5kZXgodGhpcy5zZXNzaW9uLndyYXBQYXJhZ3JhcGhJbmRleCwgcmFuZ2UuZW5kLnJvdywgcmFuZ2UuZW5kLmNvbHVtbikgLSAxO1xuICAgICAgICAgICAgdGhpcy5zYXZlQXBwbHlUZXh0U3R5bGVUb0hpc3Rvcnkoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRleHRTdHlsZSk7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uYXBwbHlUZXh0U3R5bGUoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRleHRTdHlsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNldFRleHRTdHlsZSh0ZXh0U3R5bGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0VGV4dFN0eWxlKHRleHRTdHlsZTogVGV4dFN0eWxlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFBvc2l0aW9uVG9Eb2N1bWVudEluZGV4KHRoaXMuc2Vzc2lvbi53cmFwUGFyYWdyYXBoSW5kZXgsIHRoaXMuc2VsZWN0aW9uLmN1cnNvcik7XG4gICAgICAgIGNvbnN0IGlzUGFyYWdyYXBoID0gdGhpcy5zZXNzaW9uLm1vZGVsLmNvbnRlbnRMZW5ndGggPT09IGluZGV4IHx8IHRoaXMuc2Vzc2lvbi5tb2RlbC5jb250ZW50W2luZGV4XSA9PT0gTkVXX0xJTkVfTUFSS1VQO1xuICAgICAgICBpZiAoaXNQYXJhZ3JhcGgpIHtcbiAgICAgICAgICAgIHRoaXMuc2F2ZUFwcGx5VGV4dFN0eWxlVG9IaXN0b3J5KGluZGV4LCBpbmRleCwgdGV4dFN0eWxlKTtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5hcHBseVRleHRTdHlsZShpbmRleCwgaW5kZXgsIHRleHRTdHlsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uc2V0VGV4dFN0eWxlKHRleHRTdHlsZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVDdXJzb3IoKTtcbiAgICB9XG5cbiAgICBhcHBseVBhcmFncmFwaFN0eWxlcyhwYXJhZ3JhcGhTdHlsZTogUGFyYWdyYXBoU3R5bGVNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuc2VsZWN0aW9uLnJhbmdlO1xuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gdGhpcy5zZXNzaW9uLm1vZGVsLnBhcmFncmFwaHNbcmFuZ2Uuc3RhcnQucm93XS5pbnNlcnRJbmRleDtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSB0aGlzLnNlc3Npb24ubW9kZWwucGFyYWdyYXBoc1tyYW5nZS5lbmQucm93XS5pbnNlcnRJbmRleDtcbiAgICAgICAgdGhpcy5zYXZlQXBwbHlQYXJhZ3JhcGhTdHlsZVRvSGlzdG9yeShzdGFydEluZGV4LCBlbmRJbmRleCwgcGFyYWdyYXBoU3R5bGUpO1xuICAgICAgICB0aGlzLnNlc3Npb24uYXBwbHlQYXJhZ3JhcGhTdHlsZShzdGFydEluZGV4LCBlbmRJbmRleCwgcGFyYWdyYXBoU3R5bGUpO1xuICAgIH1cblxuICAgIGFwcGx5RWxlbWVudFN0eWxlKGN1cnJlbnQ6IEVsZW1lbnRNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlc3Npb24uYXBwbHlFbGVtZW50U3R5bGUobmV3IEFwcGx5RWxlbWVudFN0eWxlTW9kZWwoY3VycmVudCkpO1xuICAgIH1cblxuICAgIGhhbmRsZUltYWdlU3R5bGVDaGFuZ2UocHJldmlvdXM6IEltYWdlTW9kZWwsIGN1cnJlbnQ6IEltYWdlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hBcHBseUltYWdlU3R5bGUocHJldmlvdXMsIGN1cnJlbnQpO1xuICAgICAgICBjb25zdCBzdGFydCA9IHRoaXMuc2Vzc2lvbi5kb2N1bWVudC5pbmRleFRvUG9zaXRpb24oY3VycmVudC5pbnNlcnRJbmRleCwgMCk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi51cGRhdGVXcmFwRGF0YShzdGFydC5yb3csIHRoaXMuc2Vzc2lvbi5kb2N1bWVudC5saW5lcy5sZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICBzZXROdW1iZXJpbmdUZW1wbGF0ZSh0ZW1wbGF0ZUxldmVsczogTnVtYmVyaW5nTGV2ZWxNb2RlbFtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJhbmdlID0gdGhpcy5zZWxlY3Rpb24ucmFuZ2U7XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLnNlc3Npb24ubW9kZWwucGFyYWdyYXBoc1tyYW5nZS5zdGFydC5yb3ddLmluc2VydEluZGV4O1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IHRoaXMuc2Vzc2lvbi5tb2RlbC5wYXJhZ3JhcGhzW3JhbmdlLmVuZC5yb3ddLmluc2VydEluZGV4O1xuICAgICAgICB0aGlzLnNhdmVBZGROdW1iZXJpbmdUb0hpc3RvcnkodGVtcGxhdGVMZXZlbHMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLmFkZE51bWJlcmluZyh0ZW1wbGF0ZUxldmVscywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgIH1cblxuICAgIHJlbW92ZU51bWJlcmluZ3NGcm9tUGFyYWdyYXBocygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSB0aGlzLnNlbGVjdGlvbi5yYW5nZTtcbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IHRoaXMuc2Vzc2lvbi5tb2RlbC5wYXJhZ3JhcGhzW3JhbmdlLnN0YXJ0LnJvd10uaW5zZXJ0SW5kZXg7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdGhpcy5zZXNzaW9uLm1vZGVsLnBhcmFncmFwaHNbcmFuZ2UuZW5kLnJvd10uaW5zZXJ0SW5kZXg7XG4gICAgICAgIHRoaXMuc2F2ZVJlbW92ZU51bWJlcmluZ1RvSGlzdG9yeShzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVOdW1iZXJpbmdzKHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICB9XG5cbiAgICBhcHBseUltYWdlU3R5bGVzKGltYWdlOiBJbWFnZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2F2ZUFwcGx5SW1hZ2VTdHlsZVRvSGlzdG9yeShpbWFnZSk7XG4gICAgICAgIGNvbnN0IGltYWdlU3R5bGUgPSBuZXcgQXBwbHlJbWFnZVN0eWxlTW9kZWwoeyBpbnNlcnRJbmRleDogaW1hZ2UuaW5zZXJ0SW5kZXgsIGhlaWdodDogaW1hZ2UuaGVpZ2h0LCB3aWR0aDogaW1hZ2Uud2lkdGggfSk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5hcHBseUltYWdlU3R5bGUoaW1hZ2VTdHlsZSk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7XG4gICAgfVxuXG4gICAgZm9jdXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGV4dElucHV0LmlucHV0LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgb3BlblNlYXJjaCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLm9wZW5TZWFyY2hEaWFsb2cgPSB0cnVlO1xuICAgIH1cblxuICAgIGZpbmQob3B0aW9uczogU2VhcmNoT3B0aW9ucyk6IFJhbmdlIHtcbiAgICAgICAgbGV0IHJhbmdlID0gdGhpcy5zZWxlY3Rpb24ucmFuZ2U7XG4gICAgICAgIGlmIChvcHRpb25zLnRlcm0gPT0gbnVsbCkge1xuICAgICAgICAgICAgbGV0IHRlcm0gPSB0aGlzLnNlc3Npb24uZG9jdW1lbnQuZ2V0VGV4dFJhbmdlKHJhbmdlKSB8fCB0aGlzLnNlYXJjaC5vcHRpb25zLnRlcm07XG4gICAgICAgICAgICBpZiAoIXRlcm0pIHtcbiAgICAgICAgICAgICAgICByYW5nZSA9IHRoaXMuc2Vzc2lvbi5nZXRXb3JkUmFuZ2UocmFuZ2Uuc3RhcnQucm93LCByYW5nZS5zdGFydC5jb2x1bW4pO1xuICAgICAgICAgICAgICAgIHRlcm0gPSB0aGlzLnNlc3Npb24uZG9jdW1lbnQuZ2V0VGV4dFJhbmdlKHJhbmdlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wdGlvbnMudGVybSA9IHRlcm07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW9wdGlvbnMuc3RhcnQpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuc3RhcnQgPSByYW5nZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VhcmNoLnNldChvcHRpb25zKTtcblxuICAgICAgICBjb25zdCBuZXdSYW5nZSA9IHRoaXMuc2VhcmNoLmZpbmQodGhpcy5zZXNzaW9uKTtcbiAgICAgICAgaWYgKG5ld1JhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZVNlbGVjdGlvbihyYW5nZS5zdGFydCwgcmFuZ2UuZW5kKTtcbiAgICAgICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlc3Npb24gPT09IHRoaXMubWFpblNlc3Npb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1haW5SZW5kZXJlci5zY3JvbGxTZWxlY3Rpb25JbnRvVmlldyhyYW5nZS5zdGFydCwgcmFuZ2UuZW5kLCAwLjUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ld1JhbmdlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmFuZ2UuZW5kID0gcmFuZ2Uuc3RhcnQ7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnBsYWNlQ3Vyc29yKHJhbmdlLnN0YXJ0KTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB1cGRhdGVDb3VudGVyKCk6IFNlYXJjaEl0ZXJhdGlvbiB7XG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gdGhpcy5zZWFyY2gub3B0aW9ucy5yZWdleCBhcyBSZWdFeHA7XG4gICAgICAgIGxldCBhbGwgPSAwO1xuICAgICAgICBsZXQgY3VycmVudCA9IDA7XG4gICAgICAgIGlmICghcmVnZXgpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGN1cnJlbnQ6IDAsIHRvdGFsOiAwIH07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuc2Vzc2lvbi5kb2N1bWVudC5nZXRBbGxMaW5lcygpLmpvaW4oJ1xcbicpO1xuXG4gICAgICAgIGxldCBvZmZzZXQgPSB0aGlzLnNlc3Npb24uZG9jdW1lbnQucG9zaXRpb25Ub0luZGV4KHRoaXMuc2Vzc2lvbi5kb2N1bWVudC5saW5lcywgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQpO1xuXG4gICAgICAgIHJlZ2V4Lmxhc3RJbmRleCA9IDA7XG4gICAgICAgIGxldCByZWdleFJlc3VsdDtcbiAgICAgICAgd2hpbGUgKChyZWdleFJlc3VsdCA9IHJlZ2V4LmV4ZWModmFsdWUpKSkge1xuICAgICAgICAgICAgYWxsKys7XG4gICAgICAgICAgICBsZXQgbGFzdCA9IHJlZ2V4UmVzdWx0LmluZGV4O1xuICAgICAgICAgICAgaWYgKGxhc3QgPD0gb2Zmc2V0KSB7XG4gICAgICAgICAgICAgICAgY3VycmVudCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsbCA+IHRoaXMuTUFYX0NPVU5UKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyBjdXJyZW50OiBjdXJyZW50LCB0b3RhbDogYWxsID4gdGhpcy5NQVhfQ09VTlQgPyB0aGlzLk1BWF9DT1VOVCA6IGFsbCB9O1xuICAgIH1cblxuICAgIHJlcGxhY2Uoc2VhcmNoOiBzdHJpbmcsIHJlcGxhY2U6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlYXJjaCAhPT0gcmVwbGFjZSkge1xuICAgICAgICAgICAgaWYgKHJlcGxhY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlcGxhY2VUZXh0KHJlcGxhY2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZVNlbGVjdGVkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZpbmQoeyB0ZXJtOiBzZWFyY2gsIHNraXBDdXJyZW50OiB0cnVlLCBiYWNrd2FyZHM6IGZhbHNlIH0pO1xuICAgIH1cblxuICAgIHVuZG8oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHVuZG8gPSB0aGlzLmhpc3RvcnkucG9wVW5kb09wZXJhdGlvbigpO1xuICAgICAgICBpZiAoIXVuZG8pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlZ3VsYXRvclNlcnZpY2Uuc2V0VGFyZ2V0ZWRTZXNzaW9uQXNDdXJyZW50KHVuZG8udGFyZ2V0cyk7XG4gICAgICAgIHRoaXMuYXBwbHlPcGVyYXRpb24odW5kby5vcGVyYXRpb24pO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZVNlbGVjdGlvbih1bmRvLmN1cnNvciwgdW5kby5hbmNob3IpO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcmVkbygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVkbyA9IHRoaXMuaGlzdG9yeS5wb3BSZWRvT3BlcmF0aW9uKCk7XG4gICAgICAgIGlmICghcmVkbykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRUYXJnZXRlZFNlc3Npb25Bc0N1cnJlbnQocmVkby50YXJnZXRzKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VTZWxlY3Rpb24ocmVkby5jdXJzb3IsIHJlZG8uYW5jaG9yKTtcbiAgICAgICAgdGhpcy5hcHBseU9wZXJhdGlvbihyZWRvLm9wZXJhdGlvbik7XG4gICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBhcHBseU9wZXJhdGlvbihvcGVyYXRpb246IE9wZXJhdGlvbik6IHZvaWQge1xuICAgICAgICBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgSW5zZXJ0VGV4dE1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0VGV4dEJ5RG9jdW1lbnRJbmRleChvcGVyYXRpb24uaW5zZXJ0SW5kZXgsIG9wZXJhdGlvbi50ZXh0LCBudWxsKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBEZWxldGVNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZUJ5RG9jdW1lbnRJbmRleGVzKG9wZXJhdGlvbi5zdGFydEluZGV4LCBvcGVyYXRpb24uZW5kSW5kZXgpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEluc2VydFN0eWxlZFRleHRNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydFRleHRCeURvY3VtZW50SW5kZXgob3BlcmF0aW9uLmluc2VydEluZGV4LCBvcGVyYXRpb24udGV4dCwgbmV3IFRleHRTdHlsZU1vZGVsKG9wZXJhdGlvbi50ZXh0U3R5bGUpKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBSZXN0b3JlTW9kZWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZXBDb3B5ID0gc3RydWN0dXJlZENsb25lKG9wZXJhdGlvbik7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVzdG9yZShkZWVwQ29weSk7XG4gICAgICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFNhdmVDb21tYW5kc0hlbHBlci5nZXRSZXN0b3JlQ29tbWFuZChkZWVwQ29weSkpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEFwcGx5VGV4dFN0eWxlTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5hcHBseVRleHRTdHlsZShvcGVyYXRpb24uc3RhcnRJbmRleCwgb3BlcmF0aW9uLmVuZEluZGV4LCBuZXcgVGV4dFN0eWxlTW9kZWwob3BlcmF0aW9uLnRleHRTdHlsZSkpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEFwcGx5UGFyYWdyYXBoU3R5bGVNb2RlbCkge1xuICAgICAgICAgICAgY29uc3QgY29weSA9IG5ldyBQYXJhZ3JhcGhTdHlsZU1vZGVsKG9wZXJhdGlvbi5wYXJhZ3JhcGhTdHlsZSk7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uYXBwbHlQYXJhZ3JhcGhTdHlsZShvcGVyYXRpb24uc3RhcnRJbmRleCwgb3BlcmF0aW9uLmVuZEluZGV4LCBjb3B5KTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBSZXN0b3JlVGV4dFN0eWxlc01vZGVsKSB7XG4gICAgICAgICAgICBjb25zdCBkZWVwQ29weSA9IHN0cnVjdHVyZWRDbG9uZShvcGVyYXRpb24pO1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlc3RvcmVUZXh0U3R5bGVzKGRlZXBDb3B5LmZvcm1hdHMpO1xuICAgICAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVzdG9yZVRleHRTdHlsZXNDb21tYW5kKGRlZXBDb3B5LmZvcm1hdHMpKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBSZXN0b3JlUGFyYWdyYXBoU3R5bGVzTW9kZWwpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZXBDb3B5ID0gc3RydWN0dXJlZENsb25lKG9wZXJhdGlvbik7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVzdG9yZVBhcmFncmFwaFN0eWxlcyhkZWVwQ29weS5wYXJhZ3JhcGhzKTtcbiAgICAgICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldFJlc3RvcmVQYXJhZ3JhcGhTdHlsZXNDb21tYW5kKGRlZXBDb3B5LnBhcmFncmFwaHMpKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBJbnNlcnRFbGVtZW50TW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnRFbGVtZW50QnlEb2N1bWVudEluZGV4KG9wZXJhdGlvbik7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgSW5zZXJ0QnJlYWtNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydEJyZWFrQnlEb2N1bWVudEluZGV4KG9wZXJhdGlvbik7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgQXBwbHlFbGVtZW50U3R5bGVNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmFwcGx5RWxlbWVudFN0eWxlKG9wZXJhdGlvbik7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgSW5zZXJ0VGFiTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5pbnNlcnRUYWJCeURvY3VtZW50SW5kZXgob3BlcmF0aW9uKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBJbnNlcnRJbWFnZU1vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0SW1hZ2VCeURvY3VtZW50SW5kZXgob3BlcmF0aW9uKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBBcHBseUltYWdlU3R5bGVNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmFwcGx5SW1hZ2VTdHlsZShvcGVyYXRpb24pO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEFkZE51bWJlcmluZ01vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uYWRkTnVtYmVyaW5nKG9wZXJhdGlvbi5sZXZlbHMsIG9wZXJhdGlvbi5zdGFydEluZGV4LCBvcGVyYXRpb24uZW5kSW5kZXgpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIFJlc3RvcmVOdW1iZXJpbmdzTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZXN0b3JlTnVtYmVyaW5ncyhvcGVyYXRpb24ucGFyYWdyYXBocywgb3BlcmF0aW9uLm51bWJlcmluZ3MpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEluc2VydFRhYmxlQ29sdW1uc01vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0VGFibGVDb2x1bW5zKG9wZXJhdGlvbi5pbnNlcnRJbmRleCwgb3BlcmF0aW9uLmNvbHVtbnNDb3VudCwgb3BlcmF0aW9uLnRhcmdldEluZGV4LCBvcGVyYXRpb24uaW5oZXJpdEluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZShvcGVyYXRpb24uaW5zZXJ0SW5kZXgsIHRoaXMuc2Vzc2lvbi5zZXNzaW9uSWQpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIEluc2VydFRhYmxlUm93c01vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0VGFibGVSb3dzKG9wZXJhdGlvbi5pbnNlcnRJbmRleCwgb3BlcmF0aW9uLnJvd3NDb3VudCwgb3BlcmF0aW9uLnRhcmdldEluZGV4LCBvcGVyYXRpb24uaW5oZXJpdEluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZShvcGVyYXRpb24uaW5zZXJ0SW5kZXgsIHRoaXMuc2Vzc2lvbi5zZXNzaW9uSWQpO1xuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbiBpbnN0YW5jZW9mIFJlbW92ZVRhYmxlQ29sdW1uc01vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlVGFibGVDb2x1bW5zKG9wZXJhdGlvbi5pbnNlcnRJbmRleCwgb3BlcmF0aW9uLnN0YXJ0SW5kZXgsIG9wZXJhdGlvbi5lbmRJbmRleCk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUob3BlcmF0aW9uLmluc2VydEluZGV4LCB0aGlzLnNlc3Npb24uc2Vzc2lvbklkKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBSZW1vdmVUYWJsZVJvd3NNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZVRhYmxlUm93cyhvcGVyYXRpb24uaW5zZXJ0SW5kZXgsIG9wZXJhdGlvbi5zdGFydEluZGV4LCBvcGVyYXRpb24uZW5kSW5kZXgpO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VkVGFibGVTaXplKG9wZXJhdGlvbi5pbnNlcnRJbmRleCwgdGhpcy5zZXNzaW9uLnNlc3Npb25JZCk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgUmVzaXplVGFibGVDb2x1bW5zTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZXNpemVUYWJsZUNvbHVtbnMob3BlcmF0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZShvcGVyYXRpb24uaW5zZXJ0SW5kZXgsIHRoaXMuc2Vzc2lvbi5zZXNzaW9uSWQpO1xuICAgICAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVzaXplVGFibGVDb2x1bW5zQ29tbWFuZChvcGVyYXRpb24pKTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBSZXN0b3JlVGFibGVNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLnJlc3RvcmVUYWJsZShvcGVyYXRpb24uaW5zZXJ0SW5kZXgsIG9wZXJhdGlvbi5vbGRUYWJsZSk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUob3BlcmF0aW9uLmluc2VydEluZGV4LCB0aGlzLnNlc3Npb24uc2Vzc2lvbklkKTtcbiAgICAgICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldFJlc3RvcmVUYWJsZUNvbW1hbmQob3BlcmF0aW9uKSk7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgSW5zZXJ0VGFibGVNb2RlbCkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmluc2VydFRhYmxlQnlEb2N1bWVudEluZGV4KG9wZXJhdGlvbik7XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uIGluc3RhbmNlb2YgUmVtb3ZlTnVtYmVyaW5nc01vZGVsKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlTnVtYmVyaW5ncyhvcGVyYXRpb24uc3RhcnRJbmRleCwgb3BlcmF0aW9uLmVuZEluZGV4KTtcbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gaW5zdGFuY2VvZiBSZXBsYWNlTW9kZWwpIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5yZXBsYWNlKG9wZXJhdGlvbik7XG4gICAgICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFNhdmVDb21tYW5kc0hlbHBlci5nZXRSZXBsYWNlQ29tbWFuZChvcGVyYXRpb24sIHRoaXMudGFyZ2V0cykpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7XG4gICAgfVxuXG4gICAgc2F2ZVJlbW92ZVRvSGlzdG9yeShyYW5nZTogUmFuZ2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVzdG9yZU1vZGVsID0gdGhpcy5jcmVhdGVSZXN0b3JlRnJvbVNsaWNlKHJhbmdlLnN0YXJ0LnJvdywgcmFuZ2Uuc3RhcnQuY29sdW1uLCByYW5nZS5lbmQucm93LCByYW5nZS5lbmQuY29sdW1uKTtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSByZXN0b3JlTW9kZWwuZW5kSW5kZXg7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoRGVsZXRlKHJlc3RvcmVNb2RlbCk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldERlbGV0ZUNvbW1hbmQocmVzdG9yZU1vZGVsLnN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBzYXZlSW5zZXJ0VGV4dFRvSGlzdG9yeShwYXJhZ3JhcGg6IG51bWJlciwgaW5kZXhJblBhcmFncmFwaDogbnVtYmVyLCB0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleCh0aGlzLnNlc3Npb24ud3JhcFBhcmFncmFwaEluZGV4LCBwYXJhZ3JhcGgsIGluZGV4SW5QYXJhZ3JhcGgpO1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEluc2VydFRleHQoaW5kZXgsIHRleHQpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFNhdmVDb21tYW5kc0hlbHBlci5nZXRJbnNlcnRUZXh0Q29tbWFuZCh0ZXh0LCBpbmRleCwgdGhpcy50YXJnZXRzKSk7XG4gICAgfVxuXG4gICAgc2F2ZUluc2VydFN0eWxlZFRleHRUb0hpc3RvcnkocGFyYWdyYXBoOiBudW1iZXIsIGluZGV4SW5QYXJhZ3JhcGg6IG51bWJlciwgdGV4dDogc3RyaW5nLCBzdHlsZTogVGV4dFN0eWxlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleCh0aGlzLnNlc3Npb24ud3JhcFBhcmFncmFwaEluZGV4LCBwYXJhZ3JhcGgsIGluZGV4SW5QYXJhZ3JhcGgpO1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEluc2VydFN0eWxlZFRleHQoaW5kZXgsIHRleHQsIHN0eWxlKTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0U3R5bGVkVGV4dENvbW1hbmQodGV4dCwgaW5kZXgsIHN0eWxlLCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBzYXZlSW5zZXJ0RWxlbWVudFRvSGlzdG9yeShtb2RlbDogSW5zZXJ0RWxlbWVudE1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoSW5zZXJ0RWxlbWVudChtb2RlbCk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydEVsZW1lbnRDb21tYW5kKG1vZGVsLCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBzYXZlSW5zZXJ0QnJlYWtUb0hpc3RvcnkobW9kZWw6IEluc2VydEJyZWFrTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgbW9kZWwuaXNPbk5ld1BhcmFncmFwaCA9XG4gICAgICAgICAgICBtb2RlbC5icmVha1R5cGUgPT09IEJyZWFrVHlwZXMuUGFnZSAmJlxuICAgICAgICAgICAgQnJlYWtIZWxwZXIuZ2V0QnJlYWtUeXBlKHRoaXMuc2Vzc2lvbi5tb2RlbCwgQ1VTVE9NX0VMRU1FTlRfTUFSS0VSLCBtb2RlbC5pbnNlcnRJbmRleCAtIDEpICE9PSBCcmVha1R5cGVzLlBhZ2U7XG4gICAgICAgIGNvbnN0IGVuZEluZGV4ID0gbW9kZWwuaXNPbk5ld1BhcmFncmFwaCA/IG1vZGVsLmluc2VydEluZGV4ICsgTkVXX0xJTkVfTUFSS1VQLmxlbmd0aCArIDEgOiBtb2RlbC5pbnNlcnRJbmRleCArIDE7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoSW5zZXJ0QnJlYWsobW9kZWwsIGVuZEluZGV4KTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0QnJlYWtDb21tYW5kKG1vZGVsLCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBzYXZlSW5zZXJ0VGFiVG9IaXN0b3J5KG1vZGVsOiBJbnNlcnRUYWJNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEluc2VydFRhYihtb2RlbCk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFRhYkNvbW1hbmQobW9kZWwsIHRoaXMudGFyZ2V0cykpO1xuICAgIH1cblxuICAgIHNhdmVJbnNlcnRJbWFnZVRvSGlzdG9yeShtb2RlbDogSW5zZXJ0SW1hZ2VNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEluc2VydEltYWdlKG1vZGVsKTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0SW1hZ2VDb21tYW5kKG1vZGVsLCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBzYXZlSW5zZXJ0TGlua1RvSGlzdG9yeShtb2RlbDogSW5zZXJ0TGlua01vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoSW5zZXJ0TGluayhtb2RlbCk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydExpbmtPcGVyYXRpb24obW9kZWwsIHRoaXMudGFyZ2V0cykpO1xuICAgIH1cblxuICAgIHNhdmVJbnNlcnRUYWJsZVRvSGlzdG9yeShtb2RlbDogSW5zZXJ0VGFibGVNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaEluc2VydFRhYmxlKG1vZGVsKTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0SW5zZXJ0VGFibGVDb21tYW5kKG1vZGVsLCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBzYXZlQXBwbHlUZXh0U3R5bGVUb0hpc3Rvcnkoc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyLCB0ZXh0U3R5bGU6IFRleHRTdHlsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHMgPSBGb3JtYXRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC5mb3JtYXRzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoQXBwbHlUZXh0U3R5bGUoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRleHRTdHlsZSwgZm9ybWF0cyk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldEFwcGx5VGV4dFN0eWxlQ29tbWFuZChzdGFydEluZGV4LCBlbmRJbmRleCwgdGV4dFN0eWxlLCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBzYXZlQXBwbHlQYXJhZ3JhcGhTdHlsZVRvSGlzdG9yeShzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIsIHBhcmFncmFwaFN0eWxlOiBQYXJhZ3JhcGhTdHlsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaHMgPSBJbmRleGVkRWxlbWVudEhlbHBlci5zbGljZVNlY3Rpb24odGhpcy5zZXNzaW9uLm1vZGVsLnBhcmFncmFwaHMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoc0RlZXBDb3B5ID0gcGFyYWdyYXBocy5tYXAoXG4gICAgICAgICAgICB4ID0+IG5ldyBQYXJhZ3JhcGhNb2RlbCh7IGluc2VydEluZGV4OiB4Lmluc2VydEluZGV4LCBwYXJhZ3JhcGhTdHlsZTogbmV3IFBhcmFncmFwaFN0eWxlTW9kZWwoeyAuLi54LnBhcmFncmFwaFN0eWxlIH0pIH0pXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoQXBwbHlQYXJhZ3JhcGhTdHlsZShzdGFydEluZGV4LCBlbmRJbmRleCwgcGFyYWdyYXBoU3R5bGUsIHBhcmFncmFwaHNEZWVwQ29weSk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoXG4gICAgICAgICAgICBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0QXBwbHlQYXJhZ3JhcGhTdHlsZUNvbW1hbmQoc3RhcnRJbmRleCwgZW5kSW5kZXgsIHBhcmFncmFwaFN0eWxlLCB0aGlzLnRhcmdldHMpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgc2F2ZUFkZE51bWJlcmluZ1RvSGlzdG9yeSh0ZW1wbGF0ZUxldmVsczogTnVtYmVyaW5nTGV2ZWxNb2RlbFtdLCBzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBocyA9IEluZGV4ZWRFbGVtZW50SGVscGVyLnNsaWNlU2VjdGlvbih0aGlzLnNlc3Npb24ubW9kZWwucGFyYWdyYXBocywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhzRGVlcENvcHkgPSBwYXJhZ3JhcGhzLm1hcChcbiAgICAgICAgICAgIHggPT4gbmV3IFBhcmFncmFwaE1vZGVsKHsgaW5zZXJ0SW5kZXg6IHguaW5zZXJ0SW5kZXgsIHBhcmFncmFwaFN0eWxlOiBuZXcgUGFyYWdyYXBoU3R5bGVNb2RlbCh7IC4uLngucGFyYWdyYXBoU3R5bGUgfSkgfSlcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcmVtb3ZlZE51bWJlcmluZ0lkcyA9IFsuLi5uZXcgU2V0KHBhcmFncmFwaHMubWFwKHggPT4geC5wYXJhZ3JhcGhTdHlsZS5udW1iZXJpbmdJZCkpXTtcbiAgICAgICAgY29uc3QgbnVtYmVyaW5ncyA9IHRoaXMuc2Vzc2lvbi5wcm9wZXJ0aWVzLm51bWJlcmluZ3MuZmlsdGVyKHggPT4gcmVtb3ZlZE51bWJlcmluZ0lkcy5pbmNsdWRlcyh4Lm51bWJlcmluZ0lkKSk7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoQWRkTnVtYmVyaW5nKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0ZW1wbGF0ZUxldmVscywgcGFyYWdyYXBoc0RlZXBDb3B5LCBudW1iZXJpbmdzKTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0QWRkTnVtYmVyaW5nQ29tbWFuZChzdGFydEluZGV4LCBlbmRJbmRleCwgdGVtcGxhdGVMZXZlbHMsIHRoaXMudGFyZ2V0cykpO1xuICAgIH1cblxuICAgIHNhdmVSZW1vdmVOdW1iZXJpbmdUb0hpc3Rvcnkoc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaHMgPSBJbmRleGVkRWxlbWVudEhlbHBlci5zbGljZVNlY3Rpb24odGhpcy5zZXNzaW9uLm1vZGVsLnBhcmFncmFwaHMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoc0RlZXBDb3B5ID0gcGFyYWdyYXBocy5tYXAoXG4gICAgICAgICAgICB4ID0+IG5ldyBQYXJhZ3JhcGhNb2RlbCh7IGluc2VydEluZGV4OiB4Lmluc2VydEluZGV4LCBwYXJhZ3JhcGhTdHlsZTogbmV3IFBhcmFncmFwaFN0eWxlTW9kZWwoeyAuLi54LnBhcmFncmFwaFN0eWxlIH0pIH0pXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJlbW92ZWROdW1iZXJpbmdJZHMgPSBbLi4ubmV3IFNldChwYXJhZ3JhcGhzLm1hcCh4ID0+IHgucGFyYWdyYXBoU3R5bGUubnVtYmVyaW5nSWQpKV07XG4gICAgICAgIGNvbnN0IG51bWJlcmluZ3MgPSB0aGlzLnNlc3Npb24ucHJvcGVydGllcy5udW1iZXJpbmdzLmZpbHRlcih4ID0+IHJlbW92ZWROdW1iZXJpbmdJZHMuaW5jbHVkZXMoeC5udW1iZXJpbmdJZCkpO1xuICAgICAgICB0aGlzLmhpc3RvcnkucHVzaFJlbW92ZU51bWJlcmluZ3Moc3RhcnRJbmRleCwgZW5kSW5kZXgsIG51bWJlcmluZ3MsIHBhcmFncmFwaHNEZWVwQ29weSk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldFJlbW92ZU51bWJlcmluZ3NDb21tYW5kKHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0aGlzLnRhcmdldHMpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNhdmVBcHBseUltYWdlU3R5bGVUb0hpc3RvcnkoaW1hZ2U6IEltYWdlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJldmlvdXMgPSB0aGlzLnNlc3Npb24ubW9kZWwuaW1hZ2VzLmZpbmQoeCA9PiB4Lmluc2VydEluZGV4ID09PSBpbWFnZS5pbnNlcnRJbmRleCk7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoQXBwbHlJbWFnZVN0eWxlKHByZXZpb3VzLCBpbWFnZSk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoXG4gICAgICAgICAgICBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0QXBwbHlJbWFnZVN0eWxlQ29tbWFuZChpbWFnZS5oZWlnaHQsIGltYWdlLndpZHRoLCBpbWFnZS5pbnNlcnRJbmRleCwgdGhpcy50YXJnZXRzKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2F2ZVJlcGxhY2VUb0hpc3RvcnkocmFuZ2U6IFJhbmdlLCBtb2RlbDogUmVwbGFjZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlc3RvcmVNb2RlbCA9IHRoaXMuY3JlYXRlUmVzdG9yZUZyb21TbGljZShyYW5nZS5zdGFydC5yb3csIHJhbmdlLnN0YXJ0LmNvbHVtbiwgcmFuZ2UuZW5kLnJvdywgcmFuZ2UuZW5kLmNvbHVtbik7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoUmVwbGFjZShyZXN0b3JlTW9kZWwsIG1vZGVsKTtcbiAgICAgICAgdGhpcy5jb21tYW5kc1NlcnZpY2UuY3JlYXRlQ29tbWFuZChTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVwbGFjZUNvbW1hbmQobW9kZWwsIHRoaXMudGFyZ2V0cykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlUmVzdG9yZUZyb21TbGljZShwYXJhZ3JhcGhTdGFydDogbnVtYmVyLCBpbmRleEluU3RhcnQ6IG51bWJlciwgcGFyYWdyYXBoRW5kOiBudW1iZXIsIGluZGV4SW5FbmQ6IG51bWJlcik6IFJlc3RvcmVNb2RlbCB7XG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleCh0aGlzLnNlc3Npb24ud3JhcFBhcmFncmFwaEluZGV4LCBwYXJhZ3JhcGhTdGFydCwgaW5kZXhJblN0YXJ0KTtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSBDb250ZW50SGVscGVyLnBhcmFncmFwaFRvRG9jdW1lbnRJbmRleCh0aGlzLnNlc3Npb24ud3JhcFBhcmFncmFwaEluZGV4LCBwYXJhZ3JhcGhFbmQsIGluZGV4SW5FbmQpIC0gMTtcbiAgICAgICAgY29uc3QgdGV4dCA9IHRoaXMuc2Vzc2lvbi5tb2RlbC5jb250ZW50LnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4ICsgMSk7XG4gICAgICAgIGNvbnN0IGZvcm1hdHMgPSBGb3JtYXRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC5mb3JtYXRzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaHMgPSBJbmRleGVkRWxlbWVudEhlbHBlci5zbGljZVNlY3Rpb24odGhpcy5zZXNzaW9uLm1vZGVsLnBhcmFncmFwaHMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KS5tYXAoXG4gICAgICAgICAgICB4ID0+IG5ldyBQYXJhZ3JhcGhNb2RlbCh4KVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBpbWFnZXMgPSBJbmRleGVkRWxlbWVudEhlbHBlci5zbGljZVNlY3Rpb24odGhpcy5zZXNzaW9uLm1vZGVsLmltYWdlcywgc3RhcnRJbmRleCwgZW5kSW5kZXgpLm1hcCh4ID0+IG5ldyBJbWFnZU1vZGVsKHgpKTtcbiAgICAgICAgY29uc3QgdGFibGVzID0gSW5kZXhlZEVsZW1lbnRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC50YWJsZXMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KS5tYXAoeCA9PiBuZXcgVGFibGVNb2RlbCh4KSk7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gSW5kZXhlZEVsZW1lbnRIZWxwZXIuc2xpY2VTZWN0aW9uKHRoaXMuc2Vzc2lvbi5tb2RlbC5lbGVtZW50cywgc3RhcnRJbmRleCwgZW5kSW5kZXgpLm1hcCh4ID0+IG5ldyBFbGVtZW50TW9kZWwoeCkpO1xuICAgICAgICBjb25zdCBicmVha3MgPSBJbmRleGVkRWxlbWVudEhlbHBlci5zbGljZVNlY3Rpb24odGhpcy5zZXNzaW9uLm1vZGVsLmJyZWFrcywgc3RhcnRJbmRleCwgZW5kSW5kZXgpLm1hcCh4ID0+IG5ldyBCcmVha01vZGVsKHgpKTtcbiAgICAgICAgY29uc3QgdGFicyA9IEluZGV4ZWRFbGVtZW50SGVscGVyLnNsaWNlU2VjdGlvbih0aGlzLnNlc3Npb24ubW9kZWwudGFicywgc3RhcnRJbmRleCwgZW5kSW5kZXgpLm1hcCh4ID0+IG5ldyBUYWJNb2RlbCh4KSk7XG4gICAgICAgIHJldHVybiBuZXcgUmVzdG9yZU1vZGVsKHsgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHRleHQsIGZvcm1hdHMsIHBhcmFncmFwaHMsIGltYWdlcywgdGFibGVzLCBlbGVtZW50cywgYnJlYWtzLCB0YWJzIH0pO1xuICAgIH1cblxuICAgIGNyZWF0ZUN1c3RvbUVsZW1lbnQoZGF0YTogRWxlbWVudERhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICBjb25zdCBpbnNlcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoVG9Eb2N1bWVudEluZGV4KFxuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLndyYXBQYXJhZ3JhcGhJbmRleCxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LnJvdyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uLnJhbmdlLnN0YXJ0LmNvbHVtblxuICAgICAgICApO1xuICAgICAgICBjb25zdCBpbnNlcnRFbGVtZW50ID0gbmV3IEluc2VydEVsZW1lbnRNb2RlbCh7IGVsZW1lbnQ6IG5ldyBFbGVtZW50TW9kZWwoeyAuLi5kYXRhLCBpbnNlcnRJbmRleCB9KSB9KTtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VCeShuZXcgUmVwbGFjZU1vZGVsKHsgaW5zZXJ0RWxlbWVudCB9KSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNhdmVJbnNlcnRFbGVtZW50VG9IaXN0b3J5KGluc2VydEVsZW1lbnQpO1xuICAgICAgICBjb25zdCBlbmRQb2ludCA9IHRoaXMuc2Vzc2lvbi5pbnNlcnRFbGVtZW50KHRoaXMuc2VsZWN0aW9uLmN1cnNvciwgZGF0YSk7XG4gICAgICAgIHRoaXMub25Eb2N1bWVudENoYW5nZShuZXcgUmFuZ2UodGhpcy5zZWxlY3Rpb24uY3Vyc29yLCBlbmRQb2ludCkpO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlU2VsZWN0ZWQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbi5pc0VtcHR5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNhdmVSZW1vdmVUb0hpc3RvcnkodGhpcy5zZWxlY3Rpb24ucmFuZ2UpO1xuICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlKHRoaXMuc2VsZWN0aW9uLnJhbmdlKTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIG9uSW5wdXQoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRleHQgPSB0aGlzLnRleHRJbnB1dC5nZXRJbnNlcnRUZXh0KCk7XG4gICAgICAgIGlmICghdGV4dCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNFbXB0eU51bWJlcmluZ1BhcmFncmFwaCA9IHRoaXMuaXNFbXB0eU51bWJlcmluZ1BhcmFncmFwaCh0aGlzLnNlbGVjdGlvbi5jdXJzb3Iucm93KTtcbiAgICAgICAgaWYgKHRleHQgPT09IE5FV19MSU5FX01BUktVUCAmJiB0aGlzLnNlbGVjdGlvbi5pc0VtcHR5ICYmIGlzRW1wdHlOdW1iZXJpbmdQYXJhZ3JhcGgpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlTnVtYmVyaW5nc0Zyb21QYXJhZ3JhcGhzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmluc2VydCh0ZXh0KTtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQ3Vyc29ySW50b01haW5WaWV3KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkN1dChldmVudDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0U2VsZWN0ZWRUZXh0KCk7XG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5zZXRDbGlwYm9hcmREYXRhKGRhdGEpO1xuICAgICAgICB0aGlzLmNsaXBib2FyZC5jb3B5KGRhdGEpO1xuICAgICAgICB0aGlzLmN1dCgpO1xuICAgICAgICB0aGlzLnNjcm9sbEN1cnNvckludG9NYWluVmlldygpO1xuICAgIH1cblxuICAgIG9uQ29weShldmVudDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0U2VsZWN0ZWRUZXh0KCk7XG4gICAgICAgIGlmICghZGF0YSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5zZXRDbGlwYm9hcmREYXRhKGRhdGEpO1xuICAgICAgICB0aGlzLmNsaXBib2FyZC5jb3B5KGRhdGEpO1xuICAgIH1cblxuICAgIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLnRleHRJbnB1dC5nZXRDbGlwYm9hcmREYXRhKGV2ZW50KTtcbiAgICAgICAgdGhpcy5wYXN0ZURhdGEoZGF0YSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0UmVzaXplTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnJlcmVuZGVyUmVzaXplKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc3Ryb3lSZXNpemVMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMucmVyZW5kZXJSZXNpemUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVyZW5kZXJNYXJrZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIubG9vcC5zY2hlZHVsZSh7IG1hcmtlcjogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlcmVuZGVyUmVzaXplID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLm1haW5SZW5kZXJlci5vblJlc2l6ZSh0cnVlKTtcbiAgICB9O1xuXG4gICAgb25CbHVyKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMudGV4dElucHV0LmlzRm9jdXNlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy50ZXh0SW5wdXQuaXNGb2N1c2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuaGlkZUN1cnNvcigpO1xuICAgIH1cblxuICAgIG9uRm9jdXMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnRleHRJbnB1dC5pc0ZvY3VzZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmx1ckN1c3RvbUNvbXBvbmVudCgpO1xuICAgICAgICB0aGlzLnRleHRJbnB1dC5pc0ZvY3VzZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnJlbmRlcmVyLnNob3dDdXJzb3IoKTtcbiAgICB9XG5cbiAgICBvbk1vdXNlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3VzdG9tRWxlbWVudCA9IHRoaXMuc2V0Q3VycmVudFNlc3Npb24oZXZlbnQuY2xpZW50WSwgZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgaWYgKGN1c3RvbUVsZW1lbnQgJiYgY3VzdG9tRWxlbWVudC50YWdOYW1lICE9PSB0aGlzLnRhYmxlQ2VsbFRhZ05hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNDdXN0b21Db21wb25lbnQoY3VzdG9tRWxlbWVudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJsdXJDdXN0b21Db21wb25lbnQoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZW1pdCgnZm9jdXNFZGl0b3InKTtcbiAgICB9XG5cbiAgICBvbkxlZnRDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjdXN0b21FbGVtZW50ID0gdGhpcy5zZXRDdXJyZW50U2Vzc2lvbihldmVudC5jbGllbnRZLCBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpO1xuICAgICAgICB0aGlzLmVtaXQoJ2ZvY3VzRWRpdG9yJyk7XG4gICAgICAgIGlmIChjdXN0b21FbGVtZW50ICYmIGN1c3RvbUVsZW1lbnQudGFnTmFtZSAhPT0gdGhpcy50YWJsZUNlbGxUYWdOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzQ3VzdG9tQ29tcG9uZW50KGN1c3RvbUVsZW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ibHVyQ3VzdG9tQ29tcG9uZW50KCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnRleHRJbnB1dC5pc0ZvY3VzZWQpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dElucHV0LmlucHV0LmZvY3VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMucmVuZGVyZXIuc2NyZWVuVG9UZXh0Q29vcmRpbmF0ZXMoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XG4gICAgICAgIGlmIChldmVudC5zaGlmdEtleSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ubW92ZVNlbGVjdGlvbihwb3NpdGlvbik7XG4gICAgICAgIH0gZWxzZSBpZiAoZXZlbnQuY3RybEtleSkge1xuICAgICAgICAgICAgY29uc3QgbGlua01vZGVsID0gdGhpcy5zZXNzaW9uLmdldExpbmtNb2RlbChwb3NpdGlvbik7XG4gICAgICAgICAgICBpZiAobGlua01vZGVsKSB7XG4gICAgICAgICAgICAgICAgd2luZG93Lm9wZW4obGlua01vZGVsLmxpbmspO1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IocG9zaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm1vdXNlSGFuZGxlci5zdGFydE1vdXNlUHJlc3ModGhpcyk7XG4gICAgfVxuXG4gICAgb25Eb3VibGVDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLnNlc3Npb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2V0U3R5bGVzJywgdGhpcy5zZXRTdHlsZXMpO1xuICAgICAgICBsZXQgaXNTdGFydEVkaXRFZGdlID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGN1c3RvbUVsZW1lbnQgPSB0aGlzLmdldEN1c3RvbUVsZW1lbnQoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgaWYgKGN1c3RvbUVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRTZXNzaW9uSWQgPSArY3VzdG9tRWxlbWVudC5hdHRyaWJ1dGVzLmdldE5hbWVkSXRlbSgnZGF0YS1zZXNzaW9uLWlkJykudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnJlZ3VsYXRvclNlcnZpY2Uuc2V0Q3VzdG9tU2Vzc2lvbkFzQ3VycmVudChlbGVtZW50U2Vzc2lvbklkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGVkZ2VEYXRhID0gdGhpcy5nZXRDbGlja2VkRWRnZURhdGEoZXZlbnQuY2xpZW50WSk7XG4gICAgICAgICAgICBpZiAoZWRnZURhdGEpIHtcbiAgICAgICAgICAgICAgICBpc1N0YXJ0RWRpdEVkZ2UgPSAhdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLmVkZ2VFZGl0aW5nUGFnZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZ3VsYXRvclNlcnZpY2Uuc2V0RWRnZVNlc3Npb25Bc0N1cnJlbnQoZWRnZURhdGEuZWRnZS5zZXNzaW9uSWQsIGVkZ2VEYXRhLmNsaWNrZWRQYWdlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLnNldE1haW5TZXNzaW9uQXNDdXJyZW50KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoJ3NldFN0eWxlcycsIHRoaXMuc2V0U3R5bGVzKTtcbiAgICAgICAgaWYgKGN1c3RvbUVsZW1lbnQgJiYgY3VzdG9tRWxlbWVudC50YWdOYW1lICE9PSB0aGlzLnRhYmxlQ2VsbFRhZ05hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNDdXN0b21Db21wb25lbnQoY3VzdG9tRWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJsdXJDdXN0b21Db21wb25lbnQoKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnJlbmRlcmVyLnNjcmVlblRvVGV4dENvb3JkaW5hdGVzKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuICAgICAgICBpZiAoaXNTdGFydEVkaXRFZGdlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZUN1cnNvcihwb3NpdGlvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuc2Vzc2lvbi5nZXRXb3JkUmFuZ2UocG9zaXRpb24ucm93LCBwb3NpdGlvbi5jb2x1bW4pO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VTZWxlY3Rpb24ocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIG9uVHJpcGxlQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY3VzdG9tRWxlbWVudCA9IHRoaXMuc2V0Q3VycmVudFNlc3Npb24oZXZlbnQuY2xpZW50WSwgZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgaWYgKGN1c3RvbUVsZW1lbnQgJiYgY3VzdG9tRWxlbWVudC50YWdOYW1lICE9PSB0aGlzLnRhYmxlQ2VsbFRhZ05hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNDdXN0b21Db21wb25lbnQoY3VzdG9tRWxlbWVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJsdXJDdXN0b21Db21wb25lbnQoKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnJlbmRlcmVyLnNjcmVlblRvVGV4dENvb3JkaW5hdGVzKGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xuICAgICAgICBjb25zdCBzdGFydCA9IG5ldyBQb2ludChwb3NpdGlvbi5yb3csIDApO1xuICAgICAgICBjb25zdCBlbmQgPSBuZXcgUG9pbnQocG9zaXRpb24ucm93LCB0aGlzLnNlc3Npb24uZG9jdW1lbnQubGluZXNbcG9zaXRpb24ucm93XS5sZW5ndGgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZVNlbGVjdGlvbihzdGFydCwgZW5kKTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgIH1cblxuICAgIG9uUXVhZENsaWNrKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1c3RvbUVsZW1lbnQgPSB0aGlzLnNldEN1cnJlbnRTZXNzaW9uKGV2ZW50LmNsaWVudFksIGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCk7XG4gICAgICAgIGlmIChjdXN0b21FbGVtZW50ICYmIGN1c3RvbUVsZW1lbnQudGFnTmFtZSAhPT0gdGhpcy50YWJsZUNlbGxUYWdOYW1lKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzQ3VzdG9tQ29tcG9uZW50KGN1c3RvbUVsZW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ibHVyQ3VzdG9tQ29tcG9uZW50KCk7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uLnNlbGVjdEFsbCh0aGlzLnNlc3Npb24ubW9kZWwpO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgb25Nb3VzZVdoZWVsKGV2ZW50OiBXaGVlbEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudC5jdHJsS2V5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmYWN0b3IgPSAwLjM1O1xuICAgICAgICBjb25zdCBzY3JvbGxTcGVlZCA9IDQ7XG4gICAgICAgIGNvbnN0IGRlbHRhWSA9IGV2ZW50LmRlbHRhWSAqIGZhY3RvciAqIHNjcm9sbFNwZWVkO1xuICAgICAgICB0aGlzLm1haW5SZW5kZXJlci5zY3JvbGxCeShkZWx0YVkpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBzZXRDdXJyZW50U2Vzc2lvbihjbGlja1Bvc2l0aW9uWTogbnVtYmVyLCBlbGVtZW50OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdzZXRTdHlsZXMnLCB0aGlzLnNldFN0eWxlcyk7XG4gICAgICAgIGNvbnN0IGN1c3RvbUVsZW1lbnQgPSB0aGlzLmdldEN1c3RvbUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIGlmIChjdXN0b21FbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50U2Vzc2lvbklkID0gK2N1c3RvbUVsZW1lbnQuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oJ2RhdGEtc2Vzc2lvbi1pZCcpLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLnNldEN1c3RvbVNlc3Npb25Bc0N1cnJlbnQoZWxlbWVudFNlc3Npb25JZCk7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcignc2V0U3R5bGVzJywgdGhpcy5zZXRTdHlsZXMpO1xuICAgICAgICAgICAgcmV0dXJuIGN1c3RvbUVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlZGdlRGF0YSA9IHRoaXMuZ2V0Q2xpY2tlZEVkZ2VEYXRhKGNsaWNrUG9zaXRpb25ZKTtcbiAgICAgICAgaWYgKGVkZ2VEYXRhICYmIHRoaXMucmVndWxhdG9yU2VydmljZS5lZGdlRWRpdGluZ1BhZ2UpIHtcbiAgICAgICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRFZGdlU2Vzc2lvbkFzQ3VycmVudChlZGdlRGF0YS5lZGdlLnNlc3Npb25JZCwgZWRnZURhdGEuY2xpY2tlZFBhZ2UpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLnNldE1haW5TZXNzaW9uQXNDdXJyZW50KCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcignc2V0U3R5bGVzJywgdGhpcy5zZXRTdHlsZXMpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBnZXRDdXN0b21FbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnQgfCBudWxsIHtcbiAgICAgICAgaWYgKGVsZW1lbnQudGFnTmFtZSA9PT0gdGhpcy5wYXJlbnRUYWdOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmN1c3RvbUVsZW1lbnRUYWdOYW1lcy5pbmNsdWRlcyhlbGVtZW50LnRhZ05hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldEN1c3RvbUVsZW1lbnQoZWxlbWVudC5wYXJlbnRFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldENsaWNrZWRFZGdlRGF0YShtb3VzZVBvc2l0aW9uOiBudW1iZXIpOiB7IGVkZ2U6IE5vZGVyRWRnZUNvbXBvbmVudDsgY2xpY2tlZFBhZ2U6IG51bWJlciB9IHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uWSA9IG1vdXNlUG9zaXRpb24gKyB0aGlzLm1haW5TZXNzaW9uLnNjcm9sbFRvcCAtIHRoaXMubWFpblJlbmRlcmVyLmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG4gICAgICAgIGNvbnN0IGNsaWNrZWRQYWdlID0gUG9zaXRpb25IZWxwZXIucGl4ZWxUb1BhZ2UocG9zaXRpb25ZLCB0aGlzLm1haW5TZXNzaW9uKTtcbiAgICAgICAgY29uc3QgcGFnZVdyYXAgPSB0aGlzLm1haW5TZXNzaW9uLnBhZ2VzV3JhcDtcbiAgICAgICAgY29uc3QgcGFnZVZlcnRpY2FsRGF0YSA9IFBhZ2VIZWxwZXIuZ2V0VmVydGljYWxEYXRhKGNsaWNrZWRQYWdlLCBwYWdlV3JhcC5wYWdlc1ZlcnRpY2FsRGF0YSk7XG4gICAgICAgIGNvbnN0IHBhZ2VTdGFydFBvc2l0aW9uID0gKHBhZ2VXcmFwLnBhZ2VzU3BhY2UgKyBwYWdlV3JhcC5wYWdlSGVpZ2h0KSAqIChjbGlja2VkUGFnZSAtIDEpICsgcGFnZVdyYXAucGFnZXNTcGFjZTtcbiAgICAgICAgY29uc3QgcGFnZVRvcCA9IHBhZ2VTdGFydFBvc2l0aW9uICsgcGFnZVZlcnRpY2FsRGF0YS5tYXJnaW5Ub3A7XG4gICAgICAgIGNvbnN0IHBhZ2VCb3R0b20gPSBwYWdlU3RhcnRQb3NpdGlvbiArIHBhZ2VXcmFwLnBhZ2VIZWlnaHQgLSBwYWdlVmVydGljYWxEYXRhLm1hcmdpbkJvdHRvbTtcbiAgICAgICAgbGV0IGNvbXBvbmVudDogQ29tcG9uZW50UmVmPE5vZGVyRWRnZUNvbXBvbmVudD47XG4gICAgICAgIGlmIChwYWdlVG9wID49IHBvc2l0aW9uWSkge1xuICAgICAgICAgICAgY29tcG9uZW50ID0gdGhpcy5tYWluU2Vzc2lvbi5jdXN0b21Db21wb25lbnRzLmVkZ2VzLmdldENvbXBvbmVudEJ5UGFnZShjbGlja2VkUGFnZSwgRWRnZVR5cGUuSGVhZGVyKTtcbiAgICAgICAgfSBlbHNlIGlmIChwYWdlQm90dG9tIDw9IHBvc2l0aW9uWSkge1xuICAgICAgICAgICAgY29tcG9uZW50ID0gdGhpcy5tYWluU2Vzc2lvbi5jdXN0b21Db21wb25lbnRzLmVkZ2VzLmdldENvbXBvbmVudEJ5UGFnZShjbGlja2VkUGFnZSwgRWRnZVR5cGUuRm9vdGVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb21wb25lbnQgPyB7IGVkZ2U6IGNvbXBvbmVudC5pbnN0YW5jZSwgY2xpY2tlZFBhZ2UgfSA6IG51bGw7XG4gICAgfVxuXG4gICAgc2V0U3R5bGVzID0gKHN0eWxlczogSVRvb2xiYXJTdHlsZXMpID0+IHtcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnN0eWxlcyA9IHN0eWxlcztcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgc3RyaW5nIG9mIHRleHQgY3VycmVudGx5IGhpZ2hsaWdodGVkLlxuICAgICAqL1xuICAgIGdldFNlbGVjdGVkVGV4dCgpOiBzdHJpbmcge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb24uaXNFbXB0eSkge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoUG9zaXRpb25Ub0RvY3VtZW50SW5kZXgodGhpcy5zZXNzaW9uLndyYXBQYXJhZ3JhcGhJbmRleCwgdGhpcy5zZWxlY3Rpb24ucmFuZ2Uuc3RhcnQpO1xuICAgICAgICBjb25zdCBlbmRJbmRleCA9IENvbnRlbnRIZWxwZXIucGFyYWdyYXBoUG9zaXRpb25Ub0RvY3VtZW50SW5kZXgodGhpcy5zZXNzaW9uLndyYXBQYXJhZ3JhcGhJbmRleCwgdGhpcy5zZWxlY3Rpb24ucmFuZ2UuZW5kKTtcbiAgICAgICAgbGV0IGVsZW1lbnRJbmRleGVzOiBudW1iZXJbXSA9IFtdO1xuICAgICAgICBDb250ZW50SGVscGVyLnNldEluZGV4ZXNFbGVtZW50c0luSW50ZXJ2YWwodGhpcy5zZXNzaW9uLm1vZGVsLmJyZWFrcywgZWxlbWVudEluZGV4ZXMsIHN0YXJ0SW5kZXgsIGVuZEluZGV4KTtcbiAgICAgICAgQ29udGVudEhlbHBlci5zZXRJbmRleGVzRWxlbWVudHNJbkludGVydmFsKHRoaXMuc2Vzc2lvbi5tb2RlbC50YWJsZXMsIGVsZW1lbnRJbmRleGVzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIENvbnRlbnRIZWxwZXIuc2V0SW5kZXhlc0VsZW1lbnRzSW5JbnRlcnZhbCh0aGlzLnNlc3Npb24ubW9kZWwuaW1hZ2VzLCBlbGVtZW50SW5kZXhlcywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICBDb250ZW50SGVscGVyLnNldEluZGV4ZXNFbGVtZW50c0luSW50ZXJ2YWwodGhpcy5zZXNzaW9uLm1vZGVsLmVsZW1lbnRzLCBlbGVtZW50SW5kZXhlcywgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICBDb250ZW50SGVscGVyLnNldEluZGV4ZXNFbGVtZW50c0luSW50ZXJ2YWwodGhpcy5zZXNzaW9uLm1vZGVsLnRhYnMsIGVsZW1lbnRJbmRleGVzLCBzdGFydEluZGV4LCBlbmRJbmRleCk7XG4gICAgICAgIGVsZW1lbnRJbmRleGVzLnNvcnQoKGEsIGIpID0+IGIgLSBhKTtcbiAgICAgICAgbGV0IHRleHRJbnRlcnZhbCA9IHRoaXMuc2Vzc2lvbi5kb2N1bWVudC5nZXRUZXh0UmFuZ2UodGhpcy5zZWxlY3Rpb24ucmFuZ2UpO1xuICAgICAgICBlbGVtZW50SW5kZXhlcy5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgICAgdGV4dEludGVydmFsID0gdGV4dEludGVydmFsLnNsaWNlKDAsIHgpICsgdGV4dEludGVydmFsLnNsaWNlKHggKyAxKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRleHRJbnRlcnZhbDtcbiAgICB9XG5cbiAgICBpbml0TWFpblNlc3Npb24oKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhZ2VXaWR0aCA9IHRoaXMuY3VzdG9tUGFnZVdpZHRoID8/IHRoaXMubW9kZWwucGFnZVdpZHRoO1xuICAgICAgICB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LnN0eWxlLm1heFdpZHRoID0gYCR7cGFnZVdpZHRofXB4YDtcbiAgICAgICAgY29uc3Qgc2NhbGluZ1JhdGlvID0gdGhpcy5jdXN0b21QYWdlV2lkdGggPyBTY2FsaW5nSGVscGVyLmdldFJhdGlvKHRoaXMuY3VzdG9tUGFnZVdpZHRoLCB0aGlzLm1vZGVsLnBhZ2VXaWR0aCkgOiAxO1xuICAgICAgICB0aGlzLnJlZ3VsYXRvclNlcnZpY2UuYWRkTWFpblNlc3Npb24odGhpcy5tb2RlbCwgcGFnZVdpZHRoLCBzY2FsaW5nUmF0aW8sIHRoaXMuY29udGFpbmVyKTtcbiAgICAgICAgdGhpcy5tYWluU2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2VTY3JvbGxUb3AnLCB0aGlzLm9uU2Nyb2xsVG9wQ2hhbmdlKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoJ3NldFN0eWxlcycsIHRoaXMuc2V0U3R5bGVzKTtcbiAgICAgICAgdGhpcy5tYWluUmVuZGVyZXIuc2Nyb2xsVG8oMCk7XG4gICAgfVxuXG4gICAgb25TZWxlY3Rpb25DaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5wcm9jZXNzU2VsZWN0aW9uU3R5bGVzKCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlU2VsZWN0aW9uKHRoaXMuc2VsZWN0aW9uLnJhbmdlKTtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uLmlzRW1wdHkpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnNldEhhc1NlbGVjdGlvbighdGhpcy5zZWxlY3Rpb24uaXNFbXB0eSk7XG4gICAgICAgIHRoaXMucmVyZW5kZXJNYXJrZXIoKTtcbiAgICB9XG5cbiAgICBvblNjcm9sbFRvcENoYW5nZSA9ICh2YWx1ZTogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMubWFpblJlbmRlcmVyLnNjcm9sbFRvKHZhbHVlKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBvbkRvY3VtZW50Q2hhbmdlID0gKHJhbmdlOiBSYW5nZSk6IHZvaWQgPT4ge1xuICAgICAgICBsZXQgbGFzdFJvdyA9IHJhbmdlLnN0YXJ0LnJvdyA9PT0gcmFuZ2UuZW5kLnJvdyA/IHJhbmdlLmVuZC5yb3cgOiBJbmZpbml0eTtcbiAgICAgICAgdGhpcy5yZW5kZXJlci51cGRhdGVMaW5lcyhyYW5nZS5zdGFydC5yb3csIGxhc3RSb3cpO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBjdXJzb3IgYmVjYXVzZSB0YWIgY2hhcmFjdGVycyBjYW4gaW5mbHVlbmNlIHRoZSBjdXJzb3IgcG9zaXRpb24uXG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7XG4gICAgfTtcblxuICAgIGRlc3Ryb3lNYWluU2Vzc2lvbkxpc3RlbmVycygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5tYWluU2Vzc2lvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2VTY3JvbGxUb3AnLCB0aGlzLm9uU2Nyb2xsVG9wQ2hhbmdlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGZvY3VzQ3VzdG9tQ29tcG9uZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gK2VsZW1lbnQuYXR0cmlidXRlcy5nZXROYW1lZEl0ZW0oJ2RhdGEtaW5zZXJ0LWluZGV4JykudmFsdWU7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9XG4gICAgICAgICAgICB0aGlzLnNlc3Npb24uY3VzdG9tQ29tcG9uZW50cy5pbWFnZXMuZmluZCh4ID0+IHguaW5zdGFuY2UuaW5zZXJ0SW5kZXggPT09IGluZGV4KSA/P1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uLmN1c3RvbUNvbXBvbmVudHMudGFibGVzLmZpbmQoeCA9PiB4Lmluc3RhbmNlLmluc2VydEluZGV4ID09PSBpbmRleCkgPz9cbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbi5jdXN0b21Db21wb25lbnRzLmN1c3RvbUVsZW1lbnRzLmZpbmQoeCA9PiB4Lmluc3RhbmNlLmluc2VydEluZGV4ID09PSBpbmRleCk7XG4gICAgICAgIGlmICghY29tcG9uZW50IHx8IGNvbXBvbmVudCA9PT0gdGhpcy5mb2N1c2VkQ29tcG9uZW50KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmZvY3VzZWRDb21wb25lbnQ/Lmluc3RhbmNlLmJsdXIoKTtcbiAgICAgICAgY29tcG9uZW50Lmluc3RhbmNlLmZvY3VzKCk7XG4gICAgICAgIHRoaXMuZm9jdXNlZENvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnNlc3Npb24uZG9jdW1lbnQuaW5kZXhUb1Bvc2l0aW9uKGluZGV4LCAwKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IocG9zaXRpb24pO1xuICAgICAgICB0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBibHVyQ3VzdG9tQ29tcG9uZW50KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5mb2N1c2VkQ29tcG9uZW50KSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzZWRDb21wb25lbnQuaW5zdGFuY2UuYmx1cigpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c2VkQ29tcG9uZW50ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNFbXB0eU51bWJlcmluZ1BhcmFncmFwaChwYXJhZ3JhcGhJbmRleDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRMaW5lID0gdGhpcy5zZXNzaW9uLmRvY3VtZW50LmdldExpbmUodGhpcy5zZXNzaW9uLmRvY3VtZW50LmxpbmVzLCBwYXJhZ3JhcGhJbmRleCk7XG4gICAgICAgIHJldHVybiBjdXJyZW50TGluZS5sZW5ndGggPT09IDAgJiYgdGhpcy5zZXNzaW9uLm1vZGVsLnBhcmFncmFwaHNbcGFyYWdyYXBoSW5kZXhdLnBhcmFncmFwaFN0eWxlLm51bWJlcmluZ0lkICE9PSBudWxsO1xuICAgIH1cblxuICAgIHNjcm9sbEN1cnNvckludG9NYWluVmlldyhvZmZzZXQ/OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuc2Vzc2lvbiAhPT0gdGhpcy5tYWluU2Vzc2lvbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWFpblJlbmRlcmVyLnNjcm9sbEN1cnNvckludG9WaWV3KG51bGwsIG9mZnNldCk7XG4gICAgfVxuXG4gICAgY2hhbmdlZFRhYmxlU2l6ZShpbnNlcnRJbmRleDogbnVtYmVyLCBzZXNzaW9uSWQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBzZXNzaW9uID0gdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLmdldFNlc3Npb24oc2Vzc2lvbklkKTtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleChzZXNzaW9uLndyYXBQYXJhZ3JhcGhJbmRleCwgaW5zZXJ0SW5kZXgpLnJvdztcbiAgICAgICAgc2Vzc2lvbi51cGRhdGVXcmFwRGF0YShwYXJhZ3JhcGgsIHBhcmFncmFwaCk7XG4gICAgICAgIHRoaXMudGV4dElucHV0LmlucHV0LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0VGFibGVSb3dzKGluc2VydEluZGV4OiBudW1iZXIsIHJvd3NDb3VudDogbnVtYmVyLCB0YXJnZXRJbmRleDogbnVtYmVyLCBpbmhlcml0SW5kZXg6IG51bWJlciwgc2Vzc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLnNldEN1c3RvbVNlc3Npb25Bc0N1cnJlbnQoc2Vzc2lvbklkKTtcbiAgICAgICAgY29uc3QgYmVmb3JlVGFibGUgPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHRoaXMuc2Vzc2lvbi53cmFwUGFyYWdyYXBoSW5kZXgsIGluc2VydEluZGV4KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IoYmVmb3JlVGFibGUpO1xuICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMuc2Vzc2lvbi5tb2RlbC50YWJsZXMuZmluZCh4ID0+IHguaW5zZXJ0SW5kZXggPT09IGluc2VydEluZGV4KTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hJbnNlcnRUYWJsZVJvd3MoaW5zZXJ0SW5kZXgsIHJvd3NDb3VudCwgdGFyZ2V0SW5kZXgsIGluaGVyaXRJbmRleCwgdGFibGUpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFxuICAgICAgICAgICAgU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFRhYmxlUm93c0NvbW1hbmQocm93c0NvdW50LCBpbmhlcml0SW5kZXgsIGluc2VydEluZGV4LCB0YXJnZXRJbmRleCwgdGhpcy50YXJnZXRzKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0VGFibGVSb3dzKGluc2VydEluZGV4LCByb3dzQ291bnQsIHRhcmdldEluZGV4LCBpbmhlcml0SW5kZXgpO1xuICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUoaW5zZXJ0SW5kZXgsIHNlc3Npb25JZCk7XG4gICAgfVxuXG4gICAgaW5zZXJ0VGFibGVDb2x1bW5zKGluc2VydEluZGV4OiBudW1iZXIsIGNvbHVtbnNDb3VudDogbnVtYmVyLCB0YXJnZXRJbmRleDogbnVtYmVyLCBpbmhlcml0SW5kZXg6IG51bWJlciwgc2Vzc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLnNldEN1c3RvbVNlc3Npb25Bc0N1cnJlbnQoc2Vzc2lvbklkKTtcbiAgICAgICAgY29uc3QgYmVmb3JlVGFibGUgPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHRoaXMuc2Vzc2lvbi53cmFwUGFyYWdyYXBoSW5kZXgsIGluc2VydEluZGV4KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IoYmVmb3JlVGFibGUpO1xuICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMuc2Vzc2lvbi5tb2RlbC50YWJsZXMuZmluZCh4ID0+IHguaW5zZXJ0SW5kZXggPT09IGluc2VydEluZGV4KTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hJbnNlcnRUYWJsZUNvbHVtbnMoaW5zZXJ0SW5kZXgsIGNvbHVtbnNDb3VudCwgdGFyZ2V0SW5kZXgsIGluaGVyaXRJbmRleCwgdGFibGUpO1xuICAgICAgICB0aGlzLmNvbW1hbmRzU2VydmljZS5jcmVhdGVDb21tYW5kKFxuICAgICAgICAgICAgU2F2ZUNvbW1hbmRzSGVscGVyLmdldEluc2VydFRhYmxlQ29sdW1uc0NvbW1hbmQoY29sdW1uc0NvdW50LCBpbmhlcml0SW5kZXgsIGluc2VydEluZGV4LCB0YXJnZXRJbmRleCwgdGhpcy50YXJnZXRzKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNlc3Npb24uaW5zZXJ0VGFibGVDb2x1bW5zKGluc2VydEluZGV4LCBjb2x1bW5zQ291bnQsIHRhcmdldEluZGV4LCBpbmhlcml0SW5kZXgpO1xuICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUoaW5zZXJ0SW5kZXgsIHNlc3Npb25JZCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlVGFibGVSb3dzKGluc2VydEluZGV4OiBudW1iZXIsIHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlciwgc2Vzc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLnNldEN1c3RvbVNlc3Npb25Bc0N1cnJlbnQoc2Vzc2lvbklkKTtcbiAgICAgICAgY29uc3QgYmVmb3JlVGFibGUgPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHRoaXMuc2Vzc2lvbi53cmFwUGFyYWdyYXBoSW5kZXgsIGluc2VydEluZGV4KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IoYmVmb3JlVGFibGUpO1xuICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMuc2Vzc2lvbi5tb2RlbC50YWJsZXMuZmluZCh4ID0+IHguaW5zZXJ0SW5kZXggPT09IGluc2VydEluZGV4KTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hSZW1vdmVUYWJsZVJvd3MoaW5zZXJ0SW5kZXgsIHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0YWJsZSk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoU2F2ZUNvbW1hbmRzSGVscGVyLmdldFJlbW92ZVRhYmxlUm93c0NvbW1hbmQoc3RhcnRJbmRleCwgZW5kSW5kZXgsIGluc2VydEluZGV4LCB0aGlzLnRhcmdldHMpKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZVRhYmxlUm93cyhpbnNlcnRJbmRleCwgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUoaW5zZXJ0SW5kZXgsIHNlc3Npb25JZCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlVGFibGVDb2x1bW5zKGluc2VydEluZGV4OiBudW1iZXIsIHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlciwgc2Vzc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLnNldEN1c3RvbVNlc3Npb25Bc0N1cnJlbnQoc2Vzc2lvbklkKTtcbiAgICAgICAgY29uc3QgYmVmb3JlVGFibGUgPSBDb250ZW50SGVscGVyLmRvY3VtZW50SW5kZXhUb1BhcmFncmFwaEluZGV4KHRoaXMuc2Vzc2lvbi53cmFwUGFyYWdyYXBoSW5kZXgsIGluc2VydEluZGV4KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb24ucGxhY2VDdXJzb3IoYmVmb3JlVGFibGUpO1xuICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMuc2Vzc2lvbi5tb2RlbC50YWJsZXMuZmluZCh4ID0+IHguaW5zZXJ0SW5kZXggPT09IGluc2VydEluZGV4KTtcbiAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2hSZW1vdmVUYWJsZUNvbHVtbnMoaW5zZXJ0SW5kZXgsIHN0YXJ0SW5kZXgsIGVuZEluZGV4LCB0YWJsZSk7XG4gICAgICAgIHRoaXMuY29tbWFuZHNTZXJ2aWNlLmNyZWF0ZUNvbW1hbmQoXG4gICAgICAgICAgICBTYXZlQ29tbWFuZHNIZWxwZXIuZ2V0UmVtb3ZlVGFibGVDb2x1bW5zQ29tbWFuZChzdGFydEluZGV4LCBlbmRJbmRleCwgaW5zZXJ0SW5kZXgsIHRoaXMudGFyZ2V0cylcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZVRhYmxlQ29sdW1ucyhpbnNlcnRJbmRleCwgc3RhcnRJbmRleCwgZW5kSW5kZXgpO1xuICAgICAgICB0aGlzLmNoYW5nZWRUYWJsZVNpemUoaW5zZXJ0SW5kZXgsIHNlc3Npb25JZCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlSW1hZ2UoaW5zZXJ0SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCByYW5nZSA9IHRoaXMuc2Vzc2lvbi5kb2N1bWVudC5pbmRleGVzVG9SYW5nZShpbnNlcnRJbmRleCwgaW5zZXJ0SW5kZXggKyAxKTtcbiAgICAgICAgdGhpcy5zYXZlUmVtb3ZlVG9IaXN0b3J5KHJhbmdlKTtcbiAgICAgICAgdGhpcy5zZXNzaW9uLnJlbW92ZShyYW5nZSk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIudXBkYXRlQ3Vyc29yKCk7XG4gICAgICAgIHRoaXMudGV4dElucHV0LmlucHV0LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgcmVzaXplVGFibGVDb2x1bW5zKHJlc2l6ZVRhYmxlQ29sdW1uczogUmVzaXplVGFibGVDb2x1bW5zTW9kZWwsIHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5zZXRDdXN0b21TZXNzaW9uQXNDdXJyZW50KHNlc3Npb25JZCk7XG4gICAgICAgIGNvbnN0IGJlZm9yZVRhYmxlID0gQ29udGVudEhlbHBlci5kb2N1bWVudEluZGV4VG9QYXJhZ3JhcGhJbmRleCh0aGlzLnNlc3Npb24ud3JhcFBhcmFncmFwaEluZGV4LCByZXNpemVUYWJsZUNvbHVtbnMuaW5zZXJ0SW5kZXgpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5wbGFjZUN1cnNvcihiZWZvcmVUYWJsZSk7XG4gICAgICAgIHRoaXMuaGlzdG9yeS5wdXNoUmVzaXplVGFibGVDb2x1bW5zKHJlc2l6ZVRhYmxlQ29sdW1ucyk7XG4gICAgICAgIHRoaXMuc2Vzc2lvbi5yZXNpemVUYWJsZUNvbHVtbnMocmVzaXplVGFibGVDb2x1bW5zKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VkVGFibGVTaXplKHJlc2l6ZVRhYmxlQ29sdW1ucy5pbnNlcnRJbmRleCwgc2Vzc2lvbklkKTtcbiAgICB9XG5cbiAgICBvbk1vdXNlUHJlc3NlZE1vdmUoeDogbnVtYmVyLCB5OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLnJlbmRlcmVyLnNjcmVlblRvVGV4dENvb3JkaW5hdGVzKHgsIHkpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbi5tb3ZlU2VsZWN0aW9uKHBvc2l0aW9uKTtcbiAgICAgICAgdGhpcy5vblNlbGVjdGlvbkNoYW5nZSgpO1xuICAgICAgICB0aGlzLnNjcm9sbEN1cnNvckludG9NYWluVmlldygpO1xuICAgIH1cblxuICAgIHNlYXJjaE9wdGlvblN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnNlYXJjaE9wdGlvbnMkLnN1YnNjcmliZShzZWFyY2hPcHRpb25zID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmluZChzZWFyY2hPcHRpb25zKTtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5zZWFyY2hJdGVyYXRpb24gPSB0aGlzLnVwZGF0ZUNvdW50ZXIoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVwbGFjZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnJlcGxhY2UkLnN1YnNjcmliZShyZXBsYWNlID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVwbGFjZShyZXBsYWNlLnNlYXJjaFZhbHVlLCByZXBsYWNlLnJlcGxhY2VWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2Uuc2VhcmNoSXRlcmF0aW9uID0gdGhpcy51cGRhdGVDb3VudGVyKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldFRleHRTdHlsZXNTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5zZXRUZXh0U3R5bGVzJC5zdWJzY3JpYmUodGV4dFN0eWxlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5VGV4dFN0eWxlcyh0ZXh0U3R5bGVzKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0UGFyYWdyYXBoU3R5bGVzU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2Uuc2V0UGFyYWdyYXBoU3R5bGVzJC5zdWJzY3JpYmUocGFyYWdyYXBoU3R5bGVzID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlQYXJhZ3JhcGhTdHlsZXMocGFyYWdyYXBoU3R5bGVzKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0TnVtYmVyaW5nVGVtcGxhdGVUeXBlU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2Uuc2V0TnVtYmVyaW5nVGVtcGxhdGVUeXBlJC5zdWJzY3JpYmUobnVtYmVyaW5nVGVtcGxhdGVUeXBlID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0TnVtYmVyaW5nVGVtcGxhdGUobnVtYmVyaW5nVGVtcGxhdGVUeXBlKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlTnVtYmVyaW5nc1N1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnJlbW92ZU51bWJlcmluZ3MkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZU51bWJlcmluZ3NGcm9tUGFyYWdyYXBocygpO1xuICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRJbWFnZVN0eWxlU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2Uuc2V0SW1hZ2VTdHlsZSQuc3Vic2NyaWJlKGltYWdlID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlJbWFnZVN0eWxlcyhpbWFnZSk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNoYW5nZUVsZW1lbnRTdHlsZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmNoYW5nZUVsZW1lbnRTdHlsZSQuc3Vic2NyaWJlKHggPT4gdGhpcy5hcHBseUVsZW1lbnRTdHlsZSh4KSk7XG4gICAgfVxuXG4gICAgY3JlYXRlQ3VzdG9tQ29tcG9uZW50U3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuY3JlYXRlQ3VzdG9tQ29tcG9uZW50JC5zdWJzY3JpYmUobW9kZWwgPT4ge1xuICAgICAgICAgICAgdGhpcy5jcmVhdGVDdXN0b21FbGVtZW50KG1vZGVsKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5zZXJ0QnJlYWtTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5pbnNlcnRCcmVhayQuc3Vic2NyaWJlKGJyZWFrVHlwZSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluc2VydEJyZWFrKGJyZWFrVHlwZSk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluc2VydEltYWdlU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuaW5zZXJ0SW1hZ2UkLnN1YnNjcmliZShpbWFnZURhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRJbWFnZShpbWFnZURhdGEpO1xuICAgICAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpbnNlcnRMaW5rU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuaW5zZXJ0TGluayQuc3Vic2NyaWJlKGxpbmtEYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0TGluayhsaW5rRGF0YSk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGVuZE1vdXNlUHJlc3NTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5lbmRNb3VzZVByZXNzJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb3VzZUhhbmRsZXIuZW5kTW91c2VQcmVzcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbGVhclNlbGVjdGlvblN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmNsZWFyU2VsZWN0aW9uJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb24uY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2hhbmdlZFRhYmxlU2l6ZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmNoYW5nZWRUYWJsZVNpemUkLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuY2hhbmdlZFRhYmxlU2l6ZShkYXRhLmluc2VydEluZGV4LCBkYXRhLnNlc3Npb25JZCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluc2VydFRhYmxlUm93c1N1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmluc2VydFRhYmxlUm93cyQuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRUYWJsZVJvd3MoZGF0YS5pbnNlcnRJbmRleCwgZGF0YS5yb3dzQ291bnQsIGRhdGEudGFyZ2V0SW5kZXgsIGRhdGEuaW5oZXJpdEluZGV4LCBkYXRhLnNlc3Npb25JZCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluc2VydFRhYmxlQ29sdW1uc1N1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLmluc2VydFRhYmxlQ29sdW1ucyQuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5pbnNlcnRUYWJsZUNvbHVtbnMoZGF0YS5pbnNlcnRJbmRleCwgZGF0YS5jb2x1bW5zQ291bnQsIGRhdGEudGFyZ2V0SW5kZXgsIGRhdGEuaW5oZXJpdEluZGV4LCBkYXRhLnNlc3Npb25JZCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbW92ZVRhYmxlUm93c1N1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnJlbW92ZVRhYmxlUm93cyQuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVUYWJsZVJvd3MoZGF0YS5pbnNlcnRJbmRleCwgZGF0YS5zdGFydEluZGV4LCBkYXRhLmVuZEluZGV4LCBkYXRhLnNlc3Npb25JZCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbW92ZVRhYmxlQ29sdW1uc1N1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnJlbW92ZVRhYmxlQ29sdW1ucyQuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVUYWJsZUNvbHVtbnMoZGF0YS5pbnNlcnRJbmRleCwgZGF0YS5zdGFydEluZGV4LCBkYXRhLmVuZEluZGV4LCBkYXRhLnNlc3Npb25JZCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbW92ZWRJbWFnZVN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnJlbW92ZUltYWdlJC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUltYWdlKGRhdGEuaW5zZXJ0SW5kZXgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXNpemVUYWJsZUNvbHVtbnNTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5yZXNpemVUYWJsZUNvbHVtbnMkLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVzaXplVGFibGVDb2x1bW5zKGRhdGEucmVzaXplVGFibGVDb2x1bW5zLCBkYXRhLnNlc3Npb25JZCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluc2VydFRhYmxlU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuaW5zZXJ0VGFibGUkLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgICAgIHRoaXMuaW5zZXJ0VGFibGUoZGF0YSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlbmRlcmVyVXBkYXRlZFN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnJlbmRlcmVyVXBkYXRlZCQuc3Vic2NyaWJlKHNlc3Npb25JZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBlZGdlVGFyZ2V0ID0gdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLmdldEVkZ2VUYXJnZXQoc2Vzc2lvbklkKTtcbiAgICAgICAgICAgIGlmIChlZGdlVGFyZ2V0ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5tYWluUmVuZGVyZXIuZWRnZXNMYXllci51cGRhdGVCeUxvY2F0aW9uKGVkZ2VUYXJnZXQuZWRnZURhdGEucGFnZVR5cGUgYXMgUGFnZVR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBlZGdlRWxlbWVudENvcHlVcGRhdGVkU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuZWRnZUVsZW1lbnRDb3B5VXBkYXRlZCQuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVndWxhdG9yU2VydmljZS5lZGdlRWRpdGluZ1BhZ2UgIT09IGRhdGEucGFnZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZWRnZVNlc3Npb25JZCA9ICtkYXRhLm5ld0VsZW1lbnRDb3B5LmF0dHJpYnV0ZXMuZ2V0TmFtZWRJdGVtKCdkYXRhLXNlc3Npb24taWQnKS52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGVkZ2VTZXNzaW9uID0gdGhpcy5yZWd1bGF0b3JTZXJ2aWNlLnNlc3Npb25zLmZpbmQoeCA9PiB4LnNlc3Npb25JZCA9PT0gZWRnZVNlc3Npb25JZCk7XG4gICAgICAgICAgICBlZGdlU2Vzc2lvbi5yZW5kZXJlci5jb250YWluZXIgPSBkYXRhLm5ld0VsZW1lbnRDb3B5LmZpcnN0Q2hpbGQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNoYW5nZWRFZGdlSGVpZ2h0U3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuY2hhbmdlZEVkZ2VIZWlnaHQkLnN1YnNjcmliZShlZGdlVHlwZSA9PiB7XG4gICAgICAgICAgICB0aGlzLm1haW5TZXNzaW9uLnBhZ2VzV3JhcC51cGRhdGVQYWdlVmVydGljYWxEYXRhKFxuICAgICAgICAgICAgICAgIGVkZ2VUeXBlLFxuICAgICAgICAgICAgICAgIHRoaXMucmVndWxhdG9yU2VydmljZS5lZGdlRWRpdGluZ1BhZ2UsXG4gICAgICAgICAgICAgICAgdGhpcy5zZXNzaW9uLndyYXBQYXJhZ3JhcGhJbmRleFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdW5kb1N1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnVuZG8kLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVuZG8oKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsQ3Vyc29ySW50b01haW5WaWV3KCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlZG9TdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5yZWRvJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWRvKCk7XG4gICAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbEN1cnNvckludG9NYWluVmlldygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByaW50U3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UucHJpbnQkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBQcmludEhlbHBlci5wcmludERvY3VtZW50KHRoaXMubWFpblNlc3Npb24sIHRoaXMuZWRpdG9yU2VydmljZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3V0U2VsZWN0ZWRTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5jdXRTZWxlY3RlZCQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25DdXQobmV3IENsaXBib2FyZEV2ZW50KENsaXBib2FyZEV2ZW50VHlwZXMuY3V0KSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29weVNlbGVjdGVkU3Vic2NyaXB0aW9uKCk6IFN1YnNjcmlwdGlvbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvclNlcnZpY2UuY29weVNlbGVjdGVkJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vbkNvcHkobmV3IENsaXBib2FyZEV2ZW50KENsaXBib2FyZEV2ZW50VHlwZXMuY29weSkpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhc3RlRnJvbUNsaXBib2FyZFN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnBhc3RlRnJvbUNsaXBib2FyZCQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVhZENsaXBib2FyZCgpXG4gICAgICAgICAgICAgICAgLnRoZW4oZGF0YSA9PiB0aGlzLnBhc3RlRGF0YShkYXRhKSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyBjb250aW51ZSByZWdhcmRsZXNzIGVycm9yXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcmVhZENsaXBib2FyZCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBjb25zdCByZWFkID0gYXdhaXQgbmF2aWdhdG9yLnBlcm1pc3Npb25zLnF1ZXJ5KHsgbmFtZTogJ2NsaXBib2FyZC1yZWFkJyBhcyBQZXJtaXNzaW9uTmFtZSB9KTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQgJiYgcmVhZC5zdGF0ZSAhPSAnZGVuaWVkJykge1xuICAgICAgICAgICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmRcbiAgICAgICAgICAgICAgICAgICAgLnJlYWRUZXh0KClcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oZGF0YSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udGludWUgcmVnYXJkbGVzcyBlcnJvclxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmNsaXBib2FyZERhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHBhc3RlRGF0YShkYXRhOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGV4dCA9IGRhdGEucmVwbGFjZSgvXFxyXFxuL2csICdcXG4nKS5yZXBsYWNlKC9cXHQvZywgJyAnKTtcbiAgICAgICAgdGhpcy5pbnNlcnQodGV4dCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsQ3Vyc29ySW50b01haW5WaWV3KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZWxlY3RBbGxTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5zZWxlY3RBbGwkLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbi5zZWxlY3RBbGwodGhpcy5zZXNzaW9uLm1vZGVsKTtcbiAgICAgICAgICAgIHRoaXMub25TZWxlY3Rpb25DaGFuZ2UoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZW1vdmVTZWxlY3RlZFN1YnNjcmlwdGlvbigpOiBTdWJzY3JpcHRpb24ge1xuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3JTZXJ2aWNlLnJlbW92ZVNlbGVjdGVkJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsaXBib2FyZERhdGFTdWJzY3JpcHRpb24oKTogU3Vic2NyaXB0aW9uIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWRpdG9yU2VydmljZS5jbGlwYm9hcmREYXRhJC5zdWJzY3JpYmUoZGF0YSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNsaXBib2FyZERhdGEgPSBkYXRhO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=