@plait/draw 0.75.0-next.9 → 0.75.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.
@@ -1,17 +1,7 @@
1
- import { Point, RectangleClient } from '@plait/core';
1
+ import { Point, RectangleClient, SVGArcCommand } from '@plait/core';
2
2
  import { ShapeEngine } from '../../interfaces';
3
- interface CloudArcPoint {
4
- rx: number;
5
- ry: number;
6
- xAxisRotation: number;
7
- largeArcFlag: 0 | 1;
8
- sweepFlag: 0 | 1;
9
- endX: number;
10
- endY: number;
11
- }
12
3
  export declare function generateCloudPath(rectangle: RectangleClient): {
13
4
  startPoint: Point;
14
- arcs: CloudArcPoint[];
5
+ arcCommands: SVGArcCommand[];
15
6
  };
16
7
  export declare const CloudEngine: ShapeEngine;
17
- export {};
@@ -1,7 +1,2 @@
1
- import { Point, RectangleClient } from '@plait/core';
2
1
  import { ShapeEngine } from '../../interfaces';
3
- export declare const getStartPoint: (rectangle: RectangleClient) => Point;
4
- export declare const getEndPoint: (rectangle: RectangleClient) => Point;
5
- export declare const arcPercentage: number;
6
- export declare const getArcCenter: (rectangle: RectangleClient) => Point;
7
2
  export declare const ProvidedInterfaceEngine: ShapeEngine;
@@ -9,7 +9,7 @@ export function generateCloudPath(rectangle) {
9
9
  const xRadius = divisionWidth / 8.5;
10
10
  const yRadius = divisionHeight / 20;
11
11
  const startPoint = [rectangle.x + divisionWidth, rectangle.y + divisionHeight];
12
- const arcs = [
12
+ const arcCommands = [
13
13
  {
14
14
  rx: xRadius,
15
15
  ry: yRadius * 1.2,
@@ -83,15 +83,15 @@ export function generateCloudPath(rectangle) {
83
83
  endY: rectangle.y + divisionHeight
84
84
  }
85
85
  ];
86
- return { startPoint, arcs };
86
+ return { startPoint, arcCommands };
87
87
  }
88
88
  export const CloudEngine = {
89
89
  draw(board, rectangle, options) {
90
90
  const rs = PlaitBoard.getRoughSVG(board);
91
- const { startPoint, arcs } = generateCloudPath(rectangle);
91
+ const { startPoint, arcCommands } = generateCloudPath(rectangle);
92
92
  const pathData = `M ${startPoint[0]} ${startPoint[1]} ` +
93
- arcs
94
- .map((arc) => `A ${arc.rx} ${arc.ry} ${arc.xAxisRotation} ${arc.largeArcFlag} ${arc.sweepFlag} ${arc.endX} ${arc.endY}`)
93
+ arcCommands
94
+ .map((command) => `A ${command.rx} ${command.ry} ${command.xAxisRotation} ${command.largeArcFlag} ${command.sweepFlag} ${command.endX} ${command.endY}`)
95
95
  .join('\n') +
96
96
  ' Z';
97
97
  const svgElement = rs.path(pathData, { ...options, fillStyle: 'solid' });
@@ -106,19 +106,18 @@ export const CloudEngine = {
106
106
  return RectangleClient.getCornerPoints(rectangle);
107
107
  },
108
108
  getNearestPoint(rectangle, point) {
109
- const { startPoint, arcs } = generateCloudPath(rectangle);
109
+ const { startPoint, arcCommands } = generateCloudPath(rectangle);
110
110
  let minDistance = Infinity;
111
111
  let nearestPoint = point;
112
- // 检查每个弧段
113
112
  let currentStart = startPoint;
114
- for (const arc of arcs) {
115
- const arcNearestPoint = getNearestPointBetweenPointAndArc(point, currentStart, arc);
113
+ for (const arcCommand of arcCommands) {
114
+ const arcNearestPoint = getNearestPointBetweenPointAndArc(point, currentStart, arcCommand);
116
115
  const distance = distanceBetweenPointAndPoint(point[0], point[1], arcNearestPoint[0], arcNearestPoint[1]);
117
116
  if (distance < minDistance) {
118
117
  minDistance = distance;
119
118
  nearestPoint = arcNearestPoint;
120
119
  }
121
- currentStart = [arc.endX, arc.endY];
120
+ currentStart = [arcCommand.endX, arcCommand.endY];
122
121
  }
123
122
  return nearestPoint;
124
123
  },
@@ -144,4 +143,4 @@ export const CloudEngine = {
144
143
  };
145
144
  }
146
145
  };
147
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy9lbmdpbmVzL2Jhc2ljLXNoYXBlcy9jbG91ZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUEyQixlQUFlLEVBQUUsNEJBQTRCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHdkksT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQVloRSxNQUFNLFVBQVUsaUJBQWlCLENBQUMsU0FBMEI7SUFDeEQsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDMUMsTUFBTSxjQUFjLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7SUFDOUMsTUFBTSxPQUFPLEdBQUcsYUFBYSxHQUFHLEdBQUcsQ0FBQztJQUNwQyxNQUFNLE9BQU8sR0FBRyxjQUFjLEdBQUcsRUFBRSxDQUFDO0lBRXBDLE1BQU0sVUFBVSxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQVUsQ0FBQztJQUV4RixNQUFNLElBQUksR0FBb0I7UUFDMUI7WUFDSSxFQUFFLEVBQUUsT0FBTztZQUNYLEVBQUUsRUFBRSxPQUFPLEdBQUcsR0FBRztZQUNqQixhQUFhLEVBQUUsQ0FBQztZQUNoQixZQUFZLEVBQUUsQ0FBQztZQUNmLFNBQVMsRUFBRSxDQUFDO1lBQ1osSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxHQUFHLENBQUM7WUFD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Q0FBQyxDQUFDO1FBQy9FLE1BQU0sV0FBVyxHQUFHLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxVQUFXLENBQUM7UUFDbkMsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLGlCQUFpQixDQUFDLGdCQUFnQixHQUFHLENBQUMsR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3RHLE1BQU0sS0FBSyxHQUFHLFdBQVcsR0FBRyxHQUFHLENBQUM7UUFDaEMsT0FBTztZQUNILE1BQU07WUFDTixLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsZ0JBQWdCLEdBQUcsV0FBVyxHQUFHLFdBQVcsR0FBRyxDQUFDO1lBQzFGLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO1NBQ3pHLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQsIFBvaW50LCBQb2ludE9mUmVjdGFuZ2xlLCBSZWN0YW5nbGVDbGllbnQsIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQsIHNldFBhdGhTdHJva2VMaW5lY2FwIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgUGxhaXRHZW9tZXRyeSwgU2hhcGVFbmdpbmUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICdyb3VnaGpzL2Jpbi9jb3JlJztcbmltcG9ydCB7IGdldFBvbHlnb25FZGdlQnlDb25uZWN0aW9uUG9pbnQgfSBmcm9tICcuLi8uLi91dGlscy9wb2x5Z29uJztcbmltcG9ydCB7IGdldFN0cm9rZVdpZHRoQnlFbGVtZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgU2hhcGVEZWZhdWx0U3BhY2UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kQXJjIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuXG5pbnRlcmZhY2UgQ2xvdWRBcmNQb2ludCB7XG4gICAgcng6IG51bWJlcjtcbiAgICByeTogbnVtYmVyO1xuICAgIHhBeGlzUm90YXRpb246IG51bWJlcjtcbiAgICBsYXJnZUFyY0ZsYWc6IDAgfCAxO1xuICAgIHN3ZWVwRmxhZzogMCB8IDE7XG4gICAgZW5kWDogbnVtYmVyO1xuICAgIGVuZFk6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQ2xvdWRQYXRoKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KTogeyBzdGFydFBvaW50OiBQb2ludDsgYXJjczogQ2xvdWRBcmNQb2ludFtdIH0ge1xuICAgIGNvbnN0IGRpdmlzaW9uV2lkdGggPSByZWN0YW5nbGUud2lkdGggLyA3O1xuICAgIGNvbnN0IGRpdmlzaW9uSGVpZ2h0ID0gcmVjdGFuZ2xlLmhlaWdodCAvIDMuMjtcbiAgICBjb25zdCB4UmFkaXVzID0gZGl2aXNpb25XaWR0aCAvIDguNTtcbiAgICBjb25zdCB5UmFkaXVzID0gZGl2aXNpb25IZWlnaHQgLyAyMDtcblxuICAgIGNvbnN0IHN0YXJ0UG9pbnQgPSBbcmVjdGFuZ2xlLnggKyBkaXZpc2lvbldpZHRoLCByZWN0YW5nbGUueSArIGRpdmlzaW9uSGVpZ2h0XSBhcyBQb2ludDtcblxuICAgIGNvbnN0IGFyY3M6IENsb3VkQXJjUG9pbnRbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcng6IHhSYWRpdXMsXG4gICAgICAgICAgICByeTogeVJhZGl1cyAqIDEuMixcbiAgICAgICAgICAgIHhBeGlzUm90YXRpb246IDAsXG4gICAgICAgICAgICBsYXJnZUFyY0ZsYWc6IDEsXG4gICAgICAgICAgICBzd2VlcEZsYWc6IDEsXG4gICAgICAgICAgICBlbmRYOiByZWN0YW5nbGUueCArIGRpdmlzaW9uV2lkdGggKiAyLFxuICAgICAgICAgICAgZW5kWTogcmVjdGFuZ2xlLnkgKyBkaXZpc2lvbkhlaWdodCAvIDJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcng6IHhSYWRpdXMsXG4gICAgICAgICAgICByeTogeVJhZGl1cyxcbiAgICAgICAgICAgIHhBeGlzUm90YXRpb246IDAsXG4gICAgICAgICAgICBsYXJnZUFyY0ZsYWc6IDEsXG4gICAgICAgICAgICBzd2VlcEZsYWc6IDEsXG4gICAgICAgICAgICBlbmRYOiByZWN0YW5nbGUueCArIGRpdmlzaW9uV2lkdGggKiA0LjIsXG4gICAgICAgICAgICBlbmRZOiByZWN0YW5nbGUueSArIGRpdmlzaW9uSGVpZ2h0IC8gMi4yXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJ4OiB4UmFkaXVzLFxuICAgICAgICAgICAgcnk6IHlSYWRpdXMsXG4gICAgICAgICAgICB4QXhpc1JvdGF0aW9uOiAwLFxuICAgICAgICAgICAgbGFyZ2VBcmNGbGFnOiAxLFxuICAgICAgICAgICAgc3dlZXBGbGFnOiAxLFxuICAgICAgICAgICAgZW5kWDogcmVjdGFuZ2xlLnggKyBkaXZpc2lvbldpZHRoICogNS44LFxuICAgICAgICAgICAgZW5kWTogcmVjdGFuZ2xlLnkgKyBkaXZpc2lvbkhlaWdodFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICByeDogeFJhZGl1cyxcbiAgICAgICAgICAgIHJ5OiB5UmFkaXVzICogMS4zLFxuICAgICAgICAgICAgeEF4aXNSb3RhdGlvbjogMCxcbiAgICAgICAgICAgIGxhcmdlQXJjRmxhZzogMSxcbiAgICAgICAgICAgIHN3ZWVwRmxhZzogMSxcbiAgICAgICAgICAgIGVuZFg6IHJlY3RhbmdsZS54ICsgZGl2aXNpb25XaWR0aCAqIDYsXG4gICAgICAgICAgICBlbmRZOiByZWN0YW5nbGUueSArIGRpdmlzaW9uSGVpZ2h0ICogMi4yXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJ4OiB4UmFkaXVzLFxuICAgICAgICAgICAgcnk6IHlSYWRpdXMgKiAxLjIsXG4gICAgICAgICAgICB4QXhpc1JvdGF0aW9uOiAwLFxuICAgICAgICAgICAgbGFyZ2VBcmNGbGFnOiAxLFxuICAgICAgICAgICAgc3dlZXBGbGFnOiAxLFxuICAgICAgICAgICAgZW5kWDogcmVjdGFuZ2xlLnggKyBkaXZpc2lvbldpZHRoICogNSxcbiAgICAgICAgICAgIGVuZFk6IHJlY3RhbmdsZS55ICsgZGl2aXNpb25IZWlnaHQgKiAyLjhcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcng6IHhSYWRpdXMsXG4gICAgICAgICAgICByeTogeVJhZGl1cyAvIDEuMixcbiAgICAgICAgICAgIHhBeGlzUm90YXRpb246IDAsXG4gICAgICAgICAgICBsYXJnZUFyY0ZsYWc6IDEsXG4gICAgICAgICAgICBzd2VlcEZsYWc6IDEsXG4gICAgICAgICAgICBlbmRYOiByZWN0YW5nbGUueCArIGRpdmlzaW9uV2lkdGggKiAyLjgsXG4gICAgICAgICAgICBlbmRZOiByZWN0YW5nbGUueSArIGRpdmlzaW9uSGVpZ2h0ICogMi44XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJ4OiB4UmFkaXVzLFxuICAgICAgICAgICAgcnk6IHlSYWRpdXMsXG4gICAgICAgICAgICB4QXhpc1JvdGF0aW9uOiAwLFxuICAgICAgICAgICAgbGFyZ2VBcmNGbGFnOiAxLFxuICAgICAgICAgICAgc3dlZXBGbGFnOiAxLFxuICAgICAgICAgICAgZW5kWDogcmVjdGFuZ2xlLnggKyBkaXZpc2lvbldpZHRoLFxuICAgICAgICAgICAgZW5kWTogcmVjdGFuZ2xlLnkgKyBkaXZpc2lvbkhlaWdodCAqIDIuMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICByeDogeFJhZGl1cyxcbiAgICAgICAgICAgIHJ5OiB5UmFkaXVzICogMS40MixcbiAgICAgICAgICAgIHhBeGlzUm90YXRpb246IDAsXG4gICAgICAgICAgICBsYXJnZUFyY0ZsYWc6IDEsXG4gICAgICAgICAgICBzd2VlcEZsYWc6IDEsXG4gICAgICAgICAgICBlbmRYOiByZWN0YW5nbGUueCArIGRpdmlzaW9uV2lkdGgsXG4gICAgICAgICAgICBlbmRZOiByZWN0YW5nbGUueSArIGRpdmlzaW9uSGVpZ2h0XG4gICAgICAgIH1cbiAgICBdO1xuXG4gICAgcmV0dXJuIHsgc3RhcnRQb2ludCwgYXJjcyB9O1xufVxuXG5leHBvcnQgY29uc3QgQ2xvdWRFbmdpbmU6IFNoYXBlRW5naW5lID0ge1xuICAgIGRyYXcoYm9hcmQ6IFBsYWl0Qm9hcmQsIHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBvcHRpb25zOiBPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHJzID0gUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyhib2FyZCk7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRQb2ludCwgYXJjcyB9ID0gZ2VuZXJhdGVDbG91ZFBhdGgocmVjdGFuZ2xlKTtcblxuICAgICAgICBjb25zdCBwYXRoRGF0YSA9XG4gICAgICAgICAgICBgTSAke3N0YXJ0UG9pbnRbMF19ICR7c3RhcnRQb2ludFsxXX0gYCArXG4gICAgICAgICAgICBhcmNzXG4gICAgICAgICAgICAgICAgLm1hcCgoYXJjKSA9PiBgQSAke2FyYy5yeH0gJHthcmMucnl9ICR7YXJjLnhBeGlzUm90YXRpb259ICR7YXJjLmxhcmdlQXJjRmxhZ30gJHthcmMuc3dlZXBGbGFnfSAke2FyYy5lbmRYfSAke2FyYy5lbmRZfWApXG4gICAgICAgICAgICAgICAgLmpvaW4oJ1xcbicpICtcbiAgICAgICAgICAgICcgWic7XG5cbiAgICAgICAgY29uc3Qgc3ZnRWxlbWVudCA9IHJzLnBhdGgocGF0aERhdGEsIHsgLi4ub3B0aW9ucywgZmlsbFN0eWxlOiAnc29saWQnIH0pO1xuICAgICAgICBzZXRQYXRoU3Ryb2tlTGluZWNhcChzdmdFbGVtZW50LCAncm91bmQnKTtcbiAgICAgICAgcmV0dXJuIHN2Z0VsZW1lbnQ7XG4gICAgfSxcbiAgICBpc0luc2lkZVBvaW50KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgY29uc3QgcmFuZ2VSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoW3BvaW50LCBwb2ludF0pO1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KHJlY3RhbmdsZSwgcmFuZ2VSZWN0YW5nbGUpO1xuICAgIH0sXG4gICAgZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgfSxcbiAgICBnZXROZWFyZXN0UG9pbnQocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50OiBQb2ludCkge1xuICAgICAgICBjb25zdCB7IHN0YXJ0UG9pbnQsIGFyY3MgfSA9IGdlbmVyYXRlQ2xvdWRQYXRoKHJlY3RhbmdsZSk7XG4gICAgICAgIGxldCBtaW5EaXN0YW5jZSA9IEluZmluaXR5O1xuICAgICAgICBsZXQgbmVhcmVzdFBvaW50ID0gcG9pbnQ7XG5cbiAgICAgICAgLy8g5qOA5p+l5q+P5Liq5byn5q61XG4gICAgICAgIGxldCBjdXJyZW50U3RhcnQgPSBzdGFydFBvaW50O1xuICAgICAgICBmb3IgKGNvbnN0IGFyYyBvZiBhcmNzKSB7XG4gICAgICAgICAgICBjb25zdCBhcmNOZWFyZXN0UG9pbnQgPSBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRBcmMocG9pbnQsIGN1cnJlbnRTdGFydCwgYXJjKTtcbiAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludChwb2ludFswXSwgcG9pbnRbMV0sIGFyY05lYXJlc3RQb2ludFswXSwgYXJjTmVhcmVzdFBvaW50WzFdKTtcblxuICAgICAgICAgICAgaWYgKGRpc3RhbmNlIDwgbWluRGlzdGFuY2UpIHtcbiAgICAgICAgICAgICAgICBtaW5EaXN0YW5jZSA9IGRpc3RhbmNlO1xuICAgICAgICAgICAgICAgIG5lYXJlc3RQb2ludCA9IGFyY05lYXJlc3RQb2ludDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY3VycmVudFN0YXJ0ID0gW2FyYy5lbmRYLCBhcmMuZW5kWV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmVhcmVzdFBvaW50O1xuICAgIH0sXG4gICAgZ2V0RWRnZUJ5Q29ubmVjdGlvblBvaW50KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludE9mUmVjdGFuZ2xlOiBQb2ludE9mUmVjdGFuZ2xlKTogW1BvaW50LCBQb2ludF0gfCBudWxsIHtcbiAgICAgICAgY29uc3QgY29ybmVycyA9IENsb3VkRW5naW5lLmdldENvcm5lclBvaW50cyhyZWN0YW5nbGUpO1xuICAgICAgICBjb25zdCBwb2ludCA9IFJlY3RhbmdsZUNsaWVudC5nZXRDb25uZWN0aW9uUG9pbnQocmVjdGFuZ2xlLCBwb2ludE9mUmVjdGFuZ2xlKTtcbiAgICAgICAgcmV0dXJuIGdldFBvbHlnb25FZGdlQnlDb25uZWN0aW9uUG9pbnQoY29ybmVycywgcG9pbnQpO1xuICAgIH0sXG4gICAgZ2V0Q29ubmVjdG9yUG9pbnRzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0RWRnZUNlbnRlclBvaW50cyhyZWN0YW5nbGUpO1xuICAgIH0sXG4gICAgZ2V0VGV4dFJlY3RhbmdsZShlbGVtZW50OiBQbGFpdEdlb21ldHJ5KSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZWxlbWVudC5wb2ludHMhKTtcbiAgICAgICAgY29uc3Qgc3Ryb2tlV2lkdGggPSBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gZWxlbWVudC50ZXh0SGVpZ2h0ITtcbiAgICAgICAgY29uc3Qgb3JpZ2luV2lkdGggPSBlbGVtZW50UmVjdGFuZ2xlLndpZHRoIC0gU2hhcGVEZWZhdWx0U3BhY2UucmVjdGFuZ2xlQW5kVGV4dCAqIDIgLSBzdHJva2VXaWR0aCAqIDI7XG4gICAgICAgIGNvbnN0IHdpZHRoID0gb3JpZ2luV2lkdGggLyAxLjU7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICB3aWR0aDogd2lkdGggPiAwID8gd2lkdGggOiAwLFxuICAgICAgICAgICAgeDogZWxlbWVudFJlY3RhbmdsZS54ICsgU2hhcGVEZWZhdWx0U3BhY2UucmVjdGFuZ2xlQW5kVGV4dCArIHN0cm9rZVdpZHRoICsgb3JpZ2luV2lkdGggLyA2LFxuICAgICAgICAgICAgeTogZWxlbWVudFJlY3RhbmdsZS55ICsgZWxlbWVudFJlY3RhbmdsZS5oZWlnaHQgLyA2ICsgKChlbGVtZW50UmVjdGFuZ2xlLmhlaWdodCAqIDQpIC8gNiAtIGhlaWdodCkgLyAyXG4gICAgICAgIH07XG4gICAgfVxufTtcbiJdfQ==
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvdWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kcmF3L3NyYy9lbmdpbmVzL2Jhc2ljLXNoYXBlcy9jbG91ZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUEyQixlQUFlLEVBQWlCLDRCQUE0QixFQUFFLG9CQUFvQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBR3RKLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN0RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHaEUsTUFBTSxVQUFVLGlCQUFpQixDQUFDLFNBQTBCO0lBQ3hELE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sY0FBYyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0lBQzlDLE1BQU0sT0FBTyxHQUFHLGFBQWEsR0FBRyxHQUFHLENBQUM7SUFDcEMsTUFBTSxPQUFPLEdBQUcsY0FBYyxHQUFHLEVBQUUsQ0FBQztJQUVwQyxNQUFNLFVBQVUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFVLENBQUM7SUFFeEYsTUFBTSxXQUFXLEdBQW9CO1FBQ2pDO1lBQ0ksRUFBRSxFQUFFLE9BQU87WUFDWCxFQUFFLEVBQUUsT0FBTyxHQUFHLEdBQUc7WUFDakIsYUFBYSxFQUFFLENBQUM7WUFDaEIsWUFBWSxFQUFFLENBQUM7WUFDZixTQUFTLEVBQUUsQ0FBQztZQUNaLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLGFBQWEsR0FBRyxDQUFDO1lB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O1FBQy9FLE1BQU0sV0FBVyxHQUFHLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxVQUFXLENBQUM7UUFDbkMsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLGlCQUFpQixDQUFDLGdCQUFnQixHQUFHLENBQUMsR0FBRyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3RHLE1BQU0sS0FBSyxHQUFHLFdBQVcsR0FBRyxHQUFHLENBQUM7UUFDaEMsT0FBTztZQUNILE1BQU07WUFDTixLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsZ0JBQWdCLEdBQUcsV0FBVyxHQUFHLFdBQVcsR0FBRyxDQUFDO1lBQzFGLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO1NBQ3pHLENBQUM7SUFDTixDQUFDO0NBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQsIFBvaW50LCBQb2ludE9mUmVjdGFuZ2xlLCBSZWN0YW5nbGVDbGllbnQsIFNWR0FyY0NvbW1hbmQsIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQsIHNldFBhdGhTdHJva2VMaW5lY2FwIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgUGxhaXRHZW9tZXRyeSwgU2hhcGVFbmdpbmUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICdyb3VnaGpzL2Jpbi9jb3JlJztcbmltcG9ydCB7IGdldFBvbHlnb25FZGdlQnlDb25uZWN0aW9uUG9pbnQgfSBmcm9tICcuLi8uLi91dGlscy9wb2x5Z29uJztcbmltcG9ydCB7IGdldFN0cm9rZVdpZHRoQnlFbGVtZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgU2hhcGVEZWZhdWx0U3BhY2UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kQXJjIH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUNsb3VkUGF0aChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCk6IHsgc3RhcnRQb2ludDogUG9pbnQ7IGFyY0NvbW1hbmRzOiBTVkdBcmNDb21tYW5kW10gfSB7XG4gICAgY29uc3QgZGl2aXNpb25XaWR0aCA9IHJlY3RhbmdsZS53aWR0aCAvIDc7XG4gICAgY29uc3QgZGl2aXNpb25IZWlnaHQgPSByZWN0YW5nbGUuaGVpZ2h0IC8gMy4yO1xuICAgIGNvbnN0IHhSYWRpdXMgPSBkaXZpc2lvbldpZHRoIC8gOC41O1xuICAgIGNvbnN0IHlSYWRpdXMgPSBkaXZpc2lvbkhlaWdodCAvIDIwO1xuXG4gICAgY29uc3Qgc3RhcnRQb2ludCA9IFtyZWN0YW5nbGUueCArIGRpdmlzaW9uV2lkdGgsIHJlY3RhbmdsZS55ICsgZGl2aXNpb25IZWlnaHRdIGFzIFBvaW50O1xuXG4gICAgY29uc3QgYXJjQ29tbWFuZHM6IFNWR0FyY0NvbW1hbmRbXSA9IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcng6IHhSYWRpdXMsXG4gICAgICAgICAgICByeTogeVJhZGl1cyAqIDEuMixcbiAgICAgICAgICAgIHhBeGlzUm90YXRpb246IDAsXG4gICAgICAgICAgICBsYXJnZUFyY0ZsYWc6IDEsXG4gICAgICAgICAgICBzd2VlcEZsYWc6IDEsXG4gICAgICAgICAgICBlbmRYOiByZWN0YW5nbGUueCArIGRpdmlzaW9uV2lkdGggKiAyLFxuICAgICAgICAgICAgZW5kWTogcmVjdGFuZ2xlLnkgKyBkaXZpc2lvbkhlaWdodCAvIDJcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcng6IHhSYWRpdXMsXG4gICAgICAgICAgICByeTogeVJhZGl1cyxcbiAgICAgICAgICAgIHhBeGlzUm90YXRpb246IDAsXG4gICAgICAgICAgICBsYXJnZUFyY0ZsYWc6IDEsXG4gICAgICAgICAgICBzd2VlcEZsYWc6IDEsXG4gICAgICAgICAgICBlbmRYOiByZWN0YW5nbGUueCArIGRpdmlzaW9uV2lkdGggKiA0LjIsXG4gICAgICAgICAgICBlbmRZOiByZWN0YW5nbGUueSArIGRpdmlzaW9uSGVpZ2h0IC8gMi4yXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJ4OiB4UmFkaXVzLFxuICAgICAgICAgICAgcnk6IHlSYWRpdXMsXG4gICAgICAgICAgICB4QXhpc1JvdGF0aW9uOiAwLFxuICAgICAgICAgICAgbGFyZ2VBcmNGbGFnOiAxLFxuICAgICAgICAgICAgc3dlZXBGbGFnOiAxLFxuICAgICAgICAgICAgZW5kWDogcmVjdGFuZ2xlLnggKyBkaXZpc2lvbldpZHRoICogNS44LFxuICAgICAgICAgICAgZW5kWTogcmVjdGFuZ2xlLnkgKyBkaXZpc2lvbkhlaWdodFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICByeDogeFJhZGl1cyxcbiAgICAgICAgICAgIHJ5OiB5UmFkaXVzICogMS4zLFxuICAgICAgICAgICAgeEF4aXNSb3RhdGlvbjogMCxcbiAgICAgICAgICAgIGxhcmdlQXJjRmxhZzogMSxcbiAgICAgICAgICAgIHN3ZWVwRmxhZzogMSxcbiAgICAgICAgICAgIGVuZFg6IHJlY3RhbmdsZS54ICsgZGl2aXNpb25XaWR0aCAqIDYsXG4gICAgICAgICAgICBlbmRZOiByZWN0YW5nbGUueSArIGRpdmlzaW9uSGVpZ2h0ICogMi4yXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJ4OiB4UmFkaXVzLFxuICAgICAgICAgICAgcnk6IHlSYWRpdXMgKiAxLjIsXG4gICAgICAgICAgICB4QXhpc1JvdGF0aW9uOiAwLFxuICAgICAgICAgICAgbGFyZ2VBcmNGbGFnOiAxLFxuICAgICAgICAgICAgc3dlZXBGbGFnOiAxLFxuICAgICAgICAgICAgZW5kWDogcmVjdGFuZ2xlLnggKyBkaXZpc2lvbldpZHRoICogNSxcbiAgICAgICAgICAgIGVuZFk6IHJlY3RhbmdsZS55ICsgZGl2aXNpb25IZWlnaHQgKiAyLjhcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcng6IHhSYWRpdXMsXG4gICAgICAgICAgICByeTogeVJhZGl1cyAvIDEuMixcbiAgICAgICAgICAgIHhBeGlzUm90YXRpb246IDAsXG4gICAgICAgICAgICBsYXJnZUFyY0ZsYWc6IDEsXG4gICAgICAgICAgICBzd2VlcEZsYWc6IDEsXG4gICAgICAgICAgICBlbmRYOiByZWN0YW5nbGUueCArIGRpdmlzaW9uV2lkdGggKiAyLjgsXG4gICAgICAgICAgICBlbmRZOiByZWN0YW5nbGUueSArIGRpdmlzaW9uSGVpZ2h0ICogMi44XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJ4OiB4UmFkaXVzLFxuICAgICAgICAgICAgcnk6IHlSYWRpdXMsXG4gICAgICAgICAgICB4QXhpc1JvdGF0aW9uOiAwLFxuICAgICAgICAgICAgbGFyZ2VBcmNGbGFnOiAxLFxuICAgICAgICAgICAgc3dlZXBGbGFnOiAxLFxuICAgICAgICAgICAgZW5kWDogcmVjdGFuZ2xlLnggKyBkaXZpc2lvbldpZHRoLFxuICAgICAgICAgICAgZW5kWTogcmVjdGFuZ2xlLnkgKyBkaXZpc2lvbkhlaWdodCAqIDIuMlxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICByeDogeFJhZGl1cyxcbiAgICAgICAgICAgIHJ5OiB5UmFkaXVzICogMS40MixcbiAgICAgICAgICAgIHhBeGlzUm90YXRpb246IDAsXG4gICAgICAgICAgICBsYXJnZUFyY0ZsYWc6IDEsXG4gICAgICAgICAgICBzd2VlcEZsYWc6IDEsXG4gICAgICAgICAgICBlbmRYOiByZWN0YW5nbGUueCArIGRpdmlzaW9uV2lkdGgsXG4gICAgICAgICAgICBlbmRZOiByZWN0YW5nbGUueSArIGRpdmlzaW9uSGVpZ2h0XG4gICAgICAgIH1cbiAgICBdO1xuXG4gICAgcmV0dXJuIHsgc3RhcnRQb2ludCwgYXJjQ29tbWFuZHMgfTtcbn1cblxuZXhwb3J0IGNvbnN0IENsb3VkRW5naW5lOiBTaGFwZUVuZ2luZSA9IHtcbiAgICBkcmF3KGJvYXJkOiBQbGFpdEJvYXJkLCByZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgb3B0aW9uczogT3B0aW9ucykge1xuICAgICAgICBjb25zdCBycyA9IFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcoYm9hcmQpO1xuICAgICAgICBjb25zdCB7IHN0YXJ0UG9pbnQsIGFyY0NvbW1hbmRzIH0gPSBnZW5lcmF0ZUNsb3VkUGF0aChyZWN0YW5nbGUpO1xuXG4gICAgICAgIGNvbnN0IHBhdGhEYXRhID1cbiAgICAgICAgICAgIGBNICR7c3RhcnRQb2ludFswXX0gJHtzdGFydFBvaW50WzFdfSBgICtcbiAgICAgICAgICAgIGFyY0NvbW1hbmRzXG4gICAgICAgICAgICAgICAgLm1hcCgoY29tbWFuZCkgPT4gYEEgJHtjb21tYW5kLnJ4fSAke2NvbW1hbmQucnl9ICR7Y29tbWFuZC54QXhpc1JvdGF0aW9ufSAke2NvbW1hbmQubGFyZ2VBcmNGbGFnfSAke2NvbW1hbmQuc3dlZXBGbGFnfSAke2NvbW1hbmQuZW5kWH0gJHtjb21tYW5kLmVuZFl9YClcbiAgICAgICAgICAgICAgICAuam9pbignXFxuJykgK1xuICAgICAgICAgICAgJyBaJztcblxuICAgICAgICBjb25zdCBzdmdFbGVtZW50ID0gcnMucGF0aChwYXRoRGF0YSwgeyAuLi5vcHRpb25zLCBmaWxsU3R5bGU6ICdzb2xpZCcgfSk7XG4gICAgICAgIHNldFBhdGhTdHJva2VMaW5lY2FwKHN2Z0VsZW1lbnQsICdyb3VuZCcpO1xuICAgICAgICByZXR1cm4gc3ZnRWxlbWVudDtcbiAgICB9LFxuICAgIGlzSW5zaWRlUG9pbnQocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50OiBQb2ludCkge1xuICAgICAgICBjb25zdCByYW5nZVJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhbcG9pbnQsIHBvaW50XSk7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuaXNIaXQocmVjdGFuZ2xlLCByYW5nZVJlY3RhbmdsZSk7XG4gICAgfSxcbiAgICBnZXRDb3JuZXJQb2ludHMocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5nZXRDb3JuZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICB9LFxuICAgIGdldE5lYXJlc3RQb2ludChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcG9pbnQ6IFBvaW50KSB7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRQb2ludCwgYXJjQ29tbWFuZHMgfSA9IGdlbmVyYXRlQ2xvdWRQYXRoKHJlY3RhbmdsZSk7XG4gICAgICAgIGxldCBtaW5EaXN0YW5jZSA9IEluZmluaXR5O1xuICAgICAgICBsZXQgbmVhcmVzdFBvaW50ID0gcG9pbnQ7XG5cbiAgICAgICAgbGV0IGN1cnJlbnRTdGFydCA9IHN0YXJ0UG9pbnQ7XG4gICAgICAgIGZvciAoY29uc3QgYXJjQ29tbWFuZCBvZiBhcmNDb21tYW5kcykge1xuICAgICAgICAgICAgY29uc3QgYXJjTmVhcmVzdFBvaW50ID0gZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kQXJjKHBvaW50LCBjdXJyZW50U3RhcnQsIGFyY0NvbW1hbmQpO1xuICAgICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBkaXN0YW5jZUJldHdlZW5Qb2ludEFuZFBvaW50KHBvaW50WzBdLCBwb2ludFsxXSwgYXJjTmVhcmVzdFBvaW50WzBdLCBhcmNOZWFyZXN0UG9pbnRbMV0pO1xuXG4gICAgICAgICAgICBpZiAoZGlzdGFuY2UgPCBtaW5EaXN0YW5jZSkge1xuICAgICAgICAgICAgICAgIG1pbkRpc3RhbmNlID0gZGlzdGFuY2U7XG4gICAgICAgICAgICAgICAgbmVhcmVzdFBvaW50ID0gYXJjTmVhcmVzdFBvaW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50U3RhcnQgPSBbYXJjQ29tbWFuZC5lbmRYLCBhcmNDb21tYW5kLmVuZFldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5lYXJlc3RQb2ludDtcbiAgICB9LFxuICAgIGdldEVkZ2VCeUNvbm5lY3Rpb25Qb2ludChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcG9pbnRPZlJlY3RhbmdsZTogUG9pbnRPZlJlY3RhbmdsZSk6IFtQb2ludCwgUG9pbnRdIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGNvcm5lcnMgPSBDbG91ZEVuZ2luZS5nZXRDb3JuZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ubmVjdGlvblBvaW50KHJlY3RhbmdsZSwgcG9pbnRPZlJlY3RhbmdsZSk7XG4gICAgICAgIHJldHVybiBnZXRQb2x5Z29uRWRnZUJ5Q29ubmVjdGlvblBvaW50KGNvcm5lcnMsIHBvaW50KTtcbiAgICB9LFxuICAgIGdldENvbm5lY3RvclBvaW50cyhyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldEVkZ2VDZW50ZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICB9LFxuICAgIGdldFRleHRSZWN0YW5nbGUoZWxlbWVudDogUGxhaXRHZW9tZXRyeSkge1xuICAgICAgICBjb25zdCBlbGVtZW50UmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKGVsZW1lbnQucG9pbnRzISk7XG4gICAgICAgIGNvbnN0IHN0cm9rZVdpZHRoID0gZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IGVsZW1lbnQudGV4dEhlaWdodCE7XG4gICAgICAgIGNvbnN0IG9yaWdpbldpZHRoID0gZWxlbWVudFJlY3RhbmdsZS53aWR0aCAtIFNoYXBlRGVmYXVsdFNwYWNlLnJlY3RhbmdsZUFuZFRleHQgKiAyIC0gc3Ryb2tlV2lkdGggKiAyO1xuICAgICAgICBjb25zdCB3aWR0aCA9IG9yaWdpbldpZHRoIC8gMS41O1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgd2lkdGg6IHdpZHRoID4gMCA/IHdpZHRoIDogMCxcbiAgICAgICAgICAgIHg6IGVsZW1lbnRSZWN0YW5nbGUueCArIFNoYXBlRGVmYXVsdFNwYWNlLnJlY3RhbmdsZUFuZFRleHQgKyBzdHJva2VXaWR0aCArIG9yaWdpbldpZHRoIC8gNixcbiAgICAgICAgICAgIHk6IGVsZW1lbnRSZWN0YW5nbGUueSArIGVsZW1lbnRSZWN0YW5nbGUuaGVpZ2h0IC8gNiArICgoZWxlbWVudFJlY3RhbmdsZS5oZWlnaHQgKiA0KSAvIDYgLSBoZWlnaHQpIC8gMlxuICAgICAgICB9O1xuICAgIH1cbn07XG4iXX0=
@@ -1,21 +1,60 @@
1
- import { PlaitBoard, RectangleClient, getNearestPointBetweenPointAndSegments, setStrokeLinecap } from '@plait/core';
1
+ import { PlaitBoard, RectangleClient, distanceBetweenPointAndPoint, setStrokeLinecap } from '@plait/core';
2
2
  import { ShapeDefaultSpace } from '../../constants';
3
3
  import { RectangleEngine } from '../basic-shapes/rectangle';
4
4
  import { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';
5
5
  import { getStrokeWidthByElement } from '../../utils';
6
+ import { pointsOnBezierCurves } from 'points-on-curve';
7
+ function generateNoteCurlyLeftPath(rectangle) {
8
+ const curlyWidth = rectangle.width * 0.09;
9
+ const rightX = rectangle.x + rectangle.width;
10
+ const centerY = rectangle.y + rectangle.height / 2;
11
+ return {
12
+ startPoint: [rightX, rectangle.y],
13
+ upperCurve: {
14
+ controlPoint1: [rightX - curlyWidth, rectangle.y],
15
+ controlPoint2: [rightX, centerY],
16
+ endPoint: [rightX - curlyWidth, centerY]
17
+ },
18
+ lowerCurve: {
19
+ controlPoint1: [rightX, centerY],
20
+ controlPoint2: [rightX - curlyWidth, rectangle.y + rectangle.height],
21
+ endPoint: [rightX, rectangle.y + rectangle.height]
22
+ }
23
+ };
24
+ }
6
25
  export const NoteCurlyLeftEngine = {
7
26
  draw(board, rectangle, options) {
8
27
  const rs = PlaitBoard.getRoughSVG(board);
9
- const shape = rs.path(`M${rectangle.x + rectangle.width} ${rectangle.y}
10
- C${rectangle.x + rectangle.width - rectangle.width * 0.09} ${rectangle.y},
11
- ${rectangle.x + rectangle.width} ${rectangle.y + rectangle.height / 2},
12
- ${rectangle.x + rectangle.width - rectangle.width * 0.09} ${rectangle.y + rectangle.height / 2}
13
- C${rectangle.x + rectangle.width} ${rectangle.y + rectangle.height / 2},
14
- ${rectangle.x + rectangle.width - rectangle.width * 0.09} ${rectangle.y + rectangle.height},
15
- ${rectangle.x + rectangle.width} ${rectangle.y + rectangle.height}`, { ...options, fillStyle: 'solid', fill: 'transparent' });
28
+ const { startPoint, upperCurve, lowerCurve } = generateNoteCurlyLeftPath(rectangle);
29
+ const pathData = [
30
+ `M${startPoint[0]} ${startPoint[1]}`,
31
+ `C${upperCurve.controlPoint1[0]} ${upperCurve.controlPoint1[1]},
32
+ ${upperCurve.controlPoint2[0]} ${upperCurve.controlPoint2[1]},
33
+ ${upperCurve.endPoint[0]} ${upperCurve.endPoint[1]}`,
34
+ `C${lowerCurve.controlPoint1[0]} ${lowerCurve.controlPoint1[1]},
35
+ ${lowerCurve.controlPoint2[0]} ${lowerCurve.controlPoint2[1]},
36
+ ${lowerCurve.endPoint[0]} ${lowerCurve.endPoint[1]}`
37
+ ].join(' ');
38
+ const shape = rs.path(pathData, { ...options, fillStyle: 'solid', fill: 'transparent' });
16
39
  setStrokeLinecap(shape, 'round');
17
40
  return shape;
18
41
  },
42
+ getNearestPoint(rectangle, point) {
43
+ const { startPoint, upperCurve, lowerCurve } = generateNoteCurlyLeftPath(rectangle);
44
+ const upperBezierPoints = pointsOnBezierCurves([startPoint, upperCurve.controlPoint1, upperCurve.controlPoint2, upperCurve.endPoint], 0.001);
45
+ const lowerBezierPoints = pointsOnBezierCurves([upperCurve.endPoint, lowerCurve.controlPoint1, lowerCurve.controlPoint2, lowerCurve.endPoint], 0.001);
46
+ const allPoints = [...upperBezierPoints, ...lowerBezierPoints];
47
+ let minDistance = Infinity;
48
+ let nearestPoint = point;
49
+ for (const curvePoint of allPoints) {
50
+ const distance = distanceBetweenPointAndPoint(point[0], point[1], curvePoint[0], curvePoint[1]);
51
+ if (distance < minDistance) {
52
+ minDistance = distance;
53
+ nearestPoint = [...curvePoint];
54
+ }
55
+ }
56
+ return nearestPoint;
57
+ },
19
58
  isInsidePoint(rectangle, point) {
20
59
  const rangeRectangle = RectangleClient.getRectangleByPoints([point, point]);
21
60
  return RectangleClient.isHit(rectangle, rangeRectangle);
@@ -23,9 +62,6 @@ export const NoteCurlyLeftEngine = {
23
62
  getCornerPoints(rectangle) {
24
63
  return RectangleClient.getCornerPoints(rectangle);
25
64
  },
26
- getNearestPoint(rectangle, point) {
27
- return getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));
28
- },
29
65
  getEdgeByConnectionPoint(rectangle, pointOfRectangle) {
30
66
  const corners = RectangleEngine.getCornerPoints(rectangle);
31
67
  const point = RectangleClient.getConnectionPoint(rectangle, pointOfRectangle);
@@ -47,4 +83,4 @@ export const NoteCurlyLeftEngine = {
47
83
  };
48
84
  }
49
85
  };
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90ZS1jdXJseS1sZWZ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvZW5naW5lcy9mbG93Y2hhcnQvbm90ZS1jdXJseS1sZWZ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxVQUFVLEVBR1YsZUFBZSxFQUNmLHNDQUFzQyxFQUN0QyxnQkFBZ0IsRUFDbkIsTUFBTSxhQUFhLENBQUM7QUFFckIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUV0RCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBZ0I7SUFDNUMsSUFBSSxDQUFDLEtBQWlCLEVBQUUsU0FBMEIsRUFBRSxPQUFnQjtRQUNoRSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQ2pCLElBQUksU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQyxDQUFDO2VBQzdDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxTQUFTLENBQUMsQ0FBQztjQUN0RSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLElBQUksU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUM7Y0FDbkUsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcs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bGFpdEJvYXJkLFxuICAgIFBvaW50LFxuICAgIFBvaW50T2ZSZWN0YW5nbGUsXG4gICAgUmVjdGFuZ2xlQ2xpZW50LFxuICAgIGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZFNlZ21lbnRzLFxuICAgIHNldFN0cm9rZUxpbmVjYXBcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgUGxhaXRHZW9tZXRyeSwgU2hhcGVFbmdpbmUgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFNoYXBlRGVmYXVsdFNwYWNlIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICdyb3VnaGpzL2Jpbi9jb3JlJztcbmltcG9ydCB7IFJlY3RhbmdsZUVuZ2luZSB9IGZyb20gJy4uL2Jhc2ljLXNoYXBlcy9yZWN0YW5nbGUnO1xuaW1wb3J0IHsgZ2V0UG9seWdvbkVkZ2VCeUNvbm5lY3Rpb25Qb2ludCB9IGZyb20gJy4uLy4uL3V0aWxzL3BvbHlnb24nO1xuaW1wb3J0IHsgZ2V0U3Ryb2tlV2lkdGhCeUVsZW1lbnQgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBOb3RlQ3VybHlMZWZ0RW5naW5lOiBTaGFwZUVuZ2luZSA9IHtcbiAgICBkcmF3KGJvYXJkOiBQbGFpdEJvYXJkLCByZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgb3B0aW9uczogT3B0aW9ucykge1xuICAgICAgICBjb25zdCBycyA9IFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcoYm9hcmQpO1xuICAgICAgICBjb25zdCBzaGFwZSA9IHJzLnBhdGgoXG4gICAgICAgICAgICBgTSR7cmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGh9ICR7cmVjdGFuZ2xlLnl9IFxuICAgICAgICAgICAgQyR7cmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLSByZWN0YW5nbGUud2lkdGggKiAwLjA5fSAke3JlY3RhbmdsZS55fSwgXG4gICAgICAgICAgICAke3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRofSAke3JlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAvIDJ9LCBcbiAgICAgICAgICAgICR7cmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggLSByZWN0YW5nbGUud2lkdGggKiAwLjA5fSAke3JlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAvIDJ9XG4gICAgICAgICAgICBDJHtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aH0gJHtyZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyfSwgXG4gICAgICAgICAgICAke3JlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoIC0gcmVjdGFuZ2xlLndpZHRoICogMC4wOX0gJHtyZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHR9LCBcbiAgICAgICAgICAgICR7cmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGh9ICR7cmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0fWAsXG4gICAgICAgICAgICB7IC4uLm9wdGlvbnMsIGZpbGxTdHlsZTogJ3NvbGlkJywgZmlsbDogJ3RyYW5zcGFyZW50JyB9XG4gICAgICAgICk7XG4gICAgICAgIHNldFN0cm9rZUxpbmVjYXAoc2hhcGUsICdyb3VuZCcpO1xuICAgICAgICByZXR1cm4gc2hhcGU7XG4gICAgfSxcbiAgICBpc0luc2lkZVBvaW50KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgY29uc3QgcmFuZ2VSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoW3BvaW50LCBwb2ludF0pO1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KHJlY3RhbmdsZSwgcmFuZ2VSZWN0YW5nbGUpO1xuICAgIH0sXG4gICAgZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgfSxcbiAgICBnZXROZWFyZXN0UG9pbnQocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50OiBQb2ludCkge1xuICAgICAgICByZXR1cm4gZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kU2VnbWVudHMocG9pbnQsIFJlY3RhbmdsZUVuZ2luZS5nZXRDb3JuZXJQb2ludHMocmVjdGFuZ2xlKSk7XG4gICAgfSxcbiAgICBnZXRFZGdlQnlDb25uZWN0aW9uUG9pbnQocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50T2ZSZWN0YW5nbGU6IFBvaW50T2ZSZWN0YW5nbGUpOiBbUG9pbnQsIFBvaW50XSB8IG51bGwge1xuICAgICAgICBjb25zdCBjb3JuZXJzID0gUmVjdGFuZ2xlRW5naW5lLmdldENvcm5lclBvaW50cyhyZWN0YW5nbGUpO1xuICAgICAgICBjb25zdCBwb2ludCA9IFJlY3RhbmdsZUNsaWVudC5nZXRDb25uZWN0aW9uUG9pbnQocmVjdGFuZ2xlLCBwb2ludE9mUmVjdGFuZ2xlKTtcbiAgICAgICAgcmV0dXJuIGdldFBvbHlnb25FZGdlQnlDb25uZWN0aW9uUG9pbnQoY29ybmVycywgcG9pbnQpO1xuICAgIH0sXG4gICAgZ2V0Q29ubmVjdG9yUG9pbnRzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0RWRnZUNlbnRlclBvaW50cyhyZWN0YW5nbGUpO1xuICAgIH0sXG4gICAgZ2V0VGV4dFJlY3RhbmdsZTogKGVsZW1lbnQ6IFBsYWl0R2VvbWV0cnkpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudFJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhlbGVtZW50LnBvaW50cyEpO1xuICAgICAgICBjb25zdCBzdHJva2VXaWR0aCA9IGdldFN0cm9rZVdpZHRoQnlFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBlbGVtZW50LnRleHRIZWlnaHQhO1xuICAgICAgICBjb25zdCB3aWR0aCA9IGVsZW1lbnRSZWN0YW5nbGUud2lkdGggLSBlbGVtZW50UmVjdGFuZ2xlLndpZHRoICogMC4wOSAtIFNoYXBlRGVmYXVsdFNwYWNlLnJlY3RhbmdsZUFuZFRleHQgKiAyIC0gc3Ryb2tlV2lkdGggKiAyO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgd2lkdGg6IHdpZHRoID4gMCA/IHdpZHRoIDogMCxcbiAgICAgICAgICAgIHg6IGVsZW1lbnRSZWN0YW5nbGUueCArIFNoYXBlRGVmYXVsdFNwYWNlLnJlY3RhbmdsZUFuZFRleHQgKyBzdHJva2VXaWR0aCxcbiAgICAgICAgICAgIHk6IGVsZW1lbnRSZWN0YW5nbGUueSArIChlbGVtZW50UmVjdGFuZ2xlLmhlaWdodCAtIGhlaWdodCkgLyAyXG4gICAgICAgIH07XG4gICAgfVxufTtcbiJdfQ==
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90ZS1jdXJseS1sZWZ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvZW5naW5lcy9mbG93Y2hhcnQvbm90ZS1jdXJseS1sZWZ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxVQUFVLEVBR1YsZUFBZSxFQUNmLDRCQUE0QixFQUU1QixnQkFBZ0IsRUFDbkIsTUFBTSxhQUFhLENBQUM7QUFFckIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzVELE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN0RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQWdCdkQsU0FBUyx5QkFBeUIsQ0FBQyxTQUEwQjtJQUN6RCxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztJQUMxQyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7SUFDN0MsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUVuRCxPQUFPO1FBQ0gsVUFBVSxFQUFFLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDakMsVUFBVSxFQUFFO1lBQ1IsYUFBYSxFQUFFLENBQUMsTUFBTSxHQUFHLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ2pELGFBQWEsRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUM7WUFDaEMsUUFBUSxFQUFFLENBQUMsTUFBTSxHQUFHLFVBQVUsRUFBRSxPQUFPLENBQUM7U0FDM0M7UUFDRCxVQUFVLEVBQUU7WUFDUixhQUFhLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDO1lBQ2hDLGFBQWEsRUFBRSxDQUFDLE1BQU0sR0FBRyxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO1lBQ3BFLFFBQVEsRUFBRSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7U0FDckQ7S0FDSixDQUFDO0FBQ04sQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFnQjtJQUM1QyxJQUFJLENBQUMsS0FBaUIsRUFBRSxTQUEwQixFQUFFLE9BQWdCO1FBQ2hFLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEdBQUcseUJBQXlCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFcEYsTUFBTSxRQUFRLEdBQUc7WUFDYixJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDcEMsSUFBSSxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO2NBQzVELFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7Y0FDMUQsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3BELElBQUksVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQztjQUM1RCxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO2NBQzFELFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRTtTQUN2RCxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVaLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsR0FBRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUN6RixnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDakMsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVELGVBQWUsQ0FBQyxTQUEwQixFQUFFLEtBQVk7UUFDcEQsTUFBTSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEdBQUcseUJBQXlCLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFcEYsTUFBTSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FDMUMsQ0FBQyxVQUFVLEVBQUUsVUFBVSxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFDckYsS0FBSyxDQUNSLENBQUM7UUFFRixNQUFNLGlCQUFpQixHQUFHLG9CQUFvQixDQUMxQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLGFBQWEsRUFBRSxVQUFVLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFDOUYsS0FBSyxDQUNSLENBQUM7UUFFRixNQUFNLFNBQVMsR0FBRyxDQUFDLEdBQUcsaUJBQWlCLEVBQUUsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDO1FBRS9ELElBQUksV0FBVyxHQUFHLFFBQVEsQ0FBQztRQUMzQixJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7UUFFekIsS0FBSyxNQUFNLFVBQVUsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNqQyxNQUFNLFFBQVEsR0FBRyw0QkFBNEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNoRyxJQUFJLFFBQVEsR0FBRyxXQUFXLEVBQUUsQ0FBQztnQkFDekIsV0FBVyxHQUFHLFFBQVEsQ0FBQztnQkFDdkIsWUFBWSxHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQztZQUNuQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFDRCxhQUFhLENBQUMsU0FBMEIsRUFBRSxLQUFZO1FBQ2xELE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQzVFLE9BQU8sZUFBZSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUNELGVBQWUsQ0FBQyxTQUEwQjtRQUN0QyxPQUFPLGVBQWUsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUNELHdCQUF3QixDQUFDLFNBQTBCLEVBQUUsZ0JBQWtDO1FBQ25GLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0QsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzlFLE9BQU8sK0JBQStCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxTQUEwQjtRQUN6QyxPQUFPLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFzQixFQUFFLEVBQUU7UUFDekMsTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLE1BQU8sQ0FBQyxDQUFDO1FBQy9FLE1BQU0sV0FBVyxHQUFHLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxVQUFXLENBQUM7UUFDbkMsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLGdCQUFnQixDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsaUJBQWlCLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDaEksT0FBTztZQUNILE1BQU07WUFDTixLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsZ0JBQWdCLEdBQUcsV0FBVztZQUN4RSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7U0FDakUsQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBvaW50LFxuICAgIFBvaW50T2ZSZWN0YW5nbGUsXG4gICAgUmVjdGFuZ2xlQ2xpZW50LFxuICAgIGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQsXG4gICAgZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kU2VnbWVudHMsXG4gICAgc2V0U3Ryb2tlTGluZWNhcFxufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBQbGFpdEdlb21ldHJ5LCBTaGFwZUVuZ2luZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgU2hhcGVEZWZhdWx0U3BhY2UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJ3JvdWdoanMvYmluL2NvcmUnO1xuaW1wb3J0IHsgUmVjdGFuZ2xlRW5naW5lIH0gZnJvbSAnLi4vYmFzaWMtc2hhcGVzL3JlY3RhbmdsZSc7XG5pbXBvcnQgeyBnZXRQb2x5Z29uRWRnZUJ5Q29ubmVjdGlvblBvaW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvcG9seWdvbic7XG5pbXBvcnQgeyBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IHBvaW50c09uQmV6aWVyQ3VydmVzIH0gZnJvbSAncG9pbnRzLW9uLWN1cnZlJztcblxuaW50ZXJmYWNlIE5vdGVDdXJseUxlZnRQYXRoRGF0YSB7XG4gICAgc3RhcnRQb2ludDogUG9pbnQ7XG4gICAgdXBwZXJDdXJ2ZToge1xuICAgICAgICBjb250cm9sUG9pbnQxOiBQb2ludDtcbiAgICAgICAgY29udHJvbFBvaW50MjogUG9pbnQ7XG4gICAgICAgIGVuZFBvaW50OiBQb2ludDtcbiAgICB9O1xuICAgIGxvd2VyQ3VydmU6IHtcbiAgICAgICAgY29udHJvbFBvaW50MTogUG9pbnQ7XG4gICAgICAgIGNvbnRyb2xQb2ludDI6IFBvaW50O1xuICAgICAgICBlbmRQb2ludDogUG9pbnQ7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVOb3RlQ3VybHlMZWZ0UGF0aChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCk6IE5vdGVDdXJseUxlZnRQYXRoRGF0YSB7XG4gICAgY29uc3QgY3VybHlXaWR0aCA9IHJlY3RhbmdsZS53aWR0aCAqIDAuMDk7XG4gICAgY29uc3QgcmlnaHRYID0gcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGg7XG4gICAgY29uc3QgY2VudGVyWSA9IHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAvIDI7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBzdGFydFBvaW50OiBbcmlnaHRYLCByZWN0YW5nbGUueV0sXG4gICAgICAgIHVwcGVyQ3VydmU6IHtcbiAgICAgICAgICAgIGNvbnRyb2xQb2ludDE6IFtyaWdodFggLSBjdXJseVdpZHRoLCByZWN0YW5nbGUueV0sXG4gICAgICAgICAgICBjb250cm9sUG9pbnQyOiBbcmlnaHRYLCBjZW50ZXJZXSxcbiAgICAgICAgICAgIGVuZFBvaW50OiBbcmlnaHRYIC0gY3VybHlXaWR0aCwgY2VudGVyWV1cbiAgICAgICAgfSxcbiAgICAgICAgbG93ZXJDdXJ2ZToge1xuICAgICAgICAgICAgY29udHJvbFBvaW50MTogW3JpZ2h0WCwgY2VudGVyWV0sXG4gICAgICAgICAgICBjb250cm9sUG9pbnQyOiBbcmlnaHRYIC0gY3VybHlXaWR0aCwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0XSxcbiAgICAgICAgICAgIGVuZFBvaW50OiBbcmlnaHRYLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHRdXG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5leHBvcnQgY29uc3QgTm90ZUN1cmx5TGVmdEVuZ2luZTogU2hhcGVFbmdpbmUgPSB7XG4gICAgZHJhdyhib2FyZDogUGxhaXRCb2FyZCwgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcnMgPSBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKGJvYXJkKTtcbiAgICAgICAgY29uc3QgeyBzdGFydFBvaW50LCB1cHBlckN1cnZlLCBsb3dlckN1cnZlIH0gPSBnZW5lcmF0ZU5vdGVDdXJseUxlZnRQYXRoKHJlY3RhbmdsZSk7XG5cbiAgICAgICAgY29uc3QgcGF0aERhdGEgPSBbXG4gICAgICAgICAgICBgTSR7c3RhcnRQb2ludFswXX0gJHtzdGFydFBvaW50WzFdfWAsXG4gICAgICAgICAgICBgQyR7dXBwZXJDdXJ2ZS5jb250cm9sUG9pbnQxWzBdfSAke3VwcGVyQ3VydmUuY29udHJvbFBvaW50MVsxXX0sXG4gICAgICAgICAgICAke3VwcGVyQ3VydmUuY29udHJvbFBvaW50MlswXX0gJHt1cHBlckN1cnZlLmNvbnRyb2xQb2ludDJbMV19LFxuICAgICAgICAgICAgJHt1cHBlckN1cnZlLmVuZFBvaW50WzBdfSAke3VwcGVyQ3VydmUuZW5kUG9pbnRbMV19YCxcbiAgICAgICAgICAgIGBDJHtsb3dlckN1cnZlLmNvbnRyb2xQb2ludDFbMF19ICR7bG93ZXJDdXJ2ZS5jb250cm9sUG9pbnQxWzFdfSxcbiAgICAgICAgICAgICR7bG93ZXJDdXJ2ZS5jb250cm9sUG9pbnQyWzBdfSAke2xvd2VyQ3VydmUuY29udHJvbFBvaW50MlsxXX0sXG4gICAgICAgICAgICAke2xvd2VyQ3VydmUuZW5kUG9pbnRbMF19ICR7bG93ZXJDdXJ2ZS5lbmRQb2ludFsxXX1gXG4gICAgICAgIF0uam9pbignICcpO1xuXG4gICAgICAgIGNvbnN0IHNoYXBlID0gcnMucGF0aChwYXRoRGF0YSwgeyAuLi5vcHRpb25zLCBmaWxsU3R5bGU6ICdzb2xpZCcsIGZpbGw6ICd0cmFuc3BhcmVudCcgfSk7XG4gICAgICAgIHNldFN0cm9rZUxpbmVjYXAoc2hhcGUsICdyb3VuZCcpO1xuICAgICAgICByZXR1cm4gc2hhcGU7XG4gICAgfSxcblxuICAgIGdldE5lYXJlc3RQb2ludChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcG9pbnQ6IFBvaW50KSB7XG4gICAgICAgIGNvbnN0IHsgc3RhcnRQb2ludCwgdXBwZXJDdXJ2ZSwgbG93ZXJDdXJ2ZSB9ID0gZ2VuZXJhdGVOb3RlQ3VybHlMZWZ0UGF0aChyZWN0YW5nbGUpO1xuXG4gICAgICAgIGNvbnN0IHVwcGVyQmV6aWVyUG9pbnRzID0gcG9pbnRzT25CZXppZXJDdXJ2ZXMoXG4gICAgICAgICAgICBbc3RhcnRQb2ludCwgdXBwZXJDdXJ2ZS5jb250cm9sUG9pbnQxLCB1cHBlckN1cnZlLmNvbnRyb2xQb2ludDIsIHVwcGVyQ3VydmUuZW5kUG9pbnRdLFxuICAgICAgICAgICAgMC4wMDFcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBsb3dlckJlemllclBvaW50cyA9IHBvaW50c09uQmV6aWVyQ3VydmVzKFxuICAgICAgICAgICAgW3VwcGVyQ3VydmUuZW5kUG9pbnQsIGxvd2VyQ3VydmUuY29udHJvbFBvaW50MSwgbG93ZXJDdXJ2ZS5jb250cm9sUG9pbnQyLCBsb3dlckN1cnZlLmVuZFBvaW50XSxcbiAgICAgICAgICAgIDAuMDAxXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgYWxsUG9pbnRzID0gWy4uLnVwcGVyQmV6aWVyUG9pbnRzLCAuLi5sb3dlckJlemllclBvaW50c107XG5cbiAgICAgICAgbGV0IG1pbkRpc3RhbmNlID0gSW5maW5pdHk7XG4gICAgICAgIGxldCBuZWFyZXN0UG9pbnQgPSBwb2ludDtcblxuICAgICAgICBmb3IgKGNvbnN0IGN1cnZlUG9pbnQgb2YgYWxsUG9pbnRzKSB7XG4gICAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IGRpc3RhbmNlQmV0d2VlblBvaW50QW5kUG9pbnQocG9pbnRbMF0sIHBvaW50WzFdLCBjdXJ2ZVBvaW50WzBdLCBjdXJ2ZVBvaW50WzFdKTtcbiAgICAgICAgICAgIGlmIChkaXN0YW5jZSA8IG1pbkRpc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgbWluRGlzdGFuY2UgPSBkaXN0YW5jZTtcbiAgICAgICAgICAgICAgICBuZWFyZXN0UG9pbnQgPSBbLi4uY3VydmVQb2ludF07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmVhcmVzdFBvaW50O1xuICAgIH0sXG4gICAgaXNJbnNpZGVQb2ludChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcG9pbnQ6IFBvaW50KSB7XG4gICAgICAgIGNvbnN0IHJhbmdlUmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKFtwb2ludCwgcG9pbnRdKTtcbiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5pc0hpdChyZWN0YW5nbGUsIHJhbmdlUmVjdGFuZ2xlKTtcbiAgICB9LFxuICAgIGdldENvcm5lclBvaW50cyhyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyhyZWN0YW5nbGUpO1xuICAgIH0sXG4gICAgZ2V0RWRnZUJ5Q29ubmVjdGlvblBvaW50KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludE9mUmVjdGFuZ2xlOiBQb2ludE9mUmVjdGFuZ2xlKTogW1BvaW50LCBQb2ludF0gfCBudWxsIHtcbiAgICAgICAgY29uc3QgY29ybmVycyA9IFJlY3RhbmdsZUVuZ2luZS5nZXRDb3JuZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ubmVjdGlvblBvaW50KHJlY3RhbmdsZSwgcG9pbnRPZlJlY3RhbmdsZSk7XG4gICAgICAgIHJldHVybiBnZXRQb2x5Z29uRWRnZUJ5Q29ubmVjdGlvblBvaW50KGNvcm5lcnMsIHBvaW50KTtcbiAgICB9LFxuICAgIGdldENvbm5lY3RvclBvaW50cyhyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldEVkZ2VDZW50ZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICB9LFxuICAgIGdldFRleHRSZWN0YW5nbGU6IChlbGVtZW50OiBQbGFpdEdlb21ldHJ5KSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZWxlbWVudC5wb2ludHMhKTtcbiAgICAgICAgY29uc3Qgc3Ryb2tlV2lkdGggPSBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gZWxlbWVudC50ZXh0SGVpZ2h0ITtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBlbGVtZW50UmVjdGFuZ2xlLndpZHRoIC0gZWxlbWVudFJlY3RhbmdsZS53aWR0aCAqIDAuMDkgLSBTaGFwZURlZmF1bHRTcGFjZS5yZWN0YW5nbGVBbmRUZXh0ICogMiAtIHN0cm9rZVdpZHRoICogMjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoOiB3aWR0aCA+IDAgPyB3aWR0aCA6IDAsXG4gICAgICAgICAgICB4OiBlbGVtZW50UmVjdGFuZ2xlLnggKyBTaGFwZURlZmF1bHRTcGFjZS5yZWN0YW5nbGVBbmRUZXh0ICsgc3Ryb2tlV2lkdGgsXG4gICAgICAgICAgICB5OiBlbGVtZW50UmVjdGFuZ2xlLnkgKyAoZWxlbWVudFJlY3RhbmdsZS5oZWlnaHQgLSBoZWlnaHQpIC8gMlxuICAgICAgICB9O1xuICAgIH1cbn07XG4iXX0=
@@ -1,18 +1,40 @@
1
- import { PlaitBoard, RectangleClient, getNearestPointBetweenPointAndSegments, setStrokeLinecap } from '@plait/core';
1
+ import { PlaitBoard, RectangleClient, distanceBetweenPointAndPoint, setStrokeLinecap } from '@plait/core';
2
2
  import { ShapeDefaultSpace } from '../../constants';
3
3
  import { RectangleEngine } from '../basic-shapes/rectangle';
4
4
  import { getPolygonEdgeByConnectionPoint } from '../../utils/polygon';
5
5
  import { getStrokeWidthByElement } from '../../utils';
6
+ import { pointsOnBezierCurves } from 'points-on-curve';
7
+ function generateNoteCurlyRightPath(rectangle) {
8
+ const curlyWidth = rectangle.width * 0.09;
9
+ const centerY = rectangle.y + rectangle.height / 2;
10
+ return {
11
+ startPoint: [rectangle.x, rectangle.y],
12
+ upperCurve: {
13
+ controlPoint1: [rectangle.x + curlyWidth, rectangle.y],
14
+ controlPoint2: [rectangle.x, centerY],
15
+ endPoint: [rectangle.x + curlyWidth, centerY]
16
+ },
17
+ lowerCurve: {
18
+ controlPoint1: [rectangle.x, centerY],
19
+ controlPoint2: [rectangle.x + curlyWidth, rectangle.y + rectangle.height],
20
+ endPoint: [rectangle.x, rectangle.y + rectangle.height]
21
+ }
22
+ };
23
+ }
6
24
  export const NoteCurlyRightEngine = {
7
25
  draw(board, rectangle, options) {
8
26
  const rs = PlaitBoard.getRoughSVG(board);
9
- const shape = rs.path(`M${rectangle.x} ${rectangle.y}
10
- C${rectangle.x + rectangle.width * 0.09} ${rectangle.y},
11
- ${rectangle.x} ${rectangle.y + rectangle.height / 2},
12
- ${rectangle.x + rectangle.width * 0.09} ${rectangle.y + rectangle.height / 2}
13
- C${rectangle.x} ${rectangle.y + rectangle.height / 2},
14
- ${rectangle.x + rectangle.width * 0.09} ${rectangle.y + rectangle.height},
15
- ${rectangle.x} ${rectangle.y + rectangle.height}`, { ...options, fillStyle: 'solid', fill: 'transparent' });
27
+ const { startPoint, upperCurve, lowerCurve } = generateNoteCurlyRightPath(rectangle);
28
+ const pathData = [
29
+ `M${startPoint[0]} ${startPoint[1]}`,
30
+ `C${upperCurve.controlPoint1[0]} ${upperCurve.controlPoint1[1]},
31
+ ${upperCurve.controlPoint2[0]} ${upperCurve.controlPoint2[1]},
32
+ ${upperCurve.endPoint[0]} ${upperCurve.endPoint[1]}`,
33
+ `C${lowerCurve.controlPoint1[0]} ${lowerCurve.controlPoint1[1]},
34
+ ${lowerCurve.controlPoint2[0]} ${lowerCurve.controlPoint2[1]},
35
+ ${lowerCurve.endPoint[0]} ${lowerCurve.endPoint[1]}`
36
+ ].join(' ');
37
+ const shape = rs.path(pathData, { ...options, fillStyle: 'solid', fill: 'transparent' });
16
38
  setStrokeLinecap(shape, 'round');
17
39
  return shape;
18
40
  },
@@ -24,7 +46,24 @@ export const NoteCurlyRightEngine = {
24
46
  return RectangleClient.getCornerPoints(rectangle);
25
47
  },
26
48
  getNearestPoint(rectangle, point) {
27
- return getNearestPointBetweenPointAndSegments(point, RectangleEngine.getCornerPoints(rectangle));
49
+ const { startPoint, upperCurve, lowerCurve } = generateNoteCurlyRightPath(rectangle);
50
+ // 生成上部贝塞尔曲线的点
51
+ const upperBezierPoints = pointsOnBezierCurves([startPoint, upperCurve.controlPoint1, upperCurve.controlPoint2, upperCurve.endPoint], 0.001);
52
+ // 生成下部贝塞尔曲线的点
53
+ const lowerBezierPoints = pointsOnBezierCurves([upperCurve.endPoint, lowerCurve.controlPoint1, lowerCurve.controlPoint2, lowerCurve.endPoint], 0.001);
54
+ // 合并所有点
55
+ const allPoints = [...upperBezierPoints, ...lowerBezierPoints];
56
+ // 找到最近的点
57
+ let minDistance = Infinity;
58
+ let nearestPoint = [...point];
59
+ for (const curvePoint of allPoints) {
60
+ const distance = distanceBetweenPointAndPoint(point[0], point[1], curvePoint[0], curvePoint[1]);
61
+ if (distance < minDistance) {
62
+ minDistance = distance;
63
+ nearestPoint = [...curvePoint];
64
+ }
65
+ }
66
+ return nearestPoint;
28
67
  },
29
68
  getEdgeByConnectionPoint(rectangle, pointOfRectangle) {
30
69
  const corners = RectangleEngine.getCornerPoints(rectangle);
@@ -47,4 +86,4 @@ export const NoteCurlyRightEngine = {
47
86
  };
48
87
  }
49
88
  };
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90ZS1jdXJseS1yaWdodC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL2VuZ2luZXMvZmxvd2NoYXJ0L25vdGUtY3VybHktcmlnaHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFVBQVUsRUFHVixlQUFlLEVBQ2Ysc0NBQXNDLEVBQ3RDLGdCQUFnQixFQUNuQixNQUFNLGFBQWEsQ0FBQztBQUVyQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXRELE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFnQjtJQUM3QyxJQUFJLENBQUMsS0FBaUIsRUFBRSxTQUEwQixFQUFFLE9BQWdCO1FBQ2hFLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FDakIsSUFBSSxTQUFTLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDO2VBQzNCLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLEtBQUssR0FBRyxJQUFJLElBQUksU0FBUyxDQUFDLENBQUM7Y0FDcEQsU0FBUyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQztjQUNqRCxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDO2VBQ3pFLFNBQVMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUM7Y0FDbEQsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNO2NBQ3RFLFNBQVMsQ0FBQyxDQUFDLElBQUksU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQ2pELEVBQUUsR0FBRyxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLENBQzFELENBQUM7UUFDRixnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDakMsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUNELGFBQWEsQ0FBQyxTQUEwQixFQUFFLEtBQVk7UUFDbEQsTUFBTSxjQUFjLEdBQUcsZUFBZSxDQUFDLG9CQUFvQixDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDNUUsT0FBTyxlQUFlLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBQ0QsZUFBZSxDQUFDLFNBQTBCO1FBQ3RDLE9BQU8sZUFBZSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQ0QsZUFBZSxDQUFDLFNBQTBCLEVBQUUsS0FBWTtRQUNwRCxPQUFPLHNDQUFzQyxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDckcsQ0FBQztJQUNELHdCQUF3QixDQUFDLFNBQTBCLEVBQUUsZ0JBQWtDO1FBQ25GLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0QsTUFBTSxLQUFLLEdBQUcsZUFBZSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBQzlFLE9BQU8sK0JBQStCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFDRCxrQkFBa0IsQ0FBQyxTQUEwQjtRQUN6QyxPQUFPLGVBQWUsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBQ0QsZ0JBQWdCLEVBQUUsQ0FBQyxPQUFzQixFQUFFLEVBQUU7UUFDekMsTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLE1BQU8sQ0FBQyxDQUFDO1FBQy9FLE1BQU0sV0FBVyxHQUFHLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxVQUFXLENBQUM7UUFDbkMsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLGdCQUFnQixDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsaUJBQWlCLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDaEksT0FBTztZQUNILE1BQU07WUFDTixLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxnQkFBZ0IsR0FBRyxXQUFXO1lBQ3hHLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztTQUNqRSxDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFBsYWl0Qm9hcmQsXG4gICAgUG9pbnQsXG4gICAgUG9pbnRPZlJlY3RhbmdsZSxcbiAgICBSZWN0YW5nbGVDbGllbnQsXG4gICAgZ2V0TmVhcmVzdFBvaW50QmV0d2VlblBvaW50QW5kU2VnbWVudHMsXG4gICAgc2V0U3Ryb2tlTGluZWNhcFxufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBQbGFpdEdlb21ldHJ5LCBTaGFwZUVuZ2luZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgU2hhcGVEZWZhdWx0U3BhY2UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gJ3JvdWdoanMvYmluL2NvcmUnO1xuaW1wb3J0IHsgUmVjdGFuZ2xlRW5naW5lIH0gZnJvbSAnLi4vYmFzaWMtc2hhcGVzL3JlY3RhbmdsZSc7XG5pbXBvcnQgeyBnZXRQb2x5Z29uRWRnZUJ5Q29ubmVjdGlvblBvaW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvcG9seWdvbic7XG5pbXBvcnQgeyBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudCB9IGZyb20gJy4uLy4uL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IE5vdGVDdXJseVJpZ2h0RW5naW5lOiBTaGFwZUVuZ2luZSA9IHtcbiAgICBkcmF3KGJvYXJkOiBQbGFpdEJvYXJkLCByZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgb3B0aW9uczogT3B0aW9ucykge1xuICAgICAgICBjb25zdCBycyA9IFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcoYm9hcmQpO1xuICAgICAgICBjb25zdCBzaGFwZSA9IHJzLnBhdGgoXG4gICAgICAgICAgICBgTSR7cmVjdGFuZ2xlLnh9ICR7cmVjdGFuZ2xlLnl9XG4gICAgICAgICAgICBDJHtyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCAqIDAuMDl9ICR7cmVjdGFuZ2xlLnl9LFxuICAgICAgICAgICAgJHtyZWN0YW5nbGUueH0gJHtyZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyfSxcbiAgICAgICAgICAgICR7cmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggKiAwLjA5fSAke3JlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCAvIDJ9XG4gICAgICAgICAgICBDJHtyZWN0YW5nbGUueH0gJHtyZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHQgLyAyfSxcbiAgICAgICAgICAgICR7cmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggKiAwLjA5fSAke3JlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodH0sXG4gICAgICAgICAgICAke3JlY3RhbmdsZS54fSAke3JlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodH1gLFxuICAgICAgICAgICAgeyAuLi5vcHRpb25zLCBmaWxsU3R5bGU6ICdzb2xpZCcsIGZpbGw6ICd0cmFuc3BhcmVudCcgfVxuICAgICAgICApO1xuICAgICAgICBzZXRTdHJva2VMaW5lY2FwKHNoYXBlLCAncm91bmQnKTtcbiAgICAgICAgcmV0dXJuIHNoYXBlO1xuICAgIH0sXG4gICAgaXNJbnNpZGVQb2ludChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgcG9pbnQ6IFBvaW50KSB7XG4gICAgICAgIGNvbnN0IHJhbmdlUmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKFtwb2ludCwgcG9pbnRdKTtcbiAgICAgICAgcmV0dXJuIFJlY3RhbmdsZUNsaWVudC5pc0hpdChyZWN0YW5nbGUsIHJhbmdlUmVjdGFuZ2xlKTtcbiAgICB9LFxuICAgIGdldENvcm5lclBvaW50cyhyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldENvcm5lclBvaW50cyhyZWN0YW5nbGUpO1xuICAgIH0sXG4gICAgZ2V0TmVhcmVzdFBvaW50KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgcmV0dXJuIGdldE5lYXJlc3RQb2ludEJldHdlZW5Qb2ludEFuZFNlZ21lbnRzKHBvaW50LCBSZWN0YW5nbGVFbmdpbmUuZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZSkpO1xuICAgIH0sXG4gICAgZ2V0RWRnZUJ5Q29ubmVjdGlvblBvaW50KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludE9mUmVjdGFuZ2xlOiBQb2ludE9mUmVjdGFuZ2xlKTogW1BvaW50LCBQb2ludF0gfCBudWxsIHtcbiAgICAgICAgY29uc3QgY29ybmVycyA9IFJlY3RhbmdsZUVuZ2luZS5nZXRDb3JuZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICAgICAgY29uc3QgcG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ubmVjdGlvblBvaW50KHJlY3RhbmdsZSwgcG9pbnRPZlJlY3RhbmdsZSk7XG4gICAgICAgIHJldHVybiBnZXRQb2x5Z29uRWRnZUJ5Q29ubmVjdGlvblBvaW50KGNvcm5lcnMsIHBvaW50KTtcbiAgICB9LFxuICAgIGdldENvbm5lY3RvclBvaW50cyhyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmdldEVkZ2VDZW50ZXJQb2ludHMocmVjdGFuZ2xlKTtcbiAgICB9LFxuICAgIGdldFRleHRSZWN0YW5nbGU6IChlbGVtZW50OiBQbGFpdEdlb21ldHJ5KSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoZWxlbWVudC5wb2ludHMhKTtcbiAgICAgICAgY29uc3Qgc3Ryb2tlV2lkdGggPSBnZXRTdHJva2VXaWR0aEJ5RWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gZWxlbWVudC50ZXh0SGVpZ2h0ITtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBlbGVtZW50UmVjdGFuZ2xlLndpZHRoIC0gZWxlbWVudFJlY3RhbmdsZS53aWR0aCAqIDAuMDkgLSBTaGFwZURlZmF1bHRTcGFjZS5yZWN0YW5nbGVBbmRUZXh0ICogMiAtIHN0cm9rZVdpZHRoICogMjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIHdpZHRoOiB3aWR0aCA+IDAgPyB3aWR0aCA6IDAsXG4gICAgICAgICAgICB4OiBlbGVtZW50UmVjdGFuZ2xlLnggKyBlbGVtZW50UmVjdGFuZ2xlLndpZHRoICogMC4wOSArIFNoYXBlRGVmYXVsdFNwYWNlLnJlY3RhbmdsZUFuZFRleHQgKyBzdHJva2VXaWR0aCxcbiAgICAgICAgICAgIHk6IGVsZW1lbnRSZWN0YW5nbGUueSArIChlbGVtZW50UmVjdGFuZ2xlLmhlaWdodCAtIGhlaWdodCkgLyAyXG4gICAgICAgIH07XG4gICAgfVxufTtcbiJdfQ==
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90ZS1jdXJseS1yaWdodC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL2VuZ2luZXMvZmxvd2NoYXJ0L25vdGUtY3VybHktcmlnaHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFVBQVUsRUFHVixlQUFlLEVBQ2YsNEJBQTRCLEVBRTVCLGdCQUFnQixFQUNuQixNQUFNLGFBQWEsQ0FBQztBQUVyQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBZ0J2RCxTQUFTLDBCQUEwQixDQUFDLFNBQTBCO0lBQzFELE1BQU0sVUFBVSxHQUFHLFNBQVMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQzFDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFbkQsT0FBTztRQUNILFVBQVUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUN0QyxVQUFVLEVBQUU7WUFDUixhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1lBQ3RELGFBQWEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDO1lBQ3JDLFFBQVEsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxFQUFFLE9BQU8sQ0FBQztTQUNoRDtRQUNELFVBQVUs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QUFzQixFQUFFLEVBQUU7UUFDekMsTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLE1BQU8sQ0FBQyxDQUFDO1FBQy9FLE1BQU0sV0FBVyxHQUFHLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxVQUFXLENBQUM7UUFDbkMsTUFBTSxLQUFLLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLGdCQUFnQixDQUFDLEtBQUssR0FBRyxJQUFJLEdBQUcsaUJBQWlCLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDaEksT0FBTztZQUNILE1BQU07WUFDTixLQUFLLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVCLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxHQUFHLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxnQkFBZ0IsR0FBRyxXQUFXO1lBQ3hHLENBQUMsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztTQUNqRSxDQUFDO0lBQ04sQ0FBQztDQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIFBsYWl0Qm9hcmQsXG4gICAgUG9pbnQsXG4gICAgUG9pbnRPZlJlY3RhbmdsZSxcbiAgICBSZWN0YW5nbGVDbGllbnQsXG4gICAgZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludCxcbiAgICBnZXROZWFyZXN0UG9pbnRCZXR3ZWVuUG9pbnRBbmRTZWdtZW50cyxcbiAgICBzZXRTdHJva2VMaW5lY2FwXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IFBsYWl0R2VvbWV0cnksIFNoYXBlRW5naW5lIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBTaGFwZURlZmF1bHRTcGFjZSB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBPcHRpb25zIH0gZnJvbSAncm91Z2hqcy9iaW4vY29yZSc7XG5pbXBvcnQgeyBSZWN0YW5nbGVFbmdpbmUgfSBmcm9tICcuLi9iYXNpYy1zaGFwZXMvcmVjdGFuZ2xlJztcbmltcG9ydCB7IGdldFBvbHlnb25FZGdlQnlDb25uZWN0aW9uUG9pbnQgfSBmcm9tICcuLi8uLi91dGlscy9wb2x5Z29uJztcbmltcG9ydCB7IGdldFN0cm9rZVdpZHRoQnlFbGVtZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuaW1wb3J0IHsgcG9pbnRzT25CZXppZXJDdXJ2ZXMgfSBmcm9tICdwb2ludHMtb24tY3VydmUnO1xuXG5pbnRlcmZhY2UgTm90ZUN1cmx5UmlnaHRQYXRoRGF0YSB7XG4gICAgc3RhcnRQb2ludDogUG9pbnQ7XG4gICAgdXBwZXJDdXJ2ZToge1xuICAgICAgICBjb250cm9sUG9pbnQxOiBQb2ludDtcbiAgICAgICAgY29udHJvbFBvaW50MjogUG9pbnQ7XG4gICAgICAgIGVuZFBvaW50OiBQb2ludDtcbiAgICB9O1xuICAgIGxvd2VyQ3VydmU6IHtcbiAgICAgICAgY29udHJvbFBvaW50MTogUG9pbnQ7XG4gICAgICAgIGNvbnRyb2xQb2ludDI6IFBvaW50O1xuICAgICAgICBlbmRQb2ludDogUG9pbnQ7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVOb3RlQ3VybHlSaWdodFBhdGgocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpOiBOb3RlQ3VybHlSaWdodFBhdGhEYXRhIHtcbiAgICBjb25zdCBjdXJseVdpZHRoID0gcmVjdGFuZ2xlLndpZHRoICogMC4wOTtcbiAgICBjb25zdCBjZW50ZXJZID0gcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IC8gMjtcblxuICAgIHJldHVybiB7XG4gICAgICAgIHN0YXJ0UG9pbnQ6IFtyZWN0YW5nbGUueCwgcmVjdGFuZ2xlLnldLFxuICAgICAgICB1cHBlckN1cnZlOiB7XG4gICAgICAgICAgICBjb250cm9sUG9pbnQxOiBbcmVjdGFuZ2xlLnggKyBjdXJseVdpZHRoLCByZWN0YW5nbGUueV0sXG4gICAgICAgICAgICBjb250cm9sUG9pbnQyOiBbcmVjdGFuZ2xlLngsIGNlbnRlclldLFxuICAgICAgICAgICAgZW5kUG9pbnQ6IFtyZWN0YW5nbGUueCArIGN1cmx5V2lkdGgsIGNlbnRlclldXG4gICAgICAgIH0sXG4gICAgICAgIGxvd2VyQ3VydmU6IHtcbiAgICAgICAgICAgIGNvbnRyb2xQb2ludDE6IFtyZWN0YW5nbGUueCwgY2VudGVyWV0sXG4gICAgICAgICAgICBjb250cm9sUG9pbnQyOiBbcmVjdGFuZ2xlLnggKyBjdXJseVdpZHRoLCByZWN0YW5nbGUueSArIHJlY3RhbmdsZS5oZWlnaHRdLFxuICAgICAgICAgICAgZW5kUG9pbnQ6IFtyZWN0YW5nbGUueCwgcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0XVxuICAgICAgICB9XG4gICAgfTtcbn1cblxuZXhwb3J0IGNvbnN0IE5vdGVDdXJseVJpZ2h0RW5naW5lOiBTaGFwZUVuZ2luZSA9IHtcbiAgICBkcmF3KGJvYXJkOiBQbGFpdEJvYXJkLCByZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgb3B0aW9uczogT3B0aW9ucykge1xuICAgICAgICBjb25zdCBycyA9IFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcoYm9hcmQpO1xuICAgICAgICBjb25zdCB7IHN0YXJ0UG9pbnQsIHVwcGVyQ3VydmUsIGxvd2VyQ3VydmUgfSA9IGdlbmVyYXRlTm90ZUN1cmx5UmlnaHRQYXRoKHJlY3RhbmdsZSk7XG5cbiAgICAgICAgY29uc3QgcGF0aERhdGEgPSBbXG4gICAgICAgICAgICBgTSR7c3RhcnRQb2ludFswXX0gJHtzdGFydFBvaW50WzFdfWAsXG4gICAgICAgICAgICBgQyR7dXBwZXJDdXJ2ZS5jb250cm9sUG9pbnQxWzBdfSAke3VwcGVyQ3VydmUuY29udHJvbFBvaW50MVsxXX0sXG4gICAgICAgICAgICAke3VwcGVyQ3VydmUuY29udHJvbFBvaW50MlswXX0gJHt1cHBlckN1cnZlLmNvbnRyb2xQb2ludDJbMV19LFxuICAgICAgICAgICAgJHt1cHBlckN1cnZlLmVuZFBvaW50WzBdfSAke3VwcGVyQ3VydmUuZW5kUG9pbnRbMV19YCxcbiAgICAgICAgICAgIGBDJHtsb3dlckN1cnZlLmNvbnRyb2xQb2ludDFbMF19ICR7bG93ZXJDdXJ2ZS5jb250cm9sUG9pbnQxWzFdfSxcbiAgICAgICAgICAgICR7bG93ZXJDdXJ2ZS5jb250cm9sUG9pbnQyWzBdfSAke2xvd2VyQ3VydmUuY29udHJvbFBvaW50MlsxXX0sXG4gICAgICAgICAgICAke2xvd2VyQ3VydmUuZW5kUG9pbnRbMF19ICR7bG93ZXJDdXJ2ZS5lbmRQb2ludFsxXX1gXG4gICAgICAgIF0uam9pbignICcpO1xuXG4gICAgICAgIGNvbnN0IHNoYXBlID0gcnMucGF0aChwYXRoRGF0YSwgeyAuLi5vcHRpb25zLCBmaWxsU3R5bGU6ICdzb2xpZCcsIGZpbGw6ICd0cmFuc3BhcmVudCcgfSk7XG4gICAgICAgIHNldFN0cm9rZUxpbmVjYXAoc2hhcGUsICdyb3VuZCcpO1xuICAgICAgICByZXR1cm4gc2hhcGU7XG4gICAgfSxcbiAgICBpc0luc2lkZVBvaW50KHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBwb2ludDogUG9pbnQpIHtcbiAgICAgICAgY29uc3QgcmFuZ2VSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoW3BvaW50LCBwb2ludF0pO1xuICAgICAgICByZXR1cm4gUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KHJlY3RhbmdsZSwgcmFuZ2VSZWN0YW5nbGUpO1xuICAgIH0sXG4gICAgZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ybmVyUG9pbnRzKHJlY3RhbmdsZSk7XG4gICAgfSxcbiAgICBnZXROZWFyZXN0UG9pbnQocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50OiBQb2ludCkge1xuICAgICAgICBjb25zdCB7IHN0YXJ0UG9pbnQsIHVwcGVyQ3VydmUsIGxvd2VyQ3VydmUgfSA9IGdlbmVyYXRlTm90ZUN1cmx5UmlnaHRQYXRoKHJlY3RhbmdsZSk7XG5cbiAgICAgICAgLy8g55Sf5oiQ5LiK6YOo6LSd5aGe5bCU5puy57q/55qE54K5XG4gICAgICAgIGNvbnN0IHVwcGVyQmV6aWVyUG9pbnRzID0gcG9pbnRzT25CZXppZXJDdXJ2ZXMoXG4gICAgICAgICAgICBbc3RhcnRQb2ludCwgdXBwZXJDdXJ2ZS5jb250cm9sUG9pbnQxLCB1cHBlckN1cnZlLmNvbnRyb2xQb2ludDIsIHVwcGVyQ3VydmUuZW5kUG9pbnRdLFxuICAgICAgICAgICAgMC4wMDFcbiAgICAgICAgKTtcblxuICAgICAgICAvLyDnlJ/miJDkuIvpg6jotJ3loZ7lsJTmm7Lnur/nmoTngrlcbiAgICAgICAgY29uc3QgbG93ZXJCZXppZXJQb2ludHMgPSBwb2ludHNPbkJlemllckN1cnZlcyhcbiAgICAgICAgICAgIFt1cHBlckN1cnZlLmVuZFBvaW50LCBsb3dlckN1cnZlLmNvbnRyb2xQb2ludDEsIGxvd2VyQ3VydmUuY29udHJvbFBvaW50MiwgbG93ZXJDdXJ2ZS5lbmRQb2ludF0sXG4gICAgICAgICAgICAwLjAwMVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIOWQiOW5tuaJgOacieeCuVxuICAgICAgICBjb25zdCBhbGxQb2ludHMgPSBbLi4udXBwZXJCZXppZXJQb2ludHMsIC4uLmxvd2VyQmV6aWVyUG9pbnRzXTtcblxuICAgICAgICAvLyDmib7liLDmnIDov5HnmoTngrlcbiAgICAgICAgbGV0IG1pbkRpc3RhbmNlID0gSW5maW5pdHk7XG4gICAgICAgIGxldCBuZWFyZXN0UG9pbnQgPSBbLi4ucG9pbnRdIGFzIFBvaW50O1xuXG4gICAgICAgIGZvciAoY29uc3QgY3VydmVQb2ludCBvZiBhbGxQb2ludHMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gZGlzdGFuY2VCZXR3ZWVuUG9pbnRBbmRQb2ludChwb2ludFswXSwgcG9pbnRbMV0sIGN1cnZlUG9pbnRbMF0sIGN1cnZlUG9pbnRbMV0pO1xuICAgICAgICAgICAgaWYgKGRpc3RhbmNlIDwgbWluRGlzdGFuY2UpIHtcbiAgICAgICAgICAgICAgICBtaW5EaXN0YW5jZSA9IGRpc3RhbmNlO1xuICAgICAgICAgICAgICAgIG5lYXJlc3RQb2ludCA9IFsuLi5jdXJ2ZVBvaW50XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZWFyZXN0UG9pbnQ7XG4gICAgfSxcbiAgICBnZXRFZGdlQnlDb25uZWN0aW9uUG9pbnQocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIHBvaW50T2ZSZWN0YW5nbGU6IFBvaW50T2ZSZWN0YW5nbGUpOiBbUG9pbnQsIFBvaW50XSB8IG51bGwge1xuICAgICAgICBjb25zdCBjb3JuZXJzID0gUmVjdGFuZ2xlRW5naW5lLmdldENvcm5lclBvaW50cyhyZWN0YW5nbGUpO1xuICAgICAgICBjb25zdCBwb2ludCA9IFJlY3RhbmdsZUNsaWVudC5nZXRDb25uZWN0aW9uUG9pbnQocmVjdGFuZ2xlLCBwb2ludE9mUmVjdGFuZ2xlKTtcbiAgICAgICAgcmV0dXJuIGdldFBvbHlnb25FZGdlQnlDb25uZWN0aW9uUG9pbnQoY29ybmVycywgcG9pbnQpO1xuICAgIH0sXG4gICAgZ2V0Q29ubmVjdG9yUG9pbnRzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIHJldHVybiBSZWN0YW5nbGVDbGllbnQuZ2V0RWRnZUNlbnRlclBvaW50cyhyZWN0YW5nbGUpO1xuICAgIH0sXG4gICAgZ2V0VGV4dFJlY3RhbmdsZTogKGVsZW1lbnQ6IFBsYWl0R2VvbWV0cnkpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudFJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhlbGVtZW50LnBvaW50cyEpO1xuICAgICAgICBjb25zdCBzdHJva2VXaWR0aCA9IGdldFN0cm9rZVdpZHRoQnlFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBlbGVtZW50LnRleHRIZWlnaHQhO1xuICAgICAgICBjb25zdCB3aWR0aCA9IGVsZW1lbnRSZWN0YW5nbGUud2lkdGggLSBlbGVtZW50UmVjdGFuZ2xlLndpZHRoICogMC4wOSAtIFNoYXBlRGVmYXVsdFNwYWNlLnJlY3RhbmdsZUFuZFRleHQgKiAyIC0gc3Ryb2tlV2lkdGggKiAyO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaGVpZ2h0LFxuICAgICAgICAgICAgd2lkdGg6IHdpZHRoID4gMCA/IHdpZHRoIDogMCxcbiAgICAgICAgICAgIHg6IGVsZW1lbnRSZWN0YW5nbGUueCArIGVsZW1lbnRSZWN0YW5nbGUud2lkdGggKiAwLjA5ICsgU2hhcGVEZWZhdWx0U3BhY2UucmVjdGFuZ2xlQW5kVGV4dCArIHN0cm9rZVdpZHRoLFxuICAgICAgICAgICAgeTogZWxlbWVudFJlY3RhbmdsZS55ICsgKGVsZW1lbnRSZWN0YW5nbGUuaGVpZ2h0IC0gaGVpZ2h0KSAvIDJcbiAgICAgICAgfTtcbiAgICB9XG59O1xuIl19