@plait/draw 0.75.0 → 0.77.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 (38) hide show
  1. package/constants/default.d.ts +4 -0
  2. package/constants/index.d.ts +1 -0
  3. package/esm2022/arrow-line.component.mjs +14 -7
  4. package/esm2022/constants/default.mjs +6 -1
  5. package/esm2022/constants/index.mjs +2 -1
  6. package/esm2022/generators/arrow-line-auto-complete.generator.mjs +3 -3
  7. package/esm2022/generators/line-active.generator.mjs +14 -10
  8. package/esm2022/geometry.component.mjs +20 -11
  9. package/esm2022/image.component.mjs +12 -8
  10. package/esm2022/plugins/with-arrow-line-auto-complete-reaction.mjs +9 -7
  11. package/esm2022/plugins/with-arrow-line-auto-complete.mjs +9 -8
  12. package/esm2022/plugins/with-arrow-line-bound-reaction.mjs +4 -4
  13. package/esm2022/plugins/with-arrow-line-text.mjs +20 -8
  14. package/esm2022/plugins/with-draw-resize.mjs +28 -21
  15. package/esm2022/plugins/with-draw-rotate.mjs +23 -18
  16. package/esm2022/plugins/with-geometry-create.mjs +10 -10
  17. package/esm2022/plugins/with-swimlane-create.mjs +4 -4
  18. package/esm2022/plugins/with-table-resize.mjs +15 -11
  19. package/esm2022/plugins/with-table.mjs +8 -5
  20. package/esm2022/table.component.mjs +19 -12
  21. package/esm2022/utils/arrow-line/arrow-line-basic.mjs +3 -3
  22. package/esm2022/utils/common.mjs +14 -11
  23. package/esm2022/utils/geometry.mjs +12 -74
  24. package/esm2022/utils/hit.mjs +3 -3
  25. package/esm2022/utils/table-selected.mjs +1 -5
  26. package/esm2022/utils/table.mjs +3 -3
  27. package/esm2022/utils/uml.mjs +7 -5
  28. package/esm2022/utils/vector-line.mjs +2 -2
  29. package/esm2022/vector-line.component.mjs +12 -5
  30. package/fesm2022/plait-draw.mjs +1516 -1502
  31. package/fesm2022/plait-draw.mjs.map +1 -1
  32. package/generators/line-active.generator.d.ts +5 -1
  33. package/package.json +1 -1
  34. package/plugins/with-arrow-line-text.d.ts +1 -0
  35. package/plugins/with-draw-resize.d.ts +1 -0
  36. package/utils/common.d.ts +1 -0
  37. package/utils/geometry.d.ts +19 -21
  38. package/utils/table-selected.d.ts +0 -1
@@ -1,5 +1,5 @@
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
- import { DefaultDrawStyle, LINE_HIT_GEOMETRY_BUFFER, LINE_SNAPPING_BUFFER, ShapeDefaultSpace } from '../constants';
1
+ import { ACTIVE_STROKE_WIDTH, addSelectedElement, BoardTransforms, clearSelectedElement, createG, depthFirstRecursion, drawCircle, getI18nValue, getIsRecursionFunc, PlaitBoard, PlaitPointerType, RectangleClient, rotateAntiPointsByElement, SELECTION_BORDER_COLOR, SELECTION_FILL_COLOR, SNAPPING_STROKE_WIDTH, Transforms } from '@plait/core';
2
+ import { DefaultDrawStyle, DefaultTextProperty, DrawI18nKey, LINE_HIT_GEOMETRY_BUFFER, LINE_SNAPPING_BUFFER, ShapeDefaultSpace } from '../constants';
3
3
  import { GeometryCommonTextKeys, PlaitDrawElement } from '../interfaces';
4
4
  import { Alignment, getTextEditorsByElement } from '@plait/common';
5
5
  import { isCellIncludeText } from './table';
@@ -51,12 +51,12 @@ export const isDrawElementIncludeText = (element) => {
51
51
  return editors.length > 0;
52
52
  }
53
53
  if (PlaitDrawElement.isElementByTable(element)) {
54
- return element.cells.some(cell => isCellIncludeText(cell));
54
+ return element.cells.some((cell) => isCellIncludeText(cell));
55
55
  }
56
56
  return true;
57
57
  };
58
58
  export const isDrawElementsIncludeText = (elements) => {
59
- return elements.some(item => {
59
+ return elements.some((item) => {
60
60
  return isDrawElementIncludeText(item);
61
61
  });
62
62
  };
@@ -89,7 +89,7 @@ export const getSnappingShape = (board, point) => {
89
89
  return null;
90
90
  };
91
91
  export const getSnappingRef = (board, hitElement, point) => {
92
- const rotatedPoint = rotateAntiPointsByElement(point, hitElement) || point;
92
+ const rotatedPoint = rotateAntiPointsByElement(board, point, hitElement) || point;
93
93
  const connectorPoint = getHitConnectorPoint(rotatedPoint, hitElement);
94
94
  const edgePoint = getNearestPoint(hitElement, rotatedPoint);
95
95
  const isHitEdge = isHitEdgeOfShape(board, hitElement, rotatedPoint, LINE_SNAPPING_BUFFER);
@@ -98,14 +98,14 @@ export const getSnappingRef = (board, hitElement, point) => {
98
98
  export const getHitShape = (board, point, offset = LINE_HIT_GEOMETRY_BUFFER) => {
99
99
  let hitShape = null;
100
100
  traverseDrawShapes(board, (element) => {
101
- if (hitShape === null && isInsideOfShape(board, element, rotateAntiPointsByElement(point, element) || point, offset * 2)) {
101
+ if (hitShape === null && isInsideOfShape(board, element, rotateAntiPointsByElement(board, point, element) || point, offset * 2)) {
102
102
  hitShape = element;
103
103
  }
104
104
  });
105
105
  return hitShape;
106
106
  };
107
107
  export const traverseDrawShapes = (board, callback) => {
108
- depthFirstRecursion(board, node => {
108
+ depthFirstRecursion(board, (node) => {
109
109
  if (!PlaitBoard.isBoard(node) && PlaitDrawElement.isShapeElement(node)) {
110
110
  callback(node);
111
111
  }
@@ -139,7 +139,7 @@ export const drawBoundReaction = (board, element, roughOptions = { hasMask: true
139
139
  }
140
140
  if (roughOptions.hasConnector) {
141
141
  const connectorPoints = getEngine(shape).getConnectorPoints(rectangle);
142
- connectorPoints.forEach(point => {
142
+ connectorPoints.forEach((point) => {
143
143
  const circleG = drawCircle(PlaitBoard.getRoughSVG(board), point, 8, {
144
144
  stroke: SELECTION_BORDER_COLOR,
145
145
  strokeWidth: ACTIVE_STROKE_WIDTH,
@@ -161,14 +161,14 @@ export const getTextKey = (element, text) => {
161
161
  };
162
162
  export const getGeometryAlign = (board, element) => {
163
163
  if (isMultipleTextGeometry(element)) {
164
- const drawShapeText = element.texts.find(item => item.id.includes(GeometryCommonTextKeys.content));
164
+ const drawShapeText = element.texts.find((item) => item.id.includes(GeometryCommonTextKeys.content));
165
165
  return drawShapeText?.text.align || Alignment.center;
166
166
  }
167
167
  if (isSingleTextGeometry(element)) {
168
168
  return element.text?.align || Alignment.center;
169
169
  }
170
170
  if (PlaitDrawElement.isElementByTable(element)) {
171
- const firstTextCell = element.cells.find(item => item.text);
171
+ const firstTextCell = element.cells.find((item) => item.text);
172
172
  return firstTextCell?.text?.align || Alignment.center;
173
173
  }
174
174
  return Alignment.center;
@@ -178,4 +178,7 @@ export const isClosedPoints = (points) => {
178
178
  const endPoint = points[points.length - 1];
179
179
  return startPoint[0] === endPoint[0] && startPoint[1] === endPoint[1];
180
180
  };
181
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvdXRpbHMvY29tbW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxtQkFBbUIsRUFDbkIsa0JBQWtCLEVBRWxCLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsT0FBTyxFQUNQLG1CQUFtQixFQUNuQixVQUFVLEVBQ1Ysa0JBQWtCLEVBQ2xCLFVBQVUsRUFFVixnQkFBZ0IsRUFFaEIsZUFBZSxFQUNmLHlCQUF5QixFQUN6QixzQkFBc0IsRUFDdEIsb0JBQW9CLEVBQ3BCLHFCQUFxQixFQUNyQixVQUFVLEVBQ2IsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLHdCQUF3QixFQUFFLG9CQUFvQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ILE9BQU8sRUFHSCxzQkFBc0IsRUFJdEIsZ0JBQWdCLEVBR25CLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDdkMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUcxQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDakQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMxRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxxQkFBcUIsRUFBRSxvQkFBb0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM1RyxPQUFPLEVBQUUsc0JB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QUFDLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7UUFDbkcsT0FBTyxhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDO0lBQ3pELENBQUM7SUFDRCxJQUFJLG9CQUFvQixDQUFDLE9BQThCLENBQUMsRUFBRSxDQUFDO1FBQ3ZELE9BQVEsT0FBeUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFDdEUsQ0FBQztJQUVELElBQUksZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUM3QyxNQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RCxPQUFPLGFBQWEsRUFBRSxJQUFJLEVBQUUsS0FBSyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUM7SUFDMUQsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQztBQUM1QixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxNQUFlLEVBQUUsRUFBRTtJQUM5QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDM0MsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBQ1RJVkVfU1RST0tFX1dJRFRILFxuICAgIGFkZFNlbGVjdGVkRWxlbWVudCxcbiAgICBBbmNlc3RvcixcbiAgICBCb2FyZFRyYW5zZm9ybXMsXG4gICAgY2xlYXJTZWxlY3RlZEVsZW1lbnQsXG4gICAgY3JlYXRlRyxcbiAgICBkZXB0aEZpcnN0UmVjdXJzaW9uLFxuICAgIGRyYXdDaXJjbGUsXG4gICAgZ2V0SXNSZWN1cnNpb25GdW5jLFxuICAgIFBsYWl0Qm9hcmQsXG4gICAgUGxhaXRFbGVtZW50LFxuICAgIFBsYWl0UG9pbnRlclR5cGUsXG4gICAgUG9pbnQsXG4gICAgUmVjdGFuZ2xlQ2xpZW50LFxuICAgIHJvdGF0ZUFudGlQb2ludHNCeUVsZW1lbnQsXG4gICAgU0VMRUNUSU9OX0JPUkRFUl9DT0xPUixcbiAgICBTRUxFQ1RJT05fRklMTF9DT0xPUixcbiAgICBTTkFQUElOR19TVFJPS0VfV0lEVEgsXG4gICAgVHJhbnNmb3Jtc1xufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBEZWZhdWx0RHJhd1N0eWxlLCBMSU5FX0hJVF9HRU9NRVRSWV9CVUZGRVIsIExJTkVfU05BUFBJTkdfQlVGRkVSLCBTaGFwZURlZmF1bHRTcGFjZSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICAgIERyYXdPcHRpb25zLFxuICAgIERyYXdTaGFwZXMsXG4gICAgR2VvbWV0cnlDb21tb25UZXh0S2V5cyxcbiAgICBQbGFpdEJhc2VHZW9tZXRyeSxcbiAgICBQbGFpdENvbW1vbkdlb21ldHJ5LFxuICAgIFBsYWl0Q3VzdG9tR2VvbWV0cnksXG4gICAgUGxhaXREcmF3RWxlbWVudCxcbiAgICBQbGFpdEdlb21ldHJ5LFxuICAgIFBsYWl0U2hhcGVFbGVtZW50XG59IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQWxpZ25tZW50LCBnZXRUZXh0RWRpdG9yc0J5RWxlbWVudCB9IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHsgaXNDZWxsSW5jbHVkZVRleHQgfSBmcm9tICcuL3RhYmxlJztcbmltcG9ydCB7IGdldEVuZ2luZSB9IGZyb20gJy4uL2VuZ2luZXMnO1xuaW1wb3J0IHsgZ2V0RWxlbWVudFNoYXBlIH0gZnJvbSAnLi9zaGFwZSc7XG5pbXBvcnQgeyBPcHRpb25zIH0gZnJvbSAncm91Z2hqcy9iaW4vY29yZSc7XG5pbXBvcnQgeyBQbGFpdEJhc2VUYWJsZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdGFibGUnO1xuaW1wb3J0IHsgbWVtb3JpemVMYXRlc3RTaGFwZSB9IGZyb20gJy4vbWVtb3JpemUnO1xuaW1wb3J0IHsgaXNIaXRFZGdlT2ZTaGFwZSwgaXNJbnNpZGVPZlNoYXBlIH0gZnJvbSAnLi9oaXQnO1xuaW1wb3J0IHsgZ2V0SGl0Q29ubmVjdG9yUG9pbnQgfSBmcm9tICcuL2Fycm93LWxpbmUnO1xuaW1wb3J0IHsgZ2V0TmVhcmVzdFBvaW50LCBpc0dlb21ldHJ5Q2xvc2VkLCBpc0dlb21ldHJ5SW5jbHVkZVRleHQsIGlzU2luZ2xlVGV4dEdlb21ldHJ5IH0gZnJvbSAnLi9nZW9tZXRyeSc7XG5pbXBvcnQgeyBpc011bHRpcGxlVGV4dEdlb21ldHJ5IH0gZnJvbSAnLi9tdWx0aS10ZXh0LWdlb21ldHJ5JztcbmltcG9ydCB7IERyYXdUZXh0SW5mbyB9IGZyb20gJy4uL2dlbmVyYXRvcnMvdGV4dC5nZW5lcmF0b3InO1xuXG5leHBvcnQgY29uc3QgZ2V0VGV4dFJlY3RhbmdsZSA9IDxUIGV4dGVuZHMgUGxhaXRFbGVtZW50ID0gUGxhaXRHZW9tZXRyeT4oZWxlbWVudDogVCkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnRSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZWxlbWVudC5wb2ludHMhKTtcbiAgICBjb25zdCBzdHJva2VXaWR0aCA9IGdldFN0cm9rZVdpZHRoQnlFbGVtZW50KGVsZW1lbnQpO1xuICAgIGNvbnN0IGhlaWdodCA9IGVsZW1lbnQudGV4dEhlaWdodCE7XG4gICAgY29uc3Qgd2lkdGggPSBlbGVtZW50UmVjdGFuZ2xlLndpZHRoIC0gU2hhcGVEZWZhdWx0U3BhY2UucmVjdGFuZ2xlQW5kVGV4dCAqIDIgLSBzdHJva2VXaWR0aCAqIDI7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICB3aWR0aDogd2lkdGggPiAwID8gd2lkdGggOiAwLFxuICAgICAgICB4OiBlbGVtZW50UmVjdGFuZ2xlLnggKyBTaGFwZURlZmF1bHRTcGFjZS5yZWN0YW5nbGVBbmRUZXh0ICsgc3Ryb2tlV2lkdGgsXG4gICAgICAgIHk6IGVsZW1lbnRSZWN0YW5nbGUueSArIChlbGVtZW50UmVjdGFuZ2xlLmhlaWdodCAtIGhlaWdodCkgLyAyXG4gICAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudCA9IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc1RleHQoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGNvbnN0IHN0cm9rZVdpZHRoID0gZWxlbWVudC5zdHJva2VXaWR0aCB8fCBEZWZhdWx0RHJhd1N0eWxlLnN0cm9rZVdpZHRoO1xuICAgIHJldHVybiBzdHJva2VXaWR0aDtcbn07XG5cbmV4cG9ydCBjb25zdCBpbnNlcnRFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEJhc2VHZW9tZXRyeSB8IFBsYWl0QmFzZVRhYmxlKSA9PiB7XG4gICAgbWVtb3JpemVMYXRlc3RTaGFwZShib2FyZCwgZWxlbWVudC5zaGFwZSk7XG4gICAgVHJhbnNmb3Jtcy5pbnNlcnROb2RlKGJvYXJkLCBlbGVtZW50LCBbYm9hcmQuY2hpbGRyZW4ubGVuZ3RoXSk7XG4gICAgY2xlYXJTZWxlY3RlZEVsZW1lbnQoYm9hcmQpO1xuICAgIGFkZFNlbGVjdGVkRWxlbWVudChib2FyZCwgZWxlbWVudCk7XG4gICAgQm9hcmRUcmFuc2Zvcm1zLnVwZGF0ZVBvaW50ZXJUeXBlKGJvYXJkLCBQbGFpdFBvaW50ZXJUeXBlLnNlbGVjdGlvbik7XG59O1xuXG5leHBvcnQgY29uc3QgaXNEcmF3RWxlbWVudEluY2x1ZGVUZXh0ID0gKGVsZW1lbnQ6IFBsYWl0RHJhd0VsZW1lbnQpID0+IHtcbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc1RleHQoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzSW1hZ2UoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0dlb21ldHJ5KGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBpc0dlb21ldHJ5SW5jbHVkZVRleHQoZWxlbWVudCk7XG4gICAgfVxuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzQXJyb3dMaW5lKGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IGVkaXRvcnMgPSBnZXRUZXh0RWRpdG9yc0J5RWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGVkaXRvcnMubGVuZ3RoID4gMDtcbiAgICB9XG4gICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNFbGVtZW50QnlUYWJsZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5jZWxscy5zb21lKGNlbGwgPT4gaXNDZWxsSW5jbHVkZVRleHQoY2VsbCkpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0RyYXdFbGVtZW50c0luY2x1ZGVUZXh0ID0gKGVsZW1lbnRzOiBQbGFpdERyYXdFbGVtZW50W10pID0+IHtcbiAgICByZXR1cm4gZWxlbWVudHMuc29tZShpdGVtID0+IHtcbiAgICAgICAgcmV0dXJuIGlzRHJhd0VsZW1lbnRJbmNsdWRlVGV4dChpdGVtKTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0Nsb3NlZERyYXdFbGVtZW50ID0gKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzRHJhd0VsZW1lbnQoZWxlbWVudCkpIHtcbiAgICAgICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNUZXh0KGVsZW1lbnQpIHx8IFBsYWl0RHJhd0VsZW1lbnQuaXNBcnJvd0xpbmUoZWxlbWVudCkgfHwgUGxhaXREcmF3RWxlbWVudC5pc0ltYWdlKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNWZWN0b3JMaW5lKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNDbG9zZWRQb2ludHMoZWxlbWVudC5wb2ludHMpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnkoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpc0dlb21ldHJ5Q2xvc2VkKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5leHBvcnQgY29uc3QgaXNDbG9zZWRDdXN0b21HZW9tZXRyeSA9IChib2FyZDogUGxhaXRCb2FyZCwgdmFsdWU6IFBsYWl0RWxlbWVudCk6IHZhbHVlIGlzIFBsYWl0Q3VzdG9tR2VvbWV0cnkgPT4ge1xuICAgIHJldHVybiBQbGFpdERyYXdFbGVtZW50LmlzQ3VzdG9tR2VvbWV0cnlFbGVtZW50KGJvYXJkLCB2YWx1ZSkgJiYgaXNDbG9zZWRQb2ludHModmFsdWUucG9pbnRzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTbmFwcGluZ1NoYXBlID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBwb2ludDogUG9pbnQpOiBQbGFpdFNoYXBlRWxlbWVudCB8IG51bGwgPT4ge1xuICAgIGxldCBoaXRFbGVtZW50OiBQbGFpdFNoYXBlRWxlbWVudCB8IG51bGwgPSBnZXRIaXRTaGFwZShib2FyZCwgcG9pbnQpO1xuICAgIGlmIChoaXRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHJlZiA9IGdldFNuYXBwaW5nUmVmKGJvYXJkLCBoaXRFbGVtZW50LCBwb2ludCk7XG4gICAgICAgIGlmIChyZWYuaXNIaXRDb25uZWN0b3IgfHwgcmVmLmlzSGl0RWRnZSkge1xuICAgICAgICAgICAgcmV0dXJuIGhpdEVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U25hcHBpbmdSZWYgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGhpdEVsZW1lbnQ6IFBsYWl0U2hhcGVFbGVtZW50LCBwb2ludDogUG9pbnQpID0+IHtcbiAgICBjb25zdCByb3RhdGVkUG9pbnQgPSByb3RhdGVBbnRpUG9pbnRzQnlFbGVtZW50KHBvaW50LCBoaXRFbGVtZW50KSB8fCBwb2ludDtcbiAgICBjb25zdCBjb25uZWN0b3JQb2ludCA9IGdldEhpdENvbm5lY3RvclBvaW50KHJvdGF0ZWRQb2ludCwgaGl0RWxlbWVudCk7XG4gICAgY29uc3QgZWRnZVBvaW50ID0gZ2V0TmVhcmVzdFBvaW50KGhpdEVsZW1lbnQsIHJvdGF0ZWRQb2ludCk7XG4gICAgY29uc3QgaXNIaXRFZGdlID0gaXNIaXRFZGdlT2ZTaGFwZShib2FyZCwgaGl0RWxlbWVudCwgcm90YXRlZFBvaW50LCBMSU5FX1NOQVBQSU5HX0JVRkZFUik7XG4gICAgcmV0dXJuIHsgaXNIaXRFZGdlLCBpc0hpdENvbm5lY3RvcjogISFjb25uZWN0b3JQb2ludCwgY29ubmVjdG9yUG9pbnQsIGVkZ2VQb2ludCB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEhpdFNoYXBlID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBwb2ludDogUG9pbnQsIG9mZnNldCA9IExJTkVfSElUX0dFT01FVFJZX0JVRkZFUik6IFBsYWl0U2hhcGVFbGVtZW50IHwgbnVsbCA9PiB7XG4gICAgbGV0IGhpdFNoYXBlOiBQbGFpdFNoYXBlRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICAgIHRyYXZlcnNlRHJhd1NoYXBlcyhib2FyZCwgKGVsZW1lbnQ6IFBsYWl0U2hhcGVFbGVtZW50KSA9PiB7XG4gICAgICAgIGlmIChoaXRTaGFwZSA9PT0gbnVsbCAmJiBpc0luc2lkZU9mU2hhcGUoYm9hcmQsIGVsZW1lbnQsIHJvdGF0ZUFudGlQb2ludHNCeUVsZW1lbnQocG9pbnQsIGVsZW1lbnQpIHx8IHBvaW50LCBvZmZzZXQgKiAyKSkge1xuICAgICAgICAgICAgaGl0U2hhcGUgPSBlbGVtZW50O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGhpdFNoYXBlO1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYXZlcnNlRHJhd1NoYXBlcyA9IChib2FyZDogUGxhaXRCb2FyZCwgY2FsbGJhY2s6IChlbGVtZW50OiBQbGFpdFNoYXBlRWxlbWVudCkgPT4gdm9pZCkgPT4ge1xuICAgIGRlcHRoRmlyc3RSZWN1cnNpb248QW5jZXN0b3I+KFxuICAgICAgICBib2FyZCxcbiAgICAgICAgbm9kZSA9PiB7XG4gICAgICAgICAgICBpZiAoIVBsYWl0Qm9hcmQuaXNCb2FyZChub2RlKSAmJiBQbGFpdERyYXdFbGVtZW50LmlzU2hhcGVFbGVtZW50KG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2sobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdldElzUmVjdXJzaW9uRnVuYyhib2FyZCksXG4gICAgICAgIHRydWVcbiAgICApO1xufTtcblxuZXhwb3J0IGNvbnN0IGRyYXdTaGFwZSA9IChcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBvdXRlclJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LFxuICAgIHNoYXBlOiBEcmF3U2hhcGVzLFxuICAgIHJvdWdoT3B0aW9uczogT3B0aW9ucyxcbiAgICBkcmF3T3B0aW9ucz86IERyYXdPcHRpb25zXG4pID0+IHtcbiAgICByZXR1cm4gZ2V0RW5naW5lKHNoYXBlKS5kcmF3KGJvYXJkLCBvdXRlclJlY3RhbmdsZSwgcm91Z2hPcHRpb25zLCBkcmF3T3B0aW9ucyk7XG59O1xuXG5leHBvcnQgY29uc3QgZHJhd0JvdW5kUmVhY3Rpb24gPSAoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgZWxlbWVudDogUGxhaXRTaGFwZUVsZW1lbnQsXG4gICAgcm91Z2hPcHRpb25zOiB7IGhhc01hc2s6IGJvb2xlYW47IGhhc0Nvbm5lY3RvcjogYm9vbGVhbiB9ID0geyBoYXNNYXNrOiB0cnVlLCBoYXNDb25uZWN0b3I6IHRydWUgfVxuKSA9PiB7XG4gICAgY29uc3QgZyA9IGNyZWF0ZUcoKTtcbiAgICBjb25zdCByZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZWxlbWVudC5wb2ludHMpO1xuICAgIGNvbnN0IGFjdGl2ZVJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5pbmZsYXRlKHJlY3RhbmdsZSwgU05BUFBJTkdfU1RST0tFX1dJRFRIKTtcbiAgICBjb25zdCBzaGFwZSA9IGdldEVsZW1lbnRTaGFwZShlbGVtZW50KTtcbiAgICBsZXQgZHJhd09wdGlvbnM6IERyYXdPcHRpb25zIHwgdW5kZWZpbmVkO1xuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzRWxlbWVudEJ5VGFibGUoZWxlbWVudCkpIHtcbiAgICAgICAgZHJhd09wdGlvbnMgPSB7IGVsZW1lbnQgfTtcbiAgICB9XG4gICAgY29uc3Qgc3Ryb2tlRyA9IGRyYXdTaGFwZShcbiAgICAgICAgYm9hcmQsXG4gICAgICAgIGFjdGl2ZVJlY3RhbmdsZSxcbiAgICAgICAgc2hhcGUsXG4gICAgICAgIHtcbiAgICAgICAgICAgIHN0cm9rZTogU0VMRUNUSU9OX0JPUkRFUl9DT0xPUixcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiBTTkFQUElOR19TVFJPS0VfV0lEVEhcbiAgICAgICAgfSxcbiAgICAgICAgZHJhd09wdGlvbnNcbiAgICApO1xuICAgIGcuYXBwZW5kQ2hpbGQoc3Ryb2tlRyk7XG5cbiAgICBpZiAocm91Z2hPcHRpb25zLmhhc01hc2spIHtcbiAgICAgICAgY29uc3QgbWFza0cgPSBkcmF3U2hhcGUoXG4gICAgICAgICAgICBib2FyZCxcbiAgICAgICAgICAgIGFjdGl2ZVJlY3RhbmdsZSxcbiAgICAgICAgICAgIHNoYXBlLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0cm9rZTogU0VMRUNUSU9OX0JPUkRFUl9DT0xPUixcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMCxcbiAgICAgICAgICAgICAgICBmaWxsOiBpc0Nsb3NlZERyYXdFbGVtZW50KGVsZW1lbnQpID8gU0VMRUNUSU9OX0ZJTExfQ09MT1IgOiBEZWZhdWx0RHJhd1N0eWxlLmZpbGwsXG4gICAgICAgICAgICAgICAgZmlsbFN0eWxlOiAnc29saWQnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZHJhd09wdGlvbnNcbiAgICAgICAgKTtcbiAgICAgICAgZy5hcHBlbmRDaGlsZChtYXNrRyk7XG4gICAgfVxuICAgIGlmIChyb3VnaE9wdGlvbnMuaGFzQ29ubmVjdG9yKSB7XG4gICAgICAgIGNvbnN0IGNvbm5lY3RvclBvaW50cyA9IGdldEVuZ2luZShzaGFwZSkuZ2V0Q29ubmVjdG9yUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgICAgIGNvbm5lY3RvclBvaW50cy5mb3JFYWNoKHBvaW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNpcmNsZUcgPSBkcmF3Q2lyY2xlKFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcoYm9hcmQpLCBwb2ludCwgOCwge1xuICAgICAgICAgICAgICAgIHN0cm9rZTogU0VMRUNUSU9OX0JPUkRFUl9DT0xPUixcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogQUNUSVZFX1NUUk9LRV9XSURUSCxcbiAgICAgICAgICAgICAgICBmaWxsOiAnI0ZGRicsXG4gICAgICAgICAgICAgICAgZmlsbFN0eWxlOiAnc29saWQnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGcuYXBwZW5kQ2hpbGQoY2lyY2xlRyk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUZXh0S2V5ID0gKGVsZW1lbnQ6IFBsYWl0RWxlbWVudCB8IHVuZGVmaW5lZCwgdGV4dDogUGljazxEcmF3VGV4dEluZm8sICdpZCc+KSA9PiB7XG4gICAgaWYgKGVsZW1lbnQgJiYgaXNNdWx0aXBsZVRleHRHZW9tZXRyeShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gYCR7ZWxlbWVudC5pZH0tJHt0ZXh0LmlkfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRleHQuaWQ7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGdldEdlb21ldHJ5QWxpZ24gPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0Q29tbW9uR2VvbWV0cnkgfCBQbGFpdEJhc2VUYWJsZSkgPT4ge1xuICAgIGlmIChpc011bHRpcGxlVGV4dEdlb21ldHJ5KGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IGRyYXdTaGFwZVRleHQgPSBlbGVtZW50LnRleHRzLmZpbmQoaXRlbSA9PiBpdGVtLmlkLmluY2x1ZGVzKEdlb21ldHJ5Q29tbW9uVGV4dEtleXMuY29udGVudCkpO1xuICAgICAgICByZXR1cm4gZHJhd1NoYXBlVGV4dD8udGV4dC5hbGlnbiB8fCBBbGlnbm1lbnQuY2VudGVyO1xuICAgIH1cbiAgICBpZiAoaXNTaW5nbGVUZXh0R2VvbWV0cnkoZWxlbWVudCBhcyBQbGFpdENvbW1vbkdlb21ldHJ5KSkge1xuICAgICAgICByZXR1cm4gKGVsZW1lbnQgYXMgUGxhaXRHZW9tZXRyeSkudGV4dD8uYWxpZ24gfHwgQWxpZ25tZW50LmNlbnRlcjtcbiAgICB9XG5cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0VsZW1lbnRCeVRhYmxlKGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0VGV4dENlbGwgPSBlbGVtZW50LmNlbGxzLmZpbmQoaXRlbSA9PiBpdGVtLnRleHQpO1xuICAgICAgICByZXR1cm4gZmlyc3RUZXh0Q2VsbD8udGV4dD8uYWxpZ24gfHwgQWxpZ25tZW50LmNlbnRlcjtcbiAgICB9XG4gICAgcmV0dXJuIEFsaWdubWVudC5jZW50ZXI7XG59O1xuXG5leHBvcnQgY29uc3QgaXNDbG9zZWRQb2ludHMgPSAocG9pbnRzOiBQb2ludFtdKSA9PiB7XG4gICAgY29uc3Qgc3RhcnRQb2ludCA9IHBvaW50c1swXTtcbiAgICBjb25zdCBlbmRQb2ludCA9IHBvaW50c1twb2ludHMubGVuZ3RoIC0gMV07XG4gICAgcmV0dXJuIHN0YXJ0UG9pbnRbMF0gPT09IGVuZFBvaW50WzBdICYmIHN0YXJ0UG9pbnRbMV0gPT09IGVuZFBvaW50WzFdO1xufTtcbiJdfQ==
181
+ export const getDefaultGeometryText = (board) => {
182
+ return getI18nValue(board, DrawI18nKey.geometryText, DefaultTextProperty.text);
183
+ };
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvdXRpbHMvY29tbW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxtQkFBbUIsRUFDbkIsa0JBQWtCLEVBRWxCLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsT0FBTyxFQUNQLG1CQUFtQixFQUNuQixVQUFVLEVBQ1YsWUFBWSxFQUNaLGtCQUFrQixFQUNsQixVQUFVLEVBRVYsZ0JBQWdCLEVBRWhCLGVBQWUsRUFDZix5QkFBeUIsRUFDekIsc0JBQXNCLEVBQ3RCLG9CQUFvQixFQUNwQixxQkFBcUIsRUFDckIsVUFBVSxFQUNiLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFDSCxnQkFBZ0IsRUFDaEIsbUJBQW1CLEVBQ25CLFdBQVcsRUFDWCx3QkFBd0IsRUFDeEIsb0JBQW9CLEVBQ3BCLGlCQUFpQixFQUNwQixNQUFNLGNBQWMsQ0FBQztBQUN0QixPQUFPLEVBR0gsc0JBQXNCLEVBSXRCLGdCQUFnQixFQUduQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM1QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFHMUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDMUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVB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RUYsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7SUFDeEQsT0FBTyxZQUFZLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDbkYsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBQ1RJVkVfU1RST0tFX1dJRFRILFxuICAgIGFkZFNlbGVjdGVkRWxlbWVudCxcbiAgICBBbmNlc3RvcixcbiAgICBCb2FyZFRyYW5zZm9ybXMsXG4gICAgY2xlYXJTZWxlY3RlZEVsZW1lbnQsXG4gICAgY3JlYXRlRyxcbiAgICBkZXB0aEZpcnN0UmVjdXJzaW9uLFxuICAgIGRyYXdDaXJjbGUsXG4gICAgZ2V0STE4blZhbHVlLFxuICAgIGdldElzUmVjdXJzaW9uRnVuYyxcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBsYWl0RWxlbWVudCxcbiAgICBQbGFpdFBvaW50ZXJUeXBlLFxuICAgIFBvaW50LFxuICAgIFJlY3RhbmdsZUNsaWVudCxcbiAgICByb3RhdGVBbnRpUG9pbnRzQnlFbGVtZW50LFxuICAgIFNFTEVDVElPTl9CT1JERVJfQ09MT1IsXG4gICAgU0VMRUNUSU9OX0ZJTExfQ09MT1IsXG4gICAgU05BUFBJTkdfU1RST0tFX1dJRFRILFxuICAgIFRyYW5zZm9ybXNcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHtcbiAgICBEZWZhdWx0RHJhd1N0eWxlLFxuICAgIERlZmF1bHRUZXh0UHJvcGVydHksXG4gICAgRHJhd0kxOG5LZXksXG4gICAgTElORV9ISVRfR0VPTUVUUllfQlVGRkVSLFxuICAgIExJTkVfU05BUFBJTkdfQlVGRkVSLFxuICAgIFNoYXBlRGVmYXVsdFNwYWNlXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICAgIERyYXdPcHRpb25zLFxuICAgIERyYXdTaGFwZXMsXG4gICAgR2VvbWV0cnlDb21tb25UZXh0S2V5cyxcbiAgICBQbGFpdEJhc2VHZW9tZXRyeSxcbiAgICBQbGFpdENvbW1vbkdlb21ldHJ5LFxuICAgIFBsYWl0Q3VzdG9tR2VvbWV0cnksXG4gICAgUGxhaXREcmF3RWxlbWVudCxcbiAgICBQbGFpdEdlb21ldHJ5LFxuICAgIFBsYWl0U2hhcGVFbGVtZW50XG59IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQWxpZ25tZW50LCBnZXRUZXh0RWRpdG9yc0J5RWxlbWVudCB9IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHsgaXNDZWxsSW5jbHVkZVRleHQgfSBmcm9tICcuL3RhYmxlJztcbmltcG9ydCB7IGdldEVuZ2luZSB9IGZyb20gJy4uL2VuZ2luZXMnO1xuaW1wb3J0IHsgZ2V0RWxlbWVudFNoYXBlIH0gZnJvbSAnLi9zaGFwZSc7XG5pbXBvcnQgeyBPcHRpb25zIH0gZnJvbSAncm91Z2hqcy9iaW4vY29yZSc7XG5pbXBvcnQgeyBQbGFpdEJhc2VUYWJsZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvdGFibGUnO1xuaW1wb3J0IHsgbWVtb3JpemVMYXRlc3RTaGFwZSB9IGZyb20gJy4vbWVtb3JpemUnO1xuaW1wb3J0IHsgaXNIaXRFZGdlT2ZTaGFwZSwgaXNJbnNpZGVPZlNoYXBlIH0gZnJvbSAnLi9oaXQnO1xuaW1wb3J0IHsgZ2V0SGl0Q29ubmVjdG9yUG9pbnQgfSBmcm9tICcuL2Fycm93LWxpbmUnO1xuaW1wb3J0IHsgZ2V0TmVhcmVzdFBvaW50LCBpc0dlb21ldHJ5Q2xvc2VkLCBpc0dlb21ldHJ5SW5jbHVkZVRleHQsIGlzU2luZ2xlVGV4dEdlb21ldHJ5IH0gZnJvbSAnLi9nZW9tZXRyeSc7XG5pbXBvcnQgeyBpc011bHRpcGxlVGV4dEdlb21ldHJ5IH0gZnJvbSAnLi9tdWx0aS10ZXh0LWdlb21ldHJ5JztcbmltcG9ydCB7IERyYXdUZXh0SW5mbyB9IGZyb20gJy4uL2dlbmVyYXRvcnMvdGV4dC5nZW5lcmF0b3InO1xuXG5leHBvcnQgY29uc3QgZ2V0VGV4dFJlY3RhbmdsZSA9IDxUIGV4dGVuZHMgUGxhaXRFbGVtZW50ID0gUGxhaXRHZW9tZXRyeT4oZWxlbWVudDogVCkgPT4ge1xuICAgIGNvbnN0IGVsZW1lbnRSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZWxlbWVudC5wb2ludHMhKTtcbiAgICBjb25zdCBzdHJva2VXaWR0aCA9IGdldFN0cm9rZVdpZHRoQnlFbGVtZW50KGVsZW1lbnQpO1xuICAgIGNvbnN0IGhlaWdodCA9IGVsZW1lbnQudGV4dEhlaWdodCE7XG4gICAgY29uc3Qgd2lkdGggPSBlbGVtZW50UmVjdGFuZ2xlLndpZHRoIC0gU2hhcGVEZWZhdWx0U3BhY2UucmVjdGFuZ2xlQW5kVGV4dCAqIDIgLSBzdHJva2VXaWR0aCAqIDI7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaGVpZ2h0LFxuICAgICAgICB3aWR0aDogd2lkdGggPiAwID8gd2lkdGggOiAwLFxuICAgICAgICB4OiBlbGVtZW50UmVjdGFuZ2xlLnggKyBTaGFwZURlZmF1bHRTcGFjZS5yZWN0YW5nbGVBbmRUZXh0ICsgc3Ryb2tlV2lkdGgsXG4gICAgICAgIHk6IGVsZW1lbnRSZWN0YW5nbGUueSArIChlbGVtZW50UmVjdGFuZ2xlLmhlaWdodCAtIGhlaWdodCkgLyAyXG4gICAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudCA9IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc1RleHQoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGNvbnN0IHN0cm9rZVdpZHRoID0gZWxlbWVudC5zdHJva2VXaWR0aCB8fCBEZWZhdWx0RHJhd1N0eWxlLnN0cm9rZVdpZHRoO1xuICAgIHJldHVybiBzdHJva2VXaWR0aDtcbn07XG5cbmV4cG9ydCBjb25zdCBpbnNlcnRFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEJhc2VHZW9tZXRyeSB8IFBsYWl0QmFzZVRhYmxlKSA9PiB7XG4gICAgbWVtb3JpemVMYXRlc3RTaGFwZShib2FyZCwgZWxlbWVudC5zaGFwZSk7XG4gICAgVHJhbnNmb3Jtcy5pbnNlcnROb2RlKGJvYXJkLCBlbGVtZW50LCBbYm9hcmQuY2hpbGRyZW4ubGVuZ3RoXSk7XG4gICAgY2xlYXJTZWxlY3RlZEVsZW1lbnQoYm9hcmQpO1xuICAgIGFkZFNlbGVjdGVkRWxlbWVudChib2FyZCwgZWxlbWVudCk7XG4gICAgQm9hcmRUcmFuc2Zvcm1zLnVwZGF0ZVBvaW50ZXJUeXBlKGJvYXJkLCBQbGFpdFBvaW50ZXJUeXBlLnNlbGVjdGlvbik7XG59O1xuXG5leHBvcnQgY29uc3QgaXNEcmF3RWxlbWVudEluY2x1ZGVUZXh0ID0gKGVsZW1lbnQ6IFBsYWl0RHJhd0VsZW1lbnQpID0+IHtcbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc1RleHQoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzSW1hZ2UoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0dlb21ldHJ5KGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybiBpc0dlb21ldHJ5SW5jbHVkZVRleHQoZWxlbWVudCk7XG4gICAgfVxuICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzQXJyb3dMaW5lKGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IGVkaXRvcnMgPSBnZXRUZXh0RWRpdG9yc0J5RWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGVkaXRvcnMubGVuZ3RoID4gMDtcbiAgICB9XG4gICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNFbGVtZW50QnlUYWJsZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5jZWxscy5zb21lKChjZWxsKSA9PiBpc0NlbGxJbmNsdWRlVGV4dChjZWxsKSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzRHJhd0VsZW1lbnRzSW5jbHVkZVRleHQgPSAoZWxlbWVudHM6IFBsYWl0RHJhd0VsZW1lbnRbXSkgPT4ge1xuICAgIHJldHVybiBlbGVtZW50cy5zb21lKChpdGVtKSA9PiB7XG4gICAgICAgIHJldHVybiBpc0RyYXdFbGVtZW50SW5jbHVkZVRleHQoaXRlbSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNDbG9zZWREcmF3RWxlbWVudCA9IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0RyYXdFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzVGV4dChlbGVtZW50KSB8fCBQbGFpdERyYXdFbGVtZW50LmlzQXJyb3dMaW5lKGVsZW1lbnQpIHx8IFBsYWl0RHJhd0VsZW1lbnQuaXNJbWFnZShlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChQbGFpdERyYXdFbGVtZW50LmlzVmVjdG9yTGluZShlbGVtZW50KSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQ2xvc2VkUG9pbnRzKGVsZW1lbnQucG9pbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0dlb21ldHJ5KGVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNHZW9tZXRyeUNsb3NlZChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQ2xvc2VkQ3VzdG9tR2VvbWV0cnkgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHZhbHVlOiBQbGFpdEVsZW1lbnQpOiB2YWx1ZSBpcyBQbGFpdEN1c3RvbUdlb21ldHJ5ID0+IHtcbiAgICByZXR1cm4gUGxhaXREcmF3RWxlbWVudC5pc0N1c3RvbUdlb21ldHJ5RWxlbWVudChib2FyZCwgdmFsdWUpICYmIGlzQ2xvc2VkUG9pbnRzKHZhbHVlLnBvaW50cyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U25hcHBpbmdTaGFwZSA9IChib2FyZDogUGxhaXRCb2FyZCwgcG9pbnQ6IFBvaW50KTogUGxhaXRTaGFwZUVsZW1lbnQgfCBudWxsID0+IHtcbiAgICBsZXQgaGl0RWxlbWVudDogUGxhaXRTaGFwZUVsZW1lbnQgfCBudWxsID0gZ2V0SGl0U2hhcGUoYm9hcmQsIHBvaW50KTtcbiAgICBpZiAoaGl0RWxlbWVudCkge1xuICAgICAgICBjb25zdCByZWYgPSBnZXRTbmFwcGluZ1JlZihib2FyZCwgaGl0RWxlbWVudCwgcG9pbnQpO1xuICAgICAgICBpZiAocmVmLmlzSGl0Q29ubmVjdG9yIHx8IHJlZi5pc0hpdEVkZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiBoaXRFbGVtZW50O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNuYXBwaW5nUmVmID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBoaXRFbGVtZW50OiBQbGFpdFNoYXBlRWxlbWVudCwgcG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgY29uc3Qgcm90YXRlZFBvaW50ID0gcm90YXRlQW50aVBvaW50c0J5RWxlbWVudChib2FyZCwgcG9pbnQsIGhpdEVsZW1lbnQpIHx8IHBvaW50O1xuICAgIGNvbnN0IGNvbm5lY3RvclBvaW50ID0gZ2V0SGl0Q29ubmVjdG9yUG9pbnQocm90YXRlZFBvaW50LCBoaXRFbGVtZW50KTtcbiAgICBjb25zdCBlZGdlUG9pbnQgPSBnZXROZWFyZXN0UG9pbnQoaGl0RWxlbWVudCwgcm90YXRlZFBvaW50KTtcbiAgICBjb25zdCBpc0hpdEVkZ2UgPSBpc0hpdEVkZ2VPZlNoYXBlKGJvYXJkLCBoaXRFbGVtZW50LCByb3RhdGVkUG9pbnQsIExJTkVfU05BUFBJTkdfQlVGRkVSKTtcbiAgICByZXR1cm4geyBpc0hpdEVkZ2UsIGlzSGl0Q29ubmVjdG9yOiAhIWNvbm5lY3RvclBvaW50LCBjb25uZWN0b3JQb2ludCwgZWRnZVBvaW50IH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGl0U2hhcGUgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHBvaW50OiBQb2ludCwgb2Zmc2V0ID0gTElORV9ISVRfR0VPTUVUUllfQlVGRkVSKTogUGxhaXRTaGFwZUVsZW1lbnQgfCBudWxsID0+IHtcbiAgICBsZXQgaGl0U2hhcGU6IFBsYWl0U2hhcGVFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gICAgdHJhdmVyc2VEcmF3U2hhcGVzKGJvYXJkLCAoZWxlbWVudDogUGxhaXRTaGFwZUVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKGhpdFNoYXBlID09PSBudWxsICYmIGlzSW5zaWRlT2ZTaGFwZShib2FyZCwgZWxlbWVudCwgcm90YXRlQW50aVBvaW50c0J5RWxlbWVudChib2FyZCwgcG9pbnQsIGVsZW1lbnQpIHx8IHBvaW50LCBvZmZzZXQgKiAyKSkge1xuICAgICAgICAgICAgaGl0U2hhcGUgPSBlbGVtZW50O1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGhpdFNoYXBlO1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYXZlcnNlRHJhd1NoYXBlcyA9IChib2FyZDogUGxhaXRCb2FyZCwgY2FsbGJhY2s6IChlbGVtZW50OiBQbGFpdFNoYXBlRWxlbWVudCkgPT4gdm9pZCkgPT4ge1xuICAgIGRlcHRoRmlyc3RSZWN1cnNpb248QW5jZXN0b3I+KFxuICAgICAgICBib2FyZCxcbiAgICAgICAgKG5vZGUpID0+IHtcbiAgICAgICAgICAgIGlmICghUGxhaXRCb2FyZC5pc0JvYXJkKG5vZGUpICYmIFBsYWl0RHJhd0VsZW1lbnQuaXNTaGFwZUVsZW1lbnQobm9kZSkpIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ2V0SXNSZWN1cnNpb25GdW5jKGJvYXJkKSxcbiAgICAgICAgdHJ1ZVxuICAgICk7XG59O1xuXG5leHBvcnQgY29uc3QgZHJhd1NoYXBlID0gKFxuICAgIGJvYXJkOiBQbGFpdEJvYXJkLFxuICAgIG91dGVyUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsXG4gICAgc2hhcGU6IERyYXdTaGFwZXMsXG4gICAgcm91Z2hPcHRpb25zOiBPcHRpb25zLFxuICAgIGRyYXdPcHRpb25zPzogRHJhd09wdGlvbnNcbikgPT4ge1xuICAgIHJldHVybiBnZXRFbmdpbmUoc2hhcGUpLmRyYXcoYm9hcmQsIG91dGVyUmVjdGFuZ2xlLCByb3VnaE9wdGlvbnMsIGRyYXdPcHRpb25zKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkcmF3Qm91bmRSZWFjdGlvbiA9IChcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBlbGVtZW50OiBQbGFpdFNoYXBlRWxlbWVudCxcbiAgICByb3VnaE9wdGlvbnM6IHsgaGFzTWFzazogYm9vbGVhbjsgaGFzQ29ubmVjdG9yOiBib29sZWFuIH0gPSB7IGhhc01hc2s6IHRydWUsIGhhc0Nvbm5lY3RvcjogdHJ1ZSB9XG4pID0+IHtcbiAgICBjb25zdCBnID0gY3JlYXRlRygpO1xuICAgIGNvbnN0IHJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhlbGVtZW50LnBvaW50cyk7XG4gICAgY29uc3QgYWN0aXZlUmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmluZmxhdGUocmVjdGFuZ2xlLCBTTkFQUElOR19TVFJPS0VfV0lEVEgpO1xuICAgIGNvbnN0IHNoYXBlID0gZ2V0RWxlbWVudFNoYXBlKGVsZW1lbnQpO1xuICAgIGxldCBkcmF3T3B0aW9uczogRHJhd09wdGlvbnMgfCB1bmRlZmluZWQ7XG4gICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNFbGVtZW50QnlUYWJsZShlbGVtZW50KSkge1xuICAgICAgICBkcmF3T3B0aW9ucyA9IHsgZWxlbWVudCB9O1xuICAgIH1cbiAgICBjb25zdCBzdHJva2VHID0gZHJhd1NoYXBlKFxuICAgICAgICBib2FyZCxcbiAgICAgICAgYWN0aXZlUmVjdGFuZ2xlLFxuICAgICAgICBzaGFwZSxcbiAgICAgICAge1xuICAgICAgICAgICAgc3Ryb2tlOiBTRUxFQ1RJT05fQk9SREVSX0NPTE9SLFxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IFNOQVBQSU5HX1NUUk9LRV9XSURUSFxuICAgICAgICB9LFxuICAgICAgICBkcmF3T3B0aW9uc1xuICAgICk7XG4gICAgZy5hcHBlbmRDaGlsZChzdHJva2VHKTtcblxuICAgIGlmIChyb3VnaE9wdGlvbnMuaGFzTWFzaykge1xuICAgICAgICBjb25zdCBtYXNrRyA9IGRyYXdTaGFwZShcbiAgICAgICAgICAgIGJvYXJkLFxuICAgICAgICAgICAgYWN0aXZlUmVjdGFuZ2xlLFxuICAgICAgICAgICAgc2hhcGUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3Ryb2tlOiBTRUxFQ1RJT05fQk9SREVSX0NPTE9SLFxuICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiAwLFxuICAgICAgICAgICAgICAgIGZpbGw6IGlzQ2xvc2VkRHJhd0VsZW1lbnQoZWxlbWVudCkgPyBTRUxFQ1RJT05fRklMTF9DT0xPUiA6IERlZmF1bHREcmF3U3R5bGUuZmlsbCxcbiAgICAgICAgICAgICAgICBmaWxsU3R5bGU6ICdzb2xpZCdcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBkcmF3T3B0aW9uc1xuICAgICAgICApO1xuICAgICAgICBnLmFwcGVuZENoaWxkKG1hc2tHKTtcbiAgICB9XG4gICAgaWYgKHJvdWdoT3B0aW9ucy5oYXNDb25uZWN0b3IpIHtcbiAgICAgICAgY29uc3QgY29ubmVjdG9yUG9pbnRzID0gZ2V0RW5naW5lKHNoYXBlKS5nZXRDb25uZWN0b3JQb2ludHMocmVjdGFuZ2xlKTtcbiAgICAgICAgY29ubmVjdG9yUG9pbnRzLmZvckVhY2goKHBvaW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjaXJjbGVHID0gZHJhd0NpcmNsZShQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKGJvYXJkKSwgcG9pbnQsIDgsIHtcbiAgICAgICAgICAgICAgICBzdHJva2U6IFNFTEVDVElPTl9CT1JERVJfQ09MT1IsXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IEFDVElWRV9TVFJPS0VfV0lEVEgsXG4gICAgICAgICAgICAgICAgZmlsbDogJyNGRkYnLFxuICAgICAgICAgICAgICAgIGZpbGxTdHlsZTogJ3NvbGlkJ1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBnLmFwcGVuZENoaWxkKGNpcmNsZUcpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGc7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGV4dEtleSA9IChlbGVtZW50OiBQbGFpdEVsZW1lbnQgfCB1bmRlZmluZWQsIHRleHQ6IFBpY2s8RHJhd1RleHRJbmZvLCAnaWQnPikgPT4ge1xuICAgIGlmIChlbGVtZW50ICYmIGlzTXVsdGlwbGVUZXh0R2VvbWV0cnkoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGAke2VsZW1lbnQuaWR9LSR7dGV4dC5pZH1gO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0ZXh0LmlkO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRHZW9tZXRyeUFsaWduID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdENvbW1vbkdlb21ldHJ5IHwgUGxhaXRCYXNlVGFibGUpID0+IHtcbiAgICBpZiAoaXNNdWx0aXBsZVRleHRHZW9tZXRyeShlbGVtZW50KSkge1xuICAgICAgICBjb25zdCBkcmF3U2hhcGVUZXh0ID0gZWxlbWVudC50ZXh0cy5maW5kKChpdGVtKSA9PiBpdGVtLmlkLmluY2x1ZGVzKEdlb21ldHJ5Q29tbW9uVGV4dEtleXMuY29udGVudCkpO1xuICAgICAgICByZXR1cm4gZHJhd1NoYXBlVGV4dD8udGV4dC5hbGlnbiB8fCBBbGlnbm1lbnQuY2VudGVyO1xuICAgIH1cbiAgICBpZiAoaXNTaW5nbGVUZXh0R2VvbWV0cnkoZWxlbWVudCBhcyBQbGFpdENvbW1vbkdlb21ldHJ5KSkge1xuICAgICAgICByZXR1cm4gKGVsZW1lbnQgYXMgUGxhaXRHZW9tZXRyeSkudGV4dD8uYWxpZ24gfHwgQWxpZ25tZW50LmNlbnRlcjtcbiAgICB9XG5cbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0VsZW1lbnRCeVRhYmxlKGVsZW1lbnQpKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0VGV4dENlbGwgPSBlbGVtZW50LmNlbGxzLmZpbmQoKGl0ZW0pID0+IGl0ZW0udGV4dCk7XG4gICAgICAgIHJldHVybiBmaXJzdFRleHRDZWxsPy50ZXh0Py5hbGlnbiB8fCBBbGlnbm1lbnQuY2VudGVyO1xuICAgIH1cbiAgICByZXR1cm4gQWxpZ25tZW50LmNlbnRlcjtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0Nsb3NlZFBvaW50cyA9IChwb2ludHM6IFBvaW50W10pID0+IHtcbiAgICBjb25zdCBzdGFydFBvaW50ID0gcG9pbnRzWzBdO1xuICAgIGNvbnN0IGVuZFBvaW50ID0gcG9pbnRzW3BvaW50cy5sZW5ndGggLSAxXTtcbiAgICByZXR1cm4gc3RhcnRQb2ludFswXSA9PT0gZW5kUG9pbnRbMF0gJiYgc3RhcnRQb2ludFsxXSA9PT0gZW5kUG9pbnRbMV07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGVmYXVsdEdlb21ldHJ5VGV4dCA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIHJldHVybiBnZXRJMThuVmFsdWUoYm9hcmQsIERyYXdJMThuS2V5Lmdlb21ldHJ5VGV4dCwgRGVmYXVsdFRleHRQcm9wZXJ0eS50ZXh0KTtcbn07XG4iXX0=
@@ -1,12 +1,10 @@
1
- import { PlaitBoard, PlaitElement, RectangleClient, getSelectedElements, idCreator } from '@plait/core';
2
- import { BasicShapes, FlowchartSymbols } from '../interfaces/geometry';
1
+ import { RectangleClient, idCreator, toActiveRectangleFromViewBoxRectangle } from '@plait/core';
2
+ import { BasicShapes } from '../interfaces/geometry';
3
3
  import { DefaultBasicShapeProperty, DefaultBasicShapePropertyMap, DefaultFlowchartPropertyMap, DefaultTextProperty, DefaultUMLPropertyMap, DrawThemeColors, GEOMETRY_NOT_CLOSED, GEOMETRY_WITHOUT_TEXT, ShapeDefaultSpace, getFlowchartPointers, getUMLPointers } from '../constants';
4
- import { ActiveGenerator, Alignment, DEFAULT_FONT_FAMILY, RESIZE_HANDLE_DIAMETER, buildText, getFirstTextManage, measureElement } from '@plait/common';
4
+ import { Alignment, DEFAULT_FONT_FAMILY, RESIZE_HANDLE_DIAMETER, buildText, getFirstTextManage, measureElement } from '@plait/common';
5
5
  import { getEngine } from '../engines';
6
6
  import { getElementShape } from './shape';
7
- import { createArrowLineElement } from './arrow-line/arrow-line-basic';
8
- import { ArrowLineMarkerType, ArrowLineShape, PlaitDrawElement } from '../interfaces';
9
- import { DefaultLineStyle } from '../constants/line';
7
+ import { PlaitDrawElement } from '../interfaces';
10
8
  import { getMemorizedLatestByPointer } from './memorize';
11
9
  import { getTextManage } from '../generators/text.generator';
12
10
  import { createUMLClassOrInterfaceGeometryElement } from './uml';
@@ -82,66 +80,12 @@ export const getDefaultBasicShapeProperty = (shape) => {
82
80
  export const getDefaultUMLProperty = (shape) => {
83
81
  return DefaultUMLPropertyMap[shape];
84
82
  };
85
- export const createDefaultFlowchart = (point) => {
86
- const decisionProperty = getDefaultFlowchartProperty(FlowchartSymbols.decision);
87
- const processProperty = getDefaultFlowchartProperty(FlowchartSymbols.process);
88
- const terminalProperty = getDefaultFlowchartProperty(FlowchartSymbols.terminal);
89
- const options = {
90
- strokeWidth: DefaultBasicShapeProperty.strokeWidth
91
- };
92
- const lineOptions = {
93
- strokeWidth: DefaultLineStyle.strokeWidth
94
- };
95
- const startElement = createGeometryElement(FlowchartSymbols.terminal, getDefaultGeometryPoints(FlowchartSymbols.terminal, point), '开始', options);
96
- const processPoint1 = [point[0], point[1] + terminalProperty.height / 2 + 55 + processProperty.height / 2];
97
- const processElement1 = createGeometryElement(FlowchartSymbols.process, getDefaultGeometryPoints(FlowchartSymbols.process, processPoint1), '过程', options);
98
- const decisionPoint = [processPoint1[0], processPoint1[1] + processProperty.height / 2 + 55 + decisionProperty.height / 2];
99
- const decisionElement = createGeometryElement(FlowchartSymbols.decision, getDefaultGeometryPoints(FlowchartSymbols.decision, decisionPoint), '判断', options);
100
- const processPoint2 = [decisionPoint[0] + decisionProperty.width / 2 + 75 + processProperty.width / 2, decisionPoint[1]];
101
- const processElement2 = createGeometryElement(FlowchartSymbols.process, getDefaultGeometryPoints(FlowchartSymbols.process, processPoint2), '过程', options);
102
- const endPoint = [decisionPoint[0], decisionPoint[1] + decisionProperty.height / 2 + 95 + terminalProperty.height / 2];
103
- const endElement = createGeometryElement(FlowchartSymbols.terminal, getDefaultGeometryPoints(FlowchartSymbols.terminal, endPoint), '结束', options);
104
- const line1 = createArrowLineElement(ArrowLineShape.elbow, [
105
- [0, 0],
106
- [0, 0]
107
- ], { marker: ArrowLineMarkerType.none, connection: [0.5, 1], boundId: startElement.id }, { marker: ArrowLineMarkerType.arrow, connection: [0.5, 0], boundId: processElement1.id }, [], lineOptions);
108
- const line2 = createArrowLineElement(ArrowLineShape.elbow, [
109
- [0, 0],
110
- [0, 0]
111
- ], { marker: ArrowLineMarkerType.none, connection: [0.5, 1], boundId: processElement1.id }, { marker: ArrowLineMarkerType.arrow, connection: [0.5, 0], boundId: decisionElement.id }, [], lineOptions);
112
- const line3 = createArrowLineElement(ArrowLineShape.elbow, [
113
- [0, 0],
114
- [0, 0]
115
- ], { marker: ArrowLineMarkerType.none, connection: [0.5, 1], boundId: decisionElement.id }, { marker: ArrowLineMarkerType.arrow, connection: [0.5, 0], boundId: endElement.id }, [
116
- {
117
- text: buildText('是'),
118
- position: 0.5,
119
- width: 14,
120
- height: 20
121
- }
122
- ], lineOptions);
123
- const line4 = createArrowLineElement(ArrowLineShape.elbow, [
124
- [0, 0],
125
- [0, 0]
126
- ], { marker: ArrowLineMarkerType.none, connection: [1, 0.5], boundId: decisionElement.id }, { marker: ArrowLineMarkerType.arrow, connection: [0, 0.5], boundId: processElement2.id }, [
127
- {
128
- text: buildText('否'),
129
- position: 0.5,
130
- width: 14,
131
- height: 20
132
- }
133
- ], lineOptions);
134
- const line5 = createArrowLineElement(ArrowLineShape.elbow, [
135
- [0, 0],
136
- [0, 0]
137
- ], { marker: ArrowLineMarkerType.none, connection: [0.5, 1], boundId: processElement2.id }, { marker: ArrowLineMarkerType.arrow, connection: [1, 0.5], boundId: endElement.id }, [], lineOptions);
138
- return [startElement, processElement1, decisionElement, processElement2, endElement, line1, line2, line3, line4, line5];
139
- };
140
- export const getAutoCompletePoints = (element) => {
83
+ export const getAutoCompletePoints = (board, element, isToActive = false) => {
141
84
  const AutoCompleteMargin = (12 + RESIZE_HANDLE_DIAMETER / 2) * 2;
142
- let rectangle = RectangleClient.getRectangleByPoints(element.points);
143
- rectangle = RectangleClient.inflate(rectangle, AutoCompleteMargin);
144
- return RectangleClient.getEdgeCenterPoints(rectangle);
85
+ const rectangle = RectangleClient.getRectangleByPoints(element.points);
86
+ const activeRectangle = toActiveRectangleFromViewBoxRectangle(board, rectangle);
87
+ const targetRectangle = isToActive ? activeRectangle : rectangle;
88
+ return RectangleClient.getEdgeCenterPoints(RectangleClient.inflate(targetRectangle, AutoCompleteMargin));
145
89
  };
146
90
  export const getHitIndexOfAutoCompletePoint = (movingPoint, points) => {
147
91
  return points.findIndex((point) => {
@@ -157,7 +101,7 @@ export const getDrawDefaultStrokeColor = (theme) => {
157
101
  export const getFlowchartDefaultFill = (theme) => {
158
102
  return DrawThemeColors[theme].fill;
159
103
  };
160
- export const getTextShapeProperty = (board, text = DefaultTextProperty.text, fontSize) => {
104
+ export const getTextShapeProperty = (board, text, fontSize) => {
161
105
  fontSize = fontSize ? Number(fontSize) : DEFAULT_FONT_SIZE;
162
106
  const textSize = measureElement(buildText(text), { fontSize, fontFamily: DEFAULT_FONT_FAMILY });
163
107
  return {
@@ -186,7 +130,7 @@ export const getDefaultTextPoints = (board, centerPoint, fontSize) => {
186
130
  const property = getTextShapeProperty(board, DefaultTextProperty.text, fontSize);
187
131
  return RectangleClient.getPoints(RectangleClient.getRectangleByCenterPoint(centerPoint, property.width, property.height));
188
132
  };
189
- export const createTextElement = (board, points, text = DefaultTextProperty.text, textHeight) => {
133
+ export const createTextElement = (board, points, text, textHeight) => {
190
134
  const memorizedLatest = getMemorizedLatestByPointer(BasicShapes.text);
191
135
  textHeight = textHeight ? textHeight : RectangleClient.getRectangleByPoints(points).height;
192
136
  return createGeometryElement(BasicShapes.text, points, text, memorizedLatest.geometryProperties, {
@@ -219,12 +163,6 @@ export const editText = (board, element, text) => {
219
163
  textManage.edit(() => { });
220
164
  }
221
165
  };
222
- export const rerenderGeometryActive = (board, element) => {
223
- const elementRef = PlaitElement.getElementRef(element);
224
- const activeGenerator = elementRef.getGenerator(ActiveGenerator.key);
225
- const selected = getSelectedElements(board).includes(element);
226
- activeGenerator.processDrawing(element, PlaitBoard.getElementActiveHost(board), { selected });
227
- };
228
166
  export const isGeometryIncludeText = (element) => {
229
167
  return isSingleTextGeometry(element) || isMultipleTextGeometry(element);
230
168
  };
@@ -237,4 +175,4 @@ export const isSingleTextGeometry = (element) => {
237
175
  export const isGeometryClosed = (element) => {
238
176
  return !GEOMETRY_NOT_CLOSED.includes(element.shape);
239
177
  };
240
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbWV0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy91dGlscy9nZW9tZXRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsVUFBVSxFQUNWLFlBQVksRUFFWixlQUFlLEVBRWYsbUJBQW1CLEVBQ25CLFNBQVMsRUFDWixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQWtCLFdBQVcsRUFBaUIsZ0JBQWdCLEVBQWMsTUFBTSx3QkFBd0IsQ0FBQztBQUVsSCxPQUFPLEVBQ0gseUJBQXlCLEVBQ3pCLDRCQUE0QixFQUM1QiwyQkFBMkIsRUFDM0IsbUJBQW1CLEVBQ25CLHFCQUFxQixFQUVyQixlQUFlLEVBQ2YsbUJBQW1CLEVBQ25CLHFCQUFxQixFQUNyQixpQkFBaUIsRUFDakIsb0JBQW9CLEVBQ3BCLGNBQWMsRUFDakIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUNILGVBQWUsRUFDZixTQUFTLEVBRVQsbUJBQW1CLEVBRW5CLHNCQUFzQixFQUN0QixTQUFTLEVBQ1Qsa0JBQWtCLEVBQ2xCLGNBQWMsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxjQUFjLEVBQUUsZ0JBQWdCLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3JELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6RCxPQUFPLEVBQWdCLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzNFLE9BQU8sRUFBRSx3Q0FB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QyxjQUFjLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDbEcsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxPQUFzQixFQUFFLEVBQUU7SUFDNUQsT0FBTyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM1RSxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEtBQXFCLEVBQUUsRUFBRTtJQUN2RCxPQUFPLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDakYsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxPQUFzQixFQUFFLEVBQUU7SUFDM0QsT0FBTyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksaUJBQWlCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BGLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsT0FBc0IsRUFBRSxFQUFFO0lBQ3ZELE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3hELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgUGxhaXRCb2FyZCxcbiAgICBQbGFpdEVsZW1lbnQsXG4gICAgUG9pbnQsXG4gICAgUmVjdGFuZ2xlQ2xpZW50LFxuICAgIFRoZW1lQ29sb3JNb2RlLFxuICAgIGdldFNlbGVjdGVkRWxlbWVudHMsXG4gICAgaWRDcmVhdG9yXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IEdlb21ldHJ5U2hhcGVzLCBCYXNpY1NoYXBlcywgUGxhaXRHZW9tZXRyeSwgRmxvd2NoYXJ0U3ltYm9scywgVU1MU3ltYm9scyB9IGZyb20gJy4uL2ludGVyZmFjZXMvZ2VvbWV0cnknO1xuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7XG4gICAgRGVmYXVsdEJhc2ljU2hhcGVQcm9wZXJ0eSxcbiAgICBEZWZhdWx0QmFzaWNTaGFwZVByb3BlcnR5TWFwLFxuICAgIERlZmF1bHRGbG93Y2hhcnRQcm9wZXJ0eU1hcCxcbiAgICBEZWZhdWx0VGV4dFByb3BlcnR5LFxuICAgIERlZmF1bHRVTUxQcm9wZXJ0eU1hcCxcbiAgICBEcmF3UG9pbnRlclR5cGUsXG4gICAgRHJhd1RoZW1lQ29sb3JzLFxuICAgIEdFT01FVFJZX05PVF9DTE9TRUQsXG4gICAgR0VPTUVUUllfV0lUSE9VVF9URVhULFxuICAgIFNoYXBlRGVmYXVsdFNwYWNlLFxuICAgIGdldEZsb3djaGFydFBvaW50ZXJzLFxuICAgIGdldFVNTFBvaW50ZXJzXG59IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICAgIEFjdGl2ZUdlbmVyYXRvcixcbiAgICBBbGlnbm1lbnQsXG4gICAgQ3VzdG9tVGV4dCxcbiAgICBERUZBVUxUX0ZPTlRfRkFNSUxZLFxuICAgIFBsYWl0Q29tbW9uRWxlbWVudFJlZixcbiAgICBSRVNJWkVfSEFORExFX0RJQU1FVEVSLFxuICAgIGJ1aWxkVGV4dCxcbiAgICBnZXRGaXJzdFRleHRNYW5hZ2UsXG4gICAgbWVhc3VyZUVsZW1lbnRcbn0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBPcHRpb25zIH0gZnJvbSAncm91Z2hqcy9iaW4vY29yZSc7XG5pbXBvcnQgeyBnZXRFbmdpbmUgfSBmcm9tICcuLi9lbmdpbmVzJztcbmltcG9ydCB7IGdldEVsZW1lbnRTaGFwZSB9IGZyb20gJy4vc2hhcGUnO1xuaW1wb3J0IHsgY3JlYXRlQXJyb3dMaW5lRWxlbWVudCB9IGZyb20gJy4vYXJyb3ctbGluZS9hcnJvdy1saW5lLWJhc2ljJztcbmltcG9ydCB7IEFycm93TGluZU1hcmtlclR5cGUsIEFycm93TGluZVNoYXBlLCBQbGFpdERyYXdFbGVtZW50LCBQbGFpdFNoYXBlRWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRGVmYXVsdExpbmVTdHlsZSB9IGZyb20gJy4uL2NvbnN0YW50cy9saW5lJztcbmltcG9ydCB7IGdldE1lbW9yaXplZExhdGVzdEJ5UG9pbnRlciB9IGZyb20gJy4vbWVtb3JpemUnO1xuaW1wb3J0IHsgRHJhd1RleHRJbmZvLCBnZXRUZXh0TWFuYWdlIH0gZnJvbSAnLi4vZ2VuZXJhdG9ycy90ZXh0LmdlbmVyYXRvcic7XG5pbXBvcnQgeyBjcmVhdGVVTUxDbGFzc09ySW50ZXJmYWNlR2VvbWV0cnlFbGVtZW50IH0gZnJvbSAnLi91bWwnO1xuaW1wb3J0IHsgY3JlYXRlTXVsdGlwbGVUZXh0R2VvbWV0cnlFbGVtZW50LCBpc011bHRpcGxlVGV4dEdlb21ldHJ5LCBpc011bHRpcGxlVGV4dFNoYXBlIH0gZnJvbSAnLi9tdWx0aS10ZXh0LWdlb21ldHJ5JztcbmltcG9ydCB7IERFRkFVTFRfRk9OVF9TSVpFIH0gZnJvbSAnQHBsYWl0L3RleHQtcGx1Z2lucyc7XG5cbmV4cG9ydCB0eXBlIEdlb21ldHJ5U3R5bGVPcHRpb25zID0gUGljazxQbGFpdEdlb21ldHJ5LCAnZmlsbCcgfCAnc3Ryb2tlQ29sb3InIHwgJ3N0cm9rZVdpZHRoJz47XG5cbmV4cG9ydCB0eXBlIFRleHRQcm9wZXJ0aWVzID0gUGFydGlhbDxDdXN0b21UZXh0PiAmIHsgYWxpZ24/OiBBbGlnbm1lbnQ7IHRleHRIZWlnaHQ/OiBudW1iZXIgfTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUdlb21ldHJ5RWxlbWVudCA9IChcbiAgICBzaGFwZTogR2VvbWV0cnlTaGFwZXMsXG4gICAgcG9pbnRzOiBbUG9pbnQsIFBvaW50XSxcbiAgICB0ZXh0OiBzdHJpbmcgfCBFbGVtZW50LFxuICAgIG9wdGlvbnM6IEdlb21ldHJ5U3R5bGVPcHRpb25zID0ge30sXG4gICAgdGV4dFByb3BlcnRpZXM6IFRleHRQcm9wZXJ0aWVzID0ge31cbik6IFBsYWl0R2VvbWV0cnkgPT4ge1xuICAgIGlmIChHRU9NRVRSWV9XSVRIT1VUX1RFWFQuaW5jbHVkZXMoc2hhcGUpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVHZW9tZXRyeUVsZW1lbnRXaXRob3V0VGV4dChzaGFwZSwgcG9pbnRzLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY3JlYXRlR2VvbWV0cnlFbGVtZW50V2l0aFRleHQoc2hhcGUsIHBvaW50cywgdGV4dCwgb3B0aW9ucywgdGV4dFByb3BlcnRpZXMpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVHZW9tZXRyeUVsZW1lbnRXaXRoVGV4dCA9IChcbiAgICBzaGFwZTogR2VvbWV0cnlTaGFwZXMsXG4gICAgcG9pbnRzOiBbUG9pbnQsIFBvaW50XSxcbiAgICB0ZXh0OiBzdHJpbmcgfCBFbGVtZW50LFxuICAgIG9wdGlvbnM6IEdlb21ldHJ5U3R5bGVPcHRpb25zID0ge30sXG4gICAgdGV4dFByb3BlcnRpZXM6IFRleHRQcm9wZXJ0aWVzID0ge31cbik6IFBsYWl0R2VvbWV0cnkgPT4ge1xuICAgIGxldCB0ZXh0T3B0aW9ucyA9IHt9O1xuICAgIGxldCBhbGlnbm1lbnQ6IHVuZGVmaW5lZCB8IEFsaWdubWVudCA9IEFsaWdubWVudC5jZW50ZXI7XG4gICAgbGV0IHRleHRIZWlnaHQgPSBEZWZhdWx0VGV4dFByb3BlcnR5LmhlaWdodDtcbiAgICBpZiAoc2hhcGUgPT09IEJhc2ljU2hhcGVzLnRleHQpIHtcbiAgICAgICAgdGV4dE9wdGlvbnMgPSB7IGF1dG9TaXplOiB0cnVlIH07XG4gICAgICAgIGFsaWdubWVudCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGV4dFByb3BlcnRpZXMgPSB7IC4uLnRleHRQcm9wZXJ0aWVzIH07XG4gICAgdGV4dFByb3BlcnRpZXM/LmFsaWduICYmIChhbGlnbm1lbnQgPSB0ZXh0UHJvcGVydGllcz8uYWxpZ24pO1xuICAgIHRleHRQcm9wZXJ0aWVzPy50ZXh0SGVpZ2h0ICYmICh0ZXh0SGVpZ2h0ID0gdGV4dFByb3BlcnRpZXM/LnRleHRIZWlnaHQpO1xuICAgIGRlbGV0ZSB0ZXh0UHJvcGVydGllcz8uYWxpZ247XG4gICAgZGVsZXRlIHRleHRQcm9wZXJ0aWVzPy50ZXh0SGVpZ2h0O1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGlkQ3JlYXRvcigpLFxuICAgICAgICB0eXBlOiAnZ2VvbWV0cnknLFxuICAgICAgICBzaGFwZSxcbiAgICAgICAgYW5nbGU6IDAsXG4gICAgICAgIG9wYWNpdHk6IDEsXG4gICAgICAgIHRleHRIZWlnaHQsXG4gICAgICAgIHRleHQ6IGJ1aWxkVGV4dCh0ZXh0LCBhbGlnbm1lbnQsIHRleHRQcm9wZXJ0aWVzKSxcbiAgICAgICAgcG9pbnRzLFxuICAgICAgICAuLi50ZXh0T3B0aW9ucyxcbiAgICAgICAgLi4ub3B0aW9uc1xuICAgIH07XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlR2VvbWV0cnlFbGVtZW50V2l0aG91dFRleHQgPSAoXG4gICAgc2hhcGU6IEdlb21ldHJ5U2hhcGVzLFxuICAgIHBvaW50czogW1BvaW50LCBQb2ludF0sXG4gICAgb3B0aW9uczogR2VvbWV0cnlTdHlsZU9wdGlvbnMgPSB7fVxuKTogUGxhaXRHZW9tZXRyeSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaWQ6IGlkQ3JlYXRvcigpLFxuICAgICAgICB0eXBlOiAnZ2VvbWV0cnknLFxuICAgICAgICBzaGFwZSxcbiAgICAgICAgYW5nbGU6IDAsXG4gICAgICAgIG9wYWNpdHk6IDEsXG4gICAgICAgIHBvaW50cyxcbiAgICAgICAgLi4ub3B0aW9uc1xuICAgIH07XG59O1xuXG5leHBvcnQgY29uc3QgZHJhd0dlb21ldHJ5ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBvdXRlclJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBzaGFwZTogR2VvbWV0cnlTaGFwZXMsIHJvdWdoT3B0aW9uczogT3B0aW9ucykgPT4ge1xuICAgIHJldHVybiBnZXRFbmdpbmUoc2hhcGUpLmRyYXcoYm9hcmQsIG91dGVyUmVjdGFuZ2xlLCByb3VnaE9wdGlvbnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldE5lYXJlc3RQb2ludCA9IChlbGVtZW50OiBQbGFpdFNoYXBlRWxlbWVudCwgcG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgY29uc3QgcmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGVsZW1lbnQucG9pbnRzKTtcbiAgICBjb25zdCBzaGFwZSA9IGdldEVsZW1lbnRTaGFwZShlbGVtZW50KTtcbiAgICByZXR1cm4gZ2V0RW5naW5lKHNoYXBlKS5nZXROZWFyZXN0UG9pbnQocmVjdGFuZ2xlLCBwb2ludCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q2VudGVyUG9pbnRzT25Qb2x5Z29uID0gKHBvaW50czogUG9pbnRbXSkgPT4ge1xuICAgIGNvbnN0IGNlbnRlclBvaW50OiBQb2ludFtdID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb2ludHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IGogPSBpID09IHBvaW50cy5sZW5ndGggLSAxID8gMCA6IGkgKyAxO1xuICAgICAgICBjZW50ZXJQb2ludC5wdXNoKFsocG9pbnRzW2ldWzBdICsgcG9pbnRzW2pdWzBdKSAvIDIsIChwb2ludHNbaV1bMV0gKyBwb2ludHNbal1bMV0pIC8gMl0pO1xuICAgIH1cbiAgICByZXR1cm4gY2VudGVyUG9pbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGVmYXVsdEZsb3djaGFydFByb3BlcnR5ID0gKHN5bWJvbDogRmxvd2NoYXJ0U3ltYm9scykgPT4ge1xuICAgIHJldHVybiBEZWZhdWx0Rmxvd2NoYXJ0UHJvcGVydHlNYXBbc3ltYm9sXTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREZWZhdWx0QmFzaWNTaGFwZVByb3BlcnR5ID0gKHNoYXBlOiBCYXNpY1NoYXBlcykgPT4ge1xuICAgIHJldHVybiBEZWZhdWx0QmFzaWNTaGFwZVByb3BlcnR5TWFwW3NoYXBlXSB8fCBEZWZhdWx0QmFzaWNTaGFwZVByb3BlcnR5O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERlZmF1bHRVTUxQcm9wZXJ0eSA9IChzaGFwZTogVU1MU3ltYm9scykgPT4ge1xuICAgIHJldHVybiBEZWZhdWx0VU1MUHJvcGVydHlNYXBbc2hhcGVdO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZURlZmF1bHRGbG93Y2hhcnQgPSAocG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgY29uc3QgZGVjaXNpb25Qcm9wZXJ0eSA9IGdldERlZmF1bHRGbG93Y2hhcnRQcm9wZXJ0eShGbG93Y2hhcnRTeW1ib2xzLmRlY2lzaW9uKTtcbiAgICBjb25zdCBwcm9jZXNzUHJvcGVydHkgPSBnZXREZWZhdWx0Rmxvd2NoYXJ0UHJvcGVydHkoRmxvd2NoYXJ0U3ltYm9scy5wcm9jZXNzKTtcbiAgICBjb25zdCB0ZXJtaW5hbFByb3BlcnR5ID0gZ2V0RGVmYXVsdEZsb3djaGFydFByb3BlcnR5KEZsb3djaGFydFN5bWJvbHMudGVybWluYWwpO1xuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgc3Ryb2tlV2lkdGg6IERlZmF1bHRCYXNpY1NoYXBlUHJvcGVydHkuc3Ryb2tlV2lkdGhcbiAgICB9O1xuXG4gICAgY29uc3QgbGluZU9wdGlvbnMgPSB7XG4gICAgICAgIHN0cm9rZVdpZHRoOiBEZWZhdWx0TGluZVN0eWxlLnN0cm9rZVdpZHRoXG4gICAgfTtcbiAgICBjb25zdCBzdGFydEVsZW1lbnQgPSBjcmVhdGVHZW9tZXRyeUVsZW1lbnQoXG4gICAgICAgIEZsb3djaGFydFN5bWJvbHMudGVybWluYWwsXG4gICAgICAgIGdldERlZmF1bHRHZW9tZXRyeVBvaW50cyhGbG93Y2hhcnRTeW1ib2xzLnRlcm1pbmFsLCBwb2ludCksXG4gICAgICAgICflvIDlp4snLFxuICAgICAgICBvcHRpb25zXG4gICAgKTtcblxuICAgIGNvbnN0IHByb2Nlc3NQb2ludDE6IFBvaW50ID0gW3BvaW50WzBdLCBwb2ludFsxXSArIHRlcm1pbmFsUHJvcGVydHkuaGVpZ2h0IC8gMiArIDU1ICsgcHJvY2Vzc1Byb3BlcnR5LmhlaWdodCAvIDJdO1xuICAgIGNvbnN0IHByb2Nlc3NFbGVtZW50MSA9IGNyZWF0ZUdlb21ldHJ5RWxlbWVudChcbiAgICAgICAgRmxvd2NoYXJ0U3ltYm9scy5wcm9jZXNzLFxuICAgICAgICBnZXREZWZhdWx0R2VvbWV0cnlQb2ludHMoRmxvd2NoYXJ0U3ltYm9scy5wcm9jZXNzLCBwcm9jZXNzUG9pbnQxKSxcbiAgICAgICAgJ+i/h+eoiycsXG4gICAgICAgIG9wdGlvbnNcbiAgICApO1xuXG4gICAgY29uc3QgZGVjaXNpb25Qb2ludDogUG9pbnQgPSBbcHJvY2Vzc1BvaW50MVswXSwgcHJvY2Vzc1BvaW50MVsxXSArIHByb2Nlc3NQcm9wZXJ0eS5oZWlnaHQgLyAyICsgNTUgKyBkZWNpc2lvblByb3BlcnR5LmhlaWdodCAvIDJdO1xuICAgIGNvbnN0IGRlY2lzaW9uRWxlbWVudCA9IGNyZWF0ZUdlb21ldHJ5RWxlbWVudChcbiAgICAgICAgRmxvd2NoYXJ0U3ltYm9scy5kZWNpc2lvbixcbiAgICAgICAgZ2V0RGVmYXVsdEdlb21ldHJ5UG9pbnRzKEZsb3djaGFydFN5bWJvbHMuZGVjaXNpb24sIGRlY2lzaW9uUG9pbnQpLFxuICAgICAgICAn5Yik5patJyxcbiAgICAgICAgb3B0aW9uc1xuICAgICk7XG5cbiAgICBjb25zdCBwcm9jZXNzUG9pbnQyOiBQb2ludCA9IFtkZWNpc2lvblBvaW50WzBdICsgZGVjaXNpb25Qcm9wZXJ0eS53aWR0aCAvIDIgKyA3NSArIHByb2Nlc3NQcm9wZXJ0eS53aWR0aCAvIDIsIGRlY2lzaW9uUG9pbnRbMV1dO1xuICAgIGNvbnN0IHByb2Nlc3NFbGVtZW50MiA9IGNyZWF0ZUdlb21ldHJ5RWxlbWVudChcbiAgICAgICAgRmxvd2NoYXJ0U3ltYm9scy5wcm9jZXNzLFxuICAgICAgICBnZXREZWZhdWx0R2VvbWV0cnlQb2ludHMoRmxvd2NoYXJ0U3ltYm9scy5wcm9jZXNzLCBwcm9jZXNzUG9pbnQyKSxcbiAgICAgICAgJ+i/h+eoiycsXG4gICAgICAgIG9wdGlvbnNcbiAgICApO1xuXG4gICAgY29uc3QgZW5kUG9pbnQ6IFBvaW50ID0gW2RlY2lzaW9uUG9pbnRbMF0sIGRlY2lzaW9uUG9pbnRbMV0gKyBkZWNpc2lvblByb3BlcnR5LmhlaWdodCAvIDIgKyA5NSArIHRlcm1pbmFsUHJvcGVydHkuaGVpZ2h0IC8gMl07XG4gICAgY29uc3QgZW5kRWxlbWVudCA9IGNyZWF0ZUdlb21ldHJ5RWxlbWVudChcbiAgICAgICAgRmxvd2NoYXJ0U3ltYm9scy50ZXJtaW5hbCxcbiAgICAgICAgZ2V0RGVmYXVsdEdlb21ldHJ5UG9pbnRzKEZsb3djaGFydFN5bWJvbHMudGVybWluYWwsIGVuZFBvaW50KSxcbiAgICAgICAgJ+e7k+adnycsXG4gICAgICAgIG9wdGlvbnNcbiAgICApO1xuXG4gICAgY29uc3QgbGluZTEgPSBjcmVhdGVBcnJvd0xpbmVFbGVtZW50KFxuICAgICAgICBBcnJvd0xpbmVTaGFwZS5lbGJvdyxcbiAgICAgICAgW1xuICAgICAgICAgICAgWzAsIDBdLFxuICAgICAgICAgICAgWzAsIDBdXG4gICAgICAgIF0sXG4gICAgICAgIHsgbWFya2VyOiBBcnJvd0xpbmVNYXJrZXJUeXBlLm5vbmUsIGNvbm5lY3Rpb246IFswLjUsIDFdLCBib3VuZElkOiBzdGFydEVsZW1lbnQuaWQgfSxcbiAgICAgICAgeyBtYXJrZXI6IEFycm93TGluZU1hcmtlclR5cGUuYXJyb3csIGNvbm5lY3Rpb246IFswLjUsIDBdLCBib3VuZElkOiBwcm9jZXNzRWxlbWVudDEuaWQgfSxcbiAgICAgICAgW10sXG4gICAgICAgIGxpbmVPcHRpb25zXG4gICAgKTtcblxuICAgIGNvbnN0IGxpbmUyID0gY3JlYXRlQXJyb3dMaW5lRWxlbWVudChcbiAgICAgICAgQXJyb3dMaW5lU2hhcGUuZWxib3csXG4gICAgICAgIFtcbiAgICAgICAgICAgIFswLCAwXSxcbiAgICAgICAgICAgIFswLCAwXVxuICAgICAgICBdLFxuICAgICAgICB7IG1hcmtlcjogQXJyb3dMaW5lTWFya2VyVHlwZS5ub25lLCBjb25uZWN0aW9uOiBbMC41LCAxXSwgYm91bmRJZDogcHJvY2Vzc0VsZW1lbnQxLmlkIH0sXG4gICAgICAgIHsgbWFya2VyOiBBcnJvd0xpbmVNYXJrZXJUeXBlLmFycm93LCBjb25uZWN0aW9uOiBbMC41LCAwXSwgYm91bmRJZDogZGVjaXNpb25FbGVtZW50LmlkIH0sXG4gICAgICAgIFtdLFxuICAgICAgICBsaW5lT3B0aW9uc1xuICAgICk7XG5cbiAgICBjb25zdCBsaW5lMyA9IGNyZWF0ZUFycm93TGluZUVsZW1lbnQoXG4gICAgICAgIEFycm93TGluZVNoYXBlLmVsYm93LFxuICAgICAgICBbXG4gICAgICAgICAgICBbMCwgMF0sXG4gICAgICAgICAgICBbMCwgMF1cbiAgICAgICAgXSxcbiAgICAgICAgeyBtYXJrZXI6IEFycm93TGluZU1hcmtlclR5cGUubm9uZSwgY29ubmVjdGlvbjogWzAuNSwgMV0sIGJvdW5kSWQ6IGRlY2lzaW9uRWxlbWVudC5pZCB9LFxuICAgICAgICB7IG1hcmtlcjogQXJyb3dMaW5lTWFya2VyVHlwZS5hcnJvdywgY29ubmVjdGlvbjogWzAuNSwgMF0sIGJvdW5kSWQ6IGVuZEVsZW1lbnQuaWQgfSxcbiAgICAgICAgW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHRleHQ6IGJ1aWxkVGV4dCgn5pivJyksXG4gICAgICAgICAgICAgICAgcG9zaXRpb246IDAuNSxcbiAgICAgICAgICAgICAgICB3aWR0aDogMTQsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAyMFxuICAgICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICBsaW5lT3B0aW9uc1xuICAgICk7XG5cbiAgICBjb25zdCBsaW5lNCA9IGNyZWF0ZUFycm93TGluZUVsZW1lbnQoXG4gICAgICAgIEFycm93TGluZVNoYXBlLmVsYm93LFxuICAgICAgICBbXG4gICAgICAgICAgICBbMCwgMF0sXG4gICAgICAgICAgICBbMCwgMF1cbiAgICAgICAgXSxcbiAgICAgICAgeyBtYXJrZXI6IEFycm93TGluZU1hcmtlclR5cGUubm9uZSwgY29ubmVjdGlvbjogWzEsIDAuNV0sIGJvdW5kSWQ6IGRlY2lzaW9uRWxlbWVudC5pZCB9LFxuICAgICAgICB7IG1hcmtlcjogQXJyb3dMaW5lTWFya2VyVHlwZS5hcnJvdywgY29ubmVjdGlvbjogWzAsIDAuNV0sIGJvdW5kSWQ6IHByb2Nlc3NFbGVtZW50Mi5pZCB9LFxuICAgICAgICBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdGV4dDogYnVpbGRUZXh0KCflkKYnKSxcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogMC41LFxuICAgICAgICAgICAgICAgIHdpZHRoOiAxNCxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IDIwXG4gICAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGxpbmVPcHRpb25zXG4gICAgKTtcblxuICAgIGNvbnN0IGxpbmU1ID0gY3JlYXRlQXJyb3dMaW5lRWxlbWVudChcbiAgICAgICAgQXJyb3dMaW5lU2hhcGUuZWxib3csXG4gICAgICAgIFtcbiAgICAgICAgICAgIFswLCAwXSxcbiAgICAgICAgICAgIFswLCAwXVxuICAgICAgICBdLFxuICAgICAgICB7IG1hcmtlcjogQXJyb3dMaW5lTWFya2VyVHlwZS5ub25lLCBjb25uZWN0aW9uOiBbMC41LCAxXSwgYm91bmRJZDogcHJvY2Vzc0VsZW1lbnQyLmlkIH0sXG4gICAgICAgIHsgbWFya2VyOiBBcnJvd0xpbmVNYXJrZXJUeXBlLmFycm93LCBjb25uZWN0aW9uOiBbMSwgMC41XSwgYm91bmRJZDogZW5kRWxlbWVudC5pZCB9LFxuICAgICAgICBbXSxcbiAgICAgICAgbGluZU9wdGlvbnNcbiAgICApO1xuXG4gICAgcmV0dXJuIFtzdGFydEVsZW1lbnQsIHByb2Nlc3NFbGVtZW50MSwgZGVjaXNpb25FbGVtZW50LCBwcm9jZXNzRWxlbWVudDIsIGVuZEVsZW1lbnQsIGxpbmUxLCBsaW5lMiwgbGluZTMsIGxpbmU0LCBsaW5lNV07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QXV0b0NvbXBsZXRlUG9pbnRzID0gKGVsZW1lbnQ6IFBsYWl0U2hhcGVFbGVtZW50KSA9PiB7XG4gICAgY29uc3QgQXV0b0NvbXBsZXRlTWFyZ2luID0gKDEyICsgUkVTSVpFX0hBTkRMRV9ESUFNRVRFUiAvIDIpICogMjtcbiAgICBsZXQgcmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGVsZW1lbnQucG9pbnRzKTtcbiAgICByZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuaW5mbGF0ZShyZWN0YW5nbGUsIEF1dG9Db21wbGV0ZU1hcmdpbik7XG4gICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5nZXRFZGdlQ2VudGVyUG9pbnRzKHJlY3RhbmdsZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGl0SW5kZXhPZkF1dG9Db21wbGV0ZVBvaW50ID0gKG1vdmluZ1BvaW50OiBQb2ludCwgcG9pbnRzOiBQb2ludFtdKSA9PiB7XG4gICAgcmV0dXJuIHBvaW50cy5maW5kSW5kZXgoKHBvaW50KSA9PiB7XG4gICAgICAgIGNvbnN0IG1vdmluZ1JlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhbbW92aW5nUG9pbnRdKTtcbiAgICAgICAgbGV0IHJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhbcG9pbnRdKTtcbiAgICAgICAgcmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmluZmxhdGUocmVjdGFuZ2xlLCBSRVNJWkVfSEFORExFX0RJQU1FVEVSKTtcbiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5pc0hpdChtb3ZpbmdSZWN0YW5nbGUsIHJlY3RhbmdsZSk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RHJhd0RlZmF1bHRTdHJva2VDb2xvciA9ICh0aGVtZTogVGhlbWVDb2xvck1vZGUpID0+IHtcbiAgICByZXR1cm4gRHJhd1RoZW1lQ29sb3JzW3RoZW1lXS5zdHJva2VDb2xvcjtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRGbG93Y2hhcnREZWZhdWx0RmlsbCA9ICh0aGVtZTogVGhlbWVDb2xvck1vZGUpID0+IHtcbiAgICByZXR1cm4gRHJhd1RoZW1lQ29sb3JzW3RoZW1lXS5maWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFRleHRTaGFwZVByb3BlcnR5ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCB0ZXh0OiBzdHJpbmcgfCBFbGVtZW50ID0gRGVmYXVsdFRleHRQcm9wZXJ0eS50ZXh0LCBmb250U2l6ZT86IG51bWJlciB8IHN0cmluZykgPT4ge1xuICAgIGZvbnRTaXplID0gZm9udFNpemUgPyBOdW1iZXIoZm9udFNpemUpIDogREVGQVVMVF9GT05UX1NJWkU7XG4gICAgY29uc3QgdGV4dFNpemUgPSBtZWFzdXJlRWxlbWVudChidWlsZFRleHQodGV4dCksIHsgZm9udFNpemUsIGZvbnRGYW1pbHk6IERFRkFVTFRfRk9OVF9GQU1JTFkgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IHRleHRTaXplLndpZHRoICsgU2hhcGVEZWZhdWx0U3BhY2UucmVjdGFuZ2xlQW5kVGV4dCAqIDIsXG4gICAgICAgIGhlaWdodDogdGV4dFNpemUuaGVpZ2h0XG4gICAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREZWZhdWx0R2VvbWV0cnlQb2ludHMgPSAocG9pbnRlcjogRHJhd1BvaW50ZXJUeXBlLCBjZW50ZXJQb2ludDogUG9pbnQpID0+IHtcbiAgICBjb25zdCBwcm9wZXJ0eSA9IGdldERlZmF1bHRHZW9tZXRyeVByb3BlcnR5KHBvaW50ZXIpO1xuICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0UG9pbnRzKFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeUNlbnRlclBvaW50KGNlbnRlclBvaW50LCBwcm9wZXJ0eS53aWR0aCwgcHJvcGVydHkuaGVpZ2h0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGVmYXVsdEdlb21ldHJ5UHJvcGVydHkgPSAocG9pbnRlcjogRHJhd1BvaW50ZXJUeXBlKSA9PiB7XG4gICAgY29uc3QgaXNGbG93Q2hhcnQgPSBnZXRGbG93Y2hhcnRQb2ludGVycygpLmluY2x1ZGVzKHBvaW50ZXIpO1xuICAgIGNvbnN0IGlzVU1MID0gZ2V0VU1MUG9pbnRlcnMoKS5pbmNsdWRlcyhwb2ludGVyKTtcbiAgICBpZiAoaXNGbG93Q2hhcnQpIHtcbiAgICAgICAgcmV0dXJuIGdldERlZmF1bHRGbG93Y2hhcnRQcm9wZXJ0eShwb2ludGVyIGFzIEZsb3djaGFydFN5bWJvbHMpO1xuICAgIH0gZWxzZSBpZiAoaXNVTUwpIHtcbiAgICAgICAgcmV0dXJuIGdldERlZmF1bHRVTUxQcm9wZXJ0eShwb2ludGVyIGFzIFVNTFN5bWJvbHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBnZXREZWZhdWx0QmFzaWNTaGFwZVByb3BlcnR5KHBvaW50ZXIgYXMgQmFzaWNTaGFwZXMpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXREZWZhdWx0VGV4dFBvaW50cyA9IChib2FyZDogUGxhaXRCb2FyZCwgY2VudGVyUG9pbnQ6IFBvaW50LCBmb250U2l6ZT86IG51bWJlciB8IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IHByb3BlcnR5ID0gZ2V0VGV4dFNoYXBlUHJvcGVydHkoYm9hcmQsIERlZmF1bHRUZXh0UHJvcGVydHkudGV4dCwgZm9udFNpemUpO1xuICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0UG9pbnRzKFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeUNlbnRlclBvaW50KGNlbnRlclBvaW50LCBwcm9wZXJ0eS53aWR0aCwgcHJvcGVydHkuaGVpZ2h0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlVGV4dEVsZW1lbnQgPSAoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgcG9pbnRzOiBbUG9pbnQsIFBvaW50XSxcbiAgICB0ZXh0OiBzdHJpbmcgfCBFbGVtZW50ID0gRGVmYXVsdFRleHRQcm9wZXJ0eS50ZXh0LFxuICAgIHRleHRIZWlnaHQ/OiBudW1iZXJcbikgPT4ge1xuICAgIGNvbnN0IG1lbW9yaXplZExhdGVzdCA9IGdldE1lbW9yaXplZExhdGVzdEJ5UG9pbnRlcihCYXNpY1NoYXBlcy50ZXh0KTtcbiAgICB0ZXh0SGVpZ2h0ID0gdGV4dEhlaWdodCA/IHRleHRIZWlnaHQgOiBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMocG9pbnRzKS5oZWlnaHQ7XG4gICAgcmV0dXJuIGNyZWF0ZUdlb21ldHJ5RWxlbWVudChCYXNpY1NoYXBlcy50ZXh0LCBwb2ludHMsIHRleHQsIG1lbW9yaXplZExhdGVzdC5nZW9tZXRyeVByb3BlcnRpZXMgYXMgR2VvbWV0cnlTdHlsZU9wdGlvbnMsIHtcbiAgICAgICAgLi4ubWVtb3JpemVkTGF0ZXN0LnRleHRQcm9wZXJ0aWVzLFxuICAgICAgICB0ZXh0SGVpZ2h0XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlRGVmYXVsdEdlb21ldHJ5ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBwb2ludHM6IFtQb2ludCwgUG9pbnRdLCBzaGFwZTogR2VvbWV0cnlTaGFwZXMpID0+IHtcbiAgICBjb25zdCBtZW1vcml6ZWRMYXRlc3QgPSBnZXRNZW1vcml6ZWRMYXRlc3RCeVBvaW50ZXIoc2hhcGUpO1xuICAgIGNvbnN0IHRleHRIZWlnaHQgPSBnZXRUZXh0U2hhcGVQcm9wZXJ0eShib2FyZCwgRGVmYXVsdFRleHRQcm9wZXJ0eS50ZXh0LCBtZW1vcml6ZWRMYXRlc3QudGV4dFByb3BlcnRpZXNbJ2ZvbnQtc2l6ZSddKS5oZWlnaHQ7XG4gICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNVTUxDbGFzc09ySW50ZXJmYWNlKHsgc2hhcGUgfSkpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVVNTENsYXNzT3JJbnRlcmZhY2VHZW9tZXRyeUVsZW1lbnQoYm9hcmQsIHNoYXBlLCBwb2ludHMpO1xuICAgIH1cbiAgICBpZiAoaXNNdWx0aXBsZVRleHRTaGFwZShzaGFwZSkpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU11bHRpcGxlVGV4dEdlb21ldHJ5RWxlbWVudChzaGFwZSwgcG9pbnRzLCB7XG4gICAgICAgICAgICBzdHJva2VXaWR0aDogRGVmYXVsdEJhc2ljU2hhcGVQcm9wZXJ0eS5zdHJva2VXaWR0aCxcbiAgICAgICAgICAgIC4uLihtZW1vcml6ZWRMYXRlc3QuZ2VvbWV0cnlQcm9wZXJ0aWVzIGFzIEdlb21ldHJ5U3R5bGVPcHRpb25zKVxuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY3JlYXRlR2VvbWV0cnlFbGVtZW50KFxuICAgICAgICAgICAgc2hhcGUsXG4gICAgICAgICAgICBwb2ludHMsXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogRGVmYXVsdEJhc2ljU2hhcGVQcm9wZXJ0eS5zdHJva2VXaWR0aCxcbiAgICAgICAgICAgICAgICAuLi4obWVtb3JpemVkTGF0ZXN0Lmdlb21ldHJ5UHJvcGVydGllcyBhcyBHZW9tZXRyeVN0eWxlT3B0aW9ucylcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IC4uLm1lbW9yaXplZExhdGVzdC50ZXh0UHJvcGVydGllcywgdGV4dEhlaWdodCB9XG4gICAgICAgICk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGVkaXRUZXh0ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEdlb21ldHJ5LCB0ZXh0PzogRHJhd1RleHRJbmZvKSA9PiB7XG4gICAgY29uc3QgdGV4dE1hbmFnZSA9IHRleHQgPyBnZXRUZXh0TWFuYWdlKGJvYXJkLCBlbGVtZW50LCB0ZXh0KSA6IGdldEZpcnN0VGV4dE1hbmFnZShlbGVtZW50KTtcbiAgICBpZiAodGV4dE1hbmFnZSkge1xuICAgICAgICB0ZXh0TWFuYWdlLmVkaXQoKCkgPT4ge30pO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZXJlbmRlckdlb21ldHJ5QWN0aXZlID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEdlb21ldHJ5KSA9PiB7XG4gICAgY29uc3QgZWxlbWVudFJlZiA9IFBsYWl0RWxlbWVudC5nZXRFbGVtZW50UmVmPFBsYWl0Q29tbW9uRWxlbWVudFJlZj4oZWxlbWVudCk7XG4gICAgY29uc3QgYWN0aXZlR2VuZXJhdG9yID0gZWxlbWVudFJlZi5nZXRHZW5lcmF0b3IoQWN0aXZlR2VuZXJhdG9yLmtleSk7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKS5pbmNsdWRlcyhlbGVtZW50KTtcbiAgICBhY3RpdmVHZW5lcmF0b3IucHJvY2Vzc0RyYXdpbmcoZWxlbWVudCwgUGxhaXRCb2FyZC5nZXRFbGVtZW50QWN0aXZlSG9zdChib2FyZCksIHsgc2VsZWN0ZWQgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNHZW9tZXRyeUluY2x1ZGVUZXh0ID0gKGVsZW1lbnQ6IFBsYWl0R2VvbWV0cnkpID0+IHtcbiAgICByZXR1cm4gaXNTaW5nbGVUZXh0R2VvbWV0cnkoZWxlbWVudCkgfHwgaXNNdWx0aXBsZVRleHRHZW9tZXRyeShlbGVtZW50KTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1NpbmdsZVRleHRTaGFwZSA9IChzaGFwZTogR2VvbWV0cnlTaGFwZXMpID0+IHtcbiAgICByZXR1cm4gIUdFT01FVFJZX1dJVEhPVVRfVEVYVC5pbmNsdWRlcyhzaGFwZSkgJiYgIWlzTXVsdGlwbGVUZXh0U2hhcGUoc2hhcGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzU2luZ2xlVGV4dEdlb21ldHJ5ID0gKGVsZW1lbnQ6IFBsYWl0R2VvbWV0cnkpID0+IHtcbiAgICByZXR1cm4gUGxhaXREcmF3RWxlbWVudC5pc0dlb21ldHJ5KGVsZW1lbnQpICYmIGlzU2luZ2xlVGV4dFNoYXBlKGVsZW1lbnQuc2hhcGUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzR2VvbWV0cnlDbG9zZWQgPSAoZWxlbWVudDogUGxhaXRHZW9tZXRyeSkgPT4ge1xuICAgIHJldHVybiAhR0VPTUVUUllfTk9UX0NMT1NFRC5pbmNsdWRlcyhlbGVtZW50LnNoYXBlKTtcbn07XG4iXX0=
178
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbWV0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy91dGlscy9nZW9tZXRyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBSUgsZUFBZSxFQUdmLFNBQVMsRUFDVCxxQ0FBcUMsRUFDeEMsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFrQixXQUFXLEVBQStDLE1BQU0sd0JBQXdCLENBQUM7QUFFbEgsT0FBTyxFQUNILHlCQUF5QixFQUN6Qiw0QkFBNEIsRUFDNUIsMkJBQTJCLEVBQzNCLG1CQUFtQixFQUNuQixxQkFBcUIsRUFFckIsZUFBZSxFQUNmLG1CQUFtQixFQUNuQixxQkFBcUIsRUFDckIsaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNwQixjQUFjLEVBQ2pCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFFSCxTQUFTLEVBRVQsbUJBQW1CLEVBRW5CLHNCQUFzQixFQUN0QixTQUFTLEVBQ1Qsa0JBQWtCLEVBQ2xCLGNBQWMsRUFDakIsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN2QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pELE9BQU8sRUFBZ0IsYUFBYSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0UsT0FBTyxFQUFFLHdDQUF3QyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxzQkFBc0IsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3ZILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBTXhELE1BQU0sQ0FBQyxN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bnQiOlsiaW1wb3J0IHtcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBsYWl0RWxlbWVudCxcbiAgICBQb2ludCxcbiAgICBSZWN0YW5nbGVDbGllbnQsXG4gICAgVGhlbWVDb2xvck1vZGUsXG4gICAgZ2V0U2VsZWN0ZWRFbGVtZW50cyxcbiAgICBpZENyZWF0b3IsXG4gICAgdG9BY3RpdmVSZWN0YW5nbGVGcm9tVmlld0JveFJlY3RhbmdsZVxufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBHZW9tZXRyeVNoYXBlcywgQmFzaWNTaGFwZXMsIFBsYWl0R2VvbWV0cnksIEZsb3djaGFydFN5bWJvbHMsIFVNTFN5bWJvbHMgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2dlb21ldHJ5JztcbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQge1xuICAgIERlZmF1bHRCYXNpY1NoYXBlUHJvcGVydHksXG4gICAgRGVmYXVsdEJhc2ljU2hhcGVQcm9wZXJ0eU1hcCxcbiAgICBEZWZhdWx0Rmxvd2NoYXJ0UHJvcGVydHlNYXAsXG4gICAgRGVmYXVsdFRleHRQcm9wZXJ0eSxcbiAgICBEZWZhdWx0VU1MUHJvcGVydHlNYXAsXG4gICAgRHJhd1BvaW50ZXJUeXBlLFxuICAgIERyYXdUaGVtZUNvbG9ycyxcbiAgICBHRU9NRVRSWV9OT1RfQ0xPU0VELFxuICAgIEdFT01FVFJZX1dJVEhPVVRfVEVYVCxcbiAgICBTaGFwZURlZmF1bHRTcGFjZSxcbiAgICBnZXRGbG93Y2hhcnRQb2ludGVycyxcbiAgICBnZXRVTUxQb2ludGVyc1xufSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgICBBY3RpdmVHZW5lcmF0b3IsXG4gICAgQWxpZ25tZW50LFxuICAgIEN1c3RvbVRleHQsXG4gICAgREVGQVVMVF9GT05UX0ZBTUlMWSxcbiAgICBQbGFpdENvbW1vbkVsZW1lbnRSZWYsXG4gICAgUkVTSVpFX0hBTkRMRV9ESUFNRVRFUixcbiAgICBidWlsZFRleHQsXG4gICAgZ2V0Rmlyc3RUZXh0TWFuYWdlLFxuICAgIG1lYXN1cmVFbGVtZW50XG59IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJ3JvdWdoanMvYmluL2NvcmUnO1xuaW1wb3J0IHsgZ2V0RW5naW5lIH0gZnJvbSAnLi4vZW5naW5lcyc7XG5pbXBvcnQgeyBnZXRFbGVtZW50U2hhcGUgfSBmcm9tICcuL3NoYXBlJztcbmltcG9ydCB7IFBsYWl0RHJhd0VsZW1lbnQsIFBsYWl0U2hhcGVFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBnZXRNZW1vcml6ZWRMYXRlc3RCeVBvaW50ZXIgfSBmcm9tICcuL21lbW9yaXplJztcbmltcG9ydCB7IERyYXdUZXh0SW5mbywgZ2V0VGV4dE1hbmFnZSB9IGZyb20gJy4uL2dlbmVyYXRvcnMvdGV4dC5nZW5lcmF0b3InO1xuaW1wb3J0IHsgY3JlYXRlVU1MQ2xhc3NPckludGVyZmFjZUdlb21ldHJ5RWxlbWVudCB9IGZyb20gJy4vdW1sJztcbmltcG9ydCB7IGNyZWF0ZU11bHRpcGxlVGV4dEdlb21ldHJ5RWxlbWVudCwgaXNNdWx0aXBsZVRleHRHZW9tZXRyeSwgaXNNdWx0aXBsZVRleHRTaGFwZSB9IGZyb20gJy4vbXVsdGktdGV4dC1nZW9tZXRyeSc7XG5pbXBvcnQgeyBERUZBVUxUX0ZPTlRfU0laRSB9IGZyb20gJ0BwbGFpdC90ZXh0LXBsdWdpbnMnO1xuXG5leHBvcnQgdHlwZSBHZW9tZXRyeVN0eWxlT3B0aW9ucyA9IFBpY2s8UGxhaXRHZW9tZXRyeSwgJ2ZpbGwnIHwgJ3N0cm9rZUNvbG9yJyB8ICdzdHJva2VXaWR0aCc+O1xuXG5leHBvcnQgdHlwZSBUZXh0UHJvcGVydGllcyA9IFBhcnRpYWw8Q3VzdG9tVGV4dD4gJiB7IGFsaWduPzogQWxpZ25tZW50OyB0ZXh0SGVpZ2h0PzogbnVtYmVyIH07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVHZW9tZXRyeUVsZW1lbnQgPSAoXG4gICAgc2hhcGU6IEdlb21ldHJ5U2hhcGVzLFxuICAgIHBvaW50czogW1BvaW50LCBQb2ludF0sXG4gICAgdGV4dDogc3RyaW5nIHwgRWxlbWVudCxcbiAgICBvcHRpb25zOiBHZW9tZXRyeVN0eWxlT3B0aW9ucyA9IHt9LFxuICAgIHRleHRQcm9wZXJ0aWVzOiBUZXh0UHJvcGVydGllcyA9IHt9XG4pOiBQbGFpdEdlb21ldHJ5ID0+IHtcbiAgICBpZiAoR0VPTUVUUllfV0lUSE9VVF9URVhULmluY2x1ZGVzKHNoYXBlKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlR2VvbWV0cnlFbGVtZW50V2l0aG91dFRleHQoc2hhcGUsIHBvaW50cywgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUdlb21ldHJ5RWxlbWVudFdpdGhUZXh0KHNoYXBlLCBwb2ludHMsIHRleHQsIG9wdGlvbnMsIHRleHRQcm9wZXJ0aWVzKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlR2VvbWV0cnlFbGVtZW50V2l0aFRleHQgPSAoXG4gICAgc2hhcGU6IEdlb21ldHJ5U2hhcGVzLFxuICAgIHBvaW50czogW1BvaW50LCBQb2ludF0sXG4gICAgdGV4dDogc3RyaW5nIHwgRWxlbWVudCxcbiAgICBvcHRpb25zOiBHZW9tZXRyeVN0eWxlT3B0aW9ucyA9IHt9LFxuICAgIHRleHRQcm9wZXJ0aWVzOiBUZXh0UHJvcGVydGllcyA9IHt9XG4pOiBQbGFpdEdlb21ldHJ5ID0+IHtcbiAgICBsZXQgdGV4dE9wdGlvbnMgPSB7fTtcbiAgICBsZXQgYWxpZ25tZW50OiB1bmRlZmluZWQgfCBBbGlnbm1lbnQgPSBBbGlnbm1lbnQuY2VudGVyO1xuICAgIGxldCB0ZXh0SGVpZ2h0ID0gRGVmYXVsdFRleHRQcm9wZXJ0eS5oZWlnaHQ7XG4gICAgaWYgKHNoYXBlID09PSBCYXNpY1NoYXBlcy50ZXh0KSB7XG4gICAgICAgIHRleHRPcHRpb25zID0geyBhdXRvU2l6ZTogdHJ1ZSB9O1xuICAgICAgICBhbGlnbm1lbnQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRleHRQcm9wZXJ0aWVzID0geyAuLi50ZXh0UHJvcGVydGllcyB9O1xuICAgIHRleHRQcm9wZXJ0aWVzPy5hbGlnbiAmJiAoYWxpZ25tZW50ID0gdGV4dFByb3BlcnRpZXM/LmFsaWduKTtcbiAgICB0ZXh0UHJvcGVydGllcz8udGV4dEhlaWdodCAmJiAodGV4dEhlaWdodCA9IHRleHRQcm9wZXJ0aWVzPy50ZXh0SGVpZ2h0KTtcbiAgICBkZWxldGUgdGV4dFByb3BlcnRpZXM/LmFsaWduO1xuICAgIGRlbGV0ZSB0ZXh0UHJvcGVydGllcz8udGV4dEhlaWdodDtcblxuICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBpZENyZWF0b3IoKSxcbiAgICAgICAgdHlwZTogJ2dlb21ldHJ5JyxcbiAgICAgICAgc2hhcGUsXG4gICAgICAgIGFuZ2xlOiAwLFxuICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICB0ZXh0SGVpZ2h0LFxuICAgICAgICB0ZXh0OiBidWlsZFRleHQodGV4dCwgYWxpZ25tZW50LCB0ZXh0UHJvcGVydGllcyksXG4gICAgICAgIHBvaW50cyxcbiAgICAgICAgLi4udGV4dE9wdGlvbnMsXG4gICAgICAgIC4uLm9wdGlvbnNcbiAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUdlb21ldHJ5RWxlbWVudFdpdGhvdXRUZXh0ID0gKFxuICAgIHNoYXBlOiBHZW9tZXRyeVNoYXBlcyxcbiAgICBwb2ludHM6IFtQb2ludCwgUG9pbnRdLFxuICAgIG9wdGlvbnM6IEdlb21ldHJ5U3R5bGVPcHRpb25zID0ge31cbik6IFBsYWl0R2VvbWV0cnkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICAgIGlkOiBpZENyZWF0b3IoKSxcbiAgICAgICAgdHlwZTogJ2dlb21ldHJ5JyxcbiAgICAgICAgc2hhcGUsXG4gICAgICAgIGFuZ2xlOiAwLFxuICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICBwb2ludHMsXG4gICAgICAgIC4uLm9wdGlvbnNcbiAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGRyYXdHZW9tZXRyeSA9IChib2FyZDogUGxhaXRCb2FyZCwgb3V0ZXJSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgc2hhcGU6IEdlb21ldHJ5U2hhcGVzLCByb3VnaE9wdGlvbnM6IE9wdGlvbnMpID0+IHtcbiAgICByZXR1cm4gZ2V0RW5naW5lKHNoYXBlKS5kcmF3KGJvYXJkLCBvdXRlclJlY3RhbmdsZSwgcm91Z2hPcHRpb25zKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXROZWFyZXN0UG9pbnQgPSAoZWxlbWVudDogUGxhaXRTaGFwZUVsZW1lbnQsIHBvaW50OiBQb2ludCkgPT4ge1xuICAgIGNvbnN0IHJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhlbGVtZW50LnBvaW50cyk7XG4gICAgY29uc3Qgc2hhcGUgPSBnZXRFbGVtZW50U2hhcGUoZWxlbWVudCk7XG4gICAgcmV0dXJuIGdldEVuZ2luZShzaGFwZSkuZ2V0TmVhcmVzdFBvaW50KHJlY3RhbmdsZSwgcG9pbnQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldENlbnRlclBvaW50c09uUG9seWdvbiA9IChwb2ludHM6IFBvaW50W10pID0+IHtcbiAgICBjb25zdCBjZW50ZXJQb2ludDogUG9pbnRbXSA9IFtdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBqID0gaSA9PSBwb2ludHMubGVuZ3RoIC0gMSA/IDAgOiBpICsgMTtcbiAgICAgICAgY2VudGVyUG9pbnQucHVzaChbKHBvaW50c1tpXVswXSArIHBvaW50c1tqXVswXSkgLyAyLCAocG9pbnRzW2ldWzFdICsgcG9pbnRzW2pdWzFdKSAvIDJdKTtcbiAgICB9XG4gICAgcmV0dXJuIGNlbnRlclBvaW50O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERlZmF1bHRGbG93Y2hhcnRQcm9wZXJ0eSA9IChzeW1ib2w6IEZsb3djaGFydFN5bWJvbHMpID0+IHtcbiAgICByZXR1cm4gRGVmYXVsdEZsb3djaGFydFByb3BlcnR5TWFwW3N5bWJvbF07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGVmYXVsdEJhc2ljU2hhcGVQcm9wZXJ0eSA9IChzaGFwZTogQmFzaWNTaGFwZXMpID0+IHtcbiAgICByZXR1cm4gRGVmYXVsdEJhc2ljU2hhcGVQcm9wZXJ0eU1hcFtzaGFwZV0gfHwgRGVmYXVsdEJhc2ljU2hhcGVQcm9wZXJ0eTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREZWZhdWx0VU1MUHJvcGVydHkgPSAoc2hhcGU6IFVNTFN5bWJvbHMpID0+IHtcbiAgICByZXR1cm4gRGVmYXVsdFVNTFByb3BlcnR5TWFwW3NoYXBlXTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBdXRvQ29tcGxldGVQb2ludHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0U2hhcGVFbGVtZW50LCBpc1RvQWN0aXZlID0gZmFsc2UpID0+IHtcbiAgICBjb25zdCBBdXRvQ29tcGxldGVNYXJnaW4gPSAoMTIgKyBSRVNJWkVfSEFORExFX0RJQU1FVEVSIC8gMikgKiAyO1xuICAgIGNvbnN0IHJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhlbGVtZW50LnBvaW50cyk7XG4gICAgY29uc3QgYWN0aXZlUmVjdGFuZ2xlID0gdG9BY3RpdmVSZWN0YW5nbGVGcm9tVmlld0JveFJlY3RhbmdsZShib2FyZCwgcmVjdGFuZ2xlKTtcbiAgICBjb25zdCB0YXJnZXRSZWN0YW5nbGUgPSBpc1RvQWN0aXZlID8gYWN0aXZlUmVjdGFuZ2xlIDogcmVjdGFuZ2xlO1xuICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0RWRnZUNlbnRlclBvaW50cyhSZWN0YW5nbGVDbGllbnQuaW5mbGF0ZSh0YXJnZXRSZWN0YW5nbGUsIEF1dG9Db21wbGV0ZU1hcmdpbikpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEhpdEluZGV4T2ZBdXRvQ29tcGxldGVQb2ludCA9IChtb3ZpbmdQb2ludDogUG9pbnQsIHBvaW50czogUG9pbnRbXSkgPT4ge1xuICAgIHJldHVybiBwb2ludHMuZmluZEluZGV4KChwb2ludCkgPT4ge1xuICAgICAgICBjb25zdCBtb3ZpbmdSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoW21vdmluZ1BvaW50XSk7XG4gICAgICAgIGxldCByZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoW3BvaW50XSk7XG4gICAgICAgIHJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5pbmZsYXRlKHJlY3RhbmdsZSwgUkVTSVpFX0hBTkRMRV9ESUFNRVRFUik7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuaXNIaXQobW92aW5nUmVjdGFuZ2xlLCByZWN0YW5nbGUpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERyYXdEZWZhdWx0U3Ryb2tlQ29sb3IgPSAodGhlbWU6IFRoZW1lQ29sb3JNb2RlKSA9PiB7XG4gICAgcmV0dXJuIERyYXdUaGVtZUNvbG9yc1t0aGVtZV0uc3Ryb2tlQ29sb3I7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Rmxvd2NoYXJ0RGVmYXVsdEZpbGwgPSAodGhlbWU6IFRoZW1lQ29sb3JNb2RlKSA9PiB7XG4gICAgcmV0dXJuIERyYXdUaGVtZUNvbG9yc1t0aGVtZV0uZmlsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRUZXh0U2hhcGVQcm9wZXJ0eSA9IChib2FyZDogUGxhaXRCb2FyZCwgdGV4dDogc3RyaW5nIHwgRWxlbWVudCwgZm9udFNpemU/OiBudW1iZXIgfCBzdHJpbmcpID0+IHtcbiAgICBmb250U2l6ZSA9IGZvbnRTaXplID8gTnVtYmVyKGZvbnRTaXplKSA6IERFRkFVTFRfRk9OVF9TSVpFO1xuICAgIGNvbnN0IHRleHRTaXplID0gbWVhc3VyZUVsZW1lbnQoYnVpbGRUZXh0KHRleHQpLCB7IGZvbnRTaXplLCBmb250RmFtaWx5OiBERUZBVUxUX0ZPTlRfRkFNSUxZIH0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHdpZHRoOiB0ZXh0U2l6ZS53aWR0aCArIFNoYXBlRGVmYXVsdFNwYWNlLnJlY3RhbmdsZUFuZFRleHQgKiAyLFxuICAgICAgICBoZWlnaHQ6IHRleHRTaXplLmhlaWdodFxuICAgIH07XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGVmYXVsdEdlb21ldHJ5UG9pbnRzID0gKHBvaW50ZXI6IERyYXdQb2ludGVyVHlwZSwgY2VudGVyUG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgY29uc3QgcHJvcGVydHkgPSBnZXREZWZhdWx0R2VvbWV0cnlQcm9wZXJ0eShwb2ludGVyKTtcbiAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldFBvaW50cyhSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlDZW50ZXJQb2ludChjZW50ZXJQb2ludCwgcHJvcGVydHkud2lkdGgsIHByb3BlcnR5LmhlaWdodCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERlZmF1bHRHZW9tZXRyeVByb3BlcnR5ID0gKHBvaW50ZXI6IERyYXdQb2ludGVyVHlwZSkgPT4ge1xuICAgIGNvbnN0IGlzRmxvd0NoYXJ0ID0gZ2V0Rmxvd2NoYXJ0UG9pbnRlcnMoKS5pbmNsdWRlcyhwb2ludGVyKTtcbiAgICBjb25zdCBpc1VNTCA9IGdldFVNTFBvaW50ZXJzKCkuaW5jbHVkZXMocG9pbnRlcik7XG4gICAgaWYgKGlzRmxvd0NoYXJ0KSB7XG4gICAgICAgIHJldHVybiBnZXREZWZhdWx0Rmxvd2NoYXJ0UHJvcGVydHkocG9pbnRlciBhcyBGbG93Y2hhcnRTeW1ib2xzKTtcbiAgICB9IGVsc2UgaWYgKGlzVU1MKSB7XG4gICAgICAgIHJldHVybiBnZXREZWZhdWx0VU1MUHJvcGVydHkocG9pbnRlciBhcyBVTUxTeW1ib2xzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZ2V0RGVmYXVsdEJhc2ljU2hhcGVQcm9wZXJ0eShwb2ludGVyIGFzIEJhc2ljU2hhcGVzKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGVmYXVsdFRleHRQb2ludHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGNlbnRlclBvaW50OiBQb2ludCwgZm9udFNpemU/OiBudW1iZXIgfCBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBwcm9wZXJ0eSA9IGdldFRleHRTaGFwZVByb3BlcnR5KGJvYXJkLCBEZWZhdWx0VGV4dFByb3BlcnR5LnRleHQsIGZvbnRTaXplKTtcbiAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldFBvaW50cyhSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlDZW50ZXJQb2ludChjZW50ZXJQb2ludCwgcHJvcGVydHkud2lkdGgsIHByb3BlcnR5LmhlaWdodCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVRleHRFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBwb2ludHM6IFtQb2ludCwgUG9pbnRdLCB0ZXh0OiBzdHJpbmcgfCBFbGVtZW50LCB0ZXh0SGVpZ2h0PzogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgbWVtb3JpemVkTGF0ZXN0ID0gZ2V0TWVtb3JpemVkTGF0ZXN0QnlQb2ludGVyKEJhc2ljU2hhcGVzLnRleHQpO1xuICAgIHRleHRIZWlnaHQgPSB0ZXh0SGVpZ2h0ID8gdGV4dEhlaWdodCA6IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhwb2ludHMpLmhlaWdodDtcbiAgICByZXR1cm4gY3JlYXRlR2VvbWV0cnlFbGVtZW50KEJhc2ljU2hhcGVzLnRleHQsIHBvaW50cywgdGV4dCwgbWVtb3JpemVkTGF0ZXN0Lmdlb21ldHJ5UHJvcGVydGllcyBhcyBHZW9tZXRyeVN0eWxlT3B0aW9ucywge1xuICAgICAgICAuLi5tZW1vcml6ZWRMYXRlc3QudGV4dFByb3BlcnRpZXMsXG4gICAgICAgIHRleHRIZWlnaHRcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVEZWZhdWx0R2VvbWV0cnkgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHBvaW50czogW1BvaW50LCBQb2ludF0sIHNoYXBlOiBHZW9tZXRyeVNoYXBlcykgPT4ge1xuICAgIGNvbnN0IG1lbW9yaXplZExhdGVzdCA9IGdldE1lbW9yaXplZExhdGVzdEJ5UG9pbnRlcihzaGFwZSk7XG4gICAgY29uc3QgdGV4dEhlaWdodCA9IGdldFRleHRTaGFwZVByb3BlcnR5KGJvYXJkLCBEZWZhdWx0VGV4dFByb3BlcnR5LnRleHQsIG1lbW9yaXplZExhdGVzdC50ZXh0UHJvcGVydGllc1snZm9udC1zaXplJ10pLmhlaWdodDtcbiAgICBpZiAoUGxhaXREcmF3RWxlbWVudC5pc1VNTENsYXNzT3JJbnRlcmZhY2UoeyBzaGFwZSB9KSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlVU1MQ2xhc3NPckludGVyZmFjZUdlb21ldHJ5RWxlbWVudChib2FyZCwgc2hhcGUsIHBvaW50cyk7XG4gICAgfVxuICAgIGlmIChpc011bHRpcGxlVGV4dFNoYXBlKHNoYXBlKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTXVsdGlwbGVUZXh0R2VvbWV0cnlFbGVtZW50KHNoYXBlLCBwb2ludHMsIHtcbiAgICAgICAgICAgIHN0cm9rZVdpZHRoOiBEZWZhdWx0QmFzaWNTaGFwZVByb3BlcnR5LnN0cm9rZVdpZHRoLFxuICAgICAgICAgICAgLi4uKG1lbW9yaXplZExhdGVzdC5nZW9tZXRyeVByb3BlcnRpZXMgYXMgR2VvbWV0cnlTdHlsZU9wdGlvbnMpXG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVHZW9tZXRyeUVsZW1lbnQoXG4gICAgICAgICAgICBzaGFwZSxcbiAgICAgICAgICAgIHBvaW50cyxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0cm9rZVdpZHRoOiBEZWZhdWx0QmFzaWNTaGFwZVByb3BlcnR5LnN0cm9rZVdpZHRoLFxuICAgICAgICAgICAgICAgIC4uLihtZW1vcml6ZWRMYXRlc3QuZ2VvbWV0cnlQcm9wZXJ0aWVzIGFzIEdlb21ldHJ5U3R5bGVPcHRpb25zKVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgLi4ubWVtb3JpemVkTGF0ZXN0LnRleHRQcm9wZXJ0aWVzLCB0ZXh0SGVpZ2h0IH1cbiAgICAgICAgKTtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZWRpdFRleHQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0R2VvbWV0cnksIHRleHQ/OiBEcmF3VGV4dEluZm8pID0+IHtcbiAgICBjb25zdCB0ZXh0TWFuYWdlID0gdGV4dCA/IGdldFRleHRNYW5hZ2UoYm9hcmQsIGVsZW1lbnQsIHRleHQpIDogZ2V0Rmlyc3RUZXh0TWFuYWdlKGVsZW1lbnQpO1xuICAgIGlmICh0ZXh0TWFuYWdlKSB7XG4gICAgICAgIHRleHRNYW5hZ2UuZWRpdCgoKSA9PiB7fSk7XG4gICAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzR2VvbWV0cnlJbmNsdWRlVGV4dCA9IChlbGVtZW50OiBQbGFpdEdlb21ldHJ5KSA9PiB7XG4gICAgcmV0dXJuIGlzU2luZ2xlVGV4dEdlb21ldHJ5KGVsZW1lbnQpIHx8IGlzTXVsdGlwbGVUZXh0R2VvbWV0cnkoZWxlbWVudCk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNTaW5nbGVUZXh0U2hhcGUgPSAoc2hhcGU6IEdlb21ldHJ5U2hhcGVzKSA9PiB7XG4gICAgcmV0dXJuICFHRU9NRVRSWV9XSVRIT1VUX1RFWFQuaW5jbHVkZXMoc2hhcGUpICYmICFpc011bHRpcGxlVGV4dFNoYXBlKHNoYXBlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1NpbmdsZVRleHRHZW9tZXRyeSA9IChlbGVtZW50OiBQbGFpdEdlb21ldHJ5KSA9PiB7XG4gICAgcmV0dXJuIFBsYWl0RHJhd0VsZW1lbnQuaXNHZW9tZXRyeShlbGVtZW50KSAmJiBpc1NpbmdsZVRleHRTaGFwZShlbGVtZW50LnNoYXBlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0dlb21ldHJ5Q2xvc2VkID0gKGVsZW1lbnQ6IFBsYWl0R2VvbWV0cnkpID0+IHtcbiAgICByZXR1cm4gIUdFT01FVFJZX05PVF9DTE9TRUQuaW5jbHVkZXMoZWxlbWVudC5zaGFwZSk7XG59O1xuIl19