@zsviczian/excalidraw 0.10.0-obsidian-image-support-1 → 0.10.0-obsidian-2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/excalidraw-assets-dev/Cascadia.woff2 +0 -0
- package/dist/excalidraw-assets-dev/Virgil.woff2 +0 -0
- package/dist/excalidraw-assets-dev/image-9f771c114a0a3ad7b334.js +42 -0
- package/dist/excalidraw.development.js +195 -257
- package/dist/excalidraw.production.min.js +1 -1
- package/package.json +1 -1
- package/types/element/types.d.ts +1 -1
- package/types/packages/excalidraw/webpack.dev.config.d.ts +8 -15
- package/types/types.d.ts +1 -1
- package/dist/excalidraw-assets-dev/image-efc3f48a38c11dac2152.js +0 -42
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/*
|
|
3
|
+
* ATTENTION: An "eval-source-map" devtool has been used.
|
|
4
|
+
* This devtool is neither made for production nor for readable output files.
|
|
5
|
+
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
|
|
6
|
+
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
|
7
|
+
* or disable the default devtool with "devtool: false".
|
|
8
|
+
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
|
9
|
+
*/
|
|
10
|
+
(globalThis["webpackChunkExcalidraw"] = globalThis["webpackChunkExcalidraw"] || []).push([["image"],{
|
|
11
|
+
|
|
12
|
+
/***/ "../../data/encode.ts":
|
|
13
|
+
/*!****************************!*\
|
|
14
|
+
!*** ../../data/encode.ts ***!
|
|
15
|
+
\****************************/
|
|
16
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
17
|
+
|
|
18
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"toByteString\": () => (/* binding */ toByteString),\n/* harmony export */ \"stringToBase64\": () => (/* binding */ stringToBase64),\n/* harmony export */ \"base64ToString\": () => (/* binding */ base64ToString),\n/* harmony export */ \"encode\": () => (/* binding */ encode),\n/* harmony export */ \"decode\": () => (/* binding */ decode),\n/* harmony export */ \"compressData\": () => (/* binding */ compressData),\n/* harmony export */ \"decompressData\": () => (/* binding */ decompressData)\n/* harmony export */ });\n/* harmony import */ var pako__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! pako */ \"../../../node_modules/pako/index.js\");\n/* harmony import */ var pako__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(pako__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var _encryption__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./encryption */ \"../../data/encryption.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\n\r\n\r\n// -----------------------------------------------------------------------------\r\n// byte (binary) strings\r\n// -----------------------------------------------------------------------------\r\n// fast, Buffer-compatible implem\r\nconst toByteString = (data) => {\r\n return new Promise((resolve, reject) => {\r\n const blob = typeof data === \"string\"\r\n ? new Blob([new TextEncoder().encode(data)])\r\n : new Blob([data instanceof Uint8Array ? data : new Uint8Array(data)]);\r\n const reader = new FileReader();\r\n reader.onload = (event) => {\r\n if (!event.target || typeof event.target.result !== \"string\") {\r\n return reject(new Error(\"couldn't convert to byte string\"));\r\n }\r\n resolve(event.target.result);\r\n };\r\n reader.readAsBinaryString(blob);\r\n });\r\n};\r\nconst byteStringToArrayBuffer = (byteString) => {\r\n const buffer = new ArrayBuffer(byteString.length);\r\n const bufferView = new Uint8Array(buffer);\r\n for (let i = 0, len = byteString.length; i < len; i++) {\r\n bufferView[i] = byteString.charCodeAt(i);\r\n }\r\n return buffer;\r\n};\r\nconst byteStringToString = (byteString) => {\r\n return new TextDecoder(\"utf-8\").decode(byteStringToArrayBuffer(byteString));\r\n};\r\n// -----------------------------------------------------------------------------\r\n// base64\r\n// -----------------------------------------------------------------------------\r\n/**\r\n * @param isByteString set to true if already byte string to prevent bloat\r\n * due to reencoding\r\n */\r\nconst stringToBase64 = (str, isByteString = false) => __awaiter(void 0, void 0, void 0, function* () {\r\n return isByteString ? window.btoa(str) : window.btoa(yield toByteString(str));\r\n});\r\n// async to align with stringToBase64\r\nconst base64ToString = (base64, isByteString = false) => __awaiter(void 0, void 0, void 0, function* () {\r\n return isByteString\r\n ? window.atob(base64)\r\n : byteStringToString(window.atob(base64));\r\n});\r\n/**\r\n * Encodes (and potentially compresses via zlib) text to byte string\r\n */\r\nconst encode = ({ text, compress, }) => __awaiter(void 0, void 0, void 0, function* () {\r\n let deflated;\r\n if (compress !== false) {\r\n try {\r\n deflated = yield toByteString((0,pako__WEBPACK_IMPORTED_MODULE_0__.deflate)(text));\r\n }\r\n catch (error) {\r\n console.error(\"encode: cannot deflate\", error);\r\n }\r\n }\r\n return {\r\n version: \"1\",\r\n encoding: \"bstring\",\r\n compressed: !!deflated,\r\n encoded: deflated || (yield toByteString(text)),\r\n };\r\n});\r\nconst decode = (data) => __awaiter(void 0, void 0, void 0, function* () {\r\n let decoded;\r\n switch (data.encoding) {\r\n case \"bstring\":\r\n // if compressed, do not double decode the bstring\r\n decoded = data.compressed\r\n ? data.encoded\r\n : yield byteStringToString(data.encoded);\r\n break;\r\n default:\r\n throw new Error(`decode: unknown encoding \"${data.encoding}\"`);\r\n }\r\n if (data.compressed) {\r\n return (0,pako__WEBPACK_IMPORTED_MODULE_0__.inflate)(new Uint8Array(byteStringToArrayBuffer(decoded)), {\r\n to: \"string\",\r\n });\r\n }\r\n return decoded;\r\n});\r\n// -----------------------------------------------------------------------------\r\nconst CONCAT_BUFFERS_VERSION = 1;\r\n/** how many bytes we use to encode how many bytes the next chunk has.\r\n * Corresponds to DataView setter methods (setUint32, setUint16, etc).\r\n *\r\n * NOTE ! values must not be changed, which would be backwards incompatible !\r\n */\r\nconst VERSION_DATAVIEW_BYTES = 4;\r\nconst NEXT_CHUNK_SIZE_DATAVIEW_BYTES = 4;\r\n// -----------------------------------------------------------------------------\r\nconst DATA_VIEW_BITS_MAP = { 1: 8, 2: 16, 4: 32 };\r\n/**\r\n * abstraction over DataView that serves as a typed getter/setter in case\r\n * you're using constants for the byte size and want to ensure there's no\r\n * discrepenancy in the encoding across refactors.\r\n *\r\n * DataView serves for an endian-agnostic handling of numbers in ArrayBuffers.\r\n */\r\nfunction dataView(buffer, bytes, offset, value) {\r\n if (value != null) {\r\n if (value > Math.pow(2, DATA_VIEW_BITS_MAP[bytes]) - 1) {\r\n throw new Error(`attempting to set value higher than the allocated bytes (value: ${value}, bytes: ${bytes})`);\r\n }\r\n const method = `setUint${DATA_VIEW_BITS_MAP[bytes]}`;\r\n new DataView(buffer.buffer)[method](offset, value);\r\n return buffer;\r\n }\r\n const method = `getUint${DATA_VIEW_BITS_MAP[bytes]}`;\r\n return new DataView(buffer.buffer)[method](offset);\r\n}\r\n// -----------------------------------------------------------------------------\r\n/**\r\n * Resulting concatenated buffer has this format:\r\n *\r\n * [\r\n * VERSION chunk (4 bytes)\r\n * LENGTH chunk 1 (4 bytes)\r\n * DATA chunk 1 (up to 2^32 bits)\r\n * LENGTH chunk 2 (4 bytes)\r\n * DATA chunk 2 (up to 2^32 bits)\r\n * ...\r\n * ]\r\n *\r\n * @param buffers each buffer (chunk) must be at most 2^32 bits large (~4GB)\r\n */\r\nconst concatBuffers = (...buffers) => {\r\n const bufferView = new Uint8Array(VERSION_DATAVIEW_BYTES +\r\n NEXT_CHUNK_SIZE_DATAVIEW_BYTES * buffers.length +\r\n buffers.reduce((acc, buffer) => acc + buffer.byteLength, 0));\r\n let cursor = 0;\r\n // as the first chunk we'll encode the version for backwards compatibility\r\n dataView(bufferView, VERSION_DATAVIEW_BYTES, cursor, CONCAT_BUFFERS_VERSION);\r\n cursor += VERSION_DATAVIEW_BYTES;\r\n for (const buffer of buffers) {\r\n dataView(bufferView, NEXT_CHUNK_SIZE_DATAVIEW_BYTES, cursor, buffer.byteLength);\r\n cursor += NEXT_CHUNK_SIZE_DATAVIEW_BYTES;\r\n bufferView.set(buffer, cursor);\r\n cursor += buffer.byteLength;\r\n }\r\n return bufferView;\r\n};\r\n/** can only be used on buffers created via `concatBuffers()` */\r\nconst splitBuffers = (concatenatedBuffer) => {\r\n const buffers = [];\r\n let cursor = 0;\r\n // first chunk is the version (ignored for now)\r\n cursor += VERSION_DATAVIEW_BYTES;\r\n while (true) {\r\n const chunkSize = dataView(concatenatedBuffer, NEXT_CHUNK_SIZE_DATAVIEW_BYTES, cursor);\r\n cursor += NEXT_CHUNK_SIZE_DATAVIEW_BYTES;\r\n buffers.push(concatenatedBuffer.slice(cursor, cursor + chunkSize));\r\n cursor += chunkSize;\r\n if (cursor >= concatenatedBuffer.byteLength) {\r\n break;\r\n }\r\n }\r\n return buffers;\r\n};\r\n// helpers for (de)compressing data with JSON metadata including encryption\r\n// -----------------------------------------------------------------------------\r\n/** @private */\r\nconst _encryptAndCompress = (data, encryptionKey) => __awaiter(void 0, void 0, void 0, function* () {\r\n const { encryptedBuffer, iv } = yield (0,_encryption__WEBPACK_IMPORTED_MODULE_1__.encryptData)(encryptionKey, (0,pako__WEBPACK_IMPORTED_MODULE_0__.deflate)(data));\r\n return { iv, buffer: new Uint8Array(encryptedBuffer) };\r\n});\r\n/**\r\n * The returned buffer has following format:\r\n * `[]` refers to a buffers wrapper (see `concatBuffers`)\r\n *\r\n * [\r\n * encodingMetadataBuffer,\r\n * iv,\r\n * [\r\n * contentsMetadataBuffer\r\n * contentsBuffer\r\n * ]\r\n * ]\r\n */\r\nconst compressData = (dataBuffer, options) => __awaiter(void 0, void 0, void 0, function* () {\r\n const fileInfo = {\r\n version: 2,\r\n compression: \"pako@1\",\r\n encryption: \"AES-GCM\",\r\n };\r\n const encodingMetadataBuffer = new TextEncoder().encode(JSON.stringify(fileInfo));\r\n const contentsMetadataBuffer = new TextEncoder().encode(JSON.stringify(options.metadata || null));\r\n const { iv, buffer } = yield _encryptAndCompress(concatBuffers(contentsMetadataBuffer, dataBuffer), options.encryptionKey);\r\n return concatBuffers(encodingMetadataBuffer, iv, buffer);\r\n});\r\n/** @private */\r\nconst _decryptAndDecompress = (iv, decryptedBuffer, decryptionKey, isCompressed) => __awaiter(void 0, void 0, void 0, function* () {\r\n decryptedBuffer = new Uint8Array(yield (0,_encryption__WEBPACK_IMPORTED_MODULE_1__.decryptData)(iv, decryptedBuffer, decryptionKey));\r\n if (isCompressed) {\r\n return (0,pako__WEBPACK_IMPORTED_MODULE_0__.inflate)(decryptedBuffer);\r\n }\r\n return decryptedBuffer;\r\n});\r\nconst decompressData = (bufferView, options) => __awaiter(void 0, void 0, void 0, function* () {\r\n // first chunk is encoding metadata (ignored for now)\r\n const [encodingMetadataBuffer, iv, buffer] = splitBuffers(bufferView);\r\n const encodingMetadata = JSON.parse(new TextDecoder().decode(encodingMetadataBuffer));\r\n try {\r\n const [contentsMetadataBuffer, contentsBuffer] = splitBuffers(yield _decryptAndDecompress(iv, buffer, options.decryptionKey, !!encodingMetadata.compression));\r\n const metadata = JSON.parse(new TextDecoder().decode(contentsMetadataBuffer));\r\n return {\r\n /** metadata source is always JSON so we can decode it here */\r\n metadata,\r\n /** data can be anything so the caller must decode it */\r\n data: contentsBuffer,\r\n };\r\n }\r\n catch (error) {\r\n console.error(`Error during decompressing and decrypting the file.`, encodingMetadata);\r\n throw error;\r\n }\r\n});\r\n// -----------------------------------------------------------------------------\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUMsV0FBVyxDQUMvQixDQUNGLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUN6QixJQUFJLFdBQVcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUM1QyxDQUFDO1FBRVAsT0FBTztZQUNMLDhEQUE4RDtZQUM5RCxRQUFRO1lBQ1Isd0RBQXdEO1lBQ3hELElBQUksRUFBRSxjQUFjO1NBQ3JCLENBQUM7S0FDSDtJQUFDLE9BQU8sS0FBSyxFQUFFO1FBQ2QsT0FBTyxDQUFDLEtBQUssQ0FDWCxxREFBcUQsRUFDckQsZ0JBQWdCLENBQ2pCLENBQUM7UUFDRixNQUFNLEtBQUssQ0FBQztLQUNiO0FBQ0gsQ0FBQyxFQUFDO0FBRUYsZ0ZBQWdGIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vLy4uLy4uL2RhdGEvZW5jb2RlLnRzPzliOGUiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZGVmbGF0ZSwgaW5mbGF0ZSB9IGZyb20gXCJwYWtvXCI7XG5pbXBvcnQgeyBlbmNyeXB0RGF0YSwgZGVjcnlwdERhdGEgfSBmcm9tIFwiLi9lbmNyeXB0aW9uXCI7XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBieXRlIChiaW5hcnkpIHN0cmluZ3Ncbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbi8vIGZhc3QsIEJ1ZmZlci1jb21wYXRpYmxlIGltcGxlbVxuZXhwb3J0IGNvbnN0IHRvQnl0ZVN0cmluZyA9IChcbiAgZGF0YTogc3RyaW5nIHwgVWludDhBcnJheSB8IEFycmF5QnVmZmVyLFxuKTogUHJvbWlzZTxzdHJpbmc+ID0+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBibG9iID1cbiAgICAgIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiXG4gICAgICAgID8gbmV3IEJsb2IoW25ldyBUZXh0RW5jb2RlcigpLmVuY29kZShkYXRhKV0pXG4gICAgICAgIDogbmV3IEJsb2IoW2RhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5ID8gZGF0YSA6IG5ldyBVaW50OEFycmF5KGRhdGEpXSk7XG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICByZWFkZXIub25sb2FkID0gKGV2ZW50KSA9PiB7XG4gICAgICBpZiAoIWV2ZW50LnRhcmdldCB8fCB0eXBlb2YgZXZlbnQudGFyZ2V0LnJlc3VsdCAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBFcnJvcihcImNvdWxkbid0IGNvbnZlcnQgdG8gYnl0ZSBzdHJpbmdcIikpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShldmVudC50YXJnZXQucmVzdWx0KTtcbiAgICB9O1xuICAgIHJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcoYmxvYik7XG4gIH0pO1xufTtcblxuY29uc3QgYnl0ZVN0cmluZ1RvQXJyYXlCdWZmZXIgPSAoYnl0ZVN0cmluZzogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihieXRlU3RyaW5nLmxlbmd0aCk7XG4gIGNvbnN0IGJ1ZmZlclZpZXcgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICBmb3IgKGxldCBpID0gMCwgbGVuID0gYnl0ZVN0cmluZy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGJ1ZmZlclZpZXdbaV0gPSBieXRlU3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gIH1cbiAgcmV0dXJuIGJ1ZmZlcjtcbn07XG5cbmNvbnN0IGJ5dGVTdHJpbmdUb1N0cmluZyA9IChieXRlU3RyaW5nOiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIG5ldyBUZXh0RGVjb2RlcihcInV0Zi04XCIpLmRlY29kZShieXRlU3RyaW5nVG9BcnJheUJ1ZmZlcihieXRlU3RyaW5nKSk7XG59O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gYmFzZTY0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIEBwYXJhbSBpc0J5dGVTdHJpbmcgc2V0IHRvIHRydWUgaWYgYWxyZWFkeSBieXRlIHN0cmluZyB0byBwcmV2ZW50IGJsb2F0XG4gKiAgZHVlIHRvIHJlZW5jb2RpbmdcbiAqL1xuZXhwb3J0IGNvbnN0IHN0cmluZ1RvQmFzZTY0ID0gYXN5bmMgKHN0cjogc3RyaW5nLCBpc0J5dGVTdHJpbmcgPSBmYWxzZSkgPT4ge1xuICByZXR1cm4gaXNCeXRlU3RyaW5nID8gd2luZG93LmJ0b2Eoc3RyKSA6IHdpbmRvdy5idG9hKGF3YWl0IHRvQnl0ZVN0cmluZyhzdHIpKTtcbn07XG5cbi8vIGFzeW5jIHRvIGFsaWduIHdpdGggc3RyaW5nVG9CYXNlNjRcbmV4cG9ydCBjb25zdCBiYXNlNjRUb1N0cmluZyA9IGFzeW5jIChiYXNlNjQ6IHN0cmluZywgaXNCeXRlU3RyaW5nID0gZmFsc2UpID0+IHtcbiAgcmV0dXJuIGlzQnl0ZVN0cmluZ1xuICAgID8gd2luZG93LmF0b2IoYmFzZTY0KVxuICAgIDogYnl0ZVN0cmluZ1RvU3RyaW5nKHdpbmRvdy5hdG9iKGJhc2U2NCkpO1xufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHRleHQgZW5jb2Rpbmdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbnR5cGUgRW5jb2RlZERhdGEgPSB7XG4gIGVuY29kZWQ6IHN0cmluZztcbiAgZW5jb2Rpbmc6IFwiYnN0cmluZ1wiO1xuICAvKiogd2hldGhlciB0ZXh0IGlzIGNvbXByZXNzZWQgKHpsaWIpICovXG4gIGNvbXByZXNzZWQ6IGJvb2xlYW47XG4gIC8qKiB2ZXJzaW9uIGZvciBwb3RlbnRpYWwgbWlncmF0aW9uIHB1cnBvc2VzICovXG4gIHZlcnNpb24/OiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIEVuY29kZXMgKGFuZCBwb3RlbnRpYWxseSBjb21wcmVzc2VzIHZpYSB6bGliKSB0ZXh0IHRvIGJ5dGUgc3RyaW5nXG4gKi9cbmV4cG9ydCBjb25zdCBlbmNvZGUgPSBhc3luYyAoe1xuICB0ZXh0LFxuICBjb21wcmVzcyxcbn06IHtcbiAgdGV4dDogc3RyaW5nO1xuICAvKiogZGVmYXVsdHMgdG8gYHRydWVgLiBJZiBjb21wcmVzc2lvbiBmYWlscywgZmFsbHMgYmFjayB0byBic3RyaW5nIGFsb25lLiAqL1xuICBjb21wcmVzcz86IGJvb2xlYW47XG59KTogUHJvbWlzZTxFbmNvZGVkRGF0YT4gPT4ge1xuICBsZXQgZGVmbGF0ZWQhOiBzdHJpbmc7XG4gIGlmIChjb21wcmVzcyAhPT0gZmFsc2UpIHtcbiAgICB0cnkge1xuICAgICAgZGVmbGF0ZWQgPSBhd2FpdCB0b0J5dGVTdHJpbmcoZGVmbGF0ZSh0ZXh0KSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJlbmNvZGU6IGNhbm5vdCBkZWZsYXRlXCIsIGVycm9yKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB2ZXJzaW9uOiBcIjFcIixcbiAgICBlbmNvZGluZzogXCJic3RyaW5nXCIsXG4gICAgY29tcHJlc3NlZDogISFkZWZsYXRlZCxcbiAgICBlbmNvZGVkOiBkZWZsYXRlZCB8fCAoYXdhaXQgdG9CeXRlU3RyaW5nKHRleHQpKSxcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWNvZGUgPSBhc3luYyAoZGF0YTogRW5jb2RlZERhdGEpOiBQcm9taXNlPHN0cmluZz4gPT4ge1xuICBsZXQgZGVjb2RlZDogc3RyaW5nO1xuXG4gIHN3aXRjaCAoZGF0YS5lbmNvZGluZykge1xuICAgIGNhc2UgXCJic3RyaW5nXCI6XG4gICAgICAvLyBpZiBjb21wcmVzc2VkLCBkbyBub3QgZG91YmxlIGRlY29kZSB0aGUgYnN0cmluZ1xuICAgICAgZGVjb2RlZCA9IGRhdGEuY29tcHJlc3NlZFxuICAgICAgICA/IGRhdGEuZW5jb2RlZFxuICAgICAgICA6IGF3YWl0IGJ5dGVTdHJpbmdUb1N0cmluZyhkYXRhLmVuY29kZWQpO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihgZGVjb2RlOiB1bmtub3duIGVuY29kaW5nIFwiJHtkYXRhLmVuY29kaW5nfVwiYCk7XG4gIH1cblxuICBpZiAoZGF0YS5jb21wcmVzc2VkKSB7XG4gICAgcmV0dXJuIGluZmxhdGUobmV3IFVpbnQ4QXJyYXkoYnl0ZVN0cmluZ1RvQXJyYXlCdWZmZXIoZGVjb2RlZCkpLCB7XG4gICAgICB0bzogXCJzdHJpbmdcIixcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBkZWNvZGVkO1xufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIGJpbmFyeSBlbmNvZGluZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxudHlwZSBGaWxlRW5jb2RpbmdJbmZvID0ge1xuICAvKiB2ZXJzaW9uIDIgaXMgdGhlIHZlcnNpb24gd2UncmUgc2hpcHBpbmcgdGhlIGluaXRpYWwgaW1hZ2Ugc3VwcG9ydCB3aXRoLlxuICAgIHZlcnNpb24gMSB3YXMgYSBQUiB2ZXJzaW9uIHRoYXQgYSBsb3Qgb2YgcGVvcGxlIHdlcmUgdXNpbmcgYW55d2F5LlxuICAgIFRodXMsIGlmIHRoZXJlIGFyZSBpc3N1ZXMgd2UgY2FuIGNoZWNrIHdoZXRoZXIgdGhleSdyZSBub3QgdXNpbmcgdGhlXG4gICAgdW5vZmZpYyB2ZXJzaW9uICovXG4gIHZlcnNpb246IDEgfCAyO1xuICBjb21wcmVzc2lvbjogXCJwYWtvQDFcIiB8IG51bGw7XG4gIGVuY3J5cHRpb246IFwiQUVTLUdDTVwiIHwgbnVsbDtcbn07XG5cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5jb25zdCBDT05DQVRfQlVGRkVSU19WRVJTSU9OID0gMTtcbi8qKiBob3cgbWFueSBieXRlcyB3ZSB1c2UgdG8gZW5jb2RlIGhvdyBtYW55IGJ5dGVzIHRoZSBuZXh0IGNodW5rIGhhcy5cbiAqIENvcnJlc3BvbmRzIHRvIERhdGFWaWV3IHNldHRlciBtZXRob2RzIChzZXRVaW50MzIsIHNldFVpbnQxNiwgZXRjKS5cbiAqXG4gKiBOT1RFICEgdmFsdWVzIG11c3Qgbm90IGJlIGNoYW5nZWQsIHdoaWNoIHdvdWxkIGJlIGJhY2t3YXJkcyBpbmNvbXBhdGlibGUgIVxuICovXG5jb25zdCBWRVJTSU9OX0RBVEFWSUVXX0JZVEVTID0gNDtcbmNvbnN0IE5FWFRfQ0hVTktfU0laRV9EQVRBVklFV19CWVRFUyA9IDQ7XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5jb25zdCBEQVRBX1ZJRVdfQklUU19NQVAgPSB7IDE6IDgsIDI6IDE2LCA0OiAzMiB9IGFzIGNvbnN0O1xuXG4vLyBnZXR0ZXJcbmZ1bmN0aW9uIGRhdGFWaWV3KGJ1ZmZlcjogVWludDhBcnJheSwgYnl0ZXM6IDEgfCAyIHwgNCwgb2Zmc2V0OiBudW1iZXIpOiBudW1iZXI7XG4vLyBzZXR0ZXJcbmZ1bmN0aW9uIGRhdGFWaWV3KFxuICBidWZmZXI6IFVpbnQ4QXJyYXksXG4gIGJ5dGVzOiAxIHwgMiB8IDQsXG4gIG9mZnNldDogbnVtYmVyLFxuICB2YWx1ZTogbnVtYmVyLFxuKTogVWludDhBcnJheTtcbi8qKlxuICogYWJzdHJhY3Rpb24gb3ZlciBEYXRhVmlldyB0aGF0IHNlcnZlcyBhcyBhIHR5cGVkIGdldHRlci9zZXR0ZXIgaW4gY2FzZVxuICogeW91J3JlIHVzaW5nIGNvbnN0YW50cyBmb3IgdGhlIGJ5dGUgc2l6ZSBhbmQgd2FudCB0byBlbnN1cmUgdGhlcmUncyBub1xuICogZGlzY3JlcGVuYW5jeSBpbiB0aGUgZW5jb2RpbmcgYWNyb3NzIHJlZmFjdG9ycy5cbiAqXG4gKiBEYXRhVmlldyBzZXJ2ZXMgZm9yIGFuIGVuZGlhbi1hZ25vc3RpYyBoYW5kbGluZyBvZiBudW1iZXJzIGluIEFycmF5QnVmZmVycy5cbiAqL1xuZnVuY3Rpb24gZGF0YVZpZXcoXG4gIGJ1ZmZlcjogVWludDhBcnJheSxcbiAgYnl0ZXM6IDEgfCAyIHwgNCxcbiAgb2Zmc2V0OiBudW1iZXIsXG4gIHZhbHVlPzogbnVtYmVyLFxuKTogVWludDhBcnJheSB8IG51bWJlciB7XG4gIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgaWYgKHZhbHVlID4gTWF0aC5wb3coMiwgREFUQV9WSUVXX0JJVFNfTUFQW2J5dGVzXSkgLSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBhdHRlbXB0aW5nIHRvIHNldCB2YWx1ZSBoaWdoZXIgdGhhbiB0aGUgYWxsb2NhdGVkIGJ5dGVzICh2YWx1ZTogJHt2YWx1ZX0sIGJ5dGVzOiAke2J5dGVzfSlgLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgbWV0aG9kID0gYHNldFVpbnQke0RBVEFfVklFV19CSVRTX01BUFtieXRlc119YCBhcyBjb25zdDtcbiAgICBuZXcgRGF0YVZpZXcoYnVmZmVyLmJ1ZmZlcilbbWV0aG9kXShvZmZzZXQsIHZhbHVlKTtcbiAgICByZXR1cm4gYnVmZmVyO1xuICB9XG4gIGNvbnN0IG1ldGhvZCA9IGBnZXRVaW50JHtEQVRBX1ZJRVdfQklUU19NQVBbYnl0ZXNdfWAgYXMgY29uc3Q7XG4gIHJldHVybiBuZXcgRGF0YVZpZXcoYnVmZmVyLmJ1ZmZlcilbbWV0aG9kXShvZmZzZXQpO1xufVxuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKipcbiAqIFJlc3VsdGluZyBjb25jYXRlbmF0ZWQgYnVmZmVyIGhhcyB0aGlzIGZvcm1hdDpcbiAqXG4gKiBbXG4gKiAgIFZFUlNJT04gY2h1bmsgKDQgYnl0ZXMpXG4gKiAgIExFTkdUSCBjaHVuayAxICg0IGJ5dGVzKVxuICogICBEQVRBIGNodW5rIDEgKHVwIHRvIDJeMzIgYml0cylcbiAqICAgTEVOR1RIIGNodW5rIDIgKDQgYnl0ZXMpXG4gKiAgIERBVEEgY2h1bmsgMiAodXAgdG8gMl4zMiBiaXRzKVxuICogICAuLi5cbiAqIF1cbiAqXG4gKiBAcGFyYW0gYnVmZmVycyBlYWNoIGJ1ZmZlciAoY2h1bmspIG11c3QgYmUgYXQgbW9zdCAyXjMyIGJpdHMgbGFyZ2UgKH40R0IpXG4gKi9cbmNvbnN0IGNvbmNhdEJ1ZmZlcnMgPSAoLi4uYnVmZmVyczogVWludDhBcnJheVtdKSA9PiB7XG4gIGNvbnN0IGJ1ZmZlclZpZXcgPSBuZXcgVWludDhBcnJheShcbiAgICBWRVJTSU9OX0RBVEFWSUVXX0JZVEVTICtcbiAgICAgIE5FWFRfQ0hVTktfU0laRV9EQVRBVklFV19CWVRFUyAqIGJ1ZmZlcnMubGVuZ3RoICtcbiAgICAgIGJ1ZmZlcnMucmVkdWNlKChhY2MsIGJ1ZmZlcikgPT4gYWNjICsgYnVmZmVyLmJ5dGVMZW5ndGgsIDApLFxuICApO1xuXG4gIGxldCBjdXJzb3IgPSAwO1xuXG4gIC8vIGFzIHRoZSBmaXJzdCBjaHVuayB3ZSdsbCBlbmNvZGUgdGhlIHZlcnNpb24gZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIGRhdGFWaWV3KGJ1ZmZlclZpZXcsIFZFUlNJT05fREFUQVZJRVdfQllURVMsIGN1cnNvciwgQ09OQ0FUX0JVRkZFUlNfVkVSU0lPTik7XG4gIGN1cnNvciArPSBWRVJTSU9OX0RBVEFWSUVXX0JZVEVTO1xuXG4gIGZvciAoY29uc3QgYnVmZmVyIG9mIGJ1ZmZlcnMpIHtcbiAgICBkYXRhVmlldyhcbiAgICAgIGJ1ZmZlclZpZXcsXG4gICAgICBORVhUX0NIVU5LX1NJWkVfREFUQVZJRVdfQllURVMsXG4gICAgICBjdXJzb3IsXG4gICAgICBidWZmZXIuYnl0ZUxlbmd0aCxcbiAgICApO1xuICAgIGN1cnNvciArPSBORVhUX0NIVU5LX1NJWkVfREFUQVZJRVdfQllURVM7XG5cbiAgICBidWZmZXJWaWV3LnNldChidWZmZXIsIGN1cnNvcik7XG4gICAgY3Vyc29yICs9IGJ1ZmZlci5ieXRlTGVuZ3RoO1xuICB9XG5cbiAgcmV0dXJuIGJ1ZmZlclZpZXc7XG59O1xuXG4vKiogY2FuIG9ubHkgYmUgdXNlZCBvbiBidWZmZXJzIGNyZWF0ZWQgdmlhIGBjb25jYXRCdWZmZXJzKClgICovXG5jb25zdCBzcGxpdEJ1ZmZlcnMgPSAoY29uY2F0ZW5hdGVkQnVmZmVyOiBVaW50OEFycmF5KSA9PiB7XG4gIGNvbnN0IGJ1ZmZlcnMgPSBbXTtcblxuICBsZXQgY3Vyc29yID0gMDtcblxuICAvLyBmaXJzdCBjaHVuayBpcyB0aGUgdmVyc2lvbiAoaWdub3JlZCBmb3Igbm93KVxuICBjdXJzb3IgKz0gVkVSU0lPTl9EQVRBVklFV19CWVRFUztcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IGNodW5rU2l6ZSA9IGRhdGFWaWV3KFxuICAgICAgY29uY2F0ZW5hdGVkQnVmZmVyLFxuICAgICAgTkVYVF9DSFVOS19TSVpFX0RBVEFWSUVXX0JZVEVTLFxuICAgICAgY3Vyc29yLFxuICAgICk7XG4gICAgY3Vyc29yICs9IE5FWFRfQ0hVTktfU0laRV9EQVRBVklFV19CWVRFUztcblxuICAgIGJ1ZmZlcnMucHVzaChjb25jYXRlbmF0ZWRCdWZmZXIuc2xpY2UoY3Vyc29yLCBjdXJzb3IgKyBjaHVua1NpemUpKTtcbiAgICBjdXJzb3IgKz0gY2h1bmtTaXplO1xuICAgIGlmIChjdXJzb3IgPj0gY29uY2F0ZW5hdGVkQnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBidWZmZXJzO1xufTtcblxuLy8gaGVscGVycyBmb3IgKGRlKWNvbXByZXNzaW5nIGRhdGEgd2l0aCBKU09OIG1ldGFkYXRhIGluY2x1ZGluZyBlbmNyeXB0aW9uXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vKiogQHByaXZhdGUgKi9cbmNvbnN0IF9lbmNyeXB0QW5kQ29tcHJlc3MgPSBhc3luYyAoXG4gIGRhdGE6IFVpbnQ4QXJyYXkgfCBzdHJpbmcsXG4gIGVuY3J5cHRpb25LZXk6IHN0cmluZyxcbikgPT4ge1xuICBjb25zdCB7IGVuY3J5cHRlZEJ1ZmZlciwgaXYgfSA9IGF3YWl0IGVuY3J5cHREYXRhKFxuICAgIGVuY3J5cHRpb25LZXksXG4gICAgZGVmbGF0ZShkYXRhKSxcbiAgKTtcblxuICByZXR1cm4geyBpdiwgYnVmZmVyOiBuZXcgVWludDhBcnJheShlbmNyeXB0ZWRCdWZmZXIpIH07XG59O1xuXG4vKipcbiAqIFRoZSByZXR1cm5lZCBidWZmZXIgaGFzIGZvbGxvd2luZyBmb3JtYXQ6XG4gKiBgW11gIHJlZmVycyB0byBhIGJ1ZmZlcnMgd3JhcHBlciAoc2VlIGBjb25jYXRCdWZmZXJzYClcbiAqXG4gKiBbXG4gKiAgIGVuY29kaW5nTWV0YWRhdGFCdWZmZXIsXG4gKiAgIGl2LFxuICogICBbXG4gKiAgICAgIGNvbnRlbnRzTWV0YWRhdGFCdWZmZXJcbiAqICAgICAgY29udGVudHNCdWZmZXJcbiAqICAgXVxuICogXVxuICovXG5leHBvcnQgY29uc3QgY29tcHJlc3NEYXRhID0gYXN5bmMgPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0gbmV2ZXI+KFxuICBkYXRhQnVmZmVyOiBVaW50OEFycmF5LFxuICBvcHRpb25zOiB7XG4gICAgZW5jcnlwdGlvbktleTogc3RyaW5nO1xuICB9ICYgKFtUXSBleHRlbmRzIFtuZXZlcl1cbiAgICA/IHtcbiAgICAgICAgbWV0YWRhdGE/OiBUO1xuICAgICAgfVxuICAgIDoge1xuICAgICAgICBtZXRhZGF0YTogVDtcbiAgICAgIH0pLFxuKTogUHJvbWlzZTxVaW50OEFycmF5PiA9PiB7XG4gIGNvbnN0IGZpbGVJbmZvOiBGaWxlRW5jb2RpbmdJbmZvID0ge1xuICAgIHZlcnNpb246IDIsXG4gICAgY29tcHJlc3Npb246IFwicGFrb0AxXCIsXG4gICAgZW5jcnlwdGlvbjogXCJBRVMtR0NNXCIsXG4gIH07XG5cbiAgY29uc3QgZW5jb2RpbmdNZXRhZGF0YUJ1ZmZlciA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShcbiAgICBKU09OLnN0cmluZ2lmeShmaWxlSW5mbyksXG4gICk7XG5cbiAgY29uc3QgY29udGVudHNNZXRhZGF0YUJ1ZmZlciA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShcbiAgICBKU09OLnN0cmluZ2lmeShvcHRpb25zLm1ldGFkYXRhIHx8IG51bGwpLFxuICApO1xuXG4gIGNvbnN0IHsgaXYsIGJ1ZmZlciB9ID0gYXdhaXQgX2VuY3J5cHRBbmRDb21wcmVzcyhcbiAgICBjb25jYXRCdWZmZXJzKGNvbnRlbnRzTWV0YWRhdGFCdWZmZXIsIGRhdGFCdWZmZXIpLFxuICAgIG9wdGlvbnMuZW5jcnlwdGlvbktleSxcbiAgKTtcblxuICByZXR1cm4gY29uY2F0QnVmZmVycyhlbmNvZGluZ01ldGFkYXRhQnVmZmVyLCBpdiwgYnVmZmVyKTtcbn07XG5cbi8qKiBAcHJpdmF0ZSAqL1xuY29uc3QgX2RlY3J5cHRBbmREZWNvbXByZXNzID0gYXN5bmMgKFxuICBpdjogVWludDhBcnJheSxcbiAgZGVjcnlwdGVkQnVmZmVyOiBVaW50OEFycmF5LFxuICBkZWNyeXB0aW9uS2V5OiBzdHJpbmcsXG4gIGlzQ29tcHJlc3NlZDogYm9vbGVhbixcbikgPT4ge1xuICBkZWNyeXB0ZWRCdWZmZXIgPSBuZXcgVWludDhBcnJheShcbiAgICBhd2FpdCBkZWNyeXB0RGF0YShpdiwgZGVjcnlwdGVkQnVmZmVyLCBkZWNyeXB0aW9uS2V5KSxcbiAgKTtcblxuICBpZiAoaXNDb21wcmVzc2VkKSB7XG4gICAgcmV0dXJuIGluZmxhdGUoZGVjcnlwdGVkQnVmZmVyKTtcbiAgfVxuXG4gIHJldHVybiBkZWNyeXB0ZWRCdWZmZXI7XG59O1xuXG5leHBvcnQgY29uc3QgZGVjb21wcmVzc0RhdGEgPSBhc3luYyA8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+KFxuICBidWZmZXJWaWV3OiBVaW50OEFycmF5LFxuICBvcHRpb25zOiB7IGRlY3J5cHRpb25LZXk6IHN0cmluZyB9LFxuKSA9PiB7XG4gIC8vIGZpcnN0IGNodW5rIGlzIGVuY29kaW5nIG1ldGFkYXRhIChpZ25vcmVkIGZvciBub3cpXG4gIGNvbnN0IFtlbmNvZGluZ01ldGFkYXRhQnVmZmVyLCBpdiwgYnVmZmVyXSA9IHNwbGl0QnVmZmVycyhidWZmZXJWaWV3KTtcblxuICBjb25zdCBlbmNvZGluZ01ldGFkYXRhOiBGaWxlRW5jb2RpbmdJbmZvID0gSlNPTi5wYXJzZShcbiAgICBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoZW5jb2RpbmdNZXRhZGF0YUJ1ZmZlciksXG4gICk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBbY29udGVudHNNZXRhZGF0YUJ1ZmZlciwgY29udGVudHNCdWZmZXJdID0gc3BsaXRCdWZmZXJzKFxuICAgICAgYXdhaXQgX2RlY3J5cHRBbmREZWNvbXByZXNzKFxuICAgICAgICBpdixcbiAgICAgICAgYnVmZmVyLFxuICAgICAgICBvcHRpb25zLmRlY3J5cHRpb25LZXksXG4gICAgICAgICEhZW5jb2RpbmdNZXRhZGF0YS5jb21wcmVzc2lvbixcbiAgICAgICksXG4gICAgKTtcblxuICAgIGNvbnN0IG1ldGFkYXRhID0gSlNPTi5wYXJzZShcbiAgICAgIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShjb250ZW50c01ldGFkYXRhQnVmZmVyKSxcbiAgICApIGFzIFQ7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLyoqIG1ldGFkYXRhIHNvdXJjZSBpcyBhbHdheXMgSlNPTiBzbyB3ZSBjYW4gZGVjb2RlIGl0IGhlcmUgKi9cbiAgICAgIG1ldGFkYXRhLFxuICAgICAgLyoqIGRhdGEgY2FuIGJlIGFueXRoaW5nIHNvIHRoZSBjYWxsZXIgbXVzdCBkZWNvZGUgaXQgKi9cbiAgICAgIGRhdGE6IGNvbnRlbnRzQnVmZmVyLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcihcbiAgICAgIGBFcnJvciBkdXJpbmcgZGVjb21wcmVzc2luZyBhbmQgZGVjcnlwdGluZyB0aGUgZmlsZS5gLFxuICAgICAgZW5jb2RpbmdNZXRhZGF0YSxcbiAgICApO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../data/encode.ts\n");
|
|
19
|
+
|
|
20
|
+
/***/ }),
|
|
21
|
+
|
|
22
|
+
/***/ "../../data/encryption.ts":
|
|
23
|
+
/*!********************************!*\
|
|
24
|
+
!*** ../../data/encryption.ts ***!
|
|
25
|
+
\********************************/
|
|
26
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
27
|
+
|
|
28
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"IV_LENGTH_BYTES\": () => (/* binding */ IV_LENGTH_BYTES),\n/* harmony export */ \"createIV\": () => (/* binding */ createIV),\n/* harmony export */ \"generateEncryptionKey\": () => (/* binding */ generateEncryptionKey),\n/* harmony export */ \"getImportedKey\": () => (/* binding */ getImportedKey),\n/* harmony export */ \"encryptData\": () => (/* binding */ encryptData),\n/* harmony export */ \"decryptData\": () => (/* binding */ decryptData)\n/* harmony export */ });\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\nconst IV_LENGTH_BYTES = 12;\r\nconst createIV = () => {\r\n const arr = new Uint8Array(IV_LENGTH_BYTES);\r\n return window.crypto.getRandomValues(arr);\r\n};\r\nconst generateEncryptionKey = () => __awaiter(void 0, void 0, void 0, function* () {\r\n const key = yield window.crypto.subtle.generateKey({\r\n name: \"AES-GCM\",\r\n length: 128,\r\n }, true, // extractable\r\n [\"encrypt\", \"decrypt\"]);\r\n return (yield window.crypto.subtle.exportKey(\"jwk\", key)).k;\r\n});\r\nconst getImportedKey = (key, usage) => window.crypto.subtle.importKey(\"jwk\", {\r\n alg: \"A128GCM\",\r\n ext: true,\r\n k: key,\r\n key_ops: [\"encrypt\", \"decrypt\"],\r\n kty: \"oct\",\r\n}, {\r\n name: \"AES-GCM\",\r\n length: 128,\r\n}, false, // extractable\r\n[usage]);\r\nconst encryptData = (key, data) => __awaiter(void 0, void 0, void 0, function* () {\r\n const importedKey = yield getImportedKey(key, \"encrypt\");\r\n const iv = createIV();\r\n const buffer = typeof data === \"string\"\r\n ? new TextEncoder().encode(data)\r\n : data instanceof Uint8Array\r\n ? data\r\n : data instanceof Blob\r\n ? yield data.arrayBuffer()\r\n : data;\r\n const encryptedBuffer = yield window.crypto.subtle.encrypt({\r\n name: \"AES-GCM\",\r\n iv,\r\n }, importedKey, buffer);\r\n return { encryptedBuffer, iv };\r\n});\r\nconst decryptData = (iv, encrypted, privateKey) => __awaiter(void 0, void 0, void 0, function* () {\r\n const key = yield getImportedKey(privateKey, \"decrypt\");\r\n return window.crypto.subtle.decrypt({\r\n name: \"AES-GCM\",\r\n iv,\r\n }, key, encrypted);\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Y3J5cHRpb24udHM/YWQzMSJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgSVZfTEVOR1RIX0JZVEVTID0gMTI7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVJViA9ICgpID0+IHtcbiAgY29uc3QgYXJyID0gbmV3IFVpbnQ4QXJyYXkoSVZfTEVOR1RIX0JZVEVTKTtcbiAgcmV0dXJuIHdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycik7XG59O1xuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVFbmNyeXB0aW9uS2V5ID0gYXN5bmMgKCkgPT4ge1xuICBjb25zdCBrZXkgPSBhd2FpdCB3aW5kb3cuY3J5cHRvLnN1YnRsZS5nZW5lcmF0ZUtleShcbiAgICB7XG4gICAgICBuYW1lOiBcIkFFUy1HQ01cIixcbiAgICAgIGxlbmd0aDogMTI4LFxuICAgIH0sXG4gICAgdHJ1ZSwgLy8gZXh0cmFjdGFibGVcbiAgICBbXCJlbmNyeXB0XCIsIFwiZGVjcnlwdFwiXSxcbiAgKTtcbiAgcmV0dXJuIChhd2FpdCB3aW5kb3cuY3J5cHRvLnN1YnRsZS5leHBvcnRLZXkoXCJqd2tcIiwga2V5KSkuaztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRJbXBvcnRlZEtleSA9IChrZXk6IHN0cmluZywgdXNhZ2U6IEtleVVzYWdlKSA9PlxuICB3aW5kb3cuY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoXG4gICAgXCJqd2tcIixcbiAgICB7XG4gICAgICBhbGc6IFwiQTEyOEdDTVwiLFxuICAgICAgZXh0OiB0cnVlLFxuICAgICAgazoga2V5LFxuICAgICAga2V5X29wczogW1wiZW5jcnlwdFwiLCBcImRlY3J5cHRcIl0sXG4gICAgICBrdHk6IFwib2N0XCIsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBcIkFFUy1HQ01cIixcbiAgICAgIGxlbmd0aDogMTI4LFxuICAgIH0sXG4gICAgZmFsc2UsIC8vIGV4dHJhY3RhYmxlXG4gICAgW3VzYWdlXSxcbiAgKTtcblxuZXhwb3J0IGNvbnN0IGVuY3J5cHREYXRhID0gYXN5bmMgKFxuICBrZXk6IHN0cmluZyxcbiAgZGF0YTogVWludDhBcnJheSB8IEFycmF5QnVmZmVyIHwgQmxvYiB8IEZpbGUgfCBzdHJpbmcsXG4pOiBQcm9taXNlPHsgZW5jcnlwdGVkQnVmZmVyOiBBcnJheUJ1ZmZlcjsgaXY6IFVpbnQ4QXJyYXkgfT4gPT4ge1xuICBjb25zdCBpbXBvcnRlZEtleSA9IGF3YWl0IGdldEltcG9ydGVkS2V5KGtleSwgXCJlbmNyeXB0XCIpO1xuICBjb25zdCBpdiA9IGNyZWF0ZUlWKCk7XG4gIGNvbnN0IGJ1ZmZlcjogQXJyYXlCdWZmZXIgfCBVaW50OEFycmF5ID1cbiAgICB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoZGF0YSlcbiAgICAgIDogZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXlcbiAgICAgID8gZGF0YVxuICAgICAgOiBkYXRhIGluc3RhbmNlb2YgQmxvYlxuICAgICAgPyBhd2FpdCBkYXRhLmFycmF5QnVmZmVyKClcbiAgICAgIDogZGF0YTtcblxuICBjb25zdCBlbmNyeXB0ZWRCdWZmZXIgPSBhd2FpdCB3aW5kb3cuY3J5cHRvLnN1YnRsZS5lbmNyeXB0KFxuICAgIHtcbiAgICAgIG5hbWU6IFwiQUVTLUdDTVwiLFxuICAgICAgaXYsXG4gICAgfSxcbiAgICBpbXBvcnRlZEtleSxcbiAgICBidWZmZXIgYXMgQXJyYXlCdWZmZXIgfCBVaW50OEFycmF5LFxuICApO1xuXG4gIHJldHVybiB7IGVuY3J5cHRlZEJ1ZmZlciwgaXYgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBkZWNyeXB0RGF0YSA9IGFzeW5jIChcbiAgaXY6IFVpbnQ4QXJyYXksXG4gIGVuY3J5cHRlZDogVWludDhBcnJheSB8IEFycmF5QnVmZmVyLFxuICBwcml2YXRlS2V5OiBzdHJpbmcsXG4pOiBQcm9taXNlPEFycmF5QnVmZmVyPiA9PiB7XG4gIGNvbnN0IGtleSA9IGF3YWl0IGdldEltcG9ydGVkS2V5KHByaXZhdGVLZXksIFwiZGVjcnlwdFwiKTtcbiAgcmV0dXJuIHdpbmRvdy5jcnlwdG8uc3VidGxlLmRlY3J5cHQoXG4gICAge1xuICAgICAgbmFtZTogXCJBRVMtR0NNXCIsXG4gICAgICBpdixcbiAgICB9LFxuICAgIGtleSxcbiAgICBlbmNyeXB0ZWQsXG4gICk7XG59O1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///../../data/encryption.ts\n");
|
|
29
|
+
|
|
30
|
+
/***/ }),
|
|
31
|
+
|
|
32
|
+
/***/ "../../data/image.ts":
|
|
33
|
+
/*!***************************!*\
|
|
34
|
+
!*** ../../data/image.ts ***!
|
|
35
|
+
\***************************/
|
|
36
|
+
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
37
|
+
|
|
38
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"getTEXtChunk\": () => (/* binding */ getTEXtChunk),\n/* harmony export */ \"encodePngMetadata\": () => (/* binding */ encodePngMetadata),\n/* harmony export */ \"decodePngMetadata\": () => (/* binding */ decodePngMetadata),\n/* harmony export */ \"encodeSvgMetadata\": () => (/* binding */ encodeSvgMetadata),\n/* harmony export */ \"decodeSvgMetadata\": () => (/* binding */ decodeSvgMetadata)\n/* harmony export */ });\n/* harmony import */ var png_chunks_extract__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! png-chunks-extract */ \"../../../node_modules/png-chunks-extract/index.js\");\n/* harmony import */ var png_chunks_extract__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(png_chunks_extract__WEBPACK_IMPORTED_MODULE_0__);\n/* harmony import */ var png_chunk_text__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! png-chunk-text */ \"../../../node_modules/png-chunk-text/index.js\");\n/* harmony import */ var png_chunks_encode__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! png-chunks-encode */ \"../../../node_modules/png-chunks-encode/index.js\");\n/* harmony import */ var png_chunks_encode__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(png_chunks_encode__WEBPACK_IMPORTED_MODULE_2__);\n/* harmony import */ var _encode__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./encode */ \"../../data/encode.ts\");\n/* harmony import */ var _constants__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../constants */ \"../../constants.ts\");\nvar __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n};\r\n\r\n\r\n\r\n\r\n\r\n// -----------------------------------------------------------------------------\r\n// PNG\r\n// -----------------------------------------------------------------------------\r\nconst blobToArrayBuffer = (blob) => {\r\n if (\"arrayBuffer\" in blob) {\r\n return blob.arrayBuffer();\r\n }\r\n // Safari\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.onload = (event) => {\r\n var _a;\r\n if (!((_a = event.target) === null || _a === void 0 ? void 0 : _a.result)) {\r\n return reject(new Error(\"couldn't convert blob to ArrayBuffer\"));\r\n }\r\n resolve(event.target.result);\r\n };\r\n reader.readAsArrayBuffer(blob);\r\n });\r\n};\r\nconst getTEXtChunk = (blob) => __awaiter(void 0, void 0, void 0, function* () {\r\n const chunks = png_chunks_extract__WEBPACK_IMPORTED_MODULE_0___default()(new Uint8Array(yield blobToArrayBuffer(blob)));\r\n const metadataChunk = chunks.find((chunk) => chunk.name === \"tEXt\");\r\n if (metadataChunk) {\r\n return png_chunk_text__WEBPACK_IMPORTED_MODULE_1__.decode(metadataChunk.data);\r\n }\r\n return null;\r\n});\r\nconst encodePngMetadata = ({ blob, metadata, }) => __awaiter(void 0, void 0, void 0, function* () {\r\n const chunks = png_chunks_extract__WEBPACK_IMPORTED_MODULE_0___default()(new Uint8Array(yield blobToArrayBuffer(blob)));\r\n const metadataChunk = png_chunk_text__WEBPACK_IMPORTED_MODULE_1__.encode(_constants__WEBPACK_IMPORTED_MODULE_4__.MIME_TYPES.excalidraw, JSON.stringify(yield (0,_encode__WEBPACK_IMPORTED_MODULE_3__.encode)({\r\n text: metadata,\r\n compress: true,\r\n })));\r\n // insert metadata before last chunk (iEND)\r\n chunks.splice(-1, 0, metadataChunk);\r\n return new Blob([png_chunks_encode__WEBPACK_IMPORTED_MODULE_2___default()(chunks)], { type: _constants__WEBPACK_IMPORTED_MODULE_4__.MIME_TYPES.png });\r\n});\r\nconst decodePngMetadata = (blob) => __awaiter(void 0, void 0, void 0, function* () {\r\n const metadata = yield getTEXtChunk(blob);\r\n if ((metadata === null || metadata === void 0 ? void 0 : metadata.keyword) === _constants__WEBPACK_IMPORTED_MODULE_4__.MIME_TYPES.excalidraw) {\r\n try {\r\n const encodedData = JSON.parse(metadata.text);\r\n if (!(\"encoded\" in encodedData)) {\r\n // legacy, un-encoded scene JSON\r\n if (\"type\" in encodedData &&\r\n encodedData.type === _constants__WEBPACK_IMPORTED_MODULE_4__.EXPORT_DATA_TYPES.excalidraw) {\r\n return metadata.text;\r\n }\r\n throw new Error(\"FAILED\");\r\n }\r\n return yield (0,_encode__WEBPACK_IMPORTED_MODULE_3__.decode)(encodedData);\r\n }\r\n catch (error) {\r\n console.error(error);\r\n throw new Error(\"FAILED\");\r\n }\r\n }\r\n throw new Error(\"INVALID\");\r\n});\r\n// -----------------------------------------------------------------------------\r\n// SVG\r\n// -----------------------------------------------------------------------------\r\nconst encodeSvgMetadata = ({ text }) => __awaiter(void 0, void 0, void 0, function* () {\r\n const base64 = yield (0,_encode__WEBPACK_IMPORTED_MODULE_3__.stringToBase64)(JSON.stringify(yield (0,_encode__WEBPACK_IMPORTED_MODULE_3__.encode)({ text })), true /* is already byte string */);\r\n let metadata = \"\";\r\n metadata += `<!-- payload-type:${_constants__WEBPACK_IMPORTED_MODULE_4__.MIME_TYPES.excalidraw} -->`;\r\n metadata += `<!-- payload-version:2 -->`;\r\n metadata += \"<!-- payload-start -->\";\r\n metadata += base64;\r\n metadata += \"<!-- payload-end -->\";\r\n return metadata;\r\n});\r\nconst decodeSvgMetadata = ({ svg }) => __awaiter(void 0, void 0, void 0, function* () {\r\n if (svg.includes(`payload-type:${_constants__WEBPACK_IMPORTED_MODULE_4__.MIME_TYPES.excalidraw}`)) {\r\n const match = svg.match(/<!-- payload-start -->(.+?)<!-- payload-end -->/);\r\n if (!match) {\r\n throw new Error(\"INVALID\");\r\n }\r\n const versionMatch = svg.match(/<!-- payload-version:(\\d+) -->/);\r\n const version = (versionMatch === null || versionMatch === void 0 ? void 0 : versionMatch[1]) || \"1\";\r\n const isByteString = version !== \"1\";\r\n try {\r\n const json = yield (0,_encode__WEBPACK_IMPORTED_MODULE_3__.base64ToString)(match[1], isByteString);\r\n const encodedData = JSON.parse(json);\r\n if (!(\"encoded\" in encodedData)) {\r\n // legacy, un-encoded scene JSON\r\n if (\"type\" in encodedData &&\r\n encodedData.type === _constants__WEBPACK_IMPORTED_MODULE_4__.EXPORT_DATA_TYPES.excalidraw) {\r\n return json;\r\n }\r\n throw new Error(\"FAILED\");\r\n }\r\n return yield (0,_encode__WEBPACK_IMPORTED_MODULE_3__.decode)(encodedData);\r\n }\r\n catch (error) {\r\n console.error(error);\r\n throw new Error(\"FAILED\");\r\n }\r\n }\r\n throw new Error(\"INVALID\");\r\n});\r\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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Ly8uLi8uLi9kYXRhL2ltYWdlLnRzPzI1MDEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGRlY29kZVBuZyBmcm9tIFwicG5nLWNodW5rcy1leHRyYWN0XCI7XG5pbXBvcnQgdEVYdCBmcm9tIFwicG5nLWNodW5rLXRleHRcIjtcbmltcG9ydCBlbmNvZGVQbmcgZnJvbSBcInBuZy1jaHVua3MtZW5jb2RlXCI7XG5pbXBvcnQgeyBzdHJpbmdUb0Jhc2U2NCwgZW5jb2RlLCBkZWNvZGUsIGJhc2U2NFRvU3RyaW5nIH0gZnJvbSBcIi4vZW5jb2RlXCI7XG5pbXBvcnQgeyBFWFBPUlRfREFUQV9UWVBFUywgTUlNRV9UWVBFUyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFBOR1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuY29uc3QgYmxvYlRvQXJyYXlCdWZmZXIgPSAoYmxvYjogQmxvYik6IFByb21pc2U8QXJyYXlCdWZmZXI+ID0+IHtcbiAgaWYgKFwiYXJyYXlCdWZmZXJcIiBpbiBibG9iKSB7XG4gICAgcmV0dXJuIGJsb2IuYXJyYXlCdWZmZXIoKTtcbiAgfVxuICAvLyBTYWZhcmlcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHJlYWRlci5vbmxvYWQgPSAoZXZlbnQpID0+IHtcbiAgICAgIGlmICghZXZlbnQudGFyZ2V0Py5yZXN1bHQpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoXCJjb3VsZG4ndCBjb252ZXJ0IGJsb2IgdG8gQXJyYXlCdWZmZXJcIikpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShldmVudC50YXJnZXQucmVzdWx0IGFzIEFycmF5QnVmZmVyKTtcbiAgICB9O1xuICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VEVYdENodW5rID0gYXN5bmMgKFxuICBibG9iOiBCbG9iLFxuKTogUHJvbWlzZTx7IGtleXdvcmQ6IHN0cmluZzsgdGV4dDogc3RyaW5nIH0gfCBudWxsPiA9PiB7XG4gIGNvbnN0IGNodW5rcyA9IGRlY29kZVBuZyhuZXcgVWludDhBcnJheShhd2FpdCBibG9iVG9BcnJheUJ1ZmZlcihibG9iKSkpO1xuICBjb25zdCBtZXRhZGF0YUNodW5rID0gY2h1bmtzLmZpbmQoKGNodW5rKSA9PiBjaHVuay5uYW1lID09PSBcInRFWHRcIik7XG4gIGlmIChtZXRhZGF0YUNodW5rKSB7XG4gICAgcmV0dXJuIHRFWHQuZGVjb2RlKG1ldGFkYXRhQ2h1bmsuZGF0YSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZW5jb2RlUG5nTWV0YWRhdGEgPSBhc3luYyAoe1xuICBibG9iLFxuICBtZXRhZGF0YSxcbn06IHtcbiAgYmxvYjogQmxvYjtcbiAgbWV0YWRhdGE6IHN0cmluZztcbn0pID0+IHtcbiAgY29uc3QgY2h1bmtzID0gZGVjb2RlUG5nKG5ldyBVaW50OEFycmF5KGF3YWl0IGJsb2JUb0FycmF5QnVmZmVyKGJsb2IpKSk7XG5cbiAgY29uc3QgbWV0YWRhdGFDaHVuayA9IHRFWHQuZW5jb2RlKFxuICAgIE1JTUVfVFlQRVMuZXhjYWxpZHJhdyxcbiAgICBKU09OLnN0cmluZ2lmeShcbiAgICAgIGF3YWl0IGVuY29kZSh7XG4gICAgICAgIHRleHQ6IG1ldGFkYXRhLFxuICAgICAgICBjb21wcmVzczogdHJ1ZSxcbiAgICAgIH0pLFxuICAgICksXG4gICk7XG4gIC8vIGluc2VydCBtZXRhZGF0YSBiZWZvcmUgbGFzdCBjaHVuayAoaUVORClcbiAgY2h1bmtzLnNwbGljZSgtMSwgMCwgbWV0YWRhdGFDaHVuayk7XG5cbiAgcmV0dXJuIG5ldyBCbG9iKFtlbmNvZGVQbmcoY2h1bmtzKV0sIHsgdHlwZTogTUlNRV9UWVBFUy5wbmcgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVjb2RlUG5nTWV0YWRhdGEgPSBhc3luYyAoYmxvYjogQmxvYikgPT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IGF3YWl0IGdldFRFWHRDaHVuayhibG9iKTtcbiAgaWYgKG1ldGFkYXRhPy5rZXl3b3JkID09PSBNSU1FX1RZUEVTLmV4Y2FsaWRyYXcpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZW5jb2RlZERhdGEgPSBKU09OLnBhcnNlKG1ldGFkYXRhLnRleHQpO1xuICAgICAgaWYgKCEoXCJlbmNvZGVkXCIgaW4gZW5jb2RlZERhdGEpKSB7XG4gICAgICAgIC8vIGxlZ2FjeSwgdW4tZW5jb2RlZCBzY2VuZSBKU09OXG4gICAgICAgIGlmIChcbiAgICAgICAgICBcInR5cGVcIiBpbiBlbmNvZGVkRGF0YSAmJlxuICAgICAgICAgIGVuY29kZWREYXRhLnR5cGUgPT09IEVYUE9SVF9EQVRBX1RZUEVTLmV4Y2FsaWRyYXdcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIG1ldGFkYXRhLnRleHQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRkFJTEVEXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGF3YWl0IGRlY29kZShlbmNvZGVkRGF0YSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRkFJTEVEXCIpO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJJTlZBTElEXCIpO1xufTtcblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFNWR1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuZXhwb3J0IGNvbnN0IGVuY29kZVN2Z01ldGFkYXRhID0gYXN5bmMgKHsgdGV4dCB9OiB7IHRleHQ6IHN0cmluZyB9KSA9PiB7XG4gIGNvbnN0IGJhc2U2NCA9IGF3YWl0IHN0cmluZ1RvQmFzZTY0KFxuICAgIEpTT04uc3RyaW5naWZ5KGF3YWl0IGVuY29kZSh7IHRleHQgfSkpLFxuICAgIHRydWUgLyogaXMgYWxyZWFkeSBieXRlIHN0cmluZyAqLyxcbiAgKTtcblxuICBsZXQgbWV0YWRhdGEgPSBcIlwiO1xuICBtZXRhZGF0YSArPSBgPCEtLSBwYXlsb2FkLXR5cGU6JHtNSU1FX1RZUEVTLmV4Y2FsaWRyYXd9IC0tPmA7XG4gIG1ldGFkYXRhICs9IGA8IS0tIHBheWxvYWQtdmVyc2lvbjoyIC0tPmA7XG4gIG1ldGFkYXRhICs9IFwiPCEtLSBwYXlsb2FkLXN0YXJ0IC0tPlwiO1xuICBtZXRhZGF0YSArPSBiYXNlNjQ7XG4gIG1ldGFkYXRhICs9IFwiPCEtLSBwYXlsb2FkLWVuZCAtLT5cIjtcbiAgcmV0dXJuIG1ldGFkYXRhO1xufTtcblxuZXhwb3J0IGNvbnN0IGRlY29kZVN2Z01ldGFkYXRhID0gYXN5bmMgKHsgc3ZnIH06IHsgc3ZnOiBzdHJpbmcgfSkgPT4ge1xuICBpZiAoc3ZnLmluY2x1ZGVzKGBwYXlsb2FkLXR5cGU6JHtNSU1FX1RZUEVTLmV4Y2FsaWRyYXd9YCkpIHtcbiAgICBjb25zdCBtYXRjaCA9IHN2Zy5tYXRjaCgvPCEtLSBwYXlsb2FkLXN0YXJ0IC0tPiguKz8pPCEtLSBwYXlsb2FkLWVuZCAtLT4vKTtcbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJTlZBTElEXCIpO1xuICAgIH1cbiAgICBjb25zdCB2ZXJzaW9uTWF0Y2ggPSBzdmcubWF0Y2goLzwhLS0gcGF5bG9hZC12ZXJzaW9uOihcXGQrKSAtLT4vKTtcbiAgICBjb25zdCB2ZXJzaW9uID0gdmVyc2lvbk1hdGNoPy5bMV0gfHwgXCIxXCI7XG4gICAgY29uc3QgaXNCeXRlU3RyaW5nID0gdmVyc2lvbiAhPT0gXCIxXCI7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QganNvbiA9IGF3YWl0IGJhc2U2NFRvU3RyaW5nKG1hdGNoWzFdLCBpc0J5dGVTdHJpbmcpO1xuICAgICAgY29uc3QgZW5jb2RlZERhdGEgPSBKU09OLnBhcnNlKGpzb24pO1xuICAgICAgaWYgKCEoXCJlbmNvZGVkXCIgaW4gZW5jb2RlZERhdGEpKSB7XG4gICAgICAgIC8vIGxlZ2FjeSwgdW4tZW5jb2RlZCBzY2VuZSBKU09OXG4gICAgICAgIGlmIChcbiAgICAgICAgICBcInR5cGVcIiBpbiBlbmNvZGVkRGF0YSAmJlxuICAgICAgICAgIGVuY29kZWREYXRhLnR5cGUgPT09IEVYUE9SVF9EQVRBX1RZUEVTLmV4Y2FsaWRyYXdcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGpzb247XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRkFJTEVEXCIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGF3YWl0IGRlY29kZShlbmNvZGVkRGF0YSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRkFJTEVEXCIpO1xuICAgIH1cbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXCJJTlZBTElEXCIpO1xufTtcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///../../data/image.ts\n");
|
|
39
|
+
|
|
40
|
+
/***/ })
|
|
41
|
+
|
|
42
|
+
}]);
|