@plait/draw 0.70.0 → 0.72.0

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 (83) hide show
  1. package/arrow-line.component.d.ts +1 -1
  2. package/constants/default.d.ts +1 -0
  3. package/constants/geometry.d.ts +5 -5
  4. package/constants/index.d.ts +1 -0
  5. package/constants/pointer.d.ts +3 -3
  6. package/engines/table/table.d.ts +2 -2
  7. package/engines/uml/combined-fragment.d.ts +2 -2
  8. package/engines/uml/package.d.ts +2 -2
  9. package/esm2022/arrow-line.component.mjs +13 -13
  10. package/esm2022/constants/default.mjs +2 -0
  11. package/esm2022/constants/geometry.mjs +8 -8
  12. package/esm2022/constants/index.mjs +2 -1
  13. package/esm2022/constants/pointer.mjs +4 -4
  14. package/esm2022/engines/table/table.mjs +3 -3
  15. package/esm2022/engines/uml/combined-fragment.mjs +5 -5
  16. package/esm2022/engines/uml/package.mjs +5 -5
  17. package/esm2022/generators/geometry-shape.generator.mjs +6 -5
  18. package/esm2022/generators/single-text.generator.mjs +3 -3
  19. package/esm2022/generators/table.generator.mjs +6 -5
  20. package/esm2022/generators/text.generator.mjs +25 -21
  21. package/esm2022/geometry.component.mjs +4 -5
  22. package/esm2022/interfaces/arrow-line.mjs +1 -1
  23. package/esm2022/interfaces/element.mjs +1 -7
  24. package/esm2022/interfaces/geometry.mjs +6 -6
  25. package/esm2022/interfaces/index.mjs +13 -1
  26. package/esm2022/interfaces/options.mjs +2 -0
  27. package/esm2022/interfaces/vector-line.mjs +5 -5
  28. package/esm2022/plugins/with-arrow-line-text.mjs +2 -2
  29. package/esm2022/plugins/with-draw-fragment.mjs +8 -12
  30. package/esm2022/plugins/with-draw-hotkey.mjs +3 -3
  31. package/esm2022/plugins/with-draw-resize.mjs +11 -6
  32. package/esm2022/plugins/with-draw-rotate.mjs +3 -2
  33. package/esm2022/plugins/with-draw.mjs +10 -11
  34. package/esm2022/plugins/with-vector-line-create.mjs +123 -0
  35. package/esm2022/plugins/with-vector-line-resize.mjs +3 -3
  36. package/esm2022/table.component.mjs +8 -9
  37. package/esm2022/transforms/index.mjs +3 -3
  38. package/esm2022/transforms/multi-text-geometry-text.mjs +3 -3
  39. package/esm2022/utils/arrow-line/arrow-line-basic.mjs +6 -5
  40. package/esm2022/utils/clipboard.mjs +6 -17
  41. package/esm2022/utils/common.mjs +15 -8
  42. package/esm2022/utils/geometry.mjs +3 -3
  43. package/esm2022/utils/hit.mjs +21 -19
  44. package/esm2022/utils/index.mjs +2 -1
  45. package/esm2022/utils/multi-text-geometry.mjs +3 -3
  46. package/esm2022/utils/selected.mjs +9 -1
  47. package/esm2022/utils/snap-resizing.mjs +1 -1
  48. package/esm2022/utils/style/stroke.mjs +7 -17
  49. package/esm2022/utils/table.mjs +2 -2
  50. package/esm2022/utils/vector-line.mjs +6 -10
  51. package/esm2022/vector-line.component.mjs +2 -4
  52. package/fesm2022/plait-draw.mjs +259 -318
  53. package/fesm2022/plait-draw.mjs.map +1 -1
  54. package/generators/single-text.generator.d.ts +2 -2
  55. package/generators/text.generator.d.ts +11 -11
  56. package/interfaces/arrow-line.d.ts +1 -1
  57. package/interfaces/element.d.ts +0 -5
  58. package/interfaces/geometry.d.ts +11 -10
  59. package/interfaces/index.d.ts +4 -1
  60. package/interfaces/options.d.ts +4 -0
  61. package/interfaces/vector-line.d.ts +4 -4
  62. package/package.json +1 -1
  63. package/plugins/with-vector-line-create.d.ts +2 -0
  64. package/styles/styles.scss +1 -1
  65. package/table.component.d.ts +2 -2
  66. package/transforms/common.d.ts +1 -1
  67. package/transforms/geometry.d.ts +1 -1
  68. package/transforms/index.d.ts +3 -3
  69. package/transforms/multi-text-geometry-text.d.ts +2 -2
  70. package/utils/clipboard.d.ts +10 -3
  71. package/utils/common.d.ts +5 -3
  72. package/utils/geometry.d.ts +6 -6
  73. package/utils/hit.d.ts +8 -4
  74. package/utils/index.d.ts +1 -0
  75. package/utils/multi-text-geometry.d.ts +6 -10
  76. package/utils/selected.d.ts +3 -1
  77. package/utils/snap-resizing.d.ts +2 -2
  78. package/utils/style/stroke.d.ts +1 -2
  79. package/utils/vector-line.d.ts +0 -1
  80. package/esm2022/plugins/with-geometry-resize.mjs +0 -70
  81. package/esm2022/plugins/with-vector-pen-create.mjs +0 -123
  82. package/plugins/with-geometry-resize.d.ts +0 -2
  83. package/plugins/with-vector-pen-create.d.ts +0 -2
@@ -1,13 +1,10 @@
1
- import { Transforms, getElementById, idCreator } from '@plait/core';
1
+ import { getElementById } from '@plait/core';
2
+ import { buildClipboardData as basicBuildClipboard, insertClipboardData as basicInsertClipboard } from '@plait/common';
2
3
  import { PlaitDrawElement } from '../interfaces';
3
4
  import { getConnectionPoint } from './arrow-line/arrow-line-common';
4
5
  import { updateCellIds, updateRowOrColumnIds } from './table';
5
6
  export const buildClipboardData = (board, elements, startPoint) => {
6
- return elements.map(element => {
7
- if (PlaitDrawElement.isShapeElement(element)) {
8
- const points = element.points.map(point => [point[0] - startPoint[0], point[1] - startPoint[1]]);
9
- return { ...element, points };
10
- }
7
+ return basicBuildClipboard(board, elements, startPoint, (element) => {
11
8
  if (PlaitDrawElement.isArrowLine(element)) {
12
9
  let source = { ...element.source };
13
10
  let target = { ...element.target };
@@ -29,16 +26,11 @@ export const buildClipboardData = (board, elements, startPoint) => {
29
26
  points = points.map(point => [point[0] - startPoint[0], point[1] - startPoint[1]]);
30
27
  return { ...element, points, source, target };
31
28
  }
32
- return element;
29
+ return undefined;
33
30
  });
34
31
  };
35
32
  export const insertClipboardData = (board, elements, startPoint) => {
36
- const idsMap = {};
37
- elements.forEach(element => {
38
- idsMap[element.id] = idCreator();
39
- });
40
- elements.forEach(element => {
41
- element.id = idsMap[element.id];
33
+ basicInsertClipboard(board, elements, startPoint, (element, idsMap) => {
42
34
  if (PlaitDrawElement.isArrowLine(element)) {
43
35
  if (element.source.boundId) {
44
36
  const boundElement = elements.find(item => [element.source.boundId, idsMap[element.source.boundId]].includes(item.id));
@@ -58,9 +50,6 @@ export const insertClipboardData = (board, elements, startPoint) => {
58
50
  updateRowOrColumnIds(element, 'column');
59
51
  updateCellIds(element.cells);
60
52
  }
61
- element.points = element.points.map(point => [startPoint[0] + point[0], startPoint[1] + point[1]]);
62
- Transforms.insertNode(board, element, [board.children.length]);
63
53
  });
64
- Transforms.addSelectionWithTemporaryElements(board, elements);
65
54
  };
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcGJvYXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvdXRpbHMvY2xpcGJvYXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsVUFBVSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdkYsT0FBTyxFQUFrQixnQkFBZ0IsRUFBb0MsTUFBTSxlQUFlLENBQUM7QUFFbkcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUU5RCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEtBQWlCLEVBQUUsUUFBNEIsRUFBRSxVQUFpQixFQUFFLEVBQUU7SUFDckcsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQzFCLElBQUksZ0JBQWdCLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDM0MsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDakcsT0FBTyxFQUFFLEdBQUcsT0FBTyxFQUFFLE1BQU0sRUFBbUIsQ0FBQztRQUNuRCxDQUFDO1FBQ0QsSUFBSSxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN4QyxJQUFJLE1BQU0sR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25DLElBQUksTUFBTSxHQUFHLEVBQUUsR0FBRyxP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QUM7SUFDbkUsQ0FBQyxDQUFDLENBQUM7SUFDSCxVQUFVLENBQUMsaUNBQWlDLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0FBQ2xFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQsIFBvaW50LCBUcmFuc2Zvcm1zLCBnZXRFbGVtZW50QnlJZCwgaWRDcmVhdG9yIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgUGxhaXRBcnJvd0xpbmUsIFBsYWl0RHJhd0VsZW1lbnQsIFBsYWl0R2VvbWV0cnksIFBsYWl0U2hhcGVFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBQbGFpdEltYWdlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9pbWFnZSc7XG5pbXBvcnQgeyBnZXRDb25uZWN0aW9uUG9pbnQgfSBmcm9tICcuL2Fycm93LWxpbmUvYXJyb3ctbGluZS1jb21tb24nO1xuaW1wb3J0IHsgUGxhaXRUYWJsZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdGFibGUnO1xuaW1wb3J0IHsgdXBkYXRlQ2VsbElkcywgdXBkYXRlUm93T3JDb2x1bW5JZHMgfSBmcm9tICcuL3RhYmxlJztcblxuZXhwb3J0IGNvbnN0IGJ1aWxkQ2xpcGJvYXJkRGF0YSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudHM6IFBsYWl0RHJhd0VsZW1lbnRbXSwgc3RhcnRQb2ludDogUG9pbnQpID0+IHtcbiAgICByZXR1cm4gZWxlbWVudHMubWFwKGVsZW1lbnQgPT4ge1xuICAgICAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc1NoYXBlRWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICAgICAgY29uc3QgcG9pbnRzID0gZWxlbWVudC5wb2ludHMubWFwKHBvaW50ID0+IFtwb2ludFswXSAtIHN0YXJ0UG9pbnRbMF0sIHBvaW50WzFdIC0gc3RhcnRQb2ludFsxXV0pO1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uZWxlbWVudCwgcG9pbnRzIH0gYXMgUGxhaXRHZW9tZXRyeTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0Fycm93TGluZShlbGVtZW50KSkge1xuICAgICAgICAgICAgbGV0IHNvdXJjZSA9IHsgLi4uZWxlbWVudC5zb3VyY2UgfTtcbiAgICAgICAgICAgIGxldCB0YXJnZXQgPSB7IC4uLmVsZW1lbnQudGFyZ2V0IH07XG4gICAgICAgICAgICBsZXQgcG9pbnRzID0gWy4uLmVsZW1lbnQucG9pbnRzXTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50LnNvdXJjZS5ib3VuZElkKSB7XG4gICAgICAgICAgICAgICAgcG9pbnRzWzBdID0gZ2V0Q29ubmVjdGlvblBvaW50KGdldEVsZW1lbnRCeUlkPFBsYWl0R2VvbWV0cnk+KGJvYXJkLCBlbGVtZW50LnNvdXJjZS5ib3VuZElkKSEsIGVsZW1lbnQuc291cmNlLmNvbm5lY3Rpb24hKTtcbiAgICAgICAgICAgICAgICBpZiAoIWdldEVsZW1lbnRCeUlkKGJvYXJkLCBlbGVtZW50LnNvdXJjZS5ib3VuZElkLCBlbGVtZW50cykpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNvdXJjZS5ib3VuZElkO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgc291cmNlLmNvbm5lY3Rpb247XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVsZW1lbnQudGFyZ2V0LmJvdW5kSWQpIHtcbiAgICAgICAgICAgICAgICBwb2ludHNbcG9pbnRzLmxlbmd0aCAtIDFdID0gZ2V0Q29ubmVjdGlvblBvaW50KFxuICAgICAgICAgICAgICAgICAgICBnZXRFbGVtZW50QnlJZDxQbGFpdEdlb21ldHJ5Pihib2FyZCwgZWxlbWVudC50YXJnZXQuYm91bmRJZCkhLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnRhcmdldC5jb25uZWN0aW9uIVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaWYgKCFnZXRFbGVtZW50QnlJZChib2FyZCwgZWxlbWVudC50YXJnZXQuYm91bmRJZCwgZWxlbWVudHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0YXJnZXQuYm91bmRJZDtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHRhcmdldC5jb25uZWN0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBvaW50cyA9IHBvaW50cy5tYXAocG9pbnQgPT4gW3BvaW50WzBdIC0gc3RhcnRQb2ludFswXSwgcG9pbnRbMV0gLSBzdGFydFBvaW50WzFdXSk7XG4gICAgICAgICAgICByZXR1cm4geyAuLi5lbGVtZW50LCBwb2ludHMsIHNvdXJjZSwgdGFyZ2V0IH0gYXMgUGxhaXRBcnJvd0xpbmU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaW5zZXJ0Q2xpcGJvYXJkRGF0YSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudHM6IFBsYWl0RHJhd0VsZW1lbnRbXSwgc3RhcnRQb2ludDogUG9pbnQpID0+IHtcbiAgICBjb25zdCBpZHNNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgICBlbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBpZHNNYXBbZWxlbWVudC5pZF0gPSBpZENyZWF0b3IoKTtcbiAgICB9KTtcbiAgICBlbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBlbGVtZW50LmlkID0gaWRzTWFwW2VsZW1lbnQuaWRdO1xuICAgICAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0Fycm93TGluZShlbGVtZW50KSkge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQuc291cmNlLmJvdW5kSWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBib3VuZEVsZW1lbnQgPSBlbGVtZW50cy5maW5kKGl0ZW0gPT4gW2VsZW1lbnQuc291cmNlLmJvdW5kSWQsIGlkc01hcFtlbGVtZW50LnNvdXJjZS5ib3VuZElkIV1dLmluY2x1ZGVzKGl0ZW0uaWQpKTtcbiAgICAgICAgICAgICAgICBpZiAoYm91bmRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc291cmNlLmJvdW5kSWQgPSBpZHNNYXBbZWxlbWVudC5zb3VyY2UuYm91bmRJZF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVsZW1lbnQudGFyZ2V0LmJvdW5kSWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBib3VuZEVsZW1lbnQgPSBlbGVtZW50cy5maW5kKGl0ZW0gPT4gW2VsZW1lbnQudGFyZ2V0LmJvdW5kSWQsIGlkc01hcFtlbGVtZW50LnRhcmdldC5ib3VuZElkIV1dLmluY2x1ZGVzKGl0ZW0uaWQpKTtcbiAgICAgICAgICAgICAgICBpZiAoYm91bmRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudGFyZ2V0LmJvdW5kSWQgPSBpZHNNYXBbZWxlbWVudC50YXJnZXQuYm91bmRJZF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzRWxlbWVudEJ5VGFibGUoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHVwZGF0ZVJvd09yQ29sdW1uSWRzKGVsZW1lbnQgYXMgUGxhaXRUYWJsZSwgJ3JvdycpO1xuICAgICAgICAgICAgdXBkYXRlUm93T3JDb2x1bW5JZHMoZWxlbWVudCBhcyBQbGFpdFRhYmxlLCAnY29sdW1uJyk7XG4gICAgICAgICAgICB1cGRhdGVDZWxsSWRzKGVsZW1lbnQuY2VsbHMpO1xuICAgICAgICB9XG4gICAgICAgIGVsZW1lbnQucG9pbnRzID0gZWxlbWVudC5wb2ludHMubWFwKHBvaW50ID0+IFtzdGFydFBvaW50WzBdICsgcG9pbnRbMF0sIHN0YXJ0UG9pbnRbMV0gKyBwb2ludFsxXV0pIGFzIFtQb2ludCwgUG9pbnRdO1xuICAgICAgICBUcmFuc2Zvcm1zLmluc2VydE5vZGUoYm9hcmQsIGVsZW1lbnQsIFtib2FyZC5jaGlsZHJlbi5sZW5ndGhdKTtcbiAgICB9KTtcbiAgICBUcmFuc2Zvcm1zLmFkZFNlbGVjdGlvbldpdGhUZW1wb3JhcnlFbGVtZW50cyhib2FyZCwgZWxlbWVudHMpO1xufTtcbiJdfQ==
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcGJvYXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvdXRpbHMvY2xpcGJvYXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBK0MsY0FBYyxFQUFhLE1BQU0sYUFBYSxDQUFDO0FBQ3JHLE9BQU8sRUFBRSxrQkFBa0IsSUFBSSxtQkFBbUIsRUFBRSxtQkFBbUIsSUFBSSxvQkFBb0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2SCxPQUFPLEVBQWtCLGdCQUFnQixFQUFpQixNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUVwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRTlELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBaUIsRUFBRSxRQUE0QixFQUFFLFVBQWlCLEVBQUUsRUFBRTtJQUNyRyxPQUFPLG1CQUFtQixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsT0FBcUIsRUFBRSxFQUFFO1FBQzlFLElBQUksZ0JBQWdCLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDeEMsSUFBSSxNQUFNLEdBQUcsRUFBRSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQyxJQUFJLE1BQU0sR0FBRyxFQUFFLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25DLElBQUksTUFBTSxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDakMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUN6QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsa0JBQWtCLENBQUMsY0FBYyxDQUFnQixLQUFLLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FB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T0FBTyxDQUFDLENBQUM7Z0JBQzVELENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQUksZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUM3QyxvQkFBb0IsQ0FBQyxPQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ25ELG9CQUFvQixDQUFDLE9BQXFCLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDdEQsYUFBYSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBQbGFpdEVsZW1lbnQsIFBvaW50LCBUcmFuc2Zvcm1zLCBnZXRFbGVtZW50QnlJZCwgaWRDcmVhdG9yIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgYnVpbGRDbGlwYm9hcmREYXRhIGFzIGJhc2ljQnVpbGRDbGlwYm9hcmQsIGluc2VydENsaXBib2FyZERhdGEgYXMgYmFzaWNJbnNlcnRDbGlwYm9hcmQgfSBmcm9tICdAcGxhaXQvY29tbW9uJztcbmltcG9ydCB7IFBsYWl0QXJyb3dMaW5lLCBQbGFpdERyYXdFbGVtZW50LCBQbGFpdEdlb21ldHJ5IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBnZXRDb25uZWN0aW9uUG9pbnQgfSBmcm9tICcuL2Fycm93LWxpbmUvYXJyb3ctbGluZS1jb21tb24nO1xuaW1wb3J0IHsgUGxhaXRUYWJsZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdGFibGUnO1xuaW1wb3J0IHsgdXBkYXRlQ2VsbElkcywgdXBkYXRlUm93T3JDb2x1bW5JZHMgfSBmcm9tICcuL3RhYmxlJztcblxuZXhwb3J0IGNvbnN0IGJ1aWxkQ2xpcGJvYXJkRGF0YSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudHM6IFBsYWl0RHJhd0VsZW1lbnRbXSwgc3RhcnRQb2ludDogUG9pbnQpID0+IHtcbiAgICByZXR1cm4gYmFzaWNCdWlsZENsaXBib2FyZChib2FyZCwgZWxlbWVudHMsIHN0YXJ0UG9pbnQsIChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNBcnJvd0xpbmUoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIGxldCBzb3VyY2UgPSB7IC4uLmVsZW1lbnQuc291cmNlIH07XG4gICAgICAgICAgICBsZXQgdGFyZ2V0ID0geyAuLi5lbGVtZW50LnRhcmdldCB9O1xuICAgICAgICAgICAgbGV0IHBvaW50cyA9IFsuLi5lbGVtZW50LnBvaW50c107XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5zb3VyY2UuYm91bmRJZCkge1xuICAgICAgICAgICAgICAgIHBvaW50c1swXSA9IGdldENvbm5lY3Rpb25Qb2ludChnZXRFbGVtZW50QnlJZDxQbGFpdEdlb21ldHJ5Pihib2FyZCwgZWxlbWVudC5zb3VyY2UuYm91bmRJZCkhLCBlbGVtZW50LnNvdXJjZS5jb25uZWN0aW9uISk7XG4gICAgICAgICAgICAgICAgaWYgKCFnZXRFbGVtZW50QnlJZChib2FyZCwgZWxlbWVudC5zb3VyY2UuYm91bmRJZCwgZWxlbWVudHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBzb3VyY2UuYm91bmRJZDtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNvdXJjZS5jb25uZWN0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbGVtZW50LnRhcmdldC5ib3VuZElkKSB7XG4gICAgICAgICAgICAgICAgcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXSA9IGdldENvbm5lY3Rpb25Qb2ludChcbiAgICAgICAgICAgICAgICAgICAgZ2V0RWxlbWVudEJ5SWQ8UGxhaXRHZW9tZXRyeT4oYm9hcmQsIGVsZW1lbnQudGFyZ2V0LmJvdW5kSWQpISxcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50YXJnZXQuY29ubmVjdGlvbiFcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmICghZ2V0RWxlbWVudEJ5SWQoYm9hcmQsIGVsZW1lbnQudGFyZ2V0LmJvdW5kSWQsIGVsZW1lbnRzKSkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgdGFyZ2V0LmJvdW5kSWQ7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSB0YXJnZXQuY29ubmVjdGlvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwb2ludHMgPSBwb2ludHMubWFwKHBvaW50ID0+IFtwb2ludFswXSAtIHN0YXJ0UG9pbnRbMF0sIHBvaW50WzFdIC0gc3RhcnRQb2ludFsxXV0pO1xuICAgICAgICAgICAgcmV0dXJuIHsgLi4uZWxlbWVudCwgcG9pbnRzLCBzb3VyY2UsIHRhcmdldCB9IGFzIFBsYWl0QXJyb3dMaW5lO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaW5zZXJ0Q2xpcGJvYXJkRGF0YSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudHM6IFBsYWl0RHJhd0VsZW1lbnRbXSwgc3RhcnRQb2ludDogUG9pbnQpID0+IHtcbiAgICBiYXNpY0luc2VydENsaXBib2FyZChib2FyZCwgZWxlbWVudHMsIHN0YXJ0UG9pbnQsIChlbGVtZW50OiBQbGFpdEVsZW1lbnQsIGlkc01hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPikgPT4ge1xuICAgICAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0Fycm93TGluZShlbGVtZW50KSkge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQuc291cmNlLmJvdW5kSWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBib3VuZEVsZW1lbnQgPSBlbGVtZW50cy5maW5kKGl0ZW0gPT4gW2VsZW1lbnQuc291cmNlLmJvdW5kSWQsIGlkc01hcFtlbGVtZW50LnNvdXJjZS5ib3VuZElkIV1dLmluY2x1ZGVzKGl0ZW0uaWQpKTtcbiAgICAgICAgICAgICAgICBpZiAoYm91bmRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuc291cmNlLmJvdW5kSWQgPSBpZHNNYXBbZWxlbWVudC5zb3VyY2UuYm91bmRJZF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVsZW1lbnQudGFyZ2V0LmJvdW5kSWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBib3VuZEVsZW1lbnQgPSBlbGVtZW50cy5maW5kKGl0ZW0gPT4gW2VsZW1lbnQudGFyZ2V0LmJvdW5kSWQsIGlkc01hcFtlbGVtZW50LnRhcmdldC5ib3VuZElkIV1dLmluY2x1ZGVzKGl0ZW0uaWQpKTtcbiAgICAgICAgICAgICAgICBpZiAoYm91bmRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudGFyZ2V0LmJvdW5kSWQgPSBpZHNNYXBbZWxlbWVudC50YXJnZXQuYm91bmRJZF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzRWxlbWVudEJ5VGFibGUoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHVwZGF0ZVJvd09yQ29sdW1uSWRzKGVsZW1lbnQgYXMgUGxhaXRUYWJsZSwgJ3JvdycpO1xuICAgICAgICAgICAgdXBkYXRlUm93T3JDb2x1bW5JZHMoZWxlbWVudCBhcyBQbGFpdFRhYmxlLCAnY29sdW1uJyk7XG4gICAgICAgICAgICB1cGRhdGVDZWxsSWRzKGVsZW1lbnQuY2VsbHMpO1xuICAgICAgICB9XG4gICAgfSk7XG59O1xuIl19
@@ -1,6 +1,6 @@
1
1
  import { ACTIVE_STROKE_WIDTH, addSelectedElement, BoardTransforms, clearSelectedElement, createG, depthFirstRecursion, drawCircle, getIsRecursionFunc, PlaitBoard, PlaitPointerType, RectangleClient, rotateAntiPointsByElement, SELECTION_BORDER_COLOR, SELECTION_FILL_COLOR, SNAPPING_STROKE_WIDTH, Transforms } from '@plait/core';
2
2
  import { DefaultDrawStyle, LINE_HIT_GEOMETRY_BUFFER, LINE_SNAPPING_BUFFER, ShapeDefaultSpace } from '../constants';
3
- import { MultipleTextGeometryCommonTextKeys, PlaitDrawElement } from '../interfaces';
3
+ import { GeometryCommonTextKeys, PlaitDrawElement } from '../interfaces';
4
4
  import { Alignment, getTextEditorsByElement } from '@plait/common';
5
5
  import { isCellIncludeText } from './table';
6
6
  import { getEngine } from '../engines';
@@ -10,7 +10,6 @@ import { isHitEdgeOfShape, isInsideOfShape } from './hit';
10
10
  import { getHitConnectorPoint } from './arrow-line';
11
11
  import { getNearestPoint, isGeometryClosed, isGeometryIncludeText, isSingleTextGeometry } from './geometry';
12
12
  import { isMultipleTextGeometry } from './multi-text-geometry';
13
- import { isClosedVectorLine } from '.';
14
13
  export const getTextRectangle = (element) => {
15
14
  const elementRectangle = RectangleClient.getRectangleByPoints(element.points);
16
15
  const strokeWidth = getStrokeWidthByElement(element);
@@ -66,13 +65,16 @@ export const isDrawElementClosed = (element) => {
66
65
  return false;
67
66
  }
68
67
  if (PlaitDrawElement.isVectorLine(element)) {
69
- return isClosedVectorLine(element);
68
+ return isClosedPoints(element.points);
70
69
  }
71
70
  if (PlaitDrawElement.isGeometry(element)) {
72
71
  return isGeometryClosed(element);
73
72
  }
74
73
  return true;
75
74
  };
75
+ export const isCustomGeometryClosed = (board, value) => {
76
+ return PlaitDrawElement.isCustomGeometryElement(board, value) && isClosedPoints(value.points);
77
+ };
76
78
  export const getSnappingShape = (board, point) => {
77
79
  let hitElement = getHitShape(board, point);
78
80
  if (hitElement) {
@@ -147,16 +149,16 @@ export const drawBoundReaction = (board, element, roughOptions = { hasMask: true
147
149
  return g;
148
150
  };
149
151
  export const getTextKey = (element, text) => {
150
- if (isMultipleTextGeometry(element)) {
151
- return `${element.id}-${text.key}`;
152
+ if (element && isMultipleTextGeometry(element)) {
153
+ return `${element.id}-${text.id}`;
152
154
  }
153
155
  else {
154
- return text.key;
156
+ return text.id;
155
157
  }
156
158
  };
157
159
  export const getGeometryAlign = (board, element) => {
158
160
  if (isMultipleTextGeometry(element)) {
159
- const drawShapeText = element.texts.find(item => item.key.includes(MultipleTextGeometryCommonTextKeys.content));
161
+ const drawShapeText = element.texts.find(item => item.id.includes(GeometryCommonTextKeys.content));
160
162
  return drawShapeText?.text.align || Alignment.center;
161
163
  }
162
164
  if (isSingleTextGeometry(element)) {
@@ -168,4 +170,9 @@ export const getGeometryAlign = (board, element) => {
168
170
  }
169
171
  return Alignment.center;
170
172
  };
171
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvdXRpbHMvY29tbW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxtQkFBbUIsRUFDbkIsa0JBQWtCLEVBRWxCLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsT0FBTyxFQUNQLG1CQUFtQixFQUNuQixVQUFVLEVBQ1Ysa0JBQWtCLEVBQ2xCLFVBQVUsRUFFVixnQkFBZ0IsRUFFaEIsZUFBZSxFQUNmLHlCQUF5QixFQUN6QixzQkFBc0IsRUFDdEIsb0JBQW9CLEVBQ3BCLHFCQUFxQixFQUNyQixVQUFVLEVBQ2IsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHdCQUF3QixFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ILE9BQU8sRUFHSCxrQ0FBa0MsRUFHbEMsZ0JBQWdCLEVBSW5CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUcxQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMxRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM1RyxPQUFPLEVBQUUsc0JB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SSxTQUFTLENBQUMsTUFBTSxDQUFDO0lBQ3RFLENBQUM7SUFFRCxJQUFJLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDN0MsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUQsT0FBTyxhQUFhLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDO0lBQzFELENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUM7QUFDNUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBQ1RJVkVfU1RST0tFX1dJRFRILFxuICAgIGFkZFNlbGVjdGVkRWxlbWVudCxcbiAgICBBbmNlc3RvcixcbiAgICBCb2FyZFRyYW5zZm9ybXMsXG4gICAgY2xlYXJTZWxlY3RlZEVsZW1lbnQsXG4gICAgY3JlYXRlRyxcbiAgICBkZXB0aEZpcnN0UmVjdXJzaW9uLFxuICAgIGRyYXdDaXJjbGUsXG4gICAgZ2V0SXNSZWN1cnNpb25GdW5jLFxuICAgIFBsYWl0Qm9hcmQsXG4gICAgUGxhaXRFbGVtZW50LFxuICAgIFBsYWl0UG9pbnRlclR5cGUsXG4gICAgUG9pbnQsXG4gICAgUmVjdGFuZ2xlQ2xpZW50LFxuICAgIHJvdGF0ZUFudGlQb2ludHNCeUVsZW1lbnQsXG4gICAgU0VMRUNUSU9OX0JPUkRFUl9DT0xPUixcbiAgICBTRUxFQ1RJT05fRklMTF9DT0xPUixcbiAgICBTTkFQUElOR19TVFJPS0VfV0lEVEgsXG4gICAgVHJhbnNmb3Jtc1xufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBEZWZhdWx0RHJhd1N0eWxlLCBMSU5FX0hJVF9HRU9NRVRSWV9CVUZGRVIsIExJTkVfU05BUFBJTkdfQlVGRkVSLCBTaGFwZURlZmF1bHRTcGFjZSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICAgIERyYXdTaGFwZXMsXG4gICAgRW5naW5lRXh0cmFEYXRhLFxuICAgIE11bHRpcGxlVGV4dEdlb21ldHJ5Q29tbW9uVGV4dEtleXMsXG4gICAgUGxhaXRCYXNlR2VvbWV0cnksXG4gICAgUGxhaXRDb21tb25HZW9tZXRyeSxcbiAgICBQbGFpdERyYXdFbGVtZW50LFxuICAgIFBsYWl0R2VvbWV0cnksXG4gICAgUGxhaXRNdWx0aXBsZVRleHRHZW9tZXRyeSxcbiAgICBQbGFpdFNoYXBlRWxlbWVudFxufSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEFsaWdubWVudCwgZ2V0VGV4dEVkaXRvcnNCeUVsZW1lbnQgfSBmcm9tICdAcGxhaXQvY29tbW9uJztcbmltcG9ydCB7IGlzQ2VsbEluY2x1ZGVUZXh0IH0gZnJvbSAnLi90YWJsZSc7XG5pbXBvcnQgeyBnZXRFbmdpbmUgfSBmcm9tICcuLi9lbmdpbmVzJztcbmltcG9ydCB7IGdldEVsZW1lbnRTaGFwZSB9IGZyb20gJy4vc2hhcGUnO1xuaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJ3JvdWdoanMvYmluL2NvcmUnO1xuaW1wb3J0IHsgUGxhaXRCYXNlVGFibGUgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3RhYmxlJztcbmltcG9ydCB7IG1lbW9yaXplTGF0ZXN0U2hhcGUgfSBmcm9tICcuL21lbW9yaXplJztcbmltcG9ydCB7IGlzSGl0RWRnZU9mU2hhcGUsIGlzSW5zaWRlT2ZTaGFwZSB9IGZyb20gJy4vaGl0JztcbmltcG9ydCB7IGdldEhpdENvbm5lY3RvclBvaW50IH0gZnJvbSAnLi9hcnJvdy1saW5lJztcbmltcG9ydCB7IGdldE5lYXJlc3RQb2ludCwgaXNHZW9tZXRyeUNsb3NlZCwgaXNHZW9tZXRyeUluY2x1ZGVUZXh0LCBpc1NpbmdsZVRleHRHZW9tZXRyeSB9IGZyb20gJy4vZ2VvbWV0cnknO1xuaW1wb3J0IHsgaXNNdWx0aXBsZVRleHRHZW9tZXRyeSB9IGZyb20gJy4vbXVsdGktdGV4dC1nZW9tZXRyeSc7XG5pbXBvcnQgeyBQbGFpdERyYXdTaGFwZVRleHQgfSBmcm9tICcuLi9nZW5lcmF0b3JzL3RleHQuZ2VuZXJhdG9yJztcbmltcG9ydCB7IGlzQ2xvc2VkVmVjdG9yTGluZSB9IGZyb20gJy4nO1xuXG5leHBvcnQgY29uc3QgZ2V0VGV4dFJlY3RhbmdsZSA9IDxUIGV4dGVuZHMgUGxhaXRFbGVtZW50ID0gUGxhaXRHZW9tZXRyeT4oZWxlbWVudDogVCkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnRSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZWxlbWVudC5wb2ludHMhKTtcbiAgICBjb25zdCBzdHJva2VXaWR0aCA9IGdldFN0cm9rZVdpZHRoQnlFbGVtZW50KGVsZW1lbnQpO1xuICAgIGNvbnN0IGhlaWdodCA9IGVsZW1lbnQudGV4dEhlaWdodCE7XG4gICAgY29uc3Qgd2lkdGggPSBlbGVtZW50UmVjdGFuZ2xlLndpZHRoIC0gU2hhcGVEZWZhdWx0U3BhY2UucmVjdGFuZ2xlQW5kVGV4dCAqIDIgLSBzdHJva2VXaWR0aCAqIDI7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICB3aWR0aDogd2lkdGggPiAwID8gd2lkdGggOiAwLFxuICAgICAgICB4OiBlbGVtZW50UmVjdGFuZ2xlLnggKyBTaGFwZURlZmF1bHRTcGFjZS5yZWN0YW5nbGVBbmRUZXh0ICsgc3Ryb2tlV2lkdGgsXG4gICAgICAgIHk6IGVsZW1lbnRSZWN0YW5nbGUueSArIChlbGVtZW50UmVjdGFuZ2xlLmhlaWdodCAtIGhlaWdodCkgLyAyXG4gICAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudCA9IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc1RleHQoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGNvbnN0IHN0cm9rZVdpZHRoID0gZWxlbWVudC5zdHJva2VXaWR0aCB8fCBEZWZhdWx0RHJhd1N0eWxlLnN0cm9rZVdpZHRoO1xuICAgIHJldHVybiBzdHJva2VXaWR0aDtcbn07XG5cbmV4cG9ydCBjb25zdCBpbnNlcnRFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEJhc2VHZW9tZXRyeSB8IFBsYWl0QmFzZVRhYmxlKSA9PiB7XG4gICAgbWVtb3JpemVMYXRlc3RTaGFwZShib2FyZCwgZWxlbWVudC5zaGFwZSk7XG4gICAgVHJhbnNmb3Jtcy5pbnNlcnROb2RlKGJvYXJkLCBlbGVtZW50LCBbYm9hcmQuY2hpbGRyZW4ubGVuZ3RoXSk7XG4gICAgY2xlYXJTZWxlY3RlZEVsZW1lbnQoYm9hcmQpO1xuICAgIGFkZFNlbGVjdGVkRWxlbWVudChib2FyZCwgZWxlbWVudCk7XG4gICAgQm9hcmRUcmFuc2Zvcm1zLnVwZGF0ZVBvaW50ZXJUeXBlKGJvYXJkLCBQbGFpdFBvaW50ZXJUeXBlLnNlbGVjdGlvbik7XG59O1xuXG5leHBvcnQgY29uc3QgaXNEcmF3RWxlbWVudEluY2x1ZGVUZXh0ID0gKGVsZW1lbnQ6IFBsYWl0RHJhd0VsZW1lbnQpID0+IHtcbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc1RleHQoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzSW1hZ2UoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0dlb21ldHJ5KGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBpc0dlb21ldHJ5SW5jbHVkZVRleHQoZWxlbWVudCk7XG4gICAgfVxuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzQXJyb3dMaW5lKGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IGVkaXRvcnMgPSBnZXRUZXh0RWRpdG9yc0J5RWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGVkaXRvcnMubGVuZ3RoID4gMDtcbiAgICB9XG4gICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNFbGVtZW50QnlUYWJsZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5jZWxscy5zb21lKGNlbGwgPT4gaXNDZWxsSW5jbHVkZVRleHQoY2VsbCkpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0RyYXdFbGVtZW50c0luY2x1ZGVUZXh0ID0gKGVsZW1lbnRzOiBQbGFpdERyYXdFbGVtZW50W10pID0+IHtcbiAgICByZXR1cm4gZWxlbWVudHMuc29tZShpdGVtID0+IHtcbiAgICAgICAgcmV0dXJuIGlzRHJhd0VsZW1lbnRJbmNsdWRlVGV4dChpdGVtKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0RyYXdFbGVtZW50Q2xvc2VkID0gKGVsZW1lbnQ6IFBsYWl0RHJhd0VsZW1lbnQpID0+IHtcbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc1RleHQoZWxlbWVudCkgfHwgUGxhaXREcmF3RWxlbWVudC5pc0Fycm93TGluZShlbGVtZW50KSB8fCBQbGFpdERyYXdFbGVtZW50LmlzSW1hZ2UoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzVmVjdG9yTGluZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gaXNDbG9zZWRWZWN0b3JMaW5lKGVsZW1lbnQpO1xuICAgIH1cblxuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnkoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGlzR2VvbWV0cnlDbG9zZWQoZWxlbWVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U25hcHBpbmdTaGFwZSA9IChib2FyZDogUGxhaXRCb2FyZCwgcG9pbnQ6IFBvaW50KTogUGxhaXRTaGFwZUVsZW1lbnQgfCBudWxsID0+IHtcbiAgICBsZXQgaGl0RWxlbWVudDogUGxhaXRTaGFwZUVsZW1lbnQgfCBudWxsID0gZ2V0SGl0U2hhcGUoYm9hcmQsIHBvaW50KTtcbiAgICBpZiAoaGl0RWxlbWVudCkge1xuICAgICAgICBjb25zdCByZWYgPSBnZXRTbmFwcGluZ1JlZihib2FyZCwgaGl0RWxlbWVudCwgcG9pbnQpO1xuICAgICAgICBpZiAocmVmLmlzSGl0Q29ubmVjdG9yIHx8IHJlZi5pc0hpdEVkZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBoaXRFbGVtZW50O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNuYXBwaW5nUmVmID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBoaXRFbGVtZW50OiBQbGFpdFNoYXBlRWxlbWVudCwgcG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgY29uc3Qgcm90YXRlZFBvaW50ID0gcm90YXRlQW50aVBvaW50c0J5RWxlbWVudChwb2ludCwgaGl0RWxlbWVudCkgfHwgcG9pbnQ7XG4gICAgY29uc3QgY29ubmVjdG9yUG9pbnQgPSBnZXRIaXRDb25uZWN0b3JQb2ludChyb3RhdGVkUG9pbnQsIGhpdEVsZW1lbnQpO1xuICAgIGNvbnN0IGVkZ2VQb2ludCA9IGdldE5lYXJlc3RQb2ludChoaXRFbGVtZW50LCByb3RhdGVkUG9pbnQpO1xuICAgIGNvbnN0IGlzSGl0RWRnZSA9IGlzSGl0RWRnZU9mU2hhcGUoYm9hcmQsIGhpdEVsZW1lbnQsIHJvdGF0ZWRQb2ludCwgTElORV9TTkFQUElOR19CVUZGRVIpO1xuICAgIHJldHVybiB7IGlzSGl0RWRnZSwgaXNIaXRDb25uZWN0b3I6ICEhY29ubmVjdG9yUG9pbnQsIGNvbm5lY3RvclBvaW50LCBlZGdlUG9pbnQgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRIaXRTaGFwZSA9IChib2FyZDogUGxhaXRCb2FyZCwgcG9pbnQ6IFBvaW50LCBvZmZzZXQgPSBMSU5FX0hJVF9HRU9NRVRSWV9CVUZGRVIpOiBQbGFpdFNoYXBlRWxlbWVudCB8IG51bGwgPT4ge1xuICAgIGxldCBoaXRTaGFwZTogUGxhaXRTaGFwZUVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgICB0cmF2ZXJzZURyYXdTaGFwZXMoYm9hcmQsIChlbGVtZW50OiBQbGFpdFNoYXBlRWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAoaGl0U2hhcGUgPT09IG51bGwgJiYgaXNJbnNpZGVPZlNoYXBlKGJvYXJkLCBlbGVtZW50LCByb3RhdGVBbnRpUG9pbnRzQnlFbGVtZW50KHBvaW50LCBlbGVtZW50KSB8fCBwb2ludCwgb2Zmc2V0ICogMikpIHtcbiAgICAgICAgICAgIGhpdFNoYXBlID0gZWxlbWVudDtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBoaXRTaGFwZTtcbn07XG5cbmV4cG9ydCBjb25zdCB0cmF2ZXJzZURyYXdTaGFwZXMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGNhbGxiYWNrOiAoZWxlbWVudDogUGxhaXRTaGFwZUVsZW1lbnQpID0+IHZvaWQpID0+IHtcbiAgICBkZXB0aEZpcnN0UmVjdXJzaW9uPEFuY2VzdG9yPihcbiAgICAgICAgYm9hcmQsXG4gICAgICAgIG5vZGUgPT4ge1xuICAgICAgICAgICAgaWYgKCFQbGFpdEJvYXJkLmlzQm9hcmQobm9kZSkgJiYgUGxhaXREcmF3RWxlbWVudC5pc1NoYXBlRWxlbWVudChub2RlKSkge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZXRJc1JlY3Vyc2lvbkZ1bmMoYm9hcmQpLFxuICAgICAgICB0cnVlXG4gICAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkcmF3U2hhcGUgPSAoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgb3V0ZXJSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCxcbiAgICBzaGFwZTogRHJhd1NoYXBlcyxcbiAgICByb3VnaE9wdGlvbnM6IE9wdGlvbnMsXG4gICAgZHJhd09wdGlvbnM6IEVuZ2luZUV4dHJhRGF0YVxuKSA9PiB7XG4gICAgcmV0dXJuIGdldEVuZ2luZShzaGFwZSkuZHJhdyhib2FyZCwgb3V0ZXJSZWN0YW5nbGUsIHJvdWdoT3B0aW9ucywgZHJhd09wdGlvbnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGRyYXdCb3VuZFJlYWN0aW9uID0gKFxuICAgIGJvYXJkOiBQbGFpdEJvYXJkLFxuICAgIGVsZW1lbnQ6IFBsYWl0U2hhcGVFbGVtZW50LFxuICAgIHJvdWdoT3B0aW9uczogeyBoYXNNYXNrOiBib29sZWFuOyBoYXNDb25uZWN0b3I6IGJvb2xlYW4gfSA9IHsgaGFzTWFzazogdHJ1ZSwgaGFzQ29ubmVjdG9yOiB0cnVlIH1cbikgPT4ge1xuICAgIGNvbnN0IGcgPSBjcmVhdGVHKCk7XG4gICAgY29uc3QgcmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGVsZW1lbnQucG9pbnRzKTtcbiAgICBjb25zdCBhY3RpdmVSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuaW5mbGF0ZShyZWN0YW5nbGUsIFNOQVBQSU5HX1NUUk9LRV9XSURUSCk7XG4gICAgY29uc3Qgc2hhcGUgPSBnZXRFbGVtZW50U2hhcGUoZWxlbWVudCk7XG4gICAgbGV0IGRyYXdPcHRpb25zOiBFbmdpbmVFeHRyYURhdGEgPSB7fTtcbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0VsZW1lbnRCeVRhYmxlKGVsZW1lbnQpKSB7XG4gICAgICAgIGRyYXdPcHRpb25zID0geyBlbGVtZW50IH07XG4gICAgfVxuICAgIGNvbnN0IHN0cm9rZUcgPSBkcmF3U2hhcGUoXG4gICAgICAgIGJvYXJkLFxuICAgICAgICBhY3RpdmVSZWN0YW5nbGUsXG4gICAgICAgIHNoYXBlLFxuICAgICAgICB7XG4gICAgICAgICAgICBzdHJva2U6IFNFTEVDVElPTl9CT1JERVJfQ09MT1IsXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogU05BUFBJTkdfU1RST0tFX1dJRFRIXG4gICAgICAgIH0sXG4gICAgICAgIGRyYXdPcHRpb25zXG4gICAgKTtcbiAgICBnLmFwcGVuZENoaWxkKHN0cm9rZUcpO1xuXG4gICAgaWYgKHJvdWdoT3B0aW9ucy5oYXNNYXNrKSB7XG4gICAgICAgIGNvbnN0IG1hc2tHID0gZHJhd1NoYXBlKFxuICAgICAgICAgICAgYm9hcmQsXG4gICAgICAgICAgICBhY3RpdmVSZWN0YW5nbGUsXG4gICAgICAgICAgICBzaGFwZSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdHJva2U6IFNFTEVDVElPTl9CT1JERVJfQ09MT1IsXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDAsXG4gICAgICAgICAgICAgICAgZmlsbDogaXNEcmF3RWxlbWVudENsb3NlZChlbGVtZW50KSA/IFNFTEVDVElPTl9GSUxMX0NPTE9SIDogRGVmYXVsdERyYXdTdHlsZS5maWxsLFxuICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogJ3NvbGlkJ1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGRyYXdPcHRpb25zXG4gICAgICAgICk7XG4gICAgICAgIGcuYXBwZW5kQ2hpbGQobWFza0cpO1xuICAgIH1cbiAgICBpZiAocm91Z2hPcHRpb25zLmhhc0Nvbm5lY3Rvcikge1xuICAgICAgICBjb25zdCBjb25uZWN0b3JQb2ludHMgPSBnZXRFbmdpbmUoc2hhcGUpLmdldENvbm5lY3RvclBvaW50cyhyZWN0YW5nbGUpO1xuICAgICAgICBjb25uZWN0b3JQb2ludHMuZm9yRWFjaChwb2ludCA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaXJjbGVHID0gZHJhd0NpcmNsZShQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKGJvYXJkKSwgcG9pbnQsIDgsIHtcbiAgICAgICAgICAgICAgICBzdHJva2U6IFNFTEVDVElPTl9CT1JERVJfQ09MT1IsXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IEFDVElWRV9TVFJPS0VfV0lEVEgsXG4gICAgICAgICAgICAgICAgZmlsbDogJyNGRkYnLFxuICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogJ3NvbGlkJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBnLmFwcGVuZENoaWxkKGNpcmNsZUcpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGc7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGV4dEtleSA9IDxUIGV4dGVuZHMgUGxhaXRFbGVtZW50ID0gUGxhaXRHZW9tZXRyeT4oZWxlbWVudDogVCwgdGV4dDogUGxhaXREcmF3U2hhcGVUZXh0KSA9PiB7XG4gICAgaWYgKGlzTXVsdGlwbGVUZXh0R2VvbWV0cnkoKGVsZW1lbnQgYXMgdW5rbm93bikgYXMgUGxhaXRDb21tb25HZW9tZXRyeSkpIHtcbiAgICAgICAgcmV0dXJuIGAke2VsZW1lbnQuaWR9LSR7dGV4dC5rZXl9YDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGV4dC5rZXk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEdlb21ldHJ5QWxpZ24gPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0Q29tbW9uR2VvbWV0cnkgfCBQbGFpdEJhc2VUYWJsZSkgPT4ge1xuICAgIGlmIChpc011bHRpcGxlVGV4dEdlb21ldHJ5KGVsZW1lbnQgYXMgUGxhaXRDb21tb25HZW9tZXRyeSkpIHtcbiAgICAgICAgY29uc3QgZHJhd1NoYXBlVGV4dCA9IChlbGVtZW50IGFzIFBsYWl0TXVsdGlwbGVUZXh0R2VvbWV0cnkpLnRleHRzLmZpbmQoaXRlbSA9PlxuICAgICAgICAgICAgaXRlbS5rZXkuaW5jbHVkZXMoTXVsdGlwbGVUZXh0R2VvbWV0cnlDb21tb25UZXh0S2V5cy5jb250ZW50KVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gZHJhd1NoYXBlVGV4dD8udGV4dC5hbGlnbiB8fCBBbGlnbm1lbnQuY2VudGVyO1xuICAgIH1cbiAgICBpZiAoaXNTaW5nbGVUZXh0R2VvbWV0cnkoZWxlbWVudCBhcyBQbGFpdENvbW1vbkdlb21ldHJ5KSkge1xuICAgICAgICByZXR1cm4gKGVsZW1lbnQgYXMgUGxhaXRHZW9tZXRyeSkudGV4dD8uYWxpZ24gfHwgQWxpZ25tZW50LmNlbnRlcjtcbiAgICB9XG5cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0VsZW1lbnRCeVRhYmxlKGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0VGV4dENlbGwgPSBlbGVtZW50LmNlbGxzLmZpbmQoaXRlbSA9PiBpdGVtLnRleHQpO1xuICAgICAgICByZXR1cm4gZmlyc3RUZXh0Q2VsbD8udGV4dD8uYWxpZ24gfHwgQWxpZ25tZW50LmNlbnRlcjtcbiAgICB9XG4gICAgcmV0dXJuIEFsaWdubWVudC5jZW50ZXI7XG59O1xuIl19
173
+ export const isClosedPoints = (points) => {
174
+ const startPoint = points[0];
175
+ const endPoint = points[points.length - 1];
176
+ return startPoint[0] === endPoint[0] && startPoint[1] === endPoint[1];
177
+ };
178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvdXRpbHMvY29tbW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxtQkFBbUIsRUFDbkIsa0JBQWtCLEVBRWxCLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsT0FBTyxFQUNQLG1CQUFtQixFQUNuQixVQUFVLEVBQ1Ysa0JBQWtCLEVBQ2xCLFVBQVUsRUFFVixnQkFBZ0IsRUFFaEIsZUFBZSxFQUNmLHlCQUF5QixFQUN6QixzQkFBc0IsRUFDdEIsb0JBQW9CLEVBQ3BCLHFCQUFxQixFQUNyQixVQUFVLEVBQ2IsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHdCQUF3QixFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ILE9BQU8sRUFHSCxzQkFBc0IsRUFJdEIsZ0JBQWdCLEVBR25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUcxQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMxRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM1RyxPQUFPLEVBQUUsc0JB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QU8sYUFBYSxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksU0FBUyxDQUFDLE1BQU0sQ0FBQztJQUN6RCxDQUFDO0lBQ0QsSUFBSSxvQkFBb0IsQ0FBQyxPQUE4QixDQUFDLEVBQUUsQ0FBQztRQUN2RCxPQUFRLE9BQXlCLENBQUMsSUFBSSxFQUFFLEtBQUssSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDO0lBQ3RFLENBQUM7SUFFRCxJQUFJLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDN0MsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUQsT0FBTyxhQUFhLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDO0lBQzFELENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQyxNQUFNLENBQUM7QUFDNUIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsTUFBZSxFQUFFLEVBQUU7SUFDOUMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzNDLE9BQU8sVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQUNUSVZFX1NUUk9LRV9XSURUSCxcbiAgICBhZGRTZWxlY3RlZEVsZW1lbnQsXG4gICAgQW5jZXN0b3IsXG4gICAgQm9hcmRUcmFuc2Zvcm1zLFxuICAgIGNsZWFyU2VsZWN0ZWRFbGVtZW50LFxuICAgIGNyZWF0ZUcsXG4gICAgZGVwdGhGaXJzdFJlY3Vyc2lvbixcbiAgICBkcmF3Q2lyY2xlLFxuICAgIGdldElzUmVjdXJzaW9uRnVuYyxcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBsYWl0RWxlbWVudCxcbiAgICBQbGFpdFBvaW50ZXJUeXBlLFxuICAgIFBvaW50LFxuICAgIFJlY3RhbmdsZUNsaWVudCxcbiAgICByb3RhdGVBbnRpUG9pbnRzQnlFbGVtZW50LFxuICAgIFNFTEVDVElPTl9CT1JERVJfQ09MT1IsXG4gICAgU0VMRUNUSU9OX0ZJTExfQ09MT1IsXG4gICAgU05BUFBJTkdfU1RST0tFX1dJRFRILFxuICAgIFRyYW5zZm9ybXNcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgRGVmYXVsdERyYXdTdHlsZSwgTElORV9ISVRfR0VPTUVUUllfQlVGRkVSLCBMSU5FX1NOQVBQSU5HX0JVRkZFUiwgU2hhcGVEZWZhdWx0U3BhY2UgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgICBEcmF3U2hhcGVzLFxuICAgIEVuZ2luZUV4dHJhRGF0YSxcbiAgICBHZW9tZXRyeUNvbW1vblRleHRLZXlzLFxuICAgIFBsYWl0QmFzZUdlb21ldHJ5LFxuICAgIFBsYWl0Q29tbW9uR2VvbWV0cnksXG4gICAgUGxhaXRDdXN0b21HZW9tZXRyeSxcbiAgICBQbGFpdERyYXdFbGVtZW50LFxuICAgIFBsYWl0R2VvbWV0cnksXG4gICAgUGxhaXRTaGFwZUVsZW1lbnRcbn0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBbGlnbm1lbnQsIGdldFRleHRFZGl0b3JzQnlFbGVtZW50IH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBpc0NlbGxJbmNsdWRlVGV4dCB9IGZyb20gJy4vdGFibGUnO1xuaW1wb3J0IHsgZ2V0RW5naW5lIH0gZnJvbSAnLi4vZW5naW5lcyc7XG5pbXBvcnQgeyBnZXRFbGVtZW50U2hhcGUgfSBmcm9tICcuL3NoYXBlJztcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICdyb3VnaGpzL2Jpbi9jb3JlJztcbmltcG9ydCB7IFBsYWl0QmFzZVRhYmxlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy90YWJsZSc7XG5pbXBvcnQgeyBtZW1vcml6ZUxhdGVzdFNoYXBlIH0gZnJvbSAnLi9tZW1vcml6ZSc7XG5pbXBvcnQgeyBpc0hpdEVkZ2VPZlNoYXBlLCBpc0luc2lkZU9mU2hhcGUgfSBmcm9tICcuL2hpdCc7XG5pbXBvcnQgeyBnZXRIaXRDb25uZWN0b3JQb2ludCB9IGZyb20gJy4vYXJyb3ctbGluZSc7XG5pbXBvcnQgeyBnZXROZWFyZXN0UG9pbnQsIGlzR2VvbWV0cnlDbG9zZWQsIGlzR2VvbWV0cnlJbmNsdWRlVGV4dCwgaXNTaW5nbGVUZXh0R2VvbWV0cnkgfSBmcm9tICcuL2dlb21ldHJ5JztcbmltcG9ydCB7IGlzTXVsdGlwbGVUZXh0R2VvbWV0cnkgfSBmcm9tICcuL211bHRpLXRleHQtZ2VvbWV0cnknO1xuaW1wb3J0IHsgRHJhd1RleHRJbmZvIH0gZnJvbSAnLi4vZ2VuZXJhdG9ycy90ZXh0LmdlbmVyYXRvcic7XG5cbmV4cG9ydCBjb25zdCBnZXRUZXh0UmVjdGFuZ2xlID0gPFQgZXh0ZW5kcyBQbGFpdEVsZW1lbnQgPSBQbGFpdEdlb21ldHJ5PihlbGVtZW50OiBUKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudFJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhlbGVtZW50LnBvaW50cyEpO1xuICAgIGNvbnN0IHN0cm9rZVdpZHRoID0gZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQoZWxlbWVudCk7XG4gICAgY29uc3QgaGVpZ2h0ID0gZWxlbWVudC50ZXh0SGVpZ2h0ITtcbiAgICBjb25zdCB3aWR0aCA9IGVsZW1lbnRSZWN0YW5nbGUud2lkdGggLSBTaGFwZURlZmF1bHRTcGFjZS5yZWN0YW5nbGVBbmRUZXh0ICogMiAtIHN0cm9rZVdpZHRoICogMjtcbiAgICByZXR1cm4ge1xuICAgICAgICBoZWlnaHQsXG4gICAgICAgIHdpZHRoOiB3aWR0aCA+IDAgPyB3aWR0aCA6IDAsXG4gICAgICAgIHg6IGVsZW1lbnRSZWN0YW5nbGUueCArIFNoYXBlRGVmYXVsdFNwYWNlLnJlY3RhbmdsZUFuZFRleHQgKyBzdHJva2VXaWR0aCxcbiAgICAgICAgeTogZWxlbWVudFJlY3RhbmdsZS55ICsgKGVsZW1lbnRSZWN0YW5nbGUuaGVpZ2h0IC0gaGVpZ2h0KSAvIDJcbiAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFN0cm9rZVdpZHRoQnlFbGVtZW50ID0gKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzVGV4dChlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgY29uc3Qgc3Ryb2tlV2lkdGggPSBlbGVtZW50LnN0cm9rZVdpZHRoIHx8IERlZmF1bHREcmF3U3R5bGUuc3Ryb2tlV2lkdGg7XG4gICAgcmV0dXJuIHN0cm9rZVdpZHRoO1xufTtcblxuZXhwb3J0IGNvbnN0IGluc2VydEVsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0QmFzZUdlb21ldHJ5IHwgUGxhaXRCYXNlVGFibGUpID0+IHtcbiAgICBtZW1vcml6ZUxhdGVzdFNoYXBlKGJvYXJkLCBlbGVtZW50LnNoYXBlKTtcbiAgICBUcmFuc2Zvcm1zLmluc2VydE5vZGUoYm9hcmQsIGVsZW1lbnQsIFtib2FyZC5jaGlsZHJlbi5sZW5ndGhdKTtcbiAgICBjbGVhclNlbGVjdGVkRWxlbWVudChib2FyZCk7XG4gICAgYWRkU2VsZWN0ZWRFbGVtZW50KGJvYXJkLCBlbGVtZW50KTtcbiAgICBCb2FyZFRyYW5zZm9ybXMudXBkYXRlUG9pbnRlclR5cGUoYm9hcmQsIFBsYWl0UG9pbnRlclR5cGUuc2VsZWN0aW9uKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0RyYXdFbGVtZW50SW5jbHVkZVRleHQgPSAoZWxlbWVudDogUGxhaXREcmF3RWxlbWVudCkgPT4ge1xuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzVGV4dChlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNJbWFnZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnkoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGlzR2VvbWV0cnlJbmNsdWRlVGV4dChlbGVtZW50KTtcbiAgICB9XG4gICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNBcnJvd0xpbmUoZWxlbWVudCkpIHtcbiAgICAgICAgY29uc3QgZWRpdG9ycyA9IGdldFRleHRFZGl0b3JzQnlFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gZWRpdG9ycy5sZW5ndGggPiAwO1xuICAgIH1cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0VsZW1lbnRCeVRhYmxlKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LmNlbGxzLnNvbWUoY2VsbCA9PiBpc0NlbGxJbmNsdWRlVGV4dChjZWxsKSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzRHJhd0VsZW1lbnRzSW5jbHVkZVRleHQgPSAoZWxlbWVudHM6IFBsYWl0RHJhd0VsZW1lbnRbXSkgPT4ge1xuICAgIHJldHVybiBlbGVtZW50cy5zb21lKGl0ZW0gPT4ge1xuICAgICAgICByZXR1cm4gaXNEcmF3RWxlbWVudEluY2x1ZGVUZXh0KGl0ZW0pO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzRHJhd0VsZW1lbnRDbG9zZWQgPSAoZWxlbWVudDogUGxhaXREcmF3RWxlbWVudCkgPT4ge1xuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzVGV4dChlbGVtZW50KSB8fCBQbGFpdERyYXdFbGVtZW50LmlzQXJyb3dMaW5lKGVsZW1lbnQpIHx8IFBsYWl0RHJhd0VsZW1lbnQuaXNJbWFnZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNWZWN0b3JMaW5lKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBpc0Nsb3NlZFBvaW50cyhlbGVtZW50LnBvaW50cyk7XG4gICAgfVxuXG4gICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNHZW9tZXRyeShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gaXNHZW9tZXRyeUNsb3NlZChlbGVtZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnQgY29uc3QgaXNDdXN0b21HZW9tZXRyeUNsb3NlZCA9IChib2FyZDogUGxhaXRCb2FyZCwgdmFsdWU6IFBsYWl0RWxlbWVudCk6IHZhbHVlIGlzIFBsYWl0Q3VzdG9tR2VvbWV0cnkgPT4ge1xuICAgIHJldHVybiBQbGFpdERyYXdFbGVtZW50LmlzQ3VzdG9tR2VvbWV0cnlFbGVtZW50KGJvYXJkLCB2YWx1ZSkgJiYgaXNDbG9zZWRQb2ludHModmFsdWUucG9pbnRzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTbmFwcGluZ1NoYXBlID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBwb2ludDogUG9pbnQpOiBQbGFpdFNoYXBlRWxlbWVudCB8IG51bGwgPT4ge1xuICAgIGxldCBoaXRFbGVtZW50OiBQbGFpdFNoYXBlRWxlbWVudCB8IG51bGwgPSBnZXRIaXRTaGFwZShib2FyZCwgcG9pbnQpO1xuICAgIGlmIChoaXRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHJlZiA9IGdldFNuYXBwaW5nUmVmKGJvYXJkLCBoaXRFbGVtZW50LCBwb2ludCk7XG4gICAgICAgIGlmIChyZWYuaXNIaXRDb25uZWN0b3IgfHwgcmVmLmlzSGl0RWRnZSkge1xuICAgICAgICAgICAgcmV0dXJuIGhpdEVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U25hcHBpbmdSZWYgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGhpdEVsZW1lbnQ6IFBsYWl0U2hhcGVFbGVtZW50LCBwb2ludDogUG9pbnQpID0+IHtcbiAgICBjb25zdCByb3RhdGVkUG9pbnQgPSByb3RhdGVBbnRpUG9pbnRzQnlFbGVtZW50KHBvaW50LCBoaXRFbGVtZW50KSB8fCBwb2ludDtcbiAgICBjb25zdCBjb25uZWN0b3JQb2ludCA9IGdldEhpdENvbm5lY3RvclBvaW50KHJvdGF0ZWRQb2ludCwgaGl0RWxlbWVudCk7XG4gICAgY29uc3QgZWRnZVBvaW50ID0gZ2V0TmVhcmVzdFBvaW50KGhpdEVsZW1lbnQsIHJvdGF0ZWRQb2ludCk7XG4gICAgY29uc3QgaXNIaXRFZGdlID0gaXNIaXRFZGdlT2ZTaGFwZShib2FyZCwgaGl0RWxlbWVudCwgcm90YXRlZFBvaW50LCBMSU5FX1NOQVBQSU5HX0JVRkZFUik7XG4gICAgcmV0dXJuIHsgaXNIaXRFZGdlLCBpc0hpdENvbm5lY3RvcjogISFjb25uZWN0b3JQb2ludCwgY29ubmVjdG9yUG9pbnQsIGVkZ2VQb2ludCB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEhpdFNoYXBlID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBwb2ludDogUG9pbnQsIG9mZnNldCA9IExJTkVfSElUX0dFT01FVFJZX0JVRkZFUik6IFBsYWl0U2hhcGVFbGVtZW50IHwgbnVsbCA9PiB7XG4gICAgbGV0IGhpdFNoYXBlOiBQbGFpdFNoYXBlRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIHRyYXZlcnNlRHJhd1NoYXBlcyhib2FyZCwgKGVsZW1lbnQ6IFBsYWl0U2hhcGVFbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChoaXRTaGFwZSA9PT0gbnVsbCAmJiBpc0luc2lkZU9mU2hhcGUoYm9hcmQsIGVsZW1lbnQsIHJvdGF0ZUFudGlQb2ludHNCeUVsZW1lbnQocG9pbnQsIGVsZW1lbnQpIHx8IHBvaW50LCBvZmZzZXQgKiAyKSkge1xuICAgICAgICAgICAgaGl0U2hhcGUgPSBlbGVtZW50O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGhpdFNoYXBlO1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYXZlcnNlRHJhd1NoYXBlcyA9IChib2FyZDogUGxhaXRCb2FyZCwgY2FsbGJhY2s6IChlbGVtZW50OiBQbGFpdFNoYXBlRWxlbWVudCkgPT4gdm9pZCkgPT4ge1xuICAgIGRlcHRoRmlyc3RSZWN1cnNpb248QW5jZXN0b3I+KFxuICAgICAgICBib2FyZCxcbiAgICAgICAgbm9kZSA9PiB7XG4gICAgICAgICAgICBpZiAoIVBsYWl0Qm9hcmQuaXNCb2FyZChub2RlKSAmJiBQbGFpdERyYXdFbGVtZW50LmlzU2hhcGVFbGVtZW50KG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdldElzUmVjdXJzaW9uRnVuYyhib2FyZCksXG4gICAgICAgIHRydWVcbiAgICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGRyYXdTaGFwZSA9IChcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBvdXRlclJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LFxuICAgIHNoYXBlOiBEcmF3U2hhcGVzLFxuICAgIHJvdWdoT3B0aW9uczogT3B0aW9ucyxcbiAgICBkcmF3T3B0aW9uczogRW5naW5lRXh0cmFEYXRhXG4pID0+IHtcbiAgICByZXR1cm4gZ2V0RW5naW5lKHNoYXBlKS5kcmF3KGJvYXJkLCBvdXRlclJlY3RhbmdsZSwgcm91Z2hPcHRpb25zLCBkcmF3T3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgZHJhd0JvdW5kUmVhY3Rpb24gPSAoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgZWxlbWVudDogUGxhaXRTaGFwZUVsZW1lbnQsXG4gICAgcm91Z2hPcHRpb25zOiB7IGhhc01hc2s6IGJvb2xlYW47IGhhc0Nvbm5lY3RvcjogYm9vbGVhbiB9ID0geyBoYXNNYXNrOiB0cnVlLCBoYXNDb25uZWN0b3I6IHRydWUgfVxuKSA9PiB7XG4gICAgY29uc3QgZyA9IGNyZWF0ZUcoKTtcbiAgICBjb25zdCByZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZWxlbWVudC5wb2ludHMpO1xuICAgIGNvbnN0IGFjdGl2ZVJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5pbmZsYXRlKHJlY3RhbmdsZSwgU05BUFBJTkdfU1RST0tFX1dJRFRIKTtcbiAgICBjb25zdCBzaGFwZSA9IGdldEVsZW1lbnRTaGFwZShlbGVtZW50KTtcbiAgICBsZXQgZHJhd09wdGlvbnM6IEVuZ2luZUV4dHJhRGF0YSA9IHt9O1xuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzRWxlbWVudEJ5VGFibGUoZWxlbWVudCkpIHtcbiAgICAgICAgZHJhd09wdGlvbnMgPSB7IGVsZW1lbnQgfTtcbiAgICB9XG4gICAgY29uc3Qgc3Ryb2tlRyA9IGRyYXdTaGFwZShcbiAgICAgICAgYm9hcmQsXG4gICAgICAgIGFjdGl2ZVJlY3RhbmdsZSxcbiAgICAgICAgc2hhcGUsXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cm9rZTogU0VMRUNUSU9OX0JPUkRFUl9DT0xPUixcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiBTTkFQUElOR19TVFJPS0VfV0lEVEhcbiAgICAgICAgfSxcbiAgICAgICAgZHJhd09wdGlvbnNcbiAgICApO1xuICAgIGcuYXBwZW5kQ2hpbGQoc3Ryb2tlRyk7XG5cbiAgICBpZiAocm91Z2hPcHRpb25zLmhhc01hc2spIHtcbiAgICAgICAgY29uc3QgbWFza0cgPSBkcmF3U2hhcGUoXG4gICAgICAgICAgICBib2FyZCxcbiAgICAgICAgICAgIGFjdGl2ZVJlY3RhbmdsZSxcbiAgICAgICAgICAgIHNoYXBlLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0cm9rZTogU0VMRUNUSU9OX0JPUkRFUl9DT0xPUixcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMCxcbiAgICAgICAgICAgICAgICBmaWxsOiBpc0RyYXdFbGVtZW50Q2xvc2VkKGVsZW1lbnQpID8gU0VMRUNUSU9OX0ZJTExfQ09MT1IgOiBEZWZhdWx0RHJhd1N0eWxlLmZpbGwsXG4gICAgICAgICAgICAgICAgZmlsbFN0eWxlOiAnc29saWQnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZHJhd09wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgICAgZy5hcHBlbmRDaGlsZChtYXNrRyk7XG4gICAgfVxuICAgIGlmIChyb3VnaE9wdGlvbnMuaGFzQ29ubmVjdG9yKSB7XG4gICAgICAgIGNvbnN0IGNvbm5lY3RvclBvaW50cyA9IGdldEVuZ2luZShzaGFwZSkuZ2V0Q29ubmVjdG9yUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgICAgIGNvbm5lY3RvclBvaW50cy5mb3JFYWNoKHBvaW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNpcmNsZUcgPSBkcmF3Q2lyY2xlKFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcoYm9hcmQpLCBwb2ludCwgOCwge1xuICAgICAgICAgICAgICAgIHN0cm9rZTogU0VMRUNUSU9OX0JPUkRFUl9DT0xPUixcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogQUNUSVZFX1NUUk9LRV9XSURUSCxcbiAgICAgICAgICAgICAgICBmaWxsOiAnI0ZGRicsXG4gICAgICAgICAgICAgICAgZmlsbFN0eWxlOiAnc29saWQnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGcuYXBwZW5kQ2hpbGQoY2lyY2xlRyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUZXh0S2V5ID0gKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCB8IHVuZGVmaW5lZCwgdGV4dDogUGljazxEcmF3VGV4dEluZm8sICdpZCc+KSA9PiB7XG4gICAgaWYgKGVsZW1lbnQgJiYgaXNNdWx0aXBsZVRleHRHZW9tZXRyeShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gYCR7ZWxlbWVudC5pZH0tJHt0ZXh0LmlkfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRleHQuaWQ7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEdlb21ldHJ5QWxpZ24gPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0Q29tbW9uR2VvbWV0cnkgfCBQbGFpdEJhc2VUYWJsZSkgPT4ge1xuICAgIGlmIChpc011bHRpcGxlVGV4dEdlb21ldHJ5KGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IGRyYXdTaGFwZVRleHQgPSBlbGVtZW50LnRleHRzLmZpbmQoaXRlbSA9PiBpdGVtLmlkLmluY2x1ZGVzKEdlb21ldHJ5Q29tbW9uVGV4dEtleXMuY29udGVudCkpO1xuICAgICAgICByZXR1cm4gZHJhd1NoYXBlVGV4dD8udGV4dC5hbGlnbiB8fCBBbGlnbm1lbnQuY2VudGVyO1xuICAgIH1cbiAgICBpZiAoaXNTaW5nbGVUZXh0R2VvbWV0cnkoZWxlbWVudCBhcyBQbGFpdENvbW1vbkdlb21ldHJ5KSkge1xuICAgICAgICByZXR1cm4gKGVsZW1lbnQgYXMgUGxhaXRHZW9tZXRyeSkudGV4dD8uYWxpZ24gfHwgQWxpZ25tZW50LmNlbnRlcjtcbiAgICB9XG5cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0VsZW1lbnRCeVRhYmxlKGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0VGV4dENlbGwgPSBlbGVtZW50LmNlbGxzLmZpbmQoaXRlbSA9PiBpdGVtLnRleHQpO1xuICAgICAgICByZXR1cm4gZmlyc3RUZXh0Q2VsbD8udGV4dD8uYWxpZ24gfHwgQWxpZ25tZW50LmNlbnRlcjtcbiAgICB9XG4gICAgcmV0dXJuIEFsaWdubWVudC5jZW50ZXI7XG59O1xuXG5leHBvcnQgY29uc3QgaXNDbG9zZWRQb2ludHMgPSAocG9pbnRzOiBQb2ludFtdKSA9PiB7XG4gICAgY29uc3Qgc3RhcnRQb2ludCA9IHBvaW50c1swXTtcbiAgICBjb25zdCBlbmRQb2ludCA9IHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIHN0YXJ0UG9pbnRbMF0gPT09IGVuZFBvaW50WzBdICYmIHN0YXJ0UG9pbnRbMV0gPT09IGVuZFBvaW50WzFdO1xufTtcbiJdfQ==
@@ -154,7 +154,7 @@ export const getHitIndexOfAutoCompletePoint = (movingPoint, points) => {
154
154
  export const getDrawDefaultStrokeColor = (theme) => {
155
155
  return DrawThemeColors[theme].strokeColor;
156
156
  };
157
- export const getFlowchartDefaultFill = (theme) => {
157
+ export const getDefaultFill = (theme) => {
158
158
  return DrawThemeColors[theme].fill;
159
159
  };
160
160
  export const getTextShapeProperty = (board, text = DefaultTextProperty.text, fontSize) => {
@@ -214,7 +214,7 @@ export const createDefaultGeometry = (board, points, shape) => {
214
214
  }
215
215
  };
216
216
  export const editText = (board, element, text) => {
217
- const textManage = text ? getTextManage(board, `${element.id}-${text.key}`) : getFirstTextManage(element);
217
+ const textManage = text ? getTextManage(board, element, text) : getFirstTextManage(element);
218
218
  if (textManage) {
219
219
  textManage.edit(() => {
220
220
  // delay to avoid blinking
@@ -243,4 +243,4 @@ export const isSingleTextGeometry = (element) => {
243
243
  export const isGeometryClosed = (element) => {
244
244
  return !GEOMETRY_NOT_CLOSED.includes(element.shape);
245
245
  };
246
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbWV0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy91dGlscy9nZW9tZXRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBUyxlQUFlLEVBQWtCLG1CQUFtQixFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvSCxPQUFPLEVBQWtCLFdBQVcsRUFBaUIsZ0JBQWdCLEVBQWMsTUFBTSx3QkFBd0IsQ0FBQztBQUVsSCxPQUFPLEVBQ0gseUJBQXlCLEVBQ3pCLDRCQUE0QixFQUM1QiwyQkFBMkIsRUFDM0IsbUJBQW1CLEVBQ25CLHFCQUFxQixFQUVyQixlQUFlLEVBQ2YsbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQixpQkFBaUIsRUFDakIsb0JBQW9CLEVBQ3BCLGNBQWMsRUFDakIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUNILGVBQWUsRUFDZixTQUFTLEVBRVQsbUJBQW1CLEVBRW5CLHNCQUFzQixFQUN0QixTQUFTLEVBQ1Qsa0JBQWtCLEVBQ2xCLGNBQWMsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3JELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6RCxPQUFPLEVBQXNCLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pGLE9BQU8sRUFBRSx3Q0FB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RWxlbWVudCwgUG9pbnQsIFJlY3RhbmdsZUNsaWVudCwgVGhlbWVDb2xvck1vZGUsIGdldFNlbGVjdGVkRWxlbWVudHMsIGlkQ3JlYXRvciB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IEdlb21ldHJ5U2hhcGVzLCBCYXNpY1NoYXBlcywgUGxhaXRHZW9tZXRyeSwgRmxvd2NoYXJ0U3ltYm9scywgVU1MU3ltYm9scyB9IGZyb20gJy4uL2ludGVyZmFjZXMvZ2VvbWV0cnknO1xuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7XG4gICAgRGVmYXVsdEJhc2ljU2hhcGVQcm9wZXJ0eSxcbiAgICBEZWZhdWx0QmFzaWNTaGFwZVByb3BlcnR5TWFwLFxuICAgIERlZmF1bHRGbG93Y2hhcnRQcm9wZXJ0eU1hcCxcbiAgICBEZWZhdWx0VGV4dFByb3BlcnR5LFxuICAgIERlZmF1bHRVTUxQcm9wZXJ0eU1hcCxcbiAgICBEcmF3UG9pbnRlclR5cGUsXG4gICAgRHJhd1RoZW1lQ29sb3JzLFxuICAgIEdFT01FVFJZX05PVF9DTE9TRUQsXG4gICAgR0VPTUVUUllfV0lUSE9VVF9URVhULFxuICAgIFNoYXBlRGVmYXVsdFNwYWNlLFxuICAgIGdldEZsb3djaGFydFBvaW50ZXJzLFxuICAgIGdldFVNTFBvaW50ZXJzXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICAgIEFjdGl2ZUdlbmVyYXRvcixcbiAgICBBbGlnbm1lbnQsXG4gICAgQ3VzdG9tVGV4dCxcbiAgICBERUZBVUxUX0ZPTlRfRkFNSUxZLFxuICAgIFBsYWl0Q29tbW9uRWxlbWVudFJlZixcbiAgICBSRVNJWkVfSEFORExFX0RJQU1FVEVSLFxuICAgIGJ1aWxkVGV4dCxcbiAgICBnZXRGaXJzdFRleHRNYW5hZ2UsXG4gICAgbWVhc3VyZUVsZW1lbnRcbn0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBPcHRpb25zIH0gZnJvbSAncm91Z2hqcy9iaW4vY29yZSc7XG5pbXBvcnQgeyBnZXRFbmdpbmUgfSBmcm9tICcuLi9lbmdpbmVzJztcbmltcG9ydCB7IGdldEVsZW1lbnRTaGFwZSB9IGZyb20gJy4vc2hhcGUnO1xuaW1wb3J0IHsgY3JlYXRlQXJyb3dMaW5lRWxlbWVudCB9IGZyb20gJy4vYXJyb3ctbGluZS9hcnJvdy1saW5lLWJhc2ljJztcbmltcG9ydCB7IEFycm93TGluZU1hcmtlclR5cGUsIEFycm93TGluZVNoYXBlLCBQbGFpdERyYXdFbGVtZW50LCBQbGFpdFNoYXBlRWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRGVmYXVsdExpbmVTdHlsZSB9IGZyb20gJy4uL2NvbnN0YW50cy9saW5lJztcbmltcG9ydCB7IGdldE1lbW9yaXplZExhdGVzdEJ5UG9pbnRlciB9IGZyb20gJy4vbWVtb3JpemUnO1xuaW1wb3J0IHsgUGxhaXREcmF3U2hhcGVUZXh0LCBnZXRUZXh0TWFuYWdlIH0gZnJvbSAnLi4vZ2VuZXJhdG9ycy90ZXh0LmdlbmVyYXRvcic7XG5pbXBvcnQgeyBjcmVhdGVVTUxDbGFzc09ySW50ZXJmYWNlR2VvbWV0cnlFbGVtZW50IH0gZnJvbSAnLi91bWwnO1xuaW1wb3J0IHsgY3JlYXRlTXVsdGlwbGVUZXh0R2VvbWV0cnlFbGVtZW50LCBpc011bHRpcGxlVGV4dEdlb21ldHJ5LCBpc011bHRpcGxlVGV4dFNoYXBlIH0gZnJvbSAnLi9tdWx0aS10ZXh0LWdlb21ldHJ5JztcbmltcG9ydCB7IERFRkFVTFRfRk9OVF9TSVpFIH0gZnJvbSAnQHBsYWl0L3RleHQtcGx1Z2lucyc7XG5cbmV4cG9ydCB0eXBlIEdlb21ldHJ5U3R5bGVPcHRpb25zID0gUGljazxQbGFpdEdlb21ldHJ5LCAnZmlsbCcgfCAnc3Ryb2tlQ29sb3InIHwgJ3N0cm9rZVdpZHRoJz47XG5cbmV4cG9ydCB0eXBlIFRleHRQcm9wZXJ0aWVzID0gUGFydGlhbDxDdXN0b21UZXh0PiAmIHsgYWxpZ24/OiBBbGlnbm1lbnQ7IHRleHRIZWlnaHQ/OiBudW1iZXIgfTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUdlb21ldHJ5RWxlbWVudCA9IChcbiAgICBzaGFwZTogR2VvbWV0cnlTaGFwZXMsXG4gICAgcG9pbnRzOiBbUG9pbnQsIFBvaW50XSxcbiAgICB0ZXh0OiBzdHJpbmcgfCBFbGVtZW50LFxuICAgIG9wdGlvbnM6IEdlb21ldHJ5U3R5bGVPcHRpb25zID0ge30sXG4gICAgdGV4dFByb3BlcnRpZXM6IFRleHRQcm9wZXJ0aWVzID0ge31cbik6IFBsYWl0R2VvbWV0cnkgPT4ge1xuICAgIGlmIChHRU9NRVRSWV9XSVRIT1VUX1RFWFQuaW5jbHVkZXMoc2hhcGUpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVHZW9tZXRyeUVsZW1lbnRXaXRob3V0VGV4dChzaGFwZSwgcG9pbnRzLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY3JlYXRlR2VvbWV0cnlFbGVtZW50V2l0aFRleHQoc2hhcGUsIHBvaW50cywgdGV4dCwgb3B0aW9ucywgdGV4dFByb3BlcnRpZXMpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVHZW9tZXRyeUVsZW1lbnRXaXRoVGV4dCA9IChcbiAgICBzaGFwZTogR2VvbWV0cnlTaGFwZXMsXG4gICAgcG9pbnRzOiBbUG9pbnQsIFBvaW50XSxcbiAgICB0ZXh0OiBzdHJpbmcgfCBFbGVtZW50LFxuICAgIG9wdGlvbnM6IEdlb21ldHJ5U3R5bGVPcHRpb25zID0ge30sXG4gICAgdGV4dFByb3BlcnRpZXM6IFRleHRQcm9wZXJ0aWVzID0ge31cbik6IFBsYWl0R2VvbWV0cnkgPT4ge1xuICAgIGxldCB0ZXh0T3B0aW9ucyA9IHt9O1xuICAgIGxldCBhbGlnbm1lbnQ6IHVuZGVmaW5lZCB8IEFsaWdubWVudCA9IEFsaWdubWVudC5jZW50ZXI7XG4gICAgbGV0IHRleHRIZWlnaHQgPSBEZWZhdWx0VGV4dFByb3BlcnR5LmhlaWdodDtcbiAgICBpZiAoc2hhcGUgPT09IEJhc2ljU2hhcGVzLnRleHQpIHtcbiAgICAgICAgdGV4dE9wdGlvbnMgPSB7IGF1dG9TaXplOiB0cnVlIH07XG4gICAgICAgIGFsaWdubWVudCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGV4dFByb3BlcnRpZXMgPSB7IC4uLnRleHRQcm9wZXJ0aWVzIH07XG4gICAgdGV4dFByb3BlcnRpZXM/LmFsaWduICYmIChhbGlnbm1lbnQgPSB0ZXh0UHJvcGVydGllcz8uYWxpZ24pO1xuICAgIHRleHRQcm9wZXJ0aWVzPy50ZXh0SGVpZ2h0ICYmICh0ZXh0SGVpZ2h0ID0gdGV4dFByb3BlcnRpZXM/LnRleHRIZWlnaHQpO1xuICAgIGRlbGV0ZSB0ZXh0UHJvcGVydGllcz8uYWxpZ247XG4gICAgZGVsZXRlIHRleHRQcm9wZXJ0aWVzPy50ZXh0SGVpZ2h0O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGlkQ3JlYXRvcigpLFxuICAgICAgICB0eXBlOiAnZ2VvbWV0cnknLFxuICAgICAgICBzaGFwZSxcbiAgICAgICAgYW5nbGU6IDAsXG4gICAgICAgIG9wYWNpdHk6IDEsXG4gICAgICAgIHRleHRIZWlnaHQsXG4gICAgICAgIHRleHQ6IGJ1aWxkVGV4dCh0ZXh0LCBhbGlnbm1lbnQsIHRleHRQcm9wZXJ0aWVzKSxcbiAgICAgICAgcG9pbnRzLFxuICAgICAgICAuLi50ZXh0T3B0aW9ucyxcbiAgICAgICAgLi4ub3B0aW9uc1xuICAgIH07XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlR2VvbWV0cnlFbGVtZW50V2l0aG91dFRleHQgPSAoXG4gICAgc2hhcGU6IEdlb21ldHJ5U2hhcGVzLFxuICAgIHBvaW50czogW1BvaW50LCBQb2ludF0sXG4gICAgb3B0aW9uczogR2VvbWV0cnlTdHlsZU9wdGlvbnMgPSB7fVxuKTogUGxhaXRHZW9tZXRyeSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGlkQ3JlYXRvcigpLFxuICAgICAgICB0eXBlOiAnZ2VvbWV0cnknLFxuICAgICAgICBzaGFwZSxcbiAgICAgICAgYW5nbGU6IDAsXG4gICAgICAgIG9wYWNpdHk6IDEsXG4gICAgICAgIHBvaW50cyxcbiAgICAgICAgLi4ub3B0aW9uc1xuICAgIH07XG59O1xuXG5leHBvcnQgY29uc3QgZHJhd0dlb21ldHJ5ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBvdXRlclJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBzaGFwZTogR2VvbWV0cnlTaGFwZXMsIHJvdWdoT3B0aW9uczogT3B0aW9ucykgPT4ge1xuICAgIHJldHVybiBnZXRFbmdpbmUoc2hhcGUpLmRyYXcoYm9hcmQsIG91dGVyUmVjdGFuZ2xlLCByb3VnaE9wdGlvbnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5lYXJlc3RQb2ludCA9IChlbGVtZW50OiBQbGFpdFNoYXBlRWxlbWVudCwgcG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgY29uc3QgcmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGVsZW1lbnQucG9pbnRzKTtcbiAgICBjb25zdCBzaGFwZSA9IGdldEVsZW1lbnRTaGFwZShlbGVtZW50KTtcbiAgICByZXR1cm4gZ2V0RW5naW5lKHNoYXBlKS5nZXROZWFyZXN0UG9pbnQocmVjdGFuZ2xlLCBwb2ludCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q2VudGVyUG9pbnRzT25Qb2x5Z29uID0gKHBvaW50czogUG9pbnRbXSkgPT4ge1xuICAgIGNvbnN0IGNlbnRlclBvaW50OiBQb2ludFtdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IGogPSBpID09IHBvaW50cy5sZW5ndGggLSAxID8gMCA6IGkgKyAxO1xuICAgICAgICBjZW50ZXJQb2ludC5wdXNoKFsocG9pbnRzW2ldWzBdICsgcG9pbnRzW2pdWzBdKSAvIDIsIChwb2ludHNbaV1bMV0gKyBwb2ludHNbal1bMV0pIC8gMl0pO1xuICAgIH1cbiAgICByZXR1cm4gY2VudGVyUG9pbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGVmYXVsdEZsb3djaGFydFByb3BlcnR5ID0gKHN5bWJvbDogRmxvd2NoYXJ0U3ltYm9scykgPT4ge1xuICAgIHJldHVybiBEZWZhdWx0Rmxvd2NoYXJ0UHJvcGVydHlNYXBbc3ltYm9sXTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREZWZhdWx0QmFzaWNTaGFwZVByb3BlcnR5ID0gKHNoYXBlOiBCYXNpY1NoYXBlcykgPT4ge1xuICAgIHJldHVybiBEZWZhdWx0QmFzaWNTaGFwZVByb3BlcnR5TWFwW3NoYXBlXSB8fCBEZWZhdWx0QmFzaWNTaGFwZVByb3BlcnR5O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERlZmF1bHRVTUxQcm9wZXJ0eSA9IChzaGFwZTogVU1MU3ltYm9scykgPT4ge1xuICAgIHJldHVybiBEZWZhdWx0VU1MUHJvcGVydHlNYXBbc2hhcGVdO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZURlZmF1bHRGbG93Y2hhcnQgPSAocG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgY29uc3QgZGVjaXNpb25Qcm9wZXJ0eSA9IGdldERlZmF1bHRGbG93Y2hhcnRQcm9wZXJ0eShGbG93Y2hhcnRTeW1ib2xzLmRlY2lzaW9uKTtcbiAgICBjb25zdCBwcm9jZXNzUHJvcGVydHkgPSBnZXREZWZhdWx0Rmxvd2NoYXJ0UHJvcGVydHkoRmxvd2NoYXJ0U3ltYm9scy5wcm9jZXNzKTtcbiAgICBjb25zdCB0ZXJtaW5hbFByb3BlcnR5ID0gZ2V0RGVmYXVsdEZsb3djaGFydFByb3BlcnR5KEZsb3djaGFydFN5bWJvbHMudGVybWluYWwpO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IERlZmF1bHRCYXNpY1NoYXBlUHJvcGVydHkuc3Ryb2tlV2lkdGhcbiAgICB9O1xuXG4gICAgY29uc3QgbGluZU9wdGlvbnMgPSB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiBEZWZhdWx0TGluZVN0eWxlLnN0cm9rZVdpZHRoXG4gICAgfTtcbiAgICBjb25zdCBzdGFydEVsZW1lbnQgPSBjcmVhdGVHZW9tZXRyeUVsZW1lbnQoXG4gICAgICAgIEZsb3djaGFydFN5bWJvbHMudGVybWluYWwsXG4gICAgICAgIGdldERlZmF1bHRHZW9tZXRyeVBvaW50cyhGbG93Y2hhcnRTeW1ib2xzLnRlcm1pbmFsLCBwb2ludCksXG4gICAgICAgICflvIDlp4snLFxuICAgICAgICBvcHRpb25zXG4gICAgKTtcblxuICAgIGNvbnN0IHByb2Nlc3NQb2ludDE6IFBvaW50ID0gW3BvaW50WzBdLCBwb2ludFsxXSArIHRlcm1pbmFsUHJvcGVydHkuaGVpZ2h0IC8gMiArIDU1ICsgcHJvY2Vzc1Byb3BlcnR5LmhlaWdodCAvIDJdO1xuICAgIGNvbnN0IHByb2Nlc3NFbGVtZW50MSA9IGNyZWF0ZUdlb21ldHJ5RWxlbWVudChcbiAgICAgICAgRmxvd2NoYXJ0U3ltYm9scy5wcm9jZXNzLFxuICAgICAgICBnZXREZWZhdWx0R2VvbWV0cnlQb2ludHMoRmxvd2NoYXJ0U3ltYm9scy5wcm9jZXNzLCBwcm9jZXNzUG9pbnQxKSxcbiAgICAgICAgJ+i/h+eoiycsXG4gICAgICAgIG9wdGlvbnNcbiAgICApO1xuXG4gICAgY29uc3QgZGVjaXNpb25Qb2ludDogUG9pbnQgPSBbcHJvY2Vzc1BvaW50MVswXSwgcHJvY2Vzc1BvaW50MVsxXSArIHByb2Nlc3NQcm9wZXJ0eS5oZWlnaHQgLyAyICsgNTUgKyBkZWNpc2lvblByb3BlcnR5LmhlaWdodCAvIDJdO1xuICAgIGNvbnN0IGRlY2lzaW9uRWxlbWVudCA9IGNyZWF0ZUdlb21ldHJ5RWxlbWVudChcbiAgICAgICAgRmxvd2NoYXJ0U3ltYm9scy5kZWNpc2lvbixcbiAgICAgICAgZ2V0RGVmYXVsdEdlb21ldHJ5UG9pbnRzKEZsb3djaGFydFN5bWJvbHMuZGVjaXNpb24sIGRlY2lzaW9uUG9pbnQpLFxuICAgICAgICAn5Yik5patJyxcbiAgICAgICAgb3B0aW9uc1xuICAgICk7XG5cbiAgICBjb25zdCBwcm9jZXNzUG9pbnQyOiBQb2ludCA9IFtkZWNpc2lvblBvaW50WzBdICsgZGVjaXNpb25Qcm9wZXJ0eS53aWR0aCAvIDIgKyA3NSArIHByb2Nlc3NQcm9wZXJ0eS53aWR0aCAvIDIsIGRlY2lzaW9uUG9pbnRbMV1dO1xuICAgIGNvbnN0IHByb2Nlc3NFbGVtZW50MiA9IGNyZWF0ZUdlb21ldHJ5RWxlbWVudChcbiAgICAgICAgRmxvd2NoYXJ0U3ltYm9scy5wcm9jZXNzLFxuICAgICAgICBnZXREZWZhdWx0R2VvbWV0cnlQb2ludHMoRmxvd2NoYXJ0U3ltYm9scy5wcm9jZXNzLCBwcm9jZXNzUG9pbnQyKSxcbiAgICAgICAgJ+i/h+eoiycsXG4gICAgICAgIG9wdGlvbnNcbiAgICApO1xuXG4gICAgY29uc3QgZW5kUG9pbnQ6IFBvaW50ID0gW2RlY2lzaW9uUG9pbnRbMF0sIGRlY2lzaW9uUG9pbnRbMV0gKyBkZWNpc2lvblByb3BlcnR5LmhlaWdodCAvIDIgKyA5NSArIHRlcm1pbmFsUHJvcGVydHkuaGVpZ2h0IC8gMl07XG4gICAgY29uc3QgZW5kRWxlbWVudCA9IGNyZWF0ZUdlb21ldHJ5RWxlbWVudChcbiAgICAgICAgRmxvd2NoYXJ0U3ltYm9scy50ZXJtaW5hbCxcbiAgICAgICAgZ2V0RGVmYXVsdEdlb21ldHJ5UG9pbnRzKEZsb3djaGFydFN5bWJvbHMudGVybWluYWwsIGVuZFBvaW50KSxcbiAgICAgICAgJ+e7k+adnycsXG4gICAgICAgIG9wdGlvbnNcbiAgICApO1xuXG4gICAgY29uc3QgbGluZTEgPSBjcmVhdGVBcnJvd0xpbmVFbGVtZW50KFxuICAgICAgICBBcnJvd0xpbmVTaGFwZS5lbGJvdyxcbiAgICAgICAgW1xuICAgICAgICAgICAgWzAsIDBdLFxuICAgICAgICAgICAgWzAsIDBdXG4gICAgICAgIF0sXG4gICAgICAgIHsgbWFya2VyOiBBcnJvd0xpbmVNYXJrZXJUeXBlLm5vbmUsIGNvbm5lY3Rpb246IFswLjUsIDFdLCBib3VuZElkOiBzdGFydEVsZW1lbnQuaWQgfSxcbiAgICAgICAgeyBtYXJrZXI6IEFycm93TGluZU1hcmtlclR5cGUuYXJyb3csIGNvbm5lY3Rpb246IFswLjUsIDBdLCBib3VuZElkOiBwcm9jZXNzRWxlbWVudDEuaWQgfSxcbiAgICAgICAgW10sXG4gICAgICAgIGxpbmVPcHRpb25zXG4gICAgKTtcblxuICAgIGNvbnN0IGxpbmUyID0gY3JlYXRlQXJyb3dMaW5lRWxlbWVudChcbiAgICAgICAgQXJyb3dMaW5lU2hhcGUuZWxib3csXG4gICAgICAgIFtcbiAgICAgICAgICAgIFswLCAwXSxcbiAgICAgICAgICAgIFswLCAwXVxuICAgICAgICBdLFxuICAgICAgICB7IG1hcmtlcjogQXJyb3dMaW5lTWFya2VyVHlwZS5ub25lLCBjb25uZWN0aW9uOiBbMC41LCAxXSwgYm91bmRJZDogcHJvY2Vzc0VsZW1lbnQxLmlkIH0sXG4gICAgICAgIHsgbWFya2VyOiBBcnJvd0xpbmVNYXJrZXJUeXBlLmFycm93LCBjb25uZWN0aW9uOiBbMC41LCAwXSwgYm91bmRJZDogZGVjaXNpb25FbGVtZW50LmlkIH0sXG4gICAgICAgIFtdLFxuICAgICAgICBsaW5lT3B0aW9uc1xuICAgICk7XG5cbiAgICBjb25zdCBsaW5lMyA9IGNyZWF0ZUFycm93TGluZUVsZW1lbnQoXG4gICAgICAgIEFycm93TGluZVNoYXBlLmVsYm93LFxuICAgICAgICBbXG4gICAgICAgICAgICBbMCwgMF0sXG4gICAgICAgICAgICBbMCwgMF1cbiAgICAgICAgXSxcbiAgICAgICAgeyBtYXJrZXI6IEFycm93TGluZU1hcmtlclR5cGUubm9uZSwgY29ubmVjdGlvbjogWzAuNSwgMV0sIGJvdW5kSWQ6IGRlY2lzaW9uRWxlbWVudC5pZCB9LFxuICAgICAgICB7IG1hcmtlcjogQXJyb3dMaW5lTWFya2VyVHlwZS5hcnJvdywgY29ubmVjdGlvbjogWzAuNSwgMF0sIGJvdW5kSWQ6IGVuZEVsZW1lbnQuaWQgfSxcbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IGJ1aWxkVGV4dCgn5pivJyksXG4gICAgICAgICAgICAgICAgcG9zaXRpb246IDAuNSxcbiAgICAgICAgICAgICAgICB3aWR0aDogMTQsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAyMFxuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBsaW5lT3B0aW9uc1xuICAgICk7XG5cbiAgICBjb25zdCBsaW5lNCA9IGNyZWF0ZUFycm93TGluZUVsZW1lbnQoXG4gICAgICAgIEFycm93TGluZVNoYXBlLmVsYm93LFxuICAgICAgICBbXG4gICAgICAgICAgICBbMCwgMF0sXG4gICAgICAgICAgICBbMCwgMF1cbiAgICAgICAgXSxcbiAgICAgICAgeyBtYXJrZXI6IEFycm93TGluZU1hcmtlclR5cGUubm9uZSwgY29ubmVjdGlvbjogWzEsIDAuNV0sIGJvdW5kSWQ6IGRlY2lzaW9uRWxlbWVudC5pZCB9LFxuICAgICAgICB7IG1hcmtlcjogQXJyb3dMaW5lTWFya2VyVHlwZS5hcnJvdywgY29ubmVjdGlvbjogWzAsIDAuNV0sIGJvdW5kSWQ6IHByb2Nlc3NFbGVtZW50Mi5pZCB9LFxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogYnVpbGRUZXh0KCflkKYnKSxcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogMC41LFxuICAgICAgICAgICAgICAgIHdpZHRoOiAxNCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDIwXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGxpbmVPcHRpb25zXG4gICAgKTtcblxuICAgIGNvbnN0IGxpbmU1ID0gY3JlYXRlQXJyb3dMaW5lRWxlbWVudChcbiAgICAgICAgQXJyb3dMaW5lU2hhcGUuZWxib3csXG4gICAgICAgIFtcbiAgICAgICAgICAgIFswLCAwXSxcbiAgICAgICAgICAgIFswLCAwXVxuICAgICAgICBdLFxuICAgICAgICB7IG1hcmtlcjogQXJyb3dMaW5lTWFya2VyVHlwZS5ub25lLCBjb25uZWN0aW9uOiBbMC41LCAxXSwgYm91bmRJZDogcHJvY2Vzc0VsZW1lbnQyLmlkIH0sXG4gICAgICAgIHsgbWFya2VyOiBBcnJvd0xpbmVNYXJrZXJUeXBlLmFycm93LCBjb25uZWN0aW9uOiBbMSwgMC41XSwgYm91bmRJZDogZW5kRWxlbWVudC5pZCB9LFxuICAgICAgICBbXSxcbiAgICAgICAgbGluZU9wdGlvbnNcbiAgICApO1xuXG4gICAgcmV0dXJuIFtzdGFydEVsZW1lbnQsIHByb2Nlc3NFbGVtZW50MSwgZGVjaXNpb25FbGVtZW50LCBwcm9jZXNzRWxlbWVudDIsIGVuZEVsZW1lbnQsIGxpbmUxLCBsaW5lMiwgbGluZTMsIGxpbmU0LCBsaW5lNV07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXV0b0NvbXBsZXRlUG9pbnRzID0gKGVsZW1lbnQ6IFBsYWl0U2hhcGVFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgQXV0b0NvbXBsZXRlTWFyZ2luID0gKDEyICsgUkVTSVpFX0hBTkRMRV9ESUFNRVRFUiAvIDIpICogMjtcbiAgICBsZXQgcmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGVsZW1lbnQucG9pbnRzKTtcbiAgICByZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuaW5mbGF0ZShyZWN0YW5nbGUsIEF1dG9Db21wbGV0ZU1hcmdpbik7XG4gICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5nZXRFZGdlQ2VudGVyUG9pbnRzKHJlY3RhbmdsZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGl0SW5kZXhPZkF1dG9Db21wbGV0ZVBvaW50ID0gKG1vdmluZ1BvaW50OiBQb2ludCwgcG9pbnRzOiBQb2ludFtdKSA9PiB7XG4gICAgcmV0dXJuIHBvaW50cy5maW5kSW5kZXgocG9pbnQgPT4ge1xuICAgICAgICBjb25zdCBtb3ZpbmdSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoW21vdmluZ1BvaW50XSk7XG4gICAgICAgIGxldCByZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoW3BvaW50XSk7XG4gICAgICAgIHJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5pbmZsYXRlKHJlY3RhbmdsZSwgUkVTSVpFX0hBTkRMRV9ESUFNRVRFUik7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuaXNIaXQobW92aW5nUmVjdGFuZ2xlLCByZWN0YW5nbGUpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERyYXdEZWZhdWx0U3Ryb2tlQ29sb3IgPSAodGhlbWU6IFRoZW1lQ29sb3JNb2RlKSA9PiB7XG4gICAgcmV0dXJuIERyYXdUaGVtZUNvbG9yc1t0aGVtZV0uc3Ryb2tlQ29sb3I7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Rmxvd2NoYXJ0RGVmYXVsdEZpbGwgPSAodGhlbWU6IFRoZW1lQ29sb3JNb2RlKSA9PiB7XG4gICAgcmV0dXJuIERyYXdUaGVtZUNvbG9yc1t0aGVtZV0uZmlsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUZXh0U2hhcGVQcm9wZXJ0eSA9IChib2FyZDogUGxhaXRCb2FyZCwgdGV4dDogc3RyaW5nIHwgRWxlbWVudCA9IERlZmF1bHRUZXh0UHJvcGVydHkudGV4dCwgZm9udFNpemU/OiBudW1iZXIgfCBzdHJpbmcpID0+IHtcbiAgICBmb250U2l6ZSA9IGZvbnRTaXplID8gTnVtYmVyKGZvbnRTaXplKSA6IERFRkFVTFRfRk9OVF9TSVpFO1xuICAgIGNvbnN0IHRleHRTaXplID0gbWVhc3VyZUVsZW1lbnQoYnVpbGRUZXh0KHRleHQpLCB7IGZvbnRTaXplLCBmb250RmFtaWx5OiBERUZBVUxUX0ZPTlRfRkFNSUxZIH0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiB0ZXh0U2l6ZS53aWR0aCArIFNoYXBlRGVmYXVsdFNwYWNlLnJlY3RhbmdsZUFuZFRleHQgKiAyLFxuICAgICAgICBoZWlnaHQ6IHRleHRTaXplLmhlaWdodFxuICAgIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGVmYXVsdEdlb21ldHJ5UG9pbnRzID0gKHBvaW50ZXI6IERyYXdQb2ludGVyVHlwZSwgY2VudGVyUG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgY29uc3QgcHJvcGVydHkgPSBnZXREZWZhdWx0R2VvbWV0cnlQcm9wZXJ0eShwb2ludGVyKTtcbiAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldFBvaW50cyhSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlDZW50ZXJQb2ludChjZW50ZXJQb2ludCwgcHJvcGVydHkud2lkdGgsIHByb3BlcnR5LmhlaWdodCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERlZmF1bHRHZW9tZXRyeVByb3BlcnR5ID0gKHBvaW50ZXI6IERyYXdQb2ludGVyVHlwZSkgPT4ge1xuICAgIGNvbnN0IGlzRmxvd0NoYXJ0ID0gZ2V0Rmxvd2NoYXJ0UG9pbnRlcnMoKS5pbmNsdWRlcyhwb2ludGVyKTtcbiAgICBjb25zdCBpc1VNTCA9IGdldFVNTFBvaW50ZXJzKCkuaW5jbHVkZXMocG9pbnRlcik7XG4gICAgaWYgKGlzRmxvd0NoYXJ0KSB7XG4gICAgICAgIHJldHVybiBnZXREZWZhdWx0Rmxvd2NoYXJ0UHJvcGVydHkocG9pbnRlciBhcyBGbG93Y2hhcnRTeW1ib2xzKTtcbiAgICB9IGVsc2UgaWYgKGlzVU1MKSB7XG4gICAgICAgIHJldHVybiBnZXREZWZhdWx0VU1MUHJvcGVydHkocG9pbnRlciBhcyBVTUxTeW1ib2xzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZ2V0RGVmYXVsdEJhc2ljU2hhcGVQcm9wZXJ0eShwb2ludGVyIGFzIEJhc2ljU2hhcGVzKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGVmYXVsdFRleHRQb2ludHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGNlbnRlclBvaW50OiBQb2ludCwgZm9udFNpemU/OiBudW1iZXIgfCBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBwcm9wZXJ0eSA9IGdldFRleHRTaGFwZVByb3BlcnR5KGJvYXJkLCBEZWZhdWx0VGV4dFByb3BlcnR5LnRleHQsIGZvbnRTaXplKTtcbiAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldFBvaW50cyhSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlDZW50ZXJQb2ludChjZW50ZXJQb2ludCwgcHJvcGVydHkud2lkdGgsIHByb3BlcnR5LmhlaWdodCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVRleHRFbGVtZW50ID0gKFxuICAgIGJvYXJkOiBQbGFpdEJvYXJkLFxuICAgIHBvaW50czogW1BvaW50LCBQb2ludF0sXG4gICAgdGV4dDogc3RyaW5nIHwgRWxlbWVudCA9IERlZmF1bHRUZXh0UHJvcGVydHkudGV4dCxcbiAgICB0ZXh0SGVpZ2h0PzogbnVtYmVyXG4pID0+IHtcbiAgICBjb25zdCBtZW1vcml6ZWRMYXRlc3QgPSBnZXRNZW1vcml6ZWRMYXRlc3RCeVBvaW50ZXIoQmFzaWNTaGFwZXMudGV4dCk7XG4gICAgdGV4dEhlaWdodCA9IHRleHRIZWlnaHQgPyB0ZXh0SGVpZ2h0IDogUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHBvaW50cykuaGVpZ2h0O1xuICAgIHJldHVybiBjcmVhdGVHZW9tZXRyeUVsZW1lbnQoQmFzaWNTaGFwZXMudGV4dCwgcG9pbnRzLCB0ZXh0LCBtZW1vcml6ZWRMYXRlc3QuZ2VvbWV0cnlQcm9wZXJ0aWVzIGFzIEdlb21ldHJ5U3R5bGVPcHRpb25zLCB7XG4gICAgICAgIC4uLm1lbW9yaXplZExhdGVzdC50ZXh0UHJvcGVydGllcyxcbiAgICAgICAgdGV4dEhlaWdodFxuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZURlZmF1bHRHZW9tZXRyeSA9IChib2FyZDogUGxhaXRCb2FyZCwgcG9pbnRzOiBbUG9pbnQsIFBvaW50XSwgc2hhcGU6IEdlb21ldHJ5U2hhcGVzKSA9PiB7XG4gICAgY29uc3QgbWVtb3JpemVkTGF0ZXN0ID0gZ2V0TWVtb3JpemVkTGF0ZXN0QnlQb2ludGVyKHNoYXBlKTtcbiAgICBjb25zdCB0ZXh0SGVpZ2h0ID0gZ2V0VGV4dFNoYXBlUHJvcGVydHkoYm9hcmQsIERlZmF1bHRUZXh0UHJvcGVydHkudGV4dCwgbWVtb3JpemVkTGF0ZXN0LnRleHRQcm9wZXJ0aWVzWydmb250LXNpemUnXSkuaGVpZ2h0O1xuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzVU1MQ2xhc3NPckludGVyZmFjZSh7IHNoYXBlIH0pKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVVTUxDbGFzc09ySW50ZXJmYWNlR2VvbWV0cnlFbGVtZW50KGJvYXJkLCBzaGFwZSwgcG9pbnRzKTtcbiAgICB9XG4gICAgaWYgKGlzTXVsdGlwbGVUZXh0U2hhcGUoc2hhcGUpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVNdWx0aXBsZVRleHRHZW9tZXRyeUVsZW1lbnQoc2hhcGUsIHBvaW50cywge1xuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IERlZmF1bHRCYXNpY1NoYXBlUHJvcGVydHkuc3Ryb2tlV2lkdGgsXG4gICAgICAgICAgICAuLi4obWVtb3JpemVkTGF0ZXN0Lmdlb21ldHJ5UHJvcGVydGllcyBhcyBHZW9tZXRyeVN0eWxlT3B0aW9ucylcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUdlb21ldHJ5RWxlbWVudChcbiAgICAgICAgICAgIHNoYXBlLFxuICAgICAgICAgICAgcG9pbnRzLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IERlZmF1bHRCYXNpY1NoYXBlUHJvcGVydHkuc3Ryb2tlV2lkdGgsXG4gICAgICAgICAgICAgICAgLi4uKG1lbW9yaXplZExhdGVzdC5nZW9tZXRyeVByb3BlcnRpZXMgYXMgR2VvbWV0cnlTdHlsZU9wdGlvbnMpXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyAuLi5tZW1vcml6ZWRMYXRlc3QudGV4dFByb3BlcnRpZXMsIHRleHRIZWlnaHQgfVxuICAgICAgICApO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBlZGl0VGV4dCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRHZW9tZXRyeSwgdGV4dD86IFBsYWl0RHJhd1NoYXBlVGV4dCkgPT4ge1xuICAgIGNvbnN0IHRleHRNYW5hZ2UgPSB0ZXh0ID8gZ2V0VGV4dE1hbmFnZShib2FyZCwgYCR7ZWxlbWVudC5pZH0tJHt0ZXh0LmtleX1gKSEgOiBnZXRGaXJzdFRleHRNYW5hZ2UoZWxlbWVudCk7XG4gICAgaWYgKHRleHRNYW5hZ2UpIHtcbiAgICAgICAgdGV4dE1hbmFnZS5lZGl0KCgpID0+IHtcbiAgICAgICAgICAgIC8vIGRlbGF5IHRvIGF2b2lkIGJsaW5raW5nXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXJlbmRlckdlb21ldHJ5QWN0aXZlKGJvYXJkLCBlbGVtZW50KTtcbiAgICAgICAgICAgIH0sIDIwMCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJlcmVuZGVyR2VvbWV0cnlBY3RpdmUoYm9hcmQsIGVsZW1lbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHJlcmVuZGVyR2VvbWV0cnlBY3RpdmUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0R2VvbWV0cnkpID0+IHtcbiAgICBjb25zdCBlbGVtZW50UmVmID0gUGxhaXRFbGVtZW50LmdldEVsZW1lbnRSZWY8UGxhaXRDb21tb25FbGVtZW50UmVmPihlbGVtZW50KTtcbiAgICBjb25zdCBhY3RpdmVHZW5lcmF0b3IgPSBlbGVtZW50UmVmLmdldEdlbmVyYXRvcihBY3RpdmVHZW5lcmF0b3Iua2V5KTtcbiAgICBjb25zdCBzZWxlY3RlZCA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpLmluY2x1ZGVzKGVsZW1lbnQpO1xuICAgIGFjdGl2ZUdlbmVyYXRvci5wcm9jZXNzRHJhd2luZyhlbGVtZW50LCBQbGFpdEJvYXJkLmdldEVsZW1lbnRBY3RpdmVIb3N0KGJvYXJkKSwgeyBzZWxlY3RlZCB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0dlb21ldHJ5SW5jbHVkZVRleHQgPSAoZWxlbWVudDogUGxhaXRHZW9tZXRyeSkgPT4ge1xuICAgIHJldHVybiBpc1NpbmdsZVRleHRHZW9tZXRyeShlbGVtZW50KSB8fCBpc011bHRpcGxlVGV4dEdlb21ldHJ5KGVsZW1lbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzU2luZ2xlVGV4dFNoYXBlID0gKHNoYXBlOiBHZW9tZXRyeVNoYXBlcykgPT4ge1xuICAgIHJldHVybiAhR0VPTUVUUllfV0lUSE9VVF9URVhULmluY2x1ZGVzKHNoYXBlKSAmJiAhaXNNdWx0aXBsZVRleHRTaGFwZShzaGFwZSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNTaW5nbGVUZXh0R2VvbWV0cnkgPSAoZWxlbWVudDogUGxhaXRHZW9tZXRyeSkgPT4ge1xuICAgIHJldHVybiBQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnkoZWxlbWVudCkgJiYgaXNTaW5nbGVUZXh0U2hhcGUoZWxlbWVudC5zaGFwZSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNHZW9tZXRyeUNsb3NlZCA9IChlbGVtZW50OiBQbGFpdEdlb21ldHJ5KSA9PiB7XG4gICAgcmV0dXJuICFHRU9NRVRSWV9OT1RfQ0xPU0VELmluY2x1ZGVzKGVsZW1lbnQuc2hhcGUpO1xufTtcbiJdfQ==
246
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbWV0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy91dGlscy9nZW9tZXRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBUyxlQUFlLEVBQWtCLG1CQUFtQixFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvSCxPQUFPLEVBQWtCLFdBQVcsRUFBaUIsZ0JBQWdCLEVBQWMsTUFBTSx3QkFBd0IsQ0FBQztBQUVsSCxPQUFPLEVBQ0gseUJBQXlCLEVBQ3pCLDRCQUE0QixFQUM1QiwyQkFBMkIsRUFDM0IsbUJBQW1CLEVBQ25CLHFCQUFxQixFQUVyQixlQUFlLEVBQ2YsbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQixpQkFBaUIsRUFDakIsb0JBQW9CLEVBQ3BCLGNBQWMsRUFDakIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUNILGVBQWUsRUFDZixTQUFTLEVBRVQsbUJBQW1CLEVBRW5CLHNCQUFzQixFQUN0QixTQUFTLEVBQ1Qsa0JBQWtCLEVBQ2xCLGNBQWMsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3JELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6RCxPQUFPLEVBQWdCLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNFLE9BQU8sRUFBRSx3Q0FB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LE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JFLE1BQU0sUUFBUSxHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM5RCxlQUFlLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ2xHLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLENBQUMsT0FBc0IsRUFBRSxFQUFFO0lBQzVELE9BQU8sb0JBQW9CLENBQUMsT0FBTyxDQUFDLElBQUksc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDNUUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxLQUFxQixFQUFFLEVBQUU7SUFDdkQsT0FBTyxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pGLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsT0FBc0IsRUFBRSxFQUFFO0lBQzNELE9BQU8sZ0JBQWdCLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwRixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLE9BQXNCLEVBQUUsRUFBRTtJQUN2RCxPQUFPLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4RCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBQbGFpdEVsZW1lbnQsIFBvaW50LCBSZWN0YW5nbGVDbGllbnQsIFRoZW1lQ29sb3JNb2RlLCBnZXRTZWxlY3RlZEVsZW1lbnRzLCBpZENyZWF0b3IgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBHZW9tZXRyeVNoYXBlcywgQmFzaWNTaGFwZXMsIFBsYWl0R2VvbWV0cnksIEZsb3djaGFydFN5bWJvbHMsIFVNTFN5bWJvbHMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2dlb21ldHJ5JztcbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQge1xuICAgIERlZmF1bHRCYXNpY1NoYXBlUHJvcGVydHksXG4gICAgRGVmYXVsdEJhc2ljU2hhcGVQcm9wZXJ0eU1hcCxcbiAgICBEZWZhdWx0Rmxvd2NoYXJ0UHJvcGVydHlNYXAsXG4gICAgRGVmYXVsdFRleHRQcm9wZXJ0eSxcbiAgICBEZWZhdWx0VU1MUHJvcGVydHlNYXAsXG4gICAgRHJhd1BvaW50ZXJUeXBlLFxuICAgIERyYXdUaGVtZUNvbG9ycyxcbiAgICBHRU9NRVRSWV9OT1RfQ0xPU0VELFxuICAgIEdFT01FVFJZX1dJVEhPVVRfVEVYVCxcbiAgICBTaGFwZURlZmF1bHRTcGFjZSxcbiAgICBnZXRGbG93Y2hhcnRQb2ludGVycyxcbiAgICBnZXRVTUxQb2ludGVyc1xufSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgICBBY3RpdmVHZW5lcmF0b3IsXG4gICAgQWxpZ25tZW50LFxuICAgIEN1c3RvbVRleHQsXG4gICAgREVGQVVMVF9GT05UX0ZBTUlMWSxcbiAgICBQbGFpdENvbW1vbkVsZW1lbnRSZWYsXG4gICAgUkVTSVpFX0hBTkRMRV9ESUFNRVRFUixcbiAgICBidWlsZFRleHQsXG4gICAgZ2V0Rmlyc3RUZXh0TWFuYWdlLFxuICAgIG1lYXN1cmVFbGVtZW50XG59IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJ3JvdWdoanMvYmluL2NvcmUnO1xuaW1wb3J0IHsgZ2V0RW5naW5lIH0gZnJvbSAnLi4vZW5naW5lcyc7XG5pbXBvcnQgeyBnZXRFbGVtZW50U2hhcGUgfSBmcm9tICcuL3NoYXBlJztcbmltcG9ydCB7IGNyZWF0ZUFycm93TGluZUVsZW1lbnQgfSBmcm9tICcuL2Fycm93LWxpbmUvYXJyb3ctbGluZS1iYXNpYyc7XG5pbXBvcnQgeyBBcnJvd0xpbmVNYXJrZXJUeXBlLCBBcnJvd0xpbmVTaGFwZSwgUGxhaXREcmF3RWxlbWVudCwgUGxhaXRTaGFwZUVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IERlZmF1bHRMaW5lU3R5bGUgfSBmcm9tICcuLi9jb25zdGFudHMvbGluZSc7XG5pbXBvcnQgeyBnZXRNZW1vcml6ZWRMYXRlc3RCeVBvaW50ZXIgfSBmcm9tICcuL21lbW9yaXplJztcbmltcG9ydCB7IERyYXdUZXh0SW5mbywgZ2V0VGV4dE1hbmFnZSB9IGZyb20gJy4uL2dlbmVyYXRvcnMvdGV4dC5nZW5lcmF0b3InO1xuaW1wb3J0IHsgY3JlYXRlVU1MQ2xhc3NPckludGVyZmFjZUdlb21ldHJ5RWxlbWVudCB9IGZyb20gJy4vdW1sJztcbmltcG9ydCB7IGNyZWF0ZU11bHRpcGxlVGV4dEdlb21ldHJ5RWxlbWVudCwgaXNNdWx0aXBsZVRleHRHZW9tZXRyeSwgaXNNdWx0aXBsZVRleHRTaGFwZSB9IGZyb20gJy4vbXVsdGktdGV4dC1nZW9tZXRyeSc7XG5pbXBvcnQgeyBERUZBVUxUX0ZPTlRfU0laRSB9IGZyb20gJ0BwbGFpdC90ZXh0LXBsdWdpbnMnO1xuXG5leHBvcnQgdHlwZSBHZW9tZXRyeVN0eWxlT3B0aW9ucyA9IFBpY2s8UGxhaXRHZW9tZXRyeSwgJ2ZpbGwnIHwgJ3N0cm9rZUNvbG9yJyB8ICdzdHJva2VXaWR0aCc+O1xuXG5leHBvcnQgdHlwZSBUZXh0UHJvcGVydGllcyA9IFBhcnRpYWw8Q3VzdG9tVGV4dD4gJiB7IGFsaWduPzogQWxpZ25tZW50OyB0ZXh0SGVpZ2h0PzogbnVtYmVyIH07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVHZW9tZXRyeUVsZW1lbnQgPSAoXG4gICAgc2hhcGU6IEdlb21ldHJ5U2hhcGVzLFxuICAgIHBvaW50czogW1BvaW50LCBQb2ludF0sXG4gICAgdGV4dDogc3RyaW5nIHwgRWxlbWVudCxcbiAgICBvcHRpb25zOiBHZW9tZXRyeVN0eWxlT3B0aW9ucyA9IHt9LFxuICAgIHRleHRQcm9wZXJ0aWVzOiBUZXh0UHJvcGVydGllcyA9IHt9XG4pOiBQbGFpdEdlb21ldHJ5ID0+IHtcbiAgICBpZiAoR0VPTUVUUllfV0lUSE9VVF9URVhULmluY2x1ZGVzKHNoYXBlKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlR2VvbWV0cnlFbGVtZW50V2l0aG91dFRleHQoc2hhcGUsIHBvaW50cywgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUdlb21ldHJ5RWxlbWVudFdpdGhUZXh0KHNoYXBlLCBwb2ludHMsIHRleHQsIG9wdGlvbnMsIHRleHRQcm9wZXJ0aWVzKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlR2VvbWV0cnlFbGVtZW50V2l0aFRleHQgPSAoXG4gICAgc2hhcGU6IEdlb21ldHJ5U2hhcGVzLFxuICAgIHBvaW50czogW1BvaW50LCBQb2ludF0sXG4gICAgdGV4dDogc3RyaW5nIHwgRWxlbWVudCxcbiAgICBvcHRpb25zOiBHZW9tZXRyeVN0eWxlT3B0aW9ucyA9IHt9LFxuICAgIHRleHRQcm9wZXJ0aWVzOiBUZXh0UHJvcGVydGllcyA9IHt9XG4pOiBQbGFpdEdlb21ldHJ5ID0+IHtcbiAgICBsZXQgdGV4dE9wdGlvbnMgPSB7fTtcbiAgICBsZXQgYWxpZ25tZW50OiB1bmRlZmluZWQgfCBBbGlnbm1lbnQgPSBBbGlnbm1lbnQuY2VudGVyO1xuICAgIGxldCB0ZXh0SGVpZ2h0ID0gRGVmYXVsdFRleHRQcm9wZXJ0eS5oZWlnaHQ7XG4gICAgaWYgKHNoYXBlID09PSBCYXNpY1NoYXBlcy50ZXh0KSB7XG4gICAgICAgIHRleHRPcHRpb25zID0geyBhdXRvU2l6ZTogdHJ1ZSB9O1xuICAgICAgICBhbGlnbm1lbnQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRleHRQcm9wZXJ0aWVzID0geyAuLi50ZXh0UHJvcGVydGllcyB9O1xuICAgIHRleHRQcm9wZXJ0aWVzPy5hbGlnbiAmJiAoYWxpZ25tZW50ID0gdGV4dFByb3BlcnRpZXM/LmFsaWduKTtcbiAgICB0ZXh0UHJvcGVydGllcz8udGV4dEhlaWdodCAmJiAodGV4dEhlaWdodCA9IHRleHRQcm9wZXJ0aWVzPy50ZXh0SGVpZ2h0KTtcbiAgICBkZWxldGUgdGV4dFByb3BlcnRpZXM/LmFsaWduO1xuICAgIGRlbGV0ZSB0ZXh0UHJvcGVydGllcz8udGV4dEhlaWdodDtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBpZENyZWF0b3IoKSxcbiAgICAgICAgdHlwZTogJ2dlb21ldHJ5JyxcbiAgICAgICAgc2hhcGUsXG4gICAgICAgIGFuZ2xlOiAwLFxuICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICB0ZXh0SGVpZ2h0LFxuICAgICAgICB0ZXh0OiBidWlsZFRleHQodGV4dCwgYWxpZ25tZW50LCB0ZXh0UHJvcGVydGllcyksXG4gICAgICAgIHBvaW50cyxcbiAgICAgICAgLi4udGV4dE9wdGlvbnMsXG4gICAgICAgIC4uLm9wdGlvbnNcbiAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUdlb21ldHJ5RWxlbWVudFdpdGhvdXRUZXh0ID0gKFxuICAgIHNoYXBlOiBHZW9tZXRyeVNoYXBlcyxcbiAgICBwb2ludHM6IFtQb2ludCwgUG9pbnRdLFxuICAgIG9wdGlvbnM6IEdlb21ldHJ5U3R5bGVPcHRpb25zID0ge31cbik6IFBsYWl0R2VvbWV0cnkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBpZENyZWF0b3IoKSxcbiAgICAgICAgdHlwZTogJ2dlb21ldHJ5JyxcbiAgICAgICAgc2hhcGUsXG4gICAgICAgIGFuZ2xlOiAwLFxuICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICBwb2ludHMsXG4gICAgICAgIC4uLm9wdGlvbnNcbiAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGRyYXdHZW9tZXRyeSA9IChib2FyZDogUGxhaXRCb2FyZCwgb3V0ZXJSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgc2hhcGU6IEdlb21ldHJ5U2hhcGVzLCByb3VnaE9wdGlvbnM6IE9wdGlvbnMpID0+IHtcbiAgICByZXR1cm4gZ2V0RW5naW5lKHNoYXBlKS5kcmF3KGJvYXJkLCBvdXRlclJlY3RhbmdsZSwgcm91Z2hPcHRpb25zKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXROZWFyZXN0UG9pbnQgPSAoZWxlbWVudDogUGxhaXRTaGFwZUVsZW1lbnQsIHBvaW50OiBQb2ludCkgPT4ge1xuICAgIGNvbnN0IHJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhlbGVtZW50LnBvaW50cyk7XG4gICAgY29uc3Qgc2hhcGUgPSBnZXRFbGVtZW50U2hhcGUoZWxlbWVudCk7XG4gICAgcmV0dXJuIGdldEVuZ2luZShzaGFwZSkuZ2V0TmVhcmVzdFBvaW50KHJlY3RhbmdsZSwgcG9pbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENlbnRlclBvaW50c09uUG9seWdvbiA9IChwb2ludHM6IFBvaW50W10pID0+IHtcbiAgICBjb25zdCBjZW50ZXJQb2ludDogUG9pbnRbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBqID0gaSA9PSBwb2ludHMubGVuZ3RoIC0gMSA/IDAgOiBpICsgMTtcbiAgICAgICAgY2VudGVyUG9pbnQucHVzaChbKHBvaW50c1tpXVswXSArIHBvaW50c1tqXVswXSkgLyAyLCAocG9pbnRzW2ldWzFdICsgcG9pbnRzW2pdWzFdKSAvIDJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGNlbnRlclBvaW50O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERlZmF1bHRGbG93Y2hhcnRQcm9wZXJ0eSA9IChzeW1ib2w6IEZsb3djaGFydFN5bWJvbHMpID0+IHtcbiAgICByZXR1cm4gRGVmYXVsdEZsb3djaGFydFByb3BlcnR5TWFwW3N5bWJvbF07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGVmYXVsdEJhc2ljU2hhcGVQcm9wZXJ0eSA9IChzaGFwZTogQmFzaWNTaGFwZXMpID0+IHtcbiAgICByZXR1cm4gRGVmYXVsdEJhc2ljU2hhcGVQcm9wZXJ0eU1hcFtzaGFwZV0gfHwgRGVmYXVsdEJhc2ljU2hhcGVQcm9wZXJ0eTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREZWZhdWx0VU1MUHJvcGVydHkgPSAoc2hhcGU6IFVNTFN5bWJvbHMpID0+IHtcbiAgICByZXR1cm4gRGVmYXVsdFVNTFByb3BlcnR5TWFwW3NoYXBlXTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVEZWZhdWx0Rmxvd2NoYXJ0ID0gKHBvaW50OiBQb2ludCkgPT4ge1xuICAgIGNvbnN0IGRlY2lzaW9uUHJvcGVydHkgPSBnZXREZWZhdWx0Rmxvd2NoYXJ0UHJvcGVydHkoRmxvd2NoYXJ0U3ltYm9scy5kZWNpc2lvbik7XG4gICAgY29uc3QgcHJvY2Vzc1Byb3BlcnR5ID0gZ2V0RGVmYXVsdEZsb3djaGFydFByb3BlcnR5KEZsb3djaGFydFN5bWJvbHMucHJvY2Vzcyk7XG4gICAgY29uc3QgdGVybWluYWxQcm9wZXJ0eSA9IGdldERlZmF1bHRGbG93Y2hhcnRQcm9wZXJ0eShGbG93Y2hhcnRTeW1ib2xzLnRlcm1pbmFsKTtcblxuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiBEZWZhdWx0QmFzaWNTaGFwZVByb3BlcnR5LnN0cm9rZVdpZHRoXG4gICAgfTtcblxuICAgIGNvbnN0IGxpbmVPcHRpb25zID0ge1xuICAgICAgICBzdHJva2VXaWR0aDogRGVmYXVsdExpbmVTdHlsZS5zdHJva2VXaWR0aFxuICAgIH07XG4gICAgY29uc3Qgc3RhcnRFbGVtZW50ID0gY3JlYXRlR2VvbWV0cnlFbGVtZW50KFxuICAgICAgICBGbG93Y2hhcnRTeW1ib2xzLnRlcm1pbmFsLFxuICAgICAgICBnZXREZWZhdWx0R2VvbWV0cnlQb2ludHMoRmxvd2NoYXJ0U3ltYm9scy50ZXJtaW5hbCwgcG9pbnQpLFxuICAgICAgICAn5byA5aeLJyxcbiAgICAgICAgb3B0aW9uc1xuICAgICk7XG5cbiAgICBjb25zdCBwcm9jZXNzUG9pbnQxOiBQb2ludCA9IFtwb2ludFswXSwgcG9pbnRbMV0gKyB0ZXJtaW5hbFByb3BlcnR5LmhlaWdodCAvIDIgKyA1NSArIHByb2Nlc3NQcm9wZXJ0eS5oZWlnaHQgLyAyXTtcbiAgICBjb25zdCBwcm9jZXNzRWxlbWVudDEgPSBjcmVhdGVHZW9tZXRyeUVsZW1lbnQoXG4gICAgICAgIEZsb3djaGFydFN5bWJvbHMucHJvY2VzcyxcbiAgICAgICAgZ2V0RGVmYXVsdEdlb21ldHJ5UG9pbnRzKEZsb3djaGFydFN5bWJvbHMucHJvY2VzcywgcHJvY2Vzc1BvaW50MSksXG4gICAgICAgICfov4fnqIsnLFxuICAgICAgICBvcHRpb25zXG4gICAgKTtcblxuICAgIGNvbnN0IGRlY2lzaW9uUG9pbnQ6IFBvaW50ID0gW3Byb2Nlc3NQb2ludDFbMF0sIHByb2Nlc3NQb2ludDFbMV0gKyBwcm9jZXNzUHJvcGVydHkuaGVpZ2h0IC8gMiArIDU1ICsgZGVjaXNpb25Qcm9wZXJ0eS5oZWlnaHQgLyAyXTtcbiAgICBjb25zdCBkZWNpc2lvbkVsZW1lbnQgPSBjcmVhdGVHZW9tZXRyeUVsZW1lbnQoXG4gICAgICAgIEZsb3djaGFydFN5bWJvbHMuZGVjaXNpb24sXG4gICAgICAgIGdldERlZmF1bHRHZW9tZXRyeVBvaW50cyhGbG93Y2hhcnRTeW1ib2xzLmRlY2lzaW9uLCBkZWNpc2lvblBvaW50KSxcbiAgICAgICAgJ+WIpOaWrScsXG4gICAgICAgIG9wdGlvbnNcbiAgICApO1xuXG4gICAgY29uc3QgcHJvY2Vzc1BvaW50MjogUG9pbnQgPSBbZGVjaXNpb25Qb2ludFswXSArIGRlY2lzaW9uUHJvcGVydHkud2lkdGggLyAyICsgNzUgKyBwcm9jZXNzUHJvcGVydHkud2lkdGggLyAyLCBkZWNpc2lvblBvaW50WzFdXTtcbiAgICBjb25zdCBwcm9jZXNzRWxlbWVudDIgPSBjcmVhdGVHZW9tZXRyeUVsZW1lbnQoXG4gICAgICAgIEZsb3djaGFydFN5bWJvbHMucHJvY2VzcyxcbiAgICAgICAgZ2V0RGVmYXVsdEdlb21ldHJ5UG9pbnRzKEZsb3djaGFydFN5bWJvbHMucHJvY2VzcywgcHJvY2Vzc1BvaW50MiksXG4gICAgICAgICfov4fnqIsnLFxuICAgICAgICBvcHRpb25zXG4gICAgKTtcblxuICAgIGNvbnN0IGVuZFBvaW50OiBQb2ludCA9IFtkZWNpc2lvblBvaW50WzBdLCBkZWNpc2lvblBvaW50WzFdICsgZGVjaXNpb25Qcm9wZXJ0eS5oZWlnaHQgLyAyICsgOTUgKyB0ZXJtaW5hbFByb3BlcnR5LmhlaWdodCAvIDJdO1xuICAgIGNvbnN0IGVuZEVsZW1lbnQgPSBjcmVhdGVHZW9tZXRyeUVsZW1lbnQoXG4gICAgICAgIEZsb3djaGFydFN5bWJvbHMudGVybWluYWwsXG4gICAgICAgIGdldERlZmF1bHRHZW9tZXRyeVBvaW50cyhGbG93Y2hhcnRTeW1ib2xzLnRlcm1pbmFsLCBlbmRQb2ludCksXG4gICAgICAgICfnu5PmnZ8nLFxuICAgICAgICBvcHRpb25zXG4gICAgKTtcblxuICAgIGNvbnN0IGxpbmUxID0gY3JlYXRlQXJyb3dMaW5lRWxlbWVudChcbiAgICAgICAgQXJyb3dMaW5lU2hhcGUuZWxib3csXG4gICAgICAgIFtcbiAgICAgICAgICAgIFswLCAwXSxcbiAgICAgICAgICAgIFswLCAwXVxuICAgICAgICBdLFxuICAgICAgICB7IG1hcmtlcjogQXJyb3dMaW5lTWFya2VyVHlwZS5ub25lLCBjb25uZWN0aW9uOiBbMC41LCAxXSwgYm91bmRJZDogc3RhcnRFbGVtZW50LmlkIH0sXG4gICAgICAgIHsgbWFya2VyOiBBcnJvd0xpbmVNYXJrZXJUeXBlLmFycm93LCBjb25uZWN0aW9uOiBbMC41LCAwXSwgYm91bmRJZDogcHJvY2Vzc0VsZW1lbnQxLmlkIH0sXG4gICAgICAgIFtdLFxuICAgICAgICBsaW5lT3B0aW9uc1xuICAgICk7XG5cbiAgICBjb25zdCBsaW5lMiA9IGNyZWF0ZUFycm93TGluZUVsZW1lbnQoXG4gICAgICAgIEFycm93TGluZVNoYXBlLmVsYm93LFxuICAgICAgICBbXG4gICAgICAgICAgICBbMCwgMF0sXG4gICAgICAgICAgICBbMCwgMF1cbiAgICAgICAgXSxcbiAgICAgICAgeyBtYXJrZXI6IEFycm93TGluZU1hcmtlclR5cGUubm9uZSwgY29ubmVjdGlvbjogWzAuNSwgMV0sIGJvdW5kSWQ6IHByb2Nlc3NFbGVtZW50MS5pZCB9LFxuICAgICAgICB7IG1hcmtlcjogQXJyb3dMaW5lTWFya2VyVHlwZS5hcnJvdywgY29ubmVjdGlvbjogWzAuNSwgMF0sIGJvdW5kSWQ6IGRlY2lzaW9uRWxlbWVudC5pZCB9LFxuICAgICAgICBbXSxcbiAgICAgICAgbGluZU9wdGlvbnNcbiAgICApO1xuXG4gICAgY29uc3QgbGluZTMgPSBjcmVhdGVBcnJvd0xpbmVFbGVtZW50KFxuICAgICAgICBBcnJvd0xpbmVTaGFwZS5lbGJvdyxcbiAgICAgICAgW1xuICAgICAgICAgICAgWzAsIDBdLFxuICAgICAgICAgICAgWzAsIDBdXG4gICAgICAgIF0sXG4gICAgICAgIHsgbWFya2VyOiBBcnJvd0xpbmVNYXJrZXJUeXBlLm5vbmUsIGNvbm5lY3Rpb246IFswLjUsIDFdLCBib3VuZElkOiBkZWNpc2lvbkVsZW1lbnQuaWQgfSxcbiAgICAgICAgeyBtYXJrZXI6IEFycm93TGluZU1hcmtlclR5cGUuYXJyb3csIGNvbm5lY3Rpb246IFswLjUsIDBdLCBib3VuZElkOiBlbmRFbGVtZW50LmlkIH0sXG4gICAgICAgIFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0ZXh0OiBidWlsZFRleHQoJ+aYrycpLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAwLjUsXG4gICAgICAgICAgICAgICAgd2lkdGg6IDE0LFxuICAgICAgICAgICAgICAgIGhlaWdodDogMjBcbiAgICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgbGluZU9wdGlvbnNcbiAgICApO1xuXG4gICAgY29uc3QgbGluZTQgPSBjcmVhdGVBcnJvd0xpbmVFbGVtZW50KFxuICAgICAgICBBcnJvd0xpbmVTaGFwZS5lbGJvdyxcbiAgICAgICAgW1xuICAgICAgICAgICAgWzAsIDBdLFxuICAgICAgICAgICAgWzAsIDBdXG4gICAgICAgIF0sXG4gICAgICAgIHsgbWFya2VyOiBBcnJvd0xpbmVNYXJrZXJUeXBlLm5vbmUsIGNvbm5lY3Rpb246IFsxLCAwLjVdLCBib3VuZElkOiBkZWNpc2lvbkVsZW1lbnQuaWQgfSxcbiAgICAgICAgeyBtYXJrZXI6IEFycm93TGluZU1hcmtlclR5cGUuYXJyb3csIGNvbm5lY3Rpb246IFswLCAwLjVdLCBib3VuZElkOiBwcm9jZXNzRWxlbWVudDIuaWQgfSxcbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IGJ1aWxkVGV4dCgn5ZCmJyksXG4gICAgICAgICAgICAgICAgcG9zaXRpb246IDAuNSxcbiAgICAgICAgICAgICAgICB3aWR0aDogMTQsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAyMFxuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBsaW5lT3B0aW9uc1xuICAgICk7XG5cbiAgICBjb25zdCBsaW5lNSA9IGNyZWF0ZUFycm93TGluZUVsZW1lbnQoXG4gICAgICAgIEFycm93TGluZVNoYXBlLmVsYm93LFxuICAgICAgICBbXG4gICAgICAgICAgICBbMCwgMF0sXG4gICAgICAgICAgICBbMCwgMF1cbiAgICAgICAgXSxcbiAgICAgICAgeyBtYXJrZXI6IEFycm93TGluZU1hcmtlclR5cGUubm9uZSwgY29ubmVjdGlvbjogWzAuNSwgMV0sIGJvdW5kSWQ6IHByb2Nlc3NFbGVtZW50Mi5pZCB9LFxuICAgICAgICB7IG1hcmtlcjogQXJyb3dMaW5lTWFya2VyVHlwZS5hcnJvdywgY29ubmVjdGlvbjogWzEsIDAuNV0sIGJvdW5kSWQ6IGVuZEVsZW1lbnQuaWQgfSxcbiAgICAgICAgW10sXG4gICAgICAgIGxpbmVPcHRpb25zXG4gICAgKTtcblxuICAgIHJldHVybiBbc3RhcnRFbGVtZW50LCBwcm9jZXNzRWxlbWVudDEsIGRlY2lzaW9uRWxlbWVudCwgcHJvY2Vzc0VsZW1lbnQyLCBlbmRFbGVtZW50LCBsaW5lMSwgbGluZTIsIGxpbmUzLCBsaW5lNCwgbGluZTVdO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEF1dG9Db21wbGV0ZVBvaW50cyA9IChlbGVtZW50OiBQbGFpdFNoYXBlRWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IEF1dG9Db21wbGV0ZU1hcmdpbiA9ICgxMiArIFJFU0laRV9IQU5ETEVfRElBTUVURVIgLyAyKSAqIDI7XG4gICAgbGV0IHJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhlbGVtZW50LnBvaW50cyk7XG4gICAgcmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmluZmxhdGUocmVjdGFuZ2xlLCBBdXRvQ29tcGxldGVNYXJnaW4pO1xuICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0RWRnZUNlbnRlclBvaW50cyhyZWN0YW5nbGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEhpdEluZGV4T2ZBdXRvQ29tcGxldGVQb2ludCA9IChtb3ZpbmdQb2ludDogUG9pbnQsIHBvaW50czogUG9pbnRbXSkgPT4ge1xuICAgIHJldHVybiBwb2ludHMuZmluZEluZGV4KHBvaW50ID0+IHtcbiAgICAgICAgY29uc3QgbW92aW5nUmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKFttb3ZpbmdQb2ludF0pO1xuICAgICAgICBsZXQgcmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKFtwb2ludF0pO1xuICAgICAgICByZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuaW5mbGF0ZShyZWN0YW5nbGUsIFJFU0laRV9IQU5ETEVfRElBTUVURVIpO1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KG1vdmluZ1JlY3RhbmdsZSwgcmVjdGFuZ2xlKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREcmF3RGVmYXVsdFN0cm9rZUNvbG9yID0gKHRoZW1lOiBUaGVtZUNvbG9yTW9kZSkgPT4ge1xuICAgIHJldHVybiBEcmF3VGhlbWVDb2xvcnNbdGhlbWVdLnN0cm9rZUNvbG9yO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERlZmF1bHRGaWxsID0gKHRoZW1lOiBUaGVtZUNvbG9yTW9kZSkgPT4ge1xuICAgIHJldHVybiBEcmF3VGhlbWVDb2xvcnNbdGhlbWVdLmZpbGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGV4dFNoYXBlUHJvcGVydHkgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHRleHQ6IHN0cmluZyB8IEVsZW1lbnQgPSBEZWZhdWx0VGV4dFByb3BlcnR5LnRleHQsIGZvbnRTaXplPzogbnVtYmVyIHwgc3RyaW5nKSA9PiB7XG4gICAgZm9udFNpemUgPSBmb250U2l6ZSA/IE51bWJlcihmb250U2l6ZSkgOiBERUZBVUxUX0ZPTlRfU0laRTtcbiAgICBjb25zdCB0ZXh0U2l6ZSA9IG1lYXN1cmVFbGVtZW50KGJ1aWxkVGV4dCh0ZXh0KSwgeyBmb250U2l6ZSwgZm9udEZhbWlseTogREVGQVVMVF9GT05UX0ZBTUlMWSB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogdGV4dFNpemUud2lkdGggKyBTaGFwZURlZmF1bHRTcGFjZS5yZWN0YW5nbGVBbmRUZXh0ICogMixcbiAgICAgICAgaGVpZ2h0OiB0ZXh0U2l6ZS5oZWlnaHRcbiAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERlZmF1bHRHZW9tZXRyeVBvaW50cyA9IChwb2ludGVyOiBEcmF3UG9pbnRlclR5cGUsIGNlbnRlclBvaW50OiBQb2ludCkgPT4ge1xuICAgIGNvbnN0IHByb3BlcnR5ID0gZ2V0RGVmYXVsdEdlb21ldHJ5UHJvcGVydHkocG9pbnRlcik7XG4gICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5nZXRQb2ludHMoUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5Q2VudGVyUG9pbnQoY2VudGVyUG9pbnQsIHByb3BlcnR5LndpZHRoLCBwcm9wZXJ0eS5oZWlnaHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREZWZhdWx0R2VvbWV0cnlQcm9wZXJ0eSA9IChwb2ludGVyOiBEcmF3UG9pbnRlclR5cGUpID0+IHtcbiAgICBjb25zdCBpc0Zsb3dDaGFydCA9IGdldEZsb3djaGFydFBvaW50ZXJzKCkuaW5jbHVkZXMocG9pbnRlcik7XG4gICAgY29uc3QgaXNVTUwgPSBnZXRVTUxQb2ludGVycygpLmluY2x1ZGVzKHBvaW50ZXIpO1xuICAgIGlmIChpc0Zsb3dDaGFydCkge1xuICAgICAgICByZXR1cm4gZ2V0RGVmYXVsdEZsb3djaGFydFByb3BlcnR5KHBvaW50ZXIgYXMgRmxvd2NoYXJ0U3ltYm9scyk7XG4gICAgfSBlbHNlIGlmIChpc1VNTCkge1xuICAgICAgICByZXR1cm4gZ2V0RGVmYXVsdFVNTFByb3BlcnR5KHBvaW50ZXIgYXMgVU1MU3ltYm9scyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGdldERlZmF1bHRCYXNpY1NoYXBlUHJvcGVydHkocG9pbnRlciBhcyBCYXNpY1NoYXBlcyk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldERlZmF1bHRUZXh0UG9pbnRzID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBjZW50ZXJQb2ludDogUG9pbnQsIGZvbnRTaXplPzogbnVtYmVyIHwgc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgcHJvcGVydHkgPSBnZXRUZXh0U2hhcGVQcm9wZXJ0eShib2FyZCwgRGVmYXVsdFRleHRQcm9wZXJ0eS50ZXh0LCBmb250U2l6ZSk7XG4gICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5nZXRQb2ludHMoUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5Q2VudGVyUG9pbnQoY2VudGVyUG9pbnQsIHByb3BlcnR5LndpZHRoLCBwcm9wZXJ0eS5oZWlnaHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVUZXh0RWxlbWVudCA9IChcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBwb2ludHM6IFtQb2ludCwgUG9pbnRdLFxuICAgIHRleHQ6IHN0cmluZyB8IEVsZW1lbnQgPSBEZWZhdWx0VGV4dFByb3BlcnR5LnRleHQsXG4gICAgdGV4dEhlaWdodD86IG51bWJlclxuKSA9PiB7XG4gICAgY29uc3QgbWVtb3JpemVkTGF0ZXN0ID0gZ2V0TWVtb3JpemVkTGF0ZXN0QnlQb2ludGVyKEJhc2ljU2hhcGVzLnRleHQpO1xuICAgIHRleHRIZWlnaHQgPSB0ZXh0SGVpZ2h0ID8gdGV4dEhlaWdodCA6IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhwb2ludHMpLmhlaWdodDtcbiAgICByZXR1cm4gY3JlYXRlR2VvbWV0cnlFbGVtZW50KEJhc2ljU2hhcGVzLnRleHQsIHBvaW50cywgdGV4dCwgbWVtb3JpemVkTGF0ZXN0Lmdlb21ldHJ5UHJvcGVydGllcyBhcyBHZW9tZXRyeVN0eWxlT3B0aW9ucywge1xuICAgICAgICAuLi5tZW1vcml6ZWRMYXRlc3QudGV4dFByb3BlcnRpZXMsXG4gICAgICAgIHRleHRIZWlnaHRcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVEZWZhdWx0R2VvbWV0cnkgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHBvaW50czogW1BvaW50LCBQb2ludF0sIHNoYXBlOiBHZW9tZXRyeVNoYXBlcykgPT4ge1xuICAgIGNvbnN0IG1lbW9yaXplZExhdGVzdCA9IGdldE1lbW9yaXplZExhdGVzdEJ5UG9pbnRlcihzaGFwZSk7XG4gICAgY29uc3QgdGV4dEhlaWdodCA9IGdldFRleHRTaGFwZVByb3BlcnR5KGJvYXJkLCBEZWZhdWx0VGV4dFByb3BlcnR5LnRleHQsIG1lbW9yaXplZExhdGVzdC50ZXh0UHJvcGVydGllc1snZm9udC1zaXplJ10pLmhlaWdodDtcbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc1VNTENsYXNzT3JJbnRlcmZhY2UoeyBzaGFwZSB9KSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlVU1MQ2xhc3NPckludGVyZmFjZUdlb21ldHJ5RWxlbWVudChib2FyZCwgc2hhcGUsIHBvaW50cyk7XG4gICAgfVxuICAgIGlmIChpc011bHRpcGxlVGV4dFNoYXBlKHNoYXBlKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTXVsdGlwbGVUZXh0R2VvbWV0cnlFbGVtZW50KHNoYXBlLCBwb2ludHMsIHtcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiBEZWZhdWx0QmFzaWNTaGFwZVByb3BlcnR5LnN0cm9rZVdpZHRoLFxuICAgICAgICAgICAgLi4uKG1lbW9yaXplZExhdGVzdC5nZW9tZXRyeVByb3BlcnRpZXMgYXMgR2VvbWV0cnlTdHlsZU9wdGlvbnMpXG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVHZW9tZXRyeUVsZW1lbnQoXG4gICAgICAgICAgICBzaGFwZSxcbiAgICAgICAgICAgIHBvaW50cyxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiBEZWZhdWx0QmFzaWNTaGFwZVByb3BlcnR5LnN0cm9rZVdpZHRoLFxuICAgICAgICAgICAgICAgIC4uLihtZW1vcml6ZWRMYXRlc3QuZ2VvbWV0cnlQcm9wZXJ0aWVzIGFzIEdlb21ldHJ5U3R5bGVPcHRpb25zKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgLi4ubWVtb3JpemVkTGF0ZXN0LnRleHRQcm9wZXJ0aWVzLCB0ZXh0SGVpZ2h0IH1cbiAgICAgICAgKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZWRpdFRleHQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0R2VvbWV0cnksIHRleHQ/OiBEcmF3VGV4dEluZm8pID0+IHtcbiAgICBjb25zdCB0ZXh0TWFuYWdlID0gdGV4dCA/IGdldFRleHRNYW5hZ2UoYm9hcmQsIGVsZW1lbnQsIHRleHQpIDogZ2V0Rmlyc3RUZXh0TWFuYWdlKGVsZW1lbnQpO1xuICAgIGlmICh0ZXh0TWFuYWdlKSB7XG4gICAgICAgIHRleHRNYW5hZ2UuZWRpdCgoKSA9PiB7XG4gICAgICAgICAgICAvLyBkZWxheSB0byBhdm9pZCBibGlua2luZ1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVyZW5kZXJHZW9tZXRyeUFjdGl2ZShib2FyZCwgZWxlbWVudCk7XG4gICAgICAgICAgICB9LCAyMDApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByZXJlbmRlckdlb21ldHJ5QWN0aXZlKGJvYXJkLCBlbGVtZW50KTtcbn07XG5cbmV4cG9ydCBjb25zdCByZXJlbmRlckdlb21ldHJ5QWN0aXZlID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEdlb21ldHJ5KSA9PiB7XG4gICAgY29uc3QgZWxlbWVudFJlZiA9IFBsYWl0RWxlbWVudC5nZXRFbGVtZW50UmVmPFBsYWl0Q29tbW9uRWxlbWVudFJlZj4oZWxlbWVudCk7XG4gICAgY29uc3QgYWN0aXZlR2VuZXJhdG9yID0gZWxlbWVudFJlZi5nZXRHZW5lcmF0b3IoQWN0aXZlR2VuZXJhdG9yLmtleSk7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKS5pbmNsdWRlcyhlbGVtZW50KTtcbiAgICBhY3RpdmVHZW5lcmF0b3IucHJvY2Vzc0RyYXdpbmcoZWxlbWVudCwgUGxhaXRCb2FyZC5nZXRFbGVtZW50QWN0aXZlSG9zdChib2FyZCksIHsgc2VsZWN0ZWQgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNHZW9tZXRyeUluY2x1ZGVUZXh0ID0gKGVsZW1lbnQ6IFBsYWl0R2VvbWV0cnkpID0+IHtcbiAgICByZXR1cm4gaXNTaW5nbGVUZXh0R2VvbWV0cnkoZWxlbWVudCkgfHwgaXNNdWx0aXBsZVRleHRHZW9tZXRyeShlbGVtZW50KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1NpbmdsZVRleHRTaGFwZSA9IChzaGFwZTogR2VvbWV0cnlTaGFwZXMpID0+IHtcbiAgICByZXR1cm4gIUdFT01FVFJZX1dJVEhPVVRfVEVYVC5pbmNsdWRlcyhzaGFwZSkgJiYgIWlzTXVsdGlwbGVUZXh0U2hhcGUoc2hhcGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzU2luZ2xlVGV4dEdlb21ldHJ5ID0gKGVsZW1lbnQ6IFBsYWl0R2VvbWV0cnkpID0+IHtcbiAgICByZXR1cm4gUGxhaXREcmF3RWxlbWVudC5pc0dlb21ldHJ5KGVsZW1lbnQpICYmIGlzU2luZ2xlVGV4dFNoYXBlKGVsZW1lbnQuc2hhcGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzR2VvbWV0cnlDbG9zZWQgPSAoZWxlbWVudDogUGxhaXRHZW9tZXRyeSkgPT4ge1xuICAgIHJldHVybiAhR0VPTUVUUllfTk9UX0NMT1NFRC5pbmNsdWRlcyhlbGVtZW50LnNoYXBlKTtcbn07XG4iXX0=