@zsviczian/excalidraw 0.11.0-obsidian-5 → 0.11.0-obsidian-6

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.
@@ -2434,7 +2434,7 @@ eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */
2434
2434
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2435
2435
 
2436
2436
  "use strict";
2437
- eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ \\\"APP_NAME\\\": () => (/* binding */ APP_NAME),\\n/* harmony export */ \\\"DRAGGING_THRESHOLD\\\": () => (/* binding */ DRAGGING_THRESHOLD),\\n/* harmony export */ \\\"LINE_CONFIRM_THRESHOLD\\\": () => (/* binding */ LINE_CONFIRM_THRESHOLD),\\n/* harmony export */ \\\"ELEMENT_SHIFT_TRANSLATE_AMOUNT\\\": () => (/* binding */ ELEMENT_SHIFT_TRANSLATE_AMOUNT),\\n/* harmony export */ \\\"ELEMENT_TRANSLATE_AMOUNT\\\": () => (/* binding */ ELEMENT_TRANSLATE_AMOUNT),\\n/* harmony export */ \\\"TEXT_TO_CENTER_SNAP_THRESHOLD\\\": () => (/* binding */ TEXT_TO_CENTER_SNAP_THRESHOLD),\\n/* harmony export */ \\\"SHIFT_LOCKING_ANGLE\\\": () => (/* binding */ SHIFT_LOCKING_ANGLE),\\n/* harmony export */ \\\"CURSOR_TYPE\\\": () => (/* binding */ CURSOR_TYPE),\\n/* harmony export */ \\\"POINTER_BUTTON\\\": () => (/* binding */ POINTER_BUTTON),\\n/* harmony export */ \\\"EVENT\\\": () => (/* binding */ EVENT),\\n/* harmony export */ \\\"ENV\\\": () => (/* binding */ ENV),\\n/* harmony export */ \\\"CLASSES\\\": () => (/* binding */ CLASSES),\\n/* harmony export */ \\\"FONT_FAMILY\\\": () => (/* binding */ FONT_FAMILY),\\n/* harmony export */ \\\"THEME\\\": () => (/* binding */ THEME),\\n/* harmony export */ \\\"WINDOWS_EMOJI_FALLBACK_FONT\\\": () => (/* binding */ WINDOWS_EMOJI_FALLBACK_FONT),\\n/* harmony export */ \\\"DEFAULT_FONT_SIZE\\\": () => (/* binding */ DEFAULT_FONT_SIZE),\\n/* harmony export */ \\\"DEFAULT_FONT_FAMILY\\\": () => (/* binding */ DEFAULT_FONT_FAMILY),\\n/* harmony export */ \\\"DEFAULT_TEXT_ALIGN\\\": () => (/* binding */ DEFAULT_TEXT_ALIGN),\\n/* harmony export */ \\\"DEFAULT_VERTICAL_ALIGN\\\": () => (/* binding */ DEFAULT_VERTICAL_ALIGN),\\n/* harmony export */ \\\"DEFAULT_VERSION\\\": () => (/* binding */ DEFAULT_VERSION),\\n/* harmony export */ \\\"CANVAS_ONLY_ACTIONS\\\": () => (/* binding */ CANVAS_ONLY_ACTIONS),\\n/* harmony export */ \\\"GRID_SIZE\\\": () => (/* binding */ GRID_SIZE),\\n/* harmony export */ \\\"MIME_TYPES\\\": () => (/* binding */ MIME_TYPES),\\n/* harmony export */ \\\"EXPORT_DATA_TYPES\\\": () => (/* binding */ EXPORT_DATA_TYPES),\\n/* harmony export */ \\\"EXPORT_SOURCE\\\": () => (/* binding */ EXPORT_SOURCE),\\n/* harmony export */ \\\"IMAGE_RENDER_TIMEOUT\\\": () => (/* binding */ IMAGE_RENDER_TIMEOUT),\\n/* harmony export */ \\\"TAP_TWICE_TIMEOUT\\\": () => (/* binding */ TAP_TWICE_TIMEOUT),\\n/* harmony export */ \\\"TOUCH_CTX_MENU_TIMEOUT\\\": () => (/* binding */ TOUCH_CTX_MENU_TIMEOUT),\\n/* harmony export */ \\\"TITLE_TIMEOUT\\\": () => (/* binding */ TITLE_TIMEOUT),\\n/* harmony export */ \\\"TOAST_TIMEOUT\\\": () => (/* binding */ TOAST_TIMEOUT),\\n/* harmony export */ \\\"VERSION_TIMEOUT\\\": () => (/* binding */ VERSION_TIMEOUT),\\n/* harmony export */ \\\"SCROLL_TIMEOUT\\\": () => (/* binding */ SCROLL_TIMEOUT),\\n/* harmony export */ \\\"ZOOM_STEP\\\": () => (/* binding */ ZOOM_STEP),\\n/* harmony export */ \\\"HYPERLINK_TOOLTIP_DELAY\\\": () => (/* binding */ HYPERLINK_TOOLTIP_DELAY),\\n/* harmony export */ \\\"IDLE_THRESHOLD\\\": () => (/* binding */ IDLE_THRESHOLD),\\n/* harmony export */ \\\"ACTIVE_THRESHOLD\\\": () => (/* binding */ ACTIVE_THRESHOLD),\\n/* harmony export */ \\\"MODES\\\": () => (/* binding */ MODES),\\n/* harmony export */ \\\"THEME_FILTER\\\": () => (/* binding */ THEME_FILTER),\\n/* harmony export */ \\\"URL_QUERY_KEYS\\\": () => (/* binding */ URL_QUERY_KEYS),\\n/* harmony export */ \\\"URL_HASH_KEYS\\\": () => (/* binding */ URL_HASH_KEYS),\\n/* harmony export */ \\\"DEFAULT_UI_OPTIONS\\\": () => (/* binding */ DEFAULT_UI_OPTIONS),\\n/* harmony export */ \\\"MQ_MAX_WIDTH_PORTRAIT\\\": () => (/* binding */ MQ_MAX_WIDTH_PORTRAIT),\\n/* harmony export */ \\\"MQ_MAX_WIDTH_LANDSCAPE\\\": () => (/* binding */ MQ_MAX_WIDTH_LANDSCAPE),\\n/* harmony export */ \\\"MQ_MAX_HEIGHT_LANDSCAPE\\\": () => (/* binding */ MQ_MAX_HEIGHT_LANDSCAPE),\\n/* harmony export */ \\\"MAX_DECIMALS_FOR_SVG_EXPORT\\\": () => (/* binding */ MAX_DECIMALS_FOR_SVG_EXPORT),\\n/* harmony export */ \\\"EXPORT_SCALES\\\": () => (/* binding */ EXPORT_SCALES),\\n/* harmony export */ \\\"DEFAULT_EXPORT_PADDING\\\": () => (/* binding */ DEFAULT_EXPORT_PADDING),\\n/* harmony export */ \\\"DEFAULT_MAX_IMAGE_WIDTH_OR_HEIGHT\\\": () => (/* binding */ DEFAULT_MAX_IMAGE_WIDTH_OR_HEIGHT),\\n/* harmony export */ \\\"ALLOWED_IMAGE_MIME_TYPES\\\": () => (/* binding */ ALLOWED_IMAGE_MIME_TYPES),\\n/* harmony export */ \\\"MAX_ALLOWED_FILE_BYTES\\\": () => (/* binding */ MAX_ALLOWED_FILE_BYTES),\\n/* harmony export */ \\\"SVG_NS\\\": () => (/* binding */ SVG_NS),\\n/* harmony export */ \\\"ENCRYPTION_KEY_BITS\\\": () => (/* binding */ ENCRYPTION_KEY_BITS),\\n/* harmony export */ \\\"VERSIONS\\\": () => (/* binding */ VERSIONS),\\n/* harmony export */ \\\"BOUND_TEXT_PADDING\\\": () => (/* binding */ BOUND_TEXT_PADDING),\\n/* harmony export */ \\\"VERTICAL_ALIGN\\\": () => (/* binding */ VERTICAL_ALIGN)\\n/* harmony export */ });\\n/* harmony import */ var _css_variables_module_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./css/variables.module.scss */ \\\"../../css/variables.module.scss\\\");\\n/* harmony import */ var _css_variables_module_scss__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_variables_module_scss__WEBPACK_IMPORTED_MODULE_0__);\\n\\r\\nconst APP_NAME = \\\"Excalidraw\\\";\\r\\nconst DRAGGING_THRESHOLD = 10; // px\\r\\nconst LINE_CONFIRM_THRESHOLD = 8; // px\\r\\nconst ELEMENT_SHIFT_TRANSLATE_AMOUNT = 5;\\r\\nconst ELEMENT_TRANSLATE_AMOUNT = 1;\\r\\nconst TEXT_TO_CENTER_SNAP_THRESHOLD = 30;\\r\\nconst SHIFT_LOCKING_ANGLE = Math.PI / 12;\\r\\nconst CURSOR_TYPE = {\\r\\n TEXT: \\\"text\\\",\\r\\n CROSSHAIR: \\\"crosshair\\\",\\r\\n GRABBING: \\\"grabbing\\\",\\r\\n GRAB: \\\"grab\\\",\\r\\n POINTER: \\\"pointer\\\",\\r\\n MOVE: \\\"move\\\",\\r\\n AUTO: \\\"\\\"\\r\\n};\\r\\nconst POINTER_BUTTON = {\\r\\n MAIN: 0,\\r\\n WHEEL: 1,\\r\\n SECONDARY: 2,\\r\\n TOUCH: -1\\r\\n};\\r\\nlet EVENT;\\r\\n(function (EVENT) {\\r\\n EVENT[\\\"COPY\\\"] = \\\"copy\\\";\\r\\n EVENT[\\\"PASTE\\\"] = \\\"paste\\\";\\r\\n EVENT[\\\"CUT\\\"] = \\\"cut\\\";\\r\\n EVENT[\\\"KEYDOWN\\\"] = \\\"keydown\\\";\\r\\n EVENT[\\\"KEYUP\\\"] = \\\"keyup\\\";\\r\\n EVENT[\\\"MOUSE_MOVE\\\"] = \\\"mousemove\\\";\\r\\n EVENT[\\\"RESIZE\\\"] = \\\"resize\\\";\\r\\n EVENT[\\\"UNLOAD\\\"] = \\\"unload\\\";\\r\\n EVENT[\\\"FOCUS\\\"] = \\\"focus\\\";\\r\\n EVENT[\\\"BLUR\\\"] = \\\"blur\\\";\\r\\n EVENT[\\\"DRAG_OVER\\\"] = \\\"dragover\\\";\\r\\n EVENT[\\\"DROP\\\"] = \\\"drop\\\";\\r\\n EVENT[\\\"GESTURE_END\\\"] = \\\"gestureend\\\";\\r\\n EVENT[\\\"BEFORE_UNLOAD\\\"] = \\\"beforeunload\\\";\\r\\n EVENT[\\\"GESTURE_START\\\"] = \\\"gesturestart\\\";\\r\\n EVENT[\\\"GESTURE_CHANGE\\\"] = \\\"gesturechange\\\";\\r\\n EVENT[\\\"POINTER_MOVE\\\"] = \\\"pointermove\\\";\\r\\n EVENT[\\\"POINTER_UP\\\"] = \\\"pointerup\\\";\\r\\n EVENT[\\\"STATE_CHANGE\\\"] = \\\"statechange\\\";\\r\\n EVENT[\\\"WHEEL\\\"] = \\\"wheel\\\";\\r\\n EVENT[\\\"TOUCH_START\\\"] = \\\"touchstart\\\";\\r\\n EVENT[\\\"TOUCH_END\\\"] = \\\"touchend\\\";\\r\\n EVENT[\\\"HASHCHANGE\\\"] = \\\"hashchange\\\";\\r\\n EVENT[\\\"VISIBILITY_CHANGE\\\"] = \\\"visibilitychange\\\";\\r\\n EVENT[\\\"SCROLL\\\"] = \\\"scroll\\\";\\r\\n EVENT[\\\"EXCALIDRAW_LINK\\\"] = \\\"excalidraw-link\\\";\\r\\n})(EVENT || (EVENT = {}));\\r\\nconst ENV = {\\r\\n TEST: \\\"test\\\",\\r\\n DEVELOPMENT: \\\"development\\\"\\r\\n};\\r\\nconst CLASSES = {\\r\\n SHAPE_ACTIONS_MENU: \\\"App-menu__left\\\",\\r\\n SHAPE_ACTIONS_MOBILE_MENU: \\\"App-mobile-menu\\\",\\r\\n MOBILE_TOOLBAR: \\\"App-toolbar-content\\\"\\r\\n}; // 1-based in case we ever do `if(element.fontFamily)`\\r\\nconst FONT_FAMILY = {\\r\\n Virgil: 1,\\r\\n Helvetica: 2,\\r\\n Cascadia: 3,\\r\\n LocalFont: 4\\r\\n};\\r\\nconst THEME = {\\r\\n LIGHT: \\\"light\\\",\\r\\n DARK: \\\"dark\\\"\\r\\n};\\r\\nconst WINDOWS_EMOJI_FALLBACK_FONT = \\\"Segoe UI Emoji\\\";\\r\\nconst DEFAULT_FONT_SIZE = 20;\\r\\nconst DEFAULT_FONT_FAMILY = FONT_FAMILY.Virgil;\\r\\nconst DEFAULT_TEXT_ALIGN = \\\"left\\\";\\r\\nconst DEFAULT_VERTICAL_ALIGN = \\\"top\\\";\\r\\nconst DEFAULT_VERSION = \\\"{version}\\\";\\r\\nconst CANVAS_ONLY_ACTIONS = [\\\"selectAll\\\"];\\r\\nconst GRID_SIZE = 20; // TODO make it configurable?\\r\\nconst MIME_TYPES = {\\r\\n excalidraw: \\\"application/vnd.excalidraw+json\\\",\\r\\n excalidrawlib: \\\"application/vnd.excalidrawlib+json\\\",\\r\\n json: \\\"application/json\\\",\\r\\n svg: \\\"image/svg+xml\\\",\\r\\n png: \\\"image/png\\\",\\r\\n jpg: \\\"image/jpeg\\\",\\r\\n gif: \\\"image/gif\\\",\\r\\n binary: \\\"application/octet-stream\\\"\\r\\n};\\r\\nconst EXPORT_DATA_TYPES = {\\r\\n excalidraw: \\\"excalidraw\\\",\\r\\n excalidrawClipboard: \\\"excalidraw/clipboard\\\",\\r\\n excalidrawLibrary: \\\"excalidrawlib\\\"\\r\\n};\\r\\nconst EXPORT_SOURCE = window.location.origin; // time in milliseconds\\r\\nconst IMAGE_RENDER_TIMEOUT = 500;\\r\\nconst TAP_TWICE_TIMEOUT = 300;\\r\\nconst TOUCH_CTX_MENU_TIMEOUT = 500;\\r\\nconst TITLE_TIMEOUT = 10000;\\r\\nconst TOAST_TIMEOUT = 5000;\\r\\nconst VERSION_TIMEOUT = 30000;\\r\\nconst SCROLL_TIMEOUT = 100;\\r\\nconst ZOOM_STEP = 0.1;\\r\\nconst HYPERLINK_TOOLTIP_DELAY = 300; // Report a user inactive after IDLE_THRESHOLD milliseconds\\r\\nconst IDLE_THRESHOLD = 60000; // Report a user active each ACTIVE_THRESHOLD milliseconds\\r\\nconst ACTIVE_THRESHOLD = 3000;\\r\\nconst MODES = {\\r\\n VIEW: \\\"viewMode\\\",\\r\\n ZEN: \\\"zenMode\\\",\\r\\n GRID: \\\"gridMode\\\"\\r\\n};\\r\\nconst THEME_FILTER = (_css_variables_module_scss__WEBPACK_IMPORTED_MODULE_0___default().themeFilter);\\r\\nconst URL_QUERY_KEYS = {\\r\\n addLibrary: \\\"addLibrary\\\"\\r\\n};\\r\\nconst URL_HASH_KEYS = {\\r\\n addLibrary: \\\"addLibrary\\\"\\r\\n};\\r\\nconst DEFAULT_UI_OPTIONS = {\\r\\n canvasActions: {\\r\\n changeViewBackgroundColor: true,\\r\\n clearCanvas: true,\\r\\n export: {\\r\\n saveFileToDisk: true\\r\\n },\\r\\n loadScene: true,\\r\\n saveToActiveFile: true,\\r\\n theme: true,\\r\\n saveAsImage: true\\r\\n }\\r\\n};\\r\\nconst MQ_MAX_WIDTH_PORTRAIT = 730;\\r\\nconst MQ_MAX_WIDTH_LANDSCAPE = 1000;\\r\\nconst MQ_MAX_HEIGHT_LANDSCAPE = 500;\\r\\nconst MAX_DECIMALS_FOR_SVG_EXPORT = 2;\\r\\nconst EXPORT_SCALES = [1, 2, 3];\\r\\nconst DEFAULT_EXPORT_PADDING = 10; // px\\r\\nconst DEFAULT_MAX_IMAGE_WIDTH_OR_HEIGHT = 1440;\\r\\nconst ALLOWED_IMAGE_MIME_TYPES = [MIME_TYPES.png, MIME_TYPES.jpg, MIME_TYPES.svg, MIME_TYPES.gif];\\r\\nconst MAX_ALLOWED_FILE_BYTES = 2 * 1024 * 1024;\\r\\nconst SVG_NS = \\\"http://www.w3.org/2000/svg\\\";\\r\\nconst ENCRYPTION_KEY_BITS = 128;\\r\\nconst VERSIONS = {\\r\\n excalidraw: 2,\\r\\n excalidrawLibrary: 2\\r\\n};\\r\\nconst BOUND_TEXT_PADDING = 5;\\r\\nconst VERTICAL_ALIGN = {\\r\\n TOP: \\\"top\\\",\\r\\n MIDDLE: \\\"middle\\\",\\r\\n BOTTOM: \\\"bottom\\\"\\r\\n};\\r\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFFO1lBQ04sY0FBYyxFQUFFLElBQUk7U0FDckI7UUFDRCxTQUFTLEVBQUUsSUFBSTtRQUNmLGdCQUFnQixFQUFFLElBQUk7UUFDdEIsS0FBSyxFQUFFLElBQUk7UUFDWCxXQUFXLEVBQUUsSUFBSTtLQUNsQjtDQUNGLENBQUM7QUFDSyxNQUFNLHFCQUFxQixHQUFHLEdBQUcsQ0FBQztBQUNsQyxNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQztBQUNwQyxNQUFNLHVCQUF1QixHQUFHLEdBQUcsQ0FBQztBQUNwQyxNQUFNLDJCQUEyQixHQUFHLENBQUMsQ0FBQztBQUN0QyxNQUFNLGFBQWEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDaEMsTUFBTSxzQkFBc0IsR0FBRyxFQUFFLENBQUMsQ0FBQyxLQUFLO0FBRXhDLE1BQU0saUNBQWlDLEdBQUcsSUFBSSxDQUFDO0FBQy9DLE1BQU0sd0JBQXdCLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEcsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUMvQyxNQUFNLE1BQU0sR0FBRyw0QkFBNEIsQ0FBQztBQUM1QyxNQUFNLG1CQUFtQixHQUFHLEdBQUcsQ0FBQztBQUNoQyxNQUFNLFFBQVEsR0FBRztJQUN0QixVQUFVLEVBQUUsQ0FBQztJQUNiLGlCQUFpQixFQUFFLENBQUM7Q0FDckIsQ0FBQztBQUNLLE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLE1BQU0sY0FBYyxHQUFHO0lBQzVCLEdBQUcsRUFBRSxLQUFLO0lBQ1YsTUFBTSxFQUFFLFFBQVE7SUFDaEIsTUFBTSxFQUFFLFFBQVE7Q0FDakIsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9jb25zdGFudHMudHM/MjBkYSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgY3NzVmFyaWFibGVzIGZyb20gXCIuL2Nzcy92YXJpYWJsZXMubW9kdWxlLnNjc3NcIjtcbmV4cG9ydCBjb25zdCBBUFBfTkFNRSA9IFwiRXhjYWxpZHJhd1wiO1xuZXhwb3J0IGNvbnN0IERSQUdHSU5HX1RIUkVTSE9MRCA9IDEwOyAvLyBweFxuXG5leHBvcnQgY29uc3QgTElORV9DT05GSVJNX1RIUkVTSE9MRCA9IDg7IC8vIHB4XG5cbmV4cG9ydCBjb25zdCBFTEVNRU5UX1NISUZUX1RSQU5TTEFURV9BTU9VTlQgPSA1O1xuZXhwb3J0IGNvbnN0IEVMRU1FTlRfVFJBTlNMQVRFX0FNT1VOVCA9IDE7XG5leHBvcnQgY29uc3QgVEVYVF9UT19DRU5URVJfU05BUF9USFJFU0hPTEQgPSAzMDtcbmV4cG9ydCBjb25zdCBTSElGVF9MT0NLSU5HX0FOR0xFID0gTWF0aC5QSSAvIDEyO1xuZXhwb3J0IGNvbnN0IENVUlNPUl9UWVBFID0ge1xuICBURVhUOiBcInRleHRcIixcbiAgQ1JPU1NIQUlSOiBcImNyb3NzaGFpclwiLFxuICBHUkFCQklORzogXCJncmFiYmluZ1wiLFxuICBHUkFCOiBcImdyYWJcIixcbiAgUE9JTlRFUjogXCJwb2ludGVyXCIsXG4gIE1PVkU6IFwibW92ZVwiLFxuICBBVVRPOiBcIlwiXG59O1xuZXhwb3J0IGNvbnN0IFBPSU5URVJfQlVUVE9OID0ge1xuICBNQUlOOiAwLFxuICBXSEVFTDogMSxcbiAgU0VDT05EQVJZOiAyLFxuICBUT1VDSDogLTFcbn07XG5leHBvcnQgbGV0IEVWRU5UO1xuXG4oZnVuY3Rpb24gKEVWRU5UKSB7XG4gIEVWRU5UW1wiQ09QWVwiXSA9IFwiY29weVwiO1xuICBFVkVOVFtcIlBBU1RFXCJdID0gXCJwYXN0ZVwiO1xuICBFVkVOVFtcIkNVVFwiXSA9IFwiY3V0XCI7XG4gIEVWRU5UW1wiS0VZRE9XTlwiXSA9IFwia2V5ZG93blwiO1xuICBFVkVOVFtcIktFWVVQXCJdID0gXCJrZXl1cFwiO1xuICBFVkVOVFtcIk1PVVNFX01PVkVcIl0gPSBcIm1vdXNlbW92ZVwiO1xuICBFVkVOVFtcIlJFU0laRVwiXSA9IFwicmVzaXplXCI7XG4gIEVWRU5UW1wiVU5MT0FEXCJdID0gXCJ1bmxvYWRcIjtcbiAgRVZFTlRbXCJGT0NVU1wiXSA9IFwiZm9jdXNcIjtcbiAgRVZFTlRbXCJCTFVSXCJdID0gXCJibHVyXCI7XG4gIEVWRU5UW1wiRFJBR19PVkVSXCJdID0gXCJkcmFnb3ZlclwiO1xuICBFVkVOVFtcIkRST1BcIl0gPSBcImRyb3BcIjtcbiAgRVZFTlRbXCJHRVNUVVJFX0VORFwiXSA9IFwiZ2VzdHVyZWVuZFwiO1xuICBFVkVOVFtcIkJFRk9SRV9VTkxPQURcIl0gPSBcImJlZm9yZXVubG9hZFwiO1xuICBFVkVOVFtcIkdFU1RVUkVfU1RBUlRcIl0gPSBcImdlc3R1cmVzdGFydFwiO1xuICBFVkVOVFtcIkdFU1RVUkVfQ0hBTkdFXCJdID0gXCJnZXN0dXJlY2hhbmdlXCI7XG4gIEVWRU5UW1wiUE9JTlRFUl9NT1ZFXCJdID0gXCJwb2ludGVybW92ZVwiO1xuICBFVkVOVFtcIlBPSU5URVJfVVBcIl0gPSBcInBvaW50ZXJ1cFwiO1xuICBFVkVOVFtcIlNUQVRFX0NIQU5HRVwiXSA9IFwic3RhdGVjaGFuZ2VcIjtcbiAgRVZFTlRbXCJXSEVFTFwiXSA9IFwid2hlZWxcIjtcbiAgRVZFTlRbXCJUT1VDSF9TVEFSVFwiXSA9IFwidG91Y2hzdGFydFwiO1xuICBFVkVOVFtcIlRPVUNIX0VORFwiXSA9IFwidG91Y2hlbmRcIjtcbiAgRVZFTlRbXCJIQVNIQ0hBTkdFXCJdID0gXCJoYXNoY2hhbmdlXCI7XG4gIEVWRU5UW1wiVklTSUJJTElUWV9DSEFOR0VcIl0gPSBcInZpc2liaWxpdHljaGFuZ2VcIjtcbiAgRVZFTlRbXCJTQ1JPTExcIl0gPSBcInNjcm9sbFwiO1xuICBFVkVOVFtcIkVYQ0FMSURSQVdfTElOS1wiXSA9IFwiZXhjYWxpZHJhdy1saW5rXCI7XG59KShFVkVOVCB8fCAoRVZFTlQgPSB7fSkpO1xuXG5leHBvcnQgY29uc3QgRU5WID0ge1xuICBURVNUOiBcInRlc3RcIixcbiAgREVWRUxPUE1FTlQ6IFwiZGV2ZWxvcG1lbnRcIlxufTtcbmV4cG9ydCBjb25zdCBDTEFTU0VTID0ge1xuICBTSEFQRV9BQ1RJT05TX01FTlU6IFwiQXBwLW1lbnVfX2xlZnRcIixcbiAgU0hBUEVfQUNUSU9OU19NT0JJTEVfTUVOVTogXCJBcHAtbW9iaWxlLW1lbnVcIixcbiAgTU9CSUxFX1RPT0xCQVI6IFwiQXBwLXRvb2xiYXItY29udGVudFwiXG59OyAvLyAxLWJhc2VkIGluIGNhc2Ugd2UgZXZlciBkbyBgaWYoZWxlbWVudC5mb250RmFtaWx5KWBcblxuZXhwb3J0IGNvbnN0IEZPTlRfRkFNSUxZID0ge1xuICBWaXJnaWw6IDEsXG4gIEhlbHZldGljYTogMixcbiAgQ2FzY2FkaWE6IDMsXG4gIExvY2FsRm9udDogNFxufTtcbmV4cG9ydCBjb25zdCBUSEVNRSA9IHtcbiAgTElHSFQ6IFwibGlnaHRcIixcbiAgREFSSzogXCJkYXJrXCJcbn07XG5leHBvcnQgY29uc3QgV0lORE9XU19FTU9KSV9GQUxMQkFDS19GT05UID0gXCJTZWdvZSBVSSBFbW9qaVwiO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRk9OVF9TSVpFID0gMjA7XG5leHBvcnQgY29uc3QgREVGQVVMVF9GT05UX0ZBTUlMWSA9IEZPTlRfRkFNSUxZLlZpcmdpbDtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1RFWFRfQUxJR04gPSBcImxlZnRcIjtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1ZFUlRJQ0FMX0FMSUdOID0gXCJ0b3BcIjtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1ZFUlNJT04gPSBcInt2ZXJzaW9ufVwiO1xuZXhwb3J0IGNvbnN0IENBTlZBU19PTkxZX0FDVElPTlMgPSBbXCJzZWxlY3RBbGxcIl07XG5leHBvcnQgY29uc3QgR1JJRF9TSVpFID0gMjA7IC8vIFRPRE8gbWFrZSBpdCBjb25maWd1cmFibGU/XG5cbmV4cG9ydCBjb25zdCBNSU1FX1RZUEVTID0ge1xuICBleGNhbGlkcmF3OiBcImFwcGxpY2F0aW9uL3ZuZC5leGNhbGlkcmF3K2pzb25cIixcbiAgZXhjYWxpZHJhd2xpYjogXCJhcHBsaWNhdGlvbi92bmQuZXhjYWxpZHJhd2xpYitqc29uXCIsXG4gIGpzb246IFwiYXBwbGljYXRpb24vanNvblwiLFxuICBzdmc6IFwiaW1hZ2Uvc3ZnK3htbFwiLFxuICBwbmc6IFwiaW1hZ2UvcG5nXCIsXG4gIGpwZzogXCJpbWFnZS9qcGVnXCIsXG4gIGdpZjogXCJpbWFnZS9naWZcIixcbiAgYmluYXJ5OiBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwiXG59O1xuZXhwb3J0IGNvbnN0IEVYUE9SVF9EQVRBX1RZUEVTID0ge1xuICBleGNhbGlkcmF3OiBcImV4Y2FsaWRyYXdcIixcbiAgZXhjYWxpZHJhd0NsaXBib2FyZDogXCJleGNhbGlkcmF3L2NsaXBib2FyZFwiLFxuICBleGNhbGlkcmF3TGlicmFyeTogXCJleGNhbGlkcmF3bGliXCJcbn07XG5leHBvcnQgY29uc3QgRVhQT1JUX1NPVVJDRSA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47IC8vIHRpbWUgaW4gbWlsbGlzZWNvbmRzXG5cbmV4cG9ydCBjb25zdCBJTUFHRV9SRU5ERVJfVElNRU9VVCA9IDUwMDtcbmV4cG9ydCBjb25zdCBUQVBfVFdJQ0VfVElNRU9VVCA9IDMwMDtcbmV4cG9ydCBjb25zdCBUT1VDSF9DVFhfTUVOVV9USU1FT1VUID0gNTAwO1xuZXhwb3J0IGNvbnN0IFRJVExFX1RJTUVPVVQgPSAxMDAwMDtcbmV4cG9ydCBjb25zdCBUT0FTVF9USU1FT1VUID0gNTAwMDtcbmV4cG9ydCBjb25zdCBWRVJTSU9OX1RJTUVPVVQgPSAzMDAwMDtcbmV4cG9ydCBjb25zdCBTQ1JPTExfVElNRU9VVCA9IDEwMDtcbmV4cG9ydCBjb25zdCBaT09NX1NURVAgPSAwLjE7XG5leHBvcnQgY29uc3QgSFlQRVJMSU5LX1RPT0xUSVBfREVMQVkgPSAzMDA7IC8vIFJlcG9ydCBhIHVzZXIgaW5hY3RpdmUgYWZ0ZXIgSURMRV9USFJFU0hPTEQgbWlsbGlzZWNvbmRzXG5cbmV4cG9ydCBjb25zdCBJRExFX1RIUkVTSE9MRCA9IDYwXzAwMDsgLy8gUmVwb3J0IGEgdXNlciBhY3RpdmUgZWFjaCBBQ1RJVkVfVEhSRVNIT0xEIG1pbGxpc2Vjb25kc1xuXG5leHBvcnQgY29uc3QgQUNUSVZFX1RIUkVTSE9MRCA9IDNfMDAwO1xuZXhwb3J0IGNvbnN0IE1PREVTID0ge1xuICBWSUVXOiBcInZpZXdNb2RlXCIsXG4gIFpFTjogXCJ6ZW5Nb2RlXCIsXG4gIEdSSUQ6IFwiZ3JpZE1vZGVcIlxufTtcbmV4cG9ydCBjb25zdCBUSEVNRV9GSUxURVIgPSBjc3NWYXJpYWJsZXMudGhlbWVGaWx0ZXI7XG5leHBvcnQgY29uc3QgVVJMX1FVRVJZX0tFWVMgPSB7XG4gIGFkZExpYnJhcnk6IFwiYWRkTGlicmFyeVwiXG59O1xuZXhwb3J0IGNvbnN0IFVSTF9IQVNIX0tFWVMgPSB7XG4gIGFkZExpYnJhcnk6IFwiYWRkTGlicmFyeVwiXG59O1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfVUlfT1BUSU9OUyA9IHtcbiAgY2FudmFzQWN0aW9uczoge1xuICAgIGNoYW5nZVZpZXdCYWNrZ3JvdW5kQ29sb3I6IHRydWUsXG4gICAgY2xlYXJDYW52YXM6IHRydWUsXG4gICAgZXhwb3J0OiB7XG4gICAgICBzYXZlRmlsZVRvRGlzazogdHJ1ZVxuICAgIH0sXG4gICAgbG9hZFNjZW5lOiB0cnVlLFxuICAgIHNhdmVUb0FjdGl2ZUZpbGU6IHRydWUsXG4gICAgdGhlbWU6IHRydWUsXG4gICAgc2F2ZUFzSW1hZ2U6IHRydWVcbiAgfVxufTtcbmV4cG9ydCBjb25zdCBNUV9NQVhfV0lEVEhfUE9SVFJBSVQgPSA3MzA7XG5leHBvcnQgY29uc3QgTVFfTUFYX1dJRFRIX0xBTkRTQ0FQRSA9IDEwMDA7XG5leHBvcnQgY29uc3QgTVFfTUFYX0hFSUdIVF9MQU5EU0NBUEUgPSA1MDA7XG5leHBvcnQgY29uc3QgTUFYX0RFQ0lNQUxTX0ZPUl9TVkdfRVhQT1JUID0gMjtcbmV4cG9ydCBjb25zdCBFWFBPUlRfU0NBTEVTID0gWzEsIDIsIDNdO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRVhQT1JUX1BBRERJTkcgPSAxMDsgLy8gcHhcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTUFYX0lNQUdFX1dJRFRIX09SX0hFSUdIVCA9IDE0NDA7XG5leHBvcnQgY29uc3QgQUxMT1dFRF9JTUFHRV9NSU1FX1RZUEVTID0gW01JTUVfVFlQRVMucG5nLCBNSU1FX1RZUEVTLmpwZywgTUlNRV9UWVBFUy5zdmcsIE1JTUVfVFlQRVMuZ2lmXTtcbmV4cG9ydCBjb25zdCBNQVhfQUxMT1dFRF9GSUxFX0JZVEVTID0gMiAqIDEwMjQgKiAxMDI0O1xuZXhwb3J0IGNvbnN0IFNWR19OUyA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtcbmV4cG9ydCBjb25zdCBFTkNSWVBUSU9OX0tFWV9CSVRTID0gMTI4O1xuZXhwb3J0IGNvbnN0IFZFUlNJT05TID0ge1xuICBleGNhbGlkcmF3OiAyLFxuICBleGNhbGlkcmF3TGlicmFyeTogMlxufTtcbmV4cG9ydCBjb25zdCBCT1VORF9URVhUX1BBRERJTkcgPSA1O1xuZXhwb3J0IGNvbnN0IFZFUlRJQ0FMX0FMSUdOID0ge1xuICBUT1A6IFwidG9wXCIsXG4gIE1JRERMRTogXCJtaWRkbGVcIixcbiAgQk9UVE9NOiBcImJvdHRvbVwiXG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///../../constants.ts\\n\");\n\n//# sourceURL=webpack://Excalidraw/../../constants.ts?");
2437
+ eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ \\\"APP_NAME\\\": () => (/* binding */ APP_NAME),\\n/* harmony export */ \\\"DRAGGING_THRESHOLD\\\": () => (/* binding */ DRAGGING_THRESHOLD),\\n/* harmony export */ \\\"LINE_CONFIRM_THRESHOLD\\\": () => (/* binding */ LINE_CONFIRM_THRESHOLD),\\n/* harmony export */ \\\"ELEMENT_SHIFT_TRANSLATE_AMOUNT\\\": () => (/* binding */ ELEMENT_SHIFT_TRANSLATE_AMOUNT),\\n/* harmony export */ \\\"ELEMENT_TRANSLATE_AMOUNT\\\": () => (/* binding */ ELEMENT_TRANSLATE_AMOUNT),\\n/* harmony export */ \\\"TEXT_TO_CENTER_SNAP_THRESHOLD\\\": () => (/* binding */ TEXT_TO_CENTER_SNAP_THRESHOLD),\\n/* harmony export */ \\\"SHIFT_LOCKING_ANGLE\\\": () => (/* binding */ SHIFT_LOCKING_ANGLE),\\n/* harmony export */ \\\"CURSOR_TYPE\\\": () => (/* binding */ CURSOR_TYPE),\\n/* harmony export */ \\\"POINTER_BUTTON\\\": () => (/* binding */ POINTER_BUTTON),\\n/* harmony export */ \\\"EVENT\\\": () => (/* binding */ EVENT),\\n/* harmony export */ \\\"ENV\\\": () => (/* binding */ ENV),\\n/* harmony export */ \\\"CLASSES\\\": () => (/* binding */ CLASSES),\\n/* harmony export */ \\\"FONT_FAMILY\\\": () => (/* binding */ FONT_FAMILY),\\n/* harmony export */ \\\"THEME\\\": () => (/* binding */ THEME),\\n/* harmony export */ \\\"WINDOWS_EMOJI_FALLBACK_FONT\\\": () => (/* binding */ WINDOWS_EMOJI_FALLBACK_FONT),\\n/* harmony export */ \\\"DEFAULT_FONT_SIZE\\\": () => (/* binding */ DEFAULT_FONT_SIZE),\\n/* harmony export */ \\\"DEFAULT_FONT_FAMILY\\\": () => (/* binding */ DEFAULT_FONT_FAMILY),\\n/* harmony export */ \\\"DEFAULT_TEXT_ALIGN\\\": () => (/* binding */ DEFAULT_TEXT_ALIGN),\\n/* harmony export */ \\\"DEFAULT_VERTICAL_ALIGN\\\": () => (/* binding */ DEFAULT_VERTICAL_ALIGN),\\n/* harmony export */ \\\"DEFAULT_VERSION\\\": () => (/* binding */ DEFAULT_VERSION),\\n/* harmony export */ \\\"CANVAS_ONLY_ACTIONS\\\": () => (/* binding */ CANVAS_ONLY_ACTIONS),\\n/* harmony export */ \\\"GRID_SIZE\\\": () => (/* binding */ GRID_SIZE),\\n/* harmony export */ \\\"MIME_TYPES\\\": () => (/* binding */ MIME_TYPES),\\n/* harmony export */ \\\"EXPORT_DATA_TYPES\\\": () => (/* binding */ EXPORT_DATA_TYPES),\\n/* harmony export */ \\\"EXPORT_SOURCE\\\": () => (/* binding */ EXPORT_SOURCE),\\n/* harmony export */ \\\"IMAGE_RENDER_TIMEOUT\\\": () => (/* binding */ IMAGE_RENDER_TIMEOUT),\\n/* harmony export */ \\\"TAP_TWICE_TIMEOUT\\\": () => (/* binding */ TAP_TWICE_TIMEOUT),\\n/* harmony export */ \\\"TOUCH_CTX_MENU_TIMEOUT\\\": () => (/* binding */ TOUCH_CTX_MENU_TIMEOUT),\\n/* harmony export */ \\\"TITLE_TIMEOUT\\\": () => (/* binding */ TITLE_TIMEOUT),\\n/* harmony export */ \\\"TOAST_TIMEOUT\\\": () => (/* binding */ TOAST_TIMEOUT),\\n/* harmony export */ \\\"VERSION_TIMEOUT\\\": () => (/* binding */ VERSION_TIMEOUT),\\n/* harmony export */ \\\"SCROLL_TIMEOUT\\\": () => (/* binding */ SCROLL_TIMEOUT),\\n/* harmony export */ \\\"ZOOM_STEP\\\": () => (/* binding */ ZOOM_STEP),\\n/* harmony export */ \\\"HYPERLINK_TOOLTIP_DELAY\\\": () => (/* binding */ HYPERLINK_TOOLTIP_DELAY),\\n/* harmony export */ \\\"IDLE_THRESHOLD\\\": () => (/* binding */ IDLE_THRESHOLD),\\n/* harmony export */ \\\"ACTIVE_THRESHOLD\\\": () => (/* binding */ ACTIVE_THRESHOLD),\\n/* harmony export */ \\\"MODES\\\": () => (/* binding */ MODES),\\n/* harmony export */ \\\"THEME_FILTER\\\": () => (/* binding */ THEME_FILTER),\\n/* harmony export */ \\\"URL_QUERY_KEYS\\\": () => (/* binding */ URL_QUERY_KEYS),\\n/* harmony export */ \\\"URL_HASH_KEYS\\\": () => (/* binding */ URL_HASH_KEYS),\\n/* harmony export */ \\\"DEFAULT_UI_OPTIONS\\\": () => (/* binding */ DEFAULT_UI_OPTIONS),\\n/* harmony export */ \\\"MQ_MAX_WIDTH_PORTRAIT\\\": () => (/* binding */ MQ_MAX_WIDTH_PORTRAIT),\\n/* harmony export */ \\\"MQ_MAX_WIDTH_LANDSCAPE\\\": () => (/* binding */ MQ_MAX_WIDTH_LANDSCAPE),\\n/* harmony export */ \\\"MQ_MAX_HEIGHT_LANDSCAPE\\\": () => (/* binding */ MQ_MAX_HEIGHT_LANDSCAPE),\\n/* harmony export */ \\\"MAX_DECIMALS_FOR_SVG_EXPORT\\\": () => (/* binding */ MAX_DECIMALS_FOR_SVG_EXPORT),\\n/* harmony export */ \\\"EXPORT_SCALES\\\": () => (/* binding */ EXPORT_SCALES),\\n/* harmony export */ \\\"DEFAULT_EXPORT_PADDING\\\": () => (/* binding */ DEFAULT_EXPORT_PADDING),\\n/* harmony export */ \\\"DEFAULT_MAX_IMAGE_WIDTH_OR_HEIGHT\\\": () => (/* binding */ DEFAULT_MAX_IMAGE_WIDTH_OR_HEIGHT),\\n/* harmony export */ \\\"ALLOWED_IMAGE_MIME_TYPES\\\": () => (/* binding */ ALLOWED_IMAGE_MIME_TYPES),\\n/* harmony export */ \\\"MAX_ALLOWED_FILE_BYTES\\\": () => (/* binding */ MAX_ALLOWED_FILE_BYTES),\\n/* harmony export */ \\\"SVG_NS\\\": () => (/* binding */ SVG_NS),\\n/* harmony export */ \\\"ENCRYPTION_KEY_BITS\\\": () => (/* binding */ ENCRYPTION_KEY_BITS),\\n/* harmony export */ \\\"VERSIONS\\\": () => (/* binding */ VERSIONS),\\n/* harmony export */ \\\"BOUND_TEXT_PADDING\\\": () => (/* binding */ BOUND_TEXT_PADDING),\\n/* harmony export */ \\\"VERTICAL_ALIGN\\\": () => (/* binding */ VERTICAL_ALIGN)\\n/* harmony export */ });\\n/* harmony import */ var _css_variables_module_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./css/variables.module.scss */ \\\"../../css/variables.module.scss\\\");\\n/* harmony import */ var _css_variables_module_scss__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_css_variables_module_scss__WEBPACK_IMPORTED_MODULE_0__);\\n\\r\\nconst APP_NAME = \\\"Excalidraw\\\";\\r\\nconst DRAGGING_THRESHOLD = 10; // px\\r\\nconst LINE_CONFIRM_THRESHOLD = 8; // px\\r\\nconst ELEMENT_SHIFT_TRANSLATE_AMOUNT = 5;\\r\\nconst ELEMENT_TRANSLATE_AMOUNT = 1;\\r\\nconst TEXT_TO_CENTER_SNAP_THRESHOLD = 30;\\r\\nconst SHIFT_LOCKING_ANGLE = Math.PI / 12;\\r\\nconst CURSOR_TYPE = {\\r\\n TEXT: \\\"text\\\",\\r\\n CROSSHAIR: \\\"crosshair\\\",\\r\\n GRABBING: \\\"grabbing\\\",\\r\\n GRAB: \\\"grab\\\",\\r\\n POINTER: \\\"pointer\\\",\\r\\n MOVE: \\\"move\\\",\\r\\n AUTO: \\\"\\\"\\r\\n};\\r\\nconst POINTER_BUTTON = {\\r\\n MAIN: 0,\\r\\n WHEEL: 1,\\r\\n SECONDARY: 2,\\r\\n TOUCH: -1\\r\\n};\\r\\nlet EVENT;\\r\\n(function (EVENT) {\\r\\n EVENT[\\\"COPY\\\"] = \\\"copy\\\";\\r\\n EVENT[\\\"PASTE\\\"] = \\\"paste\\\";\\r\\n EVENT[\\\"CUT\\\"] = \\\"cut\\\";\\r\\n EVENT[\\\"KEYDOWN\\\"] = \\\"keydown\\\";\\r\\n EVENT[\\\"KEYUP\\\"] = \\\"keyup\\\";\\r\\n EVENT[\\\"MOUSE_MOVE\\\"] = \\\"mousemove\\\";\\r\\n EVENT[\\\"RESIZE\\\"] = \\\"resize\\\";\\r\\n EVENT[\\\"UNLOAD\\\"] = \\\"unload\\\";\\r\\n EVENT[\\\"FOCUS\\\"] = \\\"focus\\\";\\r\\n EVENT[\\\"BLUR\\\"] = \\\"blur\\\";\\r\\n EVENT[\\\"DRAG_OVER\\\"] = \\\"dragover\\\";\\r\\n EVENT[\\\"DROP\\\"] = \\\"drop\\\";\\r\\n EVENT[\\\"GESTURE_END\\\"] = \\\"gestureend\\\";\\r\\n EVENT[\\\"BEFORE_UNLOAD\\\"] = \\\"beforeunload\\\";\\r\\n EVENT[\\\"GESTURE_START\\\"] = \\\"gesturestart\\\";\\r\\n EVENT[\\\"GESTURE_CHANGE\\\"] = \\\"gesturechange\\\";\\r\\n EVENT[\\\"POINTER_MOVE\\\"] = \\\"pointermove\\\";\\r\\n EVENT[\\\"POINTER_UP\\\"] = \\\"pointerup\\\";\\r\\n EVENT[\\\"STATE_CHANGE\\\"] = \\\"statechange\\\";\\r\\n EVENT[\\\"WHEEL\\\"] = \\\"wheel\\\";\\r\\n EVENT[\\\"TOUCH_START\\\"] = \\\"touchstart\\\";\\r\\n EVENT[\\\"TOUCH_END\\\"] = \\\"touchend\\\";\\r\\n EVENT[\\\"HASHCHANGE\\\"] = \\\"hashchange\\\";\\r\\n EVENT[\\\"VISIBILITY_CHANGE\\\"] = \\\"visibilitychange\\\";\\r\\n EVENT[\\\"SCROLL\\\"] = \\\"scroll\\\";\\r\\n EVENT[\\\"EXCALIDRAW_LINK\\\"] = \\\"excalidraw-link\\\";\\r\\n})(EVENT || (EVENT = {}));\\r\\nconst ENV = {\\r\\n TEST: \\\"test\\\",\\r\\n DEVELOPMENT: \\\"development\\\"\\r\\n};\\r\\nconst CLASSES = {\\r\\n SHAPE_ACTIONS_MENU: \\\"App-menu__left\\\",\\r\\n SHAPE_ACTIONS_MOBILE_MENU: \\\"App-mobile-menu\\\",\\r\\n //zsviczian\\r\\n MOBILE_TOOLBAR: \\\"App-toolbar-content\\\" //zsviczian\\r\\n}; // 1-based in case we ever do `if(element.fontFamily)`\\r\\nconst FONT_FAMILY = {\\r\\n Virgil: 1,\\r\\n Helvetica: 2,\\r\\n Cascadia: 3,\\r\\n LocalFont: 4\\r\\n};\\r\\nconst THEME = {\\r\\n LIGHT: \\\"light\\\",\\r\\n DARK: \\\"dark\\\"\\r\\n};\\r\\nconst WINDOWS_EMOJI_FALLBACK_FONT = \\\"Segoe UI Emoji\\\";\\r\\nconst DEFAULT_FONT_SIZE = 20;\\r\\nconst DEFAULT_FONT_FAMILY = FONT_FAMILY.Virgil;\\r\\nconst DEFAULT_TEXT_ALIGN = \\\"left\\\";\\r\\nconst DEFAULT_VERTICAL_ALIGN = \\\"top\\\";\\r\\nconst DEFAULT_VERSION = \\\"{version}\\\";\\r\\nconst CANVAS_ONLY_ACTIONS = [\\\"selectAll\\\"];\\r\\nconst GRID_SIZE = 20; // TODO make it configurable?\\r\\nconst MIME_TYPES = {\\r\\n excalidraw: \\\"application/vnd.excalidraw+json\\\",\\r\\n excalidrawlib: \\\"application/vnd.excalidrawlib+json\\\",\\r\\n json: \\\"application/json\\\",\\r\\n svg: \\\"image/svg+xml\\\",\\r\\n png: \\\"image/png\\\",\\r\\n jpg: \\\"image/jpeg\\\",\\r\\n gif: \\\"image/gif\\\",\\r\\n binary: \\\"application/octet-stream\\\"\\r\\n};\\r\\nconst EXPORT_DATA_TYPES = {\\r\\n excalidraw: \\\"excalidraw\\\",\\r\\n excalidrawClipboard: \\\"excalidraw/clipboard\\\",\\r\\n excalidrawLibrary: \\\"excalidrawlib\\\"\\r\\n};\\r\\nconst EXPORT_SOURCE = window.location.origin; // time in milliseconds\\r\\nconst IMAGE_RENDER_TIMEOUT = 500;\\r\\nconst TAP_TWICE_TIMEOUT = 300;\\r\\nconst TOUCH_CTX_MENU_TIMEOUT = 500;\\r\\nconst TITLE_TIMEOUT = 10000;\\r\\nconst TOAST_TIMEOUT = 5000;\\r\\nconst VERSION_TIMEOUT = 30000;\\r\\nconst SCROLL_TIMEOUT = 100;\\r\\nconst ZOOM_STEP = 0.1;\\r\\nconst HYPERLINK_TOOLTIP_DELAY = 300; // Report a user inactive after IDLE_THRESHOLD milliseconds\\r\\nconst IDLE_THRESHOLD = 60000; // Report a user active each ACTIVE_THRESHOLD milliseconds\\r\\nconst ACTIVE_THRESHOLD = 3000;\\r\\nconst MODES = {\\r\\n VIEW: \\\"viewMode\\\",\\r\\n ZEN: \\\"zenMode\\\",\\r\\n GRID: \\\"gridMode\\\"\\r\\n};\\r\\nconst THEME_FILTER = (_css_variables_module_scss__WEBPACK_IMPORTED_MODULE_0___default().themeFilter);\\r\\nconst URL_QUERY_KEYS = {\\r\\n addLibrary: \\\"addLibrary\\\"\\r\\n};\\r\\nconst URL_HASH_KEYS = {\\r\\n addLibrary: \\\"addLibrary\\\"\\r\\n};\\r\\nconst DEFAULT_UI_OPTIONS = {\\r\\n canvasActions: {\\r\\n changeViewBackgroundColor: true,\\r\\n clearCanvas: true,\\r\\n export: {\\r\\n saveFileToDisk: true\\r\\n },\\r\\n loadScene: true,\\r\\n saveToActiveFile: true,\\r\\n theme: true,\\r\\n saveAsImage: true\\r\\n }\\r\\n};\\r\\nconst MQ_MAX_WIDTH_PORTRAIT = 730;\\r\\nconst MQ_MAX_WIDTH_LANDSCAPE = 1000;\\r\\nconst MQ_MAX_HEIGHT_LANDSCAPE = 500;\\r\\nconst MAX_DECIMALS_FOR_SVG_EXPORT = 2;\\r\\nconst EXPORT_SCALES = [1, 2, 3];\\r\\nconst DEFAULT_EXPORT_PADDING = 10; // px\\r\\nconst DEFAULT_MAX_IMAGE_WIDTH_OR_HEIGHT = 1440;\\r\\nconst ALLOWED_IMAGE_MIME_TYPES = [MIME_TYPES.png, MIME_TYPES.jpg, MIME_TYPES.svg, MIME_TYPES.gif];\\r\\nconst MAX_ALLOWED_FILE_BYTES = 2 * 1024 * 1024;\\r\\nconst SVG_NS = \\\"http://www.w3.org/2000/svg\\\";\\r\\nconst ENCRYPTION_KEY_BITS = 128;\\r\\nconst VERSIONS = {\\r\\n excalidraw: 2,\\r\\n excalidrawLibrary: 2\\r\\n};\\r\\nconst BOUND_TEXT_PADDING = 5;\\r\\nconst VERTICAL_ALIGN = {\\r\\n TOP: \\\"top\\\",\\r\\n MIDDLE: \\\"middle\\\",\\r\\n BOTTOM: \\\"bottom\\\"\\r\\n};\\r\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjc3NWYXJpYWJsZXMgZnJvbSBcIi4vY3NzL3ZhcmlhYmxlcy5tb2R1bGUuc2Nzc1wiO1xuZXhwb3J0IGNvbnN0IEFQUF9OQU1FID0gXCJFeGNhbGlkcmF3XCI7XG5leHBvcnQgY29uc3QgRFJBR0dJTkdfVEhSRVNIT0xEID0gMTA7IC8vIHB4XG5cbmV4cG9ydCBjb25zdCBMSU5FX0NPTkZJUk1fVEhSRVNIT0xEID0gODsgLy8gcHhcblxuZXhwb3J0IGNvbnN0IEVMRU1FTlRfU0hJRlRfVFJBTlNMQVRFX0FNT1VOVCA9IDU7XG5leHBvcnQgY29uc3QgRUxFTUVOVF9UUkFOU0xBVEVfQU1PVU5UID0gMTtcbmV4cG9ydCBjb25zdCBURVhUX1RPX0NFTlRFUl9TTkFQX1RIUkVTSE9MRCA9IDMwO1xuZXhwb3J0IGNvbnN0IFNISUZUX0xPQ0tJTkdfQU5HTEUgPSBNYXRoLlBJIC8gMTI7XG5leHBvcnQgY29uc3QgQ1VSU09SX1RZUEUgPSB7XG4gIFRFWFQ6IFwidGV4dFwiLFxuICBDUk9TU0hBSVI6IFwiY3Jvc3NoYWlyXCIsXG4gIEdSQUJCSU5HOiBcImdyYWJiaW5nXCIsXG4gIEdSQUI6IFwiZ3JhYlwiLFxuICBQT0lOVEVSOiBcInBvaW50ZXJcIixcbiAgTU9WRTogXCJtb3ZlXCIsXG4gIEFVVE86IFwiXCJcbn07XG5leHBvcnQgY29uc3QgUE9JTlRFUl9CVVRUT04gPSB7XG4gIE1BSU46IDAsXG4gIFdIRUVMOiAxLFxuICBTRUNPTkRBUlk6IDIsXG4gIFRPVUNIOiAtMVxufTtcbmV4cG9ydCBsZXQgRVZFTlQ7XG5cbihmdW5jdGlvbiAoRVZFTlQpIHtcbiAgRVZFTlRbXCJDT1BZXCJdID0gXCJjb3B5XCI7XG4gIEVWRU5UW1wiUEFTVEVcIl0gPSBcInBhc3RlXCI7XG4gIEVWRU5UW1wiQ1VUXCJdID0gXCJjdXRcIjtcbiAgRVZFTlRbXCJLRVlET1dOXCJdID0gXCJrZXlkb3duXCI7XG4gIEVWRU5UW1wiS0VZVVBcIl0gPSBcImtleXVwXCI7XG4gIEVWRU5UW1wiTU9VU0VfTU9WRVwiXSA9IFwibW91c2Vtb3ZlXCI7XG4gIEVWRU5UW1wiUkVTSVpFXCJdID0gXCJyZXNpemVcIjtcbiAgRVZFTlRbXCJVTkxPQURcIl0gPSBcInVubG9hZFwiO1xuICBFVkVOVFtcIkZPQ1VTXCJdID0gXCJmb2N1c1wiO1xuICBFVkVOVFtcIkJMVVJcIl0gPSBcImJsdXJcIjtcbiAgRVZFTlRbXCJEUkFHX09WRVJcIl0gPSBcImRyYWdvdmVyXCI7XG4gIEVWRU5UW1wiRFJPUFwiXSA9IFwiZHJvcFwiO1xuICBFVkVOVFtcIkdFU1RVUkVfRU5EXCJdID0gXCJnZXN0dXJlZW5kXCI7XG4gIEVWRU5UW1wiQkVGT1JFX1VOTE9BRFwiXSA9IFwiYmVmb3JldW5sb2FkXCI7XG4gIEVWRU5UW1wiR0VTVFVSRV9TVEFSVFwiXSA9IFwiZ2VzdHVyZXN0YXJ0XCI7XG4gIEVWRU5UW1wiR0VTVFVSRV9DSEFOR0VcIl0gPSBcImdlc3R1cmVjaGFuZ2VcIjtcbiAgRVZFTlRbXCJQT0lOVEVSX01PVkVcIl0gPSBcInBvaW50ZXJtb3ZlXCI7XG4gIEVWRU5UW1wiUE9JTlRFUl9VUFwiXSA9IFwicG9pbnRlcnVwXCI7XG4gIEVWRU5UW1wiU1RBVEVfQ0hBTkdFXCJdID0gXCJzdGF0ZWNoYW5nZVwiO1xuICBFVkVOVFtcIldIRUVMXCJdID0gXCJ3aGVlbFwiO1xuICBFVkVOVFtcIlRPVUNIX1NUQVJUXCJdID0gXCJ0b3VjaHN0YXJ0XCI7XG4gIEVWRU5UW1wiVE9VQ0hfRU5EXCJdID0gXCJ0b3VjaGVuZFwiO1xuICBFVkVOVFtcIkhBU0hDSEFOR0VcIl0gPSBcImhhc2hjaGFuZ2VcIjtcbiAgRVZFTlRbXCJWSVNJQklMSVRZX0NIQU5HRVwiXSA9IFwidmlzaWJpbGl0eWNoYW5nZVwiO1xuICBFVkVOVFtcIlNDUk9MTFwiXSA9IFwic2Nyb2xsXCI7XG4gIEVWRU5UW1wiRVhDQUxJRFJBV19MSU5LXCJdID0gXCJleGNhbGlkcmF3LWxpbmtcIjtcbn0pKEVWRU5UIHx8IChFVkVOVCA9IHt9KSk7XG5cbmV4cG9ydCBjb25zdCBFTlYgPSB7XG4gIFRFU1Q6IFwidGVzdFwiLFxuICBERVZFTE9QTUVOVDogXCJkZXZlbG9wbWVudFwiXG59O1xuZXhwb3J0IGNvbnN0IENMQVNTRVMgPSB7XG4gIFNIQVBFX0FDVElPTlNfTUVOVTogXCJBcHAtbWVudV9fbGVmdFwiLFxuICBTSEFQRV9BQ1RJT05TX01PQklMRV9NRU5VOiBcIkFwcC1tb2JpbGUtbWVudVwiLFxuICAvL3pzdmljemlhblxuICBNT0JJTEVfVE9PTEJBUjogXCJBcHAtdG9vbGJhci1jb250ZW50XCIgLy96c3ZpY3ppYW5cblxufTsgLy8gMS1iYXNlZCBpbiBjYXNlIHdlIGV2ZXIgZG8gYGlmKGVsZW1lbnQuZm9udEZhbWlseSlgXG5cbmV4cG9ydCBjb25zdCBGT05UX0ZBTUlMWSA9IHtcbiAgVmlyZ2lsOiAxLFxuICBIZWx2ZXRpY2E6IDIsXG4gIENhc2NhZGlhOiAzLFxuICBMb2NhbEZvbnQ6IDRcbn07XG5leHBvcnQgY29uc3QgVEhFTUUgPSB7XG4gIExJR0hUOiBcImxpZ2h0XCIsXG4gIERBUks6IFwiZGFya1wiXG59O1xuZXhwb3J0IGNvbnN0IFdJTkRPV1NfRU1PSklfRkFMTEJBQ0tfRk9OVCA9IFwiU2Vnb2UgVUkgRW1vamlcIjtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0ZPTlRfU0laRSA9IDIwO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfRk9OVF9GQU1JTFkgPSBGT05UX0ZBTUlMWS5WaXJnaWw7XG5leHBvcnQgY29uc3QgREVGQVVMVF9URVhUX0FMSUdOID0gXCJsZWZ0XCI7XG5leHBvcnQgY29uc3QgREVGQVVMVF9WRVJUSUNBTF9BTElHTiA9IFwidG9wXCI7XG5leHBvcnQgY29uc3QgREVGQVVMVF9WRVJTSU9OID0gXCJ7dmVyc2lvbn1cIjtcbmV4cG9ydCBjb25zdCBDQU5WQVNfT05MWV9BQ1RJT05TID0gW1wic2VsZWN0QWxsXCJdO1xuZXhwb3J0IGNvbnN0IEdSSURfU0laRSA9IDIwOyAvLyBUT0RPIG1ha2UgaXQgY29uZmlndXJhYmxlP1xuXG5leHBvcnQgY29uc3QgTUlNRV9UWVBFUyA9IHtcbiAgZXhjYWxpZHJhdzogXCJhcHBsaWNhdGlvbi92bmQuZXhjYWxpZHJhdytqc29uXCIsXG4gIGV4Y2FsaWRyYXdsaWI6IFwiYXBwbGljYXRpb24vdm5kLmV4Y2FsaWRyYXdsaWIranNvblwiLFxuICBqc29uOiBcImFwcGxpY2F0aW9uL2pzb25cIixcbiAgc3ZnOiBcImltYWdlL3N2Zyt4bWxcIixcbiAgcG5nOiBcImltYWdlL3BuZ1wiLFxuICBqcGc6IFwiaW1hZ2UvanBlZ1wiLFxuICBnaWY6IFwiaW1hZ2UvZ2lmXCIsXG4gIGJpbmFyeTogXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIlxufTtcbmV4cG9ydCBjb25zdCBFWFBPUlRfREFUQV9UWVBFUyA9IHtcbiAgZXhjYWxpZHJhdzogXCJleGNhbGlkcmF3XCIsXG4gIGV4Y2FsaWRyYXdDbGlwYm9hcmQ6IFwiZXhjYWxpZHJhdy9jbGlwYm9hcmRcIixcbiAgZXhjYWxpZHJhd0xpYnJhcnk6IFwiZXhjYWxpZHJhd2xpYlwiXG59O1xuZXhwb3J0IGNvbnN0IEVYUE9SVF9TT1VSQ0UgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luOyAvLyB0aW1lIGluIG1pbGxpc2Vjb25kc1xuXG5leHBvcnQgY29uc3QgSU1BR0VfUkVOREVSX1RJTUVPVVQgPSA1MDA7XG5leHBvcnQgY29uc3QgVEFQX1RXSUNFX1RJTUVPVVQgPSAzMDA7XG5leHBvcnQgY29uc3QgVE9VQ0hfQ1RYX01FTlVfVElNRU9VVCA9IDUwMDtcbmV4cG9ydCBjb25zdCBUSVRMRV9USU1FT1VUID0gMTAwMDA7XG5leHBvcnQgY29uc3QgVE9BU1RfVElNRU9VVCA9IDUwMDA7XG5leHBvcnQgY29uc3QgVkVSU0lPTl9USU1FT1VUID0gMzAwMDA7XG5leHBvcnQgY29uc3QgU0NST0xMX1RJTUVPVVQgPSAxMDA7XG5leHBvcnQgY29uc3QgWk9PTV9TVEVQID0gMC4xO1xuZXhwb3J0IGNvbnN0IEhZUEVSTElOS19UT09MVElQX0RFTEFZID0gMzAwOyAvLyBSZXBvcnQgYSB1c2VyIGluYWN0aXZlIGFmdGVyIElETEVfVEhSRVNIT0xEIG1pbGxpc2Vjb25kc1xuXG5leHBvcnQgY29uc3QgSURMRV9USFJFU0hPTEQgPSA2MF8wMDA7IC8vIFJlcG9ydCBhIHVzZXIgYWN0aXZlIGVhY2ggQUNUSVZFX1RIUkVTSE9MRCBtaWxsaXNlY29uZHNcblxuZXhwb3J0IGNvbnN0IEFDVElWRV9USFJFU0hPTEQgPSAzXzAwMDtcbmV4cG9ydCBjb25zdCBNT0RFUyA9IHtcbiAgVklFVzogXCJ2aWV3TW9kZVwiLFxuICBaRU46IFwiemVuTW9kZVwiLFxuICBHUklEOiBcImdyaWRNb2RlXCJcbn07XG5leHBvcnQgY29uc3QgVEhFTUVfRklMVEVSID0gY3NzVmFyaWFibGVzLnRoZW1lRmlsdGVyO1xuZXhwb3J0IGNvbnN0IFVSTF9RVUVSWV9LRVlTID0ge1xuICBhZGRMaWJyYXJ5OiBcImFkZExpYnJhcnlcIlxufTtcbmV4cG9ydCBjb25zdCBVUkxfSEFTSF9LRVlTID0ge1xuICBhZGRMaWJyYXJ5OiBcImFkZExpYnJhcnlcIlxufTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX1VJX09QVElPTlMgPSB7XG4gIGNhbnZhc0FjdGlvbnM6IHtcbiAgICBjaGFuZ2VWaWV3QmFja2dyb3VuZENvbG9yOiB0cnVlLFxuICAgIGNsZWFyQ2FudmFzOiB0cnVlLFxuICAgIGV4cG9ydDoge1xuICAgICAgc2F2ZUZpbGVUb0Rpc2s6IHRydWVcbiAgICB9LFxuICAgIGxvYWRTY2VuZTogdHJ1ZSxcbiAgICBzYXZlVG9BY3RpdmVGaWxlOiB0cnVlLFxuICAgIHRoZW1lOiB0cnVlLFxuICAgIHNhdmVBc0ltYWdlOiB0cnVlXG4gIH1cbn07XG5leHBvcnQgY29uc3QgTVFfTUFYX1dJRFRIX1BPUlRSQUlUID0gNzMwO1xuZXhwb3J0IGNvbnN0IE1RX01BWF9XSURUSF9MQU5EU0NBUEUgPSAxMDAwO1xuZXhwb3J0IGNvbnN0IE1RX01BWF9IRUlHSFRfTEFORFNDQVBFID0gNTAwO1xuZXhwb3J0IGNvbnN0IE1BWF9ERUNJTUFMU19GT1JfU1ZHX0VYUE9SVCA9IDI7XG5leHBvcnQgY29uc3QgRVhQT1JUX1NDQUxFUyA9IFsxLCAyLCAzXTtcbmV4cG9ydCBjb25zdCBERUZBVUxUX0VYUE9SVF9QQURESU5HID0gMTA7IC8vIHB4XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX01BWF9JTUFHRV9XSURUSF9PUl9IRUlHSFQgPSAxNDQwO1xuZXhwb3J0IGNvbnN0IEFMTE9XRURfSU1BR0VfTUlNRV9UWVBFUyA9IFtNSU1FX1RZUEVTLnBuZywgTUlNRV9UWVBFUy5qcGcsIE1JTUVfVFlQRVMuc3ZnLCBNSU1FX1RZUEVTLmdpZl07XG5leHBvcnQgY29uc3QgTUFYX0FMTE9XRURfRklMRV9CWVRFUyA9IDIgKiAxMDI0ICogMTAyNDtcbmV4cG9ydCBjb25zdCBTVkdfTlMgPSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI7XG5leHBvcnQgY29uc3QgRU5DUllQVElPTl9LRVlfQklUUyA9IDEyODtcbmV4cG9ydCBjb25zdCBWRVJTSU9OUyA9IHtcbiAgZXhjYWxpZHJhdzogMixcbiAgZXhjYWxpZHJhd0xpYnJhcnk6IDJcbn07XG5leHBvcnQgY29uc3QgQk9VTkRfVEVYVF9QQURESU5HID0gNTtcbmV4cG9ydCBjb25zdCBWRVJUSUNBTF9BTElHTiA9IHtcbiAgVE9QOiBcInRvcFwiLFxuICBNSURETEU6IFwibWlkZGxlXCIsXG4gIEJPVFRPTTogXCJib3R0b21cIlxufTsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///../../constants.ts\\n\");\n\n//# sourceURL=webpack://Excalidraw/../../constants.ts?");
2438
2438
 
2439
2439
  /***/ }),
2440
2440
 
@@ -2731,7 +2731,7 @@ eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */
2731
2731
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2732
2732
 
2733
2733
  "use strict";
2734
- eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ \\\"textWysiwyg\\\": () => (/* binding */ textWysiwyg)\\n/* harmony export */ });\\n/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../keys */ \\\"../../keys.ts\\\");\\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils */ \\\"../../utils.ts\\\");\\n/* harmony import */ var _scene_Scene__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../scene/Scene */ \\\"../../scene/Scene.ts\\\");\\n/* harmony import */ var _typeChecks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeChecks */ \\\"../../element/typeChecks.ts\\\");\\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../constants */ \\\"../../constants.ts\\\");\\n/* harmony import */ var _mutateElement__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./mutateElement */ \\\"../../element/mutateElement.ts\\\");\\n/* harmony import */ var _textElement__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./textElement */ \\\"../../element/textElement.ts\\\");\\n/* harmony import */ var _actions_actionProperties__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../actions/actionProperties */ \\\"../../actions/actionProperties.tsx\\\");\\n/* harmony import */ var _actions_actionCanvas__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../actions/actionCanvas */ \\\"../../actions/actionCanvas.tsx\\\");\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\nconst normalizeText = function (text) {\\r\\n return text // replace tabs with spaces so they render and measure correctly\\r\\n .replace(/\\\\t/g, \\\" \\\") // normalize newlines\\r\\n .replace(/\\\\r?\\\\n|\\\\r/g, \\\"\\\\n\\\");\\r\\n};\\r\\nconst getTransform = function (width, height, angle, appState, maxWidth, maxHeight) {\\r\\n const { zoom } = appState;\\r\\n const degree = 180 * angle / Math.PI;\\r\\n let translateX = width * (zoom.value - 1) / 2;\\r\\n let translateY = height * (zoom.value - 1) / 2;\\r\\n if (width > maxWidth && zoom.value !== 1) {\\r\\n translateX = maxWidth * (zoom.value - 1) / 2;\\r\\n }\\r\\n if (height > maxHeight && zoom.value !== 1) {\\r\\n translateY = maxHeight * (zoom.value - 1) / 2;\\r\\n }\\r\\n return `translate(${translateX}px, ${translateY}px) scale(${zoom.value}) rotate(${degree}deg)`;\\r\\n};\\r\\nconst textWysiwyg = function (_ref) {\\r\\n let { id, onChange, onSubmit, getViewportCoords, element, canvas, excalidrawContainer, app } = _ref;\\r\\n const textPropertiesUpdated = function (updatedElement, editable) {\\r\\n const currentFont = editable.style.fontFamily.replace(/\\\"/g, \\\"\\\");\\r\\n if ((0,_utils__WEBPACK_IMPORTED_MODULE_1__.getFontFamilyString)({\\r\\n fontFamily: updatedElement.fontFamily\\r\\n }) !== currentFont) {\\r\\n return true;\\r\\n }\\r\\n if (`${updatedElement.fontSize}px` !== editable.style.fontSize) {\\r\\n return true;\\r\\n }\\r\\n return false;\\r\\n };\\r\\n let originalContainerHeight;\\r\\n const updateWysiwygStyle = function () {\\r\\n var _a;\\r\\n const appState = app.state;\\r\\n const updatedElement = (_a = _scene_Scene__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"].getScene(element)) === null || _a === void 0 ? void 0 : _a.getElement(id);\\r\\n const { textAlign, verticalAlign } = updatedElement;\\r\\n const approxLineHeight = (0,_textElement__WEBPACK_IMPORTED_MODULE_6__.getApproxLineHeight)((0,_utils__WEBPACK_IMPORTED_MODULE_1__.getFontString)(updatedElement));\\r\\n if (updatedElement && (0,_typeChecks__WEBPACK_IMPORTED_MODULE_3__.isTextElement)(updatedElement)) {\\r\\n let coordX = updatedElement.x;\\r\\n let coordY = updatedElement.y;\\r\\n const container = (0,_textElement__WEBPACK_IMPORTED_MODULE_6__.getContainerElement)(updatedElement);\\r\\n let maxWidth = updatedElement.width;\\r\\n let maxHeight = updatedElement.height;\\r\\n let width = updatedElement.width; // Set to element height by default since that's\\r\\n // what is going to be used for unbounded text\\r\\n let height = updatedElement.height;\\r\\n if (container && updatedElement.containerId) {\\r\\n const propertiesUpdated = textPropertiesUpdated(updatedElement, editable); // using editor.style.height to get the accurate height of text editor\\r\\n const editorHeight = Number(editable.style.height.slice(0, -2));\\r\\n if (editorHeight > 0) {\\r\\n height = editorHeight;\\r\\n }\\r\\n if (propertiesUpdated) {\\r\\n originalContainerHeight = container.height; // update height of the editor after properties updated\\r\\n height = updatedElement.height;\\r\\n }\\r\\n if (!originalContainerHeight) {\\r\\n originalContainerHeight = container.height;\\r\\n }\\r\\n maxWidth = container.width - _constants__WEBPACK_IMPORTED_MODULE_4__.BOUND_TEXT_PADDING * 2;\\r\\n maxHeight = container.height - _constants__WEBPACK_IMPORTED_MODULE_4__.BOUND_TEXT_PADDING * 2;\\r\\n width = maxWidth; // The coordinates of text box set a distance of\\r\\n // 5px to preserve padding\\r\\n coordX = container.x + _constants__WEBPACK_IMPORTED_MODULE_4__.BOUND_TEXT_PADDING; // autogrow container height if text exceeds\\r\\n if (height > maxHeight) {\\r\\n const diff = Math.min(height - maxHeight, approxLineHeight);\\r\\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_5__.mutateElement)(container, {\\r\\n height: container.height + diff\\r\\n });\\r\\n return;\\r\\n }\\r\\n else if ( // autoshrink container height until original container height\\r\\n // is reached when text is removed\\r\\n container.height > originalContainerHeight && height < maxHeight) {\\r\\n const diff = Math.min(maxHeight - height, approxLineHeight);\\r\\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_5__.mutateElement)(container, {\\r\\n height: container.height - diff\\r\\n });\\r\\n } // Start pushing text upward until a diff of 30px (padding)\\r\\n // is reached\\r\\n else {\\r\\n // vertically center align the text\\r\\n if (verticalAlign === _constants__WEBPACK_IMPORTED_MODULE_4__.VERTICAL_ALIGN.MIDDLE) {\\r\\n coordY = container.y + container.height / 2 - height / 2;\\r\\n }\\r\\n if (verticalAlign === _constants__WEBPACK_IMPORTED_MODULE_4__.VERTICAL_ALIGN.BOTTOM) {\\r\\n coordY = container.y + container.height - height - _constants__WEBPACK_IMPORTED_MODULE_4__.BOUND_TEXT_PADDING;\\r\\n }\\r\\n }\\r\\n }\\r\\n const [viewportX, viewportY] = getViewportCoords(coordX, coordY);\\r\\n const initialSelectionStart = editable.selectionStart;\\r\\n const initialSelectionEnd = editable.selectionEnd;\\r\\n const initialLength = editable.value.length;\\r\\n editable.value = updatedElement.originalText; // restore cursor position after value updated so it doesn't\\r\\n // go to the end of text when container auto expanded\\r\\n if (initialSelectionStart === initialSelectionEnd && initialSelectionEnd !== initialLength) {\\r\\n // get diff between length and selection end and shift\\r\\n // the cursor by \\\"diff\\\" times to position correctly\\r\\n const diff = initialLength - initialSelectionEnd;\\r\\n editable.selectionStart = editable.value.length - diff;\\r\\n editable.selectionEnd = editable.value.length - diff;\\r\\n }\\r\\n const lines = updatedElement.originalText.split(\\\"\\\\n\\\");\\r\\n const lineHeight = updatedElement.containerId ? approxLineHeight : updatedElement.height / lines.length;\\r\\n if (!container) {\\r\\n maxWidth = (appState.width - 8 - viewportX) / appState.zoom.value;\\r\\n } // Make sure text editor height doesn't go beyond viewport\\r\\n const editorMaxHeight = (appState.height - viewportY) / appState.zoom.value;\\r\\n const angle = container ? container.angle : updatedElement.angle;\\r\\n Object.assign(editable.style, {\\r\\n font: (0,_utils__WEBPACK_IMPORTED_MODULE_1__.getFontString)(updatedElement),\\r\\n // must be defined *after* font ¯\\\\_(ツ)_/¯\\r\\n lineHeight: `${lineHeight}px`,\\r\\n width: `${width}px`,\\r\\n height: `${height}px`,\\r\\n left: `${viewportX}px`,\\r\\n top: `${viewportY}px`,\\r\\n transform: getTransform(width, height, angle, appState, maxWidth, editorMaxHeight),\\r\\n textAlign,\\r\\n verticalAlign,\\r\\n color: updatedElement.strokeColor,\\r\\n opacity: updatedElement.opacity / 100,\\r\\n filter: \\\"var(--theme-filter)\\\",\\r\\n maxWidth: `${maxWidth}px`,\\r\\n maxHeight: `${editorMaxHeight}px`\\r\\n }); // For some reason updating font attribute doesn't set font family\\r\\n // hence updating font family explicitly for test environment\\r\\n if ((0,_utils__WEBPACK_IMPORTED_MODULE_1__.isTestEnv)()) {\\r\\n editable.style.fontFamily = (0,_utils__WEBPACK_IMPORTED_MODULE_1__.getFontFamilyString)(updatedElement);\\r\\n }\\r\\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_5__.mutateElement)(updatedElement, {\\r\\n x: coordX,\\r\\n y: coordY\\r\\n });\\r\\n }\\r\\n };\\r\\n const editable = document.createElement(\\\"textarea\\\");\\r\\n editable.dir = \\\"auto\\\";\\r\\n editable.tabIndex = 0;\\r\\n editable.dataset.type = \\\"wysiwyg\\\"; // prevent line wrapping on Safari\\r\\n editable.wrap = \\\"off\\\";\\r\\n editable.classList.add(\\\"excalidraw-wysiwyg\\\");\\r\\n let whiteSpace = \\\"pre\\\";\\r\\n let wordBreak = \\\"normal\\\";\\r\\n if ((0,_typeChecks__WEBPACK_IMPORTED_MODULE_3__.isBoundToContainer)(element)) {\\r\\n whiteSpace = \\\"pre-wrap\\\";\\r\\n wordBreak = \\\"break-word\\\";\\r\\n }\\r\\n Object.assign(editable.style, {\\r\\n position: \\\"absolute\\\",\\r\\n display: \\\"inline-block\\\",\\r\\n minHeight: \\\"1em\\\",\\r\\n backfaceVisibility: \\\"hidden\\\",\\r\\n margin: 0,\\r\\n padding: 0,\\r\\n border: 0,\\r\\n outline: 0,\\r\\n resize: \\\"none\\\",\\r\\n background: \\\"transparent\\\",\\r\\n overflow: \\\"hidden\\\",\\r\\n // must be specified because in dark mode canvas creates a stacking context\\r\\n zIndex: \\\"var(--zIndex-wysiwyg)\\\",\\r\\n wordBreak,\\r\\n // prevent line wrapping (`whitespace: nowrap` doesn't work on FF)\\r\\n whiteSpace,\\r\\n overflowWrap: \\\"break-word\\\"\\r\\n });\\r\\n updateWysiwygStyle();\\r\\n if (onChange) {\\r\\n editable.oninput = function () {\\r\\n var _a;\\r\\n const updatedElement = (_a = _scene_Scene__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"].getScene(element)) === null || _a === void 0 ? void 0 : _a.getElement(id);\\r\\n const font = (0,_utils__WEBPACK_IMPORTED_MODULE_1__.getFontString)(updatedElement); // using scrollHeight here since we need to calculate\\r\\n // number of lines so cannot use editable.style.height\\r\\n // as that gets updated below\\r\\n const lines = editable.scrollHeight / (0,_textElement__WEBPACK_IMPORTED_MODULE_6__.getApproxLineHeight)(font); // auto increase height only when lines > 1 so its\\r\\n // measured correctly and vertically aligns for\\r\\n // first line as well as setting height to \\\"auto\\\"\\r\\n // doubles the height as soon as user starts typing\\r\\n if ((0,_typeChecks__WEBPACK_IMPORTED_MODULE_3__.isBoundToContainer)(element) && lines > 1) {\\r\\n let height = \\\"auto\\\";\\r\\n if (lines === 2) {\\r\\n const container = (0,_textElement__WEBPACK_IMPORTED_MODULE_6__.getContainerElement)(element);\\r\\n const actualLineCount = (0,_textElement__WEBPACK_IMPORTED_MODULE_6__.wrapText)(editable.value, font, container.width).split(\\\"\\\\n\\\").length; // This is browser behaviour when setting height to \\\"auto\\\"\\r\\n // It sets the height needed for 2 lines even if actual\\r\\n // line count is 1 as mentioned above as well\\r\\n // hence reducing the height by half if actual line count is 1\\r\\n // so single line aligns vertically when deleting\\r\\n if (actualLineCount === 1) {\\r\\n height = `${editable.scrollHeight / 2}px`;\\r\\n }\\r\\n }\\r\\n editable.style.height = height;\\r\\n editable.style.height = `${editable.scrollHeight}px`;\\r\\n }\\r\\n onChange(normalizeText(editable.value));\\r\\n };\\r\\n }\\r\\n editable.onkeydown = function (event) {\\r\\n event.stopPropagation();\\r\\n if (!event.shiftKey && _actions_actionCanvas__WEBPACK_IMPORTED_MODULE_8__.actionZoomIn.keyTest(event)) {\\r\\n event.preventDefault();\\r\\n app.actionManager.executeAction(_actions_actionCanvas__WEBPACK_IMPORTED_MODULE_8__.actionZoomIn);\\r\\n updateWysiwygStyle();\\r\\n }\\r\\n else if (!event.shiftKey && _actions_actionCanvas__WEBPACK_IMPORTED_MODULE_8__.actionZoomOut.keyTest(event)) {\\r\\n event.preventDefault();\\r\\n app.actionManager.executeAction(_actions_actionCanvas__WEBPACK_IMPORTED_MODULE_8__.actionZoomOut);\\r\\n updateWysiwygStyle();\\r\\n }\\r\\n else if (_actions_actionProperties__WEBPACK_IMPORTED_MODULE_7__.actionDecreaseFontSize.keyTest(event)) {\\r\\n app.actionManager.executeAction(_actions_actionProperties__WEBPACK_IMPORTED_MODULE_7__.actionDecreaseFontSize);\\r\\n }\\r\\n else if (_actions_actionProperties__WEBPACK_IMPORTED_MODULE_7__.actionIncreaseFontSize.keyTest(event)) {\\r\\n app.actionManager.executeAction(_actions_actionProperties__WEBPACK_IMPORTED_MODULE_7__.actionIncreaseFontSize);\\r\\n }\\r\\n else if (event.key === _keys__WEBPACK_IMPORTED_MODULE_0__.KEYS.ESCAPE) {\\r\\n event.preventDefault();\\r\\n submittedViaKeyboard = true;\\r\\n handleSubmit();\\r\\n }\\r\\n else if (event.key === _keys__WEBPACK_IMPORTED_MODULE_0__.KEYS.ENTER && event[_keys__WEBPACK_IMPORTED_MODULE_0__.KEYS.CTRL_OR_CMD]) {\\r\\n event.preventDefault();\\r\\n if (event.isComposing || event.keyCode === 229) {\\r\\n return;\\r\\n }\\r\\n submittedViaKeyboard = true;\\r\\n handleSubmit();\\r\\n }\\r\\n else if (event.key === _keys__WEBPACK_IMPORTED_MODULE_0__.KEYS.TAB || event[_keys__WEBPACK_IMPORTED_MODULE_0__.KEYS.CTRL_OR_CMD] && (event.code === _keys__WEBPACK_IMPORTED_MODULE_0__.CODES.BRACKET_LEFT || event.code === _keys__WEBPACK_IMPORTED_MODULE_0__.CODES.BRACKET_RIGHT)) {\\r\\n event.preventDefault();\\r\\n if (event.shiftKey || event.code === _keys__WEBPACK_IMPORTED_MODULE_0__.CODES.BRACKET_LEFT) {\\r\\n outdent();\\r\\n }\\r\\n else {\\r\\n indent();\\r\\n } // We must send an input event to resize the element\\r\\n editable.dispatchEvent(new Event(\\\"input\\\"));\\r\\n }\\r\\n };\\r\\n const TAB_SIZE = 4;\\r\\n const TAB = \\\" \\\".repeat(TAB_SIZE);\\r\\n const RE_LEADING_TAB = new RegExp(`^ {1,${TAB_SIZE}}`);\\r\\n const indent = function () {\\r\\n const { selectionStart, selectionEnd } = editable;\\r\\n const linesStartIndices = getSelectedLinesStartIndices();\\r\\n let value = editable.value;\\r\\n linesStartIndices.forEach(function (startIndex) {\\r\\n const startValue = value.slice(0, startIndex);\\r\\n const endValue = value.slice(startIndex);\\r\\n value = `${startValue}${TAB}${endValue}`;\\r\\n });\\r\\n editable.value = value;\\r\\n editable.selectionStart = selectionStart + TAB_SIZE;\\r\\n editable.selectionEnd = selectionEnd + TAB_SIZE * linesStartIndices.length;\\r\\n };\\r\\n const outdent = function () {\\r\\n const { selectionStart, selectionEnd } = editable;\\r\\n const linesStartIndices = getSelectedLinesStartIndices();\\r\\n const removedTabs = [];\\r\\n let value = editable.value;\\r\\n linesStartIndices.forEach(function (startIndex) {\\r\\n const tabMatch = value.slice(startIndex, startIndex + TAB_SIZE).match(RE_LEADING_TAB);\\r\\n if (tabMatch) {\\r\\n const startValue = value.slice(0, startIndex);\\r\\n const endValue = value.slice(startIndex + tabMatch[0].length); // Delete a tab from the line\\r\\n value = `${startValue}${endValue}`;\\r\\n removedTabs.push(startIndex);\\r\\n }\\r\\n });\\r\\n editable.value = value;\\r\\n if (removedTabs.length) {\\r\\n if (selectionStart > removedTabs[removedTabs.length - 1]) {\\r\\n editable.selectionStart = Math.max(selectionStart - TAB_SIZE, removedTabs[removedTabs.length - 1]);\\r\\n }\\r\\n else {\\r\\n // If the cursor is before the first tab removed, ex:\\r\\n // Line| #1\\r\\n // Line #2\\r\\n // Lin|e #3\\r\\n // we should reset the selectionStart to his initial value.\\r\\n editable.selectionStart = selectionStart;\\r\\n }\\r\\n editable.selectionEnd = Math.max(editable.selectionStart, selectionEnd - TAB_SIZE * removedTabs.length);\\r\\n }\\r\\n };\\r\\n /**\\r\\n * @returns indices of start positions of selected lines, in reverse order\\r\\n */\\r\\n const getSelectedLinesStartIndices = function () {\\r\\n let { selectionStart, selectionEnd, value } = editable; // chars before selectionStart on the same line\\r\\n const startOffset = value.slice(0, selectionStart).match(/[^\\\\n]*$/)[0].length; // put caret at the start of the line\\r\\n selectionStart = selectionStart - startOffset;\\r\\n const selected = value.slice(selectionStart, selectionEnd);\\r\\n return selected.split(\\\"\\\\n\\\").reduce(function (startIndices, line, idx, lines) {\\r\\n return startIndices.concat(idx ? // curr line index is prev line's start + prev line's length + \\\\n\\r\\n startIndices[idx - 1] + lines[idx - 1].length + 1 : // first selected line\\r\\n selectionStart);\\r\\n }, []).reverse();\\r\\n };\\r\\n const stopEvent = function (event) {\\r\\n event.preventDefault();\\r\\n event.stopPropagation();\\r\\n }; // using a state variable instead of passing it to the handleSubmit callback\\r\\n // so that we don't need to create separate a callback for event handlers\\r\\n let submittedViaKeyboard = false;\\r\\n const handleSubmit = function () {\\r\\n var _a, _b;\\r\\n // cleanup must be run before onSubmit otherwise when app blurs the wysiwyg\\r\\n // it'd get stuck in an infinite loop of blur→onSubmit after we re-focus the\\r\\n // wysiwyg on update\\r\\n cleanup();\\r\\n const updateElement = (_a = _scene_Scene__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"].getScene(element)) === null || _a === void 0 ? void 0 : _a.getElement(element.id);\\r\\n if (!updateElement) {\\r\\n return;\\r\\n }\\r\\n let text = editable.value;\\r\\n const container = (0,_textElement__WEBPACK_IMPORTED_MODULE_6__.getContainerElement)(updateElement);\\r\\n if (container) {\\r\\n text = updateElement.text;\\r\\n if (editable.value) {\\r\\n const boundTextElementId = (0,_textElement__WEBPACK_IMPORTED_MODULE_6__.getBoundTextElementId)(container);\\r\\n if (!boundTextElementId || boundTextElementId !== element.id) {\\r\\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_5__.mutateElement)(container, {\\r\\n boundElements: (container.boundElements || []).concat({\\r\\n type: \\\"text\\\",\\r\\n id: element.id\\r\\n })\\r\\n });\\r\\n }\\r\\n }\\r\\n else {\\r\\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_5__.mutateElement)(container, {\\r\\n boundElements: (_b = container.boundElements) === null || _b === void 0 ? void 0 : _b.filter(function (ele) {\\r\\n return !(0,_typeChecks__WEBPACK_IMPORTED_MODULE_3__.isTextElement)(ele);\\r\\n })\\r\\n });\\r\\n }\\r\\n }\\r\\n onSubmit({\\r\\n text,\\r\\n viaKeyboard: submittedViaKeyboard,\\r\\n originalText: editable.value\\r\\n });\\r\\n };\\r\\n const cleanup = function () {\\r\\n if (isDestroyed) {\\r\\n return;\\r\\n }\\r\\n isDestroyed = true; // remove events to ensure they don't late-fire\\r\\n editable.onblur = null;\\r\\n editable.oninput = null;\\r\\n editable.onkeydown = null;\\r\\n if (observer) {\\r\\n observer.disconnect();\\r\\n }\\r\\n window.removeEventListener(\\\"resize\\\", updateWysiwygStyle);\\r\\n window.removeEventListener(\\\"wheel\\\", stopEvent, true);\\r\\n window.removeEventListener(\\\"pointerdown\\\", onPointerDown);\\r\\n window.removeEventListener(\\\"pointerup\\\", bindBlurEvent);\\r\\n window.removeEventListener(\\\"blur\\\", handleSubmit);\\r\\n unbindUpdate();\\r\\n editable.remove();\\r\\n };\\r\\n const bindBlurEvent = function (event) {\\r\\n window.removeEventListener(\\\"pointerup\\\", bindBlurEvent); // Deferred so that the pointerdown that initiates the wysiwyg doesn't\\r\\n // trigger the blur on ensuing pointerup.\\r\\n // Also to handle cases such as picking a color which would trigger a blur\\r\\n // in that same tick.\\r\\n const target = event === null || event === void 0 ? void 0 : event.target;\\r\\n const isTargetColorPicker = target instanceof HTMLInputElement && target.closest(\\\".color-picker-input\\\") && (0,_utils__WEBPACK_IMPORTED_MODULE_1__.isWritableElement)(target);\\r\\n setTimeout(function () {\\r\\n editable.onblur = handleSubmit;\\r\\n if (target && isTargetColorPicker) {\\r\\n target.onblur = function () {\\r\\n editable.focus();\\r\\n };\\r\\n } // case: clicking on the same property → no change → no update → no focus\\r\\n if (!isTargetColorPicker) {\\r\\n editable.focus();\\r\\n }\\r\\n });\\r\\n }; // prevent blur when changing properties from the menu\\r\\n const onPointerDown = function (event) {\\r\\n const isTargetColorPicker = event.target instanceof HTMLInputElement && event.target.closest(\\\".color-picker-input\\\") && (0,_utils__WEBPACK_IMPORTED_MODULE_1__.isWritableElement)(event.target);\\r\\n const isShapeActionsPanel = (event.target instanceof HTMLElement || event.target instanceof SVGElement) && (event.target.closest(`.${_constants__WEBPACK_IMPORTED_MODULE_4__.CLASSES.SHAPE_ACTIONS_MENU}`) || event.target.closest(`.${_constants__WEBPACK_IMPORTED_MODULE_4__.CLASSES.SHAPE_ACTIONS_MOBILE_MENU}`) || event.target.closest(`.${_constants__WEBPACK_IMPORTED_MODULE_4__.CLASSES.MOBILE_TOOLBAR}`));\\r\\n if ((event.target instanceof HTMLElement || event.target instanceof SVGElement) && isShapeActionsPanel && !(0,_utils__WEBPACK_IMPORTED_MODULE_1__.isWritableElement)(event.target) || isTargetColorPicker) {\\r\\n editable.onblur = null;\\r\\n window.addEventListener(\\\"pointerup\\\", bindBlurEvent); // handle edge-case where pointerup doesn't fire e.g. due to user\\r\\n // alt-tabbing away\\r\\n window.addEventListener(\\\"blur\\\", handleSubmit);\\r\\n }\\r\\n }; // handle updates of textElement properties of editing element\\r\\n const unbindUpdate = _scene_Scene__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"].getScene(element).addCallback(function () {\\r\\n var _a;\\r\\n updateWysiwygStyle();\\r\\n const isColorPickerActive = !!((_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.closest(\\\".color-picker-input\\\"));\\r\\n if (!isColorPickerActive) {\\r\\n editable.focus();\\r\\n }\\r\\n }); // ---------------------------------------------------------------------------\\r\\n let isDestroyed = false; // select on init (focusing is done separately inside the bindBlurEvent()\\r\\n // because we need it to happen *after* the blur event from `pointerdown`)\\r\\n editable.select();\\r\\n bindBlurEvent(); // reposition wysiwyg in case of canvas is resized. Using ResizeObserver\\r\\n // is preferred so we catch changes from host, where window may not resize.\\r\\n let observer = null;\\r\\n if (canvas && \\\"ResizeObserver\\\" in window) {\\r\\n observer = new window.ResizeObserver(function () {\\r\\n updateWysiwygStyle();\\r\\n });\\r\\n observer.observe(canvas);\\r\\n }\\r\\n else {\\r\\n window.addEventListener(\\\"resize\\\", updateWysiwygStyle);\\r\\n }\\r\\n window.addEventListener(\\\"pointerdown\\\", onPointerDown);\\r\\n window.addEventListener(\\\"wheel\\\", stopEvent, {\\r\\n passive: false,\\r\\n capture: true\\r\\n });\\r\\n excalidrawContainer === null || excalidrawContainer === void 0 ? void 0 : excalidrawContainer.querySelector(\\\".excalidraw-textEditorContainer\\\").appendChild(editable);\\r\\n};\\r\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LDBDQUFFLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxFQUFDO1FBRXJGLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUN4QixRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDbEI7SUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFDLDhFQUE4RTtJQUVsRixJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyx5RUFBeUU7SUFDbEcsMEVBQTBFO0lBRTFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNsQixhQUFhLEVBQUUsQ0FBQyxDQUFDLHdFQUF3RTtJQUN6RiwyRUFBMkU7SUFFM0UsSUFBSSxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBRXBCLElBQUksTUFBTSxJQUFJLGdCQUFnQixJQUFJLE1BQU0sRUFBRTtRQUN4QyxRQUFRLEdBQUcsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDO1lBQ25DLGtCQUFrQixFQUFFLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzFCO1NBQU07UUFDTCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7S0FDdkQ7SUFFRCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBQ3RELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsU0FBUyxFQUFFO1FBQzFDLE9BQU8sRUFBRSxLQUFLO1FBQ2QsT0FBTyxFQUFFLElBQUk7S0FDZCxDQUFDLENBQUM7SUFDSCxtQkFBbUIsYUFBbkIsbUJBQW1CLHVCQUFuQixtQkFBbUIsQ0FBRSxhQUFhLENBQUMsaUNBQWlDLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzlGLENBQUMsQ0FBQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uLi8uLi9lbGVtZW50L3RleHRXeXNpd3lnLnRzeD81N2ZkIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENPREVTLCBLRVlTIH0gZnJvbSBcIi4uL2tleXNcIjtcbmltcG9ydCB7IGlzV3JpdGFibGVFbGVtZW50LCBnZXRGb250U3RyaW5nLCBnZXRGb250RmFtaWx5U3RyaW5nLCBpc1Rlc3RFbnYgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCBTY2VuZSBmcm9tIFwiLi4vc2NlbmUvU2NlbmVcIjtcbmltcG9ydCB7IGlzQm91bmRUb0NvbnRhaW5lciwgaXNUZXh0RWxlbWVudCB9IGZyb20gXCIuL3R5cGVDaGVja3NcIjtcbmltcG9ydCB7IENMQVNTRVMsIEJPVU5EX1RFWFRfUEFERElORywgVkVSVElDQUxfQUxJR04gfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBtdXRhdGVFbGVtZW50IH0gZnJvbSBcIi4vbXV0YXRlRWxlbWVudFwiO1xuaW1wb3J0IHsgZ2V0QXBwcm94TGluZUhlaWdodCwgZ2V0Qm91bmRUZXh0RWxlbWVudElkLCBnZXRDb250YWluZXJFbGVtZW50LCB3cmFwVGV4dCB9IGZyb20gXCIuL3RleHRFbGVtZW50XCI7XG5pbXBvcnQgeyBhY3Rpb25EZWNyZWFzZUZvbnRTaXplLCBhY3Rpb25JbmNyZWFzZUZvbnRTaXplIH0gZnJvbSBcIi4uL2FjdGlvbnMvYWN0aW9uUHJvcGVydGllc1wiO1xuaW1wb3J0IHsgYWN0aW9uWm9vbUluLCBhY3Rpb25ab29tT3V0IH0gZnJvbSBcIi4uL2FjdGlvbnMvYWN0aW9uQ2FudmFzXCI7XG5cbmNvbnN0IG5vcm1hbGl6ZVRleHQgPSBmdW5jdGlvbiAodGV4dCkge1xuICByZXR1cm4gdGV4dCAvLyByZXBsYWNlIHRhYnMgd2l0aCBzcGFjZXMgc28gdGhleSByZW5kZXIgYW5kIG1lYXN1cmUgY29ycmVjdGx5XG4gIC5yZXBsYWNlKC9cXHQvZywgXCIgICAgICAgIFwiKSAvLyBub3JtYWxpemUgbmV3bGluZXNcbiAgLnJlcGxhY2UoL1xccj9cXG58XFxyL2csIFwiXFxuXCIpO1xufTtcblxuY29uc3QgZ2V0VHJhbnNmb3JtID0gZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQsIGFuZ2xlLCBhcHBTdGF0ZSwgbWF4V2lkdGgsIG1heEhlaWdodCkge1xuICBjb25zdCB7XG4gICAgem9vbVxuICB9ID0gYXBwU3RhdGU7XG4gIGNvbnN0IGRlZ3JlZSA9IDE4MCAqIGFuZ2xlIC8gTWF0aC5QSTtcbiAgbGV0IHRyYW5zbGF0ZVggPSB3aWR0aCAqICh6b29tLnZhbHVlIC0gMSkgLyAyO1xuICBsZXQgdHJhbnNsYXRlWSA9IGhlaWdodCAqICh6b29tLnZhbHVlIC0gMSkgLyAyO1xuXG4gIGlmICh3aWR0aCA+IG1heFdpZHRoICYmIHpvb20udmFsdWUgIT09IDEpIHtcbiAgICB0cmFuc2xhdGVYID0gbWF4V2lkdGggKiAoem9vbS52YWx1ZSAtIDEpIC8gMjtcbiAgfVxuXG4gIGlmIChoZWlnaHQgPiBtYXhIZWlnaHQgJiYgem9vbS52YWx1ZSAhPT0gMSkge1xuICAgIHRyYW5zbGF0ZVkgPSBtYXhIZWlnaHQgKiAoem9vbS52YWx1ZSAtIDEpIC8gMjtcbiAgfVxuXG4gIHJldHVybiBgdHJhbnNsYXRlKCR7dHJhbnNsYXRlWH1weCwgJHt0cmFuc2xhdGVZfXB4KSBzY2FsZSgke3pvb20udmFsdWV9KSByb3RhdGUoJHtkZWdyZWV9ZGVnKWA7XG59O1xuXG5leHBvcnQgY29uc3QgdGV4dFd5c2l3eWcgPSBmdW5jdGlvbiAoX3JlZikge1xuICBsZXQge1xuICAgIGlkLFxuICAgIG9uQ2hhbmdlLFxuICAgIG9uU3VibWl0LFxuICAgIGdldFZpZXdwb3J0Q29vcmRzLFxuICAgIGVsZW1lbnQsXG4gICAgY2FudmFzLFxuICAgIGV4Y2FsaWRyYXdDb250YWluZXIsXG4gICAgYXBwXG4gIH0gPSBfcmVmO1xuXG4gIGNvbnN0IHRleHRQcm9wZXJ0aWVzVXBkYXRlZCA9IGZ1bmN0aW9uICh1cGRhdGVkRWxlbWVudCwgZWRpdGFibGUpIHtcbiAgICBjb25zdCBjdXJyZW50Rm9udCA9IGVkaXRhYmxlLnN0eWxlLmZvbnRGYW1pbHkucmVwbGFjZSgvXCIvZywgXCJcIik7XG5cbiAgICBpZiAoZ2V0Rm9udEZhbWlseVN0cmluZyh7XG4gICAgICBmb250RmFtaWx5OiB1cGRhdGVkRWxlbWVudC5mb250RmFtaWx5XG4gICAgfSkgIT09IGN1cnJlbnRGb250KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoYCR7dXBkYXRlZEVsZW1lbnQuZm9udFNpemV9cHhgICE9PSBlZGl0YWJsZS5zdHlsZS5mb250U2l6ZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9O1xuXG4gIGxldCBvcmlnaW5hbENvbnRhaW5lckhlaWdodDtcblxuICBjb25zdCB1cGRhdGVXeXNpd3lnU3R5bGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgYXBwU3RhdGUgPSBhcHAuc3RhdGU7XG4gICAgY29uc3QgdXBkYXRlZEVsZW1lbnQgPSBTY2VuZS5nZXRTY2VuZShlbGVtZW50KT8uZ2V0RWxlbWVudChpZCk7XG4gICAgY29uc3Qge1xuICAgICAgdGV4dEFsaWduLFxuICAgICAgdmVydGljYWxBbGlnblxuICAgIH0gPSB1cGRhdGVkRWxlbWVudDtcbiAgICBjb25zdCBhcHByb3hMaW5lSGVpZ2h0ID0gZ2V0QXBwcm94TGluZUhlaWdodChnZXRGb250U3RyaW5nKHVwZGF0ZWRFbGVtZW50KSk7XG5cbiAgICBpZiAodXBkYXRlZEVsZW1lbnQgJiYgaXNUZXh0RWxlbWVudCh1cGRhdGVkRWxlbWVudCkpIHtcbiAgICAgIGxldCBjb29yZFggPSB1cGRhdGVkRWxlbWVudC54O1xuICAgICAgbGV0IGNvb3JkWSA9IHVwZGF0ZWRFbGVtZW50Lnk7XG4gICAgICBjb25zdCBjb250YWluZXIgPSBnZXRDb250YWluZXJFbGVtZW50KHVwZGF0ZWRFbGVtZW50KTtcbiAgICAgIGxldCBtYXhXaWR0aCA9IHVwZGF0ZWRFbGVtZW50LndpZHRoO1xuICAgICAgbGV0IG1heEhlaWdodCA9IHVwZGF0ZWRFbGVtZW50LmhlaWdodDtcbiAgICAgIGxldCB3aWR0aCA9IHVwZGF0ZWRFbGVtZW50LndpZHRoOyAvLyBTZXQgdG8gZWxlbWVudCBoZWlnaHQgYnkgZGVmYXVsdCBzaW5jZSB0aGF0J3NcbiAgICAgIC8vIHdoYXQgaXMgZ29pbmcgdG8gYmUgdXNlZCBmb3IgdW5ib3VuZGVkIHRleHRcblxuICAgICAgbGV0IGhlaWdodCA9IHVwZGF0ZWRFbGVtZW50LmhlaWdodDtcblxuICAgICAgaWYgKGNvbnRhaW5lciAmJiB1cGRhdGVkRWxlbWVudC5jb250YWluZXJJZCkge1xuICAgICAgICBjb25zdCBwcm9wZXJ0aWVzVXBkYXRlZCA9IHRleHRQcm9wZXJ0aWVzVXBkYXRlZCh1cGRhdGVkRWxlbWVudCwgZWRpdGFibGUpOyAvLyB1c2luZyBlZGl0b3Iuc3R5bGUuaGVpZ2h0IHRvIGdldCB0aGUgYWNjdXJhdGUgaGVpZ2h0IG9mIHRleHQgZWRpdG9yXG5cbiAgICAgICAgY29uc3QgZWRpdG9ySGVpZ2h0ID0gTnVtYmVyKGVkaXRhYmxlLnN0eWxlLmhlaWdodC5zbGljZSgwLCAtMikpO1xuXG4gICAgICAgIGlmIChlZGl0b3JIZWlnaHQgPiAwKSB7XG4gICAgICAgICAgaGVpZ2h0ID0gZWRpdG9ySGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BlcnRpZXNVcGRhdGVkKSB7XG4gICAgICAgICAgb3JpZ2luYWxDb250YWluZXJIZWlnaHQgPSBjb250YWluZXIuaGVpZ2h0OyAvLyB1cGRhdGUgaGVpZ2h0IG9mIHRoZSBlZGl0b3IgYWZ0ZXIgcHJvcGVydGllcyB1cGRhdGVkXG5cbiAgICAgICAgICBoZWlnaHQgPSB1cGRhdGVkRWxlbWVudC5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW9yaWdpbmFsQ29udGFpbmVySGVpZ2h0KSB7XG4gICAgICAgICAgb3JpZ2luYWxDb250YWluZXJIZWlnaHQgPSBjb250YWluZXIuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgbWF4V2lkdGggPSBjb250YWluZXIud2lkdGggLSBCT1VORF9URVhUX1BBRERJTkcgKiAyO1xuICAgICAgICBtYXhIZWlnaHQgPSBjb250YWluZXIuaGVpZ2h0IC0gQk9VTkRfVEVYVF9QQURESU5HICogMjtcbiAgICAgICAgd2lkdGggPSBtYXhXaWR0aDsgLy8gVGhlIGNvb3JkaW5hdGVzIG9mIHRleHQgYm94IHNldCBhIGRpc3RhbmNlIG9mXG4gICAgICAgIC8vIDVweCB0byBwcmVzZXJ2ZSBwYWRkaW5nXG5cbiAgICAgICAgY29vcmRYID0gY29udGFpbmVyLnggKyBCT1VORF9URVhUX1BBRERJTkc7IC8vIGF1dG9ncm93IGNvbnRhaW5lciBoZWlnaHQgaWYgdGV4dCBleGNlZWRzXG5cbiAgICAgICAgaWYgKGhlaWdodCA+IG1heEhlaWdodCkge1xuICAgICAgICAgIGNvbnN0IGRpZmYgPSBNYXRoLm1pbihoZWlnaHQgLSBtYXhIZWlnaHQsIGFwcHJveExpbmVIZWlnaHQpO1xuICAgICAgICAgIG11dGF0ZUVsZW1lbnQoY29udGFpbmVyLCB7XG4gICAgICAgICAgICBoZWlnaHQ6IGNvbnRhaW5lci5oZWlnaHQgKyBkaWZmXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKCAvLyBhdXRvc2hyaW5rIGNvbnRhaW5lciBoZWlnaHQgdW50aWwgb3JpZ2luYWwgY29udGFpbmVyIGhlaWdodFxuICAgICAgICAvLyBpcyByZWFjaGVkIHdoZW4gdGV4dCBpcyByZW1vdmVkXG4gICAgICAgIGNvbnRhaW5lci5oZWlnaHQgPiBvcmlnaW5hbENvbnRhaW5lckhlaWdodCAmJiBoZWlnaHQgPCBtYXhIZWlnaHQpIHtcbiAgICAgICAgICBjb25zdCBkaWZmID0gTWF0aC5taW4obWF4SGVpZ2h0IC0gaGVpZ2h0LCBhcHByb3hMaW5lSGVpZ2h0KTtcbiAgICAgICAgICBtdXRhdGVFbGVtZW50KGNvbnRhaW5lciwge1xuICAgICAgICAgICAgaGVpZ2h0OiBjb250YWluZXIuaGVpZ2h0IC0gZGlmZlxuICAgICAgICAgIH0pO1xuICAgICAgICB9IC8vIFN0YXJ0IHB1c2hpbmcgdGV4dCB1cHdhcmQgdW50aWwgYSBkaWZmIG9mIDMwcHggKHBhZGRpbmcpXG4gICAgICAgIC8vIGlzIHJlYWNoZWRcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgLy8gdmVydGljYWxseSBjZW50ZXIgYWxpZ24gdGhlIHRleHRcbiAgICAgICAgICBpZiAodmVydGljYWxBbGlnbiA9PT0gVkVSVElDQUxfQUxJR04uTUlERExFKSB7XG4gICAgICAgICAgICBjb29yZFkgPSBjb250YWluZXIueSArIGNvbnRhaW5lci5oZWlnaHQgLyAyIC0gaGVpZ2h0IC8gMjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmVydGljYWxBbGlnbiA9PT0gVkVSVElDQUxfQUxJR04uQk9UVE9NKSB7XG4gICAgICAgICAgICBjb29yZFkgPSBjb250YWluZXIueSArIGNvbnRhaW5lci5oZWlnaHQgLSBoZWlnaHQgLSBCT1VORF9URVhUX1BBRERJTkc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IFt2aWV3cG9ydFgsIHZpZXdwb3J0WV0gPSBnZXRWaWV3cG9ydENvb3Jkcyhjb29yZFgsIGNvb3JkWSk7XG4gICAgICBjb25zdCBpbml0aWFsU2VsZWN0aW9uU3RhcnQgPSBlZGl0YWJsZS5zZWxlY3Rpb25TdGFydDtcbiAgICAgIGNvbnN0IGluaXRpYWxTZWxlY3Rpb25FbmQgPSBlZGl0YWJsZS5zZWxlY3Rpb25FbmQ7XG4gICAgICBjb25zdCBpbml0aWFsTGVuZ3RoID0gZWRpdGFibGUudmFsdWUubGVuZ3RoO1xuICAgICAgZWRpdGFibGUudmFsdWUgPSB1cGRhdGVkRWxlbWVudC5vcmlnaW5hbFRleHQ7IC8vIHJlc3RvcmUgY3Vyc29yIHBvc2l0aW9uIGFmdGVyIHZhbHVlIHVwZGF0ZWQgc28gaXQgZG9lc24ndFxuICAgICAgLy8gZ28gdG8gdGhlIGVuZCBvZiB0ZXh0IHdoZW4gY29udGFpbmVyIGF1dG8gZXhwYW5kZWRcblxuICAgICAgaWYgKGluaXRpYWxTZWxlY3Rpb25TdGFydCA9PT0gaW5pdGlhbFNlbGVjdGlvbkVuZCAmJiBpbml0aWFsU2VsZWN0aW9uRW5kICE9PSBpbml0aWFsTGVuZ3RoKSB7XG4gICAgICAgIC8vIGdldCBkaWZmIGJldHdlZW4gbGVuZ3RoIGFuZCBzZWxlY3Rpb24gZW5kIGFuZCBzaGlmdFxuICAgICAgICAvLyB0aGUgY3Vyc29yIGJ5IFwiZGlmZlwiIHRpbWVzIHRvIHBvc2l0aW9uIGNvcnJlY3RseVxuICAgICAgICBjb25zdCBkaWZmID0gaW5pdGlhbExlbmd0aCAtIGluaXRpYWxTZWxlY3Rpb25FbmQ7XG4gICAgICAgIGVkaXRhYmxlLnNlbGVjdGlvblN0YXJ0ID0gZWRpdGFibGUudmFsdWUubGVuZ3RoIC0gZGlmZjtcbiAgICAgICAgZWRpdGFibGUuc2VsZWN0aW9uRW5kID0gZWRpdGFibGUudmFsdWUubGVuZ3RoIC0gZGlmZjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbGluZXMgPSB1cGRhdGVkRWxlbWVudC5vcmlnaW5hbFRleHQuc3BsaXQoXCJcXG5cIik7XG4gICAgICBjb25zdCBsaW5lSGVpZ2h0ID0gdXBkYXRlZEVsZW1lbnQuY29udGFpbmVySWQgPyBhcHByb3hMaW5lSGVpZ2h0IDogdXBkYXRlZEVsZW1lbnQuaGVpZ2h0IC8gbGluZXMubGVuZ3RoO1xuXG4gICAgICBpZiAoIWNvbnRhaW5lcikge1xuICAgICAgICBtYXhXaWR0aCA9IChhcHBTdGF0ZS53aWR0aCAtIDggLSB2aWV3cG9ydFgpIC8gYXBwU3RhdGUuem9vbS52YWx1ZTtcbiAgICAgIH0gLy8gTWFrZSBzdXJlIHRleHQgZWRpdG9yIGhlaWdodCBkb2Vzbid0IGdvIGJleW9uZCB2aWV3cG9ydFxuXG5cbiAgICAgIGNvbnN0IGVkaXRvck1heEhlaWdodCA9IChhcHBTdGF0ZS5oZWlnaHQgLSB2aWV3cG9ydFkpIC8gYXBwU3RhdGUuem9vbS52YWx1ZTtcbiAgICAgIGNvbnN0IGFuZ2xlID0gY29udGFpbmVyID8gY29udGFpbmVyLmFuZ2xlIDogdXBkYXRlZEVsZW1lbnQuYW5nbGU7XG4gICAgICBPYmplY3QuYXNzaWduKGVkaXRhYmxlLnN0eWxlLCB7XG4gICAgICAgIGZvbnQ6IGdldEZvbnRTdHJpbmcodXBkYXRlZEVsZW1lbnQpLFxuICAgICAgICAvLyBtdXN0IGJlIGRlZmluZWQgKmFmdGVyKiBmb250IMKvXFxfKOODhClfL8KvXG4gICAgICAgIGxpbmVIZWlnaHQ6IGAke2xpbmVIZWlnaHR9cHhgLFxuICAgICAgICB3aWR0aDogYCR7d2lkdGh9cHhgLFxuICAgICAgICBoZWlnaHQ6IGAke2hlaWdodH1weGAsXG4gICAgICAgIGxlZnQ6IGAke3ZpZXdwb3J0WH1weGAsXG4gICAgICAgIHRvcDogYCR7dmlld3BvcnRZfXB4YCxcbiAgICAgICAgdHJhbnNmb3JtOiBnZXRUcmFuc2Zvcm0od2lkdGgsIGhlaWdodCwgYW5nbGUsIGFwcFN0YXRlLCBtYXhXaWR0aCwgZWRpdG9yTWF4SGVpZ2h0KSxcbiAgICAgICAgdGV4dEFsaWduLFxuICAgICAgICB2ZXJ0aWNhbEFsaWduLFxuICAgICAgICBjb2xvcjogdXBkYXRlZEVsZW1lbnQuc3Ryb2tlQ29sb3IsXG4gICAgICAgIG9wYWNpdHk6IHVwZGF0ZWRFbGVtZW50Lm9wYWNpdHkgLyAxMDAsXG4gICAgICAgIGZpbHRlcjogXCJ2YXIoLS10aGVtZS1maWx0ZXIpXCIsXG4gICAgICAgIG1heFdpZHRoOiBgJHttYXhXaWR0aH1weGAsXG4gICAgICAgIG1heEhlaWdodDogYCR7ZWRpdG9yTWF4SGVpZ2h0fXB4YFxuICAgICAgfSk7IC8vIEZvciBzb21lIHJlYXNvbiB1cGRhdGluZyBmb250IGF0dHJpYnV0ZSBkb2Vzbid0IHNldCBmb250IGZhbWlseVxuICAgICAgLy8gaGVuY2UgdXBkYXRpbmcgZm9udCBmYW1pbHkgZXhwbGljaXRseSBmb3IgdGVzdCBlbnZpcm9ubWVudFxuXG4gICAgICBpZiAoaXNUZXN0RW52KCkpIHtcbiAgICAgICAgZWRpdGFibGUuc3R5bGUuZm9udEZhbWlseSA9IGdldEZvbnRGYW1pbHlTdHJpbmcodXBkYXRlZEVsZW1lbnQpO1xuICAgICAgfVxuXG4gICAgICBtdXRhdGVFbGVtZW50KHVwZGF0ZWRFbGVtZW50LCB7XG4gICAgICAgIHg6IGNvb3JkWCxcbiAgICAgICAgeTogY29vcmRZXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgZWRpdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGV4dGFyZWFcIik7XG4gIGVkaXRhYmxlLmRpciA9IFwiYXV0b1wiO1xuICBlZGl0YWJsZS50YWJJbmRleCA9IDA7XG4gIGVkaXRhYmxlLmRhdGFzZXQudHlwZSA9IFwid3lzaXd5Z1wiOyAvLyBwcmV2ZW50IGxpbmUgd3JhcHBpbmcgb24gU2FmYXJpXG5cbiAgZWRpdGFibGUud3JhcCA9IFwib2ZmXCI7XG4gIGVkaXRhYmxlLmNsYXNzTGlzdC5hZGQoXCJleGNhbGlkcmF3LXd5c2l3eWdcIik7XG4gIGxldCB3aGl0ZVNwYWNlID0gXCJwcmVcIjtcbiAgbGV0IHdvcmRCcmVhayA9IFwibm9ybWFsXCI7XG5cbiAgaWYgKGlzQm91bmRUb0NvbnRhaW5lcihlbGVtZW50KSkge1xuICAgIHdoaXRlU3BhY2UgPSBcInByZS13cmFwXCI7XG4gICAgd29yZEJyZWFrID0gXCJicmVhay13b3JkXCI7XG4gIH1cblxuICBPYmplY3QuYXNzaWduKGVkaXRhYmxlLnN0eWxlLCB7XG4gICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICBkaXNwbGF5OiBcImlubGluZS1ibG9ja1wiLFxuICAgIG1pbkhlaWdodDogXCIxZW1cIixcbiAgICBiYWNrZmFjZVZpc2liaWxpdHk6IFwiaGlkZGVuXCIsXG4gICAgbWFyZ2luOiAwLFxuICAgIHBhZGRpbmc6IDAsXG4gICAgYm9yZGVyOiAwLFxuICAgIG91dGxpbmU6IDAsXG4gICAgcmVzaXplOiBcIm5vbmVcIixcbiAgICBiYWNrZ3JvdW5kOiBcInRyYW5zcGFyZW50XCIsXG4gICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCIsXG4gICAgLy8gbXVzdCBiZSBzcGVjaWZpZWQgYmVjYXVzZSBpbiBkYXJrIG1vZGUgY2FudmFzIGNyZWF0ZXMgYSBzdGFja2luZyBjb250ZXh0XG4gICAgekluZGV4OiBcInZhcigtLXpJbmRleC13eXNpd3lnKVwiLFxuICAgIHdvcmRCcmVhayxcbiAgICAvLyBwcmV2ZW50IGxpbmUgd3JhcHBpbmcgKGB3aGl0ZXNwYWNlOiBub3dyYXBgIGRvZXNuJ3Qgd29yayBvbiBGRilcbiAgICB3aGl0ZVNwYWNlLFxuICAgIG92ZXJmbG93V3JhcDogXCJicmVhay13b3JkXCJcbiAgfSk7XG4gIHVwZGF0ZVd5c2l3eWdTdHlsZSgpO1xuXG4gIGlmIChvbkNoYW5nZSkge1xuICAgIGVkaXRhYmxlLm9uaW5wdXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCB1cGRhdGVkRWxlbWVudCA9IFNjZW5lLmdldFNjZW5lKGVsZW1lbnQpPy5nZXRFbGVtZW50KGlkKTtcbiAgICAgIGNvbnN0IGZvbnQgPSBnZXRGb250U3RyaW5nKHVwZGF0ZWRFbGVtZW50KTsgLy8gdXNpbmcgc2Nyb2xsSGVpZ2h0IGhlcmUgc2luY2Ugd2UgbmVlZCB0byBjYWxjdWxhdGVcbiAgICAgIC8vIG51bWJlciBvZiBsaW5lcyBzbyBjYW5ub3QgdXNlIGVkaXRhYmxlLnN0eWxlLmhlaWdodFxuICAgICAgLy8gYXMgdGhhdCBnZXRzIHVwZGF0ZWQgYmVsb3dcblxuICAgICAgY29uc3QgbGluZXMgPSBlZGl0YWJsZS5zY3JvbGxIZWlnaHQgLyBnZXRBcHByb3hMaW5lSGVpZ2h0KGZvbnQpOyAvLyBhdXRvIGluY3JlYXNlIGhlaWdodCBvbmx5IHdoZW4gbGluZXMgID4gMSBzbyBpdHNcbiAgICAgIC8vIG1lYXN1cmVkIGNvcnJlY3RseSBhbmQgdmVydGljYWxseSBhbGlnbnMgZm9yXG4gICAgICAvLyBmaXJzdCBsaW5lIGFzIHdlbGwgYXMgc2V0dGluZyBoZWlnaHQgdG8gXCJhdXRvXCJcbiAgICAgIC8vIGRvdWJsZXMgdGhlIGhlaWdodCBhcyBzb29uIGFzIHVzZXIgc3RhcnRzIHR5cGluZ1xuXG4gICAgICBpZiAoaXNCb3VuZFRvQ29udGFpbmVyKGVsZW1lbnQpICYmIGxpbmVzID4gMSkge1xuICAgICAgICBsZXQgaGVpZ2h0ID0gXCJhdXRvXCI7XG5cbiAgICAgICAgaWYgKGxpbmVzID09PSAyKSB7XG4gICAgICAgICAgY29uc3QgY29udGFpbmVyID0gZ2V0Q29udGFpbmVyRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgICBjb25zdCBhY3R1YWxMaW5lQ291bnQgPSB3cmFwVGV4dChlZGl0YWJsZS52YWx1ZSwgZm9udCwgY29udGFpbmVyLndpZHRoKS5zcGxpdChcIlxcblwiKS5sZW5ndGg7IC8vIFRoaXMgaXMgYnJvd3NlciBiZWhhdmlvdXIgd2hlbiBzZXR0aW5nIGhlaWdodCB0byBcImF1dG9cIlxuICAgICAgICAgIC8vIEl0IHNldHMgdGhlIGhlaWdodCBuZWVkZWQgZm9yIDIgbGluZXMgZXZlbiBpZiBhY3R1YWxcbiAgICAgICAgICAvLyBsaW5lIGNvdW50IGlzIDEgYXMgbWVudGlvbmVkIGFib3ZlIGFzIHdlbGxcbiAgICAgICAgICAvLyBoZW5jZSByZWR1Y2luZyB0aGUgaGVpZ2h0IGJ5IGhhbGYgaWYgYWN0dWFsIGxpbmUgY291bnQgaXMgMVxuICAgICAgICAgIC8vIHNvIHNpbmdsZSBsaW5lIGFsaWducyB2ZXJ0aWNhbGx5IHdoZW4gZGVsZXRpbmdcblxuICAgICAgICAgIGlmIChhY3R1YWxMaW5lQ291bnQgPT09IDEpIHtcbiAgICAgICAgICAgIGhlaWdodCA9IGAke2VkaXRhYmxlLnNjcm9sbEhlaWdodCAvIDJ9cHhgO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGVkaXRhYmxlLnN0eWxlLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgZWRpdGFibGUuc3R5bGUuaGVpZ2h0ID0gYCR7ZWRpdGFibGUuc2Nyb2xsSGVpZ2h0fXB4YDtcbiAgICAgIH1cblxuICAgICAgb25DaGFuZ2Uobm9ybWFsaXplVGV4dChlZGl0YWJsZS52YWx1ZSkpO1xuICAgIH07XG4gIH1cblxuICBlZGl0YWJsZS5vbmtleWRvd24gPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGlmICghZXZlbnQuc2hpZnRLZXkgJiYgYWN0aW9uWm9vbUluLmtleVRlc3QoZXZlbnQpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgYXBwLmFjdGlvbk1hbmFnZXIuZXhlY3V0ZUFjdGlvbihhY3Rpb25ab29tSW4pO1xuICAgICAgdXBkYXRlV3lzaXd5Z1N0eWxlKCk7XG4gICAgfSBlbHNlIGlmICghZXZlbnQuc2hpZnRLZXkgJiYgYWN0aW9uWm9vbU91dC5rZXlUZXN0KGV2ZW50KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGFwcC5hY3Rpb25NYW5hZ2VyLmV4ZWN1dGVBY3Rpb24oYWN0aW9uWm9vbU91dCk7XG4gICAgICB1cGRhdGVXeXNpd3lnU3R5bGUoKTtcbiAgICB9IGVsc2UgaWYgKGFjdGlvbkRlY3JlYXNlRm9udFNpemUua2V5VGVzdChldmVudCkpIHtcbiAgICAgIGFwcC5hY3Rpb25NYW5hZ2VyLmV4ZWN1dGVBY3Rpb24oYWN0aW9uRGVjcmVhc2VGb250U2l6ZSk7XG4gICAgfSBlbHNlIGlmIChhY3Rpb25JbmNyZWFzZUZvbnRTaXplLmtleVRlc3QoZXZlbnQpKSB7XG4gICAgICBhcHAuYWN0aW9uTWFuYWdlci5leGVjdXRlQWN0aW9uKGFjdGlvbkluY3JlYXNlRm9udFNpemUpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSBLRVlTLkVTQ0FQRSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHN1Ym1pdHRlZFZpYUtleWJvYXJkID0gdHJ1ZTtcbiAgICAgIGhhbmRsZVN1Ym1pdCgpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSBLRVlTLkVOVEVSICYmIGV2ZW50W0tFWVMuQ1RSTF9PUl9DTURdKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBpZiAoZXZlbnQuaXNDb21wb3NpbmcgfHwgZXZlbnQua2V5Q29kZSA9PT0gMjI5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3VibWl0dGVkVmlhS2V5Ym9hcmQgPSB0cnVlO1xuICAgICAgaGFuZGxlU3VibWl0KCk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09IEtFWVMuVEFCIHx8IGV2ZW50W0tFWVMuQ1RSTF9PUl9DTURdICYmIChldmVudC5jb2RlID09PSBDT0RFUy5CUkFDS0VUX0xFRlQgfHwgZXZlbnQuY29kZSA9PT0gQ09ERVMuQlJBQ0tFVF9SSUdIVCkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgIGlmIChldmVudC5zaGlmdEtleSB8fCBldmVudC5jb2RlID09PSBDT0RFUy5CUkFDS0VUX0xFRlQpIHtcbiAgICAgICAgb3V0ZGVudCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5kZW50KCk7XG4gICAgICB9IC8vIFdlIG11c3Qgc2VuZCBhbiBpbnB1dCBldmVudCB0byByZXNpemUgdGhlIGVsZW1lbnRcblxuXG4gICAgICBlZGl0YWJsZS5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcImlucHV0XCIpKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgVEFCX1NJWkUgPSA0O1xuICBjb25zdCBUQUIgPSBcIiBcIi5yZXBlYXQoVEFCX1NJWkUpO1xuICBjb25zdCBSRV9MRUFESU5HX1RBQiA9IG5ldyBSZWdFeHAoYF4gezEsJHtUQUJfU0laRX19YCk7XG5cbiAgY29uc3QgaW5kZW50ID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNlbGVjdGlvblN0YXJ0LFxuICAgICAgc2VsZWN0aW9uRW5kXG4gICAgfSA9IGVkaXRhYmxlO1xuICAgIGNvbnN0IGxpbmVzU3RhcnRJbmRpY2VzID0gZ2V0U2VsZWN0ZWRMaW5lc1N0YXJ0SW5kaWNlcygpO1xuICAgIGxldCB2YWx1ZSA9IGVkaXRhYmxlLnZhbHVlO1xuICAgIGxpbmVzU3RhcnRJbmRpY2VzLmZvckVhY2goZnVuY3Rpb24gKHN0YXJ0SW5kZXgpIHtcbiAgICAgIGNvbnN0IHN0YXJ0VmFsdWUgPSB2YWx1ZS5zbGljZSgwLCBzdGFydEluZGV4KTtcbiAgICAgIGNvbnN0IGVuZFZhbHVlID0gdmFsdWUuc2xpY2Uoc3RhcnRJbmRleCk7XG4gICAgICB2YWx1ZSA9IGAke3N0YXJ0VmFsdWV9JHtUQUJ9JHtlbmRWYWx1ZX1gO1xuICAgIH0pO1xuICAgIGVkaXRhYmxlLnZhbHVlID0gdmFsdWU7XG4gICAgZWRpdGFibGUuc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb25TdGFydCArIFRBQl9TSVpFO1xuICAgIGVkaXRhYmxlLnNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbkVuZCArIFRBQl9TSVpFICogbGluZXNTdGFydEluZGljZXMubGVuZ3RoO1xuICB9O1xuXG4gIGNvbnN0IG91dGRlbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3Qge1xuICAgICAgc2VsZWN0aW9uU3RhcnQsXG4gICAgICBzZWxlY3Rpb25FbmRcbiAgICB9ID0gZWRpdGFibGU7XG4gICAgY29uc3QgbGluZXNTdGFydEluZGljZXMgPSBnZXRTZWxlY3RlZExpbmVzU3RhcnRJbmRpY2VzKCk7XG4gICAgY29uc3QgcmVtb3ZlZFRhYnMgPSBbXTtcbiAgICBsZXQgdmFsdWUgPSBlZGl0YWJsZS52YWx1ZTtcbiAgICBsaW5lc1N0YXJ0SW5kaWNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzdGFydEluZGV4KSB7XG4gICAgICBjb25zdCB0YWJNYXRjaCA9IHZhbHVlLnNsaWNlKHN0YXJ0SW5kZXgsIHN0YXJ0SW5kZXggKyBUQUJfU0laRSkubWF0Y2goUkVfTEVBRElOR19UQUIpO1xuXG4gICAgICBpZiAodGFiTWF0Y2gpIHtcbiAgICAgICAgY29uc3Qgc3RhcnRWYWx1ZSA9IHZhbHVlLnNsaWNlKDAsIHN0YXJ0SW5kZXgpO1xuICAgICAgICBjb25zdCBlbmRWYWx1ZSA9IHZhbHVlLnNsaWNlKHN0YXJ0SW5kZXggKyB0YWJNYXRjaFswXS5sZW5ndGgpOyAvLyBEZWxldGUgYSB0YWIgZnJvbSB0aGUgbGluZVxuXG4gICAgICAgIHZhbHVlID0gYCR7c3RhcnRWYWx1ZX0ke2VuZFZhbHVlfWA7XG4gICAgICAgIHJlbW92ZWRUYWJzLnB1c2goc3RhcnRJbmRleCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZWRpdGFibGUudmFsdWUgPSB2YWx1ZTtcblxuICAgIGlmIChyZW1vdmVkVGFicy5sZW5ndGgpIHtcbiAgICAgIGlmIChzZWxlY3Rpb25TdGFydCA+IHJlbW92ZWRUYWJzW3JlbW92ZWRUYWJzLmxlbmd0aCAtIDFdKSB7XG4gICAgICAgIGVkaXRhYmxlLnNlbGVjdGlvblN0YXJ0ID0gTWF0aC5tYXgoc2VsZWN0aW9uU3RhcnQgLSBUQUJfU0laRSwgcmVtb3ZlZFRhYnNbcmVtb3ZlZFRhYnMubGVuZ3RoIC0gMV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgdGhlIGN1cnNvciBpcyBiZWZvcmUgdGhlIGZpcnN0IHRhYiByZW1vdmVkLCBleDpcbiAgICAgICAgLy8gTGluZXwgIzFcbiAgICAgICAgLy8gICAgIExpbmUgIzJcbiAgICAgICAgLy8gTGlufGUgIzNcbiAgICAgICAgLy8gd2Ugc2hvdWxkIHJlc2V0IHRoZSBzZWxlY3Rpb25TdGFydCB0byBoaXMgaW5pdGlhbCB2YWx1ZS5cbiAgICAgICAgZWRpdGFibGUuc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb25TdGFydDtcbiAgICAgIH1cblxuICAgICAgZWRpdGFibGUuc2VsZWN0aW9uRW5kID0gTWF0aC5tYXgoZWRpdGFibGUuc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCAtIFRBQl9TSVpFICogcmVtb3ZlZFRhYnMubGVuZ3RoKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBAcmV0dXJucyBpbmRpY2VzIG9mIHN0YXJ0IHBvc2l0aW9ucyBvZiBzZWxlY3RlZCBsaW5lcywgaW4gcmV2ZXJzZSBvcmRlclxuICAgKi9cblxuXG4gIGNvbnN0IGdldFNlbGVjdGVkTGluZXNTdGFydEluZGljZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgbGV0IHtcbiAgICAgIHNlbGVjdGlvblN0YXJ0LFxuICAgICAgc2VsZWN0aW9uRW5kLFxuICAgICAgdmFsdWVcbiAgICB9ID0gZWRpdGFibGU7IC8vIGNoYXJzIGJlZm9yZSBzZWxlY3Rpb25TdGFydCBvbiB0aGUgc2FtZSBsaW5lXG5cbiAgICBjb25zdCBzdGFydE9mZnNldCA9IHZhbHVlLnNsaWNlKDAsIHNlbGVjdGlvblN0YXJ0KS5tYXRjaCgvW15cXG5dKiQvKVswXS5sZW5ndGg7IC8vIHB1dCBjYXJldCBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpbmVcblxuICAgIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uU3RhcnQgLSBzdGFydE9mZnNldDtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHZhbHVlLnNsaWNlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpO1xuICAgIHJldHVybiBzZWxlY3RlZC5zcGxpdChcIlxcblwiKS5yZWR1Y2UoZnVuY3Rpb24gKHN0YXJ0SW5kaWNlcywgbGluZSwgaWR4LCBsaW5lcykge1xuICAgICAgcmV0dXJuIHN0YXJ0SW5kaWNlcy5jb25jYXQoaWR4ID8gLy8gY3VyciBsaW5lIGluZGV4IGlzIHByZXYgbGluZSdzIHN0YXJ0ICsgcHJldiBsaW5lJ3MgbGVuZ3RoICsgXFxuXG4gICAgICBzdGFydEluZGljZXNbaWR4IC0gMV0gKyBsaW5lc1tpZHggLSAxXS5sZW5ndGggKyAxIDogLy8gZmlyc3Qgc2VsZWN0ZWQgbGluZVxuICAgICAgc2VsZWN0aW9uU3RhcnQpO1xuICAgIH0sIFtdKS5yZXZlcnNlKCk7XG4gIH07XG5cbiAgY29uc3Qgc3RvcEV2ZW50ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfTsgLy8gdXNpbmcgYSBzdGF0ZSB2YXJpYWJsZSBpbnN0ZWFkIG9mIHBhc3NpbmcgaXQgdG8gdGhlIGhhbmRsZVN1Ym1pdCBjYWxsYmFja1xuICAvLyBzbyB0aGF0IHdlIGRvbid0IG5lZWQgdG8gY3JlYXRlIHNlcGFyYXRlIGEgY2FsbGJhY2sgZm9yIGV2ZW50IGhhbmRsZXJzXG5cblxuICBsZXQgc3VibWl0dGVkVmlhS2V5Ym9hcmQgPSBmYWxzZTtcblxuICBjb25zdCBoYW5kbGVTdWJtaXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gY2xlYW51cCBtdXN0IGJlIHJ1biBiZWZvcmUgb25TdWJtaXQgb3RoZXJ3aXNlIHdoZW4gYXBwIGJsdXJzIHRoZSB3eXNpd3lnXG4gICAgLy8gaXQnZCBnZXQgc3R1Y2sgaW4gYW4gaW5maW5pdGUgbG9vcCBvZiBibHVy4oaSb25TdWJtaXQgYWZ0ZXIgd2UgcmUtZm9jdXMgdGhlXG4gICAgLy8gd3lzaXd5ZyBvbiB1cGRhdGVcbiAgICBjbGVhbnVwKCk7XG4gICAgY29uc3QgdXBkYXRlRWxlbWVudCA9IFNjZW5lLmdldFNjZW5lKGVsZW1lbnQpPy5nZXRFbGVtZW50KGVsZW1lbnQuaWQpO1xuXG4gICAgaWYgKCF1cGRhdGVFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHRleHQgPSBlZGl0YWJsZS52YWx1ZTtcbiAgICBjb25zdCBjb250YWluZXIgPSBnZXRDb250YWluZXJFbGVtZW50KHVwZGF0ZUVsZW1lbnQpO1xuXG4gICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgdGV4dCA9IHVwZGF0ZUVsZW1lbnQudGV4dDtcblxuICAgICAgaWYgKGVkaXRhYmxlLnZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGJvdW5kVGV4dEVsZW1lbnRJZCA9IGdldEJvdW5kVGV4dEVsZW1lbnRJZChjb250YWluZXIpO1xuXG4gICAgICAgIGlmICghYm91bmRUZXh0RWxlbWVudElkIHx8IGJvdW5kVGV4dEVsZW1lbnRJZCAhPT0gZWxlbWVudC5pZCkge1xuICAgICAgICAgIG11dGF0ZUVsZW1lbnQoY29udGFpbmVyLCB7XG4gICAgICAgICAgICBib3VuZEVsZW1lbnRzOiAoY29udGFpbmVyLmJvdW5kRWxlbWVudHMgfHwgW10pLmNvbmNhdCh7XG4gICAgICAgICAgICAgIHR5cGU6IFwidGV4dFwiLFxuICAgICAgICAgICAgICBpZDogZWxlbWVudC5pZFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbXV0YXRlRWxlbWVudChjb250YWluZXIsIHtcbiAgICAgICAgICBib3VuZEVsZW1lbnRzOiBjb250YWluZXIuYm91bmRFbGVtZW50cz8uZmlsdGVyKGZ1bmN0aW9uIChlbGUpIHtcbiAgICAgICAgICAgIHJldHVybiAhaXNUZXh0RWxlbWVudChlbGUpO1xuICAgICAgICAgIH0pXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIG9uU3VibWl0KHtcbiAgICAgIHRleHQsXG4gICAgICB2aWFLZXlib2FyZDogc3VibWl0dGVkVmlhS2V5Ym9hcmQsXG4gICAgICBvcmlnaW5hbFRleHQ6IGVkaXRhYmxlLnZhbHVlXG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgY2xlYW51cCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoaXNEZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpc0Rlc3Ryb3llZCA9IHRydWU7IC8vIHJlbW92ZSBldmVudHMgdG8gZW5zdXJlIHRoZXkgZG9uJ3QgbGF0ZS1maXJlXG5cbiAgICBlZGl0YWJsZS5vbmJsdXIgPSBudWxsO1xuICAgIGVkaXRhYmxlLm9uaW5wdXQgPSBudWxsO1xuICAgIGVkaXRhYmxlLm9ua2V5ZG93biA9IG51bGw7XG5cbiAgICBpZiAob2JzZXJ2ZXIpIHtcbiAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICB9XG5cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCB1cGRhdGVXeXNpd3lnU3R5bGUpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgc3RvcEV2ZW50LCB0cnVlKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIG9uUG9pbnRlckRvd24pO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIGJpbmRCbHVyRXZlbnQpO1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwiYmx1clwiLCBoYW5kbGVTdWJtaXQpO1xuICAgIHVuYmluZFVwZGF0ZSgpO1xuICAgIGVkaXRhYmxlLnJlbW92ZSgpO1xuICB9O1xuXG4gIGNvbnN0IGJpbmRCbHVyRXZlbnQgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBiaW5kQmx1ckV2ZW50KTsgLy8gRGVmZXJyZWQgc28gdGhhdCB0aGUgcG9pbnRlcmRvd24gdGhhdCBpbml0aWF0ZXMgdGhlIHd5c2l3eWcgZG9lc24ndFxuICAgIC8vIHRyaWdnZXIgdGhlIGJsdXIgb24gZW5zdWluZyBwb2ludGVydXAuXG4gICAgLy8gQWxzbyB0byBoYW5kbGUgY2FzZXMgc3VjaCBhcyBwaWNraW5nIGEgY29sb3Igd2hpY2ggd291bGQgdHJpZ2dlciBhIGJsdXJcbiAgICAvLyBpbiB0aGF0IHNhbWUgdGljay5cblxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50Py50YXJnZXQ7XG4gICAgY29uc3QgaXNUYXJnZXRDb2xvclBpY2tlciA9IHRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgdGFyZ2V0LmNsb3Nlc3QoXCIuY29sb3ItcGlja2VyLWlucHV0XCIpICYmIGlzV3JpdGFibGVFbGVtZW50KHRhcmdldCk7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBlZGl0YWJsZS5vbmJsdXIgPSBoYW5kbGVTdWJtaXQ7XG5cbiAgICAgIGlmICh0YXJnZXQgJiYgaXNUYXJnZXRDb2xvclBpY2tlcikge1xuICAgICAgICB0YXJnZXQub25ibHVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGVkaXRhYmxlLmZvY3VzKCk7XG4gICAgICAgIH07XG4gICAgICB9IC8vIGNhc2U6IGNsaWNraW5nIG9uIHRoZSBzYW1lIHByb3BlcnR5IOKGkiBubyBjaGFuZ2Ug4oaSIG5vIHVwZGF0ZSDihpIgbm8gZm9jdXNcblxuXG4gICAgICBpZiAoIWlzVGFyZ2V0Q29sb3JQaWNrZXIpIHtcbiAgICAgICAgZWRpdGFibGUuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTsgLy8gcHJldmVudCBibHVyIHdoZW4gY2hhbmdpbmcgcHJvcGVydGllcyBmcm9tIHRoZSBtZW51XG5cblxuICBjb25zdCBvblBvaW50ZXJEb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgY29uc3QgaXNUYXJnZXRDb2xvclBpY2tlciA9IGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgZXZlbnQudGFyZ2V0LmNsb3Nlc3QoXCIuY29sb3ItcGlja2VyLWlucHV0XCIpICYmIGlzV3JpdGFibGVFbGVtZW50KGV2ZW50LnRhcmdldCk7XG4gICAgY29uc3QgaXNTaGFwZUFjdGlvbnNQYW5lbCA9IChldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fCBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBTVkdFbGVtZW50KSAmJiAoZXZlbnQudGFyZ2V0LmNsb3Nlc3QoYC4ke0NMQVNTRVMuU0hBUEVfQUNUSU9OU19NRU5VfWApIHx8IGV2ZW50LnRhcmdldC5jbG9zZXN0KGAuJHtDTEFTU0VTLlNIQVBFX0FDVElPTlNfTU9CSUxFX01FTlV9YCkgfHwgZXZlbnQudGFyZ2V0LmNsb3Nlc3QoYC4ke0NMQVNTRVMuTU9CSUxFX1RPT0xCQVJ9YCkpO1xuXG4gICAgaWYgKChldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fCBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBTVkdFbGVtZW50KSAmJiBpc1NoYXBlQWN0aW9uc1BhbmVsICYmICFpc1dyaXRhYmxlRWxlbWVudChldmVudC50YXJnZXQpIHx8IGlzVGFyZ2V0Q29sb3JQaWNrZXIpIHtcbiAgICAgIGVkaXRhYmxlLm9uYmx1ciA9IG51bGw7XG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBiaW5kQmx1ckV2ZW50KTsgLy8gaGFuZGxlIGVkZ2UtY2FzZSB3aGVyZSBwb2ludGVydXAgZG9lc24ndCBmaXJlIGUuZy4gZHVlIHRvIHVzZXJcbiAgICAgIC8vIGFsdC10YWJiaW5nIGF3YXlcblxuICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsIGhhbmRsZVN1Ym1pdCk7XG4gICAgfVxuICB9OyAvLyBoYW5kbGUgdXBkYXRlcyBvZiB0ZXh0RWxlbWVudCBwcm9wZXJ0aWVzIG9mIGVkaXRpbmcgZWxlbWVudFxuXG5cbiAgY29uc3QgdW5iaW5kVXBkYXRlID0gU2NlbmUuZ2V0U2NlbmUoZWxlbWVudCkuYWRkQ2FsbGJhY2soZnVuY3Rpb24gKCkge1xuICAgIHVwZGF0ZVd5c2l3eWdTdHlsZSgpO1xuICAgIGNvbnN0IGlzQ29sb3JQaWNrZXJBY3RpdmUgPSAhIWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ/LmNsb3Nlc3QoXCIuY29sb3ItcGlja2VyLWlucHV0XCIpO1xuXG4gICAgaWYgKCFpc0NvbG9yUGlja2VyQWN0aXZlKSB7XG4gICAgICBlZGl0YWJsZS5mb2N1cygpO1xuICAgIH1cbiAgfSk7IC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGxldCBpc0Rlc3Ryb3llZCA9IGZhbHNlOyAvLyBzZWxlY3Qgb24gaW5pdCAoZm9jdXNpbmcgaXMgZG9uZSBzZXBhcmF0ZWx5IGluc2lkZSB0aGUgYmluZEJsdXJFdmVudCgpXG4gIC8vIGJlY2F1c2Ugd2UgbmVlZCBpdCB0byBoYXBwZW4gKmFmdGVyKiB0aGUgYmx1ciBldmVudCBmcm9tIGBwb2ludGVyZG93bmApXG5cbiAgZWRpdGFibGUuc2VsZWN0KCk7XG4gIGJpbmRCbHVyRXZlbnQoKTsgLy8gcmVwb3NpdGlvbiB3eXNpd3lnIGluIGNhc2Ugb2YgY2FudmFzIGlzIHJlc2l6ZWQuIFVzaW5nIFJlc2l6ZU9ic2VydmVyXG4gIC8vIGlzIHByZWZlcnJlZCBzbyB3ZSBjYXRjaCBjaGFuZ2VzIGZyb20gaG9zdCwgd2hlcmUgd2luZG93IG1heSBub3QgcmVzaXplLlxuXG4gIGxldCBvYnNlcnZlciA9IG51bGw7XG5cbiAgaWYgKGNhbnZhcyAmJiBcIlJlc2l6ZU9ic2VydmVyXCIgaW4gd2luZG93KSB7XG4gICAgb2JzZXJ2ZXIgPSBuZXcgd2luZG93LlJlc2l6ZU9ic2VydmVyKGZ1bmN0aW9uICgpIHtcbiAgICAgIHVwZGF0ZVd5c2l3eWdTdHlsZSgpO1xuICAgIH0pO1xuICAgIG9ic2VydmVyLm9ic2VydmUoY2FudmFzKTtcbiAgfSBlbHNlIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCB1cGRhdGVXeXNpd3lnU3R5bGUpO1xuICB9XG5cbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBvblBvaW50ZXJEb3duKTtcbiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ3aGVlbFwiLCBzdG9wRXZlbnQsIHtcbiAgICBwYXNzaXZlOiBmYWxzZSxcbiAgICBjYXB0dXJlOiB0cnVlXG4gIH0pO1xuICBleGNhbGlkcmF3Q29udGFpbmVyPy5xdWVyeVNlbGVjdG9yKFwiLmV4Y2FsaWRyYXctdGV4dEVkaXRvckNvbnRhaW5lclwiKS5hcHBlbmRDaGlsZChlZGl0YWJsZSk7XG59OyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///../../element/textWysiwyg.tsx\\n\");\n\n//# sourceURL=webpack://Excalidraw/../../element/textWysiwyg.tsx?");
2734
+ eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ \\\"textWysiwyg\\\": () => (/* binding */ textWysiwyg)\\n/* harmony export */ });\\n/* harmony import */ var _keys__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../keys */ \\\"../../keys.ts\\\");\\n/* harmony import */ var _utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../utils */ \\\"../../utils.ts\\\");\\n/* harmony import */ var _scene_Scene__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../scene/Scene */ \\\"../../scene/Scene.ts\\\");\\n/* harmony import */ var _typeChecks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./typeChecks */ \\\"../../element/typeChecks.ts\\\");\\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../constants */ \\\"../../constants.ts\\\");\\n/* harmony import */ var _mutateElement__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./mutateElement */ \\\"../../element/mutateElement.ts\\\");\\n/* harmony import */ var _textElement__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./textElement */ \\\"../../element/textElement.ts\\\");\\n/* harmony import */ var _actions_actionProperties__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../actions/actionProperties */ \\\"../../actions/actionProperties.tsx\\\");\\n/* harmony import */ var _actions_actionCanvas__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../actions/actionCanvas */ \\\"../../actions/actionCanvas.tsx\\\");\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\nconst normalizeText = function (text) {\\r\\n return text // replace tabs with spaces so they render and measure correctly\\r\\n .replace(/\\\\t/g, \\\" \\\") // normalize newlines\\r\\n .replace(/\\\\r?\\\\n|\\\\r/g, \\\"\\\\n\\\");\\r\\n};\\r\\nconst getTransform = function (width, height, angle, appState, maxWidth, maxHeight) {\\r\\n const { zoom } = appState;\\r\\n const degree = 180 * angle / Math.PI;\\r\\n let translateX = width * (zoom.value - 1) / 2;\\r\\n let translateY = height * (zoom.value - 1) / 2;\\r\\n if (width > maxWidth && zoom.value !== 1) {\\r\\n translateX = maxWidth * (zoom.value - 1) / 2;\\r\\n }\\r\\n if (height > maxHeight && zoom.value !== 1) {\\r\\n translateY = maxHeight * (zoom.value - 1) / 2;\\r\\n }\\r\\n return `translate(${translateX}px, ${translateY}px) scale(${zoom.value}) rotate(${degree}deg)`;\\r\\n};\\r\\nconst textWysiwyg = function (_ref) {\\r\\n let { id, onChange, onSubmit, getViewportCoords, element, canvas, excalidrawContainer, app } = _ref;\\r\\n const textPropertiesUpdated = function (updatedElement, editable) {\\r\\n const currentFont = editable.style.fontFamily.replace(/\\\"/g, \\\"\\\");\\r\\n if ((0,_utils__WEBPACK_IMPORTED_MODULE_1__.getFontFamilyString)({\\r\\n fontFamily: updatedElement.fontFamily\\r\\n }) !== currentFont) {\\r\\n return true;\\r\\n }\\r\\n if (`${updatedElement.fontSize}px` !== editable.style.fontSize) {\\r\\n return true;\\r\\n }\\r\\n return false;\\r\\n };\\r\\n let originalContainerHeight;\\r\\n const updateWysiwygStyle = function () {\\r\\n var _a;\\r\\n const appState = app.state;\\r\\n const updatedElement = (_a = _scene_Scene__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"].getScene(element)) === null || _a === void 0 ? void 0 : _a.getElement(id);\\r\\n const { textAlign, verticalAlign } = updatedElement;\\r\\n const approxLineHeight = (0,_textElement__WEBPACK_IMPORTED_MODULE_6__.getApproxLineHeight)((0,_utils__WEBPACK_IMPORTED_MODULE_1__.getFontString)(updatedElement));\\r\\n if (updatedElement && (0,_typeChecks__WEBPACK_IMPORTED_MODULE_3__.isTextElement)(updatedElement)) {\\r\\n let coordX = updatedElement.x;\\r\\n let coordY = updatedElement.y;\\r\\n const container = (0,_textElement__WEBPACK_IMPORTED_MODULE_6__.getContainerElement)(updatedElement);\\r\\n let maxWidth = updatedElement.width;\\r\\n let maxHeight = updatedElement.height;\\r\\n let width = updatedElement.width; // Set to element height by default since that's\\r\\n // what is going to be used for unbounded text\\r\\n let height = updatedElement.height;\\r\\n if (container && updatedElement.containerId) {\\r\\n const propertiesUpdated = textPropertiesUpdated(updatedElement, editable); // using editor.style.height to get the accurate height of text editor\\r\\n const editorHeight = Number(editable.style.height.slice(0, -2));\\r\\n if (editorHeight > 0) {\\r\\n height = editorHeight;\\r\\n }\\r\\n if (propertiesUpdated) {\\r\\n originalContainerHeight = container.height; // update height of the editor after properties updated\\r\\n height = updatedElement.height;\\r\\n }\\r\\n if (!originalContainerHeight) {\\r\\n originalContainerHeight = container.height;\\r\\n }\\r\\n maxWidth = container.width - _constants__WEBPACK_IMPORTED_MODULE_4__.BOUND_TEXT_PADDING * 2;\\r\\n maxHeight = container.height - _constants__WEBPACK_IMPORTED_MODULE_4__.BOUND_TEXT_PADDING * 2;\\r\\n width = maxWidth; // The coordinates of text box set a distance of\\r\\n // 5px to preserve padding\\r\\n coordX = container.x + _constants__WEBPACK_IMPORTED_MODULE_4__.BOUND_TEXT_PADDING; // autogrow container height if text exceeds\\r\\n if (height > maxHeight) {\\r\\n const diff = Math.min(height - maxHeight, approxLineHeight);\\r\\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_5__.mutateElement)(container, {\\r\\n height: container.height + diff\\r\\n });\\r\\n return;\\r\\n }\\r\\n else if ( // autoshrink container height until original container height\\r\\n // is reached when text is removed\\r\\n container.height > originalContainerHeight && height < maxHeight) {\\r\\n const diff = Math.min(maxHeight - height, approxLineHeight);\\r\\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_5__.mutateElement)(container, {\\r\\n height: container.height - diff\\r\\n });\\r\\n } // Start pushing text upward until a diff of 30px (padding)\\r\\n // is reached\\r\\n else {\\r\\n // vertically center align the text\\r\\n if (verticalAlign === _constants__WEBPACK_IMPORTED_MODULE_4__.VERTICAL_ALIGN.MIDDLE) {\\r\\n coordY = container.y + container.height / 2 - height / 2;\\r\\n }\\r\\n if (verticalAlign === _constants__WEBPACK_IMPORTED_MODULE_4__.VERTICAL_ALIGN.BOTTOM) {\\r\\n coordY = container.y + container.height - height - _constants__WEBPACK_IMPORTED_MODULE_4__.BOUND_TEXT_PADDING;\\r\\n }\\r\\n }\\r\\n }\\r\\n const [viewportX, viewportY] = getViewportCoords(coordX, coordY);\\r\\n const initialSelectionStart = editable.selectionStart;\\r\\n const initialSelectionEnd = editable.selectionEnd;\\r\\n const initialLength = editable.value.length;\\r\\n editable.value = updatedElement.originalText; // restore cursor position after value updated so it doesn't\\r\\n // go to the end of text when container auto expanded\\r\\n if (initialSelectionStart === initialSelectionEnd && initialSelectionEnd !== initialLength) {\\r\\n // get diff between length and selection end and shift\\r\\n // the cursor by \\\"diff\\\" times to position correctly\\r\\n const diff = initialLength - initialSelectionEnd;\\r\\n editable.selectionStart = editable.value.length - diff;\\r\\n editable.selectionEnd = editable.value.length - diff;\\r\\n }\\r\\n const lines = updatedElement.originalText.split(\\\"\\\\n\\\");\\r\\n const lineHeight = updatedElement.containerId ? approxLineHeight : updatedElement.height / lines.length;\\r\\n if (!container) {\\r\\n maxWidth = (appState.width - 8 - viewportX) / appState.zoom.value;\\r\\n } // Make sure text editor height doesn't go beyond viewport\\r\\n const editorMaxHeight = (appState.height - viewportY) / appState.zoom.value;\\r\\n const angle = container ? container.angle : updatedElement.angle;\\r\\n Object.assign(editable.style, {\\r\\n font: (0,_utils__WEBPACK_IMPORTED_MODULE_1__.getFontString)(updatedElement),\\r\\n // must be defined *after* font ¯\\\\_(ツ)_/¯\\r\\n lineHeight: `${lineHeight}px`,\\r\\n width: `${width}px`,\\r\\n height: `${height}px`,\\r\\n left: `${viewportX}px`,\\r\\n top: `${viewportY}px`,\\r\\n transform: getTransform(width, height, angle, appState, maxWidth, editorMaxHeight),\\r\\n textAlign,\\r\\n verticalAlign,\\r\\n color: updatedElement.strokeColor,\\r\\n opacity: updatedElement.opacity / 100,\\r\\n filter: \\\"var(--theme-filter)\\\",\\r\\n maxWidth: `${maxWidth}px`,\\r\\n maxHeight: `${editorMaxHeight}px`\\r\\n }); // For some reason updating font attribute doesn't set font family\\r\\n // hence updating font family explicitly for test environment\\r\\n if ((0,_utils__WEBPACK_IMPORTED_MODULE_1__.isTestEnv)()) {\\r\\n editable.style.fontFamily = (0,_utils__WEBPACK_IMPORTED_MODULE_1__.getFontFamilyString)(updatedElement);\\r\\n }\\r\\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_5__.mutateElement)(updatedElement, {\\r\\n x: coordX,\\r\\n y: coordY\\r\\n });\\r\\n }\\r\\n };\\r\\n const editable = document.createElement(\\\"textarea\\\");\\r\\n editable.dir = \\\"auto\\\";\\r\\n editable.tabIndex = 0;\\r\\n editable.dataset.type = \\\"wysiwyg\\\"; // prevent line wrapping on Safari\\r\\n editable.wrap = \\\"off\\\";\\r\\n editable.classList.add(\\\"excalidraw-wysiwyg\\\");\\r\\n let whiteSpace = \\\"pre\\\";\\r\\n let wordBreak = \\\"normal\\\";\\r\\n if ((0,_typeChecks__WEBPACK_IMPORTED_MODULE_3__.isBoundToContainer)(element)) {\\r\\n whiteSpace = \\\"pre-wrap\\\";\\r\\n wordBreak = \\\"break-word\\\";\\r\\n }\\r\\n Object.assign(editable.style, {\\r\\n position: \\\"absolute\\\",\\r\\n display: \\\"inline-block\\\",\\r\\n minHeight: \\\"1em\\\",\\r\\n backfaceVisibility: \\\"hidden\\\",\\r\\n margin: 0,\\r\\n padding: 0,\\r\\n border: 0,\\r\\n outline: 0,\\r\\n resize: \\\"none\\\",\\r\\n background: \\\"transparent\\\",\\r\\n overflow: \\\"hidden\\\",\\r\\n // must be specified because in dark mode canvas creates a stacking context\\r\\n zIndex: \\\"var(--zIndex-wysiwyg)\\\",\\r\\n wordBreak,\\r\\n // prevent line wrapping (`whitespace: nowrap` doesn't work on FF)\\r\\n whiteSpace,\\r\\n overflowWrap: \\\"break-word\\\"\\r\\n });\\r\\n updateWysiwygStyle();\\r\\n if (onChange) {\\r\\n editable.oninput = function () {\\r\\n var _a;\\r\\n const updatedElement = (_a = _scene_Scene__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"].getScene(element)) === null || _a === void 0 ? void 0 : _a.getElement(id);\\r\\n const font = (0,_utils__WEBPACK_IMPORTED_MODULE_1__.getFontString)(updatedElement); // using scrollHeight here since we need to calculate\\r\\n // number of lines so cannot use editable.style.height\\r\\n // as that gets updated below\\r\\n const lines = editable.scrollHeight / (0,_textElement__WEBPACK_IMPORTED_MODULE_6__.getApproxLineHeight)(font); // auto increase height only when lines > 1 so its\\r\\n // measured correctly and vertically aligns for\\r\\n // first line as well as setting height to \\\"auto\\\"\\r\\n // doubles the height as soon as user starts typing\\r\\n if ((0,_typeChecks__WEBPACK_IMPORTED_MODULE_3__.isBoundToContainer)(element) && lines > 1) {\\r\\n let height = \\\"auto\\\";\\r\\n if (lines === 2) {\\r\\n const container = (0,_textElement__WEBPACK_IMPORTED_MODULE_6__.getContainerElement)(element);\\r\\n const actualLineCount = (0,_textElement__WEBPACK_IMPORTED_MODULE_6__.wrapText)(editable.value, font, container.width).split(\\\"\\\\n\\\").length; // This is browser behaviour when setting height to \\\"auto\\\"\\r\\n // It sets the height needed for 2 lines even if actual\\r\\n // line count is 1 as mentioned above as well\\r\\n // hence reducing the height by half if actual line count is 1\\r\\n // so single line aligns vertically when deleting\\r\\n if (actualLineCount === 1) {\\r\\n height = `${editable.scrollHeight / 2}px`;\\r\\n }\\r\\n }\\r\\n editable.style.height = height;\\r\\n editable.style.height = `${editable.scrollHeight}px`;\\r\\n }\\r\\n onChange(normalizeText(editable.value));\\r\\n };\\r\\n }\\r\\n editable.onkeydown = function (event) {\\r\\n event.stopPropagation();\\r\\n if (!event.shiftKey && _actions_actionCanvas__WEBPACK_IMPORTED_MODULE_8__.actionZoomIn.keyTest(event)) {\\r\\n event.preventDefault();\\r\\n app.actionManager.executeAction(_actions_actionCanvas__WEBPACK_IMPORTED_MODULE_8__.actionZoomIn);\\r\\n updateWysiwygStyle();\\r\\n }\\r\\n else if (!event.shiftKey && _actions_actionCanvas__WEBPACK_IMPORTED_MODULE_8__.actionZoomOut.keyTest(event)) {\\r\\n event.preventDefault();\\r\\n app.actionManager.executeAction(_actions_actionCanvas__WEBPACK_IMPORTED_MODULE_8__.actionZoomOut);\\r\\n updateWysiwygStyle();\\r\\n }\\r\\n else if (_actions_actionProperties__WEBPACK_IMPORTED_MODULE_7__.actionDecreaseFontSize.keyTest(event)) {\\r\\n app.actionManager.executeAction(_actions_actionProperties__WEBPACK_IMPORTED_MODULE_7__.actionDecreaseFontSize);\\r\\n }\\r\\n else if (_actions_actionProperties__WEBPACK_IMPORTED_MODULE_7__.actionIncreaseFontSize.keyTest(event)) {\\r\\n app.actionManager.executeAction(_actions_actionProperties__WEBPACK_IMPORTED_MODULE_7__.actionIncreaseFontSize);\\r\\n }\\r\\n else if (event.key === _keys__WEBPACK_IMPORTED_MODULE_0__.KEYS.ESCAPE) {\\r\\n event.preventDefault();\\r\\n submittedViaKeyboard = true;\\r\\n handleSubmit();\\r\\n }\\r\\n else if (event.key === _keys__WEBPACK_IMPORTED_MODULE_0__.KEYS.ENTER && event[_keys__WEBPACK_IMPORTED_MODULE_0__.KEYS.CTRL_OR_CMD]) {\\r\\n event.preventDefault();\\r\\n if (event.isComposing || event.keyCode === 229) {\\r\\n return;\\r\\n }\\r\\n submittedViaKeyboard = true;\\r\\n handleSubmit();\\r\\n }\\r\\n else if (event.key === _keys__WEBPACK_IMPORTED_MODULE_0__.KEYS.TAB || event[_keys__WEBPACK_IMPORTED_MODULE_0__.KEYS.CTRL_OR_CMD] && (event.code === _keys__WEBPACK_IMPORTED_MODULE_0__.CODES.BRACKET_LEFT || event.code === _keys__WEBPACK_IMPORTED_MODULE_0__.CODES.BRACKET_RIGHT)) {\\r\\n event.preventDefault();\\r\\n if (event.shiftKey || event.code === _keys__WEBPACK_IMPORTED_MODULE_0__.CODES.BRACKET_LEFT) {\\r\\n outdent();\\r\\n }\\r\\n else {\\r\\n indent();\\r\\n } // We must send an input event to resize the element\\r\\n editable.dispatchEvent(new Event(\\\"input\\\"));\\r\\n }\\r\\n };\\r\\n const TAB_SIZE = 4;\\r\\n const TAB = \\\" \\\".repeat(TAB_SIZE);\\r\\n const RE_LEADING_TAB = new RegExp(`^ {1,${TAB_SIZE}}`);\\r\\n const indent = function () {\\r\\n const { selectionStart, selectionEnd } = editable;\\r\\n const linesStartIndices = getSelectedLinesStartIndices();\\r\\n let value = editable.value;\\r\\n linesStartIndices.forEach(function (startIndex) {\\r\\n const startValue = value.slice(0, startIndex);\\r\\n const endValue = value.slice(startIndex);\\r\\n value = `${startValue}${TAB}${endValue}`;\\r\\n });\\r\\n editable.value = value;\\r\\n editable.selectionStart = selectionStart + TAB_SIZE;\\r\\n editable.selectionEnd = selectionEnd + TAB_SIZE * linesStartIndices.length;\\r\\n };\\r\\n const outdent = function () {\\r\\n const { selectionStart, selectionEnd } = editable;\\r\\n const linesStartIndices = getSelectedLinesStartIndices();\\r\\n const removedTabs = [];\\r\\n let value = editable.value;\\r\\n linesStartIndices.forEach(function (startIndex) {\\r\\n const tabMatch = value.slice(startIndex, startIndex + TAB_SIZE).match(RE_LEADING_TAB);\\r\\n if (tabMatch) {\\r\\n const startValue = value.slice(0, startIndex);\\r\\n const endValue = value.slice(startIndex + tabMatch[0].length); // Delete a tab from the line\\r\\n value = `${startValue}${endValue}`;\\r\\n removedTabs.push(startIndex);\\r\\n }\\r\\n });\\r\\n editable.value = value;\\r\\n if (removedTabs.length) {\\r\\n if (selectionStart > removedTabs[removedTabs.length - 1]) {\\r\\n editable.selectionStart = Math.max(selectionStart - TAB_SIZE, removedTabs[removedTabs.length - 1]);\\r\\n }\\r\\n else {\\r\\n // If the cursor is before the first tab removed, ex:\\r\\n // Line| #1\\r\\n // Line #2\\r\\n // Lin|e #3\\r\\n // we should reset the selectionStart to his initial value.\\r\\n editable.selectionStart = selectionStart;\\r\\n }\\r\\n editable.selectionEnd = Math.max(editable.selectionStart, selectionEnd - TAB_SIZE * removedTabs.length);\\r\\n }\\r\\n };\\r\\n /**\\r\\n * @returns indices of start positions of selected lines, in reverse order\\r\\n */\\r\\n const getSelectedLinesStartIndices = function () {\\r\\n let { selectionStart, selectionEnd, value } = editable; // chars before selectionStart on the same line\\r\\n const startOffset = value.slice(0, selectionStart).match(/[^\\\\n]*$/)[0].length; // put caret at the start of the line\\r\\n selectionStart = selectionStart - startOffset;\\r\\n const selected = value.slice(selectionStart, selectionEnd);\\r\\n return selected.split(\\\"\\\\n\\\").reduce(function (startIndices, line, idx, lines) {\\r\\n return startIndices.concat(idx ? // curr line index is prev line's start + prev line's length + \\\\n\\r\\n startIndices[idx - 1] + lines[idx - 1].length + 1 : // first selected line\\r\\n selectionStart);\\r\\n }, []).reverse();\\r\\n };\\r\\n const stopEvent = function (event) {\\r\\n event.preventDefault();\\r\\n event.stopPropagation();\\r\\n }; // using a state variable instead of passing it to the handleSubmit callback\\r\\n // so that we don't need to create separate a callback for event handlers\\r\\n let submittedViaKeyboard = false;\\r\\n const handleSubmit = function () {\\r\\n var _a, _b;\\r\\n // cleanup must be run before onSubmit otherwise when app blurs the wysiwyg\\r\\n // it'd get stuck in an infinite loop of blur→onSubmit after we re-focus the\\r\\n // wysiwyg on update\\r\\n cleanup();\\r\\n const updateElement = (_a = _scene_Scene__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"].getScene(element)) === null || _a === void 0 ? void 0 : _a.getElement(element.id);\\r\\n if (!updateElement) {\\r\\n return;\\r\\n }\\r\\n let text = editable.value;\\r\\n const container = (0,_textElement__WEBPACK_IMPORTED_MODULE_6__.getContainerElement)(updateElement);\\r\\n if (container) {\\r\\n text = updateElement.text;\\r\\n if (editable.value) {\\r\\n const boundTextElementId = (0,_textElement__WEBPACK_IMPORTED_MODULE_6__.getBoundTextElementId)(container);\\r\\n if (!boundTextElementId || boundTextElementId !== element.id) {\\r\\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_5__.mutateElement)(container, {\\r\\n boundElements: (container.boundElements || []).concat({\\r\\n type: \\\"text\\\",\\r\\n id: element.id\\r\\n })\\r\\n });\\r\\n }\\r\\n }\\r\\n else {\\r\\n (0,_mutateElement__WEBPACK_IMPORTED_MODULE_5__.mutateElement)(container, {\\r\\n boundElements: (_b = container.boundElements) === null || _b === void 0 ? void 0 : _b.filter(function (ele) {\\r\\n return !(0,_typeChecks__WEBPACK_IMPORTED_MODULE_3__.isTextElement)(ele);\\r\\n })\\r\\n });\\r\\n }\\r\\n }\\r\\n onSubmit({\\r\\n text,\\r\\n viaKeyboard: submittedViaKeyboard,\\r\\n originalText: editable.value\\r\\n });\\r\\n };\\r\\n const cleanup = function () {\\r\\n if (isDestroyed) {\\r\\n return;\\r\\n }\\r\\n isDestroyed = true; // remove events to ensure they don't late-fire\\r\\n editable.onblur = null;\\r\\n editable.oninput = null;\\r\\n editable.onkeydown = null;\\r\\n if (observer) {\\r\\n observer.disconnect();\\r\\n }\\r\\n window.removeEventListener(\\\"resize\\\", updateWysiwygStyle);\\r\\n window.removeEventListener(\\\"wheel\\\", stopEvent, true);\\r\\n window.removeEventListener(\\\"pointerdown\\\", onPointerDown);\\r\\n window.removeEventListener(\\\"pointerup\\\", bindBlurEvent);\\r\\n window.removeEventListener(\\\"blur\\\", handleSubmit);\\r\\n unbindUpdate();\\r\\n editable.remove();\\r\\n };\\r\\n const bindBlurEvent = function (event) {\\r\\n window.removeEventListener(\\\"pointerup\\\", bindBlurEvent); // Deferred so that the pointerdown that initiates the wysiwyg doesn't\\r\\n // trigger the blur on ensuing pointerup.\\r\\n // Also to handle cases such as picking a color which would trigger a blur\\r\\n // in that same tick.\\r\\n const target = event === null || event === void 0 ? void 0 : event.target;\\r\\n const isTargetColorPicker = target instanceof HTMLInputElement && target.closest(\\\".color-picker-input\\\") && (0,_utils__WEBPACK_IMPORTED_MODULE_1__.isWritableElement)(target);\\r\\n setTimeout(function () {\\r\\n editable.onblur = handleSubmit;\\r\\n if (target && isTargetColorPicker) {\\r\\n target.onblur = function () {\\r\\n editable.focus();\\r\\n };\\r\\n } // case: clicking on the same property → no change → no update → no focus\\r\\n if (!isTargetColorPicker) {\\r\\n editable.focus();\\r\\n }\\r\\n });\\r\\n }; // prevent blur when changing properties from the menu\\r\\n const onPointerDown = function (event) {\\r\\n const isTargetColorPicker = event.target instanceof HTMLInputElement && event.target.closest(\\\".color-picker-input\\\") && (0,_utils__WEBPACK_IMPORTED_MODULE_1__.isWritableElement)(event.target);\\r\\n const isShapeActionsPanel = //zsviczian\\r\\n (event.target instanceof HTMLElement || event.target instanceof SVGElement) && (event.target.closest(`.${_constants__WEBPACK_IMPORTED_MODULE_4__.CLASSES.SHAPE_ACTIONS_MENU}`) || event.target.closest(`.${_constants__WEBPACK_IMPORTED_MODULE_4__.CLASSES.SHAPE_ACTIONS_MOBILE_MENU}`) || event.target.closest(`.${_constants__WEBPACK_IMPORTED_MODULE_4__.CLASSES.MOBILE_TOOLBAR}`));\\r\\n if ((event.target instanceof HTMLElement || event.target instanceof SVGElement) && isShapeActionsPanel && //zsviczian\\r\\n !(0,_utils__WEBPACK_IMPORTED_MODULE_1__.isWritableElement)(event.target) || isTargetColorPicker) {\\r\\n editable.onblur = null;\\r\\n window.addEventListener(\\\"pointerup\\\", bindBlurEvent); // handle edge-case where pointerup doesn't fire e.g. due to user\\r\\n // alt-tabbing away\\r\\n window.addEventListener(\\\"blur\\\", handleSubmit);\\r\\n }\\r\\n }; // handle updates of textElement properties of editing element\\r\\n const unbindUpdate = _scene_Scene__WEBPACK_IMPORTED_MODULE_2__[\\\"default\\\"].getScene(element).addCallback(function () {\\r\\n var _a;\\r\\n updateWysiwygStyle();\\r\\n const isColorPickerActive = !!((_a = document.activeElement) === null || _a === void 0 ? void 0 : _a.closest(\\\".color-picker-input\\\"));\\r\\n if (!isColorPickerActive) {\\r\\n editable.focus();\\r\\n }\\r\\n }); // ---------------------------------------------------------------------------\\r\\n let isDestroyed = false; // select on init (focusing is done separately inside the bindBlurEvent()\\r\\n // because we need it to happen *after* the blur event from `pointerdown`)\\r\\n editable.select();\\r\\n bindBlurEvent(); // reposition wysiwyg in case of canvas is resized. Using ResizeObserver\\r\\n // is preferred so we catch changes from host, where window may not resize.\\r\\n let observer = null;\\r\\n if (canvas && \\\"ResizeObserver\\\" in window) {\\r\\n observer = new window.ResizeObserver(function () {\\r\\n updateWysiwygStyle();\\r\\n });\\r\\n observer.observe(canvas);\\r\\n }\\r\\n else {\\r\\n window.addEventListener(\\\"resize\\\", updateWysiwygStyle);\\r\\n }\\r\\n window.addEventListener(\\\"pointerdown\\\", onPointerDown);\\r\\n window.addEventListener(\\\"wheel\\\", stopEvent, {\\r\\n passive: false,\\r\\n capture: true\\r\\n });\\r\\n excalidrawContainer === null || excalidrawContainer === void 0 ? void 0 : excalidrawContainer.querySelector(\\\".excalidraw-textEditorContainer\\\").appendChild(editable);\\r\\n};\\r\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUMsQ0FBQyxlQUFRLENBQUMsYUFBYSwwQ0FBRSxPQUFPLENBQUMscUJBQXFCLENBQUMsRUFBQztRQUVyRixJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDeEIsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQyxDQUFDLENBQUMsQ0FBQyw4RUFBOEU7SUFFbEYsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMseUVBQXlFO0lBQ2xHLDBFQUEwRTtJQUUxRSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbEIsYUFBYSxFQUFFLENBQUMsQ0FBQyx3RUFBd0U7SUFDekYsMkVBQTJFO0lBRTNFLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQztJQUVwQixJQUFJLE1BQU0sSUFBSSxnQkFBZ0IsSUFBSSxNQUFNLEVBQUU7UUFDeEMsUUFBUSxHQUFHLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQztZQUNuQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUMxQjtTQUFNO1FBQ0wsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0tBQ3ZEO0lBRUQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUN0RCxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRTtRQUMxQyxPQUFPLEVBQUUsS0FBSztRQUNkLE9BQU8sRUFBRSxJQUFJO0tBQ2QsQ0FBQyxDQUFDO0lBQ0gsbUJBQW1CLGFBQW5CLG1CQUFtQix1QkFBbkIsbUJBQW1CLENBQUUsYUFBYSxDQUFDLGlDQUFpQyxFQUFFLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM5RixDQUFDLENBQUMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vLi4vZWxlbWVudC90ZXh0V3lzaXd5Zy50c3g/NTdmZCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDT0RFUywgS0VZUyB9IGZyb20gXCIuLi9rZXlzXCI7XG5pbXBvcnQgeyBpc1dyaXRhYmxlRWxlbWVudCwgZ2V0Rm9udFN0cmluZywgZ2V0Rm9udEZhbWlseVN0cmluZywgaXNUZXN0RW52IH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgU2NlbmUgZnJvbSBcIi4uL3NjZW5lL1NjZW5lXCI7XG5pbXBvcnQgeyBpc0JvdW5kVG9Db250YWluZXIsIGlzVGV4dEVsZW1lbnQgfSBmcm9tIFwiLi90eXBlQ2hlY2tzXCI7XG5pbXBvcnQgeyBDTEFTU0VTLCBCT1VORF9URVhUX1BBRERJTkcsIFZFUlRJQ0FMX0FMSUdOIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgbXV0YXRlRWxlbWVudCB9IGZyb20gXCIuL211dGF0ZUVsZW1lbnRcIjtcbmltcG9ydCB7IGdldEFwcHJveExpbmVIZWlnaHQsIGdldEJvdW5kVGV4dEVsZW1lbnRJZCwgZ2V0Q29udGFpbmVyRWxlbWVudCwgd3JhcFRleHQgfSBmcm9tIFwiLi90ZXh0RWxlbWVudFwiO1xuaW1wb3J0IHsgYWN0aW9uRGVjcmVhc2VGb250U2l6ZSwgYWN0aW9uSW5jcmVhc2VGb250U2l6ZSB9IGZyb20gXCIuLi9hY3Rpb25zL2FjdGlvblByb3BlcnRpZXNcIjtcbmltcG9ydCB7IGFjdGlvblpvb21JbiwgYWN0aW9uWm9vbU91dCB9IGZyb20gXCIuLi9hY3Rpb25zL2FjdGlvbkNhbnZhc1wiO1xuXG5jb25zdCBub3JtYWxpemVUZXh0ID0gZnVuY3Rpb24gKHRleHQpIHtcbiAgcmV0dXJuIHRleHQgLy8gcmVwbGFjZSB0YWJzIHdpdGggc3BhY2VzIHNvIHRoZXkgcmVuZGVyIGFuZCBtZWFzdXJlIGNvcnJlY3RseVxuICAucmVwbGFjZSgvXFx0L2csIFwiICAgICAgICBcIikgLy8gbm9ybWFsaXplIG5ld2xpbmVzXG4gIC5yZXBsYWNlKC9cXHI/XFxufFxcci9nLCBcIlxcblwiKTtcbn07XG5cbmNvbnN0IGdldFRyYW5zZm9ybSA9IGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0LCBhbmdsZSwgYXBwU3RhdGUsIG1heFdpZHRoLCBtYXhIZWlnaHQpIHtcbiAgY29uc3Qge1xuICAgIHpvb21cbiAgfSA9IGFwcFN0YXRlO1xuICBjb25zdCBkZWdyZWUgPSAxODAgKiBhbmdsZSAvIE1hdGguUEk7XG4gIGxldCB0cmFuc2xhdGVYID0gd2lkdGggKiAoem9vbS52YWx1ZSAtIDEpIC8gMjtcbiAgbGV0IHRyYW5zbGF0ZVkgPSBoZWlnaHQgKiAoem9vbS52YWx1ZSAtIDEpIC8gMjtcblxuICBpZiAod2lkdGggPiBtYXhXaWR0aCAmJiB6b29tLnZhbHVlICE9PSAxKSB7XG4gICAgdHJhbnNsYXRlWCA9IG1heFdpZHRoICogKHpvb20udmFsdWUgLSAxKSAvIDI7XG4gIH1cblxuICBpZiAoaGVpZ2h0ID4gbWF4SGVpZ2h0ICYmIHpvb20udmFsdWUgIT09IDEpIHtcbiAgICB0cmFuc2xhdGVZID0gbWF4SGVpZ2h0ICogKHpvb20udmFsdWUgLSAxKSAvIDI7XG4gIH1cblxuICByZXR1cm4gYHRyYW5zbGF0ZSgke3RyYW5zbGF0ZVh9cHgsICR7dHJhbnNsYXRlWX1weCkgc2NhbGUoJHt6b29tLnZhbHVlfSkgcm90YXRlKCR7ZGVncmVlfWRlZylgO1xufTtcblxuZXhwb3J0IGNvbnN0IHRleHRXeXNpd3lnID0gZnVuY3Rpb24gKF9yZWYpIHtcbiAgbGV0IHtcbiAgICBpZCxcbiAgICBvbkNoYW5nZSxcbiAgICBvblN1Ym1pdCxcbiAgICBnZXRWaWV3cG9ydENvb3JkcyxcbiAgICBlbGVtZW50LFxuICAgIGNhbnZhcyxcbiAgICBleGNhbGlkcmF3Q29udGFpbmVyLFxuICAgIGFwcFxuICB9ID0gX3JlZjtcblxuICBjb25zdCB0ZXh0UHJvcGVydGllc1VwZGF0ZWQgPSBmdW5jdGlvbiAodXBkYXRlZEVsZW1lbnQsIGVkaXRhYmxlKSB7XG4gICAgY29uc3QgY3VycmVudEZvbnQgPSBlZGl0YWJsZS5zdHlsZS5mb250RmFtaWx5LnJlcGxhY2UoL1wiL2csIFwiXCIpO1xuXG4gICAgaWYgKGdldEZvbnRGYW1pbHlTdHJpbmcoe1xuICAgICAgZm9udEZhbWlseTogdXBkYXRlZEVsZW1lbnQuZm9udEZhbWlseVxuICAgIH0pICE9PSBjdXJyZW50Rm9udCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGAke3VwZGF0ZWRFbGVtZW50LmZvbnRTaXplfXB4YCAhPT0gZWRpdGFibGUuc3R5bGUuZm9udFNpemUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfTtcblxuICBsZXQgb3JpZ2luYWxDb250YWluZXJIZWlnaHQ7XG5cbiAgY29uc3QgdXBkYXRlV3lzaXd5Z1N0eWxlID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IGFwcFN0YXRlID0gYXBwLnN0YXRlO1xuICAgIGNvbnN0IHVwZGF0ZWRFbGVtZW50ID0gU2NlbmUuZ2V0U2NlbmUoZWxlbWVudCk/LmdldEVsZW1lbnQoaWQpO1xuICAgIGNvbnN0IHtcbiAgICAgIHRleHRBbGlnbixcbiAgICAgIHZlcnRpY2FsQWxpZ25cbiAgICB9ID0gdXBkYXRlZEVsZW1lbnQ7XG4gICAgY29uc3QgYXBwcm94TGluZUhlaWdodCA9IGdldEFwcHJveExpbmVIZWlnaHQoZ2V0Rm9udFN0cmluZyh1cGRhdGVkRWxlbWVudCkpO1xuXG4gICAgaWYgKHVwZGF0ZWRFbGVtZW50ICYmIGlzVGV4dEVsZW1lbnQodXBkYXRlZEVsZW1lbnQpKSB7XG4gICAgICBsZXQgY29vcmRYID0gdXBkYXRlZEVsZW1lbnQueDtcbiAgICAgIGxldCBjb29yZFkgPSB1cGRhdGVkRWxlbWVudC55O1xuICAgICAgY29uc3QgY29udGFpbmVyID0gZ2V0Q29udGFpbmVyRWxlbWVudCh1cGRhdGVkRWxlbWVudCk7XG4gICAgICBsZXQgbWF4V2lkdGggPSB1cGRhdGVkRWxlbWVudC53aWR0aDtcbiAgICAgIGxldCBtYXhIZWlnaHQgPSB1cGRhdGVkRWxlbWVudC5oZWlnaHQ7XG4gICAgICBsZXQgd2lkdGggPSB1cGRhdGVkRWxlbWVudC53aWR0aDsgLy8gU2V0IHRvIGVsZW1lbnQgaGVpZ2h0IGJ5IGRlZmF1bHQgc2luY2UgdGhhdCdzXG4gICAgICAvLyB3aGF0IGlzIGdvaW5nIHRvIGJlIHVzZWQgZm9yIHVuYm91bmRlZCB0ZXh0XG5cbiAgICAgIGxldCBoZWlnaHQgPSB1cGRhdGVkRWxlbWVudC5oZWlnaHQ7XG5cbiAgICAgIGlmIChjb250YWluZXIgJiYgdXBkYXRlZEVsZW1lbnQuY29udGFpbmVySWQpIHtcbiAgICAgICAgY29uc3QgcHJvcGVydGllc1VwZGF0ZWQgPSB0ZXh0UHJvcGVydGllc1VwZGF0ZWQodXBkYXRlZEVsZW1lbnQsIGVkaXRhYmxlKTsgLy8gdXNpbmcgZWRpdG9yLnN0eWxlLmhlaWdodCB0byBnZXQgdGhlIGFjY3VyYXRlIGhlaWdodCBvZiB0ZXh0IGVkaXRvclxuXG4gICAgICAgIGNvbnN0IGVkaXRvckhlaWdodCA9IE51bWJlcihlZGl0YWJsZS5zdHlsZS5oZWlnaHQuc2xpY2UoMCwgLTIpKTtcblxuICAgICAgICBpZiAoZWRpdG9ySGVpZ2h0ID4gMCkge1xuICAgICAgICAgIGhlaWdodCA9IGVkaXRvckhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wZXJ0aWVzVXBkYXRlZCkge1xuICAgICAgICAgIG9yaWdpbmFsQ29udGFpbmVySGVpZ2h0ID0gY29udGFpbmVyLmhlaWdodDsgLy8gdXBkYXRlIGhlaWdodCBvZiB0aGUgZWRpdG9yIGFmdGVyIHByb3BlcnRpZXMgdXBkYXRlZFxuXG4gICAgICAgICAgaGVpZ2h0ID0gdXBkYXRlZEVsZW1lbnQuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFvcmlnaW5hbENvbnRhaW5lckhlaWdodCkge1xuICAgICAgICAgIG9yaWdpbmFsQ29udGFpbmVySGVpZ2h0ID0gY29udGFpbmVyLmhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIG1heFdpZHRoID0gY29udGFpbmVyLndpZHRoIC0gQk9VTkRfVEVYVF9QQURESU5HICogMjtcbiAgICAgICAgbWF4SGVpZ2h0ID0gY29udGFpbmVyLmhlaWdodCAtIEJPVU5EX1RFWFRfUEFERElORyAqIDI7XG4gICAgICAgIHdpZHRoID0gbWF4V2lkdGg7IC8vIFRoZSBjb29yZGluYXRlcyBvZiB0ZXh0IGJveCBzZXQgYSBkaXN0YW5jZSBvZlxuICAgICAgICAvLyA1cHggdG8gcHJlc2VydmUgcGFkZGluZ1xuXG4gICAgICAgIGNvb3JkWCA9IGNvbnRhaW5lci54ICsgQk9VTkRfVEVYVF9QQURESU5HOyAvLyBhdXRvZ3JvdyBjb250YWluZXIgaGVpZ2h0IGlmIHRleHQgZXhjZWVkc1xuXG4gICAgICAgIGlmIChoZWlnaHQgPiBtYXhIZWlnaHQpIHtcbiAgICAgICAgICBjb25zdCBkaWZmID0gTWF0aC5taW4oaGVpZ2h0IC0gbWF4SGVpZ2h0LCBhcHByb3hMaW5lSGVpZ2h0KTtcbiAgICAgICAgICBtdXRhdGVFbGVtZW50KGNvbnRhaW5lciwge1xuICAgICAgICAgICAgaGVpZ2h0OiBjb250YWluZXIuaGVpZ2h0ICsgZGlmZlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmICggLy8gYXV0b3NocmluayBjb250YWluZXIgaGVpZ2h0IHVudGlsIG9yaWdpbmFsIGNvbnRhaW5lciBoZWlnaHRcbiAgICAgICAgLy8gaXMgcmVhY2hlZCB3aGVuIHRleHQgaXMgcmVtb3ZlZFxuICAgICAgICBjb250YWluZXIuaGVpZ2h0ID4gb3JpZ2luYWxDb250YWluZXJIZWlnaHQgJiYgaGVpZ2h0IDwgbWF4SGVpZ2h0KSB7XG4gICAgICAgICAgY29uc3QgZGlmZiA9IE1hdGgubWluKG1heEhlaWdodCAtIGhlaWdodCwgYXBwcm94TGluZUhlaWdodCk7XG4gICAgICAgICAgbXV0YXRlRWxlbWVudChjb250YWluZXIsIHtcbiAgICAgICAgICAgIGhlaWdodDogY29udGFpbmVyLmhlaWdodCAtIGRpZmZcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSAvLyBTdGFydCBwdXNoaW5nIHRleHQgdXB3YXJkIHVudGlsIGEgZGlmZiBvZiAzMHB4IChwYWRkaW5nKVxuICAgICAgICAvLyBpcyByZWFjaGVkXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIC8vIHZlcnRpY2FsbHkgY2VudGVyIGFsaWduIHRoZSB0ZXh0XG4gICAgICAgICAgaWYgKHZlcnRpY2FsQWxpZ24gPT09IFZFUlRJQ0FMX0FMSUdOLk1JRERMRSkge1xuICAgICAgICAgICAgY29vcmRZID0gY29udGFpbmVyLnkgKyBjb250YWluZXIuaGVpZ2h0IC8gMiAtIGhlaWdodCAvIDI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZlcnRpY2FsQWxpZ24gPT09IFZFUlRJQ0FMX0FMSUdOLkJPVFRPTSkge1xuICAgICAgICAgICAgY29vcmRZID0gY29udGFpbmVyLnkgKyBjb250YWluZXIuaGVpZ2h0IC0gaGVpZ2h0IC0gQk9VTkRfVEVYVF9QQURESU5HO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBbdmlld3BvcnRYLCB2aWV3cG9ydFldID0gZ2V0Vmlld3BvcnRDb29yZHMoY29vcmRYLCBjb29yZFkpO1xuICAgICAgY29uc3QgaW5pdGlhbFNlbGVjdGlvblN0YXJ0ID0gZWRpdGFibGUuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICBjb25zdCBpbml0aWFsU2VsZWN0aW9uRW5kID0gZWRpdGFibGUuc2VsZWN0aW9uRW5kO1xuICAgICAgY29uc3QgaW5pdGlhbExlbmd0aCA9IGVkaXRhYmxlLnZhbHVlLmxlbmd0aDtcbiAgICAgIGVkaXRhYmxlLnZhbHVlID0gdXBkYXRlZEVsZW1lbnQub3JpZ2luYWxUZXh0OyAvLyByZXN0b3JlIGN1cnNvciBwb3NpdGlvbiBhZnRlciB2YWx1ZSB1cGRhdGVkIHNvIGl0IGRvZXNuJ3RcbiAgICAgIC8vIGdvIHRvIHRoZSBlbmQgb2YgdGV4dCB3aGVuIGNvbnRhaW5lciBhdXRvIGV4cGFuZGVkXG5cbiAgICAgIGlmIChpbml0aWFsU2VsZWN0aW9uU3RhcnQgPT09IGluaXRpYWxTZWxlY3Rpb25FbmQgJiYgaW5pdGlhbFNlbGVjdGlvbkVuZCAhPT0gaW5pdGlhbExlbmd0aCkge1xuICAgICAgICAvLyBnZXQgZGlmZiBiZXR3ZWVuIGxlbmd0aCBhbmQgc2VsZWN0aW9uIGVuZCBhbmQgc2hpZnRcbiAgICAgICAgLy8gdGhlIGN1cnNvciBieSBcImRpZmZcIiB0aW1lcyB0byBwb3NpdGlvbiBjb3JyZWN0bHlcbiAgICAgICAgY29uc3QgZGlmZiA9IGluaXRpYWxMZW5ndGggLSBpbml0aWFsU2VsZWN0aW9uRW5kO1xuICAgICAgICBlZGl0YWJsZS5zZWxlY3Rpb25TdGFydCA9IGVkaXRhYmxlLnZhbHVlLmxlbmd0aCAtIGRpZmY7XG4gICAgICAgIGVkaXRhYmxlLnNlbGVjdGlvbkVuZCA9IGVkaXRhYmxlLnZhbHVlLmxlbmd0aCAtIGRpZmY7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGxpbmVzID0gdXBkYXRlZEVsZW1lbnQub3JpZ2luYWxUZXh0LnNwbGl0KFwiXFxuXCIpO1xuICAgICAgY29uc3QgbGluZUhlaWdodCA9IHVwZGF0ZWRFbGVtZW50LmNvbnRhaW5lcklkID8gYXBwcm94TGluZUhlaWdodCA6IHVwZGF0ZWRFbGVtZW50LmhlaWdodCAvIGxpbmVzLmxlbmd0aDtcblxuICAgICAgaWYgKCFjb250YWluZXIpIHtcbiAgICAgICAgbWF4V2lkdGggPSAoYXBwU3RhdGUud2lkdGggLSA4IC0gdmlld3BvcnRYKSAvIGFwcFN0YXRlLnpvb20udmFsdWU7XG4gICAgICB9IC8vIE1ha2Ugc3VyZSB0ZXh0IGVkaXRvciBoZWlnaHQgZG9lc24ndCBnbyBiZXlvbmQgdmlld3BvcnRcblxuXG4gICAgICBjb25zdCBlZGl0b3JNYXhIZWlnaHQgPSAoYXBwU3RhdGUuaGVpZ2h0IC0gdmlld3BvcnRZKSAvIGFwcFN0YXRlLnpvb20udmFsdWU7XG4gICAgICBjb25zdCBhbmdsZSA9IGNvbnRhaW5lciA/IGNvbnRhaW5lci5hbmdsZSA6IHVwZGF0ZWRFbGVtZW50LmFuZ2xlO1xuICAgICAgT2JqZWN0LmFzc2lnbihlZGl0YWJsZS5zdHlsZSwge1xuICAgICAgICBmb250OiBnZXRGb250U3RyaW5nKHVwZGF0ZWRFbGVtZW50KSxcbiAgICAgICAgLy8gbXVzdCBiZSBkZWZpbmVkICphZnRlciogZm9udCDCr1xcXyjjg4QpXy/Cr1xuICAgICAgICBsaW5lSGVpZ2h0OiBgJHtsaW5lSGVpZ2h0fXB4YCxcbiAgICAgICAgd2lkdGg6IGAke3dpZHRofXB4YCxcbiAgICAgICAgaGVpZ2h0OiBgJHtoZWlnaHR9cHhgLFxuICAgICAgICBsZWZ0OiBgJHt2aWV3cG9ydFh9cHhgLFxuICAgICAgICB0b3A6IGAke3ZpZXdwb3J0WX1weGAsXG4gICAgICAgIHRyYW5zZm9ybTogZ2V0VHJhbnNmb3JtKHdpZHRoLCBoZWlnaHQsIGFuZ2xlLCBhcHBTdGF0ZSwgbWF4V2lkdGgsIGVkaXRvck1heEhlaWdodCksXG4gICAgICAgIHRleHRBbGlnbixcbiAgICAgICAgdmVydGljYWxBbGlnbixcbiAgICAgICAgY29sb3I6IHVwZGF0ZWRFbGVtZW50LnN0cm9rZUNvbG9yLFxuICAgICAgICBvcGFjaXR5OiB1cGRhdGVkRWxlbWVudC5vcGFjaXR5IC8gMTAwLFxuICAgICAgICBmaWx0ZXI6IFwidmFyKC0tdGhlbWUtZmlsdGVyKVwiLFxuICAgICAgICBtYXhXaWR0aDogYCR7bWF4V2lkdGh9cHhgLFxuICAgICAgICBtYXhIZWlnaHQ6IGAke2VkaXRvck1heEhlaWdodH1weGBcbiAgICAgIH0pOyAvLyBGb3Igc29tZSByZWFzb24gdXBkYXRpbmcgZm9udCBhdHRyaWJ1dGUgZG9lc24ndCBzZXQgZm9udCBmYW1pbHlcbiAgICAgIC8vIGhlbmNlIHVwZGF0aW5nIGZvbnQgZmFtaWx5IGV4cGxpY2l0bHkgZm9yIHRlc3QgZW52aXJvbm1lbnRcblxuICAgICAgaWYgKGlzVGVzdEVudigpKSB7XG4gICAgICAgIGVkaXRhYmxlLnN0eWxlLmZvbnRGYW1pbHkgPSBnZXRGb250RmFtaWx5U3RyaW5nKHVwZGF0ZWRFbGVtZW50KTtcbiAgICAgIH1cblxuICAgICAgbXV0YXRlRWxlbWVudCh1cGRhdGVkRWxlbWVudCwge1xuICAgICAgICB4OiBjb29yZFgsXG4gICAgICAgIHk6IGNvb3JkWVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGVkaXRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRleHRhcmVhXCIpO1xuICBlZGl0YWJsZS5kaXIgPSBcImF1dG9cIjtcbiAgZWRpdGFibGUudGFiSW5kZXggPSAwO1xuICBlZGl0YWJsZS5kYXRhc2V0LnR5cGUgPSBcInd5c2l3eWdcIjsgLy8gcHJldmVudCBsaW5lIHdyYXBwaW5nIG9uIFNhZmFyaVxuXG4gIGVkaXRhYmxlLndyYXAgPSBcIm9mZlwiO1xuICBlZGl0YWJsZS5jbGFzc0xpc3QuYWRkKFwiZXhjYWxpZHJhdy13eXNpd3lnXCIpO1xuICBsZXQgd2hpdGVTcGFjZSA9IFwicHJlXCI7XG4gIGxldCB3b3JkQnJlYWsgPSBcIm5vcm1hbFwiO1xuXG4gIGlmIChpc0JvdW5kVG9Db250YWluZXIoZWxlbWVudCkpIHtcbiAgICB3aGl0ZVNwYWNlID0gXCJwcmUtd3JhcFwiO1xuICAgIHdvcmRCcmVhayA9IFwiYnJlYWstd29yZFwiO1xuICB9XG5cbiAgT2JqZWN0LmFzc2lnbihlZGl0YWJsZS5zdHlsZSwge1xuICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgZGlzcGxheTogXCJpbmxpbmUtYmxvY2tcIixcbiAgICBtaW5IZWlnaHQ6IFwiMWVtXCIsXG4gICAgYmFja2ZhY2VWaXNpYmlsaXR5OiBcImhpZGRlblwiLFxuICAgIG1hcmdpbjogMCxcbiAgICBwYWRkaW5nOiAwLFxuICAgIGJvcmRlcjogMCxcbiAgICBvdXRsaW5lOiAwLFxuICAgIHJlc2l6ZTogXCJub25lXCIsXG4gICAgYmFja2dyb3VuZDogXCJ0cmFuc3BhcmVudFwiLFxuICAgIG92ZXJmbG93OiBcImhpZGRlblwiLFxuICAgIC8vIG11c3QgYmUgc3BlY2lmaWVkIGJlY2F1c2UgaW4gZGFyayBtb2RlIGNhbnZhcyBjcmVhdGVzIGEgc3RhY2tpbmcgY29udGV4dFxuICAgIHpJbmRleDogXCJ2YXIoLS16SW5kZXgtd3lzaXd5ZylcIixcbiAgICB3b3JkQnJlYWssXG4gICAgLy8gcHJldmVudCBsaW5lIHdyYXBwaW5nIChgd2hpdGVzcGFjZTogbm93cmFwYCBkb2Vzbid0IHdvcmsgb24gRkYpXG4gICAgd2hpdGVTcGFjZSxcbiAgICBvdmVyZmxvd1dyYXA6IFwiYnJlYWstd29yZFwiXG4gIH0pO1xuICB1cGRhdGVXeXNpd3lnU3R5bGUoKTtcblxuICBpZiAob25DaGFuZ2UpIHtcbiAgICBlZGl0YWJsZS5vbmlucHV0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgdXBkYXRlZEVsZW1lbnQgPSBTY2VuZS5nZXRTY2VuZShlbGVtZW50KT8uZ2V0RWxlbWVudChpZCk7XG4gICAgICBjb25zdCBmb250ID0gZ2V0Rm9udFN0cmluZyh1cGRhdGVkRWxlbWVudCk7IC8vIHVzaW5nIHNjcm9sbEhlaWdodCBoZXJlIHNpbmNlIHdlIG5lZWQgdG8gY2FsY3VsYXRlXG4gICAgICAvLyBudW1iZXIgb2YgbGluZXMgc28gY2Fubm90IHVzZSBlZGl0YWJsZS5zdHlsZS5oZWlnaHRcbiAgICAgIC8vIGFzIHRoYXQgZ2V0cyB1cGRhdGVkIGJlbG93XG5cbiAgICAgIGNvbnN0IGxpbmVzID0gZWRpdGFibGUuc2Nyb2xsSGVpZ2h0IC8gZ2V0QXBwcm94TGluZUhlaWdodChmb250KTsgLy8gYXV0byBpbmNyZWFzZSBoZWlnaHQgb25seSB3aGVuIGxpbmVzICA+IDEgc28gaXRzXG4gICAgICAvLyBtZWFzdXJlZCBjb3JyZWN0bHkgYW5kIHZlcnRpY2FsbHkgYWxpZ25zIGZvclxuICAgICAgLy8gZmlyc3QgbGluZSBhcyB3ZWxsIGFzIHNldHRpbmcgaGVpZ2h0IHRvIFwiYXV0b1wiXG4gICAgICAvLyBkb3VibGVzIHRoZSBoZWlnaHQgYXMgc29vbiBhcyB1c2VyIHN0YXJ0cyB0eXBpbmdcblxuICAgICAgaWYgKGlzQm91bmRUb0NvbnRhaW5lcihlbGVtZW50KSAmJiBsaW5lcyA+IDEpIHtcbiAgICAgICAgbGV0IGhlaWdodCA9IFwiYXV0b1wiO1xuXG4gICAgICAgIGlmIChsaW5lcyA9PT0gMikge1xuICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGdldENvbnRhaW5lckVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgICAgY29uc3QgYWN0dWFsTGluZUNvdW50ID0gd3JhcFRleHQoZWRpdGFibGUudmFsdWUsIGZvbnQsIGNvbnRhaW5lci53aWR0aCkuc3BsaXQoXCJcXG5cIikubGVuZ3RoOyAvLyBUaGlzIGlzIGJyb3dzZXIgYmVoYXZpb3VyIHdoZW4gc2V0dGluZyBoZWlnaHQgdG8gXCJhdXRvXCJcbiAgICAgICAgICAvLyBJdCBzZXRzIHRoZSBoZWlnaHQgbmVlZGVkIGZvciAyIGxpbmVzIGV2ZW4gaWYgYWN0dWFsXG4gICAgICAgICAgLy8gbGluZSBjb3VudCBpcyAxIGFzIG1lbnRpb25lZCBhYm92ZSBhcyB3ZWxsXG4gICAgICAgICAgLy8gaGVuY2UgcmVkdWNpbmcgdGhlIGhlaWdodCBieSBoYWxmIGlmIGFjdHVhbCBsaW5lIGNvdW50IGlzIDFcbiAgICAgICAgICAvLyBzbyBzaW5nbGUgbGluZSBhbGlnbnMgdmVydGljYWxseSB3aGVuIGRlbGV0aW5nXG5cbiAgICAgICAgICBpZiAoYWN0dWFsTGluZUNvdW50ID09PSAxKSB7XG4gICAgICAgICAgICBoZWlnaHQgPSBgJHtlZGl0YWJsZS5zY3JvbGxIZWlnaHQgLyAyfXB4YDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBlZGl0YWJsZS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgIGVkaXRhYmxlLnN0eWxlLmhlaWdodCA9IGAke2VkaXRhYmxlLnNjcm9sbEhlaWdodH1weGA7XG4gICAgICB9XG5cbiAgICAgIG9uQ2hhbmdlKG5vcm1hbGl6ZVRleHQoZWRpdGFibGUudmFsdWUpKTtcbiAgICB9O1xuICB9XG5cbiAgZWRpdGFibGUub25rZXlkb3duID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAoIWV2ZW50LnNoaWZ0S2V5ICYmIGFjdGlvblpvb21Jbi5rZXlUZXN0KGV2ZW50KSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGFwcC5hY3Rpb25NYW5hZ2VyLmV4ZWN1dGVBY3Rpb24oYWN0aW9uWm9vbUluKTtcbiAgICAgIHVwZGF0ZVd5c2l3eWdTdHlsZSgpO1xuICAgIH0gZWxzZSBpZiAoIWV2ZW50LnNoaWZ0S2V5ICYmIGFjdGlvblpvb21PdXQua2V5VGVzdChldmVudCkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBhcHAuYWN0aW9uTWFuYWdlci5leGVjdXRlQWN0aW9uKGFjdGlvblpvb21PdXQpO1xuICAgICAgdXBkYXRlV3lzaXd5Z1N0eWxlKCk7XG4gICAgfSBlbHNlIGlmIChhY3Rpb25EZWNyZWFzZUZvbnRTaXplLmtleVRlc3QoZXZlbnQpKSB7XG4gICAgICBhcHAuYWN0aW9uTWFuYWdlci5leGVjdXRlQWN0aW9uKGFjdGlvbkRlY3JlYXNlRm9udFNpemUpO1xuICAgIH0gZWxzZSBpZiAoYWN0aW9uSW5jcmVhc2VGb250U2l6ZS5rZXlUZXN0KGV2ZW50KSkge1xuICAgICAgYXBwLmFjdGlvbk1hbmFnZXIuZXhlY3V0ZUFjdGlvbihhY3Rpb25JbmNyZWFzZUZvbnRTaXplKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gS0VZUy5FU0NBUEUpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBzdWJtaXR0ZWRWaWFLZXlib2FyZCA9IHRydWU7XG4gICAgICBoYW5kbGVTdWJtaXQoKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gS0VZUy5FTlRFUiAmJiBldmVudFtLRVlTLkNUUkxfT1JfQ01EXSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgaWYgKGV2ZW50LmlzQ29tcG9zaW5nIHx8IGV2ZW50LmtleUNvZGUgPT09IDIyOSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHN1Ym1pdHRlZFZpYUtleWJvYXJkID0gdHJ1ZTtcbiAgICAgIGhhbmRsZVN1Ym1pdCgpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSBLRVlTLlRBQiB8fCBldmVudFtLRVlTLkNUUkxfT1JfQ01EXSAmJiAoZXZlbnQuY29kZSA9PT0gQ09ERVMuQlJBQ0tFVF9MRUZUIHx8IGV2ZW50LmNvZGUgPT09IENPREVTLkJSQUNLRVRfUklHSFQpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICBpZiAoZXZlbnQuc2hpZnRLZXkgfHwgZXZlbnQuY29kZSA9PT0gQ09ERVMuQlJBQ0tFVF9MRUZUKSB7XG4gICAgICAgIG91dGRlbnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluZGVudCgpO1xuICAgICAgfSAvLyBXZSBtdXN0IHNlbmQgYW4gaW5wdXQgZXZlbnQgdG8gcmVzaXplIHRoZSBlbGVtZW50XG5cblxuICAgICAgZWRpdGFibGUuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJpbnB1dFwiKSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IFRBQl9TSVpFID0gNDtcbiAgY29uc3QgVEFCID0gXCIgXCIucmVwZWF0KFRBQl9TSVpFKTtcbiAgY29uc3QgUkVfTEVBRElOR19UQUIgPSBuZXcgUmVnRXhwKGBeIHsxLCR7VEFCX1NJWkV9fWApO1xuXG4gIGNvbnN0IGluZGVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB7XG4gICAgICBzZWxlY3Rpb25TdGFydCxcbiAgICAgIHNlbGVjdGlvbkVuZFxuICAgIH0gPSBlZGl0YWJsZTtcbiAgICBjb25zdCBsaW5lc1N0YXJ0SW5kaWNlcyA9IGdldFNlbGVjdGVkTGluZXNTdGFydEluZGljZXMoKTtcbiAgICBsZXQgdmFsdWUgPSBlZGl0YWJsZS52YWx1ZTtcbiAgICBsaW5lc1N0YXJ0SW5kaWNlcy5mb3JFYWNoKGZ1bmN0aW9uIChzdGFydEluZGV4KSB7XG4gICAgICBjb25zdCBzdGFydFZhbHVlID0gdmFsdWUuc2xpY2UoMCwgc3RhcnRJbmRleCk7XG4gICAgICBjb25zdCBlbmRWYWx1ZSA9IHZhbHVlLnNsaWNlKHN0YXJ0SW5kZXgpO1xuICAgICAgdmFsdWUgPSBgJHtzdGFydFZhbHVlfSR7VEFCfSR7ZW5kVmFsdWV9YDtcbiAgICB9KTtcbiAgICBlZGl0YWJsZS52YWx1ZSA9IHZhbHVlO1xuICAgIGVkaXRhYmxlLnNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uU3RhcnQgKyBUQUJfU0laRTtcbiAgICBlZGl0YWJsZS5zZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb25FbmQgKyBUQUJfU0laRSAqIGxpbmVzU3RhcnRJbmRpY2VzLmxlbmd0aDtcbiAgfTtcblxuICBjb25zdCBvdXRkZW50ID0gZnVuY3Rpb24gKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIHNlbGVjdGlvblN0YXJ0LFxuICAgICAgc2VsZWN0aW9uRW5kXG4gICAgfSA9IGVkaXRhYmxlO1xuICAgIGNvbnN0IGxpbmVzU3RhcnRJbmRpY2VzID0gZ2V0U2VsZWN0ZWRMaW5lc1N0YXJ0SW5kaWNlcygpO1xuICAgIGNvbnN0IHJlbW92ZWRUYWJzID0gW107XG4gICAgbGV0IHZhbHVlID0gZWRpdGFibGUudmFsdWU7XG4gICAgbGluZXNTdGFydEluZGljZXMuZm9yRWFjaChmdW5jdGlvbiAoc3RhcnRJbmRleCkge1xuICAgICAgY29uc3QgdGFiTWF0Y2ggPSB2YWx1ZS5zbGljZShzdGFydEluZGV4LCBzdGFydEluZGV4ICsgVEFCX1NJWkUpLm1hdGNoKFJFX0xFQURJTkdfVEFCKTtcblxuICAgICAgaWYgKHRhYk1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0VmFsdWUgPSB2YWx1ZS5zbGljZSgwLCBzdGFydEluZGV4KTtcbiAgICAgICAgY29uc3QgZW5kVmFsdWUgPSB2YWx1ZS5zbGljZShzdGFydEluZGV4ICsgdGFiTWF0Y2hbMF0ubGVuZ3RoKTsgLy8gRGVsZXRlIGEgdGFiIGZyb20gdGhlIGxpbmVcblxuICAgICAgICB2YWx1ZSA9IGAke3N0YXJ0VmFsdWV9JHtlbmRWYWx1ZX1gO1xuICAgICAgICByZW1vdmVkVGFicy5wdXNoKHN0YXJ0SW5kZXgpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGVkaXRhYmxlLnZhbHVlID0gdmFsdWU7XG5cbiAgICBpZiAocmVtb3ZlZFRhYnMubGVuZ3RoKSB7XG4gICAgICBpZiAoc2VsZWN0aW9uU3RhcnQgPiByZW1vdmVkVGFic1tyZW1vdmVkVGFicy5sZW5ndGggLSAxXSkge1xuICAgICAgICBlZGl0YWJsZS5zZWxlY3Rpb25TdGFydCA9IE1hdGgubWF4KHNlbGVjdGlvblN0YXJ0IC0gVEFCX1NJWkUsIHJlbW92ZWRUYWJzW3JlbW92ZWRUYWJzLmxlbmd0aCAtIDFdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIHRoZSBjdXJzb3IgaXMgYmVmb3JlIHRoZSBmaXJzdCB0YWIgcmVtb3ZlZCwgZXg6XG4gICAgICAgIC8vIExpbmV8ICMxXG4gICAgICAgIC8vICAgICBMaW5lICMyXG4gICAgICAgIC8vIExpbnxlICMzXG4gICAgICAgIC8vIHdlIHNob3VsZCByZXNldCB0aGUgc2VsZWN0aW9uU3RhcnQgdG8gaGlzIGluaXRpYWwgdmFsdWUuXG4gICAgICAgIGVkaXRhYmxlLnNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uU3RhcnQ7XG4gICAgICB9XG5cbiAgICAgIGVkaXRhYmxlLnNlbGVjdGlvbkVuZCA9IE1hdGgubWF4KGVkaXRhYmxlLnNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQgLSBUQUJfU0laRSAqIHJlbW92ZWRUYWJzLmxlbmd0aCk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQHJldHVybnMgaW5kaWNlcyBvZiBzdGFydCBwb3NpdGlvbnMgb2Ygc2VsZWN0ZWQgbGluZXMsIGluIHJldmVyc2Ugb3JkZXJcbiAgICovXG5cblxuICBjb25zdCBnZXRTZWxlY3RlZExpbmVzU3RhcnRJbmRpY2VzID0gZnVuY3Rpb24gKCkge1xuICAgIGxldCB7XG4gICAgICBzZWxlY3Rpb25TdGFydCxcbiAgICAgIHNlbGVjdGlvbkVuZCxcbiAgICAgIHZhbHVlXG4gICAgfSA9IGVkaXRhYmxlOyAvLyBjaGFycyBiZWZvcmUgc2VsZWN0aW9uU3RhcnQgb24gdGhlIHNhbWUgbGluZVxuXG4gICAgY29uc3Qgc3RhcnRPZmZzZXQgPSB2YWx1ZS5zbGljZSgwLCBzZWxlY3Rpb25TdGFydCkubWF0Y2goL1teXFxuXSokLylbMF0ubGVuZ3RoOyAvLyBwdXQgY2FyZXQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaW5lXG5cbiAgICBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvblN0YXJ0IC0gc3RhcnRPZmZzZXQ7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB2YWx1ZS5zbGljZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTtcbiAgICByZXR1cm4gc2VsZWN0ZWQuc3BsaXQoXCJcXG5cIikucmVkdWNlKGZ1bmN0aW9uIChzdGFydEluZGljZXMsIGxpbmUsIGlkeCwgbGluZXMpIHtcbiAgICAgIHJldHVybiBzdGFydEluZGljZXMuY29uY2F0KGlkeCA/IC8vIGN1cnIgbGluZSBpbmRleCBpcyBwcmV2IGxpbmUncyBzdGFydCArIHByZXYgbGluZSdzIGxlbmd0aCArIFxcblxuICAgICAgc3RhcnRJbmRpY2VzW2lkeCAtIDFdICsgbGluZXNbaWR4IC0gMV0ubGVuZ3RoICsgMSA6IC8vIGZpcnN0IHNlbGVjdGVkIGxpbmVcbiAgICAgIHNlbGVjdGlvblN0YXJ0KTtcbiAgICB9LCBbXSkucmV2ZXJzZSgpO1xuICB9O1xuXG4gIGNvbnN0IHN0b3BFdmVudCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH07IC8vIHVzaW5nIGEgc3RhdGUgdmFyaWFibGUgaW5zdGVhZCBvZiBwYXNzaW5nIGl0IHRvIHRoZSBoYW5kbGVTdWJtaXQgY2FsbGJhY2tcbiAgLy8gc28gdGhhdCB3ZSBkb24ndCBuZWVkIHRvIGNyZWF0ZSBzZXBhcmF0ZSBhIGNhbGxiYWNrIGZvciBldmVudCBoYW5kbGVyc1xuXG5cbiAgbGV0IHN1Ym1pdHRlZFZpYUtleWJvYXJkID0gZmFsc2U7XG5cbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGNsZWFudXAgbXVzdCBiZSBydW4gYmVmb3JlIG9uU3VibWl0IG90aGVyd2lzZSB3aGVuIGFwcCBibHVycyB0aGUgd3lzaXd5Z1xuICAgIC8vIGl0J2QgZ2V0IHN0dWNrIGluIGFuIGluZmluaXRlIGxvb3Agb2YgYmx1cuKGkm9uU3VibWl0IGFmdGVyIHdlIHJlLWZvY3VzIHRoZVxuICAgIC8vIHd5c2l3eWcgb24gdXBkYXRlXG4gICAgY2xlYW51cCgpO1xuICAgIGNvbnN0IHVwZGF0ZUVsZW1lbnQgPSBTY2VuZS5nZXRTY2VuZShlbGVtZW50KT8uZ2V0RWxlbWVudChlbGVtZW50LmlkKTtcblxuICAgIGlmICghdXBkYXRlRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCB0ZXh0ID0gZWRpdGFibGUudmFsdWU7XG4gICAgY29uc3QgY29udGFpbmVyID0gZ2V0Q29udGFpbmVyRWxlbWVudCh1cGRhdGVFbGVtZW50KTtcblxuICAgIGlmIChjb250YWluZXIpIHtcbiAgICAgIHRleHQgPSB1cGRhdGVFbGVtZW50LnRleHQ7XG5cbiAgICAgIGlmIChlZGl0YWJsZS52YWx1ZSkge1xuICAgICAgICBjb25zdCBib3VuZFRleHRFbGVtZW50SWQgPSBnZXRCb3VuZFRleHRFbGVtZW50SWQoY29udGFpbmVyKTtcblxuICAgICAgICBpZiAoIWJvdW5kVGV4dEVsZW1lbnRJZCB8fCBib3VuZFRleHRFbGVtZW50SWQgIT09IGVsZW1lbnQuaWQpIHtcbiAgICAgICAgICBtdXRhdGVFbGVtZW50KGNvbnRhaW5lciwge1xuICAgICAgICAgICAgYm91bmRFbGVtZW50czogKGNvbnRhaW5lci5ib3VuZEVsZW1lbnRzIHx8IFtdKS5jb25jYXQoe1xuICAgICAgICAgICAgICB0eXBlOiBcInRleHRcIixcbiAgICAgICAgICAgICAgaWQ6IGVsZW1lbnQuaWRcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG11dGF0ZUVsZW1lbnQoY29udGFpbmVyLCB7XG4gICAgICAgICAgYm91bmRFbGVtZW50czogY29udGFpbmVyLmJvdW5kRWxlbWVudHM/LmZpbHRlcihmdW5jdGlvbiAoZWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gIWlzVGV4dEVsZW1lbnQoZWxlKTtcbiAgICAgICAgICB9KVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBvblN1Ym1pdCh7XG4gICAgICB0ZXh0LFxuICAgICAgdmlhS2V5Ym9hcmQ6IHN1Ym1pdHRlZFZpYUtleWJvYXJkLFxuICAgICAgb3JpZ2luYWxUZXh0OiBlZGl0YWJsZS52YWx1ZVxuICAgIH0pO1xuICB9O1xuXG4gIGNvbnN0IGNsZWFudXAgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGlzRGVzdHJveWVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaXNEZXN0cm95ZWQgPSB0cnVlOyAvLyByZW1vdmUgZXZlbnRzIHRvIGVuc3VyZSB0aGV5IGRvbid0IGxhdGUtZmlyZVxuXG4gICAgZWRpdGFibGUub25ibHVyID0gbnVsbDtcbiAgICBlZGl0YWJsZS5vbmlucHV0ID0gbnVsbDtcbiAgICBlZGl0YWJsZS5vbmtleWRvd24gPSBudWxsO1xuXG4gICAgaWYgKG9ic2VydmVyKSB7XG4gICAgICBvYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgfVxuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgdXBkYXRlV3lzaXd5Z1N0eWxlKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIHN0b3BFdmVudCwgdHJ1ZSk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVyZG93blwiLCBvblBvaW50ZXJEb3duKTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCBiaW5kQmx1ckV2ZW50KTtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgaGFuZGxlU3VibWl0KTtcbiAgICB1bmJpbmRVcGRhdGUoKTtcbiAgICBlZGl0YWJsZS5yZW1vdmUoKTtcbiAgfTtcblxuICBjb25zdCBiaW5kQmx1ckV2ZW50ID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgYmluZEJsdXJFdmVudCk7IC8vIERlZmVycmVkIHNvIHRoYXQgdGhlIHBvaW50ZXJkb3duIHRoYXQgaW5pdGlhdGVzIHRoZSB3eXNpd3lnIGRvZXNuJ3RcbiAgICAvLyB0cmlnZ2VyIHRoZSBibHVyIG9uIGVuc3VpbmcgcG9pbnRlcnVwLlxuICAgIC8vIEFsc28gdG8gaGFuZGxlIGNhc2VzIHN1Y2ggYXMgcGlja2luZyBhIGNvbG9yIHdoaWNoIHdvdWxkIHRyaWdnZXIgYSBibHVyXG4gICAgLy8gaW4gdGhhdCBzYW1lIHRpY2suXG5cbiAgICBjb25zdCB0YXJnZXQgPSBldmVudD8udGFyZ2V0O1xuICAgIGNvbnN0IGlzVGFyZ2V0Q29sb3JQaWNrZXIgPSB0YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIHRhcmdldC5jbG9zZXN0KFwiLmNvbG9yLXBpY2tlci1pbnB1dFwiKSAmJiBpc1dyaXRhYmxlRWxlbWVudCh0YXJnZXQpO1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgZWRpdGFibGUub25ibHVyID0gaGFuZGxlU3VibWl0O1xuXG4gICAgICBpZiAodGFyZ2V0ICYmIGlzVGFyZ2V0Q29sb3JQaWNrZXIpIHtcbiAgICAgICAgdGFyZ2V0Lm9uYmx1ciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBlZGl0YWJsZS5mb2N1cygpO1xuICAgICAgICB9O1xuICAgICAgfSAvLyBjYXNlOiBjbGlja2luZyBvbiB0aGUgc2FtZSBwcm9wZXJ0eSDihpIgbm8gY2hhbmdlIOKGkiBubyB1cGRhdGUg4oaSIG5vIGZvY3VzXG5cblxuICAgICAgaWYgKCFpc1RhcmdldENvbG9yUGlja2VyKSB7XG4gICAgICAgIGVkaXRhYmxlLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH07IC8vIHByZXZlbnQgYmx1ciB3aGVuIGNoYW5naW5nIHByb3BlcnRpZXMgZnJvbSB0aGUgbWVudVxuXG5cbiAgY29uc3Qgb25Qb2ludGVyRG93biA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgIGNvbnN0IGlzVGFyZ2V0Q29sb3JQaWNrZXIgPSBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIGV2ZW50LnRhcmdldC5jbG9zZXN0KFwiLmNvbG9yLXBpY2tlci1pbnB1dFwiKSAmJiBpc1dyaXRhYmxlRWxlbWVudChldmVudC50YXJnZXQpO1xuICAgIGNvbnN0IGlzU2hhcGVBY3Rpb25zUGFuZWwgPSAvL3pzdmljemlhblxuICAgIChldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fCBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBTVkdFbGVtZW50KSAmJiAoZXZlbnQudGFyZ2V0LmNsb3Nlc3QoYC4ke0NMQVNTRVMuU0hBUEVfQUNUSU9OU19NRU5VfWApIHx8IGV2ZW50LnRhcmdldC5jbG9zZXN0KGAuJHtDTEFTU0VTLlNIQVBFX0FDVElPTlNfTU9CSUxFX01FTlV9YCkgfHwgZXZlbnQudGFyZ2V0LmNsb3Nlc3QoYC4ke0NMQVNTRVMuTU9CSUxFX1RPT0xCQVJ9YCkpO1xuXG4gICAgaWYgKChldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fCBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBTVkdFbGVtZW50KSAmJiBpc1NoYXBlQWN0aW9uc1BhbmVsICYmIC8venN2aWN6aWFuXG4gICAgIWlzV3JpdGFibGVFbGVtZW50KGV2ZW50LnRhcmdldCkgfHwgaXNUYXJnZXRDb2xvclBpY2tlcikge1xuICAgICAgZWRpdGFibGUub25ibHVyID0gbnVsbDtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIGJpbmRCbHVyRXZlbnQpOyAvLyBoYW5kbGUgZWRnZS1jYXNlIHdoZXJlIHBvaW50ZXJ1cCBkb2Vzbid0IGZpcmUgZS5nLiBkdWUgdG8gdXNlclxuICAgICAgLy8gYWx0LXRhYmJpbmcgYXdheVxuXG4gICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgaGFuZGxlU3VibWl0KTtcbiAgICB9XG4gIH07IC8vIGhhbmRsZSB1cGRhdGVzIG9mIHRleHRFbGVtZW50IHByb3BlcnRpZXMgb2YgZWRpdGluZyBlbGVtZW50XG5cblxuICBjb25zdCB1bmJpbmRVcGRhdGUgPSBTY2VuZS5nZXRTY2VuZShlbGVtZW50KS5hZGRDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgdXBkYXRlV3lzaXd5Z1N0eWxlKCk7XG4gICAgY29uc3QgaXNDb2xvclBpY2tlckFjdGl2ZSA9ICEhZG9jdW1lbnQuYWN0aXZlRWxlbWVudD8uY2xvc2VzdChcIi5jb2xvci1waWNrZXItaW5wdXRcIik7XG5cbiAgICBpZiAoIWlzQ29sb3JQaWNrZXJBY3RpdmUpIHtcbiAgICAgIGVkaXRhYmxlLmZvY3VzKCk7XG4gICAgfVxuICB9KTsgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgbGV0IGlzRGVzdHJveWVkID0gZmFsc2U7IC8vIHNlbGVjdCBvbiBpbml0IChmb2N1c2luZyBpcyBkb25lIHNlcGFyYXRlbHkgaW5zaWRlIHRoZSBiaW5kQmx1ckV2ZW50KClcbiAgLy8gYmVjYXVzZSB3ZSBuZWVkIGl0IHRvIGhhcHBlbiAqYWZ0ZXIqIHRoZSBibHVyIGV2ZW50IGZyb20gYHBvaW50ZXJkb3duYClcblxuICBlZGl0YWJsZS5zZWxlY3QoKTtcbiAgYmluZEJsdXJFdmVudCgpOyAvLyByZXBvc2l0aW9uIHd5c2l3eWcgaW4gY2FzZSBvZiBjYW52YXMgaXMgcmVzaXplZC4gVXNpbmcgUmVzaXplT2JzZXJ2ZXJcbiAgLy8gaXMgcHJlZmVycmVkIHNvIHdlIGNhdGNoIGNoYW5nZXMgZnJvbSBob3N0LCB3aGVyZSB3aW5kb3cgbWF5IG5vdCByZXNpemUuXG5cbiAgbGV0IG9ic2VydmVyID0gbnVsbDtcblxuICBpZiAoY2FudmFzICYmIFwiUmVzaXplT2JzZXJ2ZXJcIiBpbiB3aW5kb3cpIHtcbiAgICBvYnNlcnZlciA9IG5ldyB3aW5kb3cuUmVzaXplT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgdXBkYXRlV3lzaXd5Z1N0eWxlKCk7XG4gICAgfSk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShjYW52YXMpO1xuICB9IGVsc2Uge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIHVwZGF0ZVd5c2l3eWdTdHlsZSk7XG4gIH1cblxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIG9uUG9pbnRlckRvd24pO1xuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsIHN0b3BFdmVudCwge1xuICAgIHBhc3NpdmU6IGZhbHNlLFxuICAgIGNhcHR1cmU6IHRydWVcbiAgfSk7XG4gIGV4Y2FsaWRyYXdDb250YWluZXI/LnF1ZXJ5U2VsZWN0b3IoXCIuZXhjYWxpZHJhdy10ZXh0RWRpdG9yQ29udGFpbmVyXCIpLmFwcGVuZENoaWxkKGVkaXRhYmxlKTtcbn07Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///../../element/textWysiwyg.tsx\\n\");\n\n//# sourceURL=webpack://Excalidraw/../../element/textWysiwyg.tsx?");
2735
2735
 
2736
2736
  /***/ }),
2737
2737
 
@@ -2907,7 +2907,7 @@ eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */
2907
2907
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2908
2908
 
2909
2909
  "use strict";
2910
- eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */ \\\"FONT_FAMILY\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.FONT_FAMILY),\\n/* harmony export */ \\\"THEME\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.THEME),\\n/* harmony export */ \\\"bumpVersion\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.bumpVersion),\\n/* harmony export */ \\\"defaultLang\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.defaultLang),\\n/* harmony export */ \\\"determineFocusDistance\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.determineFocusDistance),\\n/* harmony export */ \\\"exportToBlob\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.exportToBlob),\\n/* harmony export */ \\\"exportToCanvas\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.exportToCanvas),\\n/* harmony export */ \\\"exportToSvg\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.exportToSvg),\\n/* harmony export */ \\\"getCommonBoundingBox\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.getCommonBoundingBox),\\n/* harmony export */ \\\"getFreeDrawSvgPath\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.getFreeDrawSvgPath),\\n/* harmony export */ \\\"getMaximumGroups\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.getMaximumGroups),\\n/* harmony export */ \\\"getNonDeletedElements\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.getNonDeletedElements),\\n/* harmony export */ \\\"getSceneVersion\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.getSceneVersion),\\n/* harmony export */ \\\"intersectElementWithLine\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.intersectElementWithLine),\\n/* harmony export */ \\\"isInvisiblySmallElement\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.isInvisiblySmallElement),\\n/* harmony export */ \\\"isLinearElement\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.isLinearElement),\\n/* harmony export */ \\\"languages\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.languages),\\n/* harmony export */ \\\"loadFromBlob\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.loadFromBlob),\\n/* harmony export */ \\\"loadLibraryFromBlob\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.loadLibraryFromBlob),\\n/* harmony export */ \\\"mutateElement\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.mutateElement),\\n/* harmony export */ \\\"newElementWith\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.newElementWith),\\n/* harmony export */ \\\"restore\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.restore),\\n/* harmony export */ \\\"restoreAppState\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.restoreAppState),\\n/* harmony export */ \\\"restoreElements\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.restoreElements),\\n/* harmony export */ \\\"serializeAsJSON\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.serializeAsJSON)\\n/* harmony export */ });\\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ \\\"./index.tsx\\\");\\n/* harmony import */ var _public_fonts_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../public/fonts.css */ \\\"../../../public/fonts.css\\\");\\n/* harmony import */ var _public_fonts_css__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_public_fonts_css__WEBPACK_IMPORTED_MODULE_1__);\\n\\r\\n\\r\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_index__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"]);\\r\\n\\r\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9lbnRyeS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFpQztBQUNFO0FBQ25DLGlFQUFlLDhDQUFVLEVBQUM7QUFDRiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2VudHJ5LmpzPzVhZTUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEV4Y2FsaWRyYXcgZnJvbSBcIi4vaW5kZXhcIjtcbmltcG9ydCBcIi4uLy4uLy4uL3B1YmxpYy9mb250cy5jc3NcIjtcbmV4cG9ydCBkZWZhdWx0IEV4Y2FsaWRyYXc7XG5leHBvcnQgKiBmcm9tIFwiLi9pbmRleFwiOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./entry.js\\n\");\n\n//# sourceURL=webpack://Excalidraw/./entry.js?");
2910
+ eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */ \\\"FONT_FAMILY\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.FONT_FAMILY),\\n/* harmony export */ \\\"THEME\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.THEME),\\n/* harmony export */ \\\"bumpVersion\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.bumpVersion),\\n/* harmony export */ \\\"defaultLang\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.defaultLang),\\n/* harmony export */ \\\"determineFocusDistance\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.determineFocusDistance),\\n/* harmony export */ \\\"exportToBlob\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.exportToBlob),\\n/* harmony export */ \\\"exportToCanvas\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.exportToCanvas),\\n/* harmony export */ \\\"exportToSvg\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.exportToSvg),\\n/* harmony export */ \\\"getCommonBoundingBox\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.getCommonBoundingBox),\\n/* harmony export */ \\\"getFreeDrawSvgPath\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.getFreeDrawSvgPath),\\n/* harmony export */ \\\"getMaximumGroups\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.getMaximumGroups),\\n/* harmony export */ \\\"getNonDeletedElements\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.getNonDeletedElements),\\n/* harmony export */ \\\"getSceneVersion\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.getSceneVersion),\\n/* harmony export */ \\\"intersectElementWithLine\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.intersectElementWithLine),\\n/* harmony export */ \\\"isInvisiblySmallElement\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.isInvisiblySmallElement),\\n/* harmony export */ \\\"isLinearElement\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.isLinearElement),\\n/* harmony export */ \\\"languages\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.languages),\\n/* harmony export */ \\\"loadFromBlob\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.loadFromBlob),\\n/* harmony export */ \\\"loadLibraryFromBlob\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.loadLibraryFromBlob),\\n/* harmony export */ \\\"measureText\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.measureText),\\n/* harmony export */ \\\"mutateElement\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.mutateElement),\\n/* harmony export */ \\\"newElementWith\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.newElementWith),\\n/* harmony export */ \\\"restore\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.restore),\\n/* harmony export */ \\\"restoreAppState\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.restoreAppState),\\n/* harmony export */ \\\"restoreElements\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.restoreElements),\\n/* harmony export */ \\\"serializeAsJSON\\\": () => (/* reexport safe */ _index__WEBPACK_IMPORTED_MODULE_0__.serializeAsJSON)\\n/* harmony export */ });\\n/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index */ \\\"./index.tsx\\\");\\n/* harmony import */ var _public_fonts_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../public/fonts.css */ \\\"../../../public/fonts.css\\\");\\n/* harmony import */ var _public_fonts_css__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_public_fonts_css__WEBPACK_IMPORTED_MODULE_1__);\\n\\r\\n\\r\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_index__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"]);\\r\\n\\r\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9lbnRyeS5qcy5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBaUM7QUFDRTtBQUNuQyxpRUFBZSw4Q0FBVSxFQUFDO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9lbnRyeS5qcz81YWU1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBFeGNhbGlkcmF3IGZyb20gXCIuL2luZGV4XCI7XG5pbXBvcnQgXCIuLi8uLi8uLi9wdWJsaWMvZm9udHMuY3NzXCI7XG5leHBvcnQgZGVmYXVsdCBFeGNhbGlkcmF3O1xuZXhwb3J0ICogZnJvbSBcIi4vaW5kZXhcIjsiXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\\n//# sourceURL=webpack-internal:///./entry.js\\n\");\n\n//# sourceURL=webpack://Excalidraw/./entry.js?");
2911
2911
 
2912
2912
  /***/ }),
2913
2913
 
@@ -2918,7 +2918,7 @@ eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */
2918
2918
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2919
2919
 
2920
2920
  "use strict";
2921
- eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */ \\\"getSceneVersion\\\": () => (/* reexport safe */ _element__WEBPACK_IMPORTED_MODULE_11__.getSceneVersion),\\n/* harmony export */ \\\"isInvisiblySmallElement\\\": () => (/* reexport safe */ _element__WEBPACK_IMPORTED_MODULE_11__.isInvisiblySmallElement),\\n/* harmony export */ \\\"getNonDeletedElements\\\": () => (/* reexport safe */ _element__WEBPACK_IMPORTED_MODULE_11__.getNonDeletedElements),\\n/* harmony export */ \\\"defaultLang\\\": () => (/* reexport safe */ _i18n__WEBPACK_IMPORTED_MODULE_8__.defaultLang),\\n/* harmony export */ \\\"languages\\\": () => (/* reexport safe */ _i18n__WEBPACK_IMPORTED_MODULE_8__.languages),\\n/* harmony export */ \\\"restore\\\": () => (/* reexport safe */ _data_restore__WEBPACK_IMPORTED_MODULE_12__.restore),\\n/* harmony export */ \\\"restoreAppState\\\": () => (/* reexport safe */ _data_restore__WEBPACK_IMPORTED_MODULE_12__.restoreAppState),\\n/* harmony export */ \\\"restoreElements\\\": () => (/* reexport safe */ _data_restore__WEBPACK_IMPORTED_MODULE_12__.restoreElements),\\n/* harmony export */ \\\"exportToCanvas\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_13__.exportToCanvas),\\n/* harmony export */ \\\"exportToBlob\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_13__.exportToBlob),\\n/* harmony export */ \\\"exportToSvg\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_13__.exportToSvg),\\n/* harmony export */ \\\"serializeAsJSON\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_13__.serializeAsJSON),\\n/* harmony export */ \\\"loadLibraryFromBlob\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_13__.loadLibraryFromBlob),\\n/* harmony export */ \\\"loadFromBlob\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_13__.loadFromBlob),\\n/* harmony export */ \\\"getFreeDrawSvgPath\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_13__.getFreeDrawSvgPath),\\n/* harmony export */ \\\"getCommonBoundingBox\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_13__.getCommonBoundingBox),\\n/* harmony export */ \\\"getMaximumGroups\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_13__.getMaximumGroups),\\n/* harmony export */ \\\"intersectElementWithLine\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_13__.intersectElementWithLine),\\n/* harmony export */ \\\"determineFocusDistance\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_13__.determineFocusDistance),\\n/* harmony export */ \\\"isLinearElement\\\": () => (/* reexport safe */ _element_typeChecks__WEBPACK_IMPORTED_MODULE_14__.isLinearElement),\\n/* harmony export */ \\\"FONT_FAMILY\\\": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_9__.FONT_FAMILY),\\n/* harmony export */ \\\"THEME\\\": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_9__.THEME),\\n/* harmony export */ \\\"mutateElement\\\": () => (/* reexport safe */ _element_mutateElement__WEBPACK_IMPORTED_MODULE_15__.mutateElement),\\n/* harmony export */ \\\"newElementWith\\\": () => (/* reexport safe */ _element_mutateElement__WEBPACK_IMPORTED_MODULE_15__.newElementWith),\\n/* harmony export */ \\\"bumpVersion\\\": () => (/* reexport safe */ _element_mutateElement__WEBPACK_IMPORTED_MODULE_15__.bumpVersion)\\n/* harmony export */ });\\n/* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \\\"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__);\\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \\\"./node_modules/@babel/runtime/helpers/defineProperty.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__);\\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \\\"react\\\");\\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\\n/* harmony import */ var _publicPath__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./publicPath */ \\\"./publicPath.js\\\");\\n/* harmony import */ var _components_InitializeApp__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../components/InitializeApp */ \\\"../../components/InitializeApp.tsx\\\");\\n/* harmony import */ var _components_App__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../components/App */ \\\"../../components/App.tsx\\\");\\n/* harmony import */ var _css_app_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../css/app.scss */ \\\"../../css/app.scss\\\");\\n/* harmony import */ var _css_app_scss__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_css_app_scss__WEBPACK_IMPORTED_MODULE_6__);\\n/* harmony import */ var _css_styles_scss__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../css/styles.scss */ \\\"../../css/styles.scss\\\");\\n/* harmony import */ var _css_styles_scss__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_css_styles_scss__WEBPACK_IMPORTED_MODULE_7__);\\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../i18n */ \\\"../../i18n.ts\\\");\\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../constants */ \\\"../../constants.ts\\\");\\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react/jsx-runtime */ \\\"../../../node_modules/react/jsx-runtime.js\\\");\\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../element */ \\\"../../element/index.ts\\\");\\n/* harmony import */ var _data_restore__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../data/restore */ \\\"../../data/restore.ts\\\");\\n/* harmony import */ var _packages_utils__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../packages/utils */ \\\"../utils.ts\\\");\\n/* harmony import */ var _element_typeChecks__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../element/typeChecks */ \\\"../../element/typeChecks.ts\\\");\\n/* harmony import */ var _element_mutateElement__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../element/mutateElement */ \\\"../../element/mutateElement.ts\\\");\\n\\r\\n\\r\\nconst _excluded = [\\\"initialData\\\", \\\"UIOptions\\\"], _excluded2 = [\\\"initialData\\\", \\\"UIOptions\\\"];\\r\\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) {\\r\\n var symbols = Object.getOwnPropertySymbols(object);\\r\\n enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols);\\r\\n} return keys; }\\r\\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) {\\r\\n var source = null != arguments[i] ? arguments[i] : {};\\r\\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); });\\r\\n} return target; }\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\nconst Excalidraw = function (props) {\\r\\n var _a, _b, _c;\\r\\n const { onChange, initialData, excalidrawRef, onCollabButtonClick, isCollaborating = false, onPointerUpdate, renderTopRightUI, renderFooter, langCode = _i18n__WEBPACK_IMPORTED_MODULE_8__.defaultLang.code, viewModeEnabled, zenModeEnabled, gridModeEnabled, libraryReturnUrl, theme, name, renderCustomStats, onPaste, onDrop, \\r\\n //zsviczian\\r\\n detectScroll = true, handleKeyboardGlobally = false, onLibraryChange, autoFocus = false, onBeforeTextEdit, \\r\\n //zsviczian\\r\\n onBeforeTextSubmit, \\r\\n //zsviczian\\r\\n generateIdForFile, onThemeChange, \\r\\n //zsviczian\\r\\n onLinkOpen, onLinkHover, \\r\\n //zsviczian\\r\\n onViewModeChange //zsviczian\\r\\n } = props;\\r\\n const canvasActions = (_a = props.UIOptions) === null || _a === void 0 ? void 0 : _a.canvasActions;\\r\\n const UIOptions = {\\r\\n canvasActions: _objectSpread(_objectSpread({}, _constants__WEBPACK_IMPORTED_MODULE_9__.DEFAULT_UI_OPTIONS.canvasActions), canvasActions)\\r\\n };\\r\\n if (canvasActions === null || canvasActions === void 0 ? void 0 : canvasActions.export) {\\r\\n UIOptions.canvasActions.export.saveFileToDisk = (_c = (_b = canvasActions.export) === null || _b === void 0 ? void 0 : _b.saveFileToDisk) !== null && _c !== void 0 ? _c : _constants__WEBPACK_IMPORTED_MODULE_9__.DEFAULT_UI_OPTIONS.canvasActions[\\\"export\\\"].saveFileToDisk;\\r\\n }\\r\\n (0,react__WEBPACK_IMPORTED_MODULE_2__.useEffect)(function () {\\r\\n // Block pinch-zooming on iOS outside of the content area\\r\\n const handleTouchMove = function (event) {\\r\\n // @ts-ignore\\r\\n if (typeof event.scale === \\\"number\\\" && event.scale !== 1) {\\r\\n event.preventDefault();\\r\\n }\\r\\n };\\r\\n document.addEventListener(\\\"touchmove\\\", handleTouchMove, {\\r\\n passive: false\\r\\n });\\r\\n return function () {\\r\\n document.removeEventListener(\\\"touchmove\\\", handleTouchMove);\\r\\n };\\r\\n }, []);\\r\\n return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_components_InitializeApp__WEBPACK_IMPORTED_MODULE_4__.InitializeApp, {\\r\\n langCode: langCode,\\r\\n children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_components_App__WEBPACK_IMPORTED_MODULE_5__[\\\"default\\\"], {\\r\\n onChange: onChange,\\r\\n initialData: initialData,\\r\\n excalidrawRef: excalidrawRef,\\r\\n onCollabButtonClick: onCollabButtonClick,\\r\\n isCollaborating: isCollaborating,\\r\\n onPointerUpdate: onPointerUpdate,\\r\\n renderTopRightUI: renderTopRightUI,\\r\\n renderFooter: renderFooter,\\r\\n langCode: langCode,\\r\\n viewModeEnabled: viewModeEnabled,\\r\\n zenModeEnabled: zenModeEnabled,\\r\\n gridModeEnabled: gridModeEnabled,\\r\\n libraryReturnUrl: libraryReturnUrl,\\r\\n theme: theme,\\r\\n name: name,\\r\\n renderCustomStats: renderCustomStats,\\r\\n UIOptions: UIOptions,\\r\\n onPaste: onPaste,\\r\\n onDrop: onDrop //zsviczian\\r\\n ,\\r\\n detectScroll: detectScroll,\\r\\n handleKeyboardGlobally: handleKeyboardGlobally,\\r\\n onLibraryChange: onLibraryChange,\\r\\n autoFocus: autoFocus,\\r\\n onBeforeTextEdit: onBeforeTextEdit //zsviczian\\r\\n ,\\r\\n onBeforeTextSubmit: onBeforeTextSubmit //zsviczian\\r\\n ,\\r\\n generateIdForFile: generateIdForFile,\\r\\n onThemeChange: onThemeChange //zsviczian\\r\\n ,\\r\\n onLinkOpen: onLinkOpen,\\r\\n onLinkHover: onLinkHover //zsviczian\\r\\n ,\\r\\n onViewModeChange: onViewModeChange //zsviczian\\r\\n })\\r\\n });\\r\\n};\\r\\nconst areEqual = function (prevProps, nextProps) {\\r\\n const { initialData: prevInitialData, UIOptions: prevUIOptions = {} } = prevProps, prev = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0___default()(prevProps, _excluded);\\r\\n const { initialData: nextInitialData, UIOptions: nextUIOptions = {} } = nextProps, next = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0___default()(nextProps, _excluded2); // comparing UIOptions\\r\\n const prevUIOptionsKeys = Object.keys(prevUIOptions);\\r\\n const nextUIOptionsKeys = Object.keys(nextUIOptions);\\r\\n if (prevUIOptionsKeys.length !== nextUIOptionsKeys.length) {\\r\\n return false;\\r\\n }\\r\\n const isUIOptionsSame = prevUIOptionsKeys.every(function (key) {\\r\\n if (key === \\\"canvasActions\\\") {\\r\\n const canvasOptionKeys = Object.keys(prevUIOptions.canvasActions);\\r\\n canvasOptionKeys.every(function (key) {\\r\\n var _a, _b, _c, _d;\\r\\n if (key === \\\"export\\\" && ((_a = prevUIOptions === null || prevUIOptions === void 0 ? void 0 : prevUIOptions.canvasActions) === null || _a === void 0 ? void 0 : _a.export) && ((_b = nextUIOptions === null || nextUIOptions === void 0 ? void 0 : nextUIOptions.canvasActions) === null || _b === void 0 ? void 0 : _b.export)) {\\r\\n return prevUIOptions.canvasActions.export.saveFileToDisk === nextUIOptions.canvasActions.export.saveFileToDisk;\\r\\n }\\r\\n return ((_c = prevUIOptions === null || prevUIOptions === void 0 ? void 0 : prevUIOptions.canvasActions) === null || _c === void 0 ? void 0 : _c[key]) === ((_d = nextUIOptions === null || nextUIOptions === void 0 ? void 0 : nextUIOptions.canvasActions) === null || _d === void 0 ? void 0 : _d[key]);\\r\\n });\\r\\n }\\r\\n return true;\\r\\n });\\r\\n const prevKeys = Object.keys(prevProps);\\r\\n const nextKeys = Object.keys(nextProps);\\r\\n return isUIOptionsSame && prevKeys.length === nextKeys.length && prevKeys.every(function (key) {\\r\\n return prev[key] === next[key];\\r\\n });\\r\\n};\\r\\nconst forwardedRefComp = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_2__.forwardRef)(function (props, ref) {\\r\\n return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(Excalidraw, _objectSpread(_objectSpread({}, props), {}, {\\r\\n excalidrawRef: ref\\r\\n }));\\r\\n});\\r\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().memo(forwardedRefComp, areEqual));\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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YUFBYSx1QkFBYixhQUFhLENBQUUsYUFBYSwwQ0FBRyxHQUFHLENBQUMsRUFBQztZQUNyRixDQUFDLENBQUMsQ0FBQztTQUNKO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLENBQUMsQ0FBQztJQUNILE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN4QyxPQUFPLGVBQWUsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLFFBQVEsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUc7UUFDM0YsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLGtEQUFVLENBQUMsVUFBVSxLQUFLLEVBQUUsR0FBRztJQUNuRSxPQUFPLGFBQWEsd0RBQUksQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxFQUFFO1FBQy9FLGFBQWEsRUFBRSxHQUFHO0tBQ25CLENBQUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxDQUFDLENBQUM7QUFDSCw4RUFBNEIsaURBQVUsQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsRUFBQztBQUM2QjtBQUM1QztBQUMyQjtBQUNvSztBQUN4TDtBQUNOO0FBQ29DIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4vaW5kZXgudHN4P2NlNzQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc1wiO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiaW5pdGlhbERhdGFcIiwgXCJVSU9wdGlvbnNcIl0sXG4gICAgICBfZXhjbHVkZWQyID0gW1wiaW5pdGlhbERhdGFcIiwgXCJVSU9wdGlvbnNcIl07XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBlbnVtZXJhYmxlT25seSAmJiAoc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pKSwga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBudWxsICE9IGFyZ3VtZW50c1tpXSA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpICUgMiA/IG93bktleXMoT2JqZWN0KHNvdXJjZSksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpIDogb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIGZvcndhcmRSZWYgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBcIi4vcHVibGljUGF0aFwiO1xuaW1wb3J0IHsgSW5pdGlhbGl6ZUFwcCB9IGZyb20gXCIuLi8uLi9jb21wb25lbnRzL0luaXRpYWxpemVBcHBcIjtcbmltcG9ydCBBcHAgZnJvbSBcIi4uLy4uL2NvbXBvbmVudHMvQXBwXCI7XG5pbXBvcnQgXCIuLi8uLi9jc3MvYXBwLnNjc3NcIjtcbmltcG9ydCBcIi4uLy4uL2Nzcy9zdHlsZXMuc2Nzc1wiO1xuaW1wb3J0IHsgZGVmYXVsdExhbmcgfSBmcm9tIFwiLi4vLi4vaTE4blwiO1xuaW1wb3J0IHsgREVGQVVMVF9VSV9PUFRJT05TIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcblxuY29uc3QgRXhjYWxpZHJhdyA9IGZ1bmN0aW9uIChwcm9wcykge1xuICBjb25zdCB7XG4gICAgb25DaGFuZ2UsXG4gICAgaW5pdGlhbERhdGEsXG4gICAgZXhjYWxpZHJhd1JlZixcbiAgICBvbkNvbGxhYkJ1dHRvbkNsaWNrLFxuICAgIGlzQ29sbGFib3JhdGluZyA9IGZhbHNlLFxuICAgIG9uUG9pbnRlclVwZGF0ZSxcbiAgICByZW5kZXJUb3BSaWdodFVJLFxuICAgIHJlbmRlckZvb3RlcixcbiAgICBsYW5nQ29kZSA9IGRlZmF1bHRMYW5nLmNvZGUsXG4gICAgdmlld01vZGVFbmFibGVkLFxuICAgIHplbk1vZGVFbmFibGVkLFxuICAgIGdyaWRNb2RlRW5hYmxlZCxcbiAgICBsaWJyYXJ5UmV0dXJuVXJsLFxuICAgIHRoZW1lLFxuICAgIG5hbWUsXG4gICAgcmVuZGVyQ3VzdG9tU3RhdHMsXG4gICAgb25QYXN0ZSxcbiAgICBvbkRyb3AsXG4gICAgLy96c3ZpY3ppYW5cbiAgICBkZXRlY3RTY3JvbGwgPSB0cnVlLFxuICAgIGhhbmRsZUtleWJvYXJkR2xvYmFsbHkgPSBmYWxzZSxcbiAgICBvbkxpYnJhcnlDaGFuZ2UsXG4gICAgYXV0b0ZvY3VzID0gZmFsc2UsXG4gICAgb25CZWZvcmVUZXh0RWRpdCxcbiAgICAvL3pzdmljemlhblxuICAgIG9uQmVmb3JlVGV4dFN1Ym1pdCxcbiAgICAvL3pzdmljemlhblxuICAgIGdlbmVyYXRlSWRGb3JGaWxlLFxuICAgIG9uVGhlbWVDaGFuZ2UsXG4gICAgLy96c3ZpY3ppYW5cbiAgICBvbkxpbmtPcGVuLFxuICAgIG9uTGlua0hvdmVyLFxuICAgIC8venN2aWN6aWFuXG4gICAgb25WaWV3TW9kZUNoYW5nZSAvL3pzdmljemlhblxuXG4gIH0gPSBwcm9wcztcbiAgY29uc3QgY2FudmFzQWN0aW9ucyA9IHByb3BzLlVJT3B0aW9ucz8uY2FudmFzQWN0aW9ucztcbiAgY29uc3QgVUlPcHRpb25zID0ge1xuICAgIGNhbnZhc0FjdGlvbnM6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgREVGQVVMVF9VSV9PUFRJT05TLmNhbnZhc0FjdGlvbnMpLCBjYW52YXNBY3Rpb25zKVxuICB9O1xuXG4gIGlmIChjYW52YXNBY3Rpb25zPy5leHBvcnQpIHtcbiAgICBVSU9wdGlvbnMuY2FudmFzQWN0aW9ucy5leHBvcnQuc2F2ZUZpbGVUb0Rpc2sgPSBjYW52YXNBY3Rpb25zLmV4cG9ydD8uc2F2ZUZpbGVUb0Rpc2sgPz8gREVGQVVMVF9VSV9PUFRJT05TLmNhbnZhc0FjdGlvbnMuZXhwb3J0LnNhdmVGaWxlVG9EaXNrO1xuICB9XG5cbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAvLyBCbG9jayBwaW5jaC16b29taW5nIG9uIGlPUyBvdXRzaWRlIG9mIHRoZSBjb250ZW50IGFyZWFcbiAgICBjb25zdCBoYW5kbGVUb3VjaE1vdmUgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIGlmICh0eXBlb2YgZXZlbnQuc2NhbGUgPT09IFwibnVtYmVyXCIgJiYgZXZlbnQuc2NhbGUgIT09IDEpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLCBoYW5kbGVUb3VjaE1vdmUsIHtcbiAgICAgIHBhc3NpdmU6IGZhbHNlXG4gICAgfSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIiwgaGFuZGxlVG91Y2hNb3ZlKTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChJbml0aWFsaXplQXBwLCB7XG4gICAgbGFuZ0NvZGU6IGxhbmdDb2RlLFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChBcHAsIHtcbiAgICAgIG9uQ2hhbmdlOiBvbkNoYW5nZSxcbiAgICAgIGluaXRpYWxEYXRhOiBpbml0aWFsRGF0YSxcbiAgICAgIGV4Y2FsaWRyYXdSZWY6IGV4Y2FsaWRyYXdSZWYsXG4gICAgICBvbkNvbGxhYkJ1dHRvbkNsaWNrOiBvbkNvbGxhYkJ1dHRvbkNsaWNrLFxuICAgICAgaXNDb2xsYWJvcmF0aW5nOiBpc0NvbGxhYm9yYXRpbmcsXG4gICAgICBvblBvaW50ZXJVcGRhdGU6IG9uUG9pbnRlclVwZGF0ZSxcbiAgICAgIHJlbmRlclRvcFJpZ2h0VUk6IHJlbmRlclRvcFJpZ2h0VUksXG4gICAgICByZW5kZXJGb290ZXI6IHJlbmRlckZvb3RlcixcbiAgICAgIGxhbmdDb2RlOiBsYW5nQ29kZSxcbiAgICAgIHZpZXdNb2RlRW5hYmxlZDogdmlld01vZGVFbmFibGVkLFxuICAgICAgemVuTW9kZUVuYWJsZWQ6IHplbk1vZGVFbmFibGVkLFxuICAgICAgZ3JpZE1vZGVFbmFibGVkOiBncmlkTW9kZUVuYWJsZWQsXG4gICAgICBsaWJyYXJ5UmV0dXJuVXJsOiBsaWJyYXJ5UmV0dXJuVXJsLFxuICAgICAgdGhlbWU6IHRoZW1lLFxuICAgICAgbmFtZTogbmFtZSxcbiAgICAgIHJlbmRlckN1c3RvbVN0YXRzOiByZW5kZXJDdXN0b21TdGF0cyxcbiAgICAgIFVJT3B0aW9uczogVUlPcHRpb25zLFxuICAgICAgb25QYXN0ZTogb25QYXN0ZSxcbiAgICAgIG9uRHJvcDogb25Ecm9wIC8venN2aWN6aWFuXG4gICAgICAsXG4gICAgICBkZXRlY3RTY3JvbGw6IGRldGVjdFNjcm9sbCxcbiAgICAgIGhhbmRsZUtleWJvYXJkR2xvYmFsbHk6IGhhbmRsZUtleWJvYXJkR2xvYmFsbHksXG4gICAgICBvbkxpYnJhcnlDaGFuZ2U6IG9uTGlicmFyeUNoYW5nZSxcbiAgICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzLFxuICAgICAgb25CZWZvcmVUZXh0RWRpdDogb25CZWZvcmVUZXh0RWRpdCAvL3pzdmljemlhblxuICAgICAgLFxuICAgICAgb25CZWZvcmVUZXh0U3VibWl0OiBvbkJlZm9yZVRleHRTdWJtaXQgLy96c3ZpY3ppYW5cbiAgICAgICxcbiAgICAgIGdlbmVyYXRlSWRGb3JGaWxlOiBnZW5lcmF0ZUlkRm9yRmlsZSxcbiAgICAgIG9uVGhlbWVDaGFuZ2U6IG9uVGhlbWVDaGFuZ2UgLy96c3ZpY3ppYW5cbiAgICAgICxcbiAgICAgIG9uTGlua09wZW46IG9uTGlua09wZW4sXG4gICAgICBvbkxpbmtIb3Zlcjogb25MaW5rSG92ZXIgLy96c3ZpY3ppYW5cbiAgICAgICxcbiAgICAgIG9uVmlld01vZGVDaGFuZ2U6IG9uVmlld01vZGVDaGFuZ2UgLy96c3ZpY3ppYW5cblxuICAgIH0pXG4gIH0pO1xufTtcblxuY29uc3QgYXJlRXF1YWwgPSBmdW5jdGlvbiAocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGluaXRpYWxEYXRhOiBwcmV2SW5pdGlhbERhdGEsXG4gICAgVUlPcHRpb25zOiBwcmV2VUlPcHRpb25zID0ge31cbiAgfSA9IHByZXZQcm9wcyxcbiAgICAgICAgcHJldiA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhwcmV2UHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgY29uc3Qge1xuICAgIGluaXRpYWxEYXRhOiBuZXh0SW5pdGlhbERhdGEsXG4gICAgVUlPcHRpb25zOiBuZXh0VUlPcHRpb25zID0ge31cbiAgfSA9IG5leHRQcm9wcyxcbiAgICAgICAgbmV4dCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhuZXh0UHJvcHMsIF9leGNsdWRlZDIpOyAvLyBjb21wYXJpbmcgVUlPcHRpb25zXG5cblxuICBjb25zdCBwcmV2VUlPcHRpb25zS2V5cyA9IE9iamVjdC5rZXlzKHByZXZVSU9wdGlvbnMpO1xuICBjb25zdCBuZXh0VUlPcHRpb25zS2V5cyA9IE9iamVjdC5rZXlzKG5leHRVSU9wdGlvbnMpO1xuXG4gIGlmIChwcmV2VUlPcHRpb25zS2V5cy5sZW5ndGggIT09IG5leHRVSU9wdGlvbnNLZXlzLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGlzVUlPcHRpb25zU2FtZSA9IHByZXZVSU9wdGlvbnNLZXlzLmV2ZXJ5KGZ1bmN0aW9uIChrZXkpIHtcbiAgICBpZiAoa2V5ID09PSBcImNhbnZhc0FjdGlvbnNcIikge1xuICAgICAgY29uc3QgY2FudmFzT3B0aW9uS2V5cyA9IE9iamVjdC5rZXlzKHByZXZVSU9wdGlvbnMuY2FudmFzQWN0aW9ucyk7XG4gICAgICBjYW52YXNPcHRpb25LZXlzLmV2ZXJ5KGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgaWYgKGtleSA9PT0gXCJleHBvcnRcIiAmJiBwcmV2VUlPcHRpb25zPy5jYW52YXNBY3Rpb25zPy5leHBvcnQgJiYgbmV4dFVJT3B0aW9ucz8uY2FudmFzQWN0aW9ucz8uZXhwb3J0KSB7XG4gICAgICAgICAgcmV0dXJuIHByZXZVSU9wdGlvbnMuY2FudmFzQWN0aW9ucy5leHBvcnQuc2F2ZUZpbGVUb0Rpc2sgPT09IG5leHRVSU9wdGlvbnMuY2FudmFzQWN0aW9ucy5leHBvcnQuc2F2ZUZpbGVUb0Rpc2s7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJldlVJT3B0aW9ucz8uY2FudmFzQWN0aW9ucz8uW2tleV0gPT09IG5leHRVSU9wdGlvbnM/LmNhbnZhc0FjdGlvbnM/LltrZXldO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuICBjb25zdCBwcmV2S2V5cyA9IE9iamVjdC5rZXlzKHByZXZQcm9wcyk7XG4gIGNvbnN0IG5leHRLZXlzID0gT2JqZWN0LmtleXMobmV4dFByb3BzKTtcbiAgcmV0dXJuIGlzVUlPcHRpb25zU2FtZSAmJiBwcmV2S2V5cy5sZW5ndGggPT09IG5leHRLZXlzLmxlbmd0aCAmJiBwcmV2S2V5cy5ldmVyeShmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIHByZXZba2V5XSA9PT0gbmV4dFtrZXldO1xuICB9KTtcbn07XG5cbmNvbnN0IGZvcndhcmRlZFJlZkNvbXAgPSAvKiNfX1BVUkVfXyovZm9yd2FyZFJlZihmdW5jdGlvbiAocHJvcHMsIHJlZikge1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goRXhjYWxpZHJhdywgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBwcm9wcyksIHt9LCB7XG4gICAgZXhjYWxpZHJhd1JlZjogcmVmXG4gIH0pKTtcbn0pO1xuZXhwb3J0IGRlZmF1bHQgLyojX19QVVJFX18qL1JlYWN0Lm1lbW8oZm9yd2FyZGVkUmVmQ29tcCwgYXJlRXF1YWwpO1xuZXhwb3J0IHsgZ2V0U2NlbmVWZXJzaW9uLCBpc0ludmlzaWJseVNtYWxsRWxlbWVudCwgZ2V0Tm9uRGVsZXRlZEVsZW1lbnRzIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRcIjtcbmV4cG9ydCB7IGRlZmF1bHRMYW5nLCBsYW5ndWFnZXMgfSBmcm9tIFwiLi4vLi4vaTE4blwiO1xuZXhwb3J0IHsgcmVzdG9yZSwgcmVzdG9yZUFwcFN0YXRlLCByZXN0b3JlRWxlbWVudHMgfSBmcm9tIFwiLi4vLi4vZGF0YS9yZXN0b3JlXCI7XG5leHBvcnQgeyBleHBvcnRUb0NhbnZhcywgZXhwb3J0VG9CbG9iLCBleHBvcnRUb1N2Zywgc2VyaWFsaXplQXNKU09OLCBsb2FkTGlicmFyeUZyb21CbG9iLCBsb2FkRnJvbUJsb2IsIGdldEZyZWVEcmF3U3ZnUGF0aCwgZ2V0Q29tbW9uQm91bmRpbmdCb3gsIGdldE1heGltdW1Hcm91cHMsIGludGVyc2VjdEVsZW1lbnRXaXRoTGluZSwgZGV0ZXJtaW5lRm9jdXNEaXN0YW5jZSB9IGZyb20gXCIuLi8uLi9wYWNrYWdlcy91dGlsc1wiO1xuZXhwb3J0IHsgaXNMaW5lYXJFbGVtZW50IH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQvdHlwZUNoZWNrc1wiO1xuZXhwb3J0IHsgRk9OVF9GQU1JTFksIFRIRU1FIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuZXhwb3J0IHsgbXV0YXRlRWxlbWVudCwgbmV3RWxlbWVudFdpdGgsIGJ1bXBWZXJzaW9uIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnQvbXV0YXRlRWxlbWVudFwiOyJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\\n//# sourceURL=webpack-internal:///./index.tsx\\n\");\n\n//# sourceURL=webpack://Excalidraw/./index.tsx?");
2921
+ eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ \\\"default\\\": () => (__WEBPACK_DEFAULT_EXPORT__),\\n/* harmony export */ \\\"getSceneVersion\\\": () => (/* reexport safe */ _element__WEBPACK_IMPORTED_MODULE_11__.getSceneVersion),\\n/* harmony export */ \\\"isInvisiblySmallElement\\\": () => (/* reexport safe */ _element__WEBPACK_IMPORTED_MODULE_11__.isInvisiblySmallElement),\\n/* harmony export */ \\\"getNonDeletedElements\\\": () => (/* reexport safe */ _element__WEBPACK_IMPORTED_MODULE_11__.getNonDeletedElements),\\n/* harmony export */ \\\"defaultLang\\\": () => (/* reexport safe */ _i18n__WEBPACK_IMPORTED_MODULE_8__.defaultLang),\\n/* harmony export */ \\\"languages\\\": () => (/* reexport safe */ _i18n__WEBPACK_IMPORTED_MODULE_8__.languages),\\n/* harmony export */ \\\"restore\\\": () => (/* reexport safe */ _data_restore__WEBPACK_IMPORTED_MODULE_12__.restore),\\n/* harmony export */ \\\"restoreAppState\\\": () => (/* reexport safe */ _data_restore__WEBPACK_IMPORTED_MODULE_12__.restoreAppState),\\n/* harmony export */ \\\"restoreElements\\\": () => (/* reexport safe */ _data_restore__WEBPACK_IMPORTED_MODULE_12__.restoreElements),\\n/* harmony export */ \\\"exportToCanvas\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_13__.exportToCanvas),\\n/* harmony export */ \\\"exportToBlob\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_13__.exportToBlob),\\n/* harmony export */ \\\"exportToSvg\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_13__.exportToSvg),\\n/* harmony export */ \\\"serializeAsJSON\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_13__.serializeAsJSON),\\n/* harmony export */ \\\"loadLibraryFromBlob\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_13__.loadLibraryFromBlob),\\n/* harmony export */ \\\"loadFromBlob\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_13__.loadFromBlob),\\n/* harmony export */ \\\"getFreeDrawSvgPath\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_13__.getFreeDrawSvgPath),\\n/* harmony export */ \\\"getCommonBoundingBox\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_13__.getCommonBoundingBox),\\n/* harmony export */ \\\"getMaximumGroups\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_13__.getMaximumGroups),\\n/* harmony export */ \\\"intersectElementWithLine\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_13__.intersectElementWithLine),\\n/* harmony export */ \\\"determineFocusDistance\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_13__.determineFocusDistance),\\n/* harmony export */ \\\"measureText\\\": () => (/* reexport safe */ _packages_utils__WEBPACK_IMPORTED_MODULE_13__.measureText),\\n/* harmony export */ \\\"isLinearElement\\\": () => (/* reexport safe */ _element_typeChecks__WEBPACK_IMPORTED_MODULE_14__.isLinearElement),\\n/* harmony export */ \\\"FONT_FAMILY\\\": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_9__.FONT_FAMILY),\\n/* harmony export */ \\\"THEME\\\": () => (/* reexport safe */ _constants__WEBPACK_IMPORTED_MODULE_9__.THEME),\\n/* harmony export */ \\\"mutateElement\\\": () => (/* reexport safe */ _element_mutateElement__WEBPACK_IMPORTED_MODULE_15__.mutateElement),\\n/* harmony export */ \\\"newElementWith\\\": () => (/* reexport safe */ _element_mutateElement__WEBPACK_IMPORTED_MODULE_15__.newElementWith),\\n/* harmony export */ \\\"bumpVersion\\\": () => (/* reexport safe */ _element_mutateElement__WEBPACK_IMPORTED_MODULE_15__.bumpVersion)\\n/* harmony export */ });\\n/* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/objectWithoutProperties */ \\\"./node_modules/@babel/runtime/helpers/objectWithoutProperties.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0__);\\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \\\"./node_modules/@babel/runtime/helpers/defineProperty.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__);\\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react */ \\\"react\\\");\\n/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_2__);\\n/* harmony import */ var _publicPath__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./publicPath */ \\\"./publicPath.js\\\");\\n/* harmony import */ var _components_InitializeApp__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../components/InitializeApp */ \\\"../../components/InitializeApp.tsx\\\");\\n/* harmony import */ var _components_App__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../components/App */ \\\"../../components/App.tsx\\\");\\n/* harmony import */ var _css_app_scss__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../css/app.scss */ \\\"../../css/app.scss\\\");\\n/* harmony import */ var _css_app_scss__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_css_app_scss__WEBPACK_IMPORTED_MODULE_6__);\\n/* harmony import */ var _css_styles_scss__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../css/styles.scss */ \\\"../../css/styles.scss\\\");\\n/* harmony import */ var _css_styles_scss__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(_css_styles_scss__WEBPACK_IMPORTED_MODULE_7__);\\n/* harmony import */ var _i18n__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../../i18n */ \\\"../../i18n.ts\\\");\\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../constants */ \\\"../../constants.ts\\\");\\n/* harmony import */ var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! react/jsx-runtime */ \\\"../../../node_modules/react/jsx-runtime.js\\\");\\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../../element */ \\\"../../element/index.ts\\\");\\n/* harmony import */ var _data_restore__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../../data/restore */ \\\"../../data/restore.ts\\\");\\n/* harmony import */ var _packages_utils__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../../packages/utils */ \\\"../utils.ts\\\");\\n/* harmony import */ var _element_typeChecks__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../../element/typeChecks */ \\\"../../element/typeChecks.ts\\\");\\n/* harmony import */ var _element_mutateElement__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../../element/mutateElement */ \\\"../../element/mutateElement.ts\\\");\\n\\r\\n\\r\\nconst _excluded = [\\\"initialData\\\", \\\"UIOptions\\\"], _excluded2 = [\\\"initialData\\\", \\\"UIOptions\\\"];\\r\\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) {\\r\\n var symbols = Object.getOwnPropertySymbols(object);\\r\\n enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols);\\r\\n} return keys; }\\r\\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) {\\r\\n var source = null != arguments[i] ? arguments[i] : {};\\r\\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1___default()(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); });\\r\\n} return target; }\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\nconst Excalidraw = function (props) {\\r\\n var _a, _b, _c;\\r\\n const { onChange, initialData, excalidrawRef, onCollabButtonClick, isCollaborating = false, onPointerUpdate, renderTopRightUI, renderFooter, langCode = _i18n__WEBPACK_IMPORTED_MODULE_8__.defaultLang.code, viewModeEnabled, zenModeEnabled, gridModeEnabled, libraryReturnUrl, theme, name, renderCustomStats, onPaste, onDrop, \\r\\n //zsviczian\\r\\n detectScroll = true, handleKeyboardGlobally = false, onLibraryChange, autoFocus = false, onBeforeTextEdit, \\r\\n //zsviczian\\r\\n onBeforeTextSubmit, \\r\\n //zsviczian\\r\\n generateIdForFile, onThemeChange, \\r\\n //zsviczian\\r\\n onLinkOpen, onLinkHover, \\r\\n //zsviczian\\r\\n onViewModeChange //zsviczian\\r\\n } = props;\\r\\n const canvasActions = (_a = props.UIOptions) === null || _a === void 0 ? void 0 : _a.canvasActions;\\r\\n const UIOptions = {\\r\\n canvasActions: _objectSpread(_objectSpread({}, _constants__WEBPACK_IMPORTED_MODULE_9__.DEFAULT_UI_OPTIONS.canvasActions), canvasActions)\\r\\n };\\r\\n if (canvasActions === null || canvasActions === void 0 ? void 0 : canvasActions.export) {\\r\\n UIOptions.canvasActions.export.saveFileToDisk = (_c = (_b = canvasActions.export) === null || _b === void 0 ? void 0 : _b.saveFileToDisk) !== null && _c !== void 0 ? _c : _constants__WEBPACK_IMPORTED_MODULE_9__.DEFAULT_UI_OPTIONS.canvasActions[\\\"export\\\"].saveFileToDisk;\\r\\n }\\r\\n (0,react__WEBPACK_IMPORTED_MODULE_2__.useEffect)(function () {\\r\\n // Block pinch-zooming on iOS outside of the content area\\r\\n const handleTouchMove = function (event) {\\r\\n // @ts-ignore\\r\\n if (typeof event.scale === \\\"number\\\" && event.scale !== 1) {\\r\\n event.preventDefault();\\r\\n }\\r\\n };\\r\\n document.addEventListener(\\\"touchmove\\\", handleTouchMove, {\\r\\n passive: false\\r\\n });\\r\\n return function () {\\r\\n document.removeEventListener(\\\"touchmove\\\", handleTouchMove);\\r\\n };\\r\\n }, []);\\r\\n return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_components_InitializeApp__WEBPACK_IMPORTED_MODULE_4__.InitializeApp, {\\r\\n langCode: langCode,\\r\\n children: /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(_components_App__WEBPACK_IMPORTED_MODULE_5__[\\\"default\\\"], {\\r\\n onChange: onChange,\\r\\n initialData: initialData,\\r\\n excalidrawRef: excalidrawRef,\\r\\n onCollabButtonClick: onCollabButtonClick,\\r\\n isCollaborating: isCollaborating,\\r\\n onPointerUpdate: onPointerUpdate,\\r\\n renderTopRightUI: renderTopRightUI,\\r\\n renderFooter: renderFooter,\\r\\n langCode: langCode,\\r\\n viewModeEnabled: viewModeEnabled,\\r\\n zenModeEnabled: zenModeEnabled,\\r\\n gridModeEnabled: gridModeEnabled,\\r\\n libraryReturnUrl: libraryReturnUrl,\\r\\n theme: theme,\\r\\n name: name,\\r\\n renderCustomStats: renderCustomStats,\\r\\n UIOptions: UIOptions,\\r\\n onPaste: onPaste,\\r\\n onDrop: onDrop //zsviczian\\r\\n ,\\r\\n detectScroll: detectScroll,\\r\\n handleKeyboardGlobally: handleKeyboardGlobally,\\r\\n onLibraryChange: onLibraryChange,\\r\\n autoFocus: autoFocus,\\r\\n onBeforeTextEdit: onBeforeTextEdit //zsviczian\\r\\n ,\\r\\n onBeforeTextSubmit: onBeforeTextSubmit //zsviczian\\r\\n ,\\r\\n generateIdForFile: generateIdForFile,\\r\\n onThemeChange: onThemeChange //zsviczian\\r\\n ,\\r\\n onLinkOpen: onLinkOpen,\\r\\n onLinkHover: onLinkHover //zsviczian\\r\\n ,\\r\\n onViewModeChange: onViewModeChange //zsviczian\\r\\n })\\r\\n });\\r\\n};\\r\\nconst areEqual = function (prevProps, nextProps) {\\r\\n const { initialData: prevInitialData, UIOptions: prevUIOptions = {} } = prevProps, prev = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0___default()(prevProps, _excluded);\\r\\n const { initialData: nextInitialData, UIOptions: nextUIOptions = {} } = nextProps, next = _babel_runtime_helpers_objectWithoutProperties__WEBPACK_IMPORTED_MODULE_0___default()(nextProps, _excluded2); // comparing UIOptions\\r\\n const prevUIOptionsKeys = Object.keys(prevUIOptions);\\r\\n const nextUIOptionsKeys = Object.keys(nextUIOptions);\\r\\n if (prevUIOptionsKeys.length !== nextUIOptionsKeys.length) {\\r\\n return false;\\r\\n }\\r\\n const isUIOptionsSame = prevUIOptionsKeys.every(function (key) {\\r\\n if (key === \\\"canvasActions\\\") {\\r\\n const canvasOptionKeys = Object.keys(prevUIOptions.canvasActions);\\r\\n canvasOptionKeys.every(function (key) {\\r\\n var _a, _b, _c, _d;\\r\\n if (key === \\\"export\\\" && ((_a = prevUIOptions === null || prevUIOptions === void 0 ? void 0 : prevUIOptions.canvasActions) === null || _a === void 0 ? void 0 : _a.export) && ((_b = nextUIOptions === null || nextUIOptions === void 0 ? void 0 : nextUIOptions.canvasActions) === null || _b === void 0 ? void 0 : _b.export)) {\\r\\n return prevUIOptions.canvasActions.export.saveFileToDisk === nextUIOptions.canvasActions.export.saveFileToDisk;\\r\\n }\\r\\n return ((_c = prevUIOptions === null || prevUIOptions === void 0 ? void 0 : prevUIOptions.canvasActions) === null || _c === void 0 ? void 0 : _c[key]) === ((_d = nextUIOptions === null || nextUIOptions === void 0 ? void 0 : nextUIOptions.canvasActions) === null || _d === void 0 ? void 0 : _d[key]);\\r\\n });\\r\\n }\\r\\n return true;\\r\\n });\\r\\n const prevKeys = Object.keys(prevProps);\\r\\n const nextKeys = Object.keys(nextProps);\\r\\n return isUIOptionsSame && prevKeys.length === nextKeys.length && prevKeys.every(function (key) {\\r\\n return prev[key] === next[key];\\r\\n });\\r\\n};\\r\\nconst forwardedRefComp = /*#__PURE__*/ (0,react__WEBPACK_IMPORTED_MODULE_2__.forwardRef)(function (props, ref) {\\r\\n return /*#__PURE__*/ (0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_10__.jsx)(Excalidraw, _objectSpread(_objectSpread({}, props), {}, {\\r\\n excalidrawRef: ref\\r\\n }));\\r\\n});\\r\\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_2___default().memo(forwardedRefComp, areEqual));\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LGFBQWEsdUJBQWIsYUFBYSxDQUFFLGFBQWEsMENBQUcsR0FBRyxDQUFDLEVBQUM7WUFDckYsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDeEMsT0FBTyxlQUFlLElBQUksUUFBUSxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsTUFBTSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHO1FBQzNGLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLE1BQU0sZ0JBQWdCLEdBQUcsYUFBYSxrREFBVSxDQUFDLFVBQVUsS0FBSyxFQUFFLEdBQUc7SUFDbkUsT0FBTyxhQUFhLHdEQUFJLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRTtRQUMvRSxhQUFhLEVBQUUsR0FBRztLQUNuQixDQUFDLENBQUMsQ0FBQztBQUNOLENBQUMsQ0FBQyxDQUFDO0FBQ0gsOEVBQTRCLGlEQUFVLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxDQUFDLEVBQUM7QUFDNkI7QUFDNUM7QUFDMkI7QUFDaUw7QUFDck07QUFDTjtBQUNvQyIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2luZGV4LnRzeD9jZTc0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvb2JqZWN0V2l0aG91dFByb3BlcnRpZXNcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHlcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImluaXRpYWxEYXRhXCIsIFwiVUlPcHRpb25zXCJdLFxuICAgICAgX2V4Y2x1ZGVkMiA9IFtcImluaXRpYWxEYXRhXCIsIFwiVUlPcHRpb25zXCJdO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTsgaSAlIDIgPyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCBmb3J3YXJkUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgXCIuL3B1YmxpY1BhdGhcIjtcbmltcG9ydCB7IEluaXRpYWxpemVBcHAgfSBmcm9tIFwiLi4vLi4vY29tcG9uZW50cy9Jbml0aWFsaXplQXBwXCI7XG5pbXBvcnQgQXBwIGZyb20gXCIuLi8uLi9jb21wb25lbnRzL0FwcFwiO1xuaW1wb3J0IFwiLi4vLi4vY3NzL2FwcC5zY3NzXCI7XG5pbXBvcnQgXCIuLi8uLi9jc3Mvc3R5bGVzLnNjc3NcIjtcbmltcG9ydCB7IGRlZmF1bHRMYW5nIH0gZnJvbSBcIi4uLy4uL2kxOG5cIjtcbmltcG9ydCB7IERFRkFVTFRfVUlfT1BUSU9OUyB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5cbmNvbnN0IEV4Y2FsaWRyYXcgPSBmdW5jdGlvbiAocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIG9uQ2hhbmdlLFxuICAgIGluaXRpYWxEYXRhLFxuICAgIGV4Y2FsaWRyYXdSZWYsXG4gICAgb25Db2xsYWJCdXR0b25DbGljayxcbiAgICBpc0NvbGxhYm9yYXRpbmcgPSBmYWxzZSxcbiAgICBvblBvaW50ZXJVcGRhdGUsXG4gICAgcmVuZGVyVG9wUmlnaHRVSSxcbiAgICByZW5kZXJGb290ZXIsXG4gICAgbGFuZ0NvZGUgPSBkZWZhdWx0TGFuZy5jb2RlLFxuICAgIHZpZXdNb2RlRW5hYmxlZCxcbiAgICB6ZW5Nb2RlRW5hYmxlZCxcbiAgICBncmlkTW9kZUVuYWJsZWQsXG4gICAgbGlicmFyeVJldHVyblVybCxcbiAgICB0aGVtZSxcbiAgICBuYW1lLFxuICAgIHJlbmRlckN1c3RvbVN0YXRzLFxuICAgIG9uUGFzdGUsXG4gICAgb25Ecm9wLFxuICAgIC8venN2aWN6aWFuXG4gICAgZGV0ZWN0U2Nyb2xsID0gdHJ1ZSxcbiAgICBoYW5kbGVLZXlib2FyZEdsb2JhbGx5ID0gZmFsc2UsXG4gICAgb25MaWJyYXJ5Q2hhbmdlLFxuICAgIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICAgIG9uQmVmb3JlVGV4dEVkaXQsXG4gICAgLy96c3ZpY3ppYW5cbiAgICBvbkJlZm9yZVRleHRTdWJtaXQsXG4gICAgLy96c3ZpY3ppYW5cbiAgICBnZW5lcmF0ZUlkRm9yRmlsZSxcbiAgICBvblRoZW1lQ2hhbmdlLFxuICAgIC8venN2aWN6aWFuXG4gICAgb25MaW5rT3BlbixcbiAgICBvbkxpbmtIb3ZlcixcbiAgICAvL3pzdmljemlhblxuICAgIG9uVmlld01vZGVDaGFuZ2UgLy96c3ZpY3ppYW5cblxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IGNhbnZhc0FjdGlvbnMgPSBwcm9wcy5VSU9wdGlvbnM/LmNhbnZhc0FjdGlvbnM7XG4gIGNvbnN0IFVJT3B0aW9ucyA9IHtcbiAgICBjYW52YXNBY3Rpb25zOiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIERFRkFVTFRfVUlfT1BUSU9OUy5jYW52YXNBY3Rpb25zKSwgY2FudmFzQWN0aW9ucylcbiAgfTtcblxuICBpZiAoY2FudmFzQWN0aW9ucz8uZXhwb3J0KSB7XG4gICAgVUlPcHRpb25zLmNhbnZhc0FjdGlvbnMuZXhwb3J0LnNhdmVGaWxlVG9EaXNrID0gY2FudmFzQWN0aW9ucy5leHBvcnQ/LnNhdmVGaWxlVG9EaXNrID8/IERFRkFVTFRfVUlfT1BUSU9OUy5jYW52YXNBY3Rpb25zLmV4cG9ydC5zYXZlRmlsZVRvRGlzaztcbiAgfVxuXG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgLy8gQmxvY2sgcGluY2gtem9vbWluZyBvbiBpT1Mgb3V0c2lkZSBvZiB0aGUgY29udGVudCBhcmVhXG4gICAgY29uc3QgaGFuZGxlVG91Y2hNb3ZlID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBpZiAodHlwZW9mIGV2ZW50LnNjYWxlID09PSBcIm51bWJlclwiICYmIGV2ZW50LnNjYWxlICE9PSAxKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIiwgaGFuZGxlVG91Y2hNb3ZlLCB7XG4gICAgICBwYXNzaXZlOiBmYWxzZVxuICAgIH0pO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2htb3ZlXCIsIGhhbmRsZVRvdWNoTW92ZSk7XG4gICAgfTtcbiAgfSwgW10pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goSW5pdGlhbGl6ZUFwcCwge1xuICAgIGxhbmdDb2RlOiBsYW5nQ29kZSxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goQXBwLCB7XG4gICAgICBvbkNoYW5nZTogb25DaGFuZ2UsXG4gICAgICBpbml0aWFsRGF0YTogaW5pdGlhbERhdGEsXG4gICAgICBleGNhbGlkcmF3UmVmOiBleGNhbGlkcmF3UmVmLFxuICAgICAgb25Db2xsYWJCdXR0b25DbGljazogb25Db2xsYWJCdXR0b25DbGljayxcbiAgICAgIGlzQ29sbGFib3JhdGluZzogaXNDb2xsYWJvcmF0aW5nLFxuICAgICAgb25Qb2ludGVyVXBkYXRlOiBvblBvaW50ZXJVcGRhdGUsXG4gICAgICByZW5kZXJUb3BSaWdodFVJOiByZW5kZXJUb3BSaWdodFVJLFxuICAgICAgcmVuZGVyRm9vdGVyOiByZW5kZXJGb290ZXIsXG4gICAgICBsYW5nQ29kZTogbGFuZ0NvZGUsXG4gICAgICB2aWV3TW9kZUVuYWJsZWQ6IHZpZXdNb2RlRW5hYmxlZCxcbiAgICAgIHplbk1vZGVFbmFibGVkOiB6ZW5Nb2RlRW5hYmxlZCxcbiAgICAgIGdyaWRNb2RlRW5hYmxlZDogZ3JpZE1vZGVFbmFibGVkLFxuICAgICAgbGlicmFyeVJldHVyblVybDogbGlicmFyeVJldHVyblVybCxcbiAgICAgIHRoZW1lOiB0aGVtZSxcbiAgICAgIG5hbWU6IG5hbWUsXG4gICAgICByZW5kZXJDdXN0b21TdGF0czogcmVuZGVyQ3VzdG9tU3RhdHMsXG4gICAgICBVSU9wdGlvbnM6IFVJT3B0aW9ucyxcbiAgICAgIG9uUGFzdGU6IG9uUGFzdGUsXG4gICAgICBvbkRyb3A6IG9uRHJvcCAvL3pzdmljemlhblxuICAgICAgLFxuICAgICAgZGV0ZWN0U2Nyb2xsOiBkZXRlY3RTY3JvbGwsXG4gICAgICBoYW5kbGVLZXlib2FyZEdsb2JhbGx5OiBoYW5kbGVLZXlib2FyZEdsb2JhbGx5LFxuICAgICAgb25MaWJyYXJ5Q2hhbmdlOiBvbkxpYnJhcnlDaGFuZ2UsXG4gICAgICBhdXRvRm9jdXM6IGF1dG9Gb2N1cyxcbiAgICAgIG9uQmVmb3JlVGV4dEVkaXQ6IG9uQmVmb3JlVGV4dEVkaXQgLy96c3ZpY3ppYW5cbiAgICAgICxcbiAgICAgIG9uQmVmb3JlVGV4dFN1Ym1pdDogb25CZWZvcmVUZXh0U3VibWl0IC8venN2aWN6aWFuXG4gICAgICAsXG4gICAgICBnZW5lcmF0ZUlkRm9yRmlsZTogZ2VuZXJhdGVJZEZvckZpbGUsXG4gICAgICBvblRoZW1lQ2hhbmdlOiBvblRoZW1lQ2hhbmdlIC8venN2aWN6aWFuXG4gICAgICAsXG4gICAgICBvbkxpbmtPcGVuOiBvbkxpbmtPcGVuLFxuICAgICAgb25MaW5rSG92ZXI6IG9uTGlua0hvdmVyIC8venN2aWN6aWFuXG4gICAgICAsXG4gICAgICBvblZpZXdNb2RlQ2hhbmdlOiBvblZpZXdNb2RlQ2hhbmdlIC8venN2aWN6aWFuXG5cbiAgICB9KVxuICB9KTtcbn07XG5cbmNvbnN0IGFyZUVxdWFsID0gZnVuY3Rpb24gKHByZXZQcm9wcywgbmV4dFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBpbml0aWFsRGF0YTogcHJldkluaXRpYWxEYXRhLFxuICAgIFVJT3B0aW9uczogcHJldlVJT3B0aW9ucyA9IHt9XG4gIH0gPSBwcmV2UHJvcHMsXG4gICAgICAgIHByZXYgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJldlByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIGNvbnN0IHtcbiAgICBpbml0aWFsRGF0YTogbmV4dEluaXRpYWxEYXRhLFxuICAgIFVJT3B0aW9uczogbmV4dFVJT3B0aW9ucyA9IHt9XG4gIH0gPSBuZXh0UHJvcHMsXG4gICAgICAgIG5leHQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMobmV4dFByb3BzLCBfZXhjbHVkZWQyKTsgLy8gY29tcGFyaW5nIFVJT3B0aW9uc1xuXG5cbiAgY29uc3QgcHJldlVJT3B0aW9uc0tleXMgPSBPYmplY3Qua2V5cyhwcmV2VUlPcHRpb25zKTtcbiAgY29uc3QgbmV4dFVJT3B0aW9uc0tleXMgPSBPYmplY3Qua2V5cyhuZXh0VUlPcHRpb25zKTtcblxuICBpZiAocHJldlVJT3B0aW9uc0tleXMubGVuZ3RoICE9PSBuZXh0VUlPcHRpb25zS2V5cy5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBpc1VJT3B0aW9uc1NhbWUgPSBwcmV2VUlPcHRpb25zS2V5cy5ldmVyeShmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGtleSA9PT0gXCJjYW52YXNBY3Rpb25zXCIpIHtcbiAgICAgIGNvbnN0IGNhbnZhc09wdGlvbktleXMgPSBPYmplY3Qua2V5cyhwcmV2VUlPcHRpb25zLmNhbnZhc0FjdGlvbnMpO1xuICAgICAgY2FudmFzT3B0aW9uS2V5cy5ldmVyeShmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGlmIChrZXkgPT09IFwiZXhwb3J0XCIgJiYgcHJldlVJT3B0aW9ucz8uY2FudmFzQWN0aW9ucz8uZXhwb3J0ICYmIG5leHRVSU9wdGlvbnM/LmNhbnZhc0FjdGlvbnM/LmV4cG9ydCkge1xuICAgICAgICAgIHJldHVybiBwcmV2VUlPcHRpb25zLmNhbnZhc0FjdGlvbnMuZXhwb3J0LnNhdmVGaWxlVG9EaXNrID09PSBuZXh0VUlPcHRpb25zLmNhbnZhc0FjdGlvbnMuZXhwb3J0LnNhdmVGaWxlVG9EaXNrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHByZXZVSU9wdGlvbnM/LmNhbnZhc0FjdGlvbnM/LltrZXldID09PSBuZXh0VUlPcHRpb25zPy5jYW52YXNBY3Rpb25zPy5ba2V5XTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9KTtcbiAgY29uc3QgcHJldktleXMgPSBPYmplY3Qua2V5cyhwcmV2UHJvcHMpO1xuICBjb25zdCBuZXh0S2V5cyA9IE9iamVjdC5rZXlzKG5leHRQcm9wcyk7XG4gIHJldHVybiBpc1VJT3B0aW9uc1NhbWUgJiYgcHJldktleXMubGVuZ3RoID09PSBuZXh0S2V5cy5sZW5ndGggJiYgcHJldktleXMuZXZlcnkoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBwcmV2W2tleV0gPT09IG5leHRba2V5XTtcbiAgfSk7XG59O1xuXG5jb25zdCBmb3J3YXJkZWRSZWZDb21wID0gLyojX19QVVJFX18qL2ZvcndhcmRSZWYoZnVuY3Rpb24gKHByb3BzLCByZWYpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KEV4Y2FsaWRyYXcsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcHJvcHMpLCB7fSwge1xuICAgIGV4Y2FsaWRyYXdSZWY6IHJlZlxuICB9KSk7XG59KTtcbmV4cG9ydCBkZWZhdWx0IC8qI19fUFVSRV9fKi9SZWFjdC5tZW1vKGZvcndhcmRlZFJlZkNvbXAsIGFyZUVxdWFsKTtcbmV4cG9ydCB7IGdldFNjZW5lVmVyc2lvbiwgaXNJbnZpc2libHlTbWFsbEVsZW1lbnQsIGdldE5vbkRlbGV0ZWRFbGVtZW50cyB9IGZyb20gXCIuLi8uLi9lbGVtZW50XCI7XG5leHBvcnQgeyBkZWZhdWx0TGFuZywgbGFuZ3VhZ2VzIH0gZnJvbSBcIi4uLy4uL2kxOG5cIjtcbmV4cG9ydCB7IHJlc3RvcmUsIHJlc3RvcmVBcHBTdGF0ZSwgcmVzdG9yZUVsZW1lbnRzIH0gZnJvbSBcIi4uLy4uL2RhdGEvcmVzdG9yZVwiO1xuZXhwb3J0IHsgZXhwb3J0VG9DYW52YXMsIGV4cG9ydFRvQmxvYiwgZXhwb3J0VG9TdmcsIHNlcmlhbGl6ZUFzSlNPTiwgbG9hZExpYnJhcnlGcm9tQmxvYiwgbG9hZEZyb21CbG9iLCBnZXRGcmVlRHJhd1N2Z1BhdGgsIGdldENvbW1vbkJvdW5kaW5nQm94LCBnZXRNYXhpbXVtR3JvdXBzLCBpbnRlcnNlY3RFbGVtZW50V2l0aExpbmUsIGRldGVybWluZUZvY3VzRGlzdGFuY2UsIG1lYXN1cmVUZXh0IH0gZnJvbSBcIi4uLy4uL3BhY2thZ2VzL3V0aWxzXCI7XG5leHBvcnQgeyBpc0xpbmVhckVsZW1lbnQgfSBmcm9tIFwiLi4vLi4vZWxlbWVudC90eXBlQ2hlY2tzXCI7XG5leHBvcnQgeyBGT05UX0ZBTUlMWSwgVEhFTUUgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5leHBvcnQgeyBtdXRhdGVFbGVtZW50LCBuZXdFbGVtZW50V2l0aCwgYnVtcFZlcnNpb24gfSBmcm9tIFwiLi4vLi4vZWxlbWVudC9tdXRhdGVFbGVtZW50XCI7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///./index.tsx\\n\");\n\n//# sourceURL=webpack://Excalidraw/./index.tsx?");
2922
2922
 
2923
2923
  /***/ }),
2924
2924
 
@@ -2940,7 +2940,7 @@ eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony import */
2940
2940
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
2941
2941
 
2942
2942
  "use strict";
2943
- eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ \\\"exportToCanvas\\\": () => (/* binding */ exportToCanvas),\\n/* harmony export */ \\\"exportToBlob\\\": () => (/* binding */ exportToBlob),\\n/* harmony export */ \\\"exportToSvg\\\": () => (/* binding */ exportToSvg),\\n/* harmony export */ \\\"serializeAsJSON\\\": () => (/* reexport safe */ _data_json__WEBPACK_IMPORTED_MODULE_7__.serializeAsJSON),\\n/* harmony export */ \\\"loadFromBlob\\\": () => (/* reexport safe */ _data_blob__WEBPACK_IMPORTED_MODULE_8__.loadFromBlob),\\n/* harmony export */ \\\"loadLibraryFromBlob\\\": () => (/* reexport safe */ _data_blob__WEBPACK_IMPORTED_MODULE_8__.loadLibraryFromBlob),\\n/* harmony export */ \\\"getFreeDrawSvgPath\\\": () => (/* reexport safe */ _renderer_renderElement__WEBPACK_IMPORTED_MODULE_9__.getFreeDrawSvgPath),\\n/* harmony export */ \\\"getCommonBoundingBox\\\": () => (/* reexport safe */ _element_bounds__WEBPACK_IMPORTED_MODULE_10__.getCommonBoundingBox),\\n/* harmony export */ \\\"getMaximumGroups\\\": () => (/* reexport safe */ _groups__WEBPACK_IMPORTED_MODULE_11__.getMaximumGroups),\\n/* harmony export */ \\\"intersectElementWithLine\\\": () => (/* reexport safe */ _element_collision__WEBPACK_IMPORTED_MODULE_12__.intersectElementWithLine),\\n/* harmony export */ \\\"determineFocusDistance\\\": () => (/* reexport safe */ _element_collision__WEBPACK_IMPORTED_MODULE_12__.determineFocusDistance)\\n/* harmony export */ });\\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \\\"../../../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \\\"../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js\\\");\\n/* harmony import */ var _scene_export__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../scene/export */ \\\"../../scene/export.ts\\\");\\n/* harmony import */ var _appState__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../appState */ \\\"../../appState.ts\\\");\\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../element */ \\\"../../element/index.ts\\\");\\n/* harmony import */ var _data_restore__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../data/restore */ \\\"../../data/restore.ts\\\");\\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../constants */ \\\"../../constants.ts\\\");\\n/* harmony import */ var _data_json__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../data/json */ \\\"../../data/json.ts\\\");\\n/* harmony import */ var _data_blob__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../data/blob */ \\\"../../data/blob.ts\\\");\\n/* harmony import */ var _renderer_renderElement__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../renderer/renderElement */ \\\"../../renderer/renderElement.ts\\\");\\n/* harmony import */ var _element_bounds__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../element/bounds */ \\\"../../element/bounds.ts\\\");\\n/* harmony import */ var _groups__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../groups */ \\\"../../groups.ts\\\");\\n/* harmony import */ var _element_collision__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../element/collision */ \\\"../../element/collision.ts\\\");\\n\\r\\n\\r\\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) {\\r\\n var symbols = Object.getOwnPropertySymbols(object);\\r\\n enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols);\\r\\n} return keys; }\\r\\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) {\\r\\n var source = null != arguments[i] ? arguments[i] : {};\\r\\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0,_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); });\\r\\n} return target; }\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\nconst exportToCanvas = function (_ref) {\\r\\n let { elements, appState, files, maxWidthOrHeight, getDimensions } = _ref;\\r\\n const { elements: restoredElements, appState: restoredAppState } = (0,_data_restore__WEBPACK_IMPORTED_MODULE_5__.restore)({\\r\\n elements,\\r\\n appState\\r\\n }, null, null);\\r\\n const { exportBackground, viewBackgroundColor } = restoredAppState;\\r\\n return (0,_scene_export__WEBPACK_IMPORTED_MODULE_2__.exportToCanvas)((0,_element__WEBPACK_IMPORTED_MODULE_4__.getNonDeletedElements)(restoredElements), _objectSpread(_objectSpread({}, restoredAppState), {}, {\\r\\n offsetTop: 0,\\r\\n offsetLeft: 0,\\r\\n width: 0,\\r\\n height: 0\\r\\n }), files || {}, {\\r\\n exportBackground,\\r\\n viewBackgroundColor\\r\\n }, function (width, height) {\\r\\n var _a;\\r\\n const canvas = document.createElement(\\\"canvas\\\");\\r\\n if (maxWidthOrHeight) {\\r\\n if (typeof getDimensions === \\\"function\\\") {\\r\\n console.warn(\\\"`getDimensions()` is ignored when `maxWidthOrHeight` is supplied.\\\");\\r\\n }\\r\\n const max = Math.max(width, height);\\r\\n const scale = maxWidthOrHeight / max;\\r\\n canvas.width = width * scale;\\r\\n canvas.height = height * scale;\\r\\n return {\\r\\n canvas,\\r\\n scale\\r\\n };\\r\\n }\\r\\n const ret = (getDimensions === null || getDimensions === void 0 ? void 0 : getDimensions(width, height)) || {\\r\\n width,\\r\\n height\\r\\n };\\r\\n canvas.width = ret.width;\\r\\n canvas.height = ret.height;\\r\\n return {\\r\\n canvas,\\r\\n scale: (_a = ret.scale) !== null && _a !== void 0 ? _a : 1\\r\\n };\\r\\n });\\r\\n};\\r\\nconst exportToBlob = /*#__PURE__*/ function () {\\r\\n var _ref2 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(function* (opts) {\\r\\n var _a;\\r\\n let { mimeType = _constants__WEBPACK_IMPORTED_MODULE_6__.MIME_TYPES.png, quality } = opts;\\r\\n if (mimeType === _constants__WEBPACK_IMPORTED_MODULE_6__.MIME_TYPES.png && typeof quality === \\\"number\\\") {\\r\\n console.warn(`\\\"quality\\\" will be ignored for \\\"${_constants__WEBPACK_IMPORTED_MODULE_6__.MIME_TYPES.png}\\\" mimeType`);\\r\\n } // typo in MIME type (should be \\\"jpeg\\\")\\r\\n if (mimeType === \\\"image/jpg\\\") {\\r\\n mimeType = _constants__WEBPACK_IMPORTED_MODULE_6__.MIME_TYPES.jpg;\\r\\n }\\r\\n if (mimeType === _constants__WEBPACK_IMPORTED_MODULE_6__.MIME_TYPES.jpg && !((_a = opts.appState) === null || _a === void 0 ? void 0 : _a.exportBackground)) {\\r\\n console.warn(`Defaulting \\\"exportBackground\\\" to \\\"true\\\" for \\\"${_constants__WEBPACK_IMPORTED_MODULE_6__.MIME_TYPES.jpg}\\\" mimeType`);\\r\\n opts = _objectSpread(_objectSpread({}, opts), {}, {\\r\\n appState: _objectSpread(_objectSpread({}, opts.appState), {}, {\\r\\n exportBackground: true\\r\\n })\\r\\n });\\r\\n }\\r\\n const canvas = yield exportToCanvas(opts);\\r\\n quality = quality ? quality : /image\\\\/jpe?g/.test(mimeType) ? 0.92 : 0.8;\\r\\n return new Promise(function (resolve) {\\r\\n canvas.toBlob(function (blob) {\\r\\n resolve(blob);\\r\\n }, mimeType, quality);\\r\\n });\\r\\n });\\r\\n return function exportToBlob(_x) {\\r\\n return _ref2.apply(this, arguments);\\r\\n };\\r\\n}();\\r\\nconst exportToSvg = /*#__PURE__*/ function () {\\r\\n var _ref3 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(function* (_ref4) {\\r\\n let { elements, appState = (0,_appState__WEBPACK_IMPORTED_MODULE_3__.getDefaultAppState)(), files = {}, exportPadding } = _ref4;\\r\\n const { elements: restoredElements, appState: restoredAppState } = (0,_data_restore__WEBPACK_IMPORTED_MODULE_5__.restore)({\\r\\n elements,\\r\\n appState\\r\\n }, null, null);\\r\\n return (0,_scene_export__WEBPACK_IMPORTED_MODULE_2__.exportToSvg)((0,_element__WEBPACK_IMPORTED_MODULE_4__.getNonDeletedElements)(restoredElements), _objectSpread(_objectSpread({}, restoredAppState), {}, {\\r\\n exportPadding\\r\\n }), files);\\r\\n });\\r\\n return function exportToSvg(_x2) {\\r\\n return _ref3.apply(this, arguments);\\r\\n };\\r\\n}();\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vdXRpbHMudHMuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQXdFO0FBQ0o7QUFFcEUsU0FBUyxPQUFPLENBQUMsTUFBTSxFQUFFLGNBQWMsSUFBSSxJQUFJLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxNQUFNLENBQUMscUJBQXFCLEVBQUU7SUFBRSxJQUFJLE9BQU8sR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFBQyxjQUFjLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxPQUFPLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7Q0FBRSxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQztBQUVyVixTQUFTLGFBQWEsQ0FBQyxNQUFNLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7SUFBRSxJQUFJLE1BQU0sR0FBRyxJQUFJLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksaUZBQWUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMseUJBQXlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsTUFBTSxDQUFDLHdCQUF3QixDQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Q0FBRSxDQUFDLE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQztBQUV6WjtBQUNoRDtBQUNFO0FBQ1Q7QUFDQTtBQUNuQyxNQUFNLGNBQWMsR0FBRyxVQUFVLElBQUk7SUFDMUMsSUFBSSxFQUNGLFFBQVEsRUFDUixRQUFRLEVBQ1IsS0FBSyxFQUNMLGdCQUFnQixFQUNoQixhQUFhLEVBQ2QsR0FBRyxJQUFJLENBQUM7SUFDVCxNQUFNLEVBQ0osUUFBUSxFQUFFLGdCQUFnQixFQUMxQixRQUFRLEVBQUUsZ0JBQWdCLEVBQzNCLEdBQUcsc0RBQU8sQ0FBQztRQUNWLFFBQVE7UUFDUixRQUFRO0tBQ1QsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDZixNQUFNLEVBQ0osZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNwQixHQUFHLGdCQUFnQixDQUFDO0lBQ3JCLE9BQU8sNkRBQWUsQ0FBQywrREFBcUIsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxFQUFFO1FBQ3JILFNBQVMsRUFBRSxDQUFDO1FBQ1osVUFBVSxFQUFFLENBQUM7UUFDYixLQUFLLEVBQUUsQ0FBQztRQUNSLE1BQU0sRUFBRSxDQUFDO0tBQ1YsQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUU7UUFDZixnQkFBZ0I7UUFDaEIsbUJBQW1CO0tBQ3BCLEVBQUUsVUFBVSxLQUFLLEVBQUUsTUFBTTs7UUFDeEIsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVoRCxJQUFJLGdCQUFnQixFQUFFO1lBQ3BCLElBQUksT0FBTyxhQUFhLEtBQUssVUFBVSxFQUFFO2dCQUN2QyxPQUFPLENBQUMsSUFBSSxDQUFDLG1FQUFtRSxDQUFDLENBQUM7YUFDbkY7WUFFRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztZQUNwQyxNQUFNLEtBQUssR0FBRyxnQkFBZ0IsR0FBRyxHQUFHLENBQUM7WUFDckMsTUFBTSxDQUFDLEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxHQUFHLEtBQUssQ0FBQztZQUMvQixPQUFPO2dCQUNMLE1BQU07Z0JBQ04sS0FBSzthQUNOLENBQUM7U0FDSDtRQUVELE1BQU0sR0FBRyxHQUFHLGNBQWEsYUFBYixhQUFhLHVCQUFiLGFBQWEsQ0FBRyxLQUFLLEVBQUUsTUFBTSxDQUFDLEtBQUk7WUFDNUMsS0FBSztZQUNMLE1BQU07U0FDUCxDQUFDO1FBQ0YsTUFBTSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQztRQUMzQixPQUFPO1lBQ0wsTUFBTTtZQUNOLEtBQUssRUFBRSxTQUFHLENBQUMsS0FBSyxtQ0FBSSxDQUFDO1NBQ3RCLENBQUM7SUFDSixDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUNLLE1BQU0sWUFBWSxHQUFHLGFBQWE7SUFDdkMsSUFBSSxLQUFLLEdBQUcsbUZBQWlCLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSTs7UUFDM0MsSUFBSSxFQUNGLFFBQVEsR0FBRyxzREFBYyxFQUN6QixPQUFPLEVBQ1IsR0FBRyxJQUFJLENBQUM7UUFFVCxJQUFJLFFBQVEsS0FBSyxzREFBYyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsRUFBRTtZQUM5RCxPQUFPLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxzREFBYyxZQUFZLENBQUMsQ0FBQztTQUM1RSxDQUFDLHVDQUF1QztRQUd6QyxJQUFJLFFBQVEsS0FBSyxXQUFXLEVBQUU7WUFDNUIsUUFBUSxHQUFHLHNEQUFjLENBQUM7U0FDM0I7UUFFRCxJQUFJLFFBQVEsS0FBSyxzREFBYyxJQUFJLENBQUMsV0FBSSxDQUFDLFFBQVEsMENBQUUsZ0JBQWdCLEdBQUU7WUFDbkUsT0FBTyxDQUFDLElBQUksQ0FBQyxnREFBZ0Qsc0RBQWMsWUFBWSxDQUFDLENBQUM7WUFDekYsSUFBSSxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRTtnQkFDaEQsUUFBUSxFQUFFLGFBQWEsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUU7b0JBQzVELGdCQUFnQixFQUFFLElBQUk7aUJBQ3ZCLENBQUM7YUFDSCxDQUFDLENBQUM7U0FDSjtRQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzFDLE9BQU8sR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDekUsT0FBTyxJQUFJLE9BQU8sQ0FBQyxVQUFVLE9BQU87WUFDbEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLElBQUk7Z0JBQzFCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNoQixDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLFNBQVMsWUFBWSxDQUFDLEVBQUU7UUFDN0IsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN0QyxDQUFDLENBQUM7QUFDSixDQUFDLEVBQUUsQ0FBQztBQUNHLE1BQU0sV0FBVyxHQUFHLGFBQWE7SUFDdEMsSUFBSSxLQUFLLEdBQUcsbUZBQWlCLENBQUMsUUFBUSxDQUFDLEVBQUUsS0FBSztRQUM1QyxJQUFJLEVBQ0YsUUFBUSxFQUNSLFFBQVEsR0FBRyw2REFBa0IsRUFBRSxFQUMvQixLQUFLLEdBQUcsRUFBRSxFQUNWLGFBQWEsRUFDZCxHQUFHLEtBQUssQ0FBQztRQUNWLE1BQU0sRUFDSixRQUFRLEVBQUUsZ0JBQWdCLEVBQzFCLFFBQVEsRUFBRSxnQkFBZ0IsRUFDM0IsR0FBRyxzREFBTyxDQUFDO1lBQ1YsUUFBUTtZQUNSLFFBQVE7U0FDVCxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNmLE9BQU8sMERBQVksQ0FBQywrREFBcUIsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQ2xILGFBQWE7U0FDZCxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDYixDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sU0FBUyxXQUFXLENBQUMsR0FBRztRQUM3QixPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ3RDLENBQUMsQ0FBQztBQUNKLENBQUMsRUFBRSxDQUFDO0FBQzJDO0FBQ2tCO0FBQ0Y7QUFDTjtBQUNaO0FBQ21CO0FBQ0YiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi4vdXRpbHMudHM/YjFiOCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgX2FzeW5jVG9HZW5lcmF0b3IgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvclwiO1xuaW1wb3J0IF9kZWZpbmVQcm9wZXJ0eSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eVwiO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTsgaSAlIDIgPyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgeyBleHBvcnRUb0NhbnZhcyBhcyBfZXhwb3J0VG9DYW52YXMsIGV4cG9ydFRvU3ZnIGFzIF9leHBvcnRUb1N2ZyB9IGZyb20gXCIuLi9zY2VuZS9leHBvcnRcIjtcbmltcG9ydCB7IGdldERlZmF1bHRBcHBTdGF0ZSB9IGZyb20gXCIuLi9hcHBTdGF0ZVwiO1xuaW1wb3J0IHsgZ2V0Tm9uRGVsZXRlZEVsZW1lbnRzIH0gZnJvbSBcIi4uL2VsZW1lbnRcIjtcbmltcG9ydCB7IHJlc3RvcmUgfSBmcm9tIFwiLi4vZGF0YS9yZXN0b3JlXCI7XG5pbXBvcnQgeyBNSU1FX1RZUEVTIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuZXhwb3J0IGNvbnN0IGV4cG9ydFRvQ2FudmFzID0gZnVuY3Rpb24gKF9yZWYpIHtcbiAgbGV0IHtcbiAgICBlbGVtZW50cyxcbiAgICBhcHBTdGF0ZSxcbiAgICBmaWxlcyxcbiAgICBtYXhXaWR0aE9ySGVpZ2h0LFxuICAgIGdldERpbWVuc2lvbnNcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IHtcbiAgICBlbGVtZW50czogcmVzdG9yZWRFbGVtZW50cyxcbiAgICBhcHBTdGF0ZTogcmVzdG9yZWRBcHBTdGF0ZVxuICB9ID0gcmVzdG9yZSh7XG4gICAgZWxlbWVudHMsXG4gICAgYXBwU3RhdGVcbiAgfSwgbnVsbCwgbnVsbCk7XG4gIGNvbnN0IHtcbiAgICBleHBvcnRCYWNrZ3JvdW5kLFxuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3JcbiAgfSA9IHJlc3RvcmVkQXBwU3RhdGU7XG4gIHJldHVybiBfZXhwb3J0VG9DYW52YXMoZ2V0Tm9uRGVsZXRlZEVsZW1lbnRzKHJlc3RvcmVkRWxlbWVudHMpLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHJlc3RvcmVkQXBwU3RhdGUpLCB7fSwge1xuICAgIG9mZnNldFRvcDogMCxcbiAgICBvZmZzZXRMZWZ0OiAwLFxuICAgIHdpZHRoOiAwLFxuICAgIGhlaWdodDogMFxuICB9KSwgZmlsZXMgfHwge30sIHtcbiAgICBleHBvcnRCYWNrZ3JvdW5kLFxuICAgIHZpZXdCYWNrZ3JvdW5kQ29sb3JcbiAgfSwgZnVuY3Rpb24gKHdpZHRoLCBoZWlnaHQpIHtcbiAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuXG4gICAgaWYgKG1heFdpZHRoT3JIZWlnaHQpIHtcbiAgICAgIGlmICh0eXBlb2YgZ2V0RGltZW5zaW9ucyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcImBnZXREaW1lbnNpb25zKClgIGlzIGlnbm9yZWQgd2hlbiBgbWF4V2lkdGhPckhlaWdodGAgaXMgc3VwcGxpZWQuXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXggPSBNYXRoLm1heCh3aWR0aCwgaGVpZ2h0KTtcbiAgICAgIGNvbnN0IHNjYWxlID0gbWF4V2lkdGhPckhlaWdodCAvIG1heDtcbiAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoICogc2NhbGU7XG4gICAgICBjYW52YXMuaGVpZ2h0ID0gaGVpZ2h0ICogc2NhbGU7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjYW52YXMsXG4gICAgICAgIHNjYWxlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHJldCA9IGdldERpbWVuc2lvbnM/Lih3aWR0aCwgaGVpZ2h0KSB8fCB7XG4gICAgICB3aWR0aCxcbiAgICAgIGhlaWdodFxuICAgIH07XG4gICAgY2FudmFzLndpZHRoID0gcmV0LndpZHRoO1xuICAgIGNhbnZhcy5oZWlnaHQgPSByZXQuaGVpZ2h0O1xuICAgIHJldHVybiB7XG4gICAgICBjYW52YXMsXG4gICAgICBzY2FsZTogcmV0LnNjYWxlID8/IDFcbiAgICB9O1xuICB9KTtcbn07XG5leHBvcnQgY29uc3QgZXhwb3J0VG9CbG9iID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWYyID0gX2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qIChvcHRzKSB7XG4gICAgbGV0IHtcbiAgICAgIG1pbWVUeXBlID0gTUlNRV9UWVBFUy5wbmcsXG4gICAgICBxdWFsaXR5XG4gICAgfSA9IG9wdHM7XG5cbiAgICBpZiAobWltZVR5cGUgPT09IE1JTUVfVFlQRVMucG5nICYmIHR5cGVvZiBxdWFsaXR5ID09PSBcIm51bWJlclwiKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFwicXVhbGl0eVwiIHdpbGwgYmUgaWdub3JlZCBmb3IgXCIke01JTUVfVFlQRVMucG5nfVwiIG1pbWVUeXBlYCk7XG4gICAgfSAvLyB0eXBvIGluIE1JTUUgdHlwZSAoc2hvdWxkIGJlIFwianBlZ1wiKVxuXG5cbiAgICBpZiAobWltZVR5cGUgPT09IFwiaW1hZ2UvanBnXCIpIHtcbiAgICAgIG1pbWVUeXBlID0gTUlNRV9UWVBFUy5qcGc7XG4gICAgfVxuXG4gICAgaWYgKG1pbWVUeXBlID09PSBNSU1FX1RZUEVTLmpwZyAmJiAhb3B0cy5hcHBTdGF0ZT8uZXhwb3J0QmFja2dyb3VuZCkge1xuICAgICAgY29uc29sZS53YXJuKGBEZWZhdWx0aW5nIFwiZXhwb3J0QmFja2dyb3VuZFwiIHRvIFwidHJ1ZVwiIGZvciBcIiR7TUlNRV9UWVBFUy5qcGd9XCIgbWltZVR5cGVgKTtcbiAgICAgIG9wdHMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIG9wdHMpLCB7fSwge1xuICAgICAgICBhcHBTdGF0ZTogX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBvcHRzLmFwcFN0YXRlKSwge30sIHtcbiAgICAgICAgICBleHBvcnRCYWNrZ3JvdW5kOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBjYW52YXMgPSB5aWVsZCBleHBvcnRUb0NhbnZhcyhvcHRzKTtcbiAgICBxdWFsaXR5ID0gcXVhbGl0eSA/IHF1YWxpdHkgOiAvaW1hZ2VcXC9qcGU/Zy8udGVzdChtaW1lVHlwZSkgPyAwLjkyIDogMC44O1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgY2FudmFzLnRvQmxvYihmdW5jdGlvbiAoYmxvYikge1xuICAgICAgICByZXNvbHZlKGJsb2IpO1xuICAgICAgfSwgbWltZVR5cGUsIHF1YWxpdHkpO1xuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gZnVuY3Rpb24gZXhwb3J0VG9CbG9iKF94KSB7XG4gICAgcmV0dXJuIF9yZWYyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59KCk7XG5leHBvcnQgY29uc3QgZXhwb3J0VG9TdmcgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICB2YXIgX3JlZjMgPSBfYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiogKF9yZWY0KSB7XG4gICAgbGV0IHtcbiAgICAgIGVsZW1lbnRzLFxuICAgICAgYXBwU3RhdGUgPSBnZXREZWZhdWx0QXBwU3RhdGUoKSxcbiAgICAgIGZpbGVzID0ge30sXG4gICAgICBleHBvcnRQYWRkaW5nXG4gICAgfSA9IF9yZWY0O1xuICAgIGNvbnN0IHtcbiAgICAgIGVsZW1lbnRzOiByZXN0b3JlZEVsZW1lbnRzLFxuICAgICAgYXBwU3RhdGU6IHJlc3RvcmVkQXBwU3RhdGVcbiAgICB9ID0gcmVzdG9yZSh7XG4gICAgICBlbGVtZW50cyxcbiAgICAgIGFwcFN0YXRlXG4gICAgfSwgbnVsbCwgbnVsbCk7XG4gICAgcmV0dXJuIF9leHBvcnRUb1N2ZyhnZXROb25EZWxldGVkRWxlbWVudHMocmVzdG9yZWRFbGVtZW50cyksIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcmVzdG9yZWRBcHBTdGF0ZSksIHt9LCB7XG4gICAgICBleHBvcnRQYWRkaW5nXG4gICAgfSksIGZpbGVzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGV4cG9ydFRvU3ZnKF94Mikge1xuICAgIHJldHVybiBfcmVmMy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuZXhwb3J0IHsgc2VyaWFsaXplQXNKU09OIH0gZnJvbSBcIi4uL2RhdGEvanNvblwiO1xuZXhwb3J0IHsgbG9hZEZyb21CbG9iLCBsb2FkTGlicmFyeUZyb21CbG9iIH0gZnJvbSBcIi4uL2RhdGEvYmxvYlwiO1xuZXhwb3J0IHsgZ2V0RnJlZURyYXdTdmdQYXRoIH0gZnJvbSBcIi4uL3JlbmRlcmVyL3JlbmRlckVsZW1lbnRcIjtcbmV4cG9ydCB7IGdldENvbW1vbkJvdW5kaW5nQm94IH0gZnJvbSBcIi4uL2VsZW1lbnQvYm91bmRzXCI7XG5leHBvcnQgeyBnZXRNYXhpbXVtR3JvdXBzIH0gZnJvbSBcIi4uL2dyb3Vwc1wiO1xuZXhwb3J0IHsgaW50ZXJzZWN0RWxlbWVudFdpdGhMaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnQvY29sbGlzaW9uXCI7XG5leHBvcnQgeyBkZXRlcm1pbmVGb2N1c0Rpc3RhbmNlIH0gZnJvbSBcIi4uL2VsZW1lbnQvY29sbGlzaW9uXCI7Il0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///../utils.ts\\n\");\n\n//# sourceURL=webpack://Excalidraw/../utils.ts?");
2943
+ eval("eval(\"__webpack_require__.r(__webpack_exports__);\\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\\n/* harmony export */ \\\"exportToCanvas\\\": () => (/* binding */ exportToCanvas),\\n/* harmony export */ \\\"exportToBlob\\\": () => (/* binding */ exportToBlob),\\n/* harmony export */ \\\"exportToSvg\\\": () => (/* binding */ exportToSvg),\\n/* harmony export */ \\\"serializeAsJSON\\\": () => (/* reexport safe */ _data_json__WEBPACK_IMPORTED_MODULE_7__.serializeAsJSON),\\n/* harmony export */ \\\"loadFromBlob\\\": () => (/* reexport safe */ _data_blob__WEBPACK_IMPORTED_MODULE_8__.loadFromBlob),\\n/* harmony export */ \\\"loadLibraryFromBlob\\\": () => (/* reexport safe */ _data_blob__WEBPACK_IMPORTED_MODULE_8__.loadLibraryFromBlob),\\n/* harmony export */ \\\"getFreeDrawSvgPath\\\": () => (/* reexport safe */ _renderer_renderElement__WEBPACK_IMPORTED_MODULE_9__.getFreeDrawSvgPath),\\n/* harmony export */ \\\"getCommonBoundingBox\\\": () => (/* reexport safe */ _element_bounds__WEBPACK_IMPORTED_MODULE_10__.getCommonBoundingBox),\\n/* harmony export */ \\\"getMaximumGroups\\\": () => (/* reexport safe */ _groups__WEBPACK_IMPORTED_MODULE_11__.getMaximumGroups),\\n/* harmony export */ \\\"intersectElementWithLine\\\": () => (/* reexport safe */ _element_collision__WEBPACK_IMPORTED_MODULE_12__.intersectElementWithLine),\\n/* harmony export */ \\\"determineFocusDistance\\\": () => (/* reexport safe */ _element_collision__WEBPACK_IMPORTED_MODULE_12__.determineFocusDistance),\\n/* harmony export */ \\\"measureText\\\": () => (/* reexport safe */ _element_textElement__WEBPACK_IMPORTED_MODULE_13__.measureText)\\n/* harmony export */ });\\n/* harmony import */ var _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ \\\"../../../node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js\\\");\\n/* harmony import */ var _babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @babel/runtime/helpers/defineProperty */ \\\"../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js\\\");\\n/* harmony import */ var _scene_export__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../scene/export */ \\\"../../scene/export.ts\\\");\\n/* harmony import */ var _appState__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../appState */ \\\"../../appState.ts\\\");\\n/* harmony import */ var _element__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../element */ \\\"../../element/index.ts\\\");\\n/* harmony import */ var _data_restore__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../data/restore */ \\\"../../data/restore.ts\\\");\\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../constants */ \\\"../../constants.ts\\\");\\n/* harmony import */ var _data_json__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../data/json */ \\\"../../data/json.ts\\\");\\n/* harmony import */ var _data_blob__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../data/blob */ \\\"../../data/blob.ts\\\");\\n/* harmony import */ var _renderer_renderElement__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../renderer/renderElement */ \\\"../../renderer/renderElement.ts\\\");\\n/* harmony import */ var _element_bounds__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../element/bounds */ \\\"../../element/bounds.ts\\\");\\n/* harmony import */ var _groups__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../groups */ \\\"../../groups.ts\\\");\\n/* harmony import */ var _element_collision__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../element/collision */ \\\"../../element/collision.ts\\\");\\n/* harmony import */ var _element_textElement__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../element/textElement */ \\\"../../element/textElement.ts\\\");\\n\\r\\n\\r\\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) {\\r\\n var symbols = Object.getOwnPropertySymbols(object);\\r\\n enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols);\\r\\n} return keys; }\\r\\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) {\\r\\n var source = null != arguments[i] ? arguments[i] : {};\\r\\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0,_babel_runtime_helpers_defineProperty__WEBPACK_IMPORTED_MODULE_1__[\\\"default\\\"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); });\\r\\n} return target; }\\r\\n\\r\\n\\r\\n\\r\\n\\r\\n\\r\\nconst exportToCanvas = function (_ref) {\\r\\n let { elements, appState, files, maxWidthOrHeight, getDimensions } = _ref;\\r\\n const { elements: restoredElements, appState: restoredAppState } = (0,_data_restore__WEBPACK_IMPORTED_MODULE_5__.restore)({\\r\\n elements,\\r\\n appState\\r\\n }, null, null);\\r\\n const { exportBackground, viewBackgroundColor } = restoredAppState;\\r\\n return (0,_scene_export__WEBPACK_IMPORTED_MODULE_2__.exportToCanvas)((0,_element__WEBPACK_IMPORTED_MODULE_4__.getNonDeletedElements)(restoredElements), _objectSpread(_objectSpread({}, restoredAppState), {}, {\\r\\n offsetTop: 0,\\r\\n offsetLeft: 0,\\r\\n width: 0,\\r\\n height: 0\\r\\n }), files || {}, {\\r\\n exportBackground,\\r\\n viewBackgroundColor\\r\\n }, function (width, height) {\\r\\n var _a;\\r\\n const canvas = document.createElement(\\\"canvas\\\");\\r\\n if (maxWidthOrHeight) {\\r\\n if (typeof getDimensions === \\\"function\\\") {\\r\\n console.warn(\\\"`getDimensions()` is ignored when `maxWidthOrHeight` is supplied.\\\");\\r\\n }\\r\\n const max = Math.max(width, height);\\r\\n const scale = maxWidthOrHeight / max;\\r\\n canvas.width = width * scale;\\r\\n canvas.height = height * scale;\\r\\n return {\\r\\n canvas,\\r\\n scale\\r\\n };\\r\\n }\\r\\n const ret = (getDimensions === null || getDimensions === void 0 ? void 0 : getDimensions(width, height)) || {\\r\\n width,\\r\\n height\\r\\n };\\r\\n canvas.width = ret.width;\\r\\n canvas.height = ret.height;\\r\\n return {\\r\\n canvas,\\r\\n scale: (_a = ret.scale) !== null && _a !== void 0 ? _a : 1\\r\\n };\\r\\n });\\r\\n};\\r\\nconst exportToBlob = /*#__PURE__*/ function () {\\r\\n var _ref2 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(function* (opts) {\\r\\n var _a;\\r\\n let { mimeType = _constants__WEBPACK_IMPORTED_MODULE_6__.MIME_TYPES.png, quality } = opts;\\r\\n if (mimeType === _constants__WEBPACK_IMPORTED_MODULE_6__.MIME_TYPES.png && typeof quality === \\\"number\\\") {\\r\\n console.warn(`\\\"quality\\\" will be ignored for \\\"${_constants__WEBPACK_IMPORTED_MODULE_6__.MIME_TYPES.png}\\\" mimeType`);\\r\\n } // typo in MIME type (should be \\\"jpeg\\\")\\r\\n if (mimeType === \\\"image/jpg\\\") {\\r\\n mimeType = _constants__WEBPACK_IMPORTED_MODULE_6__.MIME_TYPES.jpg;\\r\\n }\\r\\n if (mimeType === _constants__WEBPACK_IMPORTED_MODULE_6__.MIME_TYPES.jpg && !((_a = opts.appState) === null || _a === void 0 ? void 0 : _a.exportBackground)) {\\r\\n console.warn(`Defaulting \\\"exportBackground\\\" to \\\"true\\\" for \\\"${_constants__WEBPACK_IMPORTED_MODULE_6__.MIME_TYPES.jpg}\\\" mimeType`);\\r\\n opts = _objectSpread(_objectSpread({}, opts), {}, {\\r\\n appState: _objectSpread(_objectSpread({}, opts.appState), {}, {\\r\\n exportBackground: true\\r\\n })\\r\\n });\\r\\n }\\r\\n const canvas = yield exportToCanvas(opts);\\r\\n quality = quality ? quality : /image\\\\/jpe?g/.test(mimeType) ? 0.92 : 0.8;\\r\\n return new Promise(function (resolve) {\\r\\n canvas.toBlob(function (blob) {\\r\\n resolve(blob);\\r\\n }, mimeType, quality);\\r\\n });\\r\\n });\\r\\n return function exportToBlob(_x) {\\r\\n return _ref2.apply(this, arguments);\\r\\n };\\r\\n}();\\r\\nconst exportToSvg = /*#__PURE__*/ function () {\\r\\n var _ref3 = (0,_babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_0__[\\\"default\\\"])(function* (_ref4) {\\r\\n let { elements, appState = (0,_appState__WEBPACK_IMPORTED_MODULE_3__.getDefaultAppState)(), files = {}, exportPadding } = _ref4;\\r\\n const { elements: restoredElements, appState: restoredAppState } = (0,_data_restore__WEBPACK_IMPORTED_MODULE_5__.restore)({\\r\\n elements,\\r\\n appState\\r\\n }, null, null);\\r\\n return (0,_scene_export__WEBPACK_IMPORTED_MODULE_2__.exportToSvg)((0,_element__WEBPACK_IMPORTED_MODULE_4__.getNonDeletedElements)(restoredElements), _objectSpread(_objectSpread({}, restoredAppState), {}, {\\r\\n exportPadding\\r\\n }), files);\\r\\n });\\r\\n return function exportToSvg(_x2) {\\r\\n return _ref3.apply(this, arguments);\\r\\n };\\r\\n}();\\r\\n\\r\\n\\r\\n\\r\\n //zsviczian\\r\\n //zsviczian\\r\\n //zsviczian\\r\\n //zsviczian\\r\\n //zsviczian\\r\\n//# sourceURL=[module]\\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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OlsiaW1wb3J0IF9hc3luY1RvR2VuZXJhdG9yIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2FzeW5jVG9HZW5lcmF0b3JcIjtcbmltcG9ydCBfZGVmaW5lUHJvcGVydHkgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZGVmaW5lUHJvcGVydHlcIjtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGVudW1lcmFibGVPbmx5ICYmIChzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSkpLCBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307IGkgJSAyID8gb3duS2V5cyhPYmplY3Qoc291cmNlKSwgITApLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSkgOiBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IHsgZXhwb3J0VG9DYW52YXMgYXMgX2V4cG9ydFRvQ2FudmFzLCBleHBvcnRUb1N2ZyBhcyBfZXhwb3J0VG9TdmcgfSBmcm9tIFwiLi4vc2NlbmUvZXhwb3J0XCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0QXBwU3RhdGUgfSBmcm9tIFwiLi4vYXBwU3RhdGVcIjtcbmltcG9ydCB7IGdldE5vbkRlbGV0ZWRFbGVtZW50cyB9IGZyb20gXCIuLi9lbGVtZW50XCI7XG5pbXBvcnQgeyByZXN0b3JlIH0gZnJvbSBcIi4uL2RhdGEvcmVzdG9yZVwiO1xuaW1wb3J0IHsgTUlNRV9UWVBFUyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmV4cG9ydCBjb25zdCBleHBvcnRUb0NhbnZhcyA9IGZ1bmN0aW9uIChfcmVmKSB7XG4gIGxldCB7XG4gICAgZWxlbWVudHMsXG4gICAgYXBwU3RhdGUsXG4gICAgZmlsZXMsXG4gICAgbWF4V2lkdGhPckhlaWdodCxcbiAgICBnZXREaW1lbnNpb25zXG4gIH0gPSBfcmVmO1xuICBjb25zdCB7XG4gICAgZWxlbWVudHM6IHJlc3RvcmVkRWxlbWVudHMsXG4gICAgYXBwU3RhdGU6IHJlc3RvcmVkQXBwU3RhdGVcbiAgfSA9IHJlc3RvcmUoe1xuICAgIGVsZW1lbnRzLFxuICAgIGFwcFN0YXRlXG4gIH0sIG51bGwsIG51bGwpO1xuICBjb25zdCB7XG4gICAgZXhwb3J0QmFja2dyb3VuZCxcbiAgICB2aWV3QmFja2dyb3VuZENvbG9yXG4gIH0gPSByZXN0b3JlZEFwcFN0YXRlO1xuICByZXR1cm4gX2V4cG9ydFRvQ2FudmFzKGdldE5vbkRlbGV0ZWRFbGVtZW50cyhyZXN0b3JlZEVsZW1lbnRzKSwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCByZXN0b3JlZEFwcFN0YXRlKSwge30sIHtcbiAgICBvZmZzZXRUb3A6IDAsXG4gICAgb2Zmc2V0TGVmdDogMCxcbiAgICB3aWR0aDogMCxcbiAgICBoZWlnaHQ6IDBcbiAgfSksIGZpbGVzIHx8IHt9LCB7XG4gICAgZXhwb3J0QmFja2dyb3VuZCxcbiAgICB2aWV3QmFja2dyb3VuZENvbG9yXG4gIH0sIGZ1bmN0aW9uICh3aWR0aCwgaGVpZ2h0KSB7XG4gICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImNhbnZhc1wiKTtcblxuICAgIGlmIChtYXhXaWR0aE9ySGVpZ2h0KSB7XG4gICAgICBpZiAodHlwZW9mIGdldERpbWVuc2lvbnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJgZ2V0RGltZW5zaW9ucygpYCBpcyBpZ25vcmVkIHdoZW4gYG1heFdpZHRoT3JIZWlnaHRgIGlzIHN1cHBsaWVkLlwiKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbWF4ID0gTWF0aC5tYXgod2lkdGgsIGhlaWdodCk7XG4gICAgICBjb25zdCBzY2FsZSA9IG1heFdpZHRoT3JIZWlnaHQgLyBtYXg7XG4gICAgICBjYW52YXMud2lkdGggPSB3aWR0aCAqIHNjYWxlO1xuICAgICAgY2FudmFzLmhlaWdodCA9IGhlaWdodCAqIHNjYWxlO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY2FudmFzLFxuICAgICAgICBzY2FsZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCByZXQgPSBnZXREaW1lbnNpb25zPy4od2lkdGgsIGhlaWdodCkgfHwge1xuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHRcbiAgICB9O1xuICAgIGNhbnZhcy53aWR0aCA9IHJldC53aWR0aDtcbiAgICBjYW52YXMuaGVpZ2h0ID0gcmV0LmhlaWdodDtcbiAgICByZXR1cm4ge1xuICAgICAgY2FudmFzLFxuICAgICAgc2NhbGU6IHJldC5zY2FsZSA/PyAxXG4gICAgfTtcbiAgfSk7XG59O1xuZXhwb3J0IGNvbnN0IGV4cG9ydFRvQmxvYiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7XG4gIHZhciBfcmVmMiA9IF9hc3luY1RvR2VuZXJhdG9yKGZ1bmN0aW9uKiAob3B0cykge1xuICAgIGxldCB7XG4gICAgICBtaW1lVHlwZSA9IE1JTUVfVFlQRVMucG5nLFxuICAgICAgcXVhbGl0eVxuICAgIH0gPSBvcHRzO1xuXG4gICAgaWYgKG1pbWVUeXBlID09PSBNSU1FX1RZUEVTLnBuZyAmJiB0eXBlb2YgcXVhbGl0eSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgY29uc29sZS53YXJuKGBcInF1YWxpdHlcIiB3aWxsIGJlIGlnbm9yZWQgZm9yIFwiJHtNSU1FX1RZUEVTLnBuZ31cIiBtaW1lVHlwZWApO1xuICAgIH0gLy8gdHlwbyBpbiBNSU1FIHR5cGUgKHNob3VsZCBiZSBcImpwZWdcIilcblxuXG4gICAgaWYgKG1pbWVUeXBlID09PSBcImltYWdlL2pwZ1wiKSB7XG4gICAgICBtaW1lVHlwZSA9IE1JTUVfVFlQRVMuanBnO1xuICAgIH1cblxuICAgIGlmIChtaW1lVHlwZSA9PT0gTUlNRV9UWVBFUy5qcGcgJiYgIW9wdHMuYXBwU3RhdGU/LmV4cG9ydEJhY2tncm91bmQpIHtcbiAgICAgIGNvbnNvbGUud2FybihgRGVmYXVsdGluZyBcImV4cG9ydEJhY2tncm91bmRcIiB0byBcInRydWVcIiBmb3IgXCIke01JTUVfVFlQRVMuanBnfVwiIG1pbWVUeXBlYCk7XG4gICAgICBvcHRzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBvcHRzKSwge30sIHtcbiAgICAgICAgYXBwU3RhdGU6IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgb3B0cy5hcHBTdGF0ZSksIHt9LCB7XG4gICAgICAgICAgZXhwb3J0QmFja2dyb3VuZDogdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgY2FudmFzID0geWllbGQgZXhwb3J0VG9DYW52YXMob3B0cyk7XG4gICAgcXVhbGl0eSA9IHF1YWxpdHkgPyBxdWFsaXR5IDogL2ltYWdlXFwvanBlP2cvLnRlc3QobWltZVR5cGUpID8gMC45MiA6IDAuODtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgIGNhbnZhcy50b0Jsb2IoZnVuY3Rpb24gKGJsb2IpIHtcbiAgICAgICAgcmVzb2x2ZShibG9iKTtcbiAgICAgIH0sIG1pbWVUeXBlLCBxdWFsaXR5KTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGV4cG9ydFRvQmxvYihfeCkge1xuICAgIHJldHVybiBfcmVmMi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufSgpO1xuZXhwb3J0IGNvbnN0IGV4cG9ydFRvU3ZnID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgdmFyIF9yZWYzID0gX2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qIChfcmVmNCkge1xuICAgIGxldCB7XG4gICAgICBlbGVtZW50cyxcbiAgICAgIGFwcFN0YXRlID0gZ2V0RGVmYXVsdEFwcFN0YXRlKCksXG4gICAgICBmaWxlcyA9IHt9LFxuICAgICAgZXhwb3J0UGFkZGluZ1xuICAgIH0gPSBfcmVmNDtcbiAgICBjb25zdCB7XG4gICAgICBlbGVtZW50czogcmVzdG9yZWRFbGVtZW50cyxcbiAgICAgIGFwcFN0YXRlOiByZXN0b3JlZEFwcFN0YXRlXG4gICAgfSA9IHJlc3RvcmUoe1xuICAgICAgZWxlbWVudHMsXG4gICAgICBhcHBTdGF0ZVxuICAgIH0sIG51bGwsIG51bGwpO1xuICAgIHJldHVybiBfZXhwb3J0VG9TdmcoZ2V0Tm9uRGVsZXRlZEVsZW1lbnRzKHJlc3RvcmVkRWxlbWVudHMpLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHJlc3RvcmVkQXBwU3RhdGUpLCB7fSwge1xuICAgICAgZXhwb3J0UGFkZGluZ1xuICAgIH0pLCBmaWxlcyk7XG4gIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbiBleHBvcnRUb1N2ZyhfeDIpIHtcbiAgICByZXR1cm4gX3JlZjMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn0oKTtcbmV4cG9ydCB7IHNlcmlhbGl6ZUFzSlNPTiB9IGZyb20gXCIuLi9kYXRhL2pzb25cIjtcbmV4cG9ydCB7IGxvYWRGcm9tQmxvYiwgbG9hZExpYnJhcnlGcm9tQmxvYiB9IGZyb20gXCIuLi9kYXRhL2Jsb2JcIjtcbmV4cG9ydCB7IGdldEZyZWVEcmF3U3ZnUGF0aCB9IGZyb20gXCIuLi9yZW5kZXJlci9yZW5kZXJFbGVtZW50XCI7XG5leHBvcnQgeyBnZXRDb21tb25Cb3VuZGluZ0JveCB9IGZyb20gXCIuLi9lbGVtZW50L2JvdW5kc1wiOyAvL3pzdmljemlhblxuXG5leHBvcnQgeyBnZXRNYXhpbXVtR3JvdXBzIH0gZnJvbSBcIi4uL2dyb3Vwc1wiOyAvL3pzdmljemlhblxuXG5leHBvcnQgeyBpbnRlcnNlY3RFbGVtZW50V2l0aExpbmUgfSBmcm9tIFwiLi4vZWxlbWVudC9jb2xsaXNpb25cIjsgLy96c3ZpY3ppYW5cblxuZXhwb3J0IHsgZGV0ZXJtaW5lRm9jdXNEaXN0YW5jZSB9IGZyb20gXCIuLi9lbGVtZW50L2NvbGxpc2lvblwiOyAvL3pzdmljemlhblxuXG5leHBvcnQgeyBtZWFzdXJlVGV4dCB9IGZyb20gXCIuLi9lbGVtZW50L3RleHRFbGVtZW50XCI7IC8venN2aWN6aWFuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\\n//# sourceURL=webpack-internal:///../utils.ts\\n\");\n\n//# sourceURL=webpack://Excalidraw/../utils.ts?");
2944
2944
 
2945
2945
  /***/ }),
2946
2946
 
@@ -3842,7 +3842,7 @@ eval("module.exports = JSON.parse('{\"labels\":{\"paste\":\"貼上\",\"pasteChar
3842
3842
  /***/ ((module) => {
3843
3843
 
3844
3844
  "use strict";
3845
- eval("module.exports = JSON.parse('{\"name\":\"@zsviczian/excalidraw\",\"version\":\"0.11.0-obsidian-5\",\"main\":\"main.js\",\"types\":\"types/packages/excalidraw/index.d.ts\",\"files\":[\"dist/*\",\"types/*\"],\"publishConfig\":{\"access\":\"public\"},\"description\":\"Excalidraw as a React component\",\"repository\":\"https://github.com/excalidraw/excalidraw\",\"license\":\"MIT\",\"keywords\":[\"excalidraw\",\"excalidraw-embed\",\"react\",\"npm\",\"npm excalidraw\"],\"browserslist\":{\"production\":[\">0.2%\",\"not dead\",\"not ie <= 11\",\"not op_mini all\",\"not safari < 12\",\"not kaios <= 2.5\",\"not edge < 79\",\"not chrome < 70\",\"not and_uc < 13\",\"not samsung < 10\"],\"development\":[\"last 1 chrome version\",\"last 1 firefox version\",\"last 1 safari version\"]},\"peerDependencies\":{\"react\":\"^17.0.2\",\"react-dom\":\"^17.0.2\"},\"devDependencies\":{\"@babel/core\":\"7.17.0\",\"@babel/plugin-transform-arrow-functions\":\"7.16.7\",\"@babel/plugin-transform-async-to-generator\":\"7.16.0\",\"@babel/plugin-transform-runtime\":\"7.16.8\",\"@babel/plugin-transform-typescript\":\"7.16.1\",\"@babel/preset-env\":\"7.16.7\",\"@babel/preset-react\":\"7.16.7\",\"@babel/preset-typescript\":\"7.16.7\",\"autoprefixer\":\"10.4.2\",\"babel-loader\":\"8.2.3\",\"babel-plugin-transform-class-properties\":\"6.24.1\",\"cross-env\":\"7.0.3\",\"css-loader\":\"6.6.0\",\"mini-css-extract-plugin\":\"2.4.6\",\"postcss-loader\":\"6.2.1\",\"sass-loader\":\"12.4.0\",\"terser-webpack-plugin\":\"5.3.1\",\"ts-loader\":\"9.2.6\",\"typescript\":\"4.5.4\",\"webpack\":\"5.65.0\",\"webpack-bundle-analyzer\":\"4.5.0\",\"webpack-cli\":\"4.9.2\",\"webpack-dev-server\":\"4.7.4\",\"webpack-merge\":\"5.8.0\"},\"bugs\":\"https://github.com/excalidraw/excalidraw/issues\",\"homepage\":\"https://github.com/excalidraw/excalidraw/tree/master/src/packages/excalidraw\",\"scripts\":{\"gen:types\":\"tsc --project ../../../tsconfig-types.json\",\"build:umd\":\"cross-env NODE_ENV=production webpack --config webpack.prod.config.js && cross-env NODE_ENV=development webpack --config webpack.dev.config.js && yarn gen:types\",\"build:umd:withAnalyzer\":\"cross-env NODE_ENV=production ANALYZER=true webpack --config webpack.prod.config.js\",\"pack\":\"yarn build:umd && yarn pack\",\"start\":\"webpack serve --config webpack.dev-server.config.js\",\"install:deps\":\"yarn install --frozen-lockfile && yarn --cwd ../../../\",\"build:example\":\"EXAMPLE=true webpack --config webpack.dev-server.config.js\"},\"dependencies\":{\"dotenv\":\"10.0.0\"}}');\n\n//# sourceURL=webpack://Excalidraw/./package.json?");
3845
+ eval("module.exports = JSON.parse('{\"name\":\"@zsviczian/excalidraw\",\"version\":\"0.11.0-obsidian-6\",\"main\":\"main.js\",\"types\":\"types/packages/excalidraw/index.d.ts\",\"files\":[\"dist/*\",\"types/*\"],\"publishConfig\":{\"access\":\"public\"},\"description\":\"Excalidraw as a React component\",\"repository\":\"https://github.com/excalidraw/excalidraw\",\"license\":\"MIT\",\"keywords\":[\"excalidraw\",\"excalidraw-embed\",\"react\",\"npm\",\"npm excalidraw\"],\"browserslist\":{\"production\":[\">0.2%\",\"not dead\",\"not ie <= 11\",\"not op_mini all\",\"not safari < 12\",\"not kaios <= 2.5\",\"not edge < 79\",\"not chrome < 70\",\"not and_uc < 13\",\"not samsung < 10\"],\"development\":[\"last 1 chrome version\",\"last 1 firefox version\",\"last 1 safari version\"]},\"peerDependencies\":{\"react\":\"^17.0.2\",\"react-dom\":\"^17.0.2\"},\"devDependencies\":{\"@babel/core\":\"7.17.0\",\"@babel/plugin-transform-arrow-functions\":\"7.16.7\",\"@babel/plugin-transform-async-to-generator\":\"7.16.0\",\"@babel/plugin-transform-runtime\":\"7.16.8\",\"@babel/plugin-transform-typescript\":\"7.16.1\",\"@babel/preset-env\":\"7.16.7\",\"@babel/preset-react\":\"7.16.7\",\"@babel/preset-typescript\":\"7.16.7\",\"autoprefixer\":\"10.4.2\",\"babel-loader\":\"8.2.3\",\"babel-plugin-transform-class-properties\":\"6.24.1\",\"cross-env\":\"7.0.3\",\"css-loader\":\"6.6.0\",\"mini-css-extract-plugin\":\"2.4.6\",\"postcss-loader\":\"6.2.1\",\"sass-loader\":\"12.4.0\",\"terser-webpack-plugin\":\"5.3.1\",\"ts-loader\":\"9.2.6\",\"typescript\":\"4.5.4\",\"webpack\":\"5.65.0\",\"webpack-bundle-analyzer\":\"4.5.0\",\"webpack-cli\":\"4.9.2\",\"webpack-dev-server\":\"4.7.4\",\"webpack-merge\":\"5.8.0\"},\"bugs\":\"https://github.com/excalidraw/excalidraw/issues\",\"homepage\":\"https://github.com/excalidraw/excalidraw/tree/master/src/packages/excalidraw\",\"scripts\":{\"gen:types\":\"tsc --project ../../../tsconfig-types.json\",\"build:umd\":\"cross-env NODE_ENV=production webpack --config webpack.prod.config.js && cross-env NODE_ENV=development webpack --config webpack.dev.config.js && yarn gen:types\",\"build:umd:withAnalyzer\":\"cross-env NODE_ENV=production ANALYZER=true webpack --config webpack.prod.config.js\",\"pack\":\"yarn build:umd && yarn pack\",\"start\":\"webpack serve --config webpack.dev-server.config.js\",\"install:deps\":\"yarn install --frozen-lockfile && yarn --cwd ../../../\",\"build:example\":\"EXAMPLE=true webpack --config webpack.dev-server.config.js\"},\"dependencies\":{\"dotenv\":\"10.0.0\"}}');\n\n//# sourceURL=webpack://Excalidraw/./package.json?");
3846
3846
 
3847
3847
  /***/ })
3848
3848