@plait/core 0.48.0 → 0.50.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/constants/index.d.ts +0 -1
- package/esm2022/board/board.component.mjs +8 -7
- package/esm2022/constants/index.mjs +1 -2
- package/esm2022/interfaces/board.mjs +1 -1
- package/esm2022/plugins/create-board.mjs +5 -2
- package/esm2022/plugins/with-moving.mjs +6 -9
- package/esm2022/plugins/with-selection.mjs +7 -8
- package/esm2022/transforms/board.mjs +4 -5
- package/esm2022/utils/board.mjs +1 -15
- package/esm2022/utils/clipboard/clipboard.mjs +36 -0
- package/esm2022/utils/clipboard/common.mjs +64 -0
- package/esm2022/utils/clipboard/data-transfer.mjs +21 -0
- package/esm2022/utils/clipboard/index.mjs +3 -0
- package/esm2022/utils/clipboard/navigator-clipboard.mjs +73 -0
- package/esm2022/utils/clipboard/types.mjs +6 -0
- package/esm2022/utils/dom/common.mjs +1 -23
- package/esm2022/utils/index.mjs +5 -1
- package/esm2022/utils/to-point.mjs +49 -0
- package/esm2022/utils/viewport.mjs +8 -20
- package/fesm2022/plait-core.mjs +257 -107
- package/fesm2022/plait-core.mjs.map +1 -1
- package/interfaces/board.d.ts +3 -2
- package/package.json +1 -1
- package/utils/board.d.ts +0 -3
- package/utils/clipboard/clipboard.d.ts +3 -0
- package/utils/clipboard/common.d.ts +8 -0
- package/utils/clipboard/data-transfer.d.ts +5 -0
- package/utils/clipboard/index.d.ts +2 -0
- package/utils/clipboard/navigator-clipboard.d.ts +3 -0
- package/utils/clipboard/types.d.ts +17 -0
- package/utils/dom/common.d.ts +1 -16
- package/utils/index.d.ts +4 -0
- package/utils/to-point.d.ts +21 -0
- package/utils/viewport.d.ts +2 -7
- package/esm2022/utils/clipboard.mjs +0 -45
- package/utils/clipboard.d.ts +0 -8
|
@@ -1,27 +1,5 @@
|
|
|
1
1
|
import { POINTER_BUTTON } from '../../constants';
|
|
2
|
-
import { PlaitBoard } from '../../interfaces';
|
|
3
2
|
export const NS = 'http://www.w3.org/2000/svg';
|
|
4
|
-
/**
|
|
5
|
-
* Get the screen coordinates starting from the upper left corner of the svg element (based on the svg screen coordinate system)
|
|
6
|
-
* @param x screen x
|
|
7
|
-
* @param y screen x
|
|
8
|
-
* @returns
|
|
9
|
-
*/
|
|
10
|
-
export function toPoint(x, y, svg) {
|
|
11
|
-
const rect = svg.getBoundingClientRect();
|
|
12
|
-
return [x - rect.x, y - rect.y];
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* `toPoint` reverse processing
|
|
16
|
-
* Get the screen coordinate starting from the upper left corner of the browser window (based on the screen coordinate system)
|
|
17
|
-
* @param point screen coordinates based on the upper left corner of the svg
|
|
18
|
-
* @returns
|
|
19
|
-
*/
|
|
20
|
-
export function toScreenPoint(board, point) {
|
|
21
|
-
const host = PlaitBoard.getHost(board);
|
|
22
|
-
const rect = host.getBoundingClientRect();
|
|
23
|
-
return [point[0] + rect.x, point[1] + rect.y];
|
|
24
|
-
}
|
|
25
3
|
export function createG() {
|
|
26
4
|
const newG = document.createElementNS(NS, 'g');
|
|
27
5
|
return newG;
|
|
@@ -91,4 +69,4 @@ export const isSecondaryPointer = (event) => {
|
|
|
91
69
|
export const isMainPointer = (event) => {
|
|
92
70
|
return event.button === POINTER_BUTTON.MAIN;
|
|
93
71
|
};
|
|
94
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvdXRpbHMvZG9tL2NvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFHakQsTUFBTSxDQUFDLE1BQU0sRUFBRSxHQUFHLDRCQUE0QixDQUFDO0FBRS9DLE1BQU0sVUFBVSxPQUFPO0lBQ25CLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxNQUFNLFVBQVUsVUFBVTtJQUN0QixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxTQUEwQixFQUFFLE9BQWlCO0lBQ3BFLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xELElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN6QyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDbkQsS0FBSyxJQUFJLEdBQUcsSUFBSSxPQUFPLEVBQUU7UUFDckIsTUFBTSxT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dCI6WyJpbXBvcnQgeyBPcHRpb25zIH0gZnJvbSAncm91Z2hqcy9iaW4vY29yZSc7XG5pbXBvcnQgeyBQT0lOVEVSX0JVVFRPTiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBSZWN0YW5nbGVDbGllbnQgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNvbnN0IE5TID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJztcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUcoKSB7XG4gICAgY29uc3QgbmV3RyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhOUywgJ2cnKTtcbiAgICByZXR1cm4gbmV3Rztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVBhdGgoKSB7XG4gICAgY29uc3QgbmV3RyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhOUywgJ3BhdGgnKTtcbiAgICByZXR1cm4gbmV3Rztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVJlY3QocmVjdGFuZ2xlOiBSZWN0YW5nbGVDbGllbnQsIG9wdGlvbnM/OiBPcHRpb25zKSB7XG4gICAgY29uc3QgcmVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhOUywgJ3JlY3QnKTtcbiAgICByZWN0LnNldEF0dHJpYnV0ZSgneCcsIGAke3JlY3RhbmdsZS54fWApO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKCd5JywgYCR7cmVjdGFuZ2xlLnl9YCk7XG4gICAgcmVjdC5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgYCR7cmVjdGFuZ2xlLndpZHRofWApO1xuICAgIHJlY3Quc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBgJHtyZWN0YW5nbGUuaGVpZ2h0fWApO1xuICAgIGZvciAobGV0IGtleSBpbiBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbktleSA9IGtleSBhcyBrZXlvZiBPcHRpb25zO1xuICAgICAgICByZWN0LnNldEF0dHJpYnV0ZShrZXksIGAke29wdGlvbnNbb3B0aW9uS2V5XX1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlY3Q7XG59XG5cbmV4cG9ydCBjb25zdCBzZXRTdHJva2VMaW5lY2FwID0gKGc6IFNWR0dFbGVtZW50LCB2YWx1ZTogJ3JvdW5kJyB8ICdzcXVhcmUnKSA9PiB7XG4gICAgZy5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS1saW5lY2FwJywgdmFsdWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldFBhdGhTdHJva2VMaW5lY2FwID0gKGc6IFNWR0dFbGVtZW50LCB2YWx1ZTogJ3JvdW5kJyB8ICdzcXVhcmUnKSA9PiB7XG4gICAgZy5xdWVyeVNlbGVjdG9yQWxsKCdwYXRoJykuZm9yRWFjaChwYXRoID0+IHtcbiAgICAgICAgcGF0aC5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS1saW5lY2FwJywgdmFsdWUpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU1hc2soKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhOUywgJ21hc2snKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNWRygpIHtcbiAgICBjb25zdCBzdmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoTlMsICdzdmcnKTtcbiAgICByZXR1cm4gc3ZnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGV4dCh4OiBudW1iZXIsIHk6IG51bWJlciwgZmlsbDogc3RyaW5nLCB0ZXh0Q29udGVudDogc3RyaW5nKSB7XG4gICAgdmFyIHRleHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoTlMsICd0ZXh0Jyk7XG4gICAgdGV4dC5zZXRBdHRyaWJ1dGUoJ3gnLCBgJHt4fWApO1xuICAgIHRleHQuc2V0QXR0cmlidXRlKCd5JywgYCR7eX1gKTtcbiAgICB0ZXh0LnNldEF0dHJpYnV0ZSgnZmlsbCcsIGZpbGwpO1xuICAgIHRleHQudGV4dENvbnRlbnQgPSB0ZXh0Q29udGVudDtcbiAgICByZXR1cm4gdGV4dDtcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBhIERPTSBub2RlIGlzIGFuIGVsZW1lbnQgbm9kZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzRE9NRWxlbWVudCA9ICh2YWx1ZTogYW55KTogdmFsdWUgaXMgRWxlbWVudCA9PiB7XG4gICAgcmV0dXJuIGlzRE9NTm9kZSh2YWx1ZSkgJiYgdmFsdWUubm9kZVR5cGUgPT09IDE7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIGEgdmFsdWUgaXMgYSBET00gbm9kZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzRE9NTm9kZSA9ICh2YWx1ZTogYW55KTogdmFsdWUgaXMgTm9kZSA9PiB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2Ygd2luZG93Lk5vZGU7XG59O1xuXG5leHBvcnQgY29uc3QgaGFzSW5wdXRPclRleHRhcmVhVGFyZ2V0ID0gKHRhcmdldDogRXZlbnRUYXJnZXQgfCBudWxsKSA9PiB7XG4gICAgaWYgKGlzRE9NRWxlbWVudCh0YXJnZXQpKSB7XG4gICAgICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gJ0lOUFVUJyB8fCB0YXJnZXQudGFnTmFtZSA9PT0gJ1RFWFRBUkVBJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzU2Vjb25kYXJ5UG9pbnRlciA9IChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgIHJldHVybiBldmVudC5idXR0b24gPT09IFBPSU5URVJfQlVUVE9OLlNFQ09OREFSWTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc01haW5Qb2ludGVyID0gKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgcmV0dXJuIGV2ZW50LmJ1dHRvbiA9PT0gUE9JTlRFUl9CVVRUT04uTUFJTjtcbn07XG4iXX0=
|
package/esm2022/utils/index.mjs
CHANGED
|
@@ -18,7 +18,11 @@ export * from './viewport';
|
|
|
18
18
|
export * from './common';
|
|
19
19
|
export * from './moving-element';
|
|
20
20
|
export * from './to-image';
|
|
21
|
+
export * from './clipboard/types';
|
|
22
|
+
export * from './clipboard/clipboard';
|
|
23
|
+
export * from './clipboard/common';
|
|
21
24
|
export * from './clipboard';
|
|
22
25
|
export * from './touch';
|
|
23
26
|
export * from './dnd';
|
|
24
|
-
|
|
27
|
+
export * from './to-point';
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLG9CQUFvQixDQUFDO0FBQ25DLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLE9BQU8sQ0FBQztBQUN0QixjQUFjLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYm9hcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9kb20nO1xuZXhwb3J0ICogZnJvbSAnLi9lbnZpcm9ubWVudCc7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcic7XG5leHBvcnQgKiBmcm9tICcuL2hpc3RvcnknO1xuZXhwb3J0ICogZnJvbSAnLi9ob3RrZXlzJztcbmV4cG9ydCAqIGZyb20gJy4vaWQtY3JlYXRvcic7XG5leHBvcnQgKiBmcm9tICcuL21hdGgnO1xuZXhwb3J0ICogZnJvbSAnLi93ZWFrLW1hcHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZWxlY3RlZC1lbGVtZW50JztcbmV4cG9ydCAqIGZyb20gJy4vZHJhdy9yZWN0YW5nbGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kcmF3L2Fycm93JztcbmV4cG9ydCAqIGZyb20gJy4vZHJhdy9jaXJjbGUnO1xuZXhwb3J0ICogZnJvbSAnLi9kcmF3L2xpbmUnO1xuZXhwb3J0ICogZnJvbSAnLi90cmVlJztcbmV4cG9ydCAqIGZyb20gJy4vZWxlbWVudCc7XG5leHBvcnQgKiBmcm9tICcuL3ZpZXdwb3J0JztcbmV4cG9ydCAqIGZyb20gJy4vY29tbW9uJztcbmV4cG9ydCAqIGZyb20gJy4vbW92aW5nLWVsZW1lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi90by1pbWFnZSc7XG5leHBvcnQgKiBmcm9tICcuL2NsaXBib2FyZC90eXBlcyc7XG5leHBvcnQgKiBmcm9tICcuL2NsaXBib2FyZC9jbGlwYm9hcmQnO1xuZXhwb3J0ICogZnJvbSAnLi9jbGlwYm9hcmQvY29tbW9uJztcbmV4cG9ydCAqIGZyb20gJy4vY2xpcGJvYXJkJztcbmV4cG9ydCAqIGZyb20gJy4vdG91Y2gnO1xuZXhwb3J0ICogZnJvbSAnLi9kbmQnO1xuZXhwb3J0ICogZnJvbSAnLi90by1wb2ludCc7XG4iXX0=
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { PlaitBoard } from '../interfaces/board';
|
|
2
|
+
export const getViewBox = (board) => {
|
|
3
|
+
return PlaitBoard.getHost(board).viewBox.baseVal;
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* Get the screen point starting from the upper left corner of the svg element (based on the svg screen coordinate system)
|
|
7
|
+
*/
|
|
8
|
+
export function toHostPoint(board, x, y) {
|
|
9
|
+
const host = PlaitBoard.getHost(board);
|
|
10
|
+
const rect = host.getBoundingClientRect();
|
|
11
|
+
return [x - rect.x, y - rect.y];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Get the point in the coordinate system of the svg viewBox
|
|
15
|
+
*/
|
|
16
|
+
export function toViewBoxPoint(board, hostPoint) {
|
|
17
|
+
const viewBox = getViewBox(board);
|
|
18
|
+
const { zoom } = board.viewport;
|
|
19
|
+
const x = hostPoint[0] / zoom + viewBox.x;
|
|
20
|
+
const y = hostPoint[1] / zoom + viewBox.y;
|
|
21
|
+
const newPoint = [x, y];
|
|
22
|
+
return newPoint;
|
|
23
|
+
}
|
|
24
|
+
export function toViewBoxPoints(board, hostPoints) {
|
|
25
|
+
const newPoints = hostPoints.map(point => {
|
|
26
|
+
return toViewBoxPoint(board, point);
|
|
27
|
+
});
|
|
28
|
+
return newPoints;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* `toHostPoint` reverse processing
|
|
32
|
+
* Get the screen point starting from the upper left corner of the browser window or the viewport (based on the screen coordinate system)
|
|
33
|
+
*/
|
|
34
|
+
export function toScreenPointFromHostPoint(board, hostPoint) {
|
|
35
|
+
const host = PlaitBoard.getHost(board);
|
|
36
|
+
const rect = host.getBoundingClientRect();
|
|
37
|
+
return [hostPoint[0] + rect.x, hostPoint[1] + rect.y];
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* `toViewBoxPoint` reverse processing
|
|
41
|
+
*/
|
|
42
|
+
export function toHostPointFromViewBoxPoint(board, viewBoxPoint) {
|
|
43
|
+
const { zoom } = board.viewport;
|
|
44
|
+
const viewBox = getViewBox(board);
|
|
45
|
+
const x = (viewBoxPoint[0] - viewBox.x) * zoom;
|
|
46
|
+
const y = (viewBoxPoint[1] - viewBox.y) * zoom;
|
|
47
|
+
return [x, y];
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG8tcG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy90by1wb2ludC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHakQsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQzVDLE9BQU8sVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO0FBQ3JELENBQUMsQ0FBQztBQUVGOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FBQyxLQUFpQixFQUFFLENBQVMsRUFBRSxDQUFTO0lBQy9ELE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7SUFDMUMsT0FBTyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxLQUFpQixFQUFFLFNBQWdCO0lBQzlELE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUNoQyxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDMUMsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBVSxDQUFDO0lBQ2pDLE9BQU8sUUFBUSxDQUFDO0FBQ3BCLENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFDLEtBQWlCLEVBQUUsVUFBbUI7SUFDbEUsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNyQyxPQUFPLGNBQWMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLFNBQVMsQ0FBQztBQUNyQixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLDBCQUEwQixDQUFDLEtBQWlCLEVBQUUsU0FBZ0I7SUFDMUUsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUMxQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQVUsQ0FBQztBQUNuRSxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsMkJBQTJCLENBQUMsS0FBaUIsRUFBRSxZQUFtQjtJQUM5RSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQztJQUNoQyxNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztJQUMvQyxNQUFNLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQy9DLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFVLENBQUM7QUFDM0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBsYWl0Qm9hcmQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2JvYXJkJztcbmltcG9ydCB7IFBvaW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9wb2ludCc7XG5cbmV4cG9ydCBjb25zdCBnZXRWaWV3Qm94ID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgcmV0dXJuIFBsYWl0Qm9hcmQuZ2V0SG9zdChib2FyZCkudmlld0JveC5iYXNlVmFsO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIHNjcmVlbiBwb2ludCBzdGFydGluZyBmcm9tIHRoZSB1cHBlciBsZWZ0IGNvcm5lciBvZiB0aGUgc3ZnIGVsZW1lbnQgKGJhc2VkIG9uIHRoZSBzdmcgc2NyZWVuIGNvb3JkaW5hdGUgc3lzdGVtKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Ib3N0UG9pbnQoYm9hcmQ6IFBsYWl0Qm9hcmQsIHg6IG51bWJlciwgeTogbnVtYmVyKTogUG9pbnQge1xuICAgIGNvbnN0IGhvc3QgPSBQbGFpdEJvYXJkLmdldEhvc3QoYm9hcmQpO1xuICAgIGNvbnN0IHJlY3QgPSBob3N0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiBbeCAtIHJlY3QueCwgeSAtIHJlY3QueV07XG59XG5cbi8qKlxuICogR2V0IHRoZSBwb2ludCBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIHN2ZyB2aWV3Qm94XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b1ZpZXdCb3hQb2ludChib2FyZDogUGxhaXRCb2FyZCwgaG9zdFBvaW50OiBQb2ludCkge1xuICAgIGNvbnN0IHZpZXdCb3ggPSBnZXRWaWV3Qm94KGJvYXJkKTtcbiAgICBjb25zdCB7IHpvb20gfSA9IGJvYXJkLnZpZXdwb3J0O1xuICAgIGNvbnN0IHggPSBob3N0UG9pbnRbMF0gLyB6b29tICsgdmlld0JveC54O1xuICAgIGNvbnN0IHkgPSBob3N0UG9pbnRbMV0gLyB6b29tICsgdmlld0JveC55O1xuICAgIGNvbnN0IG5ld1BvaW50ID0gW3gsIHldIGFzIFBvaW50O1xuICAgIHJldHVybiBuZXdQb2ludDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvVmlld0JveFBvaW50cyhib2FyZDogUGxhaXRCb2FyZCwgaG9zdFBvaW50czogUG9pbnRbXSkge1xuICAgIGNvbnN0IG5ld1BvaW50cyA9IGhvc3RQb2ludHMubWFwKHBvaW50ID0+IHtcbiAgICAgICAgcmV0dXJuIHRvVmlld0JveFBvaW50KGJvYXJkLCBwb2ludCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ld1BvaW50cztcbn1cblxuLyoqXG4gKiBgdG9Ib3N0UG9pbnRgIHJldmVyc2UgcHJvY2Vzc2luZ1xuICogR2V0IHRoZSBzY3JlZW4gcG9pbnQgc3RhcnRpbmcgZnJvbSB0aGUgdXBwZXIgbGVmdCBjb3JuZXIgb2YgdGhlIGJyb3dzZXIgd2luZG93IG9yIHRoZSB2aWV3cG9ydCAoYmFzZWQgb24gdGhlIHNjcmVlbiBjb29yZGluYXRlIHN5c3RlbSlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvU2NyZWVuUG9pbnRGcm9tSG9zdFBvaW50KGJvYXJkOiBQbGFpdEJvYXJkLCBob3N0UG9pbnQ6IFBvaW50KSB7XG4gICAgY29uc3QgaG9zdCA9IFBsYWl0Qm9hcmQuZ2V0SG9zdChib2FyZCk7XG4gICAgY29uc3QgcmVjdCA9IGhvc3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmV0dXJuIFtob3N0UG9pbnRbMF0gKyByZWN0LngsIGhvc3RQb2ludFsxXSArIHJlY3QueV0gYXMgUG9pbnQ7XG59XG5cbi8qKlxuICogYHRvVmlld0JveFBvaW50YCByZXZlcnNlIHByb2Nlc3NpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvSG9zdFBvaW50RnJvbVZpZXdCb3hQb2ludChib2FyZDogUGxhaXRCb2FyZCwgdmlld0JveFBvaW50OiBQb2ludCkge1xuICAgIGNvbnN0IHsgem9vbSB9ID0gYm9hcmQudmlld3BvcnQ7XG4gICAgY29uc3Qgdmlld0JveCA9IGdldFZpZXdCb3goYm9hcmQpO1xuICAgIGNvbnN0IHggPSAodmlld0JveFBvaW50WzBdIC0gdmlld0JveC54KSAqIHpvb207XG4gICAgY29uc3QgeSA9ICh2aWV3Qm94UG9pbnRbMV0gLSB2aWV3Qm94LnkpICogem9vbTtcbiAgICByZXR1cm4gW3gsIHldIGFzIFBvaW50O1xufVxuIl19
|
|
@@ -3,16 +3,10 @@ import { MAX_ZOOM, MIN_ZOOM } from '../constants/zoom';
|
|
|
3
3
|
import { PlaitBoard, Point } from '../interfaces';
|
|
4
4
|
import { BoardTransforms } from '../transforms/board';
|
|
5
5
|
import { getRectangleByElements } from './element';
|
|
6
|
+
import { toHostPointFromViewBoxPoint, toViewBoxPoint } from './to-point';
|
|
6
7
|
import { BOARD_TO_VIEWPORT_ORIGINATION } from './weak-maps';
|
|
7
8
|
const IS_FROM_SCROLLING = new WeakMap();
|
|
8
9
|
const IS_FROM_VIEWPORT_CHANGE = new WeakMap();
|
|
9
|
-
export function toSVGScreenPoint(board, point) {
|
|
10
|
-
const { zoom } = board.viewport;
|
|
11
|
-
const viewBox = getViewBox(board, zoom);
|
|
12
|
-
const x = (point[0] - viewBox[0]) * zoom;
|
|
13
|
-
const y = (point[1] - viewBox[1]) * zoom;
|
|
14
|
-
return [x, y];
|
|
15
|
-
}
|
|
16
10
|
export function getViewportContainerRect(board) {
|
|
17
11
|
const { hideScrollbar } = board.options;
|
|
18
12
|
const scrollBarWidth = hideScrollbar ? SCROLL_BAR_WIDTH : 0;
|
|
@@ -59,16 +53,12 @@ export function getElementHostBBox(board, zoom) {
|
|
|
59
53
|
};
|
|
60
54
|
}
|
|
61
55
|
/**
|
|
62
|
-
*
|
|
63
|
-
* @param zoom 缩放比
|
|
64
|
-
* @param minZoom 最小缩放比
|
|
65
|
-
* @param maxZoom 最大缩放比
|
|
66
|
-
* @returns 正确的缩放比
|
|
56
|
+
* Normalize the scaling ratio, or return the corrected scaling ratio if the limit is exceeded
|
|
67
57
|
*/
|
|
68
58
|
export function clampZoomLevel(zoom, minZoom = MIN_ZOOM, maxZoom = MAX_ZOOM) {
|
|
69
59
|
return zoom < minZoom ? minZoom : zoom > maxZoom ? maxZoom : zoom;
|
|
70
60
|
}
|
|
71
|
-
export function
|
|
61
|
+
export function calcNewViewBox(board, zoom) {
|
|
72
62
|
const boardContainerRectangle = PlaitBoard.getBoardContainer(board).getBoundingClientRect();
|
|
73
63
|
const elementHostBBox = getElementHostBBox(board, zoom);
|
|
74
64
|
const horizontalPadding = boardContainerRectangle.width / 2;
|
|
@@ -100,7 +90,7 @@ export function updateViewportOffset(board) {
|
|
|
100
90
|
if (!origination) {
|
|
101
91
|
return;
|
|
102
92
|
}
|
|
103
|
-
const [scrollLeft, scrollTop] =
|
|
93
|
+
const [scrollLeft, scrollTop] = toHostPointFromViewBoxPoint(board, origination);
|
|
104
94
|
updateViewportContainerScroll(board, scrollLeft, scrollTop);
|
|
105
95
|
}
|
|
106
96
|
export function updateViewportContainerScroll(board, left, top, isFromViewportChange = true) {
|
|
@@ -131,9 +121,7 @@ export function updateViewportContainerScroll(board, left, top, isFromViewportCh
|
|
|
131
121
|
}
|
|
132
122
|
}
|
|
133
123
|
export function updateViewportByScrolling(board, scrollLeft, scrollTop) {
|
|
134
|
-
const
|
|
135
|
-
const viewBox = getViewBox(board, zoom);
|
|
136
|
-
const origination = [scrollLeft / zoom + viewBox[0], scrollTop / zoom + viewBox[1]];
|
|
124
|
+
const origination = toViewBoxPoint(board, [scrollLeft, scrollTop]);
|
|
137
125
|
if (Point.isEquals(origination, getViewportOrigination(board))) {
|
|
138
126
|
return;
|
|
139
127
|
}
|
|
@@ -148,14 +136,14 @@ export function initializeViewportContainer(board) {
|
|
|
148
136
|
}
|
|
149
137
|
export function initializeViewBox(board) {
|
|
150
138
|
const zoom = board.viewport.zoom;
|
|
151
|
-
const viewBox =
|
|
139
|
+
const viewBox = calcNewViewBox(board, zoom);
|
|
152
140
|
setSVGViewBox(board, viewBox);
|
|
153
141
|
}
|
|
154
142
|
export function initializeViewportOffset(board) {
|
|
155
143
|
if (!board.viewport?.origination) {
|
|
156
144
|
const zoom = board.viewport.zoom;
|
|
157
145
|
const viewportContainerRect = PlaitBoard.getBoardContainer(board).getBoundingClientRect();
|
|
158
|
-
const viewBox =
|
|
146
|
+
const viewBox = calcNewViewBox(board, zoom);
|
|
159
147
|
const centerX = viewBox[0] + viewBox[2] / 2;
|
|
160
148
|
const centerY = viewBox[1] + viewBox[3] / 2;
|
|
161
149
|
const origination = [centerX - viewportContainerRect.width / 2 / zoom, centerY - viewportContainerRect.height / 2 / zoom];
|
|
@@ -193,4 +181,4 @@ export const setIsFromViewportChange = (board, state) => {
|
|
|
193
181
|
IS_FROM_VIEWPORT_CHANGE.set(board, state);
|
|
194
182
|
};
|
|
195
183
|
export function scrollToRectangle(board, client) { }
|
|
196
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy92aWV3cG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBbUIsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRCxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLE9BQU8sRUFBdUIsQ0FBQztBQUU3RCxNQUFNLHVCQUF1QixHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO0FBRW5FLE1BQU0sVUFBVSxnQkFBZ0IsQ0FBQyxLQUFpQixFQUFFLEtBQVk7SUFDNUQsTUFBTSxFQUFFLElBQUksRUFBRSxHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUM7SUFDaEMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN4QyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDekMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3pDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFVLENBQUM7QUFDM0IsQ0FBQztBQUVELE1BQU0sVUFBVSx3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SUFDN0QsSUFBSSxXQUFXLEVBQUU7UUFDYixPQUFPLFdBQVcsQ0FBQztLQUN0QjtTQUFNO1FBQ0gsT0FBTyxLQUFLLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztLQUNyQztBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUNqRCxPQUFPLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDMUMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEtBQWMsRUFBRSxFQUFFO0lBQ3BFLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDeEMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEVBQUU7SUFDdEQsT0FBTyxDQUFDLENBQUMsdUJBQXVCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2hELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLENBQUMsS0FBaUIsRUFBRSxLQUFjLEVBQUUsRUFBRTtJQUN6RSx1QkFBdUIsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzlDLENBQUMsQ0FBQztBQUVGLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxLQUFpQixFQUFFLE1BQXVCLElBQUcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNDUk9MTF9CQVJfV0lEVEggfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgTUFYX1pPT00sIE1JTl9aT09NIH0gZnJvbSAnLi4vY29uc3RhbnRzL3pvb20nO1xuaW1wb3J0IHsgUGxhaXRCb2FyZCwgUG9pbnQsIFJlY3RhbmdsZUNsaWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgQm9hcmRUcmFuc2Zvcm1zIH0gZnJvbSAnLi4vdHJhbnNmb3Jtcy9ib2FyZCc7XG5pbXBvcnQgeyBnZXRSZWN0YW5nbGVCeUVsZW1lbnRzIH0gZnJvbSAnLi9lbGVtZW50JztcbmltcG9ydCB7IEJPQVJEX1RPX1ZJRVdQT1JUX09SSUdJTkFUSU9OIH0gZnJvbSAnLi93ZWFrLW1hcHMnO1xuXG5jb25zdCBJU19GUk9NX1NDUk9MTElORyA9IG5ldyBXZWFrTWFwPFBsYWl0Qm9hcmQsIGJvb2xlYW4+KCk7XG5cbmNvbnN0IElTX0ZST01fVklFV1BPUlRfQ0hBTkdFID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgYm9vbGVhbj4oKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRvU1ZHU2NyZWVuUG9pbnQoYm9hcmQ6IFBsYWl0Qm9hcmQsIHBvaW50OiBQb2ludCkge1xuICAgIGNvbnN0IHsgem9vbSB9ID0gYm9hcmQudmlld3BvcnQ7XG4gICAgY29uc3Qgdmlld0JveCA9IGdldFZpZXdCb3goYm9hcmQsIHpvb20pO1xuICAgIGNvbnN0IHggPSAocG9pbnRbMF0gLSB2aWV3Qm94WzBdKSAqIHpvb207XG4gICAgY29uc3QgeSA9IChwb2ludFsxXSAtIHZpZXdCb3hbMV0pICogem9vbTtcbiAgICByZXR1cm4gW3gsIHldIGFzIFBvaW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld3BvcnRDb250YWluZXJSZWN0KGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgY29uc3QgeyBoaWRlU2Nyb2xsYmFyIH0gPSBib2FyZC5vcHRpb25zO1xuICAgIGNvbnN0IHNjcm9sbEJhcldpZHRoID0gaGlkZVNjcm9sbGJhciA/IFNDUk9MTF9CQVJfV0lEVEggOiAwO1xuICAgIGNvbnN0IHZpZXdwb3J0UmVjdCA9IFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IHZpZXdwb3J0UmVjdC53aWR0aCArIHNjcm9sbEJhcldpZHRoLFxuICAgICAgICBoZWlnaHQ6IHZpZXdwb3J0UmVjdC5oZWlnaHQgKyBzY3JvbGxCYXJXaWR0aFxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbGVtZW50SG9zdEJCb3goYm9hcmQ6IFBsYWl0Qm9hcmQsIHpvb206IG51bWJlcikge1xuICAgIGNvbnN0IGNoaWxkcmVuUmVjdCA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGJvYXJkLmNoaWxkcmVuLCB0cnVlKTtcbiAgICBjb25zdCB2aWV3cG9ydENvbnRhaW5lclJlY3QgPSBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IHZpZXdwb3J0Q29udGFpbmVyUmVjdC53aWR0aCAvIHpvb207XG4gICAgY29uc3QgY29udGFpbmVySGVpZ2h0ID0gdmlld3BvcnRDb250YWluZXJSZWN0LmhlaWdodCAvIHpvb207XG4gICAgbGV0IGxlZnQ6IG51bWJlcjtcbiAgICBsZXQgcmlnaHQ6IG51bWJlcjtcbiAgICBsZXQgdG9wOiBudW1iZXI7XG4gICAgbGV0IGJvdHRvbTogbnVtYmVyO1xuXG4gICAgaWYgKGNoaWxkcmVuUmVjdC53aWR0aCA8IGNvbnRhaW5lcldpZHRoKSB7XG4gICAgICAgIGNvbnN0IGNlbnRlclggPSBjaGlsZHJlblJlY3QueCArIGNoaWxkcmVuUmVjdC53aWR0aCAvIDI7XG4gICAgICAgIGNvbnN0IGhhbGZDb250YWluZXJXaWR0aCA9IGNvbnRhaW5lcldpZHRoIC8gMjtcbiAgICAgICAgbGVmdCA9IGNlbnRlclggLSBoYWxmQ29udGFpbmVyV2lkdGg7XG4gICAgICAgIHJpZ2h0ID0gY2VudGVyWCArIGhhbGZDb250YWluZXJXaWR0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsZWZ0ID0gY2hpbGRyZW5SZWN0Lng7XG4gICAgICAgIHJpZ2h0ID0gY2hpbGRyZW5SZWN0LnggKyBjaGlsZHJlblJlY3Qud2lkdGg7XG4gICAgfVxuICAgIGlmIChjaGlsZHJlblJlY3QuaGVpZ2h0IDwgY29udGFpbmVySGVpZ2h0KSB7XG4gICAgICAgIGNvbnN0IGNlbnRlclkgPSBjaGlsZHJlblJlY3QueSArIGNoaWxkcmVuUmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCBoYWxmQ29udGFpbmVySGVpZ2h0ID0gY29udGFpbmVySGVpZ2h0IC8gMjtcbiAgICAgICAgdG9wID0gY2VudGVyWSAtIGhhbGZDb250YWluZXJIZWlnaHQ7XG4gICAgICAgIGJvdHRvbSA9IGNlbnRlclkgKyBoYWxmQ29udGFpbmVySGVpZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRvcCA9IGNoaWxkcmVuUmVjdC55O1xuICAgICAgICBib3R0b20gPSBjaGlsZHJlblJlY3QueSArIGNoaWxkcmVuUmVjdC5oZWlnaHQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQsXG4gICAgICAgIHJpZ2h0LFxuICAgICAgICB0b3AsXG4gICAgICAgIGJvdHRvbVxuICAgIH07XG59XG5cbi8qKlxuICog6aqM6K+B57yp5pS+5q+U5piv5ZCm56ym5ZCI6ZmQ5Yi277yM5aaC5p6c6LaF5Ye66ZmQ5Yi277yM5YiZ6L+U5Zue5ZCI6YCC55qE57yp5pS+5q+UXG4gKiBAcGFyYW0gem9vbSDnvKnmlL7mr5RcbiAqIEBwYXJhbSBtaW5ab29tIOacgOWwj+e8qeaUvuavlFxuICogQHBhcmFtIG1heFpvb20g5pyA5aSn57yp5pS+5q+UXG4gKiBAcmV0dXJucyDmraPnoa7nmoTnvKnmlL7mr5RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsYW1wWm9vbUxldmVsKHpvb206IG51bWJlciwgbWluWm9vbSA9IE1JTl9aT09NLCBtYXhab29tID0gTUFYX1pPT00pIHtcbiAgICByZXR1cm4gem9vbSA8IG1pblpvb20gPyBtaW5ab29tIDogem9vbSA+IG1heFpvb20gPyBtYXhab29tIDogem9vbTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdCb3goYm9hcmQ6IFBsYWl0Qm9hcmQsIHpvb206IG51bWJlcikge1xuICAgIGNvbnN0IGJvYXJkQ29udGFpbmVyUmVjdGFuZ2xlID0gUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgZWxlbWVudEhvc3RCQm94ID0gZ2V0RWxlbWVudEhvc3RCQm94KGJvYXJkLCB6b29tKTtcblxuICAgIGNvbnN0IGhvcml6b250YWxQYWRkaW5nID0gYm9hcmRDb250YWluZXJSZWN0YW5nbGUud2lkdGggLyAyO1xuICAgIGNvbnN0IHZlcnRpY2FsUGFkZGluZyA9IGJvYXJkQ29udGFpbmVyUmVjdGFuZ2xlLmhlaWdodCAvIDI7XG4gICAgY29uc3Qgdmlld0JveCA9IFtcbiAgICAgICAgZWxlbWVudEhvc3RCQm94LmxlZnQgLSBob3Jpem9udGFsUGFkZGluZyAvIHpvb20sXG4gICAgICAgIGVsZW1lbnRIb3N0QkJveC50b3AgLSB2ZXJ0aWNhbFBhZGRpbmcgLyB6b29tLFxuICAgICAgICBlbGVtZW50SG9zdEJCb3gucmlnaHQgLSBlbGVtZW50SG9zdEJCb3gubGVmdCArIChob3Jpem9udGFsUGFkZGluZyAqIDIpIC8gem9vbSxcbiAgICAgICAgZWxlbWVudEhvc3RCQm94LmJvdHRvbSAtIGVsZW1lbnRIb3N0QkJveC50b3AgKyAodmVydGljYWxQYWRkaW5nICogMikgLyB6b29tXG4gICAgXTtcbiAgICByZXR1cm4gdmlld0JveDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdCb3hDZW50ZXJQb2ludChib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IGNoaWxkcmVuUmVjdGFuZ2xlID0gZ2V0UmVjdGFuZ2xlQnlFbGVtZW50cyhib2FyZCwgYm9hcmQuY2hpbGRyZW4sIHRydWUpO1xuICAgIHJldHVybiBbY2hpbGRyZW5SZWN0YW5nbGUueCArIGNoaWxkcmVuUmVjdGFuZ2xlLndpZHRoIC8gMiwgY2hpbGRyZW5SZWN0YW5nbGUueSArIGNoaWxkcmVuUmVjdGFuZ2xlLmhlaWdodCAvIDJdIGFzIFBvaW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0U1ZHVmlld0JveChib2FyZDogUGxhaXRCb2FyZCwgdmlld0JveDogbnVtYmVyW10pIHtcbiAgICBjb25zdCB6b29tID0gYm9hcmQudmlld3BvcnQuem9vbTtcbiAgICBjb25zdCBob3N0RWxlbWVudCA9IFBsYWl0Qm9hcmQuZ2V0SG9zdChib2FyZCk7XG4gICAgaG9zdEVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG4gICAgaG9zdEVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHt2aWV3Qm94WzJdICogem9vbX1weGA7XG4gICAgaG9zdEVsZW1lbnQuc3R5bGUuaGVpZ2h0ID0gYCR7dmlld0JveFszXSAqIHpvb219cHhgO1xuXG4gICAgaWYgKHZpZXdCb3ggJiYgdmlld0JveFsyXSA+IDAgJiYgdmlld0JveFszXSA+IDApIHtcbiAgICAgICAgaG9zdEVsZW1lbnQuc2V0QXR0cmlidXRlKCd2aWV3Qm94Jywgdmlld0JveC5qb2luKCcgJykpO1xuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVZpZXdwb3J0T2Zmc2V0KGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgY29uc3Qgb3JpZ2luYXRpb24gPSBnZXRWaWV3cG9ydE9yaWdpbmF0aW9uKGJvYXJkKTtcbiAgICBpZiAoIW9yaWdpbmF0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgW3Njcm9sbExlZnQsIHNjcm9sbFRvcF0gPSB0b1NWR1NjcmVlblBvaW50KGJvYXJkLCBvcmlnaW5hdGlvbik7XG4gICAgdXBkYXRlVmlld3BvcnRDb250YWluZXJTY3JvbGwoYm9hcmQsIHNjcm9sbExlZnQsIHNjcm9sbFRvcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVWaWV3cG9ydENvbnRhaW5lclNjcm9sbChib2FyZDogUGxhaXRCb2FyZCwgbGVmdDogbnVtYmVyLCB0b3A6IG51bWJlciwgaXNGcm9tVmlld3BvcnRDaGFuZ2U6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgY29uc3Qgdmlld3BvcnRDb250YWluZXIgPSBQbGFpdEJvYXJkLmdldFZpZXdwb3J0Q29udGFpbmVyKGJvYXJkKTtcbiAgICBjb25zdCBwcmV2aW91c1Njcm9sbExlZnQgPSB2aWV3cG9ydENvbnRhaW5lci5zY3JvbGxMZWZ0O1xuICAgIGNvbnN0IHByZXZpb3VzU2Nyb2xsVG9wID0gdmlld3BvcnRDb250YWluZXIuc2Nyb2xsVG9wO1xuICAgIC8vIHNjcm9sbFRvcCBhc3NpZ24gMTEuOCB3aWxsIGdldCAxMS41IGluIGNocm9tZVxuICAgIC8vIHNjcm9sbFRvcCBhc3NpZ24gMTEuOCB3aWxsIGdldCAxMSBpbiBmaXJlZm94LCBzYWZhcmlcbiAgICAvLyBzY3JvbGxUb3AgYXNzaWduIDExLjQgd2lsbCBnZXQgMTEgaW4gY2hyb21lLCBmaXJlZm94LCBzYWZhcmlcbiAgICBpZiAodmlld3BvcnRDb250YWluZXIuc2Nyb2xsTGVmdCAhPT0gTWF0aC5mbG9vcihsZWZ0KSB8fCB2aWV3cG9ydENvbnRhaW5lci5zY3JvbGxUb3AgIT09IE1hdGguZmxvb3IodG9wKSkge1xuICAgICAgICB2aWV3cG9ydENvbnRhaW5lci5zY3JvbGxMZWZ0ID0gbGVmdDtcbiAgICAgICAgdmlld3BvcnRDb250YWluZXIuc2Nyb2xsVG9wID0gdG9wO1xuICAgICAgICBjb25zdCBvZmZzZXRXaWR0aCA9IHZpZXdwb3J0Q29udGFpbmVyLm9mZnNldFdpZHRoO1xuICAgICAgICBjb25zdCBvZmZzZXRIZWlnaHQgPSB2aWV3cG9ydENvbnRhaW5lci5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIGlmIChwcmV2aW91c1Njcm9sbExlZnQgPT09IHZpZXdwb3J0Q29udGFpbmVyLnNjcm9sbExlZnQgJiYgcHJldmlvdXNTY3JvbGxUb3AgPT09IHZpZXdwb3J0Q29udGFpbmVyLnNjcm9sbFRvcCkge1xuICAgICAgICAgICAgLy8gVGhlIHNjcm9sbCBldmVudCBjYW5ub3QgYmUgdHJpZ2dlcmVkLCBzbyB0aGUgb3JpZ2luYXRpb24gaXMgbW9kaWZpZWQgZGlyZWN0bHkgYmFzZWQgb24gdGhlIHNjcm9sbCBkaXN0YW5jZS5cbiAgICAgICAgICAgIHVwZGF0ZVZpZXdwb3J0QnlTY3JvbGxpbmcoYm9hcmQsIHByZXZpb3VzU2Nyb2xsTGVmdCwgcHJldmlvdXNTY3JvbGxUb3ApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaXNWYWxpZExlZnRPclRvcCA9XG4gICAgICAgICAgICAgICAgbGVmdCA+IDAgJiZcbiAgICAgICAgICAgICAgICB0b3AgPiAwICYmXG4gICAgICAgICAgICAgICAgbGVmdCA8IHZpZXdwb3J0Q29udGFpbmVyLnNjcm9sbFdpZHRoIC0gb2Zmc2V0V2lkdGggJiZcbiAgICAgICAgICAgICAgICB0b3AgPCB2aWV3cG9ydENvbnRhaW5lci5zY3JvbGxIZWlnaHQgLSBvZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICBpZiAoaXNGcm9tVmlld3BvcnRDaGFuZ2UgJiYgaXNWYWxpZExlZnRPclRvcCkge1xuICAgICAgICAgICAgICAgIHNldElzRnJvbVZpZXdwb3J0Q2hhbmdlKGJvYXJkLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVZpZXdwb3J0QnlTY3JvbGxpbmcoYm9hcmQ6IFBsYWl0Qm9hcmQsIHNjcm9sbExlZnQ6IG51bWJlciwgc2Nyb2xsVG9wOiBudW1iZXIpIHtcbiAgICBjb25zdCB6b29tID0gYm9hcmQudmlld3BvcnQuem9vbTtcbiAgICBjb25zdCB2aWV3Qm94ID0gZ2V0Vmlld0JveChib2FyZCwgem9vbSk7XG4gICAgY29uc3Qgb3JpZ2luYXRpb24gPSBbc2Nyb2xsTGVmdCAvIHpvb20gKyB2aWV3Qm94WzBdLCBzY3JvbGxUb3AgLyB6b29tICsgdmlld0JveFsxXV0gYXMgUG9pbnQ7XG4gICAgaWYgKFBvaW50LmlzRXF1YWxzKG9yaWdpbmF0aW9uLCBnZXRWaWV3cG9ydE9yaWdpbmF0aW9uKGJvYXJkKSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBCb2FyZFRyYW5zZm9ybXMudXBkYXRlVmlld3BvcnQoYm9hcmQsIG9yaWdpbmF0aW9uKTtcbiAgICBzZXRJc0Zyb21TY3JvbGxpbmcoYm9hcmQsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZVZpZXdwb3J0Q29udGFpbmVyKGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBnZXRWaWV3cG9ydENvbnRhaW5lclJlY3QoYm9hcmQpO1xuICAgIGNvbnN0IHZpZXdwb3J0Q29udGFpbmVyID0gUGxhaXRCb2FyZC5nZXRWaWV3cG9ydENvbnRhaW5lcihib2FyZCk7XG4gICAgdmlld3BvcnRDb250YWluZXIuc3R5bGUud2lkdGggPSBgJHt3aWR0aH1weGA7XG4gICAgdmlld3BvcnRDb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVWaWV3Qm94KGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgY29uc3Qgem9vbSA9IGJvYXJkLnZpZXdwb3J0Lnpvb207XG4gICAgY29uc3Qgdmlld0JveCA9IGdldFZpZXdCb3goYm9hcmQsIHpvb20pO1xuICAgIHNldFNWR1ZpZXdCb3goYm9hcmQsIHZpZXdCb3gpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZVZpZXdwb3J0T2Zmc2V0KGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgaWYgKCFib2FyZC52aWV3cG9ydD8ub3JpZ2luYXRpb24pIHtcbiAgICAgICAgY29uc3Qgem9vbSA9IGJvYXJkLnZpZXdwb3J0Lnpvb207XG4gICAgICAgIGNvbnN0IHZpZXdwb3J0Q29udGFpbmVyUmVjdCA9IFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICBjb25zdCB2aWV3Qm94ID0gZ2V0Vmlld0JveChib2FyZCwgem9vbSk7XG4gICAgICAgIGNvbnN0IGNlbnRlclggPSB2aWV3Qm94WzBdICsgdmlld0JveFsyXSAvIDI7XG4gICAgICAgIGNvbnN0IGNlbnRlclkgPSB2aWV3Qm94WzFdICsgdmlld0JveFszXSAvIDI7XG4gICAgICAgIGNvbnN0IG9yaWdpbmF0aW9uID0gW2NlbnRlclggLSB2aWV3cG9ydENvbnRhaW5lclJlY3Qud2lkdGggLyAyIC8gem9vbSwgY2VudGVyWSAtIHZpZXdwb3J0Q29udGFpbmVyUmVjdC5oZWlnaHQgLyAyIC8gem9vbV0gYXMgUG9pbnQ7XG4gICAgICAgIHVwZGF0ZVZpZXdwb3J0T3JpZ2luYXRpb24oYm9hcmQsIG9yaWdpbmF0aW9uKTtcbiAgICAgICAgdXBkYXRlVmlld3BvcnRPZmZzZXQoYm9hcmQpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHVwZGF0ZVZpZXdwb3J0T2Zmc2V0KGJvYXJkKTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVZpZXdwb3J0T3JpZ2luYXRpb24gPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIG9yaWdpbmF0aW9uOiBQb2ludCkgPT4ge1xuICAgIEJPQVJEX1RPX1ZJRVdQT1JUX09SSUdJTkFUSU9OLnNldChib2FyZCwgb3JpZ2luYXRpb24pO1xufTtcblxuZXhwb3J0IGNvbnN0IGNsZWFyVmlld3BvcnRPcmlnaW5hdGlvbiA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIEJPQVJEX1RPX1ZJRVdQT1JUX09SSUdJTkFUSU9OLmRlbGV0ZShib2FyZCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Vmlld3BvcnRPcmlnaW5hdGlvbiA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIGNvbnN0IG9yaWdpbmF0aW9uID0gQk9BUkRfVE9fVklFV1BPUlRfT1JJR0lOQVRJT04uZ2V0KGJvYXJkKTtcbiAgICBpZiAob3JpZ2luYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIG9yaWdpbmF0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBib2FyZC52aWV3cG9ydC5vcmlnaW5hdGlvbjtcbiAgICB9XG59O1xuXG5leHBvcnQgY29uc3QgaXNGcm9tU2Nyb2xsaW5nID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgcmV0dXJuICEhSVNfRlJPTV9TQ1JPTExJTkcuZ2V0KGJvYXJkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXRJc0Zyb21TY3JvbGxpbmcgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHN0YXRlOiBib29sZWFuKSA9PiB7XG4gICAgSVNfRlJPTV9TQ1JPTExJTkcuc2V0KGJvYXJkLCBzdGF0ZSk7XG59O1xuXG5leHBvcnQgY29uc3QgaXNGcm9tVmlld3BvcnRDaGFuZ2UgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICByZXR1cm4gISFJU19GUk9NX1ZJRVdQT1JUX0NIQU5HRS5nZXQoYm9hcmQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldElzRnJvbVZpZXdwb3J0Q2hhbmdlID0gKGJvYXJkOiBQbGFpdEJvYXJkLCBzdGF0ZTogYm9vbGVhbikgPT4ge1xuICAgIElTX0ZST01fVklFV1BPUlRfQ0hBTkdFLnNldChib2FyZCwgc3RhdGUpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNjcm9sbFRvUmVjdGFuZ2xlKGJvYXJkOiBQbGFpdEJvYXJkLCBjbGllbnQ6IFJlY3RhbmdsZUNsaWVudCkge31cbiJdfQ==
|
|
184
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy92aWV3cG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEQsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBbUIsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU1RCxNQUFNLGlCQUFpQixHQUFHLElBQUksT0FBTyxFQUF1QixDQUFDO0FBRTdELE1BQU0sdUJBQXVCLEdBQUcsSUFBSSxPQUFPLEVBQXVCLENBQUM7QUFFbkUsTUFBTSxVQUFVLHdCQUF3QixDQUFDLEtBQWlCO0lBQ3RELE1BQU0sRUFBRSxhQUFhLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO0lBQ3hDLE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RCxNQUFNLFlBQVksR0FBRyxVQUFVLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMscUJBQXFCLEVBQUUsQ0FBQztJQUVqRixPQUFPO1FBQ0gsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLEdBQUcsY0FBYztRQUMxQyxNQUFNLEVBQUUsWUFBWSxDQUFDLE1BQU0sR0FBRyxjQUFjO0tBQy9DLENBQUM7QUFDTixDQUFDO0FB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Q0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUcsQ0FBQyxLQUFpQixFQUFFLEtBQWMsRUFBRSxFQUFFO0lBQ3pFLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDOUMsQ0FBQyxDQUFDO0FBRUYsTUFBTSxVQUFVLGlCQUFpQixDQUFDLEtBQWlCLEVBQUUsTUFBdUIsSUFBRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU0NST0xMX0JBUl9XSURUSCB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBNQVhfWk9PTSwgTUlOX1pPT00gfSBmcm9tICcuLi9jb25zdGFudHMvem9vbSc7XG5pbXBvcnQgeyBQbGFpdEJvYXJkLCBQb2ludCwgUmVjdGFuZ2xlQ2xpZW50IH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBCb2FyZFRyYW5zZm9ybXMgfSBmcm9tICcuLi90cmFuc2Zvcm1zL2JvYXJkJztcbmltcG9ydCB7IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMgfSBmcm9tICcuL2VsZW1lbnQnO1xuaW1wb3J0IHsgdG9Ib3N0UG9pbnRGcm9tVmlld0JveFBvaW50LCB0b1ZpZXdCb3hQb2ludCB9IGZyb20gJy4vdG8tcG9pbnQnO1xuaW1wb3J0IHsgQk9BUkRfVE9fVklFV1BPUlRfT1JJR0lOQVRJT04gfSBmcm9tICcuL3dlYWstbWFwcyc7XG5cbmNvbnN0IElTX0ZST01fU0NST0xMSU5HID0gbmV3IFdlYWtNYXA8UGxhaXRCb2FyZCwgYm9vbGVhbj4oKTtcblxuY29uc3QgSVNfRlJPTV9WSUVXUE9SVF9DSEFOR0UgPSBuZXcgV2Vha01hcDxQbGFpdEJvYXJkLCBib29sZWFuPigpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld3BvcnRDb250YWluZXJSZWN0KGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgY29uc3QgeyBoaWRlU2Nyb2xsYmFyIH0gPSBib2FyZC5vcHRpb25zO1xuICAgIGNvbnN0IHNjcm9sbEJhcldpZHRoID0gaGlkZVNjcm9sbGJhciA/IFNDUk9MTF9CQVJfV0lEVEggOiAwO1xuICAgIGNvbnN0IHZpZXdwb3J0UmVjdCA9IFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250YWluZXIoYm9hcmQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IHZpZXdwb3J0UmVjdC53aWR0aCArIHNjcm9sbEJhcldpZHRoLFxuICAgICAgICBoZWlnaHQ6IHZpZXdwb3J0UmVjdC5oZWlnaHQgKyBzY3JvbGxCYXJXaWR0aFxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbGVtZW50SG9zdEJCb3goYm9hcmQ6IFBsYWl0Qm9hcmQsIHpvb206IG51bWJlcikge1xuICAgIGNvbnN0IGNoaWxkcmVuUmVjdCA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGJvYXJkLmNoaWxkcmVuLCB0cnVlKTtcbiAgICBjb25zdCB2aWV3cG9ydENvbnRhaW5lclJlY3QgPSBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IHZpZXdwb3J0Q29udGFpbmVyUmVjdC53aWR0aCAvIHpvb207XG4gICAgY29uc3QgY29udGFpbmVySGVpZ2h0ID0gdmlld3BvcnRDb250YWluZXJSZWN0LmhlaWdodCAvIHpvb207XG4gICAgbGV0IGxlZnQ6IG51bWJlcjtcbiAgICBsZXQgcmlnaHQ6IG51bWJlcjtcbiAgICBsZXQgdG9wOiBudW1iZXI7XG4gICAgbGV0IGJvdHRvbTogbnVtYmVyO1xuXG4gICAgaWYgKGNoaWxkcmVuUmVjdC53aWR0aCA8IGNvbnRhaW5lcldpZHRoKSB7XG4gICAgICAgIGNvbnN0IGNlbnRlclggPSBjaGlsZHJlblJlY3QueCArIGNoaWxkcmVuUmVjdC53aWR0aCAvIDI7XG4gICAgICAgIGNvbnN0IGhhbGZDb250YWluZXJXaWR0aCA9IGNvbnRhaW5lcldpZHRoIC8gMjtcbiAgICAgICAgbGVmdCA9IGNlbnRlclggLSBoYWxmQ29udGFpbmVyV2lkdGg7XG4gICAgICAgIHJpZ2h0ID0gY2VudGVyWCArIGhhbGZDb250YWluZXJXaWR0aDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsZWZ0ID0gY2hpbGRyZW5SZWN0Lng7XG4gICAgICAgIHJpZ2h0ID0gY2hpbGRyZW5SZWN0LnggKyBjaGlsZHJlblJlY3Qud2lkdGg7XG4gICAgfVxuICAgIGlmIChjaGlsZHJlblJlY3QuaGVpZ2h0IDwgY29udGFpbmVySGVpZ2h0KSB7XG4gICAgICAgIGNvbnN0IGNlbnRlclkgPSBjaGlsZHJlblJlY3QueSArIGNoaWxkcmVuUmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICBjb25zdCBoYWxmQ29udGFpbmVySGVpZ2h0ID0gY29udGFpbmVySGVpZ2h0IC8gMjtcbiAgICAgICAgdG9wID0gY2VudGVyWSAtIGhhbGZDb250YWluZXJIZWlnaHQ7XG4gICAgICAgIGJvdHRvbSA9IGNlbnRlclkgKyBoYWxmQ29udGFpbmVySGVpZ2h0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRvcCA9IGNoaWxkcmVuUmVjdC55O1xuICAgICAgICBib3R0b20gPSBjaGlsZHJlblJlY3QueSArIGNoaWxkcmVuUmVjdC5oZWlnaHQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGxlZnQsXG4gICAgICAgIHJpZ2h0LFxuICAgICAgICB0b3AsXG4gICAgICAgIGJvdHRvbVxuICAgIH07XG59XG5cbi8qKlxuICogTm9ybWFsaXplIHRoZSBzY2FsaW5nIHJhdGlvLCBvciByZXR1cm4gdGhlIGNvcnJlY3RlZCBzY2FsaW5nIHJhdGlvIGlmIHRoZSBsaW1pdCBpcyBleGNlZWRlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xhbXBab29tTGV2ZWwoem9vbTogbnVtYmVyLCBtaW5ab29tID0gTUlOX1pPT00sIG1heFpvb20gPSBNQVhfWk9PTSkge1xuICAgIHJldHVybiB6b29tIDwgbWluWm9vbSA/IG1pblpvb20gOiB6b29tID4gbWF4Wm9vbSA/IG1heFpvb20gOiB6b29tO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2FsY05ld1ZpZXdCb3goYm9hcmQ6IFBsYWl0Qm9hcmQsIHpvb206IG51bWJlcikge1xuICAgIGNvbnN0IGJvYXJkQ29udGFpbmVyUmVjdGFuZ2xlID0gUGxhaXRCb2FyZC5nZXRCb2FyZENvbnRhaW5lcihib2FyZCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgZWxlbWVudEhvc3RCQm94ID0gZ2V0RWxlbWVudEhvc3RCQm94KGJvYXJkLCB6b29tKTtcbiAgICBjb25zdCBob3Jpem9udGFsUGFkZGluZyA9IGJvYXJkQ29udGFpbmVyUmVjdGFuZ2xlLndpZHRoIC8gMjtcbiAgICBjb25zdCB2ZXJ0aWNhbFBhZGRpbmcgPSBib2FyZENvbnRhaW5lclJlY3RhbmdsZS5oZWlnaHQgLyAyO1xuICAgIGNvbnN0IHZpZXdCb3ggPSBbXG4gICAgICAgIGVsZW1lbnRIb3N0QkJveC5sZWZ0IC0gaG9yaXpvbnRhbFBhZGRpbmcgLyB6b29tLFxuICAgICAgICBlbGVtZW50SG9zdEJCb3gudG9wIC0gdmVydGljYWxQYWRkaW5nIC8gem9vbSxcbiAgICAgICAgZWxlbWVudEhvc3RCQm94LnJpZ2h0IC0gZWxlbWVudEhvc3RCQm94LmxlZnQgKyAoaG9yaXpvbnRhbFBhZGRpbmcgKiAyKSAvIHpvb20sXG4gICAgICAgIGVsZW1lbnRIb3N0QkJveC5ib3R0b20gLSBlbGVtZW50SG9zdEJCb3gudG9wICsgKHZlcnRpY2FsUGFkZGluZyAqIDIpIC8gem9vbVxuICAgIF07XG4gICAgcmV0dXJuIHZpZXdCb3g7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRWaWV3Qm94Q2VudGVyUG9pbnQoYm9hcmQ6IFBsYWl0Qm9hcmQpIHtcbiAgICBjb25zdCBjaGlsZHJlblJlY3RhbmdsZSA9IGdldFJlY3RhbmdsZUJ5RWxlbWVudHMoYm9hcmQsIGJvYXJkLmNoaWxkcmVuLCB0cnVlKTtcbiAgICByZXR1cm4gW2NoaWxkcmVuUmVjdGFuZ2xlLnggKyBjaGlsZHJlblJlY3RhbmdsZS53aWR0aCAvIDIsIGNoaWxkcmVuUmVjdGFuZ2xlLnkgKyBjaGlsZHJlblJlY3RhbmdsZS5oZWlnaHQgLyAyXSBhcyBQb2ludDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldFNWR1ZpZXdCb3goYm9hcmQ6IFBsYWl0Qm9hcmQsIHZpZXdCb3g6IG51bWJlcltdKSB7XG4gICAgY29uc3Qgem9vbSA9IGJvYXJkLnZpZXdwb3J0Lnpvb207XG4gICAgY29uc3QgaG9zdEVsZW1lbnQgPSBQbGFpdEJvYXJkLmdldEhvc3QoYm9hcmQpO1xuICAgIGhvc3RFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgIGhvc3RFbGVtZW50LnN0eWxlLndpZHRoID0gYCR7dmlld0JveFsyXSAqIHpvb219cHhgO1xuICAgIGhvc3RFbGVtZW50LnN0eWxlLmhlaWdodCA9IGAke3ZpZXdCb3hbM10gKiB6b29tfXB4YDtcblxuICAgIGlmICh2aWV3Qm94ICYmIHZpZXdCb3hbMl0gPiAwICYmIHZpZXdCb3hbM10gPiAwKSB7XG4gICAgICAgIGhvc3RFbGVtZW50LnNldEF0dHJpYnV0ZSgndmlld0JveCcsIHZpZXdCb3guam9pbignICcpKTtcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVWaWV3cG9ydE9mZnNldChib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGNvbnN0IG9yaWdpbmF0aW9uID0gZ2V0Vmlld3BvcnRPcmlnaW5hdGlvbihib2FyZCk7XG4gICAgaWYgKCFvcmlnaW5hdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IFtzY3JvbGxMZWZ0LCBzY3JvbGxUb3BdID0gdG9Ib3N0UG9pbnRGcm9tVmlld0JveFBvaW50KGJvYXJkLCBvcmlnaW5hdGlvbik7XG4gICAgdXBkYXRlVmlld3BvcnRDb250YWluZXJTY3JvbGwoYm9hcmQsIHNjcm9sbExlZnQsIHNjcm9sbFRvcCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVWaWV3cG9ydENvbnRhaW5lclNjcm9sbChib2FyZDogUGxhaXRCb2FyZCwgbGVmdDogbnVtYmVyLCB0b3A6IG51bWJlciwgaXNGcm9tVmlld3BvcnRDaGFuZ2U6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgY29uc3Qgdmlld3BvcnRDb250YWluZXIgPSBQbGFpdEJvYXJkLmdldFZpZXdwb3J0Q29udGFpbmVyKGJvYXJkKTtcbiAgICBjb25zdCBwcmV2aW91c1Njcm9sbExlZnQgPSB2aWV3cG9ydENvbnRhaW5lci5zY3JvbGxMZWZ0O1xuICAgIGNvbnN0IHByZXZpb3VzU2Nyb2xsVG9wID0gdmlld3BvcnRDb250YWluZXIuc2Nyb2xsVG9wO1xuICAgIC8vIHNjcm9sbFRvcCBhc3NpZ24gMTEuOCB3aWxsIGdldCAxMS41IGluIGNocm9tZVxuICAgIC8vIHNjcm9sbFRvcCBhc3NpZ24gMTEuOCB3aWxsIGdldCAxMSBpbiBmaXJlZm94LCBzYWZhcmlcbiAgICAvLyBzY3JvbGxUb3AgYXNzaWduIDExLjQgd2lsbCBnZXQgMTEgaW4gY2hyb21lLCBmaXJlZm94LCBzYWZhcmlcbiAgICBpZiAodmlld3BvcnRDb250YWluZXIuc2Nyb2xsTGVmdCAhPT0gTWF0aC5mbG9vcihsZWZ0KSB8fCB2aWV3cG9ydENvbnRhaW5lci5zY3JvbGxUb3AgIT09IE1hdGguZmxvb3IodG9wKSkge1xuICAgICAgICB2aWV3cG9ydENvbnRhaW5lci5zY3JvbGxMZWZ0ID0gbGVmdDtcbiAgICAgICAgdmlld3BvcnRDb250YWluZXIuc2Nyb2xsVG9wID0gdG9wO1xuICAgICAgICBjb25zdCBvZmZzZXRXaWR0aCA9IHZpZXdwb3J0Q29udGFpbmVyLm9mZnNldFdpZHRoO1xuICAgICAgICBjb25zdCBvZmZzZXRIZWlnaHQgPSB2aWV3cG9ydENvbnRhaW5lci5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIGlmIChwcmV2aW91c1Njcm9sbExlZnQgPT09IHZpZXdwb3J0Q29udGFpbmVyLnNjcm9sbExlZnQgJiYgcHJldmlvdXNTY3JvbGxUb3AgPT09IHZpZXdwb3J0Q29udGFpbmVyLnNjcm9sbFRvcCkge1xuICAgICAgICAgICAgLy8gVGhlIHNjcm9sbCBldmVudCBjYW5ub3QgYmUgdHJpZ2dlcmVkLCBzbyB0aGUgb3JpZ2luYXRpb24gaXMgbW9kaWZpZWQgZGlyZWN0bHkgYmFzZWQgb24gdGhlIHNjcm9sbCBkaXN0YW5jZS5cbiAgICAgICAgICAgIHVwZGF0ZVZpZXdwb3J0QnlTY3JvbGxpbmcoYm9hcmQsIHByZXZpb3VzU2Nyb2xsTGVmdCwgcHJldmlvdXNTY3JvbGxUb3ApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaXNWYWxpZExlZnRPclRvcCA9XG4gICAgICAgICAgICAgICAgbGVmdCA+IDAgJiZcbiAgICAgICAgICAgICAgICB0b3AgPiAwICYmXG4gICAgICAgICAgICAgICAgbGVmdCA8IHZpZXdwb3J0Q29udGFpbmVyLnNjcm9sbFdpZHRoIC0gb2Zmc2V0V2lkdGggJiZcbiAgICAgICAgICAgICAgICB0b3AgPCB2aWV3cG9ydENvbnRhaW5lci5zY3JvbGxIZWlnaHQgLSBvZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICBpZiAoaXNGcm9tVmlld3BvcnRDaGFuZ2UgJiYgaXNWYWxpZExlZnRPclRvcCkge1xuICAgICAgICAgICAgICAgIHNldElzRnJvbVZpZXdwb3J0Q2hhbmdlKGJvYXJkLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVZpZXdwb3J0QnlTY3JvbGxpbmcoYm9hcmQ6IFBsYWl0Qm9hcmQsIHNjcm9sbExlZnQ6IG51bWJlciwgc2Nyb2xsVG9wOiBudW1iZXIpIHtcbiAgICBjb25zdCBvcmlnaW5hdGlvbiA9IHRvVmlld0JveFBvaW50KGJvYXJkLCBbc2Nyb2xsTGVmdCwgc2Nyb2xsVG9wXSk7XG4gICAgaWYgKFBvaW50LmlzRXF1YWxzKG9yaWdpbmF0aW9uLCBnZXRWaWV3cG9ydE9yaWdpbmF0aW9uKGJvYXJkKSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBCb2FyZFRyYW5zZm9ybXMudXBkYXRlVmlld3BvcnQoYm9hcmQsIG9yaWdpbmF0aW9uKTtcbiAgICBzZXRJc0Zyb21TY3JvbGxpbmcoYm9hcmQsIHRydWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGl6ZVZpZXdwb3J0Q29udGFpbmVyKGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBnZXRWaWV3cG9ydENvbnRhaW5lclJlY3QoYm9hcmQpO1xuICAgIGNvbnN0IHZpZXdwb3J0Q29udGFpbmVyID0gUGxhaXRCb2FyZC5nZXRWaWV3cG9ydENvbnRhaW5lcihib2FyZCk7XG4gICAgdmlld3BvcnRDb250YWluZXIuc3R5bGUud2lkdGggPSBgJHt3aWR0aH1weGA7XG4gICAgdmlld3BvcnRDb250YWluZXIuc3R5bGUuaGVpZ2h0ID0gYCR7aGVpZ2h0fXB4YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVWaWV3Qm94KGJvYXJkOiBQbGFpdEJvYXJkKSB7XG4gICAgY29uc3Qgem9vbSA9IGJvYXJkLnZpZXdwb3J0Lnpvb207XG4gICAgY29uc3Qgdmlld0JveCA9IGNhbGNOZXdWaWV3Qm94KGJvYXJkLCB6b29tKTtcbiAgICBzZXRTVkdWaWV3Qm94KGJvYXJkLCB2aWV3Qm94KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRpYWxpemVWaWV3cG9ydE9mZnNldChib2FyZDogUGxhaXRCb2FyZCkge1xuICAgIGlmICghYm9hcmQudmlld3BvcnQ/Lm9yaWdpbmF0aW9uKSB7XG4gICAgICAgIGNvbnN0IHpvb20gPSBib2FyZC52aWV3cG9ydC56b29tO1xuICAgICAgICBjb25zdCB2aWV3cG9ydENvbnRhaW5lclJlY3QgPSBQbGFpdEJvYXJkLmdldEJvYXJkQ29udGFpbmVyKGJvYXJkKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3Qgdmlld0JveCA9IGNhbGNOZXdWaWV3Qm94KGJvYXJkLCB6b29tKTtcbiAgICAgICAgY29uc3QgY2VudGVyWCA9IHZpZXdCb3hbMF0gKyB2aWV3Qm94WzJdIC8gMjtcbiAgICAgICAgY29uc3QgY2VudGVyWSA9IHZpZXdCb3hbMV0gKyB2aWV3Qm94WzNdIC8gMjtcbiAgICAgICAgY29uc3Qgb3JpZ2luYXRpb24gPSBbY2VudGVyWCAtIHZpZXdwb3J0Q29udGFpbmVyUmVjdC53aWR0aCAvIDIgLyB6b29tLCBjZW50ZXJZIC0gdmlld3BvcnRDb250YWluZXJSZWN0LmhlaWdodCAvIDIgLyB6b29tXSBhcyBQb2ludDtcbiAgICAgICAgdXBkYXRlVmlld3BvcnRPcmlnaW5hdGlvbihib2FyZCwgb3JpZ2luYXRpb24pO1xuICAgICAgICB1cGRhdGVWaWV3cG9ydE9mZnNldChib2FyZCk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdXBkYXRlVmlld3BvcnRPZmZzZXQoYm9hcmQpO1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlVmlld3BvcnRPcmlnaW5hdGlvbiA9IChib2FyZDogUGxhaXRCb2FyZCwgb3JpZ2luYXRpb246IFBvaW50KSA9PiB7XG4gICAgQk9BUkRfVE9fVklFV1BPUlRfT1JJR0lOQVRJT04uc2V0KGJvYXJkLCBvcmlnaW5hdGlvbik7XG59O1xuXG5leHBvcnQgY29uc3QgY2xlYXJWaWV3cG9ydE9yaWdpbmF0aW9uID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgQk9BUkRfVE9fVklFV1BPUlRfT1JJR0lOQVRJT04uZGVsZXRlKGJvYXJkKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRWaWV3cG9ydE9yaWdpbmF0aW9uID0gKGJvYXJkOiBQbGFpdEJvYXJkKSA9PiB7XG4gICAgY29uc3Qgb3JpZ2luYXRpb24gPSBCT0FSRF9UT19WSUVXUE9SVF9PUklHSU5BVElPTi5nZXQoYm9hcmQpO1xuICAgIGlmIChvcmlnaW5hdGlvbikge1xuICAgICAgICByZXR1cm4gb3JpZ2luYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGJvYXJkLnZpZXdwb3J0Lm9yaWdpbmF0aW9uO1xuICAgIH1cbn07XG5cbmV4cG9ydCBjb25zdCBpc0Zyb21TY3JvbGxpbmcgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQpID0+IHtcbiAgICByZXR1cm4gISFJU19GUk9NX1NDUk9MTElORy5nZXQoYm9hcmQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldElzRnJvbVNjcm9sbGluZyA9IChib2FyZDogUGxhaXRCb2FyZCwgc3RhdGU6IGJvb2xlYW4pID0+IHtcbiAgICBJU19GUk9NX1NDUk9MTElORy5zZXQoYm9hcmQsIHN0YXRlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0Zyb21WaWV3cG9ydENoYW5nZSA9IChib2FyZDogUGxhaXRCb2FyZCkgPT4ge1xuICAgIHJldHVybiAhIUlTX0ZST01fVklFV1BPUlRfQ0hBTkdFLmdldChib2FyZCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2V0SXNGcm9tVmlld3BvcnRDaGFuZ2UgPSAoYm9hcmQ6IFBsYWl0Qm9hcmQsIHN0YXRlOiBib29sZWFuKSA9PiB7XG4gICAgSVNfRlJPTV9WSUVXUE9SVF9DSEFOR0Uuc2V0KGJvYXJkLCBzdGF0ZSk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gc2Nyb2xsVG9SZWN0YW5nbGUoYm9hcmQ6IFBsYWl0Qm9hcmQsIGNsaWVudDogUmVjdGFuZ2xlQ2xpZW50KSB7fVxuIl19
|