@talrace/ngx-noder 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/esm2022/lib/+shared/add-link-dialog/add-link-dialog.component.mjs +67 -0
  2. package/esm2022/lib/+shared/editor/core/edit.session.mjs +7 -10
  3. package/esm2022/lib/+shared/editor/core/editor.mjs +7 -5
  4. package/esm2022/lib/+shared/editor/core/helpers/paragraph.helper.mjs +53 -16
  5. package/esm2022/lib/+shared/editor/core/helpers/position.helper.mjs +4 -1
  6. package/esm2022/lib/+shared/editor/core/models/line-info.model.mjs +1 -1
  7. package/esm2022/lib/+shared/editor/core/paging/pages.wrap.mjs +19 -12
  8. package/esm2022/lib/+shared/editor/core/paging/paragraph.mjs +3 -3
  9. package/esm2022/lib/+shared/editor/core/paging/text-line-info.mjs +3 -3
  10. package/esm2022/lib/+shared/editor/custom-components/external-element/models/external-element.model.mjs +3 -2
  11. package/esm2022/lib/+shared/editor/custom-components/shared/services/custom-content/custom-content.service.mjs +4 -3
  12. package/esm2022/lib/+shared/editor/custom-components/table/cell-resizer/cell-resizer.mjs +4 -4
  13. package/esm2022/lib/+shared/editor/custom-components/table/components/table.component.mjs +116 -10
  14. package/esm2022/lib/+shared/editor/custom-components/table/selection/table-selection.mjs +7 -1
  15. package/esm2022/lib/+shared/editor/editor.component.mjs +6 -4
  16. package/esm2022/lib/+shared/editor/execution/regulator.service.mjs +3 -3
  17. package/esm2022/lib/+shared/editor/operations/helpers/table-operations.helper.mjs +6 -3
  18. package/esm2022/lib/+shared/helpers/revision.helper.mjs +91 -0
  19. package/esm2022/lib/+shared/helpers/validation.helper.mjs +7 -0
  20. package/esm2022/lib/models/generated/cell.model.mjs +1 -1
  21. package/esm2022/public-api.mjs +5 -2
  22. package/fesm2022/talrace-ngx-noder.mjs +384 -79
  23. package/fesm2022/talrace-ngx-noder.mjs.map +1 -1
  24. package/lib/+shared/add-link-dialog/add-link-dialog.component.d.ts +26 -0
  25. package/lib/+shared/editor/core/editor.d.ts +2 -1
  26. package/lib/+shared/editor/core/helpers/paragraph.helper.d.ts +5 -2
  27. package/lib/+shared/editor/core/models/line-info.model.d.ts +1 -0
  28. package/lib/+shared/editor/core/paging/pages.wrap.d.ts +6 -5
  29. package/lib/+shared/editor/core/paging/paragraph.d.ts +5 -2
  30. package/lib/+shared/editor/core/paging/text-line-info.d.ts +2 -0
  31. package/lib/+shared/editor/custom-components/external-element/models/external-element.model.d.ts +2 -1
  32. package/lib/+shared/editor/custom-components/shared/services/custom-content/custom-content.service.d.ts +2 -1
  33. package/lib/+shared/editor/custom-components/table/cell-resizer/cell-resizer.d.ts +1 -0
  34. package/lib/+shared/editor/custom-components/table/components/table.component.d.ts +18 -1
  35. package/lib/+shared/editor/editor.component.d.ts +2 -1
  36. package/lib/+shared/editor/execution/regulator.service.d.ts +1 -1
  37. package/lib/+shared/helpers/revision.helper.d.ts +15 -0
  38. package/lib/+shared/helpers/validation.helper.d.ts +5 -0
  39. package/lib/models/generated/cell.model.d.ts +1 -0
  40. package/package.json +1 -1
  41. package/public-api.d.ts +4 -1
  42. package/src/lib/+shared/confirm-dialog/_theme.scss +30 -0
  43. package/src/lib/+shared/editor/_theme.scss +7 -0
  44. package/src/lib/+shared/editor-toolbar/_theme.scss +7 -0
  45. package/src/scss/_fonts.scss +3 -0
  46. package/src/scss/_mixins.scss +49 -0
  47. package/src/scss/_variables.scss +1 -0
@@ -1,6 +1,6 @@
1
1
  import { PageHelper } from './page.helper';
2
2
  export class ParagraphHelper {
3
- static processTextLinesProperties(currentParagraph, prevParagraphInfo, pagesInfo) {
3
+ static processTextLinesProperties(currentParagraph, prevParagraphInfo, pagesInfo, tables) {
4
4
  let currentPageContentHeight = prevParagraphInfo.paragraphHeight;
5
5
  let currentPage = prevParagraphInfo.lastPage;
6
6
  let previousLine = null;
@@ -9,17 +9,50 @@ export class ParagraphHelper {
9
9
  textLineInfo.screenLine = ++prevParagraphInfo.paragraphLastLine;
10
10
  textLineInfo.firstLinePageOffset = 0;
11
11
  textLineInfo.endPageOffset = 0;
12
- let contentHeightWithLine = currentPageContentHeight + textLineInfo.height + textLineInfo.offsetBefore;
13
- const isFirstLineInDocument = prevParagraphInfo.paragraphLastLine === 0;
14
- if (!isFirstLineInDocument &&
15
- (contentHeightWithLine > currentPageVerticalData.contentHeight || textLineInfo.isAfterPageBreak)) {
16
- const leftSpaceOnPage = currentPageVerticalData.contentHeight - currentPageContentHeight;
17
- contentHeightWithLine -= currentPageContentHeight;
18
- const nexPageVerticalData = PageHelper.getVerticalData(currentPage + 1, pagesInfo.pagesVerticalData);
19
- const lineSpaceBefore = pagesInfo.pagesSpace + currentPageVerticalData.marginBottom + nexPageVerticalData.marginTop;
20
- const pageOffset = lineSpaceBefore + leftSpaceOnPage;
21
- currentPage++;
22
- currentPageVerticalData = nexPageVerticalData;
12
+ textLineInfo.splitOffset = 0;
13
+ const textLineHeight = textLineInfo.height + textLineInfo.offsetBefore;
14
+ const leftSpaceOnPage = currentPageVerticalData.contentHeight - currentPageContentHeight;
15
+ if (!textLineInfo.hasTable &&
16
+ (prevParagraphInfo.paragraphLastLine === 0 || (textLineHeight <= leftSpaceOnPage && !textLineInfo.isAfterPageBreak))) {
17
+ if (previousLine?.hasTable && previousLine.page != currentPage) {
18
+ textLineInfo.splitOffset = currentPageContentHeight;
19
+ }
20
+ currentPageContentHeight += textLineHeight + textLineInfo.offsetAfter;
21
+ textLineInfo.page = currentPage;
22
+ previousLine = textLineInfo;
23
+ continue;
24
+ }
25
+ const nextPageVerticalData = PageHelper.getVerticalData(currentPage + 1, pagesInfo.pagesVerticalData);
26
+ const spaceBetweenPagesContent = pagesInfo.pagesSpace + currentPageVerticalData.marginBottom + nextPageVerticalData.marginTop;
27
+ if (textLineInfo.hasTable) {
28
+ const { splitsCount, leftHeight, tableHeight } = ParagraphHelper.processTableSplit(tables, currentParagraph.startInsertIndex, leftSpaceOnPage, spaceBetweenPagesContent, currentPageVerticalData.contentHeight);
29
+ textLineInfo.height = tableHeight;
30
+ textLineInfo.page = currentPage;
31
+ currentPage += splitsCount;
32
+ if (splitsCount) {
33
+ if (textLineInfo.height === leftHeight) {
34
+ textLineInfo.page++;
35
+ const pageOffset = spaceBetweenPagesContent + leftSpaceOnPage;
36
+ if (previousLine) {
37
+ previousLine.endPageOffset = pageOffset;
38
+ }
39
+ else {
40
+ currentParagraph.pagePreviousContentHeight = 0;
41
+ textLineInfo.firstLinePageOffset = pageOffset;
42
+ }
43
+ }
44
+ currentPageContentHeight = leftHeight + textLineInfo.offsetBefore + textLineInfo.offsetAfter;
45
+ currentPageVerticalData = nextPageVerticalData;
46
+ }
47
+ else {
48
+ currentPageContentHeight += textLineInfo.height + textLineInfo.offsetBefore + textLineInfo.offsetAfter;
49
+ }
50
+ }
51
+ else if (prevParagraphInfo.paragraphLastLine !== 0 && (textLineHeight > leftSpaceOnPage || textLineInfo.isAfterPageBreak)) {
52
+ const pageOffset = spaceBetweenPagesContent + leftSpaceOnPage;
53
+ textLineInfo.page = ++currentPage;
54
+ currentPageVerticalData = nextPageVerticalData;
55
+ currentPageContentHeight = textLineHeight + textLineInfo.offsetAfter;
23
56
  if (previousLine) {
24
57
  previousLine.endPageOffset = pageOffset;
25
58
  }
@@ -28,8 +61,6 @@ export class ParagraphHelper {
28
61
  textLineInfo.firstLinePageOffset = pageOffset;
29
62
  }
30
63
  }
31
- currentPageContentHeight = contentHeightWithLine + textLineInfo.offsetAfter;
32
- textLineInfo.page = currentPage;
33
64
  previousLine = textLineInfo;
34
65
  }
35
66
  }
@@ -75,7 +106,9 @@ export class ParagraphHelper {
75
106
  return paragraphTextLinesInfo.reduce((prev, next) => prev + next.height + next.endPageOffset + next.offsetBefore + next.offsetAfter, 0);
76
107
  }
77
108
  static getPageLinesHeight(paragraphTextLinesInfo, page) {
78
- return paragraphTextLinesInfo.filter(line => line.page === page).reduce((prev, next) => prev + next.height + next.offsetAfter, 0);
109
+ return paragraphTextLinesInfo
110
+ .filter(line => line.page === page)
111
+ .reduce((prev, next) => prev + next.height + next.offsetAfter + next.splitOffset, 0);
79
112
  }
80
113
  static processOffsetLineWithNumberingMarker(textLineInfo, markerHeight, offsetBefore) {
81
114
  if (!markerHeight || textLineInfo.height >= markerHeight) {
@@ -128,5 +161,9 @@ export class ParagraphHelper {
128
161
  }
129
162
  return indents;
130
163
  }
164
+ static processTableSplit(tables, startInsertIndex, leftSpaceOnPage, spaceBetweenPagesContent, contentHeight) {
165
+ const table = tables.find(x => x.instance.insertIndex >= startInsertIndex);
166
+ return table.instance.processSplit(leftSpaceOnPage, spaceBetweenPagesContent, contentHeight);
167
+ }
131
168
  }
132
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYWdyYXBoLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliLytzaGFyZWQvZWRpdG9yL2NvcmUvaGVscGVycy9wYXJhZ3JhcGguaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFPM0MsTUFBTSxPQUFPLGVBQWU7SUFDeEIsTUFBTSxDQUFDLDBCQUEwQixDQUM3QixnQkFBMkIsRUFDM0IsaUJBQTJGLEVBQzNGLFNBQTZFO1FBRTdFLElBQUksd0JBQXdCLEdBQUcsaUJBQWlCLENBQUMsZUFBZSxDQUFDO1FBQ2pFLElBQUksV0FBVyxHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztRQUM3QyxJQUFJLFlBQVksR0FBd0IsSUFBSSxDQUFDO1FBQzdDLElBQUksdUJBQXVCLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDbkcsS0FBSyxNQUFNLFlBQVksSUFBSSxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUU7WUFDdkQsWUFBWSxDQUFDLFVBQVUsR0FBRyxFQUFFLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDO1lBQ2hFLFlBQVksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7WUFDckMsWUFBWSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7WUFDL0IsSUFBSSxxQkFBcUIsR0FBRyx3QkFBd0IsR0FBRyxZQUFZLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUM7WUFDdkcsTUFBTSxxQkFBcUIsR0FBRyxpQkFBaUIsQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLENBQUM7WUFDeEUsSUFDSSxDQUFDLHFCQUFxQjtnQkFDdEIsQ0FBQyxxQkFBcUIsR0FBRyx1QkFBdUIsQ0FBQyxhQUFhLElBQUksWUFBWSxD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YyxDQUFDLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFO1lBQ2hHLE9BQU8sQ0FBQyxXQUFXLEdBQUcsY0FBYyxDQUFDLFdBQVcsQ0FBQztTQUNwRDtRQUVELElBQUksQ0FBQyxhQUFhLElBQUksY0FBYyxDQUFDLFVBQVUsSUFBSSxhQUFhLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRTtZQUN6RixPQUFPLENBQUMsVUFBVSxHQUFHLGNBQWMsQ0FBQyxVQUFVLENBQUM7U0FDbEQ7UUFFRCxJQUFJLFNBQVMsRUFBRSxjQUFjLENBQUMsaUJBQWlCLEVBQUU7WUFDN0MsSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUNwQixPQUFPLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQzthQUMzQjtpQkFBTSxJQUFJLGNBQWMsQ0FBQyxXQUFXLEdBQUcsaUJBQWlCLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRTtnQkFDakYsT0FBTyxDQUFDLFdBQVcsR0FBRyxpQkFBaUIsQ0FBQzthQUMzQztTQUNKO1FBRUQsSUFBSSxTQUFTLEVBQUUsY0FBYyxDQUFDLGdCQUFnQixFQUFFO1lBQzVDLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ2hCLE9BQU8sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO2FBQzFCO2lCQUFNLElBQUksY0FBYyxDQUFDLFVBQVUsSUFBSSxhQUFhLENBQUMsY0FBYyxDQUFDLFdBQVcsRUFBRTtnQkFDOUUsT0FBTyxDQUFDLFVBQVUsR0FBRyxpQkFBaUIsQ0FBQzthQUMxQztTQUNKO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTGluZUluZm9Nb2RlbCB9IGZyb20gJy4uL21vZGVscy9saW5lLWluZm8ubW9kZWwnO1xuaW1wb3J0IHsgUGFnZUhlbHBlciB9IGZyb20gJy4vcGFnZS5oZWxwZXInO1xuaW1wb3J0IHsgUGFnZVZlcnRpY2FsRGF0YU1vZGVsIH0gZnJvbSAnLi4vcGFnaW5nL3BhZ2UtdmVydGljYWwtZGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBQYXJhZ3JhcGggfSBmcm9tICcuLi9wYWdpbmcvcGFyYWdyYXBoJztcbmltcG9ydCB7IFBhcmFncmFwaE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9wYXJhZ3JhcGgubW9kZWwnO1xuaW1wb3J0IHsgVGV4dExpbmVJbmZvIH0gZnJvbSAnLi4vcGFnaW5nL3RleHQtbGluZS1pbmZvJztcbmltcG9ydCB7IFZpc2libGVMaW5lSW5mbyB9IGZyb20gJy4uL2ludGVyZmFjZXMvdmlzaWJsZS1saW5lLWluZm8uaW50ZXJmYWNlJztcblxuZXhwb3J0IGNsYXNzIFBhcmFncmFwaEhlbHBlciB7XG4gICAgc3RhdGljIHByb2Nlc3NUZXh0TGluZXNQcm9wZXJ0aWVzKFxuICAgICAgICBjdXJyZW50UGFyYWdyYXBoOiBQYXJhZ3JhcGgsXG4gICAgICAgIHByZXZQYXJhZ3JhcGhJbmZvOiB7IGxhc3RQYWdlOiBudW1iZXI7IHBhcmFncmFwaEhlaWdodDogbnVtYmVyOyBwYXJhZ3JhcGhMYXN0TGluZTogbnVtYmVyIH0sXG4gICAgICAgIHBhZ2VzSW5mbzogeyBwYWdlc1ZlcnRpY2FsRGF0YTogUGFnZVZlcnRpY2FsRGF0YU1vZGVsW107IHBhZ2VzU3BhY2U6IG51bWJlciB9XG4gICAgKTogdm9pZCB7XG4gICAgICAgIGxldCBjdXJyZW50UGFnZUNvbnRlbnRIZWlnaHQgPSBwcmV2UGFyYWdyYXBoSW5mby5wYXJhZ3JhcGhIZWlnaHQ7XG4gICAgICAgIGxldCBjdXJyZW50UGFnZSA9IHByZXZQYXJhZ3JhcGhJbmZvLmxhc3RQYWdlO1xuICAgICAgICBsZXQgcHJldmlvdXNMaW5lOiBUZXh0TGluZUluZm8gfCBudWxsID0gbnVsbDtcbiAgICAgICAgbGV0IGN1cnJlbnRQYWdlVmVydGljYWxEYXRhID0gUGFnZUhlbHBlci5nZXRWZXJ0aWNhbERhdGEoY3VycmVudFBhZ2UsIHBhZ2VzSW5mby5wYWdlc1ZlcnRpY2FsRGF0YSk7XG4gICAgICAgIGZvciAoY29uc3QgdGV4dExpbmVJbmZvIG9mIGN1cnJlbnRQYXJhZ3JhcGgudGV4dExpbmVzSW5mbykge1xuICAgICAgICAgICAgdGV4dExpbmVJbmZvLnNjcmVlbkxpbmUgPSArK3ByZXZQYXJhZ3JhcGhJbmZvLnBhcmFncmFwaExhc3RMaW5lO1xuICAgICAgICAgICAgdGV4dExpbmVJbmZvLmZpcnN0TGluZVBhZ2VPZmZzZXQgPSAwO1xuICAgICAgICAgICAgdGV4dExpbmVJbmZvLmVuZFBhZ2VPZmZzZXQgPSAwO1xuICAgICAgICAgICAgbGV0IGNvbnRlbnRIZWlnaHRXaXRoTGluZSA9IGN1cnJlbnRQYWdlQ29udGVudEhlaWdodCArIHRleHRMaW5lSW5mby5oZWlnaHQgKyB0ZXh0TGluZUluZm8ub2Zmc2V0QmVmb3JlO1xuICAgICAgICAgICAgY29uc3QgaXNGaXJzdExpbmVJbkRvY3VtZW50ID0gcHJldlBhcmFncmFwaEluZm8ucGFyYWdyYXBoTGFzdExpbmUgPT09IDA7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIWlzRmlyc3RMaW5lSW5Eb2N1bWVudCAmJlxuICAgICAgICAgICAgICAgIChjb250ZW50SGVpZ2h0V2l0aExpbmUgPiBjdXJyZW50UGFnZVZlcnRpY2FsRGF0YS5jb250ZW50SGVpZ2h0IHx8IHRleHRMaW5lSW5mby5pc0FmdGVyUGFnZUJyZWFrKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGVmdFNwYWNlT25QYWdlID0gY3VycmVudFBhZ2VWZXJ0aWNhbERhdGEuY29udGVudEhlaWdodCAtIGN1cnJlbnRQYWdlQ29udGVudEhlaWdodDtcbiAgICAgICAgICAgICAgICBjb250ZW50SGVpZ2h0V2l0aExpbmUgLT0gY3VycmVudFBhZ2VDb250ZW50SGVpZ2h0O1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leFBhZ2VWZXJ0aWNhbERhdGEgPSBQYWdlSGVscGVyLmdldFZlcnRpY2FsRGF0YShjdXJyZW50UGFnZSArIDEsIHBhZ2VzSW5mby5wYWdlc1ZlcnRpY2FsRGF0YSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZVNwYWNlQmVmb3JlID0gcGFnZXNJbmZvLnBhZ2VzU3BhY2UgKyBjdXJyZW50UGFnZVZlcnRpY2FsRGF0YS5tYXJnaW5Cb3R0b20gKyBuZXhQYWdlVmVydGljYWxEYXRhLm1hcmdpblRvcDtcbiAgICAgICAgICAgICAgICBjb25zdCBwYWdlT2Zmc2V0ID0gbGluZVNwYWNlQmVmb3JlICsgbGVmdFNwYWNlT25QYWdlO1xuICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlKys7XG4gICAgICAgICAgICAgICAgY3VycmVudFBhZ2VWZXJ0aWNhbERhdGEgPSBuZXhQYWdlVmVydGljYWxEYXRhO1xuICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c0xpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNMaW5lLmVuZFBhZ2VPZmZzZXQgPSBwYWdlT2Zmc2V0O1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYXJhZ3JhcGgucGFnZVByZXZpb3VzQ29udGVudEhlaWdodCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHRleHRMaW5lSW5mby5maXJzdExpbmVQYWdlT2Zmc2V0ID0gcGFnZU9mZnNldDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRQYWdlQ29udGVudEhlaWdodCA9IGNvbnRlbnRIZWlnaHRXaXRoTGluZSArIHRleHRMaW5lSW5mby5vZmZzZXRBZnRlcjtcbiAgICAgICAgICAgIHRleHRMaW5lSW5mby5wYWdlID0gY3VycmVudFBhZ2U7XG4gICAgICAgICAgICBwcmV2aW91c0xpbmUgPSB0ZXh0TGluZUluZm87XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgcHJvY2Vzc1RleHRMaW5lc1Byb3BlcnRpZXNGb3JTaW5nbGVQYWdlKFxuICAgICAgICBjdXJyZW50UGFyYWdyYXBoOiBQYXJhZ3JhcGgsXG4gICAgICAgIHByZXZQYXJhZ3JhcGhJbmZvOiB7IGxhc3RQYWdlOiBudW1iZXI7IHBhcmFncmFwaExhc3RMaW5lOiBudW1iZXIgfVxuICAgICk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IHRleHRMaW5lSW5mbyBvZiBjdXJyZW50UGFyYWdyYXBoLnRleHRMaW5lc0luZm8pIHtcbiAgICAgICAgICAgIHRleHRMaW5lSW5mby5zY3JlZW5MaW5lID0gKytwcmV2UGFyYWdyYXBoSW5mby5wYXJhZ3JhcGhMYXN0TGluZTtcbiAgICAgICAgICAgIHRleHRMaW5lSW5mby5maXJzdExpbmVQYWdlT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIHRleHRMaW5lSW5mby5lbmRQYWdlT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIHRleHRMaW5lSW5mby5wYWdlID0gcHJldlBhcmFncmFwaEluZm8ubGFzdFBhZ2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0VmlzaWJsZUxpbmVJbmZvKHBhcmFncmFwaFRleHRMaW5lczogVGV4dExpbmVJbmZvW10sIG9mZnNldFRvcDogbnVtYmVyLCBkaXJlY3Rpb246IG51bWJlcik6IFZpc2libGVMaW5lSW5mbyB7XG4gICAgICAgIGlmICghcGFyYWdyYXBoVGV4dExpbmVzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsaW5lSW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAobGluZUluZGV4IDwgcGFyYWdyYXBoVGV4dExpbmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgbGluZSA9IHBhcmFncmFwaFRleHRMaW5lc1tsaW5lSW5kZXhdO1xuICAgICAgICAgICAgaWYgKG9mZnNldFRvcCA8PSBsaW5lLmhlaWdodCArIGxpbmUuZW5kUGFnZU9mZnNldCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvZmZzZXRUb3AgLT0gbGluZS5oZWlnaHQgKyBsaW5lLmVuZFBhZ2VPZmZzZXQ7XG4gICAgICAgICAgICBsaW5lSW5kZXgrKztcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHZpc2libGVMaW5lID0gcGFyYWdyYXBoVGV4dExpbmVzW2xpbmVJbmRleF0gfHwgcGFyYWdyYXBoVGV4dExpbmVzW2xpbmVJbmRleCAtIDFdO1xuICAgICAgICBjb25zdCBzY3JlZW5JbmRleCA9IHZpc2libGVMaW5lLnNjcmVlbkxpbmU7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGluZGV4OiBsaW5lSW5kZXgsXG4gICAgICAgICAgICBzY3JlZW5JbmRleDogc2NyZWVuSW5kZXgsXG4gICAgICAgICAgICB2aXNpYmxlU2NyZWVuSW5kZXg6IG9mZnNldFRvcCA+IDAgPyBzY3JlZW5JbmRleCArIGRpcmVjdGlvbiA6IHNjcmVlbkluZGV4XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFBhcmFncmFwaFBhZ2VzKHBhcmFncmFwaFRleHRMaW5lc0luZm86IFRleHRMaW5lSW5mb1tdKTogbnVtYmVyW10ge1xuICAgICAgICBjb25zdCByZXN1bHRQYWdlcyA9IFtdO1xuICAgICAgICBwYXJhZ3JhcGhUZXh0TGluZXNJbmZvLmZvckVhY2goeCA9PiB7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdFBhZ2VzLmluY2x1ZGVzKHgucGFnZSkpIHtcbiAgICAgICAgICAgICAgICByZXN1bHRQYWdlcy5wdXNoKHgucGFnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHRQYWdlcztcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UGFyYWdyYXBoSGVpZ2h0KHBhcmFncmFwaFRleHRMaW5lc0luZm86IFRleHRMaW5lSW5mb1tdKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHBhcmFncmFwaFRleHRMaW5lc0luZm8ucmVkdWNlKFxuICAgICAgICAgICAgKHByZXYsIG5leHQpID0+IHByZXYgKyBuZXh0LmhlaWdodCArIG5leHQuZW5kUGFnZU9mZnNldCArIG5leHQub2Zmc2V0QmVmb3JlICsgbmV4dC5vZmZzZXRBZnRlcixcbiAgICAgICAgICAgIDBcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0UGFnZUxpbmVzSGVpZ2h0KHBhcmFncmFwaFRleHRMaW5lc0luZm86IFRleHRMaW5lSW5mb1tdLCBwYWdlOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gcGFyYWdyYXBoVGV4dExpbmVzSW5mby5maWx0ZXIobGluZSA9PiBsaW5lLnBhZ2UgPT09IHBhZ2UpLnJlZHVjZSgocHJldiwgbmV4dCkgPT4gcHJldiArIG5leHQuaGVpZ2h0ICsgbmV4dC5vZmZzZXRBZnRlciwgMCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHByb2Nlc3NPZmZzZXRMaW5lV2l0aE51bWJlcmluZ01hcmtlcih0ZXh0TGluZUluZm86IFRleHRMaW5lSW5mbywgbWFya2VySGVpZ2h0OiBudW1iZXIsIG9mZnNldEJlZm9yZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICghbWFya2VySGVpZ2h0IHx8IHRleHRMaW5lSW5mby5oZWlnaHQgPj0gbWFya2VySGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0ZXh0TGluZUluZm8ub2Zmc2V0QmVmb3JlID0gb2Zmc2V0QmVmb3JlICsgbWFya2VySGVpZ2h0IC0gdGV4dExpbmVJbmZvLmhlaWdodDtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXBwbHlQYXJhZ3JhcGhJbmRlbnRzVG9MaW5lcyhsaW5lczogTGluZUluZm9Nb2RlbFtdLCBwYXJhZ3JhcGhJbmRleDogbnVtYmVyLCBwYXJhZ3JhcGhzOiBQYXJhZ3JhcGhNb2RlbFtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaCA9IHBhcmFncmFwaHNbcGFyYWdyYXBoSW5kZXhdO1xuICAgICAgICBjb25zdCBwcmV2aW91c1BhcmFncmFwaCA9IHBhcmFncmFwaHNbcGFyYWdyYXBoSW5kZXggLSAxXTtcbiAgICAgICAgY29uc3QgbmV4dFBhcmFncmFwaCA9IHBhcmFncmFwaHNbcGFyYWdyYXBoSW5kZXggKyAxXTtcbiAgICAgICAgY29uc3QgeyBzcGFjZUJlZm9yZSwgc3BhY2VBZnRlciB9ID0gdGhpcy5nZXRQYXJhZ3JhcGhDb2xsYXBzZWRJbmRlbnRzKHBhcmFncmFwaCwgcHJldmlvdXNQYXJhZ3JhcGgsIG5leHRQYXJhZ3JhcGgpO1xuICAgICAgICBpZiAocGFyYWdyYXBoPy5wYXJhZ3JhcGhTdHlsZS5jb250ZXh0dWFsU3BhY2luZykge1xuICAgICAgICAgICAgaWYgKHByZXZpb3VzUGFyYWdyYXBoPy5wYXJhZ3JhcGhTdHlsZS5oZWFkaW5nU3R5bGVJZCAhPT0gcGFyYWdyYXBoLnBhcmFncmFwaFN0eWxlLmhlYWRpbmdTdHlsZUlkKSB7XG4gICAgICAgICAgICAgICAgbGluZXNbMF0ub2Zmc2V0QmVmb3JlICs9IHNwYWNlQmVmb3JlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobmV4dFBhcmFncmFwaD8ucGFyYWdyYXBoU3R5bGUuaGVhZGluZ1N0eWxlSWQgIT09IHBhcmFncmFwaC5wYXJhZ3JhcGhTdHlsZS5oZWFkaW5nU3R5bGVJZCkge1xuICAgICAgICAgICAgICAgIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLm9mZnNldEFmdGVyICs9IHNwYWNlQWZ0ZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxpbmVzWzBdLm9mZnNldEJlZm9yZSArPSBzcGFjZUJlZm9yZTtcbiAgICAgICAgbGluZXNbbGluZXMubGVuZ3RoIC0gMV0ub2Zmc2V0QWZ0ZXIgKz0gc3BhY2VBZnRlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRQYXJhZ3JhcGhDb2xsYXBzZWRJbmRlbnRzKFxuICAgICAgICBwYXJhZ3JhcGg6IFBhcmFncmFwaE1vZGVsLFxuICAgICAgICBwcmV2aW91c1BhcmFncmFwaDogUGFyYWdyYXBoTW9kZWwgfCBudWxsLFxuICAgICAgICBuZXh0UGFyYWdyYXBoOiBQYXJhZ3JhcGhNb2RlbCB8IG51bGxcbiAgICApOiB7IHNwYWNlQmVmb3JlOiBudW1iZXI7IHNwYWNlQWZ0ZXI6IG51bWJlciB9IHtcbiAgICAgICAgY29uc3QgYXV0b1NwYWNpbmdPZmZzZXQgPSAxOTtcbiAgICAgICAgY29uc3QgaW5kZW50cyA9IHsgc3BhY2VCZWZvcmU6IDAsIHNwYWNlQWZ0ZXI6IDAgfTtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoU3R5bGUgPSBwYXJhZ3JhcGgucGFyYWdyYXBoU3R5bGU7XG4gICAgICAgIGlmICghcHJldmlvdXNQYXJhZ3JhcGggfHwgcGFyYWdyYXBoU3R5bGUuc3BhY2VCZWZvcmUgPiBwcmV2aW91c1BhcmFncmFwaC5wYXJhZ3JhcGhTdHlsZS5zcGFjZUFmdGVyKSB7XG4gICAgICAgICAgICBpbmRlbnRzLnNwYWNlQmVmb3JlID0gcGFyYWdyYXBoU3R5bGUuc3BhY2VCZWZvcmU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW5leHRQYXJhZ3JhcGggfHwgcGFyYWdyYXBoU3R5bGUuc3BhY2VBZnRlciA+PSBuZXh0UGFyYWdyYXBoLnBhcmFncmFwaFN0eWxlLnNwYWNlQmVmb3JlKSB7XG4gICAgICAgICAgICBpbmRlbnRzLnNwYWNlQWZ0ZXIgPSBwYXJhZ3JhcGhTdHlsZS5zcGFjZUFmdGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmFncmFwaD8ucGFyYWdyYXBoU3R5bGUuYmVmb3JlQXV0b3NwYWNpbmcpIHtcbiAgICAgICAgICAgIGlmICghcHJldmlvdXNQYXJhZ3JhcGgpIHtcbiAgICAgICAgICAgICAgICBpbmRlbnRzLnNwYWNlQmVmb3JlID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYWdyYXBoU3R5bGUuc3BhY2VCZWZvcmUgPiBwcmV2aW91c1BhcmFncmFwaC5wYXJhZ3JhcGhTdHlsZS5zcGFjZUFmdGVyKSB7XG4gICAgICAgICAgICAgICAgaW5kZW50cy5zcGFjZUJlZm9yZSA9IGF1dG9TcGFjaW5nT2Zmc2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmFncmFwaD8ucGFyYWdyYXBoU3R5bGUuYWZ0ZXJBdXRvc3BhY2luZykge1xuICAgICAgICAgICAgaWYgKCFuZXh0UGFyYWdyYXBoKSB7XG4gICAgICAgICAgICAgICAgaW5kZW50cy5zcGFjZUFmdGVyID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYWdyYXBoU3R5bGUuc3BhY2VBZnRlciA+PSBuZXh0UGFyYWdyYXBoLnBhcmFncmFwaFN0eWxlLnNwYWNlQmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgaW5kZW50cy5zcGFjZUFmdGVyID0gYXV0b1NwYWNpbmdPZmZzZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5kZW50cztcbiAgICB9XG59XG4iXX0=
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYWdyYXBoLmhlbHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliLytzaGFyZWQvZWRpdG9yL2NvcmUvaGVscGVycy9wYXJhZ3JhcGguaGVscGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFPM0MsTUFBTSxPQUFPLGVBQWU7SUFDeEIsTUFBTSxDQUFDLDBCQUEwQixDQUM3QixnQkFBMkIsRUFDM0IsaUJBQTJGLEVBQzNGLFNBQTZFLEVBQzdFLE1BQTJDO1FBRTNDLElBQUksd0JBQXdCLEdBQUcsaUJBQWlCLENBQUMsZUFBZSxDQUFDO1FBQ2pFLElBQUksV0FBVyxHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztRQUM3QyxJQUFJLFlBQVksR0FBd0IsSUFBSSxDQUFDO1FBQzdDLElBQUksdUJBQXVCLEdBQUcsVUFBVSxDQUFDLGVBQWUsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDbkcsS0FBSyxNQUFNLFlBQVksSUFBSSxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUU7WUFDdkQsWUFBWSxDQUFDLFVBQVUsR0FBRyxFQUFFLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDO1lBQ2hFLFlBQVksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUM7WUFDckMsWUFBWSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7WUFDL0IsWUFBWSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7WUFDN0IsTUFBTSxjQUFjLEdBQUcsWUFBWSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDO1lBQ3ZFLE1BQU0sZUFBZSxHQUFHLHVCQUF1QixDQUFDLGFBQWEsR0FBRyx3QkFBd0IsQ0FBQztZQUN6RixJQUNJLENBQUMsWUFBWSxDQUFDLFFBQVE7Z0JBQ3RCLENBQUMs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O1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUVPLE1BQU0sQ0FBQyxpQkFBaUIsQ0FDNUIsTUFBMkMsRUFDM0MsZ0JBQXdCLEVBQ3hCLGVBQXVCLEVBQ3ZCLHdCQUFnQyxFQUNoQyxhQUFxQjtRQUVyQixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxXQUFXLElBQUksZ0JBQWdCLENBQUMsQ0FBQztRQUMzRSxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUNqRyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTGluZUluZm9Nb2RlbCB9IGZyb20gJy4uL21vZGVscy9saW5lLWluZm8ubW9kZWwnO1xuaW1wb3J0IHsgTm9kZXJUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2N1c3RvbS1jb21wb25lbnRzL3RhYmxlL2NvbXBvbmVudHMvdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IFBhZ2VIZWxwZXIgfSBmcm9tICcuL3BhZ2UuaGVscGVyJztcbmltcG9ydCB7IFBhZ2VWZXJ0aWNhbERhdGFNb2RlbCB9IGZyb20gJy4uL3BhZ2luZy9wYWdlLXZlcnRpY2FsLWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgUGFyYWdyYXBoIH0gZnJvbSAnLi4vcGFnaW5nL3BhcmFncmFwaCc7XG5pbXBvcnQgeyBQYXJhZ3JhcGhNb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcGFyYWdyYXBoLm1vZGVsJztcbmltcG9ydCB7IFRleHRMaW5lSW5mbyB9IGZyb20gJy4uL3BhZ2luZy90ZXh0LWxpbmUtaW5mbyc7XG5pbXBvcnQgeyBWaXNpYmxlTGluZUluZm8gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3Zpc2libGUtbGluZS1pbmZvLmludGVyZmFjZSc7XG5cbmV4cG9ydCBjbGFzcyBQYXJhZ3JhcGhIZWxwZXIge1xuICAgIHN0YXRpYyBwcm9jZXNzVGV4dExpbmVzUHJvcGVydGllcyhcbiAgICAgICAgY3VycmVudFBhcmFncmFwaDogUGFyYWdyYXBoLFxuICAgICAgICBwcmV2UGFyYWdyYXBoSW5mbzogeyBsYXN0UGFnZTogbnVtYmVyOyBwYXJhZ3JhcGhIZWlnaHQ6IG51bWJlcjsgcGFyYWdyYXBoTGFzdExpbmU6IG51bWJlciB9LFxuICAgICAgICBwYWdlc0luZm86IHsgcGFnZXNWZXJ0aWNhbERhdGE6IFBhZ2VWZXJ0aWNhbERhdGFNb2RlbFtdOyBwYWdlc1NwYWNlOiBudW1iZXIgfSxcbiAgICAgICAgdGFibGVzOiBDb21wb25lbnRSZWY8Tm9kZXJUYWJsZUNvbXBvbmVudD5bXVxuICAgICk6IHZvaWQge1xuICAgICAgICBsZXQgY3VycmVudFBhZ2VDb250ZW50SGVpZ2h0ID0gcHJldlBhcmFncmFwaEluZm8ucGFyYWdyYXBoSGVpZ2h0O1xuICAgICAgICBsZXQgY3VycmVudFBhZ2UgPSBwcmV2UGFyYWdyYXBoSW5mby5sYXN0UGFnZTtcbiAgICAgICAgbGV0IHByZXZpb3VzTGluZTogVGV4dExpbmVJbmZvIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGxldCBjdXJyZW50UGFnZVZlcnRpY2FsRGF0YSA9IFBhZ2VIZWxwZXIuZ2V0VmVydGljYWxEYXRhKGN1cnJlbnRQYWdlLCBwYWdlc0luZm8ucGFnZXNWZXJ0aWNhbERhdGEpO1xuICAgICAgICBmb3IgKGNvbnN0IHRleHRMaW5lSW5mbyBvZiBjdXJyZW50UGFyYWdyYXBoLnRleHRMaW5lc0luZm8pIHtcbiAgICAgICAgICAgIHRleHRMaW5lSW5mby5zY3JlZW5MaW5lID0gKytwcmV2UGFyYWdyYXBoSW5mby5wYXJhZ3JhcGhMYXN0TGluZTtcbiAgICAgICAgICAgIHRleHRMaW5lSW5mby5maXJzdExpbmVQYWdlT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIHRleHRMaW5lSW5mby5lbmRQYWdlT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIHRleHRMaW5lSW5mby5zcGxpdE9mZnNldCA9IDA7XG4gICAgICAgICAgICBjb25zdCB0ZXh0TGluZUhlaWdodCA9IHRleHRMaW5lSW5mby5oZWlnaHQgKyB0ZXh0TGluZUluZm8ub2Zmc2V0QmVmb3JlO1xuICAgICAgICAgICAgY29uc3QgbGVmdFNwYWNlT25QYWdlID0gY3VycmVudFBhZ2VWZXJ0aWNhbERhdGEuY29udGVudEhlaWdodCAtIGN1cnJlbnRQYWdlQ29udGVudEhlaWdodDtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAhdGV4dExpbmVJbmZvLmhhc1RhYmxlICYmXG4gICAgICAgICAgICAgICAgKHByZXZQYXJhZ3JhcGhJbmZvLnBhcmFncmFwaExhc3RMaW5lID09PSAwIHx8ICh0ZXh0TGluZUhlaWdodCA8PSBsZWZ0U3BhY2VPblBhZ2UgJiYgIXRleHRMaW5lSW5mby5pc0FmdGVyUGFnZUJyZWFrKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c0xpbmU/Lmhhc1RhYmxlICYmIHByZXZpb3VzTGluZS5wYWdlICE9IGN1cnJlbnRQYWdlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHRMaW5lSW5mby5zcGxpdE9mZnNldCA9IGN1cnJlbnRQYWdlQ29udGVudEhlaWdodDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50UGFnZUNvbnRlbnRIZWlnaHQgKz0gdGV4dExpbmVIZWlnaHQgKyB0ZXh0TGluZUluZm8ub2Zmc2V0QWZ0ZXI7XG4gICAgICAgICAgICAgICAgdGV4dExpbmVJbmZvLnBhZ2UgPSBjdXJyZW50UGFnZTtcbiAgICAgICAgICAgICAgICBwcmV2aW91c0xpbmUgPSB0ZXh0TGluZUluZm87XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG5leHRQYWdlVmVydGljYWxEYXRhID0gUGFnZUhlbHBlci5nZXRWZXJ0aWNhbERhdGEoY3VycmVudFBhZ2UgKyAxLCBwYWdlc0luZm8ucGFnZXNWZXJ0aWNhbERhdGEpO1xuICAgICAgICAgICAgY29uc3Qgc3BhY2VCZXR3ZWVuUGFnZXNDb250ZW50ID0gcGFnZXNJbmZvLnBhZ2VzU3BhY2UgKyBjdXJyZW50UGFnZVZlcnRpY2FsRGF0YS5tYXJnaW5Cb3R0b20gKyBuZXh0UGFnZVZlcnRpY2FsRGF0YS5tYXJnaW5Ub3A7XG4gICAgICAgICAgICBpZiAodGV4dExpbmVJbmZvLmhhc1RhYmxlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzcGxpdHNDb3VudCwgbGVmdEhlaWdodCwgdGFibGVIZWlnaHQgfSA9IFBhcmFncmFwaEhlbHBlci5wcm9jZXNzVGFibGVTcGxpdChcbiAgICAgICAgICAgICAgICAgICAgdGFibGVzLFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFyYWdyYXBoLnN0YXJ0SW5zZXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGxlZnRTcGFjZU9uUGFnZSxcbiAgICAgICAgICAgICAgICAgICAgc3BhY2VCZXR3ZWVuUGFnZXNDb250ZW50LFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZVZlcnRpY2FsRGF0YS5jb250ZW50SGVpZ2h0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0ZXh0TGluZUluZm8uaGVpZ2h0ID0gdGFibGVIZWlnaHQ7XG4gICAgICAgICAgICAgICAgdGV4dExpbmVJbmZvLnBhZ2UgPSBjdXJyZW50UGFnZTtcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFnZSArPSBzcGxpdHNDb3VudDtcbiAgICAgICAgICAgICAgICBpZiAoc3BsaXRzQ291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRMaW5lSW5mby5oZWlnaHQgPT09IGxlZnRIZWlnaHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRMaW5lSW5mby5wYWdlKys7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYWdlT2Zmc2V0ID0gc3BhY2VCZXR3ZWVuUGFnZXNDb250ZW50ICsgbGVmdFNwYWNlT25QYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzTGluZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTGluZS5lbmRQYWdlT2Zmc2V0ID0gcGFnZU9mZnNldDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhcmFncmFwaC5wYWdlUHJldmlvdXNDb250ZW50SGVpZ2h0ID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0TGluZUluZm8uZmlyc3RMaW5lUGFnZU9mZnNldCA9IHBhZ2VPZmZzZXQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZUNvbnRlbnRIZWlnaHQgPSBsZWZ0SGVpZ2h0ICsgdGV4dExpbmVJbmZvLm9mZnNldEJlZm9yZSArIHRleHRMaW5lSW5mby5vZmZzZXRBZnRlcjtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhZ2VWZXJ0aWNhbERhdGEgPSBuZXh0UGFnZVZlcnRpY2FsRGF0YTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZUNvbnRlbnRIZWlnaHQgKz0gdGV4dExpbmVJbmZvLmhlaWdodCArIHRleHRMaW5lSW5mby5vZmZzZXRCZWZvcmUgKyB0ZXh0TGluZUluZm8ub2Zmc2V0QWZ0ZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwcmV2UGFyYWdyYXBoSW5mby5wYXJhZ3JhcGhMYXN0TGluZSAhPT0gMCAmJiAodGV4dExpbmVIZWlnaHQgPiBsZWZ0U3BhY2VPblBhZ2UgfHwgdGV4dExpbmVJbmZvLmlzQWZ0ZXJQYWdlQnJlYWspKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFnZU9mZnNldCA9IHNwYWNlQmV0d2VlblBhZ2VzQ29udGVudCArIGxlZnRTcGFjZU9uUGFnZTtcbiAgICAgICAgICAgICAgICB0ZXh0TGluZUluZm8ucGFnZSA9ICsrY3VycmVudFBhZ2U7XG4gICAgICAgICAgICAgICAgY3VycmVudFBhZ2VWZXJ0aWNhbERhdGEgPSBuZXh0UGFnZVZlcnRpY2FsRGF0YTtcbiAgICAgICAgICAgICAgICBjdXJyZW50UGFnZUNvbnRlbnRIZWlnaHQgPSB0ZXh0TGluZUhlaWdodCArIHRleHRMaW5lSW5mby5vZmZzZXRBZnRlcjtcbiAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNMaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzTGluZS5lbmRQYWdlT2Zmc2V0ID0gcGFnZU9mZnNldDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFyYWdyYXBoLnBhZ2VQcmV2aW91c0NvbnRlbnRIZWlnaHQgPSAwO1xuICAgICAgICAgICAgICAgICAgICB0ZXh0TGluZUluZm8uZmlyc3RMaW5lUGFnZU9mZnNldCA9IHBhZ2VPZmZzZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcmV2aW91c0xpbmUgPSB0ZXh0TGluZUluZm87XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgcHJvY2Vzc1RleHRMaW5lc1Byb3BlcnRpZXNGb3JTaW5nbGVQYWdlKFxuICAgICAgICBjdXJyZW50UGFyYWdyYXBoOiBQYXJhZ3JhcGgsXG4gICAgICAgIHByZXZQYXJhZ3JhcGhJbmZvOiB7IGxhc3RQYWdlOiBudW1iZXI7IHBhcmFncmFwaExhc3RMaW5lOiBudW1iZXIgfVxuICAgICk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IHRleHRMaW5lSW5mbyBvZiBjdXJyZW50UGFyYWdyYXBoLnRleHRMaW5lc0luZm8pIHtcbiAgICAgICAgICAgIHRleHRMaW5lSW5mby5zY3JlZW5MaW5lID0gKytwcmV2UGFyYWdyYXBoSW5mby5wYXJhZ3JhcGhMYXN0TGluZTtcbiAgICAgICAgICAgIHRleHRMaW5lSW5mby5maXJzdExpbmVQYWdlT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIHRleHRMaW5lSW5mby5lbmRQYWdlT2Zmc2V0ID0gMDtcbiAgICAgICAgICAgIHRleHRMaW5lSW5mby5wYWdlID0gcHJldlBhcmFncmFwaEluZm8ubGFzdFBhZ2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGF0aWMgZ2V0VmlzaWJsZUxpbmVJbmZvKHBhcmFncmFwaFRleHRMaW5lczogVGV4dExpbmVJbmZvW10sIG9mZnNldFRvcDogbnVtYmVyLCBkaXJlY3Rpb246IG51bWJlcik6IFZpc2libGVMaW5lSW5mbyB8IG51bGwge1xuICAgICAgICBpZiAoIXBhcmFncmFwaFRleHRMaW5lcykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGluZUluZGV4ID0gMDtcbiAgICAgICAgd2hpbGUgKGxpbmVJbmRleCA8IHBhcmFncmFwaFRleHRMaW5lcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGxpbmUgPSBwYXJhZ3JhcGhUZXh0TGluZXNbbGluZUluZGV4XTtcbiAgICAgICAgICAgIGlmIChvZmZzZXRUb3AgPD0gbGluZS5oZWlnaHQgKyBsaW5lLmVuZFBhZ2VPZmZzZXQpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb2Zmc2V0VG9wIC09IGxpbmUuaGVpZ2h0ICsgbGluZS5lbmRQYWdlT2Zmc2V0O1xuICAgICAgICAgICAgbGluZUluZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2aXNpYmxlTGluZSA9IHBhcmFncmFwaFRleHRMaW5lc1tsaW5lSW5kZXhdIHx8IHBhcmFncmFwaFRleHRMaW5lc1tsaW5lSW5kZXggLSAxXTtcbiAgICAgICAgY29uc3Qgc2NyZWVuSW5kZXggPSB2aXNpYmxlTGluZS5zY3JlZW5MaW5lO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbmRleDogbGluZUluZGV4LFxuICAgICAgICAgICAgc2NyZWVuSW5kZXg6IHNjcmVlbkluZGV4LFxuICAgICAgICAgICAgdmlzaWJsZVNjcmVlbkluZGV4OiBvZmZzZXRUb3AgPiAwID8gc2NyZWVuSW5kZXggKyBkaXJlY3Rpb24gOiBzY3JlZW5JbmRleFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBnZXRQYXJhZ3JhcGhQYWdlcyhwYXJhZ3JhcGhUZXh0TGluZXNJbmZvOiBUZXh0TGluZUluZm9bXSk6IG51bWJlcltdIHtcbiAgICAgICAgY29uc3QgcmVzdWx0UGFnZXMgPSBbXTtcbiAgICAgICAgcGFyYWdyYXBoVGV4dExpbmVzSW5mby5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgICAgaWYgKCFyZXN1bHRQYWdlcy5pbmNsdWRlcyh4LnBhZ2UpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0UGFnZXMucHVzaCh4LnBhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0UGFnZXM7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFBhcmFncmFwaEhlaWdodChwYXJhZ3JhcGhUZXh0TGluZXNJbmZvOiBUZXh0TGluZUluZm9bXSk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBwYXJhZ3JhcGhUZXh0TGluZXNJbmZvLnJlZHVjZShcbiAgICAgICAgICAgIChwcmV2LCBuZXh0KSA9PiBwcmV2ICsgbmV4dC5oZWlnaHQgKyBuZXh0LmVuZFBhZ2VPZmZzZXQgKyBuZXh0Lm9mZnNldEJlZm9yZSArIG5leHQub2Zmc2V0QWZ0ZXIsXG4gICAgICAgICAgICAwXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgc3RhdGljIGdldFBhZ2VMaW5lc0hlaWdodChwYXJhZ3JhcGhUZXh0TGluZXNJbmZvOiBUZXh0TGluZUluZm9bXSwgcGFnZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHBhcmFncmFwaFRleHRMaW5lc0luZm9cbiAgICAgICAgICAgIC5maWx0ZXIobGluZSA9PiBsaW5lLnBhZ2UgPT09IHBhZ2UpXG4gICAgICAgICAgICAucmVkdWNlKChwcmV2LCBuZXh0KSA9PiBwcmV2ICsgbmV4dC5oZWlnaHQgKyBuZXh0Lm9mZnNldEFmdGVyICsgbmV4dC5zcGxpdE9mZnNldCwgMCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHByb2Nlc3NPZmZzZXRMaW5lV2l0aE51bWJlcmluZ01hcmtlcih0ZXh0TGluZUluZm86IFRleHRMaW5lSW5mbywgbWFya2VySGVpZ2h0OiBudW1iZXIsIG9mZnNldEJlZm9yZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICghbWFya2VySGVpZ2h0IHx8IHRleHRMaW5lSW5mby5oZWlnaHQgPj0gbWFya2VySGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0ZXh0TGluZUluZm8ub2Zmc2V0QmVmb3JlID0gb2Zmc2V0QmVmb3JlICsgbWFya2VySGVpZ2h0IC0gdGV4dExpbmVJbmZvLmhlaWdodDtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXBwbHlQYXJhZ3JhcGhJbmRlbnRzVG9MaW5lcyhsaW5lczogTGluZUluZm9Nb2RlbFtdLCBwYXJhZ3JhcGhJbmRleDogbnVtYmVyLCBwYXJhZ3JhcGhzOiBQYXJhZ3JhcGhNb2RlbFtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaCA9IHBhcmFncmFwaHNbcGFyYWdyYXBoSW5kZXhdO1xuICAgICAgICBjb25zdCBwcmV2aW91c1BhcmFncmFwaCA9IHBhcmFncmFwaHNbcGFyYWdyYXBoSW5kZXggLSAxXTtcbiAgICAgICAgY29uc3QgbmV4dFBhcmFncmFwaCA9IHBhcmFncmFwaHNbcGFyYWdyYXBoSW5kZXggKyAxXTtcbiAgICAgICAgY29uc3QgeyBzcGFjZUJlZm9yZSwgc3BhY2VBZnRlciB9ID0gdGhpcy5nZXRQYXJhZ3JhcGhDb2xsYXBzZWRJbmRlbnRzKHBhcmFncmFwaCwgcHJldmlvdXNQYXJhZ3JhcGgsIG5leHRQYXJhZ3JhcGgpO1xuICAgICAgICBpZiAocGFyYWdyYXBoPy5wYXJhZ3JhcGhTdHlsZS5jb250ZXh0dWFsU3BhY2luZykge1xuICAgICAgICAgICAgaWYgKHByZXZpb3VzUGFyYWdyYXBoPy5wYXJhZ3JhcGhTdHlsZS5oZWFkaW5nU3R5bGVJZCAhPT0gcGFyYWdyYXBoLnBhcmFncmFwaFN0eWxlLmhlYWRpbmdTdHlsZUlkKSB7XG4gICAgICAgICAgICAgICAgbGluZXNbMF0ub2Zmc2V0QmVmb3JlICs9IHNwYWNlQmVmb3JlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobmV4dFBhcmFncmFwaD8ucGFyYWdyYXBoU3R5bGUuaGVhZGluZ1N0eWxlSWQgIT09IHBhcmFncmFwaC5wYXJhZ3JhcGhTdHlsZS5oZWFkaW5nU3R5bGVJZCkge1xuICAgICAgICAgICAgICAgIGxpbmVzW2xpbmVzLmxlbmd0aCAtIDFdLm9mZnNldEFmdGVyICs9IHNwYWNlQWZ0ZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxpbmVzWzBdLm9mZnNldEJlZm9yZSArPSBzcGFjZUJlZm9yZTtcbiAgICAgICAgbGluZXNbbGluZXMubGVuZ3RoIC0gMV0ub2Zmc2V0QWZ0ZXIgKz0gc3BhY2VBZnRlcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBnZXRQYXJhZ3JhcGhDb2xsYXBzZWRJbmRlbnRzKFxuICAgICAgICBwYXJhZ3JhcGg6IFBhcmFncmFwaE1vZGVsLFxuICAgICAgICBwcmV2aW91c1BhcmFncmFwaDogUGFyYWdyYXBoTW9kZWwgfCBudWxsLFxuICAgICAgICBuZXh0UGFyYWdyYXBoOiBQYXJhZ3JhcGhNb2RlbCB8IG51bGxcbiAgICApOiB7IHNwYWNlQmVmb3JlOiBudW1iZXI7IHNwYWNlQWZ0ZXI6IG51bWJlciB9IHtcbiAgICAgICAgY29uc3QgYXV0b1NwYWNpbmdPZmZzZXQgPSAxOTtcbiAgICAgICAgY29uc3QgaW5kZW50cyA9IHsgc3BhY2VCZWZvcmU6IDAsIHNwYWNlQWZ0ZXI6IDAgfTtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoU3R5bGUgPSBwYXJhZ3JhcGgucGFyYWdyYXBoU3R5bGU7XG4gICAgICAgIGlmICghcHJldmlvdXNQYXJhZ3JhcGggfHwgcGFyYWdyYXBoU3R5bGUuc3BhY2VCZWZvcmUgPiBwcmV2aW91c1BhcmFncmFwaC5wYXJhZ3JhcGhTdHlsZS5zcGFjZUFmdGVyKSB7XG4gICAgICAgICAgICBpbmRlbnRzLnNwYWNlQmVmb3JlID0gcGFyYWdyYXBoU3R5bGUuc3BhY2VCZWZvcmU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW5leHRQYXJhZ3JhcGggfHwgcGFyYWdyYXBoU3R5bGUuc3BhY2VBZnRlciA+PSBuZXh0UGFyYWdyYXBoLnBhcmFncmFwaFN0eWxlLnNwYWNlQmVmb3JlKSB7XG4gICAgICAgICAgICBpbmRlbnRzLnNwYWNlQWZ0ZXIgPSBwYXJhZ3JhcGhTdHlsZS5zcGFjZUFmdGVyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmFncmFwaD8ucGFyYWdyYXBoU3R5bGUuYmVmb3JlQXV0b3NwYWNpbmcpIHtcbiAgICAgICAgICAgIGlmICghcHJldmlvdXNQYXJhZ3JhcGgpIHtcbiAgICAgICAgICAgICAgICBpbmRlbnRzLnNwYWNlQmVmb3JlID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYWdyYXBoU3R5bGUuc3BhY2VCZWZvcmUgPiBwcmV2aW91c1BhcmFncmFwaC5wYXJhZ3JhcGhTdHlsZS5zcGFjZUFmdGVyKSB7XG4gICAgICAgICAgICAgICAgaW5kZW50cy5zcGFjZUJlZm9yZSA9IGF1dG9TcGFjaW5nT2Zmc2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmFncmFwaD8ucGFyYWdyYXBoU3R5bGUuYWZ0ZXJBdXRvc3BhY2luZykge1xuICAgICAgICAgICAgaWYgKCFuZXh0UGFyYWdyYXBoKSB7XG4gICAgICAgICAgICAgICAgaW5kZW50cy5zcGFjZUFmdGVyID0gMDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocGFyYWdyYXBoU3R5bGUuc3BhY2VBZnRlciA+PSBuZXh0UGFyYWdyYXBoLnBhcmFncmFwaFN0eWxlLnNwYWNlQmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgaW5kZW50cy5zcGFjZUFmdGVyID0gYXV0b1NwYWNpbmdPZmZzZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaW5kZW50cztcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBwcm9jZXNzVGFibGVTcGxpdChcbiAgICAgICAgdGFibGVzOiBDb21wb25lbnRSZWY8Tm9kZXJUYWJsZUNvbXBvbmVudD5bXSxcbiAgICAgICAgc3RhcnRJbnNlcnRJbmRleDogbnVtYmVyLFxuICAgICAgICBsZWZ0U3BhY2VPblBhZ2U6IG51bWJlcixcbiAgICAgICAgc3BhY2VCZXR3ZWVuUGFnZXNDb250ZW50OiBudW1iZXIsXG4gICAgICAgIGNvbnRlbnRIZWlnaHQ6IG51bWJlclxuICAgICk6IHsgc3BsaXRzQ291bnQ6IG51bWJlcjsgdGFibGVIZWlnaHQ6IG51bWJlcjsgbGVmdEhlaWdodDogbnVtYmVyIH0ge1xuICAgICAgICBjb25zdCB0YWJsZSA9IHRhYmxlcy5maW5kKHggPT4geC5pbnN0YW5jZS5pbnNlcnRJbmRleCA+PSBzdGFydEluc2VydEluZGV4KTtcbiAgICAgICAgcmV0dXJuIHRhYmxlLmluc3RhbmNlLnByb2Nlc3NTcGxpdChsZWZ0U3BhY2VPblBhZ2UsIHNwYWNlQmV0d2VlblBhZ2VzQ29udGVudCwgY29udGVudEhlaWdodCk7XG4gICAgfVxufVxuIl19
@@ -89,6 +89,9 @@ export class PositionHelper {
89
89
  sizeMax = tokens[currentColumn];
90
90
  }
91
91
  }
92
+ if (tokens[tokenIndex]?.isTable) {
93
+ sizeMax.ascent = paragraphInfo.lineHeight;
94
+ }
92
95
  const paragraph = paragraphs[paragraphInfo.paragraphIndex];
93
96
  const paragraphTop = paragraph.distanceFromTop || 0;
94
97
  const linePaddingLeft = paragraph.textLinesInfo[paragraphInfo.lineIndex].paddingLeft;
@@ -188,4 +191,4 @@ export class PositionHelper {
188
191
  return page;
189
192
  }
190
193
  }
191
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb24uaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvK3NoYXJlZC9lZGl0b3IvY29yZS9oZWxwZXJzL3Bvc2l0aW9uLmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFHakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR3RELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFakMsTUFBTSxPQUFPLGNBQWM7SUFDdkI7O09BRUc7SUFDSCxNQUFNLENBQUMsZUFBZSxDQUFDLE9BQW9CLEVBQUUsZ0JBQXVCO1FBQ2hFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXJHLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVEOztRQUVJO0lBQ0osTUFBTSxDQUFDLHFCQUFxQixDQUFDLFVBQXVCLEVBQUUsR0FBVztRQUM3RCxNQUFNLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDakYsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDaEMsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENB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Q0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDO1FBQ3hHLElBQUksSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNiLE9BQU8sSUFBSSxJQUFJLFVBQVUsRUFBRTtZQUN2QixNQUFNLGVBQWUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzdGLElBQUksZUFBZSxJQUFJLElBQUksRUFBRTtnQkFDekIsTUFBTTthQUNUO1lBQ0QsSUFBSSxFQUFFLENBQUM7U0FDVjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEN1cnNvclBvc2l0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9jdXJzb3ItcG9zaXRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IERpc3BsYXlWYWx1ZSB9IGZyb20gJy4uL2NvbnN0YW50cy9kaXNwbGF5LXZhbHVlcy5jb25zdCc7XG5pbXBvcnQgeyBFZGl0U2Vzc2lvbiB9IGZyb20gJy4uL2VkaXQuc2Vzc2lvbic7XG5pbXBvcnQgeyBJRm9udE1ldHJpY1NpemUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2ZvbnQtbWV0cmljLXNpemUuaW50ZXJmYWNlJztcbmltcG9ydCB7IExpbmVXaWR0aEhlbHBlciB9IGZyb20gJy4vbGluZS13aWR0aC5oZWxwZXInO1xuaW1wb3J0IHsgUGFyYWdyYXBoIH0gZnJvbSAnLi4vcGFnaW5nL3BhcmFncmFwaCc7XG5pbXBvcnQgeyBQYXJhZ3JhcGhJbmZvIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wYXJhZ3JhcGgtaW5mby5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuLi9wb2ludCc7XG5cbmV4cG9ydCBjbGFzcyBQb3NpdGlvbkhlbHBlciB7XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgYHBhZ2VYYCBhbmQgYHBhZ2VZYCBjb29yZGluYXRlcyBvZiB0aGUgZG9jdW1lbnQgcG9zaXRpb24uXG4gICAgICovXG4gICAgc3RhdGljIGRvY3VtZW50VG9QaXhlbChzZXNzaW9uOiBFZGl0U2Vzc2lvbiwgZG9jdW1lbnRQb3NpdGlvbjogUG9pbnQpOiBDdXJzb3JQb3NpdGlvbiB7XG4gICAgICAgIGNvbnN0IHNjcmVlblBvc2l0aW9uID0gdGhpcy5kb2N1bWVudFRvU2NyZWVuKHNlc3Npb24sIGRvY3VtZW50UG9zaXRpb24ucm93LCBkb2N1bWVudFBvc2l0aW9uLmNvbHVtbik7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc2NyZWVuVG9QaXhlbChzZXNzaW9uLCBzY3JlZW5Qb3NpdGlvbi5yb3csIHNjcmVlblBvc2l0aW9uLmNvbHVtbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IHBhcmFncmFwaCBpbmZvIChwYXJhZ3JhcGggaW5kZXgsIHBhcmFncmFwaCBsaW5lIGluZGV4LCBsaW5lIHRvcCBvZmZzZXQgYW5kIG90aGVycykgYnkgcm93IGluZGV4XG4gICAgICoqL1xuICAgIHN0YXRpYyBnZXRQYXJhZ3JhcGhJbmZvQnlSb3cocGFyYWdyYXBoczogUGFyYWdyYXBoW10sIHJvdzogbnVtYmVyKTogUGFyYWdyYXBoSW5mbyB7XG4gICAgICAgIGNvbnN0IHsgcGFyYWdyYXBoSW5kZXgsIGxpbmVJbmRleCB9ID0gdGhpcy5maW5kTGluZUluUGFyYWdyYXBocyhwYXJhZ3JhcGhzLCByb3cpO1xuICAgICAgICBsZXQgbGluZVRvcE9mZnNldCA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGluZUluZGV4OyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGluZm8gPSBwYXJhZ3JhcGhzW3BhcmFncmFwaEluZGV4XS50ZXh0TGluZXNJbmZvW2ldO1xuICAgICAgICAgICAgbGluZVRvcE9mZnNldCArPSBpbmZvLmhlaWdodCArIGluZm8uZW5kUGFnZU9mZnNldCArIGluZm8ub2Zmc2V0QmVmb3JlICsgaW5mby5vZmZzZXRBZnRlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmFncmFwaExpbmVJbmZvID0gcGFyYWdyYXBoc1twYXJhZ3JhcGhJbmRleF0udGV4dExpbmVzSW5mb1tsaW5lSW5kZXhdO1xuICAgICAgICBsaW5lVG9wT2Zmc2V0ICs9IHBhcmFncmFwaExpbmVJbmZvLm9mZnNldEJlZm9yZTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGFyYWdyYXBoSW5kZXgsXG4gICAgICAgICAgICBsaW5lSW5kZXgsXG4gICAgICAgICAgICBsaW5lVG9wT2Zmc2V0LFxuICAgICAgICAgICAgaW5kZW50QmVmb3JlOiBwYXJhZ3JhcGhMaW5lSW5mby5vZmZzZXRCZWZvcmUsXG4gICAgICAgICAgICBsaW5lSGVpZ2h0OiBwYXJhZ3JhcGhMaW5lSW5mby5oZWlnaHRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgZG9jdW1lbnRUb1NjcmVlbihzZXNzaW9uOiBFZGl0U2Vzc2lvbiwgcGFyYWdyYXBoOiBudW1iZXIsIGluZGV4SW5QYXJhZ3JhcGg6IG51bWJlcik6IFBvaW50IHtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoTGluZSA9IHNlc3Npb24ud3JhcFBhcmFncmFwaExpbmVbcGFyYWdyYXBoXTtcbiAgICAgICAgaWYgKCFzZXNzaW9uLndyYXBEYXRhW3BhcmFncmFwaF0ubGVuZ3RoIHx8IHNlc3Npb24ud3JhcERhdGFbcGFyYWdyYXBoXVswXSA+IGluZGV4SW5QYXJhZ3JhcGgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9pbnQocGFyYWdyYXBoTGluZSwgaW5kZXhJblBhcmFncmFwaCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGluZSA9IDA7XG4gICAgICAgIHdoaWxlIChzZXNzaW9uLndyYXBEYXRhW3BhcmFncmFwaF1bbGluZV0gPD0gaW5kZXhJblBhcmFncmFwaCAmJiBsaW5lIDwgc2Vzc2lvbi53cmFwRGF0YVtwYXJhZ3JhcGhdLmxlbmd0aCkge1xuICAgICAgICAgICAgbGluZSsrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZGV4ID0gaW5kZXhJblBhcmFncmFwaCAtIHNlc3Npb24ud3JhcERhdGFbcGFyYWdyYXBoXVtsaW5lIC0gMV07XG4gICAgICAgIHJldHVybiBuZXcgUG9pbnQocGFyYWdyYXBoTGluZSArIGxpbmUsIGluZGV4KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgc2NyZWVuVG9Eb2N1bWVudChzZXNzaW9uOiBFZGl0U2Vzc2lvbiwgbGluZTogbnVtYmVyLCBpbmRleEluTGluZTogbnVtYmVyKTogUG9pbnQge1xuICAgICAgICBsZXQgcGFyYWdyYXBoID0gc2Vzc2lvbi53cmFwUGFyYWdyYXBoTGluZS5maW5kSW5kZXgoeCA9PiB4ID4gbGluZSk7XG4gICAgICAgIGlmIChwYXJhZ3JhcGggPT09IC0xKSB7XG4gICAgICAgICAgICBwYXJhZ3JhcGggPSBzZXNzaW9uLndyYXBQYXJhZ3JhcGhMaW5lLmxlbmd0aCAtIDE7XG4gICAgICAgIH0gZWxzZSBpZiAocGFyYWdyYXBoID4gMCkge1xuICAgICAgICAgICAgcGFyYWdyYXBoID0gcGFyYWdyYXBoIC0gMTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbGluZUluUGFyYWdyYXBoID0gbGluZSAtIHNlc3Npb24ud3JhcFBhcmFncmFwaExpbmVbcGFyYWdyYXBoXTtcbiAgICAgICAgaWYgKCFzZXNzaW9uLndyYXBEYXRhW3BhcmFncmFwaF0ubGVuZ3RoIHx8IGxpbmVJblBhcmFncmFwaCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQb2ludChwYXJhZ3JhcGgsIGluZGV4SW5MaW5lKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleCA9IGluZGV4SW5MaW5lICsgc2Vzc2lvbi53cmFwRGF0YVtwYXJhZ3JhcGhdW2xpbmVJblBhcmFncmFwaCAtIDFdO1xuICAgICAgICByZXR1cm4gbmV3IFBvaW50KHBhcmFncmFwaCwgaW5kZXgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGBwYWdlWGAgYW5kIGBwYWdlWWAgY29vcmRpbmF0ZXMgb2YgdGhlIGRvY3VtZW50IHBvc2l0aW9uLlxuICAgICAqKi9cbiAgICBzdGF0aWMgc2NyZWVuVG9QaXhlbChzZXNzaW9uOiBFZGl0U2Vzc2lvbiwgcm93OiBudW1iZXIsIGNvbHVtbjogbnVtYmVyKTogQ3Vyc29yUG9zaXRpb24ge1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhzID0gc2Vzc2lvbi5wYWdlc1dyYXAucGFyYWdyYXBocztcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoSW5mbyA9IHRoaXMuZ2V0UGFyYWdyYXBoSW5mb0J5Um93KHBhcmFncmFwaHMsIHJvdyk7XG4gICAgICAgIGNvbnN0IHRva2VucyA9IExpbmVXaWR0aEhlbHBlci5nZXRQYXJhZ3JhcGhMaW5lRGlzcGxheVRva2VucyhzZXNzaW9uLCBwYXJhZ3JhcGhJbmZvLnBhcmFncmFwaEluZGV4LCBwYXJhZ3JhcGhJbmZvLmxpbmVJbmRleCk7XG5cbiAgICAgICAgbGV0IHNpemU6IElGb250TWV0cmljU2l6ZSA9IHtcbiAgICAgICAgICAgIHdpZHRoOiA4LFxuICAgICAgICAgICAgaGVpZ2h0OiBwYXJhZ3JhcGhJbmZvLmxpbmVIZWlnaHQsXG4gICAgICAgICAgICBiYXNlbGluZTogcGFyYWdyYXBoSW5mby5saW5lSGVpZ2h0LFxuICAgICAgICAgICAgY29udGVudDogcGFyYWdyYXBoSW5mby5saW5lSGVpZ2h0LFxuICAgICAgICAgICAgZm9udDogcGFyYWdyYXBoSW5mby5saW5lSGVpZ2h0LFxuICAgICAgICAgICAgbGluZTogcGFyYWdyYXBoSW5mby5saW5lSGVpZ2h0LFxuICAgICAgICAgICAgbXVsdGlwbGllcjogcGFyYWdyYXBoSW5mby5saW5lSGVpZ2h0LFxuICAgICAgICAgICAgYXNjZW50OiAwLFxuICAgICAgICAgICAgZGVzY2VudDogMFxuICAgICAgICB9O1xuICAgICAgICBsZXQgdG9rZW5JbmRleCA9IGNvbHVtbiA+IDAgPyBjb2x1bW4gLSAxIDogY29sdW1uO1xuICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHNpemUgPSB0b2tlbnNbdG9rZW5JbmRleF07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzaXplTmV4dCA9IHRva2Vuc1t0b2tlbkluZGV4ICsgMV07XG4gICAgICAgIGxldCBzaXplTWF4ID0geyAuLi5zaXplIH07XG4gICAgICAgIGxldCBsaW5lV2lkdGhUb1Bvc2l0aW9uID0gc2Vzc2lvbi5wYWdlc1dyYXAuZG9jdW1lbnRNYXJnaW4ubGVmdDtcbiAgICAgICAgZm9yIChsZXQgY3VycmVudENvbHVtbiA9IDA7IGN1cnJlbnRDb2x1bW4gPCB0b2tlbnMubGVuZ3RoOyBjdXJyZW50Q29sdW1uKyspIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50Q29sdW1uIDwgY29sdW1uKSB7XG4gICAgICAgICAgICAgICAgbGluZVdpZHRoVG9Qb3NpdGlvbiArPSB0b2tlbnNbY3VycmVudENvbHVtbl0ud2lkdGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChzaXplTWF4LmFzY2VudCA8IHRva2Vuc1tjdXJyZW50Q29sdW1uXS5hc2NlbnQpIHtcbiAgICAgICAgICAgICAgICBzaXplTWF4ID0gdG9rZW5zW2N1cnJlbnRDb2x1bW5dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYWdyYXBoID0gcGFyYWdyYXBoc1twYXJhZ3JhcGhJbmZvLnBhcmFncmFwaEluZGV4XTtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoVG9wID0gcGFyYWdyYXBoLmRpc3RhbmNlRnJvbVRvcCB8fCAwO1xuICAgICAgICBjb25zdCBsaW5lUGFkZGluZ0xlZnQgPSBwYXJhZ3JhcGgudGV4dExpbmVzSW5mb1twYXJhZ3JhcGhJbmZvLmxpbmVJbmRleF0ucGFkZGluZ0xlZnQ7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhZ2VYOiBsaW5lV2lkdGhUb1Bvc2l0aW9uICsgbGluZVBhZGRpbmdMZWZ0LFxuICAgICAgICAgICAgcGFnZVk6IHBhcmFncmFwaFRvcCArIHBhcmFncmFwaEluZm8ubGluZVRvcE9mZnNldCAtIHNlc3Npb24uc2Nyb2xsVG9wLFxuICAgICAgICAgICAgbGluZUhlaWdodDogcGFyYWdyYXBoSW5mby5saW5lSGVpZ2h0LFxuICAgICAgICAgICAgc2l6ZUN1cnJlbnQ6IHNpemUsXG4gICAgICAgICAgICBzaXplTWF4LFxuICAgICAgICAgICAgc2l6ZU5leHQsXG4gICAgICAgICAgICBmaXJzdENoYXI6IGNvbHVtbiA9PT0gMCxcbiAgICAgICAgICAgIGxhc3RDaGFyOiBjb2x1bW4gPT09IHRva2Vucy5sZW5ndGggLSAxXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgcGl4ZWwgcG9zaXRpb24gdG8gc2NyZWVuIHBvc2l0aW9uXG4gICAgICoqL1xuICAgIHN0YXRpYyBwaXhlbFRvU2NyZWVuKHNlc3Npb246IEVkaXRTZXNzaW9uLCB4OiBudW1iZXIsIHk6IG51bWJlciwgc2Nyb2xsZXJQb3NpdGlvbjogeyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH0pOiBQb2ludCB7XG4gICAgICAgIGNvbnN0IHdyYXAgPSBzZXNzaW9uLnBhZ2VzV3JhcDtcbiAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gc2Vzc2lvbi5zY3JvbGxUb3A7XG5cbiAgICAgICAgbGV0IHlQb3MgPSB5ICsgc2Nyb2xsVG9wIC0gc2Nyb2xsZXJQb3NpdGlvbi50b3A7XG4gICAgICAgIGxldCBwYXJhZ3JhcGhJbmRleCA9IHdyYXAucGFyYWdyYXBocy5maW5kSW5kZXgocGFyYWdyYXBoID0+IHBhcmFncmFwaC5kaXN0YW5jZUZyb21Ub3AgPiB5UG9zKTtcbiAgICAgICAgaWYgKHBhcmFncmFwaEluZGV4IDwgMCkge1xuICAgICAgICAgICAgcGFyYWdyYXBoSW5kZXggPSB3cmFwLnBhcmFncmFwaHMubGVuZ3RoIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJhZ3JhcGhJbmRleCA+IDApIHtcbiAgICAgICAgICAgIHBhcmFncmFwaEluZGV4LS07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJhZ3JhcGggPSB3cmFwLnBhcmFncmFwaHNbcGFyYWdyYXBoSW5kZXhdO1xuICAgICAgICB5UG9zIC09IHBhcmFncmFwaC5kaXN0YW5jZUZyb21Ub3A7XG4gICAgICAgIGxldCBsaW5lSW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAoeVBvcyA+IDAgJiYgbGluZUluZGV4IDwgcGFyYWdyYXBoLnRleHRMaW5lc0luZm8ubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgY29uc3QgbGluZSA9IHBhcmFncmFwaC50ZXh0TGluZXNJbmZvW2xpbmVJbmRleF07XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IGxpbmUuaGVpZ2h0ICsgbGluZS5lbmRQYWdlT2Zmc2V0ICsgbGluZS5vZmZzZXRCZWZvcmUgKyBsaW5lLm9mZnNldEFmdGVyO1xuICAgICAgICAgICAgaWYgKHlQb3MgPD0gd2lkdGgpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpbmVJbmRleCsrO1xuICAgICAgICAgICAgeVBvcyAtPSB3aWR0aDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsaW5lID0gcGFyYWdyYXBoLnRleHRMaW5lc0luZm9bbGluZUluZGV4XS5zY3JlZW5MaW5lO1xuXG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGxldCB4UG9zID0geCAtIHNjcm9sbGVyUG9zaXRpb24ubGVmdCAtIHdyYXAuZG9jdW1lbnRNYXJnaW4ubGVmdCAtIHBhcmFncmFwaC50ZXh0TGluZXNJbmZvW2xpbmVJbmRleF0ucGFkZGluZ0xlZnQ7XG4gICAgICAgIGNvbnN0IHRva2VucyA9IExpbmVXaWR0aEhlbHBlci5nZXRQYXJhZ3JhcGhMaW5lRGlzcGxheVRva2VucyhzZXNzaW9uLCBwYXJhZ3JhcGhJbmRleCwgbGluZUluZGV4KTtcbiAgICAgICAgaWYgKHRva2Vuc1swXS5kaXNwbGF5VmFsdWUgPT09IERpc3BsYXlWYWx1ZS5lbXB0eUxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9pbnQobGluZSwgaW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKHRva2Vucy5sZW5ndGggPiBpbmRleCkge1xuICAgICAgICAgICAgaWYgKHhQb3MgPCB0b2tlbnNbaW5kZXhdLndpZHRoIC8gMikge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB4UG9zIC09IHRva2Vuc1tpbmRleF0ud2lkdGg7XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUG9pbnQobGluZSwgaW5kZXgpO1xuICAgIH1cblxuICAgIHN0YXRpYyBmaW5kTGluZUluUGFyYWdyYXBocyhwYXJhZ3JhcGhzOiBQYXJhZ3JhcGhbXSwgZG9jdW1lbnRMaW5lOiBudW1iZXIpOiB7IHBhcmFncmFwaEluZGV4OiBudW1iZXI7IGxpbmVJbmRleDogbnVtYmVyIH0ge1xuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICBsZXQgcGFyYWdyYXBoSW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAocGFyYWdyYXBoSW5kZXggPCBwYXJhZ3JhcGhzLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGluZGV4ICsgcGFyYWdyYXBoc1twYXJhZ3JhcGhJbmRleF0udGV4dExpbmVzSW5mby5sZW5ndGggPiBkb2N1bWVudExpbmUpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5kZXggKz0gcGFyYWdyYXBoc1twYXJhZ3JhcGhJbmRleF0udGV4dExpbmVzSW5mby5sZW5ndGg7XG4gICAgICAgICAgICBwYXJhZ3JhcGhJbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxpbmVJbmRleCA9IGRvY3VtZW50TGluZSAtIGluZGV4O1xuICAgICAgICByZXR1cm4geyBwYXJhZ3JhcGhJbmRleCwgbGluZUluZGV4IH07XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEFwcHJveGltYXRlUG9zaXRpb24oc2Vzc2lvbjogRWRpdFNlc3Npb24sIGRvY3VtZW50TGluZTogbnVtYmVyLCBwb3NpdGlvbldpZHRoOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhzID0gc2Vzc2lvbi5wYWdlc1dyYXAucGFyYWdyYXBocztcbiAgICAgICAgY29uc3QgZG9jdW1lbnRNYXJnaW4gPSBzZXNzaW9uLnBhZ2VzV3JhcC5kb2N1bWVudE1hcmdpbjtcbiAgICAgICAgY29uc3QgeyBwYXJhZ3JhcGhJbmRleCwgbGluZUluZGV4IH0gPSBQb3NpdGlvbkhlbHBlci5maW5kTGluZUluUGFyYWdyYXBocyhwYXJhZ3JhcGhzLCBkb2N1bWVudExpbmUpO1xuICAgICAgICBsZXQgY29sdW1uID0gMDtcbiAgICAgICAgY29uc3QgdG9rZW5zID0gTGluZVdpZHRoSGVscGVyLmdldFBhcmFncmFwaExpbmVEaXNwbGF5VG9rZW5zKHNlc3Npb24sIHBhcmFncmFwaEluZGV4LCBsaW5lSW5kZXgpO1xuICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA9PT0gMSAmJiB0b2tlbnNbMF0uZGlzcGxheVZhbHVlID09PSBEaXNwbGF5VmFsdWUuZW1wdHlMaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGV4dExpbmVJbmZvID0gcGFyYWdyYXBoc1twYXJhZ3JhcGhJbmRleF0udGV4dExpbmVzSW5mb1tsaW5lSW5kZXhdO1xuICAgICAgICBsZXQgd2lkdGggPSBwb3NpdGlvbldpZHRoIC0gdGV4dExpbmVJbmZvLnBhZGRpbmdMZWZ0IC0gZG9jdW1lbnRNYXJnaW4ubGVmdDtcbiAgICAgICAgd2hpbGUgKGNvbHVtbiA8IHRva2Vucy5sZW5ndGggJiYgd2lkdGggPj0gdG9rZW5zW2NvbHVtbl0ud2lkdGgpIHtcbiAgICAgICAgICAgIHdpZHRoIC09IHRva2Vuc1tjb2x1bW5dLndpZHRoO1xuICAgICAgICAgICAgY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICBzdGF0aWMgcGl4ZWxUb1BhZ2UocG9zWTogbnVtYmVyLCBzZXNzaW9uOiBFZGl0U2Vzc2lvbik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHBhZ2VzQ291bnQgPSBzZXNzaW9uLnBhZ2VzV3JhcC5wYXJhZ3JhcGhzW3Nlc3Npb24ucGFnZXNXcmFwLnBhcmFncmFwaHMubGVuZ3RoIC0gMV0ubGFzdFBhZ2VOdW1iZXI7XG4gICAgICAgIGxldCBwYWdlID0gMTtcbiAgICAgICAgd2hpbGUgKHBhZ2UgPD0gcGFnZXNDb3VudCkge1xuICAgICAgICAgICAgY29uc3QgZW5kUGFnZVBvc2l0aW9uID0gKHNlc3Npb24ucGFnZXNXcmFwLnBhZ2VzU3BhY2UgKyBzZXNzaW9uLnBhZ2VzV3JhcC5wYWdlSGVpZ2h0KSAqIHBhZ2U7XG4gICAgICAgICAgICBpZiAoZW5kUGFnZVBvc2l0aW9uID49IHBvc1kpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhZ2UrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFnZTtcbiAgICB9XG59XG4iXX0=
194
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb24uaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvK3NoYXJlZC9lZGl0b3IvY29yZS9oZWxwZXJzL3Bvc2l0aW9uLmhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFHakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBR3RELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFakMsTUFBTSxPQUFPLGNBQWM7SUFDdkI7O09BRUc7SUFDSCxNQUFNLENBQUMsZUFBZSxDQUFDLE9BQW9CLEVBQUUsZ0JBQXVCO1FBQ2hFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXJHLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUVEOztRQUVJO0lBQ0osTUFBTSxDQUFDLHFCQUFxQixDQUFDLFVBQXVCLEVBQUUsR0FBVztRQUM3RCxNQUFNLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDakYsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDaEMsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENB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T0FBb0I7UUFDakQsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQztRQUN4RyxJQUFJLElBQUksR0FBRyxDQUFDLENBQUM7UUFDYixPQUFPLElBQUksSUFBSSxVQUFVLEVBQUU7WUFDdkIsTUFBTSxlQUFlLEdBQUcsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztZQUM3RixJQUFJLGVBQWUsSUFBSSxJQUFJLEVBQUU7Z0JBQ3pCLE1BQU07YUFDVDtZQUNELElBQUksRUFBRSxDQUFDO1NBQ1Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXJzb3JQb3NpdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvY3Vyc29yLXBvc2l0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBEaXNwbGF5VmFsdWUgfSBmcm9tICcuLi9jb25zdGFudHMvZGlzcGxheS12YWx1ZXMuY29uc3QnO1xuaW1wb3J0IHsgRWRpdFNlc3Npb24gfSBmcm9tICcuLi9lZGl0LnNlc3Npb24nO1xuaW1wb3J0IHsgSUZvbnRNZXRyaWNTaXplIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9mb250LW1ldHJpYy1zaXplLmludGVyZmFjZSc7XG5pbXBvcnQgeyBMaW5lV2lkdGhIZWxwZXIgfSBmcm9tICcuL2xpbmUtd2lkdGguaGVscGVyJztcbmltcG9ydCB7IFBhcmFncmFwaCB9IGZyb20gJy4uL3BhZ2luZy9wYXJhZ3JhcGgnO1xuaW1wb3J0IHsgUGFyYWdyYXBoSW5mbyB9IGZyb20gJy4uL2ludGVyZmFjZXMvcGFyYWdyYXBoLWluZm8uaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvaW50IH0gZnJvbSAnLi4vcG9pbnQnO1xuXG5leHBvcnQgY2xhc3MgUG9zaXRpb25IZWxwZXIge1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGBwYWdlWGAgYW5kIGBwYWdlWWAgY29vcmRpbmF0ZXMgb2YgdGhlIGRvY3VtZW50IHBvc2l0aW9uLlxuICAgICAqL1xuICAgIHN0YXRpYyBkb2N1bWVudFRvUGl4ZWwoc2Vzc2lvbjogRWRpdFNlc3Npb24sIGRvY3VtZW50UG9zaXRpb246IFBvaW50KTogQ3Vyc29yUG9zaXRpb24ge1xuICAgICAgICBjb25zdCBzY3JlZW5Qb3NpdGlvbiA9IHRoaXMuZG9jdW1lbnRUb1NjcmVlbihzZXNzaW9uLCBkb2N1bWVudFBvc2l0aW9uLnJvdywgZG9jdW1lbnRQb3NpdGlvbi5jb2x1bW4pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnNjcmVlblRvUGl4ZWwoc2Vzc2lvbiwgc2NyZWVuUG9zaXRpb24ucm93LCBzY3JlZW5Qb3NpdGlvbi5jb2x1bW4pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBwYXJhZ3JhcGggaW5mbyAocGFyYWdyYXBoIGluZGV4LCBwYXJhZ3JhcGggbGluZSBpbmRleCwgbGluZSB0b3Agb2Zmc2V0IGFuZCBvdGhlcnMpIGJ5IHJvdyBpbmRleFxuICAgICAqKi9cbiAgICBzdGF0aWMgZ2V0UGFyYWdyYXBoSW5mb0J5Um93KHBhcmFncmFwaHM6IFBhcmFncmFwaFtdLCByb3c6IG51bWJlcik6IFBhcmFncmFwaEluZm8ge1xuICAgICAgICBjb25zdCB7IHBhcmFncmFwaEluZGV4LCBsaW5lSW5kZXggfSA9IHRoaXMuZmluZExpbmVJblBhcmFncmFwaHMocGFyYWdyYXBocywgcm93KTtcbiAgICAgICAgbGV0IGxpbmVUb3BPZmZzZXQgPSAwO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmVJbmRleDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpbmZvID0gcGFyYWdyYXBoc1twYXJhZ3JhcGhJbmRleF0udGV4dExpbmVzSW5mb1tpXTtcbiAgICAgICAgICAgIGxpbmVUb3BPZmZzZXQgKz0gaW5mby5oZWlnaHQgKyBpbmZvLmVuZFBhZ2VPZmZzZXQgKyBpbmZvLm9mZnNldEJlZm9yZSArIGluZm8ub2Zmc2V0QWZ0ZXI7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJhZ3JhcGhMaW5lSW5mbyA9IHBhcmFncmFwaHNbcGFyYWdyYXBoSW5kZXhdLnRleHRMaW5lc0luZm9bbGluZUluZGV4XTtcbiAgICAgICAgbGluZVRvcE9mZnNldCArPSBwYXJhZ3JhcGhMaW5lSW5mby5vZmZzZXRCZWZvcmU7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhcmFncmFwaEluZGV4LFxuICAgICAgICAgICAgbGluZUluZGV4LFxuICAgICAgICAgICAgbGluZVRvcE9mZnNldCxcbiAgICAgICAgICAgIGluZGVudEJlZm9yZTogcGFyYWdyYXBoTGluZUluZm8ub2Zmc2V0QmVmb3JlLFxuICAgICAgICAgICAgbGluZUhlaWdodDogcGFyYWdyYXBoTGluZUluZm8uaGVpZ2h0XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgc3RhdGljIGRvY3VtZW50VG9TY3JlZW4oc2Vzc2lvbjogRWRpdFNlc3Npb24sIHBhcmFncmFwaDogbnVtYmVyLCBpbmRleEluUGFyYWdyYXBoOiBudW1iZXIpOiBQb2ludCB7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaExpbmUgPSBzZXNzaW9uLndyYXBQYXJhZ3JhcGhMaW5lW3BhcmFncmFwaF07XG4gICAgICAgIGlmICghc2Vzc2lvbi53cmFwRGF0YVtwYXJhZ3JhcGhdLmxlbmd0aCB8fCBzZXNzaW9uLndyYXBEYXRhW3BhcmFncmFwaF1bMF0gPiBpbmRleEluUGFyYWdyYXBoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFBvaW50KHBhcmFncmFwaExpbmUsIGluZGV4SW5QYXJhZ3JhcGgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGxpbmUgPSAwO1xuICAgICAgICB3aGlsZSAoc2Vzc2lvbi53cmFwRGF0YVtwYXJhZ3JhcGhdW2xpbmVdIDw9IGluZGV4SW5QYXJhZ3JhcGggJiYgbGluZSA8IHNlc3Npb24ud3JhcERhdGFbcGFyYWdyYXBoXS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGxpbmUrKztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbmRleCA9IGluZGV4SW5QYXJhZ3JhcGggLSBzZXNzaW9uLndyYXBEYXRhW3BhcmFncmFwaF1bbGluZSAtIDFdO1xuICAgICAgICByZXR1cm4gbmV3IFBvaW50KHBhcmFncmFwaExpbmUgKyBsaW5lLCBpbmRleCk7XG4gICAgfVxuXG4gICAgc3RhdGljIHNjcmVlblRvRG9jdW1lbnQoc2Vzc2lvbjogRWRpdFNlc3Npb24sIGxpbmU6IG51bWJlciwgaW5kZXhJbkxpbmU6IG51bWJlcik6IFBvaW50IHtcbiAgICAgICAgbGV0IHBhcmFncmFwaCA9IHNlc3Npb24ud3JhcFBhcmFncmFwaExpbmUuZmluZEluZGV4KHggPT4geCA+IGxpbmUpO1xuICAgICAgICBpZiAocGFyYWdyYXBoID09PSAtMSkge1xuICAgICAgICAgICAgcGFyYWdyYXBoID0gc2Vzc2lvbi53cmFwUGFyYWdyYXBoTGluZS5sZW5ndGggLSAxO1xuICAgICAgICB9IGVsc2UgaWYgKHBhcmFncmFwaCA+IDApIHtcbiAgICAgICAgICAgIHBhcmFncmFwaCA9IHBhcmFncmFwaCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGxpbmVJblBhcmFncmFwaCA9IGxpbmUgLSBzZXNzaW9uLndyYXBQYXJhZ3JhcGhMaW5lW3BhcmFncmFwaF07XG4gICAgICAgIGlmICghc2Vzc2lvbi53cmFwRGF0YVtwYXJhZ3JhcGhdLmxlbmd0aCB8fCBsaW5lSW5QYXJhZ3JhcGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9pbnQocGFyYWdyYXBoLCBpbmRleEluTGluZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaW5kZXggPSBpbmRleEluTGluZSArIHNlc3Npb24ud3JhcERhdGFbcGFyYWdyYXBoXVtsaW5lSW5QYXJhZ3JhcGggLSAxXTtcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludChwYXJhZ3JhcGgsIGluZGV4KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBgcGFnZVhgIGFuZCBgcGFnZVlgIGNvb3JkaW5hdGVzIG9mIHRoZSBkb2N1bWVudCBwb3NpdGlvbi5cbiAgICAgKiovXG4gICAgc3RhdGljIHNjcmVlblRvUGl4ZWwoc2Vzc2lvbjogRWRpdFNlc3Npb24sIHJvdzogbnVtYmVyLCBjb2x1bW46IG51bWJlcik6IEN1cnNvclBvc2l0aW9uIHtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBocyA9IHNlc3Npb24ucGFnZXNXcmFwLnBhcmFncmFwaHM7XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaEluZm8gPSB0aGlzLmdldFBhcmFncmFwaEluZm9CeVJvdyhwYXJhZ3JhcGhzLCByb3cpO1xuICAgICAgICBjb25zdCB0b2tlbnMgPSBMaW5lV2lkdGhIZWxwZXIuZ2V0UGFyYWdyYXBoTGluZURpc3BsYXlUb2tlbnMoc2Vzc2lvbiwgcGFyYWdyYXBoSW5mby5wYXJhZ3JhcGhJbmRleCwgcGFyYWdyYXBoSW5mby5saW5lSW5kZXgpO1xuXG4gICAgICAgIGxldCBzaXplOiBJRm9udE1ldHJpY1NpemUgPSB7XG4gICAgICAgICAgICB3aWR0aDogOCxcbiAgICAgICAgICAgIGhlaWdodDogcGFyYWdyYXBoSW5mby5saW5lSGVpZ2h0LFxuICAgICAgICAgICAgYmFzZWxpbmU6IHBhcmFncmFwaEluZm8ubGluZUhlaWdodCxcbiAgICAgICAgICAgIGNvbnRlbnQ6IHBhcmFncmFwaEluZm8ubGluZUhlaWdodCxcbiAgICAgICAgICAgIGZvbnQ6IHBhcmFncmFwaEluZm8ubGluZUhlaWdodCxcbiAgICAgICAgICAgIGxpbmU6IHBhcmFncmFwaEluZm8ubGluZUhlaWdodCxcbiAgICAgICAgICAgIG11bHRpcGxpZXI6IHBhcmFncmFwaEluZm8ubGluZUhlaWdodCxcbiAgICAgICAgICAgIGFzY2VudDogMCxcbiAgICAgICAgICAgIGRlc2NlbnQ6IDBcbiAgICAgICAgfTtcbiAgICAgICAgbGV0IHRva2VuSW5kZXggPSBjb2x1bW4gPiAwID8gY29sdW1uIC0gMSA6IGNvbHVtbjtcbiAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBzaXplID0gdG9rZW5zW3Rva2VuSW5kZXhdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc2l6ZU5leHQgPSB0b2tlbnNbdG9rZW5JbmRleCArIDFdO1xuICAgICAgICBsZXQgc2l6ZU1heCA9IHsgLi4uc2l6ZSB9O1xuICAgICAgICBsZXQgbGluZVdpZHRoVG9Qb3NpdGlvbiA9IHNlc3Npb24ucGFnZXNXcmFwLmRvY3VtZW50TWFyZ2luLmxlZnQ7XG4gICAgICAgIGZvciAobGV0IGN1cnJlbnRDb2x1bW4gPSAwOyBjdXJyZW50Q29sdW1uIDwgdG9rZW5zLmxlbmd0aDsgY3VycmVudENvbHVtbisrKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudENvbHVtbiA8IGNvbHVtbikge1xuICAgICAgICAgICAgICAgIGxpbmVXaWR0aFRvUG9zaXRpb24gKz0gdG9rZW5zW2N1cnJlbnRDb2x1bW5dLndpZHRoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoc2l6ZU1heC5hc2NlbnQgPCB0b2tlbnNbY3VycmVudENvbHVtbl0uYXNjZW50KSB7XG4gICAgICAgICAgICAgICAgc2l6ZU1heCA9IHRva2Vuc1tjdXJyZW50Q29sdW1uXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0b2tlbnNbdG9rZW5JbmRleF0/LmlzVGFibGUpIHtcbiAgICAgICAgICAgIHNpemVNYXguYXNjZW50ID0gcGFyYWdyYXBoSW5mby5saW5lSGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyYWdyYXBoID0gcGFyYWdyYXBoc1twYXJhZ3JhcGhJbmZvLnBhcmFncmFwaEluZGV4XTtcbiAgICAgICAgY29uc3QgcGFyYWdyYXBoVG9wID0gcGFyYWdyYXBoLmRpc3RhbmNlRnJvbVRvcCB8fCAwO1xuICAgICAgICBjb25zdCBsaW5lUGFkZGluZ0xlZnQgPSBwYXJhZ3JhcGgudGV4dExpbmVzSW5mb1twYXJhZ3JhcGhJbmZvLmxpbmVJbmRleF0ucGFkZGluZ0xlZnQ7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhZ2VYOiBsaW5lV2lkdGhUb1Bvc2l0aW9uICsgbGluZVBhZGRpbmdMZWZ0LFxuICAgICAgICAgICAgcGFnZVk6IHBhcmFncmFwaFRvcCArIHBhcmFncmFwaEluZm8ubGluZVRvcE9mZnNldCAtIHNlc3Npb24uc2Nyb2xsVG9wLFxuICAgICAgICAgICAgbGluZUhlaWdodDogcGFyYWdyYXBoSW5mby5saW5lSGVpZ2h0LFxuICAgICAgICAgICAgc2l6ZUN1cnJlbnQ6IHNpemUsXG4gICAgICAgICAgICBzaXplTWF4LFxuICAgICAgICAgICAgc2l6ZU5leHQsXG4gICAgICAgICAgICBmaXJzdENoYXI6IGNvbHVtbiA9PT0gMCxcbiAgICAgICAgICAgIGxhc3RDaGFyOiBjb2x1bW4gPT09IHRva2Vucy5sZW5ndGggLSAxXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydHMgcGl4ZWwgcG9zaXRpb24gdG8gc2NyZWVuIHBvc2l0aW9uXG4gICAgICoqL1xuICAgIHN0YXRpYyBwaXhlbFRvU2NyZWVuKHNlc3Npb246IEVkaXRTZXNzaW9uLCB4OiBudW1iZXIsIHk6IG51bWJlciwgc2Nyb2xsZXJQb3NpdGlvbjogeyB0b3A6IG51bWJlcjsgbGVmdDogbnVtYmVyIH0pOiBQb2ludCB7XG4gICAgICAgIGNvbnN0IHdyYXAgPSBzZXNzaW9uLnBhZ2VzV3JhcDtcbiAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gc2Vzc2lvbi5zY3JvbGxUb3A7XG5cbiAgICAgICAgbGV0IHlQb3MgPSB5ICsgc2Nyb2xsVG9wIC0gc2Nyb2xsZXJQb3NpdGlvbi50b3A7XG4gICAgICAgIGxldCBwYXJhZ3JhcGhJbmRleCA9IHdyYXAucGFyYWdyYXBocy5maW5kSW5kZXgocGFyYWdyYXBoID0+IHBhcmFncmFwaC5kaXN0YW5jZUZyb21Ub3AgPiB5UG9zKTtcbiAgICAgICAgaWYgKHBhcmFncmFwaEluZGV4IDwgMCkge1xuICAgICAgICAgICAgcGFyYWdyYXBoSW5kZXggPSB3cmFwLnBhcmFncmFwaHMubGVuZ3RoIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmIChwYXJhZ3JhcGhJbmRleCA+IDApIHtcbiAgICAgICAgICAgIHBhcmFncmFwaEluZGV4LS07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJhZ3JhcGggPSB3cmFwLnBhcmFncmFwaHNbcGFyYWdyYXBoSW5kZXhdO1xuICAgICAgICB5UG9zIC09IHBhcmFncmFwaC5kaXN0YW5jZUZyb21Ub3A7XG4gICAgICAgIGxldCBsaW5lSW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAoeVBvcyA+IDAgJiYgbGluZUluZGV4IDwgcGFyYWdyYXBoLnRleHRMaW5lc0luZm8ubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgY29uc3QgbGluZSA9IHBhcmFncmFwaC50ZXh0TGluZXNJbmZvW2xpbmVJbmRleF07XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IGxpbmUuaGVpZ2h0ICsgbGluZS5lbmRQYWdlT2Zmc2V0ICsgbGluZS5vZmZzZXRCZWZvcmUgKyBsaW5lLm9mZnNldEFmdGVyO1xuICAgICAgICAgICAgaWYgKHlQb3MgPD0gd2lkdGgpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxpbmVJbmRleCsrO1xuICAgICAgICAgICAgeVBvcyAtPSB3aWR0aDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsaW5lID0gcGFyYWdyYXBoLnRleHRMaW5lc0luZm9bbGluZUluZGV4XS5zY3JlZW5MaW5lO1xuXG4gICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgIGxldCB4UG9zID0geCAtIHNjcm9sbGVyUG9zaXRpb24ubGVmdCAtIHdyYXAuZG9jdW1lbnRNYXJnaW4ubGVmdCAtIHBhcmFncmFwaC50ZXh0TGluZXNJbmZvW2xpbmVJbmRleF0ucGFkZGluZ0xlZnQ7XG4gICAgICAgIGNvbnN0IHRva2VucyA9IExpbmVXaWR0aEhlbHBlci5nZXRQYXJhZ3JhcGhMaW5lRGlzcGxheVRva2VucyhzZXNzaW9uLCBwYXJhZ3JhcGhJbmRleCwgbGluZUluZGV4KTtcbiAgICAgICAgaWYgKHRva2Vuc1swXS5kaXNwbGF5VmFsdWUgPT09IERpc3BsYXlWYWx1ZS5lbXB0eUxpbmUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9pbnQobGluZSwgaW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKHRva2Vucy5sZW5ndGggPiBpbmRleCkge1xuICAgICAgICAgICAgaWYgKHhQb3MgPCB0b2tlbnNbaW5kZXhdLndpZHRoIC8gMikge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB4UG9zIC09IHRva2Vuc1tpbmRleF0ud2lkdGg7XG4gICAgICAgICAgICBpbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgUG9pbnQobGluZSwgaW5kZXgpO1xuICAgIH1cblxuICAgIHN0YXRpYyBmaW5kTGluZUluUGFyYWdyYXBocyhwYXJhZ3JhcGhzOiBQYXJhZ3JhcGhbXSwgZG9jdW1lbnRMaW5lOiBudW1iZXIpOiB7IHBhcmFncmFwaEluZGV4OiBudW1iZXI7IGxpbmVJbmRleDogbnVtYmVyIH0ge1xuICAgICAgICBsZXQgaW5kZXggPSAwO1xuICAgICAgICBsZXQgcGFyYWdyYXBoSW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAocGFyYWdyYXBoSW5kZXggPCBwYXJhZ3JhcGhzLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKGluZGV4ICsgcGFyYWdyYXBoc1twYXJhZ3JhcGhJbmRleF0udGV4dExpbmVzSW5mby5sZW5ndGggPiBkb2N1bWVudExpbmUpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaW5kZXggKz0gcGFyYWdyYXBoc1twYXJhZ3JhcGhJbmRleF0udGV4dExpbmVzSW5mby5sZW5ndGg7XG4gICAgICAgICAgICBwYXJhZ3JhcGhJbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxpbmVJbmRleCA9IGRvY3VtZW50TGluZSAtIGluZGV4O1xuICAgICAgICByZXR1cm4geyBwYXJhZ3JhcGhJbmRleCwgbGluZUluZGV4IH07XG4gICAgfVxuXG4gICAgc3RhdGljIGdldEFwcHJveGltYXRlUG9zaXRpb24oc2Vzc2lvbjogRWRpdFNlc3Npb24sIGRvY3VtZW50TGluZTogbnVtYmVyLCBwb3NpdGlvbldpZHRoOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBwYXJhZ3JhcGhzID0gc2Vzc2lvbi5wYWdlc1dyYXAucGFyYWdyYXBocztcbiAgICAgICAgY29uc3QgZG9jdW1lbnRNYXJnaW4gPSBzZXNzaW9uLnBhZ2VzV3JhcC5kb2N1bWVudE1hcmdpbjtcbiAgICAgICAgY29uc3QgeyBwYXJhZ3JhcGhJbmRleCwgbGluZUluZGV4IH0gPSBQb3NpdGlvbkhlbHBlci5maW5kTGluZUluUGFyYWdyYXBocyhwYXJhZ3JhcGhzLCBkb2N1bWVudExpbmUpO1xuICAgICAgICBsZXQgY29sdW1uID0gMDtcbiAgICAgICAgY29uc3QgdG9rZW5zID0gTGluZVdpZHRoSGVscGVyLmdldFBhcmFncmFwaExpbmVEaXNwbGF5VG9rZW5zKHNlc3Npb24sIHBhcmFncmFwaEluZGV4LCBsaW5lSW5kZXgpO1xuICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA9PT0gMSAmJiB0b2tlbnNbMF0uZGlzcGxheVZhbHVlID09PSBEaXNwbGF5VmFsdWUuZW1wdHlMaW5lKSB7XG4gICAgICAgICAgICByZXR1cm4gY29sdW1uO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGV4dExpbmVJbmZvID0gcGFyYWdyYXBoc1twYXJhZ3JhcGhJbmRleF0udGV4dExpbmVzSW5mb1tsaW5lSW5kZXhdO1xuICAgICAgICBsZXQgd2lkdGggPSBwb3NpdGlvbldpZHRoIC0gdGV4dExpbmVJbmZvLnBhZGRpbmdMZWZ0IC0gZG9jdW1lbnRNYXJnaW4ubGVmdDtcbiAgICAgICAgd2hpbGUgKGNvbHVtbiA8IHRva2Vucy5sZW5ndGggJiYgd2lkdGggPj0gdG9rZW5zW2NvbHVtbl0ud2lkdGgpIHtcbiAgICAgICAgICAgIHdpZHRoIC09IHRva2Vuc1tjb2x1bW5dLndpZHRoO1xuICAgICAgICAgICAgY29sdW1uKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG5cbiAgICBzdGF0aWMgcGl4ZWxUb1BhZ2UocG9zWTogbnVtYmVyLCBzZXNzaW9uOiBFZGl0U2Vzc2lvbik6IG51bWJlciB7XG4gICAgICAgIGNvbnN0IHBhZ2VzQ291bnQgPSBzZXNzaW9uLnBhZ2VzV3JhcC5wYXJhZ3JhcGhzW3Nlc3Npb24ucGFnZXNXcmFwLnBhcmFncmFwaHMubGVuZ3RoIC0gMV0ubGFzdFBhZ2VOdW1iZXI7XG4gICAgICAgIGxldCBwYWdlID0gMTtcbiAgICAgICAgd2hpbGUgKHBhZ2UgPD0gcGFnZXNDb3VudCkge1xuICAgICAgICAgICAgY29uc3QgZW5kUGFnZVBvc2l0aW9uID0gKHNlc3Npb24ucGFnZXNXcmFwLnBhZ2VzU3BhY2UgKyBzZXNzaW9uLnBhZ2VzV3JhcC5wYWdlSGVpZ2h0KSAqIHBhZ2U7XG4gICAgICAgICAgICBpZiAoZW5kUGFnZVBvc2l0aW9uID49IHBvc1kpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhZ2UrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcGFnZTtcbiAgICB9XG59XG4iXX0=
@@ -6,4 +6,4 @@ export class LineInfoModel {
6
6
  Object.assign(this, fields);
7
7
  }
8
8
  }
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1pbmZvLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvK3NoYXJlZC9lZGl0b3IvY29yZS9tb2RlbHMvbGluZS1pbmZvLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTyxhQUFhO0lBWXRCLFlBQVksTUFBK0I7UUFDdkMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluZGVudE1vZGVsIH0gZnJvbSAnLi9pbmRlbnQubW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgTGluZUluZm9Nb2RlbCB7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBhbGlnbjogbnVtYmVyO1xuICAgIGluZGVudDogSW5kZW50TW9kZWw7XG4gICAgb2Zmc2V0QmVmb3JlOiBudW1iZXI7XG4gICAgb2Zmc2V0QWZ0ZXI6IG51bWJlcjtcbiAgICBsaW5lU3BhY2luZzogbnVtYmVyO1xuICAgIGlzQWZ0ZXJQYWdlQnJlYWs6IGJvb2xlYW47XG4gICAgaXNFbmRlZEJ5UGFnZUJyZWFrOiBib29sZWFuO1xuICAgIGJhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoZmllbGRzPzogUGFydGlhbDxMaW5lSW5mb01vZGVsPikge1xuICAgICAgICBpZiAoIWZpZWxkcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBmaWVsZHMpO1xuICAgIH1cbn1cbiJdfQ==
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1pbmZvLm1vZGVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvK3NoYXJlZC9lZGl0b3IvY29yZS9tb2RlbHMvbGluZS1pbmZvLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTyxhQUFhO0lBYXRCLFlBQVksTUFBK0I7UUFDdkMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNULE9BQU87U0FDVjtRQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2hDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluZGVudE1vZGVsIH0gZnJvbSAnLi9pbmRlbnQubW9kZWwnO1xuXG5leHBvcnQgY2xhc3MgTGluZUluZm9Nb2RlbCB7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBhbGlnbjogbnVtYmVyO1xuICAgIGluZGVudDogSW5kZW50TW9kZWw7XG4gICAgb2Zmc2V0QmVmb3JlOiBudW1iZXI7XG4gICAgb2Zmc2V0QWZ0ZXI6IG51bWJlcjtcbiAgICBsaW5lU3BhY2luZzogbnVtYmVyO1xuICAgIGlzQWZ0ZXJQYWdlQnJlYWs6IGJvb2xlYW47XG4gICAgaXNFbmRlZEJ5UGFnZUJyZWFrOiBib29sZWFuO1xuICAgIGJhY2tncm91bmRDb2xvcjogc3RyaW5nO1xuICAgIGhhc1RhYmxlOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoZmllbGRzPzogUGFydGlhbDxMaW5lSW5mb01vZGVsPikge1xuICAgICAgICBpZiAoIWZpZWxkcykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBmaWVsZHMpO1xuICAgIH1cbn1cbiJdfQ==
@@ -10,13 +10,13 @@ export class PagesWrap extends EventEmitting {
10
10
  get defaultVerticalData() {
11
11
  return this.pagesVerticalData.find(x => x.pageType === PageType.Default);
12
12
  }
13
- constructor(pagesSpace, documentMargin, pageWidth, pageHeight = 0, edges = null) {
13
+ constructor(pagesSpace, documentMargin, pageWidth, pageHeight = 0, customComponents) {
14
14
  super();
15
15
  this.pagesSpace = pagesSpace;
16
16
  this.documentMargin = documentMargin;
17
17
  this.pageWidth = pageWidth;
18
18
  this.pageHeight = pageHeight;
19
- this.edges = edges;
19
+ this.customComponents = customComponents;
20
20
  this.allPagesHeight = 0;
21
21
  this.minHeight = 0;
22
22
  this.paragraphs = [];
@@ -109,14 +109,15 @@ export class PagesWrap extends EventEmitting {
109
109
  pages: visiblePages
110
110
  };
111
111
  }
112
- processParagraphsProperties(startParagraphIndex) {
112
+ processParagraphsProperties(startParagraphIndex, wrapParagraphIndex) {
113
+ this.setParagraphIndexes(wrapParagraphIndex);
113
114
  const pagesInfo = { pagesVerticalData: this.pagesVerticalData, pagesSpace: this.pagesSpace };
114
115
  let currentPage = startParagraphIndex === 0 ? 1 : this.paragraphs[startParagraphIndex - 1].lastPageNumber;
115
116
  let pageVerticalData = PageHelper.getVerticalData(currentPage, this.pagesVerticalData);
116
117
  for (let i = startParagraphIndex; i < this.paragraphs.length; i++) {
117
118
  const prevParagraphInfo = this.getPreviousParagraphInfo(i);
118
119
  const paragraph = this.paragraphs[i];
119
- paragraph.processParagraphProperties(prevParagraphInfo, pagesInfo);
120
+ paragraph.processParagraphProperties(prevParagraphInfo, pagesInfo, this.customComponents.tables);
120
121
  if (paragraph.firstPageNumber !== currentPage) {
121
122
  currentPage = paragraph.firstPageNumber;
122
123
  pageVerticalData = PageHelper.getVerticalData(paragraph.firstPageNumber, this.pagesVerticalData);
@@ -143,9 +144,9 @@ export class PagesWrap extends EventEmitting {
143
144
  destroy() {
144
145
  this.removeAllListeners('pagesCountChanged');
145
146
  }
146
- updatePageVerticalData(edgeType, page) {
147
+ updatePageVerticalData(edgeType, page, wrapParagraphIndex) {
147
148
  const pageVerticalData = PageHelper.getVerticalData(page, this.pagesVerticalData);
148
- const componentHeight = this.edges.getComponentHeight(page, edgeType);
149
+ const componentHeight = this.customComponents.edges.getComponentHeight(page, edgeType);
149
150
  if (edgeType === EdgeType.Header) {
150
151
  pageVerticalData.marginTop = componentHeight > this.documentMargin.top ? componentHeight : this.documentMargin.top;
151
152
  }
@@ -157,7 +158,7 @@ export class PagesWrap extends EventEmitting {
157
158
  return;
158
159
  }
159
160
  pageVerticalData.contentHeight = newContentHeight;
160
- this.processParagraphsProperties(0);
161
+ this.processParagraphsProperties(0, wrapParagraphIndex);
161
162
  }
162
163
  getPreviousParagraphInfo(row) {
163
164
  if (!row || !this.paragraphs.length) {
@@ -190,7 +191,8 @@ export class PagesWrap extends EventEmitting {
190
191
  return visiblePages;
191
192
  }
192
193
  initPagesVerticalData() {
193
- if (!this.edges || (!this.edges.headersComponents.length && !this.edges.footersComponents.length)) {
194
+ if (!this.customComponents.edges ||
195
+ (!this.customComponents.edges.headersComponents.length && !this.customComponents.edges.footersComponents.length)) {
194
196
  this.pagesVerticalData = [
195
197
  new PageVerticalDataModel({
196
198
  marginTop: this.documentMargin.top,
@@ -201,10 +203,10 @@ export class PagesWrap extends EventEmitting {
201
203
  ];
202
204
  return;
203
205
  }
204
- const pageTypes = this.edges.getUniquePageTypes();
206
+ const pageTypes = this.customComponents.edges.getUniquePageTypes();
205
207
  this.pagesVerticalData = pageTypes.map(pageType => {
206
- const headerHeight = this.edges.getComponentHeightByPageType(pageType, EdgeType.Header);
207
- const footerHeight = this.edges.getComponentHeightByPageType(pageType, EdgeType.Footer);
208
+ const headerHeight = this.customComponents.edges.getComponentHeightByPageType(pageType, EdgeType.Header);
209
+ const footerHeight = this.customComponents.edges.getComponentHeightByPageType(pageType, EdgeType.Footer);
208
210
  const marginTop = Math.max(headerHeight, this.documentMargin.top);
209
211
  const marginBottom = Math.max(footerHeight, this.documentMargin.bottom);
210
212
  return new PageVerticalDataModel({
@@ -215,5 +217,10 @@ export class PagesWrap extends EventEmitting {
215
217
  });
216
218
  });
217
219
  }
220
+ setParagraphIndexes(wrapParagraphIndex) {
221
+ for (let i = 0; i < this.paragraphs.length; i++) {
222
+ this.paragraphs[i].startInsertIndex = wrapParagraphIndex[i];
223
+ }
224
+ }
218
225
  }
219
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZXMud3JhcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliLytzaGFyZWQvZWRpdG9yL2NvcmUvcGFnaW5nL3BhZ2VzLndyYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUd2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUk5RCxNQUFNLE9BQU8sU0FBVSxTQUFRLGFBQWE7SUFheEMsSUFBSSxtQkFBbUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQVFELFlBQ1csVUFBa0IsRUFDbEIsY0FBMkIsRUFDM0IsU0FBaUIsRUFDakIsYUFBYSxDQUFDLEVBQ2QsUUFBc0IsSUFBSTtRQUVqQyxLQUFLLEVBQUUsQ0FBQztRQU5ELGVBQVUsR0FBVixVQUFVLENBQVE7UUFDbEIsbUJBQWMsR0FBZCxjQUFjLENBQWE7UUFDM0IsY0FBUyxHQUFULFNBQVMsQ0FBUTtRQUNqQixlQUFVLEdBQVYsVUFBVSxDQUFJO1FBQ2QsVUFBSyxH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QUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNsRSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRXhFLE9BQU8sSUFBSSxxQkFBcUIsQ0FBQztnQkFDN0IsU0FBUztnQkFDVCxZQUFZO2dCQUNaLGFBQWEsRUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsR0FBRyxZQUFZO2dCQUN6RCxRQUFRO2FBQ1gsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXNwbGF5VG9rZW4gfSBmcm9tICcuLi9tb2RlbHMvZGlzcGxheS10b2tlbi5tb2RlbCc7XG5pbXBvcnQgeyBFZGdlcyB9IGZyb20gJy4uL2NvbXBvbmVudHMvZWRnZXMvZWRnZXMnO1xuaW1wb3J0IHsgRWRnZVR5cGUgfSBmcm9tICcuLi9jb21wb25lbnRzL2VkZ2VzL2VkZ2UtdHlwZS5lbnVtJztcbmltcG9ydCB7IEV2ZW50RW1pdHRpbmcgfSBmcm9tICcuLi9iYXNlL2V2ZW50LWVtaXR0aW5nJztcbmltcG9ydCB7IExpbmVJbmZvTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvbGluZS1pbmZvLm1vZGVsJztcbmltcG9ydCB7IE1hcmdpbk1vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL21hcmdpbi5tb2RlbCc7XG5pbXBvcnQgeyBOdW1iZXJpbmdIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzL251bWJlcmluZy5oZWxwZXInO1xuaW1wb3J0IHsgTnVtYmVyaW5nTW9kZWwgfSBmcm9tICcuLi8uLi8uLi8uLi9tb2RlbHMvZ2VuZXJhdGVkL251bWJlcmluZy5tb2RlbCc7XG5pbXBvcnQgeyBQYWdlSGVscGVyIH0gZnJvbSAnLi4vaGVscGVycy9wYWdlLmhlbHBlcic7XG5pbXBvcnQgeyBQYWdlVHlwZSB9IGZyb20gJy4uL2VudW1zL3BhZ2UtdHlwZS5lbnVtJztcbmltcG9ydCB7IFBhZ2VWZXJ0aWNhbERhdGFNb2RlbCB9IGZyb20gJy4vcGFnZS12ZXJ0aWNhbC1kYXRhLm1vZGVsJztcbmltcG9ydCB7IFBhcmFncmFwaCB9IGZyb20gJy4vcGFyYWdyYXBoJztcbmltcG9ydCB7IFBhcmFncmFwaEhlbHBlciB9IGZyb20gJy4uL2hlbHBlcnMvcGFyYWdyYXBoLmhlbHBlcic7XG5pbXBvcnQgeyBQYXJhZ3JhcGhNb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvcGFyYWdyYXBoLm1vZGVsJztcbmltcG9ydCB7IFZpc2libGVSYW5nZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdmlzaWJsZS1yYW5nZS5pbnRlcmZhY2UnO1xuXG5leHBvcnQgY2xhc3MgUGFnZXNXcmFwIGV4dGVuZHMgRXZlbnRFbWl0dGluZyB7XG4gICAgY29udGVudFdpZHRoOiBudW1iZXI7XG5cbiAgICBhbGxQYWdlc0hlaWdodCA9IDA7XG5cbiAgICBtaW5IZWlnaHQgPSAwO1xuXG4gICAgcGFyYWdyYXBoczogUGFyYWdyYXBoW10gPSBbXTtcblxuICAgIHRhYlRva2VuczogRGlzcGxheVRva2VuW10gPSBbXTtcblxuICAgIHBhZ2VzVmVydGljYWxEYXRhOiBQYWdlVmVydGljYWxEYXRhTW9kZWxbXTtcblxuICAgIGdldCBkZWZhdWx0VmVydGljYWxEYXRhKCk6IFBhZ2VWZXJ0aWNhbERhdGFNb2RlbCB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhZ2VzVmVydGljYWxEYXRhLmZpbmQoeCA9PiB4LnBhZ2VUeXBlID09PSBQYWdlVHlwZS5EZWZhdWx0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHByb2Nlc3NUZXh0TGluZXNQcm9wZXJ0aWVzOiAoXG4gICAgICAgIGN1cnJlbnRQYXJhZ3JhcGg6IFBhcmFncmFwaCxcbiAgICAgICAgcHJldlBhcmFncmFwaEluZm86IHsgbGFzdFBhZ2U6IG51bWJlcjsgcGFyYWdyYXBoSGVpZ2h0OiBudW1iZXI7IHBhcmFncmFwaExhc3RMaW5lOiBudW1iZXIgfSxcbiAgICAgICAgcGFnZXNJbmZvOiB7IHBhZ2VzVmVydGljYWxEYXRhOiBQYWdlVmVydGljYWxEYXRhTW9kZWxbXTsgcGFnZXNTcGFjZTogbnVtYmVyIH1cbiAgICApID0+IHZvaWQ7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHBhZ2VzU3BhY2U6IG51bWJlcixcbiAgICAgICAgcHVibGljIGRvY3VtZW50TWFyZ2luOiBNYXJnaW5Nb2RlbCxcbiAgICAgICAgcHVibGljIHBhZ2VXaWR0aDogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgcGFnZUhlaWdodCA9IDAsXG4gICAgICAgIHB1YmxpYyBlZGdlczogRWRnZXMgfCBudWxsID0gbnVsbFxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLm1pbkhlaWdodCA9IHRoaXMucGFnZUhlaWdodCArIDIgKiB0aGlzLnBhZ2VzU3BhY2U7XG4gICAgICAgIHRoaXMuY29udGVudFdpZHRoID0gdGhpcy5wYWdlV2lkdGggLSB0aGlzLmRvY3VtZW50TWFyZ2luLmxlZnQgLSB0aGlzLmRvY3VtZW50TWFyZ2luLnJpZ2h0O1xuICAgICAgICB0aGlzLmluaXRQYWdlc1ZlcnRpY2FsRGF0YSgpO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzc1RleHRMaW5lc1Byb3BlcnRpZXMgPSAhdGhpcy5wYWdlSGVpZ2h0XG4gICAgICAgICAgICA/IFBhcmFncmFwaEhlbHBlci5wcm9jZXNzVGV4dExpbmVzUHJvcGVydGllc0ZvclNpbmdsZVBhZ2VcbiAgICAgICAgICAgIDogUGFyYWdyYXBoSGVscGVyLnByb2Nlc3NUZXh0TGluZXNQcm9wZXJ0aWVzO1xuICAgIH1cblxuICAgIGdldFBhcmFncmFwaFRvcChwYXJhZ3JhcGhzOiBQYXJhZ3JhcGhbXSwgaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBwYXJhZ3JhcGhzW2luZGV4XSA/IHBhcmFncmFwaHNbaW5kZXhdLmRpc3RhbmNlRnJvbVRvcCA6IDA7XG4gICAgfVxuXG4gICAgZ2V0UGFyYWdyYXBoVG9wRm9yUHJpbnQocGFyYWdyYXBoczogUGFyYWdyYXBoW10sIGluZGV4OiBudW1iZXIsIHBhZ2VzU3BhY2U6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGlmICghcGFyYWdyYXBoc1tpbmRleF0pIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmFncmFwaCA9IHBhcmFncmFwaHNbaW5kZXhdO1xuICAgICAgICBjb25zdCBwYWdlTnVtYmVyID0gcGFyYWdyYXBoLnBhZ2VOdW1iZXJzWzBdO1xuICAgICAgICBsZXQgcGFnZUJyZWFrSGVpZ2h0ID0gMDtcbiAgICAgICAgcGFyYWdyYXBoLnRleHRMaW5lc0luZm8uZm9yRWFjaChsaW5lc0luZm8gPT4ge1xuICAgICAgICAgICAgaWYgKGxpbmVzSW5mby5pc0FmdGVyUGFnZUJyZWFrKSB7XG4gICAgICAgICAgICAgICAgcGFnZUJyZWFrSGVpZ2h0ID0gbGluZXNJbmZvLmhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXJhZ3JhcGguZGlzdGFuY2VGcm9tVG9wIC0gcGFnZU51bWJlciAqIHBhZ2VzU3BhY2UgLSBwYWdlQnJlYWtIZWlnaHQ7XG4gICAgfVxuXG4gICAgZ2V0UGFyYWdyYXBoSGVpZ2h0KHBhcmFncmFwaHM6IFBhcmFncmFwaFtdLCBpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHBhcmFncmFwaHNbaW5kZXhdID8gcGFyYWdyYXBoc1tpbmRleF0uaGVpZ2h0IDogMDtcbiAgICB9XG5cbiAgICByZW1vdmUoaW5kZXg6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wYXJhZ3JhcGhzLnNwbGljZShpbmRleCwgbGVuZ3RoKTtcbiAgICB9XG5cbiAgICByZXNldChwYXJhZ3JhcGhzTGVuZ3RoOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wYXJhZ3JhcGhzLmxlbmd0aCA9IHBhcmFncmFwaHNMZW5ndGg7XG4gICAgfVxuXG4gICAgc2V0KHJvdzogbnVtYmVyLCBsaW5lSW5mb3M6IExpbmVJbmZvTW9kZWxbXSwgbnVtYmVyaW5nczogTnVtYmVyaW5nTW9kZWxbXSwgZG9jUGFyYWdyYXBoczogUGFyYWdyYXBoTW9kZWxbXSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMucGFyYWdyYXBoc1tyb3ddKSB7XG4gICAgICAgICAgICBjb25zdCBudW1iZXJpbmdEYXRhID0gTnVtYmVyaW5nSGVscGVyLmNyZWF0ZURhdGFNb2RlbChudW1iZXJpbmdzLCBkb2NQYXJhZ3JhcGhzLCByb3cpO1xuICAgICAgICAgICAgdGhpcy5wYXJhZ3JhcGhzW3Jvd10gPSBuZXcgUGFyYWdyYXBoKG51bWJlcmluZ0RhdGEsIGxpbmVJbmZvc1swXS5vZmZzZXRCZWZvcmUsIHRoaXMucHJvY2Vzc1RleHRMaW5lc1Byb3BlcnRpZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wYXJhZ3JhcGhzW3Jvd10ud2lkdGggPSB0aGlzLmNvbnRlbnRXaWR0aDtcbiAgICAgICAgdGhpcy5wYXJhZ3JhcGhzW3Jvd10uc2V0VGV4dExpbmVzSW5mbyhsaW5lSW5mb3MpO1xuICAgIH1cblxuICAgIGdldFZpc2libGVSYW5nZShvZmZzZXRUb3A6IG51bWJlciwgc2Nyb2xsZXJIZWlnaHQ6IG51bWJlcik6IFZpc2libGVSYW5nZSB7XG4gICAgICAgIGxldCBzdGFydCA9IHRoaXMucGFyYWdyYXBocy5maW5kSW5kZXgoeCA9PiBvZmZzZXRUb3AgPD0geC5kaXN0YW5jZUZyb21Ub3AgKyB4LmhlaWdodCk7XG4gICAgICAgIGlmIChzdGFydCA8IDApIHtcbiAgICAgICAgICAgIHN0YXJ0ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzdGFydExpbmVJbmZvID0gbnVsbDtcbiAgICAgICAgY29uc3Qgc3RhcnRQYXJhZ3JhcGggPSB0aGlzLnBhcmFncmFwaHNbc3RhcnRdO1xuICAgICAgICBpZiAoc3RhcnRQYXJhZ3JhcGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0UGFyYWdyYXBoT2Zmc2V0VG9wID0gb2Zmc2V0VG9wIC0gc3RhcnRQYXJhZ3JhcGguZGlzdGFuY2VGcm9tVG9wO1xuICAgICAgICAgICAgc3RhcnRMaW5lSW5mbyA9IFBhcmFncmFwaEhlbHBlci5nZXRWaXNpYmxlTGluZUluZm8oc3RhcnRQYXJhZ3JhcGg/LnRleHRMaW5lc0luZm8sIHN0YXJ0UGFyYWdyYXBoT2Zmc2V0VG9wLCAxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc3RhcnRMaW5lSW5mbykge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBzdGFydFBhcmFncmFwaDogMCxcbiAgICAgICAgICAgICAgICBzdGFydExpbmU6IDAsXG4gICAgICAgICAgICAgICAgc3RhcnRTY3JlZW5MaW5lOiAwLFxuICAgICAgICAgICAgICAgIHN0YXJ0U2NyZWVuRnVsbExpbmU6IDAsXG4gICAgICAgICAgICAgICAgZW5kUGFyYWdyYXBoOiAwLFxuICAgICAgICAgICAgICAgIGVuZExpbmU6IDAsXG4gICAgICAgICAgICAgICAgZW5kU2NyZWVuTGluZTogMCxcbiAgICAgICAgICAgICAgICBlbmRTY3JlZW5GdWxsTGluZTogMCxcbiAgICAgICAgICAgICAgICBwYWdlczogWzFdXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGVuZCA9IHRoaXMucGFyYWdyYXBocy5maW5kSW5kZXgoeCA9PiBvZmZzZXRUb3AgKyBzY3JvbGxlckhlaWdodCA8PSB4LmRpc3RhbmNlRnJvbVRvcCArIHguaGVpZ2h0KTtcbiAgICAgICAgaWYgKGVuZCA8IDApIHtcbiAgICAgICAgICAgIGVuZCA9IHRoaXMucGFyYWdyYXBocy5sZW5ndGggLSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGVuZExpbmVJbmZvID0gbnVsbDtcbiAgICAgICAgY29uc3QgZW5kUGFyYWdyYXBoID0gdGhpcy5wYXJhZ3JhcGhzW2VuZF07XG4gICAgICAgIGlmIChlbmRQYXJhZ3JhcGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZFBhcmFncmFwaE9mZnNldFRvcCA9IG9mZnNldFRvcCArIHNjcm9sbGVySGVpZ2h0IC0gZW5kUGFyYWdyYXBoLmRpc3RhbmNlRnJvbVRvcDtcbiAgICAgICAgICAgIGVuZExpbmVJbmZvID0gUGFyYWdyYXBoSGVscGVyLmdldFZpc2libGVMaW5lSW5mbyhlbmRQYXJhZ3JhcGg/LnRleHRMaW5lc0luZm8sIGVuZFBhcmFncmFwaE9mZnNldFRvcCwgLTEpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmlzaWJsZVBhZ2VzID0gdGhpcy5nZXRWaXNpYmxlUGFnZXMob2Zmc2V0VG9wLCBzY3JvbGxlckhlaWdodCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXJ0UGFyYWdyYXBoOiBzdGFydCxcbiAgICAgICAgICAgIHN0YXJ0TGluZTogc3RhcnRMaW5lSW5mby5pbmRleCxcbiAgICAgICAgICAgIHN0YXJ0U2NyZWVuTGluZTogc3RhcnRMaW5lSW5mby5zY3JlZW5JbmRleCxcbiAgICAgICAgICAgIHN0YXJ0U2NyZWVuRnVsbExpbmU6IHN0YXJ0TGluZUluZm8udmlzaWJsZVNjcmVlbkluZGV4LFxuICAgICAgICAgICAgZW5kUGFyYWdyYXBoOiBlbmQsXG4gICAgICAgICAgICBlbmRMaW5lOiBlbmRMaW5lSW5mby5pbmRleCxcbiAgICAgICAgICAgIGVuZFNjcmVlbkxpbmU6IGVuZExpbmVJbmZvLnNjcmVlbkluZGV4LFxuICAgICAgICAgICAgZW5kU2NyZWVuRnVsbExpbmU6IGVuZExpbmVJbmZvLnZpc2libGVTY3JlZW5JbmRleCxcbiAgICAgICAgICAgIHBhZ2VzOiB2aXNpYmxlUGFnZXNcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcm9jZXNzUGFyYWdyYXBoc1Byb3BlcnRpZXMoc3RhcnRQYXJhZ3JhcGhJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhZ2VzSW5mbyA9IHsgcGFnZXNWZXJ0aWNhbERhdGE6IHRoaXMucGFnZXNWZXJ0aWNhbERhdGEsIHBhZ2VzU3BhY2U6IHRoaXMucGFnZXNTcGFjZSB9O1xuICAgICAgICBsZXQgY3VycmVudFBhZ2UgPSBzdGFydFBhcmFncmFwaEluZGV4ID09PSAwID8gMSA6IHRoaXMucGFyYWdyYXBoc1tzdGFydFBhcmFncmFwaEluZGV4IC0gMV0ubGFzdFBhZ2VOdW1iZXI7XG4gICAgICAgIGxldCBwYWdlVmVydGljYWxEYXRhID0gUGFnZUhlbHBlci5nZXRWZXJ0aWNhbERhdGEoY3VycmVudFBhZ2UsIHRoaXMucGFnZXNWZXJ0aWNhbERhdGEpO1xuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnRQYXJhZ3JhcGhJbmRleDsgaSA8IHRoaXMucGFyYWdyYXBocy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcHJldlBhcmFncmFwaEluZm8gPSB0aGlzLmdldFByZXZpb3VzUGFyYWdyYXBoSW5mbyhpKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFncmFwaCA9IHRoaXMucGFyYWdyYXBoc1tpXTtcbiAgICAgICAgICAgIHBhcmFncmFwaC5wcm9jZXNzUGFyYWdyYXBoUHJvcGVydGllcyhwcmV2UGFyYWdyYXBoSW5mbywgcGFnZXNJbmZvKTtcbiAgICAgICAgICAgIGlmIChwYXJhZ3JhcGguZmlyc3RQYWdlTnVtYmVyICE9PSBjdXJyZW50UGFnZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlID0gcGFyYWdyYXBoLmZpcnN0UGFnZU51bWJlcjtcbiAgICAgICAgICAgICAgICBwYWdlVmVydGljYWxEYXRhID0gUGFnZUhlbHBlci5nZXRWZXJ0aWNhbERhdGEocGFyYWdyYXBoLmZpcnN0UGFnZU51bWJlciwgdGhpcy5wYWdlc1ZlcnRpY2FsRGF0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhcmFncmFwaC5kaXN0YW5jZUZyb21Ub3AgPVxuICAgICAgICAgICAgICAgIChwYXJhZ3JhcGguZmlyc3RQYWdlTnVtYmVyIC0gMSkgKiB0aGlzLnBhZ2VIZWlnaHQgK1xuICAgICAgICAgICAgICAgIHRoaXMucGFnZXNTcGFjZSAqIHBhcmFncmFwaC5maXJzdFBhZ2VOdW1iZXIgK1xuICAgICAgICAgICAgICAgIHBhZ2VWZXJ0aWNhbERhdGEubWFyZ2luVG9wICtcbiAgICAgICAgICAgICAgICBwYXJhZ3JhcGgucGFnZVByZXZpb3VzQ29udGVudEhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwYWdlSGVpZ2h0ID0gdGhpcy5wYWdlSGVpZ2h0O1xuICAgICAgICBpZiAoIXBhZ2VIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhZ2VIZWlnaHQgPSB0aGlzLmdldEFsbFBhcmFncmFwaHNIZWlnaHQoKSArIHRoaXMuZG9jdW1lbnRNYXJnaW4udG9wICsgdGhpcy5kb2N1bWVudE1hcmdpbi5ib3R0b207XG4gICAgICAgICAgICB0aGlzLm1pbkhlaWdodCA9IHBhZ2VIZWlnaHQgKyAyICogdGhpcy5wYWdlc1NwYWNlO1xuICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmVydGljYWxEYXRhLmNvbnRlbnRIZWlnaHQgPSBwYWdlSGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGFzdFBhZ2VOdW1iZXIgPSB0aGlzLnBhcmFncmFwaHNbdGhpcy5wYXJhZ3JhcGhzLmxlbmd0aCAtIDFdLmxhc3RQYWdlTnVtYmVyO1xuICAgICAgICB0aGlzLmFsbFBhZ2VzSGVpZ2h0ID0gbGFzdFBhZ2VOdW1iZXIgKiAocGFnZUhlaWdodCArIHRoaXMucGFnZXNTcGFjZSkgKyB0aGlzLnBhZ2VzU3BhY2U7XG4gICAgICAgIHRoaXMuZW1pdCgncGFnZXNDb3VudENoYW5nZWQnLCB7IHBhZ2VzQ291bnQ6IGxhc3RQYWdlTnVtYmVyLCBwYWdlSGVpZ2h0OiBwYWdlSGVpZ2h0ICsgMiAqIHRoaXMucGFnZXNTcGFjZSB9KTtcbiAgICB9XG5cbiAgICBnZXRBbGxQYXJhZ3JhcGhzSGVpZ2h0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmFncmFwaHMucmVkdWNlKChzdW0sIHgpID0+IHN1bSArIHguaGVpZ2h0LCAwKTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncGFnZXNDb3VudENoYW5nZWQnKTtcbiAgICB9XG5cbiAgICB1cGRhdGVQYWdlVmVydGljYWxEYXRhKGVkZ2VUeXBlOiBFZGdlVHlwZSwgcGFnZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhZ2VWZXJ0aWNhbERhdGEgPSBQYWdlSGVscGVyLmdldFZlcnRpY2FsRGF0YShwYWdlLCB0aGlzLnBhZ2VzVmVydGljYWxEYXRhKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50SGVpZ2h0ID0gdGhpcy5lZGdlcy5nZXRDb21wb25lbnRIZWlnaHQocGFnZSwgZWRnZVR5cGUpO1xuICAgICAgICBpZiAoZWRnZVR5cGUgPT09IEVkZ2VUeXBlLkhlYWRlcikge1xuICAgICAgICAgICAgcGFnZVZlcnRpY2FsRGF0YS5tYXJnaW5Ub3AgPSBjb21wb25lbnRIZWlnaHQgPiB0aGlzLmRvY3VtZW50TWFyZ2luLnRvcCA/IGNvbXBvbmVudEhlaWdodCA6IHRoaXMuZG9jdW1lbnRNYXJnaW4udG9wO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFnZVZlcnRpY2FsRGF0YS5tYXJnaW5Cb3R0b20gPSBjb21wb25lbnRIZWlnaHQgPiB0aGlzLmRvY3VtZW50TWFyZ2luLmJvdHRvbSA/IGNvbXBvbmVudEhlaWdodCA6IHRoaXMuZG9jdW1lbnRNYXJnaW4uYm90dG9tO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbmV3Q29udGVudEhlaWdodCA9IHRoaXMucGFnZUhlaWdodCAtIHBhZ2VWZXJ0aWNhbERhdGEubWFyZ2luVG9wIC0gcGFnZVZlcnRpY2FsRGF0YS5tYXJnaW5Cb3R0b207XG4gICAgICAgIGlmIChuZXdDb250ZW50SGVpZ2h0ID09PSBwYWdlVmVydGljYWxEYXRhLmNvbnRlbnRIZWlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhZ2VWZXJ0aWNhbERhdGEuY29udGVudEhlaWdodCA9IG5ld0NvbnRlbnRIZWlnaHQ7XG4gICAgICAgIHRoaXMucHJvY2Vzc1BhcmFncmFwaHNQcm9wZXJ0aWVzKDApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UHJldmlvdXNQYXJhZ3JhcGhJbmZvKHJvdzogbnVtYmVyKTogeyBsYXN0UGFnZTogbnVtYmVyOyBwYXJhZ3JhcGhIZWlnaHQ6IG51bWJlcjsgcGFyYWdyYXBoTGFzdExpbmU6IG51bWJlciB9IHtcbiAgICAgICAgaWYgKCFyb3cgfHwgIXRoaXMucGFyYWdyYXBocy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB7IGxhc3RQYWdlOiAxLCBwYXJhZ3JhcGhIZWlnaHQ6IDAsIHBhcmFncmFwaExhc3RMaW5lOiAtMSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcHJldlBhcmFncmFwaCA9IHRoaXMucGFyYWdyYXBoc1tyb3cgLSAxXTtcbiAgICAgICAgcmV0dXJuIHByZXZQYXJhZ3JhcGguZ2V0UGFyYWdyYXBoRGF0YSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VmlzaWJsZVBhZ2VzKG9mZnNldFRvcDogbnVtYmVyLCBjb250YWluZXJIZWlnaHQ6IG51bWJlcik6IG51bWJlcltdIHtcbiAgICAgICAgY29uc3QgdmlzaWJsZVBhZ2VzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgICAgIGxldCBmaXJzdFZpc2libGVQYWdlID0gb2Zmc2V0VG9wIC8gKHRoaXMucGFnZUhlaWdodCArIHRoaXMucGFnZXNTcGFjZSk7XG4gICAgICAgIGlmIChmaXJzdFZpc2libGVQYWdlICUgMSA9PT0gMCkge1xuICAgICAgICAgICAgZmlyc3RWaXNpYmxlUGFnZSsrO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHZpc2libGVQYWdlc0NvdW50ID0gY29udGFpbmVySGVpZ2h0IC8gKHRoaXMucGFnZUhlaWdodCArIHRoaXMucGFnZXNTcGFjZSk7XG4gICAgICAgIGNvbnN0IHBhcnRpYWxQYWdlT25TY3JlZW5QZXJjZW50ID0gTWF0aC50cnVuYygoKHZpc2libGVQYWdlc0NvdW50ICUgMSkgKyAoZmlyc3RWaXNpYmxlUGFnZSAlIDEpKSAqIDEwMCk7XG4gICAgICAgIGNvbnN0IHBhZ2VTcGFjZUhlaWdodFBlcmNlbnQgPSBNYXRoLnRydW5jKCh0aGlzLnBhZ2VzU3BhY2UgLyBjb250YWluZXJIZWlnaHQpICogMTAwKTtcbiAgICAgICAgaWYgKHBhcnRpYWxQYWdlT25TY3JlZW5QZXJjZW50IC0gcGFnZVNwYWNlSGVpZ2h0UGVyY2VudCA+IDEwMCkge1xuICAgICAgICAgICAgdmlzaWJsZVBhZ2VzQ291bnQrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHZpc2libGVQYWdlc0NvdW50ID0gTWF0aC5jZWlsKHZpc2libGVQYWdlc0NvdW50KTtcbiAgICAgICAgZmlyc3RWaXNpYmxlUGFnZSA9IE1hdGguY2VpbChmaXJzdFZpc2libGVQYWdlKTtcbiAgICAgICAgY29uc3QgZG9jdW1lbnRQYWdlc0NvdW50ID0gdGhpcy5wYXJhZ3JhcGhzW3RoaXMucGFyYWdyYXBocy5sZW5ndGggLSAxXS5sYXN0UGFnZU51bWJlcjtcbiAgICAgICAgaWYgKGZpcnN0VmlzaWJsZVBhZ2UgKyB2aXNpYmxlUGFnZXNDb3VudCAtIDEgPiBkb2N1bWVudFBhZ2VzQ291bnQpIHtcbiAgICAgICAgICAgIHZpc2libGVQYWdlc0NvdW50ID0gZG9jdW1lbnRQYWdlc0NvdW50IC0gZmlyc3RWaXNpYmxlUGFnZSArIDE7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZpc2libGVQYWdlc0NvdW50OyBpKyspIHtcbiAgICAgICAgICAgIHZpc2libGVQYWdlcy5wdXNoKGZpcnN0VmlzaWJsZVBhZ2UgKyBpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2aXNpYmxlUGFnZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0UGFnZXNWZXJ0aWNhbERhdGEoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5lZGdlcyB8fCAoIXRoaXMuZWRnZXMuaGVhZGVyc0NvbXBvbmVudHMubGVuZ3RoICYmICF0aGlzLmVkZ2VzLmZvb3RlcnNDb21wb25lbnRzLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZXNWZXJ0aWNhbERhdGEgPSBbXG4gICAgICAgICAgICAgICAgbmV3IFBhZ2VWZXJ0aWNhbERhdGFNb2RlbCh7XG4gICAgICAgICAgICAgICAgICAgIG1hcmdpblRvcDogdGhpcy5kb2N1bWVudE1hcmdpbi50b3AsXG4gICAgICAgICAgICAgICAgICAgIG1hcmdpbkJvdHRvbTogdGhpcy5kb2N1bWVudE1hcmdpbi5ib3R0b20sXG4gICAgICAgICAgICAgICAgICAgIGNvbnRlbnRIZWlnaHQ6IHRoaXMucGFnZUhlaWdodCAtIHRoaXMuZG9jdW1lbnRNYXJnaW4udG9wIC0gdGhpcy5kb2N1bWVudE1hcmdpbi5ib3R0b20sXG4gICAgICAgICAgICAgICAgICAgIHBhZ2VUeXBlOiBQYWdlVHlwZS5EZWZhdWx0XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYWdlVHlwZXMgPSB0aGlzLmVkZ2VzLmdldFVuaXF1ZVBhZ2VUeXBlcygpO1xuICAgICAgICB0aGlzLnBhZ2VzVmVydGljYWxEYXRhID0gcGFnZVR5cGVzLm1hcChwYWdlVHlwZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBoZWFkZXJIZWlnaHQgPSB0aGlzLmVkZ2VzLmdldENvbXBvbmVudEhlaWdodEJ5UGFnZVR5cGUocGFnZVR5cGUsIEVkZ2VUeXBlLkhlYWRlcik7XG4gICAgICAgICAgICBjb25zdCBmb290ZXJIZWlnaHQgPSB0aGlzLmVkZ2VzLmdldENvbXBvbmVudEhlaWdodEJ5UGFnZVR5cGUocGFnZVR5cGUsIEVkZ2VUeXBlLkZvb3Rlcik7XG4gICAgICAgICAgICBjb25zdCBtYXJnaW5Ub3AgPSBNYXRoLm1heChoZWFkZXJIZWlnaHQsIHRoaXMuZG9jdW1lbnRNYXJnaW4udG9wKTtcbiAgICAgICAgICAgIGNvbnN0IG1hcmdpbkJvdHRvbSA9IE1hdGgubWF4KGZvb3RlckhlaWdodCwgdGhpcy5kb2N1bWVudE1hcmdpbi5ib3R0b20pO1xuXG4gICAgICAgICAgICByZXR1cm4gbmV3IFBhZ2VWZXJ0aWNhbERhdGFNb2RlbCh7XG4gICAgICAgICAgICAgICAgbWFyZ2luVG9wLFxuICAgICAgICAgICAgICAgIG1hcmdpbkJvdHRvbSxcbiAgICAgICAgICAgICAgICBjb250ZW50SGVpZ2h0OiB0aGlzLnBhZ2VIZWlnaHQgLSBtYXJnaW5Ub3AgLSBtYXJnaW5Cb3R0b20sXG4gICAgICAgICAgICAgICAgcGFnZVR5cGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
226
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnZXMud3JhcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1ub2Rlci9zcmMvbGliLytzaGFyZWQvZWRpdG9yL2NvcmUvcGFnaW5nL3BhZ2VzLndyYXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUt2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUk5RCxNQUFNLE9BQU8sU0FBVSxTQUFRLGFBQWE7SUFheEMsSUFBSSxtQkFBbUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQVNELFlBQ1csVUFBa0IsRUFDbEIsY0FBMkIsRUFDM0IsU0FBaUIsRUFDakIsYUFBYSxDQUFDLEVBQ2QsZ0JBQW1DO1FBRTFDLEtBQUssRUFBRSxDQUFDO1FBTkQsZUFBVSxHQUFWLFVBQVUsQ0FBUTtRQUNsQixtQkFBYyxHQUFkLGNBQWMsQ0FBYTtRQUMzQixjQUFTLEdBQVQsU0FBUyxDQUFRO1FBQ2pCLGVBQVUsR0FBVixVQUFVLENBQUk7UUFDZCxxQkFBZ0IsR0FB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QUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDekcsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pHLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDbEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUV4RSxPQUFPLElBQUkscUJBQXFCLENBQUM7Z0JBQzdCLFNBQVM7Z0JBQ1QsWUFBWTtnQkFDWixhQUFhLEVBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLEdBQUcsWUFBWTtnQkFDekQsUUFBUTthQUNYLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLG1CQUFtQixDQUFDLGtCQUE0QjtRQUNwRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMvRDtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBEaXNwbGF5VG9rZW4gfSBmcm9tICcuLi9tb2RlbHMvZGlzcGxheS10b2tlbi5tb2RlbCc7XG5pbXBvcnQgeyBFZGdlVHlwZSB9IGZyb20gJy4uL2NvbXBvbmVudHMvZWRnZXMvZWRnZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGluZyB9IGZyb20gJy4uL2Jhc2UvZXZlbnQtZW1pdHRpbmcnO1xuaW1wb3J0IHsgSUN1c3RvbUNvbXBvbmVudHMgfSBmcm9tICcuLy4uLy4uL2N1c3RvbS1jb21wb25lbnRzL3NoYXJlZC9pbnRlcmZhY2VzL2N1c3RvbS1jb21wb25lbnRzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBMaW5lSW5mb01vZGVsIH0gZnJvbSAnLi4vbW9kZWxzL2xpbmUtaW5mby5tb2RlbCc7XG5pbXBvcnQgeyBOb2RlclRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY3VzdG9tLWNvbXBvbmVudHMvdGFibGUvY29tcG9uZW50cy90YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWFyZ2luTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvbWFyZ2luLm1vZGVsJztcbmltcG9ydCB7IE51bWJlcmluZ0hlbHBlciB9IGZyb20gJy4uL2hlbHBlcnMvbnVtYmVyaW5nLmhlbHBlcic7XG5pbXBvcnQgeyBOdW1iZXJpbmdNb2RlbCB9IGZyb20gJy4uLy4uLy4uLy4uL21vZGVscy9nZW5lcmF0ZWQvbnVtYmVyaW5nLm1vZGVsJztcbmltcG9ydCB7IFBhZ2VIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzL3BhZ2UuaGVscGVyJztcbmltcG9ydCB7IFBhZ2VUeXBlIH0gZnJvbSAnLi4vZW51bXMvcGFnZS10eXBlLmVudW0nO1xuaW1wb3J0IHsgUGFnZVZlcnRpY2FsRGF0YU1vZGVsIH0gZnJvbSAnLi9wYWdlLXZlcnRpY2FsLWRhdGEubW9kZWwnO1xuaW1wb3J0IHsgUGFyYWdyYXBoIH0gZnJvbSAnLi9wYXJhZ3JhcGgnO1xuaW1wb3J0IHsgUGFyYWdyYXBoSGVscGVyIH0gZnJvbSAnLi4vaGVscGVycy9wYXJhZ3JhcGguaGVscGVyJztcbmltcG9ydCB7IFBhcmFncmFwaE1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzL2dlbmVyYXRlZC9wYXJhZ3JhcGgubW9kZWwnO1xuaW1wb3J0IHsgVmlzaWJsZVJhbmdlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy92aXNpYmxlLXJhbmdlLmludGVyZmFjZSc7XG5cbmV4cG9ydCBjbGFzcyBQYWdlc1dyYXAgZXh0ZW5kcyBFdmVudEVtaXR0aW5nIHtcbiAgICBjb250ZW50V2lkdGg6IG51bWJlcjtcblxuICAgIGFsbFBhZ2VzSGVpZ2h0ID0gMDtcblxuICAgIG1pbkhlaWdodCA9IDA7XG5cbiAgICBwYXJhZ3JhcGhzOiBQYXJhZ3JhcGhbXSA9IFtdO1xuXG4gICAgdGFiVG9rZW5zOiBEaXNwbGF5VG9rZW5bXSA9IFtdO1xuXG4gICAgcGFnZXNWZXJ0aWNhbERhdGE6IFBhZ2VWZXJ0aWNhbERhdGFNb2RlbFtdO1xuXG4gICAgZ2V0IGRlZmF1bHRWZXJ0aWNhbERhdGEoKTogUGFnZVZlcnRpY2FsRGF0YU1vZGVsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFnZXNWZXJ0aWNhbERhdGEuZmluZCh4ID0+IHgucGFnZVR5cGUgPT09IFBhZ2VUeXBlLkRlZmF1bHQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHJvY2Vzc1RleHRMaW5lc1Byb3BlcnRpZXM6IChcbiAgICAgICAgY3VycmVudFBhcmFncmFwaDogUGFyYWdyYXBoLFxuICAgICAgICBwcmV2UGFyYWdyYXBoSW5mbzogeyBsYXN0UGFnZTogbnVtYmVyOyBwYXJhZ3JhcGhIZWlnaHQ6IG51bWJlcjsgcGFyYWdyYXBoTGFzdExpbmU6IG51bWJlciB9LFxuICAgICAgICBwYWdlc0luZm86IHsgcGFnZXNWZXJ0aWNhbERhdGE6IFBhZ2VWZXJ0aWNhbERhdGFNb2RlbFtdOyBwYWdlc1NwYWNlOiBudW1iZXIgfSxcbiAgICAgICAgdGFibGVzOiBDb21wb25lbnRSZWY8Tm9kZXJUYWJsZUNvbXBvbmVudD5bXVxuICAgICkgPT4gdm9pZDtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcGFnZXNTcGFjZTogbnVtYmVyLFxuICAgICAgICBwdWJsaWMgZG9jdW1lbnRNYXJnaW46IE1hcmdpbk1vZGVsLFxuICAgICAgICBwdWJsaWMgcGFnZVdpZHRoOiBudW1iZXIsXG4gICAgICAgIHB1YmxpYyBwYWdlSGVpZ2h0ID0gMCxcbiAgICAgICAgcHVibGljIGN1c3RvbUNvbXBvbmVudHM6IElDdXN0b21Db21wb25lbnRzXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMubWluSGVpZ2h0ID0gdGhpcy5wYWdlSGVpZ2h0ICsgMiAqIHRoaXMucGFnZXNTcGFjZTtcbiAgICAgICAgdGhpcy5jb250ZW50V2lkdGggPSB0aGlzLnBhZ2VXaWR0aCAtIHRoaXMuZG9jdW1lbnRNYXJnaW4ubGVmdCAtIHRoaXMuZG9jdW1lbnRNYXJnaW4ucmlnaHQ7XG4gICAgICAgIHRoaXMuaW5pdFBhZ2VzVmVydGljYWxEYXRhKCk7XG5cbiAgICAgICAgdGhpcy5wcm9jZXNzVGV4dExpbmVzUHJvcGVydGllcyA9ICF0aGlzLnBhZ2VIZWlnaHRcbiAgICAgICAgICAgID8gUGFyYWdyYXBoSGVscGVyLnByb2Nlc3NUZXh0TGluZXNQcm9wZXJ0aWVzRm9yU2luZ2xlUGFnZVxuICAgICAgICAgICAgOiBQYXJhZ3JhcGhIZWxwZXIucHJvY2Vzc1RleHRMaW5lc1Byb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgZ2V0UGFyYWdyYXBoVG9wKHBhcmFncmFwaHM6IFBhcmFncmFwaFtdLCBpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHBhcmFncmFwaHNbaW5kZXhdID8gcGFyYWdyYXBoc1tpbmRleF0uZGlzdGFuY2VGcm9tVG9wIDogMDtcbiAgICB9XG5cbiAgICBnZXRQYXJhZ3JhcGhUb3BGb3JQcmludChwYXJhZ3JhcGhzOiBQYXJhZ3JhcGhbXSwgaW5kZXg6IG51bWJlciwgcGFnZXNTcGFjZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCFwYXJhZ3JhcGhzW2luZGV4XSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyYWdyYXBoID0gcGFyYWdyYXBoc1tpbmRleF07XG4gICAgICAgIGNvbnN0IHBhZ2VOdW1iZXIgPSBwYXJhZ3JhcGgucGFnZU51bWJlcnNbMF07XG4gICAgICAgIGxldCBwYWdlQnJlYWtIZWlnaHQgPSAwO1xuICAgICAgICBwYXJhZ3JhcGgudGV4dExpbmVzSW5mby5mb3JFYWNoKGxpbmVzSW5mbyA9PiB7XG4gICAgICAgICAgICBpZiAobGluZXNJbmZvLmlzQWZ0ZXJQYWdlQnJlYWspIHtcbiAgICAgICAgICAgICAgICBwYWdlQnJlYWtIZWlnaHQgPSBsaW5lc0luZm8uaGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBhcmFncmFwaC5kaXN0YW5jZUZyb21Ub3AgLSBwYWdlTnVtYmVyICogcGFnZXNTcGFjZSAtIHBhZ2VCcmVha0hlaWdodDtcbiAgICB9XG5cbiAgICBnZXRQYXJhZ3JhcGhIZWlnaHQocGFyYWdyYXBoczogUGFyYWdyYXBoW10sIGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gcGFyYWdyYXBoc1tpbmRleF0gPyBwYXJhZ3JhcGhzW2luZGV4XS5oZWlnaHQgOiAwO1xuICAgIH1cblxuICAgIHJlbW92ZShpbmRleDogbnVtYmVyLCBsZW5ndGg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnBhcmFncmFwaHMuc3BsaWNlKGluZGV4LCBsZW5ndGgpO1xuICAgIH1cblxuICAgIHJlc2V0KHBhcmFncmFwaHNMZW5ndGg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICB0aGlzLnBhcmFncmFwaHMubGVuZ3RoID0gcGFyYWdyYXBoc0xlbmd0aDtcbiAgICB9XG5cbiAgICBzZXQocm93OiBudW1iZXIsIGxpbmVJbmZvczogTGluZUluZm9Nb2RlbFtdLCBudW1iZXJpbmdzOiBOdW1iZXJpbmdNb2RlbFtdLCBkb2NQYXJhZ3JhcGhzOiBQYXJhZ3JhcGhNb2RlbFtdKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5wYXJhZ3JhcGhzW3Jvd10pIHtcbiAgICAgICAgICAgIGNvbnN0IG51bWJlcmluZ0RhdGEgPSBOdW1iZXJpbmdIZWxwZXIuY3JlYXRlRGF0YU1vZGVsKG51bWJlcmluZ3MsIGRvY1BhcmFncmFwaHMsIHJvdyk7XG4gICAgICAgICAgICB0aGlzLnBhcmFncmFwaHNbcm93XSA9IG5ldyBQYXJhZ3JhcGgobnVtYmVyaW5nRGF0YSwgbGluZUluZm9zWzBdLm9mZnNldEJlZm9yZSwgdGhpcy5wcm9jZXNzVGV4dExpbmVzUHJvcGVydGllcyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBhcmFncmFwaHNbcm93XS53aWR0aCA9IHRoaXMuY29udGVudFdpZHRoO1xuICAgICAgICB0aGlzLnBhcmFncmFwaHNbcm93XS5zZXRUZXh0TGluZXNJbmZvKGxpbmVJbmZvcyk7XG4gICAgfVxuXG4gICAgZ2V0VmlzaWJsZVJhbmdlKG9mZnNldFRvcDogbnVtYmVyLCBzY3JvbGxlckhlaWdodDogbnVtYmVyKTogVmlzaWJsZVJhbmdlIHtcbiAgICAgICAgbGV0IHN0YXJ0ID0gdGhpcy5wYXJhZ3JhcGhzLmZpbmRJbmRleCh4ID0+IG9mZnNldFRvcCA8PSB4LmRpc3RhbmNlRnJvbVRvcCArIHguaGVpZ2h0KTtcbiAgICAgICAgaWYgKHN0YXJ0IDwgMCkge1xuICAgICAgICAgICAgc3RhcnQgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN0YXJ0TGluZUluZm8gPSBudWxsO1xuICAgICAgICBjb25zdCBzdGFydFBhcmFncmFwaCA9IHRoaXMucGFyYWdyYXBoc1tzdGFydF07XG4gICAgICAgIGlmIChzdGFydFBhcmFncmFwaCkge1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRQYXJhZ3JhcGhPZmZzZXRUb3AgPSBvZmZzZXRUb3AgLSBzdGFydFBhcmFncmFwaC5kaXN0YW5jZUZyb21Ub3A7XG4gICAgICAgICAgICBzdGFydExpbmVJbmZvID0gUGFyYWdyYXBoSGVscGVyLmdldFZpc2libGVMaW5lSW5mbyhzdGFydFBhcmFncmFwaD8udGV4dExpbmVzSW5mbywgc3RhcnRQYXJhZ3JhcGhPZmZzZXRUb3AsIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzdGFydExpbmVJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHN0YXJ0UGFyYWdyYXBoOiAwLFxuICAgICAgICAgICAgICAgIHN0YXJ0TGluZTogMCxcbiAgICAgICAgICAgICAgICBzdGFydFNjcmVlbkxpbmU6IDAsXG4gICAgICAgICAgICAgICAgc3RhcnRTY3JlZW5GdWxsTGluZTogMCxcbiAgICAgICAgICAgICAgICBlbmRQYXJhZ3JhcGg6IDAsXG4gICAgICAgICAgICAgICAgZW5kTGluZTogMCxcbiAgICAgICAgICAgICAgICBlbmRTY3JlZW5MaW5lOiAwLFxuICAgICAgICAgICAgICAgIGVuZFNjcmVlbkZ1bGxMaW5lOiAwLFxuICAgICAgICAgICAgICAgIHBhZ2VzOiBbMV1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZW5kID0gdGhpcy5wYXJhZ3JhcGhzLmZpbmRJbmRleCh4ID0+IG9mZnNldFRvcCArIHNjcm9sbGVySGVpZ2h0IDw9IHguZGlzdGFuY2VGcm9tVG9wICsgeC5oZWlnaHQpO1xuICAgICAgICBpZiAoZW5kIDwgMCkge1xuICAgICAgICAgICAgZW5kID0gdGhpcy5wYXJhZ3JhcGhzLmxlbmd0aCAtIDE7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZW5kTGluZUluZm8gPSBudWxsO1xuICAgICAgICBjb25zdCBlbmRQYXJhZ3JhcGggPSB0aGlzLnBhcmFncmFwaHNbZW5kXTtcbiAgICAgICAgaWYgKGVuZFBhcmFncmFwaCkge1xuICAgICAgICAgICAgY29uc3QgZW5kUGFyYWdyYXBoT2Zmc2V0VG9wID0gb2Zmc2V0VG9wICsgc2Nyb2xsZXJIZWlnaHQgLSBlbmRQYXJhZ3JhcGguZGlzdGFuY2VGcm9tVG9wO1xuICAgICAgICAgICAgZW5kTGluZUluZm8gPSBQYXJhZ3JhcGhIZWxwZXIuZ2V0VmlzaWJsZUxpbmVJbmZvKGVuZFBhcmFncmFwaD8udGV4dExpbmVzSW5mbywgZW5kUGFyYWdyYXBoT2Zmc2V0VG9wLCAtMSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2aXNpYmxlUGFnZXMgPSB0aGlzLmdldFZpc2libGVQYWdlcyhvZmZzZXRUb3AsIHNjcm9sbGVySGVpZ2h0KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhcnRQYXJhZ3JhcGg6IHN0YXJ0LFxuICAgICAgICAgICAgc3RhcnRMaW5lOiBzdGFydExpbmVJbmZvLmluZGV4LFxuICAgICAgICAgICAgc3RhcnRTY3JlZW5MaW5lOiBzdGFydExpbmVJbmZvLnNjcmVlbkluZGV4LFxuICAgICAgICAgICAgc3RhcnRTY3JlZW5GdWxsTGluZTogc3RhcnRMaW5lSW5mby52aXNpYmxlU2NyZWVuSW5kZXgsXG4gICAgICAgICAgICBlbmRQYXJhZ3JhcGg6IGVuZCxcbiAgICAgICAgICAgIGVuZExpbmU6IGVuZExpbmVJbmZvLmluZGV4LFxuICAgICAgICAgICAgZW5kU2NyZWVuTGluZTogZW5kTGluZUluZm8uc2NyZWVuSW5kZXgsXG4gICAgICAgICAgICBlbmRTY3JlZW5GdWxsTGluZTogZW5kTGluZUluZm8udmlzaWJsZVNjcmVlbkluZGV4LFxuICAgICAgICAgICAgcGFnZXM6IHZpc2libGVQYWdlc1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByb2Nlc3NQYXJhZ3JhcGhzUHJvcGVydGllcyhzdGFydFBhcmFncmFwaEluZGV4OiBudW1iZXIsIHdyYXBQYXJhZ3JhcGhJbmRleDogbnVtYmVyW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRQYXJhZ3JhcGhJbmRleGVzKHdyYXBQYXJhZ3JhcGhJbmRleCk7XG4gICAgICAgIGNvbnN0IHBhZ2VzSW5mbyA9IHsgcGFnZXNWZXJ0aWNhbERhdGE6IHRoaXMucGFnZXNWZXJ0aWNhbERhdGEsIHBhZ2VzU3BhY2U6IHRoaXMucGFnZXNTcGFjZSB9O1xuICAgICAgICBsZXQgY3VycmVudFBhZ2UgPSBzdGFydFBhcmFncmFwaEluZGV4ID09PSAwID8gMSA6IHRoaXMucGFyYWdyYXBoc1tzdGFydFBhcmFncmFwaEluZGV4IC0gMV0ubGFzdFBhZ2VOdW1iZXI7XG4gICAgICAgIGxldCBwYWdlVmVydGljYWxEYXRhID0gUGFnZUhlbHBlci5nZXRWZXJ0aWNhbERhdGEoY3VycmVudFBhZ2UsIHRoaXMucGFnZXNWZXJ0aWNhbERhdGEpO1xuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnRQYXJhZ3JhcGhJbmRleDsgaSA8IHRoaXMucGFyYWdyYXBocy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgcHJldlBhcmFncmFwaEluZm8gPSB0aGlzLmdldFByZXZpb3VzUGFyYWdyYXBoSW5mbyhpKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFncmFwaCA9IHRoaXMucGFyYWdyYXBoc1tpXTtcbiAgICAgICAgICAgIHBhcmFncmFwaC5wcm9jZXNzUGFyYWdyYXBoUHJvcGVydGllcyhwcmV2UGFyYWdyYXBoSW5mbywgcGFnZXNJbmZvLCB0aGlzLmN1c3RvbUNvbXBvbmVudHMudGFibGVzKTtcbiAgICAgICAgICAgIGlmIChwYXJhZ3JhcGguZmlyc3RQYWdlTnVtYmVyICE9PSBjdXJyZW50UGFnZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlID0gcGFyYWdyYXBoLmZpcnN0UGFnZU51bWJlcjtcbiAgICAgICAgICAgICAgICBwYWdlVmVydGljYWxEYXRhID0gUGFnZUhlbHBlci5nZXRWZXJ0aWNhbERhdGEocGFyYWdyYXBoLmZpcnN0UGFnZU51bWJlciwgdGhpcy5wYWdlc1ZlcnRpY2FsRGF0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhcmFncmFwaC5kaXN0YW5jZUZyb21Ub3AgPVxuICAgICAgICAgICAgICAgIChwYXJhZ3JhcGguZmlyc3RQYWdlTnVtYmVyIC0gMSkgKiB0aGlzLnBhZ2VIZWlnaHQgK1xuICAgICAgICAgICAgICAgIHRoaXMucGFnZXNTcGFjZSAqIHBhcmFncmFwaC5maXJzdFBhZ2VOdW1iZXIgK1xuICAgICAgICAgICAgICAgIHBhZ2VWZXJ0aWNhbERhdGEubWFyZ2luVG9wICtcbiAgICAgICAgICAgICAgICBwYXJhZ3JhcGgucGFnZVByZXZpb3VzQ29udGVudEhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwYWdlSGVpZ2h0ID0gdGhpcy5wYWdlSGVpZ2h0O1xuICAgICAgICBpZiAoIXBhZ2VIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhZ2VIZWlnaHQgPSB0aGlzLmdldEFsbFBhcmFncmFwaHNIZWlnaHQoKSArIHRoaXMuZG9jdW1lbnRNYXJnaW4udG9wICsgdGhpcy5kb2N1bWVudE1hcmdpbi5ib3R0b207XG4gICAgICAgICAgICB0aGlzLm1pbkhlaWdodCA9IHBhZ2VIZWlnaHQgKyAyICogdGhpcy5wYWdlc1NwYWNlO1xuICAgICAgICAgICAgdGhpcy5kZWZhdWx0VmVydGljYWxEYXRhLmNvbnRlbnRIZWlnaHQgPSBwYWdlSGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbGFzdFBhZ2VOdW1iZXIgPSB0aGlzLnBhcmFncmFwaHNbdGhpcy5wYXJhZ3JhcGhzLmxlbmd0aCAtIDFdLmxhc3RQYWdlTnVtYmVyO1xuICAgICAgICB0aGlzLmFsbFBhZ2VzSGVpZ2h0ID0gbGFzdFBhZ2VOdW1iZXIgKiAocGFnZUhlaWdodCArIHRoaXMucGFnZXNTcGFjZSkgKyB0aGlzLnBhZ2VzU3BhY2U7XG4gICAgICAgIHRoaXMuZW1pdCgncGFnZXNDb3VudENoYW5nZWQnLCB7IHBhZ2VzQ291bnQ6IGxhc3RQYWdlTnVtYmVyLCBwYWdlSGVpZ2h0OiBwYWdlSGVpZ2h0ICsgMiAqIHRoaXMucGFnZXNTcGFjZSB9KTtcbiAgICB9XG5cbiAgICBnZXRBbGxQYXJhZ3JhcGhzSGVpZ2h0KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcmFncmFwaHMucmVkdWNlKChzdW0sIHgpID0+IHN1bSArIHguaGVpZ2h0LCAwKTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncGFnZXNDb3VudENoYW5nZWQnKTtcbiAgICB9XG5cbiAgICB1cGRhdGVQYWdlVmVydGljYWxEYXRhKGVkZ2VUeXBlOiBFZGdlVHlwZSwgcGFnZTogbnVtYmVyLCB3cmFwUGFyYWdyYXBoSW5kZXg6IG51bWJlcltdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhZ2VWZXJ0aWNhbERhdGEgPSBQYWdlSGVscGVyLmdldFZlcnRpY2FsRGF0YShwYWdlLCB0aGlzLnBhZ2VzVmVydGljYWxEYXRhKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50SGVpZ2h0ID0gdGhpcy5jdXN0b21Db21wb25lbnRzLmVkZ2VzLmdldENvbXBvbmVudEhlaWdodChwYWdlLCBlZGdlVHlwZSk7XG4gICAgICAgIGlmIChlZGdlVHlwZSA9PT0gRWRnZVR5cGUuSGVhZGVyKSB7XG4gICAgICAgICAgICBwYWdlVmVydGljYWxEYXRhLm1hcmdpblRvcCA9IGNvbXBvbmVudEhlaWdodCA+IHRoaXMuZG9jdW1lbnRNYXJnaW4udG9wID8gY29tcG9uZW50SGVpZ2h0IDogdGhpcy5kb2N1bWVudE1hcmdpbi50b3A7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYWdlVmVydGljYWxEYXRhLm1hcmdpbkJvdHRvbSA9IGNvbXBvbmVudEhlaWdodCA+IHRoaXMuZG9jdW1lbnRNYXJnaW4uYm90dG9tID8gY29tcG9uZW50SGVpZ2h0IDogdGhpcy5kb2N1bWVudE1hcmdpbi5ib3R0b207XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdDb250ZW50SGVpZ2h0ID0gdGhpcy5wYWdlSGVpZ2h0IC0gcGFnZVZlcnRpY2FsRGF0YS5tYXJnaW5Ub3AgLSBwYWdlVmVydGljYWxEYXRhLm1hcmdpbkJvdHRvbTtcbiAgICAgICAgaWYgKG5ld0NvbnRlbnRIZWlnaHQgPT09IHBhZ2VWZXJ0aWNhbERhdGEuY29udGVudEhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFnZVZlcnRpY2FsRGF0YS5jb250ZW50SGVpZ2h0ID0gbmV3Q29udGVudEhlaWdodDtcbiAgICAgICAgdGhpcy5wcm9jZXNzUGFyYWdyYXBoc1Byb3BlcnRpZXMoMCwgd3JhcFBhcmFncmFwaEluZGV4KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFByZXZpb3VzUGFyYWdyYXBoSW5mbyhyb3c6IG51bWJlcik6IHsgbGFzdFBhZ2U6IG51bWJlcjsgcGFyYWdyYXBoSGVpZ2h0OiBudW1iZXI7IHBhcmFncmFwaExhc3RMaW5lOiBudW1iZXIgfSB7XG4gICAgICAgIGlmICghcm93IHx8ICF0aGlzLnBhcmFncmFwaHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4geyBsYXN0UGFnZTogMSwgcGFyYWdyYXBoSGVpZ2h0OiAwLCBwYXJhZ3JhcGhMYXN0TGluZTogLTEgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHByZXZQYXJhZ3JhcGggPSB0aGlzLnBhcmFncmFwaHNbcm93IC0gMV07XG4gICAgICAgIHJldHVybiBwcmV2UGFyYWdyYXBoLmdldFBhcmFncmFwaERhdGEoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFZpc2libGVQYWdlcyhvZmZzZXRUb3A6IG51bWJlciwgY29udGFpbmVySGVpZ2h0OiBudW1iZXIpOiBudW1iZXJbXSB7XG4gICAgICAgIGNvbnN0IHZpc2libGVQYWdlczogbnVtYmVyW10gPSBbXTtcblxuICAgICAgICBsZXQgZmlyc3RWaXNpYmxlUGFnZSA9IG9mZnNldFRvcCAvICh0aGlzLnBhZ2VIZWlnaHQgKyB0aGlzLnBhZ2VzU3BhY2UpO1xuICAgICAgICBpZiAoZmlyc3RWaXNpYmxlUGFnZSAlIDEgPT09IDApIHtcbiAgICAgICAgICAgIGZpcnN0VmlzaWJsZVBhZ2UrKztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB2aXNpYmxlUGFnZXNDb3VudCA9IGNvbnRhaW5lckhlaWdodCAvICh0aGlzLnBhZ2VIZWlnaHQgKyB0aGlzLnBhZ2VzU3BhY2UpO1xuICAgICAgICBjb25zdCBwYXJ0aWFsUGFnZU9uU2NyZWVuUGVyY2VudCA9IE1hdGgudHJ1bmMoKCh2aXNpYmxlUGFnZXNDb3VudCAlIDEpICsgKGZpcnN0VmlzaWJsZVBhZ2UgJSAxKSkgKiAxMDApO1xuICAgICAgICBjb25zdCBwYWdlU3BhY2VIZWlnaHRQZXJjZW50ID0gTWF0aC50cnVuYygodGhpcy5wYWdlc1NwYWNlIC8gY29udGFpbmVySGVpZ2h0KSAqIDEwMCk7XG4gICAgICAgIGlmIChwYXJ0aWFsUGFnZU9uU2NyZWVuUGVyY2VudCAtIHBhZ2VTcGFjZUhlaWdodFBlcmNlbnQgPiAxMDApIHtcbiAgICAgICAgICAgIHZpc2libGVQYWdlc0NvdW50Kys7XG4gICAgICAgIH1cblxuICAgICAgICB2aXNpYmxlUGFnZXNDb3VudCA9IE1hdGguY2VpbCh2aXNpYmxlUGFnZXNDb3VudCk7XG4gICAgICAgIGZpcnN0VmlzaWJsZVBhZ2UgPSBNYXRoLmNlaWwoZmlyc3RWaXNpYmxlUGFnZSk7XG4gICAgICAgIGNvbnN0IGRvY3VtZW50UGFnZXNDb3VudCA9IHRoaXMucGFyYWdyYXBoc1t0aGlzLnBhcmFncmFwaHMubGVuZ3RoIC0gMV0ubGFzdFBhZ2VOdW1iZXI7XG4gICAgICAgIGlmIChmaXJzdFZpc2libGVQYWdlICsgdmlzaWJsZVBhZ2VzQ291bnQgLSAxID4gZG9jdW1lbnRQYWdlc0NvdW50KSB7XG4gICAgICAgICAgICB2aXNpYmxlUGFnZXNDb3VudCA9IGRvY3VtZW50UGFnZXNDb3VudCAtIGZpcnN0VmlzaWJsZVBhZ2UgKyAxO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2aXNpYmxlUGFnZXNDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICB2aXNpYmxlUGFnZXMucHVzaChmaXJzdFZpc2libGVQYWdlICsgaSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmlzaWJsZVBhZ2VzO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdFBhZ2VzVmVydGljYWxEYXRhKCk6IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhdGhpcy5jdXN0b21Db21wb25lbnRzLmVkZ2VzIHx8XG4gICAgICAgICAgICAoIXRoaXMuY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5oZWFkZXJzQ29tcG9uZW50cy5sZW5ndGggJiYgIXRoaXMuY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5mb290ZXJzQ29tcG9uZW50cy5sZW5ndGgpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5wYWdlc1ZlcnRpY2FsRGF0YSA9IFtcbiAgICAgICAgICAgICAgICBuZXcgUGFnZVZlcnRpY2FsRGF0YU1vZGVsKHtcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luVG9wOiB0aGlzLmRvY3VtZW50TWFyZ2luLnRvcCxcbiAgICAgICAgICAgICAgICAgICAgbWFyZ2luQm90dG9tOiB0aGlzLmRvY3VtZW50TWFyZ2luLmJvdHRvbSxcbiAgICAgICAgICAgICAgICAgICAgY29udGVudEhlaWdodDogdGhpcy5wYWdlSGVpZ2h0IC0gdGhpcy5kb2N1bWVudE1hcmdpbi50b3AgLSB0aGlzLmRvY3VtZW50TWFyZ2luLmJvdHRvbSxcbiAgICAgICAgICAgICAgICAgICAgcGFnZVR5cGU6IFBhZ2VUeXBlLkRlZmF1bHRcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhZ2VUeXBlcyA9IHRoaXMuY3VzdG9tQ29tcG9uZW50cy5lZGdlcy5nZXRVbmlxdWVQYWdlVHlwZXMoKTtcbiAgICAgICAgdGhpcy5wYWdlc1ZlcnRpY2FsRGF0YSA9IHBhZ2VUeXBlcy5tYXAocGFnZVR5cGUgPT4ge1xuICAgICAgICAgICAgY29uc3QgaGVhZGVySGVpZ2h0ID0gdGhpcy5jdXN0b21Db21wb25lbnRzLmVkZ2VzLmdldENvbXBvbmVudEhlaWdodEJ5UGFnZVR5cGUocGFnZVR5cGUsIEVkZ2VUeXBlLkhlYWRlcik7XG4gICAgICAgICAgICBjb25zdCBmb290ZXJIZWlnaHQgPSB0aGlzLmN1c3RvbUNvbXBvbmVudHMuZWRnZXMuZ2V0Q29tcG9uZW50SGVpZ2h0QnlQYWdlVHlwZShwYWdlVHlwZSwgRWRnZVR5cGUuRm9vdGVyKTtcbiAgICAgICAgICAgIGNvbnN0IG1hcmdpblRvcCA9IE1hdGgubWF4KGhlYWRlckhlaWdodCwgdGhpcy5kb2N1bWVudE1hcmdpbi50b3ApO1xuICAgICAgICAgICAgY29uc3QgbWFyZ2luQm90dG9tID0gTWF0aC5tYXgoZm9vdGVySGVpZ2h0LCB0aGlzLmRvY3VtZW50TWFyZ2luLmJvdHRvbSk7XG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgUGFnZVZlcnRpY2FsRGF0YU1vZGVsKHtcbiAgICAgICAgICAgICAgICBtYXJnaW5Ub3AsXG4gICAgICAgICAgICAgICAgbWFyZ2luQm90dG9tLFxuICAgICAgICAgICAgICAgIGNvbnRlbnRIZWlnaHQ6IHRoaXMucGFnZUhlaWdodCAtIG1hcmdpblRvcCAtIG1hcmdpbkJvdHRvbSxcbiAgICAgICAgICAgICAgICBwYWdlVHlwZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0UGFyYWdyYXBoSW5kZXhlcyh3cmFwUGFyYWdyYXBoSW5kZXg6IG51bWJlcltdKTogdm9pZCB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wYXJhZ3JhcGhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmFncmFwaHNbaV0uc3RhcnRJbnNlcnRJbmRleCA9IHdyYXBQYXJhZ3JhcGhJbmRleFtpXTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
@@ -41,12 +41,12 @@ export class Paragraph {
41
41
  : ParagraphHelper.getPageLinesHeight(this.textLinesInfo, this.lastPageNumber);
42
42
  return { lastPage: this.lastPageNumber, paragraphHeight: pageContentHeight, paragraphLastLine: this.lastScreenLine };
43
43
  }
44
- processParagraphProperties(prevParagraphInfo, pagesInfo) {
44
+ processParagraphProperties(prevParagraphInfo, pagesInfo, tables) {
45
45
  this.pagePreviousContentHeight = prevParagraphInfo.paragraphHeight;
46
- this.processTextLinesProperties(this, prevParagraphInfo, pagesInfo);
46
+ this.processTextLinesProperties(this, prevParagraphInfo, pagesInfo, tables);
47
47
  ParagraphHelper.processOffsetLineWithNumberingMarker(this.textLinesInfo[0], this.numberingData.height, this.offsetBefore);
48
48
  this.pageNumbers = ParagraphHelper.getParagraphPages(this.textLinesInfo);
49
49
  this.height = ParagraphHelper.getParagraphHeight(this.textLinesInfo);
50
50
  }
51
51
  }
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYWdyYXBoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvK3NoYXJlZC9lZGl0b3IvY29yZS9wYWdpbmcvcGFyYWdyYXBoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEQsTUFBTSxPQUFPLFNBQVM7SUFhbEIsSUFBSSxlQUFlO1FBQ2YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztJQUN4RSxDQUFDO0lBRUQsSUFBSSxrQkFBa0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDO0lBQ2hGLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDZixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO0lBQ2pELENBQUM7SUFFRCxZQUNXLGFBQWlDLEVBQ2hDLFlBQW9CLEVBQ3BCLDBCQUlDO1FBTkYsa0JBQWEsR0FBYixhQUFhLENBQW9CO1FBQ2hDLGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBQ3BCLCtCQUEwQixHQUExQiwwQkFBMEIsQ0FJekI7UUEzQ2Isa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBRW5DLDhCQUF5QixHQUFHLENBQUMsQ0FBQztRQUU5QixVQUFLLEdBQUcsQ0FBQyxDQUFDO1FBRVYsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUlYLGdCQUFXLEdBQWEsRUFBRSxDQUFDO0lBa0N4QixDQUFDO0lBRUosZ0JBQWdCLENBQUMsVUFBMkI7UUFDeEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM3SCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsS0FBYztRQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztJQUNuRCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ1osTUFBTSxpQkFBaUIsR0FDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUN6QixDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMseUJBQXlCO1lBQzlDLENBQUMsQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDekgsQ0FBQztJQUVELDBCQUEwQixDQUN0QixpQkFBMkYsRUFDM0YsU0FBNkU7UUFFN0UsSUFBSSxDQUFDLHlCQUF5QixHQUFHLGlCQUFpQixDQUFDLGVBQWUsQ0FBQztRQUNuRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3BFLGVBQWUsQ0FBQyxvQ0FBb0MsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUMxSCxJQUFJLENBQUMsV0FBVyxHQUFHLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLE1BQU0sR0FBRyxlQUFlLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExpbmVJbmZvTW9kZWwgfSBmcm9tICcuLi9tb2RlbHMvbGluZS1pbmZvLm1vZGVsJztcbmltcG9ydCB7IE51bWJlcmluZ0RhdGFNb2RlbCB9IGZyb20gJy4uL21vZGVscy9udW1iZXJpbmctZGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBQYWdlVmVydGljYWxEYXRhTW9kZWwgfSBmcm9tICcuL3BhZ2UtdmVydGljYWwtZGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBQYXJhZ3JhcGhIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzL3BhcmFncmFwaC5oZWxwZXInO1xuaW1wb3J0IHsgVGV4dExpbmVJbmZvIH0gZnJvbSAnLi90ZXh0LWxpbmUtaW5mbyc7XG5cbmV4cG9ydCBjbGFzcyBQYXJhZ3JhcGgge1xuICAgIHRleHRMaW5lc0luZm86IFRleHRMaW5lSW5mb1tdID0gW107XG5cbiAgICBwYWdlUHJldmlvdXNDb250ZW50SGVpZ2h0ID0gMDtcblxuICAgIHdpZHRoID0gMDtcblxuICAgIGhlaWdodCA9IDA7XG5cbiAgICBkaXN0YW5jZUZyb21Ub3A6IG51bWJlcjtcblxuICAgIHBhZ2VOdW1iZXJzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgZ2V0IGZpcnN0UGFnZU51bWJlcigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdlTnVtYmVyc1swXSB8fCAxO1xuICAgIH1cblxuICAgIGdldCBsYXN0UGFnZU51bWJlcigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdlTnVtYmVyc1t0aGlzLnBhZ2VOdW1iZXJzLmxlbmd0aCAtIDFdIHx8IDE7XG4gICAgfVxuXG4gICAgZ2V0IGZpcnN0U2NyZWVuTGluZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0TGluZXNJbmZvWzBdLnNjcmVlbkxpbmU7XG4gICAgfVxuXG4gICAgZ2V0IGxhc3RTY3JlZW5MaW5lKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHRMaW5lc0luZm9bdGhpcy50ZXh0TGluZXNJbmZvLmxlbmd0aCAtIDFdLnNjcmVlbkxpbmU7XG4gICAgfVxuXG4gICAgZ2V0IGlzRW5kZWRCeVBhZ2VCcmVhaygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dExpbmVzSW5mb1t0aGlzLnRleHRMaW5lc0luZm8ubGVuZ3RoIC0gMV0uaXNFbmRlZEJ5UGFnZUJyZWFrO1xuICAgIH1cblxuICAgIGdldCBiYWNrZ3JvdW5kQ29sb3IoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dExpbmVzSW5mb1swXS5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgbnVtYmVyaW5nRGF0YTogTnVtYmVyaW5nRGF0YU1vZGVsLFxuICAgICAgICBwcml2YXRlIG9mZnNldEJlZm9yZTogbnVtYmVyLFxuICAgICAgICBwcml2YXRlIHByb2Nlc3NUZXh0TGluZXNQcm9wZXJ0aWVzOiAoXG4gICAgICAgICAgICBjdXJyZW50UGFyYWdyYXBoOiBQYXJhZ3JhcGgsXG4gICAgICAgICAgICBwcmV2UGFyYWdyYXBoSW5mbzogeyBsYXN0UGFnZTogbnVtYmVyOyBwYXJhZ3JhcGhIZWlnaHQ6IG51bWJlcjsgcGFyYWdyYXBoTGFzdExpbmU6IG51bWJlciB9LFxuICAgICAgICAgICAgcGFnZXNJbmZvOiB7IHBhZ2VzVmVydGljYWxEYXRhOiBQYWdlVmVydGljYWxEYXRhTW9kZWxbXTsgcGFnZXNTcGFjZTogbnVtYmVyIH1cbiAgICAgICAgKSA9PiB2b2lkXG4gICAgKSB7fVxuXG4gICAgc2V0VGV4dExpbmVzSW5mbyhsaW5lc0luZm9zOiBMaW5lSW5mb01vZGVsW10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy50ZXh0TGluZXNJbmZvID0gbGluZXNJbmZvcy5tYXAobGluZUluZm8gPT4gbmV3IFRleHRMaW5lSW5mbyh0aGlzLndpZHRoLCBsaW5lSW5mby5hbGlnbiwgbGluZUluZm8uaW5kZW50LCBsaW5lSW5mbykpO1xuICAgIH1cblxuICAgIHNldElzQWZ0ZXJQYWdlQnJlYWsodmFsdWU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy50ZXh0TGluZXNJbmZvWzBdLmlzQWZ0ZXJQYWdlQnJlYWsgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBnZXRQYXJhZ3JhcGhEYXRhKCk6IHsgbGFzdFBhZ2U6IG51bWJlcjsgcGFyYWdyYXBoSGVpZ2h0OiBudW1iZXI7IHBhcmFncmFwaExhc3RMaW5lOiBudW1iZXIgfSB7XG4gICAgICAgIGNvbnN0IHBhZ2VDb250ZW50SGVpZ2h0ID1cbiAgICAgICAgICAgIHRoaXMucGFnZU51bWJlcnMubGVuZ3RoID09PSAxXG4gICAgICAgICAgICAgICAgPyB0aGlzLmhlaWdodCArIHRoaXMucGFnZVByZXZpb3VzQ29udGVudEhlaWdodFxuICAgICAgICAgICAgICAgIDogUGFyYWdyYXBoSGVscGVyLmdldFBhZ2VMaW5lc0hlaWdodCh0aGlzLnRleHRMaW5lc0luZm8sIHRoaXMubGFzdFBhZ2VOdW1iZXIpO1xuICAgICAgICByZXR1cm4geyBsYXN0UGFnZTogdGhpcy5sYXN0UGFnZU51bWJlciwgcGFyYWdyYXBoSGVpZ2h0OiBwYWdlQ29udGVudEhlaWdodCwgcGFyYWdyYXBoTGFzdExpbmU6IHRoaXMubGFzdFNjcmVlbkxpbmUgfTtcbiAgICB9XG5cbiAgICBwcm9jZXNzUGFyYWdyYXBoUHJvcGVydGllcyhcbiAgICAgICAgcHJldlBhcmFncmFwaEluZm86IHsgbGFzdFBhZ2U6IG51bWJlcjsgcGFyYWdyYXBoSGVpZ2h0OiBudW1iZXI7IHBhcmFncmFwaExhc3RMaW5lOiBudW1iZXIgfSxcbiAgICAgICAgcGFnZXNJbmZvOiB7IHBhZ2VzVmVydGljYWxEYXRhOiBQYWdlVmVydGljYWxEYXRhTW9kZWxbXTsgcGFnZXNTcGFjZTogbnVtYmVyIH1cbiAgICApOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wYWdlUHJldmlvdXNDb250ZW50SGVpZ2h0ID0gcHJldlBhcmFncmFwaEluZm8ucGFyYWdyYXBoSGVpZ2h0O1xuICAgICAgICB0aGlzLnByb2Nlc3NUZXh0TGluZXNQcm9wZXJ0aWVzKHRoaXMsIHByZXZQYXJhZ3JhcGhJbmZvLCBwYWdlc0luZm8pO1xuICAgICAgICBQYXJhZ3JhcGhIZWxwZXIucHJvY2Vzc09mZnNldExpbmVXaXRoTnVtYmVyaW5nTWFya2VyKHRoaXMudGV4dExpbmVzSW5mb1swXSwgdGhpcy5udW1iZXJpbmdEYXRhLmhlaWdodCwgdGhpcy5vZmZzZXRCZWZvcmUpO1xuICAgICAgICB0aGlzLnBhZ2VOdW1iZXJzID0gUGFyYWdyYXBoSGVscGVyLmdldFBhcmFncmFwaFBhZ2VzKHRoaXMudGV4dExpbmVzSW5mbyk7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gUGFyYWdyYXBoSGVscGVyLmdldFBhcmFncmFwaEhlaWdodCh0aGlzLnRleHRMaW5lc0luZm8pO1xuICAgIH1cbn1cbiJdfQ==
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyYWdyYXBoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW5vZGVyL3NyYy9saWIvK3NoYXJlZC9lZGl0b3IvY29yZS9wYWdpbmcvcGFyYWdyYXBoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQU1BLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEQsTUFBTSxPQUFPLFNBQVM7SUFlbEIsSUFBSSxlQUFlO1FBQ2YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztJQUN4RSxDQUFDO0lBRUQsSUFBSSxrQkFBa0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDO0lBQ2hGLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDZixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO0lBQ2pELENBQUM7SUFFRCxZQUNXLGFBQWlDLEVBQ2hDLFlBQW9CLEVBQ3BCLDBCQUtDO1FBUEYsa0JBQWEsR0FBYixhQUFhLENBQW9CO1FBQ2hDLGlCQUFZLEdBQVosWUFBWSxDQUFRO1FBQ3BCLCtCQUEwQixHQUExQiwwQkFBMEIsQ0FLekI7UUE1Q2Isa0JBQWEsR0FBbUIsRUFBRSxDQUFDO1FBRW5DLDhCQUF5QixHQUFHLENBQUMsQ0FBQztRQUU5QixVQUFLLEdBQUcsQ0FBQyxDQUFDO1FBRVYsV0FBTSxHQUFHLENBQUMsQ0FBQztRQUlYLGdCQUFXLEdBQWEsRUFBRSxDQUFDO0lBbUN4QixDQUFDO0lBRUosZ0JBQWdCLENBQUMsVUFBMkI7UUFDeEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUM3SCxDQUFDO0lBRUQsbUJBQW1CLENBQUMsS0FBYztRQUM5QixJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztJQUNuRCxDQUFDO0lBRUQsZ0JBQWdCO1FBQ1osTUFBTSxpQkFBaUIsR0FDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEtBQUssQ0FBQztZQUN6QixDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMseUJBQXlCO1lBQzlDLENBQUMsQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDdEYsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDekgsQ0FBQztJQUVELDBCQUEwQixDQUN0QixpQkFBMkYsRUFDM0YsU0FBNkUsRUFDN0UsTUFBMkM7UUFFM0MsSUFBSSxDQUFDLHlCQUF5QixHQUFHLGlCQUFpQixDQUFDLGVBQWUsQ0FBQztRQUNuRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM1RSxlQUFlLENBQUMsb0NBQW9DLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDMUgsSUFBSSxDQUFDLFdBQVcsR0FBRyxlQUFlLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxNQUFNLEdBQUcsZUFBZSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN6RSxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTGluZUluZm9Nb2RlbCB9IGZyb20gJy4uL21vZGVscy9saW5lLWluZm8ubW9kZWwnO1xuaW1wb3J0IHsgTm9kZXJUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2N1c3RvbS1jb21wb25lbnRzL3RhYmxlL2NvbXBvbmVudHMvdGFibGUuY29tcG9uZW50JztcbmltcG9ydCB7IE51bWJlcmluZ0RhdGFNb2RlbCB9IGZyb20gJy4uL21vZGVscy9udW1iZXJpbmctZGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBQYWdlVmVydGljYWxEYXRhTW9kZWwgfSBmcm9tICcuL3BhZ2UtdmVydGljYWwtZGF0YS5tb2RlbCc7XG5pbXBvcnQgeyBQYXJhZ3JhcGhIZWxwZXIgfSBmcm9tICcuLi9oZWxwZXJzL3BhcmFncmFwaC5oZWxwZXInO1xuaW1wb3J0IHsgVGV4dExpbmVJbmZvIH0gZnJvbSAnLi90ZXh0LWxpbmUtaW5mbyc7XG5cbmV4cG9ydCBjbGFzcyBQYXJhZ3JhcGgge1xuICAgIHN0YXJ0SW5zZXJ0SW5kZXg6IG51bWJlcjtcblxuICAgIHRleHRMaW5lc0luZm86IFRleHRMaW5lSW5mb1tdID0gW107XG5cbiAgICBwYWdlUHJldmlvdXNDb250ZW50SGVpZ2h0ID0gMDtcblxuICAgIHdpZHRoID0gMDtcblxuICAgIGhlaWdodCA9IDA7XG5cbiAgICBkaXN0YW5jZUZyb21Ub3A6IG51bWJlcjtcblxuICAgIHBhZ2VOdW1iZXJzOiBudW1iZXJbXSA9IFtdO1xuXG4gICAgZ2V0IGZpcnN0UGFnZU51bWJlcigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdlTnVtYmVyc1swXSB8fCAxO1xuICAgIH1cblxuICAgIGdldCBsYXN0UGFnZU51bWJlcigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5wYWdlTnVtYmVyc1t0aGlzLnBhZ2VOdW1iZXJzLmxlbmd0aCAtIDFdIHx8IDE7XG4gICAgfVxuXG4gICAgZ2V0IGZpcnN0U2NyZWVuTGluZSgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0TGluZXNJbmZvWzBdLnNjcmVlbkxpbmU7XG4gICAgfVxuXG4gICAgZ2V0IGxhc3RTY3JlZW5MaW5lKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHRMaW5lc0luZm9bdGhpcy50ZXh0TGluZXNJbmZvLmxlbmd0aCAtIDFdLnNjcmVlbkxpbmU7XG4gICAgfVxuXG4gICAgZ2V0IGlzRW5kZWRCeVBhZ2VCcmVhaygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dExpbmVzSW5mb1t0aGlzLnRleHRMaW5lc0luZm8ubGVuZ3RoIC0gMV0uaXNFbmRlZEJ5UGFnZUJyZWFrO1xuICAgIH1cblxuICAgIGdldCBiYWNrZ3JvdW5kQ29sb3IoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dExpbmVzSW5mb1swXS5iYWNrZ3JvdW5kQ29sb3I7XG4gICAgfVxuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgbnVtYmVyaW5nRGF0YTogTnVtYmVyaW5nRGF0YU1vZGVsLFxuICAgICAgICBwcml2YXRlIG9mZnNldEJlZm9yZTogbnVtYmVyLFxuICAgICAgICBwcml2YXRlIHByb2Nlc3NUZXh0TGluZXNQcm9wZXJ0aWVzOiAoXG4gICAgICAgICAgICBjdXJyZW50UGFyYWdyYXBoOiBQYXJhZ3JhcGgsXG4gICAgICAgICAgICBwcmV2UGFyYWdyYXBoSW5mbzogeyBsYXN0UGFnZTogbnVtYmVyOyBwYXJhZ3JhcGhIZWlnaHQ6IG51bWJlcjsgcGFyYWdyYXBoTGFzdExpbmU6IG51bWJlciB9LFxuICAgICAgICAgICAgcGFnZXNJbmZvOiB7IHBhZ2VzVmVydGljYWxEYXRhOiBQYWdlVmVydGljYWxEYXRhTW9kZWxbXTsgcGFnZXNTcGFjZTogbnVtYmVyIH0sXG4gICAgICAgICAgICB0YWJsZXM6IENvbXBvbmVudFJlZjxOb2RlclRhYmxlQ29tcG9uZW50PltdXG4gICAgICAgICkgPT4gdm9pZFxuICAgICkge31cblxuICAgIHNldFRleHRMaW5lc0luZm8obGluZXNJbmZvczogTGluZUluZm9Nb2RlbFtdKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGV4dExpbmVzSW5mbyA9IGxpbmVzSW5mb3MubWFwKGxpbmVJbmZvID0+IG5ldyBUZXh0TGluZUluZm8odGhpcy53aWR0aCwgbGluZUluZm8uYWxpZ24sIGxpbmVJbmZvLmluZGVudCwgbGluZUluZm8pKTtcbiAgICB9XG5cbiAgICBzZXRJc0FmdGVyUGFnZUJyZWFrKHZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGV4dExpbmVzSW5mb1swXS5pc0FmdGVyUGFnZUJyZWFrID0gdmFsdWU7XG4gICAgfVxuXG4gICAgZ2V0UGFyYWdyYXBoRGF0YSgpOiB7IGxhc3RQYWdlOiBudW1iZXI7IHBhcmFncmFwaEhlaWdodDogbnVtYmVyOyBwYXJhZ3JhcGhMYXN0TGluZTogbnVtYmVyIH0ge1xuICAgICAgICBjb25zdCBwYWdlQ29udGVudEhlaWdodCA9XG4gICAgICAgICAgICB0aGlzLnBhZ2VOdW1iZXJzLmxlbmd0aCA9PT0gMVxuICAgICAgICAgICAgICAgID8gdGhpcy5oZWlnaHQgKyB0aGlzLnBhZ2VQcmV2aW91c0NvbnRlbnRIZWlnaHRcbiAgICAgICAgICAgICAgICA6IFBhcmFncmFwaEhlbHBlci5nZXRQYWdlTGluZXNIZWlnaHQodGhpcy50ZXh0TGluZXNJbmZvLCB0aGlzLmxhc3RQYWdlTnVtYmVyKTtcbiAgICAgICAgcmV0dXJuIHsgbGFzdFBhZ2U6IHRoaXMubGFzdFBhZ2VOdW1iZXIsIHBhcmFncmFwaEhlaWdodDogcGFnZUNvbnRlbnRIZWlnaHQsIHBhcmFncmFwaExhc3RMaW5lOiB0aGlzLmxhc3RTY3JlZW5MaW5lIH07XG4gICAgfVxuXG4gICAgcHJvY2Vzc1BhcmFncmFwaFByb3BlcnRpZXMoXG4gICAgICAgIHByZXZQYXJhZ3JhcGhJbmZvOiB7IGxhc3RQYWdlOiBudW1iZXI7IHBhcmFncmFwaEhlaWdodDogbnVtYmVyOyBwYXJhZ3JhcGhMYXN0TGluZTogbnVtYmVyIH0sXG4gICAgICAgIHBhZ2VzSW5mbzogeyBwYWdlc1ZlcnRpY2FsRGF0YTogUGFnZVZlcnRpY2FsRGF0YU1vZGVsW107IHBhZ2VzU3BhY2U6IG51bWJlciB9LFxuICAgICAgICB0YWJsZXM6IENvbXBvbmVudFJlZjxOb2RlclRhYmxlQ29tcG9uZW50PltdXG4gICAgKTogdm9pZCB7XG4gICAgICAgIHRoaXMucGFnZVByZXZpb3VzQ29udGVudEhlaWdodCA9IHByZXZQYXJhZ3JhcGhJbmZvLnBhcmFncmFwaEhlaWdodDtcbiAgICAgICAgdGhpcy5wcm9jZXNzVGV4dExpbmVzUHJvcGVydGllcyh0aGlzLCBwcmV2UGFyYWdyYXBoSW5mbywgcGFnZXNJbmZvLCB0YWJsZXMpO1xuICAgICAgICBQYXJhZ3JhcGhIZWxwZXIucHJvY2Vzc09mZnNldExpbmVXaXRoTnVtYmVyaW5nTWFya2VyKHRoaXMudGV4dExpbmVzSW5mb1swXSwgdGhpcy5udW1iZXJpbmdEYXRhLmhlaWdodCwgdGhpcy5vZmZzZXRCZWZvcmUpO1xuICAgICAgICB0aGlzLnBhZ2VOdW1iZXJzID0gUGFyYWdyYXBoSGVscGVyLmdldFBhcmFncmFwaFBhZ2VzKHRoaXMudGV4dExpbmVzSW5mbyk7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gUGFyYWdyYXBoSGVscGVyLmdldFBhcmFncmFwaEhlaWdodCh0aGlzLnRleHRMaW5lc0luZm8pO1xuICAgIH1cbn1cbiJdfQ==