@plait/angular-board 0.77.0 → 0.77.1
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.
|
@@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, Component, ContentChildren, ElementRef, EventE
|
|
|
2
2
|
import rough from 'roughjs/bin/rough';
|
|
3
3
|
import { fromEvent, Subject } from 'rxjs';
|
|
4
4
|
import { filter, takeUntil, tap } from 'rxjs/operators';
|
|
5
|
-
import { BOARD_TO_AFTER_CHANGE, BOARD_TO_CONTEXT, BOARD_TO_ELEMENT_HOST, BOARD_TO_HOST, BOARD_TO_MOVING_POINT, BOARD_TO_MOVING_POINT_IN_BOARD, BOARD_TO_ON_CHANGE, BOARD_TO_ROUGH_SVG, BoardTransforms, FLUSHING, HOST_CLASS_NAME, IS_BOARD_ALIVE, IS_CHROME, IS_FIREFOX, IS_SAFARI, KEY_TO_ELEMENT_MAP, ListRender, PlaitBoard, PlaitBoardContext, PlaitElement, WritableClipboardOperationType, ZOOM_STEP, createBoard, deleteFragment, getClipboardData, getSelectedElements, hasInputOrTextareaTarget, initializeViewBox, initializeViewportContainer, initializeViewportOffset, isFromScrolling, isFromViewportChange, setFragment, setIsFromScrolling, setIsFromViewportChange, toHostPoint, toViewBoxPoint, updateViewportByScrolling, updateViewportOffset, withBoard, withHandPointer, withHistory, withHotkey, withI18n, withMoving, withOptions, withRelatedFragment, withSelection } from '@plait/core';
|
|
5
|
+
import { BOARD_TO_AFTER_CHANGE, BOARD_TO_CONTEXT, BOARD_TO_ELEMENT_HOST, BOARD_TO_HOST, BOARD_TO_MOVING_POINT, BOARD_TO_MOVING_POINT_IN_BOARD, BOARD_TO_ON_CHANGE, BOARD_TO_ROUGH_SVG, BoardTransforms, FLUSHING, HOST_CLASS_NAME, IS_BOARD_ALIVE, IS_CHROME, IS_FIREFOX, IS_SAFARI, KEY_TO_ELEMENT_MAP, ListRender, PlaitBoard, PlaitBoardContext, PlaitElement, WritableClipboardOperationType, ZOOM_STEP, createBoard, deleteFragment, getClipboardData, getSelectedElements, hasInputOrTextareaTarget, initializeViewBox, initializeViewportContainer, initializeViewportOffset, isFromScrolling, isFromViewportChange, setFragment, setIsFromScrolling, setIsFromViewportChange, toHostPoint, toViewBoxPoint, updateViewBox, updateViewportByScrolling, updateViewportOffset, withBoard, withHandPointer, withHistory, withHotkey, withI18n, withMoving, withOptions, withRelatedFragment, withSelection } from '@plait/core';
|
|
6
6
|
import { PlaitIslandBaseComponent, hasOnBoardChange } from '../island/island-base.component';
|
|
7
7
|
import { BOARD_TO_COMPONENT } from '../utils/weak-maps';
|
|
8
8
|
import { withAngular } from '../plugins/with-angular';
|
|
@@ -108,7 +108,12 @@ export class PlaitBoardComponent {
|
|
|
108
108
|
return;
|
|
109
109
|
}
|
|
110
110
|
this.updateListRender();
|
|
111
|
-
|
|
111
|
+
if (isSetViewport) {
|
|
112
|
+
initializeViewBox(this.board);
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
updateViewBox(this.board);
|
|
116
|
+
}
|
|
112
117
|
updateViewportOffset(this.board);
|
|
113
118
|
const selectedElements = getSelectedElements(this.board);
|
|
114
119
|
selectedElements.forEach((element) => {
|
|
@@ -459,4 +464,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
459
464
|
type: ContentChildren,
|
|
460
465
|
args: [PlaitIslandBaseComponent, { descendants: true }]
|
|
461
466
|
}] } });
|
|
462
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9hcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1ib2FyZC9zcmMvYm9hcmQvYm9hcmQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFFWCxLQUFLLEVBS0wsTUFBTSxFQUdOLFNBQVMsRUFDVCxTQUFTLEVBRVosTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxLQUFLLE1BQU0sbUJBQW1CLENBQUM7QUFFdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEQsT0FBTyxFQUNILHFCQUFxQixFQUNyQixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLGFBQWEsRUFDYixxQkFBcUIsRUFDckIsOEJBQThCLEVBQzlCLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLFFBQVEsRUFDUixlQUFlLEVBQ2YsY0FBYyxFQUNkLFNBQVMsRUFDVCxVQUFVLEVBQ1YsU0FBUyxFQUNULGtCQUFrQixFQUNsQixVQUFVLEVBQ1YsVUFBVSxFQUNWLGlCQUFpQixFQUdqQixZQUFZLEVBSVosOEJBQThCLEVBQzlCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsd0JBQXdCLEVBQ3hCLGlCQUFpQixFQUNqQiwyQkFBMkIsRUFDM0Isd0JBQXdCLEVBQ3hCLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsV0FBVyxFQUNYLGtCQUFrQixFQUNsQix1QkFBdUIsRUFDdkIsV0FBVyxFQUNYLGNBQWMsRUFDZCx5QkFBeUIsRUFDekIsb0JBQW9C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SztnQkFFRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUksUUFBUTtzQkFBakIsTUFBTTtnQkFFRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBT0gsU0FBUztzQkFEWixXQUFXO3VCQUFDLE9BQU87Z0JBbUJoQixRQUFRO3NCQURYLFdBQVc7dUJBQUMsZ0JBQWdCO2dCQU16QixTQUFTO3NCQURaLFdBQVc7dUJBQUMsZUFBZTtnQkFNeEIsd0JBQXdCO3NCQUQzQixXQUFXO3VCQUFDLHVCQUF1QjtnQkFVcEMsR0FBRztzQkFERixTQUFTO3VCQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBTWxDLGlCQUFpQjtzQkFEaEIsU0FBUzt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHQSxPQUFPO3NCQUF4RSxlQUFlO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdEJpbmRpbmcsXG4gICAgSW5qZWN0b3IsXG4gICAgSW5wdXQsXG4gICAgTmdab25lLFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICB2aWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkLFxuICAgIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgcm91Z2ggZnJvbSAncm91Z2hqcy9iaW4vcm91Z2gnO1xuaW1wb3J0IHsgUm91Z2hTVkcgfSBmcm9tICdyb3VnaGpzL2Jpbi9zdmcnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQm9hcmRDb21wb25lbnRJbnRlcmZhY2UgfSBmcm9tICcuL2JvYXJkLmNvbXBvbmVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHtcbiAgICBCT0FSRF9UT19BRlRFUl9DSEFOR0UsXG4gICAgQk9BUkRfVE9fQ09OVEVYVCxcbiAgICBCT0FSRF9UT19FTEVNRU5UX0hPU1QsXG4gICAgQk9BUkRfVE9fSE9TVCxcbiAgICBCT0FSRF9UT19NT1ZJTkdfUE9JTlQsXG4gICAgQk9BUkRfVE9fTU9WSU5HX1BPSU5UX0lOX0JPQVJELFxuICAgIEJPQVJEX1RPX09OX0NIQU5HRSxcbiAgICBCT0FSRF9UT19ST1VHSF9TVkcsXG4gICAgQm9hcmRUcmFuc2Zvcm1zLFxuICAgIEZMVVNISU5HLFxuICAgIEhPU1RfQ0xBU1NfTkFNRSxcbiAgICBJU19CT0FSRF9BTElWRSxcbiAgICBJU19DSFJPTUUsXG4gICAgSVNfRklSRUZPWCxcbiAgICBJU19TQUZBUkksXG4gICAgS0VZX1RPX0VMRU1FTlRfTUFQLFxuICAgIExpc3RSZW5kZXIsXG4gICAgUGxhaXRCb2FyZCxcbiAgICBQbGFpdEJvYXJkQ29udGV4dCxcbiAgICBQbGFpdEJvYXJkT3B0aW9ucyxcbiAgICBQbGFpdENoaWxkcmVuQ29udGV4dCxcbiAgICBQbGFpdEVsZW1lbnQsXG4gICAgUGxhaXRQbHVnaW4sXG4gICAgUGxhaXRUaGVtZSxcbiAgICBWaWV3cG9ydCxcbiAgICBXcml0YWJsZUNsaXBib2FyZE9wZXJhdGlvblR5cGUsXG4gICAgWk9PTV9TVEVQLFxuICAgIGNyZWF0ZUJvYXJkLFxuICAgIGRlbGV0ZUZyYWdtZW50LFxuICAgIGdldENsaXBib2FyZERhdGEsXG4gICAgZ2V0U2VsZWN0ZWRFbGVtZW50cyxcbiAgICBoYXNJbnB1dE9yVGV4dGFyZWFUYXJnZXQsXG4gICAgaW5pdGlhbGl6ZVZpZXdCb3gsXG4gICAgaW5pdGlhbGl6ZVZpZXdwb3J0Q29udGFpbmVyLFxuICAgIGluaXRpYWxpemVWaWV3cG9ydE9mZnNldCxcbiAgICBpc0Zyb21TY3JvbGxpbmcsXG4gICAgaXNGcm9tVmlld3BvcnRDaGFuZ2UsXG4gICAgc2V0RnJhZ21lbnQsXG4gICAgc2V0SXNGcm9tU2Nyb2xsaW5nLFxuICAgIHNldElzRnJvbVZpZXdwb3J0Q2hhbmdlLFxuICAgIHRvSG9zdFBvaW50LFxuICAgIHRvVmlld0JveFBvaW50LFxuICAgIHVwZGF0ZVZpZXdwb3J0QnlTY3JvbGxpbmcsXG4gICAgdXBkYXRlVmlld3BvcnRPZmZzZXQsXG4gICAgd2l0aEJvYXJkLFxuICAgIHdpdGhIYW5kUG9pbnRlcixcbiAgICB3aXRoSGlzdG9yeSxcbiAgICB3aXRoSG90a2V5LFxuICAgIHdpdGhJMThuLFxuICAgIHdpdGhNb3ZpbmcsXG4gICAgd2l0aE9wdGlvbnMsXG4gICAgd2l0aFJlbGF0ZWRGcmFnbWVudCxcbiAgICB3aXRoU2VsZWN0aW9uXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IFBsYWl0SXNsYW5kQmFzZUNvbXBvbmVudCwgaGFzT25Cb2FyZENoYW5nZSB9IGZyb20gJy4uL2lzbGFuZC9pc2xhbmQtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQk9BUkRfVE9fQ09NUE9ORU5UIH0gZnJvbSAnLi4vdXRpbHMvd2Vhay1tYXBzJztcbmltcG9ydCB7IHdpdGhBbmd1bGFyIH0gZnJvbSAnLi4vcGx1Z2lucy93aXRoLWFuZ3VsYXInO1xuaW1wb3J0IHsgUGxhaXRDb21tb25FbGVtZW50UmVmLCB3aXRoSW1hZ2UsIHdpdGhUZXh0IH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBPbkNoYW5nZURhdGEgfSBmcm9tICcuLi9wbHVnaW5zL2FuZ3VsYXItYm9hcmQnO1xuXG5jb25zdCBFbGVtZW50TG93ZXJIb3N0Q2xhc3MgPSAnZWxlbWVudC1sb3dlci1ob3N0JztcbmNvbnN0IEVsZW1lbnRIb3N0Q2xhc3MgPSAnZWxlbWVudC1ob3N0JztcbmNvbnN0IEVsZW1lbnRVcHBlckhvc3RDbGFzcyA9ICdlbGVtZW50LXVwcGVyLWhvc3QnO1xuY29uc3QgRWxlbWVudFRvcEhvc3RDbGFzcyA9ICdlbGVtZW50LXRvcC1ob3N0JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwbGFpdC1ib2FyZCcsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cInZpZXdwb3J0LWNvbnRhaW5lclwiICN2aWV3cG9ydENvbnRhaW5lcj5cbiAgICAgICAgICAgIDxzdmcgI3N2ZyB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCIgY2xhc3M9XCJib2FyZC1ob3N0LXN2Z1wiPlxuICAgICAgICAgICAgICAgIDxnIGNsYXNzPVwiZWxlbWVudC1sb3dlci1ob3N0XCI+PC9nPlxuICAgICAgICAgICAgICAgIDxnIGNsYXNzPVwiZWxlbWVudC1ob3N0XCI+PC9nPlxuICAgICAgICAgICAgICAgIDxnIGNsYXNzPVwiZWxlbWVudC11cHBlci1ob3N0XCI+PC9nPlxuICAgICAgICAgICAgICAgIDxnIGNsYXNzPVwiZWxlbWVudC10b3AtaG9zdFwiPjwvZz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCIgY2xhc3M9XCJib2FyZC1hY3RpdmUtc3ZnXCI+XG4gICAgICAgICAgICAgICAgPGcgI2FjdGl2ZUhvc3RHIGNsYXNzPVwiYWN0aXZlLWhvc3QtZ1wiPjwvZz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIGAsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBQbGFpdEJvYXJkQ29tcG9uZW50IGltcGxlbWVudHMgQm9hcmRDb21wb25lbnRJbnRlcmZhY2UsIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICAgIGhhc0luaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgICBib2FyZCE6IFBsYWl0Qm9hcmQ7XG5cbiAgICByb3VnaFNWRyE6IFJvdWdoU1ZHO1xuXG4gICAgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgcHJpdmF0ZSByZXNpemVPYnNlcnZlciE6IFJlc2l6ZU9ic2VydmVyO1xuXG4gICAgQElucHV0KCkgcGxhaXRWYWx1ZTogUGxhaXRFbGVtZW50W10gPSBbXTtcblxuICAgIEBJbnB1dCgpIHBsYWl0Vmlld3BvcnQhOiBWaWV3cG9ydDtcblxuICAgIEBJbnB1dCgpIHBsYWl0UGx1Z2luczogUGxhaXRQbHVnaW5bXSA9IFtdO1xuXG4gICAgQElucHV0KCkgcGxhaXRPcHRpb25zPzogUGxhaXRCb2FyZE9wdGlvbnM7XG5cbiAgICBASW5wdXQoKSBwbGFpdFRoZW1lPzogUGxhaXRUaGVtZTtcblxuICAgIEBPdXRwdXQoKSBvbkNoYW5nZTogRXZlbnRFbWl0dGVyPE9uQ2hhbmdlRGF0YT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KCkgcGxhaXRCb2FyZEluaXRpYWxpemVkOiBFdmVudEVtaXR0ZXI8UGxhaXRCb2FyZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBnZXQgaG9zdCgpOiBTVkdTVkdFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ZnLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgZ2V0IGhvc3RDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIGAke0hPU1RfQ0xBU1NfTkFNRX0gdGhlbWUtJHt0aGlzLmJvYXJkLnRoZW1lLnRoZW1lQ29sb3JNb2RlfSAke3RoaXMuZ2V0QnJvd3NlckNsYXNzTmFtZSgpfSBwb2ludGVyLSR7dGhpcy5ib2FyZC5wb2ludGVyfWA7XG4gICAgfVxuXG4gICAgZ2V0QnJvd3NlckNsYXNzTmFtZSgpIHtcbiAgICAgICAgaWYgKElTX1NBRkFSSSkge1xuICAgICAgICAgICAgcmV0dXJuICdzYWZhcmknO1xuICAgICAgICB9XG4gICAgICAgIGlmIChJU19DSFJPTUUpIHtcbiAgICAgICAgICAgIHJldHVybiAnY2hyb21lJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoSVNfRklSRUZPWCkge1xuICAgICAgICAgICAgcmV0dXJuICdmaXJlZm94JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5yZWFkb25seScpXG4gICAgZ2V0IHJlYWRvbmx5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ib2FyZC5vcHRpb25zLnJlYWRvbmx5O1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZm9jdXNlZCcpXG4gICAgZ2V0IGlzRm9jdXNlZCgpIHtcbiAgICAgICAgcmV0dXJuIFBsYWl0Qm9hcmQuaXNGb2N1cyh0aGlzLmJvYXJkKTtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRpc2FibGVkLXNjcm9sbCcpXG4gICAgZ2V0IGRpc2FibGVkU2Nyb2xsT25Ob25Gb2N1cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYm9hcmQub3B0aW9ucy5kaXNhYmxlZFNjcm9sbE9uTm9uRm9jdXMgJiYgIVBsYWl0Qm9hcmQuaXNGb2N1cyh0aGlzLmJvYXJkKTtcbiAgICB9XG5cbiAgICBnZXQgbmF0aXZlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBAVmlld0NoaWxkKCdzdmcnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHN2ZyE6IEVsZW1lbnRSZWY7XG5cbiAgICBhY3RpdmVIb3N0RyA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignYWN0aXZlSG9zdEcnKTtcblxuICAgIEBWaWV3Q2hpbGQoJ3ZpZXdwb3J0Q29udGFpbmVyJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICB2aWV3cG9ydENvbnRhaW5lciE6IEVsZW1lbnRSZWY7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKFBsYWl0SXNsYW5kQmFzZUNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBpc2xhbmRzPzogUXVlcnlMaXN0PFBsYWl0SXNsYW5kQmFzZUNvbXBvbmVudD47XG5cbiAgICBsaXN0UmVuZGVyITogTGlzdFJlbmRlcjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHVibGljIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHVibGljIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcbiAgICApIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxlbWVudExvd2VySG9zdCA9IHRoaXMuaG9zdC5xdWVyeVNlbGVjdG9yKGAuJHtFbGVtZW50TG93ZXJIb3N0Q2xhc3N9YCkgYXMgU1ZHR0VsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRIb3N0ID0gdGhpcy5ob3N0LnF1ZXJ5U2VsZWN0b3IoYC4ke0VsZW1lbnRIb3N0Q2xhc3N9YCkgYXMgU1ZHR0VsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRVcHBlckhvc3QgPSB0aGlzLmhvc3QucXVlcnlTZWxlY3RvcihgLiR7RWxlbWVudFVwcGVySG9zdENsYXNzfWApIGFzIFNWR0dFbGVtZW50O1xuICAgICAgICBjb25zdCBlbGVtZW50VG9wSG9zdCA9IHRoaXMuaG9zdC5xdWVyeVNlbGVjdG9yKGAuJHtFbGVtZW50VG9wSG9zdENsYXNzfWApIGFzIFNWR0dFbGVtZW50O1xuICAgICAgICBjb25zdCByb3VnaFNWRyA9IHJvdWdoLnN2Zyh0aGlzLmhvc3QgYXMgU1ZHU1ZHRWxlbWVudCwge1xuICAgICAgICAgICAgb3B0aW9uczogeyByb3VnaG5lc3M6IDAsIHN0cm9rZVdpZHRoOiAxIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucm91Z2hTVkcgPSByb3VnaFNWRztcbiAgICAgICAgdGhpcy5pbml0aWFsaXplUGx1Z2lucygpO1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVIb29rTGlzdGVuZXIoKTtcbiAgICAgICAgICAgIHRoaXMudmlld3BvcnRTY3JvbGxMaXN0ZW5lcigpO1xuICAgICAgICAgICAgdGhpcy53aGVlbFpvb21MaXN0ZW5lcigpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVzaXplTGlzdGVuZXIoKTtcbiAgICAgICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pihkb2N1bWVudCwgJ21vdXNlbGVhdmUnKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBCT0FSRF9UT19NT1ZJTkdfUE9JTlQuZGVsZXRlKHRoaXMuYm9hcmQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgQk9BUkRfVE9fQ09NUE9ORU5ULnNldCh0aGlzLmJvYXJkLCB0aGlzKTtcbiAgICAgICAgQk9BUkRfVE9fUk9VR0hfU1ZHLnNldCh0aGlzLmJvYXJkLCByb3VnaFNWRyk7XG4gICAgICAgIEJPQVJEX1RPX0hPU1Quc2V0KHRoaXMuYm9hcmQsIHRoaXMuaG9zdCk7XG4gICAgICAgIElTX0JPQVJEX0FMSVZFLnNldCh0aGlzLmJvYXJkLCB0cnVlKTtcbiAgICAgICAgQk9BUkRfVE9fRUxFTUVOVF9IT1NULnNldCh0aGlzLmJvYXJkLCB7XG4gICAgICAgICAgICBsb3dlckhvc3Q6IGVsZW1lbnRMb3dlckhvc3QsXG4gICAgICAgICAgICBob3N0OiBlbGVtZW50SG9zdCxcbiAgICAgICAgICAgIHVwcGVySG9zdDogZWxlbWVudFVwcGVySG9zdCxcbiAgICAgICAgICAgIHRvcEhvc3Q6IGVsZW1lbnRUb3BIb3N0LFxuICAgICAgICAgICAgYWN0aXZlSG9zdDogdGhpcy5hY3RpdmVIb3N0RygpPy5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgY29udGFpbmVyOiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgIHZpZXdwb3J0Q29udGFpbmVyOiB0aGlzLnZpZXdwb3J0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgfSk7XG4gICAgICAgIEJPQVJEX1RPX09OX0NIQU5HRS5zZXQodGhpcy5ib2FyZCwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc09ubHlTZXRTZWxlY3Rpb24gPSB0aGlzLmJvYXJkLm9wZXJhdGlvbnMubGVuZ3RoICYmIHRoaXMuYm9hcmQub3BlcmF0aW9ucy5ldmVyeSgob3ApID0+IG9wLnR5cGUgPT09ICdzZXRfc2VsZWN0aW9uJyk7XG4gICAgICAgICAgICAgICAgaWYgKGlzT25seVNldFNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUxpc3RSZW5kZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBpc1NldFZpZXdwb3J0ID0gdGhpcy5ib2FyZC5vcGVyYXRpb25zLmxlbmd0aCAmJiB0aGlzLmJvYXJkLm9wZXJhdGlvbnMuc29tZSgob3ApID0+IG9wLnR5cGUgPT09ICdzZXRfdmlld3BvcnQnKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNTZXRWaWV3cG9ydCAmJiBpc0Zyb21TY3JvbGxpbmcodGhpcy5ib2FyZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0SXNGcm9tU2Nyb2xsaW5nKHRoaXMuYm9hcmQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVMaXN0UmVuZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVMaXN0UmVuZGVyKCk7XG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZVZpZXdCb3godGhpcy5ib2FyZCk7XG4gICAgICAgICAgICAgICAgdXBkYXRlVmlld3BvcnRPZmZzZXQodGhpcy5ib2FyZCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHModGhpcy5ib2FyZCk7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRSZWYgPSBQbGFpdEVsZW1lbnQuZ2V0RWxlbWVudFJlZjxQbGFpdENvbW1vbkVsZW1lbnRSZWY+KGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50UmVmLnVwZGF0ZUFjdGl2ZVNlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgQk9BUkRfVE9fQUZURVJfQ0hBTkdFLnNldCh0aGlzLmJvYXJkLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGE6IE9uQ2hhbmdlRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMuYm9hcmQuY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnM6IHRoaXMuYm9hcmQub3BlcmF0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgdmlld3BvcnQ6IHRoaXMuYm9hcmQudmlld3BvcnQsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogdGhpcy5ib2FyZC5zZWxlY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIHRoZW1lOiB0aGlzLmJvYXJkLnRoZW1lXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUlzbGFuZHMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoZGF0YSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgUGxhaXRCb2FyZENvbnRleHQoKTtcbiAgICAgICAgQk9BUkRfVE9fQ09OVEVYVC5zZXQodGhpcy5ib2FyZCwgY29udGV4dCk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUxpc3RSZW5kZXIoKTtcbiAgICAgICAgdGhpcy5oYXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVJc2xhbmRzKCk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAodGhpcy5oYXNJbml0aWFsaXplZCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVDaGFuZ2UgPSBjaGFuZ2VzWydwbGFpdFZhbHVlJ107XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gY2hhbmdlc1sncGxhaXRPcHRpb25zJ107XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZUNoYW5nZSkge1xuICAgICAgICAgICAgICAgIC8vIGF2b2lkIHVzZWxlc3MgdXBkYXRpbmdcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ib2FyZC5jaGlsZHJlbiAhPT0gdmFsdWVDaGFuZ2UuY3VycmVudFZhbHVlICYmICFGTFVTSElORy5nZXQodGhpcy5ib2FyZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5jaGlsZHJlbiA9IHZhbHVlQ2hhbmdlLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVMaXN0UmVuZGVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLm9wdGlvbnMgPSBvcHRpb25zLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBsYWl0Qm9hcmRJbml0aWFsaXplZC5lbWl0KHRoaXMuYm9hcmQpO1xuICAgICAgICBpbml0aWFsaXplVmlld3BvcnRDb250YWluZXIodGhpcy5ib2FyZCk7XG4gICAgICAgIGluaXRpYWxpemVWaWV3Qm94KHRoaXMuYm9hcmQpO1xuICAgICAgICBpbml0aWFsaXplVmlld3BvcnRPZmZzZXQodGhpcy5ib2FyZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplUGx1Z2lucygpIHtcbiAgICAgICAgbGV0IGJvYXJkID0gd2l0aFJlbGF0ZWRGcmFnbWVudChcbiAgICAgICAgICAgIHdpdGhIb3RrZXkoXG4gICAgICAgICAgICAgICAgd2l0aEhhbmRQb2ludGVyKFxuICAgICAgICAgICAgICAgICAgICB3aXRoSGlzdG9yeShcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhTZWxlY3Rpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aE1vdmluZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aEJvYXJkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aEkxOG4od2l0aE9wdGlvbnMod2l0aEFuZ3VsYXIod2l0aEltYWdlKHdpdGhUZXh0KGNyZWF0ZUJvYXJkKHRoaXMucGxhaXRWYWx1ZSwgdGhpcy5wbGFpdE9wdGlvbnMpKSkpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wbGFpdFBsdWdpbnMuZm9yRWFjaCgocGx1Z2luKSA9PiB7XG4gICAgICAgICAgICBib2FyZCA9IHBsdWdpbihib2FyZCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmJvYXJkID0gYm9hcmQ7XG5cbiAgICAgICAgaWYgKHRoaXMucGxhaXRWaWV3cG9ydCkge1xuICAgICAgICAgICAgdGhpcy5ib2FyZC52aWV3cG9ydCA9IHRoaXMucGxhaXRWaWV3cG9ydDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBsYWl0VGhlbWUpIHtcbiAgICAgICAgICAgIHRoaXMuYm9hcmQudGhlbWUgPSB0aGlzLnBsYWl0VGhlbWU7XG4gICAgICAgIH1cblxuICAgICAgICBLRVlfVE9fRUxFTUVOVF9NQVAuc2V0KGJvYXJkLCBuZXcgTWFwKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZUhvb2tMaXN0ZW5lcigpIHtcbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuaG9zdCwgJ21vdXNlZG93bicpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQubW91c2Vkb3duKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxQb2ludGVyRXZlbnQ+KHRoaXMuaG9zdCwgJ3BvaW50ZXJkb3duJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLnBvaW50ZXJEb3duKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmhvc3QsICdtb3VzZW1vdmUnKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBCT0FSRF9UT19NT1ZJTkdfUE9JTlRfSU5fQk9BUkQuc2V0KHRoaXMuYm9hcmQsIFtldmVudC54LCBldmVudC55XSk7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5tb3VzZW1vdmUoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PFBvaW50ZXJFdmVudD4odGhpcy5ob3N0LCAncG9pbnRlcm1vdmUnKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIEJPQVJEX1RPX01PVklOR19QT0lOVF9JTl9CT0FSRC5zZXQodGhpcy5ib2FyZCwgW2V2ZW50LngsIGV2ZW50LnldKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLnBvaW50ZXJNb3ZlKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmhvc3QsICdtb3VzZWxlYXZlJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgQk9BUkRfVE9fTU9WSU5HX1BPSU5UX0lOX0JPQVJELmRlbGV0ZSh0aGlzLmJvYXJkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLm1vdXNlbGVhdmUoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PFBvaW50ZXJFdmVudD4odGhpcy5ob3N0LCAncG9pbnRlcmxlYXZlJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBCT0FSRF9UT19NT1ZJTkdfUE9JTlRfSU5fQk9BUkQuZGVsZXRlKHRoaXMuYm9hcmQpO1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQucG9pbnRlckxlYXZlKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pihkb2N1bWVudCwgJ21vdXNlbW92ZScpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIEJPQVJEX1RPX01PVklOR19QT0lOVC5zZXQodGhpcy5ib2FyZCwgW2V2ZW50LngsIGV2ZW50LnldKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLmdsb2JhbE1vdXNlbW92ZShldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8UG9pbnRlckV2ZW50Pihkb2N1bWVudCwgJ3BvaW50ZXJtb3ZlJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBCT0FSRF9UT19NT1ZJTkdfUE9JTlQuc2V0KHRoaXMuYm9hcmQsIFtldmVudC54LCBldmVudC55XSk7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5nbG9iYWxQb2ludGVyTW92ZShldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5ob3N0LCAnbW91c2V1cCcpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQubW91c2V1cChldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8UG9pbnRlckV2ZW50Pih0aGlzLmhvc3QsICdwb2ludGVydXAnKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQucG9pbnRlclVwKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pihkb2N1bWVudCwgJ21vdXNldXAnKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLmdsb2JhbE1vdXNldXAoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PFBvaW50ZXJFdmVudD4oZG9jdW1lbnQsICdwb2ludGVydXAnKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQuZ2xvYmFsUG9pbnRlclVwKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmhvc3QsICdkYmxjbGljaycpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuaXNGb2N1c2VkICYmICFQbGFpdEJvYXJkLmhhc0JlZW5UZXh0RWRpdGluZyh0aGlzLmJvYXJkKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5kYmxDbGljayhldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oZG9jdW1lbnQsICdrZXlkb3duJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICB0YXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQuZ2xvYmFsS2V5RG93bihldmVudCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZmlsdGVyKChldmVudCkgPT4gdGhpcy5pc0ZvY3VzZWQgJiYgIVBsYWl0Qm9hcmQuaGFzQmVlblRleHRFZGl0aW5nKHRoaXMuYm9hcmQpICYmICFoYXNJbnB1dE9yVGV4dGFyZWFUYXJnZXQoZXZlbnQudGFyZ2V0KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5rZXlEb3duKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2tleXVwJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5pc0ZvY3VzZWQgJiYgIVBsYWl0Qm9hcmQuaGFzQmVlblRleHRFZGl0aW5nKHRoaXMuYm9hcmQpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkPy5rZXlVcChldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8Q2xpcGJvYXJkRXZlbnQ+KGRvY3VtZW50LCAnY29weScpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuaXNGb2N1c2VkICYmICFQbGFpdEJvYXJkLmhhc0JlZW5UZXh0RWRpdGluZyh0aGlzLmJvYXJkKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgc2V0RnJhZ21lbnQodGhpcy5ib2FyZCwgV3JpdGFibGVDbGlwYm9hcmRPcGVyYXRpb25UeXBlLmNvcHksIGV2ZW50LmNsaXBib2FyZERhdGEpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PENsaXBib2FyZEV2ZW50Pihkb2N1bWVudCwgJ3Bhc3RlJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5pc0ZvY3VzZWQgJiYgIVBsYWl0Qm9hcmQuaXNSZWFkb25seSh0aGlzLmJvYXJkKSAmJiAhUGxhaXRCb2FyZC5oYXNCZWVuVGV4dEVkaXRpbmcodGhpcy5ib2FyZCkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGFzeW5jIChjbGlwYm9hcmRFdmVudDogQ2xpcGJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb3VzZVBvaW50ID0gUGxhaXRCb2FyZC5nZXRNb3ZpbmdQb2ludEluQm9hcmQodGhpcy5ib2FyZCk7XG4gICAgICAgICAgICAgICAgaWYgKG1vdXNlUG9pbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0UG9pbnQgPSB0b1ZpZXdCb3hQb2ludCh0aGlzLmJvYXJkLCB0b0hvc3RQb2ludCh0aGlzLmJvYXJkLCBtb3VzZVBvaW50WzBdLCBtb3VzZVBvaW50WzFdKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsaXBib2FyZERhdGEgPSBhd2FpdCBnZXRDbGlwYm9hcmREYXRhKGNsaXBib2FyZEV2ZW50LmNsaXBib2FyZERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLmluc2VydEZyYWdtZW50KGNsaXBib2FyZERhdGEsIHRhcmdldFBvaW50LCBXcml0YWJsZUNsaXBib2FyZE9wZXJhdGlvblR5cGUucGFzdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxDbGlwYm9hcmRFdmVudD4oZG9jdW1lbnQsICdjdXQnKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmlzRm9jdXNlZCAmJiAhUGxhaXRCb2FyZC5pc1JlYWRvbmx5KHRoaXMuYm9hcmQpICYmICFQbGFpdEJvYXJkLmhhc0JlZW5UZXh0RWRpdGluZyh0aGlzLmJvYXJkKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgc2V0RnJhZ21lbnQodGhpcy5ib2FyZCwgV3JpdGFibGVDbGlwYm9hcmRPcGVyYXRpb25UeXBlLmN1dCwgZXZlbnQuY2xpcGJvYXJkRGF0YSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlRnJhZ21lbnQodGhpcy5ib2FyZCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVMaXN0UmVuZGVyKCkge1xuICAgICAgICB0aGlzLmxpc3RSZW5kZXIgPSBuZXcgTGlzdFJlbmRlcih0aGlzLmJvYXJkKTtcbiAgICAgICAgdGhpcy5saXN0UmVuZGVyLmluaXRpYWxpemUodGhpcy5ib2FyZC5jaGlsZHJlbiwgdGhpcy5pbml0aWFsaXplQ2hpbGRyZW5Db250ZXh0KCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTGlzdFJlbmRlcigpIHtcbiAgICAgICAgdGhpcy5saXN0UmVuZGVyLnVwZGF0ZSh0aGlzLmJvYXJkLmNoaWxkcmVuLCB0aGlzLmluaXRpYWxpemVDaGlsZHJlbkNvbnRleHQoKSk7XG4gICAgICAgIFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250ZXh0KHRoaXMuYm9hcmQpLm5leHRTdGFibGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVDaGlsZHJlbkNvbnRleHQoKTogUGxhaXRDaGlsZHJlbkNvbnRleHQge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYm9hcmQ6IHRoaXMuYm9hcmQsXG4gICAgICAgICAgICBwYXJlbnQ6IHRoaXMuYm9hcmQsXG4gICAgICAgICAgICBwYXJlbnRHOiBQbGFpdEJvYXJkLmdldEVsZW1lbnRIb3N0KHRoaXMuYm9hcmQpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2aWV3cG9ydFNjcm9sbExpc3RlbmVyKCkge1xuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy52aWV3cG9ydENvbnRhaW5lci5uYXRpdmVFbGVtZW50LCAnc2Nyb2xsJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNGcm9tVmlld3BvcnRDaGFuZ2UodGhpcy5ib2FyZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldElzRnJvbVZpZXdwb3J0Q2hhbmdlKHRoaXMuYm9hcmQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzY3JvbGxMZWZ0LCBzY3JvbGxUb3AgfSA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgICB1cGRhdGVWaWV3cG9ydEJ5U2Nyb2xsaW5nKHRoaXMuYm9hcmQsIHNjcm9sbExlZnQsIHNjcm9sbFRvcCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMudmlld3BvcnRDb250YWluZXIubmF0aXZlRWxlbWVudCwgJ3RvdWNoc3RhcnQnLCB7IHBhc3NpdmU6IGZhbHNlIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVzaXplTGlzdGVuZXIoKSB7XG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgICAgaW5pdGlhbGl6ZVZpZXdwb3J0Q29udGFpbmVyKHRoaXMuYm9hcmQpO1xuICAgICAgICAgICAgaW5pdGlhbGl6ZVZpZXdCb3godGhpcy5ib2FyZCk7XG4gICAgICAgICAgICB1cGRhdGVWaWV3cG9ydE9mZnNldCh0aGlzLmJvYXJkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZUlzbGFuZHMoKSB7XG4gICAgICAgIHRoaXMuaXNsYW5kcz8uZm9yRWFjaCgoaXNsYW5kKSA9PiB7XG4gICAgICAgICAgICBpc2xhbmQuaW5pdGlhbGl6ZSh0aGlzLmJvYXJkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVJc2xhbmRzKCkge1xuICAgICAgICB0aGlzLmlzbGFuZHM/LmZvckVhY2goKGlzbGFuZCkgPT4ge1xuICAgICAgICAgICAgaWYgKGhhc09uQm9hcmRDaGFuZ2UoaXNsYW5kKSkge1xuICAgICAgICAgICAgICAgIGlzbGFuZC5vbkJvYXJkQ2hhbmdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpc2xhbmQubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgd2hlZWxab29tTGlzdGVuZXIoKSB7XG4gICAgICAgIGZyb21FdmVudDxXaGVlbEV2ZW50Pih0aGlzLmhvc3QsICd3aGVlbCcsIHsgcGFzc2l2ZTogZmFsc2UgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBXaGVlbEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQ3JlZGl0cyB0byBleGNhbGlkcmF3XG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2V4Y2FsaWRyYXcvZXhjYWxpZHJhdy9ibG9iL2I3ZDdjY2M5Mjk2OTZjYzE3YjRjYzM0NDUyZTRhZmQ4NDZkNTlmNGYvc3JjL2NvbXBvbmVudHMvQXBwLnRzeCNMOTA2MFxuICAgICAgICAgICAgICAgIGlmIChldmVudC5tZXRhS2V5IHx8IGV2ZW50LmN0cmxLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBkZWx0YVgsIGRlbHRhWSB9ID0gZXZlbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHpvb20gPSB0aGlzLmJvYXJkLnZpZXdwb3J0Lnpvb207XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ24gPSBNYXRoLnNpZ24oZGVsdGFZKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgTUFYX1NURVAgPSBaT09NX1NURVAgKiAxMDA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFic0RlbHRhID0gTWF0aC5hYnMoZGVsdGFZKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRlbHRhID0gZGVsdGFZO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWJzRGVsdGEgPiBNQVhfU1RFUCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGEgPSBNQVhfU1RFUCAqIHNpZ247XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGV0IG5ld1pvb20gPSB6b29tIC0gZGVsdGEgLyAxMDA7XG4gICAgICAgICAgICAgICAgICAgIC8vIGluY3JlYXNlIHpvb20gc3RlcHMgdGhlIG1vcmUgem9vbWVkLWluIHdlIGFyZSAoYXBwbGllcyB0byA+MTAwJSBvbmx5KVxuICAgICAgICAgICAgICAgICAgICBuZXdab29tICs9XG4gICAgICAgICAgICAgICAgICAgICAgICBNYXRoLmxvZzEwKE1hdGgubWF4KDEsIHpvb20pKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAtc2lnbiAqXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZWR1Y2VkIGFtcGxpZmljYXRpb24gZm9yIHNtYWxsIGRlbHRhcyAoc21hbGwgbW92ZW1lbnRzIG9uIGEgdHJhY2twYWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbigxLCBhYnNEZWx0YSAvIDIwKTtcbiAgICAgICAgICAgICAgICAgICAgQm9hcmRUcmFuc2Zvcm1zLnVwZGF0ZVpvb20odGhpcy5ib2FyZCwgbmV3Wm9vbSwgUGxhaXRCb2FyZC5nZXRNb3ZpbmdQb2ludEluQm9hcmQodGhpcy5ib2FyZCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRyYWNrQnkgPSAoaW5kZXg6IG51bWJlciwgZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LmlkO1xuICAgIH07XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciAmJiB0aGlzLnJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgICAgIEJPQVJEX1RPX1JPVUdIX1NWRy5kZWxldGUodGhpcy5ib2FyZCk7XG4gICAgICAgIEJPQVJEX1RPX0NPTVBPTkVOVC5kZWxldGUodGhpcy5ib2FyZCk7XG4gICAgICAgIEJPQVJEX1RPX1JPVUdIX1NWRy5kZWxldGUodGhpcy5ib2FyZCk7XG4gICAgICAgIEJPQVJEX1RPX0hPU1QuZGVsZXRlKHRoaXMuYm9hcmQpO1xuICAgICAgICBCT0FSRF9UT19FTEVNRU5UX0hPU1QuZGVsZXRlKHRoaXMuYm9hcmQpO1xuICAgICAgICBJU19CT0FSRF9BTElWRS5zZXQodGhpcy5ib2FyZCwgZmFsc2UpO1xuICAgICAgICBCT0FSRF9UT19PTl9DSEFOR0UuZGVsZXRlKHRoaXMuYm9hcmQpO1xuICAgICAgICBCT0FSRF9UT19BRlRFUl9DSEFOR0Uuc2V0KHRoaXMuYm9hcmQsICgpID0+IHt9KTtcbiAgICAgICAgS0VZX1RPX0VMRU1FTlRfTUFQLmRlbGV0ZSh0aGlzLmJvYXJkKTtcbiAgICB9XG5cbiAgICBtYXJrRm9yQ2hlY2soKSB7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJc2xhbmRzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|
|
467
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9hcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci1ib2FyZC9zcmMvYm9hcmQvYm9hcmQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFFWCxLQUFLLEVBS0wsTUFBTSxFQUdOLFNBQVMsRUFDVCxTQUFTLEVBRVosTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxLQUFLLE1BQU0sbUJBQW1CLENBQUM7QUFFdEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEQsT0FBTyxFQUNILHFCQUFxQixFQUNyQixnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLGFBQWEsRUFDYixxQkFBcUIsRUFDckIsOEJBQThCLEVBQzlCLGtCQUFrQixFQUNsQixrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLFFBQVEsRUFDUixlQUFlLEVBQ2YsY0FBYyxFQUNkLFNBQVMsRUFDVCxVQUFVLEVBQ1YsU0FBUyxFQUNULGtCQUFrQixFQUNsQixVQUFVLEVBQ1YsVUFBVSxFQUNWLGlCQUFpQixFQUdqQixZQUFZLEVBSVosOEJBQThCLEVBQzlCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixtQkFBbUIsRUFDbkIsd0JBQXdCLEVBQ3hCLGlCQUFpQixFQUNqQiwyQkFBMkIsRUFDM0Isd0JBQXdCLEVBQ3hCLGVBQWUsRUFDZixvQkFBb0IsRUFDcEIsV0FBVyxFQUNYLGtCQUFrQixFQUNsQix1QkFBdUIsRUFDdkIsV0FBVyxFQUNYLGNBQWMsRUFDZCxhQUFhLEVBQ2IseUJBQXlCLEVB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QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxVQUFVLEVBQUUsSUFBSTtpQkFDbkI7MExBWVksVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxhQUFhO3NCQUFyQixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVJLFFBQVE7c0JBQWpCLE1BQU07Z0JBRUcscUJBQXFCO3NCQUE5QixNQUFNO2dCQU9ILFNBQVM7c0JBRFosV0FBVzt1QkFBQyxPQUFPO2dCQW1CaEIsUUFBUTtzQkFEWCxXQUFXO3VCQUFDLGdCQUFnQjtnQkFNekIsU0FBUztzQkFEWixXQUFXO3VCQUFDLGVBQWU7Z0JBTXhCLHdCQUF3QjtzQkFEM0IsV0FBVzt1QkFBQyx1QkFBdUI7Z0JBVXBDLEdBQUc7c0JBREYsU0FBUzt1QkFBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQU1sQyxpQkFBaUI7c0JBRGhCLFNBQVM7dUJBQUMsbUJBQW1CLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBR0EsT0FBTztzQkFBeEUsZUFBZTt1QkFBQyx3QkFBd0IsRUFBRSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEluamVjdG9yLFxuICAgIElucHV0LFxuICAgIE5nWm9uZSxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgdmlld0NoaWxkLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHJvdWdoIGZyb20gJ3JvdWdoanMvYmluL3JvdWdoJztcbmltcG9ydCB7IFJvdWdoU1ZHIH0gZnJvbSAncm91Z2hqcy9iaW4vc3ZnJztcbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEJvYXJkQ29tcG9uZW50SW50ZXJmYWNlIH0gZnJvbSAnLi9ib2FyZC5jb21wb25lbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gICAgQk9BUkRfVE9fQUZURVJfQ0hBTkdFLFxuICAgIEJPQVJEX1RPX0NPTlRFWFQsXG4gICAgQk9BUkRfVE9fRUxFTUVOVF9IT1NULFxuICAgIEJPQVJEX1RPX0hPU1QsXG4gICAgQk9BUkRfVE9fTU9WSU5HX1BPSU5ULFxuICAgIEJPQVJEX1RPX01PVklOR19QT0lOVF9JTl9CT0FSRCxcbiAgICBCT0FSRF9UT19PTl9DSEFOR0UsXG4gICAgQk9BUkRfVE9fUk9VR0hfU1ZHLFxuICAgIEJvYXJkVHJhbnNmb3JtcyxcbiAgICBGTFVTSElORyxcbiAgICBIT1NUX0NMQVNTX05BTUUsXG4gICAgSVNfQk9BUkRfQUxJVkUsXG4gICAgSVNfQ0hST01FLFxuICAgIElTX0ZJUkVGT1gsXG4gICAgSVNfU0FGQVJJLFxuICAgIEtFWV9UT19FTEVNRU5UX01BUCxcbiAgICBMaXN0UmVuZGVyLFxuICAgIFBsYWl0Qm9hcmQsXG4gICAgUGxhaXRCb2FyZENvbnRleHQsXG4gICAgUGxhaXRCb2FyZE9wdGlvbnMsXG4gICAgUGxhaXRDaGlsZHJlbkNvbnRleHQsXG4gICAgUGxhaXRFbGVtZW50LFxuICAgIFBsYWl0UGx1Z2luLFxuICAgIFBsYWl0VGhlbWUsXG4gICAgVmlld3BvcnQsXG4gICAgV3JpdGFibGVDbGlwYm9hcmRPcGVyYXRpb25UeXBlLFxuICAgIFpPT01fU1RFUCxcbiAgICBjcmVhdGVCb2FyZCxcbiAgICBkZWxldGVGcmFnbWVudCxcbiAgICBnZXRDbGlwYm9hcmREYXRhLFxuICAgIGdldFNlbGVjdGVkRWxlbWVudHMsXG4gICAgaGFzSW5wdXRPclRleHRhcmVhVGFyZ2V0LFxuICAgIGluaXRpYWxpemVWaWV3Qm94LFxuICAgIGluaXRpYWxpemVWaWV3cG9ydENvbnRhaW5lcixcbiAgICBpbml0aWFsaXplVmlld3BvcnRPZmZzZXQsXG4gICAgaXNGcm9tU2Nyb2xsaW5nLFxuICAgIGlzRnJvbVZpZXdwb3J0Q2hhbmdlLFxuICAgIHNldEZyYWdtZW50LFxuICAgIHNldElzRnJvbVNjcm9sbGluZyxcbiAgICBzZXRJc0Zyb21WaWV3cG9ydENoYW5nZSxcbiAgICB0b0hvc3RQb2ludCxcbiAgICB0b1ZpZXdCb3hQb2ludCxcbiAgICB1cGRhdGVWaWV3Qm94LFxuICAgIHVwZGF0ZVZpZXdwb3J0QnlTY3JvbGxpbmcsXG4gICAgdXBkYXRlVmlld3BvcnRPZmZzZXQsXG4gICAgd2l0aEJvYXJkLFxuICAgIHdpdGhIYW5kUG9pbnRlcixcbiAgICB3aXRoSGlzdG9yeSxcbiAgICB3aXRoSG90a2V5LFxuICAgIHdpdGhJMThuLFxuICAgIHdpdGhNb3ZpbmcsXG4gICAgd2l0aE9wdGlvbnMsXG4gICAgd2l0aFJlbGF0ZWRGcmFnbWVudCxcbiAgICB3aXRoU2VsZWN0aW9uXG59IGZyb20gJ0BwbGFpdC9jb3JlJztcbmltcG9ydCB7IFBsYWl0SXNsYW5kQmFzZUNvbXBvbmVudCwgaGFzT25Cb2FyZENoYW5nZSB9IGZyb20gJy4uL2lzbGFuZC9pc2xhbmQtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQk9BUkRfVE9fQ09NUE9ORU5UIH0gZnJvbSAnLi4vdXRpbHMvd2Vhay1tYXBzJztcbmltcG9ydCB7IHdpdGhBbmd1bGFyIH0gZnJvbSAnLi4vcGx1Z2lucy93aXRoLWFuZ3VsYXInO1xuaW1wb3J0IHsgUGxhaXRDb21tb25FbGVtZW50UmVmLCB3aXRoSW1hZ2UsIHdpdGhUZXh0IH0gZnJvbSAnQHBsYWl0L2NvbW1vbic7XG5pbXBvcnQgeyBPbkNoYW5nZURhdGEgfSBmcm9tICcuLi9wbHVnaW5zL2FuZ3VsYXItYm9hcmQnO1xuXG5jb25zdCBFbGVtZW50TG93ZXJIb3N0Q2xhc3MgPSAnZWxlbWVudC1sb3dlci1ob3N0JztcbmNvbnN0IEVsZW1lbnRIb3N0Q2xhc3MgPSAnZWxlbWVudC1ob3N0JztcbmNvbnN0IEVsZW1lbnRVcHBlckhvc3RDbGFzcyA9ICdlbGVtZW50LXVwcGVyLWhvc3QnO1xuY29uc3QgRWxlbWVudFRvcEhvc3RDbGFzcyA9ICdlbGVtZW50LXRvcC1ob3N0JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdwbGFpdC1ib2FyZCcsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPGRpdiBjbGFzcz1cInZpZXdwb3J0LWNvbnRhaW5lclwiICN2aWV3cG9ydENvbnRhaW5lcj5cbiAgICAgICAgICAgIDxzdmcgI3N2ZyB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCIgc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCIgY2xhc3M9XCJib2FyZC1ob3N0LXN2Z1wiPlxuICAgICAgICAgICAgICAgIDxnIGNsYXNzPVwiZWxlbWVudC1sb3dlci1ob3N0XCI+PC9nPlxuICAgICAgICAgICAgICAgIDxnIGNsYXNzPVwiZWxlbWVudC1ob3N0XCI+PC9nPlxuICAgICAgICAgICAgICAgIDxnIGNsYXNzPVwiZWxlbWVudC11cHBlci1ob3N0XCI+PC9nPlxuICAgICAgICAgICAgICAgIDxnIGNsYXNzPVwiZWxlbWVudC10b3AtaG9zdFwiPjwvZz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxMDAlXCIgY2xhc3M9XCJib2FyZC1hY3RpdmUtc3ZnXCI+XG4gICAgICAgICAgICAgICAgPGcgI2FjdGl2ZUhvc3RHIGNsYXNzPVwiYWN0aXZlLWhvc3QtZ1wiPjwvZz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIGAsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBQbGFpdEJvYXJkQ29tcG9uZW50IGltcGxlbWVudHMgQm9hcmRDb21wb25lbnRJbnRlcmZhY2UsIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3kge1xuICAgIGhhc0luaXRpYWxpemVkID0gZmFsc2U7XG5cbiAgICBib2FyZCE6IFBsYWl0Qm9hcmQ7XG5cbiAgICByb3VnaFNWRyE6IFJvdWdoU1ZHO1xuXG4gICAgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgcHJpdmF0ZSByZXNpemVPYnNlcnZlciE6IFJlc2l6ZU9ic2VydmVyO1xuXG4gICAgQElucHV0KCkgcGxhaXRWYWx1ZTogUGxhaXRFbGVtZW50W10gPSBbXTtcblxuICAgIEBJbnB1dCgpIHBsYWl0Vmlld3BvcnQhOiBWaWV3cG9ydDtcblxuICAgIEBJbnB1dCgpIHBsYWl0UGx1Z2luczogUGxhaXRQbHVnaW5bXSA9IFtdO1xuXG4gICAgQElucHV0KCkgcGxhaXRPcHRpb25zPzogUGxhaXRCb2FyZE9wdGlvbnM7XG5cbiAgICBASW5wdXQoKSBwbGFpdFRoZW1lPzogUGxhaXRUaGVtZTtcblxuICAgIEBPdXRwdXQoKSBvbkNoYW5nZTogRXZlbnRFbWl0dGVyPE9uQ2hhbmdlRGF0YT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBAT3V0cHV0KCkgcGxhaXRCb2FyZEluaXRpYWxpemVkOiBFdmVudEVtaXR0ZXI8UGxhaXRCb2FyZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBnZXQgaG9zdCgpOiBTVkdTVkdFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ZnLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gICAgZ2V0IGhvc3RDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIGAke0hPU1RfQ0xBU1NfTkFNRX0gdGhlbWUtJHt0aGlzLmJvYXJkLnRoZW1lLnRoZW1lQ29sb3JNb2RlfSAke3RoaXMuZ2V0QnJvd3NlckNsYXNzTmFtZSgpfSBwb2ludGVyLSR7dGhpcy5ib2FyZC5wb2ludGVyfWA7XG4gICAgfVxuXG4gICAgZ2V0QnJvd3NlckNsYXNzTmFtZSgpIHtcbiAgICAgICAgaWYgKElTX1NBRkFSSSkge1xuICAgICAgICAgICAgcmV0dXJuICdzYWZhcmknO1xuICAgICAgICB9XG4gICAgICAgIGlmIChJU19DSFJPTUUpIHtcbiAgICAgICAgICAgIHJldHVybiAnY2hyb21lJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoSVNfRklSRUZPWCkge1xuICAgICAgICAgICAgcmV0dXJuICdmaXJlZm94JztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5yZWFkb25seScpXG4gICAgZ2V0IHJlYWRvbmx5KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ib2FyZC5vcHRpb25zLnJlYWRvbmx5O1xuICAgIH1cblxuICAgIEBIb3N0QmluZGluZygnY2xhc3MuZm9jdXNlZCcpXG4gICAgZ2V0IGlzRm9jdXNlZCgpIHtcbiAgICAgICAgcmV0dXJuIFBsYWl0Qm9hcmQuaXNGb2N1cyh0aGlzLmJvYXJkKTtcbiAgICB9XG5cbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmRpc2FibGVkLXNjcm9sbCcpXG4gICAgZ2V0IGRpc2FibGVkU2Nyb2xsT25Ob25Gb2N1cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYm9hcmQub3B0aW9ucy5kaXNhYmxlZFNjcm9sbE9uTm9uRm9jdXMgJiYgIVBsYWl0Qm9hcmQuaXNGb2N1cyh0aGlzLmJvYXJkKTtcbiAgICB9XG5cbiAgICBnZXQgbmF0aXZlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICB9XG5cbiAgICBAVmlld0NoaWxkKCdzdmcnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHN2ZyE6IEVsZW1lbnRSZWY7XG5cbiAgICBhY3RpdmVIb3N0RyA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignYWN0aXZlSG9zdEcnKTtcblxuICAgIEBWaWV3Q2hpbGQoJ3ZpZXdwb3J0Q29udGFpbmVyJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSlcbiAgICB2aWV3cG9ydENvbnRhaW5lciE6IEVsZW1lbnRSZWY7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKFBsYWl0SXNsYW5kQmFzZUNvbXBvbmVudCwgeyBkZXNjZW5kYW50czogdHJ1ZSB9KSBpc2xhbmRzPzogUXVlcnlMaXN0PFBsYWl0SXNsYW5kQmFzZUNvbXBvbmVudD47XG5cbiAgICBsaXN0UmVuZGVyITogTGlzdFJlbmRlcjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHVibGljIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHVibGljIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcbiAgICApIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxlbWVudExvd2VySG9zdCA9IHRoaXMuaG9zdC5xdWVyeVNlbGVjdG9yKGAuJHtFbGVtZW50TG93ZXJIb3N0Q2xhc3N9YCkgYXMgU1ZHR0VsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRIb3N0ID0gdGhpcy5ob3N0LnF1ZXJ5U2VsZWN0b3IoYC4ke0VsZW1lbnRIb3N0Q2xhc3N9YCkgYXMgU1ZHR0VsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRVcHBlckhvc3QgPSB0aGlzLmhvc3QucXVlcnlTZWxlY3RvcihgLiR7RWxlbWVudFVwcGVySG9zdENsYXNzfWApIGFzIFNWR0dFbGVtZW50O1xuICAgICAgICBjb25zdCBlbGVtZW50VG9wSG9zdCA9IHRoaXMuaG9zdC5xdWVyeVNlbGVjdG9yKGAuJHtFbGVtZW50VG9wSG9zdENsYXNzfWApIGFzIFNWR0dFbGVtZW50O1xuICAgICAgICBjb25zdCByb3VnaFNWRyA9IHJvdWdoLnN2Zyh0aGlzLmhvc3QgYXMgU1ZHU1ZHRWxlbWVudCwge1xuICAgICAgICAgICAgb3B0aW9uczogeyByb3VnaG5lc3M6IDAsIHN0cm9rZVdpZHRoOiAxIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucm91Z2hTVkcgPSByb3VnaFNWRztcbiAgICAgICAgdGhpcy5pbml0aWFsaXplUGx1Z2lucygpO1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmluaXRpYWxpemVIb29rTGlzdGVuZXIoKTtcbiAgICAgICAgICAgIHRoaXMudmlld3BvcnRTY3JvbGxMaXN0ZW5lcigpO1xuICAgICAgICAgICAgdGhpcy53aGVlbFpvb21MaXN0ZW5lcigpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVzaXplTGlzdGVuZXIoKTtcbiAgICAgICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pihkb2N1bWVudCwgJ21vdXNlbGVhdmUnKVxuICAgICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBCT0FSRF9UT19NT1ZJTkdfUE9JTlQuZGVsZXRlKHRoaXMuYm9hcmQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgQk9BUkRfVE9fQ09NUE9ORU5ULnNldCh0aGlzLmJvYXJkLCB0aGlzKTtcbiAgICAgICAgQk9BUkRfVE9fUk9VR0hfU1ZHLnNldCh0aGlzLmJvYXJkLCByb3VnaFNWRyk7XG4gICAgICAgIEJPQVJEX1RPX0hPU1Quc2V0KHRoaXMuYm9hcmQsIHRoaXMuaG9zdCk7XG4gICAgICAgIElTX0JPQVJEX0FMSVZFLnNldCh0aGlzLmJvYXJkLCB0cnVlKTtcbiAgICAgICAgQk9BUkRfVE9fRUxFTUVOVF9IT1NULnNldCh0aGlzLmJvYXJkLCB7XG4gICAgICAgICAgICBsb3dlckhvc3Q6IGVsZW1lbnRMb3dlckhvc3QsXG4gICAgICAgICAgICBob3N0OiBlbGVtZW50SG9zdCxcbiAgICAgICAgICAgIHVwcGVySG9zdDogZWxlbWVudFVwcGVySG9zdCxcbiAgICAgICAgICAgIHRvcEhvc3Q6IGVsZW1lbnRUb3BIb3N0LFxuICAgICAgICAgICAgYWN0aXZlSG9zdDogdGhpcy5hY3RpdmVIb3N0RygpPy5uYXRpdmVFbGVtZW50LFxuICAgICAgICAgICAgY29udGFpbmVyOiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCxcbiAgICAgICAgICAgIHZpZXdwb3J0Q29udGFpbmVyOiB0aGlzLnZpZXdwb3J0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnRcbiAgICAgICAgfSk7XG4gICAgICAgIEJPQVJEX1RPX09OX0NIQU5HRS5zZXQodGhpcy5ib2FyZCwgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc09ubHlTZXRTZWxlY3Rpb24gPSB0aGlzLmJvYXJkLm9wZXJhdGlvbnMubGVuZ3RoICYmIHRoaXMuYm9hcmQub3BlcmF0aW9ucy5ldmVyeSgob3ApID0+IG9wLnR5cGUgPT09ICdzZXRfc2VsZWN0aW9uJyk7XG4gICAgICAgICAgICAgICAgaWYgKGlzT25seVNldFNlbGVjdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUxpc3RSZW5kZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBpc1NldFZpZXdwb3J0ID0gdGhpcy5ib2FyZC5vcGVyYXRpb25zLmxlbmd0aCAmJiB0aGlzLmJvYXJkLm9wZXJhdGlvbnMuc29tZSgob3ApID0+IG9wLnR5cGUgPT09ICdzZXRfdmlld3BvcnQnKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNTZXRWaWV3cG9ydCAmJiBpc0Zyb21TY3JvbGxpbmcodGhpcy5ib2FyZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0SXNGcm9tU2Nyb2xsaW5nKHRoaXMuYm9hcmQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVMaXN0UmVuZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVMaXN0UmVuZGVyKCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzU2V0Vmlld3BvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZVZpZXdCb3godGhpcy5ib2FyZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlVmlld0JveCh0aGlzLmJvYXJkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdXBkYXRlVmlld3BvcnRPZmZzZXQodGhpcy5ib2FyZCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRFbGVtZW50cyA9IGdldFNlbGVjdGVkRWxlbWVudHModGhpcy5ib2FyZCk7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRFbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRSZWYgPSBQbGFpdEVsZW1lbnQuZ2V0RWxlbWVudFJlZjxQbGFpdENvbW1vbkVsZW1lbnRSZWY+KGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50UmVmLnVwZGF0ZUFjdGl2ZVNlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgQk9BUkRfVE9fQUZURVJfQ0hBTkdFLnNldCh0aGlzLmJvYXJkLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGE6IE9uQ2hhbmdlRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IHRoaXMuYm9hcmQuY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbnM6IHRoaXMuYm9hcmQub3BlcmF0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgdmlld3BvcnQ6IHRoaXMuYm9hcmQudmlld3BvcnQsXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbjogdGhpcy5ib2FyZC5zZWxlY3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIHRoZW1lOiB0aGlzLmJvYXJkLnRoZW1lXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZUlzbGFuZHMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlLmVtaXQoZGF0YSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgUGxhaXRCb2FyZENvbnRleHQoKTtcbiAgICAgICAgQk9BUkRfVE9fQ09OVEVYVC5zZXQodGhpcy5ib2FyZCwgY29udGV4dCk7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUxpc3RSZW5kZXIoKTtcbiAgICAgICAgdGhpcy5oYXNJbml0aWFsaXplZCA9IHRydWU7XG4gICAgfVxuXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVJc2xhbmRzKCk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgICAgICBpZiAodGhpcy5oYXNJbml0aWFsaXplZCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVDaGFuZ2UgPSBjaGFuZ2VzWydwbGFpdFZhbHVlJ107XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gY2hhbmdlc1sncGxhaXRPcHRpb25zJ107XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZUNoYW5nZSkge1xuICAgICAgICAgICAgICAgIC8vIGF2b2lkIHVzZWxlc3MgdXBkYXRpbmdcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ib2FyZC5jaGlsZHJlbiAhPT0gdmFsdWVDaGFuZ2UuY3VycmVudFZhbHVlICYmICFGTFVTSElORy5nZXQodGhpcy5ib2FyZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5jaGlsZHJlbiA9IHZhbHVlQ2hhbmdlLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVMaXN0UmVuZGVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLm9wdGlvbnMgPSBvcHRpb25zLmN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnBsYWl0Qm9hcmRJbml0aWFsaXplZC5lbWl0KHRoaXMuYm9hcmQpO1xuICAgICAgICBpbml0aWFsaXplVmlld3BvcnRDb250YWluZXIodGhpcy5ib2FyZCk7XG4gICAgICAgIGluaXRpYWxpemVWaWV3Qm94KHRoaXMuYm9hcmQpO1xuICAgICAgICBpbml0aWFsaXplVmlld3BvcnRPZmZzZXQodGhpcy5ib2FyZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplUGx1Z2lucygpIHtcbiAgICAgICAgbGV0IGJvYXJkID0gd2l0aFJlbGF0ZWRGcmFnbWVudChcbiAgICAgICAgICAgIHdpdGhIb3RrZXkoXG4gICAgICAgICAgICAgICAgd2l0aEhhbmRQb2ludGVyKFxuICAgICAgICAgICAgICAgICAgICB3aXRoSGlzdG9yeShcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGhTZWxlY3Rpb24oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aE1vdmluZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aEJvYXJkKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aEkxOG4od2l0aE9wdGlvbnMod2l0aEFuZ3VsYXIod2l0aEltYWdlKHdpdGhUZXh0KGNyZWF0ZUJvYXJkKHRoaXMucGxhaXRWYWx1ZSwgdGhpcy5wbGFpdE9wdGlvbnMpKSkpKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5wbGFpdFBsdWdpbnMuZm9yRWFjaCgocGx1Z2luKSA9PiB7XG4gICAgICAgICAgICBib2FyZCA9IHBsdWdpbihib2FyZCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmJvYXJkID0gYm9hcmQ7XG5cbiAgICAgICAgaWYgKHRoaXMucGxhaXRWaWV3cG9ydCkge1xuICAgICAgICAgICAgdGhpcy5ib2FyZC52aWV3cG9ydCA9IHRoaXMucGxhaXRWaWV3cG9ydDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBsYWl0VGhlbWUpIHtcbiAgICAgICAgICAgIHRoaXMuYm9hcmQudGhlbWUgPSB0aGlzLnBsYWl0VGhlbWU7XG4gICAgICAgIH1cblxuICAgICAgICBLRVlfVE9fRUxFTUVOVF9NQVAuc2V0KGJvYXJkLCBuZXcgTWFwKCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZUhvb2tMaXN0ZW5lcigpIHtcbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMuaG9zdCwgJ21vdXNlZG93bicpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQubW91c2Vkb3duKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxQb2ludGVyRXZlbnQ+KHRoaXMuaG9zdCwgJ3BvaW50ZXJkb3duJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLnBvaW50ZXJEb3duKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmhvc3QsICdtb3VzZW1vdmUnKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBCT0FSRF9UT19NT1ZJTkdfUE9JTlRfSU5fQk9BUkQuc2V0KHRoaXMuYm9hcmQsIFtldmVudC54LCBldmVudC55XSk7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5tb3VzZW1vdmUoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PFBvaW50ZXJFdmVudD4odGhpcy5ob3N0LCAncG9pbnRlcm1vdmUnKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIEJPQVJEX1RPX01PVklOR19QT0lOVF9JTl9CT0FSRC5zZXQodGhpcy5ib2FyZCwgW2V2ZW50LngsIGV2ZW50LnldKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLnBvaW50ZXJNb3ZlKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmhvc3QsICdtb3VzZWxlYXZlJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgQk9BUkRfVE9fTU9WSU5HX1BPSU5UX0lOX0JPQVJELmRlbGV0ZSh0aGlzLmJvYXJkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLm1vdXNlbGVhdmUoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PFBvaW50ZXJFdmVudD4odGhpcy5ob3N0LCAncG9pbnRlcmxlYXZlJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBCT0FSRF9UT19NT1ZJTkdfUE9JTlRfSU5fQk9BUkQuZGVsZXRlKHRoaXMuYm9hcmQpO1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQucG9pbnRlckxlYXZlKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pihkb2N1bWVudCwgJ21vdXNlbW92ZScpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIEJPQVJEX1RPX01PVklOR19QT0lOVC5zZXQodGhpcy5ib2FyZCwgW2V2ZW50LngsIGV2ZW50LnldKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLmdsb2JhbE1vdXNlbW92ZShldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8UG9pbnRlckV2ZW50Pihkb2N1bWVudCwgJ3BvaW50ZXJtb3ZlJylcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBQb2ludGVyRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBCT0FSRF9UT19NT1ZJTkdfUE9JTlQuc2V0KHRoaXMuYm9hcmQsIFtldmVudC54LCBldmVudC55XSk7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5nbG9iYWxQb2ludGVyTW92ZShldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5ob3N0LCAnbW91c2V1cCcpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQubW91c2V1cChldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8UG9pbnRlckV2ZW50Pih0aGlzLmhvc3QsICdwb2ludGVydXAnKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQucG9pbnRlclVwKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pihkb2N1bWVudCwgJ21vdXNldXAnKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLmdsb2JhbE1vdXNldXAoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PFBvaW50ZXJFdmVudD4oZG9jdW1lbnQsICdwb2ludGVydXAnKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IFBvaW50ZXJFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQuZ2xvYmFsUG9pbnRlclVwKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pih0aGlzLmhvc3QsICdkYmxjbGljaycpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuaXNGb2N1c2VkICYmICFQbGFpdEJvYXJkLmhhc0JlZW5UZXh0RWRpdGluZyh0aGlzLmJvYXJkKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5kYmxDbGljayhldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oZG9jdW1lbnQsICdrZXlkb3duJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICB0YXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYm9hcmQuZ2xvYmFsS2V5RG93bihldmVudCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZmlsdGVyKChldmVudCkgPT4gdGhpcy5pc0ZvY3VzZWQgJiYgIVBsYWl0Qm9hcmQuaGFzQmVlblRleHRFZGl0aW5nKHRoaXMuYm9hcmQpICYmICFoYXNJbnB1dE9yVGV4dGFyZWFUYXJnZXQoZXZlbnQudGFyZ2V0KSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ib2FyZC5rZXlEb3duKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2tleXVwJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5pc0ZvY3VzZWQgJiYgIVBsYWl0Qm9hcmQuaGFzQmVlblRleHRFZGl0aW5nKHRoaXMuYm9hcmQpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEtleWJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJvYXJkPy5rZXlVcChldmVudCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8Q2xpcGJvYXJkRXZlbnQ+KGRvY3VtZW50LCAnY29weScpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuaXNGb2N1c2VkICYmICFQbGFpdEJvYXJkLmhhc0JlZW5UZXh0RWRpdGluZyh0aGlzLmJvYXJkKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgc2V0RnJhZ21lbnQodGhpcy5ib2FyZCwgV3JpdGFibGVDbGlwYm9hcmRPcGVyYXRpb25UeXBlLmNvcHksIGV2ZW50LmNsaXBib2FyZERhdGEpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgZnJvbUV2ZW50PENsaXBib2FyZEV2ZW50Pihkb2N1bWVudCwgJ3Bhc3RlJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5pc0ZvY3VzZWQgJiYgIVBsYWl0Qm9hcmQuaXNSZWFkb25seSh0aGlzLmJvYXJkKSAmJiAhUGxhaXRCb2FyZC5oYXNCZWVuVGV4dEVkaXRpbmcodGhpcy5ib2FyZCkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGFzeW5jIChjbGlwYm9hcmRFdmVudDogQ2xpcGJvYXJkRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb3VzZVBvaW50ID0gUGxhaXRCb2FyZC5nZXRNb3ZpbmdQb2ludEluQm9hcmQodGhpcy5ib2FyZCk7XG4gICAgICAgICAgICAgICAgaWYgKG1vdXNlUG9pbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0UG9pbnQgPSB0b1ZpZXdCb3hQb2ludCh0aGlzLmJvYXJkLCB0b0hvc3RQb2ludCh0aGlzLmJvYXJkLCBtb3VzZVBvaW50WzBdLCBtb3VzZVBvaW50WzFdKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsaXBib2FyZERhdGEgPSBhd2FpdCBnZXRDbGlwYm9hcmREYXRhKGNsaXBib2FyZEV2ZW50LmNsaXBib2FyZERhdGEpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJvYXJkLmluc2VydEZyYWdtZW50KGNsaXBib2FyZERhdGEsIHRhcmdldFBvaW50LCBXcml0YWJsZUNsaXBib2FyZE9wZXJhdGlvblR5cGUucGFzdGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxDbGlwYm9hcmRFdmVudD4oZG9jdW1lbnQsICdjdXQnKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmlzRm9jdXNlZCAmJiAhUGxhaXRCb2FyZC5pc1JlYWRvbmx5KHRoaXMuYm9hcmQpICYmICFQbGFpdEJvYXJkLmhhc0JlZW5UZXh0RWRpdGluZyh0aGlzLmJvYXJkKSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBDbGlwYm9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgc2V0RnJhZ21lbnQodGhpcy5ib2FyZCwgV3JpdGFibGVDbGlwYm9hcmRPcGVyYXRpb25UeXBlLmN1dCwgZXZlbnQuY2xpcGJvYXJkRGF0YSk7XG4gICAgICAgICAgICAgICAgZGVsZXRlRnJhZ21lbnQodGhpcy5ib2FyZCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVMaXN0UmVuZGVyKCkge1xuICAgICAgICB0aGlzLmxpc3RSZW5kZXIgPSBuZXcgTGlzdFJlbmRlcih0aGlzLmJvYXJkKTtcbiAgICAgICAgdGhpcy5saXN0UmVuZGVyLmluaXRpYWxpemUodGhpcy5ib2FyZC5jaGlsZHJlbiwgdGhpcy5pbml0aWFsaXplQ2hpbGRyZW5Db250ZXh0KCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlTGlzdFJlbmRlcigpIHtcbiAgICAgICAgdGhpcy5saXN0UmVuZGVyLnVwZGF0ZSh0aGlzLmJvYXJkLmNoaWxkcmVuLCB0aGlzLmluaXRpYWxpemVDaGlsZHJlbkNvbnRleHQoKSk7XG4gICAgICAgIFBsYWl0Qm9hcmQuZ2V0Qm9hcmRDb250ZXh0KHRoaXMuYm9hcmQpLm5leHRTdGFibGUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRpYWxpemVDaGlsZHJlbkNvbnRleHQoKTogUGxhaXRDaGlsZHJlbkNvbnRleHQge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYm9hcmQ6IHRoaXMuYm9hcmQsXG4gICAgICAgICAgICBwYXJlbnQ6IHRoaXMuYm9hcmQsXG4gICAgICAgICAgICBwYXJlbnRHOiBQbGFpdEJvYXJkLmdldEVsZW1lbnRIb3N0KHRoaXMuYm9hcmQpXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2aWV3cG9ydFNjcm9sbExpc3RlbmVyKCkge1xuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy52aWV3cG9ydENvbnRhaW5lci5uYXRpdmVFbGVtZW50LCAnc2Nyb2xsJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNGcm9tVmlld3BvcnRDaGFuZ2UodGhpcy5ib2FyZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldElzRnJvbVZpZXdwb3J0Q2hhbmdlKHRoaXMuYm9hcmQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBzY3JvbGxMZWZ0LCBzY3JvbGxUb3AgfSA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgICB1cGRhdGVWaWV3cG9ydEJ5U2Nyb2xsaW5nKHRoaXMuYm9hcmQsIHNjcm9sbExlZnQsIHNjcm9sbFRvcCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KHRoaXMudmlld3BvcnRDb250YWluZXIubmF0aXZlRWxlbWVudCwgJ3RvdWNoc3RhcnQnLCB7IHBhc3NpdmU6IGZhbHNlIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVzaXplTGlzdGVuZXIoKSB7XG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgICAgaW5pdGlhbGl6ZVZpZXdwb3J0Q29udGFpbmVyKHRoaXMuYm9hcmQpO1xuICAgICAgICAgICAgaW5pdGlhbGl6ZVZpZXdCb3godGhpcy5ib2FyZCk7XG4gICAgICAgICAgICB1cGRhdGVWaWV3cG9ydE9mZnNldCh0aGlzLmJvYXJkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdGlhbGl6ZUlzbGFuZHMoKSB7XG4gICAgICAgIHRoaXMuaXNsYW5kcz8uZm9yRWFjaCgoaXNsYW5kKSA9PiB7XG4gICAgICAgICAgICBpc2xhbmQuaW5pdGlhbGl6ZSh0aGlzLmJvYXJkKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVJc2xhbmRzKCkge1xuICAgICAgICB0aGlzLmlzbGFuZHM/LmZvckVhY2goKGlzbGFuZCkgPT4ge1xuICAgICAgICAgICAgaWYgKGhhc09uQm9hcmRDaGFuZ2UoaXNsYW5kKSkge1xuICAgICAgICAgICAgICAgIGlzbGFuZC5vbkJvYXJkQ2hhbmdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpc2xhbmQubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgd2hlZWxab29tTGlzdGVuZXIoKSB7XG4gICAgICAgIGZyb21FdmVudDxXaGVlbEV2ZW50Pih0aGlzLmhvc3QsICd3aGVlbCcsIHsgcGFzc2l2ZTogZmFsc2UgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBXaGVlbEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQ3JlZGl0cyB0byBleGNhbGlkcmF3XG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2V4Y2FsaWRyYXcvZXhjYWxpZHJhdy9ibG9iL2I3ZDdjY2M5Mjk2OTZjYzE3YjRjYzM0NDUyZTRhZmQ4NDZkNTlmNGYvc3JjL2NvbXBvbmVudHMvQXBwLnRzeCNMOTA2MFxuICAgICAgICAgICAgICAgIGlmIChldmVudC5tZXRhS2V5IHx8IGV2ZW50LmN0cmxLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBkZWx0YVgsIGRlbHRhWSB9ID0gZXZlbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHpvb20gPSB0aGlzLmJvYXJkLnZpZXdwb3J0Lnpvb207XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ24gPSBNYXRoLnNpZ24oZGVsdGFZKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgTUFYX1NURVAgPSBaT09NX1NURVAgKiAxMDA7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFic0RlbHRhID0gTWF0aC5hYnMoZGVsdGFZKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRlbHRhID0gZGVsdGFZO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYWJzRGVsdGEgPiBNQVhfU1RFUCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGEgPSBNQVhfU1RFUCAqIHNpZ247XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbGV0IG5ld1pvb20gPSB6b29tIC0gZGVsdGEgLyAxMDA7XG4gICAgICAgICAgICAgICAgICAgIC8vIGluY3JlYXNlIHpvb20gc3RlcHMgdGhlIG1vcmUgem9vbWVkLWluIHdlIGFyZSAoYXBwbGllcyB0byA+MTAwJSBvbmx5KVxuICAgICAgICAgICAgICAgICAgICBuZXdab29tICs9XG4gICAgICAgICAgICAgICAgICAgICAgICBNYXRoLmxvZzEwKE1hdGgubWF4KDEsIHpvb20pKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAtc2lnbiAqXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZWR1Y2VkIGFtcGxpZmljYXRpb24gZm9yIHNtYWxsIGRlbHRhcyAoc21hbGwgbW92ZW1lbnRzIG9uIGEgdHJhY2twYWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBNYXRoLm1pbigxLCBhYnNEZWx0YSAvIDIwKTtcbiAgICAgICAgICAgICAgICAgICAgQm9hcmRUcmFuc2Zvcm1zLnVwZGF0ZVpvb20odGhpcy5ib2FyZCwgbmV3Wm9vbSwgUGxhaXRCb2FyZC5nZXRNb3ZpbmdQb2ludEluQm9hcmQodGhpcy5ib2FyZCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRyYWNrQnkgPSAoaW5kZXg6IG51bWJlciwgZWxlbWVudDogUGxhaXRFbGVtZW50KSA9PiB7XG4gICAgICAgIHJldHVybiBlbGVtZW50LmlkO1xuICAgIH07XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciAmJiB0aGlzLnJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgICAgIEJPQVJEX1RPX1JPVUdIX1NWRy5kZWxldGUodGhpcy5ib2FyZCk7XG4gICAgICAgIEJPQVJEX1RPX0NPTVBPTkVOVC5kZWxldGUodGhpcy5ib2FyZCk7XG4gICAgICAgIEJPQVJEX1RPX1JPVUdIX1NWRy5kZWxldGUodGhpcy5ib2FyZCk7XG4gICAgICAgIEJPQVJEX1RPX0hPU1QuZGVsZXRlKHRoaXMuYm9hcmQpO1xuICAgICAgICBCT0FSRF9UT19FTEVNRU5UX0hPU1QuZGVsZXRlKHRoaXMuYm9hcmQpO1xuICAgICAgICBJU19CT0FSRF9BTElWRS5zZXQodGhpcy5ib2FyZCwgZmFsc2UpO1xuICAgICAgICBCT0FSRF9UT19PTl9DSEFOR0UuZGVsZXRlKHRoaXMuYm9hcmQpO1xuICAgICAgICBCT0FSRF9UT19BRlRFUl9DSEFOR0Uuc2V0KHRoaXMuYm9hcmQsICgpID0+IHt9KTtcbiAgICAgICAgS0VZX1RPX0VMRU1FTlRfTUFQLmRlbGV0ZSh0aGlzLmJvYXJkKTtcbiAgICB9XG5cbiAgICBtYXJrRm9yQ2hlY2soKSB7XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVJc2xhbmRzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -3,7 +3,7 @@ import { Directive, Input, EventEmitter, viewChild, ElementRef, Component, Chang
|
|
|
3
3
|
import rough from 'roughjs/bin/rough';
|
|
4
4
|
import { Subject, fromEvent } from 'rxjs';
|
|
5
5
|
import { takeUntil, filter, tap } from 'rxjs/operators';
|
|
6
|
-
import { HOST_CLASS_NAME, IS_SAFARI, IS_CHROME, IS_FIREFOX, PlaitBoard, BOARD_TO_MOVING_POINT, BOARD_TO_ROUGH_SVG, BOARD_TO_HOST, IS_BOARD_ALIVE, BOARD_TO_ELEMENT_HOST, BOARD_TO_ON_CHANGE, isFromScrolling, setIsFromScrolling, initializeViewBox, updateViewportOffset, getSelectedElements, PlaitElement, BOARD_TO_AFTER_CHANGE, PlaitBoardContext, BOARD_TO_CONTEXT, FLUSHING, initializeViewportContainer, initializeViewportOffset, withRelatedFragment, withHotkey, withHandPointer, withHistory, withSelection, withMoving, withBoard, withI18n, withOptions, createBoard, KEY_TO_ELEMENT_MAP, BOARD_TO_MOVING_POINT_IN_BOARD, hasInputOrTextareaTarget, setFragment, WritableClipboardOperationType, toViewBoxPoint, toHostPoint, getClipboardData, deleteFragment, ListRender, isFromViewportChange, setIsFromViewportChange, updateViewportByScrolling, ZOOM_STEP, BoardTransforms } from '@plait/core';
|
|
6
|
+
import { HOST_CLASS_NAME, IS_SAFARI, IS_CHROME, IS_FIREFOX, PlaitBoard, BOARD_TO_MOVING_POINT, BOARD_TO_ROUGH_SVG, BOARD_TO_HOST, IS_BOARD_ALIVE, BOARD_TO_ELEMENT_HOST, BOARD_TO_ON_CHANGE, isFromScrolling, setIsFromScrolling, initializeViewBox, updateViewBox, updateViewportOffset, getSelectedElements, PlaitElement, BOARD_TO_AFTER_CHANGE, PlaitBoardContext, BOARD_TO_CONTEXT, FLUSHING, initializeViewportContainer, initializeViewportOffset, withRelatedFragment, withHotkey, withHandPointer, withHistory, withSelection, withMoving, withBoard, withI18n, withOptions, createBoard, KEY_TO_ELEMENT_MAP, BOARD_TO_MOVING_POINT_IN_BOARD, hasInputOrTextareaTarget, setFragment, WritableClipboardOperationType, toViewBoxPoint, toHostPoint, getClipboardData, deleteFragment, ListRender, isFromViewportChange, setIsFromViewportChange, updateViewportByScrolling, ZOOM_STEP, BoardTransforms } from '@plait/core';
|
|
7
7
|
import { PlaitTextComponent } from '@plait/angular-text';
|
|
8
8
|
import { AngularEditor } from 'slate-angular';
|
|
9
9
|
import { withImage, withText } from '@plait/common';
|
|
@@ -226,7 +226,12 @@ class PlaitBoardComponent {
|
|
|
226
226
|
return;
|
|
227
227
|
}
|
|
228
228
|
this.updateListRender();
|
|
229
|
-
|
|
229
|
+
if (isSetViewport) {
|
|
230
|
+
initializeViewBox(this.board);
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
updateViewBox(this.board);
|
|
234
|
+
}
|
|
230
235
|
updateViewportOffset(this.board);
|
|
231
236
|
const selectedElements = getSelectedElements(this.board);
|
|
232
237
|
selectedElements.forEach((element) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plait-angular-board.mjs","sources":["../../../packages/angular-board/src/utils/weak-maps.ts","../../../packages/angular-board/src/island/island-base.component.ts","../../../packages/angular-board/src/plugins/with-angular.ts","../../../packages/angular-board/src/board/board.component.ts","../../../packages/angular-board/src/plugins/angular-board.ts","../../../packages/angular-board/src/public-api.ts","../../../packages/angular-board/src/plait-angular-board.ts"],"sourcesContent":["import { PlaitBoard } from '@plait/core';\nimport { BoardComponentInterface } from '../board/board.component.interface';\n\nexport const BOARD_TO_COMPONENT = new WeakMap<PlaitBoard, BoardComponentInterface>();\n","import { ChangeDetectorRef, Directive, Input, OnDestroy, OnInit } from '@angular/core';\nimport { PlaitBoard } from '@plait/core';\nimport { Subscription } from 'rxjs';\nimport { BOARD_TO_COMPONENT } from '../utils/weak-maps';\nimport { BoardComponentInterface } from '../board/board.component.interface';\n\n@Directive({\n host: {\n class: 'plait-island-container'\n }\n})\nexport abstract class PlaitIslandBaseComponent {\n board!: PlaitBoard;\n\n constructor(protected cdr: ChangeDetectorRef) {}\n\n initialize(board: PlaitBoard) {\n this.board = board;\n this.markForCheck();\n }\n\n markForCheck() {\n this.cdr.markForCheck();\n }\n}\n\n@Directive({\n host: {\n class: 'plait-island-popover-container'\n }\n})\nexport abstract class PlaitIslandPopoverBaseComponent implements OnInit, OnDestroy {\n @Input() board!: PlaitBoard;\n\n private subscription?: Subscription;\n\n constructor(public cdr: ChangeDetectorRef) {}\n\n initialize(board: PlaitBoard) {\n this.board = board;\n const boardComponent = BOARD_TO_COMPONENT.get(board) as BoardComponentInterface;\n this.subscription = boardComponent.onChange.subscribe(() => {\n if (hasOnBoardChange(this)) {\n this.onBoardChange();\n }\n this.cdr.markForCheck();\n });\n }\n\n ngOnInit(): void {\n if (!this.board) {\n throw new Error('can not find board instance');\n }\n this.initialize(this.board);\n this.islandOnInit();\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n this.islandOnDestroy();\n }\n\n /**\n * use islandOnInit replace ngOnInit to avoid ngOnInit being overridden\n */\n abstract islandOnInit(): void;\n\n /**\n * use islandOnDestroy replace ngOnDestroy to avoid ngOnDestroy being overridden\n */\n abstract islandOnDestroy(): void;\n}\n\nexport interface OnBoardChange {\n onBoardChange: () => void;\n}\n\nexport const hasOnBoardChange = (value: any): value is OnBoardChange => {\n if (value.onBoardChange) {\n return true;\n } else {\n return false;\n }\n};\n","import { ComponentType, PlaitBoard } from '@plait/core';\nimport { AngularBoard } from './angular-board';\nimport { PlaitTextBoard, TextComponentRef, TextProps } from '@plait/common';\nimport { PlaitTextComponent } from '@plait/angular-text';\nimport { AngularEditor } from 'slate-angular';\nimport { BOARD_TO_COMPONENT } from '../utils/weak-maps';\nimport { BoardComponentInterface } from '../board/board.component.interface';\n\nexport const withAngular = (board: PlaitBoard & PlaitTextBoard) => {\n const newBoard = board as PlaitBoard & PlaitTextBoard & AngularBoard;\n\n newBoard.renderComponent = <T, K extends { nativeElement: () => HTMLElement }>(\n type: ComponentType<K>,\n container: Element | DocumentFragment,\n props: T\n ) => {\n const boardComponent = BOARD_TO_COMPONENT.get(board) as BoardComponentInterface;\n const componentRef = boardComponent.viewContainerRef.createComponent<K>(type);\n for (const key in props) {\n const value = props[key as keyof T];\n (componentRef.instance as any)[key as keyof TextProps] = value as any;\n }\n container.appendChild(componentRef.instance.nativeElement());\n componentRef.changeDetectorRef.detectChanges();\n const ref: TextComponentRef = {\n destroy: () => {\n componentRef.destroy();\n },\n update: (props: Partial<TextProps>) => {\n for (const key in props) {\n const value = props[key as keyof TextProps];\n (componentRef.instance as any)[key] = value;\n }\n // solve image lose on move node\n if (container.children.length === 0) {\n container.append(componentRef.instance.nativeElement());\n }\n componentRef.changeDetectorRef.detectChanges();\n }\n };\n return { ref, componentRef };\n };\n\n newBoard.renderText = (container: Element | DocumentFragment, props: TextProps) => {\n const { ref, componentRef } = newBoard.renderComponent(PlaitTextComponent, container, props);\n const { update } = ref;\n ref.update = props => {\n const beforeReadonly = componentRef.instance.readonly;\n update(props);\n if (beforeReadonly === true && props.readonly === false) {\n AngularEditor.focus(componentRef.instance.editor);\n } else if (beforeReadonly === false && props.readonly === true) {\n AngularEditor.blur(componentRef.instance.editor);\n }\n };\n return ref;\n };\n\n return newBoard;\n};\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n HostBinding,\n Injector,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n viewChild,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport rough from 'roughjs/bin/rough';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { fromEvent, Subject } from 'rxjs';\nimport { filter, takeUntil, tap } from 'rxjs/operators';\nimport { BoardComponentInterface } from './board.component.interface';\nimport {\n BOARD_TO_AFTER_CHANGE,\n BOARD_TO_CONTEXT,\n BOARD_TO_ELEMENT_HOST,\n BOARD_TO_HOST,\n BOARD_TO_MOVING_POINT,\n BOARD_TO_MOVING_POINT_IN_BOARD,\n BOARD_TO_ON_CHANGE,\n BOARD_TO_ROUGH_SVG,\n BoardTransforms,\n FLUSHING,\n HOST_CLASS_NAME,\n IS_BOARD_ALIVE,\n IS_CHROME,\n IS_FIREFOX,\n IS_SAFARI,\n KEY_TO_ELEMENT_MAP,\n ListRender,\n PlaitBoard,\n PlaitBoardContext,\n PlaitBoardOptions,\n PlaitChildrenContext,\n PlaitElement,\n PlaitPlugin,\n PlaitTheme,\n Viewport,\n WritableClipboardOperationType,\n ZOOM_STEP,\n createBoard,\n deleteFragment,\n getClipboardData,\n getSelectedElements,\n hasInputOrTextareaTarget,\n initializeViewBox,\n initializeViewportContainer,\n initializeViewportOffset,\n isFromScrolling,\n isFromViewportChange,\n setFragment,\n setIsFromScrolling,\n setIsFromViewportChange,\n toHostPoint,\n toViewBoxPoint,\n updateViewportByScrolling,\n updateViewportOffset,\n withBoard,\n withHandPointer,\n withHistory,\n withHotkey,\n withI18n,\n withMoving,\n withOptions,\n withRelatedFragment,\n withSelection\n} from '@plait/core';\nimport { PlaitIslandBaseComponent, hasOnBoardChange } from '../island/island-base.component';\nimport { BOARD_TO_COMPONENT } from '../utils/weak-maps';\nimport { withAngular } from '../plugins/with-angular';\nimport { PlaitCommonElementRef, withImage, withText } from '@plait/common';\nimport { OnChangeData } from '../plugins/angular-board';\n\nconst ElementLowerHostClass = 'element-lower-host';\nconst ElementHostClass = 'element-host';\nconst ElementUpperHostClass = 'element-upper-host';\nconst ElementTopHostClass = 'element-top-host';\n\n@Component({\n selector: 'plait-board',\n template: `\n <div class=\"viewport-container\" #viewportContainer>\n <svg #svg width=\"100%\" height=\"100%\" style=\"position: relative;\" class=\"board-host-svg\">\n <g class=\"element-lower-host\"></g>\n <g class=\"element-host\"></g>\n <g class=\"element-upper-host\"></g>\n <g class=\"element-top-host\"></g>\n </svg>\n <svg width=\"100%\" height=\"100%\" class=\"board-active-svg\">\n <g #activeHostG class=\"active-host-g\"></g>\n </svg>\n </div>\n <ng-content></ng-content>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class PlaitBoardComponent implements BoardComponentInterface, OnInit, OnChanges, AfterViewInit, AfterContentInit, OnDestroy {\n hasInitialized = false;\n\n board!: PlaitBoard;\n\n roughSVG!: RoughSVG;\n\n destroy$ = new Subject<void>();\n\n private resizeObserver!: ResizeObserver;\n\n @Input() plaitValue: PlaitElement[] = [];\n\n @Input() plaitViewport!: Viewport;\n\n @Input() plaitPlugins: PlaitPlugin[] = [];\n\n @Input() plaitOptions?: PlaitBoardOptions;\n\n @Input() plaitTheme?: PlaitTheme;\n\n @Output() onChange: EventEmitter<OnChangeData> = new EventEmitter();\n\n @Output() plaitBoardInitialized: EventEmitter<PlaitBoard> = new EventEmitter();\n\n get host(): SVGSVGElement {\n return this.svg.nativeElement;\n }\n\n @HostBinding('class')\n get hostClass() {\n return `${HOST_CLASS_NAME} theme-${this.board.theme.themeColorMode} ${this.getBrowserClassName()} pointer-${this.board.pointer}`;\n }\n\n getBrowserClassName() {\n if (IS_SAFARI) {\n return 'safari';\n }\n if (IS_CHROME) {\n return 'chrome';\n }\n if (IS_FIREFOX) {\n return 'firefox';\n }\n return '';\n }\n\n @HostBinding('class.readonly')\n get readonly() {\n return this.board.options.readonly;\n }\n\n @HostBinding('class.focused')\n get isFocused() {\n return PlaitBoard.isFocus(this.board);\n }\n\n @HostBinding('class.disabled-scroll')\n get disabledScrollOnNonFocus() {\n return this.board.options.disabledScrollOnNonFocus && !PlaitBoard.isFocus(this.board);\n }\n\n get nativeElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n @ViewChild('svg', { static: true })\n svg!: ElementRef;\n\n activeHostG = viewChild<ElementRef>('activeHostG');\n\n @ViewChild('viewportContainer', { read: ElementRef, static: true })\n viewportContainer!: ElementRef;\n\n @ContentChildren(PlaitIslandBaseComponent, { descendants: true }) islands?: QueryList<PlaitIslandBaseComponent>;\n\n listRender!: ListRender;\n\n constructor(\n public cdr: ChangeDetectorRef,\n public injector: Injector,\n public viewContainerRef: ViewContainerRef,\n private elementRef: ElementRef<HTMLElement>,\n private ngZone: NgZone\n ) {}\n\n ngOnInit(): void {\n const elementLowerHost = this.host.querySelector(`.${ElementLowerHostClass}`) as SVGGElement;\n const elementHost = this.host.querySelector(`.${ElementHostClass}`) as SVGGElement;\n const elementUpperHost = this.host.querySelector(`.${ElementUpperHostClass}`) as SVGGElement;\n const elementTopHost = this.host.querySelector(`.${ElementTopHostClass}`) as SVGGElement;\n const roughSVG = rough.svg(this.host as SVGSVGElement, {\n options: { roughness: 0, strokeWidth: 1 }\n });\n this.roughSVG = roughSVG;\n this.initializePlugins();\n this.ngZone.runOutsideAngular(() => {\n this.initializeHookListener();\n this.viewportScrollListener();\n this.wheelZoomListener();\n this.elementResizeListener();\n fromEvent<MouseEvent>(document, 'mouseleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT.delete(this.board);\n });\n });\n BOARD_TO_COMPONENT.set(this.board, this);\n BOARD_TO_ROUGH_SVG.set(this.board, roughSVG);\n BOARD_TO_HOST.set(this.board, this.host);\n IS_BOARD_ALIVE.set(this.board, true);\n BOARD_TO_ELEMENT_HOST.set(this.board, {\n lowerHost: elementLowerHost,\n host: elementHost,\n upperHost: elementUpperHost,\n topHost: elementTopHost,\n activeHost: this.activeHostG()?.nativeElement,\n container: this.elementRef.nativeElement,\n viewportContainer: this.viewportContainer.nativeElement\n });\n BOARD_TO_ON_CHANGE.set(this.board, () => {\n this.ngZone.run(() => {\n const isOnlySetSelection = this.board.operations.length && this.board.operations.every((op) => op.type === 'set_selection');\n if (isOnlySetSelection) {\n this.updateListRender();\n return;\n }\n const isSetViewport = this.board.operations.length && this.board.operations.some((op) => op.type === 'set_viewport');\n if (isSetViewport && isFromScrolling(this.board)) {\n setIsFromScrolling(this.board, false);\n this.updateListRender();\n return;\n }\n this.updateListRender();\n initializeViewBox(this.board);\n updateViewportOffset(this.board);\n const selectedElements = getSelectedElements(this.board);\n selectedElements.forEach((element) => {\n const elementRef = PlaitElement.getElementRef<PlaitCommonElementRef>(element);\n elementRef.updateActiveSection();\n });\n });\n });\n BOARD_TO_AFTER_CHANGE.set(this.board, () => {\n this.ngZone.run(() => {\n const data: OnChangeData = {\n children: this.board.children,\n operations: this.board.operations,\n viewport: this.board.viewport,\n selection: this.board.selection,\n theme: this.board.theme\n };\n this.updateIslands();\n this.onChange.emit(data);\n });\n });\n const context = new PlaitBoardContext();\n BOARD_TO_CONTEXT.set(this.board, context);\n this.initializeListRender();\n this.hasInitialized = true;\n }\n\n ngAfterContentInit(): void {\n this.initializeIslands();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (this.hasInitialized) {\n const valueChange = changes['plaitValue'];\n const options = changes['plaitOptions'];\n\n if (valueChange) {\n // avoid useless updating\n if (this.board.children !== valueChange.currentValue && !FLUSHING.get(this.board)) {\n this.board.children = valueChange.currentValue;\n this.updateListRender();\n }\n }\n if (options) {\n this.board.options = options.currentValue;\n }\n this.cdr.markForCheck();\n }\n }\n\n ngAfterViewInit(): void {\n this.plaitBoardInitialized.emit(this.board);\n initializeViewportContainer(this.board);\n initializeViewBox(this.board);\n initializeViewportOffset(this.board);\n }\n\n private initializePlugins() {\n let board = withRelatedFragment(\n withHotkey(\n withHandPointer(\n withHistory(\n withSelection(\n withMoving(\n withBoard(\n withI18n(withOptions(withAngular(withImage(withText(createBoard(this.plaitValue, this.plaitOptions))))))\n )\n )\n )\n )\n )\n )\n );\n this.plaitPlugins.forEach((plugin) => {\n board = plugin(board);\n });\n this.board = board;\n\n if (this.plaitViewport) {\n this.board.viewport = this.plaitViewport;\n }\n\n if (this.plaitTheme) {\n this.board.theme = this.plaitTheme;\n }\n\n KEY_TO_ELEMENT_MAP.set(board, new Map());\n }\n\n private initializeHookListener() {\n fromEvent<MouseEvent>(this.host, 'mousedown')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mousedown(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointerdown')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n this.board.pointerDown(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mousemove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.set(this.board, [event.x, event.y]);\n this.board.mousemove(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointermove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.set(this.board, [event.x, event.y]);\n this.board.pointerMove(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mouseleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.delete(this.board);\n this.board.mouseleave(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointerleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.delete(this.board);\n this.board.pointerLeave(event);\n });\n\n fromEvent<MouseEvent>(document, 'mousemove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT.set(this.board, [event.x, event.y]);\n this.board.globalMousemove(event);\n });\n\n fromEvent<PointerEvent>(document, 'pointermove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n BOARD_TO_MOVING_POINT.set(this.board, [event.x, event.y]);\n this.board.globalPointerMove(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mouseup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mouseup(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointerup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n this.board.pointerUp(event);\n });\n\n fromEvent<MouseEvent>(document, 'mouseup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.globalMouseup(event);\n });\n\n fromEvent<PointerEvent>(document, 'pointerup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n this.board.globalPointerUp(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'dblclick')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: MouseEvent) => {\n this.board.dblClick(event);\n });\n\n fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n takeUntil(this.destroy$),\n tap((event) => {\n this.board.globalKeyDown(event);\n }),\n filter((event) => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board) && !hasInputOrTextareaTarget(event.target))\n )\n .subscribe((event: KeyboardEvent) => {\n this.board.keyDown(event);\n });\n\n fromEvent<KeyboardEvent>(document, 'keyup')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: KeyboardEvent) => {\n this.board?.keyUp(event);\n });\n\n fromEvent<ClipboardEvent>(document, 'copy')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: ClipboardEvent) => {\n event.preventDefault();\n setFragment(this.board, WritableClipboardOperationType.copy, event.clipboardData);\n });\n\n fromEvent<ClipboardEvent>(document, 'paste')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe(async (clipboardEvent: ClipboardEvent) => {\n const mousePoint = PlaitBoard.getMovingPointInBoard(this.board);\n if (mousePoint) {\n const targetPoint = toViewBoxPoint(this.board, toHostPoint(this.board, mousePoint[0], mousePoint[1]));\n const clipboardData = await getClipboardData(clipboardEvent.clipboardData);\n this.board.insertFragment(clipboardData, targetPoint, WritableClipboardOperationType.paste);\n }\n });\n\n fromEvent<ClipboardEvent>(document, 'cut')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: ClipboardEvent) => {\n event.preventDefault();\n setFragment(this.board, WritableClipboardOperationType.cut, event.clipboardData);\n deleteFragment(this.board);\n });\n }\n\n private initializeListRender() {\n this.listRender = new ListRender(this.board);\n this.listRender.initialize(this.board.children, this.initializeChildrenContext());\n }\n\n private updateListRender() {\n this.listRender.update(this.board.children, this.initializeChildrenContext());\n PlaitBoard.getBoardContext(this.board).nextStable();\n }\n\n private initializeChildrenContext(): PlaitChildrenContext {\n return {\n board: this.board,\n parent: this.board,\n parentG: PlaitBoard.getElementHost(this.board)\n };\n }\n\n private viewportScrollListener() {\n fromEvent<MouseEvent>(this.viewportContainer.nativeElement, 'scroll')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n if (isFromViewportChange(this.board)) {\n setIsFromViewportChange(this.board, false);\n return false;\n }\n return true;\n })\n )\n .subscribe((event: Event) => {\n const { scrollLeft, scrollTop } = event.target as HTMLElement;\n updateViewportByScrolling(this.board, scrollLeft, scrollTop);\n });\n fromEvent<MouseEvent>(this.viewportContainer.nativeElement, 'touchstart', { passive: false })\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: Event) => {\n event.preventDefault();\n });\n }\n\n private elementResizeListener() {\n this.resizeObserver = new ResizeObserver(() => {\n initializeViewportContainer(this.board);\n initializeViewBox(this.board);\n updateViewportOffset(this.board);\n });\n this.resizeObserver.observe(this.nativeElement);\n }\n\n private initializeIslands() {\n this.islands?.forEach((island) => {\n island.initialize(this.board);\n });\n }\n\n private updateIslands() {\n this.islands?.forEach((island) => {\n if (hasOnBoardChange(island)) {\n island.onBoardChange();\n }\n island.markForCheck();\n });\n }\n\n private wheelZoomListener() {\n fromEvent<WheelEvent>(this.host, 'wheel', { passive: false })\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: WheelEvent) => {\n // Credits to excalidraw\n // https://github.com/excalidraw/excalidraw/blob/b7d7ccc929696cc17b4cc34452e4afd846d59f4f/src/components/App.tsx#L9060\n if (event.metaKey || event.ctrlKey) {\n event.preventDefault();\n const { deltaX, deltaY } = event;\n const zoom = this.board.viewport.zoom;\n const sign = Math.sign(deltaY);\n const MAX_STEP = ZOOM_STEP * 100;\n const absDelta = Math.abs(deltaY);\n let delta = deltaY;\n if (absDelta > MAX_STEP) {\n delta = MAX_STEP * sign;\n }\n let newZoom = zoom - delta / 100;\n // increase zoom steps the more zoomed-in we are (applies to >100% only)\n newZoom +=\n Math.log10(Math.max(1, zoom)) *\n -sign *\n // reduced amplification for small deltas (small movements on a trackpad)\n Math.min(1, absDelta / 20);\n BoardTransforms.updateZoom(this.board, newZoom, PlaitBoard.getMovingPointInBoard(this.board));\n }\n });\n }\n\n trackBy = (index: number, element: PlaitElement) => {\n return element.id;\n };\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.resizeObserver && this.resizeObserver?.disconnect();\n BOARD_TO_ROUGH_SVG.delete(this.board);\n BOARD_TO_COMPONENT.delete(this.board);\n BOARD_TO_ROUGH_SVG.delete(this.board);\n BOARD_TO_HOST.delete(this.board);\n BOARD_TO_ELEMENT_HOST.delete(this.board);\n IS_BOARD_ALIVE.set(this.board, false);\n BOARD_TO_ON_CHANGE.delete(this.board);\n BOARD_TO_AFTER_CHANGE.set(this.board, () => {});\n KEY_TO_ELEMENT_MAP.delete(this.board);\n }\n\n markForCheck() {\n this.cdr.markForCheck();\n this.ngZone.run(() => {\n this.updateIslands();\n });\n }\n}\n","import { PlaitElement, PlaitOperation, PlaitTheme, Viewport, Selection, ComponentType, PlaitBoard } from '@plait/core';\nimport { RenderComponentRef } from '@plait/common';\nimport { ComponentRef } from '@angular/core';\nimport { BOARD_TO_COMPONENT } from '../utils/weak-maps';\nimport { BoardComponentInterface } from '../board/board.component.interface';\n\nexport interface AngularBoard {\n renderComponent: <T, K extends { nativeElement: () => HTMLElement }>(\n type: ComponentType<K>,\n container: Element | DocumentFragment,\n props: T\n ) => { ref: RenderComponentRef<T>; componentRef: ComponentRef<K> };\n}\n\nexport const AngularBoard = {\n getBoardComponentInjector(board: PlaitBoard) {\n const boardComponent = BOARD_TO_COMPONENT.get(board) as BoardComponentInterface;\n return boardComponent.injector;\n }\n}\n\nexport interface OnChangeData {\n children: PlaitElement[];\n operations: PlaitOperation[];\n viewport: Viewport;\n selection: Selection | null;\n theme: PlaitTheme;\n}\n","/*\n * Public API Surface of plait\n */\n\nexport * from './board/board.component';\nexport * from './board/board.component.interface';\nexport * from './plugins/angular-board';\nexport * from './island/island-base.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plait-angular-board.mjs","sources":["../../../packages/angular-board/src/utils/weak-maps.ts","../../../packages/angular-board/src/island/island-base.component.ts","../../../packages/angular-board/src/plugins/with-angular.ts","../../../packages/angular-board/src/board/board.component.ts","../../../packages/angular-board/src/plugins/angular-board.ts","../../../packages/angular-board/src/public-api.ts","../../../packages/angular-board/src/plait-angular-board.ts"],"sourcesContent":["import { PlaitBoard } from '@plait/core';\nimport { BoardComponentInterface } from '../board/board.component.interface';\n\nexport const BOARD_TO_COMPONENT = new WeakMap<PlaitBoard, BoardComponentInterface>();\n","import { ChangeDetectorRef, Directive, Input, OnDestroy, OnInit } from '@angular/core';\nimport { PlaitBoard } from '@plait/core';\nimport { Subscription } from 'rxjs';\nimport { BOARD_TO_COMPONENT } from '../utils/weak-maps';\nimport { BoardComponentInterface } from '../board/board.component.interface';\n\n@Directive({\n host: {\n class: 'plait-island-container'\n }\n})\nexport abstract class PlaitIslandBaseComponent {\n board!: PlaitBoard;\n\n constructor(protected cdr: ChangeDetectorRef) {}\n\n initialize(board: PlaitBoard) {\n this.board = board;\n this.markForCheck();\n }\n\n markForCheck() {\n this.cdr.markForCheck();\n }\n}\n\n@Directive({\n host: {\n class: 'plait-island-popover-container'\n }\n})\nexport abstract class PlaitIslandPopoverBaseComponent implements OnInit, OnDestroy {\n @Input() board!: PlaitBoard;\n\n private subscription?: Subscription;\n\n constructor(public cdr: ChangeDetectorRef) {}\n\n initialize(board: PlaitBoard) {\n this.board = board;\n const boardComponent = BOARD_TO_COMPONENT.get(board) as BoardComponentInterface;\n this.subscription = boardComponent.onChange.subscribe(() => {\n if (hasOnBoardChange(this)) {\n this.onBoardChange();\n }\n this.cdr.markForCheck();\n });\n }\n\n ngOnInit(): void {\n if (!this.board) {\n throw new Error('can not find board instance');\n }\n this.initialize(this.board);\n this.islandOnInit();\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n this.islandOnDestroy();\n }\n\n /**\n * use islandOnInit replace ngOnInit to avoid ngOnInit being overridden\n */\n abstract islandOnInit(): void;\n\n /**\n * use islandOnDestroy replace ngOnDestroy to avoid ngOnDestroy being overridden\n */\n abstract islandOnDestroy(): void;\n}\n\nexport interface OnBoardChange {\n onBoardChange: () => void;\n}\n\nexport const hasOnBoardChange = (value: any): value is OnBoardChange => {\n if (value.onBoardChange) {\n return true;\n } else {\n return false;\n }\n};\n","import { ComponentType, PlaitBoard } from '@plait/core';\nimport { AngularBoard } from './angular-board';\nimport { PlaitTextBoard, TextComponentRef, TextProps } from '@plait/common';\nimport { PlaitTextComponent } from '@plait/angular-text';\nimport { AngularEditor } from 'slate-angular';\nimport { BOARD_TO_COMPONENT } from '../utils/weak-maps';\nimport { BoardComponentInterface } from '../board/board.component.interface';\n\nexport const withAngular = (board: PlaitBoard & PlaitTextBoard) => {\n const newBoard = board as PlaitBoard & PlaitTextBoard & AngularBoard;\n\n newBoard.renderComponent = <T, K extends { nativeElement: () => HTMLElement }>(\n type: ComponentType<K>,\n container: Element | DocumentFragment,\n props: T\n ) => {\n const boardComponent = BOARD_TO_COMPONENT.get(board) as BoardComponentInterface;\n const componentRef = boardComponent.viewContainerRef.createComponent<K>(type);\n for (const key in props) {\n const value = props[key as keyof T];\n (componentRef.instance as any)[key as keyof TextProps] = value as any;\n }\n container.appendChild(componentRef.instance.nativeElement());\n componentRef.changeDetectorRef.detectChanges();\n const ref: TextComponentRef = {\n destroy: () => {\n componentRef.destroy();\n },\n update: (props: Partial<TextProps>) => {\n for (const key in props) {\n const value = props[key as keyof TextProps];\n (componentRef.instance as any)[key] = value;\n }\n // solve image lose on move node\n if (container.children.length === 0) {\n container.append(componentRef.instance.nativeElement());\n }\n componentRef.changeDetectorRef.detectChanges();\n }\n };\n return { ref, componentRef };\n };\n\n newBoard.renderText = (container: Element | DocumentFragment, props: TextProps) => {\n const { ref, componentRef } = newBoard.renderComponent(PlaitTextComponent, container, props);\n const { update } = ref;\n ref.update = props => {\n const beforeReadonly = componentRef.instance.readonly;\n update(props);\n if (beforeReadonly === true && props.readonly === false) {\n AngularEditor.focus(componentRef.instance.editor);\n } else if (beforeReadonly === false && props.readonly === true) {\n AngularEditor.blur(componentRef.instance.editor);\n }\n };\n return ref;\n };\n\n return newBoard;\n};\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n HostBinding,\n Injector,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n viewChild,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport rough from 'roughjs/bin/rough';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { fromEvent, Subject } from 'rxjs';\nimport { filter, takeUntil, tap } from 'rxjs/operators';\nimport { BoardComponentInterface } from './board.component.interface';\nimport {\n BOARD_TO_AFTER_CHANGE,\n BOARD_TO_CONTEXT,\n BOARD_TO_ELEMENT_HOST,\n BOARD_TO_HOST,\n BOARD_TO_MOVING_POINT,\n BOARD_TO_MOVING_POINT_IN_BOARD,\n BOARD_TO_ON_CHANGE,\n BOARD_TO_ROUGH_SVG,\n BoardTransforms,\n FLUSHING,\n HOST_CLASS_NAME,\n IS_BOARD_ALIVE,\n IS_CHROME,\n IS_FIREFOX,\n IS_SAFARI,\n KEY_TO_ELEMENT_MAP,\n ListRender,\n PlaitBoard,\n PlaitBoardContext,\n PlaitBoardOptions,\n PlaitChildrenContext,\n PlaitElement,\n PlaitPlugin,\n PlaitTheme,\n Viewport,\n WritableClipboardOperationType,\n ZOOM_STEP,\n createBoard,\n deleteFragment,\n getClipboardData,\n getSelectedElements,\n hasInputOrTextareaTarget,\n initializeViewBox,\n initializeViewportContainer,\n initializeViewportOffset,\n isFromScrolling,\n isFromViewportChange,\n setFragment,\n setIsFromScrolling,\n setIsFromViewportChange,\n toHostPoint,\n toViewBoxPoint,\n updateViewBox,\n updateViewportByScrolling,\n updateViewportOffset,\n withBoard,\n withHandPointer,\n withHistory,\n withHotkey,\n withI18n,\n withMoving,\n withOptions,\n withRelatedFragment,\n withSelection\n} from '@plait/core';\nimport { PlaitIslandBaseComponent, hasOnBoardChange } from '../island/island-base.component';\nimport { BOARD_TO_COMPONENT } from '../utils/weak-maps';\nimport { withAngular } from '../plugins/with-angular';\nimport { PlaitCommonElementRef, withImage, withText } from '@plait/common';\nimport { OnChangeData } from '../plugins/angular-board';\n\nconst ElementLowerHostClass = 'element-lower-host';\nconst ElementHostClass = 'element-host';\nconst ElementUpperHostClass = 'element-upper-host';\nconst ElementTopHostClass = 'element-top-host';\n\n@Component({\n selector: 'plait-board',\n template: `\n <div class=\"viewport-container\" #viewportContainer>\n <svg #svg width=\"100%\" height=\"100%\" style=\"position: relative;\" class=\"board-host-svg\">\n <g class=\"element-lower-host\"></g>\n <g class=\"element-host\"></g>\n <g class=\"element-upper-host\"></g>\n <g class=\"element-top-host\"></g>\n </svg>\n <svg width=\"100%\" height=\"100%\" class=\"board-active-svg\">\n <g #activeHostG class=\"active-host-g\"></g>\n </svg>\n </div>\n <ng-content></ng-content>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class PlaitBoardComponent implements BoardComponentInterface, OnInit, OnChanges, AfterViewInit, AfterContentInit, OnDestroy {\n hasInitialized = false;\n\n board!: PlaitBoard;\n\n roughSVG!: RoughSVG;\n\n destroy$ = new Subject<void>();\n\n private resizeObserver!: ResizeObserver;\n\n @Input() plaitValue: PlaitElement[] = [];\n\n @Input() plaitViewport!: Viewport;\n\n @Input() plaitPlugins: PlaitPlugin[] = [];\n\n @Input() plaitOptions?: PlaitBoardOptions;\n\n @Input() plaitTheme?: PlaitTheme;\n\n @Output() onChange: EventEmitter<OnChangeData> = new EventEmitter();\n\n @Output() plaitBoardInitialized: EventEmitter<PlaitBoard> = new EventEmitter();\n\n get host(): SVGSVGElement {\n return this.svg.nativeElement;\n }\n\n @HostBinding('class')\n get hostClass() {\n return `${HOST_CLASS_NAME} theme-${this.board.theme.themeColorMode} ${this.getBrowserClassName()} pointer-${this.board.pointer}`;\n }\n\n getBrowserClassName() {\n if (IS_SAFARI) {\n return 'safari';\n }\n if (IS_CHROME) {\n return 'chrome';\n }\n if (IS_FIREFOX) {\n return 'firefox';\n }\n return '';\n }\n\n @HostBinding('class.readonly')\n get readonly() {\n return this.board.options.readonly;\n }\n\n @HostBinding('class.focused')\n get isFocused() {\n return PlaitBoard.isFocus(this.board);\n }\n\n @HostBinding('class.disabled-scroll')\n get disabledScrollOnNonFocus() {\n return this.board.options.disabledScrollOnNonFocus && !PlaitBoard.isFocus(this.board);\n }\n\n get nativeElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n @ViewChild('svg', { static: true })\n svg!: ElementRef;\n\n activeHostG = viewChild<ElementRef>('activeHostG');\n\n @ViewChild('viewportContainer', { read: ElementRef, static: true })\n viewportContainer!: ElementRef;\n\n @ContentChildren(PlaitIslandBaseComponent, { descendants: true }) islands?: QueryList<PlaitIslandBaseComponent>;\n\n listRender!: ListRender;\n\n constructor(\n public cdr: ChangeDetectorRef,\n public injector: Injector,\n public viewContainerRef: ViewContainerRef,\n private elementRef: ElementRef<HTMLElement>,\n private ngZone: NgZone\n ) {}\n\n ngOnInit(): void {\n const elementLowerHost = this.host.querySelector(`.${ElementLowerHostClass}`) as SVGGElement;\n const elementHost = this.host.querySelector(`.${ElementHostClass}`) as SVGGElement;\n const elementUpperHost = this.host.querySelector(`.${ElementUpperHostClass}`) as SVGGElement;\n const elementTopHost = this.host.querySelector(`.${ElementTopHostClass}`) as SVGGElement;\n const roughSVG = rough.svg(this.host as SVGSVGElement, {\n options: { roughness: 0, strokeWidth: 1 }\n });\n this.roughSVG = roughSVG;\n this.initializePlugins();\n this.ngZone.runOutsideAngular(() => {\n this.initializeHookListener();\n this.viewportScrollListener();\n this.wheelZoomListener();\n this.elementResizeListener();\n fromEvent<MouseEvent>(document, 'mouseleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT.delete(this.board);\n });\n });\n BOARD_TO_COMPONENT.set(this.board, this);\n BOARD_TO_ROUGH_SVG.set(this.board, roughSVG);\n BOARD_TO_HOST.set(this.board, this.host);\n IS_BOARD_ALIVE.set(this.board, true);\n BOARD_TO_ELEMENT_HOST.set(this.board, {\n lowerHost: elementLowerHost,\n host: elementHost,\n upperHost: elementUpperHost,\n topHost: elementTopHost,\n activeHost: this.activeHostG()?.nativeElement,\n container: this.elementRef.nativeElement,\n viewportContainer: this.viewportContainer.nativeElement\n });\n BOARD_TO_ON_CHANGE.set(this.board, () => {\n this.ngZone.run(() => {\n const isOnlySetSelection = this.board.operations.length && this.board.operations.every((op) => op.type === 'set_selection');\n if (isOnlySetSelection) {\n this.updateListRender();\n return;\n }\n const isSetViewport = this.board.operations.length && this.board.operations.some((op) => op.type === 'set_viewport');\n if (isSetViewport && isFromScrolling(this.board)) {\n setIsFromScrolling(this.board, false);\n this.updateListRender();\n return;\n }\n this.updateListRender();\n if (isSetViewport) {\n initializeViewBox(this.board);\n } else {\n updateViewBox(this.board);\n }\n updateViewportOffset(this.board);\n const selectedElements = getSelectedElements(this.board);\n selectedElements.forEach((element) => {\n const elementRef = PlaitElement.getElementRef<PlaitCommonElementRef>(element);\n elementRef.updateActiveSection();\n });\n });\n });\n BOARD_TO_AFTER_CHANGE.set(this.board, () => {\n this.ngZone.run(() => {\n const data: OnChangeData = {\n children: this.board.children,\n operations: this.board.operations,\n viewport: this.board.viewport,\n selection: this.board.selection,\n theme: this.board.theme\n };\n this.updateIslands();\n this.onChange.emit(data);\n });\n });\n const context = new PlaitBoardContext();\n BOARD_TO_CONTEXT.set(this.board, context);\n this.initializeListRender();\n this.hasInitialized = true;\n }\n\n ngAfterContentInit(): void {\n this.initializeIslands();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (this.hasInitialized) {\n const valueChange = changes['plaitValue'];\n const options = changes['plaitOptions'];\n\n if (valueChange) {\n // avoid useless updating\n if (this.board.children !== valueChange.currentValue && !FLUSHING.get(this.board)) {\n this.board.children = valueChange.currentValue;\n this.updateListRender();\n }\n }\n if (options) {\n this.board.options = options.currentValue;\n }\n this.cdr.markForCheck();\n }\n }\n\n ngAfterViewInit(): void {\n this.plaitBoardInitialized.emit(this.board);\n initializeViewportContainer(this.board);\n initializeViewBox(this.board);\n initializeViewportOffset(this.board);\n }\n\n private initializePlugins() {\n let board = withRelatedFragment(\n withHotkey(\n withHandPointer(\n withHistory(\n withSelection(\n withMoving(\n withBoard(\n withI18n(withOptions(withAngular(withImage(withText(createBoard(this.plaitValue, this.plaitOptions))))))\n )\n )\n )\n )\n )\n )\n );\n this.plaitPlugins.forEach((plugin) => {\n board = plugin(board);\n });\n this.board = board;\n\n if (this.plaitViewport) {\n this.board.viewport = this.plaitViewport;\n }\n\n if (this.plaitTheme) {\n this.board.theme = this.plaitTheme;\n }\n\n KEY_TO_ELEMENT_MAP.set(board, new Map());\n }\n\n private initializeHookListener() {\n fromEvent<MouseEvent>(this.host, 'mousedown')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mousedown(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointerdown')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n this.board.pointerDown(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mousemove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.set(this.board, [event.x, event.y]);\n this.board.mousemove(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointermove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.set(this.board, [event.x, event.y]);\n this.board.pointerMove(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mouseleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.delete(this.board);\n this.board.mouseleave(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointerleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.delete(this.board);\n this.board.pointerLeave(event);\n });\n\n fromEvent<MouseEvent>(document, 'mousemove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT.set(this.board, [event.x, event.y]);\n this.board.globalMousemove(event);\n });\n\n fromEvent<PointerEvent>(document, 'pointermove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n BOARD_TO_MOVING_POINT.set(this.board, [event.x, event.y]);\n this.board.globalPointerMove(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mouseup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mouseup(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointerup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n this.board.pointerUp(event);\n });\n\n fromEvent<MouseEvent>(document, 'mouseup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.globalMouseup(event);\n });\n\n fromEvent<PointerEvent>(document, 'pointerup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n this.board.globalPointerUp(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'dblclick')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: MouseEvent) => {\n this.board.dblClick(event);\n });\n\n fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n takeUntil(this.destroy$),\n tap((event) => {\n this.board.globalKeyDown(event);\n }),\n filter((event) => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board) && !hasInputOrTextareaTarget(event.target))\n )\n .subscribe((event: KeyboardEvent) => {\n this.board.keyDown(event);\n });\n\n fromEvent<KeyboardEvent>(document, 'keyup')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: KeyboardEvent) => {\n this.board?.keyUp(event);\n });\n\n fromEvent<ClipboardEvent>(document, 'copy')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: ClipboardEvent) => {\n event.preventDefault();\n setFragment(this.board, WritableClipboardOperationType.copy, event.clipboardData);\n });\n\n fromEvent<ClipboardEvent>(document, 'paste')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe(async (clipboardEvent: ClipboardEvent) => {\n const mousePoint = PlaitBoard.getMovingPointInBoard(this.board);\n if (mousePoint) {\n const targetPoint = toViewBoxPoint(this.board, toHostPoint(this.board, mousePoint[0], mousePoint[1]));\n const clipboardData = await getClipboardData(clipboardEvent.clipboardData);\n this.board.insertFragment(clipboardData, targetPoint, WritableClipboardOperationType.paste);\n }\n });\n\n fromEvent<ClipboardEvent>(document, 'cut')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: ClipboardEvent) => {\n event.preventDefault();\n setFragment(this.board, WritableClipboardOperationType.cut, event.clipboardData);\n deleteFragment(this.board);\n });\n }\n\n private initializeListRender() {\n this.listRender = new ListRender(this.board);\n this.listRender.initialize(this.board.children, this.initializeChildrenContext());\n }\n\n private updateListRender() {\n this.listRender.update(this.board.children, this.initializeChildrenContext());\n PlaitBoard.getBoardContext(this.board).nextStable();\n }\n\n private initializeChildrenContext(): PlaitChildrenContext {\n return {\n board: this.board,\n parent: this.board,\n parentG: PlaitBoard.getElementHost(this.board)\n };\n }\n\n private viewportScrollListener() {\n fromEvent<MouseEvent>(this.viewportContainer.nativeElement, 'scroll')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n if (isFromViewportChange(this.board)) {\n setIsFromViewportChange(this.board, false);\n return false;\n }\n return true;\n })\n )\n .subscribe((event: Event) => {\n const { scrollLeft, scrollTop } = event.target as HTMLElement;\n updateViewportByScrolling(this.board, scrollLeft, scrollTop);\n });\n fromEvent<MouseEvent>(this.viewportContainer.nativeElement, 'touchstart', { passive: false })\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: Event) => {\n event.preventDefault();\n });\n }\n\n private elementResizeListener() {\n this.resizeObserver = new ResizeObserver(() => {\n initializeViewportContainer(this.board);\n initializeViewBox(this.board);\n updateViewportOffset(this.board);\n });\n this.resizeObserver.observe(this.nativeElement);\n }\n\n private initializeIslands() {\n this.islands?.forEach((island) => {\n island.initialize(this.board);\n });\n }\n\n private updateIslands() {\n this.islands?.forEach((island) => {\n if (hasOnBoardChange(island)) {\n island.onBoardChange();\n }\n island.markForCheck();\n });\n }\n\n private wheelZoomListener() {\n fromEvent<WheelEvent>(this.host, 'wheel', { passive: false })\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: WheelEvent) => {\n // Credits to excalidraw\n // https://github.com/excalidraw/excalidraw/blob/b7d7ccc929696cc17b4cc34452e4afd846d59f4f/src/components/App.tsx#L9060\n if (event.metaKey || event.ctrlKey) {\n event.preventDefault();\n const { deltaX, deltaY } = event;\n const zoom = this.board.viewport.zoom;\n const sign = Math.sign(deltaY);\n const MAX_STEP = ZOOM_STEP * 100;\n const absDelta = Math.abs(deltaY);\n let delta = deltaY;\n if (absDelta > MAX_STEP) {\n delta = MAX_STEP * sign;\n }\n let newZoom = zoom - delta / 100;\n // increase zoom steps the more zoomed-in we are (applies to >100% only)\n newZoom +=\n Math.log10(Math.max(1, zoom)) *\n -sign *\n // reduced amplification for small deltas (small movements on a trackpad)\n Math.min(1, absDelta / 20);\n BoardTransforms.updateZoom(this.board, newZoom, PlaitBoard.getMovingPointInBoard(this.board));\n }\n });\n }\n\n trackBy = (index: number, element: PlaitElement) => {\n return element.id;\n };\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.resizeObserver && this.resizeObserver?.disconnect();\n BOARD_TO_ROUGH_SVG.delete(this.board);\n BOARD_TO_COMPONENT.delete(this.board);\n BOARD_TO_ROUGH_SVG.delete(this.board);\n BOARD_TO_HOST.delete(this.board);\n BOARD_TO_ELEMENT_HOST.delete(this.board);\n IS_BOARD_ALIVE.set(this.board, false);\n BOARD_TO_ON_CHANGE.delete(this.board);\n BOARD_TO_AFTER_CHANGE.set(this.board, () => {});\n KEY_TO_ELEMENT_MAP.delete(this.board);\n }\n\n markForCheck() {\n this.cdr.markForCheck();\n this.ngZone.run(() => {\n this.updateIslands();\n });\n }\n}\n","import { PlaitElement, PlaitOperation, PlaitTheme, Viewport, Selection, ComponentType, PlaitBoard } from '@plait/core';\nimport { RenderComponentRef } from '@plait/common';\nimport { ComponentRef } from '@angular/core';\nimport { BOARD_TO_COMPONENT } from '../utils/weak-maps';\nimport { BoardComponentInterface } from '../board/board.component.interface';\n\nexport interface AngularBoard {\n renderComponent: <T, K extends { nativeElement: () => HTMLElement }>(\n type: ComponentType<K>,\n container: Element | DocumentFragment,\n props: T\n ) => { ref: RenderComponentRef<T>; componentRef: ComponentRef<K> };\n}\n\nexport const AngularBoard = {\n getBoardComponentInjector(board: PlaitBoard) {\n const boardComponent = BOARD_TO_COMPONENT.get(board) as BoardComponentInterface;\n return boardComponent.injector;\n }\n}\n\nexport interface OnChangeData {\n children: PlaitElement[];\n operations: PlaitOperation[];\n viewport: Viewport;\n selection: Selection | null;\n theme: PlaitTheme;\n}\n","/*\n * Public API Surface of plait\n */\n\nexport * from './board/board.component';\nexport * from './board/board.component.interface';\nexport * from './plugins/angular-board';\nexport * from './island/island-base.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;AAGO,MAAM,kBAAkB,GAAG,IAAI,OAAO,EAAuC;;MCQ9D,wBAAwB,CAAA;AAG1C,IAAA,WAAA,CAAsB,GAAsB,EAAA;QAAtB,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;KAAI;AAEhD,IAAA,UAAU,CAAC,KAAiB,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,YAAY,EAAE,CAAC;KACvB;IAED,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KAC3B;+GAZiB,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAL7C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,IAAI,EAAE;AACF,wBAAA,KAAK,EAAE,wBAAwB;AAClC,qBAAA;AACJ,iBAAA,CAAA;;MAqBqB,+BAA+B,CAAA;AAKjD,IAAA,WAAA,CAAmB,GAAsB,EAAA;QAAtB,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;KAAI;AAE7C,IAAA,UAAU,CAAC,KAAiB,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,MAAM,cAAc,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAA4B,CAAC;QAChF,IAAI,CAAC,YAAY,GAAG,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAK;AACvD,YAAA,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE;gBACxB,IAAI,CAAC,aAAa,EAAE,CAAC;aACxB;AACD,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;AAC5B,SAAC,CAAC,CAAC;KACN;IAED,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACb,YAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;SAClD;AACD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,YAAY,EAAE,CAAC;KACvB;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC;QACjC,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;+GA7BiB,+BAA+B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;mGAA/B,+BAA+B,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,gCAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;4FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBALpD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,IAAI,EAAE;AACF,wBAAA,KAAK,EAAE,gCAAgC;AAC1C,qBAAA;AACJ,iBAAA,CAAA;sFAEY,KAAK,EAAA,CAAA;sBAAb,KAAK;;AA6CG,MAAA,gBAAgB,GAAG,CAAC,KAAU,KAA4B;AACnE,IAAA,IAAI,KAAK,CAAC,aAAa,EAAE;AACrB,QAAA,OAAO,IAAI,CAAC;KACf;SAAM;AACH,QAAA,OAAO,KAAK,CAAC;KAChB;AACL;;AC3EO,MAAM,WAAW,GAAG,CAAC,KAAkC,KAAI;IAC9D,MAAM,QAAQ,GAAG,KAAmD,CAAC;IAErE,QAAQ,CAAC,eAAe,GAAG,CACvB,IAAsB,EACtB,SAAqC,EACrC,KAAQ,KACR;QACA,MAAM,cAAc,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAA4B,CAAC;QAChF,MAAM,YAAY,GAAG,cAAc,CAAC,gBAAgB,CAAC,eAAe,CAAI,IAAI,CAAC,CAAC;AAC9E,QAAA,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;AACrB,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,GAAc,CAAC,CAAC;AACnC,YAAA,YAAY,CAAC,QAAgB,CAAC,GAAsB,CAAC,GAAG,KAAY,CAAC;SACzE;QACD,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;AAC7D,QAAA,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;AAC/C,QAAA,MAAM,GAAG,GAAqB;YAC1B,OAAO,EAAE,MAAK;gBACV,YAAY,CAAC,OAAO,EAAE,CAAC;aAC1B;AACD,YAAA,MAAM,EAAE,CAAC,KAAyB,KAAI;AAClC,gBAAA,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE;AACrB,oBAAA,MAAM,KAAK,GAAG,KAAK,CAAC,GAAsB,CAAC,CAAC;AAC3C,oBAAA,YAAY,CAAC,QAAgB,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;iBAC/C;;gBAED,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;oBACjC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;iBAC3D;AACD,gBAAA,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE,CAAC;aAClD;SACJ,CAAC;AACF,QAAA,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,CAAC;AACjC,KAAC,CAAC;IAEF,QAAQ,CAAC,UAAU,GAAG,CAAC,SAAqC,EAAE,KAAgB,KAAI;AAC9E,QAAA,MAAM,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,kBAAkB,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;AAC7F,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;AACvB,QAAA,GAAG,CAAC,MAAM,GAAG,KAAK,IAAG;AACjB,YAAA,MAAM,cAAc,GAAG,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACtD,MAAM,CAAC,KAAK,CAAC,CAAC;YACd,IAAI,cAAc,KAAK,IAAI,IAAI,KAAK,CAAC,QAAQ,KAAK,KAAK,EAAE;gBACrD,aAAa,CAAC,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;aACrD;iBAAM,IAAI,cAAc,KAAK,KAAK,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI,EAAE;gBAC5D,aAAa,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;aACpD;AACL,SAAC,CAAC;AACF,QAAA,OAAO,GAAG,CAAC;AACf,KAAC,CAAC;AAEF,IAAA,OAAO,QAAQ,CAAC;AACpB,CAAC;;AC+BD,MAAM,qBAAqB,GAAG,oBAAoB,CAAC;AACnD,MAAM,gBAAgB,GAAG,cAAc,CAAC;AACxC,MAAM,qBAAqB,GAAG,oBAAoB,CAAC;AACnD,MAAM,mBAAmB,GAAG,kBAAkB,CAAC;MAqBlC,mBAAmB,CAAA;AAyB5B,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC;KACjC;AAED,IAAA,IACI,SAAS,GAAA;QACT,OAAO,CAAA,EAAG,eAAe,CAAU,OAAA,EAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAA,CAAA,EAAI,IAAI,CAAC,mBAAmB,EAAE,CAAY,SAAA,EAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAA,CAAE,CAAC;KACpI;IAED,mBAAmB,GAAA;QACf,IAAI,SAAS,EAAE;AACX,YAAA,OAAO,QAAQ,CAAC;SACnB;QACD,IAAI,SAAS,EAAE;AACX,YAAA,OAAO,QAAQ,CAAC;SACnB;QACD,IAAI,UAAU,EAAE;AACZ,YAAA,OAAO,SAAS,CAAC;SACpB;AACD,QAAA,OAAO,EAAE,CAAC;KACb;AAED,IAAA,IACI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;KACtC;AAED,IAAA,IACI,SAAS,GAAA;QACT,OAAO,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACzC;AAED,IAAA,IACI,wBAAwB,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,wBAAwB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACzF;AAED,IAAA,IAAI,aAAa,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;KACxC;IAcD,WACW,CAAA,GAAsB,EACtB,QAAkB,EAClB,gBAAkC,EACjC,UAAmC,EACnC,MAAc,EAAA;QAJf,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QACtB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAU;QAClB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QACjC,IAAU,CAAA,UAAA,GAAV,UAAU,CAAyB;QACnC,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QAlF1B,IAAc,CAAA,cAAA,GAAG,KAAK,CAAC;AAMvB,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;QAItB,IAAU,CAAA,UAAA,GAAmB,EAAE,CAAC;QAIhC,IAAY,CAAA,YAAA,GAAkB,EAAE,CAAC;AAMhC,QAAA,IAAA,CAAA,QAAQ,GAA+B,IAAI,YAAY,EAAE,CAAC;AAE1D,QAAA,IAAA,CAAA,qBAAqB,GAA6B,IAAI,YAAY,EAAE,CAAC;AA8C/E,QAAA,IAAA,CAAA,WAAW,GAAG,SAAS,CAAa,aAAa,CAAC,CAAC;AA8YnD,QAAA,IAAA,CAAA,OAAO,GAAG,CAAC,KAAa,EAAE,OAAqB,KAAI;YAC/C,OAAO,OAAO,CAAC,EAAE,CAAC;AACtB,SAAC,CAAC;KAjYE;IAEJ,QAAQ,GAAA;AACJ,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAI,CAAA,EAAA,qBAAqB,CAAE,CAAA,CAAgB,CAAC;AAC7F,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAI,CAAA,EAAA,gBAAgB,CAAE,CAAA,CAAgB,CAAC;AACnF,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAI,CAAA,EAAA,qBAAqB,CAAE,CAAA,CAAgB,CAAC;AAC7F,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAI,CAAA,EAAA,mBAAmB,CAAE,CAAA,CAAgB,CAAC;QACzF,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAqB,EAAE;YACnD,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE;AAC5C,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;YAC/B,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9B,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9B,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC7B,YAAA,SAAS,CAAa,QAAQ,EAAE,YAAY,CAAC;AACxC,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,iBAAA,SAAS,CAAC,CAAC,KAAiB,KAAI;AAC7B,gBAAA,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7C,aAAC,CAAC,CAAC;AACX,SAAC,CAAC,CAAC;QACH,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACzC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC7C,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACrC,QAAA,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE;AAClC,YAAA,SAAS,EAAE,gBAAgB;AAC3B,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,SAAS,EAAE,gBAAgB;AAC3B,YAAA,OAAO,EAAE,cAAc;AACvB,YAAA,UAAU,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE,aAAa;AAC7C,YAAA,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa;AACxC,YAAA,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,CAAC,aAAa;AAC1D,SAAA,CAAC,CAAC;QACH,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,MAAK;AACpC,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;AACjB,gBAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC;gBAC5H,IAAI,kBAAkB,EAAE;oBACpB,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACxB,OAAO;iBACV;AACD,gBAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;gBACrH,IAAI,aAAa,IAAI,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAC9C,oBAAA,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBACtC,IAAI,CAAC,gBAAgB,EAAE,CAAC;oBACxB,OAAO;iBACV;gBACD,IAAI,CAAC,gBAAgB,EAAE,CAAC;gBACxB,IAAI,aAAa,EAAE;AACf,oBAAA,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBACjC;qBAAM;AACH,oBAAA,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBAC7B;AACD,gBAAA,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACjC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzD,gBAAA,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;oBACjC,MAAM,UAAU,GAAG,YAAY,CAAC,aAAa,CAAwB,OAAO,CAAC,CAAC;oBAC9E,UAAU,CAAC,mBAAmB,EAAE,CAAC;AACrC,iBAAC,CAAC,CAAC;AACP,aAAC,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;QACH,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,MAAK;AACvC,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;AACjB,gBAAA,MAAM,IAAI,GAAiB;AACvB,oBAAA,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;AAC7B,oBAAA,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU;AACjC,oBAAA,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;AAC7B,oBAAA,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;AAC/B,oBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;iBAC1B,CAAC;gBACF,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,gBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7B,aAAC,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;AACH,QAAA,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAE,CAAC;QACxC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;KAC9B;IAED,kBAAkB,GAAA;QACd,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC5B;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACrB,YAAA,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AAC1C,YAAA,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;YAExC,IAAI,WAAW,EAAE;;gBAEb,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,WAAW,CAAC,YAAY,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;oBAC/E,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC;oBAC/C,IAAI,CAAC,gBAAgB,EAAE,CAAC;iBAC3B;aACJ;YACD,IAAI,OAAO,EAAE;gBACT,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;aAC7C;AACD,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;SAC3B;KACJ;IAED,eAAe,GAAA;QACX,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5C,QAAA,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxC,QAAA,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9B,QAAA,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACxC;IAEO,iBAAiB,GAAA;QACrB,IAAI,KAAK,GAAG,mBAAmB,CAC3B,UAAU,CACN,eAAe,CACX,WAAW,CACP,aAAa,CACT,UAAU,CACN,SAAS,CACL,QAAQ,CAAC,WAAW,CAAC,WAAW,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC3G,CACJ,CACJ,CACJ,CACJ,CACJ,CACJ,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AACjC,YAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1B,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAEnB,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;SAC5C;AAED,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;SACtC;QAED,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;KAC5C;IAEO,sBAAsB,GAAA;AAC1B,QAAA,SAAS,CAAa,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;AACxC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAiB,KAAI;AAC7B,YAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAChC,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAe,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;AAC5C,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAmB,KAAI;AAC/B,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAClC,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAa,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;AACxC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAiB,KAAI;AAC7B,YAAA,8BAA8B,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,YAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAChC,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAe,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;AAC5C,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAmB,KAAI;AAC/B,YAAA,8BAA8B,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAClC,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAa,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC;AACzC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAiB,KAAI;AAC7B,YAAA,8BAA8B,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClD,YAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACjC,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAe,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC;AAC7C,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAmB,KAAI;AAC/B,YAAA,8BAA8B,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClD,YAAA,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACnC,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAa,QAAQ,EAAE,WAAW,CAAC;AACvC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAiB,KAAI;AAC7B,YAAA,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,YAAA,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AACtC,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAe,QAAQ,EAAE,aAAa,CAAC;AAC3C,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAmB,KAAI;AAC/B,YAAA,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,YAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AACxC,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAa,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;AACtC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAiB,KAAI;AAC7B,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9B,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAe,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;AAC1C,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAmB,KAAI;AAC/B,YAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAChC,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAa,QAAQ,EAAE,SAAS,CAAC;AACrC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAiB,KAAI;AAC7B,YAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACpC,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAe,QAAQ,EAAE,WAAW,CAAC;AACzC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAmB,KAAI;AAC/B,YAAA,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AACtC,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAa,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC;aACvC,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxB,MAAM,CAAC,MAAM,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAC7E;AACA,aAAA,SAAS,CAAC,CAAC,KAAiB,KAAI;AAC7B,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/B,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAgB,QAAQ,EAAE,SAAS,CAAC;AACxC,aAAA,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxB,GAAG,CAAC,CAAC,KAAK,KAAI;AACV,YAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACpC,SAAC,CAAC,EACF,MAAM,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAC7H;AACA,aAAA,SAAS,CAAC,CAAC,KAAoB,KAAI;AAChC,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9B,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAgB,QAAQ,EAAE,OAAO,CAAC;aACtC,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxB,MAAM,CAAC,MAAM,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAC7E;AACA,aAAA,SAAS,CAAC,CAAC,KAAoB,KAAI;AAChC,YAAA,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;AAC7B,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAiB,QAAQ,EAAE,MAAM,CAAC;aACtC,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxB,MAAM,CAAC,MAAM,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAC7E;AACA,aAAA,SAAS,CAAC,CAAC,KAAqB,KAAI;YACjC,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,YAAA,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,8BAA8B,CAAC,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;AACtF,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAiB,QAAQ,EAAE,OAAO,CAAC;AACvC,aAAA,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxB,MAAM,CAAC,MAAM,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CACnH;AACA,aAAA,SAAS,CAAC,OAAO,cAA8B,KAAI;YAChD,MAAM,UAAU,GAAG,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChE,IAAI,UAAU,EAAE;gBACZ,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtG,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;AAC3E,gBAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,EAAE,WAAW,EAAE,8BAA8B,CAAC,KAAK,CAAC,CAAC;aAC/F;AACL,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAiB,QAAQ,EAAE,KAAK,CAAC;AACrC,aAAA,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxB,MAAM,CAAC,MAAM,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CACnH;AACA,aAAA,SAAS,CAAC,CAAC,KAAqB,KAAI;YACjC,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,YAAA,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,8BAA8B,CAAC,GAAG,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;AACjF,YAAA,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC/B,SAAC,CAAC,CAAC;KACV;IAEO,oBAAoB,GAAA;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7C,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC;KACrF;IAEO,gBAAgB,GAAA;AACpB,QAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC;QAC9E,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;KACvD;IAEO,yBAAyB,GAAA;QAC7B,OAAO;YACH,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,KAAK;YAClB,OAAO,EAAE,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;SACjD,CAAC;KACL;IAEO,sBAAsB,GAAA;QAC1B,SAAS,CAAa,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,QAAQ,CAAC;aAChE,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxB,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAClC,gBAAA,uBAAuB,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC3C,gBAAA,OAAO,KAAK,CAAC;aAChB;AACD,YAAA,OAAO,IAAI,CAAC;AAChB,SAAC,CAAC,CACL;AACA,aAAA,SAAS,CAAC,CAAC,KAAY,KAAI;YACxB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,MAAqB,CAAC;YAC9D,yBAAyB,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;AACjE,SAAC,CAAC,CAAC;AACP,QAAA,SAAS,CAAa,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACxF,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAY,KAAI;YACxB,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,SAAC,CAAC,CAAC;KACV;IAEO,qBAAqB,GAAA;AACzB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAK;AAC1C,YAAA,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxC,YAAA,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9B,YAAA,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrC,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KACnD;IAEO,iBAAiB,GAAA;QACrB,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,KAAI;AAC7B,YAAA,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,SAAC,CAAC,CAAC;KACN;IAEO,aAAa,GAAA;QACjB,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,KAAI;AAC7B,YAAA,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE;gBAC1B,MAAM,CAAC,aAAa,EAAE,CAAC;aAC1B;YACD,MAAM,CAAC,YAAY,EAAE,CAAC;AAC1B,SAAC,CAAC,CAAC;KACN;IAEO,iBAAiB,GAAA;AACrB,QAAA,SAAS,CAAa,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACxD,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAiB,KAAI;;;YAG7B,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE;gBAChC,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,gBAAA,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;gBACjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACtC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,gBAAA,MAAM,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC;gBACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAClC,IAAI,KAAK,GAAG,MAAM,CAAC;AACnB,gBAAA,IAAI,QAAQ,GAAG,QAAQ,EAAE;AACrB,oBAAA,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC;iBAC3B;AACD,gBAAA,IAAI,OAAO,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,CAAC;;gBAEjC,OAAO;oBACH,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC7B,wBAAA,CAAC,IAAI;;wBAEL,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,EAAE,CAAC,CAAC;AAC/B,gBAAA,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;aACjG;AACL,SAAC,CAAC,CAAC;KACV;IAMD,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE,CAAC;AACzD,QAAA,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,QAAA,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,QAAA,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,QAAA,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,QAAA,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACtC,QAAA,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,QAAA,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,MAAK,GAAG,CAAC,CAAC;AAChD,QAAA,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACzC;IAED,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;YACjB,IAAI,CAAC,aAAa,EAAE,CAAC;AACzB,SAAC,CAAC,CAAC;KACN;+GA3eQ,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,QAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EA0EX,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,uBAAA,EAAA,+BAAA,EAAA,EAAA,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,SAAA,EAAA,SAAA,EAAA,wBAAwB,EAHD,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,KAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAAA,UAAU,EAxFxC,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;;;;AAaT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;4FAIQ,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAnB/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;;;;AAaT,IAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE,IAAI;AACnB,iBAAA,CAAA;0LAYY,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEI,QAAQ,EAAA,CAAA;sBAAjB,MAAM;gBAEG,qBAAqB,EAAA,CAAA;sBAA9B,MAAM;gBAOH,SAAS,EAAA,CAAA;sBADZ,WAAW;uBAAC,OAAO,CAAA;gBAmBhB,QAAQ,EAAA,CAAA;sBADX,WAAW;uBAAC,gBAAgB,CAAA;gBAMzB,SAAS,EAAA,CAAA;sBADZ,WAAW;uBAAC,eAAe,CAAA;gBAMxB,wBAAwB,EAAA,CAAA;sBAD3B,WAAW;uBAAC,uBAAuB,CAAA;gBAUpC,GAAG,EAAA,CAAA;sBADF,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAMlC,iBAAiB,EAAA,CAAA;sBADhB,SAAS;uBAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAGA,OAAO,EAAA,CAAA;sBAAxE,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,wBAAwB,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;;;AC9KvD,MAAA,YAAY,GAAG;AACxB,IAAA,yBAAyB,CAAC,KAAiB,EAAA;QACvC,MAAM,cAAc,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAA4B,CAAC;QAChF,OAAO,cAAc,CAAC,QAAQ,CAAC;KAClC;;;AClBL;;AAEG;;ACFH;;AAEG;;;;"}
|