@plait/core 0.31.0 → 0.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/plugins/with-moving.mjs +13 -5
- package/esm2022/plugins/with-selection.mjs +25 -20
- package/esm2022/transforms/selection.mjs +2 -2
- package/esm2022/utils/draw/arrow.mjs +4 -4
- package/esm2022/utils/math.mjs +55 -1
- package/esm2022/utils/reaction-manager.mjs +2 -1
- package/esm2022/utils/selected-element.mjs +19 -4
- package/fesm2022/plait-core.mjs +112 -30
- package/fesm2022/plait-core.mjs.map +1 -1
- package/package.json +1 -1
- package/styles/styles.scss +6 -0
- package/utils/draw/arrow.d.ts +1 -1
- package/utils/math.d.ts +2 -0
- package/utils/selected-element.d.ts +2 -0
|
@@ -142,6 +142,7 @@ export class AlignReaction {
|
|
|
142
142
|
const alignDeltaX = deltaX;
|
|
143
143
|
const alignDeltaY = deltaY;
|
|
144
144
|
this.activeRectangle.x += deltaX;
|
|
145
|
+
this.activeRectangle.y += deltaY;
|
|
145
146
|
const distributeHorizontalResult = this.alignDistribute(alignRectangles, true);
|
|
146
147
|
const distributeVerticalResult = this.alignDistribute(alignRectangles, false);
|
|
147
148
|
const distributeLines = [...distributeHorizontalResult.distributeLines, ...distributeVerticalResult.distributeLines];
|
|
@@ -367,4 +368,4 @@ function getBarPoint(point, isHorizontal) {
|
|
|
367
368
|
[point[0] + 4, point[1]]
|
|
368
369
|
];
|
|
369
370
|
}
|
|
370
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3Rpb24tbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL3JlYWN0aW9uLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHdkMsT0FBTyxFQUFTLGVBQWUsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFhN0MsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBRTFCLE1BQU0sT0FBTyxhQUFhO0lBR3RCLFlBQW9CLEtBQWlCLEVBQVUsY0FBOEIsRUFBVSxlQUFnQztRQUFuRyxVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVUsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ25ILElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELGlCQUFpQjtRQUNiLE1BQU0sTUFBTSxHQUFzQixFQUFFLENBQUM7UUFDckMsbUJBQW1CLENBQ2YsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLENBQUMsRUFBRTtZQUNILElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3RILE9BQU87YUFDVjtZQUNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxL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QyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3RixDQUFDO0FBQ0QsU0FBUyxXQUFXLENBQUMsS0FBWSxFQUFFLFlBQXFCO0lBQ3BELE9BQU8sWUFBWTtRQUNmLENBQUMsQ0FBQztZQUNJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUMzQjtRQUNILENBQUMsQ0FBQztZQUNJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzQixDQUFDO0FBQ1osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2JvYXJkJztcbmltcG9ydCB7IGNyZWF0ZUcgfSBmcm9tICcuL2RvbS9jb21tb24nO1xuaW1wb3J0IHsgUGxhaXRFbGVtZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9lbGVtZW50JztcbmltcG9ydCB7IEFuY2VzdG9yIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ub2RlJztcbmltcG9ydCB7IFBvaW50LCBSZWN0YW5nbGVDbGllbnQsIFNFTEVDVElPTl9CT1JERVJfQ09MT1IgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IGRlcHRoRmlyc3RSZWN1cnNpb24gfSBmcm9tICcuL3RyZWUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFsaWduUmVmIHtcbiAgICBkZWx0YVg6IG51bWJlcjtcbiAgICBkZWx0YVk6IG51bWJlcjtcbiAgICBnOiBTVkdHRWxlbWVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaXN0cmlidXRlUmVmIHtcbiAgICBiZWZvcmU6IHsgZGlzdGFuY2U6IG51bWJlcjsgaW5kZXg6IG51bWJlciB9W107XG4gICAgYWZ0ZXI6IHsgZGlzdGFuY2U6IG51bWJlcjsgaW5kZXg6IG51bWJlciB9W107XG59XG5cbmNvbnN0IEFMSUdOX1RPTEVSQU5DRSA9IDI7XG5cbmV4cG9ydCBjbGFzcyBBbGlnblJlYWN0aW9uIHtcbiAgICBhbGlnblJlY3RhbmdsZXM6IFJlY3RhbmdsZUNsaWVudFtdO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBib2FyZDogUGxhaXRCb2FyZCwgcHJpdmF0ZSBhY3RpdmVFbGVtZW50czogUGxhaXRFbGVtZW50W10sIHByaXZhdGUgYWN0aXZlUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICAgICAgdGhpcy5hbGlnblJlY3RhbmdsZXMgPSB0aGlzLmdldEFsaWduUmVjdGFuZ2xlKCk7XG4gICAgfVxuXG4gICAgZ2V0QWxpZ25SZWN0YW5nbGUoKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdDogUmVjdGFuZ2xlQ2xpZW50W10gPSBbXTtcbiAgICAgICAgZGVwdGhGaXJzdFJlY3Vyc2lvbjxBbmNlc3Rvcj4oXG4gICAgICAgICAgICB0aGlzLmJvYXJkLFxuICAgICAgICAgICAgbm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFBsYWl0Qm9hcmQuaXNCb2FyZChub2RlKSB8fCB0aGlzLmFjdGl2ZUVsZW1lbnRzLnNvbWUoZWxlbWVudCA9PiBub2RlLmlkID09PSBlbGVtZW50LmlkKSB8fCAhdGhpcy5ib2FyZC5pc0FsaWduKG5vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjdGFuZ2xlID0gdGhpcy5ib2FyZC5nZXRSZWN0YW5nbGUobm9kZSk7XG4gICAgICAgICAgICAgICAgcmVjdGFuZ2xlICYmIHJlc3VsdC5wdXNoKHJlY3RhbmdsZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbm9kZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGUgJiYgKFBsYWl0Qm9hcmQuaXNCb2FyZChub2RlKSB8fCB0aGlzLmJvYXJkLmlzUmVjdXJzaW9uKG5vZGUpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBoYW5kbGVBbGlnbigpOiBBbGlnblJlZiB7XG4gICAgICAgIGNvbnN0IGFsaWduUmVjdGFuZ2xlcyA9IHRoaXMuZ2V0QWxpZ25SZWN0YW5nbGUoKTtcbiAgICAgICAgY29uc3QgZyA9IGNyZWF0ZUcoKTtcbiAgICAgICAgbGV0IGFsaWduTGluZXMgPSBbXTtcblxuICAgICAgICBjb25zdCBvZmZzZXQgPSAxMjtcbiAgICAgICAgbGV0IGRlbHRhWCA9IDA7XG4gICAgICAgIGxldCBkZWx0YVkgPSAwO1xuICAgICAgICBsZXQgaXNDb3JyZWN0WCA9IGZhbHNlO1xuICAgICAgICBsZXQgaXNDb3JyZWN0WSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAobGV0IGFsaWduUmVjdGFuZ2xlIG9mIGFsaWduUmVjdGFuZ2xlcykge1xuICAgICAgICAgICAgY29uc3QgY2xvc2VzdERpc3RhbmNlcyA9IHRoaXMuY2FsY3VsYXRlQ2xvc2VzdERpc3RhbmNlcyh0aGlzLmFjdGl2ZVJlY3RhbmdsZSwgYWxpZ25SZWN0YW5nbGUpO1xuICAgICAgICAgICAgbGV0IGNhbkRyYXdIb3Jpem9udGFsID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIWlzQ29ycmVjdFggJiYgY2xvc2VzdERpc3RhbmNlcy5hYnNYRGlzdGFuY2UgPCBBTElHTl9UT0xFUkFOQ0UpIHtcbiAgICAgICAgICAgICAgICBkZWx0YVggPSBjbG9zZXN0RGlzdGFuY2VzLnhEaXN0YW5jZTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS54IC09IGRlbHRhWDtcbiAgICAgICAgICAgICAgICBpc0NvcnJlY3RYID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjYW5EcmF3SG9yaXpvbnRhbCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjbG9zZXN0RGlzdGFuY2VzLmFic1hEaXN0YW5jZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNhbkRyYXdIb3Jpem9udGFsID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNhbkRyYXdIb3Jpem9udGFsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmVydGljYWxZID0gW1xuICAgICAgICAgICAgICAgICAgICBhbGlnblJlY3RhbmdsZS55LFxuICAgICAgICAgICAgICAgICAgICBhbGlnblJlY3RhbmdsZS55ICsgYWxpZ25SZWN0YW5nbGUuaGVpZ2h0LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS55LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS55ICsgdGhpcy5hY3RpdmVSZWN0YW5nbGUuaGVpZ2h0XG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lVG9wWSA9IE1hdGgubWluKC4uLnZlcnRpY2FsWSkgLSBvZmZzZXQ7XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZUJvdHRvbVkgPSBNYXRoLm1heCguLi52ZXJ0aWNhbFkpICsgb2Zmc2V0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGxlZnRMaW5lID0gW3RoaXMuYWN0aXZlUmVjdGFuZ2xlLngsIGxpbmVUb3BZLCB0aGlzLmFjdGl2ZVJlY3RhbmdsZS54LCBsaW5lQm90dG9tWV07XG4gICAgICAgICAgICAgICAgY29uc3QgbWlkZGxlTGluZSA9IFtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueCArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLndpZHRoIC8gMixcbiAgICAgICAgICAgICAgICAgICAgbGluZVRvcFksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnggKyB0aGlzLmFjdGl2ZVJlY3RhbmdsZS53aWR0aCAvIDIsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVCb3R0b21ZXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICBjb25zdCByaWdodExpbmUgPSBbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnggKyB0aGlzLmFjdGl2ZVJlY3RhbmdsZS53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgbGluZVRvcFksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnggKyB0aGlzLmFjdGl2ZVJlY3RhbmdsZS53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgbGluZUJvdHRvbVlcbiAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkRHJhd0xlZnRMaW5lID1cbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlcy5pbmRleFggPT09IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlcy5pbmRleFggPT09IDEgfHxcbiAgICAgICAgICAgICAgICAgICAgKGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhYID09PSAyICYmIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLndpZHRoID09PSBhbGlnblJlY3RhbmdsZS53aWR0aCk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZERyYXdMZWZ0TGluZSAmJiAhYWxpZ25MaW5lc1swXSkge1xuICAgICAgICAgICAgICAgICAgICBhbGlnbkxpbmVzWzBdID0gbGVmdExpbmU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkRHJhd1JpZ2h0TGluZSA9XG4gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhYID09PSAyIHx8XG4gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhYID09PSAzIHx8XG4gICAgICAgICAgICAgICAgICAgIChjbG9zZXN0RGlzdGFuY2VzLmluZGV4WCA9PT0gMCAmJiB0aGlzLmFjdGl2ZVJlY3RhbmdsZS53aWR0aCA9PT0gYWxpZ25SZWN0YW5nbGUud2lkdGgpO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGREcmF3UmlnaHRMaW5lICYmICFhbGlnbkxpbmVzWzJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWduTGluZXNbMl0gPSByaWdodExpbmU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkRHJhd01pZGRsZUxpbmUgPSBjbG9zZXN0RGlzdGFuY2VzLmluZGV4WCA9PT0gNCB8fCAoIXNob3VsZERyYXdMZWZ0TGluZSAmJiAhc2hvdWxkRHJhd1JpZ2h0TGluZSk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZERyYXdNaWRkbGVMaW5lICYmICFhbGlnbkxpbmVzWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWduTGluZXNbMV0gPSBtaWRkbGVMaW5lO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlzQ29ycmVjdFggPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgY2FuRHJhd1ZlcnRpY2FsID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIWlzQ29ycmVjdFkgJiYgY2xvc2VzdERpc3RhbmNlcy5hYnNZRGlzdGFuY2UgPCBBTElHTl9UT0xFUkFOQ0UpIHtcbiAgICAgICAgICAgICAgICBkZWx0YVkgPSBjbG9zZXN0RGlzdGFuY2VzLnlEaXN0YW5jZTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS55IC09IGRlbHRhWTtcbiAgICAgICAgICAgICAgICBpc0NvcnJlY3RZID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjYW5EcmF3VmVydGljYWwgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNsb3Nlc3REaXN0YW5jZXMuYWJzWURpc3RhbmNlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY2FuRHJhd1ZlcnRpY2FsID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjYW5EcmF3VmVydGljYWwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBob3Jpem9udGFsWCA9IFtcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25SZWN0YW5nbGUueCxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25SZWN0YW5nbGUueCArIGFsaWduUmVjdGFuZ2xlLndpZHRoLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS54LFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS54ICsgdGhpcy5hY3RpdmVSZWN0YW5nbGUud2lkdGhcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVMZWZ0WCA9IE1hdGgubWluKC4uLmhvcml6b250YWxYKSAtIG9mZnNldDtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lUmlnaHRYID0gTWF0aC5tYXgoLi4uaG9yaXpvbnRhbFgpICsgb2Zmc2V0O1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvcExpbmUgPSBbbGluZUxlZnRYLCB0aGlzLmFjdGl2ZVJlY3RhbmdsZS55LCBsaW5lUmlnaHRYLCB0aGlzLmFjdGl2ZVJlY3RhbmdsZS55XTtcbiAgICAgICAgICAgICAgICBjb25zdCBob3Jpem9udGFsTWlkZGxlTGluZSA9IFtcbiAgICAgICAgICAgICAgICAgICAgbGluZUxlZnRYLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS55ICsgdGhpcy5hY3RpdmVSZWN0YW5nbGUuaGVpZ2h0IC8gMixcbiAgICAgICAgICAgICAgICAgICAgbGluZVJpZ2h0WCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueSArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLmhlaWdodCAvIDJcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJvdHRvbUxpbmUgPSBbXG4gICAgICAgICAgICAgICAgICAgIGxpbmVMZWZ0WCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueSArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLmhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgbGluZVJpZ2h0WCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueSArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLmhlaWdodFxuICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzaG91bGREcmF3VG9wTGluZSA9XG4gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhZID09PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhZID09PSAxIHx8XG4gICAgICAgICAgICAgICAgICAgIChjbG9zZXN0RGlzdGFuY2VzLmluZGV4WSA9PT0gMiAmJiB0aGlzLmFjdGl2ZVJlY3RhbmdsZS5oZWlnaHQgPT09IGFsaWduUmVjdGFuZ2xlLmhlaWdodCk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZERyYXdUb3BMaW5lICYmICFhbGlnbkxpbmVzWzNdKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWduTGluZXNbM10gPSB0b3BMaW5lO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZERyYXdCb3R0b21MaW5lID1cbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlcy5pbmRleFkgPT09IDIgfHxcbiAgICAgICAgICAgICAgICAgICAgY2xvc2VzdERpc3RhbmNlcy5pbmRleFkgPT09IDMgfHxcbiAgICAgICAgICAgICAgICAgICAgKGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhZID09PSAwICYmIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLndpZHRoID09PSBhbGlnblJlY3RhbmdsZS53aWR0aCk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZERyYXdCb3R0b21MaW5lICYmICFhbGlnbkxpbmVzWzVdKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWduTGluZXNbNV0gPSBib3R0b21MaW5lO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZERyYXdNaWRkbGVMaW5lID0gY2xvc2VzdERpc3RhbmNlcy5pbmRleFkgPT09IDQgfHwgKCFzaG91bGREcmF3VG9wTGluZSAmJiAhc2hvdWxkRHJhd0JvdHRvbUxpbmUpO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGREcmF3TWlkZGxlTGluZSAmJiAhYWxpZ25MaW5lc1s0XSkge1xuICAgICAgICAgICAgICAgICAgICBhbGlnbkxpbmVzWzRdID0gaG9yaXpvbnRhbE1pZGRsZUxpbmU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWxpZ25EZWx0YVggPSBkZWx0YVg7XG4gICAgICAgIGNvbnN0IGFsaWduRGVsdGFZID0gZGVsdGFZO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnggKz0gZGVsdGFYO1xuICAgICAgICBjb25zdCBkaXN0cmlidXRlSG9yaXpvbnRhbFJlc3VsdCA9IHRoaXMuYWxpZ25EaXN0cmlidXRlKGFsaWduUmVjdGFuZ2xlcywgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IGRpc3RyaWJ1dGVWZXJ0aWNhbFJlc3VsdCA9IHRoaXMuYWxpZ25EaXN0cmlidXRlKGFsaWduUmVjdGFuZ2xlcywgZmFsc2UpO1xuICAgICAgICBjb25zdCBkaXN0cmlidXRlTGluZXM6IFBvaW50W11bXSA9IFsuLi5kaXN0cmlidXRlSG9yaXpvbnRhbFJlc3VsdC5kaXN0cmlidXRlTGluZXMsIC4uLmRpc3RyaWJ1dGVWZXJ0aWNhbFJlc3VsdC5kaXN0cmlidXRlTGluZXNdO1xuICAgICAgICBpZiAoZGlzdHJpYnV0ZUhvcml6b250YWxSZXN1bHQuZGVsdGEpIHtcbiAgICAgICAgICAgIGRlbHRhWCA9IGRpc3RyaWJ1dGVIb3Jpem9udGFsUmVzdWx0LmRlbHRhO1xuICAgICAgICAgICAgaWYgKGFsaWduRGVsdGFYICE9PSBkZWx0YVgpIHtcbiAgICAgICAgICAgICAgICBhbGlnbkxpbmVzWzBdID0gW107XG4gICAgICAgICAgICAgICAgYWxpZ25MaW5lc1sxXSA9IFtdO1xuICAgICAgICAgICAgICAgIGFsaWduTGluZXNbMl0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXN0cmlidXRlVmVydGljYWxSZXN1bHQuZGVsdGEpIHtcbiAgICAgICAgICAgIGRlbHRhWSA9IGRpc3RyaWJ1dGVWZXJ0aWNhbFJlc3VsdC5kZWx0YTtcbiAgICAgICAgICAgIGlmIChhbGlnbkRlbHRhWSAhPT0gZGVsdGFZKSB7XG4gICAgICAgICAgICAgICAgYWxpZ25MaW5lc1szXSA9IFtdO1xuICAgICAgICAgICAgICAgIGFsaWduTGluZXNbNF0gPSBbXTtcbiAgICAgICAgICAgICAgICBhbGlnbkxpbmVzWzVdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWxpZ25MaW5lcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZHJhd0FsaWduTGluZXMoYWxpZ25MaW5lcywgZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGlzdHJpYnV0ZUxpbmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5kcmF3RGlzdHJpYnV0ZUxpbmVzKGRpc3RyaWJ1dGVMaW5lcywgZyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyBkZWx0YVgsIGRlbHRhWSwgZyB9O1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZUNsb3Nlc3REaXN0YW5jZXMoYWN0aXZlUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIGFsaWduUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICAgICAgY29uc3QgYWN0aXZlUmVjdGFuZ2xlQ2VudGVyID0gW2FjdGl2ZVJlY3RhbmdsZS54ICsgYWN0aXZlUmVjdGFuZ2xlLndpZHRoIC8gMiwgYWN0aXZlUmVjdGFuZ2xlLnkgKyBhY3RpdmVSZWN0YW5nbGUuaGVpZ2h0IC8gMl07XG4gICAgICAgIGNvbnN0IGFsaWduUmVjdGFuZ2xlQ2VudGVyID0gW2FsaWduUmVjdGFuZ2xlLnggKyBhbGlnblJlY3RhbmdsZS53aWR0aCAvIDIsIGFsaWduUmVjdGFuZ2xlLnkgKyBhbGlnblJlY3RhbmdsZS5oZWlnaHQgLyAyXTtcblxuICAgICAgICBjb25zdCBjZW50ZXJYRGlzdGFuY2UgPSBhY3RpdmVSZWN0YW5nbGVDZW50ZXJbMF0gLSBhbGlnblJlY3RhbmdsZUNlbnRlclswXTtcbiAgICAgICAgY29uc3QgY2VudGVyWURpc3RhbmNlID0gYWN0aXZlUmVjdGFuZ2xlQ2VudGVyWzFdIC0gYWxpZ25SZWN0YW5nbGVDZW50ZXJbMV07XG5cbiAgICAgICAgY29uc3QgbGVmdFRvTGVmdCA9IGFjdGl2ZVJlY3RhbmdsZS54IC0gYWxpZ25SZWN0YW5nbGUueDtcbiAgICAgICAgY29uc3QgbGVmdFRvUmlnaHQgPSBhY3RpdmVSZWN0YW5nbGUueCAtIChhbGlnblJlY3RhbmdsZS54ICsgYWxpZ25SZWN0YW5nbGUud2lkdGgpO1xuICAgICAgICBjb25zdCByaWdodFRvUmlnaHQgPSBhY3RpdmVSZWN0YW5nbGUueCArIGFjdGl2ZVJlY3RhbmdsZS53aWR0aCAtIChhbGlnblJlY3RhbmdsZS54ICsgYWxpZ25SZWN0YW5nbGUud2lkdGgpO1xuICAgICAgICBjb25zdCByaWdodFRvTGVmdCA9IGFjdGl2ZVJlY3RhbmdsZS54ICsgYWN0aXZlUmVjdGFuZ2xlLndpZHRoIC0gYWxpZ25SZWN0YW5nbGUueDtcblxuICAgICAgICBjb25zdCB0b3BUb1RvcCA9IGFjdGl2ZVJlY3RhbmdsZS55IC0gYWxpZ25SZWN0YW5nbGUueTtcbiAgICAgICAgY29uc3QgdG9wVG9Cb3R0b20gPSBhY3RpdmVSZWN0YW5nbGUueSAtIChhbGlnblJlY3RhbmdsZS55ICsgYWxpZ25SZWN0YW5nbGUuaGVpZ2h0KTtcbiAgICAgICAgY29uc3QgYm90dG9tVG9Ub3AgPSBhY3RpdmVSZWN0YW5nbGUueSArIGFjdGl2ZVJlY3RhbmdsZS5oZWlnaHQgLSBhbGlnblJlY3RhbmdsZS55O1xuICAgICAgICBjb25zdCBib3R0b21Ub0JvdHRvbSA9IGFjdGl2ZVJlY3RhbmdsZS55ICsgYWN0aXZlUmVjdGFuZ2xlLmhlaWdodCAtIChhbGlnblJlY3RhbmdsZS55ICsgYWxpZ25SZWN0YW5nbGUuaGVpZ2h0KTtcblxuICAgICAgICBjb25zdCB4RGlzdGFuY2VzID0gW2xlZnRUb0xlZnQsIGxlZnRUb1JpZ2h0LCByaWdodFRvUmlnaHQsIHJpZ2h0VG9MZWZ0LCBjZW50ZXJYRGlzdGFuY2VdO1xuICAgICAgICBjb25zdCB5RGlzdGFuY2VzID0gW3RvcFRvVG9wLCB0b3BUb0JvdHRvbSwgYm90dG9tVG9Cb3R0b20sIGJvdHRvbVRvVG9wLCBjZW50ZXJZRGlzdGFuY2VdO1xuXG4gICAgICAgIGNvbnN0IHhEaXN0YW5jZXNBYnMgPSB4RGlzdGFuY2VzLm1hcChkaXN0YW5jZSA9PiBNYXRoLmFicyhkaXN0YW5jZSkpO1xuICAgICAgICBjb25zdCB5RGlzdGFuY2VzQWJzID0geURpc3RhbmNlcy5tYXAoZGlzdGFuY2UgPT4gTWF0aC5hYnMoZGlzdGFuY2UpKTtcblxuICAgICAgICBjb25zdCBpbmRleFggPSB4RGlzdGFuY2VzQWJzLmluZGV4T2YoTWF0aC5taW4oLi4ueERpc3RhbmNlc0FicykpO1xuICAgICAgICBjb25zdCBpbmRleFkgPSB5RGlzdGFuY2VzQWJzLmluZGV4T2YoTWF0aC5taW4oLi4ueURpc3RhbmNlc0FicykpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhYnNYRGlzdGFuY2U6IHhEaXN0YW5jZXNBYnNbaW5kZXhYXSxcbiAgICAgICAgICAgIHhEaXN0YW5jZTogeERpc3RhbmNlc1tpbmRleFhdLFxuICAgICAgICAgICAgYWJzWURpc3RhbmNlOiB5RGlzdGFuY2VzQWJzW2luZGV4WV0sXG4gICAgICAgICAgICB5RGlzdGFuY2U6IHlEaXN0YW5jZXNbaW5kZXhZXSxcbiAgICAgICAgICAgIGluZGV4WCxcbiAgICAgICAgICAgIGluZGV4WVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFsaWduRGlzdHJpYnV0ZShhbGlnblJlY3RhbmdsZXM6IFJlY3RhbmdsZUNsaWVudFtdLCBpc0hvcml6b250YWw6IGJvb2xlYW4pIHtcbiAgICAgICAgbGV0IGRpc3RyaWJ1dGVMaW5lczogYW55W10gPSBbXTtcbiAgICAgICAgbGV0IGRlbHRhID0gMDtcbiAgICAgICAgbGV0IHJlY3RhbmdsZXM6IFJlY3RhbmdsZUNsaWVudFtdID0gW107XG4gICAgICAgIGNvbnN0IGF4aXMgPSBpc0hvcml6b250YWwgPyAneCcgOiAneSc7XG4gICAgICAgIGNvbnN0IHNpZGUgPSBpc0hvcml6b250YWwgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG5cbiAgICAgICAgY29uc3QgYWN0aXZlUmVjdGFuZ2xlQ2VudGVyID0gdGhpcy5hY3RpdmVSZWN0YW5nbGVbYXhpc10gKyB0aGlzLmFjdGl2ZVJlY3RhbmdsZVtzaWRlXSAvIDI7XG4gICAgICAgIGFsaWduUmVjdGFuZ2xlcy5mb3JFYWNoKHJlYyA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc0Nyb3NzID0gaXNIb3Jpem9udGFsID8gaXNIb3Jpem9udGFsQ3Jvc3MocmVjLCB0aGlzLmFjdGl2ZVJlY3RhbmdsZSkgOiBpc1ZlcnRpY2FsQ3Jvc3MocmVjLCB0aGlzLmFjdGl2ZVJlY3RhbmdsZSk7XG4gICAgICAgICAgICBpZiAoaXNDcm9zcyAmJiAhUmVjdGFuZ2xlQ2xpZW50LmlzSGl0KHJlYywgdGhpcy5hY3RpdmVSZWN0YW5nbGUpKSB7XG4gICAgICAgICAgICAgICAgcmVjdGFuZ2xlcy5wdXNoKHJlYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZWN0YW5nbGVzID0gWy4uLnJlY3RhbmdsZXMsIHRoaXMuYWN0aXZlUmVjdGFuZ2xlXS5zb3J0KChhLCBiKSA9PiBhW2F4aXNdIC0gYltheGlzXSk7XG5cbiAgICAgICAgY29uc3QgcmVmQXJyYXk6IERpc3RyaWJ1dGVSZWZbXSA9IFtdO1xuICAgICAgICBsZXQgZGlzdHJpYnV0ZURpc3RhbmNlID0gMDtcbiAgICAgICAgbGV0IGJlZm9yZUluZGV4ID0gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgYWZ0ZXJJbmRleCA9IHVuZGVmaW5lZDtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlY3RhbmdsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IHJlY3RhbmdsZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBiZWZvcmUgPSByZWN0YW5nbGVzW2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFmdGVyID0gcmVjdGFuZ2xlc1tqXTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IGFmdGVyW2F4aXNdIC0gKGJlZm9yZVtheGlzXSArIGJlZm9yZVtzaWRlXSk7XG4gICAgICAgICAgICAgICAgbGV0IGRpZiA9IEluZmluaXR5O1xuICAgICAgICAgICAgICAgIGlmIChyZWZBcnJheVtpXT8uYWZ0ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVmQXJyYXlbaV0uYWZ0ZXIucHVzaCh7IGRpc3RhbmNlLCBpbmRleDogaiB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWZBcnJheVtpXSA9IHsgLi4ucmVmQXJyYXlbaV0sIGFmdGVyOiBbeyBkaXN0YW5jZSwgaW5kZXg6IGogfV0gfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmVmQXJyYXlbal0/LmJlZm9yZSkge1xuICAgICAgICAgICAgICAgICAgICByZWZBcnJheVtqXS5iZWZvcmUucHVzaCh7IGRpc3RhbmNlLCBpbmRleDogaSB9KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWZBcnJheVtqXSA9IHsgLi4ucmVmQXJyYXlbal0sIGJlZm9yZTogW3sgZGlzdGFuY2UsIGluZGV4OiBpIH1dIH07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy9taWRkbGVcbiAgICAgICAgICAgICAgICBsZXQgX2NlbnRlciA9IChiZWZvcmVbYXhpc10gKyBiZWZvcmVbc2lkZV0gKyBhZnRlcltheGlzXSkgLyAyO1xuICAgICAgICAgICAgICAgIGRpZiA9IE1hdGguYWJzKGFjdGl2ZVJlY3RhbmdsZUNlbnRlciAtIF9jZW50ZXIpO1xuICAgICAgICAgICAgICAgIGlmIChkaWYgPCBBTElHTl9UT0xFUkFOQ0UpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0ZURpc3RhbmNlID0gKGFmdGVyW2F4aXNdIC0gKGJlZm9yZVtheGlzXSArIGJlZm9yZVtzaWRlXSkgLSB0aGlzLmFjdGl2ZVJlY3RhbmdsZVtzaWRlXSkgLyAyO1xuICAgICAgICAgICAgICAgICAgICBkZWx0YSA9IGFjdGl2ZVJlY3RhbmdsZUNlbnRlciAtIF9jZW50ZXI7XG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZUluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICAgICAgYWZ0ZXJJbmRleCA9IGo7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy9hZnRlclxuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlUmlnaHQgPSBhZnRlcltheGlzXSAtIChiZWZvcmVbYXhpc10gKyBiZWZvcmVbc2lkZV0pO1xuICAgICAgICAgICAgICAgIF9jZW50ZXIgPSBhZnRlcltheGlzXSArIGFmdGVyW3NpZGVdICsgZGlzdGFuY2VSaWdodCArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlW3NpZGVdIC8gMjtcbiAgICAgICAgICAgICAgICBkaWYgPSBNYXRoLmFicyhhY3RpdmVSZWN0YW5nbGVDZW50ZXIgLSBfY2VudGVyKTtcbiAgICAgICAgICAgICAgICBpZiAoIWRpc3RyaWJ1dGVEaXN0YW5jZSAmJiBkaWYgPCBBTElHTl9UT0xFUkFOQ0UpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0ZURpc3RhbmNlID0gZGlzdGFuY2VSaWdodDtcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlSW5kZXggPSBqO1xuICAgICAgICAgICAgICAgICAgICBkZWx0YSA9IGFjdGl2ZVJlY3RhbmdsZUNlbnRlciAtIF9jZW50ZXI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy9iZWZvcmVcbiAgICAgICAgICAgICAgICBjb25zdCBkaXN0YW5jZUJlZm9yZSA9IGFmdGVyW2F4aXNdIC0gKGJlZm9yZVtheGlzXSArIGJlZm9yZVtzaWRlXSk7XG4gICAgICAgICAgICAgICAgX2NlbnRlciA9IGJlZm9yZVtheGlzXSAtIGRpc3RhbmNlQmVmb3JlIC0gdGhpcy5hY3RpdmVSZWN0YW5nbGVbc2lkZV0gLyAyO1xuICAgICAgICAgICAgICAgIGRpZiA9IE1hdGguYWJzKGFjdGl2ZVJlY3RhbmdsZUNlbnRlciAtIF9jZW50ZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFkaXN0cmlidXRlRGlzdGFuY2UgJiYgZGlmIDwgQUxJR05fVE9MRVJBTkNFKSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3RyaWJ1dGVEaXN0YW5jZSA9IGRpc3RhbmNlQmVmb3JlO1xuICAgICAgICAgICAgICAgICAgICBhZnRlckluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICAgICAgZGVsdGEgPSBhY3RpdmVSZWN0YW5nbGVDZW50ZXIgLSBfY2VudGVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFjdGl2ZUluZGV4ID0gcmVjdGFuZ2xlcy5pbmRleE9mKHRoaXMuYWN0aXZlUmVjdGFuZ2xlKTtcbiAgICAgICAgbGV0IGJlZm9yZUluZGV4ZXM6IG51bWJlcltdID0gW107XG4gICAgICAgIGxldCBhZnRlckluZGV4ZXM6IG51bWJlcltdID0gW107XG4gICAgICAgIGlmIChiZWZvcmVJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBiZWZvcmVJbmRleGVzLnB1c2goYmVmb3JlSW5kZXgpO1xuICAgICAgICAgICAgZmluZFJlY3RhbmdsZShkaXN0cmlidXRlRGlzdGFuY2UsIHJlZkFycmF5W2JlZm9yZUluZGV4XSwgJ2JlZm9yZScsIGJlZm9yZUluZGV4ZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFmdGVySW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYWZ0ZXJJbmRleGVzLnB1c2goYWZ0ZXJJbmRleCk7XG4gICAgICAgICAgICBmaW5kUmVjdGFuZ2xlKGRpc3RyaWJ1dGVEaXN0YW5jZSwgcmVmQXJyYXlbYWZ0ZXJJbmRleF0sICdhZnRlcicsIGFmdGVySW5kZXhlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYmVmb3JlSW5kZXhlcy5sZW5ndGggfHwgYWZ0ZXJJbmRleGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXhBcnIgPSBbLi4uYmVmb3JlSW5kZXhlcy5yZXZlcnNlKCksIGFjdGl2ZUluZGV4LCAuLi5hZnRlckluZGV4ZXNdO1xuICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGVbYXhpc10gLT0gZGVsdGE7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGluZGV4QXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgZGlzdHJpYnV0ZUxpbmVzLnB1c2goZ2V0TGluZVBvaW50cyhyZWN0YW5nbGVzW2luZGV4QXJyW2kgLSAxXV0sIHJlY3RhbmdsZXNbaW5kZXhBcnJbaV1dKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBmaW5kUmVjdGFuZ2xlKGRpc3RhbmNlOiBudW1iZXIsIHJlZjogRGlzdHJpYnV0ZVJlZiwgZGlyZWN0aW9uOiBzdHJpbmcsIHJlY3RhbmdsZUluZGV4ZXM6IG51bWJlcltdKSB7XG4gICAgICAgICAgICBjb25zdCBhcnIgPSByZWZbZGlyZWN0aW9uIGFzIGtleW9mIERpc3RyaWJ1dGVSZWZdO1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSByZWZBcnJheS5pbmRleE9mKHJlZik7XG4gICAgICAgICAgICBpZiAoKGluZGV4ID09PSAwICYmIGRpcmVjdGlvbiA9PT0gJ2JlZm9yZScpIHx8IChpbmRleCA9PT0gcmVmQXJyYXkubGVuZ3RoIC0gMSAmJiBkaXJlY3Rpb24gPT09ICdhZnRlcicpKSByZXR1cm47XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChNYXRoLmFicyhhcnJbaV0uZGlzdGFuY2UgLSBkaXN0YW5jZSkgPCAwLjEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVjdGFuZ2xlSW5kZXhlcy5wdXNoKGFycltpXS5pbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIGZpbmRSZWN0YW5nbGUoZGlzdGFuY2UsIHJlZkFycmF5W2FycltpXS5pbmRleF0sIGRpcmVjdGlvbiwgcmVjdGFuZ2xlSW5kZXhlcyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBnZXRMaW5lUG9pbnRzKGJlZm9yZVJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBhZnRlclJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgICAgICBjb25zdCBvcHBvc2l0ZUF4aXMgPSBheGlzID09PSAneCcgPyAneScgOiAneCc7XG4gICAgICAgICAgICBjb25zdCBvcHBvc2l0ZVNpZGUgPSBzaWRlID09PSAnd2lkdGgnID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgICAgICAgICAgY29uc3QgYWxpZ24gPSBbXG4gICAgICAgICAgICAgICAgYmVmb3JlUmVjdGFuZ2xlW29wcG9zaXRlQXhpc10sXG4gICAgICAgICAgICAgICAgYmVmb3JlUmVjdGFuZ2xlW29wcG9zaXRlQXhpc10gKyBiZWZvcmVSZWN0YW5nbGVbb3Bwb3NpdGVTaWRlXSxcbiAgICAgICAgICAgICAgICBhZnRlclJlY3RhbmdsZVtvcHBvc2l0ZUF4aXNdLFxuICAgICAgICAgICAgICAgIGFmdGVyUmVjdGFuZ2xlW29wcG9zaXRlQXhpc10gKyBhZnRlclJlY3RhbmdsZVtvcHBvc2l0ZVNpZGVdXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgY29uc3Qgc29ydEFyciA9IGFsaWduLnNvcnQoKGEsIGIpID0+IGEgLSBiKTtcbiAgICAgICAgICAgIGNvbnN0IGF2ZXJhZ2UgPSAoc29ydEFyclsxXSArIHNvcnRBcnJbMl0pIC8gMjtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldCA9IDM7XG4gICAgICAgICAgICByZXR1cm4gaXNIb3Jpem9udGFsXG4gICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICAgICAgW2JlZm9yZVJlY3RhbmdsZS54ICsgYmVmb3JlUmVjdGFuZ2xlLndpZHRoICsgb2Zmc2V0LCBhdmVyYWdlXSxcbiAgICAgICAgICAgICAgICAgICAgICBbYWZ0ZXJSZWN0YW5nbGUueCAtIG9mZnNldCwgYXZlcmFnZV1cbiAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICAgICAgICBbYXZlcmFnZSwgYmVmb3JlUmVjdGFuZ2xlLnkgKyBiZWZvcmVSZWN0YW5nbGUuaGVpZ2h0ICsgb2Zmc2V0XSxcbiAgICAgICAgICAgICAgICAgICAgICBbYXZlcmFnZSwgYWZ0ZXJSZWN0YW5nbGUueSAtIG9mZnNldF1cbiAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgZGVsdGEsIGRpc3RyaWJ1dGVMaW5lcyB9O1xuICAgIH1cblxuICAgIGRyYXdBbGlnbkxpbmVzKGxpbmVzOiBudW1iZXJbXVtdLCBnOiBTVkdHRWxlbWVudCkge1xuICAgICAgICBsaW5lcy5mb3JFYWNoKHBvaW50cyA9PiB7XG4gICAgICAgICAgICBpZiAoIXBvaW50cy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHhBbGlnbiA9IFBsYWl0Qm9hcmQuZ2V0Um91Z2hTVkcodGhpcy5ib2FyZCkubGluZShwb2ludHNbMF0sIHBvaW50c1sxXSwgcG9pbnRzWzJdLCBwb2ludHNbM10sIHtcbiAgICAgICAgICAgICAgICBzdHJva2U6IFNFTEVDVElPTl9CT1JERVJfQ09MT1IsXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgICAgICAgICAgc3Ryb2tlTGluZURhc2g6IFs0LCA0XVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBnLmFwcGVuZENoaWxkKHhBbGlnbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGRyYXdEaXN0cmlidXRlTGluZXMobGluZXM6IFBvaW50W11bXSwgZzogU1ZHR0VsZW1lbnQpIHtcbiAgICAgICAgbGluZXMuZm9yRWFjaChsaW5lID0+IHtcbiAgICAgICAgICAgIGlmICghbGluZS5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgICAgIGxldCBpc0hvcml6b250YWwgPSBsaW5lWzBdWzFdID09PSBsaW5lWzFdWzFdO1xuICAgICAgICAgICAgY29uc3QgeUFsaWduID0gUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyh0aGlzLmJvYXJkKS5saW5lKGxpbmVbMF1bMF0sIGxpbmVbMF1bMV0sIGxpbmVbMV1bMF0sIGxpbmVbMV1bMV0sIHtcbiAgICAgICAgICAgICAgICBzdHJva2U6IFNFTEVDVElPTl9CT1JERVJfQ09MT1IsXG4gICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZy5hcHBlbmRDaGlsZCh5QWxpZ24pO1xuXG4gICAgICAgICAgICBsaW5lLmZvckVhY2gocG9pbnQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhclBvaW50ID0gZ2V0QmFyUG9pbnQocG9pbnQsIGlzSG9yaXpvbnRhbCk7XG4gICAgICAgICAgICAgICAgY29uc3QgYmFyID0gUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyh0aGlzLmJvYXJkKS5saW5lKGJhclBvaW50WzBdWzBdLCBiYXJQb2ludFswXVsxXSwgYmFyUG9pbnRbMV1bMF0sIGJhclBvaW50WzFdWzFdLCB7XG4gICAgICAgICAgICAgICAgICAgIHN0cm9rZTogU0VMRUNUSU9OX0JPUkRFUl9DT0xPUixcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDFcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBnLmFwcGVuZENoaWxkKGJhcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpc0hvcml6b250YWxDcm9zcyhyZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgb3RoZXI6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgIHJldHVybiAhKHJlY3RhbmdsZS55ICsgcmVjdGFuZ2xlLmhlaWdodCA8IG90aGVyLnkgfHwgcmVjdGFuZ2xlLnkgPiBvdGhlci55ICsgb3RoZXIuaGVpZ2h0KTtcbn1cblxuZnVuY3Rpb24gaXNWZXJ0aWNhbENyb3NzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBvdGhlcjogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgcmV0dXJuICEocmVjdGFuZ2xlLnggKyByZWN0YW5nbGUud2lkdGggPCBvdGhlci54IHx8IHJlY3RhbmdsZS54ID4gb3RoZXIueCArIG90aGVyLndpZHRoKTtcbn1cbmZ1bmN0aW9uIGdldEJhclBvaW50KHBvaW50OiBQb2ludCwgaXNIb3Jpem9udGFsOiBib29sZWFuKSB7XG4gICAgcmV0dXJuIGlzSG9yaXpvbnRhbFxuICAgICAgICA/IFtcbiAgICAgICAgICAgICAgW3BvaW50WzBdLCBwb2ludFsxXSAtIDRdLFxuICAgICAgICAgICAgICBbcG9pbnRbMF0sIHBvaW50WzFdICsgNF1cbiAgICAgICAgICBdXG4gICAgICAgIDogW1xuICAgICAgICAgICAgICBbcG9pbnRbMF0gLSA0LCBwb2ludFsxXV0sXG4gICAgICAgICAgICAgIFtwb2ludFswXSArIDQsIHBvaW50WzFdXVxuICAgICAgICAgIF07XG59XG4iXX0=
|
|
371
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3Rpb24tbWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL3JlYWN0aW9uLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHdkMsT0FBTyxFQUFTLGVBQWUsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFhN0MsTUFBTSxlQUFlLEdBQUcsQ0FBQyxDQUFDO0FBRTFCLE1BQU0sT0FBTyxhQUFhO0lBR3RCLFlBQW9CLEtBQWlCLEVBQVUsY0FBOEIsRUFBVSxlQUFnQztRQUFuRyxVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQVUsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ25ILElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELGlCQUFpQjtRQUNiLE1BQU0sTUFBTSxHQUFzQixFQUFFLENBQUM7UUFDckMsbUJBQW1CLENBQ2YsSUFBSSxDQUFDLEtBQUssRUFDVixJQUFJLENBQUMsRUFBRTtZQUNILElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3RILE9BQU87YUFDVjtZQUNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxL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QWMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xGLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLEtBQUssR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNHLE1BQU0sV0FBVyxHQUFHLGVBQWUsQ0FBQyxDQUFDLEdBQUcsZUFBZSxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBRWpGLE1BQU0sUUFBUSxHQUFHLGVBQWUsQ0FBQyxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUN0RCxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkYsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxHQUFHLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDbEYsTUFBTSxjQUFjLEdBQUcsZUFBZSxDQUFDLENBQUMsR0FBRyxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFL0csTUFBTSxVQUFVLEdBQUcsQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDekYsTUFBTSxVQUFVLEdBQUcsQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLGNBQWMsRUFBRSxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFFekYsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNyRSxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENB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QUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0YsQ0FBQztBQUNELFNBQVMsV0FBVyxDQUFDLEtBQVksRUFBRSxZQUFxQjtJQUNwRCxPQUFPLFlBQVk7UUFDZixDQUFDLENBQUM7WUFDSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3hCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDM0I7UUFDSCxDQUFDLENBQUM7WUFDSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0IsQ0FBQztBQUNaLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ib2FyZCc7XG5pbXBvcnQgeyBjcmVhdGVHIH0gZnJvbSAnLi9kb20vY29tbW9uJztcbmltcG9ydCB7IFBsYWl0RWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBBbmNlc3RvciB9IGZyb20gJy4uL2ludGVyZmFjZXMvbm9kZSc7XG5pbXBvcnQgeyBQb2ludCwgUmVjdGFuZ2xlQ2xpZW50LCBTRUxFQ1RJT05fQk9SREVSX0NPTE9SIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBkZXB0aEZpcnN0UmVjdXJzaW9uIH0gZnJvbSAnLi90cmVlJztcblxuZXhwb3J0IGludGVyZmFjZSBBbGlnblJlZiB7XG4gICAgZGVsdGFYOiBudW1iZXI7XG4gICAgZGVsdGFZOiBudW1iZXI7XG4gICAgZzogU1ZHR0VsZW1lbnQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlzdHJpYnV0ZVJlZiB7XG4gICAgYmVmb3JlOiB7IGRpc3RhbmNlOiBudW1iZXI7IGluZGV4OiBudW1iZXIgfVtdO1xuICAgIGFmdGVyOiB7IGRpc3RhbmNlOiBudW1iZXI7IGluZGV4OiBudW1iZXIgfVtdO1xufVxuXG5jb25zdCBBTElHTl9UT0xFUkFOQ0UgPSAyO1xuXG5leHBvcnQgY2xhc3MgQWxpZ25SZWFjdGlvbiB7XG4gICAgYWxpZ25SZWN0YW5nbGVzOiBSZWN0YW5nbGVDbGllbnRbXTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgYm9hcmQ6IFBsYWl0Qm9hcmQsIHByaXZhdGUgYWN0aXZlRWxlbWVudHM6IFBsYWl0RWxlbWVudFtdLCBwcml2YXRlIGFjdGl2ZVJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgICAgIHRoaXMuYWxpZ25SZWN0YW5nbGVzID0gdGhpcy5nZXRBbGlnblJlY3RhbmdsZSgpO1xuICAgIH1cblxuICAgIGdldEFsaWduUmVjdGFuZ2xlKCkge1xuICAgICAgICBjb25zdCByZXN1bHQ6IFJlY3RhbmdsZUNsaWVudFtdID0gW107XG4gICAgICAgIGRlcHRoRmlyc3RSZWN1cnNpb248QW5jZXN0b3I+KFxuICAgICAgICAgICAgdGhpcy5ib2FyZCxcbiAgICAgICAgICAgIG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChQbGFpdEJvYXJkLmlzQm9hcmQobm9kZSkgfHwgdGhpcy5hY3RpdmVFbGVtZW50cy5zb21lKGVsZW1lbnQgPT4gbm9kZS5pZCA9PT0gZWxlbWVudC5pZCkgfHwgIXRoaXMuYm9hcmQuaXNBbGlnbihub2RlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlY3RhbmdsZSA9IHRoaXMuYm9hcmQuZ2V0UmVjdGFuZ2xlKG5vZGUpO1xuICAgICAgICAgICAgICAgIHJlY3RhbmdsZSAmJiByZXN1bHQucHVzaChyZWN0YW5nbGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIG5vZGUgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChub2RlICYmIChQbGFpdEJvYXJkLmlzQm9hcmQobm9kZSkgfHwgdGhpcy5ib2FyZC5pc1JlY3Vyc2lvbihub2RlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgaGFuZGxlQWxpZ24oKTogQWxpZ25SZWYge1xuICAgICAgICBjb25zdCBhbGlnblJlY3RhbmdsZXMgPSB0aGlzLmdldEFsaWduUmVjdGFuZ2xlKCk7XG4gICAgICAgIGNvbnN0IGcgPSBjcmVhdGVHKCk7XG4gICAgICAgIGxldCBhbGlnbkxpbmVzID0gW107XG5cbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gMTI7XG4gICAgICAgIGxldCBkZWx0YVggPSAwO1xuICAgICAgICBsZXQgZGVsdGFZID0gMDtcbiAgICAgICAgbGV0IGlzQ29ycmVjdFggPSBmYWxzZTtcbiAgICAgICAgbGV0IGlzQ29ycmVjdFkgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKGxldCBhbGlnblJlY3RhbmdsZSBvZiBhbGlnblJlY3RhbmdsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsb3Nlc3REaXN0YW5jZXMgPSB0aGlzLmNhbGN1bGF0ZUNsb3Nlc3REaXN0YW5jZXModGhpcy5hY3RpdmVSZWN0YW5nbGUsIGFsaWduUmVjdGFuZ2xlKTtcbiAgICAgICAgICAgIGxldCBjYW5EcmF3SG9yaXpvbnRhbCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKCFpc0NvcnJlY3RYICYmIGNsb3Nlc3REaXN0YW5jZXMuYWJzWERpc3RhbmNlIDwgQUxJR05fVE9MRVJBTkNFKSB7XG4gICAgICAgICAgICAgICAgZGVsdGFYID0gY2xvc2VzdERpc3RhbmNlcy54RGlzdGFuY2U7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueCAtPSBkZWx0YVg7XG4gICAgICAgICAgICAgICAgaXNDb3JyZWN0WCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY2FuRHJhd0hvcml6b250YWwgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY2xvc2VzdERpc3RhbmNlcy5hYnNYRGlzdGFuY2UgPT09IDApIHtcbiAgICAgICAgICAgICAgICBjYW5EcmF3SG9yaXpvbnRhbCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjYW5EcmF3SG9yaXpvbnRhbCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsWSA9IFtcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25SZWN0YW5nbGUueSxcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25SZWN0YW5nbGUueSArIGFsaWduUmVjdGFuZ2xlLmhlaWdodCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueSArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLmhlaWdodFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZVRvcFkgPSBNYXRoLm1pbiguLi52ZXJ0aWNhbFkpIC0gb2Zmc2V0O1xuICAgICAgICAgICAgICAgIGNvbnN0IGxpbmVCb3R0b21ZID0gTWF0aC5tYXgoLi4udmVydGljYWxZKSArIG9mZnNldDtcbiAgICAgICAgICAgICAgICBjb25zdCBsZWZ0TGluZSA9IFt0aGlzLmFjdGl2ZVJlY3RhbmdsZS54LCBsaW5lVG9wWSwgdGhpcy5hY3RpdmVSZWN0YW5nbGUueCwgbGluZUJvdHRvbVldO1xuICAgICAgICAgICAgICAgIGNvbnN0IG1pZGRsZUxpbmUgPSBbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnggKyB0aGlzLmFjdGl2ZVJlY3RhbmdsZS53aWR0aCAvIDIsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVUb3BZLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS54ICsgdGhpcy5hY3RpdmVSZWN0YW5nbGUud2lkdGggLyAyLFxuICAgICAgICAgICAgICAgICAgICBsaW5lQm90dG9tWVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgY29uc3QgcmlnaHRMaW5lID0gW1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS54ICsgdGhpcy5hY3RpdmVSZWN0YW5nbGUud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVUb3BZLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS54ICsgdGhpcy5hY3RpdmVSZWN0YW5nbGUud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVCb3R0b21ZXG4gICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZERyYXdMZWZ0TGluZSA9XG4gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhYID09PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhYID09PSAxIHx8XG4gICAgICAgICAgICAgICAgICAgIChjbG9zZXN0RGlzdGFuY2VzLmluZGV4WCA9PT0gMiAmJiB0aGlzLmFjdGl2ZVJlY3RhbmdsZS53aWR0aCA9PT0gYWxpZ25SZWN0YW5nbGUud2lkdGgpO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGREcmF3TGVmdExpbmUgJiYgIWFsaWduTGluZXNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25MaW5lc1swXSA9IGxlZnRMaW5lO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZERyYXdSaWdodExpbmUgPVxuICAgICAgICAgICAgICAgICAgICBjbG9zZXN0RGlzdGFuY2VzLmluZGV4WCA9PT0gMiB8fFxuICAgICAgICAgICAgICAgICAgICBjbG9zZXN0RGlzdGFuY2VzLmluZGV4WCA9PT0gMyB8fFxuICAgICAgICAgICAgICAgICAgICAoY2xvc2VzdERpc3RhbmNlcy5pbmRleFggPT09IDAgJiYgdGhpcy5hY3RpdmVSZWN0YW5nbGUud2lkdGggPT09IGFsaWduUmVjdGFuZ2xlLndpZHRoKTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkRHJhd1JpZ2h0TGluZSAmJiAhYWxpZ25MaW5lc1syXSkge1xuICAgICAgICAgICAgICAgICAgICBhbGlnbkxpbmVzWzJdID0gcmlnaHRMaW5lO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHNob3VsZERyYXdNaWRkbGVMaW5lID0gY2xvc2VzdERpc3RhbmNlcy5pbmRleFggPT09IDQgfHwgKCFzaG91bGREcmF3TGVmdExpbmUgJiYgIXNob3VsZERyYXdSaWdodExpbmUpO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGREcmF3TWlkZGxlTGluZSAmJiAhYWxpZ25MaW5lc1sxXSkge1xuICAgICAgICAgICAgICAgICAgICBhbGlnbkxpbmVzWzFdID0gbWlkZGxlTGluZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpc0NvcnJlY3RYID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGNhbkRyYXdWZXJ0aWNhbCA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKCFpc0NvcnJlY3RZICYmIGNsb3Nlc3REaXN0YW5jZXMuYWJzWURpc3RhbmNlIDwgQUxJR05fVE9MRVJBTkNFKSB7XG4gICAgICAgICAgICAgICAgZGVsdGFZID0gY2xvc2VzdERpc3RhbmNlcy55RGlzdGFuY2U7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueSAtPSBkZWx0YVk7XG4gICAgICAgICAgICAgICAgaXNDb3JyZWN0WSA9IHRydWU7XG4gICAgICAgICAgICAgICAgY2FuRHJhd1ZlcnRpY2FsID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjbG9zZXN0RGlzdGFuY2VzLmFic1lEaXN0YW5jZSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNhbkRyYXdWZXJ0aWNhbCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2FuRHJhd1ZlcnRpY2FsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaG9yaXpvbnRhbFggPSBbXG4gICAgICAgICAgICAgICAgICAgIGFsaWduUmVjdGFuZ2xlLngsXG4gICAgICAgICAgICAgICAgICAgIGFsaWduUmVjdGFuZ2xlLnggKyBhbGlnblJlY3RhbmdsZS53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueCArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLndpZHRoXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICBjb25zdCBsaW5lTGVmdFggPSBNYXRoLm1pbiguLi5ob3Jpem9udGFsWCkgLSBvZmZzZXQ7XG4gICAgICAgICAgICAgICAgY29uc3QgbGluZVJpZ2h0WCA9IE1hdGgubWF4KC4uLmhvcml6b250YWxYKSArIG9mZnNldDtcbiAgICAgICAgICAgICAgICBjb25zdCB0b3BMaW5lID0gW2xpbmVMZWZ0WCwgdGhpcy5hY3RpdmVSZWN0YW5nbGUueSwgbGluZVJpZ2h0WCwgdGhpcy5hY3RpdmVSZWN0YW5nbGUueV07XG4gICAgICAgICAgICAgICAgY29uc3QgaG9yaXpvbnRhbE1pZGRsZUxpbmUgPSBbXG4gICAgICAgICAgICAgICAgICAgIGxpbmVMZWZ0WCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueSArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLmhlaWdodCAvIDIsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVSaWdodFgsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnkgKyB0aGlzLmFjdGl2ZVJlY3RhbmdsZS5oZWlnaHQgLyAyXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICBjb25zdCBib3R0b21MaW5lID0gW1xuICAgICAgICAgICAgICAgICAgICBsaW5lTGVmdFgsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnkgKyB0aGlzLmFjdGl2ZVJlY3RhbmdsZS5oZWlnaHQsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVSaWdodFgsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlUmVjdGFuZ2xlLnkgKyB0aGlzLmFjdGl2ZVJlY3RhbmdsZS5oZWlnaHRcbiAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkRHJhd1RvcExpbmUgPVxuICAgICAgICAgICAgICAgICAgICBjbG9zZXN0RGlzdGFuY2VzLmluZGV4WSA9PT0gMCB8fFxuICAgICAgICAgICAgICAgICAgICBjbG9zZXN0RGlzdGFuY2VzLmluZGV4WSA9PT0gMSB8fFxuICAgICAgICAgICAgICAgICAgICAoY2xvc2VzdERpc3RhbmNlcy5pbmRleFkgPT09IDIgJiYgdGhpcy5hY3RpdmVSZWN0YW5nbGUuaGVpZ2h0ID09PSBhbGlnblJlY3RhbmdsZS5oZWlnaHQpO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGREcmF3VG9wTGluZSAmJiAhYWxpZ25MaW5lc1szXSkge1xuICAgICAgICAgICAgICAgICAgICBhbGlnbkxpbmVzWzNdID0gdG9wTGluZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzaG91bGREcmF3Qm90dG9tTGluZSA9XG4gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhZID09PSAyIHx8XG4gICAgICAgICAgICAgICAgICAgIGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhZID09PSAzIHx8XG4gICAgICAgICAgICAgICAgICAgIChjbG9zZXN0RGlzdGFuY2VzLmluZGV4WSA9PT0gMCAmJiB0aGlzLmFjdGl2ZVJlY3RhbmdsZS53aWR0aCA9PT0gYWxpZ25SZWN0YW5nbGUud2lkdGgpO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGREcmF3Qm90dG9tTGluZSAmJiAhYWxpZ25MaW5lc1s1XSkge1xuICAgICAgICAgICAgICAgICAgICBhbGlnbkxpbmVzWzVdID0gYm90dG9tTGluZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzaG91bGREcmF3TWlkZGxlTGluZSA9IGNsb3Nlc3REaXN0YW5jZXMuaW5kZXhZID09PSA0IHx8ICghc2hvdWxkRHJhd1RvcExpbmUgJiYgIXNob3VsZERyYXdCb3R0b21MaW5lKTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkRHJhd01pZGRsZUxpbmUgJiYgIWFsaWduTGluZXNbNF0pIHtcbiAgICAgICAgICAgICAgICAgICAgYWxpZ25MaW5lc1s0XSA9IGhvcml6b250YWxNaWRkbGVMaW5lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGFsaWduRGVsdGFYID0gZGVsdGFYO1xuICAgICAgICBjb25zdCBhbGlnbkRlbHRhWSA9IGRlbHRhWTtcblxuICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZS54ICs9IGRlbHRhWDtcbiAgICAgICAgdGhpcy5hY3RpdmVSZWN0YW5nbGUueSArPSBkZWx0YVk7XG4gICAgICAgIGNvbnN0IGRpc3RyaWJ1dGVIb3Jpem9udGFsUmVzdWx0ID0gdGhpcy5hbGlnbkRpc3RyaWJ1dGUoYWxpZ25SZWN0YW5nbGVzLCB0cnVlKTtcbiAgICAgICAgY29uc3QgZGlzdHJpYnV0ZVZlcnRpY2FsUmVzdWx0ID0gdGhpcy5hbGlnbkRpc3RyaWJ1dGUoYWxpZ25SZWN0YW5nbGVzLCBmYWxzZSk7XG4gICAgICAgIGNvbnN0IGRpc3RyaWJ1dGVMaW5lczogUG9pbnRbXVtdID0gWy4uLmRpc3RyaWJ1dGVIb3Jpem9udGFsUmVzdWx0LmRpc3RyaWJ1dGVMaW5lcywgLi4uZGlzdHJpYnV0ZVZlcnRpY2FsUmVzdWx0LmRpc3RyaWJ1dGVMaW5lc107XG4gICAgICAgIGlmIChkaXN0cmlidXRlSG9yaXpvbnRhbFJlc3VsdC5kZWx0YSkge1xuICAgICAgICAgICAgZGVsdGFYID0gZGlzdHJpYnV0ZUhvcml6b250YWxSZXN1bHQuZGVsdGE7XG4gICAgICAgICAgICBpZiAoYWxpZ25EZWx0YVggIT09IGRlbHRhWCkge1xuICAgICAgICAgICAgICAgIGFsaWduTGluZXNbMF0gPSBbXTtcbiAgICAgICAgICAgICAgICBhbGlnbkxpbmVzWzFdID0gW107XG4gICAgICAgICAgICAgICAgYWxpZ25MaW5lc1syXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRpc3RyaWJ1dGVWZXJ0aWNhbFJlc3VsdC5kZWx0YSkge1xuICAgICAgICAgICAgZGVsdGFZID0gZGlzdHJpYnV0ZVZlcnRpY2FsUmVzdWx0LmRlbHRhO1xuICAgICAgICAgICAgaWYgKGFsaWduRGVsdGFZICE9PSBkZWx0YVkpIHtcbiAgICAgICAgICAgICAgICBhbGlnbkxpbmVzWzNdID0gW107XG4gICAgICAgICAgICAgICAgYWxpZ25MaW5lc1s0XSA9IFtdO1xuICAgICAgICAgICAgICAgIGFsaWduTGluZXNbNV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhbGlnbkxpbmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5kcmF3QWxpZ25MaW5lcyhhbGlnbkxpbmVzLCBnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkaXN0cmlidXRlTGluZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmRyYXdEaXN0cmlidXRlTGluZXMoZGlzdHJpYnV0ZUxpbmVzLCBnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IGRlbHRhWCwgZGVsdGFZLCBnIH07XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlQ2xvc2VzdERpc3RhbmNlcyhhY3RpdmVSZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCwgYWxpZ25SZWN0YW5nbGU6IFJlY3RhbmdsZUNsaWVudCkge1xuICAgICAgICBjb25zdCBhY3RpdmVSZWN0YW5nbGVDZW50ZXIgPSBbYWN0aXZlUmVjdGFuZ2xlLnggKyBhY3RpdmVSZWN0YW5nbGUud2lkdGggLyAyLCBhY3RpdmVSZWN0YW5nbGUueSArIGFjdGl2ZVJlY3RhbmdsZS5oZWlnaHQgLyAyXTtcbiAgICAgICAgY29uc3QgYWxpZ25SZWN0YW5nbGVDZW50ZXIgPSBbYWxpZ25SZWN0YW5nbGUueCArIGFsaWduUmVjdGFuZ2xlLndpZHRoIC8gMiwgYWxpZ25SZWN0YW5nbGUueSArIGFsaWduUmVjdGFuZ2xlLmhlaWdodCAvIDJdO1xuXG4gICAgICAgIGNvbnN0IGNlbnRlclhEaXN0YW5jZSA9IGFjdGl2ZVJlY3RhbmdsZUNlbnRlclswXSAtIGFsaWduUmVjdGFuZ2xlQ2VudGVyWzBdO1xuICAgICAgICBjb25zdCBjZW50ZXJZRGlzdGFuY2UgPSBhY3RpdmVSZWN0YW5nbGVDZW50ZXJbMV0gLSBhbGlnblJlY3RhbmdsZUNlbnRlclsxXTtcblxuICAgICAgICBjb25zdCBsZWZ0VG9MZWZ0ID0gYWN0aXZlUmVjdGFuZ2xlLnggLSBhbGlnblJlY3RhbmdsZS54O1xuICAgICAgICBjb25zdCBsZWZ0VG9SaWdodCA9IGFjdGl2ZVJlY3RhbmdsZS54IC0gKGFsaWduUmVjdGFuZ2xlLnggKyBhbGlnblJlY3RhbmdsZS53aWR0aCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0VG9SaWdodCA9IGFjdGl2ZVJlY3RhbmdsZS54ICsgYWN0aXZlUmVjdGFuZ2xlLndpZHRoIC0gKGFsaWduUmVjdGFuZ2xlLnggKyBhbGlnblJlY3RhbmdsZS53aWR0aCk7XG4gICAgICAgIGNvbnN0IHJpZ2h0VG9MZWZ0ID0gYWN0aXZlUmVjdGFuZ2xlLnggKyBhY3RpdmVSZWN0YW5nbGUud2lkdGggLSBhbGlnblJlY3RhbmdsZS54O1xuXG4gICAgICAgIGNvbnN0IHRvcFRvVG9wID0gYWN0aXZlUmVjdGFuZ2xlLnkgLSBhbGlnblJlY3RhbmdsZS55O1xuICAgICAgICBjb25zdCB0b3BUb0JvdHRvbSA9IGFjdGl2ZVJlY3RhbmdsZS55IC0gKGFsaWduUmVjdGFuZ2xlLnkgKyBhbGlnblJlY3RhbmdsZS5oZWlnaHQpO1xuICAgICAgICBjb25zdCBib3R0b21Ub1RvcCA9IGFjdGl2ZVJlY3RhbmdsZS55ICsgYWN0aXZlUmVjdGFuZ2xlLmhlaWdodCAtIGFsaWduUmVjdGFuZ2xlLnk7XG4gICAgICAgIGNvbnN0IGJvdHRvbVRvQm90dG9tID0gYWN0aXZlUmVjdGFuZ2xlLnkgKyBhY3RpdmVSZWN0YW5nbGUuaGVpZ2h0IC0gKGFsaWduUmVjdGFuZ2xlLnkgKyBhbGlnblJlY3RhbmdsZS5oZWlnaHQpO1xuXG4gICAgICAgIGNvbnN0IHhEaXN0YW5jZXMgPSBbbGVmdFRvTGVmdCwgbGVmdFRvUmlnaHQsIHJpZ2h0VG9SaWdodCwgcmlnaHRUb0xlZnQsIGNlbnRlclhEaXN0YW5jZV07XG4gICAgICAgIGNvbnN0IHlEaXN0YW5jZXMgPSBbdG9wVG9Ub3AsIHRvcFRvQm90dG9tLCBib3R0b21Ub0JvdHRvbSwgYm90dG9tVG9Ub3AsIGNlbnRlcllEaXN0YW5jZV07XG5cbiAgICAgICAgY29uc3QgeERpc3RhbmNlc0FicyA9IHhEaXN0YW5jZXMubWFwKGRpc3RhbmNlID0+IE1hdGguYWJzKGRpc3RhbmNlKSk7XG4gICAgICAgIGNvbnN0IHlEaXN0YW5jZXNBYnMgPSB5RGlzdGFuY2VzLm1hcChkaXN0YW5jZSA9PiBNYXRoLmFicyhkaXN0YW5jZSkpO1xuXG4gICAgICAgIGNvbnN0IGluZGV4WCA9IHhEaXN0YW5jZXNBYnMuaW5kZXhPZihNYXRoLm1pbiguLi54RGlzdGFuY2VzQWJzKSk7XG4gICAgICAgIGNvbnN0IGluZGV4WSA9IHlEaXN0YW5jZXNBYnMuaW5kZXhPZihNYXRoLm1pbiguLi55RGlzdGFuY2VzQWJzKSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFic1hEaXN0YW5jZTogeERpc3RhbmNlc0Fic1tpbmRleFhdLFxuICAgICAgICAgICAgeERpc3RhbmNlOiB4RGlzdGFuY2VzW2luZGV4WF0sXG4gICAgICAgICAgICBhYnNZRGlzdGFuY2U6IHlEaXN0YW5jZXNBYnNbaW5kZXhZXSxcbiAgICAgICAgICAgIHlEaXN0YW5jZTogeURpc3RhbmNlc1tpbmRleFldLFxuICAgICAgICAgICAgaW5kZXhYLFxuICAgICAgICAgICAgaW5kZXhZXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYWxpZ25EaXN0cmlidXRlKGFsaWduUmVjdGFuZ2xlczogUmVjdGFuZ2xlQ2xpZW50W10sIGlzSG9yaXpvbnRhbDogYm9vbGVhbikge1xuICAgICAgICBsZXQgZGlzdHJpYnV0ZUxpbmVzOiBhbnlbXSA9IFtdO1xuICAgICAgICBsZXQgZGVsdGEgPSAwO1xuICAgICAgICBsZXQgcmVjdGFuZ2xlczogUmVjdGFuZ2xlQ2xpZW50W10gPSBbXTtcbiAgICAgICAgY29uc3QgYXhpcyA9IGlzSG9yaXpvbnRhbCA/ICd4JyA6ICd5JztcbiAgICAgICAgY29uc3Qgc2lkZSA9IGlzSG9yaXpvbnRhbCA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcblxuICAgICAgICBjb25zdCBhY3RpdmVSZWN0YW5nbGVDZW50ZXIgPSB0aGlzLmFjdGl2ZVJlY3RhbmdsZVtheGlzXSArIHRoaXMuYWN0aXZlUmVjdGFuZ2xlW3NpZGVdIC8gMjtcbiAgICAgICAgYWxpZ25SZWN0YW5nbGVzLmZvckVhY2gocmVjID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlzQ3Jvc3MgPSBpc0hvcml6b250YWwgPyBpc0hvcml6b250YWxDcm9zcyhyZWMsIHRoaXMuYWN0aXZlUmVjdGFuZ2xlKSA6IGlzVmVydGljYWxDcm9zcyhyZWMsIHRoaXMuYWN0aXZlUmVjdGFuZ2xlKTtcbiAgICAgICAgICAgIGlmIChpc0Nyb3NzICYmICFSZWN0YW5nbGVDbGllbnQuaXNIaXQocmVjLCB0aGlzLmFjdGl2ZVJlY3RhbmdsZSkpIHtcbiAgICAgICAgICAgICAgICByZWN0YW5nbGVzLnB1c2gocmVjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJlY3RhbmdsZXMgPSBbLi4ucmVjdGFuZ2xlcywgdGhpcy5hY3RpdmVSZWN0YW5nbGVdLnNvcnQoKGEsIGIpID0+IGFbYXhpc10gLSBiW2F4aXNdKTtcblxuICAgICAgICBjb25zdCByZWZBcnJheTogRGlzdHJpYnV0ZVJlZltdID0gW107XG4gICAgICAgIGxldCBkaXN0cmlidXRlRGlzdGFuY2UgPSAwO1xuICAgICAgICBsZXQgYmVmb3JlSW5kZXggPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBhZnRlckluZGV4ID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVjdGFuZ2xlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IGkgKyAxOyBqIDwgcmVjdGFuZ2xlcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJlZm9yZSA9IHJlY3RhbmdsZXNbaV07XG4gICAgICAgICAgICAgICAgY29uc3QgYWZ0ZXIgPSByZWN0YW5nbGVzW2pdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlID0gYWZ0ZXJbYXhpc10gLSAoYmVmb3JlW2F4aXNdICsgYmVmb3JlW3NpZGVdKTtcbiAgICAgICAgICAgICAgICBsZXQgZGlmID0gSW5maW5pdHk7XG4gICAgICAgICAgICAgICAgaWYgKHJlZkFycmF5W2ldPy5hZnRlcikge1xuICAgICAgICAgICAgICAgICAgICByZWZBcnJheVtpXS5hZnRlci5wdXNoKHsgZGlzdGFuY2UsIGluZGV4OiBqIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZkFycmF5W2ldID0geyAuLi5yZWZBcnJheVtpXSwgYWZ0ZXI6IFt7IGRpc3RhbmNlLCBpbmRleDogaiB9XSB9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyZWZBcnJheVtqXT8uYmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZkFycmF5W2pdLmJlZm9yZS5wdXNoKHsgZGlzdGFuY2UsIGluZGV4OiBpIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlZkFycmF5W2pdID0geyAuLi5yZWZBcnJheVtqXSwgYmVmb3JlOiBbeyBkaXN0YW5jZSwgaW5kZXg6IGkgfV0gfTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvL21pZGRsZVxuICAgICAgICAgICAgICAgIGxldCBfY2VudGVyID0gKGJlZm9yZVtheGlzXSArIGJlZm9yZVtzaWRlXSArIGFmdGVyW2F4aXNdKSAvIDI7XG4gICAgICAgICAgICAgICAgZGlmID0gTWF0aC5hYnMoYWN0aXZlUmVjdGFuZ2xlQ2VudGVyIC0gX2NlbnRlcik7XG4gICAgICAgICAgICAgICAgaWYgKGRpZiA8IEFMSUdOX1RPTEVSQU5DRSkge1xuICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRlRGlzdGFuY2UgPSAoYWZ0ZXJbYXhpc10gLSAoYmVmb3JlW2F4aXNdICsgYmVmb3JlW3NpZGVdKSAtIHRoaXMuYWN0aXZlUmVjdGFuZ2xlW3NpZGVdKSAvIDI7XG4gICAgICAgICAgICAgICAgICAgIGRlbHRhID0gYWN0aXZlUmVjdGFuZ2xlQ2VudGVyIC0gX2NlbnRlcjtcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlSW5kZXggPSBpO1xuICAgICAgICAgICAgICAgICAgICBhZnRlckluZGV4ID0gajtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvL2FmdGVyXG4gICAgICAgICAgICAgICAgY29uc3QgZGlzdGFuY2VSaWdodCA9IGFmdGVyW2F4aXNdIC0gKGJlZm9yZVtheGlzXSArIGJlZm9yZVtzaWRlXSk7XG4gICAgICAgICAgICAgICAgX2NlbnRlciA9IGFmdGVyW2F4aXNdICsgYWZ0ZXJbc2lkZV0gKyBkaXN0YW5jZVJpZ2h0ICsgdGhpcy5hY3RpdmVSZWN0YW5nbGVbc2lkZV0gLyAyO1xuICAgICAgICAgICAgICAgIGRpZiA9IE1hdGguYWJzKGFjdGl2ZVJlY3RhbmdsZUNlbnRlciAtIF9jZW50ZXIpO1xuICAgICAgICAgICAgICAgIGlmICghZGlzdHJpYnV0ZURpc3RhbmNlICYmIGRpZiA8IEFMSUdOX1RPTEVSQU5DRSkge1xuICAgICAgICAgICAgICAgICAgICBkaXN0cmlidXRlRGlzdGFuY2UgPSBkaXN0YW5jZVJpZ2h0O1xuICAgICAgICAgICAgICAgICAgICBiZWZvcmVJbmRleCA9IGo7XG4gICAgICAgICAgICAgICAgICAgIGRlbHRhID0gYWN0aXZlUmVjdGFuZ2xlQ2VudGVyIC0gX2NlbnRlcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvL2JlZm9yZVxuICAgICAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlQmVmb3JlID0gYWZ0ZXJbYXhpc10gLSAoYmVmb3JlW2F4aXNdICsgYmVmb3JlW3NpZGVdKTtcbiAgICAgICAgICAgICAgICBfY2VudGVyID0gYmVmb3JlW2F4aXNdIC0gZGlzdGFuY2VCZWZvcmUgLSB0aGlzLmFjdGl2ZVJlY3RhbmdsZVtzaWRlXSAvIDI7XG4gICAgICAgICAgICAgICAgZGlmID0gTWF0aC5hYnMoYWN0aXZlUmVjdGFuZ2xlQ2VudGVyIC0gX2NlbnRlcik7XG5cbiAgICAgICAgICAgICAgICBpZiAoIWRpc3RyaWJ1dGVEaXN0YW5jZSAmJiBkaWYgPCBBTElHTl9UT0xFUkFOQ0UpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlzdHJpYnV0ZURpc3RhbmNlID0gZGlzdGFuY2VCZWZvcmU7XG4gICAgICAgICAgICAgICAgICAgIGFmdGVySW5kZXggPSBpO1xuICAgICAgICAgICAgICAgICAgICBkZWx0YSA9IGFjdGl2ZVJlY3RhbmdsZUNlbnRlciAtIF9jZW50ZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWN0aXZlSW5kZXggPSByZWN0YW5nbGVzLmluZGV4T2YodGhpcy5hY3RpdmVSZWN0YW5nbGUpO1xuICAgICAgICBsZXQgYmVmb3JlSW5kZXhlczogbnVtYmVyW10gPSBbXTtcbiAgICAgICAgbGV0IGFmdGVySW5kZXhlczogbnVtYmVyW10gPSBbXTtcbiAgICAgICAgaWYgKGJlZm9yZUluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGJlZm9yZUluZGV4ZXMucHVzaChiZWZvcmVJbmRleCk7XG4gICAgICAgICAgICBmaW5kUmVjdGFuZ2xlKGRpc3RyaWJ1dGVEaXN0YW5jZSwgcmVmQXJyYXlbYmVmb3JlSW5kZXhdLCAnYmVmb3JlJywgYmVmb3JlSW5kZXhlcyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWZ0ZXJJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhZnRlckluZGV4ZXMucHVzaChhZnRlckluZGV4KTtcbiAgICAgICAgICAgIGZpbmRSZWN0YW5nbGUoZGlzdHJpYnV0ZURpc3RhbmNlLCByZWZBcnJheVthZnRlckluZGV4XSwgJ2FmdGVyJywgYWZ0ZXJJbmRleGVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChiZWZvcmVJbmRleGVzLmxlbmd0aCB8fCBhZnRlckluZGV4ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleEFyciA9IFsuLi5iZWZvcmVJbmRleGVzLnJldmVyc2UoKSwgYWN0aXZlSW5kZXgsIC4uLmFmdGVySW5kZXhlc107XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZVJlY3RhbmdsZVtheGlzXSAtPSBkZWx0YTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgaW5kZXhBcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBkaXN0cmlidXRlTGluZXMucHVzaChnZXRMaW5lUG9pbnRzKHJlY3RhbmdsZXNbaW5kZXhBcnJbaSAtIDFdXSwgcmVjdGFuZ2xlc1tpbmRleEFycltpXV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGZpbmRSZWN0YW5nbGUoZGlzdGFuY2U6IG51bWJlciwgcmVmOiBEaXN0cmlidXRlUmVmLCBkaXJlY3Rpb246IHN0cmluZywgcmVjdGFuZ2xlSW5kZXhlczogbnVtYmVyW10pIHtcbiAgICAgICAgICAgIGNvbnN0IGFyciA9IHJlZltkaXJlY3Rpb24gYXMga2V5b2YgRGlzdHJpYnV0ZVJlZl07XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHJlZkFycmF5LmluZGV4T2YocmVmKTtcbiAgICAgICAgICAgIGlmICgoaW5kZXggPT09IDAgJiYgZGlyZWN0aW9uID09PSAnYmVmb3JlJykgfHwgKGluZGV4ID09PSByZWZBcnJheS5sZW5ndGggLSAxICYmIGRpcmVjdGlvbiA9PT0gJ2FmdGVyJykpIHJldHVybjtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKE1hdGguYWJzKGFycltpXS5kaXN0YW5jZSAtIGRpc3RhbmNlKSA8IDAuMSkge1xuICAgICAgICAgICAgICAgICAgICByZWN0YW5nbGVJbmRleGVzLnB1c2goYXJyW2ldLmluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgZmluZFJlY3RhbmdsZShkaXN0YW5jZSwgcmVmQXJyYXlbYXJyW2ldLmluZGV4XSwgZGlyZWN0aW9uLCByZWN0YW5nbGVJbmRleGVzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGdldExpbmVQb2ludHMoYmVmb3JlUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIGFmdGVyUmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wcG9zaXRlQXhpcyA9IGF4aXMgPT09ICd4JyA/ICd5JyA6ICd4JztcbiAgICAgICAgICAgIGNvbnN0IG9wcG9zaXRlU2lkZSA9IHNpZGUgPT09ICd3aWR0aCcgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG4gICAgICAgICAgICBjb25zdCBhbGlnbiA9IFtcbiAgICAgICAgICAgICAgICBiZWZvcmVSZWN0YW5nbGVbb3Bwb3NpdGVBeGlzXSxcbiAgICAgICAgICAgICAgICBiZWZvcmVSZWN0YW5nbGVbb3Bwb3NpdGVBeGlzXSArIGJlZm9yZVJlY3RhbmdsZVtvcHBvc2l0ZVNpZGVdLFxuICAgICAgICAgICAgICAgIGFmdGVyUmVjdGFuZ2xlW29wcG9zaXRlQXhpc10sXG4gICAgICAgICAgICAgICAgYWZ0ZXJSZWN0YW5nbGVbb3Bwb3NpdGVBeGlzXSArIGFmdGVyUmVjdGFuZ2xlW29wcG9zaXRlU2lkZV1cbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBjb25zdCBzb3J0QXJyID0gYWxpZ24uc29ydCgoYSwgYikgPT4gYSAtIGIpO1xuICAgICAgICAgICAgY29uc3QgYXZlcmFnZSA9IChzb3J0QXJyWzFdICsgc29ydEFyclsyXSkgLyAyO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0ID0gMztcbiAgICAgICAgICAgIHJldHVybiBpc0hvcml6b250YWxcbiAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgICBbYmVmb3JlUmVjdGFuZ2xlLnggKyBiZWZvcmVSZWN0YW5nbGUud2lkdGggKyBvZmZzZXQsIGF2ZXJhZ2VdLFxuICAgICAgICAgICAgICAgICAgICAgIFthZnRlclJlY3RhbmdsZS54IC0gb2Zmc2V0LCBhdmVyYWdlXVxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIDogW1xuICAgICAgICAgICAgICAgICAgICAgIFthdmVyYWdlLCBiZWZvcmVSZWN0YW5nbGUueSArIGJlZm9yZVJlY3RhbmdsZS5oZWlnaHQgKyBvZmZzZXRdLFxuICAgICAgICAgICAgICAgICAgICAgIFthdmVyYWdlLCBhZnRlclJlY3RhbmdsZS55IC0gb2Zmc2V0XVxuICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkZWx0YSwgZGlzdHJpYnV0ZUxpbmVzIH07XG4gICAgfVxuXG4gICAgZHJhd0FsaWduTGluZXMobGluZXM6IG51bWJlcltdW10sIGc6IFNWR0dFbGVtZW50KSB7XG4gICAgICAgIGxpbmVzLmZvckVhY2gocG9pbnRzID0+IHtcbiAgICAgICAgICAgIGlmICghcG9pbnRzLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgeEFsaWduID0gUGxhaXRCb2FyZC5nZXRSb3VnaFNWRyh0aGlzLmJvYXJkKS5saW5lKHBvaW50c1swXSwgcG9pbnRzWzFdLCBwb2ludHNbMl0sIHBvaW50c1szXSwge1xuICAgICAgICAgICAgICAgIHN0cm9rZTogU0VMRUNUSU9OX0JPUkRFUl9DT0xPUixcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgICAgICAgICBzdHJva2VMaW5lRGFzaDogWzQsIDRdXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGcuYXBwZW5kQ2hpbGQoeEFsaWduKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZHJhd0Rpc3RyaWJ1dGVMaW5lcyhsaW5lczogUG9pbnRbXVtdLCBnOiBTVkdHRWxlbWVudCkge1xuICAgICAgICBsaW5lcy5mb3JFYWNoKGxpbmUgPT4ge1xuICAgICAgICAgICAgaWYgKCFsaW5lLmxlbmd0aCkgcmV0dXJuO1xuICAgICAgICAgICAgbGV0IGlzSG9yaXpvbnRhbCA9IGxpbmVbMF1bMV0gPT09IGxpbmVbMV1bMV07XG4gICAgICAgICAgICBjb25zdCB5QWxpZ24gPSBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKHRoaXMuYm9hcmQpLmxpbmUobGluZVswXVswXSwgbGluZVswXVsxXSwgbGluZVsxXVswXSwgbGluZVsxXVsxXSwge1xuICAgICAgICAgICAgICAgIHN0cm9rZTogU0VMRUNUSU9OX0JPUkRFUl9DT0xPUixcbiAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBnLmFwcGVuZENoaWxkKHlBbGlnbik7XG5cbiAgICAgICAgICAgIGxpbmUuZm9yRWFjaChwb2ludCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYmFyUG9pbnQgPSBnZXRCYXJQb2ludChwb2ludCwgaXNIb3Jpem9udGFsKTtcbiAgICAgICAgICAgICAgICBjb25zdCBiYXIgPSBQbGFpdEJvYXJkLmdldFJvdWdoU1ZHKHRoaXMuYm9hcmQpLmxpbmUoYmFyUG9pbnRbMF1bMF0sIGJhclBvaW50WzBdWzFdLCBiYXJQb2ludFsxXVswXSwgYmFyUG9pbnRbMV1bMV0sIHtcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlOiBTRUxFQ1RJT05fQk9SREVSX0NPTE9SLFxuICAgICAgICAgICAgICAgICAgICBzdHJva2VXaWR0aDogMVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGcuYXBwZW5kQ2hpbGQoYmFyKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGlzSG9yaXpvbnRhbENyb3NzKHJlY3RhbmdsZTogUmVjdGFuZ2xlQ2xpZW50LCBvdGhlcjogUmVjdGFuZ2xlQ2xpZW50KSB7XG4gICAgcmV0dXJuICEocmVjdGFuZ2xlLnkgKyByZWN0YW5nbGUuaGVpZ2h0IDwgb3RoZXIueSB8fCByZWN0YW5nbGUueSA+IG90aGVyLnkgKyBvdGhlci5oZWlnaHQpO1xufVxuXG5mdW5jdGlvbiBpc1ZlcnRpY2FsQ3Jvc3MocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIG90aGVyOiBSZWN0YW5nbGVDbGllbnQpIHtcbiAgICByZXR1cm4gIShyZWN0YW5nbGUueCArIHJlY3RhbmdsZS53aWR0aCA8IG90aGVyLnggfHwgcmVjdGFuZ2xlLnggPiBvdGhlci54ICsgb3RoZXIud2lkdGgpO1xufVxuZnVuY3Rpb24gZ2V0QmFyUG9pbnQocG9pbnQ6IFBvaW50LCBpc0hvcml6b250YWw6IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gaXNIb3Jpem9udGFsXG4gICAgICAgID8gW1xuICAgICAgICAgICAgICBbcG9pbnRbMF0sIHBvaW50WzFdIC0gNF0sXG4gICAgICAgICAgICAgIFtwb2ludFswXSwgcG9pbnRbMV0gKyA0XVxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXG4gICAgICAgICAgICAgIFtwb2ludFswXSAtIDQsIHBvaW50WzFdXSxcbiAgICAgICAgICAgICAgW3BvaW50WzBdICsgNCwgcG9pbnRbMV1dXG4gICAgICAgICAgXTtcbn1cbiJdfQ==
|
|
@@ -2,10 +2,14 @@ import { PlaitBoard } from '../interfaces/board';
|
|
|
2
2
|
import { depthFirstRecursion, getIsRecursionFunc } from './tree';
|
|
3
3
|
import { BOARD_TO_SELECTED_ELEMENT } from './weak-maps';
|
|
4
4
|
import { Selection } from '../interfaces/selection';
|
|
5
|
+
import { PlaitPluginKey } from '../public-api';
|
|
5
6
|
export const getHitElementsBySelection = (board, selection, match = () => true) => {
|
|
6
7
|
const newSelection = selection || board.selection;
|
|
7
8
|
const rectangleHitElements = [];
|
|
8
|
-
|
|
9
|
+
if (!newSelection) {
|
|
10
|
+
return [];
|
|
11
|
+
}
|
|
12
|
+
const isCollapsed = Selection.isCollapsed(newSelection);
|
|
9
13
|
if (isCollapsed) {
|
|
10
14
|
const hitElement = getHitElementByPoint(board, newSelection.anchor, match);
|
|
11
15
|
if (hitElement) {
|
|
@@ -54,8 +58,10 @@ export const addSelectedElement = (board, element) => {
|
|
|
54
58
|
};
|
|
55
59
|
export const removeSelectedElement = (board, element) => {
|
|
56
60
|
const selectedElements = getSelectedElements(board);
|
|
57
|
-
|
|
58
|
-
|
|
61
|
+
if (selectedElements.includes(element)) {
|
|
62
|
+
const newSelectedElements = selectedElements.filter(value => value !== element);
|
|
63
|
+
cacheSelectedElements(board, newSelectedElements);
|
|
64
|
+
}
|
|
59
65
|
};
|
|
60
66
|
export const clearSelectedElement = (board) => {
|
|
61
67
|
cacheSelectedElements(board, []);
|
|
@@ -64,4 +70,13 @@ export const isSelectedElement = (board, element) => {
|
|
|
64
70
|
const selectedElements = getSelectedElements(board);
|
|
65
71
|
return !!selectedElements.find(value => value === element);
|
|
66
72
|
};
|
|
67
|
-
|
|
73
|
+
export const temporaryDisableSelection = (board) => {
|
|
74
|
+
const currentOptions = board.getPluginOptions(PlaitPluginKey.withSelection);
|
|
75
|
+
board.setPluginOptions(PlaitPluginKey.withSelection, {
|
|
76
|
+
isDisabledSelect: true
|
|
77
|
+
});
|
|
78
|
+
setTimeout(() => {
|
|
79
|
+
board.setPluginOptions(PlaitPluginKey.withSelection, { ...currentOptions });
|
|
80
|
+
}, 0);
|
|
81
|
+
};
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0ZWQtZWxlbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL3NlbGVjdGVkLWVsZW1lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRWpELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNqRSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBR3BELE9BQU8sRUFBcUIsY0FBYyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUVyRixNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxDQUNyQyxLQUFpQixFQUNqQixTQUFxQixFQUNyQixRQUE0QyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQ3hELEVBQUU7SUFDQSxNQUFNLFlBQVksR0FBRyxTQUFTLElBQUksS0FBSyxDQUFDLFNBQXNCLENBQUM7SUFDL0QsTUFBTSxvQkFBb0IsR0FBbUIsRUFBRSxDQUFDO0lBQ2hELElBQUksQ0FBQyxZQUFZLEVBQUU7UUFDZixPQUFPLEVBQUUsQ0FBQztLQUNiO0lBQ0QsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN4RCxJQUFJLFdBQVcsRUFBRTtRQUNiLE1BQU0sVUFBVSxHQUFHLG9CQUFvQixDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNFLElBQUksVUFBVSxFQUFFO1lBQ1osT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3ZCO2FBQU07WUFDSCxPQUFPLEVBQUUsQ0FBQztTQUNiO0tBQ0o7SUFDRCxtQkFBbUIsQ0FDZixLQUFLLEVBQ0wsSUFBSSxDQUFDLEVBQUU7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QUssRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNyQyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLEtBQWlCLEVBQUUsT0FBcUIsRUFBRSxFQUFFO0lBQzFFLE1BQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQsT0FBTyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDO0FBQy9ELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLENBQUMsS0FBd0IsRUFBRSxFQUFFO0lBQ2xFLE1BQU0sY0FBYyxHQUFHLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDNUUsS0FBSyxDQUFDLGdCQUFnQixDQUFvQixjQUFjLENBQUMsYUFBYSxFQUFFO1FBQ3BFLGdCQUFnQixFQUFFLElBQUk7S0FDekIsQ0FBQyxDQUFDO0lBQ0gsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNaLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBb0IsY0FBYyxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNuRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDVixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGFpdEJvYXJkIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ib2FyZCc7XG5pbXBvcnQgeyBBbmNlc3RvciB9IGZyb20gJy4uL2ludGVyZmFjZXMvbm9kZSc7XG5pbXBvcnQgeyBkZXB0aEZpcnN0UmVjdXJzaW9uLCBnZXRJc1JlY3Vyc2lvbkZ1bmMgfSBmcm9tICcuL3RyZWUnO1xuaW1wb3J0IHsgQk9BUkRfVE9fU0VMRUNURURfRUxFTUVOVCB9IGZyb20gJy4vd2Vhay1tYXBzJztcbmltcG9ydCB7IFNlbGVjdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2VsZWN0aW9uJztcbmltcG9ydCB7IFBsYWl0RWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZWxlbWVudCc7XG5pbXBvcnQgeyBQb2ludCB9IGZyb20gJy4uL2ludGVyZmFjZXMvcG9pbnQnO1xuaW1wb3J0IHsgUGxhaXRPcHRpb25zQm9hcmQsIFBsYWl0UGx1Z2luS2V5LCBXaXRoUGx1Z2luT3B0aW9ucyB9IGZyb20gJy4uL3B1YmxpYy1hcGknO1xuXG5leHBvcnQgY29uc3QgZ2V0SGl0RWxlbWVudHNCeVNlbGVjdGlvbiA9IChcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBzZWxlY3Rpb24/OiBTZWxlY3Rpb24sXG4gICAgbWF0Y2g6IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IGJvb2xlYW4gPSAoKSA9PiB0cnVlXG4pID0+IHtcbiAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBzZWxlY3Rpb24gfHwgYm9hcmQuc2VsZWN0aW9uIGFzIFNlbGVjdGlvbjtcbiAgICBjb25zdCByZWN0YW5nbGVIaXRFbGVtZW50czogUGxhaXRFbGVtZW50W10gPSBbXTtcbiAgICBpZiAoIW5ld1NlbGVjdGlvbikge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGNvbnN0IGlzQ29sbGFwc2VkID0gU2VsZWN0aW9uLmlzQ29sbGFwc2VkKG5ld1NlbGVjdGlvbik7XG4gICAgaWYgKGlzQ29sbGFwc2VkKSB7XG4gICAgICAgIGNvbnN0IGhpdEVsZW1lbnQgPSBnZXRIaXRFbGVtZW50QnlQb2ludChib2FyZCwgbmV3U2VsZWN0aW9uLmFuY2hvciwgbWF0Y2gpO1xuICAgICAgICBpZiAoaGl0RWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIFtoaXRFbGVtZW50XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkZXB0aEZpcnN0UmVjdXJzaW9uPEFuY2VzdG9yPihcbiAgICAgICAgYm9hcmQsXG4gICAgICAgIG5vZGUgPT4ge1xuICAgICAgICAgICAgaWYgKCFQbGFpdEJvYXJkLmlzQm9hcmQobm9kZSkgJiYgbWF0Y2gobm9kZSkgJiYgYm9hcmQuaXNSZWN0YW5nbGVIaXQobm9kZSwgbmV3U2VsZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgIHJlY3RhbmdsZUhpdEVsZW1lbnRzLnB1c2gobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdldElzUmVjdXJzaW9uRnVuYyhib2FyZCksXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIHJldHVybiByZWN0YW5nbGVIaXRFbGVtZW50cztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRIaXRFbGVtZW50QnlQb2ludCA9IChcbiAgICBib2FyZDogUGxhaXRCb2FyZCxcbiAgICBwb2ludDogUG9pbnQsXG4gICAgbWF0Y2g6IChlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IGJvb2xlYW4gPSAoKSA9PiB0cnVlXG4pOiB1bmRlZmluZWQgfCBQbGFpdEVsZW1lbnQgPT4ge1xuICAgIGxldCByZWN0YW5nbGVIaXRFbGVtZW50OiBQbGFpdEVsZW1lbnQgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgbGV0IGhpdEVsZW1lbnQ6IFBsYWl0RWxlbWVudCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBkZXB0aEZpcnN0UmVjdXJzaW9uPEFuY2VzdG9yPihcbiAgICAgICAgYm9hcmQsXG4gICAgICAgIG5vZGUgPT4ge1xuICAgICAgICAgICAgaWYgKGhpdEVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoUGxhaXRCb2FyZC5pc0JvYXJkKG5vZGUpIHx8ICFtYXRjaChub2RlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChib2FyZC5pc0hpdChub2RlLCBwb2ludCkpIHtcbiAgICAgICAgICAgICAgICBoaXRFbGVtZW50ID0gbm9kZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXJlY3RhbmdsZUhpdEVsZW1lbnQgJiYgYm9hcmQuaXNSZWN0YW5nbGVIaXQobm9kZSwgeyBhbmNob3I6IHBvaW50LCBmb2N1czogcG9pbnQgfSkpIHtcbiAgICAgICAgICAgICAgICByZWN0YW5nbGVIaXRFbGVtZW50ID0gbm9kZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ2V0SXNSZWN1cnNpb25GdW5jKGJvYXJkKSxcbiAgICAgICAgdHJ1ZVxuICAgICk7XG4gICAgcmV0dXJuIGhpdEVsZW1lbnQgfHwgcmVjdGFuZ2xlSGl0RWxlbWVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBjYWNoZVNlbGVjdGVkRWxlbWVudHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHNlbGVjdGVkRWxlbWVudHM6IFBsYWl0RWxlbWVudFtdKSA9PiB7XG4gICAgQk9BUkRfVE9fU0VMRUNURURfRUxFTUVOVC5zZXQoYm9hcmQsIHNlbGVjdGVkRWxlbWVudHMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNlbGVjdGVkRWxlbWVudHMgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICByZXR1cm4gQk9BUkRfVE9fU0VMRUNURURfRUxFTUVOVC5nZXQoYm9hcmQpIHx8IFtdO1xufTtcblxuZXhwb3J0IGNvbnN0IGFkZFNlbGVjdGVkRWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCwgZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHMoYm9hcmQpO1xuICAgIGNhY2hlU2VsZWN0ZWRFbGVtZW50cyhib2FyZCwgWy4uLnNlbGVjdGVkRWxlbWVudHMsIGVsZW1lbnRdKTtcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVTZWxlY3RlZEVsZW1lbnQgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIGVsZW1lbnQ6IFBsYWl0RWxlbWVudCkgPT4ge1xuICAgIGNvbnN0IHNlbGVjdGVkRWxlbWVudHMgPSBnZXRTZWxlY3RlZEVsZW1lbnRzKGJvYXJkKTtcbiAgICBpZiAoc2VsZWN0ZWRFbGVtZW50cy5pbmNsdWRlcyhlbGVtZW50KSkge1xuICAgICAgICBjb25zdCBuZXdTZWxlY3RlZEVsZW1lbnRzID0gc2VsZWN0ZWRFbGVtZW50cy5maWx0ZXIodmFsdWUgPT4gdmFsdWUgIT09IGVsZW1lbnQpO1xuICAgICAgICBjYWNoZVNlbGVjdGVkRWxlbWVudHMoYm9hcmQsIG5ld1NlbGVjdGVkRWxlbWVudHMpO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjbGVhclNlbGVjdGVkRWxlbWVudCA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIGNhY2hlU2VsZWN0ZWRFbGVtZW50cyhib2FyZCwgW10pO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzU2VsZWN0ZWRFbGVtZW50ID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBlbGVtZW50OiBQbGFpdEVsZW1lbnQpID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZEVsZW1lbnRzID0gZ2V0U2VsZWN0ZWRFbGVtZW50cyhib2FyZCk7XG4gICAgcmV0dXJuICEhc2VsZWN0ZWRFbGVtZW50cy5maW5kKHZhbHVlID0+IHZhbHVlID09PSBlbGVtZW50KTtcbn07XG5cbmV4cG9ydCBjb25zdCB0ZW1wb3JhcnlEaXNhYmxlU2VsZWN0aW9uID0gKGJvYXJkOiBQbGFpdE9wdGlvbnNCb2FyZCkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRPcHRpb25zID0gYm9hcmQuZ2V0UGx1Z2luT3B0aW9ucyhQbGFpdFBsdWdpbktleS53aXRoU2VsZWN0aW9uKTtcbiAgICBib2FyZC5zZXRQbHVnaW5PcHRpb25zPFdpdGhQbHVnaW5PcHRpb25zPihQbGFpdFBsdWdpbktleS53aXRoU2VsZWN0aW9uLCB7XG4gICAgICAgIGlzRGlzYWJsZWRTZWxlY3Q6IHRydWVcbiAgICB9KTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgYm9hcmQuc2V0UGx1Z2luT3B0aW9uczxXaXRoUGx1Z2luT3B0aW9ucz4oUGxhaXRQbHVnaW5LZXkud2l0aFNlbGVjdGlvbiwgeyAuLi5jdXJyZW50T3B0aW9ucyB9KTtcbiAgICB9LCAwKTtcbn07XG4iXX0=
|
package/fesm2022/plait-core.mjs
CHANGED
|
@@ -78,7 +78,10 @@ const Selection = {
|
|
|
78
78
|
const getHitElementsBySelection = (board, selection, match = () => true) => {
|
|
79
79
|
const newSelection = selection || board.selection;
|
|
80
80
|
const rectangleHitElements = [];
|
|
81
|
-
|
|
81
|
+
if (!newSelection) {
|
|
82
|
+
return [];
|
|
83
|
+
}
|
|
84
|
+
const isCollapsed = Selection.isCollapsed(newSelection);
|
|
82
85
|
if (isCollapsed) {
|
|
83
86
|
const hitElement = getHitElementByPoint(board, newSelection.anchor, match);
|
|
84
87
|
if (hitElement) {
|
|
@@ -127,8 +130,10 @@ const addSelectedElement = (board, element) => {
|
|
|
127
130
|
};
|
|
128
131
|
const removeSelectedElement = (board, element) => {
|
|
129
132
|
const selectedElements = getSelectedElements(board);
|
|
130
|
-
|
|
131
|
-
|
|
133
|
+
if (selectedElements.includes(element)) {
|
|
134
|
+
const newSelectedElements = selectedElements.filter(value => value !== element);
|
|
135
|
+
cacheSelectedElements(board, newSelectedElements);
|
|
136
|
+
}
|
|
132
137
|
};
|
|
133
138
|
const clearSelectedElement = (board) => {
|
|
134
139
|
cacheSelectedElements(board, []);
|
|
@@ -137,6 +142,15 @@ const isSelectedElement = (board, element) => {
|
|
|
137
142
|
const selectedElements = getSelectedElements(board);
|
|
138
143
|
return !!selectedElements.find(value => value === element);
|
|
139
144
|
};
|
|
145
|
+
const temporaryDisableSelection = (board) => {
|
|
146
|
+
const currentOptions = board.getPluginOptions(PlaitPluginKey.withSelection);
|
|
147
|
+
board.setPluginOptions(PlaitPluginKey.withSelection, {
|
|
148
|
+
isDisabledSelect: true
|
|
149
|
+
});
|
|
150
|
+
setTimeout(() => {
|
|
151
|
+
board.setPluginOptions(PlaitPluginKey.withSelection, { ...currentOptions });
|
|
152
|
+
}, 0);
|
|
153
|
+
};
|
|
140
154
|
|
|
141
155
|
/**
|
|
142
156
|
* @license
|
|
@@ -716,6 +730,60 @@ const isPointInRoundRectangle = (point, rectangle, radius) => {
|
|
|
716
730
|
const isInCorner = handleLeftTop || handleLeftBottom || handleRightTop || handleRightBottom;
|
|
717
731
|
return isInRectangle && !isInCorner;
|
|
718
732
|
};
|
|
733
|
+
const downScale = (number) => {
|
|
734
|
+
return Number(number.toFixed(2));
|
|
735
|
+
};
|
|
736
|
+
// https://gist.github.com/nicholaswmin/c2661eb11cad5671d816
|
|
737
|
+
const catmullRomFitting = function (points) {
|
|
738
|
+
const alpha = 0.5;
|
|
739
|
+
let p0, p1, p2, p3, bp1, bp2, d1, d2, d3, A, B, N, M;
|
|
740
|
+
var d3powA, d2powA, d3pow2A, d2pow2A, d1pow2A, d1powA;
|
|
741
|
+
const result = [];
|
|
742
|
+
result.push([Math.round(points[0][0]), Math.round(points[0][1])]);
|
|
743
|
+
var length = points.length;
|
|
744
|
+
for (var i = 0; i < length - 1; i++) {
|
|
745
|
+
p0 = i == 0 ? points[0] : points[i - 1];
|
|
746
|
+
p1 = points[i];
|
|
747
|
+
p2 = points[i + 1];
|
|
748
|
+
p3 = i + 2 < length ? points[i + 2] : p2;
|
|
749
|
+
d1 = Math.sqrt(Math.pow(p0[0] - p1[0], 2) + Math.pow(p0[1] - p1[1], 2));
|
|
750
|
+
d2 = Math.sqrt(Math.pow(p1[0] - p2[0], 2) + Math.pow(p1[1] - p2[1], 2));
|
|
751
|
+
d3 = Math.sqrt(Math.pow(p2[0] - p3[0], 2) + Math.pow(p2[1] - p3[1], 2));
|
|
752
|
+
// Catmull-Rom to Cubic Bezier conversion matrix
|
|
753
|
+
// A = 2d1^2a + 3d1^a * d2^a + d3^2a
|
|
754
|
+
// B = 2d3^2a + 3d3^a * d2^a + d2^2a
|
|
755
|
+
// [ 0 1 0 0 ]
|
|
756
|
+
// [ -d2^2a /N A/N d1^2a /N 0 ]
|
|
757
|
+
// [ 0 d3^2a /M B/M -d2^2a /M ]
|
|
758
|
+
// [ 0 0 1 0 ]
|
|
759
|
+
d3powA = Math.pow(d3, alpha);
|
|
760
|
+
d3pow2A = Math.pow(d3, 2 * alpha);
|
|
761
|
+
d2powA = Math.pow(d2, alpha);
|
|
762
|
+
d2pow2A = Math.pow(d2, 2 * alpha);
|
|
763
|
+
d1powA = Math.pow(d1, alpha);
|
|
764
|
+
d1pow2A = Math.pow(d1, 2 * alpha);
|
|
765
|
+
A = 2 * d1pow2A + 3 * d1powA * d2powA + d2pow2A;
|
|
766
|
+
B = 2 * d3pow2A + 3 * d3powA * d2powA + d2pow2A;
|
|
767
|
+
N = 3 * d1powA * (d1powA + d2powA);
|
|
768
|
+
if (N > 0) {
|
|
769
|
+
N = 1 / N;
|
|
770
|
+
}
|
|
771
|
+
M = 3 * d3powA * (d3powA + d2powA);
|
|
772
|
+
if (M > 0) {
|
|
773
|
+
M = 1 / M;
|
|
774
|
+
}
|
|
775
|
+
bp1 = [(-d2pow2A * p0[0] + A * p1[0] + d1pow2A * p2[0]) * N, (-d2pow2A * p0[1] + A * p1[1] + d1pow2A * p2[1]) * N];
|
|
776
|
+
bp2 = [(d3pow2A * p1[0] + B * p2[0] - d2pow2A * p3[0]) * M, (d3pow2A * p1[1] + B * p2[1] - d2pow2A * p3[1]) * M];
|
|
777
|
+
if (bp1[0] == 0 && bp1[1] == 0) {
|
|
778
|
+
bp1 = p1;
|
|
779
|
+
}
|
|
780
|
+
if (bp2[0] == 0 && bp2[1] == 0) {
|
|
781
|
+
bp2 = p2;
|
|
782
|
+
}
|
|
783
|
+
result.push(bp1, bp2, p2);
|
|
784
|
+
}
|
|
785
|
+
return result;
|
|
786
|
+
};
|
|
719
787
|
|
|
720
788
|
function transformPoints(board, points) {
|
|
721
789
|
const newPoints = points.map(point => {
|
|
@@ -1002,11 +1070,11 @@ const drawRectangle = (board, rectangle, options) => {
|
|
|
1002
1070
|
return rectangleG;
|
|
1003
1071
|
};
|
|
1004
1072
|
|
|
1005
|
-
function arrowPoints(start, end,
|
|
1073
|
+
function arrowPoints(start, end, degree = 40) {
|
|
1006
1074
|
const width = Math.abs(start[0] - end[0]);
|
|
1007
1075
|
const height = Math.abs(start[1] - end[1]);
|
|
1008
1076
|
let hypotenuse = Math.hypot(width, height); // 斜边
|
|
1009
|
-
const realRotateLine = hypotenuse
|
|
1077
|
+
const realRotateLine = hypotenuse / 2;
|
|
1010
1078
|
const rotateWidth = (realRotateLine / hypotenuse) * width;
|
|
1011
1079
|
const rotateHeight = (realRotateLine / hypotenuse) * height;
|
|
1012
1080
|
const rotatePoint = [
|
|
@@ -1018,7 +1086,7 @@ function arrowPoints(start, end, maxHypotenuseLength = 10, degree = 40) {
|
|
|
1018
1086
|
return { pointLeft, pointRight };
|
|
1019
1087
|
}
|
|
1020
1088
|
function drawArrow(rs, start, end, options, maxHypotenuseLength = 10, degree = 40) {
|
|
1021
|
-
const { pointLeft, pointRight } = arrowPoints(start, end,
|
|
1089
|
+
const { pointLeft, pointRight } = arrowPoints(start, end, degree);
|
|
1022
1090
|
const arrowLineLeft = rs.linearPath([pointLeft, end], options);
|
|
1023
1091
|
const arrowLineRight = rs.linearPath([pointRight, end], options);
|
|
1024
1092
|
return [arrowLineLeft, arrowLineRight];
|
|
@@ -2287,7 +2355,12 @@ function withSelection(board) {
|
|
|
2287
2355
|
// prevent text from being selected when user pressed main pointer and is moving
|
|
2288
2356
|
let needPreventNativeSelectionWhenMoving = false;
|
|
2289
2357
|
board.pointerDown = (event) => {
|
|
2290
|
-
|
|
2358
|
+
const isHitText = event.target instanceof Element && event.target.closest('.plait-richtext-container');
|
|
2359
|
+
// prevent text from being selected when user pressed shift and pointer down
|
|
2360
|
+
if (!isHitText && event.shiftKey) {
|
|
2361
|
+
event.preventDefault();
|
|
2362
|
+
}
|
|
2363
|
+
if (!isHitText) {
|
|
2291
2364
|
needPreventNativeSelectionWhenMoving = true;
|
|
2292
2365
|
}
|
|
2293
2366
|
if (!isMainPointer(event)) {
|
|
@@ -2303,10 +2376,7 @@ function withSelection(board) {
|
|
|
2303
2376
|
pointerDown(event);
|
|
2304
2377
|
return;
|
|
2305
2378
|
}
|
|
2306
|
-
if (PlaitBoard.isPointer(board, PlaitPointerType.selection) &&
|
|
2307
|
-
!hitElement &&
|
|
2308
|
-
options.isMultiple &&
|
|
2309
|
-
!options.isDisabledSelect) {
|
|
2379
|
+
if (PlaitBoard.isPointer(board, PlaitPointerType.selection) && !hitElement && options.isMultiple && !options.isDisabledSelect) {
|
|
2310
2380
|
selectionRectangleG?.remove();
|
|
2311
2381
|
start = point;
|
|
2312
2382
|
preventTouchMove(board, event, true);
|
|
@@ -2369,6 +2439,12 @@ function withSelection(board) {
|
|
|
2369
2439
|
if (options.isDisabledSelect) {
|
|
2370
2440
|
clearSelectedElement(board);
|
|
2371
2441
|
}
|
|
2442
|
+
// remove selected element if include
|
|
2443
|
+
board.operations.forEach(op => {
|
|
2444
|
+
if (op.type === 'remove_node') {
|
|
2445
|
+
removeSelectedElement(board, op.node);
|
|
2446
|
+
}
|
|
2447
|
+
});
|
|
2372
2448
|
// calc selected elements entry
|
|
2373
2449
|
if (board.pointer !== PlaitPointerType.hand && !options.isDisabledSelect) {
|
|
2374
2450
|
try {
|
|
@@ -2387,21 +2463,18 @@ function withSelection(board) {
|
|
|
2387
2463
|
}
|
|
2388
2464
|
}
|
|
2389
2465
|
else {
|
|
2390
|
-
|
|
2391
|
-
|
|
2392
|
-
|
|
2393
|
-
|
|
2394
|
-
if (currentSelectedElements.length !== previousSelectedElements.length ||
|
|
2395
|
-
currentSelectedElements.some((c, index) => c !== previousSelectedElements[index])) {
|
|
2396
|
-
selectionRectangleG?.remove();
|
|
2397
|
-
selectionRectangleG = createSelectionRectangleG(board);
|
|
2398
|
-
previousSelectedElements = currentSelectedElements;
|
|
2399
|
-
}
|
|
2400
|
-
}
|
|
2401
|
-
else {
|
|
2466
|
+
const currentSelectedElements = getSelectedElements(board);
|
|
2467
|
+
if (currentSelectedElements.length && currentSelectedElements.length > 1) {
|
|
2468
|
+
if (currentSelectedElements.length !== previousSelectedElements.length ||
|
|
2469
|
+
currentSelectedElements.some((c, index) => c !== previousSelectedElements[index])) {
|
|
2402
2470
|
selectionRectangleG?.remove();
|
|
2471
|
+
selectionRectangleG = createSelectionRectangleG(board);
|
|
2472
|
+
previousSelectedElements = currentSelectedElements;
|
|
2403
2473
|
}
|
|
2404
|
-
}
|
|
2474
|
+
}
|
|
2475
|
+
else {
|
|
2476
|
+
selectionRectangleG?.remove();
|
|
2477
|
+
}
|
|
2405
2478
|
}
|
|
2406
2479
|
}
|
|
2407
2480
|
catch (error) {
|
|
@@ -2468,7 +2541,7 @@ const SelectionTransforms = {
|
|
|
2468
2541
|
};
|
|
2469
2542
|
function addSelectionWithTemporaryElements(board, elements) {
|
|
2470
2543
|
const timeoutId = setTimeout(() => {
|
|
2471
|
-
setSelection(board,
|
|
2544
|
+
setSelection(board, { anchor: [0, 0], focus: [0, 0] });
|
|
2472
2545
|
}, 0);
|
|
2473
2546
|
let ref = getTemporaryRef(board);
|
|
2474
2547
|
if (ref) {
|
|
@@ -3069,6 +3142,7 @@ class AlignReaction {
|
|
|
3069
3142
|
const alignDeltaX = deltaX;
|
|
3070
3143
|
const alignDeltaY = deltaY;
|
|
3071
3144
|
this.activeRectangle.x += deltaX;
|
|
3145
|
+
this.activeRectangle.y += deltaY;
|
|
3072
3146
|
const distributeHorizontalResult = this.alignDistribute(alignRectangles, true);
|
|
3073
3147
|
const distributeVerticalResult = this.alignDistribute(alignRectangles, false);
|
|
3074
3148
|
const distributeLines = [...distributeHorizontalResult.distributeLines, ...distributeVerticalResult.distributeLines];
|
|
@@ -3303,6 +3377,7 @@ function withMoving(board) {
|
|
|
3303
3377
|
let startPoint;
|
|
3304
3378
|
let activeElements = [];
|
|
3305
3379
|
let alignG = null;
|
|
3380
|
+
let activeElementsRectangle = null;
|
|
3306
3381
|
board.pointerDown = (event) => {
|
|
3307
3382
|
const host = BOARD_TO_HOST.get(board);
|
|
3308
3383
|
const point = transformPoint(board, toPoint(event.x, event.y, host));
|
|
@@ -3322,6 +3397,7 @@ function withMoving(board) {
|
|
|
3322
3397
|
if (activeElements.length > 0) {
|
|
3323
3398
|
preventTouchMove(board, event, true);
|
|
3324
3399
|
}
|
|
3400
|
+
activeElementsRectangle = getRectangleByElements(board, activeElements, true);
|
|
3325
3401
|
}
|
|
3326
3402
|
pointerDown(event);
|
|
3327
3403
|
};
|
|
@@ -3338,10 +3414,15 @@ function withMoving(board) {
|
|
|
3338
3414
|
const tolerance = 5;
|
|
3339
3415
|
if (Math.abs(offsetX) > tolerance || Math.abs(offsetY) > tolerance || getMovingElements(board).length > 0) {
|
|
3340
3416
|
throttleRAF(() => {
|
|
3341
|
-
|
|
3342
|
-
|
|
3343
|
-
|
|
3344
|
-
const
|
|
3417
|
+
if (!activeElementsRectangle) {
|
|
3418
|
+
return;
|
|
3419
|
+
}
|
|
3420
|
+
const newRectangle = {
|
|
3421
|
+
...activeElementsRectangle,
|
|
3422
|
+
x: activeElementsRectangle.x + offsetX,
|
|
3423
|
+
y: activeElementsRectangle.y + offsetY
|
|
3424
|
+
};
|
|
3425
|
+
const reactionManager = new AlignReaction(board, activeElements, newRectangle);
|
|
3345
3426
|
const ref = reactionManager.handleAlign();
|
|
3346
3427
|
offsetX -= ref.deltaX;
|
|
3347
3428
|
offsetY -= ref.deltaY;
|
|
@@ -3390,6 +3471,7 @@ function withMoving(board) {
|
|
|
3390
3471
|
function cancelMove(board) {
|
|
3391
3472
|
alignG?.remove();
|
|
3392
3473
|
startPoint = null;
|
|
3474
|
+
activeElementsRectangle = null;
|
|
3393
3475
|
offsetX = 0;
|
|
3394
3476
|
offsetY = 0;
|
|
3395
3477
|
activeElements = [];
|
|
@@ -4264,5 +4346,5 @@ function createModModifierKeys() {
|
|
|
4264
4346
|
* Generated bundle index. Do not edit.
|
|
4265
4347
|
*/
|
|
4266
4348
|
|
|
4267
|
-
export { A, ACTIVE_STROKE_WIDTH, ALT, APOSTROPHE, ATTACHED_ELEMENT_CLASS_NAME, AT_SIGN, B, BACKSLASH, BACKSPACE, BOARD_TO_COMPONENT, BOARD_TO_ELEMENT_HOST, BOARD_TO_HOST, BOARD_TO_IS_SELECTION_MOVING, BOARD_TO_MOVING_ELEMENT, BOARD_TO_MOVING_POINT, BOARD_TO_MOVING_POINT_IN_BOARD, BOARD_TO_ON_CHANGE, BOARD_TO_ROUGH_SVG, BOARD_TO_SELECTED_ELEMENT, BOARD_TO_TEMPORARY_ELEMENTS, BOARD_TO_TOUCH_REF, BOARD_TO_VIEWPORT_ORIGINATION, BoardTransforms, C, CAPS_LOCK, CLIP_BOARD_FORMAT_KEY, CLOSE_SQUARE_BRACKET, COMMA, CONTEXT_MENU, CONTROL, ColorfulThemeColor, CoreTransforms, D, DASH, DELETE, DOWN_ARROW, DarkThemeColor, DefaultThemeColor, Direction, E, EIGHT, ELEMENT_TO_COMPONENT, END, ENTER, EQUALS, ESCAPE, F, F1, F10, F11, F12, F2, F3, F4, F5, F6, F7, F8, F9, FF_EQUALS, FF_MINUS, FF_MUTE, FF_SEMICOLON, FF_VOLUME_DOWN, FF_VOLUME_UP, FIRST_MEDIA, FIVE, FLUSHING, FOUR, G, H, HOME, HOST_CLASS_NAME, I, INSERT, IS_APPLE, IS_BOARD_CACHE, IS_CHROME, IS_CHROME_LEGACY, IS_EDGE_LEGACY, IS_FIREFOX, IS_IOS, IS_MAC, IS_SAFARI, IS_TEXT_EDITABLE, J, K, L, LAST_MEDIA, LEFT_ARROW, M, MAC_ENTER, MAC_META, MAC_WK_CMD_LEFT, MAC_WK_CMD_RIGHT, MAX_RADIUS, MERGING, META, MUTE, N, NINE, NODE_TO_INDEX, NODE_TO_PARENT, NS, NUMPAD_DIVIDE, NUMPAD_EIGHT, NUMPAD_FIVE, NUMPAD_FOUR, NUMPAD_MINUS, NUMPAD_MULTIPLY, NUMPAD_NINE, NUMPAD_ONE, NUMPAD_PERIOD, NUMPAD_PLUS, NUMPAD_SEVEN, NUMPAD_SIX, NUMPAD_THREE, NUMPAD_TWO, NUMPAD_ZERO, NUM_CENTER, NUM_LOCK, O, ONE, OPEN_SQUARE_BRACKET, P, PAGE_DOWN, PAGE_UP, PATH_REFS, PAUSE, PERIOD, PLUS_SIGN, POINTER_BUTTON, PRESS_AND_MOVE_BUFFER, PRINT_SCREEN, Path, PlaitBoard, PlaitBoardComponent, PlaitChildrenElementComponent, PlaitContextService, PlaitElement, PlaitElementComponent, PlaitHistoryBoard, PlaitIslandBaseComponent, PlaitIslandPopoverBaseComponent, PlaitNode, PlaitOperation, PlaitPluginElementComponent, PlaitPluginKey, PlaitPointerType, Point, Q, QUESTION_MARK, R, RIGHT_ARROW, RectangleClient, ResizeCursorClass, RetroThemeColor, S, SAVING, SCROLL_BAR_WIDTH, SCROLL_LOCK, SELECTION_BORDER_COLOR, SELECTION_FILL_COLOR, SELECTION_RECTANGLE_CLASS_NAME, SEMICOLON, SEVEN, SHIFT, SINGLE_QUOTE, SIX, SLASH, SPACE, Selection, SoftThemeColor, StarryThemeColor, T, TAB, THREE, TILDE, TWO, ThemeColorMode, ThemeColors, Transforms, U, UP_ARROW, V, VOLUME_DOWN, VOLUME_UP, Viewport, W, X, Y, Z, ZERO, addMovingElements, addSelectedElement, arrowPoints, cacheMovingElements, cacheSelectedElements, clampZoomLevel, clearNodeWeakMap, clearSelectedElement, clearSelectionMoving, clearViewportOrigination, createFakeEvent, createForeignObject, createG, createKeyboardEvent, createMask, createModModifierKeys, createMouseEvent, createPath, createPointerEvent, createRect, createSVG, createSelectionRectangleG, createTestingBoard, createText, createTouchEvent, debounce, deleteTemporaryElements, depthFirstRecursion, distanceBetweenPointAndPoint, distanceBetweenPointAndRectangle, distanceBetweenPointAndSegment, distanceBetweenPointAndSegments, downloadImage, drawArrow, drawBezierPath, drawCircle, drawLine, drawLinearPath, drawRectangle, drawRoundRectangle, fakeNodeWeakMap, findElements, getBoardRectangle, getClipboardByKey, getClipboardDataByMedia, getDataFromClipboard, getElementById, getElementHostBBox, getHitElementByPoint, getHitElementsBySelection, getIsRecursionFunc, getMovingElements, getNearestPointBetweenPointAndSegment, getNearestPointBetweenPointAndSegments, getRealScrollBarWidth, getRectangleByElements, getSelectedElements, getTemporaryElements, getTemporaryRef, getTextFromClipboard, getViewBox, getViewBoxCenterPoint, getViewportContainerRect, getViewportOrigination, handleTouchTarget, hasBeforeContextChange, hasInputOrTextareaTarget, hasOnBoardChange, hasOnContextChanged, hotkeys, idCreator, initializeViewBox, initializeViewportContainer, initializeViewportOffset, inverse, isDOMElement, isDOMNode, isFromScrolling, isFromViewportChange, isInPlaitBoard, isLineHitLine, isMainPointer, isNullOrUndefined, isPointInEllipse, isPointInPolygon, isPointInRoundRectangle, isPolylineHitRectangle, isPreventTouchMove, isSecondaryPointer, isSelectedElement, isSelectionMoving, isSetViewportOperation, normalizePoint, preventTouchMove, removeMovingElements, removeSelectedElement, rotate, scrollToRectangle, setClipboardData, setClipboardDataByMedia, setClipboardDataByText, setIsFromScrolling, setIsFromViewportChange, setPathStrokeLinecap, setSVGViewBox, setSelectionMoving, setStrokeLinecap, shouldClear, shouldMerge, shouldSave, throttleRAF, toImage, toPoint, transformPoint, transformPoints, updateForeignObject, updateForeignObjectWidth, updateViewportContainerScroll, updateViewportOffset, updateViewportOrigination, withMoving, withOptions, withSelection };
|
|
4349
|
+
export { A, ACTIVE_STROKE_WIDTH, ALT, APOSTROPHE, ATTACHED_ELEMENT_CLASS_NAME, AT_SIGN, B, BACKSLASH, BACKSPACE, BOARD_TO_COMPONENT, BOARD_TO_ELEMENT_HOST, BOARD_TO_HOST, BOARD_TO_IS_SELECTION_MOVING, BOARD_TO_MOVING_ELEMENT, BOARD_TO_MOVING_POINT, BOARD_TO_MOVING_POINT_IN_BOARD, BOARD_TO_ON_CHANGE, BOARD_TO_ROUGH_SVG, BOARD_TO_SELECTED_ELEMENT, BOARD_TO_TEMPORARY_ELEMENTS, BOARD_TO_TOUCH_REF, BOARD_TO_VIEWPORT_ORIGINATION, BoardTransforms, C, CAPS_LOCK, CLIP_BOARD_FORMAT_KEY, CLOSE_SQUARE_BRACKET, COMMA, CONTEXT_MENU, CONTROL, ColorfulThemeColor, CoreTransforms, D, DASH, DELETE, DOWN_ARROW, DarkThemeColor, DefaultThemeColor, Direction, E, EIGHT, ELEMENT_TO_COMPONENT, END, ENTER, EQUALS, ESCAPE, F, F1, F10, F11, F12, F2, F3, F4, F5, F6, F7, F8, F9, FF_EQUALS, FF_MINUS, FF_MUTE, FF_SEMICOLON, FF_VOLUME_DOWN, FF_VOLUME_UP, FIRST_MEDIA, FIVE, FLUSHING, FOUR, G, H, HOME, HOST_CLASS_NAME, I, INSERT, IS_APPLE, IS_BOARD_CACHE, IS_CHROME, IS_CHROME_LEGACY, IS_EDGE_LEGACY, IS_FIREFOX, IS_IOS, IS_MAC, IS_SAFARI, IS_TEXT_EDITABLE, J, K, L, LAST_MEDIA, LEFT_ARROW, M, MAC_ENTER, MAC_META, MAC_WK_CMD_LEFT, MAC_WK_CMD_RIGHT, MAX_RADIUS, MERGING, META, MUTE, N, NINE, NODE_TO_INDEX, NODE_TO_PARENT, NS, NUMPAD_DIVIDE, NUMPAD_EIGHT, NUMPAD_FIVE, NUMPAD_FOUR, NUMPAD_MINUS, NUMPAD_MULTIPLY, NUMPAD_NINE, NUMPAD_ONE, NUMPAD_PERIOD, NUMPAD_PLUS, NUMPAD_SEVEN, NUMPAD_SIX, NUMPAD_THREE, NUMPAD_TWO, NUMPAD_ZERO, NUM_CENTER, NUM_LOCK, O, ONE, OPEN_SQUARE_BRACKET, P, PAGE_DOWN, PAGE_UP, PATH_REFS, PAUSE, PERIOD, PLUS_SIGN, POINTER_BUTTON, PRESS_AND_MOVE_BUFFER, PRINT_SCREEN, Path, PlaitBoard, PlaitBoardComponent, PlaitChildrenElementComponent, PlaitContextService, PlaitElement, PlaitElementComponent, PlaitHistoryBoard, PlaitIslandBaseComponent, PlaitIslandPopoverBaseComponent, PlaitNode, PlaitOperation, PlaitPluginElementComponent, PlaitPluginKey, PlaitPointerType, Point, Q, QUESTION_MARK, R, RIGHT_ARROW, RectangleClient, ResizeCursorClass, RetroThemeColor, S, SAVING, SCROLL_BAR_WIDTH, SCROLL_LOCK, SELECTION_BORDER_COLOR, SELECTION_FILL_COLOR, SELECTION_RECTANGLE_CLASS_NAME, SEMICOLON, SEVEN, SHIFT, SINGLE_QUOTE, SIX, SLASH, SPACE, Selection, SoftThemeColor, StarryThemeColor, T, TAB, THREE, TILDE, TWO, ThemeColorMode, ThemeColors, Transforms, U, UP_ARROW, V, VOLUME_DOWN, VOLUME_UP, Viewport, W, X, Y, Z, ZERO, addMovingElements, addSelectedElement, arrowPoints, cacheMovingElements, cacheSelectedElements, catmullRomFitting, clampZoomLevel, clearNodeWeakMap, clearSelectedElement, clearSelectionMoving, clearViewportOrigination, createFakeEvent, createForeignObject, createG, createKeyboardEvent, createMask, createModModifierKeys, createMouseEvent, createPath, createPointerEvent, createRect, createSVG, createSelectionRectangleG, createTestingBoard, createText, createTouchEvent, debounce, deleteTemporaryElements, depthFirstRecursion, distanceBetweenPointAndPoint, distanceBetweenPointAndRectangle, distanceBetweenPointAndSegment, distanceBetweenPointAndSegments, downScale, downloadImage, drawArrow, drawBezierPath, drawCircle, drawLine, drawLinearPath, drawRectangle, drawRoundRectangle, fakeNodeWeakMap, findElements, getBoardRectangle, getClipboardByKey, getClipboardDataByMedia, getDataFromClipboard, getElementById, getElementHostBBox, getHitElementByPoint, getHitElementsBySelection, getIsRecursionFunc, getMovingElements, getNearestPointBetweenPointAndSegment, getNearestPointBetweenPointAndSegments, getRealScrollBarWidth, getRectangleByElements, getSelectedElements, getTemporaryElements, getTemporaryRef, getTextFromClipboard, getViewBox, getViewBoxCenterPoint, getViewportContainerRect, getViewportOrigination, handleTouchTarget, hasBeforeContextChange, hasInputOrTextareaTarget, hasOnBoardChange, hasOnContextChanged, hotkeys, idCreator, initializeViewBox, initializeViewportContainer, initializeViewportOffset, inverse, isDOMElement, isDOMNode, isFromScrolling, isFromViewportChange, isInPlaitBoard, isLineHitLine, isMainPointer, isNullOrUndefined, isPointInEllipse, isPointInPolygon, isPointInRoundRectangle, isPolylineHitRectangle, isPreventTouchMove, isSecondaryPointer, isSelectedElement, isSelectionMoving, isSetViewportOperation, normalizePoint, preventTouchMove, removeMovingElements, removeSelectedElement, rotate, scrollToRectangle, setClipboardData, setClipboardDataByMedia, setClipboardDataByText, setIsFromScrolling, setIsFromViewportChange, setPathStrokeLinecap, setSVGViewBox, setSelectionMoving, setStrokeLinecap, shouldClear, shouldMerge, shouldSave, temporaryDisableSelection, throttleRAF, toImage, toPoint, transformPoint, transformPoints, updateForeignObject, updateForeignObjectWidth, updateViewportContainerScroll, updateViewportOffset, updateViewportOrigination, withMoving, withOptions, withSelection };
|
|
4268
4350
|
//# sourceMappingURL=plait-core.mjs.map
|