@talrace/ngx-noder 0.0.8 → 0.0.9

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 (93) hide show
  1. package/esm2022/lib/apart-components/add-link-dialog/add-link-dialog.component.mjs +15 -9
  2. package/esm2022/lib/apart-components/editor-toolbar/components/base-toolbar.component.mjs +8 -2
  3. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/font/font.component.mjs +2 -2
  4. package/esm2022/lib/apart-components/editor-toolbar/components/buttons/font-size/font-size.component.mjs +3 -3
  5. package/esm2022/lib/apart-components/editor-toolbar/shared/toolbar-styles.helper.mjs +1 -8
  6. package/esm2022/lib/editor/components/edges/edge.component.mjs +2 -2
  7. package/esm2022/lib/editor/components/edges/edges.mjs +21 -2
  8. package/esm2022/lib/editor/components/image/input-handler/image-input.handler.mjs +18 -1
  9. package/esm2022/lib/editor/components/shared/services/custom-content.service.mjs +22 -56
  10. package/esm2022/lib/editor/components/table/components/table-cell.component.mjs +6 -6
  11. package/esm2022/lib/editor/components/table/components/table.component.mjs +13 -4
  12. package/esm2022/lib/editor/components/table/models/cell-data.model.mjs +3 -4
  13. package/esm2022/lib/editor/components/table/selection/table-selection.mjs +15 -5
  14. package/esm2022/lib/editor/content/constants/editor.const.mjs +9 -1
  15. package/esm2022/lib/editor/content/display-data/display-data.mjs +839 -0
  16. package/esm2022/lib/editor/content/display-data/general-properties.model.mjs +1 -1
  17. package/esm2022/lib/editor/content/display-data/models/paragraph-info.model.mjs +8 -0
  18. package/esm2022/lib/editor/content/display-data/paragraph.mjs +5 -1
  19. package/esm2022/lib/editor/content/display-data/text-line-info.mjs +2 -1
  20. package/esm2022/lib/editor/content/display-data/toolbar-styles.interface.mjs +1 -1
  21. package/esm2022/lib/editor/content/helpers/content-style.helper.mjs +12 -30
  22. package/esm2022/lib/editor/content/helpers/display-token.helper.mjs +62 -0
  23. package/esm2022/lib/editor/display/layers/cursor.layer.mjs +9 -8
  24. package/esm2022/lib/editor/display/layers/pages.layer.mjs +5 -5
  25. package/esm2022/lib/editor/display/layers/print.text.layer.mjs +2 -2
  26. package/esm2022/lib/editor/display/layers/selection.layer.mjs +15 -9
  27. package/esm2022/lib/editor/display/layers/text.layer.mjs +25 -27
  28. package/esm2022/lib/editor/display/print/print.renderer.mjs +8 -8
  29. package/esm2022/lib/editor/display/renderer.mjs +10 -10
  30. package/esm2022/lib/editor/display/rendering.helper.mjs +2 -4
  31. package/esm2022/lib/editor/display/virtual.renderer.mjs +5 -5
  32. package/esm2022/lib/editor/execution/edit.session.mjs +199 -755
  33. package/esm2022/lib/editor/execution/editor.mjs +116 -75
  34. package/esm2022/lib/editor/execution/helpers/format-style.helper.mjs +1 -33
  35. package/esm2022/lib/editor/execution/helpers/image.helpet.mjs +12 -0
  36. package/esm2022/lib/editor/execution/helpers/paragraph.helper.mjs +11 -3
  37. package/esm2022/lib/editor/execution/regulator.service.mjs +28 -20
  38. package/esm2022/lib/editor/gadgets/numbering/numbering-paragraph-style.model.mjs +13 -0
  39. package/esm2022/lib/editor/gadgets/numbering/numbering.helper.mjs +77 -10
  40. package/esm2022/lib/editor/gadgets/search/search.mjs +6 -6
  41. package/esm2022/lib/editor/interaction/editor.service.mjs +27 -6
  42. package/esm2022/lib/editor/interaction/input.handler.mjs +8 -5
  43. package/esm2022/lib/editor/interaction/mouse.handler.mjs +2 -1
  44. package/esm2022/lib/editor/operations/helpers/format-operations.helper.mjs +32 -2
  45. package/esm2022/lib/editor/operations/helpers/link-operations.helper.mjs +47 -12
  46. package/esm2022/lib/editor/operations/operations-helper.helper.mjs +13 -14
  47. package/esm2022/lib/editor/operations/save-commands.helper.mjs +2 -2
  48. package/esm2022/lib/editor/positioning/content.helper.mjs +15 -15
  49. package/esm2022/lib/editor/positioning/line-width.helper.mjs +5 -5
  50. package/esm2022/lib/editor/positioning/position.helper.mjs +34 -32
  51. package/esm2022/lib/editor/positioning/selection.mjs +42 -32
  52. package/esm2022/lib/editor/revision.helper.mjs +4 -3
  53. package/fesm2022/talrace-ngx-noder.mjs +3765 -3548
  54. package/fesm2022/talrace-ngx-noder.mjs.map +1 -1
  55. package/lib/apart-components/add-link-dialog/add-link-dialog.component.d.ts +0 -1
  56. package/lib/apart-components/editor-toolbar/shared/toolbar-styles.helper.d.ts +0 -2
  57. package/lib/editor/components/image/input-handler/image-input.handler.d.ts +3 -0
  58. package/lib/editor/components/shared/services/custom-content.service.d.ts +3 -5
  59. package/lib/editor/components/table/components/table-cell.component.d.ts +1 -1
  60. package/lib/editor/components/table/components/table.component.d.ts +1 -0
  61. package/lib/editor/components/table/models/cell-data.model.d.ts +1 -1
  62. package/lib/editor/components/table/selection/table-selection.d.ts +2 -0
  63. package/lib/editor/content/constants/editor.const.d.ts +2 -0
  64. package/lib/editor/content/display-data/display-data.d.ts +103 -0
  65. package/lib/editor/content/display-data/general-properties.model.d.ts +5 -0
  66. package/lib/editor/content/display-data/models/paragraph-info.model.d.ts +9 -0
  67. package/lib/editor/content/display-data/paragraph.d.ts +1 -0
  68. package/lib/editor/content/display-data/text-line-info.d.ts +1 -0
  69. package/lib/editor/content/display-data/toolbar-styles.interface.d.ts +1 -1
  70. package/lib/editor/content/helpers/content-style.helper.d.ts +1 -2
  71. package/lib/editor/content/helpers/display-token.helper.d.ts +6 -0
  72. package/lib/editor/display/layers/text.layer.d.ts +1 -2
  73. package/lib/editor/display/print/print.renderer.d.ts +0 -2
  74. package/lib/editor/execution/edit.session.d.ts +11 -59
  75. package/lib/editor/execution/editor.d.ts +9 -6
  76. package/lib/editor/execution/helpers/format-style.helper.d.ts +0 -2
  77. package/lib/editor/execution/helpers/image.helpet.d.ts +4 -0
  78. package/lib/editor/execution/regulator.service.d.ts +1 -1
  79. package/lib/editor/gadgets/numbering/numbering-paragraph-style.model.d.ts +6 -0
  80. package/lib/editor/gadgets/numbering/numbering.helper.d.ts +10 -3
  81. package/lib/editor/interaction/editor.service.d.ts +12 -3
  82. package/lib/editor/operations/helpers/link-operations.helper.d.ts +5 -3
  83. package/lib/editor/positioning/content.helper.d.ts +6 -5
  84. package/lib/editor/positioning/position.helper.d.ts +3 -3
  85. package/lib/editor/positioning/selection.d.ts +3 -0
  86. package/package.json +1 -1
  87. package/src/_ngx-noder.theme.scss +31 -2
  88. package/esm2022/lib/editor/content/display-data/document.mjs +0 -134
  89. package/esm2022/lib/editor/content/display-data/pages.wrap.mjs +0 -226
  90. package/esm2022/lib/editor/execution/helpers/delta.helper.mjs +0 -18
  91. package/lib/editor/content/display-data/document.d.ts +0 -56
  92. package/lib/editor/content/display-data/pages.wrap.d.ts +0 -42
  93. package/lib/editor/execution/helpers/delta.helper.d.ts +0 -6
@@ -1,15 +1,55 @@
1
1
  import { ContentStyleHelper } from '../../content/helpers/content-style.helper';
2
2
  import { FontMetrics } from '../font-metrics/font-metrics.helper';
3
3
  import { NumberingDataModel } from './numbering-data.model';
4
+ import { NumberingMarkerType } from './numbering-marker-type.enum';
5
+ import { NumberingParagraphStyleModel } from './numbering-paragraph-style.model';
4
6
  import { TabHelper } from '../../components/tab/tab.helper';
5
7
  export class NumberingHelper {
8
+ static getStyles(paragraphStyle, numberings) {
9
+ const numberingLevels = numberings.find(x => x.numberingId === paragraphStyle.numberingId).levels;
10
+ const numberingLevelsStyles = numberingLevels.reduce((prev, next) => `${prev}${next.marker}${next.markerType}`, '');
11
+ const level = numberingLevels.find(x => x.level === paragraphStyle.numberingLevel);
12
+ return new NumberingParagraphStyleModel({ ...paragraphStyle, numberingType: level.markerType, numberingLevelsStyles });
13
+ }
6
14
  static find(numberings, id, level) {
7
15
  const numbering = numberings.find(x => x.numberingId === id);
8
- return numbering.levels.find(x => x.level === level);
16
+ return numbering?.levels.find(x => x.level === level);
17
+ }
18
+ static calculateNumberingInfo(numberingId, level, marker, numberingInfo, numberings) {
19
+ const numberingModel = this.find(numberings, numberingId, level);
20
+ if (numberingModel?.markerType === NumberingMarkerType.Bullet) {
21
+ return;
22
+ }
23
+ this.calculateMarkerIndexes(numberingId, level, marker, numberingInfo);
24
+ }
25
+ static calculateMarkerIndexes(numberingId, level, marker, numberingInfo) {
26
+ if (!numberingId) {
27
+ return;
28
+ }
29
+ if (!numberingInfo[numberingId]?.length || !numberingInfo[numberingId][level]) {
30
+ numberingInfo[numberingId] ??= [];
31
+ return;
32
+ }
33
+ if (!numberingInfo[numberingId][level]?.visited) {
34
+ if (!marker) {
35
+ return;
36
+ }
37
+ this.updateNumberingInfo(numberingInfo, marker, numberingId);
38
+ }
39
+ else {
40
+ numberingInfo[numberingId][level].markerIndex++;
41
+ numberingInfo[numberingId].splice(level + 1);
42
+ }
9
43
  }
10
- static getMarker(levelModel, numberingId, paragraphs, paragraphIndex) {
44
+ static getMarker(levelModel, numberingId, paragraphs, paragraphIndex, numberingInfo) {
11
45
  let resultMarker = levelModel.marker;
12
46
  let index = resultMarker.indexOf('%');
47
+ if (index === -1) {
48
+ return resultMarker;
49
+ }
50
+ if (numberingInfo[numberingId]?.length && numberingInfo[numberingId][levelModel.level]) {
51
+ return this.createMarkerString(numberingInfo, numberingId, levelModel.level);
52
+ }
13
53
  while (index !== -1) {
14
54
  const symbolLevelNumber = Number(resultMarker[index + 1]) - 1;
15
55
  const levelIndex = this.getLevelIndex(paragraphs, paragraphIndex, numberingId, symbolLevelNumber);
@@ -17,16 +57,19 @@ export class NumberingHelper {
17
57
  resultMarker = resultMarker.slice(0, index) + count.toString() + resultMarker.slice(index + 2);
18
58
  index = resultMarker.indexOf('%');
19
59
  }
60
+ numberingInfo[numberingId] ??= [];
61
+ this.updateNumberingInfo(numberingInfo, resultMarker, numberingId);
20
62
  return resultMarker;
21
63
  }
22
- static createDataModel(numberings, paragraphs, paragraphIndex) {
23
- const numberingId = paragraphs[paragraphIndex].paragraphStyle.numberingId;
24
- if (numberingId === null) {
25
- return new NumberingDataModel({ numberingId });
64
+ static createDataModel(numberings, paragraphs, paragraphIndex, numberingInfo) {
65
+ const paragraph = paragraphs[paragraphIndex];
66
+ const numberingId = paragraph?.paragraphStyle.numberingId;
67
+ if (!numberingId) {
68
+ return new NumberingDataModel({ numberingId: null });
26
69
  }
27
- const level = paragraphs[paragraphIndex].paragraphStyle.numberingLevel;
28
- const numberingLevel = NumberingHelper.find(numberings, numberingId, level);
29
- const marker = NumberingHelper.getMarker(numberingLevel, numberingId, paragraphs, paragraphIndex);
70
+ const level = paragraph.paragraphStyle.numberingLevel;
71
+ const numberingLevelModel = this.find(numberings, numberingId, level);
72
+ const marker = this.getMarker(numberingLevelModel, numberingId, paragraphs, paragraphIndex, numberingInfo);
30
73
  return new NumberingDataModel({ numberingId, level, marker });
31
74
  }
32
75
  static updateMarkerData(properties, paragraph, paragraphTextStyle, paragraphStyle) {
@@ -57,6 +100,15 @@ export class NumberingHelper {
57
100
  }
58
101
  return { height, width };
59
102
  }
103
+ static updateNumberingInfo(numberingInfo, marker, numberingId) {
104
+ if (!numberingInfo[numberingId]) {
105
+ return;
106
+ }
107
+ const levels = this.getLevelInfo(marker);
108
+ for (let i = 0; i < levels.length; i++) {
109
+ numberingInfo[numberingId][i] = { markerIndex: levels[i], visited: true };
110
+ }
111
+ }
60
112
  static getLevelIndex(paragraphs, paragraphIndex, numberingId, numberingLevel) {
61
113
  let index = 0;
62
114
  let isOnlySubLevelsBefore = false;
@@ -78,5 +130,20 @@ export class NumberingHelper {
78
130
  index = isOnlySubLevelsBefore ? index + 1 : index;
79
131
  return index <= 0 ? 0 : index - 1;
80
132
  }
133
+ static getLevelInfo(input) {
134
+ return input
135
+ .split('.')
136
+ .filter(x => !!x)
137
+ .map(x => parseInt(x));
138
+ }
139
+ static createMarkerString(numberingInfo, numberingId, level) {
140
+ if (level === 0) {
141
+ return numberingInfo[numberingId][level].markerIndex + '.';
142
+ }
143
+ return numberingInfo[numberingId]
144
+ .slice(0, level + 1)
145
+ .map(marker => marker.markerIndex)
146
+ .join('.');
147
+ }
81
148
  }
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyaW5nLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliL2VkaXRvci9nYWRnZXRzL251bWJlcmluZy9udW1iZXJpbmcuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVsRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQU01RCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHNUQsTUFBTSxPQUFPLGVBQWU7SUFDeEIsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUE0QixFQUFFLEVBQVUsRUFBRSxLQUFhO1FBQy9ELE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzdELE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQStCLEVBQUUsV0FBbUIsRUFBRSxVQUE0QixFQUFFLGNBQXNCO1FBQ3ZILElBQUksWUFBWSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDckMsSUFBSSxLQUFLLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxPQUFPLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNqQixNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxD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LEdBQUcsY0FBYyxFQUFFO2dCQUM5RCxNQUFNO2FBQ1Q7WUFFRCxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsY0FBYyxHQUFHLGNBQWMsRUFBRTtnQkFDOUQscUJBQXFCLEdBQUcsSUFBSSxDQUFDO2FBQ2hDO2lCQUFNO2dCQUNILEtBQUssRUFBRSxDQUFDO2dCQUNSLHFCQUFxQixHQUFHLEtBQUssQ0FBQzthQUNqQztTQUNKO1FBQ0QsS0FBSyxHQUFHLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFFbEQsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDdEMsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGVudFN0eWxlSGVscGVyIH0gZnJvbSAnLi4vLi4vY29udGVudC9oZWxwZXJzL2NvbnRlbnQtc3R5bGUuaGVscGVyJztcbmltcG9ydCB7IEZvbnRNZXRyaWNzIH0gZnJvbSAnLi4vZm9udC1tZXRyaWNzL2ZvbnQtbWV0cmljcy5oZWxwZXInO1xuaW1wb3J0IHsgR2VuZXJhbFByb3BlcnRpZXNNb2RlbCB9IGZyb20gJy4uLy4uL2NvbnRlbnQvZGlzcGxheS1kYXRhL2dlbmVyYWwtcHJvcGVydGllcy5tb2RlbCc7XG5pbXBvcnQgeyBOdW1iZXJpbmdEYXRhTW9kZWwgfSBmcm9tICcuL251bWJlcmluZy1kYXRhLm1vZGVsJztcbmltcG9ydCB7IE51bWJlcmluZ0xldmVsTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL251bWJlcmluZy1sZXZlbC5tb2RlbCc7XG5pbXBvcnQgeyBOdW1iZXJpbmdNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvbnVtYmVyaW5nLm1vZGVsJztcbmltcG9ydCB7IFBhcmFncmFwaCB9IGZyb20gJy4uLy4uL2NvbnRlbnQvZGlzcGxheS1kYXRhL3BhcmFncmFwaCc7XG5pbXBvcnQgeyBQYXJhZ3JhcGhNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcGFyYWdyYXBoLm1vZGVsJztcbmltcG9ydCB7IFBhcmFncmFwaFN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3BhcmFncmFwaC1zdHlsZS5tb2RlbCc7XG5pbXBvcnQgeyBUYWJIZWxwZXIgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3RhYi90YWIuaGVscGVyJztcbmltcG9ydCB7IFRleHRTdHlsZU1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90ZXh0LXN0eWxlLm1vZGVsJztcblxuZXhwb3J0IGNsYXNzIE51bWJlcmluZ0hlbHBlciB7XG4gICAgc3RhdGljIGZpbmQobnVtYmVyaW5nczogTnVtYmVyaW5nTW9kZWxbXSwgaWQ6IG51bWJlciwgbGV2ZWw6IG51bWJlcik6IE51bWJlcmluZ0xldmVsTW9kZWwge1xuICAgICAgICBjb25zdCBudW1iZXJpbmcgPSBudW1iZXJpbmdzLmZpbmQoeCA9PiB4Lm51bWJlcmluZ0lkID09PSBpZCk7XG4gICAgICAgIHJldHVybiBudW1iZXJpbmcubGV2ZWxzLmZpbmQoeCA9PiB4LmxldmVsID09PSBsZXZlbCk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldE1hcmtlcihsZXZlbE1vZGVsOiBOdW1iZXJpbmdMZXZlbE1vZGVsLCBudW1iZXJpbmdJZDogbnVtYmVyLCBwYXJhZ3JhcGhzOiBQYXJhZ3JhcGhNb2RlbFtdLCBwYXJhZ3JhcGhJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgbGV0IHJlc3VsdE1hcmtlciA9IGxldmVsTW9kZWwubWFya2VyO1xuICAgICAgICBsZXQgaW5kZXggPSByZXN1bHRNYXJrZXIuaW5kZXhPZignJScpO1xuICAgICAgICB3aGlsZSAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBjb25zdCBzeW1ib2xMZXZlbE51bWJlciA9IE51bWJlcihyZXN1bHRNYXJrZXJbaW5kZXggKyAxXSkgLSAxO1xuICAgICAgICAgICAgY29uc3QgbGV2ZWxJbmRleCA9IHRoaXMuZ2V0TGV2ZWxJbmRleChwYXJhZ3JhcGhzLCBwYXJhZ3JhcGhJbmRleCwgbnVtYmVyaW5nSWQsIHN5bWJvbExldmVsTnVtYmVyKTtcbiAgICAgICAgICAgIGNvbnN0IGNvdW50ID0gbGV2ZWxNb2RlbC5zdGFydFZhbHVlICsgbGV2ZWxJbmRleDtcbiAgICAgICAgICAgIHJlc3VsdE1hcmtlciA9IHJlc3VsdE1hcmtlci5zbGljZSgwLCBpbmRleCkgKyBjb3VudC50b1N0cmluZygpICsgcmVzdWx0TWFya2VyLnNsaWNlKGluZGV4ICsgMik7XG4gICAgICAgICAgICBpbmRleCA9IHJlc3VsdE1hcmtlci5pbmRleE9mKCclJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0TWFya2VyO1xuICAgIH1cblxuICAgIHN0YXRpYyBjcmVhdGVEYXRhTW9kZWwobnVtYmVyaW5nczogTnVtYmVyaW5nTW9kZWxbXSwgcGFyYWdyYXBoczogUGFyYWdyYXBoTW9kZWxbXSwgcGFyYWdyYXBoSW5kZXg6IG51bWJlcik6IE51bWJlcmluZ0RhdGFNb2RlbCB7XG4gICAgICAgIGNvbnN0IG51bWJlcmluZ0lkID0gcGFyYWdyYXBoc1twYXJhZ3JhcGhJbmRleF0ucGFyYWdyYXBoU3R5bGUubnVtYmVyaW5nSWQ7XG4gICAgICAgIGlmIChudW1iZXJpbmdJZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBOdW1iZXJpbmdEYXRhTW9kZWwoeyBudW1iZXJpbmdJZCB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxldmVsID0gcGFyYWdyYXBoc1twYXJhZ3JhcGhJbmRleF0ucGFyYWdyYXBoU3R5bGUubnVtYmVyaW5nTGV2ZWw7XG4gICAgICAgIGNvbnN0IG51bWJlcmluZ0xldmVsID0gTnVtYmVyaW5nSGVscGVyLmZpbmQobnVtYmVyaW5ncywgbnVtYmVyaW5nSWQsIGxldmVsKTtcbiAgICAgICAgY29uc3QgbWFya2VyID0gTnVtYmVyaW5nSGVscGVyLmdldE1hcmtlcihudW1iZXJpbmdMZXZlbCwgbnVtYmVyaW5nSWQsIHBhcmFncmFwaHMsIHBhcmFncmFwaEluZGV4KTtcblxuICAgICAgICByZXR1cm4gbmV3IE51bWJlcmluZ0RhdGFNb2RlbCh7IG51bWJlcmluZ0lkLCBsZXZlbCwgbWFya2VyIH0pO1xuICAgIH1cblxuICAgIHN0YXRpYyB1cGRhdGVNYXJrZXJEYXRhKFxuICAgICAgICBwcm9wZXJ0aWVzOiBHZW5lcmFsUHJvcGVydGllc01vZGVsLFxuICAgICAgICBwYXJhZ3JhcGg6IFBhcmFncmFwaCxcbiAgICAgICAgcGFyYWdyYXBoVGV4dFN0eWxlOiBUZXh0U3R5bGVNb2RlbCxcbiAgICAgICAgcGFyYWdyYXBoU3R5bGU6IFBhcmFncmFwaFN0eWxlTW9kZWxcbiAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbnVtYmVyaW5nTGV2ZWwgPSBOdW1iZXJpbmdIZWxwZXIuZmluZChcbiAgICAgICAgICAgIHByb3BlcnRpZXMubnVtYmVyaW5ncyxcbiAgICAgICAgICAgIHBhcmFncmFwaC5udW1iZXJpbmdEYXRhLm51bWJlcmluZ0lkLFxuICAgICAgICAgICAgcGFyYWdyYXBoLm51bWJlcmluZ0RhdGEubGV2ZWxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgbWFya2VyVGV4dFN0eWxlID0gQ29udGVudFN0eWxlSGVscGVyLmNvbWJpbmVUZXh0U3R5bGVzKG51bWJlcmluZ0xldmVsLm1hcmtlclN0eWxlLCBwYXJhZ3JhcGhUZXh0U3R5bGUpO1xuICAgICAgICBjb25zdCBtYXJrZXJTaXplcyA9IE51bWJlcmluZ0hlbHBlci5nZXRNYXJrZXJTaXplcyhwYXJhZ3JhcGgubnVtYmVyaW5nRGF0YS5tYXJrZXIsIG1hcmtlclRleHRTdHlsZSk7XG4gICAgICAgIHBhcmFncmFwaC5udW1iZXJpbmdEYXRhLm1hcmtlclRleHRTdHlsZSA9IG1hcmtlclRleHRTdHlsZTtcbiAgICAgICAgcGFyYWdyYXBoLm51bWJlcmluZ0RhdGEud2lkdGggPSBtYXJrZXJTaXplcy53aWR0aDtcbiAgICAgICAgcGFyYWdyYXBoLm51bWJlcmluZ0RhdGEuaGVpZ2h0ID0gbWFya2VyU2l6ZXMuaGVpZ2h0O1xuICAgICAgICBjb25zdCBpbmRlbnRIYW5naW5nID0gcGFyYWdyYXBoU3R5bGUuaW5kZW50SGFuZ2luZyA/IHBhcmFncmFwaFN0eWxlLmluZGVudEhhbmdpbmcgOiBudW1iZXJpbmdMZXZlbC5pbmRlbnRIYW5naW5nO1xuICAgICAgICBwYXJhZ3JhcGgubnVtYmVyaW5nRGF0YS5wYWRkaW5nTGVmdCA9IHBhcmFncmFwaC50ZXh0TGluZXNJbmZvWzBdLnBhZGRpbmdMZWZ0IC0gaW5kZW50SGFuZ2luZztcbiAgICAgICAgaWYgKG1hcmtlclNpemVzLndpZHRoID49IGluZGVudEhhbmdpbmcpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcmtlck92ZXJmbG93ID0gcGFyYWdyYXBoLm51bWJlcmluZ0RhdGEud2lkdGggLSBpbmRlbnRIYW5naW5nO1xuICAgICAgICAgICAgY29uc3QgYWRkaXRpb25hbE1hcmtlckluZGVudCA9IFRhYkhlbHBlci5jYWxjdWxhdGVUYWJXaWR0aChcbiAgICAgICAgICAgICAgICBudW1iZXJpbmdMZXZlbC5pbmRlbnRMZWZ0ICsgbWFya2VyT3ZlcmZsb3csXG4gICAgICAgICAgICAgICAgcHJvcGVydGllcy5kZWZhdWx0VGFiV2lkdGhcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBwYXJhZ3JhcGgubnVtYmVyaW5nRGF0YS5wYWRkaW5nTGVmdCA9IHBhcmFncmFwaC5udW1iZXJpbmdEYXRhLnBhZGRpbmdMZWZ0IC0gbWFya2VyT3ZlcmZsb3cgLSBhZGRpdGlvbmFsTWFya2VySW5kZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhdGljIGdldE1hcmtlclNpemVzKG1hcmtlcjogc3RyaW5nLCBtYXJrZXJTdHlsZTogVGV4dFN0eWxlTW9kZWwpOiB7IGhlaWdodDogbnVtYmVyOyB3aWR0aDogbnVtYmVyIH0ge1xuICAgICAgICBsZXQgd2lkdGggPSAwO1xuICAgICAgICBsZXQgaGVpZ2h0ID0gMDtcbiAgICAgICAgY29uc3QgbWFya2VyU3R5bGVzU3RyaW5nID0gQ29udGVudFN0eWxlSGVscGVyLmdldEZvbnRTdHlsZXNTdHJpbmcobWFya2VyU3R5bGUpO1xuICAgICAgICBmb3IgKGxldCBjaGFyIG9mIG1hcmtlcikge1xuICAgICAgICAgICAgY29uc3QgbWFya2VyQ2hhclNpemVzID0gRm9udE1ldHJpY3MubWVhc3VyZUNoYXJTaXplKGNoYXIsIG1hcmtlclN0eWxlc1N0cmluZyk7XG4gICAgICAgICAgICB3aWR0aCArPSBtYXJrZXJDaGFyU2l6ZXMud2lkdGg7XG4gICAgICAgICAgICBpZiAoaGVpZ2h0IDwgbWFya2VyQ2hhclNpemVzLmhlaWdodCkge1xuICAgICAgICAgICAgICAgIGhlaWdodCA9IG1hcmtlckNoYXJTaXplcy5oZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyBoZWlnaHQsIHdpZHRoIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0TGV2ZWxJbmRleChcbiAgICAgICAgcGFyYWdyYXBoczogUGFyYWdyYXBoTW9kZWxbXSxcbiAgICAgICAgcGFyYWdyYXBoSW5kZXg6IG51bWJlcixcbiAgICAgICAgbnVtYmVyaW5nSWQ6IG51bWJlcixcbiAgICAgICAgbnVtYmVyaW5nTGV2ZWw6IG51bWJlclxuICAgICk6IG51bWJlciB7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGxldCBpc09ubHlTdWJMZXZlbHNCZWZvcmUgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHBhcmFncmFwaEluZGV4OyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgaWYgKHBhcmFncmFwaHNbaV0ucGFyYWdyYXBoU3R5bGUubnVtYmVyaW5nSWQgIT09IG51bWJlcmluZ0lkKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwYXJhZ3JhcGhzW2ldLnBhcmFncmFwaFN0eWxlLm51bWJlcmluZ0xldmVsIDwgbnVtYmVyaW5nTGV2ZWwpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBhcmFncmFwaHNbaV0ucGFyYWdyYXBoU3R5bGUubnVtYmVyaW5nTGV2ZWwgPiBudW1iZXJpbmdMZXZlbCkge1xuICAgICAgICAgICAgICAgIGlzT25seVN1YkxldmVsc0JlZm9yZSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgaXNPbmx5U3ViTGV2ZWxzQmVmb3JlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaW5kZXggPSBpc09ubHlTdWJMZXZlbHNCZWZvcmUgPyBpbmRleCArIDEgOiBpbmRleDtcblxuICAgICAgICByZXR1cm4gaW5kZXggPD0gMCA/IDAgOiBpbmRleCAtIDE7XG4gICAgfVxufVxuIl19
149
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyaW5nLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliL2VkaXRvci9nYWRnZXRzL251bWJlcmluZy9udW1iZXJpbmcuaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ2hGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVsRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVuRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUlqRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHNUQsTUFBTSxPQUFPLGVBQWU7SUFDeEIsTUFBTSxDQUFDLFNBQVMsQ0FBQyxjQUFtQyxFQUFFLFVBQTRCO1FBQzlFLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxLQUFLLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDbEcsTUFBTSxxQkFBcUIsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDcEgsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ25GLE9BQU8sSUFBSSw0QkFBNEIsQ0FBQyxFQUFFLEdBQUcsY0FBYyxFQUFFLGFBQWEsRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLHFCQUFxQixFQUFFLENBQUMsQ0FBQztJQUMzSCxDQUFDO0lBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUE0QixFQUFFLEVBQVUsRUFBRSxLQUFhO1FBQy9ELE1BQU0sU0FBUyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzdELE9BQU8sU0FBUyxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxDQUFDO0lBQzFELENBQUM7SUFFRCxNQUFNLENBQUMsc0JBQXNCLENBQ3pCLFdBQW1CLEVBQ25CLEtBQWEsRUFDYixNQUFjLEVBQ2QsYUFBNEIsRUFDNUIsVUFBNEI7UUFFNUIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pFLElBQUksY0FBYyxFQUFFLFVBQVUsS0FBSyxtQkFBbUIsQ0FBQyxNQUFNLEVBQUU7WUFDM0QsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFFTyxNQUFNLENBQUMsc0JBQXNCLENBQUMsV0FBbUIsRUFBRSxLQUFhLEVBQUUsTUFBYyxFQUFFLGFBQTRCO1FBQ2xILElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDZCxPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFLE1BQU0sSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUMzRSxhQUFhLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2xDLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFO1lBQzdDLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ1QsT0FBTzthQUNWO1lBRUQsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7U0FDaEU7YUFBTTtZQUNILGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNoRCxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNoRDtJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUNaLFVBQStCLEVBQy9CLFdBQW1CLEVBQ25CLFVBQTRCLEVBQzVCLGNBQXNCLEVBQ3RCLGFBQTRCO1FBRTVCLElBQUksWUFBWSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUM7UUFDckMsSUFBSSxLQUFLLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxJQUFJLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNkLE9BQU8sWUFBWSxDQUFDO1NBQ3ZCO1FBRUQsSUFBSSxhQUFhLENBQUMsV0FBVyxDQUFDLEVBQUUsTUFBTSxJQUFJLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDcEYsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDaEY7UUFFRCxPQUFPLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTtZQUNqQixNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUNsRyxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztZQUNqRCxZQUFZLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQy9GLEtBQUssR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3JDO1FBRUQsYUFBYSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxFQUFFLFlBQVksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUVuRSxPQUFPLFlBQVksQ0FBQztJQUN4QixDQUFDO0lBRUQsTUFBTSxDQUFDLGVBQWUsQ0FDbEIsVUFBNEIsRUFDNUIsVUFBNEIsRUFDNUIsY0FBc0IsRUFDdEIsYUFBNEI7UUFFNUIsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sV0FBVyxHQUFHLFNBQVMsRUFBRSxjQUFjLENBQUMsV0FBVyxDQUFDO1FBRTFELElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDZCxPQUFPLElBQUksa0JBQWtCLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUN4RDtRQUVELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxjQUFjLENBQUMsY0FBYyxDQUFDO1FBQ3RELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFM0csT0FBTyxJQUFJLGtCQUFrQixDQUFDLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFRCxNQUFNLENBQUMsZ0JBQWdCLENBQ25CLFVBQWtDLEVBQ2xDLFNBQW9CLEVBQ3BCLGtCQUFrQyxFQUNsQyxjQUFtQztRQUVuQyxNQUFNLGNBQWMsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUN2QyxVQUFVLENBQUMsVUFBVSxFQUNyQixTQUFTLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFDbkMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQ2hDLENBQUM7UUFDRixNQUFNLGVBQWUsR0FBRyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsV0FBVyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFDN0csTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztRQUNwRyxTQUFTLENBQUMsYUFBYSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7UUFDMUQsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztRQUNsRCxTQUFTLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO1FBQ3BELE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUM7UUFDakgsU0FBUyxDQUFDLGFBQWEsQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEdBQUcsYUFBYSxDQUFDO1FBQzdGLElBQUksV0FBVyxDQUFDLEtBQUssSUFBSSxhQUFhLEVBQUU7WUFDcEMsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDO1lBQ3JFLE1BQU0sc0JBQXNCLEdBQUcsU0FBUyxDQUFDLGlCQUFpQixDQUN0RCxjQUFjLENBQUMsVUFBVSxHQUFHLGNBQWMsRUFDMUMsVUFBVSxDQUFDLGVBQWUsQ0FDN0IsQ0FBQztZQUNGLFNBQVMsQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLGNBQWMsR0FBRyxzQkFBc0IsQ0FBQztTQUN2SDtJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQWMsRUFBRSxXQUEyQjtRQUM3RCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZCxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDZixNQUFNLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9FLEtBQUssSUFBSSxJQUFJLElBQUksTUFBTSxFQUFFO1lBQ3JCLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLGtCQUFrQixDQUFDLENBQUM7WUFDOUUsS0FBSyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUM7WUFDL0IsSUFBSSxNQUFNLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRTtnQkFDakMsTUFBTSxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUM7YUFDbkM7U0FDSjtRQUVELE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxhQUE0QixFQUFFLE1BQWMsRUFBRSxXQUFtQjtRQUN4RixJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQzdCLE9BQU87U0FDVjtRQUVELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDcEMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLENBQUM7U0FDN0U7SUFDTCxDQUFDO0lBRU8sTUFBTSxDQUFDLGFBQWEsQ0FDeEIsVUFBNEIsRUFDNUIsY0FBc0IsRUFDdEIsV0FBbUIsRUFDbkIsY0FBc0I7UUFFdEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxxQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDbEMsS0FBSyxJQUFJLENBQUMsR0FBRyxjQUFjLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN0QyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsV0FBVyxLQUFLLFdBQVcsRUFBRTtnQkFDMUQsU0FBUzthQUNaO1lBRUQsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLGNBQWMsR0FBRyxjQUFjLEVBQUU7Z0JBQzlELE1BQU07YUFDVDtZQUVELElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxjQUFjLEdBQUcsY0FBYyxFQUFFO2dCQUM5RCxxQkFBcUIsR0FBRyxJQUFJLENBQUM7YUFDaEM7aUJBQU07Z0JBQ0gsS0FBSyxFQUFFLENBQUM7Z0JBQ1IscUJBQXFCLEdBQUcsS0FBSyxDQUFDO2FBQ2pDO1NBQ0o7UUFDRCxLQUFLLEdBQUcscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztRQUVsRCxPQUFPLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFhO1FBQ3JDLE9BQU8sS0FBSzthQUNQLEtBQUssQ0FBQyxHQUFHLENBQUM7YUFDVixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2hCLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFRCxNQUFNLENBQUMsa0JBQWtCLENBQUMsYUFBNEIsRUFBRSxXQUFtQixFQUFFLEtBQWE7UUFDdEYsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO1lBQ2IsT0FBTyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsV0FBVyxHQUFHLEdBQUcsQ0FBQztTQUM5RDtRQUVELE9BQU8sYUFBYSxDQUFDLFdBQVcsQ0FBQzthQUM1QixLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUM7YUFDbkIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQzthQUNqQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbkIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udGVudFN0eWxlSGVscGVyIH0gZnJvbSAnLi4vLi4vY29udGVudC9oZWxwZXJzL2NvbnRlbnQtc3R5bGUuaGVscGVyJztcbmltcG9ydCB7IEZvbnRNZXRyaWNzIH0gZnJvbSAnLi4vZm9udC1tZXRyaWNzL2ZvbnQtbWV0cmljcy5oZWxwZXInO1xuaW1wb3J0IHsgR2VuZXJhbFByb3BlcnRpZXNNb2RlbCwgTnVtYmVyaW5nSW5mbyB9IGZyb20gJy4uLy4uL2NvbnRlbnQvZGlzcGxheS1kYXRhL2dlbmVyYWwtcHJvcGVydGllcy5tb2RlbCc7XG5pbXBvcnQgeyBOdW1iZXJpbmdEYXRhTW9kZWwgfSBmcm9tICcuL251bWJlcmluZy1kYXRhLm1vZGVsJztcbmltcG9ydCB7IE51bWJlcmluZ0xldmVsTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL251bWJlcmluZy1sZXZlbC5tb2RlbCc7XG5pbXBvcnQgeyBOdW1iZXJpbmdNYXJrZXJUeXBlIH0gZnJvbSAnLi9udW1iZXJpbmctbWFya2VyLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBOdW1iZXJpbmdNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvbnVtYmVyaW5nLm1vZGVsJztcbmltcG9ydCB7IE51bWJlcmluZ1BhcmFncmFwaFN0eWxlTW9kZWwgfSBmcm9tICcuL251bWJlcmluZy1wYXJhZ3JhcGgtc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgUGFyYWdyYXBoIH0gZnJvbSAnLi4vLi4vY29udGVudC9kaXNwbGF5LWRhdGEvcGFyYWdyYXBoJztcbmltcG9ydCB7IFBhcmFncmFwaE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9wYXJhZ3JhcGgubW9kZWwnO1xuaW1wb3J0IHsgUGFyYWdyYXBoU3R5bGVNb2RlbCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcGFyYWdyYXBoLXN0eWxlLm1vZGVsJztcbmltcG9ydCB7IFRhYkhlbHBlciB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvdGFiL3RhYi5oZWxwZXInO1xuaW1wb3J0IHsgVGV4dFN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3RleHQtc3R5bGUubW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgTnVtYmVyaW5nSGVscGVyIHtcbiAgICBzdGF0aWMgZ2V0U3R5bGVzKHBhcmFncmFwaFN0eWxlOiBQYXJhZ3JhcGhTdHlsZU1vZGVsLCBudW1iZXJpbmdzOiBOdW1iZXJpbmdNb2RlbFtdKTogTnVtYmVyaW5nUGFyYWdyYXBoU3R5bGVNb2RlbCB7XG4gICAgICAgIGNvbnN0IG51bWJlcmluZ0xldmVscyA9IG51bWJlcmluZ3MuZmluZCh4ID0+IHgubnVtYmVyaW5nSWQgPT09IHBhcmFncmFwaFN0eWxlLm51bWJlcmluZ0lkKS5sZXZlbHM7XG4gICAgICAgIGNvbnN0IG51bWJlcmluZ0xldmVsc1N0eWxlcyA9IG51bWJlcmluZ0xldmVscy5yZWR1Y2UoKHByZXYsIG5leHQpID0+IGAke3ByZXZ9JHtuZXh0Lm1hcmtlcn0ke25leHQubWFya2VyVHlwZX1gLCAnJyk7XG4gICAgICAgIGNvbnN0IGxldmVsID0gbnVtYmVyaW5nTGV2ZWxzLmZpbmQoeCA9PiB4LmxldmVsID09PSBwYXJhZ3JhcGhTdHlsZS5udW1iZXJpbmdMZXZlbCk7XG4gICAgICAgIHJldHVybiBuZXcgTnVtYmVyaW5nUGFyYWdyYXBoU3R5bGVNb2RlbCh7IC4uLnBhcmFncmFwaFN0eWxlLCBudW1iZXJpbmdUeXBlOiBsZXZlbC5tYXJrZXJUeXBlLCBudW1iZXJpbmdMZXZlbHNTdHlsZXMgfSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGZpbmQobnVtYmVyaW5nczogTnVtYmVyaW5nTW9kZWxbXSwgaWQ6IG51bWJlciwgbGV2ZWw6IG51bWJlcik6IE51bWJlcmluZ0xldmVsTW9kZWwge1xuICAgICAgICBjb25zdCBudW1iZXJpbmcgPSBudW1iZXJpbmdzLmZpbmQoeCA9PiB4Lm51bWJlcmluZ0lkID09PSBpZCk7XG4gICAgICAgIHJldHVybiBudW1iZXJpbmc/LmxldmVscy5maW5kKHggPT4geC5sZXZlbCA9PT0gbGV2ZWwpO1xuICAgIH1cblxuICAgIHN0YXRpYyBjYWxjdWxhdGVOdW1iZXJpbmdJbmZvKFxuICAgICAgICBudW1iZXJpbmdJZDogbnVtYmVyLFxuICAgICAgICBsZXZlbDogbnVtYmVyLFxuICAgICAgICBtYXJrZXI6IHN0cmluZyxcbiAgICAgICAgbnVtYmVyaW5nSW5mbzogTnVtYmVyaW5nSW5mbyxcbiAgICAgICAgbnVtYmVyaW5nczogTnVtYmVyaW5nTW9kZWxbXVxuICAgICk6IHZvaWQge1xuICAgICAgICBjb25zdCBudW1iZXJpbmdNb2RlbCA9IHRoaXMuZmluZChudW1iZXJpbmdzLCBudW1iZXJpbmdJZCwgbGV2ZWwpO1xuICAgICAgICBpZiAobnVtYmVyaW5nTW9kZWw/Lm1hcmtlclR5cGUgPT09IE51bWJlcmluZ01hcmtlclR5cGUuQnVsbGV0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbGN1bGF0ZU1hcmtlckluZGV4ZXMobnVtYmVyaW5nSWQsIGxldmVsLCBtYXJrZXIsIG51bWJlcmluZ0luZm8pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGNhbGN1bGF0ZU1hcmtlckluZGV4ZXMobnVtYmVyaW5nSWQ6IG51bWJlciwgbGV2ZWw6IG51bWJlciwgbWFya2VyOiBzdHJpbmcsIG51bWJlcmluZ0luZm86IE51bWJlcmluZ0luZm8pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFudW1iZXJpbmdJZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFudW1iZXJpbmdJbmZvW251bWJlcmluZ0lkXT8ubGVuZ3RoIHx8ICFudW1iZXJpbmdJbmZvW251bWJlcmluZ0lkXVtsZXZlbF0pIHtcbiAgICAgICAgICAgIG51bWJlcmluZ0luZm9bbnVtYmVyaW5nSWRdID8/PSBbXTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghbnVtYmVyaW5nSW5mb1tudW1iZXJpbmdJZF1bbGV2ZWxdPy52aXNpdGVkKSB7XG4gICAgICAgICAgICBpZiAoIW1hcmtlcikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy51cGRhdGVOdW1iZXJpbmdJbmZvKG51bWJlcmluZ0luZm8sIG1hcmtlciwgbnVtYmVyaW5nSWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbnVtYmVyaW5nSW5mb1tudW1iZXJpbmdJZF1bbGV2ZWxdLm1hcmtlckluZGV4Kys7XG4gICAgICAgICAgICBudW1iZXJpbmdJbmZvW251bWJlcmluZ0lkXS5zcGxpY2UobGV2ZWwgKyAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBnZXRNYXJrZXIoXG4gICAgICAgIGxldmVsTW9kZWw6IE51bWJlcmluZ0xldmVsTW9kZWwsXG4gICAgICAgIG51bWJlcmluZ0lkOiBudW1iZXIsXG4gICAgICAgIHBhcmFncmFwaHM6IFBhcmFncmFwaE1vZGVsW10sXG4gICAgICAgIHBhcmFncmFwaEluZGV4OiBudW1iZXIsXG4gICAgICAgIG51bWJlcmluZ0luZm86IE51bWJlcmluZ0luZm9cbiAgICApOiBzdHJpbmcge1xuICAgICAgICBsZXQgcmVzdWx0TWFya2VyID0gbGV2ZWxNb2RlbC5tYXJrZXI7XG4gICAgICAgIGxldCBpbmRleCA9IHJlc3VsdE1hcmtlci5pbmRleE9mKCclJyk7XG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRNYXJrZXI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobnVtYmVyaW5nSW5mb1tudW1iZXJpbmdJZF0/Lmxlbmd0aCAmJiBudW1iZXJpbmdJbmZvW251bWJlcmluZ0lkXVtsZXZlbE1vZGVsLmxldmVsXSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlTWFya2VyU3RyaW5nKG51bWJlcmluZ0luZm8sIG51bWJlcmluZ0lkLCBsZXZlbE1vZGVsLmxldmVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IHN5bWJvbExldmVsTnVtYmVyID0gTnVtYmVyKHJlc3VsdE1hcmtlcltpbmRleCArIDFdKSAtIDE7XG4gICAgICAgICAgICBjb25zdCBsZXZlbEluZGV4ID0gdGhpcy5nZXRMZXZlbEluZGV4KHBhcmFncmFwaHMsIHBhcmFncmFwaEluZGV4LCBudW1iZXJpbmdJZCwgc3ltYm9sTGV2ZWxOdW1iZXIpO1xuICAgICAgICAgICAgY29uc3QgY291bnQgPSBsZXZlbE1vZGVsLnN0YXJ0VmFsdWUgKyBsZXZlbEluZGV4O1xuICAgICAgICAgICAgcmVzdWx0TWFya2VyID0gcmVzdWx0TWFya2VyLnNsaWNlKDAsIGluZGV4KSArIGNvdW50LnRvU3RyaW5nKCkgKyByZXN1bHRNYXJrZXIuc2xpY2UoaW5kZXggKyAyKTtcbiAgICAgICAgICAgIGluZGV4ID0gcmVzdWx0TWFya2VyLmluZGV4T2YoJyUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIG51bWJlcmluZ0luZm9bbnVtYmVyaW5nSWRdID8/PSBbXTtcbiAgICAgICAgdGhpcy51cGRhdGVOdW1iZXJpbmdJbmZvKG51bWJlcmluZ0luZm8sIHJlc3VsdE1hcmtlciwgbnVtYmVyaW5nSWQpO1xuXG4gICAgICAgIHJldHVybiByZXN1bHRNYXJrZXI7XG4gICAgfVxuXG4gICAgc3RhdGljIGNyZWF0ZURhdGFNb2RlbChcbiAgICAgICAgbnVtYmVyaW5nczogTnVtYmVyaW5nTW9kZWxbXSxcbiAgICAgICAgcGFyYWdyYXBoczogUGFyYWdyYXBoTW9kZWxbXSxcbiAgICAgICAgcGFyYWdyYXBoSW5kZXg6IG51bWJlcixcbiAgICAgICAgbnVtYmVyaW5nSW5mbzogTnVtYmVyaW5nSW5mb1xuICAgICk6IE51bWJlcmluZ0RhdGFNb2RlbCB7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaCA9IHBhcmFncmFwaHNbcGFyYWdyYXBoSW5kZXhdO1xuICAgICAgICBjb25zdCBudW1iZXJpbmdJZCA9IHBhcmFncmFwaD8ucGFyYWdyYXBoU3R5bGUubnVtYmVyaW5nSWQ7XG5cbiAgICAgICAgaWYgKCFudW1iZXJpbmdJZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBOdW1iZXJpbmdEYXRhTW9kZWwoeyBudW1iZXJpbmdJZDogbnVsbCB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxldmVsID0gcGFyYWdyYXBoLnBhcmFncmFwaFN0eWxlLm51bWJlcmluZ0xldmVsO1xuICAgICAgICBjb25zdCBudW1iZXJpbmdMZXZlbE1vZGVsID0gdGhpcy5maW5kKG51bWJlcmluZ3MsIG51bWJlcmluZ0lkLCBsZXZlbCk7XG4gICAgICAgIGNvbnN0IG1hcmtlciA9IHRoaXMuZ2V0TWFya2VyKG51bWJlcmluZ0xldmVsTW9kZWwsIG51bWJlcmluZ0lkLCBwYXJhZ3JhcGhzLCBwYXJhZ3JhcGhJbmRleCwgbnVtYmVyaW5nSW5mbyk7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBOdW1iZXJpbmdEYXRhTW9kZWwoeyBudW1iZXJpbmdJZCwgbGV2ZWwsIG1hcmtlciB9KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgdXBkYXRlTWFya2VyRGF0YShcbiAgICAgICAgcHJvcGVydGllczogR2VuZXJhbFByb3BlcnRpZXNNb2RlbCxcbiAgICAgICAgcGFyYWdyYXBoOiBQYXJhZ3JhcGgsXG4gICAgICAgIHBhcmFncmFwaFRleHRTdHlsZTogVGV4dFN0eWxlTW9kZWwsXG4gICAgICAgIHBhcmFncmFwaFN0eWxlOiBQYXJhZ3JhcGhTdHlsZU1vZGVsXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG51bWJlcmluZ0xldmVsID0gTnVtYmVyaW5nSGVscGVyLmZpbmQoXG4gICAgICAgICAgICBwcm9wZXJ0aWVzLm51bWJlcmluZ3MsXG4gICAgICAgICAgICBwYXJhZ3JhcGgubnVtYmVyaW5nRGF0YS5udW1iZXJpbmdJZCxcbiAgICAgICAgICAgIHBhcmFncmFwaC5udW1iZXJpbmdEYXRhLmxldmVsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG1hcmtlclRleHRTdHlsZSA9IENvbnRlbnRTdHlsZUhlbHBlci5jb21iaW5lVGV4dFN0eWxlcyhudW1iZXJpbmdMZXZlbC5tYXJrZXJTdHlsZSwgcGFyYWdyYXBoVGV4dFN0eWxlKTtcbiAgICAgICAgY29uc3QgbWFya2VyU2l6ZXMgPSBOdW1iZXJpbmdIZWxwZXIuZ2V0TWFya2VyU2l6ZXMocGFyYWdyYXBoLm51bWJlcmluZ0RhdGEubWFya2VyLCBtYXJrZXJUZXh0U3R5bGUpO1xuICAgICAgICBwYXJhZ3JhcGgubnVtYmVyaW5nRGF0YS5tYXJrZXJUZXh0U3R5bGUgPSBtYXJrZXJUZXh0U3R5bGU7XG4gICAgICAgIHBhcmFncmFwaC5udW1iZXJpbmdEYXRhLndpZHRoID0gbWFya2VyU2l6ZXMud2lkdGg7XG4gICAgICAgIHBhcmFncmFwaC5udW1iZXJpbmdEYXRhLmhlaWdodCA9IG1hcmtlclNpemVzLmhlaWdodDtcbiAgICAgICAgY29uc3QgaW5kZW50SGFuZ2luZyA9IHBhcmFncmFwaFN0eWxlLmluZGVudEhhbmdpbmcgPyBwYXJhZ3JhcGhTdHlsZS5pbmRlbnRIYW5naW5nIDogbnVtYmVyaW5nTGV2ZWwuaW5kZW50SGFuZ2luZztcbiAgICAgICAgcGFyYWdyYXBoLm51bWJlcmluZ0RhdGEucGFkZGluZ0xlZnQgPSBwYXJhZ3JhcGgudGV4dExpbmVzSW5mb1swXS5wYWRkaW5nTGVmdCAtIGluZGVudEhhbmdpbmc7XG4gICAgICAgIGlmIChtYXJrZXJTaXplcy53aWR0aCA+PSBpbmRlbnRIYW5naW5nKSB7XG4gICAgICAgICAgICBjb25zdCBtYXJrZXJPdmVyZmxvdyA9IHBhcmFncmFwaC5udW1iZXJpbmdEYXRhLndpZHRoIC0gaW5kZW50SGFuZ2luZztcbiAgICAgICAgICAgIGNvbnN0IGFkZGl0aW9uYWxNYXJrZXJJbmRlbnQgPSBUYWJIZWxwZXIuY2FsY3VsYXRlVGFiV2lkdGgoXG4gICAgICAgICAgICAgICAgbnVtYmVyaW5nTGV2ZWwuaW5kZW50TGVmdCArIG1hcmtlck92ZXJmbG93LFxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZGVmYXVsdFRhYldpZHRoXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcGFyYWdyYXBoLm51bWJlcmluZ0RhdGEucGFkZGluZ0xlZnQgPSBwYXJhZ3JhcGgubnVtYmVyaW5nRGF0YS5wYWRkaW5nTGVmdCAtIG1hcmtlck92ZXJmbG93IC0gYWRkaXRpb25hbE1hcmtlckluZGVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0YXRpYyBnZXRNYXJrZXJTaXplcyhtYXJrZXI6IHN0cmluZywgbWFya2VyU3R5bGU6IFRleHRTdHlsZU1vZGVsKTogeyBoZWlnaHQ6IG51bWJlcjsgd2lkdGg6IG51bWJlciB9IHtcbiAgICAgICAgbGV0IHdpZHRoID0gMDtcbiAgICAgICAgbGV0IGhlaWdodCA9IDA7XG4gICAgICAgIGNvbnN0IG1hcmtlclN0eWxlc1N0cmluZyA9IENvbnRlbnRTdHlsZUhlbHBlci5nZXRGb250U3R5bGVzU3RyaW5nKG1hcmtlclN0eWxlKTtcbiAgICAgICAgZm9yIChsZXQgY2hhciBvZiBtYXJrZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hcmtlckNoYXJTaXplcyA9IEZvbnRNZXRyaWNzLm1lYXN1cmVDaGFyU2l6ZShjaGFyLCBtYXJrZXJTdHlsZXNTdHJpbmcpO1xuICAgICAgICAgICAgd2lkdGggKz0gbWFya2VyQ2hhclNpemVzLndpZHRoO1xuICAgICAgICAgICAgaWYgKGhlaWdodCA8IG1hcmtlckNoYXJTaXplcy5oZWlnaHQpIHtcbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBtYXJrZXJDaGFyU2l6ZXMuaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgaGVpZ2h0LCB3aWR0aCB9O1xuICAgIH1cblxuICAgIHN0YXRpYyB1cGRhdGVOdW1iZXJpbmdJbmZvKG51bWJlcmluZ0luZm86IE51bWJlcmluZ0luZm8sIG1hcmtlcjogc3RyaW5nLCBudW1iZXJpbmdJZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICghbnVtYmVyaW5nSW5mb1tudW1iZXJpbmdJZF0pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxldmVscyA9IHRoaXMuZ2V0TGV2ZWxJbmZvKG1hcmtlcik7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGV2ZWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBudW1iZXJpbmdJbmZvW251bWJlcmluZ0lkXVtpXSA9IHsgbWFya2VySW5kZXg6IGxldmVsc1tpXSwgdmlzaXRlZDogdHJ1ZSB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0TGV2ZWxJbmRleChcbiAgICAgICAgcGFyYWdyYXBoczogUGFyYWdyYXBoTW9kZWxbXSxcbiAgICAgICAgcGFyYWdyYXBoSW5kZXg6IG51bWJlcixcbiAgICAgICAgbnVtYmVyaW5nSWQ6IG51bWJlcixcbiAgICAgICAgbnVtYmVyaW5nTGV2ZWw6IG51bWJlclxuICAgICk6IG51bWJlciB7XG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGxldCBpc09ubHlTdWJMZXZlbHNCZWZvcmUgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHBhcmFncmFwaEluZGV4OyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgaWYgKHBhcmFncmFwaHNbaV0ucGFyYWdyYXBoU3R5bGUubnVtYmVyaW5nSWQgIT09IG51bWJlcmluZ0lkKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChwYXJhZ3JhcGhzW2ldLnBhcmFncmFwaFN0eWxlLm51bWJlcmluZ0xldmVsIDwgbnVtYmVyaW5nTGV2ZWwpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBhcmFncmFwaHNbaV0ucGFyYWdyYXBoU3R5bGUubnVtYmVyaW5nTGV2ZWwgPiBudW1iZXJpbmdMZXZlbCkge1xuICAgICAgICAgICAgICAgIGlzT25seVN1YkxldmVsc0JlZm9yZSA9IHRydWU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGluZGV4Kys7XG4gICAgICAgICAgICAgICAgaXNPbmx5U3ViTGV2ZWxzQmVmb3JlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaW5kZXggPSBpc09ubHlTdWJMZXZlbHNCZWZvcmUgPyBpbmRleCArIDEgOiBpbmRleDtcblxuICAgICAgICByZXR1cm4gaW5kZXggPD0gMCA/IDAgOiBpbmRleCAtIDE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgZ2V0TGV2ZWxJbmZvKGlucHV0OiBzdHJpbmcpOiBudW1iZXJbXSB7XG4gICAgICAgIHJldHVybiBpbnB1dFxuICAgICAgICAgICAgLnNwbGl0KCcuJylcbiAgICAgICAgICAgIC5maWx0ZXIoeCA9PiAhIXgpXG4gICAgICAgICAgICAubWFwKHggPT4gcGFyc2VJbnQoeCkpO1xuICAgIH1cblxuICAgIHN0YXRpYyBjcmVhdGVNYXJrZXJTdHJpbmcobnVtYmVyaW5nSW5mbzogTnVtYmVyaW5nSW5mbywgbnVtYmVyaW5nSWQ6IG51bWJlciwgbGV2ZWw6IG51bWJlcik6IHN0cmluZyB7XG4gICAgICAgIGlmIChsZXZlbCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlcmluZ0luZm9bbnVtYmVyaW5nSWRdW2xldmVsXS5tYXJrZXJJbmRleCArICcuJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudW1iZXJpbmdJbmZvW251bWJlcmluZ0lkXVxuICAgICAgICAgICAgLnNsaWNlKDAsIGxldmVsICsgMSlcbiAgICAgICAgICAgIC5tYXAobWFya2VyID0+IG1hcmtlci5tYXJrZXJJbmRleClcbiAgICAgICAgICAgIC5qb2luKCcuJyk7XG4gICAgfVxufVxuIl19
@@ -82,7 +82,7 @@ export class Search {
82
82
  startParagraphPosition = start[skipCurrent !== backwards ? 'end' : 'start'];
83
83
  }
84
84
  let firstRow = 0;
85
- let lastRow = session.document.getLinesCount() - 1;
85
+ let lastRow = session.displayData.paragraphs.length - 2;
86
86
  this.setForEach(backwards, startParagraphPosition, options, firstRow, lastRow);
87
87
  const singleRe = regex;
88
88
  this.setForEachInLine(regex, options, backwards, session, singleRe);
@@ -154,13 +154,13 @@ export class Search {
154
154
  if (startRow < 0) {
155
155
  return false;
156
156
  }
157
- let line = session.document.getLine(session.document.lines, startRow);
157
+ let line = session.displayData.getParagraphContent(startRow);
158
158
  let startIndex = line.search(regex[0]);
159
159
  if ((!backwards && startIndex < offset) || startIndex === -1) {
160
160
  return false;
161
161
  }
162
162
  for (let i = 1; i < regularLength; i++) {
163
- line = session.document.getLine(session.document.lines, startRow + i);
163
+ line = session.displayData.getParagraphContent(startRow + i);
164
164
  if (line.search(regex[i]) === -1) {
165
165
  return false;
166
166
  }
@@ -177,7 +177,7 @@ export class Search {
177
177
  }
178
178
  setForEachInLineForBackwards(session, singleRe) {
179
179
  this.forEachInLine = (row, endIndex, callback) => {
180
- let line = session.document.getLine(session.document.lines, row);
180
+ let line = session.displayData.getParagraphContent(row);
181
181
  let matches = [];
182
182
  let regexResult, last = 0;
183
183
  singleRe.lastIndex = 0;
@@ -207,7 +207,7 @@ export class Search {
207
207
  }
208
208
  setDefaultForEachInLine(session, singleRe) {
209
209
  this.forEachInLine = (row, startIndex, callback) => {
210
- let line = session.document.getLine(session.document.lines, row);
210
+ let line = session.displayData.getParagraphContent(row);
211
211
  let last;
212
212
  let regexResult;
213
213
  singleRe.lastIndex = startIndex;
@@ -228,4 +228,4 @@ export class Search {
228
228
  };
229
229
  }
230
230
  }
231
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL2dhZGdldHMvc2VhcmNoL3NlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFckUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWhELE1BQU0sT0FBTyxhQUFhO0NBUXpCO0FBRUQsTUFBTSxPQUFPLE1BQU07SUFLZjtRQUNJLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxHQUFHLENBQUMsT0FBc0I7UUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQW9CO1FBQ3JCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN4QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzlCLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDWCxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLFFBQVEsQ0FBQyxDQUFDLFFBQWdCLEVBQUUsV0FBbUIsRUFBRSxNQUFjLEVBQUUsU0FBaUIsRUFBRSxFQUFFO1lBQ2xGLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLGVBQWUsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLEVBQUUsSUFBSSxlQUFlLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDM0csSUFDSSxXQUFXLEtBQUssU0FBUztnQkFDekIsT0FBTyxDQUFDLEtBQUssWUFBWSxLQUFLO2dCQUM5QixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUs7Z0JBQ25CLE9BQU8sQ0FBQyxXQUFXLEtBQUssS0FBSztnQkFDN0IsVUFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQ25DO2dCQUNFLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ2xCLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1lBRUQsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFVBQVUsQ0FBQztJQUN0QixDQUFDO0lBRUQsY0FBYyxDQUFDLE9BQXNCO1FBQ2pDLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFFMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUU7WUFDZixPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNyQixPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUM7U0FDeEI7UUFFRCxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFFckIsT0FBTyxDQUFDLFdBQVcsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVDLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRTtZQUNyQixPQUFPLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDL0QsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDO1NBQ3hCO1FBRUQsSUFBSSxPQUFlLENBQUM7UUFDcEIsSUFBSTtZQUNBLE9BQU8sR0FBRyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7U0FDMUM7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNSLE9BQU8sR0FBRyxJQUFJLENBQUM7U0FDbEI7UUFDRCxPQUFPLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQztRQUN4QixPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDekIsQ0FBQztJQUVELHVCQUF1QixDQUFDLE1BQWMsRUFBRSxRQUFnQjtRQUNwRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEUsTUFBTSxLQUFLLEdBQWEsRUFBRSxDQUFDO1FBQzNCLEtBQUssTUFBTSxPQUFPLElBQUksS0FBSyxFQUFFO1lBQ3pCLElBQUk7Z0JBQ0EsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQzthQUM3QztZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNSLE9BQU8sRUFBRSxDQUFDO2FBQ2I7U0FDSjtRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxPQUFvQixFQUFFLE9BQXNCO1FBQ3pELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNSLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQztRQUM3QyxNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQztRQUVqRCxJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDUixLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7U0FDbkM7UUFFRCxJQUFJLHNCQUF1QyxDQUFDO1FBQzVDLElBQUksS0FBSyxZQUFZLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO1lBQ3ZDLHNCQUFzQixHQUFHLEtBQUssQ0FBQyxXQUFXLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQy9FO1FBRUQsSUFBSSxRQUFRLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLElBQUksT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRW5ELElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLHNCQUFzQixFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFL0UsTUFBTSxRQUFRLEdBQUcsS0FBZSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVPLFVBQVUsQ0FDZCxTQUFrQixFQUNsQixzQkFBdUMsRUFDdkMsT0FBc0IsRUFDdEIsUUFBZ0IsRUFDaEIsT0FBZTtRQUVmLElBQUksU0FBUyxFQUFFO1lBQ1gsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHNCQUFzQixFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFFaEYsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHNCQUFzQixFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVPLGlCQUFpQixDQUFDLHNCQUF1QyxFQUFFLE9BQXNCLEVBQUUsUUFBZ0IsRUFBRSxPQUFlO1FBQ3hILElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLEVBQUU7WUFDdEIsSUFBSSxHQUFHLEdBQUcsc0JBQXNCLENBQUMsR0FBRyxDQUFDO1lBQ3JDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsc0JBQXNCLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxFQUFFO2dCQUNsRSxPQUFPO2FBQ1Y7WUFDRCxLQUFLLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsSUFBSSxPQUFPLEVBQUUsR0FBRyxFQUFFLEVBQUU7Z0JBQ3ZDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFO29CQUN0QyxPQUFPO2lCQUNWO2FBQ0o7WUFDRCxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFO2dCQUN4QixPQUFPO2FBQ1Y7WUFDRCxLQUFLLEdBQUcsR0FBRyxRQUFRLEVBQUUsT0FBTyxHQUFHLHNCQUFzQixDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUM5RSxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBRSxRQUFRLENBQUMsRUFBRTtvQkFDdEMsT0FBTztpQkFDVjthQUNKO1FBQ0wsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVPLHNCQUFzQixDQUMxQixzQkFBdUMsRUFDdkMsT0FBc0IsRUFDdEIsUUFBZ0IsRUFDaEIsT0FBZTtRQUVmLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxDQUFDLEVBQUU7WUFDdEIsSUFBSSxHQUFHLEdBQUcsc0JBQXNCLENBQUMsR0FBRyxDQUFDO1lBQ3JDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsc0JBQXNCLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxFQUFFO2dCQUNsRSxPQUFPO2FBQ1Y7WUFDRCxLQUFLLEdBQUcsRUFBRSxFQUFFLEdBQUcsSUFBSSxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUU7Z0JBQ2hDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsRUFBRTtvQkFDckQsT0FBTztpQkFDVjthQUNKO1lBQ0QsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtnQkFDeEIsT0FBTzthQUNWO1lBQ0QsS0FBSyxHQUFHLEdBQUcsT0FBTyxFQUFFLFFBQVEsR0FBRyxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLFFBQVEsRUFBRSxHQUFHLEVBQUUsRUFBRTtnQkFDL0UsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxFQUFFO29CQUNyRCxPQUFPO2lCQUNWO2FBQ0o7UUFDTCxDQUFDLENBQUM7SUFDTixDQUFDO0lBRU8sZ0JBQWdCLENBQ3BCLEVBQXFCLEVBQ3JCLE9BQXNCLEVBQ3RCLFNBQWtCLEVBQ2xCLE9BQW9CLEVBQ3BCLFFBQWdCO1FBRWhCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFO1lBQzFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQzVEO2FBQU0sSUFBSSxTQUFTLEVBQUU7WUFDbEIsSUFBSSxDQUFDLDRCQUE0QixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztTQUN4RDthQUFNO1lBQ0gsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztTQUNuRDtJQUNMLENBQUM7SUFFTywyQkFBMkIsQ0FBQyxLQUFlLEVBQUUsU0FBa0IsRUFBRSxPQUFvQjtRQUN6RixJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxFQUFFO1lBQzNDLElBQUksUUFBUSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLGFBQWEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUN6RCxJQUFJLFFBQVEsR0FBRyxDQUFDLEVBQUU7Z0JBQ2QsT0FBTyxLQUFLLENBQUM7YUFDaEI7WUFDRCxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN0RSxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxDQUFDLFNBQVMsSUFBSSxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksVUFBVSxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUMxRCxPQUFPLEtBQUssQ0FBQzthQUNoQjtZQUNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3BDLElBQUksR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RFLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFDOUIsT0FBTyxLQUFLLENBQUM7aUJBQ2hCO2FBQ0o7WUFDRCxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDOUQsSUFBSSxTQUFTLElBQUksUUFBUSxHQUFHLE1BQU0sRUFBRTtnQkFDaEMsT0FBTyxLQUFLLENBQUM7YUFDaEI7WUFDRCxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsR0FBRyxhQUFhLEdBQUcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxFQUFFO2dCQUN4RSxPQUFPLElBQUksQ0FBQzthQUNmO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVPLDRCQUE0QixDQUFDLE9BQW9CLEVBQUUsUUFBZ0I7UUFDdkUsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDN0MsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDakUsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2pCLElBQUksV0FBNEIsRUFDNUIsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUNiLFFBQVEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO2dCQUN4QyxJQUFJLE1BQU0sR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUNuQyxJQUFJLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztnQkFDekIsSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDVCxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFO3dCQUNyQixNQUFNO3FCQUNUO29CQUNELFFBQVEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztpQkFDakM7Z0JBQ0QsSUFBSSxXQUFXLENBQUMsS0FBSyxHQUFHLE1BQU0sR0FBRyxRQUFRLEVBQUU7b0JBQ3ZDLE1BQU07aUJBQ1Q7Z0JBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQzNDO1lBQ0QsS0FBSyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzdDLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQzVCLElBQUksTUFBTSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDeEIsSUFBSSxRQUFRLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxHQUFHLE1BQU0sQ0FBQyxFQUFFO29CQUM3QyxPQUFPLElBQUksQ0FBQztpQkFDZjthQUNKO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVPLHVCQUF1QixDQUFDLE9BQW9CLEVBQUUsUUFBZ0I7UUFDbEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLEdBQUcsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEVBQUU7WUFDL0MsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDakUsSUFBSSxJQUFZLENBQUM7WUFDakIsSUFBSSxXQUE0QixDQUFDO1lBQ2pDLFFBQVEsQ0FBQyxTQUFTLEdBQUcsVUFBVSxDQUFDO1lBQ2hDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO2dCQUN4QyxJQUFJLE1BQU0sR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUNuQyxJQUFJLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztnQkFDekIsSUFBSSxRQUFRLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxHQUFHLE1BQU0sQ0FBQyxFQUFFO29CQUN6QyxPQUFPLElBQUksQ0FBQztpQkFDZjtnQkFDRCxJQUFJLENBQUMsTUFBTSxFQUFFO29CQUNULFFBQVEsQ0FBQyxTQUFTLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztvQkFDL0IsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTt3QkFDckIsT0FBTyxLQUFLLENBQUM7cUJBQ2hCO2lCQUNKO2FBQ0o7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDLENBQUM7SUFDTixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXJzb3JQYXJhZ3JhcGggfSBmcm9tICcuLi8uLi9wb3NpdGlvbmluZy9jdXJzb3ItcGFyYWdyYXBoJztcbmltcG9ydCB7IEVkaXRTZXNzaW9uIH0gZnJvbSAnLi4vLi4vZXhlY3V0aW9uL2VkaXQuc2Vzc2lvbic7XG5pbXBvcnQgeyBSYW5nZSB9IGZyb20gJy4uLy4uL3Bvc2l0aW9uaW5nL3JhbmdlJztcblxuZXhwb3J0IGNsYXNzIFNlYXJjaE9wdGlvbnMge1xuICAgIHRlcm0/OiBzdHJpbmc7XG4gICAgYmFja3dhcmRzPzogYm9vbGVhbjtcbiAgICBzdGFydD86IEN1cnNvclBhcmFncmFwaCB8IFJhbmdlO1xuICAgIHNraXBDdXJyZW50PzogYm9vbGVhbjtcbiAgICB3cmFwPzogYm9vbGVhbjtcbiAgICBpc011bHRpTGluZT86IGJvb2xlYW47XG4gICAgcmVnZXg/OiBSZWdFeHAgfCAoUmVnRXhwW10gJiB7IG9mZnNldD86IG51bWJlciB9KTtcbn1cblxuZXhwb3J0IGNsYXNzIFNlYXJjaCB7XG4gICAgb3B0aW9uczogU2VhcmNoT3B0aW9ucztcbiAgICBmb3JFYWNoOiAoY2FsbGJhY2s6IGFueSkgPT4gdm9pZDtcbiAgICBmb3JFYWNoSW5MaW5lOiAocm93OiBudW1iZXIsIG9mZnNldDogbnVtYmVyLCBjYWxsYmFjazogYW55KSA9PiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIHNldChvcHRpb25zOiBTZWFyY2hPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIHRoaXMub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGZpbmQoc2Vzc2lvbjogRWRpdFNlc3Npb24pOiBSYW5nZSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG4gICAgICAgIHRoaXMuc2V0TWF0Y2hJdGVyYXRvcihzZXNzaW9uLCBvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaXRlcmF0b3IgPSB0aGlzLmZvckVhY2g7XG4gICAgICAgIGlmICghaXRlcmF0b3IpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZpcnN0UmFuZ2UgPSBudWxsO1xuICAgICAgICBpdGVyYXRvcigoc3RhcnRSb3c6IG51bWJlciwgc3RhcnRDb2x1bW46IG51bWJlciwgZW5kUm93OiBudW1iZXIsIGVuZENvbHVtbjogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICBmaXJzdFJhbmdlID0gbmV3IFJhbmdlKG5ldyBDdXJzb3JQYXJhZ3JhcGgoc3RhcnRSb3csIHN0YXJ0Q29sdW1uKSwgbmV3IEN1cnNvclBhcmFncmFwaChlbmRSb3csIGVuZENvbHVtbikpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHN0YXJ0Q29sdW1uID09PSBlbmRDb2x1bW4gJiZcbiAgICAgICAgICAgICAgICBvcHRpb25zLnN0YXJ0IGluc3RhbmNlb2YgUmFuZ2UgJiZcbiAgICAgICAgICAgICAgICBvcHRpb25zLnN0YXJ0LnN0YXJ0ICYmXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5za2lwQ3VycmVudCAhPT0gZmFsc2UgJiZcbiAgICAgICAgICAgICAgICBmaXJzdFJhbmdlLmlzRXF1YWwob3B0aW9ucy5zdGFydClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGZpcnN0UmFuZ2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBmaXJzdFJhbmdlO1xuICAgIH1cblxuICAgIGFzc2VtYmxlUmVnRXhwKG9wdGlvbnM6IFNlYXJjaE9wdGlvbnMpOiBSZWdFeHAgfCBSZWdFeHBbXSB7XG4gICAgICAgIGxldCBuZWVkbGUgPSBvcHRpb25zLnRlcm07XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLnRlcm0pIHtcbiAgICAgICAgICAgIG9wdGlvbnMucmVnZXggPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnMucmVnZXg7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbW9kaWZpZXIgPSAnZ21pJztcblxuICAgICAgICBvcHRpb25zLmlzTXVsdGlMaW5lID0gL1tcXG5cXHJdLy50ZXN0KG5lZWRsZSk7XG4gICAgICAgIGlmIChvcHRpb25zLmlzTXVsdGlMaW5lKSB7XG4gICAgICAgICAgICBvcHRpb25zLnJlZ2V4ID0gdGhpcy5hc3NlbWJsZU11bHRpbGluZVJlZ0V4cChuZWVkbGUsIG1vZGlmaWVyKTtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLnJlZ2V4O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJlZ3VsYXI6IFJlZ0V4cDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlZ3VsYXIgPSBuZXcgUmVnRXhwKG5lZWRsZSwgbW9kaWZpZXIpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWd1bGFyID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLnJlZ2V4ID0gcmVndWxhcjtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnMucmVnZXg7XG4gICAgfVxuXG4gICAgYXNzZW1ibGVNdWx0aWxpbmVSZWdFeHAobmVlZGxlOiBzdHJpbmcsIG1vZGlmaWVyOiBzdHJpbmcpOiBSZWdFeHBbXSB7XG4gICAgICAgIGNvbnN0IHBhcnRzID0gbmVlZGxlLnJlcGxhY2UoL1xcclxcbnxcXHJ8XFxuL2csICckXFxuXicpLnNwbGl0KCdcXG4nKTtcbiAgICAgICAgY29uc3QgcmVnZXg6IFJlZ0V4cFtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBwYXJ0cykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICByZWdleC5wdXNoKG5ldyBSZWdFeHAoZWxlbWVudCwgbW9kaWZpZXIpKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlZ2V4O1xuICAgIH1cblxuICAgIHNldE1hdGNoSXRlcmF0b3Ioc2Vzc2lvbjogRWRpdFNlc3Npb24sIG9wdGlvbnM6IFNlYXJjaE9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVnZXggPSB0aGlzLmFzc2VtYmxlUmVnRXhwKG9wdGlvbnMpO1xuICAgICAgICBpZiAoIXJlZ2V4KSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiYWNrd2FyZHMgPSBvcHRpb25zLmJhY2t3YXJkcyA/PyBmYWxzZTtcbiAgICAgICAgY29uc3Qgc2tpcEN1cnJlbnQgPSBvcHRpb25zLnNraXBDdXJyZW50ID8/IGZhbHNlO1xuXG4gICAgICAgIGxldCBzdGFydCA9IG9wdGlvbnMuc3RhcnQ7XG4gICAgICAgIGlmICghc3RhcnQpIHtcbiAgICAgICAgICAgIHN0YXJ0ID0gc2Vzc2lvbi5zZWxlY3Rpb24ucmFuZ2U7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgc3RhcnRQYXJhZ3JhcGhQb3NpdGlvbjogQ3Vyc29yUGFyYWdyYXBoO1xuICAgICAgICBpZiAoc3RhcnQgaW5zdGFuY2VvZiBSYW5nZSAmJiBzdGFydC5zdGFydCkge1xuICAgICAgICAgICAgc3RhcnRQYXJhZ3JhcGhQb3NpdGlvbiA9IHN0YXJ0W3NraXBDdXJyZW50ICE9PSBiYWNrd2FyZHMgPyAnZW5kJyA6ICdzdGFydCddO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZpcnN0Um93ID0gMDtcbiAgICAgICAgbGV0IGxhc3RSb3cgPSBzZXNzaW9uLmRvY3VtZW50LmdldExpbmVzQ291bnQoKSAtIDE7XG5cbiAgICAgICAgdGhpcy5zZXRGb3JFYWNoKGJhY2t3YXJkcywgc3RhcnRQYXJhZ3JhcGhQb3NpdGlvbiwgb3B0aW9ucywgZmlyc3RSb3csIGxhc3RSb3cpO1xuXG4gICAgICAgIGNvbnN0IHNpbmdsZVJlID0gcmVnZXggYXMgUmVnRXhwO1xuICAgICAgICB0aGlzLnNldEZvckVhY2hJbkxpbmUocmVnZXgsIG9wdGlvbnMsIGJhY2t3YXJkcywgc2Vzc2lvbiwgc2luZ2xlUmUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Rm9yRWFjaChcbiAgICAgICAgYmFja3dhcmRzOiBib29sZWFuLFxuICAgICAgICBzdGFydFBhcmFncmFwaFBvc2l0aW9uOiBDdXJzb3JQYXJhZ3JhcGgsXG4gICAgICAgIG9wdGlvbnM6IFNlYXJjaE9wdGlvbnMsXG4gICAgICAgIGZpcnN0Um93OiBudW1iZXIsXG4gICAgICAgIGxhc3RSb3c6IG51bWJlclxuICAgICk6IHZvaWQge1xuICAgICAgICBpZiAoYmFja3dhcmRzKSB7XG4gICAgICAgICAgICB0aGlzLnNldEZvckVhY2hGb3JCYWNrd2FyZHMoc3RhcnRQYXJhZ3JhcGhQb3NpdGlvbiwgb3B0aW9ucywgZmlyc3RSb3csIGxhc3RSb3cpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldERlZmF1bHRGb3JFYWNoKHN0YXJ0UGFyYWdyYXBoUG9zaXRpb24sIG9wdGlvbnMsIGZpcnN0Um93LCBsYXN0Um93KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldERlZmF1bHRGb3JFYWNoKHN0YXJ0UGFyYWdyYXBoUG9zaXRpb246IEN1cnNvclBhcmFncmFwaCwgb3B0aW9uczogU2VhcmNoT3B0aW9ucywgZmlyc3RSb3c6IG51bWJlciwgbGFzdFJvdzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9yRWFjaCA9IGNhbGxiYWNrID0+IHtcbiAgICAgICAgICAgIGxldCByb3cgPSBzdGFydFBhcmFncmFwaFBvc2l0aW9uLnJvdztcbiAgICAgICAgICAgIGlmICh0aGlzLmZvckVhY2hJbkxpbmUocm93LCBzdGFydFBhcmFncmFwaFBvc2l0aW9uLmNvbHVtbiwgY2FsbGJhY2spKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChyb3cgPSByb3cgKyAxOyByb3cgPD0gbGFzdFJvdzsgcm93KyspIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mb3JFYWNoSW5MaW5lKHJvdywgMCwgY2FsbGJhY2spKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy53cmFwID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAocm93ID0gZmlyc3RSb3csIGxhc3RSb3cgPSBzdGFydFBhcmFncmFwaFBvc2l0aW9uLnJvdzsgcm93IDw9IGxhc3RSb3c7IHJvdysrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9yRWFjaEluTGluZShyb3csIDAsIGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Rm9yRWFjaEZvckJhY2t3YXJkcyhcbiAgICAgICAgc3RhcnRQYXJhZ3JhcGhQb3NpdGlvbjogQ3Vyc29yUGFyYWdyYXBoLFxuICAgICAgICBvcHRpb25zOiBTZWFyY2hPcHRpb25zLFxuICAgICAgICBmaXJzdFJvdzogbnVtYmVyLFxuICAgICAgICBsYXN0Um93OiBudW1iZXJcbiAgICApOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JFYWNoID0gY2FsbGJhY2sgPT4ge1xuICAgICAgICAgICAgbGV0IHJvdyA9IHN0YXJ0UGFyYWdyYXBoUG9zaXRpb24ucm93O1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9yRWFjaEluTGluZShyb3csIHN0YXJ0UGFyYWdyYXBoUG9zaXRpb24uY29sdW1uLCBjYWxsYmFjaykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHJvdy0tOyByb3cgPj0gZmlyc3RSb3c7IHJvdy0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9yRWFjaEluTGluZShyb3csIE51bWJlci5NQVhfVkFMVUUsIGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMud3JhcCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHJvdyA9IGxhc3RSb3csIGZpcnN0Um93ID0gc3RhcnRQYXJhZ3JhcGhQb3NpdGlvbi5yb3c7IHJvdyA+PSBmaXJzdFJvdzsgcm93LS0pIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mb3JFYWNoSW5MaW5lKHJvdywgTnVtYmVyLk1BWF9WQUxVRSwgY2FsbGJhY2spKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRGb3JFYWNoSW5MaW5lKFxuICAgICAgICByZTogUmVnRXhwIHwgUmVnRXhwW10sXG4gICAgICAgIG9wdGlvbnM6IFNlYXJjaE9wdGlvbnMsXG4gICAgICAgIGJhY2t3YXJkczogYm9vbGVhbixcbiAgICAgICAgc2Vzc2lvbjogRWRpdFNlc3Npb24sXG4gICAgICAgIHNpbmdsZVJlOiBSZWdFeHBcbiAgICApOiB2b2lkIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmUpICYmIG9wdGlvbnMuaXNNdWx0aUxpbmUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9yRWFjaEluTGluZUZvclJlZ0FycmF5KHJlLCBiYWNrd2FyZHMsIHNlc3Npb24pO1xuICAgICAgICB9IGVsc2UgaWYgKGJhY2t3YXJkcykge1xuICAgICAgICAgICAgdGhpcy5zZXRGb3JFYWNoSW5MaW5lRm9yQmFja3dhcmRzKHNlc3Npb24sIHNpbmdsZVJlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdEZvckVhY2hJbkxpbmUoc2Vzc2lvbiwgc2luZ2xlUmUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRGb3JFYWNoSW5MaW5lRm9yUmVnQXJyYXkocmVnZXg6IFJlZ0V4cFtdLCBiYWNrd2FyZHM6IGJvb2xlYW4sIHNlc3Npb246IEVkaXRTZXNzaW9uKSB7XG4gICAgICAgIGxldCByZWd1bGFyTGVuZ3RoID0gcmVnZXgubGVuZ3RoO1xuICAgICAgICB0aGlzLmZvckVhY2hJbkxpbmUgPSAocm93LCBvZmZzZXQsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICBsZXQgc3RhcnRSb3cgPSBiYWNrd2FyZHMgPyByb3cgLSByZWd1bGFyTGVuZ3RoICsgMSA6IHJvdztcbiAgICAgICAgICAgIGlmIChzdGFydFJvdyA8IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgbGluZSA9IHNlc3Npb24uZG9jdW1lbnQuZ2V0TGluZShzZXNzaW9uLmRvY3VtZW50LmxpbmVzLCBzdGFydFJvdyk7XG4gICAgICAgICAgICBsZXQgc3RhcnRJbmRleCA9IGxpbmUuc2VhcmNoKHJlZ2V4WzBdKTtcbiAgICAgICAgICAgIGlmICgoIWJhY2t3YXJkcyAmJiBzdGFydEluZGV4IDwgb2Zmc2V0KSB8fCBzdGFydEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcmVndWxhckxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZG9jdW1lbnQuZ2V0TGluZShzZXNzaW9uLmRvY3VtZW50LmxpbmVzLCBzdGFydFJvdyArIGkpO1xuICAgICAgICAgICAgICAgIGlmIChsaW5lLnNlYXJjaChyZWdleFtpXSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZW5kSW5kZXggPSBsaW5lLm1hdGNoKHJlZ2V4W3JlZ3VsYXJMZW5ndGggLSAxXSlbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGJhY2t3YXJkcyAmJiBlbmRJbmRleCA+IG9mZnNldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjYWxsYmFjayhzdGFydFJvdywgc3RhcnRJbmRleCwgc3RhcnRSb3cgKyByZWd1bGFyTGVuZ3RoIC0gMSwgZW5kSW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRGb3JFYWNoSW5MaW5lRm9yQmFja3dhcmRzKHNlc3Npb246IEVkaXRTZXNzaW9uLCBzaW5nbGVSZTogUmVnRXhwKSB7XG4gICAgICAgIHRoaXMuZm9yRWFjaEluTGluZSA9IChyb3csIGVuZEluZGV4LCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgbGV0IGxpbmUgPSBzZXNzaW9uLmRvY3VtZW50LmdldExpbmUoc2Vzc2lvbi5kb2N1bWVudC5saW5lcywgcm93KTtcbiAgICAgICAgICAgIGxldCBtYXRjaGVzID0gW107XG4gICAgICAgICAgICBsZXQgcmVnZXhSZXN1bHQ6IFJlZ0V4cEV4ZWNBcnJheSxcbiAgICAgICAgICAgICAgICBsYXN0ID0gMDtcbiAgICAgICAgICAgIHNpbmdsZVJlLmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICB3aGlsZSAoKHJlZ2V4UmVzdWx0ID0gc2luZ2xlUmUuZXhlYyhsaW5lKSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgbGVuZ3RoID0gcmVnZXhSZXN1bHRbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGxhc3QgPSByZWdleFJlc3VsdC5pbmRleDtcbiAgICAgICAgICAgICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobGFzdCA+PSBsaW5lLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUmUubGFzdEluZGV4ID0gbGFzdCArIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZWdleFJlc3VsdC5pbmRleCArIGxlbmd0aCA+IGVuZEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtYXRjaGVzLnB1c2gocmVnZXhSZXN1bHQuaW5kZXgsIGxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gbWF0Y2hlcy5sZW5ndGggLSAxOyBpID49IDA7IGkgLT0gMikge1xuICAgICAgICAgICAgICAgIGxldCBjb2x1bW4gPSBtYXRjaGVzW2kgLSAxXTtcbiAgICAgICAgICAgICAgICBsZXQgbGVuZ3RoID0gbWF0Y2hlc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2socm93LCBjb2x1bW4sIHJvdywgY29sdW1uICsgbGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREZWZhdWx0Rm9yRWFjaEluTGluZShzZXNzaW9uOiBFZGl0U2Vzc2lvbiwgc2luZ2xlUmU6IFJlZ0V4cCkge1xuICAgICAgICB0aGlzLmZvckVhY2hJbkxpbmUgPSAocm93LCBzdGFydEluZGV4LCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgbGV0IGxpbmUgPSBzZXNzaW9uLmRvY3VtZW50LmdldExpbmUoc2Vzc2lvbi5kb2N1bWVudC5saW5lcywgcm93KTtcbiAgICAgICAgICAgIGxldCBsYXN0OiBudW1iZXI7XG4gICAgICAgICAgICBsZXQgcmVnZXhSZXN1bHQ6IFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgICAgICAgIHNpbmdsZVJlLmxhc3RJbmRleCA9IHN0YXJ0SW5kZXg7XG4gICAgICAgICAgICB3aGlsZSAoKHJlZ2V4UmVzdWx0ID0gc2luZ2xlUmUuZXhlYyhsaW5lKSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgbGVuZ3RoID0gcmVnZXhSZXN1bHRbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGxhc3QgPSByZWdleFJlc3VsdC5pbmRleDtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2socm93LCBsYXN0LCByb3csIGxhc3QgKyBsZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBzaW5nbGVSZS5sYXN0SW5kZXggPSBsYXN0ICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsYXN0ID49IGxpbmUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG4gICAgfVxufVxuIl19
231
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvZWRpdG9yL2dhZGdldHMvc2VhcmNoL3NlYXJjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFckUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRWhELE1BQU0sT0FBTyxhQUFhO0NBUXpCO0FBRUQsTUFBTSxPQUFPLE1BQU07SUFLZjtRQUNJLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxHQUFHLENBQUMsT0FBc0I7UUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQW9CO1FBQ3JCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUN4QyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzlCLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDWCxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLFFBQVEsQ0FBQyxDQUFDLFFBQWdCLEVBQUUsV0FBbUIsRUFBRSxNQUFjLEVBQUUsU0FBaUIsRUFBRSxFQUFFO1lBQ2xGLFVBQVUsR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLGVBQWUsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLEVBQUUsSUFBSSxlQUFlLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7WUFDM0csSUFDSSxXQUFXLEtBQUssU0FBUztn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QjtRQUNsRSxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsR0FBRyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsRUFBRTtZQUMvQyxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hELElBQUksSUFBWSxDQUFDO1lBQ2pCLElBQUksV0FBNEIsQ0FBQztZQUNqQyxRQUFRLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQztZQUNoQyxPQUFPLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTtnQkFDeEMsSUFBSSxNQUFNLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDbkMsSUFBSSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUM7Z0JBQ3pCLElBQUksUUFBUSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxNQUFNLENBQUMsRUFBRTtvQkFDekMsT0FBTyxJQUFJLENBQUM7aUJBQ2Y7Z0JBQ0QsSUFBSSxDQUFDLE1BQU0sRUFBRTtvQkFDVCxRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7b0JBQy9CLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7d0JBQ3JCLE9BQU8sS0FBSyxDQUFDO3FCQUNoQjtpQkFDSjthQUNKO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQyxDQUFDO0lBQ04sQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3Vyc29yUGFyYWdyYXBoIH0gZnJvbSAnLi4vLi4vcG9zaXRpb25pbmcvY3Vyc29yLXBhcmFncmFwaCc7XG5pbXBvcnQgeyBFZGl0U2Vzc2lvbiB9IGZyb20gJy4uLy4uL2V4ZWN1dGlvbi9lZGl0LnNlc3Npb24nO1xuaW1wb3J0IHsgUmFuZ2UgfSBmcm9tICcuLi8uLi9wb3NpdGlvbmluZy9yYW5nZSc7XG5cbmV4cG9ydCBjbGFzcyBTZWFyY2hPcHRpb25zIHtcbiAgICB0ZXJtPzogc3RyaW5nO1xuICAgIGJhY2t3YXJkcz86IGJvb2xlYW47XG4gICAgc3RhcnQ/OiBDdXJzb3JQYXJhZ3JhcGggfCBSYW5nZTtcbiAgICBza2lwQ3VycmVudD86IGJvb2xlYW47XG4gICAgd3JhcD86IGJvb2xlYW47XG4gICAgaXNNdWx0aUxpbmU/OiBib29sZWFuO1xuICAgIHJlZ2V4PzogUmVnRXhwIHwgKFJlZ0V4cFtdICYgeyBvZmZzZXQ/OiBudW1iZXIgfSk7XG59XG5cbmV4cG9ydCBjbGFzcyBTZWFyY2gge1xuICAgIG9wdGlvbnM6IFNlYXJjaE9wdGlvbnM7XG4gICAgZm9yRWFjaDogKGNhbGxiYWNrOiBhbnkpID0+IHZvaWQ7XG4gICAgZm9yRWFjaEluTGluZTogKHJvdzogbnVtYmVyLCBvZmZzZXQ6IG51bWJlciwgY2FsbGJhY2s6IGFueSkgPT4gYm9vbGVhbjtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICB9XG5cbiAgICBzZXQob3B0aW9uczogU2VhcmNoT3B0aW9ucyk6IHZvaWQge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBmaW5kKHNlc3Npb246IEVkaXRTZXNzaW9uKTogUmFuZ2Uge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgICB0aGlzLnNldE1hdGNoSXRlcmF0b3Ioc2Vzc2lvbiwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGl0ZXJhdG9yID0gdGhpcy5mb3JFYWNoO1xuICAgICAgICBpZiAoIWl0ZXJhdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBmaXJzdFJhbmdlID0gbnVsbDtcbiAgICAgICAgaXRlcmF0b3IoKHN0YXJ0Um93OiBudW1iZXIsIHN0YXJ0Q29sdW1uOiBudW1iZXIsIGVuZFJvdzogbnVtYmVyLCBlbmRDb2x1bW46IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgZmlyc3RSYW5nZSA9IG5ldyBSYW5nZShuZXcgQ3Vyc29yUGFyYWdyYXBoKHN0YXJ0Um93LCBzdGFydENvbHVtbiksIG5ldyBDdXJzb3JQYXJhZ3JhcGgoZW5kUm93LCBlbmRDb2x1bW4pKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdGFydENvbHVtbiA9PT0gZW5kQ29sdW1uICYmXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5zdGFydCBpbnN0YW5jZW9mIFJhbmdlICYmXG4gICAgICAgICAgICAgICAgb3B0aW9ucy5zdGFydC5zdGFydCAmJlxuICAgICAgICAgICAgICAgIG9wdGlvbnMuc2tpcEN1cnJlbnQgIT09IGZhbHNlICYmXG4gICAgICAgICAgICAgICAgZmlyc3RSYW5nZS5pc0VxdWFsKG9wdGlvbnMuc3RhcnQpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBmaXJzdFJhbmdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZmlyc3RSYW5nZTtcbiAgICB9XG5cbiAgICBhc3NlbWJsZVJlZ0V4cChvcHRpb25zOiBTZWFyY2hPcHRpb25zKTogUmVnRXhwIHwgUmVnRXhwW10ge1xuICAgICAgICBsZXQgbmVlZGxlID0gb3B0aW9ucy50ZXJtO1xuXG4gICAgICAgIGlmICghb3B0aW9ucy50ZXJtKSB7XG4gICAgICAgICAgICBvcHRpb25zLnJlZ2V4ID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25zLnJlZ2V4O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IG1vZGlmaWVyID0gJ2dtaSc7XG5cbiAgICAgICAgb3B0aW9ucy5pc011bHRpTGluZSA9IC9bXFxuXFxyXS8udGVzdChuZWVkbGUpO1xuICAgICAgICBpZiAob3B0aW9ucy5pc011bHRpTGluZSkge1xuICAgICAgICAgICAgb3B0aW9ucy5yZWdleCA9IHRoaXMuYXNzZW1ibGVNdWx0aWxpbmVSZWdFeHAobmVlZGxlLCBtb2RpZmllcik7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5yZWdleDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByZWd1bGFyOiBSZWdFeHA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZWd1bGFyID0gbmV3IFJlZ0V4cChuZWVkbGUsIG1vZGlmaWVyKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmVndWxhciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucy5yZWdleCA9IHJlZ3VsYXI7XG4gICAgICAgIHJldHVybiBvcHRpb25zLnJlZ2V4O1xuICAgIH1cblxuICAgIGFzc2VtYmxlTXVsdGlsaW5lUmVnRXhwKG5lZWRsZTogc3RyaW5nLCBtb2RpZmllcjogc3RyaW5nKTogUmVnRXhwW10ge1xuICAgICAgICBjb25zdCBwYXJ0cyA9IG5lZWRsZS5yZXBsYWNlKC9cXHJcXG58XFxyfFxcbi9nLCAnJFxcbl4nKS5zcGxpdCgnXFxuJyk7XG4gICAgICAgIGNvbnN0IHJlZ2V4OiBSZWdFeHBbXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgcGFydHMpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmVnZXgucHVzaChuZXcgUmVnRXhwKGVsZW1lbnQsIG1vZGlmaWVyKSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZWdleDtcbiAgICB9XG5cbiAgICBzZXRNYXRjaEl0ZXJhdG9yKHNlc3Npb246IEVkaXRTZXNzaW9uLCBvcHRpb25zOiBTZWFyY2hPcHRpb25zKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlZ2V4ID0gdGhpcy5hc3NlbWJsZVJlZ0V4cChvcHRpb25zKTtcbiAgICAgICAgaWYgKCFyZWdleCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmFja3dhcmRzID0gb3B0aW9ucy5iYWNrd2FyZHMgPz8gZmFsc2U7XG4gICAgICAgIGNvbnN0IHNraXBDdXJyZW50ID0gb3B0aW9ucy5za2lwQ3VycmVudCA/PyBmYWxzZTtcblxuICAgICAgICBsZXQgc3RhcnQgPSBvcHRpb25zLnN0YXJ0O1xuICAgICAgICBpZiAoIXN0YXJ0KSB7XG4gICAgICAgICAgICBzdGFydCA9IHNlc3Npb24uc2VsZWN0aW9uLnJhbmdlO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN0YXJ0UGFyYWdyYXBoUG9zaXRpb246IEN1cnNvclBhcmFncmFwaDtcbiAgICAgICAgaWYgKHN0YXJ0IGluc3RhbmNlb2YgUmFuZ2UgJiYgc3RhcnQuc3RhcnQpIHtcbiAgICAgICAgICAgIHN0YXJ0UGFyYWdyYXBoUG9zaXRpb24gPSBzdGFydFtza2lwQ3VycmVudCAhPT0gYmFja3dhcmRzID8gJ2VuZCcgOiAnc3RhcnQnXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBmaXJzdFJvdyA9IDA7XG4gICAgICAgIGxldCBsYXN0Um93ID0gc2Vzc2lvbi5kaXNwbGF5RGF0YS5wYXJhZ3JhcGhzLmxlbmd0aCAtIDI7XG5cbiAgICAgICAgdGhpcy5zZXRGb3JFYWNoKGJhY2t3YXJkcywgc3RhcnRQYXJhZ3JhcGhQb3NpdGlvbiwgb3B0aW9ucywgZmlyc3RSb3csIGxhc3RSb3cpO1xuXG4gICAgICAgIGNvbnN0IHNpbmdsZVJlID0gcmVnZXggYXMgUmVnRXhwO1xuICAgICAgICB0aGlzLnNldEZvckVhY2hJbkxpbmUocmVnZXgsIG9wdGlvbnMsIGJhY2t3YXJkcywgc2Vzc2lvbiwgc2luZ2xlUmUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Rm9yRWFjaChcbiAgICAgICAgYmFja3dhcmRzOiBib29sZWFuLFxuICAgICAgICBzdGFydFBhcmFncmFwaFBvc2l0aW9uOiBDdXJzb3JQYXJhZ3JhcGgsXG4gICAgICAgIG9wdGlvbnM6IFNlYXJjaE9wdGlvbnMsXG4gICAgICAgIGZpcnN0Um93OiBudW1iZXIsXG4gICAgICAgIGxhc3RSb3c6IG51bWJlclxuICAgICk6IHZvaWQge1xuICAgICAgICBpZiAoYmFja3dhcmRzKSB7XG4gICAgICAgICAgICB0aGlzLnNldEZvckVhY2hGb3JCYWNrd2FyZHMoc3RhcnRQYXJhZ3JhcGhQb3NpdGlvbiwgb3B0aW9ucywgZmlyc3RSb3csIGxhc3RSb3cpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldERlZmF1bHRGb3JFYWNoKHN0YXJ0UGFyYWdyYXBoUG9zaXRpb24sIG9wdGlvbnMsIGZpcnN0Um93LCBsYXN0Um93KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldERlZmF1bHRGb3JFYWNoKHN0YXJ0UGFyYWdyYXBoUG9zaXRpb246IEN1cnNvclBhcmFncmFwaCwgb3B0aW9uczogU2VhcmNoT3B0aW9ucywgZmlyc3RSb3c6IG51bWJlciwgbGFzdFJvdzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9yRWFjaCA9IGNhbGxiYWNrID0+IHtcbiAgICAgICAgICAgIGxldCByb3cgPSBzdGFydFBhcmFncmFwaFBvc2l0aW9uLnJvdztcbiAgICAgICAgICAgIGlmICh0aGlzLmZvckVhY2hJbkxpbmUocm93LCBzdGFydFBhcmFncmFwaFBvc2l0aW9uLmNvbHVtbiwgY2FsbGJhY2spKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChyb3cgPSByb3cgKyAxOyByb3cgPD0gbGFzdFJvdzsgcm93KyspIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mb3JFYWNoSW5MaW5lKHJvdywgMCwgY2FsbGJhY2spKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9ucy53cmFwID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAocm93ID0gZmlyc3RSb3csIGxhc3RSb3cgPSBzdGFydFBhcmFncmFwaFBvc2l0aW9uLnJvdzsgcm93IDw9IGxhc3RSb3c7IHJvdysrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9yRWFjaEluTGluZShyb3csIDAsIGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Rm9yRWFjaEZvckJhY2t3YXJkcyhcbiAgICAgICAgc3RhcnRQYXJhZ3JhcGhQb3NpdGlvbjogQ3Vyc29yUGFyYWdyYXBoLFxuICAgICAgICBvcHRpb25zOiBTZWFyY2hPcHRpb25zLFxuICAgICAgICBmaXJzdFJvdzogbnVtYmVyLFxuICAgICAgICBsYXN0Um93OiBudW1iZXJcbiAgICApOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mb3JFYWNoID0gY2FsbGJhY2sgPT4ge1xuICAgICAgICAgICAgbGV0IHJvdyA9IHN0YXJ0UGFyYWdyYXBoUG9zaXRpb24ucm93O1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9yRWFjaEluTGluZShyb3csIHN0YXJ0UGFyYWdyYXBoUG9zaXRpb24uY29sdW1uLCBjYWxsYmFjaykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHJvdy0tOyByb3cgPj0gZmlyc3RSb3c7IHJvdy0tKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZm9yRWFjaEluTGluZShyb3csIE51bWJlci5NQVhfVkFMVUUsIGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMud3JhcCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHJvdyA9IGxhc3RSb3csIGZpcnN0Um93ID0gc3RhcnRQYXJhZ3JhcGhQb3NpdGlvbi5yb3c7IHJvdyA+PSBmaXJzdFJvdzsgcm93LS0pIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5mb3JFYWNoSW5MaW5lKHJvdywgTnVtYmVyLk1BWF9WQUxVRSwgY2FsbGJhY2spKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRGb3JFYWNoSW5MaW5lKFxuICAgICAgICByZTogUmVnRXhwIHwgUmVnRXhwW10sXG4gICAgICAgIG9wdGlvbnM6IFNlYXJjaE9wdGlvbnMsXG4gICAgICAgIGJhY2t3YXJkczogYm9vbGVhbixcbiAgICAgICAgc2Vzc2lvbjogRWRpdFNlc3Npb24sXG4gICAgICAgIHNpbmdsZVJlOiBSZWdFeHBcbiAgICApOiB2b2lkIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmUpICYmIG9wdGlvbnMuaXNNdWx0aUxpbmUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0Rm9yRWFjaEluTGluZUZvclJlZ0FycmF5KHJlLCBiYWNrd2FyZHMsIHNlc3Npb24pO1xuICAgICAgICB9IGVsc2UgaWYgKGJhY2t3YXJkcykge1xuICAgICAgICAgICAgdGhpcy5zZXRGb3JFYWNoSW5MaW5lRm9yQmFja3dhcmRzKHNlc3Npb24sIHNpbmdsZVJlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RGVmYXVsdEZvckVhY2hJbkxpbmUoc2Vzc2lvbiwgc2luZ2xlUmUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRGb3JFYWNoSW5MaW5lRm9yUmVnQXJyYXkocmVnZXg6IFJlZ0V4cFtdLCBiYWNrd2FyZHM6IGJvb2xlYW4sIHNlc3Npb246IEVkaXRTZXNzaW9uKSB7XG4gICAgICAgIGxldCByZWd1bGFyTGVuZ3RoID0gcmVnZXgubGVuZ3RoO1xuICAgICAgICB0aGlzLmZvckVhY2hJbkxpbmUgPSAocm93LCBvZmZzZXQsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICBsZXQgc3RhcnRSb3cgPSBiYWNrd2FyZHMgPyByb3cgLSByZWd1bGFyTGVuZ3RoICsgMSA6IHJvdztcbiAgICAgICAgICAgIGlmIChzdGFydFJvdyA8IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgbGluZSA9IHNlc3Npb24uZGlzcGxheURhdGEuZ2V0UGFyYWdyYXBoQ29udGVudChzdGFydFJvdyk7XG4gICAgICAgICAgICBsZXQgc3RhcnRJbmRleCA9IGxpbmUuc2VhcmNoKHJlZ2V4WzBdKTtcbiAgICAgICAgICAgIGlmICgoIWJhY2t3YXJkcyAmJiBzdGFydEluZGV4IDwgb2Zmc2V0KSB8fCBzdGFydEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcmVndWxhckxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGluZSA9IHNlc3Npb24uZGlzcGxheURhdGEuZ2V0UGFyYWdyYXBoQ29udGVudChzdGFydFJvdyArIGkpO1xuICAgICAgICAgICAgICAgIGlmIChsaW5lLnNlYXJjaChyZWdleFtpXSkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZW5kSW5kZXggPSBsaW5lLm1hdGNoKHJlZ2V4W3JlZ3VsYXJMZW5ndGggLSAxXSlbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGJhY2t3YXJkcyAmJiBlbmRJbmRleCA+IG9mZnNldCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjYWxsYmFjayhzdGFydFJvdywgc3RhcnRJbmRleCwgc3RhcnRSb3cgKyByZWd1bGFyTGVuZ3RoIC0gMSwgZW5kSW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRGb3JFYWNoSW5MaW5lRm9yQmFja3dhcmRzKHNlc3Npb246IEVkaXRTZXNzaW9uLCBzaW5nbGVSZTogUmVnRXhwKSB7XG4gICAgICAgIHRoaXMuZm9yRWFjaEluTGluZSA9IChyb3csIGVuZEluZGV4LCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgbGV0IGxpbmUgPSBzZXNzaW9uLmRpc3BsYXlEYXRhLmdldFBhcmFncmFwaENvbnRlbnQocm93KTtcbiAgICAgICAgICAgIGxldCBtYXRjaGVzID0gW107XG4gICAgICAgICAgICBsZXQgcmVnZXhSZXN1bHQ6IFJlZ0V4cEV4ZWNBcnJheSxcbiAgICAgICAgICAgICAgICBsYXN0ID0gMDtcbiAgICAgICAgICAgIHNpbmdsZVJlLmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICB3aGlsZSAoKHJlZ2V4UmVzdWx0ID0gc2luZ2xlUmUuZXhlYyhsaW5lKSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgbGVuZ3RoID0gcmVnZXhSZXN1bHRbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGxhc3QgPSByZWdleFJlc3VsdC5pbmRleDtcbiAgICAgICAgICAgICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAobGFzdCA+PSBsaW5lLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2luZ2xlUmUubGFzdEluZGV4ID0gbGFzdCArIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZWdleFJlc3VsdC5pbmRleCArIGxlbmd0aCA+IGVuZEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtYXRjaGVzLnB1c2gocmVnZXhSZXN1bHQuaW5kZXgsIGxlbmd0aCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gbWF0Y2hlcy5sZW5ndGggLSAxOyBpID49IDA7IGkgLT0gMikge1xuICAgICAgICAgICAgICAgIGxldCBjb2x1bW4gPSBtYXRjaGVzW2kgLSAxXTtcbiAgICAgICAgICAgICAgICBsZXQgbGVuZ3RoID0gbWF0Y2hlc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2socm93LCBjb2x1bW4sIHJvdywgY29sdW1uICsgbGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREZWZhdWx0Rm9yRWFjaEluTGluZShzZXNzaW9uOiBFZGl0U2Vzc2lvbiwgc2luZ2xlUmU6IFJlZ0V4cCkge1xuICAgICAgICB0aGlzLmZvckVhY2hJbkxpbmUgPSAocm93LCBzdGFydEluZGV4LCBjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgbGV0IGxpbmUgPSBzZXNzaW9uLmRpc3BsYXlEYXRhLmdldFBhcmFncmFwaENvbnRlbnQocm93KTtcbiAgICAgICAgICAgIGxldCBsYXN0OiBudW1iZXI7XG4gICAgICAgICAgICBsZXQgcmVnZXhSZXN1bHQ6IFJlZ0V4cEV4ZWNBcnJheTtcbiAgICAgICAgICAgIHNpbmdsZVJlLmxhc3RJbmRleCA9IHN0YXJ0SW5kZXg7XG4gICAgICAgICAgICB3aGlsZSAoKHJlZ2V4UmVzdWx0ID0gc2luZ2xlUmUuZXhlYyhsaW5lKSkpIHtcbiAgICAgICAgICAgICAgICBsZXQgbGVuZ3RoID0gcmVnZXhSZXN1bHRbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGxhc3QgPSByZWdleFJlc3VsdC5pbmRleDtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2socm93LCBsYXN0LCByb3csIGxhc3QgKyBsZW5ndGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBzaW5nbGVSZS5sYXN0SW5kZXggPSBsYXN0ICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsYXN0ID49IGxpbmUubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG4gICAgfVxufVxuIl19
@@ -26,7 +26,7 @@ export class EditorService {
26
26
  this._insertImage$ = new Subject();
27
27
  this._insertLink$ = new Subject();
28
28
  this._endMousePress$ = new Subject();
29
- this._clearSelection$ = new Subject();
29
+ this._disableSelection$ = new Subject();
30
30
  this._changedTableSize$ = new Subject();
31
31
  this._insertTableRows$ = new Subject();
32
32
  this._insertTableColumns$ = new Subject();
@@ -47,6 +47,9 @@ export class EditorService {
47
47
  this._selectAll$ = new Subject();
48
48
  this._removeSelected$ = new Subject();
49
49
  this._keyDown$ = new Subject();
50
+ this._updateEdges$ = new Subject();
51
+ this._insertText$ = new Subject();
52
+ this._blurCustomComponent$ = new Subject();
50
53
  }
51
54
  set styles(value) {
52
55
  this._styles$.next({ ...value });
@@ -135,8 +138,8 @@ export class EditorService {
135
138
  get endMousePress$() {
136
139
  return this._endMousePress$.asObservable();
137
140
  }
138
- get clearSelection$() {
139
- return this._clearSelection$.asObservable();
141
+ get disableSelection$() {
142
+ return this._disableSelection$.asObservable();
140
143
  }
141
144
  get changedTableSize$() {
142
145
  return this._changedTableSize$.asObservable();
@@ -198,6 +201,15 @@ export class EditorService {
198
201
  get keyDown$() {
199
202
  return this._keyDown$.asObservable();
200
203
  }
204
+ get updateEdges$() {
205
+ return this._updateEdges$.asObservable();
206
+ }
207
+ get insertText$() {
208
+ return this._insertText$.asObservable();
209
+ }
210
+ get blurCustomComponent$() {
211
+ return this._blurCustomComponent$.asObservable();
212
+ }
201
213
  setIsViewOnly(value) {
202
214
  this._isViewOnly = value;
203
215
  this._isViewOnly$.next(value);
@@ -241,8 +253,8 @@ export class EditorService {
241
253
  endMousePress() {
242
254
  this._endMousePress$.next();
243
255
  }
244
- clearSelection() {
245
- this._clearSelection$.next();
256
+ disableSelection() {
257
+ this._disableSelection$.next();
246
258
  }
247
259
  openElementSidenav(component, model, contentWidth) {
248
260
  this._toggleSidenav$.next({ open: true, component, data: { model, contentWidth } });
@@ -316,10 +328,19 @@ export class EditorService {
316
328
  keyDown(event) {
317
329
  this._keyDown$.next(event);
318
330
  }
331
+ updateEdges(sessionId) {
332
+ this._updateEdges$.next(sessionId);
333
+ }
334
+ insertText(text) {
335
+ this._insertText$.next(text);
336
+ }
337
+ blurCustomComponent() {
338
+ this._blurCustomComponent$.next();
339
+ }
319
340
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EditorService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
320
341
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EditorService }); }
321
342
  }
322
343
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: EditorService, decorators: [{
323
344
  type: Injectable
324
345
  }] });
325
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi9lZGl0b3IvaW50ZXJhY3Rpb24vZWRpdG9yLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFFLFVBQVUsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQVdqRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQzs7QUFTeEcsTUFBTSxPQUFPLGFBQWE7SUFEMUI7UUFXWSxhQUFRLEdBQW9DLElBQUksZUFBZSxDQUFpQixFQUFFLENBQUMsQ0FBQztRQVFwRixpQkFBWSxHQUE2QixJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUM3RSxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUtwQixvQkFBZSxHQUE0QixJQUFJLGVBQWUsQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUszRSxtQkFBYyxHQUE2QixJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQVEvRSxrQkFBYSxHQUFnRCxJQUFJLGVBQWUsQ0FDcEYsSUFBSSwwQkFBMEIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUN6QyxDQUFDO1FBS00sb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBMEQsQ0FBQztRQVF4Rix1QkFBa0IsR0FBcUIsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQVE5RCxvQkFBZSxHQUEyQixJQUFJLE9BQU8sRUFBaUIsQ0FBQztRQVF2RSxzQkFBaUIsR0FBNkIsSUFBSSxPQUFPLEVBQW1CLENBQUM7UUFRN0UsY0FBUyxHQUFxQixJQUFJLE9BQU8sRUFBVyxDQUFDO1FBS3JELG9CQUFlLEdBQTRCLElBQUksT0FBTyxFQUFrQixDQUFDO1FBS3pFLHlCQUFvQixHQUFpQyxJ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QUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsWUFBWTtRQUNSLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELGtCQUFrQjtRQUNkLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsU0FBUztRQUNMLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGNBQWM7UUFDVixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELE9BQU8sQ0FBQyxLQUFvQjtRQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDOytHQXphUSxhQUFhO21IQUFiLGFBQWE7OzRGQUFiLGFBQWE7a0JBRHpCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEluamVjdGFibGUsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgQnJlYWtUeXBlcyB9IGZyb20gJy4uL2dhZGdldHMvcGFnZS1icmVhay9icmVhay10eXBlcy5lbnVtJztcbmltcG9ydCB7IEVkZ2VUeXBlIH0gZnJvbSAnLi4vY29tcG9uZW50cy9lZGdlcy9lZGdlLXR5cGUuZW51bSc7XG5pbXBvcnQgeyBFbGVtZW50RGF0YU1vZGVsIH0gZnJvbSAnLi4vY29tcG9uZW50cy9leHRlcm5hbC1lbGVtZW50L21vZGVscy9lbGVtZW50LWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgRWxlbWVudE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9lbGVtZW50Lm1vZGVsJztcbmltcG9ydCB7IEV4dGVybmFsU2lkZW5hdkludGVyZmFjZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvZXh0ZXJuYWwtZWxlbWVudC9leHRlcm5hbC1zaWRlbmF2LmludGVyZmFjZSc7XG5pbXBvcnQgeyBJbWFnZURhdGFNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW1hZ2UtZGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBJbWFnZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9pbWFnZS5tb2RlbCc7XG5pbXBvcnQgeyBJVG9vbGJhclN0eWxlcyB9IGZyb20gJy4uL2NvbnRlbnQvZGlzcGxheS1kYXRhL3Rvb2xiYXItc3R5bGVzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBOdW1iZXJpbmdMZXZlbE1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9udW1iZXJpbmctbGV2ZWwubW9kZWwnO1xuaW1wb3J0IHsgT3BlcmF0aW9uc0hpc3RvcnlJbmZvTW9kZWwgfSBmcm9tICcuLi8uLi9lZGl0b3IvZ2FkZ2V0cy9oaXN0b3J5L29wZXJhdGlvbnMtaGlzdG9yeS1pbmZvLm1vZGVsJztcbmltcG9ydCB7IFBhcmFncmFwaFN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3BhcmFncmFwaC1zdHlsZS5tb2RlbCc7XG5pbXBvcnQgeyBSZXBsYWNlIH0gZnJvbSAnLi4vZ2FkZ2V0cy9zZWFyY2gvcmVwbGFjZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUmVzaXplVGFibGVDb2x1bW5zTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3Jlc2l6ZS10YWJsZS1jb2x1bW5zLm1vZGVsJztcbmltcG9ydCB7IFNlYXJjaEl0ZXJhdGlvbiB9IGZyb20gJy4uL2dhZGdldHMvc2VhcmNoL3NlYXJjaC1pdGVyYXRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFNlYXJjaE9wdGlvbnMgfSBmcm9tICcuLi9nYWRnZXRzL3NlYXJjaC9zZWFyY2gnO1xuaW1wb3J0IHsgVGV4dFN0eWxlTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL3RleHQtc3R5bGUubW9kZWwnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRWRpdG9yU2VydmljZSB7XG4gICAgc2V0IHN0eWxlcyh2YWx1ZTogSVRvb2xiYXJTdHlsZXMpIHtcbiAgICAgICAgdGhpcy5fc3R5bGVzJC5uZXh0KHsgLi4udmFsdWUgfSk7XG4gICAgfVxuICAgIGdldCBzdHlsZXMoKTogSVRvb2xiYXJTdHlsZXMge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3R5bGVzJC52YWx1ZTtcbiAgICB9XG4gICAgZ2V0IHN0eWxlcyQoKTogT2JzZXJ2YWJsZTxJVG9vbGJhclN0eWxlcz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3R5bGVzJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfc3R5bGVzJDogQmVoYXZpb3JTdWJqZWN0PElUb29sYmFyU3R5bGVzPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVRvb2xiYXJTdHlsZXM+KHt9KTtcblxuICAgIGdldCBpc1ZpZXdPbmx5JCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVmlld09ubHkkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBnZXQgaXNWaWV3T25seSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVmlld09ubHk7XG4gICAgfVxuICAgIHByaXZhdGUgX2lzVmlld09ubHkkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICBwcml2YXRlIF9pc1ZpZXdPbmx5ID0gZmFsc2U7XG5cbiAgICBnZXQgY2xpcGJvYXJkRGF0YSQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NsaXBib2FyZERhdGEkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9jbGlwYm9hcmREYXRhJDogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuXG4gICAgZ2V0IGhhc1NlbGVjdGlvbiQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oYXNTZWxlY3Rpb24kLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9oYXNTZWxlY3Rpb24kOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAgIHNldCBoaXN0b3J5SW5mbyh2YWx1ZTogT3BlcmF0aW9uc0hpc3RvcnlJbmZvTW9kZWwpIHtcbiAgICAgICAgdGhpcy5faGlzdG9yeUluZm8kLm5leHQodmFsdWUpO1xuICAgIH1cbiAgICBnZXQgaGlzdG9yeUluZm8kKCk6IE9ic2VydmFibGU8T3BlcmF0aW9uc0hpc3RvcnlJbmZvTW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hpc3RvcnlJbmZvJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaGlzdG9yeUluZm8kOiBCZWhhdmlvclN1YmplY3Q8T3BlcmF0aW9uc0hpc3RvcnlJbmZvTW9kZWw+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxPcGVyYXRpb25zSGlzdG9yeUluZm9Nb2RlbD4oXG4gICAgICAgIG5ldyBPcGVyYXRpb25zSGlzdG9yeUluZm9Nb2RlbCgtMSwgLTEpXG4gICAgKTtcblxuICAgIGdldCB0b2dnbGVTaWRlbmF2JCgpOiBPYnNlcnZhYmxlPHsgb3BlbjogYm9vbGVhbjsgY29tcG9uZW50OiBUeXBlPGFueT47IGRhdGE/OiBvYmplY3QgfT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdG9nZ2xlU2lkZW5hdiQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3RvZ2dsZVNpZGVuYXYkID0gbmV3IFN1YmplY3Q8eyBvcGVuOiBib29sZWFuOyBjb21wb25lbnQ6IFR5cGU8YW55PjsgZGF0YT86IG9iamVjdCB9PigpO1xuXG4gICAgc2V0IG9wZW5TZWFyY2hEaWFsb2codmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fb3BlblNlYXJjaERpYWxvZyQubmV4dCh2YWx1ZSk7XG4gICAgfVxuICAgIGdldCBvcGVuU2VhcmNoRGlhbG9nJCgpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wZW5TZWFyY2hEaWFsb2ckLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9vcGVuU2VhcmNoRGlhbG9nJDogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgICBzZXQgc2VhcmNoT3B0aW9ucyh2YWx1ZTogU2VhcmNoT3B0aW9ucykge1xuICAgICAgICB0aGlzLl9zZWFyY2hPcHRpb25zJC5uZXh0KHZhbHVlKTtcbiAgICB9XG4gICAgZ2V0IHNlYXJjaE9wdGlvbnMkKCk6IE9ic2VydmFibGU8U2VhcmNoT3B0aW9ucz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoT3B0aW9ucyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3NlYXJjaE9wdGlvbnMkOiBTdWJqZWN0PFNlYXJjaE9wdGlvbnM+ID0gbmV3IFN1YmplY3Q8U2VhcmNoT3B0aW9ucz4oKTtcblxuICAgIHNldCBzZWFyY2hJdGVyYXRpb24odmFsdWU6IFNlYXJjaEl0ZXJhdGlvbikge1xuICAgICAgICB0aGlzLl9zZWFyY2hJdGVyYXRpb24kLm5leHQodmFsdWUpO1xuICAgIH1cbiAgICBnZXQgc2VhcmNoSXRlcmF0aW9uJCgpOiBPYnNlcnZhYmxlPFNlYXJjaEl0ZXJhdGlvbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VhcmNoSXRlcmF0aW9uJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfc2VhcmNoSXRlcmF0aW9uJDogU3ViamVjdDxTZWFyY2hJdGVyYXRpb24+ID0gbmV3IFN1YmplY3Q8U2VhcmNoSXRlcmF0aW9uPigpO1xuXG4gICAgc2V0IHJlcGxhY2UodmFsdWU6IFJlcGxhY2UpIHtcbiAgICAgICAgdGhpcy5fcmVwbGFjZSQubmV4dCh2YWx1ZSk7XG4gICAgfVxuICAgIGdldCByZXBsYWNlJCgpOiBPYnNlcnZhYmxlPFJlcGxhY2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlcGxhY2UkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9yZXBsYWNlJDogU3ViamVjdDxSZXBsYWNlPiA9IG5ldyBTdWJqZWN0PFJlcGxhY2U+KCk7XG5cbiAgICBnZXQgc2V0VGV4dFN0eWxlcyQoKTogT2JzZXJ2YWJsZTxUZXh0U3R5bGVNb2RlbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2V0VGV4dFN0eWxlcyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3NldFRleHRTdHlsZXMkOiBTdWJqZWN0PFRleHRTdHlsZU1vZGVsPiA9IG5ldyBTdWJqZWN0PFRleHRTdHlsZU1vZGVsPigpO1xuXG4gICAgZ2V0IHNldFBhcmFncmFwaFN0eWxlcyQoKTogT2JzZXJ2YWJsZTxQYXJhZ3JhcGhTdHlsZU1vZGVsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZXRQYXJhZ3JhcGhTdHlsZXMkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9zZXRQYXJhZ3JhcGhTdHlsZXMkOiBTdWJqZWN0PFBhcmFncmFwaFN0eWxlTW9kZWw+ID0gbmV3IFN1YmplY3Q8UGFyYWdyYXBoU3R5bGVNb2RlbD4oKTtcblxuICAgIGdldCBzZXROdW1iZXJpbmdUZW1wbGF0ZVR5cGUkKCk6IE9ic2VydmFibGU8TnVtYmVyaW5nTGV2ZWxNb2RlbFtdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZXROdW1iZXJpbmdUZW1wbGF0ZVR5cGUkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9zZXROdW1iZXJpbmdUZW1wbGF0ZVR5cGUkOiBTdWJqZWN0PE51bWJlcmluZ0xldmVsTW9kZWxbXT4gPSBuZXcgU3ViamVjdDxOdW1iZXJpbmdMZXZlbE1vZGVsW10+KCk7XG5cbiAgICBnZXQgcmVtb3ZlTnVtYmVyaW5ncyQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW1vdmVOdW1iZXJpbmdzJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfcmVtb3ZlTnVtYmVyaW5ncyQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgZ2V0IHNldEltYWdlU3R5bGUkKCk6IE9ic2VydmFibGU8SW1hZ2VNb2RlbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hhbmdlSW1hZ2VTdHlsZSQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX2NoYW5nZUltYWdlU3R5bGUkID0gbmV3IFN1YmplY3Q8SW1hZ2VNb2RlbD4oKTtcblxuICAgIGdldCBjaGFuZ2VFbGVtZW50U3R5bGUkKCk6IE9ic2VydmFibGU8RWxlbWVudE1vZGVsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jaGFuZ2VFbGVtZW50U3R5bGUkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9jaGFuZ2VFbGVtZW50U3R5bGUkID0gbmV3IFN1YmplY3Q8RWxlbWVudE1vZGVsPigpO1xuXG4gICAgZ2V0IGNyZWF0ZUN1c3RvbUNvbXBvbmVudCQoKTogT2JzZXJ2YWJsZTxFbGVtZW50RGF0YU1vZGVsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jcmVhdGVDdXN0b21Db21wb25lbnQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9jcmVhdGVDdXN0b21Db21wb25lbnQkOiBTdWJqZWN0PEVsZW1lbnREYXRhTW9kZWw+ID0gbmV3IFN1YmplY3Q8RWxlbWVudERhdGFNb2RlbD4oKTtcblxuICAgIGdldCBpbnNlcnRCcmVhayQoKTogT2JzZXJ2YWJsZTxCcmVha1R5cGVzPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnNlcnRCcmVhayQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX2luc2VydEJyZWFrJDogU3ViamVjdDxCcmVha1R5cGVzPiA9IG5ldyBTdWJqZWN0PEJyZWFrVHlwZXM+KCk7XG5cbiAgICBnZXQgaW5zZXJ0SW1hZ2UkKCk6IE9ic2VydmFibGU8SW1hZ2VEYXRhTW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc2VydEltYWdlJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaW5zZXJ0SW1hZ2UkID0gbmV3IFN1YmplY3Q8SW1hZ2VEYXRhTW9kZWw+KCk7XG5cbiAgICBnZXQgaW5zZXJ0TGluayQoKTogT2JzZXJ2YWJsZTx7IHRleHQ6IHN0cmluZzsgbGluazogc3RyaW5nIH0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc2VydExpbmskLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pbnNlcnRMaW5rJCA9IG5ldyBTdWJqZWN0PHsgdGV4dDogc3RyaW5nOyBsaW5rOiBzdHJpbmcgfT4oKTtcblxuICAgIGdldCBlbmRNb3VzZVByZXNzJCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuZE1vdXNlUHJlc3MkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9lbmRNb3VzZVByZXNzJDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBnZXQgY2xlYXJTZWxlY3Rpb24kKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2xlYXJTZWxlY3Rpb24kLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9jbGVhclNlbGVjdGlvbiQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgZ2V0IGNoYW5nZWRUYWJsZVNpemUkKCk6IE9ic2VydmFibGU8eyBpbnNlcnRJbmRleDogbnVtYmVyOyBzZXNzaW9uSWQ6IG51bWJlciB9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jaGFuZ2VkVGFibGVTaXplJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfY2hhbmdlZFRhYmxlU2l6ZSQgPSBuZXcgU3ViamVjdDx7IGluc2VydEluZGV4OiBudW1iZXI7IHNlc3Npb25JZDogbnVtYmVyIH0+KCk7XG5cbiAgICBnZXQgaW5zZXJ0VGFibGVSb3dzJCgpOiBPYnNlcnZhYmxlPHtcbiAgICAgICAgaW5zZXJ0SW5kZXg6IG51bWJlcjtcbiAgICAgICAgcm93c0NvdW50OiBudW1iZXI7XG4gICAgICAgIHRhcmdldEluZGV4OiBudW1iZXI7XG4gICAgICAgIGluaGVyaXRJbmRleDogbnVtYmVyO1xuICAgICAgICBzZXNzaW9uSWQ6IG51bWJlcjtcbiAgICB9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnNlcnRUYWJsZVJvd3MkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pbnNlcnRUYWJsZVJvd3MkID0gbmV3IFN1YmplY3Q8e1xuICAgICAgICBpbnNlcnRJbmRleDogbnVtYmVyO1xuICAgICAgICByb3dzQ291bnQ6IG51bWJlcjtcbiAgICAgICAgdGFyZ2V0SW5kZXg6IG51bWJlcjtcbiAgICAgICAgaW5oZXJpdEluZGV4OiBudW1iZXI7XG4gICAgICAgIHNlc3Npb25JZDogbnVtYmVyO1xuICAgIH0+KCk7XG5cbiAgICBnZXQgaW5zZXJ0VGFibGVDb2x1bW5zJCgpOiBPYnNlcnZhYmxlPHtcbiAgICAgICAgaW5zZXJ0SW5kZXg6IG51bWJlcjtcbiAgICAgICAgY29sdW1uc0NvdW50OiBudW1iZXI7XG4gICAgICAgIHRhcmdldEluZGV4OiBudW1iZXI7XG4gICAgICAgIGluaGVyaXRJbmRleDogbnVtYmVyO1xuICAgICAgICBzZXNzaW9uSWQ6IG51bWJlcjtcbiAgICB9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnNlcnRUYWJsZUNvbHVtbnMkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pbnNlcnRUYWJsZUNvbHVtbnMkID0gbmV3IFN1YmplY3Q8e1xuICAgICAgICBpbnNlcnRJbmRleDogbnVtYmVyO1xuICAgICAgICBjb2x1bW5zQ291bnQ6IG51bWJlcjtcbiAgICAgICAgdGFyZ2V0SW5kZXg6IG51bWJlcjtcbiAgICAgICAgaW5oZXJpdEluZGV4OiBudW1iZXI7XG4gICAgICAgIHNlc3Npb25JZDogbnVtYmVyO1xuICAgIH0+KCk7XG5cbiAgICBnZXQgcmVtb3ZlVGFibGVSb3dzJCgpOiBPYnNlcnZhYmxlPHsgaW5zZXJ0SW5kZXg6IG51bWJlcjsgc3RhcnRJbmRleDogbnVtYmVyOyBlbmRJbmRleDogbnVtYmVyOyBzZXNzaW9uSWQ6IG51bWJlciB9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW1vdmVUYWJsZVJvd3MkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9yZW1vdmVUYWJsZVJvd3MkID0gbmV3IFN1YmplY3Q8eyBpbnNlcnRJbmRleDogbnVtYmVyOyBzdGFydEluZGV4OiBudW1iZXI7IGVuZEluZGV4OiBudW1iZXI7IHNlc3Npb25JZDogbnVtYmVyIH0+KCk7XG5cbiAgICBnZXQgcmVtb3ZlVGFibGVDb2x1bW5zJCgpOiBPYnNlcnZhYmxlPHsgaW5zZXJ0SW5kZXg6IG51bWJlcjsgc3RhcnRJbmRleDogbnVtYmVyOyBlbmRJbmRleDogbnVtYmVyOyBzZXNzaW9uSWQ6IG51bWJlciB9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW1vdmVUYWJsZUNvbHVtbnMkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9yZW1vdmVUYWJsZUNvbHVtbnMkID0gbmV3IFN1YmplY3Q8eyBpbnNlcnRJbmRleDogbnVtYmVyOyBzdGFydEluZGV4OiBudW1iZXI7IGVuZEluZGV4OiBudW1iZXI7IHNlc3Npb25JZDogbnVtYmVyIH0+KCk7XG5cbiAgICBnZXQgcmVtb3ZlSW1hZ2UkKCk6IE9ic2VydmFibGU8eyBpbnNlcnRJbmRleDogbnVtYmVyIH0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlbW92ZUltYWdlJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfcmVtb3ZlSW1hZ2UkID0gbmV3IFN1YmplY3Q8eyBpbnNlcnRJbmRleDogbnVtYmVyIH0+KCk7XG5cbiAgICBnZXQgcmVzaXplVGFibGVDb2x1bW5zJCgpOiBPYnNlcnZhYmxlPHtcbiAgICAgICAgcmVzaXplVGFibGVDb2x1bW5zOiBSZXNpemVUYWJsZUNvbHVtbnNNb2RlbDtcbiAgICAgICAgc2Vzc2lvbklkOiBudW1iZXI7XG4gICAgfT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVzaXplVGFibGVDb2x1bW5zJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfcmVzaXplVGFibGVDb2x1bW5zJCA9IG5ldyBTdWJqZWN0PHtcbiAgICAgICAgcmVzaXplVGFibGVDb2x1bW5zOiBSZXNpemVUYWJsZUNvbHVtbnNNb2RlbDtcbiAgICAgICAgc2Vzc2lvbklkOiBudW1iZXI7XG4gICAgfT4oKTtcblxuICAgIGdldCBpbnNlcnRUYWJsZSQoKTogT2JzZXJ2YWJsZTx7IHJvd3M6IG51bWJlcjsgY29sdW1uczogbnVtYmVyIH0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc2VydFRhYmxlJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaW5zZXJ0VGFibGUkID0gbmV3IFN1YmplY3Q8eyByb3dzOiBudW1iZXI7IGNvbHVtbnM6IG51bWJlciB9PigpO1xuXG4gICAgZ2V0IHJlbmRlcmVyVXBkYXRlZCQoKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlcmVyVXBkYXRlZCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3JlbmRlcmVyVXBkYXRlZCQgPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XG5cbiAgICBnZXQgZWRnZUVsZW1lbnRDb3B5VXBkYXRlZCQoKTogT2JzZXJ2YWJsZTx7IG5ld0VsZW1lbnRDb3B5OiBIVE1MRWxlbWVudDsgcGFnZTogbnVtYmVyIH0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VkZ2VFbGVtZW50Q29weVVwZGF0ZWQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9lZGdlRWxlbWVudENvcHlVcGRhdGVkJCA9IG5ldyBTdWJqZWN0PHtcbiAgICAgICAgbmV3RWxlbWVudENvcHk6IEhUTUxFbGVtZW50O1xuICAgICAgICBwYWdlOiBudW1iZXI7XG4gICAgfT4oKTtcblxuICAgIGdldCBjaGFuZ2VkRWRnZUhlaWdodCQoKTogT2JzZXJ2YWJsZTxFZGdlVHlwZT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hhbmdlZEVkZ2VIZWlnaHQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9jaGFuZ2VkRWRnZUhlaWdodCQ6IFN1YmplY3Q8RWRnZVR5cGU+ID0gbmV3IFN1YmplY3Q8RWRnZVR5cGU+KCk7XG5cbiAgICBnZXQgcmVkbyQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWRvJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfcmVkbyQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgZ2V0IHVuZG8kKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdW5kbyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3VuZG8kID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGdldCBwcmludCQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmludCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3ByaW50JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBnZXQgY3V0U2VsZWN0ZWQkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3V0U2VsZWN0ZWQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9jdXRTZWxlY3RlZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgZ2V0IGNvcHlTZWxlY3RlZCQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb3B5U2VsZWN0ZWQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9jb3B5U2VsZWN0ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGdldCBwYXN0ZUZyb21DbGlwYm9hcmQkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcGFzdGVGcm9tQ2xpcGJvYXJkJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfcGFzdGVGcm9tQ2xpcGJvYXJkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBnZXQgc2VsZWN0QWxsJCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdEFsbCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3NlbGVjdEFsbCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgZ2V0IHJlbW92ZVNlbGVjdGVkJCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlbW92ZVNlbGVjdGVkJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfcmVtb3ZlU2VsZWN0ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGdldCBrZXlEb3duJCgpOiBPYnNlcnZhYmxlPEtleWJvYXJkRXZlbnQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2tleURvd24kLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9rZXlEb3duJCA9IG5ldyBTdWJqZWN0PEtleWJvYXJkRXZlbnQ+KCk7XG5cbiAgICBzZXRJc1ZpZXdPbmx5KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzVmlld09ubHkgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5faXNWaWV3T25seSQubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgc2V0SGFzU2VsZWN0aW9uKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2hhc1NlbGVjdGlvbiQubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgc2V0Q2xpcGJvYXJkRGF0YSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NsaXBib2FyZERhdGEkLm5leHQodmFsdWUpO1xuICAgIH1cblxuICAgIHNldFRleHRTdHlsZXModmFsdWU6IFRleHRTdHlsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NldFRleHRTdHlsZXMkLm5leHQodmFsdWUpO1xuICAgIH1cblxuICAgIHNldFBhcmFncmFwaFN0eWxlcyh2YWx1ZTogUGFyYWdyYXBoU3R5bGVNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZXRQYXJhZ3JhcGhTdHlsZXMkLm5leHQodmFsdWUpO1xuICAgIH1cblxuICAgIHNldE51bWJlcmluZ1RlbXBsYXRlVHlwZSh2YWx1ZTogTnVtYmVyaW5nTGV2ZWxNb2RlbFtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NldE51bWJlcmluZ1RlbXBsYXRlVHlwZSQubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlTnVtYmVyaW5ncygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlTnVtYmVyaW5ncyQubmV4dCgpO1xuICAgIH1cblxuICAgIGNoYW5nZUltYWdlU3R5bGUodmFsdWU6IEltYWdlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2hhbmdlSW1hZ2VTdHlsZSQubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgY2hhbmdlRWxlbWVudFN0eWxlKHZhbHVlOiBFbGVtZW50TW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2hhbmdlRWxlbWVudFN0eWxlJC5uZXh0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBjcmVhdGVDdXN0b21Db21wb25lbnQobW9kZWw6IEVsZW1lbnREYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3JlYXRlQ3VzdG9tQ29tcG9uZW50JC5uZXh0KG1vZGVsKTtcbiAgICB9XG5cbiAgICBpbnNlcnRCcmVhayh2YWx1ZTogQnJlYWtUeXBlcyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbnNlcnRCcmVhayQubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgaW5zZXJ0SW1hZ2UoaW1hZ2VEYXRhOiBJbWFnZURhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbnNlcnRJbWFnZSQubmV4dChpbWFnZURhdGEpO1xuICAgIH1cblxuICAgIGluc2VydExpbmsodGV4dDogc3RyaW5nLCBsaW5rOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5zZXJ0TGluayQubmV4dCh7IHRleHQsIGxpbmsgfSk7XG4gICAgfVxuXG4gICAgZW5kTW91c2VQcmVzcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZW5kTW91c2VQcmVzcyQubmV4dCgpO1xuICAgIH1cblxuICAgIGNsZWFyU2VsZWN0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jbGVhclNlbGVjdGlvbiQubmV4dCgpO1xuICAgIH1cblxuICAgIG9wZW5FbGVtZW50U2lkZW5hdihjb21wb25lbnQ6IFR5cGU8RXh0ZXJuYWxTaWRlbmF2SW50ZXJmYWNlPiwgbW9kZWw6IEVsZW1lbnRNb2RlbCwgY29udGVudFdpZHRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdG9nZ2xlU2lkZW5hdiQubmV4dCh7IG9wZW46IHRydWUsIGNvbXBvbmVudCwgZGF0YTogeyBtb2RlbCwgY29udGVudFdpZHRoIH0gfSk7XG4gICAgfVxuXG4gICAgb3BlblNpZGVuYXYoY29tcG9uZW50OiBUeXBlPGFueT4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdG9nZ2xlU2lkZW5hdiQubmV4dCh7IG9wZW46IHRydWUsIGNvbXBvbmVudCB9KTtcbiAgICB9XG5cbiAgICBjbG9zZVNpZGVuYXYoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RvZ2dsZVNpZGVuYXYkLm5leHQoeyBvcGVuOiBmYWxzZSwgY29tcG9uZW50OiBudWxsIH0pO1xuICAgIH1cblxuICAgIGNoYW5nZWRUYWJsZVNpemUoaW5zZXJ0SW5kZXg6IG51bWJlciwgc2Vzc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2hhbmdlZFRhYmxlU2l6ZSQubmV4dCh7IGluc2VydEluZGV4LCBzZXNzaW9uSWQgfSk7XG4gICAgfVxuXG4gICAgaW5zZXJ0VGFibGVSb3dzKGluc2VydEluZGV4OiBudW1iZXIsIHJvd3NDb3VudDogbnVtYmVyLCB0YXJnZXRJbmRleDogbnVtYmVyLCBpbmhlcml0SW5kZXg6IG51bWJlciwgc2Vzc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5zZXJ0VGFibGVSb3dzJC5uZXh0KHsgaW5zZXJ0SW5kZXgsIHJvd3NDb3VudCwgdGFyZ2V0SW5kZXgsIGluaGVyaXRJbmRleCwgc2Vzc2lvbklkIH0pO1xuICAgIH1cblxuICAgIGluc2VydFRhYmxlQ29sdW1ucyhpbnNlcnRJbmRleDogbnVtYmVyLCBjb2x1bW5zQ291bnQ6IG51bWJlciwgdGFyZ2V0SW5kZXg6IG51bWJlciwgaW5oZXJpdEluZGV4OiBudW1iZXIsIHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2luc2VydFRhYmxlQ29sdW1ucyQubmV4dCh7IGluc2VydEluZGV4LCBjb2x1bW5zQ291bnQsIHRhcmdldEluZGV4LCBpbmhlcml0SW5kZXgsIHNlc3Npb25JZCB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVUYWJsZVJvd3MoaW5zZXJ0SW5kZXg6IG51bWJlciwgc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyLCBzZXNzaW9uSWQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZW1vdmVUYWJsZVJvd3MkLm5leHQoeyBpbnNlcnRJbmRleCwgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHNlc3Npb25JZCB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVUYWJsZUNvbHVtbnMoaW5zZXJ0SW5kZXg6IG51bWJlciwgc3RhcnRJbmRleDogbnVtYmVyLCBlbmRJbmRleDogbnVtYmVyLCBzZXNzaW9uSWQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZW1vdmVUYWJsZUNvbHVtbnMkLm5leHQoeyBpbnNlcnRJbmRleCwgc3RhcnRJbmRleCwgZW5kSW5kZXgsIHNlc3Npb25JZCB9KTtcbiAgICB9XG5cbiAgICByZW1vdmVJbWFnZShpbnNlcnRJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlbW92ZUltYWdlJC5uZXh0KHsgaW5zZXJ0SW5kZXggfSk7XG4gICAgfVxuXG4gICAgcmVzaXplVGFibGVDb2x1bW5zKHJlc2l6ZVRhYmxlQ29sdW1uczogUmVzaXplVGFibGVDb2x1bW5zTW9kZWwsIHNlc3Npb25JZDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuX3Jlc2l6ZVRhYmxlQ29sdW1ucyQubmV4dCh7XG4gICAgICAgICAgICByZXNpemVUYWJsZUNvbHVtbnMsXG4gICAgICAgICAgICBzZXNzaW9uSWRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaW5zZXJ0VGFibGUodGFibGVEYXRhOiB7IHJvd3M6IG51bWJlcjsgY29sdW1uczogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5zZXJ0VGFibGUkLm5leHQodGFibGVEYXRhKTtcbiAgICB9XG5cbiAgICByZW5kZXJlclVwZGF0ZWQoc2Vzc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVuZGVyZXJVcGRhdGVkJC5uZXh0KHNlc3Npb25JZCk7XG4gICAgfVxuXG4gICAgZWRnZUVsZW1lbnRDb3B5VXBkYXRlZChuZXdFbGVtZW50Q29weSwgcGFnZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9lZGdlRWxlbWVudENvcHlVcGRhdGVkJC5uZXh0KHsgbmV3RWxlbWVudENvcHksIHBhZ2UgfSk7XG4gICAgfVxuXG4gICAgY2hhbmdlZEVkZ2VIZWlnaHQodHlwZTogRWRnZVR5cGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2hhbmdlZEVkZ2VIZWlnaHQkLm5leHQodHlwZSk7XG4gICAgfVxuXG4gICAgdW5kbygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdW5kbyQubmV4dCgpO1xuICAgIH1cblxuICAgIHJlZG8oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlZG8kLm5leHQoKTtcbiAgICB9XG5cbiAgICBwcmludCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcHJpbnQkLm5leHQoKTtcbiAgICB9XG5cbiAgICBjdXRTZWxlY3RlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3V0U2VsZWN0ZWQkLm5leHQoKTtcbiAgICB9XG5cbiAgICBjb3B5U2VsZWN0ZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvcHlTZWxlY3RlZCQubmV4dCgpO1xuICAgIH1cblxuICAgIHBhc3RlRnJvbUNsaXBib2FyZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcGFzdGVGcm9tQ2xpcGJvYXJkJC5uZXh0KCk7XG4gICAgfVxuXG4gICAgc2VsZWN0QWxsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZWxlY3RBbGwkLm5leHQoKTtcbiAgICB9XG5cbiAgICByZW1vdmVTZWxlY3RlZCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlU2VsZWN0ZWQkLm5leHQoKTtcbiAgICB9XG5cbiAgICBrZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2tleURvd24kLm5leHQoZXZlbnQpO1xuICAgIH1cbn1cbiJdfQ==
346
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbm9kZXIvc3JjL2xpYi9lZGl0b3IvaW50ZXJhY3Rpb24vZWRpdG9yLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUQsT0FBTyxFQUFFLFVBQVUsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQVdqRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQzs7QUFTeEcsTUFBTSxPQUFPLGFBQWE7SUFEMUI7UUFXWSxhQUFRLEdBQW9DLElBQUksZUFBZSxDQUFpQixFQUFFLENBQUMsQ0FBQztRQVFwRixpQkFBWSxHQUE2QixJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUM3RSxnQkFBVyxHQUFHLEtBQUssQ0FBQztRQUtwQixvQkFBZSxHQUE0QixJQUFJLGVBQWUsQ0FBUyxFQUFFLENBQUMsQ0FBQztRQUszRSxtQkFBYyxHQUE2QixJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQztRQVEvRSxrQkFBYSxHQUFnRCxJQUFJLGVBQWUsQ0FDcEYsSUFBSSwwQkFBMEIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUN6QyxDQUFDO1FBS00sb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBMEQsQ0FBQztRQVF4Rix1QkFBa0IsR0FBcUIsSUFBSSxPQUFPLEVBQVcsQ0FBQztRQVE5RCxvQkFBZSxHQUEyQixJQUFJLE9BQU8sRUFBaUIsQ0FBQztRQVF2RSxzQkFBaUIsR0FBNkIsSUFBSSxPQUFPLEVBQW1CLENBQUM7UUFRN0UsY0FBUyxHQUFxQixJQUFJLE9BQU8sRUFBVyxDQUFDO1FBS3JELG9CQUFlLEdBQTRCLElBQUksT0FBTyxFQUFrQixDQUFDO1FBS3pFLHlCQUFvQixHQUFpQyxJ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QUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRCxtQkFBbUI7UUFDZixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDdEMsQ0FBQzsrR0FwY1EsYUFBYTttSEFBYixhQUFhOzs0RkFBYixhQUFhO2tCQUR6QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEJyZWFrVHlwZXMgfSBmcm9tICcuLi9nYWRnZXRzL3BhZ2UtYnJlYWsvYnJlYWstdHlwZXMuZW51bSc7XG5pbXBvcnQgeyBFZGdlVHlwZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvZWRnZXMvZWRnZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgRWxlbWVudERhdGFNb2RlbCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZXh0ZXJuYWwtZWxlbWVudC9tb2RlbHMvZWxlbWVudC1kYXRhLm1vZGVsJztcbmltcG9ydCB7IEVsZW1lbnRNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvZWxlbWVudC5tb2RlbCc7XG5pbXBvcnQgeyBFeHRlcm5hbFNpZGVuYXZJbnRlcmZhY2UgfSBmcm9tICcuLi9jb21wb25lbnRzL2V4dGVybmFsLWVsZW1lbnQvZXh0ZXJuYWwtc2lkZW5hdi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSW1hZ2VEYXRhTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL2ltYWdlLWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgSW1hZ2VNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvaW1hZ2UubW9kZWwnO1xuaW1wb3J0IHsgSVRvb2xiYXJTdHlsZXMgfSBmcm9tICcuLi9jb250ZW50L2Rpc3BsYXktZGF0YS90b29sYmFyLXN0eWxlcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTnVtYmVyaW5nTGV2ZWxNb2RlbCB9IGZyb20gJy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvbnVtYmVyaW5nLWxldmVsLm1vZGVsJztcbmltcG9ydCB7IE9wZXJhdGlvbnNIaXN0b3J5SW5mb01vZGVsIH0gZnJvbSAnLi4vLi4vZWRpdG9yL2dhZGdldHMvaGlzdG9yeS9vcGVyYXRpb25zLWhpc3RvcnktaW5mby5tb2RlbCc7XG5pbXBvcnQgeyBQYXJhZ3JhcGhTdHlsZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9wYXJhZ3JhcGgtc3R5bGUubW9kZWwnO1xuaW1wb3J0IHsgUmVwbGFjZSB9IGZyb20gJy4uL2dhZGdldHMvc2VhcmNoL3JlcGxhY2UuaW50ZXJmYWNlJztcbmltcG9ydCB7IFJlc2l6ZVRhYmxlQ29sdW1uc01vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9yZXNpemUtdGFibGUtY29sdW1ucy5tb2RlbCc7XG5pbXBvcnQgeyBTZWFyY2hJdGVyYXRpb24gfSBmcm9tICcuLi9nYWRnZXRzL3NlYXJjaC9zZWFyY2gtaXRlcmF0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBTZWFyY2hPcHRpb25zIH0gZnJvbSAnLi4vZ2FkZ2V0cy9zZWFyY2gvc2VhcmNoJztcbmltcG9ydCB7IFRleHRTdHlsZU1vZGVsIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC90ZXh0LXN0eWxlLm1vZGVsJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEVkaXRvclNlcnZpY2Uge1xuICAgIHNldCBzdHlsZXModmFsdWU6IElUb29sYmFyU3R5bGVzKSB7XG4gICAgICAgIHRoaXMuX3N0eWxlcyQubmV4dCh7IC4uLnZhbHVlIH0pO1xuICAgIH1cbiAgICBnZXQgc3R5bGVzKCk6IElUb29sYmFyU3R5bGVzIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlcyQudmFsdWU7XG4gICAgfVxuICAgIGdldCBzdHlsZXMkKCk6IE9ic2VydmFibGU8SVRvb2xiYXJTdHlsZXM+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3N0eWxlcyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3N0eWxlcyQ6IEJlaGF2aW9yU3ViamVjdDxJVG9vbGJhclN0eWxlcz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElUb29sYmFyU3R5bGVzPih7fSk7XG5cbiAgICBnZXQgaXNWaWV3T25seSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1ZpZXdPbmx5JC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgZ2V0IGlzVmlld09ubHkoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1ZpZXdPbmx5O1xuICAgIH1cbiAgICBwcml2YXRlIF9pc1ZpZXdPbmx5JDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgcHJpdmF0ZSBfaXNWaWV3T25seSA9IGZhbHNlO1xuXG4gICAgZ2V0IGNsaXBib2FyZERhdGEkKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGlwYm9hcmREYXRhJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfY2xpcGJvYXJkRGF0YSQ6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCcnKTtcblxuICAgIGdldCBoYXNTZWxlY3Rpb24kKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFzU2VsZWN0aW9uJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaGFzU2VsZWN0aW9uJDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG5cbiAgICBzZXQgaGlzdG9yeUluZm8odmFsdWU6IE9wZXJhdGlvbnNIaXN0b3J5SW5mb01vZGVsKSB7XG4gICAgICAgIHRoaXMuX2hpc3RvcnlJbmZvJC5uZXh0KHZhbHVlKTtcbiAgICB9XG4gICAgZ2V0IGhpc3RvcnlJbmZvJCgpOiBPYnNlcnZhYmxlPE9wZXJhdGlvbnNIaXN0b3J5SW5mb01vZGVsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9oaXN0b3J5SW5mbyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX2hpc3RvcnlJbmZvJDogQmVoYXZpb3JTdWJqZWN0PE9wZXJhdGlvbnNIaXN0b3J5SW5mb01vZGVsPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8T3BlcmF0aW9uc0hpc3RvcnlJbmZvTW9kZWw+KFxuICAgICAgICBuZXcgT3BlcmF0aW9uc0hpc3RvcnlJbmZvTW9kZWwoLTEsIC0xKVxuICAgICk7XG5cbiAgICBnZXQgdG9nZ2xlU2lkZW5hdiQoKTogT2JzZXJ2YWJsZTx7IG9wZW46IGJvb2xlYW47IGNvbXBvbmVudDogVHlwZTxhbnk+OyBkYXRhPzogb2JqZWN0IH0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RvZ2dsZVNpZGVuYXYkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF90b2dnbGVTaWRlbmF2JCA9IG5ldyBTdWJqZWN0PHsgb3BlbjogYm9vbGVhbjsgY29tcG9uZW50OiBUeXBlPGFueT47IGRhdGE/OiBvYmplY3QgfT4oKTtcblxuICAgIHNldCBvcGVuU2VhcmNoRGlhbG9nKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX29wZW5TZWFyY2hEaWFsb2ckLm5leHQodmFsdWUpO1xuICAgIH1cbiAgICBnZXQgb3BlblNlYXJjaERpYWxvZyQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcGVuU2VhcmNoRGlhbG9nJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfb3BlblNlYXJjaERpYWxvZyQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xuXG4gICAgc2V0IHNlYXJjaE9wdGlvbnModmFsdWU6IFNlYXJjaE9wdGlvbnMpIHtcbiAgICAgICAgdGhpcy5fc2VhcmNoT3B0aW9ucyQubmV4dCh2YWx1ZSk7XG4gICAgfVxuICAgIGdldCBzZWFyY2hPcHRpb25zJCgpOiBPYnNlcnZhYmxlPFNlYXJjaE9wdGlvbnM+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaE9wdGlvbnMkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9zZWFyY2hPcHRpb25zJDogU3ViamVjdDxTZWFyY2hPcHRpb25zPiA9IG5ldyBTdWJqZWN0PFNlYXJjaE9wdGlvbnM+KCk7XG5cbiAgICBzZXQgc2VhcmNoSXRlcmF0aW9uKHZhbHVlOiBTZWFyY2hJdGVyYXRpb24pIHtcbiAgICAgICAgdGhpcy5fc2VhcmNoSXRlcmF0aW9uJC5uZXh0KHZhbHVlKTtcbiAgICB9XG4gICAgZ2V0IHNlYXJjaEl0ZXJhdGlvbiQoKTogT2JzZXJ2YWJsZTxTZWFyY2hJdGVyYXRpb24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlYXJjaEl0ZXJhdGlvbiQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3NlYXJjaEl0ZXJhdGlvbiQ6IFN1YmplY3Q8U2VhcmNoSXRlcmF0aW9uPiA9IG5ldyBTdWJqZWN0PFNlYXJjaEl0ZXJhdGlvbj4oKTtcblxuICAgIHNldCByZXBsYWNlKHZhbHVlOiBSZXBsYWNlKSB7XG4gICAgICAgIHRoaXMuX3JlcGxhY2UkLm5leHQodmFsdWUpO1xuICAgIH1cbiAgICBnZXQgcmVwbGFjZSQoKTogT2JzZXJ2YWJsZTxSZXBsYWNlPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXBsYWNlJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfcmVwbGFjZSQ6IFN1YmplY3Q8UmVwbGFjZT4gPSBuZXcgU3ViamVjdDxSZXBsYWNlPigpO1xuXG4gICAgZ2V0IHNldFRleHRTdHlsZXMkKCk6IE9ic2VydmFibGU8VGV4dFN0eWxlTW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NldFRleHRTdHlsZXMkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9zZXRUZXh0U3R5bGVzJDogU3ViamVjdDxUZXh0U3R5bGVNb2RlbD4gPSBuZXcgU3ViamVjdDxUZXh0U3R5bGVNb2RlbD4oKTtcblxuICAgIGdldCBzZXRQYXJhZ3JhcGhTdHlsZXMkKCk6IE9ic2VydmFibGU8UGFyYWdyYXBoU3R5bGVNb2RlbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2V0UGFyYWdyYXBoU3R5bGVzJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfc2V0UGFyYWdyYXBoU3R5bGVzJDogU3ViamVjdDxQYXJhZ3JhcGhTdHlsZU1vZGVsPiA9IG5ldyBTdWJqZWN0PFBhcmFncmFwaFN0eWxlTW9kZWw+KCk7XG5cbiAgICBnZXQgc2V0TnVtYmVyaW5nVGVtcGxhdGVUeXBlJCgpOiBPYnNlcnZhYmxlPE51bWJlcmluZ0xldmVsTW9kZWxbXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2V0TnVtYmVyaW5nVGVtcGxhdGVUeXBlJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfc2V0TnVtYmVyaW5nVGVtcGxhdGVUeXBlJDogU3ViamVjdDxOdW1iZXJpbmdMZXZlbE1vZGVsW10+ID0gbmV3IFN1YmplY3Q8TnVtYmVyaW5nTGV2ZWxNb2RlbFtdPigpO1xuXG4gICAgZ2V0IHJlbW92ZU51bWJlcmluZ3MkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVtb3ZlTnVtYmVyaW5ncyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3JlbW92ZU51bWJlcmluZ3MkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGdldCBzZXRJbWFnZVN0eWxlJCgpOiBPYnNlcnZhYmxlPEltYWdlTW9kZWw+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoYW5nZUltYWdlU3R5bGUkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9jaGFuZ2VJbWFnZVN0eWxlJCA9IG5ldyBTdWJqZWN0PEltYWdlTW9kZWw+KCk7XG5cbiAgICBnZXQgY2hhbmdlRWxlbWVudFN0eWxlJCgpOiBPYnNlcnZhYmxlPEVsZW1lbnRNb2RlbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hhbmdlRWxlbWVudFN0eWxlJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfY2hhbmdlRWxlbWVudFN0eWxlJCA9IG5ldyBTdWJqZWN0PEVsZW1lbnRNb2RlbD4oKTtcblxuICAgIGdldCBjcmVhdGVDdXN0b21Db21wb25lbnQkKCk6IE9ic2VydmFibGU8RWxlbWVudERhdGFNb2RlbD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3JlYXRlQ3VzdG9tQ29tcG9uZW50JC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfY3JlYXRlQ3VzdG9tQ29tcG9uZW50JDogU3ViamVjdDxFbGVtZW50RGF0YU1vZGVsPiA9IG5ldyBTdWJqZWN0PEVsZW1lbnREYXRhTW9kZWw+KCk7XG5cbiAgICBnZXQgaW5zZXJ0QnJlYWskKCk6IE9ic2VydmFibGU8QnJlYWtUeXBlcz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5zZXJ0QnJlYWskLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pbnNlcnRCcmVhayQ6IFN1YmplY3Q8QnJlYWtUeXBlcz4gPSBuZXcgU3ViamVjdDxCcmVha1R5cGVzPigpO1xuXG4gICAgZ2V0IGluc2VydEltYWdlJCgpOiBPYnNlcnZhYmxlPEltYWdlRGF0YU1vZGVsPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnNlcnRJbWFnZSQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX2luc2VydEltYWdlJCA9IG5ldyBTdWJqZWN0PEltYWdlRGF0YU1vZGVsPigpO1xuXG4gICAgZ2V0IGluc2VydExpbmskKCk6IE9ic2VydmFibGU8eyB0ZXh0OiBzdHJpbmc7IGxpbms6IHN0cmluZyB9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnNlcnRMaW5rJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaW5zZXJ0TGluayQgPSBuZXcgU3ViamVjdDx7IHRleHQ6IHN0cmluZzsgbGluazogc3RyaW5nIH0+KCk7XG5cbiAgICBnZXQgZW5kTW91c2VQcmVzcyQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbmRNb3VzZVByZXNzJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfZW5kTW91c2VQcmVzcyQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgZ2V0IGRpc2FibGVTZWxlY3Rpb24kKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZVNlbGVjdGlvbiQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX2Rpc2FibGVTZWxlY3Rpb24kOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGdldCBjaGFuZ2VkVGFibGVTaXplJCgpOiBPYnNlcnZhYmxlPHsgaW5zZXJ0SW5kZXg6IG51bWJlcjsgc2Vzc2lvbklkOiBudW1iZXIgfT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hhbmdlZFRhYmxlU2l6ZSQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX2NoYW5nZWRUYWJsZVNpemUkID0gbmV3IFN1YmplY3Q8eyBpbnNlcnRJbmRleDogbnVtYmVyOyBzZXNzaW9uSWQ6IG51bWJlciB9PigpO1xuXG4gICAgZ2V0IGluc2VydFRhYmxlUm93cyQoKTogT2JzZXJ2YWJsZTx7XG4gICAgICAgIGluc2VydEluZGV4OiBudW1iZXI7XG4gICAgICAgIHJvd3NDb3VudDogbnVtYmVyO1xuICAgICAgICB0YXJnZXRJbmRleDogbnVtYmVyO1xuICAgICAgICBpbmhlcml0SW5kZXg6IG51bWJlcjtcbiAgICAgICAgc2Vzc2lvbklkOiBudW1iZXI7XG4gICAgfT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5zZXJ0VGFibGVSb3dzJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaW5zZXJ0VGFibGVSb3dzJCA9IG5ldyBTdWJqZWN0PHtcbiAgICAgICAgaW5zZXJ0SW5kZXg6IG51bWJlcjtcbiAgICAgICAgcm93c0NvdW50OiBudW1iZXI7XG4gICAgICAgIHRhcmdldEluZGV4OiBudW1iZXI7XG4gICAgICAgIGluaGVyaXRJbmRleDogbnVtYmVyO1xuICAgICAgICBzZXNzaW9uSWQ6IG51bWJlcjtcbiAgICB9PigpO1xuXG4gICAgZ2V0IGluc2VydFRhYmxlQ29sdW1ucyQoKTogT2JzZXJ2YWJsZTx7XG4gICAgICAgIGluc2VydEluZGV4OiBudW1iZXI7XG4gICAgICAgIGNvbHVtbnNDb3VudDogbnVtYmVyO1xuICAgICAgICB0YXJnZXRJbmRleDogbnVtYmVyO1xuICAgICAgICBpbmhlcml0SW5kZXg6IG51bWJlcjtcbiAgICAgICAgc2Vzc2lvbklkOiBudW1iZXI7XG4gICAgfT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5zZXJ0VGFibGVDb2x1bW5zJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfaW5zZXJ0VGFibGVDb2x1bW5zJCA9IG5ldyBTdWJqZWN0PHtcbiAgICAgICAgaW5zZXJ0SW5kZXg6IG51bWJlcjtcbiAgICAgICAgY29sdW1uc0NvdW50OiBudW1iZXI7XG4gICAgICAgIHRhcmdldEluZGV4OiBudW1iZXI7XG4gICAgICAgIGluaGVyaXRJbmRleDogbnVtYmVyO1xuICAgICAgICBzZXNzaW9uSWQ6IG51bWJlcjtcbiAgICB9PigpO1xuXG4gICAgZ2V0IHJlbW92ZVRhYmxlUm93cyQoKTogT2JzZXJ2YWJsZTx7IGluc2VydEluZGV4OiBudW1iZXI7IHN0YXJ0SW5kZXg6IG51bWJlcjsgZW5kSW5kZXg6IG51bWJlcjsgc2Vzc2lvbklkOiBudW1iZXIgfT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVtb3ZlVGFibGVSb3dzJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfcmVtb3ZlVGFibGVSb3dzJCA9IG5ldyBTdWJqZWN0PHsgaW5zZXJ0SW5kZXg6IG51bWJlcjsgc3RhcnRJbmRleDogbnVtYmVyOyBlbmRJbmRleDogbnVtYmVyOyBzZXNzaW9uSWQ6IG51bWJlciB9PigpO1xuXG4gICAgZ2V0IHJlbW92ZVRhYmxlQ29sdW1ucyQoKTogT2JzZXJ2YWJsZTx7IGluc2VydEluZGV4OiBudW1iZXI7IHN0YXJ0SW5kZXg6IG51bWJlcjsgZW5kSW5kZXg6IG51bWJlcjsgc2Vzc2lvbklkOiBudW1iZXIgfT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVtb3ZlVGFibGVDb2x1bW5zJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfcmVtb3ZlVGFibGVDb2x1bW5zJCA9IG5ldyBTdWJqZWN0PHsgaW5zZXJ0SW5kZXg6IG51bWJlcjsgc3RhcnRJbmRleDogbnVtYmVyOyBlbmRJbmRleDogbnVtYmVyOyBzZXNzaW9uSWQ6IG51bWJlciB9PigpO1xuXG4gICAgZ2V0IHJlbW92ZUltYWdlJCgpOiBPYnNlcnZhYmxlPHsgaW5zZXJ0SW5kZXg6IG51bWJlciB9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW1vdmVJbWFnZSQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3JlbW92ZUltYWdlJCA9IG5ldyBTdWJqZWN0PHsgaW5zZXJ0SW5kZXg6IG51bWJlciB9PigpO1xuXG4gICAgZ2V0IHJlc2l6ZVRhYmxlQ29sdW1ucyQoKTogT2JzZXJ2YWJsZTx7XG4gICAgICAgIHJlc2l6ZVRhYmxlQ29sdW1uczogUmVzaXplVGFibGVDb2x1bW5zTW9kZWw7XG4gICAgICAgIHNlc3Npb25JZDogbnVtYmVyO1xuICAgIH0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Jlc2l6ZVRhYmxlQ29sdW1ucyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3Jlc2l6ZVRhYmxlQ29sdW1ucyQgPSBuZXcgU3ViamVjdDx7XG4gICAgICAgIHJlc2l6ZVRhYmxlQ29sdW1uczogUmVzaXplVGFibGVDb2x1bW5zTW9kZWw7XG4gICAgICAgIHNlc3Npb25JZDogbnVtYmVyO1xuICAgIH0+KCk7XG5cbiAgICBnZXQgaW5zZXJ0VGFibGUkKCk6IE9ic2VydmFibGU8eyByb3dzOiBudW1iZXI7IGNvbHVtbnM6IG51bWJlciB9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnNlcnRUYWJsZSQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX2luc2VydFRhYmxlJCA9IG5ldyBTdWJqZWN0PHsgcm93czogbnVtYmVyOyBjb2x1bW5zOiBudW1iZXIgfT4oKTtcblxuICAgIGdldCByZW5kZXJlclVwZGF0ZWQkKCk6IE9ic2VydmFibGU8bnVtYmVyPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJlclVwZGF0ZWQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9yZW5kZXJlclVwZGF0ZWQkID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xuXG4gICAgZ2V0IGVkZ2VFbGVtZW50Q29weVVwZGF0ZWQkKCk6IE9ic2VydmFibGU8eyBuZXdFbGVtZW50Q29weTogSFRNTEVsZW1lbnQ7IHBhZ2U6IG51bWJlciB9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lZGdlRWxlbWVudENvcHlVcGRhdGVkJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfZWRnZUVsZW1lbnRDb3B5VXBkYXRlZCQgPSBuZXcgU3ViamVjdDx7XG4gICAgICAgIG5ld0VsZW1lbnRDb3B5OiBIVE1MRWxlbWVudDtcbiAgICAgICAgcGFnZTogbnVtYmVyO1xuICAgIH0+KCk7XG5cbiAgICBnZXQgY2hhbmdlZEVkZ2VIZWlnaHQkKCk6IE9ic2VydmFibGU8RWRnZVR5cGU+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoYW5nZWRFZGdlSGVpZ2h0JC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfY2hhbmdlZEVkZ2VIZWlnaHQkOiBTdWJqZWN0PEVkZ2VUeXBlPiA9IG5ldyBTdWJqZWN0PEVkZ2VUeXBlPigpO1xuXG4gICAgZ2V0IHJlZG8kKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVkbyQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3JlZG8kID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGdldCB1bmRvJCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VuZG8kLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF91bmRvJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBnZXQgcHJpbnQkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJpbnQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9wcmludCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgZ2V0IGN1dFNlbGVjdGVkJCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1dFNlbGVjdGVkJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfY3V0U2VsZWN0ZWQkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGdldCBjb3B5U2VsZWN0ZWQkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29weVNlbGVjdGVkJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfY29weVNlbGVjdGVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBnZXQgcGFzdGVGcm9tQ2xpcGJvYXJkJCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Bhc3RlRnJvbUNsaXBib2FyZCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3Bhc3RlRnJvbUNsaXBib2FyZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgZ2V0IHNlbGVjdEFsbCQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RBbGwkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9zZWxlY3RBbGwkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGdldCByZW1vdmVTZWxlY3RlZCQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW1vdmVTZWxlY3RlZCQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICAgIHByaXZhdGUgX3JlbW92ZVNlbGVjdGVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBnZXQga2V5RG93biQoKTogT2JzZXJ2YWJsZTxLZXlib2FyZEV2ZW50PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9rZXlEb3duJC5hc09ic2VydmFibGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBfa2V5RG93biQgPSBuZXcgU3ViamVjdDxLZXlib2FyZEV2ZW50PigpO1xuXG4gICAgZ2V0IHVwZGF0ZUVkZ2VzJCgpOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlRWRnZXMkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF91cGRhdGVFZGdlcyQgPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XG5cbiAgICBnZXQgaW5zZXJ0VGV4dCQoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc2VydFRleHQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9pbnNlcnRUZXh0JCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcblxuICAgIGdldCBibHVyQ3VzdG9tQ29tcG9uZW50JCgpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2JsdXJDdXN0b21Db21wb25lbnQkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgICBwcml2YXRlIF9ibHVyQ3VzdG9tQ29tcG9uZW50JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBzZXRJc1ZpZXdPbmx5KHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2lzVmlld09ubHkgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5faXNWaWV3T25seSQubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgc2V0SGFzU2VsZWN0aW9uKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2hhc1NlbGVjdGlvbiQubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgc2V0Q2xpcGJvYXJkRGF0YSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NsaXBib2FyZERhdGEkLm5leHQodmFsdWUpO1xuICAgIH1cblxuICAgIHNldFRleHRTdHlsZXModmFsdWU6IFRleHRTdHlsZU1vZGVsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NldFRleHRTdHlsZXMkLm5leHQodmFsdWUpO1xuICAgIH1cblxuICAgIHNldFBhcmFncmFwaFN0eWxlcyh2YWx1ZTogUGFyYWdyYXBoU3R5bGVNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zZXRQYXJhZ3JhcGhTdHlsZXMkLm5leHQodmFsdWUpO1xuICAgIH1cblxuICAgIHNldE51bWJlcmluZ1RlbXBsYXRlVHlwZSh2YWx1ZTogTnVtYmVyaW5nTGV2ZWxNb2RlbFtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NldE51bWJlcmluZ1RlbXBsYXRlVHlwZSQubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlTnVtYmVyaW5ncygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlTnVtYmVyaW5ncyQubmV4dCgpO1xuICAgIH1cblxuICAgIGNoYW5nZUltYWdlU3R5bGUodmFsdWU6IEltYWdlTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2hhbmdlSW1hZ2VTdHlsZSQubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgY2hhbmdlRWxlbWVudFN0eWxlKHZhbHVlOiBFbGVtZW50TW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2hhbmdlRWxlbWVudFN0eWxlJC5uZXh0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBjcmVhdGVDdXN0b21Db21wb25lbnQobW9kZWw6IEVsZW1lbnREYXRhTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY3JlYXRlQ3VzdG9tQ29tcG9uZW50JC5uZXh0KG1vZGVsKTtcbiAgICB9XG5cbiAgICBpbnNlcnRCcmVhayh2YWx1ZTogQnJlYWtUeXBlcyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbnNlcnRCcmVhayQubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgaW5zZXJ0SW1hZ2UoaW1hZ2VEYXRhOiBJbWFnZURhdGFNb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbnNlcnRJbWFnZSQubmV4dChpbWFnZURhdGEpO1xuICAgIH1cblxuICAgIGluc2VydExpbmsodGV4dDogc3RyaW5nLCBsaW5rOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faW5zZXJ0TGluayQubmV4dCh7IHRleHQsIGxpbmsgfSk7XG4gICAgfVxuXG4gICAgZW5kTW91c2VQcmVzcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZW5kTW91c2VQcmVzcyQubmV4dCgpO1xuICAgIH1cblxuICAgIGRpc2FibGVTZWxlY3Rpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVTZWxlY3Rpb24kLm5leHQoKTtcbiAgICB9XG5cbiAgICBvcGVuRWxlbWVudFNpZGVuYXYoY29tcG9uZW50OiBUeXBlPEV4dGVybmFsU2lkZW5hdkludGVyZmFjZT4sIG1vZGVsOiBFbGVtZW50TW9kZWwsIGNvbnRlbnRXaWR0aDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RvZ2dsZVNpZGVuYXYkLm5leHQoeyBvcGVuOiB0cnVlLCBjb21wb25lbnQsIGRhdGE6IHsgbW9kZWwsIGNvbnRlbnRXaWR0aCB9IH0pO1xuICAgIH1cblxuICAgIG9wZW5TaWRlbmF2KGNvbXBvbmVudDogVHlwZTxhbnk+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RvZ2dsZVNpZGVuYXYkLm5leHQoeyBvcGVuOiB0cnVlLCBjb21wb25lbnQgfSk7XG4gICAgfVxuXG4gICAgY2xvc2VTaWRlbmF2KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl90b2dnbGVTaWRlbmF2JC5uZXh0KHsgb3BlbjogZmFsc2UsIGNvbXBvbmVudDogbnVsbCB9KTtcbiAgICB9XG5cbiAgICBjaGFuZ2VkVGFibGVTaXplKGluc2VydEluZGV4OiBudW1iZXIsIHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NoYW5nZWRUYWJsZVNpemUkLm5leHQoeyBpbnNlcnRJbmRleCwgc2Vzc2lvbklkIH0pO1xuICAgIH1cblxuICAgIGluc2VydFRhYmxlUm93cyhpbnNlcnRJbmRleDogbnVtYmVyLCByb3dzQ291bnQ6IG51bWJlciwgdGFyZ2V0SW5kZXg6IG51bWJlciwgaW5oZXJpdEluZGV4OiBudW1iZXIsIHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2luc2VydFRhYmxlUm93cyQubmV4dCh7IGluc2VydEluZGV4LCByb3dzQ291bnQsIHRhcmdldEluZGV4LCBpbmhlcml0SW5kZXgsIHNlc3Npb25JZCB9KTtcbiAgICB9XG5cbiAgICBpbnNlcnRUYWJsZUNvbHVtbnMoaW5zZXJ0SW5kZXg6IG51bWJlciwgY29sdW1uc0NvdW50OiBudW1iZXIsIHRhcmdldEluZGV4OiBudW1iZXIsIGluaGVyaXRJbmRleDogbnVtYmVyLCBzZXNzaW9uSWQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9pbnNlcnRUYWJsZUNvbHVtbnMkLm5leHQoeyBpbnNlcnRJbmRleCwgY29sdW1uc0NvdW50LCB0YXJnZXRJbmRleCwgaW5oZXJpdEluZGV4LCBzZXNzaW9uSWQgfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlVGFibGVSb3dzKGluc2VydEluZGV4OiBudW1iZXIsIHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlciwgc2Vzc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlVGFibGVSb3dzJC5uZXh0KHsgaW5zZXJ0SW5kZXgsIHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBzZXNzaW9uSWQgfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlVGFibGVDb2x1bW5zKGluc2VydEluZGV4OiBudW1iZXIsIHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg6IG51bWJlciwgc2Vzc2lvbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcmVtb3ZlVGFibGVDb2x1bW5zJC5uZXh0KHsgaW5zZXJ0SW5kZXgsIHN0YXJ0SW5kZXgsIGVuZEluZGV4LCBzZXNzaW9uSWQgfSk7XG4gICAgfVxuXG4gICAgcmVtb3ZlSW1hZ2UoaW5zZXJ0SW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZW1vdmVJbWFnZSQubmV4dCh7IGluc2VydEluZGV4IH0pO1xuICAgIH1cblxuICAgIHJlc2l6ZVRhYmxlQ29sdW1ucyhyZXNpemVUYWJsZUNvbHVtbnM6IFJlc2l6ZVRhYmxlQ29sdW1uc01vZGVsLCBzZXNzaW9uSWQ6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9yZXNpemVUYWJsZUNvbHVtbnMkLm5leHQoe1xuICAgICAgICAgICAgcmVzaXplVGFibGVDb2x1bW5zLFxuICAgICAgICAgICAgc2Vzc2lvbklkXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGluc2VydFRhYmxlKHRhYmxlRGF0YTogeyByb3dzOiBudW1iZXI7IGNvbHVtbnM6IG51bWJlciB9KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2luc2VydFRhYmxlJC5uZXh0KHRhYmxlRGF0YSk7XG4gICAgfVxuXG4gICAgcmVuZGVyZXJVcGRhdGVkKHNlc3Npb25JZDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlbmRlcmVyVXBkYXRlZCQubmV4dChzZXNzaW9uSWQpO1xuICAgIH1cblxuICAgIGVkZ2VFbGVtZW50Q29weVVwZGF0ZWQobmV3RWxlbWVudENvcHksIHBhZ2UpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZWRnZUVsZW1lbnRDb3B5VXBkYXRlZCQubmV4dCh7IG5ld0VsZW1lbnRDb3B5LCBwYWdlIH0pO1xuICAgIH1cblxuICAgIGNoYW5nZWRFZGdlSGVpZ2h0KHR5cGU6IEVkZ2VUeXBlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NoYW5nZWRFZGdlSGVpZ2h0JC5uZXh0KHR5cGUpO1xuICAgIH1cblxuICAgIHVuZG8oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3VuZG8kLm5leHQoKTtcbiAgICB9XG5cbiAgICByZWRvKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yZWRvJC5uZXh0KCk7XG4gICAgfVxuXG4gICAgcHJpbnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ByaW50JC5uZXh0KCk7XG4gICAgfVxuXG4gICAgY3V0U2VsZWN0ZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2N1dFNlbGVjdGVkJC5uZXh0KCk7XG4gICAgfVxuXG4gICAgY29weVNlbGVjdGVkKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jb3B5U2VsZWN0ZWQkLm5leHQoKTtcbiAgICB9XG5cbiAgICBwYXN0ZUZyb21DbGlwYm9hcmQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Bhc3RlRnJvbUNsaXBib2FyZCQubmV4dCgpO1xuICAgIH1cblxuICAgIHNlbGVjdEFsbCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0QWxsJC5uZXh0KCk7XG4gICAgfVxuXG4gICAgcmVtb3ZlU2VsZWN0ZWQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlbW92ZVNlbGVjdGVkJC5uZXh0KCk7XG4gICAgfVxuXG4gICAga2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9rZXlEb3duJC5uZXh0KGV2ZW50KTtcbiAgICB9XG5cbiAgICB1cGRhdGVFZGdlcyhzZXNzaW9uSWQ6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLl91cGRhdGVFZGdlcyQubmV4dChzZXNzaW9uSWQpO1xuICAgIH1cblxuICAgIGluc2VydFRleHQodGV4dDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2luc2VydFRleHQkLm5leHQodGV4dCk7XG4gICAgfVxuXG4gICAgYmx1ckN1c3RvbUNvbXBvbmVudCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fYmx1ckN1c3RvbUNvbXBvbmVudCQubmV4dCgpO1xuICAgIH1cbn1cbiJdfQ==