@plait/mind 0.2.0-next.7 → 0.2.0-next.9

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 (98) hide show
  1. package/constants/abstract-node.d.ts +4 -0
  2. package/constants/default.d.ts +1 -2
  3. package/constants/index.d.ts +4 -1
  4. package/constants/node-rule.d.ts +1 -0
  5. package/constants/node-style.d.ts +17 -0
  6. package/constants/node-topic-style.d.ts +4 -0
  7. package/draw/richtext.d.ts +4 -3
  8. package/esm2020/constants/abstract-node.mjs +5 -0
  9. package/esm2020/constants/default.mjs +2 -3
  10. package/esm2020/constants/index.mjs +5 -2
  11. package/esm2020/constants/node-rule.mjs +2 -0
  12. package/esm2020/constants/node-style.mjs +19 -0
  13. package/esm2020/constants/node-topic-style.mjs +5 -0
  14. package/esm2020/draw/abstract.mjs +4 -3
  15. package/esm2020/draw/indented-link.mjs +14 -14
  16. package/esm2020/draw/link/abstract-link.mjs +6 -4
  17. package/esm2020/draw/link/logic-link.mjs +7 -7
  18. package/esm2020/draw/link.mjs +6 -5
  19. package/esm2020/draw/richtext.mjs +7 -7
  20. package/esm2020/draw/shape.mjs +4 -4
  21. package/esm2020/drawer/quick-insert.drawer.mjs +11 -12
  22. package/esm2020/interfaces/abstract.mjs +1 -1
  23. package/esm2020/interfaces/element.mjs +6 -1
  24. package/esm2020/interfaces/node.mjs +1 -1
  25. package/esm2020/interfaces/options.mjs +2 -0
  26. package/esm2020/layout-option.mjs +5 -5
  27. package/esm2020/mind.component.mjs +2 -2
  28. package/esm2020/node.component.mjs +15 -13
  29. package/esm2020/plugins/emoji/emoji.drawer.mjs +3 -4
  30. package/esm2020/plugins/emoji/emoji.mjs +7 -3
  31. package/esm2020/plugins/emoji/index.mjs +1 -2
  32. package/esm2020/plugins/with-abstract.mjs +2 -2
  33. package/esm2020/plugins/with-dnd.mjs +12 -117
  34. package/esm2020/plugins/with-extend-mind.mjs +11 -0
  35. package/esm2020/plugins/with-mind.mjs +9 -7
  36. package/esm2020/public-api.mjs +2 -1
  37. package/esm2020/queries/get-available-sublayouts-by-element.mjs +4 -9
  38. package/esm2020/queries/get-branch-layouts.mjs +4 -4
  39. package/esm2020/queries/get-correct-layout-by-element.mjs +28 -31
  40. package/esm2020/queries/get-layout-by-element.mjs +10 -8
  41. package/esm2020/queries/index.mjs +1 -3
  42. package/esm2020/transforms/abstract-node.mjs +68 -0
  43. package/esm2020/transforms/index.mjs +6 -2
  44. package/esm2020/transforms/layout.mjs +3 -3
  45. package/esm2020/transforms/node.mjs +2 -2
  46. package/esm2020/utils/abstract/common.mjs +90 -70
  47. package/esm2020/utils/abstract/resize.mjs +3 -3
  48. package/esm2020/utils/clipboard.mjs +54 -14
  49. package/esm2020/utils/direction-corrector.mjs +11 -11
  50. package/esm2020/utils/dnd.mjs +118 -0
  51. package/esm2020/utils/draw-placeholder.mjs +5 -5
  52. package/esm2020/utils/drop-target-corrector.mjs +11 -10
  53. package/esm2020/utils/layout.mjs +1 -1
  54. package/esm2020/utils/mind.mjs +23 -58
  55. package/esm2020/utils/node-space.mjs +5 -5
  56. package/esm2020/utils/node-style/branch.mjs +33 -6
  57. package/esm2020/utils/node-style/node.mjs +6 -5
  58. package/esm2020/utils/path.mjs +4 -3
  59. package/esm2020/utils/shape.mjs +3 -3
  60. package/fesm2015/plait-mind.mjs +724 -602
  61. package/fesm2015/plait-mind.mjs.map +1 -1
  62. package/fesm2020/plait-mind.mjs +726 -600
  63. package/fesm2020/plait-mind.mjs.map +1 -1
  64. package/interfaces/abstract.d.ts +3 -0
  65. package/interfaces/element.d.ts +5 -2
  66. package/interfaces/options.d.ts +4 -0
  67. package/layout-option.d.ts +2 -1
  68. package/mind.component.d.ts +2 -2
  69. package/node.component.d.ts +5 -4
  70. package/package.json +1 -1
  71. package/plugins/emoji/emoji.d.ts +2 -1
  72. package/plugins/emoji/emoji.drawer.d.ts +3 -3
  73. package/plugins/emoji/index.d.ts +0 -1
  74. package/plugins/with-dnd.d.ts +0 -9
  75. package/plugins/with-extend-mind.d.ts +10 -0
  76. package/plugins/with-mind.d.ts +1 -1
  77. package/public-api.d.ts +1 -0
  78. package/queries/get-available-sublayouts-by-element.d.ts +2 -6
  79. package/queries/get-branch-layouts.d.ts +2 -1
  80. package/queries/get-correct-layout-by-element.d.ts +2 -1
  81. package/queries/index.d.ts +3 -4
  82. package/styles/styles.scss +0 -3
  83. package/transforms/abstract-node.d.ts +6 -0
  84. package/transforms/index.d.ts +3 -0
  85. package/utils/abstract/common.d.ts +6 -8
  86. package/utils/direction-corrector.d.ts +2 -1
  87. package/utils/dnd.d.ts +16 -0
  88. package/utils/drop-target-corrector.d.ts +2 -1
  89. package/utils/mind.d.ts +3 -3
  90. package/utils/node-space.d.ts +3 -2
  91. package/utils/node-style/branch.d.ts +3 -0
  92. package/utils/shape.d.ts +2 -3
  93. package/constants/node.d.ts +0 -17
  94. package/esm2020/constants/node.mjs +0 -19
  95. package/esm2020/plugins/emoji/with-mind-emoji.mjs +0 -8
  96. package/esm2020/queries/get-layout-parent-by-element.mjs +0 -17
  97. package/plugins/emoji/with-mind-emoji.d.ts +0 -8
  98. package/queries/get-layout-parent-by-element.d.ts +0 -8
@@ -1,7 +1,7 @@
1
1
  import { PlaitElement, RectangleClient, getRectangleByElements, getSelectedElements } from '@plait/core';
2
2
  import { AbstractHandlePosition, MindElement } from '../../interfaces';
3
3
  import { AbstractNode, isHorizontalLayout } from '@plait/layouts';
4
- import { ABSTRACT_HANDLE_MASK_WIDTH, ABSTRACT_INCLUDED_OUTLINE_OFFSET } from '../../constants';
4
+ import { ABSTRACT_HANDLE_MASK_WIDTH, ABSTRACT_INCLUDED_OUTLINE_OFFSET } from '../../constants/abstract-node';
5
5
  import { MindQueries } from '../../queries';
6
6
  import { getCorrectStartEnd } from '@plait/layouts';
7
7
  export const getRectangleByResizingLocation = (abstractRectangle, location, activeHandlePosition, isHorizontal) => {
@@ -104,7 +104,7 @@ export const getLocationScope = (board, handlePosition, parentChildren, element,
104
104
  }
105
105
  };
106
106
  export const getHitAbstractHandle = (board, element, point) => {
107
- const nodeLayout = MindQueries.getCorrectLayoutByElement(element);
107
+ const nodeLayout = MindQueries.getCorrectLayoutByElement(board, element);
108
108
  const isHorizontal = isHorizontalLayout(nodeLayout);
109
109
  const parentElement = MindElement.getParent(element);
110
110
  const includedElements = parentElement.children.slice(element.start, element.end + 1);
@@ -189,4 +189,4 @@ export function handleTouchedAbstract(board, touchedAbstract, endPoint) {
189
189
  }
190
190
  return touchedAbstract;
191
191
  }
192
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvdXRpbHMvYWJzdHJhY3QvcmVzaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxZQUFZLEVBQVMsZUFBZSxFQUFFLHNCQUFzQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVILE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUE4QixrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9GLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHcEQsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsQ0FDMUMsaUJBQWtDLEVBQ2xDLFFBQWdCLEVBQ2hCLG9CQUE0QyxFQUM1QyxZQUFxQixFQUN2QixFQUFFO0lBQ0EsSUFBSSxZQUFZLEVBQUU7UUFDZCxJQUFJLG9CQUFvQixLQUFLLHNCQUFzQixDQUFDLEtBQUssRUFBRTtZQUN2RCxPQUFPO2dCQUNILEdBQUcsaUJBQWlCO2dCQUNwQixDQUFDLEVBQUUsUUFBUTtnQkFDWCxNQUFNLEVBQUUsaUJBQWlCLENBQUMsTUFBTSxHQUFHLGlCQUFpQixDQUFDLENBQUMsR0FBRyxRQUFRO2FBQ3BFLENBQUM7U0FDTDthQUFNO1lBQ0gsT0FBTztnQkFDSCxHQUFHLGlCQUFpQjtnQkFDcEIsTUFBTSxFQUFFLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDO2FBQ3pDLENBQUM7U0FDTDtLQUNKO1NBQU07UUFDSCxJQUFJLG9CQUFvQixLQUFLLHNCQUFzQixDQUFDLEtB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QUFpQixFQUFFLGVBQXlDLEVBQUUsUUFBZTtJQUMvRyxJQUFJLGFBQWEsQ0FBQztJQUNsQixNQUFNLFFBQVEsR0FBRyxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7U0FDdEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztTQUNuRCxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDWixhQUFhLEdBQUcsb0JBQW9CLENBQUMsS0FBSyxFQUFFLE9BQXNCLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDOUUsT0FBTyxhQUFhLENBQUM7SUFDekIsQ0FBQyxDQUFDLENBQUM7SUFFUCxJQUFJLGVBQWUsS0FBSyxRQUFRLEVBQUU7UUFDOUIsT0FBTyxlQUFlLENBQUM7S0FDMUI7SUFFRCxJQUFJLGVBQWUsRUFBRTtRQUNqQixNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLGVBQWdCLENBQXNCLENBQUM7UUFDbkYsU0FBUyxDQUFDLDZCQUE2QixFQUFFLENBQUM7UUFDMUMsZUFBZSxHQUFHLFNBQVMsQ0FBQztLQUMvQjtJQUVELElBQUksUUFBUSxFQUFFO1FBQ1YsZUFBZSxHQUFHLFFBQVEsQ0FBQztRQUMzQixNQUFNLFNBQVMsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLGVBQWdCLENBQXNCLENBQUM7UUFDbkYsU0FBUyxDQUFDLDZCQUE2QixDQUFDLGFBQWEsQ0FBQyxDQUFDO0tBQzFEO0lBRUQsT0FBTyxlQUFlLENBQUM7QUFDM0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQsIFBsYWl0RWxlbWVudCwgUG9pbnQsIFJlY3RhbmdsZUNsaWVudCwgZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cywgZ2V0U2VsZWN0ZWRFbGVtZW50cyB9IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0SGFuZGxlUG9zaXRpb24sIE1pbmRFbGVtZW50IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBBYnN0cmFjdE5vZGUsIExheW91dE5vZGUsIE1pbmRMYXlvdXRUeXBlLCBpc0hvcml6b250YWxMYXlvdXQgfSBmcm9tICdAcGxhaXQvbGF5b3V0cyc7XG5pbXBvcnQgeyBBQlNUUkFDVF9IQU5ETEVfTUFTS19XSURUSCwgQUJTVFJBQ1RfSU5DTFVERURfT1VUTElORV9PRkZTRVQgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgTWluZFF1ZXJpZXMgfSBmcm9tICcuLi8uLi9xdWVyaWVzJztcbmltcG9ydCB7IGdldENvcnJlY3RTdGFydEVuZCB9IGZyb20gJ0BwbGFpdC9sYXlvdXRzJztcbmltcG9ydCB7IE1pbmROb2RlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbm9kZS5jb21wb25lbnQnO1xuXG5leHBvcnQgY29uc3QgZ2V0UmVjdGFuZ2xlQnlSZXNpemluZ0xvY2F0aW9uID0gKFxuICAgIGFic3RyYWN0UmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsXG4gICAgbG9jYXRpb246IG51bWJlcixcbiAgICBhY3RpdmVIYW5kbGVQb3NpdGlvbjogQWJzdHJhY3RIYW5kbGVQb3NpdGlvbixcbiAgICBpc0hvcml6b250YWw6IGJvb2xlYW5cbikgPT4ge1xuICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgICAgaWYgKGFjdGl2ZUhhbmRsZVBvc2l0aW9uID09PSBBYnN0cmFjdEhhbmRsZVBvc2l0aW9uLnN0YXJ0KSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmFic3RyYWN0UmVjdGFuZ2xlLFxuICAgICAgICAgICAgICAgIHk6IGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodDogYWJzdHJhY3RSZWN0YW5nbGUuaGVpZ2h0ICsgYWJzdHJhY3RSZWN0YW5nbGUueSAtIGxvY2F0aW9uXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5hYnN0cmFjdFJlY3RhbmdsZSxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGxvY2F0aW9uIC0gYWJzdHJhY3RSZWN0YW5nbGUueVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChhY3RpdmVIYW5kbGVQb3NpdGlvbiA9PT0gQWJzdHJhY3RIYW5kbGVQb3NpdGlvbi5zdGFydCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5hYnN0cmFjdFJlY3RhbmdsZSxcbiAgICAgICAgICAgICAgICB4OiBsb2NhdGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aDogYWJzdHJhY3RSZWN0YW5nbGUud2lkdGggKyBhYnN0cmFjdFJlY3RhbmdsZS54IC0gbG9jYXRpb25cbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmFic3RyYWN0UmVjdGFuZ2xlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiBsb2NhdGlvbiAtIGFic3RyYWN0UmVjdGFuZ2xlLnhcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TG9jYXRpb25TY29wZSA9IChcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBoYW5kbGVQb3NpdGlvbjogQWJzdHJhY3RIYW5kbGVQb3NpdGlvbixcbiAgICBwYXJlbnRDaGlsZHJlbjogTWluZEVsZW1lbnRbXSxcbiAgICBlbGVtZW50OiBNaW5kRWxlbWVudCxcbiAgICBwYXJlbnQ6IExheW91dE5vZGUsXG4gICAgaXNIb3Jpem9udGFsOiBib29sZWFuXG4pID0+IHtcbiAgICBjb25zdCBub2RlID0gKE1pbmRFbGVtZW50LmdldE5vZGUoZWxlbWVudCkgYXMgdW5rbm93bikgYXMgTGF5b3V0Tm9kZTtcbiAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IGdldENvcnJlY3RTdGFydEVuZChub2RlLm9yaWdpbiBhcyBBYnN0cmFjdE5vZGUsIHBhcmVudCk7XG5cbiAgICBjb25zdCBzdGFydE5vZGUgPSBwYXJlbnRDaGlsZHJlbltzdGFydF07XG4gICAgY29uc3QgZW5kTm9kZSA9IHBhcmVudENoaWxkcmVuW2VuZF07XG5cbiAgICBpZiAoaGFuZGxlUG9zaXRpb24gPT09IEFic3RyYWN0SGFuZGxlUG9zaXRpb24uc3RhcnQpIHtcbiAgICAgICAgY29uc3QgYWJzdHJhY3ROb2RlID0gcGFyZW50Q2hpbGRyZW4uZmlsdGVyKGNoaWxkID0+IEFic3RyYWN0Tm9kZS5pc0Fic3RyYWN0KGNoaWxkKSAmJiBjaGlsZC5lbmQgPCBlbGVtZW50LnN0YXJ0ISk7XG4gICAgICAgIGxldCBtaW5Ob2RlO1xuXG4gICAgICAgIGlmIChhYnN0cmFjdE5vZGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGFic3RyYWN0Tm9kZVxuICAgICAgICAgICAgICAgIC5tYXAobm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZW5kIH0gPSBnZXRDb3JyZWN0U3RhcnRFbmQobm9kZSBhcyBBYnN0cmFjdE5vZGUsIHBhcmVudCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmQ7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYiAtIGEpWzBdO1xuICAgICAgICAgICAgbWluTm9kZSA9IHBhcmVudENoaWxkcmVuW2luZGV4ICsgMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtaW5Ob2RlID0gcGFyZW50Q2hpbGRyZW5bMF07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtaW5Ob2RlUmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgW21pbk5vZGVdLCB0cnVlKTtcbiAgICAgICAgY29uc3QgZW5kTm9kZVJlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIFtlbmROb2RlXSwgZmFsc2UpO1xuXG4gICAgICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbWF4OiBlbmROb2RlUmVjdGFuZ2xlLnkgLSBBQlNUUkFDVF9JTkNMVURFRF9PVVRMSU5FX09GRlNFVCxcbiAgICAgICAgICAgICAgICBtaW46IG1pbk5vZGVSZWN0YW5nbGUueSAtIEFCU1RSQUNUX0lOQ0xVREVEX09VVExJTkVfT0ZGU0VUXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBtYXg6IGVuZE5vZGVSZWN0YW5nbGUueCAtIEFCU1RSQUNUX0lOQ0xVREVEX09VVExJTkVfT0ZGU0VULFxuICAgICAgICAgICAgICAgIG1pbjogbWluTm9kZVJlY3RhbmdsZS54IC0gQUJTVFJBQ1RfSU5DTFVERURfT1VUTElORV9PRkZTRVRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBhYnN0cmFjdE5vZGUgPSBwYXJlbnRDaGlsZHJlbi5maWx0ZXIoY2hpbGQgPT4gQWJzdHJhY3ROb2RlLmlzQWJzdHJhY3QoY2hpbGQpICYmIGNoaWxkLnN0YXJ0ID4gZWxlbWVudC5lbmQhKTtcbiAgICAgICAgbGV0IG1heE5vZGU7XG5cbiAgICAgICAgaWYgKGFic3RyYWN0Tm9kZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gYWJzdHJhY3ROb2RlXG4gICAgICAgICAgICAgICAgLm1hcChub2RlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydCB9ID0gZ2V0Q29ycmVjdFN0YXJ0RW5kKG5vZGUgYXMgQWJzdHJhY3ROb2RlLCBwYXJlbnQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnQ7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYSAtIGIpWzBdO1xuICAgICAgICAgICAgbWF4Tm9kZSA9IHBhcmVudENoaWxkcmVuW2luZGV4IC0gMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudENoaWxkcmVuLmZpbHRlcihjaGlsZCA9PiAhQWJzdHJhY3ROb2RlLmlzQWJzdHJhY3QoY2hpbGQpKTtcbiAgICAgICAgICAgIG1heE5vZGUgPSBwYXJlbnRDaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1heE5vZGVSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBbbWF4Tm9kZV0sIHRydWUpO1xuICAgICAgICBjb25zdCBzdGFydE5vZGVSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBbc3RhcnROb2RlXSwgZmFsc2UpO1xuXG4gICAgICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbWF4OiBtYXhOb2RlUmVjdGFuZ2xlLnkgKyBtYXhOb2RlUmVjdGFuZ2xlLmhlaWdodCArIEFCU1RSQUNUX0lOQ0xVREVEX09VVExJTkVfT0ZGU0VULFxuICAgICAgICAgICAgICAgIG1pbjogc3RhcnROb2RlUmVjdGFuZ2xlLnkgKyBzdGFydE5vZGVSZWN0YW5nbGUuaGVpZ2h0ICsgQUJTVFJBQ1RfSU5DTFVERURfT1VUTElORV9PRkZTRVRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG1heDogbWF4Tm9kZVJlY3RhbmdsZS54ICsgbWF4Tm9kZVJlY3RhbmdsZS53aWR0aCArIEFCU1RSQUNUX0lOQ0xVREVEX09VVExJTkVfT0ZGU0VULFxuICAgICAgICAgICAgICAgIG1pbjogc3RhcnROb2RlUmVjdGFuZ2xlLnggKyBzdGFydE5vZGVSZWN0YW5nbGUud2lkdGggKyBBQlNUUkFDVF9JTkNMVURFRF9PVVRMSU5FX09GRlNFVFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRIaXRBYnN0cmFjdEhhbmRsZSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogTWluZEVsZW1lbnQsIHBvaW50OiBQb2ludCkgPT4ge1xuICAgIGNvbnN0IG5vZGVMYXlvdXQgPSBNaW5kUXVlcmllcy5nZXRDb3JyZWN0TGF5b3V0QnlFbGVtZW50KGVsZW1lbnQpIGFzIE1pbmRMYXlvdXRUeXBlO1xuICAgIGNvbnN0IGlzSG9yaXpvbnRhbCA9IGlzSG9yaXpvbnRhbExheW91dChub2RlTGF5b3V0KTtcblxuICAgIGNvbnN0IHBhcmVudEVsZW1lbnQgPSBNaW5kRWxlbWVudC5nZXRQYXJlbnQoZWxlbWVudCk7XG4gICAgY29uc3QgaW5jbHVkZWRFbGVtZW50cyA9IHBhcmVudEVsZW1lbnQuY2hpbGRyZW4uc2xpY2UoZWxlbWVudC5zdGFydCEsIGVsZW1lbnQuZW5kISArIDEpO1xuICAgIGxldCBhYnN0cmFjdFJlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGluY2x1ZGVkRWxlbWVudHMsIHRydWUpO1xuICAgIGFic3RyYWN0UmVjdGFuZ2xlID0gUmVjdGFuZ2xlQ2xpZW50LmdldE91dGxpbmVSZWN0YW5nbGUoYWJzdHJhY3RSZWN0YW5nbGUsIC1BQlNUUkFDVF9JTkNMVURFRF9PVVRMSU5FX09GRlNFVCk7XG5cbiAgICBjb25zdCBzdGFydEhhbmRsZVJlYyA9IGdldEFic3RyYWN0SGFuZGxlUmVjdGFuZ2xlKGFic3RyYWN0UmVjdGFuZ2xlLCBpc0hvcml6b250YWwsIEFic3RyYWN0SGFuZGxlUG9zaXRpb24uc3RhcnQpO1xuICAgIGNvbnN0IGVuZEhhbmRsZVJlYyA9IGdldEFic3RyYWN0SGFuZGxlUmVjdGFuZ2xlKGFic3RyYWN0UmVjdGFuZ2xlLCBpc0hvcml6b250YWwsIEFic3RyYWN0SGFuZGxlUG9zaXRpb24uZW5kKTtcblxuICAgIGNvbnN0IHBvaW50UmVjID0gUmVjdGFuZ2xlQ2xpZW50LnRvUmVjdGFuZ2xlQ2xpZW50KFtwb2ludCwgcG9pbnRdKTtcbiAgICBpZiAoUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KHBvaW50UmVjLCBzdGFydEhhbmRsZVJlYykpIHJldHVybiBBYnN0cmFjdEhhbmRsZVBvc2l0aW9uLnN0YXJ0O1xuICAgIGlmIChSZWN0YW5nbGVDbGllbnQuaXNIaXQocG9pbnRSZWMsIGVuZEhhbmRsZVJlYykpIHJldHVybiBBYnN0cmFjdEhhbmRsZVBvc2l0aW9uLmVuZDtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFic3RyYWN0SGFuZGxlUmVjdGFuZ2xlID0gKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBpc0hvcml6b250YWw6IGJvb2xlYW4sIHBvc2l0aW9uOiBBYnN0cmFjdEhhbmRsZVBvc2l0aW9uKSA9PiB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAocG9zaXRpb24gPT09IEFic3RyYWN0SGFuZGxlUG9zaXRpb24uc3RhcnQpIHtcbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSBpc0hvcml6b250YWwgPyByZWN0YW5nbGUueSA6IHJlY3RhbmdsZS54O1xuXG4gICAgICAgIHJlc3VsdCA9IGdldFJlY3RhbmdsZUJ5UmVzaXppbmdMb2NhdGlvbihcbiAgICAgICAgICAgIHJlY3RhbmdsZSxcbiAgICAgICAgICAgIGxvY2F0aW9uICsgQUJTVFJBQ1RfSEFORExFX01BU0tfV0lEVEggLyAyLFxuICAgICAgICAgICAgQWJzdHJhY3RIYW5kbGVQb3NpdGlvbi5lbmQsXG4gICAgICAgICAgICBpc0hvcml6b250YWxcbiAgICAgICAgKTtcbiAgICAgICAgcmVzdWx0ID0gZ2V0UmVjdGFuZ2xlQnlSZXNpemluZ0xvY2F0aW9uKHJlc3VsdCwgbG9jYXRpb24gLSBBQlNUUkFDVF9IQU5ETEVfTUFTS19XSURUSCAvIDIsIHBvc2l0aW9uLCBpc0hvcml6b250YWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gaXNIb3Jpem9udGFsID8gcmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IDogcmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGg7XG5cbiAgICAgICAgcmVzdWx0ID0gZ2V0UmVjdGFuZ2xlQnlSZXNpemluZ0xvY2F0aW9uKFxuICAgICAgICAgICAgcmVjdGFuZ2xlLFxuICAgICAgICAgICAgbG9jYXRpb24gLSBBQlNUUkFDVF9IQU5ETEVfTUFTS19XSURUSCAvIDIsXG4gICAgICAgICAgICBBYnN0cmFjdEhhbmRsZVBvc2l0aW9uLnN0YXJ0LFxuICAgICAgICAgICAgaXNIb3Jpem9udGFsXG4gICAgICAgICk7XG4gICAgICAgIHJlc3VsdCA9IGdldFJlY3RhbmdsZUJ5UmVzaXppbmdMb2NhdGlvbihyZXN1bHQsIGxvY2F0aW9uICsgQUJTVFJBQ1RfSEFORExFX01BU0tfV0lEVEggLyAyLCBwb3NpdGlvbiwgaXNIb3Jpem9udGFsKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kTG9jYXRpb25MZWZ0SW5kZXgoYm9hcmQ6IFBsYWl0Qm9hcmQsIHBhcmVudENoaWxkcmVuOiBNaW5kRWxlbWVudFtdLCBsb2NhdGlvbjogbnVtYmVyLCBpc0hvcml6b250YWw6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudENoaWxkcmVuLmZpbHRlcihjaGlsZCA9PiB7XG4gICAgICAgIHJldHVybiAhQWJzdHJhY3ROb2RlLmlzQWJzdHJhY3QoY2hpbGQpO1xuICAgIH0pO1xuICAgIGNvbnN0IHJlY0FycmF5ID0gY2hpbGRyZW4ubWFwKGNoaWxkID0+IHtcbiAgICAgICAgcmV0dXJuIGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIFtjaGlsZF0sIGZhbHNlKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGZpcnN0UmVjID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgW2NoaWxkcmVuWzBdXSwgdHJ1ZSk7XG4gICAgY29uc3QgZmFrZUxlZnRSZWMgPSB7XG4gICAgICAgIHg6IGZpcnN0UmVjLnggLSBmaXJzdFJlYy53aWR0aCxcbiAgICAgICAgeTogZmlyc3RSZWMueSAtIGZpcnN0UmVjLmhlaWdodCxcbiAgICAgICAgd2lkdGg6IGZpcnN0UmVjLndpZHRoLFxuICAgICAgICBoZWlnaHQ6IGZpcnN0UmVjLmhlaWdodFxuICAgIH07XG4gICAgY29uc3QgbGFzdFJlYyA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIFtjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXV0sIHRydWUpO1xuICAgIGNvbnN0IGZha2VSaWdodFJlYyA9IHtcbiAgICAgICAgeDogbGFzdFJlYy54ICsgbGFzdFJlYy53aWR0aCxcbiAgICAgICAgeTogbGFzdFJlYy55ICsgbGFzdFJlYy5oZWlnaHQsXG4gICAgICAgIHdpZHRoOiBsYXN0UmVjLndpZHRoLFxuICAgICAgICBoZWlnaHQ6IGxhc3RSZWMuaGVpZ2h0XG4gICAgfTtcblxuICAgIHJlY0FycmF5LnB1c2goZmFrZVJpZ2h0UmVjKTtcbiAgICByZWNBcnJheS51bnNoaWZ0KGZha2VMZWZ0UmVjKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjQXJyYXkubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgIGNvbnN0IHJlY1hPclkgPSBpc0hvcml6b250YWwgPyByZWNBcnJheVtpXS55IDogcmVjQXJyYXlbaV0ueDtcbiAgICAgICAgY29uc3QgcmVjV2lkdGhPckhlaWdodCA9IGlzSG9yaXpvbnRhbCA/IHJlY0FycmF5W2ldLmhlaWdodCA6IHJlY0FycmF5W2ldLndpZHRoO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGxvY2F0aW9uID49IHJlY1hPclkgKyByZWNXaWR0aE9ySGVpZ2h0IC8gMiAmJlxuICAgICAgICAgICAgbG9jYXRpb24gPD0gcmVjQXJyYXlbaSArIDFdW2lzSG9yaXpvbnRhbCA/ICd5JyA6ICd4J10gKyByZWNBcnJheVtpICsgMV1baXNIb3Jpem9udGFsID8gJ2hlaWdodCcgOiAnd2lkdGgnXSAvIDJcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gaSAtIDE7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYW5kbGVUb3VjaGVkQWJzdHJhY3QoYm9hcmQ6IFBsYWl0Qm9hcmQsIHRvdWNoZWRBYnN0cmFjdDogUGxhaXRFbGVtZW50IHwgdW5kZWZpbmVkLCBlbmRQb2ludDogUG9pbnQpIHtcbiAgICBsZXQgdG91Y2hlZEhhbmRsZTtcbiAgICBjb25zdCBhYnN0cmFjdCA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpXG4gICAgICAgIC5maWx0ZXIoZWxlbWVudCA9PiBBYnN0cmFjdE5vZGUuaXNBYnN0cmFjdChlbGVtZW50KSlcbiAgICAgICAgLmZpbmQoZWxlbWVudCA9PiB7XG4gICAgICAgICAgICB0b3VjaGVkSGFuZGxlID0gZ2V0SGl0QWJzdHJhY3RIYW5kbGUoYm9hcmQsIGVsZW1lbnQgYXMgTWluZEVsZW1lbnQsIGVuZFBvaW50KTtcbiAgICAgICAgICAgIHJldHVybiB0b3VjaGVkSGFuZGxlO1xuICAgICAgICB9KTtcblxuICAgIGlmICh0b3VjaGVkQWJzdHJhY3QgPT09IGFic3RyYWN0KSB7XG4gICAgICAgIHJldHVybiB0b3VjaGVkQWJzdHJhY3Q7XG4gICAgfVxuXG4gICAgaWYgKHRvdWNoZWRBYnN0cmFjdCkge1xuICAgICAgICBjb25zdCBjb21wb25lbnQgPSBQbGFpdEVsZW1lbnQuZ2V0Q29tcG9uZW50KHRvdWNoZWRBYnN0cmFjdCEpIGFzIE1pbmROb2RlQ29tcG9uZW50O1xuICAgICAgICBjb21wb25lbnQudXBkYXRlQWJzdHJhY3RJbmNsdWRlZE91dGxpbmUoKTtcbiAgICAgICAgdG91Y2hlZEFic3RyYWN0ID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGlmIChhYnN0cmFjdCkge1xuICAgICAgICB0b3VjaGVkQWJzdHJhY3QgPSBhYnN0cmFjdDtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gUGxhaXRFbGVtZW50LmdldENvbXBvbmVudCh0b3VjaGVkQWJzdHJhY3QhKSBhcyBNaW5kTm9kZUNvbXBvbmVudDtcbiAgICAgICAgY29tcG9uZW50LnVwZGF0ZUFic3RyYWN0SW5jbHVkZWRPdXRsaW5lKHRvdWNoZWRIYW5kbGUpO1xuICAgIH1cblxuICAgIHJldHVybiB0b3VjaGVkQWJzdHJhY3Q7XG59XG4iXX0=
192
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvdXRpbHMvYWJzdHJhY3QvcmVzaXplLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBYyxZQUFZLEVBQVMsZUFBZSxFQUFFLHNCQUFzQixFQUFFLG1CQUFtQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVILE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUE4QixrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzlGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzdHLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHcEQsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsQ0FDMUMsaUJBQWtDLEVBQ2xDLFFBQWdCLEVBQ2hCLG9CQUE0QyxFQUM1QyxZQUFxQixFQUN2QixFQUFFO0lBQ0EsSUFBSSxZQUFZLEVBQUU7UUFDZCxJQUFJLG9CQUFvQixLQUFLLHNCQUFzQixDQUFDLEtBQUssRUFBRTtZQUN2RCxPQUFPO2dCQUNILEdBQUcsaUJBQWlCO2dCQUNwQixDQUFDLEVBQUUsUUFBUTtnQkFDWCxNQUFNLEVBQUUsaUJBQWlCLENBQUMsTUFBTSxHQUFHLGlCQUFpQixDQUFDLENBQUMsR0FBRyxRQUFRO2FBQ3BFLENBQUM7U0FDTDthQUFNO1lBQ0gsT0FBTztnQkFDSCxHQUFHLGlCQUFpQjtnQkFDcEIsTUFBTSxFQUFFLFFBQVEsR0FBRyxpQkFBaUIsQ0FBQyxDQUFDO2FBQ3pDLENBQUM7U0FDTDtLQUNKO1NBQU07UUFDSCxJQUFJLG9CQUFvQixLQUFLLHNCQUFzQixDQUFDLEtB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QXFCLENBQUMsS0FBaUIsRUFBRSxlQUF5QyxFQUFFLFFBQWU7SUFDL0csSUFBSSxhQUFhLENBQUM7SUFDbEIsTUFBTSxRQUFRLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDO1NBQ3RDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbkQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1osYUFBYSxHQUFHLG9CQUFvQixDQUFDLEtBQUssRUFBRSxPQUFzQixFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzlFLE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBRVAsSUFBSSxlQUFlLEtBQUssUUFBUSxFQUFFO1FBQzlCLE9BQU8sZUFBZSxDQUFDO0tBQzFCO0lBRUQsSUFBSSxlQUFlLEVBQUU7UUFDakIsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxlQUFnQixDQUFzQixDQUFDO1FBQ25GLFNBQVMsQ0FBQyw2QkFBNkIsRUFBRSxDQUFDO1FBQzFDLGVBQWUsR0FBRyxTQUFTLENBQUM7S0FDL0I7SUFFRCxJQUFJLFFBQVEsRUFBRTtRQUNWLGVBQWUsR0FBRyxRQUFRLENBQUM7UUFDM0IsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxlQUFnQixDQUFzQixDQUFDO1FBQ25GLFNBQVMsQ0FBQyw2QkFBNkIsQ0FBQyxhQUFhLENBQUMsQ0FBQztLQUMxRDtJQUVELE9BQU8sZUFBZSxDQUFDO0FBQzNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkLCBQbGFpdEVsZW1lbnQsIFBvaW50LCBSZWN0YW5nbGVDbGllbnQsIGdldFJlY3RhbmdsZUJ5RWxlbWVudHMsIGdldFNlbGVjdGVkRWxlbWVudHMgfSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdEhhbmRsZVBvc2l0aW9uLCBNaW5kRWxlbWVudCB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQWJzdHJhY3ROb2RlLCBMYXlvdXROb2RlLCBNaW5kTGF5b3V0VHlwZSwgaXNIb3Jpem9udGFsTGF5b3V0IH0gZnJvbSAnQHBsYWl0L2xheW91dHMnO1xuaW1wb3J0IHsgQUJTVFJBQ1RfSEFORExFX01BU0tfV0lEVEgsIEFCU1RSQUNUX0lOQ0xVREVEX09VVExJTkVfT0ZGU0VUIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2Fic3RyYWN0LW5vZGUnO1xuaW1wb3J0IHsgTWluZFF1ZXJpZXMgfSBmcm9tICcuLi8uLi9xdWVyaWVzJztcbmltcG9ydCB7IGdldENvcnJlY3RTdGFydEVuZCB9IGZyb20gJ0BwbGFpdC9sYXlvdXRzJztcbmltcG9ydCB7IE1pbmROb2RlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbm9kZS5jb21wb25lbnQnO1xuXG5leHBvcnQgY29uc3QgZ2V0UmVjdGFuZ2xlQnlSZXNpemluZ0xvY2F0aW9uID0gKFxuICAgIGFic3RyYWN0UmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsXG4gICAgbG9jYXRpb246IG51bWJlcixcbiAgICBhY3RpdmVIYW5kbGVQb3NpdGlvbjogQWJzdHJhY3RIYW5kbGVQb3NpdGlvbixcbiAgICBpc0hvcml6b250YWw6IGJvb2xlYW5cbikgPT4ge1xuICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgICAgaWYgKGFjdGl2ZUhhbmRsZVBvc2l0aW9uID09PSBBYnN0cmFjdEhhbmRsZVBvc2l0aW9uLnN0YXJ0KSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmFic3RyYWN0UmVjdGFuZ2xlLFxuICAgICAgICAgICAgICAgIHk6IGxvY2F0aW9uLFxuICAgICAgICAgICAgICAgIGhlaWdodDogYWJzdHJhY3RSZWN0YW5nbGUuaGVpZ2h0ICsgYWJzdHJhY3RSZWN0YW5nbGUueSAtIGxvY2F0aW9uXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5hYnN0cmFjdFJlY3RhbmdsZSxcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IGxvY2F0aW9uIC0gYWJzdHJhY3RSZWN0YW5nbGUueVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChhY3RpdmVIYW5kbGVQb3NpdGlvbiA9PT0gQWJzdHJhY3RIYW5kbGVQb3NpdGlvbi5zdGFydCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5hYnN0cmFjdFJlY3RhbmdsZSxcbiAgICAgICAgICAgICAgICB4OiBsb2NhdGlvbixcbiAgICAgICAgICAgICAgICB3aWR0aDogYWJzdHJhY3RSZWN0YW5nbGUud2lkdGggKyBhYnN0cmFjdFJlY3RhbmdsZS54IC0gbG9jYXRpb25cbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmFic3RyYWN0UmVjdGFuZ2xlLFxuICAgICAgICAgICAgICAgIHdpZHRoOiBsb2NhdGlvbiAtIGFic3RyYWN0UmVjdGFuZ2xlLnhcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TG9jYXRpb25TY29wZSA9IChcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBoYW5kbGVQb3NpdGlvbjogQWJzdHJhY3RIYW5kbGVQb3NpdGlvbixcbiAgICBwYXJlbnRDaGlsZHJlbjogTWluZEVsZW1lbnRbXSxcbiAgICBlbGVtZW50OiBNaW5kRWxlbWVudCxcbiAgICBwYXJlbnQ6IExheW91dE5vZGUsXG4gICAgaXNIb3Jpem9udGFsOiBib29sZWFuXG4pID0+IHtcbiAgICBjb25zdCBub2RlID0gKE1pbmRFbGVtZW50LmdldE5vZGUoZWxlbWVudCkgYXMgdW5rbm93bikgYXMgTGF5b3V0Tm9kZTtcbiAgICBjb25zdCB7IHN0YXJ0LCBlbmQgfSA9IGdldENvcnJlY3RTdGFydEVuZChub2RlLm9yaWdpbiBhcyBBYnN0cmFjdE5vZGUsIHBhcmVudCk7XG5cbiAgICBjb25zdCBzdGFydE5vZGUgPSBwYXJlbnRDaGlsZHJlbltzdGFydF07XG4gICAgY29uc3QgZW5kTm9kZSA9IHBhcmVudENoaWxkcmVuW2VuZF07XG5cbiAgICBpZiAoaGFuZGxlUG9zaXRpb24gPT09IEFic3RyYWN0SGFuZGxlUG9zaXRpb24uc3RhcnQpIHtcbiAgICAgICAgY29uc3QgYWJzdHJhY3ROb2RlID0gcGFyZW50Q2hpbGRyZW4uZmlsdGVyKGNoaWxkID0+IEFic3RyYWN0Tm9kZS5pc0Fic3RyYWN0KGNoaWxkKSAmJiBjaGlsZC5lbmQgPCBlbGVtZW50LnN0YXJ0ISk7XG4gICAgICAgIGxldCBtaW5Ob2RlO1xuXG4gICAgICAgIGlmIChhYnN0cmFjdE5vZGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGFic3RyYWN0Tm9kZVxuICAgICAgICAgICAgICAgIC5tYXAobm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZW5kIH0gPSBnZXRDb3JyZWN0U3RhcnRFbmQobm9kZSBhcyBBYnN0cmFjdE5vZGUsIHBhcmVudCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlbmQ7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYiAtIGEpWzBdO1xuICAgICAgICAgICAgbWluTm9kZSA9IHBhcmVudENoaWxkcmVuW2luZGV4ICsgMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtaW5Ob2RlID0gcGFyZW50Q2hpbGRyZW5bMF07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtaW5Ob2RlUmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgW21pbk5vZGVdLCB0cnVlKTtcbiAgICAgICAgY29uc3QgZW5kTm9kZVJlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIFtlbmROb2RlXSwgZmFsc2UpO1xuXG4gICAgICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbWF4OiBlbmROb2RlUmVjdGFuZ2xlLnkgLSBBQlNUUkFDVF9JTkNMVURFRF9PVVRMSU5FX09GRlNFVCxcbiAgICAgICAgICAgICAgICBtaW46IG1pbk5vZGVSZWN0YW5nbGUueSAtIEFCU1RSQUNUX0lOQ0xVREVEX09VVExJTkVfT0ZGU0VUXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBtYXg6IGVuZE5vZGVSZWN0YW5nbGUueCAtIEFCU1RSQUNUX0lOQ0xVREVEX09VVExJTkVfT0ZGU0VULFxuICAgICAgICAgICAgICAgIG1pbjogbWluTm9kZVJlY3RhbmdsZS54IC0gQUJTVFJBQ1RfSU5DTFVERURfT1VUTElORV9PRkZTRVRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBhYnN0cmFjdE5vZGUgPSBwYXJlbnRDaGlsZHJlbi5maWx0ZXIoY2hpbGQgPT4gQWJzdHJhY3ROb2RlLmlzQWJzdHJhY3QoY2hpbGQpICYmIGNoaWxkLnN0YXJ0ID4gZWxlbWVudC5lbmQhKTtcbiAgICAgICAgbGV0IG1heE5vZGU7XG5cbiAgICAgICAgaWYgKGFic3RyYWN0Tm9kZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gYWJzdHJhY3ROb2RlXG4gICAgICAgICAgICAgICAgLm1hcChub2RlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBzdGFydCB9ID0gZ2V0Q29ycmVjdFN0YXJ0RW5kKG5vZGUgYXMgQWJzdHJhY3ROb2RlLCBwYXJlbnQpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnQ7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gYSAtIGIpWzBdO1xuICAgICAgICAgICAgbWF4Tm9kZSA9IHBhcmVudENoaWxkcmVuW2luZGV4IC0gMV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudENoaWxkcmVuLmZpbHRlcihjaGlsZCA9PiAhQWJzdHJhY3ROb2RlLmlzQWJzdHJhY3QoY2hpbGQpKTtcbiAgICAgICAgICAgIG1heE5vZGUgPSBwYXJlbnRDaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1heE5vZGVSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBbbWF4Tm9kZV0sIHRydWUpO1xuICAgICAgICBjb25zdCBzdGFydE5vZGVSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBbc3RhcnROb2RlXSwgZmFsc2UpO1xuXG4gICAgICAgIGlmIChpc0hvcml6b250YWwpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbWF4OiBtYXhOb2RlUmVjdGFuZ2xlLnkgKyBtYXhOb2RlUmVjdGFuZ2xlLmhlaWdodCArIEFCU1RSQUNUX0lOQ0xVREVEX09VVExJTkVfT0ZGU0VULFxuICAgICAgICAgICAgICAgIG1pbjogc3RhcnROb2RlUmVjdGFuZ2xlLnkgKyBzdGFydE5vZGVSZWN0YW5nbGUuaGVpZ2h0ICsgQUJTVFJBQ1RfSU5DTFVERURfT1VUTElORV9PRkZTRVRcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIG1heDogbWF4Tm9kZVJlY3RhbmdsZS54ICsgbWF4Tm9kZVJlY3RhbmdsZS53aWR0aCArIEFCU1RSQUNUX0lOQ0xVREVEX09VVExJTkVfT0ZGU0VULFxuICAgICAgICAgICAgICAgIG1pbjogc3RhcnROb2RlUmVjdGFuZ2xlLnggKyBzdGFydE5vZGVSZWN0YW5nbGUud2lkdGggKyBBQlNUUkFDVF9JTkNMVURFRF9PVVRMSU5FX09GRlNFVFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRIaXRBYnN0cmFjdEhhbmRsZSA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogTWluZEVsZW1lbnQsIHBvaW50OiBQb2ludCkgPT4ge1xuICAgIGNvbnN0IG5vZGVMYXlvdXQgPSBNaW5kUXVlcmllcy5nZXRDb3JyZWN0TGF5b3V0QnlFbGVtZW50KGJvYXJkLCBlbGVtZW50KSBhcyBNaW5kTGF5b3V0VHlwZTtcbiAgICBjb25zdCBpc0hvcml6b250YWwgPSBpc0hvcml6b250YWxMYXlvdXQobm9kZUxheW91dCk7XG5cbiAgICBjb25zdCBwYXJlbnRFbGVtZW50ID0gTWluZEVsZW1lbnQuZ2V0UGFyZW50KGVsZW1lbnQpO1xuICAgIGNvbnN0IGluY2x1ZGVkRWxlbWVudHMgPSBwYXJlbnRFbGVtZW50LmNoaWxkcmVuLnNsaWNlKGVsZW1lbnQuc3RhcnQhLCBlbGVtZW50LmVuZCEgKyAxKTtcbiAgICBsZXQgYWJzdHJhY3RSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBpbmNsdWRlZEVsZW1lbnRzLCB0cnVlKTtcbiAgICBhYnN0cmFjdFJlY3RhbmdsZSA9IFJlY3RhbmdsZUNsaWVudC5nZXRPdXRsaW5lUmVjdGFuZ2xlKGFic3RyYWN0UmVjdGFuZ2xlLCAtQUJTVFJBQ1RfSU5DTFVERURfT1VUTElORV9PRkZTRVQpO1xuXG4gICAgY29uc3Qgc3RhcnRIYW5kbGVSZWMgPSBnZXRBYnN0cmFjdEhhbmRsZVJlY3RhbmdsZShhYnN0cmFjdFJlY3RhbmdsZSwgaXNIb3Jpem9udGFsLCBBYnN0cmFjdEhhbmRsZVBvc2l0aW9uLnN0YXJ0KTtcbiAgICBjb25zdCBlbmRIYW5kbGVSZWMgPSBnZXRBYnN0cmFjdEhhbmRsZVJlY3RhbmdsZShhYnN0cmFjdFJlY3RhbmdsZSwgaXNIb3Jpem9udGFsLCBBYnN0cmFjdEhhbmRsZVBvc2l0aW9uLmVuZCk7XG5cbiAgICBjb25zdCBwb2ludFJlYyA9IFJlY3RhbmdsZUNsaWVudC50b1JlY3RhbmdsZUNsaWVudChbcG9pbnQsIHBvaW50XSk7XG4gICAgaWYgKFJlY3RhbmdsZUNsaWVudC5pc0hpdChwb2ludFJlYywgc3RhcnRIYW5kbGVSZWMpKSByZXR1cm4gQWJzdHJhY3RIYW5kbGVQb3NpdGlvbi5zdGFydDtcbiAgICBpZiAoUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KHBvaW50UmVjLCBlbmRIYW5kbGVSZWMpKSByZXR1cm4gQWJzdHJhY3RIYW5kbGVQb3NpdGlvbi5lbmQ7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBYnN0cmFjdEhhbmRsZVJlY3RhbmdsZSA9IChyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgaXNIb3Jpem9udGFsOiBib29sZWFuLCBwb3NpdGlvbjogQWJzdHJhY3RIYW5kbGVQb3NpdGlvbikgPT4ge1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYgKHBvc2l0aW9uID09PSBBYnN0cmFjdEhhbmRsZVBvc2l0aW9uLnN0YXJ0KSB7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gaXNIb3Jpem9udGFsID8gcmVjdGFuZ2xlLnkgOiByZWN0YW5nbGUueDtcblxuICAgICAgICByZXN1bHQgPSBnZXRSZWN0YW5nbGVCeVJlc2l6aW5nTG9jYXRpb24oXG4gICAgICAgICAgICByZWN0YW5nbGUsXG4gICAgICAgICAgICBsb2NhdGlvbiArIEFCU1RSQUNUX0hBTkRMRV9NQVNLX1dJRFRIIC8gMixcbiAgICAgICAgICAgIEFic3RyYWN0SGFuZGxlUG9zaXRpb24uZW5kLFxuICAgICAgICAgICAgaXNIb3Jpem9udGFsXG4gICAgICAgICk7XG4gICAgICAgIHJlc3VsdCA9IGdldFJlY3RhbmdsZUJ5UmVzaXppbmdMb2NhdGlvbihyZXN1bHQsIGxvY2F0aW9uIC0gQUJTVFJBQ1RfSEFORExFX01BU0tfV0lEVEggLyAyLCBwb3NpdGlvbiwgaXNIb3Jpem9udGFsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IGlzSG9yaXpvbnRhbCA/IHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCA6IHJlY3RhbmdsZS54ICsgcmVjdGFuZ2xlLndpZHRoO1xuXG4gICAgICAgIHJlc3VsdCA9IGdldFJlY3RhbmdsZUJ5UmVzaXppbmdMb2NhdGlvbihcbiAgICAgICAgICAgIHJlY3RhbmdsZSxcbiAgICAgICAgICAgIGxvY2F0aW9uIC0gQUJTVFJBQ1RfSEFORExFX01BU0tfV0lEVEggLyAyLFxuICAgICAgICAgICAgQWJzdHJhY3RIYW5kbGVQb3NpdGlvbi5zdGFydCxcbiAgICAgICAgICAgIGlzSG9yaXpvbnRhbFxuICAgICAgICApO1xuICAgICAgICByZXN1bHQgPSBnZXRSZWN0YW5nbGVCeVJlc2l6aW5nTG9jYXRpb24ocmVzdWx0LCBsb2NhdGlvbiArIEFCU1RSQUNUX0hBTkRMRV9NQVNLX1dJRFRIIC8gMiwgcG9zaXRpb24sIGlzSG9yaXpvbnRhbCk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZmluZExvY2F0aW9uTGVmdEluZGV4KGJvYXJkOiBQbGFpdEJvYXJkLCBwYXJlbnRDaGlsZHJlbjogTWluZEVsZW1lbnRbXSwgbG9jYXRpb246IG51bWJlciwgaXNIb3Jpem9udGFsOiBib29sZWFuKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBwYXJlbnRDaGlsZHJlbi5maWx0ZXIoY2hpbGQgPT4ge1xuICAgICAgICByZXR1cm4gIUFic3RyYWN0Tm9kZS5pc0Fic3RyYWN0KGNoaWxkKTtcbiAgICB9KTtcbiAgICBjb25zdCByZWNBcnJheSA9IGNoaWxkcmVuLm1hcChjaGlsZCA9PiB7XG4gICAgICAgIHJldHVybiBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBbY2hpbGRdLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBmaXJzdFJlYyA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIFtjaGlsZHJlblswXV0sIHRydWUpO1xuICAgIGNvbnN0IGZha2VMZWZ0UmVjID0ge1xuICAgICAgICB4OiBmaXJzdFJlYy54IC0gZmlyc3RSZWMud2lkdGgsXG4gICAgICAgIHk6IGZpcnN0UmVjLnkgLSBmaXJzdFJlYy5oZWlnaHQsXG4gICAgICAgIHdpZHRoOiBmaXJzdFJlYy53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBmaXJzdFJlYy5oZWlnaHRcbiAgICB9O1xuICAgIGNvbnN0IGxhc3RSZWMgPSBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBbY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV1dLCB0cnVlKTtcbiAgICBjb25zdCBmYWtlUmlnaHRSZWMgPSB7XG4gICAgICAgIHg6IGxhc3RSZWMueCArIGxhc3RSZWMud2lkdGgsXG4gICAgICAgIHk6IGxhc3RSZWMueSArIGxhc3RSZWMuaGVpZ2h0LFxuICAgICAgICB3aWR0aDogbGFzdFJlYy53aWR0aCxcbiAgICAgICAgaGVpZ2h0OiBsYXN0UmVjLmhlaWdodFxuICAgIH07XG5cbiAgICByZWNBcnJheS5wdXNoKGZha2VSaWdodFJlYyk7XG4gICAgcmVjQXJyYXkudW5zaGlmdChmYWtlTGVmdFJlYyk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY0FycmF5Lmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICBjb25zdCByZWNYT3JZID0gaXNIb3Jpem9udGFsID8gcmVjQXJyYXlbaV0ueSA6IHJlY0FycmF5W2ldLng7XG4gICAgICAgIGNvbnN0IHJlY1dpZHRoT3JIZWlnaHQgPSBpc0hvcml6b250YWwgPyByZWNBcnJheVtpXS5oZWlnaHQgOiByZWNBcnJheVtpXS53aWR0aDtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBsb2NhdGlvbiA+PSByZWNYT3JZICsgcmVjV2lkdGhPckhlaWdodCAvIDIgJiZcbiAgICAgICAgICAgIGxvY2F0aW9uIDw9IHJlY0FycmF5W2kgKyAxXVtpc0hvcml6b250YWwgPyAneScgOiAneCddICsgcmVjQXJyYXlbaSArIDFdW2lzSG9yaXpvbnRhbCA/ICdoZWlnaHQnIDogJ3dpZHRoJ10gLyAyXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGkgLSAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlVG91Y2hlZEFic3RyYWN0KGJvYXJkOiBQbGFpdEJvYXJkLCB0b3VjaGVkQWJzdHJhY3Q6IFBsYWl0RWxlbWVudCB8IHVuZGVmaW5lZCwgZW5kUG9pbnQ6IFBvaW50KSB7XG4gICAgbGV0IHRvdWNoZWRIYW5kbGU7XG4gICAgY29uc3QgYWJzdHJhY3QgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKVxuICAgICAgICAuZmlsdGVyKGVsZW1lbnQgPT4gQWJzdHJhY3ROb2RlLmlzQWJzdHJhY3QoZWxlbWVudCkpXG4gICAgICAgIC5maW5kKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgdG91Y2hlZEhhbmRsZSA9IGdldEhpdEFic3RyYWN0SGFuZGxlKGJvYXJkLCBlbGVtZW50IGFzIE1pbmRFbGVtZW50LCBlbmRQb2ludCk7XG4gICAgICAgICAgICByZXR1cm4gdG91Y2hlZEhhbmRsZTtcbiAgICAgICAgfSk7XG5cbiAgICBpZiAodG91Y2hlZEFic3RyYWN0ID09PSBhYnN0cmFjdCkge1xuICAgICAgICByZXR1cm4gdG91Y2hlZEFic3RyYWN0O1xuICAgIH1cblxuICAgIGlmICh0b3VjaGVkQWJzdHJhY3QpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50ID0gUGxhaXRFbGVtZW50LmdldENvbXBvbmVudCh0b3VjaGVkQWJzdHJhY3QhKSBhcyBNaW5kTm9kZUNvbXBvbmVudDtcbiAgICAgICAgY29tcG9uZW50LnVwZGF0ZUFic3RyYWN0SW5jbHVkZWRPdXRsaW5lKCk7XG4gICAgICAgIHRvdWNoZWRBYnN0cmFjdCA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoYWJzdHJhY3QpIHtcbiAgICAgICAgdG91Y2hlZEFic3RyYWN0ID0gYWJzdHJhY3Q7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IFBsYWl0RWxlbWVudC5nZXRDb21wb25lbnQodG91Y2hlZEFic3RyYWN0ISkgYXMgTWluZE5vZGVDb21wb25lbnQ7XG4gICAgICAgIGNvbXBvbmVudC51cGRhdGVBYnN0cmFjdEluY2x1ZGVkT3V0bGluZSh0b3VjaGVkSGFuZGxlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdG91Y2hlZEFic3RyYWN0O1xufVxuIl19
@@ -2,17 +2,52 @@ import { CLIP_BOARD_FORMAT_KEY, getRectangleByElements, getSelectedElements, Pla
2
2
  import { MindElement } from '../interfaces';
3
3
  import { copyNewNode, extractNodesText, transformNodeToRoot, transformRootToNode, createMindElement, transformAbstractToNode } from '.';
4
4
  import { getRectangleByNode } from './graph';
5
- import { AbstractNode } from '@plait/layouts';
5
+ import { AbstractNode, getNonAbstractChildren } from '@plait/layouts';
6
+ import { getOverallAbstracts } from './abstract/common';
6
7
  export const buildClipboardData = (board, selectedElements) => {
7
8
  let result = [];
8
- const selectedMindNodes = selectedElements.map(value => MindElement.getNode(value));
9
- const nodesRectangle = getRectangleByElements(board, selectedElements, true);
10
- selectedElements.forEach((node, index) => {
9
+ // get overall abstract
10
+ const overallAbstracts = getOverallAbstracts(board, selectedElements);
11
+ // keep correct order
12
+ const newSelectedElements = selectedElements.filter((value) => !overallAbstracts.includes(value));
13
+ newSelectedElements.push(...overallAbstracts);
14
+ // get correct start and end in selected elements
15
+ function getCorrectStartEnd(abstract) {
16
+ const parent = MindElement.getParent(abstract);
17
+ const startElement = parent.children[abstract.start];
18
+ const index = selectedElements.indexOf(startElement);
19
+ return { start: index, end: index + (abstract.end - abstract.start) };
20
+ }
21
+ const selectedMindNodes = newSelectedElements.map(value => MindElement.getNode(value));
22
+ const nodesRectangle = getRectangleByElements(board, newSelectedElements, true);
23
+ newSelectedElements.forEach((element, index) => {
24
+ // handle relative location
11
25
  const nodeRectangle = getRectangleByNode(selectedMindNodes[index]);
12
- result.push({
13
- ...node,
14
- points: [[nodeRectangle.x - nodesRectangle.x, nodeRectangle.y - nodesRectangle.y]]
15
- });
26
+ const points = [[nodeRectangle.x - nodesRectangle.x, nodeRectangle.y - nodesRectangle.y]];
27
+ // handle invalid abstract
28
+ if (AbstractNode.isAbstract(element) && overallAbstracts.includes(element)) {
29
+ const { start, end } = getCorrectStartEnd(element);
30
+ result.push({
31
+ ...element,
32
+ points,
33
+ start,
34
+ end
35
+ });
36
+ }
37
+ else {
38
+ if (AbstractNode.isAbstract(element)) {
39
+ let newElement = { ...element, points };
40
+ delete newElement.start;
41
+ delete newElement.end;
42
+ result.push(newElement);
43
+ }
44
+ else {
45
+ result.push({
46
+ ...element,
47
+ points: points
48
+ });
49
+ }
50
+ }
16
51
  });
17
52
  return result;
18
53
  };
@@ -38,17 +73,22 @@ export const insertClipboardData = (board, elements, targetPoint) => {
38
73
  let newElement, path;
39
74
  const selectedElements = getSelectedElements(board);
40
75
  let newELements = [];
76
+ const hasTargetParent = selectedElements.length === 1;
77
+ const targetParent = selectedElements[0];
78
+ const targetParentPath = targetParent && PlaitBoard.findPath(board, targetParent);
79
+ const nonAbstractChildrenLength = targetParent && getNonAbstractChildren(targetParent).length;
41
80
  elements.forEach((item, index) => {
42
81
  newElement = copyNewNode(item);
43
- if (selectedElements.length === 1) {
82
+ if (hasTargetParent) {
44
83
  if (item.isRoot) {
45
84
  newElement = transformRootToNode(board, newElement);
46
85
  }
47
- if (AbstractNode.isAbstract(item)) {
48
- newElement = transformAbstractToNode(newElement);
86
+ // handle abstract start and end
87
+ if (AbstractNode.isAbstract(newElement)) {
88
+ newElement.start = newElement.start + nonAbstractChildrenLength;
89
+ newElement.end = newElement.end + nonAbstractChildrenLength;
49
90
  }
50
- const selectedElementPath = PlaitBoard.findPath(board, selectedElements[0]);
51
- path = selectedElementPath.concat((selectedElements[0].children || []).length + index);
91
+ path = [...targetParentPath, nonAbstractChildrenLength + index];
52
92
  }
53
93
  else {
54
94
  const point = [targetPoint[0] + item.points[0][0], targetPoint[1] + item.points[0][1]];
@@ -73,4 +113,4 @@ export const insertClipboardText = (board, parentElement, text, width, height) =
73
113
  Transforms.insertNode(board, newElement, path);
74
114
  return;
75
115
  };
76
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcGJvYXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvdXRpbHMvY2xpcGJvYXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLG1CQUFtQixFQUVuQixVQUFVLEVBR1YsVUFBVSxFQUNiLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLEdBQUcsQ0FBQztBQUN4SSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBaUIsRUFBRSxnQkFBK0IsRUFBRSxFQUFFO0lBQ3JGLElBQUksTUFBTSxHQUFrQixFQUFFLENBQUM7SUFDL0IsTUFBTSxpQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDcEYsTUFBTSxjQUFjLEdBQUcsc0JBQXNCLENBQUMsS0FBSyxFQUFFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzdFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtRQUNyQyxNQUFNLGFBQWEsR0FBRyxrQkFBa0IsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDUixHQUFHLElBQUk7WUFDUCxNQUFN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LFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvQyxPQUFPO0FBQ1gsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDTElQX0JPQVJEX0ZPUk1BVF9LRVksXG4gICAgZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyxcbiAgICBnZXRTZWxlY3RlZEVsZW1lbnRzLFxuICAgIFBhdGgsXG4gICAgUGxhaXRCb2FyZCxcbiAgICBQbGFpdEVsZW1lbnQsXG4gICAgUG9pbnQsXG4gICAgVHJhbnNmb3Jtc1xufSBmcm9tICdAcGxhaXQvY29yZSc7XG5pbXBvcnQgeyBNaW5kRWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgY29weU5ld05vZGUsIGV4dHJhY3ROb2Rlc1RleHQsIHRyYW5zZm9ybU5vZGVUb1Jvb3QsIHRyYW5zZm9ybVJvb3RUb05vZGUsIGNyZWF0ZU1pbmRFbGVtZW50LCB0cmFuc2Zvcm1BYnN0cmFjdFRvTm9kZSB9IGZyb20gJy4nO1xuaW1wb3J0IHsgZ2V0UmVjdGFuZ2xlQnlOb2RlIH0gZnJvbSAnLi9ncmFwaCc7XG5pbXBvcnQgeyBBYnN0cmFjdE5vZGUgfSBmcm9tICdAcGxhaXQvbGF5b3V0cyc7XG5cbmV4cG9ydCBjb25zdCBidWlsZENsaXBib2FyZERhdGEgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHNlbGVjdGVkRWxlbWVudHM6IE1pbmRFbGVtZW50W10pID0+IHtcbiAgICBsZXQgcmVzdWx0OiBNaW5kRWxlbWVudFtdID0gW107XG4gICAgY29uc3Qgc2VsZWN0ZWRNaW5kTm9kZXMgPSBzZWxlY3RlZEVsZW1lbnRzLm1hcCh2YWx1ZSA9PiBNaW5kRWxlbWVudC5nZXROb2RlKHZhbHVlKSk7XG4gICAgY29uc3Qgbm9kZXNSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzKGJvYXJkLCBzZWxlY3RlZEVsZW1lbnRzLCB0cnVlKTtcbiAgICBzZWxlY3RlZEVsZW1lbnRzLmZvckVhY2goKG5vZGUsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IG5vZGVSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeU5vZGUoc2VsZWN0ZWRNaW5kTm9kZXNbaW5kZXhdKTtcbiAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgLi4ubm9kZSxcbiAgICAgICAgICAgIHBvaW50czogW1tub2RlUmVjdGFuZ2xlLnggLSBub2Rlc1JlY3RhbmdsZS54LCBub2RlUmVjdGFuZ2xlLnkgLSBub2Rlc1JlY3RhbmdsZS55XV1cbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IHNldENsaXBib2FyZERhdGEgPSAoZGF0YTogRGF0YVRyYW5zZmVyIHwgbnVsbCwgZWxlbWVudHM6IE1pbmRFbGVtZW50W10pID0+IHtcbiAgICBjb25zdCBzdHJpbmdPYmogPSBKU09OLnN0cmluZ2lmeShlbGVtZW50cyk7XG4gICAgY29uc3QgZW5jb2RlZCA9IHdpbmRvdy5idG9hKGVuY29kZVVSSUNvbXBvbmVudChzdHJpbmdPYmopKTtcbiAgICBjb25zdCB0ZXh0ID0gZWxlbWVudHMucmVkdWNlKChzdHJpbmcsIGN1cnJlbnROb2RlKSA9PiB7XG4gICAgICAgIHJldHVybiBzdHJpbmcgKyBleHRyYWN0Tm9kZXNUZXh0KGN1cnJlbnROb2RlKTtcbiAgICB9LCAnJyk7XG4gICAgZGF0YT8uc2V0RGF0YShgYXBwbGljYXRpb24vJHtDTElQX0JPQVJEX0ZPUk1BVF9LRVl9YCwgZW5jb2RlZCk7XG4gICAgZGF0YT8uc2V0RGF0YShgdGV4dC9wbGFpbmAsIHRleHQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERhdGFGcm9tQ2xpcGJvYXJkID0gKGRhdGE6IERhdGFUcmFuc2ZlciB8IG51bGwpID0+IHtcbiAgICBjb25zdCBlbmNvZGVkID0gZGF0YT8uZ2V0RGF0YShgYXBwbGljYXRpb24vJHtDTElQX0JPQVJEX0ZPUk1BVF9LRVl9YCk7XG4gICAgbGV0IG5vZGVzRGF0YTogUGxhaXRFbGVtZW50W10gPSBbXTtcbiAgICBpZiAoZW5jb2RlZCkge1xuICAgICAgICBjb25zdCBkZWNvZGVkID0gZGVjb2RlVVJJQ29tcG9uZW50KHdpbmRvdy5hdG9iKGVuY29kZWQpKTtcbiAgICAgICAgbm9kZXNEYXRhID0gSlNPTi5wYXJzZShkZWNvZGVkKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGVzRGF0YTtcbn07XG5cbmV4cG9ydCBjb25zdCBpbnNlcnRDbGlwYm9hcmREYXRhID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50czogUGxhaXRFbGVtZW50W10sIHRhcmdldFBvaW50OiBQb2ludCkgPT4ge1xuICAgIGxldCBuZXdFbGVtZW50OiBNaW5kRWxlbWVudCwgcGF0aDogUGF0aDtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgbGV0IG5ld0VMZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSA9IFtdO1xuXG4gICAgZWxlbWVudHMuZm9yRWFjaCgoaXRlbTogUGxhaXRFbGVtZW50LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIG5ld0VsZW1lbnQgPSBjb3B5TmV3Tm9kZShpdGVtIGFzIE1pbmRFbGVtZW50KTtcblxuICAgICAgICBpZiAoc2VsZWN0ZWRFbGVtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLmlzUm9vdCkge1xuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQgPSB0cmFuc2Zvcm1Sb290VG9Ob2RlKGJvYXJkLCBuZXdFbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBYnN0cmFjdE5vZGUuaXNBYnN0cmFjdChpdGVtKSkge1xuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQgPSB0cmFuc2Zvcm1BYnN0cmFjdFRvTm9kZShuZXdFbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudFBhdGggPSBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCBzZWxlY3RlZEVsZW1lbnRzWzBdKTtcbiAgICAgICAgICAgIHBhdGggPSBzZWxlY3RlZEVsZW1lbnRQYXRoLmNvbmNhdCgoc2VsZWN0ZWRFbGVtZW50c1swXS5jaGlsZHJlbiB8fCBbXSkubGVuZ3RoICsgaW5kZXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcG9pbnQ6IFBvaW50ID0gW3RhcmdldFBvaW50WzBdICsgaXRlbS5wb2ludHMhWzBdWzBdLCB0YXJnZXRQb2ludFsxXSArIGl0ZW0ucG9pbnRzIVswXVsxXV07XG4gICAgICAgICAgICBuZXdFbGVtZW50LnBvaW50cyA9IFtwb2ludF07XG5cbiAgICAgICAgICAgIGlmIChBYnN0cmFjdE5vZGUuaXNBYnN0cmFjdChpdGVtKSkge1xuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQgPSB0cmFuc2Zvcm1BYnN0cmFjdFRvTm9kZShuZXdFbGVtZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFpdGVtLmlzUm9vdCkge1xuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQgPSB0cmFuc2Zvcm1Ob2RlVG9Sb290KGJvYXJkLCBuZXdFbGVtZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcGF0aCA9IFtib2FyZC5jaGlsZHJlbi5sZW5ndGhdO1xuICAgICAgICB9XG4gICAgICAgIG5ld0VMZW1lbnRzLnB1c2gobmV3RWxlbWVudCk7XG4gICAgICAgIFRyYW5zZm9ybXMuaW5zZXJ0Tm9kZShib2FyZCwgbmV3RWxlbWVudCwgcGF0aCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9KTtcbiAgICBUcmFuc2Zvcm1zLnNldFNlbGVjdGlvbldpdGhUZW1wb3JhcnlFbGVtZW50cyhib2FyZCwgbmV3RUxlbWVudHMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGluc2VydENsaXBib2FyZFRleHQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHBhcmVudEVsZW1lbnQ6IFBsYWl0RWxlbWVudCwgdGV4dDogc3RyaW5nLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikgPT4ge1xuICAgIGNvbnN0IG5ld0VsZW1lbnQgPSBjcmVhdGVNaW5kRWxlbWVudCh0ZXh0LCB3aWR0aCwgaGVpZ2h0LCB7fSk7XG4gICAgY29uc3QgcGF0aCA9IFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIHBhcmVudEVsZW1lbnQpLmNvbmNhdCgocGFyZW50RWxlbWVudC5jaGlsZHJlbiB8fCBbXSkubGVuZ3RoKTtcbiAgICBUcmFuc2Zvcm1zLmluc2VydE5vZGUoYm9hcmQsIG5ld0VsZW1lbnQsIHBhdGgpO1xuICAgIHJldHVybjtcbn07XG4iXX0=
116
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpcGJvYXJkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvdXRpbHMvY2xpcGJvYXJkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLG1CQUFtQixFQUVuQixVQUFVLEVBR1YsVUFBVSxFQUNiLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLEdBQUcsQ0FBQztBQUN4SSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDN0MsT0FBTyxFQUFFLFlBQVksRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXhELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsS0FBaUIsRUFBRSxnQkFBK0IsRUFBRSxFQUFFO0lBQ3JGLElBQUksTUFBTSxHQUFrQixFQUFFLENBQUM7SUFFL0IsdUJBQXVCO0lBQ3ZCLE1BQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxFQUFFLGdCQUFnQixDQUFrQixDQUFDO0lBRXZGLHFCQUFxQjtJQUNyQixNQUFNLG1CQUFtQixHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNsRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDO0lBRTlDLGlEQUFpRDtJQUNqRCxTQUFTLGtCQUFrQixDQUFD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QUFDO1FBQzdCLFVBQVUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMvQyxPQUFPO0lBQ1gsQ0FBQyxDQUFDLENBQUM7SUFDSCxVQUFVLENBQUMsaUNBQWlDLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ3JFLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsS0FBaUIsRUFBRSxhQUEyQixFQUFFLElBQVksRUFBRSxLQUFhLEVBQUUsTUFBYyxFQUFFLEVBQUU7SUFDL0gsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDOUQsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsYUFBYSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyRyxVQUFVLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0MsT0FBTztBQUNYLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ0xJUF9CT0FSRF9GT1JNQVRfS0VZLFxuICAgIGdldFJlY3RhbmdsZUJ5RWxlbWVudHMsXG4gICAgZ2V0U2VsZWN0ZWRFbGVtZW50cyxcbiAgICBQYXRoLFxuICAgIFBsYWl0Qm9hcmQsXG4gICAgUGxhaXRFbGVtZW50LFxuICAgIFBvaW50LFxuICAgIFRyYW5zZm9ybXNcbn0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHsgTWluZEVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGNvcHlOZXdOb2RlLCBleHRyYWN0Tm9kZXNUZXh0LCB0cmFuc2Zvcm1Ob2RlVG9Sb290LCB0cmFuc2Zvcm1Sb290VG9Ob2RlLCBjcmVhdGVNaW5kRWxlbWVudCwgdHJhbnNmb3JtQWJzdHJhY3RUb05vZGUgfSBmcm9tICcuJztcbmltcG9ydCB7IGdldFJlY3RhbmdsZUJ5Tm9kZSB9IGZyb20gJy4vZ3JhcGgnO1xuaW1wb3J0IHsgQWJzdHJhY3ROb2RlLCBnZXROb25BYnN0cmFjdENoaWxkcmVuIH0gZnJvbSAnQHBsYWl0L2xheW91dHMnO1xuaW1wb3J0IHsgZ2V0T3ZlcmFsbEFic3RyYWN0cyB9IGZyb20gJy4vYWJzdHJhY3QvY29tbW9uJztcblxuZXhwb3J0IGNvbnN0IGJ1aWxkQ2xpcGJvYXJkRGF0YSA9IChib2FyZDogUGxhaXRCb2FyZCwgc2VsZWN0ZWRFbGVtZW50czogTWluZEVsZW1lbnRbXSkgPT4ge1xuICAgIGxldCByZXN1bHQ6IE1pbmRFbGVtZW50W10gPSBbXTtcblxuICAgIC8vIGdldCBvdmVyYWxsIGFic3RyYWN0XG4gICAgY29uc3Qgb3ZlcmFsbEFic3RyYWN0cyA9IGdldE92ZXJhbGxBYnN0cmFjdHMoYm9hcmQsIHNlbGVjdGVkRWxlbWVudHMpIGFzIE1pbmRFbGVtZW50W107XG5cbiAgICAvLyBrZWVwIGNvcnJlY3Qgb3JkZXJcbiAgICBjb25zdCBuZXdTZWxlY3RlZEVsZW1lbnRzID0gc2VsZWN0ZWRFbGVtZW50cy5maWx0ZXIoKHZhbHVlKSA9PiAhb3ZlcmFsbEFic3RyYWN0cy5pbmNsdWRlcyh2YWx1ZSkpO1xuICAgIG5ld1NlbGVjdGVkRWxlbWVudHMucHVzaCguLi5vdmVyYWxsQWJzdHJhY3RzKTtcblxuICAgIC8vIGdldCBjb3JyZWN0IHN0YXJ0IGFuZCBlbmQgaW4gc2VsZWN0ZWQgZWxlbWVudHNcbiAgICBmdW5jdGlvbiBnZXRDb3JyZWN0U3RhcnRFbmQoYWJzdHJhY3Q6IE1pbmRFbGVtZW50ICYgQWJzdHJhY3ROb2RlKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IE1pbmRFbGVtZW50LmdldFBhcmVudChhYnN0cmFjdCk7XG4gICAgICAgIGNvbnN0IHN0YXJ0RWxlbWVudCA9IHBhcmVudC5jaGlsZHJlblthYnN0cmFjdC5zdGFydF07XG4gICAgICAgIGNvbnN0IGluZGV4ID0gc2VsZWN0ZWRFbGVtZW50cy5pbmRleE9mKHN0YXJ0RWxlbWVudCk7XG4gICAgICAgIHJldHVybiB7IHN0YXJ0OiBpbmRleCwgZW5kOiBpbmRleCArIChhYnN0cmFjdC5lbmQgLSBhYnN0cmFjdC5zdGFydCkgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzZWxlY3RlZE1pbmROb2RlcyA9IG5ld1NlbGVjdGVkRWxlbWVudHMubWFwKHZhbHVlID0+IE1pbmRFbGVtZW50LmdldE5vZGUodmFsdWUpKTtcbiAgICBjb25zdCBub2Rlc1JlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIG5ld1NlbGVjdGVkRWxlbWVudHMsIHRydWUpO1xuICAgIG5ld1NlbGVjdGVkRWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgLy8gaGFuZGxlIHJlbGF0aXZlIGxvY2F0aW9uXG4gICAgICAgIGNvbnN0IG5vZGVSZWN0YW5nbGUgPSBnZXRSZWN0YW5nbGVCeU5vZGUoc2VsZWN0ZWRNaW5kTm9kZXNbaW5kZXhdKTtcbiAgICAgICAgY29uc3QgcG9pbnRzID0gW1tub2RlUmVjdGFuZ2xlLnggLSBub2Rlc1JlY3RhbmdsZS54LCBub2RlUmVjdGFuZ2xlLnkgLSBub2Rlc1JlY3RhbmdsZS55XV0gYXMgUG9pbnRbXTtcblxuICAgICAgICAvLyBoYW5kbGUgaW52YWxpZCBhYnN0cmFjdFxuICAgICAgICBpZiAoQWJzdHJhY3ROb2RlLmlzQWJzdHJhY3QoZWxlbWVudCkgJiYgb3ZlcmFsbEFic3RyYWN0cy5pbmNsdWRlcyhlbGVtZW50KSkge1xuICAgICAgICAgICAgY29uc3QgeyBzdGFydCwgZW5kIH0gPSBnZXRDb3JyZWN0U3RhcnRFbmQoZWxlbWVudCk7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgLi4uZWxlbWVudCxcbiAgICAgICAgICAgICAgICBwb2ludHMsXG4gICAgICAgICAgICAgICAgc3RhcnQsXG4gICAgICAgICAgICAgICAgZW5kXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChBYnN0cmFjdE5vZGUuaXNBYnN0cmFjdChlbGVtZW50KSkge1xuICAgICAgICAgICAgICAgIGxldCBuZXdFbGVtZW50ID0geyAuLi5lbGVtZW50LCBwb2ludHMgfSBhcyBNaW5kRWxlbWVudDtcbiAgICAgICAgICAgICAgICBkZWxldGUgbmV3RWxlbWVudC5zdGFydDtcbiAgICAgICAgICAgICAgICBkZWxldGUgbmV3RWxlbWVudC5lbmQ7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gobmV3RWxlbWVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRzOiBwb2ludHNcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0Q2xpcGJvYXJkRGF0YSA9IChkYXRhOiBEYXRhVHJhbnNmZXIgfCBudWxsLCBlbGVtZW50czogTWluZEVsZW1lbnRbXSkgPT4ge1xuICAgIGNvbnN0IHN0cmluZ09iaiA9IEpTT04uc3RyaW5naWZ5KGVsZW1lbnRzKTtcbiAgICBjb25zdCBlbmNvZGVkID0gd2luZG93LmJ0b2EoZW5jb2RlVVJJQ29tcG9uZW50KHN0cmluZ09iaikpO1xuICAgIGNvbnN0IHRleHQgPSBlbGVtZW50cy5yZWR1Y2UoKHN0cmluZywgY3VycmVudE5vZGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHN0cmluZyArIGV4dHJhY3ROb2Rlc1RleHQoY3VycmVudE5vZGUpO1xuICAgIH0sICcnKTtcbiAgICBkYXRhPy5zZXREYXRhKGBhcHBsaWNhdGlvbi8ke0NMSVBfQk9BUkRfRk9STUFUX0tFWX1gLCBlbmNvZGVkKTtcbiAgICBkYXRhPy5zZXREYXRhKGB0ZXh0L3BsYWluYCwgdGV4dCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0RGF0YUZyb21DbGlwYm9hcmQgPSAoZGF0YTogRGF0YVRyYW5zZmVyIHwgbnVsbCkgPT4ge1xuICAgIGNvbnN0IGVuY29kZWQgPSBkYXRhPy5nZXREYXRhKGBhcHBsaWNhdGlvbi8ke0NMSVBfQk9BUkRfRk9STUFUX0tFWX1gKTtcbiAgICBsZXQgbm9kZXNEYXRhOiBQbGFpdEVsZW1lbnRbXSA9IFtdO1xuICAgIGlmIChlbmNvZGVkKSB7XG4gICAgICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVVUklDb21wb25lbnQod2luZG93LmF0b2IoZW5jb2RlZCkpO1xuICAgICAgICBub2Rlc0RhdGEgPSBKU09OLnBhcnNlKGRlY29kZWQpO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZXNEYXRhO1xufTtcblxuZXhwb3J0IGNvbnN0IGluc2VydENsaXBib2FyZERhdGEgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnRzOiBQbGFpdEVsZW1lbnRbXSwgdGFyZ2V0UG9pbnQ6IFBvaW50KSA9PiB7XG4gICAgbGV0IG5ld0VsZW1lbnQ6IE1pbmRFbGVtZW50LCBwYXRoOiBQYXRoO1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBsZXQgbmV3RUxlbWVudHM6IFBsYWl0RWxlbWVudFtdID0gW107XG5cbiAgICBjb25zdCBoYXNUYXJnZXRQYXJlbnQgPSBzZWxlY3RlZEVsZW1lbnRzLmxlbmd0aCA9PT0gMTtcbiAgICBjb25zdCB0YXJnZXRQYXJlbnQgPSBzZWxlY3RlZEVsZW1lbnRzWzBdO1xuICAgIGNvbnN0IHRhcmdldFBhcmVudFBhdGggPSB0YXJnZXRQYXJlbnQgJiYgUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgdGFyZ2V0UGFyZW50KTtcbiAgICBjb25zdCBub25BYnN0cmFjdENoaWxkcmVuTGVuZ3RoID0gdGFyZ2V0UGFyZW50ICYmIGdldE5vbkFic3RyYWN0Q2hpbGRyZW4odGFyZ2V0UGFyZW50KS5sZW5ndGg7XG5cbiAgICBlbGVtZW50cy5mb3JFYWNoKChpdGVtOiBQbGFpdEVsZW1lbnQsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgbmV3RWxlbWVudCA9IGNvcHlOZXdOb2RlKGl0ZW0gYXMgTWluZEVsZW1lbnQpO1xuXG4gICAgICAgIGlmIChoYXNUYXJnZXRQYXJlbnQpIHtcbiAgICAgICAgICAgIGlmIChpdGVtLmlzUm9vdCkge1xuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQgPSB0cmFuc2Zvcm1Sb290VG9Ob2RlKGJvYXJkLCBuZXdFbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGhhbmRsZSBhYnN0cmFjdCBzdGFydCBhbmQgZW5kXG4gICAgICAgICAgICBpZiAoQWJzdHJhY3ROb2RlLmlzQWJzdHJhY3QobmV3RWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnN0YXJ0ID0gbmV3RWxlbWVudC5zdGFydCArIG5vbkFic3RyYWN0Q2hpbGRyZW5MZW5ndGg7XG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5lbmQgPSBuZXdFbGVtZW50LmVuZCArIG5vbkFic3RyYWN0Q2hpbGRyZW5MZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXRoID0gWy4uLnRhcmdldFBhcmVudFBhdGgsIG5vbkFic3RyYWN0Q2hpbGRyZW5MZW5ndGggKyBpbmRleF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwb2ludDogUG9pbnQgPSBbdGFyZ2V0UG9pbnRbMF0gKyBpdGVtLnBvaW50cyFbMF1bMF0sIHRhcmdldFBvaW50WzFdICsgaXRlbS5wb2ludHMhWzBdWzFdXTtcbiAgICAgICAgICAgIG5ld0VsZW1lbnQucG9pbnRzID0gW3BvaW50XTtcblxuICAgICAgICAgICAgaWYgKEFic3RyYWN0Tm9kZS5pc0Fic3RyYWN0KGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudCA9IHRyYW5zZm9ybUFic3RyYWN0VG9Ob2RlKG5ld0VsZW1lbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWl0ZW0uaXNSb290KSB7XG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudCA9IHRyYW5zZm9ybU5vZGVUb1Jvb3QoYm9hcmQsIG5ld0VsZW1lbnQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwYXRoID0gW2JvYXJkLmNoaWxkcmVuLmxlbmd0aF07XG4gICAgICAgIH1cbiAgICAgICAgbmV3RUxlbWVudHMucHVzaChuZXdFbGVtZW50KTtcbiAgICAgICAgVHJhbnNmb3Jtcy5pbnNlcnROb2RlKGJvYXJkLCBuZXdFbGVtZW50LCBwYXRoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH0pO1xuICAgIFRyYW5zZm9ybXMuc2V0U2VsZWN0aW9uV2l0aFRlbXBvcmFyeUVsZW1lbnRzKGJvYXJkLCBuZXdFTGVtZW50cyk7XG59O1xuXG5leHBvcnQgY29uc3QgaW5zZXJ0Q2xpcGJvYXJkVGV4dCA9IChib2FyZDogUGxhaXRCb2FyZCwgcGFyZW50RWxlbWVudDogUGxhaXRFbGVtZW50LCB0ZXh0OiBzdHJpbmcsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSA9PiB7XG4gICAgY29uc3QgbmV3RWxlbWVudCA9IGNyZWF0ZU1pbmRFbGVtZW50KHRleHQsIHdpZHRoLCBoZWlnaHQsIHt9KTtcbiAgICBjb25zdCBwYXRoID0gUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgcGFyZW50RWxlbWVudCkuY29uY2F0KChwYXJlbnRFbGVtZW50LmNoaWxkcmVuIHx8IFtdKS5sZW5ndGgpO1xuICAgIFRyYW5zZm9ybXMuaW5zZXJ0Tm9kZShib2FyZCwgbmV3RWxlbWVudCwgcGF0aCk7XG4gICAgcmV0dXJuO1xufTtcbiJdfQ==
@@ -1,28 +1,28 @@
1
- import { isBottomLayout, isRightLayout, isLeftLayout, MindLayoutType, isStandardLayout, isTopLayout } from '@plait/layouts';
1
+ import { isBottomLayout, isRightLayout, isLeftLayout, MindLayoutType, isStandardLayout, isTopLayout, AbstractNode } from '@plait/layouts';
2
2
  import { MindQueries } from '../queries';
3
- export const directionCorrector = (node, detectResults) => {
4
- if (!node.origin.isRoot) {
5
- const parentlayout = MindQueries.getCorrectLayoutByElement(node?.parent.origin);
6
- if (isStandardLayout(parentlayout)) {
3
+ export const directionCorrector = (board, node, detectResults) => {
4
+ if (!node.origin.isRoot && !AbstractNode.isAbstract(node.origin)) {
5
+ const parentLayout = MindQueries.getCorrectLayoutByElement(board, node?.parent.origin);
6
+ if (isStandardLayout(parentLayout)) {
7
7
  const idx = node.parent.children.findIndex(x => x === node);
8
8
  const isLeft = idx >= (node.parent.origin.rightNodeCount || 0);
9
9
  return getAllowedDirection(detectResults, [isLeft ? 'right' : 'left']);
10
10
  }
11
- if (isLeftLayout(parentlayout)) {
11
+ if (isLeftLayout(parentLayout)) {
12
12
  return getAllowedDirection(detectResults, ['right']);
13
13
  }
14
- if (isRightLayout(parentlayout)) {
14
+ if (isRightLayout(parentLayout)) {
15
15
  return getAllowedDirection(detectResults, ['left']);
16
16
  }
17
- if (parentlayout === MindLayoutType.upward) {
17
+ if (parentLayout === MindLayoutType.upward) {
18
18
  return getAllowedDirection(detectResults, ['bottom']);
19
19
  }
20
- if (parentlayout === MindLayoutType.downward) {
20
+ if (parentLayout === MindLayoutType.downward) {
21
21
  return getAllowedDirection(detectResults, ['top']);
22
22
  }
23
23
  }
24
24
  else {
25
- const layout = MindQueries.getCorrectLayoutByElement(node?.origin);
25
+ const layout = MindQueries.getCorrectLayoutByElement(board, node?.origin);
26
26
  if (isStandardLayout(layout)) {
27
27
  return getAllowedDirection(detectResults, ['top', 'bottom']);
28
28
  }
@@ -51,4 +51,4 @@ export const getAllowedDirection = (detectResults, illegalDirections) => {
51
51
  });
52
52
  return directions.length ? directions : null;
53
53
  };
54
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aW9uLWNvcnJlY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3V0aWxzL2RpcmVjdGlvbi1jb3JyZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1SCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXpDLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLENBQUMsSUFBYyxFQUFFLGFBQTZCLEVBQXlCLEVBQUU7SUFDdkcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO1FBQ3JCLE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQXFCLENBQUMsQ0FBQztRQUMvRixJQUFJLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ2hDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztZQUM1RCxNQUFNLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDL0QsT0FBTyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUMxRTtRQUVELElBQUksWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQzVCLE9BQU8sbUJBQW1CLENBQUMsYUFBYSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUN4RDtRQUVELElBQUksYUFBYSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQzdCLE9BQU8sbUJBQW1CLENBQUMsYUFBYSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUN2RDtRQUVELElBQUksWUFBWSxLQUFLLGNBQWMsQ0FBQyxNQUFNLEVBQUU7WUFDeEMsT0FBTyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ3pEO1FBRUQsSUFBSSxZQUFZLEtBQUssY0FBYyxDQUFDLFFBQVEsRUFBRTtZQUMxQyxPQUFPLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDdEQ7S0FDSjtTQUFNO1FBQ0gsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLHlCQUF5QixDQUFDLElBQUksRUFBRSxNQUFxQixDQUFDLENBQUM7UUFDbEYsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMxQixPQUFPLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ2hFO1FBRUQsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDckIsT0FBTyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDMUU7UUFFRCxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN4QixPQUFPLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUN2RTtRQUVELElBQUksTUFBTSxLQUFLLGNBQWMsQ0FBQyxJQUFJLEVBQUU7WUFDaEMsT0FBTyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7U0FDekU7UUFFRCxJQUFJLE1BQU0sS0FBSyxjQUFjLENBQUMsS0FBSyxFQUFFO1lBQ2pDLE9BQU8sbUJBQW1CLENBQUMsYUFBYSxFQUFFLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ3hFO0tBQ0o7SUFFRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLGFBQTZCLEVBQUUsaUJBQWlDLEVBQXlCLEVBQUU7SUFDM0gsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDO0lBQ2pDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUM3QixNQUFNLG9CQUFvQixHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDbkYsSUFBSSxvQkFBb0IsS0FBSyxDQUFDLENBQUMsRUFBRTtZQUM3QixVQUFVLENBQUMsTUFBTSxDQUFDLG9CQUFvQixFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzlDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ2pELENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERldGVjdFJlc3VsdCwgTWluZEVsZW1lbnQsIE1pbmROb2RlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBpc0JvdHRvbUxheW91dCwgaXNSaWdodExheW91dCwgaXNMZWZ0TGF5b3V0LCBNaW5kTGF5b3V0VHlwZSwgaXNTdGFuZGFyZExheW91dCwgaXNUb3BMYXlvdXQgfSBmcm9tICdAcGxhaXQvbGF5b3V0cyc7XG5pbXBvcnQgeyBNaW5kUXVlcmllcyB9IGZyb20gJy4uL3F1ZXJpZXMnO1xuXG5leHBvcnQgY29uc3QgZGlyZWN0aW9uQ29ycmVjdG9yID0gKG5vZGU6IE1pbmROb2RlLCBkZXRlY3RSZXN1bHRzOiBEZXRlY3RSZXN1bHRbXSk6IERldGVjdFJlc3VsdFtdIHwgbnVsbCA9PiB7XG4gICAgaWYgKCFub2RlLm9yaWdpbi5pc1Jvb3QpIHtcbiAgICAgICAgY29uc3QgcGFyZW50bGF5b3V0ID0gTWluZFF1ZXJpZXMuZ2V0Q29ycmVjdExheW91dEJ5RWxlbWVudChub2RlPy5wYXJlbnQub3JpZ2luIGFzIE1pbmRFbGVtZW50KTtcbiAgICAgICAgaWYgKGlzU3RhbmRhcmRMYXlvdXQocGFyZW50bGF5b3V0KSkge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gbm9kZS5wYXJlbnQuY2hpbGRyZW4uZmluZEluZGV4KHggPT4geCA9PT0gbm9kZSk7XG4gICAgICAgICAgICBjb25zdCBpc0xlZnQgPSBpZHggPj0gKG5vZGUucGFyZW50Lm9yaWdpbi5yaWdodE5vZGVDb3VudCB8fCAwKTtcbiAgICAgICAgICAgIHJldHVybiBnZXRBbGxvd2VkRGlyZWN0aW9uKGRldGVjdFJlc3VsdHMsIFtpc0xlZnQgPyAncmlnaHQnIDogJ2xlZnQnXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNMZWZ0TGF5b3V0KHBhcmVudGxheW91dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRBbGxvd2VkRGlyZWN0aW9uKGRldGVjdFJlc3VsdHMsIFsncmlnaHQnXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNSaWdodExheW91dChwYXJlbnRsYXlvdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0QWxsb3dlZERpcmVjdGlvbihkZXRlY3RSZXN1bHRzLCBbJ2xlZnQnXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyZW50bGF5b3V0ID09PSBNaW5kTGF5b3V0VHlwZS51cHdhcmQpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRBbGxvd2VkRGlyZWN0aW9uKGRldGVjdFJlc3VsdHMsIFsnYm90dG9tJ10pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmVudGxheW91dCA9PT0gTWluZExheW91dFR5cGUuZG93bndhcmQpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRBbGxvd2VkRGlyZWN0aW9uKGRldGVjdFJlc3VsdHMsIFsndG9wJ10pO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbGF5b3V0ID0gTWluZFF1ZXJpZXMuZ2V0Q29ycmVjdExheW91dEJ5RWxlbWVudChub2RlPy5vcmlnaW4gYXMgTWluZEVsZW1lbnQpO1xuICAgICAgICBpZiAoaXNTdGFuZGFyZExheW91dChsYXlvdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0QWxsb3dlZERpcmVjdGlvbihkZXRlY3RSZXN1bHRzLCBbJ3RvcCcsICdib3R0b20nXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNUb3BMYXlvdXQobGF5b3V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEFsbG93ZWREaXJlY3Rpb24oZGV0ZWN0UmVzdWx0cywgWydsZWZ0JywgJ3JpZ2h0JywgJ2JvdHRvbSddKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0JvdHRvbUxheW91dChsYXlvdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0QWxsb3dlZERpcmVjdGlvbihkZXRlY3RSZXN1bHRzLCBbJ2xlZnQnLCAncmlnaHQnLCAndG9wJ10pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxheW91dCA9PT0gTWluZExheW91dFR5cGUubGVmdCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEFsbG93ZWREaXJlY3Rpb24oZGV0ZWN0UmVzdWx0cywgWydyaWdodCcsICd0b3AnLCAnYm90dG9tJ10pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxheW91dCA9PT0gTWluZExheW91dFR5cGUucmlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRBbGxvd2VkRGlyZWN0aW9uKGRldGVjdFJlc3VsdHMsIFsnbGVmdCcsICd0b3AnLCAnYm90dG9tJ10pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QWxsb3dlZERpcmVjdGlvbiA9IChkZXRlY3RSZXN1bHRzOiBEZXRlY3RSZXN1bHRbXSwgaWxsZWdhbERpcmVjdGlvbnM6IERldGVjdFJlc3VsdFtdKTogRGV0ZWN0UmVzdWx0W10gfCBudWxsID0+IHtcbiAgICBjb25zdCBkaXJlY3Rpb25zID0gZGV0ZWN0UmVzdWx0cztcbiAgICBpbGxlZ2FsRGlyZWN0aW9ucy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBib3R0b21EaXJlY3Rpb25JbmRleCA9IGRpcmVjdGlvbnMuZmluZEluZGV4KGRpcmVjdGlvbiA9PiBkaXJlY3Rpb24gPT09IGl0ZW0pO1xuICAgICAgICBpZiAoYm90dG9tRGlyZWN0aW9uSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBkaXJlY3Rpb25zLnNwbGljZShib3R0b21EaXJlY3Rpb25JbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZGlyZWN0aW9ucy5sZW5ndGggPyBkaXJlY3Rpb25zIDogbnVsbDtcbn07XG4iXX0=
54
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aW9uLWNvcnJlY3Rvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21pbmQvc3JjL3V0aWxzL2RpcmVjdGlvbi1jb3JyZWN0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUksT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUd6QyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEtBQWlCLEVBQUUsSUFBYyxFQUFFLGFBQTZCLEVBQXlCLEVBQUU7SUFDMUgsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDOUQsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDLHlCQUF5QixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQXFCLENBQUMsQ0FBQztRQUN0RyxJQUFJLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ2hDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztZQUM1RCxNQUFNLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDL0QsT0FBTyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUMxRTtRQUVELElBQUksWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQzVCLE9BQU8sbUJBQW1CLENBQUMsYUFBYSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUN4RDtRQUVELElBQUksYUFBYSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQzdCLE9BQU8sbUJBQW1CLENBQUMsYUFBYSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztTQUN2RDtRQUVELElBQUksWUFBWSxLQUFLLGNBQWMsQ0FBQyxNQUFNLEVBQUU7WUFDeEMsT0FBTyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ3pEO1FBRUQsSUFBSSxZQUFZLEtBQUssY0FBYyxDQUFDLFFBQVEsRUFBRTtZQUMxQyxPQUFPLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDdEQ7S0FDSjtTQUFNO1FBQ0gsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLHlCQUF5QixDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBcUIsQ0FBQyxDQUFDO1FBQ3pGLElBQUksZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDMUIsT0FBTyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUNoRTtRQUVELElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3JCLE9BQU8sbUJBQW1CLENBQUMsYUFBYSxFQUFFLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQzFFO1FBRUQsSUFBSSxjQUFjLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDeEIsT0FBTyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7U0FDdkU7UUFFRCxJQUFJLE1BQU0sS0FBSyxjQUFjLENBQUMsSUFBSSxFQUFFO1lBQ2hDLE9BQU8sbUJBQW1CLENBQUMsYUFBYSxFQUFFLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDO1NBQ3pFO1FBRUQsSUFBSSxNQUFNLEtBQUssY0FBYyxDQUFDLEtBQUssRUFBRTtZQUNqQyxPQUFPLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztTQUN4RTtLQUNKO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsQ0FBQyxhQUE2QixFQUFFLGlCQUFpQyxFQUF5QixFQUFFO0lBQzNILE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQztJQUNqQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDN0IsTUFBTSxvQkFBb0IsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ25GLElBQUksb0JBQW9CLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDN0IsVUFBVSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUM5QztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNqRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXRlY3RSZXN1bHQsIE1pbmRFbGVtZW50LCBNaW5kTm9kZSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgaXNCb3R0b21MYXlvdXQsIGlzUmlnaHRMYXlvdXQsIGlzTGVmdExheW91dCwgTWluZExheW91dFR5cGUsIGlzU3RhbmRhcmRMYXlvdXQsIGlzVG9wTGF5b3V0LCBBYnN0cmFjdE5vZGUgfSBmcm9tICdAcGxhaXQvbGF5b3V0cyc7XG5pbXBvcnQgeyBNaW5kUXVlcmllcyB9IGZyb20gJy4uL3F1ZXJpZXMnO1xuaW1wb3J0IHsgUGxhaXRCb2FyZCB9IGZyb20gJ0BwbGFpdC9jb3JlJztcblxuZXhwb3J0IGNvbnN0IGRpcmVjdGlvbkNvcnJlY3RvciA9IChib2FyZDogUGxhaXRCb2FyZCwgbm9kZTogTWluZE5vZGUsIGRldGVjdFJlc3VsdHM6IERldGVjdFJlc3VsdFtdKTogRGV0ZWN0UmVzdWx0W10gfCBudWxsID0+IHtcbiAgICBpZiAoIW5vZGUub3JpZ2luLmlzUm9vdCAmJiAhQWJzdHJhY3ROb2RlLmlzQWJzdHJhY3Qobm9kZS5vcmlnaW4pKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudExheW91dCA9IE1pbmRRdWVyaWVzLmdldENvcnJlY3RMYXlvdXRCeUVsZW1lbnQoYm9hcmQsIG5vZGU/LnBhcmVudC5vcmlnaW4gYXMgTWluZEVsZW1lbnQpO1xuICAgICAgICBpZiAoaXNTdGFuZGFyZExheW91dChwYXJlbnRMYXlvdXQpKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBub2RlLnBhcmVudC5jaGlsZHJlbi5maW5kSW5kZXgoeCA9PiB4ID09PSBub2RlKTtcbiAgICAgICAgICAgIGNvbnN0IGlzTGVmdCA9IGlkeCA+PSAobm9kZS5wYXJlbnQub3JpZ2luLnJpZ2h0Tm9kZUNvdW50IHx8IDApO1xuICAgICAgICAgICAgcmV0dXJuIGdldEFsbG93ZWREaXJlY3Rpb24oZGV0ZWN0UmVzdWx0cywgW2lzTGVmdCA/ICdyaWdodCcgOiAnbGVmdCddKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0xlZnRMYXlvdXQocGFyZW50TGF5b3V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEFsbG93ZWREaXJlY3Rpb24oZGV0ZWN0UmVzdWx0cywgWydyaWdodCddKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1JpZ2h0TGF5b3V0KHBhcmVudExheW91dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRBbGxvd2VkRGlyZWN0aW9uKGRldGVjdFJlc3VsdHMsIFsnbGVmdCddKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJlbnRMYXlvdXQgPT09IE1pbmRMYXlvdXRUeXBlLnVwd2FyZCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEFsbG93ZWREaXJlY3Rpb24oZGV0ZWN0UmVzdWx0cywgWydib3R0b20nXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyZW50TGF5b3V0ID09PSBNaW5kTGF5b3V0VHlwZS5kb3dud2FyZCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEFsbG93ZWREaXJlY3Rpb24oZGV0ZWN0UmVzdWx0cywgWyd0b3AnXSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBsYXlvdXQgPSBNaW5kUXVlcmllcy5nZXRDb3JyZWN0TGF5b3V0QnlFbGVtZW50KGJvYXJkLCBub2RlPy5vcmlnaW4gYXMgTWluZEVsZW1lbnQpO1xuICAgICAgICBpZiAoaXNTdGFuZGFyZExheW91dChsYXlvdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0QWxsb3dlZERpcmVjdGlvbihkZXRlY3RSZXN1bHRzLCBbJ3RvcCcsICdib3R0b20nXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNUb3BMYXlvdXQobGF5b3V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEFsbG93ZWREaXJlY3Rpb24oZGV0ZWN0UmVzdWx0cywgWydsZWZ0JywgJ3JpZ2h0JywgJ2JvdHRvbSddKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0JvdHRvbUxheW91dChsYXlvdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0QWxsb3dlZERpcmVjdGlvbihkZXRlY3RSZXN1bHRzLCBbJ2xlZnQnLCAncmlnaHQnLCAndG9wJ10pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxheW91dCA9PT0gTWluZExheW91dFR5cGUubGVmdCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldEFsbG93ZWREaXJlY3Rpb24oZGV0ZWN0UmVzdWx0cywgWydyaWdodCcsICd0b3AnLCAnYm90dG9tJ10pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxheW91dCA9PT0gTWluZExheW91dFR5cGUucmlnaHQpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXRBbGxvd2VkRGlyZWN0aW9uKGRldGVjdFJlc3VsdHMsIFsnbGVmdCcsICd0b3AnLCAnYm90dG9tJ10pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0QWxsb3dlZERpcmVjdGlvbiA9IChkZXRlY3RSZXN1bHRzOiBEZXRlY3RSZXN1bHRbXSwgaWxsZWdhbERpcmVjdGlvbnM6IERldGVjdFJlc3VsdFtdKTogRGV0ZWN0UmVzdWx0W10gfCBudWxsID0+IHtcbiAgICBjb25zdCBkaXJlY3Rpb25zID0gZGV0ZWN0UmVzdWx0cztcbiAgICBpbGxlZ2FsRGlyZWN0aW9ucy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCBib3R0b21EaXJlY3Rpb25JbmRleCA9IGRpcmVjdGlvbnMuZmluZEluZGV4KGRpcmVjdGlvbiA9PiBkaXJlY3Rpb24gPT09IGl0ZW0pO1xuICAgICAgICBpZiAoYm90dG9tRGlyZWN0aW9uSW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBkaXJlY3Rpb25zLnNwbGljZShib3R0b21EaXJlY3Rpb25JbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gZGlyZWN0aW9ucy5sZW5ndGggPyBkaXJlY3Rpb25zIDogbnVsbDtcbn07XG4iXX0=
@@ -0,0 +1,118 @@
1
+ import { isChildElement } from './mind';
2
+ import { Path, PlaitBoard, Transforms, ELEMENT_TO_COMPONENT, PlaitElement } from '@plait/core';
3
+ import { isHorizontalLogicLayout, isIndentedLayout, isLeftLayout, isRightLayout, isTopLayout, isBottomLayout, isVerticalLogicLayout } from '@plait/layouts';
4
+ import { deleteElementHandleAbstract, findUpElement, insertElementHandleAbstract } from '../utils';
5
+ import { MindTransforms } from '../transforms';
6
+ export const isValidTarget = (origin, target) => {
7
+ return origin !== target && !isChildElement(origin, target);
8
+ };
9
+ export const addActiveOnDragOrigin = (activeElement, isOrigin = true) => {
10
+ const activeComponent = PlaitElement.getComponent(activeElement);
11
+ if (isOrigin) {
12
+ activeComponent.g.classList.add('dragging-origin');
13
+ }
14
+ else {
15
+ activeComponent.g.classList.add('dragging-child');
16
+ }
17
+ !activeElement.isCollapsed &&
18
+ activeElement.children.forEach(child => {
19
+ addActiveOnDragOrigin(child, false);
20
+ });
21
+ };
22
+ export const removeActiveOnDragOrigin = (activeElement, isOrigin = true) => {
23
+ const activeComponent = PlaitElement.getComponent(activeElement);
24
+ if (isOrigin) {
25
+ activeComponent.g.classList.remove('dragging-origin');
26
+ }
27
+ else {
28
+ activeComponent.g.classList.remove('dragging-child');
29
+ }
30
+ !activeElement.isCollapsed &&
31
+ activeElement.children.forEach(child => {
32
+ removeActiveOnDragOrigin(child, false);
33
+ });
34
+ };
35
+ export const updatePathByLayoutAndDropTarget = (targetPath, layout, dropTarget) => {
36
+ // 上下布局:左右是兄弟节点,上下是子节点
37
+ if (isVerticalLogicLayout(layout)) {
38
+ if (isTopLayout(layout) && dropTarget.detectResult === 'top') {
39
+ targetPath.push(dropTarget.target.children.length);
40
+ }
41
+ if (isBottomLayout(layout) && dropTarget.detectResult === 'bottom') {
42
+ targetPath.push(dropTarget.target.children.length);
43
+ }
44
+ // 如果是左,位置不变,右则插入到下一个兄弟节点
45
+ if (dropTarget.detectResult === 'right') {
46
+ targetPath = Path.next(targetPath);
47
+ }
48
+ }
49
+ // 水平布局/标准布局:上下是兄弟节点,左右是子节点
50
+ if (isHorizontalLogicLayout(layout)) {
51
+ if (dropTarget.detectResult === 'right') {
52
+ targetPath.push(dropTarget.target.children.length);
53
+ }
54
+ if (dropTarget.detectResult === 'left') {
55
+ targetPath.push(dropTarget.target.children.length);
56
+ }
57
+ // 如果是上,位置不变,下插入到下一个兄弟节点
58
+ if (dropTarget.detectResult === 'bottom') {
59
+ targetPath = Path.next(targetPath);
60
+ }
61
+ }
62
+ // 缩进布局:上下是兄弟节点,左右是子节点,但上(左上/右上),探测到上是子节点,下则位置不变,反之同理。
63
+ if (isIndentedLayout(layout)) {
64
+ if (isTopLayout(layout) && dropTarget.detectResult === 'top') {
65
+ targetPath = Path.next(targetPath);
66
+ }
67
+ if (isBottomLayout(layout) && dropTarget.detectResult === 'bottom') {
68
+ targetPath = Path.next(targetPath);
69
+ }
70
+ if (isLeftLayout(layout) && dropTarget.detectResult === 'left') {
71
+ targetPath.push(dropTarget.target.children.length);
72
+ }
73
+ if (isRightLayout(layout) && dropTarget.detectResult === 'right') {
74
+ targetPath.push(dropTarget.target.children.length);
75
+ }
76
+ }
77
+ return targetPath;
78
+ };
79
+ export const updateRightNodeCount = (board, activeComponent, targetComponent, detectResult) => {
80
+ let rightNodeCount;
81
+ const mindElement = findUpElement(targetComponent.node.origin).root;
82
+ const mindComponent = ELEMENT_TO_COMPONENT.get(mindElement);
83
+ const activeIndex = mindComponent?.root.children.indexOf(activeComponent.node);
84
+ const targetIndex = mindComponent?.root.children.indexOf(targetComponent.node);
85
+ const isActiveOnRight = activeIndex !== -1 && activeIndex <= activeComponent.parent.origin.rightNodeCount - 1;
86
+ const isTargetOnRight = targetComponent.parent && targetIndex !== -1 && targetIndex <= targetComponent.parent.origin.rightNodeCount - 1;
87
+ const isBothOnRight = isActiveOnRight && isTargetOnRight;
88
+ const rootChildCount = mindComponent.root.children?.length;
89
+ const rootRightNodeCount = mindComponent?.root.origin.rightNodeCount;
90
+ if (!isBothOnRight) {
91
+ if (isActiveOnRight) {
92
+ rightNodeCount = rootChildCount < rootRightNodeCount ? rootChildCount - 1 : rootRightNodeCount - 1;
93
+ Transforms.setNode(board, { rightNodeCount }, PlaitBoard.findPath(board, activeComponent.parent.origin));
94
+ }
95
+ if (isTargetOnRight && detectResult !== 'right') {
96
+ rightNodeCount = rootChildCount < rootRightNodeCount ? rootRightNodeCount : rootRightNodeCount + 1;
97
+ Transforms.setNode(board, { rightNodeCount }, PlaitBoard.findPath(board, targetComponent.parent.origin));
98
+ }
99
+ //二级子节点拖动到根节点左侧
100
+ if (targetComponent.node.origin.isRoot && detectResult === 'left' && activeIndex === -1) {
101
+ rightNodeCount = rootChildCount;
102
+ Transforms.setNode(board, { rightNodeCount }, PlaitBoard.findPath(board, targetComponent.element));
103
+ }
104
+ }
105
+ };
106
+ const IS_DRAGGING = new WeakMap();
107
+ export const isDragging = (board) => {
108
+ return !!IS_DRAGGING.get(board);
109
+ };
110
+ export const setIsDragging = (board, state) => {
111
+ IS_DRAGGING.set(board, state);
112
+ };
113
+ export const updateAbstractInDnd = (board, deletableElements, originPath) => {
114
+ const refs = insertElementHandleAbstract(board, originPath, false);
115
+ deleteElementHandleAbstract(board, deletableElements, refs);
116
+ MindTransforms.setAbstractsByRefs(board, refs);
117
+ };
118
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvbWluZC9zcmMvdXRpbHMvZG5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDeEMsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLG9CQUFvQixFQUFFLFlBQVksRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvRixPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQixZQUFZLEVBQ1osYUFBYSxFQUNiLFdBQVcsRUFFWCxjQUFjLEVBQ2QscUJBQXFCLEVBQ3hCLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEIsT0FBTyxFQUFFLDJCQUEyQixFQUFFLGFBQWEsRUFBRSwyQkFBMkIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVuRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLGFBQWEsR0FBRyxDQUFDLE1BQW1CLEVBQUUsTUFBbUIsRUFBRSxFQUFFO0lBQ3RFLE9BQU8sTUFBTSxLQUFLLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDaEUsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsQ0FBQyxhQUEwQixFQUFFLFFBQVEsR0FBRyxJQUFJLEVBQUUsRUFBRTtJQUNqRixNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBc0IsQ0FBQztJQUN0RixJQUFJLFFBQVEsRUFBRTtRQUNWLGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0tBQ3REO1NBQU07UUFDSCxlQUFlLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztLQUNyRDtJQUNELENBQUMsYUFBYSxDQUFDLFdBQVc7UUFDdEIsYUFBYSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbkMscUJBQXFCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hDLENBQUMsQ0FBQyxDQUFDO0FBQ1gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxhQUEwQixFQUFFLFFBQVEsR0FBRyxJQUFJLEVBQUUsRUFBRTtJQUNwRixNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBc0IsQ0FBQztJQUN0RixJQUFJLFFBQVEsRUFBRTtRQUNWLGVBQWUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0tBQ3pEO1NBQU07UUFDSCxlQUFlLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztLQUN4RDtJQUNELENBQUMsYUFBYSxDQUFDLFdBQVc7UUFDdEIsYUFBYSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbkMsd0JBQXdCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxDQUFDO0FBQ1gsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sK0JBQStCLEdBQUcsQ0FDM0MsVUFBZ0IsRUFDaEIsTUFBc0IsRUFDdEIsVUFBK0QsRUFDakUsRUFBRTtJQUNBLHNCQUFzQjtJQUN0QixJQUFJLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQy9CLElBQUksV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxZQUFZLEtBQUssS0FBSyxFQUFFO1lBQzFELFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdEQ7UUFDRCxJQUFJLGNBQWMsQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsWUFBWSxLQUFLLFFBQVEsRUFBRTtZQUNoRSxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3REO1FBQ0QseUJBQXlCO1FBQ3pCLElBQUksVUFBVSxDQUFDLFlBQVksS0FBSyxPQUFPLEVBQUU7WUFDckMsVUFBVSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDdEM7S0FDSjtJQUNELDJCQUEyQjtJQUMzQixJQUFJLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ2pDLElBQUksVUFBVSxDQUFDLFlBQVksS0FBSyxPQUFPLEVBQUU7WUFDckMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN0RDtRQUNELElBQUksVUFBVSxDQUFDLFlBQVksS0FBSyxNQUFNLEVBQUU7WUFDcEMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN0RDtRQUNELHdCQUF3QjtRQUN4QixJQUFJLFVBQVUsQ0FBQyxZQUFZLEtBQUssUUFBUSxFQUFFO1lBQ3RDLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3RDO0tBQ0o7SUFDRCxzREFBc0Q7SUFDdEQsSUFBSSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUMxQixJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsWUFBWSxLQUFLLEtBQUssRUFBRTtZQUMxRCxVQUFVLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUN0QztRQUNELElBQUksY0FBYyxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxZQUFZLEtBQUssUUFBUSxFQUFFO1lBQ2hFLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3RDO1FBQ0QsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksVUFBVSxDQUFDLFlBQVksS0FBSyxNQUFNLEVBQUU7WUFDNUQsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUN0RDtRQUNELElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxZQUFZLEtBQUssT0FBTyxFQUFFO1lBQzlELFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdEQ7S0FDSjtJQUNELE9BQU8sVUFBVSxDQUFDO0FBQ3RCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQ2hDLEtBQWlCLEVBQ2pCLGVBQWtDLEVBQ2xDLGVBQWtDLEVBQ2xDLFlBQTBCLEVBQzVCLEVBQUU7SUFDQSxJQUFJLGNBQWMsQ0FBQztJQUNuQixNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDcEUsTUFBTSxhQUFhLEdBQUcsb0JBQW9CLENBQUMsR0FBRyxDQUFDLFdBQXdCLENBQXVCLENBQUM7SUFDL0YsTUFBTSxXQUFXLEdBQUcsYUFBYSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQVcsQ0FBQztJQUN6RixNQUFNLFdBQVcsR0FBRyxhQUFhLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBVyxDQUFDO0lBQ3pGLE1BQU0sZUFBZSxHQUFHLFdBQVcsS0FBSyxDQUFDLENBQUMsSUFBSSxXQUFXLElBQUssZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsY0FBeUIsR0FBRyxDQUFDLENBQUM7SUFDMUgsTUFBTSxlQUFlLEdBQ2pCLGVBQWUsQ0FBQyxNQUFNLElBQUksV0FBVyxLQUFLLENBQUMsQ0FBQyxJQUFJLFdBQVcsSUFBSyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxjQUF5QixHQUFHLENBQUMsQ0FBQztJQUNoSSxNQUFNLGFBQWEsR0FBRyxlQUFlLElBQUksZUFBZSxDQUFDO0lBQ3pELE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQWdCLENBQUM7SUFDckUsTUFBTSxrQkFBa0IsR0FBRyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUF3QixDQUFDO0lBRS9FLElBQUksQ0FBQyxhQUFhLEVBQUU7UUFDaEIsSUFBSSxlQUFlLEVBQUU7WUFDakIsY0FBYyxHQUFHLGNBQWMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO1lBQ25HLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsY0FBYyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQzVHO1FBRUQsSUFBSSxlQUFlLElBQUksWUFBWSxLQUFLLE9BQU8sRUFBRTtZQUM3QyxjQUFjLEdBQUcsY0FBYyxHQUFHLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO1lBQ25HLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsY0FBYyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQzVHO1FBRUQsZUFBZTtRQUNmLElBQUksZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLFlBQVksS0FBSyxNQUFNLElBQUksV0FBVyxLQUFLLENBQUMsQ0FBQyxFQUFFO1lBQ3JGLGNBQWMsR0FBRyxjQUFjLENBQUM7WUFDaEMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxjQUFjLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztTQUN0RztLQUNKO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSxXQUFXLEdBQUcsSUFBSSxPQUFPLEVBQXVCLENBQUM7QUFFdkQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQzVDLE9BQU8sQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDcEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBaUIsRUFBRSxLQUFjLEVBQUUsRUFBRTtJQUMvRCxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNsQyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLEtBQWlCLEVBQUUsaUJBQWdDLEVBQUUsVUFBZ0IsRUFBRSxFQUFFO0lBQ3pHLE1BQU0sSUFBSSxHQUFHLDJCQUEyQixDQUFDLEtBQUssRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDbkUsMkJBQTJCLENBQUMsS0FBSyxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVELGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbkQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTWluZEVsZW1lbnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2VsZW1lbnQnO1xuaW1wb3J0IHsgTWluZE5vZGVDb21wb25lbnQgfSBmcm9tICcuLi9ub2RlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBpc0NoaWxkRWxlbWVudCB9IGZyb20gJy4vbWluZCc7XG5pbXBvcnQgeyBQYXRoLCBQbGFpdEJvYXJkLCBUcmFuc2Zvcm1zLCBFTEVNRU5UX1RPX0NPTVBPTkVOVCwgUGxhaXRFbGVtZW50IH0gZnJvbSAnQHBsYWl0L2NvcmUnO1xuaW1wb3J0IHtcbiAgICBpc0hvcml6b250YWxMb2dpY0xheW91dCxcbiAgICBpc0luZGVudGVkTGF5b3V0LFxuICAgIGlzTGVmdExheW91dCxcbiAgICBpc1JpZ2h0TGF5b3V0LFxuICAgIGlzVG9wTGF5b3V0LFxuICAgIE1pbmRMYXlvdXRUeXBlLFxuICAgIGlzQm90dG9tTGF5b3V0LFxuICAgIGlzVmVydGljYWxMb2dpY0xheW91dFxufSBmcm9tICdAcGxhaXQvbGF5b3V0cyc7XG5pbXBvcnQgeyBQbGFpdE1pbmQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2VsZW1lbnQnO1xuaW1wb3J0IHsgRGV0ZWN0UmVzdWx0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ub2RlJztcbmltcG9ydCB7IGRlbGV0ZUVsZW1lbnRIYW5kbGVBYnN0cmFjdCwgZmluZFVwRWxlbWVudCwgaW5zZXJ0RWxlbWVudEhhbmRsZUFic3RyYWN0IH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgUGxhaXRNaW5kQ29tcG9uZW50IH0gZnJvbSAnLi4vbWluZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWluZFRyYW5zZm9ybXMgfSBmcm9tICcuLi90cmFuc2Zvcm1zJztcblxuZXhwb3J0IGNvbnN0IGlzVmFsaWRUYXJnZXQgPSAob3JpZ2luOiBNaW5kRWxlbWVudCwgdGFyZ2V0OiBNaW5kRWxlbWVudCkgPT4ge1xuICAgIHJldHVybiBvcmlnaW4gIT09IHRhcmdldCAmJiAhaXNDaGlsZEVsZW1lbnQob3JpZ2luLCB0YXJnZXQpO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZEFjdGl2ZU9uRHJhZ09yaWdpbiA9IChhY3RpdmVFbGVtZW50OiBNaW5kRWxlbWVudCwgaXNPcmlnaW4gPSB0cnVlKSA9PiB7XG4gICAgY29uc3QgYWN0aXZlQ29tcG9uZW50ID0gUGxhaXRFbGVtZW50LmdldENvbXBvbmVudChhY3RpdmVFbGVtZW50KSBhcyBNaW5kTm9kZUNvbXBvbmVudDtcbiAgICBpZiAoaXNPcmlnaW4pIHtcbiAgICAgICAgYWN0aXZlQ29tcG9uZW50LmcuY2xhc3NMaXN0LmFkZCgnZHJhZ2dpbmctb3JpZ2luJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYWN0aXZlQ29tcG9uZW50LmcuY2xhc3NMaXN0LmFkZCgnZHJhZ2dpbmctY2hpbGQnKTtcbiAgICB9XG4gICAgIWFjdGl2ZUVsZW1lbnQuaXNDb2xsYXBzZWQgJiZcbiAgICAgICAgYWN0aXZlRWxlbWVudC5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgICAgICAgIGFkZEFjdGl2ZU9uRHJhZ09yaWdpbihjaGlsZCwgZmFsc2UpO1xuICAgICAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVBY3RpdmVPbkRyYWdPcmlnaW4gPSAoYWN0aXZlRWxlbWVudDogTWluZEVsZW1lbnQsIGlzT3JpZ2luID0gdHJ1ZSkgPT4ge1xuICAgIGNvbnN0IGFjdGl2ZUNvbXBvbmVudCA9IFBsYWl0RWxlbWVudC5nZXRDb21wb25lbnQoYWN0aXZlRWxlbWVudCkgYXMgTWluZE5vZGVDb21wb25lbnQ7XG4gICAgaWYgKGlzT3JpZ2luKSB7XG4gICAgICAgIGFjdGl2ZUNvbXBvbmVudC5nLmNsYXNzTGlzdC5yZW1vdmUoJ2RyYWdnaW5nLW9yaWdpbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdGl2ZUNvbXBvbmVudC5nLmNsYXNzTGlzdC5yZW1vdmUoJ2RyYWdnaW5nLWNoaWxkJyk7XG4gICAgfVxuICAgICFhY3RpdmVFbGVtZW50LmlzQ29sbGFwc2VkICYmXG4gICAgICAgIGFjdGl2ZUVsZW1lbnQuY2hpbGRyZW4uZm9yRWFjaChjaGlsZCA9PiB7XG4gICAgICAgICAgICByZW1vdmVBY3RpdmVPbkRyYWdPcmlnaW4oY2hpbGQsIGZhbHNlKTtcbiAgICAgICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXBkYXRlUGF0aEJ5TGF5b3V0QW5kRHJvcFRhcmdldCA9IChcbiAgICB0YXJnZXRQYXRoOiBQYXRoLFxuICAgIGxheW91dDogTWluZExheW91dFR5cGUsXG4gICAgZHJvcFRhcmdldDogeyB0YXJnZXQ6IE1pbmRFbGVtZW50OyBkZXRlY3RSZXN1bHQ6IERldGVjdFJlc3VsdCB9XG4pID0+IHtcbiAgICAvLyDkuIrkuIvluIPlsYDvvJrlt6blj7PmmK/lhYTlvJ/oioLngrnvvIzkuIrkuIvmmK/lrZDoioLngrlcbiAgICBpZiAoaXNWZXJ0aWNhbExvZ2ljTGF5b3V0KGxheW91dCkpIHtcbiAgICAgICAgaWYgKGlzVG9wTGF5b3V0KGxheW91dCkgJiYgZHJvcFRhcmdldC5kZXRlY3RSZXN1bHQgPT09ICd0b3AnKSB7XG4gICAgICAgICAgICB0YXJnZXRQYXRoLnB1c2goZHJvcFRhcmdldC50YXJnZXQuY2hpbGRyZW4ubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNCb3R0b21MYXlvdXQobGF5b3V0KSAmJiBkcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICAgIHRhcmdldFBhdGgucHVzaChkcm9wVGFyZ2V0LnRhcmdldC5jaGlsZHJlbi5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIOWmguaenOaYr+W3pu+8jOS9jee9ruS4jeWPmO+8jOWPs+WImeaPkuWFpeWIsOS4i+S4gOS4quWFhOW8n+iKgueCuVxuICAgICAgICBpZiAoZHJvcFRhcmdldC5kZXRlY3RSZXN1bHQgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgIHRhcmdldFBhdGggPSBQYXRoLm5leHQodGFyZ2V0UGF0aCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8g5rC05bmz5biD5bGAL+agh+WHhuW4g+WxgO+8muS4iuS4i+aYr+WFhOW8n+iKgueCue+8jOW3puWPs+aYr+WtkOiKgueCuVxuICAgIGlmIChpc0hvcml6b250YWxMb2dpY0xheW91dChsYXlvdXQpKSB7XG4gICAgICAgIGlmIChkcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgdGFyZ2V0UGF0aC5wdXNoKGRyb3BUYXJnZXQudGFyZ2V0LmNoaWxkcmVuLmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRyb3BUYXJnZXQuZGV0ZWN0UmVzdWx0ID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgIHRhcmdldFBhdGgucHVzaChkcm9wVGFyZ2V0LnRhcmdldC5jaGlsZHJlbi5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIOWmguaenOaYr+S4iu+8jOS9jee9ruS4jeWPmO+8jOS4i+aPkuWFpeWIsOS4i+S4gOS4quWFhOW8n+iKgueCuVxuICAgICAgICBpZiAoZHJvcFRhcmdldC5kZXRlY3RSZXN1bHQgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgICB0YXJnZXRQYXRoID0gUGF0aC5uZXh0KHRhcmdldFBhdGgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIOe8qei/m+W4g+WxgO+8muS4iuS4i+aYr+WFhOW8n+iKgueCue+8jOW3puWPs+aYr+WtkOiKgueCue+8jOS9huS4iu+8iOW3puS4ii/lj7PkuIrvvInvvIzmjqLmtYvliLDkuIrmmK/lrZDoioLngrnvvIzkuIvliJnkvY3nva7kuI3lj5jvvIzlj43kuYvlkIznkIbjgIJcbiAgICBpZiAoaXNJbmRlbnRlZExheW91dChsYXlvdXQpKSB7XG4gICAgICAgIGlmIChpc1RvcExheW91dChsYXlvdXQpICYmIGRyb3BUYXJnZXQuZGV0ZWN0UmVzdWx0ID09PSAndG9wJykge1xuICAgICAgICAgICAgdGFyZ2V0UGF0aCA9IFBhdGgubmV4dCh0YXJnZXRQYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNCb3R0b21MYXlvdXQobGF5b3V0KSAmJiBkcm9wVGFyZ2V0LmRldGVjdFJlc3VsdCA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICAgIHRhcmdldFBhdGggPSBQYXRoLm5leHQodGFyZ2V0UGF0aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTGVmdExheW91dChsYXlvdXQpICYmIGRyb3BUYXJnZXQuZGV0ZWN0UmVzdWx0ID09PSAnbGVmdCcpIHtcbiAgICAgICAgICAgIHRhcmdldFBhdGgucHVzaChkcm9wVGFyZ2V0LnRhcmdldC5jaGlsZHJlbi5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1JpZ2h0TGF5b3V0KGxheW91dCkgJiYgZHJvcFRhcmdldC5kZXRlY3RSZXN1bHQgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICAgIHRhcmdldFBhdGgucHVzaChkcm9wVGFyZ2V0LnRhcmdldC5jaGlsZHJlbi5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXRQYXRoO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVJpZ2h0Tm9kZUNvdW50ID0gKFxuICAgIGJvYXJkOiBQbGFpdEJvYXJkLFxuICAgIGFjdGl2ZUNvbXBvbmVudDogTWluZE5vZGVDb21wb25lbnQsXG4gICAgdGFyZ2V0Q29tcG9uZW50OiBNaW5kTm9kZUNvbXBvbmVudCxcbiAgICBkZXRlY3RSZXN1bHQ6IERldGVjdFJlc3VsdFxuKSA9PiB7XG4gICAgbGV0IHJpZ2h0Tm9kZUNvdW50O1xuICAgIGNvbnN0IG1pbmRFbGVtZW50ID0gZmluZFVwRWxlbWVudCh0YXJnZXRDb21wb25lbnQubm9kZS5vcmlnaW4pLnJvb3Q7XG4gICAgY29uc3QgbWluZENvbXBvbmVudCA9IEVMRU1FTlRfVE9fQ09NUE9ORU5ULmdldChtaW5kRWxlbWVudCBhcyBQbGFpdE1pbmQpIGFzIFBsYWl0TWluZENvbXBvbmVudDtcbiAgICBjb25zdCBhY3RpdmVJbmRleCA9IG1pbmRDb21wb25lbnQ/LnJvb3QuY2hpbGRyZW4uaW5kZXhPZihhY3RpdmVDb21wb25lbnQubm9kZSkgYXMgbnVtYmVyO1xuICAgIGNvbnN0IHRhcmdldEluZGV4ID0gbWluZENvbXBvbmVudD8ucm9vdC5jaGlsZHJlbi5pbmRleE9mKHRhcmdldENvbXBvbmVudC5ub2RlKSBhcyBudW1iZXI7XG4gICAgY29uc3QgaXNBY3RpdmVPblJpZ2h0ID0gYWN0aXZlSW5kZXggIT09IC0xICYmIGFjdGl2ZUluZGV4IDw9IChhY3RpdmVDb21wb25lbnQucGFyZW50Lm9yaWdpbi5yaWdodE5vZGVDb3VudCBhcyBudW1iZXIpIC0gMTtcbiAgICBjb25zdCBpc1RhcmdldE9uUmlnaHQgPVxuICAgICAgICB0YXJnZXRDb21wb25lbnQucGFyZW50ICYmIHRhcmdldEluZGV4ICE9PSAtMSAmJiB0YXJnZXRJbmRleCA8PSAodGFyZ2V0Q29tcG9uZW50LnBhcmVudC5vcmlnaW4ucmlnaHROb2RlQ291bnQgYXMgbnVtYmVyKSAtIDE7XG4gICAgY29uc3QgaXNCb3RoT25SaWdodCA9IGlzQWN0aXZlT25SaWdodCAmJiBpc1RhcmdldE9uUmlnaHQ7XG4gICAgY29uc3Qgcm9vdENoaWxkQ291bnQgPSBtaW5kQ29tcG9uZW50LnJvb3QuY2hpbGRyZW4/Lmxlbmd0aCBhcyBudW1iZXI7XG4gICAgY29uc3Qgcm9vdFJpZ2h0Tm9kZUNvdW50ID0gbWluZENvbXBvbmVudD8ucm9vdC5vcmlnaW4ucmlnaHROb2RlQ291bnQgYXMgbnVtYmVyO1xuXG4gICAgaWYgKCFpc0JvdGhPblJpZ2h0KSB7XG4gICAgICAgIGlmIChpc0FjdGl2ZU9uUmlnaHQpIHtcbiAgICAgICAgICAgIHJpZ2h0Tm9kZUNvdW50ID0gcm9vdENoaWxkQ291bnQgPCByb290UmlnaHROb2RlQ291bnQgPyByb290Q2hpbGRDb3VudCAtIDEgOiByb290UmlnaHROb2RlQ291bnQgLSAxO1xuICAgICAgICAgICAgVHJhbnNmb3Jtcy5zZXROb2RlKGJvYXJkLCB7IHJpZ2h0Tm9kZUNvdW50IH0sIFBsYWl0Qm9hcmQuZmluZFBhdGgoYm9hcmQsIGFjdGl2ZUNvbXBvbmVudC5wYXJlbnQub3JpZ2luKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNUYXJnZXRPblJpZ2h0ICYmIGRldGVjdFJlc3VsdCAhPT0gJ3JpZ2h0Jykge1xuICAgICAgICAgICAgcmlnaHROb2RlQ291bnQgPSByb290Q2hpbGRDb3VudCA8IHJvb3RSaWdodE5vZGVDb3VudCA/IHJvb3RSaWdodE5vZGVDb3VudCA6IHJvb3RSaWdodE5vZGVDb3VudCArIDE7XG4gICAgICAgICAgICBUcmFuc2Zvcm1zLnNldE5vZGUoYm9hcmQsIHsgcmlnaHROb2RlQ291bnQgfSwgUGxhaXRCb2FyZC5maW5kUGF0aChib2FyZCwgdGFyZ2V0Q29tcG9uZW50LnBhcmVudC5vcmlnaW4pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8v5LqM57qn5a2Q6IqC54K55ouW5Yqo5Yiw5qC56IqC54K55bem5L6nXG4gICAgICAgIGlmICh0YXJnZXRDb21wb25lbnQubm9kZS5vcmlnaW4uaXNSb290ICYmIGRldGVjdFJlc3VsdCA9PT0gJ2xlZnQnICYmIGFjdGl2ZUluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgcmlnaHROb2RlQ291bnQgPSByb290Q2hpbGRDb3VudDtcbiAgICAgICAgICAgIFRyYW5zZm9ybXMuc2V0Tm9kZShib2FyZCwgeyByaWdodE5vZGVDb3VudCB9LCBQbGFpdEJvYXJkLmZpbmRQYXRoKGJvYXJkLCB0YXJnZXRDb21wb25lbnQuZWxlbWVudCkpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuY29uc3QgSVNfRFJBR0dJTkcgPSBuZXcgV2Vha01hcDxQbGFpdEJvYXJkLCBib29sZWFuPigpO1xuXG5leHBvcnQgY29uc3QgaXNEcmFnZ2luZyA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIHJldHVybiAhIUlTX0RSQUdHSU5HLmdldChib2FyZCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0SXNEcmFnZ2luZyA9IChib2FyZDogUGxhaXRCb2FyZCwgc3RhdGU6IGJvb2xlYW4pID0+IHtcbiAgICBJU19EUkFHR0lORy5zZXQoYm9hcmQsIHN0YXRlKTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVBYnN0cmFjdEluRG5kID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBkZWxldGFibGVFbGVtZW50czogTWluZEVsZW1lbnRbXSwgb3JpZ2luUGF0aDogUGF0aCkgPT4ge1xuICAgIGNvbnN0IHJlZnMgPSBpbnNlcnRFbGVtZW50SGFuZGxlQWJzdHJhY3QoYm9hcmQsIG9yaWdpblBhdGgsIGZhbHNlKTtcbiAgICBkZWxldGVFbGVtZW50SGFuZGxlQWJzdHJhY3QoYm9hcmQsIGRlbGV0YWJsZUVsZW1lbnRzLCByZWZzKTtcbiAgICBNaW5kVHJhbnNmb3Jtcy5zZXRBYnN0cmFjdHNCeVJlZnMoYm9hcmQsIHJlZnMpO1xufTtcbiJdfQ==