@plait/draw 0.53.0 → 0.55.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 (70) hide show
  1. package/constants/geometry.d.ts +25 -1
  2. package/engines/basic-shapes/circle.d.ts +8 -0
  3. package/engines/basic-shapes/cloud.d.ts +2 -0
  4. package/engines/flowchart/off-page.d.ts +4 -0
  5. package/engines/flowchart/or.d.ts +2 -0
  6. package/engines/flowchart/predefined-process.d.ts +2 -0
  7. package/engines/flowchart/summing-junction.d.ts +2 -0
  8. package/esm2022/constants/geometry.mjs +15 -3
  9. package/esm2022/engines/basic-shapes/circle.mjs +51 -0
  10. package/esm2022/engines/basic-shapes/cloud.mjs +57 -0
  11. package/esm2022/engines/basic-shapes/ellipse.mjs +3 -41
  12. package/esm2022/engines/flowchart/off-page.mjs +32 -0
  13. package/esm2022/engines/flowchart/or.mjs +25 -0
  14. package/esm2022/engines/flowchart/predefined-process.mjs +47 -0
  15. package/esm2022/engines/flowchart/summing-junction.mjs +28 -0
  16. package/esm2022/engines/index.mjs +12 -2
  17. package/esm2022/generators/line-auto-complete.generator.mjs +1 -1
  18. package/esm2022/geometry.component.mjs +7 -8
  19. package/esm2022/image.component.mjs +6 -7
  20. package/esm2022/interfaces/element.mjs +2 -1
  21. package/esm2022/interfaces/geometry.mjs +6 -1
  22. package/esm2022/interfaces/index.mjs +2 -2
  23. package/esm2022/line.component.mjs +8 -9
  24. package/esm2022/plugins/with-draw-fragment.mjs +7 -7
  25. package/esm2022/plugins/with-draw-hotkey.mjs +1 -1
  26. package/esm2022/plugins/with-draw-resize.mjs +73 -26
  27. package/esm2022/plugins/with-draw-rotate.mjs +127 -0
  28. package/esm2022/plugins/with-draw.mjs +6 -5
  29. package/esm2022/plugins/with-geometry-create.mjs +21 -5
  30. package/esm2022/plugins/with-geometry-resize.mjs +17 -23
  31. package/esm2022/plugins/with-line-auto-complete-reaction.mjs +2 -2
  32. package/esm2022/plugins/with-line-auto-complete.mjs +15 -13
  33. package/esm2022/plugins/with-line-bound-reaction.mjs +19 -21
  34. package/esm2022/plugins/with-line-create.mjs +4 -4
  35. package/esm2022/plugins/with-line-resize.mjs +11 -12
  36. package/esm2022/transforms/line.mjs +4 -4
  37. package/esm2022/utils/geometry.mjs +35 -23
  38. package/esm2022/utils/hit.mjs +26 -26
  39. package/esm2022/utils/line/elbow.mjs +11 -6
  40. package/esm2022/utils/line/line-basic.mjs +25 -30
  41. package/esm2022/utils/line/line-common.mjs +3 -3
  42. package/esm2022/utils/line/line-resize.mjs +2 -2
  43. package/esm2022/utils/position/geometry.mjs +59 -21
  44. package/esm2022/utils/shape.mjs +2 -2
  45. package/esm2022/utils/snap-resizing.mjs +185 -0
  46. package/esm2022/utils/style/stroke.mjs +9 -2
  47. package/fesm2022/plait-draw.mjs +1393 -1121
  48. package/fesm2022/plait-draw.mjs.map +1 -1
  49. package/generators/line-auto-complete.generator.d.ts +3 -3
  50. package/geometry.component.d.ts +2 -3
  51. package/image.component.d.ts +2 -3
  52. package/interfaces/element.d.ts +2 -1
  53. package/interfaces/geometry.d.ts +7 -2
  54. package/interfaces/index.d.ts +2 -2
  55. package/line.component.d.ts +2 -3
  56. package/package.json +1 -1
  57. package/plugins/with-draw-fragment.d.ts +2 -2
  58. package/plugins/with-draw-resize.d.ts +9 -5
  59. package/plugins/with-draw-rotate.d.ts +2 -0
  60. package/utils/geometry.d.ts +7 -4
  61. package/utils/hit.d.ts +3 -1
  62. package/utils/line/elbow.d.ts +3 -0
  63. package/utils/line/line-basic.d.ts +4 -4
  64. package/utils/position/geometry.d.ts +16 -2
  65. package/utils/shape.d.ts +2 -2
  66. package/utils/snap-resizing.d.ts +25 -0
  67. package/esm2022/utils/resize-align-reaction.mjs +0 -316
  68. package/esm2022/utils/resize-align.mjs +0 -37
  69. package/utils/resize-align-reaction.d.ts +0 -42
  70. package/utils/resize-align.d.ts +0 -8
@@ -8,7 +8,7 @@ import { acceptImageTypes, buildImage, getElementOfFocusedImage, getElementsText
8
8
  import { DEFAULT_IMAGE_WIDTH } from '../constants';
9
9
  export const withDrawFragment = (baseBoard) => {
10
10
  const board = baseBoard;
11
- const { getDeletedFragment, setFragment, insertFragment } = board;
11
+ const { getDeletedFragment, buildFragment, insertFragment } = board;
12
12
  board.getDeletedFragment = (data) => {
13
13
  const drawElements = getSelectedDrawElements(board);
14
14
  if (drawElements.length) {
@@ -28,7 +28,7 @@ export const withDrawFragment = (baseBoard) => {
28
28
  }
29
29
  return getDeletedFragment(data);
30
30
  };
31
- board.setFragment = (data, clipboardContext, rectangle, type) => {
31
+ board.buildFragment = (clipboardContext, rectangle, type) => {
32
32
  const targetDrawElements = getSelectedDrawElements(board);
33
33
  let boundLineElements = [];
34
34
  if (targetDrawElements.length) {
@@ -47,13 +47,13 @@ export const withDrawFragment = (baseBoard) => {
47
47
  clipboardContext = addClipboardContext(clipboardContext, {
48
48
  text,
49
49
  type: WritableClipboardType.elements,
50
- data: elements
50
+ elements
51
51
  });
52
52
  }
53
53
  }
54
- setFragment(data, clipboardContext, rectangle, type);
54
+ return buildFragment(clipboardContext, rectangle, type);
55
55
  };
56
- board.insertFragment = (data, clipboardData, targetPoint) => {
56
+ board.insertFragment = (clipboardData, targetPoint) => {
57
57
  const selectedElements = getSelectedElements(board);
58
58
  if (clipboardData?.files?.length) {
59
59
  const acceptImageArray = acceptImageTypes.map(type => 'image/' + type);
@@ -83,7 +83,7 @@ export const withDrawFragment = (baseBoard) => {
83
83
  }
84
84
  }
85
85
  }
86
- insertFragment(data, clipboardData, targetPoint);
86
+ insertFragment(clipboardData, targetPoint);
87
87
  };
88
88
  return board;
89
89
  };
@@ -91,4 +91,4 @@ export const getBoundedLineElements = (board, plaitShapes) => {
91
91
  const lines = getLines(board);
92
92
  return lines.filter(line => plaitShapes.find(shape => PlaitLine.isBoundElementOfSource(line, shape) || PlaitLine.isBoundElementOfTarget(line, shape)));
93
93
  };
94
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kcmF3LWZyYWdtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvcGx1Z2lucy93aXRoLWRyYXctZnJhZ21lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQVFILHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLG1CQUFtQixFQUN0QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQWlCLFNBQVMsRUFBYyxNQUFNLGVBQWUsQ0FBQztBQUN2RixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVwRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLHdCQUF3QixFQUFFLGVBQWUsRUFBc0IsTUFBTSxlQUFlLENBQUM7QUFDNUgsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRW5ELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLENBQUMsU0FBcUIsRUFBRSxFQUFFO0lBQ3RELE1BQU0sS0FBSyxHQUFHLFNBQXVCLENBQUM7SUFDdEMsTUFBTSxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxjQUFjLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFFbEUsS0FBSyxDQUFDLGtCQUFrQixHQUFHLENBQUMsSUFBb0IsRUFBRSxFQUFFO1FBQ2hELE1BQU0sWUFBWSxHQUFHLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BELElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3RCLE1BQU0sZ0JBQWdCLEdB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TUFBTSxzQkFBc0IsR0FBRyxDQUFDLEtBQWlCLEVBQUUsV0FBeUIsRUFBRSxFQUFFO0lBQ25GLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDdkIsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUM1SCxDQUFDO0FBQ04sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDbGlwYm9hcmREYXRhLFxuICAgIFBsYWl0Qm9hcmQsXG4gICAgUGxhaXRFbGVtZW50LFxuICAgIFBsYWl0R3JvdXBFbGVtZW50LFxuICAgIFBvaW50LFxuICAgIFJlY3RhbmdsZUNsaWVudCxcbiAgICBXcml0YWJsZUNsaXBib2FyZENvbnRleHQsXG4gICAgV3JpdGFibGVDbGlwYm9hcmRUeXBlLFxuICAgIGFkZENsaXBib2FyZENvbnRleHQsXG4gICAgY3JlYXRlQ2xpcGJvYXJkQ29udGV4dCxcbiAgICBnZXRTZWxlY3RlZEVsZW1lbnRzXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IGdldFNlbGVjdGVkRHJhd0VsZW1lbnRzIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0ZWQnO1xuaW1wb3J0IHsgUGxhaXREcmF3RWxlbWVudCwgUGxhaXRHZW9tZXRyeSwgUGxhaXRMaW5lLCBQbGFpdFNoYXBlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBidWlsZENsaXBib2FyZERhdGEsIGluc2VydENsaXBib2FyZERhdGEgfSBmcm9tICcuLi91dGlscy9jbGlwYm9hcmQnO1xuaW1wb3J0IHsgRHJhd1RyYW5zZm9ybXMgfSBmcm9tICcuLi90cmFuc2Zvcm1zJztcbmltcG9ydCB7IGdldExpbmVzIH0gZnJvbSAnLi4vdXRpbHMvbGluZS9saW5lLWJhc2ljJztcbmltcG9ydCB7IFBsYWl0SW1hZ2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2ltYWdlJztcbmltcG9ydCB7IGFjY2VwdEltYWdlVHlwZXMsIGJ1aWxkSW1hZ2UsIGdldEVsZW1lbnRPZkZvY3VzZWRJbWFnZSwgZ2V0RWxlbWVudHNUZXh0LCBnZXRGaXJzdFRleHRFZGl0b3IgfSBmcm9tICdAcGxhaXQvY29tbW9uJztcbmltcG9ydCB7IERFRkFVTFRfSU1BR0VfV0lEVEggfSBmcm9tICcuLi9jb25zdGFudHMnO1xuXG5leHBvcnQgY29uc3Qgd2l0aERyYXdGcmFnbWVudCA9IChiYXNlQm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBjb25zdCBib2FyZCA9IGJhc2VCb2FyZCBhcyBQbGFpdEJvYXJkO1xuICAgIGNvbnN0IHsgZ2V0RGVsZXRlZEZyYWdtZW50LCBzZXRGcmFnbWVudCwgaW5zZXJ0RnJhZ21lbnQgfSA9IGJvYXJkO1xuXG4gICAgYm9hcmQuZ2V0RGVsZXRlZEZyYWdtZW50ID0gKGRhdGE6IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgICAgIGNvbnN0IGRyYXdFbGVtZW50cyA9IGdldFNlbGVjdGVkRHJhd0VsZW1lbnRzKGJvYXJkKTtcbiAgICAgICAgaWYgKGRyYXdFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGdlb21ldHJ5RWxlbWVudHMgPSBkcmF3RWxlbWVudHMuZmlsdGVyKHZhbHVlID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNHZW9tZXRyeSh2YWx1ZSkpIGFzIFBsYWl0R2VvbWV0cnlbXTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVFbGVtZW50cyA9IGRyYXdFbGVtZW50cy5maWx0ZXIodmFsdWUgPT4gUGxhaXREcmF3RWxlbWVudC5pc0xpbmUodmFsdWUpKSBhcyBQbGFpdExpbmVbXTtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlRWxlbWVudHMgPSBkcmF3RWxlbWVudHMuZmlsdGVyKHZhbHVlID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNJbWFnZSh2YWx1ZSkpIGFzIFBsYWl0SW1hZ2VbXTtcblxuICAgICAgICAgICAgY29uc3QgYm91bmRMaW5lRWxlbWVudHMgPSBbXG4gICAgICAgICAgICAgICAgLi4uZ2V0Qm91bmRlZExpbmVFbGVtZW50cyhib2FyZCwgZ2VvbWV0cnlFbGVtZW50cyksXG4gICAgICAgICAgICAgICAgLi4uZ2V0Qm91bmRlZExpbmVFbGVtZW50cyhib2FyZCwgaW1hZ2VFbGVtZW50cylcbiAgICAgICAgICAgIF0uZmlsdGVyKGxpbmUgPT4gIWxpbmVFbGVtZW50cy5pbmNsdWRlcyhsaW5lKSk7XG4gICAgICAgICAgICBkYXRhLnB1c2goXG4gICAgICAgICAgICAgICAgLi4uW1xuICAgICAgICAgICAgICAgICAgICAuLi5nZW9tZXRyeUVsZW1lbnRzLFxuICAgICAgICAgICAgICAgICAgICAuLi5saW5lRWxlbWVudHMsXG4gICAgICAgICAgICAgICAgICAgIC4uLmltYWdlRWxlbWVudHMsXG4gICAgICAgICAgICAgICAgICAgIC4uLmJvdW5kTGluZUVsZW1lbnRzLmZpbHRlcihsaW5lID0+ICFsaW5lRWxlbWVudHMuaW5jbHVkZXMobGluZSkpXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0RGVsZXRlZEZyYWdtZW50KGRhdGEpO1xuICAgIH07XG5cbiAgICBib2FyZC5zZXRGcmFnbWVudCA9IChcbiAgICAgICAgZGF0YTogRGF0YVRyYW5zZmVyIHwgbnVsbCxcbiAgICAgICAgY2xpcGJvYXJkQ29udGV4dDogV3JpdGFibGVDbGlwYm9hcmRDb250ZXh0IHwgbnVsbCxcbiAgICAgICAgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQgfCBudWxsLFxuICAgICAgICB0eXBlOiAnY29weScgfCAnY3V0J1xuICAgICkgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXREcmF3RWxlbWVudHMgPSBnZXRTZWxlY3RlZERyYXdFbGVtZW50cyhib2FyZCk7XG4gICAgICAgIGxldCBib3VuZExpbmVFbGVtZW50czogUGxhaXRMaW5lW10gPSBbXTtcbiAgICAgICAgaWYgKHRhcmdldERyYXdFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICh0eXBlID09PSAnY3V0Jykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGdlb21ldHJ5RWxlbWVudHMgPSB0YXJnZXREcmF3RWxlbWVudHMuZmlsdGVyKHZhbHVlID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNHZW9tZXRyeSh2YWx1ZSkpIGFzIFBsYWl0R2VvbWV0cnlbXTtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lRWxlbWVudHMgPSB0YXJnZXREcmF3RWxlbWVudHMuZmlsdGVyKHZhbHVlID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNMaW5lKHZhbHVlKSkgYXMgUGxhaXRMaW5lW107XG4gICAgICAgICAgICAgICAgYm91bmRMaW5lRWxlbWVudHMgPSBnZXRCb3VuZGVkTGluZUVsZW1lbnRzKGJvYXJkLCBnZW9tZXRyeUVsZW1lbnRzKS5maWx0ZXIobGluZSA9PiAhbGluZUVsZW1lbnRzLmluY2x1ZGVzKGxpbmUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBbLi4udGFyZ2V0RHJhd0VsZW1lbnRzLCAuLi5ib3VuZExpbmVFbGVtZW50c107XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IGJ1aWxkQ2xpcGJvYXJkRGF0YShib2FyZCwgc2VsZWN0ZWRFbGVtZW50cywgcmVjdGFuZ2xlID8gW3JlY3RhbmdsZS54LCByZWN0YW5nbGUueV0gOiBbMCwgMF0pO1xuICAgICAgICAgICAgY29uc3QgdGV4dCA9IGdldEVsZW1lbnRzVGV4dChzZWxlY3RlZEVsZW1lbnRzKTtcbiAgICAgICAgICAgIGlmICghY2xpcGJvYXJkQ29udGV4dCkge1xuICAgICAgICAgICAgICAgIGNsaXBib2FyZENvbnRleHQgPSBjcmVhdGVDbGlwYm9hcmRDb250ZXh0KFdyaXRhYmxlQ2xpcGJvYXJkVHlwZS5lbGVtZW50cywgZWxlbWVudHMsIHRleHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjbGlwYm9hcmRDb250ZXh0ID0gYWRkQ2xpcGJvYXJkQ29udGV4dChjbGlwYm9hcmRDb250ZXh0LCB7XG4gICAgICAgICAgICAgICAgICAgIHRleHQsXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFdyaXRhYmxlQ2xpcGJvYXJkVHlwZS5lbGVtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogZWxlbWVudHNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZXRGcmFnbWVudChkYXRhLCBjbGlwYm9hcmRDb250ZXh0LCByZWN0YW5nbGUsIHR5cGUpO1xuICAgIH07XG5cbiAgICBib2FyZC5pbnNlcnRGcmFnbWVudCA9IChkYXRhOiBEYXRhVHJhbnNmZXIgfCBudWxsLCBjbGlwYm9hcmREYXRhOiBDbGlwYm9hcmREYXRhIHwgbnVsbCwgdGFyZ2V0UG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICAgICAgaWYgKGNsaXBib2FyZERhdGE/LmZpbGVzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGFjY2VwdEltYWdlQXJyYXkgPSBhY2NlcHRJbWFnZVR5cGVzLm1hcCh0eXBlID0+ICdpbWFnZS8nICsgdHlwZSk7XG4gICAgICAgICAgICBjb25zdCBjYW5JbnNlcnRpb25JbWFnZSA9XG4gICAgICAgICAgICAgICAgIWdldEVsZW1lbnRPZkZvY3VzZWRJbWFnZShib2FyZCkgJiYgIShzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA9PT0gMSAmJiBib2FyZC5pc0ltYWdlQmluZGluZ0FsbG93ZWQoc2VsZWN0ZWRFbGVtZW50c1swXSkpO1xuICAgICAgICAgICAgaWYgKGFjY2VwdEltYWdlQXJyYXkuaW5jbHVkZXMoY2xpcGJvYXJkRGF0YS5maWxlc1swXS50eXBlKSAmJiBjYW5JbnNlcnRpb25JbWFnZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlRmlsZSA9IGNsaXBib2FyZERhdGEuZmlsZXNbMF07XG4gICAgICAgICAgICAgICAgYnVpbGRJbWFnZShib2FyZCwgaW1hZ2VGaWxlLCBERUZBVUxUX0lNQUdFX1dJRFRILCBpbWFnZUl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICBEcmF3VHJhbnNmb3Jtcy5pbnNlcnRJbWFnZShib2FyZCwgaW1hZ2VJdGVtLCB0YXJnZXRQb2ludCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNsaXBib2FyZERhdGE/LmVsZW1lbnRzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGRyYXdFbGVtZW50cyA9IGNsaXBib2FyZERhdGEuZWxlbWVudHM/LmZpbHRlcih2YWx1ZSA9PiBQbGFpdERyYXdFbGVtZW50LmlzRHJhd0VsZW1lbnQodmFsdWUpKSBhcyBQbGFpdERyYXdFbGVtZW50W107XG4gICAgICAgICAgICBpZiAoY2xpcGJvYXJkRGF0YS5lbGVtZW50cyAmJiBjbGlwYm9hcmREYXRhLmVsZW1lbnRzLmxlbmd0aCA+IDAgJiYgZHJhd0VsZW1lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBpbnNlcnRDbGlwYm9hcmREYXRhKGJvYXJkLCBkcmF3RWxlbWVudHMsIHRhcmdldFBvaW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjbGlwYm9hcmREYXRhPy50ZXh0KSB7XG4gICAgICAgICAgICBpZiAoIWNsaXBib2FyZERhdGEuZWxlbWVudHMgfHwgY2xpcGJvYXJkRGF0YS5lbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAvLyAoKu+/o++4tu+/oylcbiAgICAgICAgICAgICAgICBjb25zdCBpbnNlcnRBc0NoaWxkcmVuID0gc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPT09IDEgJiYgc2VsZWN0ZWRFbGVtZW50c1swXS5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgICBjb25zdCBpbnNlcnRBc0ZyZWVUZXh0ID0gIWluc2VydEFzQ2hpbGRyZW47XG4gICAgICAgICAgICAgICAgaWYgKGluc2VydEFzRnJlZVRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgRHJhd1RyYW5zZm9ybXMuaW5zZXJ0VGV4dChib2FyZCwgdGFyZ2V0UG9pbnQsIGNsaXBib2FyZERhdGEudGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpbnNlcnRGcmFnbWVudChkYXRhLCBjbGlwYm9hcmREYXRhLCB0YXJnZXRQb2ludCk7XG4gICAgfTtcblxuICAgIHJldHVybiBib2FyZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRCb3VuZGVkTGluZUVsZW1lbnRzID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBwbGFpdFNoYXBlczogUGxhaXRTaGFwZVtdKSA9PiB7XG4gICAgY29uc3QgbGluZXMgPSBnZXRMaW5lcyhib2FyZCk7XG4gICAgcmV0dXJuIGxpbmVzLmZpbHRlcihsaW5lID0+XG4gICAgICAgIHBsYWl0U2hhcGVzLmZpbmQoc2hhcGUgPT4gUGxhaXRMaW5lLmlzQm91bmRFbGVtZW50T2ZTb3VyY2UobGluZSwgc2hhcGUpIHx8IFBsYWl0TGluZS5pc0JvdW5kRWxlbWVudE9mVGFyZ2V0KGxpbmUsIHNoYXBlKSlcbiAgICApO1xufTtcbiJdfQ==
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kcmF3LWZyYWdtZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZHJhdy9zcmMvcGx1Z2lucy93aXRoLWRyYXctZnJhZ21lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQVFILHFCQUFxQixFQUNyQixtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLG1CQUFtQixFQUN0QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQWlCLFNBQVMsRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSx3QkFBd0IsRUFBRSxlQUFlLEVBQXNCLE1BQU0sZUFBZSxDQUFDO0FBQzVILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUVuRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFNBQXFCLEVBQUUsRUFBRTtJQUN0RCxNQUFNLEtBQUssR0FBRyxTQUF1QixDQUFDO0lBQ3RDLE1BQU0sRUFBRSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRXBFLEtBQUssQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLElBQW9CLEVBQUUsRUFBRTtRQUNoRCxNQUFNLFlBQVksR0FBRyx1QkFBdUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRCxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0QixNQUFNLGdCQUFnQixH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O0lBQzFGLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QixPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDdkIsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUM1SCxDQUFDO0FBQ04sQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDbGlwYm9hcmREYXRhLFxuICAgIFBsYWl0Qm9hcmQsXG4gICAgUGxhaXRFbGVtZW50LFxuICAgIFBsYWl0R3JvdXBFbGVtZW50LFxuICAgIFBvaW50LFxuICAgIFJlY3RhbmdsZUNsaWVudCxcbiAgICBXcml0YWJsZUNsaXBib2FyZENvbnRleHQsXG4gICAgV3JpdGFibGVDbGlwYm9hcmRUeXBlLFxuICAgIGFkZENsaXBib2FyZENvbnRleHQsXG4gICAgY3JlYXRlQ2xpcGJvYXJkQ29udGV4dCxcbiAgICBnZXRTZWxlY3RlZEVsZW1lbnRzXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IGdldFNlbGVjdGVkRHJhd0VsZW1lbnRzIH0gZnJvbSAnLi4vdXRpbHMvc2VsZWN0ZWQnO1xuaW1wb3J0IHsgUGxhaXREcmF3RWxlbWVudCwgUGxhaXRHZW9tZXRyeSwgUGxhaXRMaW5lLCBQbGFpdFNoYXBlRWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgYnVpbGRDbGlwYm9hcmREYXRhLCBpbnNlcnRDbGlwYm9hcmREYXRhIH0gZnJvbSAnLi4vdXRpbHMvY2xpcGJvYXJkJztcbmltcG9ydCB7IERyYXdUcmFuc2Zvcm1zIH0gZnJvbSAnLi4vdHJhbnNmb3Jtcyc7XG5pbXBvcnQgeyBnZXRMaW5lcyB9IGZyb20gJy4uL3V0aWxzL2xpbmUvbGluZS1iYXNpYyc7XG5pbXBvcnQgeyBQbGFpdEltYWdlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9pbWFnZSc7XG5pbXBvcnQgeyBhY2NlcHRJbWFnZVR5cGVzLCBidWlsZEltYWdlLCBnZXRFbGVtZW50T2ZGb2N1c2VkSW1hZ2UsIGdldEVsZW1lbnRzVGV4dCwgZ2V0Rmlyc3RUZXh0RWRpdG9yIH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBERUZBVUxUX0lNQUdFX1dJRFRIIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcblxuZXhwb3J0IGNvbnN0IHdpdGhEcmF3RnJhZ21lbnQgPSAoYmFzZUJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY29uc3QgYm9hcmQgPSBiYXNlQm9hcmQgYXMgUGxhaXRCb2FyZDtcbiAgICBjb25zdCB7IGdldERlbGV0ZWRGcmFnbWVudCwgYnVpbGRGcmFnbWVudCwgaW5zZXJ0RnJhZ21lbnQgfSA9IGJvYXJkO1xuXG4gICAgYm9hcmQuZ2V0RGVsZXRlZEZyYWdtZW50ID0gKGRhdGE6IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgICAgIGNvbnN0IGRyYXdFbGVtZW50cyA9IGdldFNlbGVjdGVkRHJhd0VsZW1lbnRzKGJvYXJkKTtcbiAgICAgICAgaWYgKGRyYXdFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGdlb21ldHJ5RWxlbWVudHMgPSBkcmF3RWxlbWVudHMuZmlsdGVyKHZhbHVlID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNHZW9tZXRyeSh2YWx1ZSkpIGFzIFBsYWl0R2VvbWV0cnlbXTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVFbGVtZW50cyA9IGRyYXdFbGVtZW50cy5maWx0ZXIodmFsdWUgPT4gUGxhaXREcmF3RWxlbWVudC5pc0xpbmUodmFsdWUpKSBhcyBQbGFpdExpbmVbXTtcbiAgICAgICAgICAgIGNvbnN0IGltYWdlRWxlbWVudHMgPSBkcmF3RWxlbWVudHMuZmlsdGVyKHZhbHVlID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNJbWFnZSh2YWx1ZSkpIGFzIFBsYWl0SW1hZ2VbXTtcblxuICAgICAgICAgICAgY29uc3QgYm91bmRMaW5lRWxlbWVudHMgPSBbXG4gICAgICAgICAgICAgICAgLi4uZ2V0Qm91bmRlZExpbmVFbGVtZW50cyhib2FyZCwgZ2VvbWV0cnlFbGVtZW50cyksXG4gICAgICAgICAgICAgICAgLi4uZ2V0Qm91bmRlZExpbmVFbGVtZW50cyhib2FyZCwgaW1hZ2VFbGVtZW50cylcbiAgICAgICAgICAgIF0uZmlsdGVyKGxpbmUgPT4gIWxpbmVFbGVtZW50cy5pbmNsdWRlcyhsaW5lKSk7XG4gICAgICAgICAgICBkYXRhLnB1c2goXG4gICAgICAgICAgICAgICAgLi4uW1xuICAgICAgICAgICAgICAgICAgICAuLi5nZW9tZXRyeUVsZW1lbnRzLFxuICAgICAgICAgICAgICAgICAgICAuLi5saW5lRWxlbWVudHMsXG4gICAgICAgICAgICAgICAgICAgIC4uLmltYWdlRWxlbWVudHMsXG4gICAgICAgICAgICAgICAgICAgIC4uLmJvdW5kTGluZUVsZW1lbnRzLmZpbHRlcihsaW5lID0+ICFsaW5lRWxlbWVudHMuaW5jbHVkZXMobGluZSkpXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2V0RGVsZXRlZEZyYWdtZW50KGRhdGEpO1xuICAgIH07XG5cbiAgICBib2FyZC5idWlsZEZyYWdtZW50ID0gKFxuICAgICAgICBjbGlwYm9hcmRDb250ZXh0OiBXcml0YWJsZUNsaXBib2FyZENvbnRleHQgfCBudWxsLFxuICAgICAgICByZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCB8IG51bGwsXG4gICAgICAgIHR5cGU6ICdjb3B5JyB8ICdjdXQnXG4gICAgKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldERyYXdFbGVtZW50cyA9IGdldFNlbGVjdGVkRHJhd0VsZW1lbnRzKGJvYXJkKTtcbiAgICAgICAgbGV0IGJvdW5kTGluZUVsZW1lbnRzOiBQbGFpdExpbmVbXSA9IFtdO1xuICAgICAgICBpZiAodGFyZ2V0RHJhd0VsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHR5cGUgPT09ICdjdXQnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2VvbWV0cnlFbGVtZW50cyA9IHRhcmdldERyYXdFbGVtZW50cy5maWx0ZXIodmFsdWUgPT4gUGxhaXREcmF3RWxlbWVudC5pc0dlb21ldHJ5KHZhbHVlKSkgYXMgUGxhaXRHZW9tZXRyeVtdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVFbGVtZW50cyA9IHRhcmdldERyYXdFbGVtZW50cy5maWx0ZXIodmFsdWUgPT4gUGxhaXREcmF3RWxlbWVudC5pc0xpbmUodmFsdWUpKSBhcyBQbGFpdExpbmVbXTtcbiAgICAgICAgICAgICAgICBib3VuZExpbmVFbGVtZW50cyA9IGdldEJvdW5kZWRMaW5lRWxlbWVudHMoYm9hcmQsIGdlb21ldHJ5RWxlbWVudHMpLmZpbHRlcihsaW5lID0+ICFsaW5lRWxlbWVudHMuaW5jbHVkZXMobGluZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IFsuLi50YXJnZXREcmF3RWxlbWVudHMsIC4uLmJvdW5kTGluZUVsZW1lbnRzXTtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRzID0gYnVpbGRDbGlwYm9hcmREYXRhKGJvYXJkLCBzZWxlY3RlZEVsZW1lbnRzLCByZWN0YW5nbGUgPyBbcmVjdGFuZ2xlLngsIHJlY3RhbmdsZS55XSA6IFswLCAwXSk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gZ2V0RWxlbWVudHNUZXh0KHNlbGVjdGVkRWxlbWVudHMpO1xuICAgICAgICAgICAgaWYgKCFjbGlwYm9hcmRDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgY2xpcGJvYXJkQ29udGV4dCA9IGNyZWF0ZUNsaXBib2FyZENvbnRleHQoV3JpdGFibGVDbGlwYm9hcmRUeXBlLmVsZW1lbnRzLCBlbGVtZW50cywgdGV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNsaXBib2FyZENvbnRleHQgPSBhZGRDbGlwYm9hcmRDb250ZXh0KGNsaXBib2FyZENvbnRleHQsIHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogV3JpdGFibGVDbGlwYm9hcmRUeXBlLmVsZW1lbnRzLFxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50c1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBidWlsZEZyYWdtZW50KGNsaXBib2FyZENvbnRleHQsIHJlY3RhbmdsZSwgdHlwZSk7XG4gICAgfTtcblxuICAgIGJvYXJkLmluc2VydEZyYWdtZW50ID0gKGNsaXBib2FyZERhdGE6IENsaXBib2FyZERhdGEgfCBudWxsLCB0YXJnZXRQb2ludDogUG9pbnQpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgICAgICBpZiAoY2xpcGJvYXJkRGF0YT8uZmlsZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgYWNjZXB0SW1hZ2VBcnJheSA9IGFjY2VwdEltYWdlVHlwZXMubWFwKHR5cGUgPT4gJ2ltYWdlLycgKyB0eXBlKTtcbiAgICAgICAgICAgIGNvbnN0IGNhbkluc2VydGlvbkltYWdlID1cbiAgICAgICAgICAgICAgICAhZ2V0RWxlbWVudE9mRm9jdXNlZEltYWdlKGJvYXJkKSAmJiAhKHNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID09PSAxICYmIGJvYXJkLmlzSW1hZ2VCaW5kaW5nQWxsb3dlZChzZWxlY3RlZEVsZW1lbnRzWzBdKSk7XG4gICAgICAgICAgICBpZiAoYWNjZXB0SW1hZ2VBcnJheS5pbmNsdWRlcyhjbGlwYm9hcmREYXRhLmZpbGVzWzBdLnR5cGUpICYmIGNhbkluc2VydGlvbkltYWdlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW1hZ2VGaWxlID0gY2xpcGJvYXJkRGF0YS5maWxlc1swXTtcbiAgICAgICAgICAgICAgICBidWlsZEltYWdlKGJvYXJkLCBpbWFnZUZpbGUsIERFRkFVTFRfSU1BR0VfV0lEVEgsIGltYWdlSXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIERyYXdUcmFuc2Zvcm1zLmluc2VydEltYWdlKGJvYXJkLCBpbWFnZUl0ZW0sIHRhcmdldFBvaW50KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2xpcGJvYXJkRGF0YT8uZWxlbWVudHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZHJhd0VsZW1lbnRzID0gY2xpcGJvYXJkRGF0YS5lbGVtZW50cz8uZmlsdGVyKHZhbHVlID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNEcmF3RWxlbWVudCh2YWx1ZSkpIGFzIFBsYWl0RHJhd0VsZW1lbnRbXTtcbiAgICAgICAgICAgIGlmIChjbGlwYm9hcmREYXRhLmVsZW1lbnRzICYmIGNsaXBib2FyZERhdGEuZWxlbWVudHMubGVuZ3RoID4gMCAmJiBkcmF3RWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGluc2VydENsaXBib2FyZERhdGEoYm9hcmQsIGRyYXdFbGVtZW50cywgdGFyZ2V0UG9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNsaXBib2FyZERhdGE/LnRleHQpIHtcbiAgICAgICAgICAgIGlmICghY2xpcGJvYXJkRGF0YS5lbGVtZW50cyB8fCBjbGlwYm9hcmREYXRhLmVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIC8vICgq77+j77i277+jKVxuICAgICAgICAgICAgICAgIGNvbnN0IGluc2VydEFzQ2hpbGRyZW4gPSBzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA9PT0gMSAmJiBzZWxlY3RlZEVsZW1lbnRzWzBdLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIGNvbnN0IGluc2VydEFzRnJlZVRleHQgPSAhaW5zZXJ0QXNDaGlsZHJlbjtcbiAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0QXNGcmVlVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICBEcmF3VHJhbnNmb3Jtcy5pbnNlcnRUZXh0KGJvYXJkLCB0YXJnZXRQb2ludCwgY2xpcGJvYXJkRGF0YS50ZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGluc2VydEZyYWdtZW50KGNsaXBib2FyZERhdGEsIHRhcmdldFBvaW50KTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGJvYXJkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEJvdW5kZWRMaW5lRWxlbWVudHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHBsYWl0U2hhcGVzOiBQbGFpdFNoYXBlRWxlbWVudFtdKSA9PiB7XG4gICAgY29uc3QgbGluZXMgPSBnZXRMaW5lcyhib2FyZCk7XG4gICAgcmV0dXJuIGxpbmVzLmZpbHRlcihsaW5lID0+XG4gICAgICAgIHBsYWl0U2hhcGVzLmZpbmQoc2hhcGUgPT4gUGxhaXRMaW5lLmlzQm91bmRFbGVtZW50T2ZTb3VyY2UobGluZSwgc2hhcGUpIHx8IFBsYWl0TGluZS5pc0JvdW5kRWxlbWVudE9mVGFyZ2V0KGxpbmUsIHNoYXBlKSlcbiAgICApO1xufTtcbiJdfQ==
@@ -33,4 +33,4 @@ export const withDrawHotkey = (board) => {
33
33
  };
34
34
  return board;
35
35
  };
36
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kcmF3LWhvdGtleS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3BsdWdpbnMvd2l0aC1kcmF3LWhvdGtleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9ILE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHakQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQ2hELE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRXBDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFvQixFQUFFLEVBQUU7UUFDckMsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRCxNQUFNLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7UUFDeEQsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsSUFDSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1lBQzdCLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztZQUNwQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDaEIsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1lBQ3JCLGlCQUFpQjtZQUNqQixnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQzVDLENBQUM7WUFDQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsWUFBWSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQXVCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDM0UsT0FBTztRQUNYLENBQUM7UUFFRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkIsQ0FBQyxDQUFDO0lBRUYsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtRQUNuQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRSxNQUFNLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdEQsSUFBSSxVQUFVLElBQUksZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hELE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFzQixDQUFDO2dCQUM3RSxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDekIsQ0FBQztRQUNMLENBQUM7UUFDRCxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEIsQ0FBQyxDQUFDO0lBQ0YsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCwgUGxhaXRFbGVtZW50LCBnZXRIaXRFbGVtZW50QnlQb2ludCwgZ2V0U2VsZWN0ZWRFbGVtZW50cywgdG9Ib3N0UG9pbnQsIHRvVmlld0JveFBvaW50IH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgaXNWaXJ0dWFsS2V5LCBpc1NwYWNlSG90a2V5LCBpc0RlbGV0ZSB9IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHsgR2VvbWV0cnlDb21wb25lbnQgfSBmcm9tICcuLi9nZW9tZXRyeS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGxhaXREcmF3RWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgZ2V0U2VsZWN0ZWRHZW9tZXRyeUVsZW1lbnRzIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgY29uc3Qgd2l0aERyYXdIb3RrZXkgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBjb25zdCB7IGtleURvd24sIGRibENsaWNrIH0gPSBib2FyZDtcblxuICAgIGJvYXJkLmtleURvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgICAgICBjb25zdCBpc1NpbmdsZVNlbGVjdGlvbiA9IHNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID09PSAxO1xuICAgICAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50c1swXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIVBsYWl0Qm9hcmQuaXNSZWFkb25seShib2FyZCkgJiZcbiAgICAgICAgICAgICFpc1ZpcnR1YWxLZXkoZXZlbnQpICYmXG4gICAgICAgICAgICAhaXNEZWxldGUoZXZlbnQpICYmXG4gICAgICAgICAgICAhaXNTcGFjZUhvdGtleShldmVudCkgJiZcbiAgICAgICAgICAgIGlzU2luZ2xlU2VsZWN0aW9uICYmXG4gICAgICAgICAgICBQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnkodGFyZ2V0RWxlbWVudClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgKFBsYWl0RWxlbWVudC5nZXRDb21wb25lbnQodGFyZ2V0RWxlbWVudCkgYXMgR2VvbWV0cnlDb21wb25lbnQpLmVkaXRUZXh0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBrZXlEb3duKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQuZGJsQ2xpY2sgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKCFQbGFpdEJvYXJkLmlzUmVhZG9ubHkoYm9hcmQpKSB7XG4gICAgICAgICAgICBjb25zdCBwb2ludCA9IHRvVmlld0JveFBvaW50KGJvYXJkLCB0b0hvc3RQb2ludChib2FyZCwgZXZlbnQueCwgZXZlbnQueSkpO1xuICAgICAgICAgICAgY29uc3QgaGl0RWxlbWVudCA9IGdldEhpdEVsZW1lbnRCeVBvaW50KGJvYXJkLCBwb2ludCk7XG4gICAgICAgICAgICBpZiAoaGl0RWxlbWVudCAmJiBQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnkoaGl0RWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBQbGFpdEVsZW1lbnQuZ2V0Q29tcG9uZW50KGhpdEVsZW1lbnQpIGFzIEdlb21ldHJ5Q29tcG9uZW50O1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5lZGl0VGV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRibENsaWNrKGV2ZW50KTtcbiAgICB9O1xuICAgIHJldHVybiBib2FyZDtcbn07XG4iXX0=
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kcmF3LWhvdGtleS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3BsdWdpbnMvd2l0aC1kcmF3LWhvdGtleS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9ILE9BQU8sRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUV0RSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFakQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQ2hELE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBRXBDLEtBQUssQ0FBQyxPQUFPLEdBQUcsQ0FBQyxLQUFvQixFQUFFLEVBQUU7UUFDckMsTUFBTSxnQkFBZ0IsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRCxNQUFNLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7UUFDeEQsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDMUMsSUFDSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDO1lBQzdCLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztZQUNwQixDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFDaEIsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDO1lBQ3JCLGlCQUFpQjtZQUNqQixnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQzVDLENBQUM7WUFDQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsWUFBWSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQXVCLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDM0UsT0FBTztRQUNYLENBQUM7UUFFRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkIsQ0FBQyxDQUFDO0lBRUYsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtRQUNuQyxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxNQUFNLEtBQUssR0FBRyxjQUFjLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRSxNQUFNLFVBQVUsR0FBRyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDdEQsSUFBSSxVQUFVLElBQUksZ0JBQWdCLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3hELE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFzQixDQUFDO2dCQUM3RSxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDekIsQ0FBQztRQUNMLENBQUM7UUFDRCxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEIsQ0FBQyxDQUFDO0lBQ0YsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGxhaXRCb2FyZCwgUGxhaXRFbGVtZW50LCBnZXRIaXRFbGVtZW50QnlQb2ludCwgZ2V0U2VsZWN0ZWRFbGVtZW50cywgdG9Ib3N0UG9pbnQsIHRvVmlld0JveFBvaW50IH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgaXNWaXJ0dWFsS2V5LCBpc1NwYWNlSG90a2V5LCBpc0RlbGV0ZSB9IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHsgR2VvbWV0cnlDb21wb25lbnQgfSBmcm9tICcuLi9nZW9tZXRyeS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUGxhaXREcmF3RWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgY29uc3Qgd2l0aERyYXdIb3RrZXkgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICBjb25zdCB7IGtleURvd24sIGRibENsaWNrIH0gPSBib2FyZDtcblxuICAgIGJvYXJkLmtleURvd24gPSAoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgICAgICBjb25zdCBpc1NpbmdsZVNlbGVjdGlvbiA9IHNlbGVjdGVkRWxlbWVudHMubGVuZ3RoID09PSAxO1xuICAgICAgICBjb25zdCB0YXJnZXRFbGVtZW50ID0gc2VsZWN0ZWRFbGVtZW50c1swXTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIVBsYWl0Qm9hcmQuaXNSZWFkb25seShib2FyZCkgJiZcbiAgICAgICAgICAgICFpc1ZpcnR1YWxLZXkoZXZlbnQpICYmXG4gICAgICAgICAgICAhaXNEZWxldGUoZXZlbnQpICYmXG4gICAgICAgICAgICAhaXNTcGFjZUhvdGtleShldmVudCkgJiZcbiAgICAgICAgICAgIGlzU2luZ2xlU2VsZWN0aW9uICYmXG4gICAgICAgICAgICBQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnkodGFyZ2V0RWxlbWVudClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgKFBsYWl0RWxlbWVudC5nZXRDb21wb25lbnQodGFyZ2V0RWxlbWVudCkgYXMgR2VvbWV0cnlDb21wb25lbnQpLmVkaXRUZXh0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBrZXlEb3duKGV2ZW50KTtcbiAgICB9O1xuXG4gICAgYm9hcmQuZGJsQ2xpY2sgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKCFQbGFpdEJvYXJkLmlzUmVhZG9ubHkoYm9hcmQpKSB7XG4gICAgICAgICAgICBjb25zdCBwb2ludCA9IHRvVmlld0JveFBvaW50KGJvYXJkLCB0b0hvc3RQb2ludChib2FyZCwgZXZlbnQueCwgZXZlbnQueSkpO1xuICAgICAgICAgICAgY29uc3QgaGl0RWxlbWVudCA9IGdldEhpdEVsZW1lbnRCeVBvaW50KGJvYXJkLCBwb2ludCk7XG4gICAgICAgICAgICBpZiAoaGl0RWxlbWVudCAmJiBQbGFpdERyYXdFbGVtZW50LmlzR2VvbWV0cnkoaGl0RWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBQbGFpdEVsZW1lbnQuZ2V0Q29tcG9uZW50KGhpdEVsZW1lbnQpIGFzIEdlb21ldHJ5Q29tcG9uZW50O1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudC5lZGl0VGV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRibENsaWNrKGV2ZW50KTtcbiAgICB9O1xuICAgIHJldHVybiBib2FyZDtcbn07XG4iXX0=
@@ -1,15 +1,17 @@
1
1
  import { drawHandle, getFirstTextManage, getIndexByResizeHandle, getResizeHandlePointByIndex, getSymmetricHandleIndex, isCornerHandle, withResize, resetPointsAfterResize } from '@plait/common';
2
- import { PlaitBoard, Point, RectangleClient, Transforms, createG, getRectangleByElements, getSelectedElements, isSelectionMoving, getSelectionAngle, rotatePoints, rotatedDataPoints, createDebugGenerator } from '@plait/core';
2
+ import { PlaitBoard, Point, RectangleClient, Transforms, createG, getRectangleByElements, getSelectedElements, isSelectionMoving, getSelectionAngle, rotatePoints, rotatedDataPoints, createDebugGenerator, hasValidAngle, isAxisChangedByAngle, drawRectangle, ACTIVE_STROKE_WIDTH, SELECTION_BORDER_COLOR } from '@plait/core';
3
3
  import { PlaitDrawElement } from '../interfaces';
4
4
  import { DrawTransforms } from '../transforms';
5
5
  import { getHitRectangleResizeHandleRef } from '../utils/position/geometry';
6
- import { getResizeAlignRef } from '../utils/resize-align';
6
+ import { getSnapResizingRefOptions, getSnapResizingRef } from '../utils/snap-resizing';
7
7
  const debugKey = 'debug:plait:resize-for-rotation';
8
8
  const debugGenerator = createDebugGenerator(debugKey);
9
9
  export function withDrawResize(board) {
10
- const { afterChange } = board;
11
- let alignG;
10
+ const { afterChange, drawActiveRectangle } = board;
11
+ let snapG;
12
12
  let handleG;
13
+ let needCustomActiveRectangle = false;
14
+ let resizeActivePoints = null;
13
15
  const canResize = () => {
14
16
  const elements = getSelectedElements(board);
15
17
  return elements.length > 1 && elements.every(el => PlaitDrawElement.isDrawElement(el));
@@ -33,12 +35,13 @@ export function withDrawResize(board) {
33
35
  return null;
34
36
  },
35
37
  onResize: (resizeRef, resizeState) => {
36
- alignG?.remove();
38
+ snapG?.remove();
37
39
  debugGenerator.isDebug() && debugGenerator.clear();
38
40
  const isFromCorner = isCornerHandle(board, resizeRef.handle);
39
41
  const isAspectRatio = resizeState.isShift || isFromCorner;
40
42
  const centerPoint = RectangleClient.getCenterPoint(resizeRef.rectangle);
41
- const { originPoint, handlePoint } = getResizeOriginPointAndHandlePoint(board, resizeRef);
43
+ const handleIndex = getIndexByResizeHandle(resizeRef.handle);
44
+ const { originPoint, handlePoint } = getResizeOriginPointAndHandlePoint(board, handleIndex, resizeRef.rectangle);
42
45
  const angle = getSelectionAngle(resizeRef.element);
43
46
  let bulkRotationRef;
44
47
  if (angle) {
@@ -52,16 +55,18 @@ export function withDrawResize(board) {
52
55
  resizeState.startPoint = rotatedStartPoint;
53
56
  resizeState.endPoint = rotateEndPoint;
54
57
  }
55
- const resizeAlignRef = getResizeAlignRef(board, resizeRef, resizeState, {
58
+ const resizeSnapRefOptions = getSnapResizingRefOptions(board, resizeRef, resizeState, {
56
59
  originPoint,
57
60
  handlePoint
58
61
  }, isAspectRatio, isFromCorner);
59
- alignG = resizeAlignRef.alignG;
60
- PlaitBoard.getElementActiveHost(board).append(alignG);
62
+ const resizeSnapRef = getSnapResizingRef(board, resizeRef.element, resizeSnapRefOptions);
63
+ resizeActivePoints = resizeSnapRef.activePoints;
64
+ snapG = resizeSnapRef.snapG;
65
+ PlaitBoard.getElementActiveHost(board).append(snapG);
61
66
  if (bulkRotationRef) {
62
67
  const boundingBoxCornerPoints = RectangleClient.getPoints(resizeRef.rectangle);
63
68
  const resizedBoundingBoxCornerPoints = boundingBoxCornerPoints.map(p => {
64
- return movePointByZoomAndOriginPoint(p, originPoint, resizeAlignRef.xZoom, resizeAlignRef.yZoom);
69
+ return movePointByZoomAndOriginPoint(p, originPoint, resizeSnapRef.xZoom, resizeSnapRef.yZoom);
65
70
  });
66
71
  const newBoundingBox = RectangleClient.getRectangleByPoints(resizedBoundingBoxCornerPoints);
67
72
  debugGenerator.isDebug() && debugGenerator.drawRectangle(board, newBoundingBox, { stroke: 'blue' });
@@ -81,7 +86,7 @@ export function withDrawResize(board) {
81
86
  if (bulkRotationRef) {
82
87
  const reversedPoints = rotatedDataPoints(target.points, centerPoint, -bulkRotationRef.angle);
83
88
  points = reversedPoints.map((p) => {
84
- return movePointByZoomAndOriginPoint(p, originPoint, resizeAlignRef.xZoom, resizeAlignRef.yZoom);
89
+ return movePointByZoomAndOriginPoint(p, originPoint, resizeSnapRef.xZoom, resizeSnapRef.yZoom);
85
90
  });
86
91
  const adjustTargetPoints = points.map(p => [
87
92
  p[0] + bulkRotationRef.offsetX,
@@ -90,9 +95,17 @@ export function withDrawResize(board) {
90
95
  points = rotatedDataPoints(adjustTargetPoints, bulkRotationRef.newCenterPoint, bulkRotationRef.angle);
91
96
  }
92
97
  else {
93
- points = target.points.map(p => {
94
- return movePointByZoomAndOriginPoint(p, originPoint, resizeAlignRef.xZoom, resizeAlignRef.yZoom);
95
- });
98
+ if (hasValidAngle(target)) {
99
+ needCustomActiveRectangle = true;
100
+ }
101
+ if (hasValidAngle(target) && isAxisChangedByAngle(target.angle)) {
102
+ points = getResizePointsByOtherwiseAxis(board, target.points, originPoint, resizeSnapRef.xZoom, resizeSnapRef.yZoom);
103
+ }
104
+ else {
105
+ points = target.points.map(p => {
106
+ return movePointByZoomAndOriginPoint(p, originPoint, resizeSnapRef.xZoom, resizeSnapRef.yZoom);
107
+ });
108
+ }
96
109
  }
97
110
  if (PlaitDrawElement.isGeometry(target)) {
98
111
  const { height: textHeight } = getFirstTextManage(target).getSize();
@@ -109,7 +122,7 @@ export function withDrawResize(board) {
109
122
  // The image element does not follow the resize, but moves based on the center point.
110
123
  const targetRectangle = RectangleClient.getRectangleByPoints(target.points);
111
124
  const centerPoint = RectangleClient.getCenterPoint(targetRectangle);
112
- const newCenterPoint = movePointByZoomAndOriginPoint(centerPoint, originPoint, resizeAlignRef.xZoom, resizeAlignRef.yZoom);
125
+ const newCenterPoint = movePointByZoomAndOriginPoint(centerPoint, originPoint, resizeSnapRef.xZoom, resizeSnapRef.yZoom);
113
126
  const newTargetRectangle = RectangleClient.getRectangleByCenterPoint(newCenterPoint, targetRectangle.width, targetRectangle.height);
114
127
  Transforms.setNode(board, { points: RectangleClient.getPoints(newTargetRectangle) }, path);
115
128
  }
@@ -117,8 +130,14 @@ export function withDrawResize(board) {
117
130
  });
118
131
  },
119
132
  afterResize: (resizeRef) => {
120
- alignG?.remove();
121
- alignG = null;
133
+ snapG?.remove();
134
+ snapG = null;
135
+ if (needCustomActiveRectangle) {
136
+ needCustomActiveRectangle = false;
137
+ resizeActivePoints = null;
138
+ const selectedElements = getSelectedElements(board);
139
+ Transforms.addSelectionWithTemporaryElements(board, selectedElements);
140
+ }
122
141
  }
123
142
  };
124
143
  withResize(board, options);
@@ -131,7 +150,9 @@ export function withDrawResize(board) {
131
150
  if (canResize() && !isSelectionMoving(board)) {
132
151
  handleG = createG();
133
152
  const elements = getSelectedElements(board);
134
- const boundingRectangle = getRectangleByElements(board, elements, false);
153
+ const boundingRectangle = needCustomActiveRectangle
154
+ ? RectangleClient.getRectangleByPoints(resizeActivePoints)
155
+ : getRectangleByElements(board, elements, false);
135
156
  let corners = RectangleClient.getCornerPoints(boundingRectangle);
136
157
  const angle = getSelectionAngle(elements);
137
158
  if (angle) {
@@ -145,21 +166,29 @@ export function withDrawResize(board) {
145
166
  PlaitBoard.getElementActiveHost(board).append(handleG);
146
167
  }
147
168
  };
169
+ board.drawActiveRectangle = () => {
170
+ if (needCustomActiveRectangle) {
171
+ const rectangle = RectangleClient.getRectangleByPoints(resizeActivePoints);
172
+ return drawRectangle(board, RectangleClient.inflate(rectangle, ACTIVE_STROKE_WIDTH), {
173
+ stroke: SELECTION_BORDER_COLOR,
174
+ strokeWidth: ACTIVE_STROKE_WIDTH
175
+ });
176
+ }
177
+ return drawActiveRectangle();
178
+ };
148
179
  return board;
149
180
  }
150
- export const getResizeOriginPointAndHandlePoint = (board, resizeRef) => {
151
- const handleIndex = getIndexByResizeHandle(resizeRef.handle);
181
+ export const getResizeOriginPointAndHandlePoint = (board, handleIndex, rectangle) => {
152
182
  const symmetricHandleIndex = getSymmetricHandleIndex(board, handleIndex);
153
- const originPoint = getResizeHandlePointByIndex(resizeRef.rectangle, symmetricHandleIndex);
154
- const handlePoint = getResizeHandlePointByIndex(resizeRef.rectangle, handleIndex);
183
+ const originPoint = getResizeHandlePointByIndex(rectangle, symmetricHandleIndex);
184
+ const handlePoint = getResizeHandlePointByIndex(rectangle, handleIndex);
155
185
  return {
156
186
  originPoint,
157
187
  handlePoint
158
188
  };
159
189
  };
160
- export const getResizeZoom = (resizeState, resizeOriginPoint, resizeHandlePoint, isFromCorner, isAspectRatio) => {
161
- const startPoint = resizeState.startPoint;
162
- const endPoint = resizeState.endPoint;
190
+ export const getResizeZoom = (resizeStartAndEnd, resizeOriginPoint, resizeHandlePoint, isFromCorner, isAspectRatio) => {
191
+ const [startPoint, endPoint] = resizeStartAndEnd;
163
192
  let xZoom = 0;
164
193
  let yZoom = 0;
165
194
  if (isFromCorner) {
@@ -200,4 +229,22 @@ export const movePointByZoomAndOriginPoint = (p, resizeOriginPoint, xZoom, yZoom
200
229
  const offsetY = (p[1] - resizeOriginPoint[1]) * yZoom;
201
230
  return [p[0] + offsetX, p[1] + offsetY];
202
231
  };
203
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kcmF3LXJlc2l6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3BsdWdpbnMvd2l0aC1kcmF3LXJlc2l6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBSUgsVUFBVSxFQUNWLGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIsMkJBQTJCLEVBQzNCLHVCQUF1QixFQUN2QixjQUFjLEVBQ2QsVUFBVSxFQUNWLHNCQUFzQixFQUN6QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0gsVUFBVSxFQUNWLEtBQUssRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLE9BQU8sRUFDUCxzQkFBc0IsRUFDdEIsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixvQkFBb0IsRUFDdkIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0MsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFMUQsTUFBTSxRQUFRLEdBQUcsaUNBQWlDLENBQUM7QUFDbkQsTUFBTSxjQUFjLEdBQUcsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7QUFTdEQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxLQUFpQjtJQUM1QyxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsS0FBSyxDQUFDO0lBQzlCLElBQUksTUFBMEIsQ0FBQztJQUMvQixJQUFJLE9BQTJCLENBQUM7SUFFaEMsTUFBTSxTQUFTLEdBQUcsR0FBRyxFQUFFO1FBQ25CLE1BQU0sUUFBUSxHQUFHLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzVDLE9BQU8sUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzNGLENBQUMsQ0FBQztJQUVGLE1BQU0sT0FBTyxHQUEwQztRQUNuRCxHQUFHLEVBQUUsZUFBZTtRQUNwQixTQUFTO1FBQ1QsT0FBTyxFQUFFLENBQUMsS0FBWSxFQUFFLEVBQUU7WUFDdEIsTUFBTSxRQUFRLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUF1QixDQUFDO1lBQ2xFLE1BQU0saUJBQWlCLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN6RSxNQUFNLEtBQUssR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUMxQyxNQUFNLFNBQVMsR0FBRyw4QkFBOEIsQ0FBQyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3pGLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ1osT0FBTztvQkFDSCxPQUFPLEVBQUUsUUFBUTtvQkFDakIsU0FBUyxFQUFFLGlCQUFpQjtvQkFDNUIsTUFBTSxFQUFFLFNBQVMsQ0FBQyxNQUFNO29CQUN4QixXQUFXLEVBQUUsU0FBUyxDQUFDLFdBQVc7aUJBQ3JDLENBQUM7WUFDTixDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDaEIsQ0FBQztRQUNELFFBQVEsRUFBRSxDQUFDLFNBQXdDLEVBQUUsV0FBd0IsRUFBRSxFQUFFO1lBQzdFLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUNqQixjQUFjLENBQUMsT0FBTyxFQUFFLElBQUksY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25ELE1BQU0sWUFBWSxHQUFHLGNBQWMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdELE1BQU0sYUFBYSxHQUFHLFdBQVcsQ0FBQyxPQUFPLElBQUksWUFBWSxDQUFDO1lBQzFELE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLFNBQVUsQ0FBQyxDQUFDO1lBQ3pFLE1BQU0sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLEdBQUcsa0NBQWtDLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQzFGLE1BQU0sS0FBSyxHQUFHLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuRCxJQUFJLGVBQTRDLENBQUM7WUFDakQsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDUixlQUFlLEdBQUc7b0JBQ2QsS0FBSyxFQUFFLEtBQUs7b0JBQ1osT0FBTyxFQUFFLENBQUM7b0JBQ1YsT0FBTyxFQUFFLENBQUM7b0JBQ1YsY0FBYyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztpQkFDekIsQ0FBQztnQkFDRixNQUFNLENBQUMsaUJBQWlCLEVBQUUsY0FBYyxDQUFDLEdBQUcsWUFBWSxDQUNwRCxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUM5QyxXQUFXLEVBQ1gsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUN6QixDQUFDO2dCQUNGLFdBQVcsQ0FBQyxVQUFVLEdBQUcsaUJBQWlCLENBQUM7Z0JBQzNDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDO1lBQzFDLENBQUM7WUFFRCxNQUFNLGNBQWMsR0FBRyxpQkFBaUIsQ0FDcEMsS0FBSyxFQUNMLFNBQVMsRUFDVCxXQUFXLEVBQ1g7Z0JBQ0ksV0FBVztnQkFDWCxXQUFXO2FBQ2QsRUFDRCxhQUFhLEVBQ2IsWUFBWSxDQUNmLENBQUM7WUFDRixNQUFNLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQztZQUMvQixVQUFVLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBRXRELElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQ2xCLE1BQU0sdUJBQXVCLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsU0FBVSxDQUFDLENBQUM7Z0JBQ2hGLE1BQU0sOEJBQThCLEdBQUcsdUJBQXVCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO29CQUNuRSxPQUFPLDZCQUE2QixDQUFDLENBQUMsRUFBRSxXQUFXLEVBQUUsY0FBYyxDQUFDLEtBQUssRUFBRSxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3JHLENBQUMsQ0FBQyxDQUFDO2dCQUNILE1BQU0sY0FBYyxHQUFHLGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO2dCQUU1RixjQUFjLENBQUMsT0FBTyxFQUFFLElBQUksY0FBYyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBRXBHLE1BQU0sb0JBQW9CLEdBQUcsZUFBZSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztnQkFDNUUsTUFBTSw0QkFBNEIsR0FBRyxzQkFBc0IsQ0FDdkQsZUFBZSxDQUFDLG9CQUFvQixDQUFDLHVCQUF1QixDQUFDLEVBQzdELGVBQWUsQ0FBQyxvQkFBb0IsQ0FBQyw4QkFBOEIsQ0FBQyxFQUNwRSxXQUFXLEVBQ1gsb0JBQW9CLEVBQ3BCLGVBQWUsQ0FBQyxLQUFLLENBQ3hCLENBQUM7Z0JBQ0YsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsb0JBQW9CLENBQUMsNEJBQTRCLENBQUMsQ0FBQyxDQUFDO2dCQUNySCxlQUFlLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxlQUFlLEVBQUU7b0JBQzdDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsb0JBQW9CLENBQUMsQ0FBQyxDQUFDO29CQUMvQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLG9CQUFvQixDQUFDLENBQUMsQ0FBQztvQkFDL0MsY0FBYyxFQUFFLFNBQVM7aUJBQzVCLENBQUMsQ0FBQztnQkFFSCxjQUFjLENBQUMsT0FBTyxFQUFFLElBQUksY0FBYyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsNEJBQTRCLENBQUMsQ0FBQztZQUNsRyxDQUFDO1lBRUQsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQy9CLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUNoRCxJQUFJLE1BQU0sQ0FBQztnQkFDWCxJQUFJLGVBQWUsRUFBRSxDQUFDO29CQUNsQixNQUFNLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDN0YsTUFBTSxHQUFHLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFRLEVBQUUsRUFBRTt3QkFDckMsT0FBTyw2QkFBNkIsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLGNBQWMsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNyRyxDQUFDLENBQW1CLENBQUM7b0JBQ3JCLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO3dCQUN2QyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsZUFBZ0IsQ0FBQyxPQUFPO3dCQUMvQixDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsZUFBZ0IsQ0FBQyxPQUFPO3FCQUNsQyxDQUFZLENBQUM7b0JBQ2QsTUFBTSxHQUFHLGlCQUFpQixDQUFDLGtCQUFrQixFQUFFLGVBQWUsQ0FBQyxjQUFjLEVBQUUsZUFBZSxDQUFDLEtBQUssQ0FBbUIsQ0FBQztnQkFDNUgsQ0FBQztxQkFBTSxDQUFDO29CQUNKLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTt3QkFDM0IsT0FBTyw2QkFBNkIsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLGNBQWMsQ0FBQyxLQUFLLEVBQUUsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNyRyxDQUFDLENBQUMsQ0FBQztnQkFDUCxDQUFDO2dCQUVELElBQUksZ0JBQWdCLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7b0JBQ3RDLE1BQU0sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ3BFLGNBQWMsQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLE1BQXdCLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNyRixDQUFDO3FCQUFNLElBQUksZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7b0JBQ3pDLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ2hELENBQUM7cUJBQU0sSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztvQkFDMUMsSUFBSSxhQUFhLEVBQUUsQ0FBQzt3QkFDaEIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDaEQsQ0FBQzt5QkFBTSxDQUFDO3dCQUNKLHFGQUFxRjt3QkFDckYsTUFBTSxlQUFlLEdBQUcsZUFBZSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDNUUsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsQ0FBQzt3QkFDcEUsTUFBTSxjQUFjLEdBQUcsNkJBQTZCLENBQ2hELFdBQVcsRUFDWCxXQUFXLEVBQ1gsY0FBYyxDQUFDLEtBQUssRUFDcEIsY0FBYyxDQUFDLEtBQUssQ0FDdkIsQ0FBQzt3QkFDRixNQUFNLGtCQUFrQixHQUFHLGVBQWUsQ0FBQyx5QkFBeUIsQ0FDaEUsY0FBYyxFQUNkLGVBQWUsQ0FBQyxLQUFLLEVBQ3JCLGVBQWUsQ0FBQyxNQUFNLENBQ3pCLENBQUM7d0JBQ0YsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQy9GLENBQUM7Z0JBQ0wsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQztRQUNELFdBQVcsRUFBRSxDQUFDLFNBQXdDLEVBQUUsRUFBRTtZQUN0RCxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDakIsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNsQixDQUFDO0tBQ0osQ0FBQztJQUVGLFVBQVUsQ0FBcUIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRS9DLEtBQUssQ0FBQyxXQUFXLEdBQUcsR0FBRyxFQUFFO1FBQ3JCLFdBQVcsRUFBRSxDQUFDO1FBQ2QsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNWLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqQixPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ25CLENBQUM7UUFDRCxJQUFJLFNBQVMsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxPQUFPLEdBQUcsT0FBTyxFQUFFLENBQUM7WUFDcEIsTUFBTSxRQUFRLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUF1QixDQUFDO1lBQ2xFLE1BQU0saUJBQWlCLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN6RSxJQUFJLE9BQU8sR0FBRyxlQUFlLENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDakUsTUFBTSxLQUFLLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDMUMsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDUixNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsY0FBYyxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQ3RFLE9BQU8sR0FBRyxZQUFZLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQWlDLENBQUM7WUFDeEYsQ0FBQztZQUNELE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3JCLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3BDLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsVUFBVSxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzRCxDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBQ0YsT0FBTyxLQUFLLENBQUM7QUFDakIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLGtDQUFrQyxHQUFHLENBQUMsS0FBaUIsRUFBRSxTQUEyRCxFQUFFLEVBQUU7SUFDakksTUFBTSxXQUFXLEdBQUcsc0JBQXNCLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdELE1BQU0sb0JBQW9CLEdBQUcsdUJBQXVCLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBQ3pFLE1BQU0sV0FBVyxHQUFHLDJCQUEyQixDQUFDLFNBQVMsQ0FBQyxTQUE0QixFQUFFLG9CQUFvQixDQUFDLENBQUM7SUFDOUcsTUFBTSxXQUFXLEdBQUcsMkJBQTJCLENBQUMsU0FBUyxDQUFDLFNBQTRCLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFDckcsT0FBTztRQUNILFdBQVc7UUFDWCxXQUFXO0tBQ2QsQ0FBQztBQUNOLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUN6QixXQUF3QixFQUN4QixpQkFBd0IsRUFDeEIsaUJBQXdCLEVBQ3hCLFlBQXFCLEVBQ3JCLGFBQXNCLEVBQ3hCLEVBQUU7SUFDQSxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsVUFBVSxDQUFDO0lBQzFDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7SUFDdEMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNmLElBQUksYUFBYSxFQUFFLENBQUM7WUFDaEIsSUFBSSxpQkFBaUIsR0FBRyxLQUFLLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUMvRCxLQUFLLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFFLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbEIsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQy9ELElBQUksaUJBQWlCLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDL0QsS0FBSyxHQUFHLGlCQUFpQixHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRSxLQUFLLEdBQUcsaUJBQWlCLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzlFLENBQUM7SUFDTCxDQUFDO1NBQU0sQ0FBQztRQUNKLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDO1FBQzVGLElBQUksZ0JBQWdCLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDdEgsSUFBSSxlQUFlLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0gsTUFBTSxJQUFJLEdBQUcsZ0JBQWdCLEdBQUcsZUFBZSxDQUFDO1FBQ2hELElBQUksYUFBYSxFQUFFLENBQUM7WUFDaEIsS0FBSyxHQUFHLElBQUksQ0FBQztZQUNiLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDakIsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLFlBQVksRUFBRSxDQUFDO2dCQUNmLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDakIsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLEtBQUssR0FBRyxJQUFJLENBQUM7WUFDakIsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBQ0QsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUM1QixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSw2QkFBNkIsR0FBRyxDQUFDLENBQVEsRUFBRSxpQkFBd0IsRUFBRSxLQUFhLEVBQUUsS0FBYSxFQUFFLEVBQUU7SUFDOUcsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDdEQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDdEQsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBVSxDQUFDO0FBQ3JELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgUmVzaXplUmVmLFxuICAgIFJlc2l6ZVN0YXRlLFxuICAgIFdpdGhSZXNpemVPcHRpb25zLFxuICAgIGRyYXdIYW5kbGUsXG4gICAgZ2V0Rmlyc3RUZXh0TWFuYWdlLFxuICAgIGdldEluZGV4QnlSZXNpemVIYW5kbGUsXG4gICAgZ2V0UmVzaXplSGFuZGxlUG9pbnRCeUluZGV4LFxuICAgIGdldFN5bW1ldHJpY0hhbmRsZUluZGV4LFxuICAgIGlzQ29ybmVySGFuZGxlLFxuICAgIHdpdGhSZXNpemUsXG4gICAgcmVzZXRQb2ludHNBZnRlclJlc2l6ZVxufSBmcm9tICdAcGxhaXQvY29tbW9uJztcbmltcG9ydCB7XG4gICAgUGxhaXRCb2FyZCxcbiAgICBQb2ludCxcbiAgICBSZWN0YW5nbGVDbGllbnQsXG4gICAgVHJhbnNmb3JtcyxcbiAgICBjcmVhdGVHLFxuICAgIGdldFJlY3RhbmdsZUJ5RWxlbWVudHMsXG4gICAgZ2V0U2VsZWN0ZWRFbGVtZW50cyxcbiAgICBpc1NlbGVjdGlvbk1vdmluZyxcbiAgICBnZXRTZWxlY3Rpb25BbmdsZSxcbiAgICByb3RhdGVQb2ludHMsXG4gICAgcm90YXRlZERhdGFQb2ludHMsXG4gICAgY3JlYXRlRGVidWdHZW5lcmF0b3Jcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgUGxhaXREcmF3RWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgRHJhd1RyYW5zZm9ybXMgfSBmcm9tICcuLi90cmFuc2Zvcm1zJztcbmltcG9ydCB7IGdldEhpdFJlY3RhbmdsZVJlc2l6ZUhhbmRsZVJlZiB9IGZyb20gJy4uL3V0aWxzL3Bvc2l0aW9uL2dlb21ldHJ5JztcbmltcG9ydCB7IGdldFJlc2l6ZUFsaWduUmVmIH0gZnJvbSAnLi4vdXRpbHMvcmVzaXplLWFsaWduJztcblxuY29uc3QgZGVidWdLZXkgPSAnZGVidWc6cGxhaXQ6cmVzaXplLWZvci1yb3RhdGlvbic7XG5jb25zdCBkZWJ1Z0dlbmVyYXRvciA9IGNyZWF0ZURlYnVnR2VuZXJhdG9yKGRlYnVnS2V5KTtcblxuZXhwb3J0IGludGVyZmFjZSBCdWxrUm90YXRpb25SZWYge1xuICAgIGFuZ2xlOiBudW1iZXI7XG4gICAgb2Zmc2V0WDogbnVtYmVyO1xuICAgIG9mZnNldFk6IG51bWJlcjtcbiAgICBuZXdDZW50ZXJQb2ludDogUG9pbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoRHJhd1Jlc2l6ZShib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IHsgYWZ0ZXJDaGFuZ2UgfSA9IGJvYXJkO1xuICAgIGxldCBhbGlnbkc6IFNWR0dFbGVtZW50IHwgbnVsbDtcbiAgICBsZXQgaGFuZGxlRzogU1ZHR0VsZW1lbnQgfCBudWxsO1xuXG4gICAgY29uc3QgY2FuUmVzaXplID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgICAgICByZXR1cm4gZWxlbWVudHMubGVuZ3RoID4gMSAmJiBlbGVtZW50cy5ldmVyeShlbCA9PiBQbGFpdERyYXdFbGVtZW50LmlzRHJhd0VsZW1lbnQoZWwpKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgb3B0aW9uczogV2l0aFJlc2l6ZU9wdGlvbnM8UGxhaXREcmF3RWxlbWVudFtdPiA9IHtcbiAgICAgICAga2V5OiAnZHJhdy1lbGVtZW50cycsXG4gICAgICAgIGNhblJlc2l6ZSxcbiAgICAgICAgaGl0VGVzdDogKHBvaW50OiBQb2ludCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKSBhcyBQbGFpdERyYXdFbGVtZW50W107XG4gICAgICAgICAgICBjb25zdCBib3VuZGluZ1JlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGVsZW1lbnRzLCBmYWxzZSk7XG4gICAgICAgICAgICBjb25zdCBhbmdsZSA9IGdldFNlbGVjdGlvbkFuZ2xlKGVsZW1lbnRzKTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZVJlZiA9IGdldEhpdFJlY3RhbmdsZVJlc2l6ZUhhbmRsZVJlZihib2FyZCwgYm91bmRpbmdSZWN0YW5nbGUsIHBvaW50LCBhbmdsZSk7XG4gICAgICAgICAgICBpZiAoaGFuZGxlUmVmKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudHMsXG4gICAgICAgICAgICAgICAgICAgIHJlY3RhbmdsZTogYm91bmRpbmdSZWN0YW5nbGUsXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZTogaGFuZGxlUmVmLmhhbmRsZSxcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yQ2xhc3M6IGhhbmRsZVJlZi5jdXJzb3JDbGFzc1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgb25SZXNpemU6IChyZXNpemVSZWY6IFJlc2l6ZVJlZjxQbGFpdERyYXdFbGVtZW50W10+LCByZXNpemVTdGF0ZTogUmVzaXplU3RhdGUpID0+IHtcbiAgICAgICAgICAgIGFsaWduRz8ucmVtb3ZlKCk7XG4gICAgICAgICAgICBkZWJ1Z0dlbmVyYXRvci5pc0RlYnVnKCkgJiYgZGVidWdHZW5lcmF0b3IuY2xlYXIoKTtcbiAgICAgICAgICAgIGNvbnN0IGlzRnJvbUNvcm5lciA9IGlzQ29ybmVySGFuZGxlKGJvYXJkLCByZXNpemVSZWYuaGFuZGxlKTtcbiAgICAgICAgICAgIGNvbnN0IGlzQXNwZWN0UmF0aW8gPSByZXNpemVTdGF0ZS5pc1NoaWZ0IHx8IGlzRnJvbUNvcm5lcjtcbiAgICAgICAgICAgIGNvbnN0IGNlbnRlclBvaW50ID0gUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50KHJlc2l6ZVJlZi5yZWN0YW5nbGUhKTtcbiAgICAgICAgICAgIGNvbnN0IHsgb3JpZ2luUG9pbnQsIGhhbmRsZVBvaW50IH0gPSBnZXRSZXNpemVPcmlnaW5Qb2ludEFuZEhhbmRsZVBvaW50KGJvYXJkLCByZXNpemVSZWYpO1xuICAgICAgICAgICAgY29uc3QgYW5nbGUgPSBnZXRTZWxlY3Rpb25BbmdsZShyZXNpemVSZWYuZWxlbWVudCk7XG4gICAgICAgICAgICBsZXQgYnVsa1JvdGF0aW9uUmVmOiBCdWxrUm90YXRpb25SZWYgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoYW5nbGUpIHtcbiAgICAgICAgICAgICAgICBidWxrUm90YXRpb25SZWYgPSB7XG4gICAgICAgICAgICAgICAgICAgIGFuZ2xlOiBhbmdsZSxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WDogMCxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WTogMCxcbiAgICAgICAgICAgICAgICAgICAgbmV3Q2VudGVyUG9pbnQ6IFswLCAwXVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgY29uc3QgW3JvdGF0ZWRTdGFydFBvaW50LCByb3RhdGVFbmRQb2ludF0gPSByb3RhdGVQb2ludHMoXG4gICAgICAgICAgICAgICAgICAgIFtyZXNpemVTdGF0ZS5zdGFydFBvaW50LCByZXNpemVTdGF0ZS5lbmRQb2ludF0sXG4gICAgICAgICAgICAgICAgICAgIGNlbnRlclBvaW50LFxuICAgICAgICAgICAgICAgICAgICAtYnVsa1JvdGF0aW9uUmVmLmFuZ2xlXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICByZXNpemVTdGF0ZS5zdGFydFBvaW50ID0gcm90YXRlZFN0YXJ0UG9pbnQ7XG4gICAgICAgICAgICAgICAgcmVzaXplU3RhdGUuZW5kUG9pbnQgPSByb3RhdGVFbmRQb2ludDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcmVzaXplQWxpZ25SZWYgPSBnZXRSZXNpemVBbGlnblJlZihcbiAgICAgICAgICAgICAgICBib2FyZCxcbiAgICAgICAgICAgICAgICByZXNpemVSZWYsXG4gICAgICAgICAgICAgICAgcmVzaXplU3RhdGUsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBvcmlnaW5Qb2ludCxcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlUG9pbnRcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGlzQXNwZWN0UmF0aW8sXG4gICAgICAgICAgICAgICAgaXNGcm9tQ29ybmVyXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYWxpZ25HID0gcmVzaXplQWxpZ25SZWYuYWxpZ25HO1xuICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRFbGVtZW50QWN0aXZlSG9zdChib2FyZCkuYXBwZW5kKGFsaWduRyk7XG5cbiAgICAgICAgICAgIGlmIChidWxrUm90YXRpb25SZWYpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBib3VuZGluZ0JveENvcm5lclBvaW50cyA9IFJlY3RhbmdsZUNsaWVudC5nZXRQb2ludHMocmVzaXplUmVmLnJlY3RhbmdsZSEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc2l6ZWRCb3VuZGluZ0JveENvcm5lclBvaW50cyA9IGJvdW5kaW5nQm94Q29ybmVyUG9pbnRzLm1hcChwID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vdmVQb2ludEJ5Wm9vbUFuZE9yaWdpblBvaW50KHAsIG9yaWdpblBvaW50LCByZXNpemVBbGlnblJlZi54Wm9vbSwgcmVzaXplQWxpZ25SZWYueVpvb20pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0JvdW5kaW5nQm94ID0gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHJlc2l6ZWRCb3VuZGluZ0JveENvcm5lclBvaW50cyk7XG5cbiAgICAgICAgICAgICAgICBkZWJ1Z0dlbmVyYXRvci5pc0RlYnVnKCkgJiYgZGVidWdHZW5lcmF0b3IuZHJhd1JlY3RhbmdsZShib2FyZCwgbmV3Qm91bmRpbmdCb3gsIHsgc3Ryb2tlOiAnYmx1ZScgfSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBuZXdCb3VuZGluZ0JveENlbnRlciA9IFJlY3RhbmdsZUNsaWVudC5nZXRDZW50ZXJQb2ludChuZXdCb3VuZGluZ0JveCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYWRqdXN0ZWROZXdCb3VuZGluZ0JveFBvaW50cyA9IHJlc2V0UG9pbnRzQWZ0ZXJSZXNpemUoXG4gICAgICAgICAgICAgICAgICAgIFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhib3VuZGluZ0JveENvcm5lclBvaW50cyksXG4gICAgICAgICAgICAgICAgICAgIFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhyZXNpemVkQm91bmRpbmdCb3hDb3JuZXJQb2ludHMpLFxuICAgICAgICAgICAgICAgICAgICBjZW50ZXJQb2ludCxcbiAgICAgICAgICAgICAgICAgICAgbmV3Qm91bmRpbmdCb3hDZW50ZXIsXG4gICAgICAgICAgICAgICAgICAgIGJ1bGtSb3RhdGlvblJlZi5hbmdsZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q2VudGVyID0gUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50KFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhhZGp1c3RlZE5ld0JvdW5kaW5nQm94UG9pbnRzKSk7XG4gICAgICAgICAgICAgICAgYnVsa1JvdGF0aW9uUmVmID0gT2JqZWN0LmFzc2lnbihidWxrUm90YXRpb25SZWYsIHtcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0WDogbmV3Q2VudGVyWzBdIC0gbmV3Qm91bmRpbmdCb3hDZW50ZXJbMF0sXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFk6IG5ld0NlbnRlclsxXSAtIG5ld0JvdW5kaW5nQm94Q2VudGVyWzFdLFxuICAgICAgICAgICAgICAgICAgICBuZXdDZW50ZXJQb2ludDogbmV3Q2VudGVyXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBkZWJ1Z0dlbmVyYXRvci5pc0RlYnVnKCkgJiYgZGVidWdHZW5lcmF0b3IuZHJhd1JlY3RhbmdsZShib2FyZCwgYWRqdXN0ZWROZXdCb3VuZGluZ0JveFBvaW50cyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc2l6ZVJlZi5lbGVtZW50LmZvckVhY2godGFyZ2V0ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgdGFyZ2V0KTtcbiAgICAgICAgICAgICAgICBsZXQgcG9pbnRzO1xuICAgICAgICAgICAgICAgIGlmIChidWxrUm90YXRpb25SZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZWRQb2ludHMgPSByb3RhdGVkRGF0YVBvaW50cyh0YXJnZXQucG9pbnRzLCBjZW50ZXJQb2ludCwgLWJ1bGtSb3RhdGlvblJlZi5hbmdsZSk7XG4gICAgICAgICAgICAgICAgICAgIHBvaW50cyA9IHJldmVyc2VkUG9pbnRzLm1hcCgocDogUG9pbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtb3ZlUG9pbnRCeVpvb21BbmRPcmlnaW5Qb2ludChwLCBvcmlnaW5Qb2ludCwgcmVzaXplQWxpZ25SZWYueFpvb20sIHJlc2l6ZUFsaWduUmVmLnlab29tKTtcbiAgICAgICAgICAgICAgICAgICAgfSkgYXMgW1BvaW50LCBQb2ludF07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkanVzdFRhcmdldFBvaW50cyA9IHBvaW50cy5tYXAocCA9PiBbXG4gICAgICAgICAgICAgICAgICAgICAgICBwWzBdICsgYnVsa1JvdGF0aW9uUmVmIS5vZmZzZXRYLFxuICAgICAgICAgICAgICAgICAgICAgICAgcFsxXSArIGJ1bGtSb3RhdGlvblJlZiEub2Zmc2V0WVxuICAgICAgICAgICAgICAgICAgICBdKSBhcyBQb2ludFtdO1xuICAgICAgICAgICAgICAgICAgICBwb2ludHMgPSByb3RhdGVkRGF0YVBvaW50cyhhZGp1c3RUYXJnZXRQb2ludHMsIGJ1bGtSb3RhdGlvblJlZi5uZXdDZW50ZXJQb2ludCwgYnVsa1JvdGF0aW9uUmVmLmFuZ2xlKSBhcyBbUG9pbnQsIFBvaW50XTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBwb2ludHMgPSB0YXJnZXQucG9pbnRzLm1hcChwID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtb3ZlUG9pbnRCeVpvb21BbmRPcmlnaW5Qb2ludChwLCBvcmlnaW5Qb2ludCwgcmVzaXplQWxpZ25SZWYueFpvb20sIHJlc2l6ZUFsaWduUmVmLnlab29tKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNHZW9tZXRyeSh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgaGVpZ2h0OiB0ZXh0SGVpZ2h0IH0gPSBnZXRGaXJzdFRleHRNYW5hZ2UodGFyZ2V0KS5nZXRTaXplKCk7XG4gICAgICAgICAgICAgICAgICAgIERyYXdUcmFuc2Zvcm1zLnJlc2l6ZUdlb21ldHJ5KGJvYXJkLCBwb2ludHMgYXMgW1BvaW50LCBQb2ludF0sIHRleHRIZWlnaHQsIHBhdGgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0xpbmUodGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGUoYm9hcmQsIHsgcG9pbnRzIH0sIHBhdGgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0ltYWdlKHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXNwZWN0UmF0aW8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShib2FyZCwgeyBwb2ludHMgfSwgcGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgaW1hZ2UgZWxlbWVudCBkb2VzIG5vdCBmb2xsb3cgdGhlIHJlc2l6ZSwgYnV0IG1vdmVzIGJhc2VkIG9uIHRoZSBjZW50ZXIgcG9pbnQuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHModGFyZ2V0LnBvaW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjZW50ZXJQb2ludCA9IFJlY3RhbmdsZUNsaWVudC5nZXRDZW50ZXJQb2ludCh0YXJnZXRSZWN0YW5nbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q2VudGVyUG9pbnQgPSBtb3ZlUG9pbnRCeVpvb21BbmRPcmlnaW5Qb2ludChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50ZXJQb2ludCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5Qb2ludCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNpemVBbGlnblJlZi54Wm9vbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNpemVBbGlnblJlZi55Wm9vbVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1RhcmdldFJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeUNlbnRlclBvaW50KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NlbnRlclBvaW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldFJlY3RhbmdsZS53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRSZWN0YW5nbGUuaGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKGJvYXJkLCB7IHBvaW50czogUmVjdGFuZ2xlQ2xpZW50LmdldFBvaW50cyhuZXdUYXJnZXRSZWN0YW5nbGUpIH0sIHBhdGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFmdGVyUmVzaXplOiAocmVzaXplUmVmOiBSZXNpemVSZWY8UGxhaXREcmF3RWxlbWVudFtdPikgPT4ge1xuICAgICAgICAgICAgYWxpZ25HPy5yZW1vdmUoKTtcbiAgICAgICAgICAgIGFsaWduRyA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgd2l0aFJlc2l6ZTxQbGFpdERyYXdFbGVtZW50W10+KGJvYXJkLCBvcHRpb25zKTtcblxuICAgIGJvYXJkLmFmdGVyQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgICBhZnRlckNoYW5nZSgpO1xuICAgICAgICBpZiAoaGFuZGxlRykge1xuICAgICAgICAgICAgaGFuZGxlRy5yZW1vdmUoKTtcbiAgICAgICAgICAgIGhhbmRsZUcgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYW5SZXNpemUoKSAmJiAhaXNTZWxlY3Rpb25Nb3ZpbmcoYm9hcmQpKSB7XG4gICAgICAgICAgICBoYW5kbGVHID0gY3JlYXRlRygpO1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKSBhcyBQbGFpdERyYXdFbGVtZW50W107XG4gICAgICAgICAgICBjb25zdCBib3VuZGluZ1JlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGVsZW1lbnRzLCBmYWxzZSk7XG4gICAgICAgICAgICBsZXQgY29ybmVycyA9IFJlY3RhbmdsZUNsaWVudC5nZXRDb3JuZXJQb2ludHMoYm91bmRpbmdSZWN0YW5nbGUpO1xuICAgICAgICAgICAgY29uc3QgYW5nbGUgPSBnZXRTZWxlY3Rpb25BbmdsZShlbGVtZW50cyk7XG4gICAgICAgICAgICBpZiAoYW5nbGUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjZW50ZXJQb2ludCA9IFJlY3RhbmdsZUNsaWVudC5nZXRDZW50ZXJQb2ludChib3VuZGluZ1JlY3RhbmdsZSk7XG4gICAgICAgICAgICAgICAgY29ybmVycyA9IHJvdGF0ZVBvaW50cyhjb3JuZXJzLCBjZW50ZXJQb2ludCwgYW5nbGUpIGFzIFtQb2ludCwgUG9pbnQsIFBvaW50LCBQb2ludF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb3JuZXJzLmZvckVhY2goY29ybmVyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBnID0gZHJhd0hhbmRsZShib2FyZCwgY29ybmVyKTtcbiAgICAgICAgICAgICAgICBoYW5kbGVHICYmIGhhbmRsZUcuYXBwZW5kKGcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBQbGFpdEJvYXJkLmdldEVsZW1lbnRBY3RpdmVIb3N0KGJvYXJkKS5hcHBlbmQoaGFuZGxlRyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBib2FyZDtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFJlc2l6ZU9yaWdpblBvaW50QW5kSGFuZGxlUG9pbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHJlc2l6ZVJlZjogUmVzaXplUmVmPFBsYWl0RHJhd0VsZW1lbnQgfCBQbGFpdERyYXdFbGVtZW50W10+KSA9PiB7XG4gICAgY29uc3QgaGFuZGxlSW5kZXggPSBnZXRJbmRleEJ5UmVzaXplSGFuZGxlKHJlc2l6ZVJlZi5oYW5kbGUpO1xuICAgIGNvbnN0IHN5bW1ldHJpY0hhbmRsZUluZGV4ID0gZ2V0U3ltbWV0cmljSGFuZGxlSW5kZXgoYm9hcmQsIGhhbmRsZUluZGV4KTtcbiAgICBjb25zdCBvcmlnaW5Qb2ludCA9IGdldFJlc2l6ZUhhbmRsZVBvaW50QnlJbmRleChyZXNpemVSZWYucmVjdGFuZ2xlIGFzIFJlY3RhbmdsZUNsaWVudCwgc3ltbWV0cmljSGFuZGxlSW5kZXgpO1xuICAgIGNvbnN0IGhhbmRsZVBvaW50ID0gZ2V0UmVzaXplSGFuZGxlUG9pbnRCeUluZGV4KHJlc2l6ZVJlZi5yZWN0YW5nbGUgYXMgUmVjdGFuZ2xlQ2xpZW50LCBoYW5kbGVJbmRleCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgb3JpZ2luUG9pbnQsXG4gICAgICAgIGhhbmRsZVBvaW50XG4gICAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZXNpemVab29tID0gKFxuICAgIHJlc2l6ZVN0YXRlOiBSZXNpemVTdGF0ZSxcbiAgICByZXNpemVPcmlnaW5Qb2ludDogUG9pbnQsXG4gICAgcmVzaXplSGFuZGxlUG9pbnQ6IFBvaW50LFxuICAgIGlzRnJvbUNvcm5lcjogYm9vbGVhbixcbiAgICBpc0FzcGVjdFJhdGlvOiBib29sZWFuXG4pID0+IHtcbiAgICBjb25zdCBzdGFydFBvaW50ID0gcmVzaXplU3RhdGUuc3RhcnRQb2ludDtcbiAgICBjb25zdCBlbmRQb2ludCA9IHJlc2l6ZVN0YXRlLmVuZFBvaW50O1xuICAgIGxldCB4Wm9vbSA9IDA7XG4gICAgbGV0IHlab29tID0gMDtcbiAgICBpZiAoaXNGcm9tQ29ybmVyKSB7XG4gICAgICAgIGlmIChpc0FzcGVjdFJhdGlvKSB7XG4gICAgICAgICAgICBsZXQgbm9ybWFsaXplZE9mZnNldFggPSBQb2ludC5nZXRPZmZzZXRYKHN0YXJ0UG9pbnQsIGVuZFBvaW50KTtcbiAgICAgICAgICAgIHhab29tID0gbm9ybWFsaXplZE9mZnNldFggLyAocmVzaXplSGFuZGxlUG9pbnRbMF0gLSByZXNpemVPcmlnaW5Qb2ludFswXSk7XG4gICAgICAgICAgICB5Wm9vbSA9IHhab29tO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IG5vcm1hbGl6ZWRPZmZzZXRYID0gUG9pbnQuZ2V0T2Zmc2V0WChzdGFydFBvaW50LCBlbmRQb2ludCk7XG4gICAgICAgICAgICBsZXQgbm9ybWFsaXplZE9mZnNldFkgPSBQb2ludC5nZXRPZmZzZXRZKHN0YXJ0UG9pbnQsIGVuZFBvaW50KTtcbiAgICAgICAgICAgIHhab29tID0gbm9ybWFsaXplZE9mZnNldFggLyAocmVzaXplSGFuZGxlUG9pbnRbMF0gLSByZXNpemVPcmlnaW5Qb2ludFswXSk7XG4gICAgICAgICAgICB5Wm9vbSA9IG5vcm1hbGl6ZWRPZmZzZXRZIC8gKHJlc2l6ZUhhbmRsZVBvaW50WzFdIC0gcmVzaXplT3JpZ2luUG9pbnRbMV0pO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgaXNIb3Jpem9udGFsID0gUG9pbnQuaXNIb3Jpem9udGFsKHJlc2l6ZU9yaWdpblBvaW50LCByZXNpemVIYW5kbGVQb2ludCwgMC4xKSB8fCBmYWxzZTtcbiAgICAgICAgbGV0IG5vcm1hbGl6ZWRPZmZzZXQgPSBpc0hvcml6b250YWwgPyBQb2ludC5nZXRPZmZzZXRYKHN0YXJ0UG9pbnQsIGVuZFBvaW50KSA6IFBvaW50LmdldE9mZnNldFkoc3RhcnRQb2ludCwgZW5kUG9pbnQpO1xuICAgICAgICBsZXQgYmVuY2htYXJrT2Zmc2V0ID0gaXNIb3Jpem9udGFsID8gcmVzaXplSGFuZGxlUG9pbnRbMF0gLSByZXNpemVPcmlnaW5Qb2ludFswXSA6IHJlc2l6ZUhhbmRsZVBvaW50WzFdIC0gcmVzaXplT3JpZ2luUG9pbnRbMV07XG4gICAgICAgIGNvbnN0IHpvb20gPSBub3JtYWxpemVkT2Zmc2V0IC8gYmVuY2htYXJrT2Zmc2V0O1xuICAgICAgICBpZiAoaXNBc3BlY3RSYXRpbykge1xuICAgICAgICAgICAgeFpvb20gPSB6b29tO1xuICAgICAgICAgICAgeVpvb20gPSB6b29tO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlzSG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgICAgIHhab29tID0gem9vbTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgeVpvb20gPSB6b29tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IHhab29tLCB5Wm9vbSB9O1xufTtcblxuZXhwb3J0IGNvbnN0IG1vdmVQb2ludEJ5Wm9vbUFuZE9yaWdpblBvaW50ID0gKHA6IFBvaW50LCByZXNpemVPcmlnaW5Qb2ludDogUG9pbnQsIHhab29tOiBudW1iZXIsIHlab29tOiBudW1iZXIpID0+IHtcbiAgICBjb25zdCBvZmZzZXRYID0gKHBbMF0gLSByZXNpemVPcmlnaW5Qb2ludFswXSkgKiB4Wm9vbTtcbiAgICBjb25zdCBvZmZzZXRZID0gKHBbMV0gLSByZXNpemVPcmlnaW5Qb2ludFsxXSkgKiB5Wm9vbTtcbiAgICByZXR1cm4gW3BbMF0gKyBvZmZzZXRYLCBwWzFdICsgb2Zmc2V0WV0gYXMgUG9pbnQ7XG59O1xuIl19
232
+ /**
233
+ * 1. Rotate 90°
234
+ * 2. Scale based on the rotated points
235
+ * 3. Reverse rotate the scaled points by 90°
236
+ */
237
+ export const getResizePointsByOtherwiseAxis = (board, points, resizeOriginPoint, xZoom, yZoom) => {
238
+ const currentRectangle = RectangleClient.getRectangleByPoints(points);
239
+ debugGenerator.isDebug() && debugGenerator.drawRectangle(board, currentRectangle, { stroke: 'black' });
240
+ let resultPoints = points;
241
+ resultPoints = rotatePoints(resultPoints, RectangleClient.getCenterPoint(currentRectangle), (1 / 2) * Math.PI);
242
+ debugGenerator.isDebug() && debugGenerator.drawRectangle(board, resultPoints, { stroke: 'blue' });
243
+ resultPoints = resultPoints.map(p => {
244
+ return movePointByZoomAndOriginPoint(p, resizeOriginPoint, xZoom, yZoom);
245
+ });
246
+ debugGenerator.isDebug() && debugGenerator.drawRectangle(board, resultPoints);
247
+ const newRectangle = RectangleClient.getRectangleByPoints(resultPoints);
248
+ return rotatePoints(resultPoints, RectangleClient.getCenterPoint(newRectangle), -(1 / 2) * Math.PI);
249
+ };
250
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aC1kcmF3LXJlc2l6ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2RyYXcvc3JjL3BsdWdpbnMvd2l0aC1kcmF3LXJlc2l6ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBSUgsVUFBVSxFQUNWLGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIsMkJBQTJCLEVBQzNCLHVCQUF1QixFQUN2QixjQUFjLEVBQ2QsVUFBVSxFQUNWLHNCQUFzQixFQUN6QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ0gsVUFBVSxFQUNWLEtBQUssRUFDTCxlQUFlLEVBQ2YsVUFBVSxFQUNWLE9BQU8sRUFDUCxzQkFBc0IsRUFDdEIsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixpQkFBaUIsRUFDakIsWUFBWSxFQUNaLGlCQUFpQixFQUNqQixvQkFBb0IsRUFDcEIsYUFBYSxFQUNiLG9CQUFvQixFQUNwQixhQUFhLEVBQ2IsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN6QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUV2RixNQUFNLFFBQVEsR0FBRyxpQ0FBaUMsQ0FBQztBQUNuRCxNQUFNLGNBQWMsR0FBRyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQVN0RCxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQWlCO0lBQzVDLE1BQU0sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsR0FBRyxLQUFLLENBQUM7SUFDbkQsSUFBSSxLQUF5QixDQUFDO0lBQzlCLElBQUksT0FBMkIsQ0FB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LE9BQU8sNkJBQTZCLENBQUMsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM3RSxDQUFDLENBQUMsQ0FBQztJQUNILGNBQWMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxjQUFjLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM5RSxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDeEUsT0FBTyxZQUFZLENBQUMsWUFBWSxFQUFFLGVBQWUsQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBSZXNpemVSZWYsXG4gICAgUmVzaXplU3RhdGUsXG4gICAgV2l0aFJlc2l6ZU9wdGlvbnMsXG4gICAgZHJhd0hhbmRsZSxcbiAgICBnZXRGaXJzdFRleHRNYW5hZ2UsXG4gICAgZ2V0SW5kZXhCeVJlc2l6ZUhhbmRsZSxcbiAgICBnZXRSZXNpemVIYW5kbGVQb2ludEJ5SW5kZXgsXG4gICAgZ2V0U3ltbWV0cmljSGFuZGxlSW5kZXgsXG4gICAgaXNDb3JuZXJIYW5kbGUsXG4gICAgd2l0aFJlc2l6ZSxcbiAgICByZXNldFBvaW50c0FmdGVyUmVzaXplXG59IGZyb20gJ0BwbGFpdC9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBQbGFpdEJvYXJkLFxuICAgIFBvaW50LFxuICAgIFJlY3RhbmdsZUNsaWVudCxcbiAgICBUcmFuc2Zvcm1zLFxuICAgIGNyZWF0ZUcsXG4gICAgZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyxcbiAgICBnZXRTZWxlY3RlZEVsZW1lbnRzLFxuICAgIGlzU2VsZWN0aW9uTW92aW5nLFxuICAgIGdldFNlbGVjdGlvbkFuZ2xlLFxuICAgIHJvdGF0ZVBvaW50cyxcbiAgICByb3RhdGVkRGF0YVBvaW50cyxcbiAgICBjcmVhdGVEZWJ1Z0dlbmVyYXRvcixcbiAgICBoYXNWYWxpZEFuZ2xlLFxuICAgIGlzQXhpc0NoYW5nZWRCeUFuZ2xlLFxuICAgIGRyYXdSZWN0YW5nbGUsXG4gICAgQUNUSVZFX1NUUk9LRV9XSURUSCxcbiAgICBTRUxFQ1RJT05fQk9SREVSX0NPTE9SXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IFBsYWl0RHJhd0VsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IERyYXdUcmFuc2Zvcm1zIH0gZnJvbSAnLi4vdHJhbnNmb3Jtcyc7XG5pbXBvcnQgeyBnZXRIaXRSZWN0YW5nbGVSZXNpemVIYW5kbGVSZWYgfSBmcm9tICcuLi91dGlscy9wb3NpdGlvbi9nZW9tZXRyeSc7XG5pbXBvcnQgeyBnZXRTbmFwUmVzaXppbmdSZWZPcHRpb25zLCBnZXRTbmFwUmVzaXppbmdSZWYgfSBmcm9tICcuLi91dGlscy9zbmFwLXJlc2l6aW5nJztcblxuY29uc3QgZGVidWdLZXkgPSAnZGVidWc6cGxhaXQ6cmVzaXplLWZvci1yb3RhdGlvbic7XG5jb25zdCBkZWJ1Z0dlbmVyYXRvciA9IGNyZWF0ZURlYnVnR2VuZXJhdG9yKGRlYnVnS2V5KTtcblxuZXhwb3J0IGludGVyZmFjZSBCdWxrUm90YXRpb25SZWYge1xuICAgIGFuZ2xlOiBudW1iZXI7XG4gICAgb2Zmc2V0WDogbnVtYmVyO1xuICAgIG9mZnNldFk6IG51bWJlcjtcbiAgICBuZXdDZW50ZXJQb2ludDogUG9pbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoRHJhd1Jlc2l6ZShib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IHsgYWZ0ZXJDaGFuZ2UsIGRyYXdBY3RpdmVSZWN0YW5nbGUgfSA9IGJvYXJkO1xuICAgIGxldCBzbmFwRzogU1ZHR0VsZW1lbnQgfCBudWxsO1xuICAgIGxldCBoYW5kbGVHOiBTVkdHRWxlbWVudCB8IG51bGw7XG4gICAgbGV0IG5lZWRDdXN0b21BY3RpdmVSZWN0YW5nbGUgPSBmYWxzZTtcbiAgICBsZXQgcmVzaXplQWN0aXZlUG9pbnRzOiBQb2ludFtdIHwgbnVsbCA9IG51bGw7XG5cbiAgICBjb25zdCBjYW5SZXNpemUgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgICAgIHJldHVybiBlbGVtZW50cy5sZW5ndGggPiAxICYmIGVsZW1lbnRzLmV2ZXJ5KGVsID0+IFBsYWl0RHJhd0VsZW1lbnQuaXNEcmF3RWxlbWVudChlbCkpO1xuICAgIH07XG5cbiAgICBjb25zdCBvcHRpb25zOiBXaXRoUmVzaXplT3B0aW9uczxQbGFpdERyYXdFbGVtZW50W10+ID0ge1xuICAgICAgICBrZXk6ICdkcmF3LWVsZW1lbnRzJyxcbiAgICAgICAgY2FuUmVzaXplLFxuICAgICAgICBoaXRUZXN0OiAocG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpIGFzIFBsYWl0RHJhd0VsZW1lbnRbXTtcbiAgICAgICAgICAgIGNvbnN0IGJvdW5kaW5nUmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgZWxlbWVudHMsIGZhbHNlKTtcbiAgICAgICAgICAgIGNvbnN0IGFuZ2xlID0gZ2V0U2VsZWN0aW9uQW5nbGUoZWxlbWVudHMpO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlUmVmID0gZ2V0SGl0UmVjdGFuZ2xlUmVzaXplSGFuZGxlUmVmKGJvYXJkLCBib3VuZGluZ1JlY3RhbmdsZSwgcG9pbnQsIGFuZ2xlKTtcbiAgICAgICAgICAgIGlmIChoYW5kbGVSZWYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBlbGVtZW50cyxcbiAgICAgICAgICAgICAgICAgICAgcmVjdGFuZ2xlOiBib3VuZGluZ1JlY3RhbmdsZSxcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlOiBoYW5kbGVSZWYuaGFuZGxlLFxuICAgICAgICAgICAgICAgICAgICBjdXJzb3JDbGFzczogaGFuZGxlUmVmLmN1cnNvckNsYXNzXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBvblJlc2l6ZTogKHJlc2l6ZVJlZjogUmVzaXplUmVmPFBsYWl0RHJhd0VsZW1lbnRbXT4sIHJlc2l6ZVN0YXRlOiBSZXNpemVTdGF0ZSkgPT4ge1xuICAgICAgICAgICAgc25hcEc/LnJlbW92ZSgpO1xuICAgICAgICAgICAgZGVidWdHZW5lcmF0b3IuaXNEZWJ1ZygpICYmIGRlYnVnR2VuZXJhdG9yLmNsZWFyKCk7XG4gICAgICAgICAgICBjb25zdCBpc0Zyb21Db3JuZXIgPSBpc0Nvcm5lckhhbmRsZShib2FyZCwgcmVzaXplUmVmLmhhbmRsZSk7XG4gICAgICAgICAgICBjb25zdCBpc0FzcGVjdFJhdGlvID0gcmVzaXplU3RhdGUuaXNTaGlmdCB8fCBpc0Zyb21Db3JuZXI7XG4gICAgICAgICAgICBjb25zdCBjZW50ZXJQb2ludCA9IFJlY3RhbmdsZUNsaWVudC5nZXRDZW50ZXJQb2ludChyZXNpemVSZWYucmVjdGFuZ2xlISk7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVJbmRleCA9IGdldEluZGV4QnlSZXNpemVIYW5kbGUocmVzaXplUmVmLmhhbmRsZSk7XG4gICAgICAgICAgICBjb25zdCB7IG9yaWdpblBvaW50LCBoYW5kbGVQb2ludCB9ID0gZ2V0UmVzaXplT3JpZ2luUG9pbnRBbmRIYW5kbGVQb2ludChib2FyZCwgaGFuZGxlSW5kZXgsIHJlc2l6ZVJlZi5yZWN0YW5nbGUhKTtcbiAgICAgICAgICAgIGNvbnN0IGFuZ2xlID0gZ2V0U2VsZWN0aW9uQW5nbGUocmVzaXplUmVmLmVsZW1lbnQpO1xuICAgICAgICAgICAgbGV0IGJ1bGtSb3RhdGlvblJlZjogQnVsa1JvdGF0aW9uUmVmIHwgdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKGFuZ2xlKSB7XG4gICAgICAgICAgICAgICAgYnVsa1JvdGF0aW9uUmVmID0ge1xuICAgICAgICAgICAgICAgICAgICBhbmdsZTogYW5nbGUsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFg6IDAsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFk6IDAsXG4gICAgICAgICAgICAgICAgICAgIG5ld0NlbnRlclBvaW50OiBbMCwgMF1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGNvbnN0IFtyb3RhdGVkU3RhcnRQb2ludCwgcm90YXRlRW5kUG9pbnRdID0gcm90YXRlUG9pbnRzKFxuICAgICAgICAgICAgICAgICAgICBbcmVzaXplU3RhdGUuc3RhcnRQb2ludCwgcmVzaXplU3RhdGUuZW5kUG9pbnRdLFxuICAgICAgICAgICAgICAgICAgICBjZW50ZXJQb2ludCxcbiAgICAgICAgICAgICAgICAgICAgLWJ1bGtSb3RhdGlvblJlZi5hbmdsZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcmVzaXplU3RhdGUuc3RhcnRQb2ludCA9IHJvdGF0ZWRTdGFydFBvaW50O1xuICAgICAgICAgICAgICAgIHJlc2l6ZVN0YXRlLmVuZFBvaW50ID0gcm90YXRlRW5kUG9pbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXNpemVTbmFwUmVmT3B0aW9ucyA9IGdldFNuYXBSZXNpemluZ1JlZk9wdGlvbnMoXG4gICAgICAgICAgICAgICAgYm9hcmQsXG4gICAgICAgICAgICAgICAgcmVzaXplUmVmLFxuICAgICAgICAgICAgICAgIHJlc2l6ZVN0YXRlLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luUG9pbnQsXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZVBvaW50XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBpc0FzcGVjdFJhdGlvLFxuICAgICAgICAgICAgICAgIGlzRnJvbUNvcm5lclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc2l6ZVNuYXBSZWYgPSBnZXRTbmFwUmVzaXppbmdSZWYoYm9hcmQsIHJlc2l6ZVJlZi5lbGVtZW50LCByZXNpemVTbmFwUmVmT3B0aW9ucyk7XG4gICAgICAgICAgICByZXNpemVBY3RpdmVQb2ludHMgPSByZXNpemVTbmFwUmVmLmFjdGl2ZVBvaW50cztcbiAgICAgICAgICAgIHNuYXBHID0gcmVzaXplU25hcFJlZi5zbmFwRztcbiAgICAgICAgICAgIFBsYWl0Qm9hcmQuZ2V0RWxlbWVudEFjdGl2ZUhvc3QoYm9hcmQpLmFwcGVuZChzbmFwRyk7XG5cbiAgICAgICAgICAgIGlmIChidWxrUm90YXRpb25SZWYpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBib3VuZGluZ0JveENvcm5lclBvaW50cyA9IFJlY3RhbmdsZUNsaWVudC5nZXRQb2ludHMocmVzaXplUmVmLnJlY3RhbmdsZSEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc2l6ZWRCb3VuZGluZ0JveENvcm5lclBvaW50cyA9IGJvdW5kaW5nQm94Q29ybmVyUG9pbnRzLm1hcChwID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vdmVQb2ludEJ5Wm9vbUFuZE9yaWdpblBvaW50KHAsIG9yaWdpblBvaW50LCByZXNpemVTbmFwUmVmLnhab29tLCByZXNpemVTbmFwUmVmLnlab29tKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdCb3VuZGluZ0JveCA9IFJlY3RhbmdsZUNsaWVudC5nZXRSZWN0YW5nbGVCeVBvaW50cyhyZXNpemVkQm91bmRpbmdCb3hDb3JuZXJQb2ludHMpO1xuXG4gICAgICAgICAgICAgICAgZGVidWdHZW5lcmF0b3IuaXNEZWJ1ZygpICYmIGRlYnVnR2VuZXJhdG9yLmRyYXdSZWN0YW5nbGUoYm9hcmQsIG5ld0JvdW5kaW5nQm94LCB7IHN0cm9rZTogJ2JsdWUnIH0pO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Qm91bmRpbmdCb3hDZW50ZXIgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQobmV3Qm91bmRpbmdCb3gpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFkanVzdGVkTmV3Qm91bmRpbmdCb3hQb2ludHMgPSByZXNldFBvaW50c0FmdGVyUmVzaXplKFxuICAgICAgICAgICAgICAgICAgICBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoYm91bmRpbmdCb3hDb3JuZXJQb2ludHMpLFxuICAgICAgICAgICAgICAgICAgICBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMocmVzaXplZEJvdW5kaW5nQm94Q29ybmVyUG9pbnRzKSxcbiAgICAgICAgICAgICAgICAgICAgY2VudGVyUG9pbnQsXG4gICAgICAgICAgICAgICAgICAgIG5ld0JvdW5kaW5nQm94Q2VudGVyLFxuICAgICAgICAgICAgICAgICAgICBidWxrUm90YXRpb25SZWYuYW5nbGVcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NlbnRlciA9IFJlY3RhbmdsZUNsaWVudC5nZXRDZW50ZXJQb2ludChSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMoYWRqdXN0ZWROZXdCb3VuZGluZ0JveFBvaW50cykpO1xuICAgICAgICAgICAgICAgIGJ1bGtSb3RhdGlvblJlZiA9IE9iamVjdC5hc3NpZ24oYnVsa1JvdGF0aW9uUmVmLCB7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldFg6IG5ld0NlbnRlclswXSAtIG5ld0JvdW5kaW5nQm94Q2VudGVyWzBdLFxuICAgICAgICAgICAgICAgICAgICBvZmZzZXRZOiBuZXdDZW50ZXJbMV0gLSBuZXdCb3VuZGluZ0JveENlbnRlclsxXSxcbiAgICAgICAgICAgICAgICAgICAgbmV3Q2VudGVyUG9pbnQ6IG5ld0NlbnRlclxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgZGVidWdHZW5lcmF0b3IuaXNEZWJ1ZygpICYmIGRlYnVnR2VuZXJhdG9yLmRyYXdSZWN0YW5nbGUoYm9hcmQsIGFkanVzdGVkTmV3Qm91bmRpbmdCb3hQb2ludHMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXNpemVSZWYuZWxlbWVudC5mb3JFYWNoKHRhcmdldCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIHRhcmdldCk7XG4gICAgICAgICAgICAgICAgbGV0IHBvaW50cztcbiAgICAgICAgICAgICAgICBpZiAoYnVsa1JvdGF0aW9uUmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VkUG9pbnRzID0gcm90YXRlZERhdGFQb2ludHModGFyZ2V0LnBvaW50cywgY2VudGVyUG9pbnQsIC1idWxrUm90YXRpb25SZWYuYW5nbGUpO1xuICAgICAgICAgICAgICAgICAgICBwb2ludHMgPSByZXZlcnNlZFBvaW50cy5tYXAoKHA6IFBvaW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW92ZVBvaW50Qnlab29tQW5kT3JpZ2luUG9pbnQocCwgb3JpZ2luUG9pbnQsIHJlc2l6ZVNuYXBSZWYueFpvb20sIHJlc2l6ZVNuYXBSZWYueVpvb20pO1xuICAgICAgICAgICAgICAgICAgICB9KSBhcyBbUG9pbnQsIFBvaW50XTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRqdXN0VGFyZ2V0UG9pbnRzID0gcG9pbnRzLm1hcChwID0+IFtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBbMF0gKyBidWxrUm90YXRpb25SZWYhLm9mZnNldFgsXG4gICAgICAgICAgICAgICAgICAgICAgICBwWzFdICsgYnVsa1JvdGF0aW9uUmVmIS5vZmZzZXRZXG4gICAgICAgICAgICAgICAgICAgIF0pIGFzIFBvaW50W107XG4gICAgICAgICAgICAgICAgICAgIHBvaW50cyA9IHJvdGF0ZWREYXRhUG9pbnRzKGFkanVzdFRhcmdldFBvaW50cywgYnVsa1JvdGF0aW9uUmVmLm5ld0NlbnRlclBvaW50LCBidWxrUm90YXRpb25SZWYuYW5nbGUpIGFzIFtQb2ludCwgUG9pbnRdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNWYWxpZEFuZ2xlKHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRDdXN0b21BY3RpdmVSZWN0YW5nbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNWYWxpZEFuZ2xlKHRhcmdldCkgJiYgaXNBeGlzQ2hhbmdlZEJ5QW5nbGUodGFyZ2V0LmFuZ2xlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzID0gZ2V0UmVzaXplUG9pbnRzQnlPdGhlcndpc2VBeGlzKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvYXJkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC5wb2ludHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luUG9pbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzaXplU25hcFJlZi54Wm9vbSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNpemVTbmFwUmVmLnlab29tXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRzID0gdGFyZ2V0LnBvaW50cy5tYXAocCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vdmVQb2ludEJ5Wm9vbUFuZE9yaWdpblBvaW50KHAsIG9yaWdpblBvaW50LCByZXNpemVTbmFwUmVmLnhab29tLCByZXNpemVTbmFwUmVmLnlab29tKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKFBsYWl0RHJhd0VsZW1lbnQuaXNHZW9tZXRyeSh0YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgaGVpZ2h0OiB0ZXh0SGVpZ2h0IH0gPSBnZXRGaXJzdFRleHRNYW5hZ2UodGFyZ2V0KS5nZXRTaXplKCk7XG4gICAgICAgICAgICAgICAgICAgIERyYXdUcmFuc2Zvcm1zLnJlc2l6ZUdlb21ldHJ5KGJvYXJkLCBwb2ludHMgYXMgW1BvaW50LCBQb2ludF0sIHRleHRIZWlnaHQsIHBhdGgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0xpbmUodGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGUoYm9hcmQsIHsgcG9pbnRzIH0sIHBhdGgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoUGxhaXREcmF3RWxlbWVudC5pc0ltYWdlKHRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQXNwZWN0UmF0aW8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShib2FyZCwgeyBwb2ludHMgfSwgcGF0aCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgaW1hZ2UgZWxlbWVudCBkb2VzIG5vdCBmb2xsb3cgdGhlIHJlc2l6ZSwgYnV0IG1vdmVzIGJhc2VkIG9uIHRoZSBjZW50ZXIgcG9pbnQuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YXJnZXRSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHModGFyZ2V0LnBvaW50cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjZW50ZXJQb2ludCA9IFJlY3RhbmdsZUNsaWVudC5nZXRDZW50ZXJQb2ludCh0YXJnZXRSZWN0YW5nbGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Q2VudGVyUG9pbnQgPSBtb3ZlUG9pbnRCeVpvb21BbmRPcmlnaW5Qb2ludChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZW50ZXJQb2ludCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5Qb2ludCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNpemVTbmFwUmVmLnhab29tLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2l6ZVNuYXBSZWYueVpvb21cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdUYXJnZXRSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlDZW50ZXJQb2ludChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdDZW50ZXJQb2ludCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRSZWN0YW5nbGUud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0UmVjdGFuZ2xlLmhlaWdodFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShib2FyZCwgeyBwb2ludHM6IFJlY3RhbmdsZUNsaWVudC5nZXRQb2ludHMobmV3VGFyZ2V0UmVjdGFuZ2xlKSB9LCBwYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBhZnRlclJlc2l6ZTogKHJlc2l6ZVJlZjogUmVzaXplUmVmPFBsYWl0RHJhd0VsZW1lbnRbXT4pID0+IHtcbiAgICAgICAgICAgIHNuYXBHPy5yZW1vdmUoKTtcbiAgICAgICAgICAgIHNuYXBHID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChuZWVkQ3VzdG9tQWN0aXZlUmVjdGFuZ2xlKSB7XG4gICAgICAgICAgICAgICAgbmVlZEN1c3RvbUFjdGl2ZVJlY3RhbmdsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJlc2l6ZUFjdGl2ZVBvaW50cyA9IG51bGw7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgICAgICAgICAgICAgIFRyYW5zZm9ybXMuYWRkU2VsZWN0aW9uV2l0aFRlbXBvcmFyeUVsZW1lbnRzKGJvYXJkLCBzZWxlY3RlZEVsZW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG5cbiAgICB3aXRoUmVzaXplPFBsYWl0RHJhd0VsZW1lbnRbXT4oYm9hcmQsIG9wdGlvbnMpO1xuXG4gICAgYm9hcmQuYWZ0ZXJDaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgIGFmdGVyQ2hhbmdlKCk7XG4gICAgICAgIGlmIChoYW5kbGVHKSB7XG4gICAgICAgICAgICBoYW5kbGVHLnJlbW92ZSgpO1xuICAgICAgICAgICAgaGFuZGxlRyA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhblJlc2l6ZSgpICYmICFpc1NlbGVjdGlvbk1vdmluZyhib2FyZCkpIHtcbiAgICAgICAgICAgIGhhbmRsZUcgPSBjcmVhdGVHKCk7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpIGFzIFBsYWl0RHJhd0VsZW1lbnRbXTtcbiAgICAgICAgICAgIGNvbnN0IGJvdW5kaW5nUmVjdGFuZ2xlID0gbmVlZEN1c3RvbUFjdGl2ZVJlY3RhbmdsZVxuICAgICAgICAgICAgICAgID8gUmVjdGFuZ2xlQ2xpZW50LmdldFJlY3RhbmdsZUJ5UG9pbnRzKHJlc2l6ZUFjdGl2ZVBvaW50cyEpXG4gICAgICAgICAgICAgICAgOiBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBlbGVtZW50cywgZmFsc2UpO1xuICAgICAgICAgICAgbGV0IGNvcm5lcnMgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q29ybmVyUG9pbnRzKGJvdW5kaW5nUmVjdGFuZ2xlKTtcbiAgICAgICAgICAgIGNvbnN0IGFuZ2xlID0gZ2V0U2VsZWN0aW9uQW5nbGUoZWxlbWVudHMpO1xuICAgICAgICAgICAgaWYgKGFuZ2xlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2VudGVyUG9pbnQgPSBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQoYm91bmRpbmdSZWN0YW5nbGUpO1xuICAgICAgICAgICAgICAgIGNvcm5lcnMgPSByb3RhdGVQb2ludHMoY29ybmVycywgY2VudGVyUG9pbnQsIGFuZ2xlKSBhcyBbUG9pbnQsIFBvaW50LCBQb2ludCwgUG9pbnRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29ybmVycy5mb3JFYWNoKGNvcm5lciA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZyA9IGRyYXdIYW5kbGUoYm9hcmQsIGNvcm5lcik7XG4gICAgICAgICAgICAgICAgaGFuZGxlRyAmJiBoYW5kbGVHLmFwcGVuZChnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgUGxhaXRCb2FyZC5nZXRFbGVtZW50QWN0aXZlSG9zdChib2FyZCkuYXBwZW5kKGhhbmRsZUcpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGJvYXJkLmRyYXdBY3RpdmVSZWN0YW5nbGUgPSAoKSA9PiB7XG4gICAgICAgIGlmIChuZWVkQ3VzdG9tQWN0aXZlUmVjdGFuZ2xlKSB7XG4gICAgICAgICAgICBjb25zdCByZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMocmVzaXplQWN0aXZlUG9pbnRzISk7XG4gICAgICAgICAgICByZXR1cm4gZHJhd1JlY3RhbmdsZShib2FyZCwgUmVjdGFuZ2xlQ2xpZW50LmluZmxhdGUocmVjdGFuZ2xlLCBBQ1RJVkVfU1RST0tFX1dJRFRIKSwge1xuICAgICAgICAgICAgICAgIHN0cm9rZTogU0VMRUNUSU9OX0JPUkRFUl9DT0xPUixcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogQUNUSVZFX1NUUk9LRV9XSURUSFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRyYXdBY3RpdmVSZWN0YW5nbGUoKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGJvYXJkO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0UmVzaXplT3JpZ2luUG9pbnRBbmRIYW5kbGVQb2ludCA9IChib2FyZDogUGxhaXRCb2FyZCwgaGFuZGxlSW5kZXg6IG51bWJlciwgcmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpID0+IHtcbiAgICBjb25zdCBzeW1tZXRyaWNIYW5kbGVJbmRleCA9IGdldFN5bW1ldHJpY0hhbmRsZUluZGV4KGJvYXJkLCBoYW5kbGVJbmRleCk7XG4gICAgY29uc3Qgb3JpZ2luUG9pbnQgPSBnZXRSZXNpemVIYW5kbGVQb2ludEJ5SW5kZXgocmVjdGFuZ2xlIGFzIFJlY3RhbmdsZUNsaWVudCwgc3ltbWV0cmljSGFuZGxlSW5kZXgpO1xuICAgIGNvbnN0IGhhbmRsZVBvaW50ID0gZ2V0UmVzaXplSGFuZGxlUG9pbnRCeUluZGV4KHJlY3RhbmdsZSBhcyBSZWN0YW5nbGVDbGllbnQsIGhhbmRsZUluZGV4KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBvcmlnaW5Qb2ludCxcbiAgICAgICAgaGFuZGxlUG9pbnRcbiAgICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFJlc2l6ZVpvb20gPSAoXG4gICAgcmVzaXplU3RhcnRBbmRFbmQ6IFtQb2ludCwgUG9pbnRdLFxuICAgIHJlc2l6ZU9yaWdpblBvaW50OiBQb2ludCxcbiAgICByZXNpemVIYW5kbGVQb2ludDogUG9pbnQsXG4gICAgaXNGcm9tQ29ybmVyOiBib29sZWFuLFxuICAgIGlzQXNwZWN0UmF0aW86IGJvb2xlYW5cbikgPT4ge1xuICAgIGNvbnN0IFtzdGFydFBvaW50LCBlbmRQb2ludF0gPSByZXNpemVTdGFydEFuZEVuZDtcbiAgICBsZXQgeFpvb20gPSAwO1xuICAgIGxldCB5Wm9vbSA9IDA7XG4gICAgaWYgKGlzRnJvbUNvcm5lcikge1xuICAgICAgICBpZiAoaXNBc3BlY3RSYXRpbykge1xuICAgICAgICAgICAgbGV0IG5vcm1hbGl6ZWRPZmZzZXRYID0gUG9pbnQuZ2V0T2Zmc2V0WChzdGFydFBvaW50LCBlbmRQb2ludCk7XG4gICAgICAgICAgICB4Wm9vbSA9IG5vcm1hbGl6ZWRPZmZzZXRYIC8gKHJlc2l6ZUhhbmRsZVBvaW50WzBdIC0gcmVzaXplT3JpZ2luUG9pbnRbMF0pO1xuICAgICAgICAgICAgeVpvb20gPSB4Wm9vbTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBub3JtYWxpemVkT2Zmc2V0WCA9IFBvaW50LmdldE9mZnNldFgoc3RhcnRQb2ludCwgZW5kUG9pbnQpO1xuICAgICAgICAgICAgbGV0IG5vcm1hbGl6ZWRPZmZzZXRZID0gUG9pbnQuZ2V0T2Zmc2V0WShzdGFydFBvaW50LCBlbmRQb2ludCk7XG4gICAgICAgICAgICB4Wm9vbSA9IG5vcm1hbGl6ZWRPZmZzZXRYIC8gKHJlc2l6ZUhhbmRsZVBvaW50WzBdIC0gcmVzaXplT3JpZ2luUG9pbnRbMF0pO1xuICAgICAgICAgICAgeVpvb20gPSBub3JtYWxpemVkT2Zmc2V0WSAvIChyZXNpemVIYW5kbGVQb2ludFsxXSAtIHJlc2l6ZU9yaWdpblBvaW50WzFdKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IFBvaW50LmlzSG9yaXpvbnRhbChyZXNpemVPcmlnaW5Qb2ludCwgcmVzaXplSGFuZGxlUG9pbnQsIDAuMSkgfHwgZmFsc2U7XG4gICAgICAgIGxldCBub3JtYWxpemVkT2Zmc2V0ID0gaXNIb3Jpem9udGFsID8gUG9pbnQuZ2V0T2Zmc2V0WChzdGFydFBvaW50LCBlbmRQb2ludCkgOiBQb2ludC5nZXRPZmZzZXRZKHN0YXJ0UG9pbnQsIGVuZFBvaW50KTtcbiAgICAgICAgbGV0IGJlbmNobWFya09mZnNldCA9IGlzSG9yaXpvbnRhbCA/IHJlc2l6ZUhhbmRsZVBvaW50WzBdIC0gcmVzaXplT3JpZ2luUG9pbnRbMF0gOiByZXNpemVIYW5kbGVQb2ludFsxXSAtIHJlc2l6ZU9yaWdpblBvaW50WzFdO1xuICAgICAgICBjb25zdCB6b29tID0gbm9ybWFsaXplZE9mZnNldCAvIGJlbmNobWFya09mZnNldDtcbiAgICAgICAgaWYgKGlzQXNwZWN0UmF0aW8pIHtcbiAgICAgICAgICAgIHhab29tID0gem9vbTtcbiAgICAgICAgICAgIHlab29tID0gem9vbTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgICAgICAgICAgICB4Wm9vbSA9IHpvb207XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHlab29tID0gem9vbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyB4Wm9vbSwgeVpvb20gfTtcbn07XG5cbmV4cG9ydCBjb25zdCBtb3ZlUG9pbnRCeVpvb21BbmRPcmlnaW5Qb2ludCA9IChwOiBQb2ludCwgcmVzaXplT3JpZ2luUG9pbnQ6IFBvaW50LCB4Wm9vbTogbnVtYmVyLCB5Wm9vbTogbnVtYmVyKSA9PiB7XG4gICAgY29uc3Qgb2Zmc2V0WCA9IChwWzBdIC0gcmVzaXplT3JpZ2luUG9pbnRbMF0pICogeFpvb207XG4gICAgY29uc3Qgb2Zmc2V0WSA9IChwWzFdIC0gcmVzaXplT3JpZ2luUG9pbnRbMV0pICogeVpvb207XG4gICAgcmV0dXJuIFtwWzBdICsgb2Zmc2V0WCwgcFsxXSArIG9mZnNldFldIGFzIFBvaW50O1xufTtcblxuLyoqXG4gKiAxLiBSb3RhdGUgOTDCsFxuICogMi4gU2NhbGUgYmFzZWQgb24gdGhlIHJvdGF0ZWQgcG9pbnRzXG4gKiAzLiBSZXZlcnNlIHJvdGF0ZSB0aGUgc2NhbGVkIHBvaW50cyBieSA5MMKwXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRSZXNpemVQb2ludHNCeU90aGVyd2lzZUF4aXMgPSAoXG4gICAgYm9hcmQ6IFBsYWl0Qm9hcmQsXG4gICAgcG9pbnRzOiBQb2ludFtdLFxuICAgIHJlc2l6ZU9yaWdpblBvaW50OiBQb2ludCxcbiAgICB4Wm9vbTogbnVtYmVyLFxuICAgIHlab29tOiBudW1iZXJcbikgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMocG9pbnRzKTtcbiAgICBkZWJ1Z0dlbmVyYXRvci5pc0RlYnVnKCkgJiYgZGVidWdHZW5lcmF0b3IuZHJhd1JlY3RhbmdsZShib2FyZCwgY3VycmVudFJlY3RhbmdsZSwgeyBzdHJva2U6ICdibGFjaycgfSk7XG4gICAgbGV0IHJlc3VsdFBvaW50cyA9IHBvaW50cztcbiAgICByZXN1bHRQb2ludHMgPSByb3RhdGVQb2ludHMocmVzdWx0UG9pbnRzLCBSZWN0YW5nbGVDbGllbnQuZ2V0Q2VudGVyUG9pbnQoY3VycmVudFJlY3RhbmdsZSksICgxIC8gMikgKiBNYXRoLlBJKTtcbiAgICBkZWJ1Z0dlbmVyYXRvci5pc0RlYnVnKCkgJiYgZGVidWdHZW5lcmF0b3IuZHJhd1JlY3RhbmdsZShib2FyZCwgcmVzdWx0UG9pbnRzLCB7IHN0cm9rZTogJ2JsdWUnIH0pO1xuICAgIHJlc3VsdFBvaW50cyA9IHJlc3VsdFBvaW50cy5tYXAocCA9PiB7XG4gICAgICAgIHJldHVybiBtb3ZlUG9pbnRCeVpvb21BbmRPcmlnaW5Qb2ludChwLCByZXNpemVPcmlnaW5Qb2ludCwgeFpvb20sIHlab29tKTtcbiAgICB9KTtcbiAgICBkZWJ1Z0dlbmVyYXRvci5pc0RlYnVnKCkgJiYgZGVidWdHZW5lcmF0b3IuZHJhd1JlY3RhbmdsZShib2FyZCwgcmVzdWx0UG9pbnRzKTtcbiAgICBjb25zdCBuZXdSZWN0YW5nbGUgPSBSZWN0YW5nbGVDbGllbnQuZ2V0UmVjdGFuZ2xlQnlQb2ludHMocmVzdWx0UG9pbnRzKTtcbiAgICByZXR1cm4gcm90YXRlUG9pbnRzKHJlc3VsdFBvaW50cywgUmVjdGFuZ2xlQ2xpZW50LmdldENlbnRlclBvaW50KG5ld1JlY3RhbmdsZSksIC0oMSAvIDIpICogTWF0aC5QSSk7XG59O1xuIl19